<?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>154352</bug_id>
          
          <creation_ts>2016-02-17 12:28:13 -0800</creation_ts>
          <short_desc>Extend HashCountedSet with a method to efficiently set the count of an entry</short_desc>
          <delta_ts>2016-02-18 23:42:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154438</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165677</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-17 12:28:13 -0800</bug_when>
    <thetext>When working on Bug 153575, I had to add some silly code like the following:

        // FIXME: Create a HashCountedSet method to do this efficiently
        for (unsigned i = 0; i &lt; count; ++i)
            hashCountedSet.add(origin);

This bug adds a method to support seeding the HashCountedSet with the appropriate count.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165748</commentid>
    <comment_count>1</comment_count>
      <attachid>271590</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-17 14:20:14 -0800</bug_when>
    <thetext>Created attachment 271590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165807</commentid>
    <comment_count>2</comment_count>
      <attachid>271590</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-17 16:47:46 -0800</bug_when>
    <thetext>Comment on attachment 271590
Patch

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

&gt; Source/WTF/wtf/HashCountedSet.h:166
&gt; +    inline typename HashCountedSet&lt;Value, HashFunctions, Traits&gt;::AddResult HashCountedSet&lt;Value, HashFunctions, Traits&gt;::addWithInitialCount(const ValueType&amp; value, unsigned initialCount)
&gt; +    {
&gt; +        return m_impl.add(value, initialCount);
&gt; +    }

This is slightly wrong -- and also a bit surprising.

If the set already contains the object, this will do nothing.

You should either call this function set, and have it call through to set, or you should call it add, and have it add 0, and then increment the resulting iterator by count, similar to the code above that adds 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165809</commentid>
    <comment_count>3</comment_count>
      <attachid>271590</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-17 16:57:55 -0800</bug_when>
    <thetext>Comment on attachment 271590
Patch

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

It&apos;s also missing tests. I&apos;m fixing both issues.

&gt;&gt; Source/WTF/wtf/HashCountedSet.h:166
&gt;&gt; +    }
&gt; 
&gt; This is slightly wrong -- and also a bit surprising.
&gt; 
&gt; If the set already contains the object, this will do nothing.
&gt; 
&gt; You should either call this function set, and have it call through to set, or you should call it add, and have it add 0, and then increment the resulting iterator by count, similar to the code above that adds 1.

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165924</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-17 22:17:36 -0800</bug_when>
    <thetext>While building a test suite for this class, I noticed that many of the data types accepted by HashMap are improperly treated by this wrapper class. I&apos;ll update this class to provide move operators and an initializer list constructor to support the same features as its core implementation class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166070</commentid>
    <comment_count>5</comment_count>
      <attachid>271667</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-18 10:22:52 -0800</bug_when>
    <thetext>Created attachment 271667
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166071</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-18 10:24:38 -0800</bug_when>
    <thetext>Attachment 271667 did not pass style-queue:


ERROR: Source/WTF/wtf/HashCountedSet.h:289:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashCountedSet.h:296:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashCountedSet.h:303:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashCountedSet.h:310:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashCountedSet.h:317:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 5 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166072</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-18 10:25:40 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 271667 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/WTF/wtf/HashCountedSet.h:289:  This { should be at the end of
&gt; the previous line  [whitespace/braces] [4]
&gt; ERROR: Source/WTF/wtf/HashCountedSet.h:296:  This { should be at the end of
&gt; the previous line  [whitespace/braces] [4]
&gt; ERROR: Source/WTF/wtf/HashCountedSet.h:303:  This { should be at the end of
&gt; the previous line  [whitespace/braces] [4]
&gt; ERROR: Source/WTF/wtf/HashCountedSet.h:310:  This { should be at the end of
&gt; the previous line  [whitespace/braces] [4]
&gt; ERROR: Source/WTF/wtf/HashCountedSet.h:317:  This { should be at the end of
&gt; the previous line  [whitespace/braces] [4]
&gt; Total errors found: 5 in 8 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

These template declarations match the style of the rest of the file. I&apos;m not sure if we want to use a different style for just those lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166236</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-18 16:01:30 -0800</bug_when>
    <thetext>It looks like Visual Studio doesn&apos;t like the &apos;template&apos; syntax. I&apos;ve got a build fix on Windows, which I need to re-test on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166238</commentid>
    <comment_count>9</comment_count>
      <attachid>271714</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-18 16:03:58 -0800</bug_when>
    <thetext>Created attachment 271714
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166240</commentid>
    <comment_count>10</comment_count>
      <attachid>271715</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-18 16:06:20 -0800</bug_when>
    <thetext>Created attachment 271715
Patch (With Windows fixes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166241</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-18 16:07:19 -0800</bug_when>
    <thetext>Attachment 271715 did not pass style-queue:


ERROR: Source/WTF/wtf/HashCountedSet.h:289:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashCountedSet.h:296:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashCountedSet.h:303:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashCountedSet.h:310:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashCountedSet.h:317:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 5 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166244</commentid>
    <comment_count>12</comment_count>
      <attachid>271715</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-18 16:17:48 -0800</bug_when>
    <thetext>Comment on attachment 271715
Patch (With Windows fixes)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166267</commentid>
    <comment_count>13</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-18 17:14:02 -0800</bug_when>
    <thetext>Committed r196791: &lt;http://trac.webkit.org/changeset/196791&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166321</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-18 22:34:56 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Committed r196791: &lt;http://trac.webkit.org/changeset/196791&gt;

It broke tge Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166328</commentid>
    <comment_count>15</comment_count>
      <attachid>271715</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-02-18 22:48:36 -0800</bug_when>
    <thetext>Comment on attachment 271715
Patch (With Windows fixes)

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

&gt; Source/WTF/wtf/HashCountedSet.h:290
&gt; +        return m_impl.template find(value);

Visual Studio doesn&apos;t like this syntax.

&gt; Source/WTF/wtf/HashCountedSet.h:321
&gt; -} // namespace khtml
&gt; +} // namespace WTF

The last namespace khtml comment is gone :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166331</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-18 22:50:46 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 154438</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166342</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-18 23:16:13 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 271715 [details]
&gt; Patch (With Windows fixes)
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=271715&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/HashCountedSet.h:290
&gt; &gt; +        return m_impl.template find(value);
&gt; 
&gt; Visual Studio doesn&apos;t like this syntax.

Ugh! I had this fix on my Windows machine, but I landed from my Mac. &gt;:-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166347</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-18 23:22:49 -0800</bug_when>
    <thetext>Committed r196802: &lt;http://trac.webkit.org/changeset/196802&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166351</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-18 23:32:05 -0800</bug_when>
    <thetext>Note: This might need a clean build. It looks like the &quot;template&quot; error was showing after the rollout, so it&apos;s possible that my recent fix will also result in at least one &quot;stale&quot; build failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166355</commentid>
    <comment_count>20</comment_count>
      <attachid>271715</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-02-18 23:42:01 -0800</bug_when>
    <thetext>Comment on attachment 271715
Patch (With Windows fixes)

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

&gt;&gt; Source/WTF/wtf/HashCountedSet.h:321
&gt;&gt; +} // namespace WTF
&gt; 
&gt; The last namespace khtml comment is gone :(

!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271590</attachid>
            <date>2016-02-17 14:20:14 -0800</date>
            <delta_ts>2016-02-18 10:22:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>154352.patch</filename>
            <type>text/plain</type>
            <size>3348</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTY3MTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTAyLTE3ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZCBIYXNoQ291bnRlZFNldCB3aXRoIGEg
bWV0aG9kIHRvIGVmZmljaWVudGx5IHNldCB0aGUgY291bnQgb2YgYW4gZW50cnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hDb3VudGVk
U2V0Lmg6CisgICAgICAgIChXVEY6OlRyYWl0cz46OmFkZFdpdGhJbml0aWFsQ291bnQpOiBBZGRl
ZC4KKwogMjAxNi0wMi0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIEZUTF9VU0VTX0IzIHNob3VsZCBiZSB1bmNvbmRpdGlvbmFsbHkgdHJ1ZQpJbmRleDogU291
cmNlL1dURi93dGYvSGFzaENvdW50ZWRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9IYXNoQ291bnRlZFNldC5oCShyZXZpc2lvbiAxOTY3MTApCisrKyBTb3VyY2UvV1RGL3d0Zi9I
YXNoQ291bnRlZFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw5IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluY2x1ZGVzIGJvdGggYW4gaXRl
cmF0b3IgdG8gdGhlIHZhbHVlJ3MgbG9jYXRpb24sCiAgICAgICAgIC8vIGFuZCBhbiBpc05ld0Vu
dHJ5IGJvb2wgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBpdCBpcyBhIG5ldyBvciBleGlzdGluZyBl
bnRyeS4KICAgICAgICAgQWRkUmVzdWx0IGFkZChjb25zdCBWYWx1ZVR5cGUmKTsKLSAgICAgICAg
CisKKyAgICAgICAgQWRkUmVzdWx0IGFkZFdpdGhJbml0aWFsQ291bnQoY29uc3QgVmFsdWVUeXBl
JiwgdW5zaWduZWQpOworCiAgICAgICAgIC8vIERlY3JlbWVudHMgdGhlIGNvdW50IG9mIHRoZSB2
YWx1ZSwgYW5kIHJlbW92ZXMgaXQgaWYgY291bnQgZ29lcyBkb3duIHRvIHplcm8uCiAgICAgICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgcmVtb3ZlZC4KICAgICAgICAgYm9vbCBy
ZW1vdmUoY29uc3QgVmFsdWVUeXBlJik7CkBAIC0xNTgsNiArMTYwLDEyIEBAIG5hbWVzcGFjZSBX
VEYgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGluZSB0eXBlbmFtZSBIYXNo
Q291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6QWRkUmVzdWx0IEhhc2hD
b3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjphZGRXaXRoSW5pdGlhbENv
dW50KGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUsIHVuc2lnbmVkIGluaXRpYWxDb3VudCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2ltcGwuYWRkKHZhbHVlLCBpbml0aWFsQ291bnQpOworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzPgogICAgIGlubGluZSBib29sIEhhc2hDb3VudGVkU2V0PFZhbHVl
LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpyZW1vdmUoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTk2NzIyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDItMTcgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kIEhhc2hDb3VudGVkU2V0IHdpdGggYSBt
ZXRob2QgdG8gZWZmaWNpZW50bHkgc2V0IHRoZSBjb3VudCBvZiBhbiBlbnRyeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzOiBObyBj
aGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVIYXNoQ291bnRlZFNldCk6IFVwZGF0
ZSB0byB1c2UgbmV3IEhhc2hDb3VudGVkU2V0OjphZGRXaXRoSW5pdGlhbENvdW50IG1ldGhvZC4K
KwogMjAxNi0wMi0xNyAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBJbXBsZW1lbnQgUHJveHkgW1tHZXRdXQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkocmV2aXNpb24gMTk2NzEwKQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjQsMTAgKzEyNCw4IEBAIHN0YXRpYyB2b2lkIGRlY29kZUhhc2hDb3VudGVkU2V0
KEtleWVkRGUKICAgICAgICAgdW5zaWduZWQgY291bnQ7CiAgICAgICAgIGlmICghZGVjb2Rlcklu
bmVyLmRlY29kZVVJbnQzMigiY291bnQiLCBjb3VudCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogQ3JlYXRlIGEgSGFzaENvdW50ZWRTZXQg
bWV0aG9kIHRvIGRvIHRoaXMgZWZmaWNpZW50bHkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBoYXNoQ291bnRlZFNldC5hZGQob3JpZ2lu
KTsKKworICAgICAgICBoYXNoQ291bnRlZFNldC5hZGRXaXRoSW5pdGlhbENvdW50KG9yaWdpbiwg
Y291bnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271667</attachid>
            <date>2016-02-18 10:22:52 -0800</date>
            <delta_ts>2016-02-18 16:03:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154352-20160218102232.patch</filename>
            <type>text/plain</type>
            <size>30071</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTY3NjMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE2LTAyLTE4ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZCBIYXNoQ291bnRlZFNldCB3aXRoIGEg
bWV0aG9kIHRvIGVmZmljaWVudGx5IHNldCB0aGUgY291bnQgb2YgYW4gZW50cnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RlZCBieSBuZXcgVGVz
dFdlYktpdEFQSSB0ZXN0cy4KKworICAgICAgICBVcGRhdGUgdGhlIEhhc2hDb3VudGVkU2V0IGNs
YXNzIHdpdGggYSBuZXcgJ2FkZCcgbWV0aG9kIHRvIHN1cHBvcnQgZWZmaWNpZW50IGluaXRpYWxp
emF0aW9uIG9mCisgICAgICAgIHRoZSBjb3VudCBvZiBhIGdpdmVuIGtleS4gQWxzbyBwcm92aWRl
IG1vdmUgYW5kIHBvaW50ZXIgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIHRvIGV4cGFuZCB0aGUK
KyAgICAgICAgdHlwZXMgb2YgZGF0YSB0aGF0IGNhbiBiZSB1c2VkIGFzICdrZXlzJyBpbiB0aGUg
SGFzaENvdW50ZWRTZXQgdG8gbWF0Y2ggdGhlIHVuZGVybHlpbmcgSGFzaE1hcAorICAgICAgICBp
bXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHd0Zi9IYXNoQ291bnRlZFNldC5oOgorICAgICAg
ICAoV1RGOjpUcmFpdHM+OjphZGQpOiBBZGRlZCBuZXcgb3ZlcmxvYWQgc3VwcG9ydGluZyBhIHN1
cHBsaWVkIGNvdW50LgorCiAyMDE2LTAyLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIExMVk0gZGVwZW5kZW5jaWVzIGZyb20gV2ViS2l0CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0hhc2hDb3VudGVkU2V0LmgJKHJldmlzaW9uIDE5Njc2MykKKysrIFNvdXJjZS9XVEYv
d3RmL0hhc2hDb3VudGVkU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgV1RGX0hhc2hDb3VudGVkU2V0X2gKICNkZWZpbmUg
V1RGX0hhc2hDb3VudGVkU2V0X2gKIAorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDYgKzM4LDIyIEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIEltcGxUeXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBJbXBsVHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSW1wbFR5cGU6OkFkZFJlc3VsdCBBZGRSZXN1
bHQ7CisKKyAgICAgICAgSGFzaENvdW50ZWRTZXQoKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBIYXNoQ291bnRlZFNldChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dHlwZW5hbWUgSW1w
bFR5cGU6OktleVZhbHVlUGFpclR5cGU+IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBpbml0aWFsaXplckxpc3Qp
CisgICAgICAgICAgICAgICAgYWRkKGtleVZhbHVlUGFpci5rZXksIGtleVZhbHVlUGFpci52YWx1
ZSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNoQ291bnRlZFNldChzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8dHlwZW5hbWUgSW1wbFR5cGU6OktleVR5cGU+IGluaXRpYWxpemVyTGlzdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGluaXRpYWxpemVyTGlz
dCkKKyAgICAgICAgICAgICAgICBhZGQodmFsdWUpOworICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB2b2lkIHN3YXAoSGFzaENvdW50ZWRTZXQmKTsKICAgICAgICAgCkBAIC01OSw3ICs3Niwx
MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpbmNsdWRl
cyBib3RoIGFuIGl0ZXJhdG9yIHRvIHRoZSB2YWx1ZSdzIGxvY2F0aW9uLAogICAgICAgICAvLyBh
bmQgYW4gaXNOZXdFbnRyeSBib29sIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgaXQgaXMgYSBuZXcg
b3IgZXhpc3RpbmcgZW50cnkuCiAgICAgICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVUeXBl
Jik7Ci0gICAgICAgIAorICAgICAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmKTsKKworICAg
ICAgICAvLyBJbmNyZW1lbnRzIHRoZSBjb3VudCBvZiBhIHZhbHVlIGJ5IHRoZSBwYXNzZWQgYW1v
dW50LgorICAgICAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYsIHVuc2lnbmVkKTsK
KyAgICAgICAgQWRkUmVzdWx0IGFkZChWYWx1ZVR5cGUmJiwgdW5zaWduZWQpOworCiAgICAgICAg
IC8vIERlY3JlbWVudHMgdGhlIGNvdW50IG9mIHRoZSB2YWx1ZSwgYW5kIHJlbW92ZXMgaXQgaWYg
Y291bnQgZ29lcyBkb3duIHRvIHplcm8uCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dmFsdWUgaXMgcmVtb3ZlZC4KICAgICAgICAgYm9vbCByZW1vdmUoY29uc3QgVmFsdWVUeXBlJik7
CkBAIC03MywxMCArOTUsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIENsZWFycyB0
aGUgd2hvbGUgc2V0LgogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKKyAgICAgICAgLy8gT3Zlcmxv
YWRzIGZvciBzbWFydCBwb2ludGVyIGtleXMgdGhhdCB0YWtlIHRoZSByYXcgcG9pbnRlciB0eXBl
IGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5
cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRv
cj46OnR5cGUgZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlIGZpbmQodHlwZW5h
bWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxW
Pjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6
UHRyVHlwZSkgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5cGU+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCB1bnNpZ25lZD46
OnR5cGUgY291bnQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKSBjb25zdDsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIHJlbW92ZSh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgSW1wbFR5
cGUgbV9pbXBsOwogICAgIH07CiAKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CiAgICAgaW5saW5lIHZvaWQgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnN3YXAoSGFzaENvdW50
ZWRTZXQmIG90aGVyKQogICAgIHsKQEAgLTE1Niw2ICsxODYsMzAgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGluZSB0eXBlbmFtZSBIYXNoQ291bnRl
ZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6QWRkUmVzdWx0IEhhc2hDb3VudGVk
U2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjphZGQoVmFsdWVUeXBlJiYgdmFsdWUp
CisgICAgeworICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZChzdGQ6OmZvcndh
cmQ8VmFsdWU+KHZhbHVlKSwgMCk7CisgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGlu
ZSB0eXBlbmFtZSBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6
QWRkUmVzdWx0IEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojph
ZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSwgdW5zaWduZWQgY291bnQpCisgICAgeworICAgICAg
ICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZCh2YWx1ZSwgMCk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hDb3VudGVkU2V0
PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpBZGRSZXN1bHQgSGFzaENvdW50ZWRTZXQ8
VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSwgdW5z
aWduZWQgY291bnQpCisgICAgeworICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFk
ZChzdGQ6OmZvcndhcmQ8VmFsdWU+KHZhbHVlKSwgMCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgKz0gY291bnQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHM+CiAgICAgaW5saW5lIGJvb2wgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQpAQCAtMjI5
LDggKzI4Myw0MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3RvcltpXSA9ICgq
aXQpLmtleTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+
CisgICAgaW5saW5lIGF1dG8gSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0
eXBlCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQodmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+CisgICAg
aW5saW5lIGF1dG8gSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0
b3I+Ojp0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQodmFs
dWUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+
CisgICAgaW5saW5lIGF1dG8gSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkg
Y29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJv
b2w+Ojp0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5z
KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWPgorICAgIGlubGluZSBhdXRvIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+Ojpjb3VudCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUp
IGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCB1
bnNpZ25lZD46OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZ2V0
KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWPgorICAgIGlubGluZSBhdXRvIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVl
KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46
OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOworICAgIH0K
IAotfSAvLyBuYW1lc3BhY2Uga2h0bWwKK30gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6
Okhhc2hDb3VudGVkU2V0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTY3NjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxNi0wMi0xOCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBFeHRlbmQgSGFzaENvdW50ZWRTZXQgd2l0aCBhIG1ldGhvZCB0byBlZmZpY2llbnRseSBzZXQg
dGhlIGNvdW50IG9mIGFuIGVudHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTQzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0ZWQgYnkgbmV3IFRlc3RXZWJLaXRBUEkgdGVzdHMuCisKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZWNvZGVIYXNoQ291bnRlZFNldCk6IFVwZGF0ZSB0byB1c2UgbmV3IEhhc2hDb3VudGVkU2V0
OjphZGQgbWV0aG9kLgorCiAyMDE2LTAyLTE4ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHJlZHVuZGFudCBBU1NFUlRfV0lUSF9NRVNTQUdFX1VO
VVNFRCgpIGZyb20gU09GVF9MSU5LX0ZSQU1FV09SS19GT1JfU09VUkNFKCkgbWFjcm8KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJ
KHJldmlzaW9uIDE5Njc2MykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDEwICsxMjQsOCBAQCBzdGF0aWMg
dm9pZCBkZWNvZGVIYXNoQ291bnRlZFNldChLZXllZERlCiAgICAgICAgIHVuc2lnbmVkIGNvdW50
OwogICAgICAgICBpZiAoIWRlY29kZXJJbm5lci5kZWNvZGVVSW50MzIoImNvdW50IiwgY291bnQp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6
IENyZWF0ZSBhIEhhc2hDb3VudGVkU2V0IG1ldGhvZCB0byBkbyB0aGlzIGVmZmljaWVudGx5Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAg
aGFzaENvdW50ZWRTZXQuYWRkKG9yaWdpbik7CisKKyAgICAgICAgaGFzaENvdW50ZWRTZXQuYWRk
KG9yaWdpbiwgY291bnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKIH0KSW5kZXg6
IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE5Njc2MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDE2LTAyLTE4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIEV4dGVuZCBIYXNoQ291bnRlZFNldCB3aXRoIGEgbWV0aG9kIHRvIGVmZmljaWVudGx5
IHNldCB0aGUgY291bnQgb2YgYW4gZW50cnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NDM1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dDogQWRkIG5l
dyBIYXNoQ291bnRlZFNldCB0ZXN0IGZpbGVzLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoQ291bnRlZFNldC5jcHA6IEFkZGVkLgorCiAyMDE2
LTAyLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IHJlbWFpbmluZyByZWZlcmVuY2VzIHRvIExMVk0sIGFuZCBtYWtlIHN1cmUgY29tbWVudHMgcmVm
ZXIgdG8gdGhlIGJhY2tlbmQgYXMgIkIzIiBub3QgIkxMVk0iCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5Njc2MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgc2V0KFRlc3RX
VEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5j
cHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvRGVxdWUuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0Z1bmN0aW9uYWwuY3BwCisgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV1RGL0hhc2hDb3VudGVkU2V0LmNwcAogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoTWFwLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9
L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dU
Ri9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE5Njc2MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3
IEBACiAJCTc2RTE4MkREMTU0NzU2OTEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NkUxODJEQzE1NDc1NjkxMDBGMUZBREQgLyogV2lsbFNlbmRTdWJtaXRFdmVudF9CdW5kbGUuY3Bw
ICovOyB9OwogCQk3NkUxODJERjE1NDc2N0U2MDBGMUZBREQgLyogYXV0by1zdWJtaXR0aW5nLWZv
cm0uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NkUxODJERTE1NDc1QTgzMDBGMUZBREQgLyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRt
bCAqLzsgfTsKIAkJN0ExNDU4RkMxQUQ1QzA3MDAwRTA2NzcyIC8qIG1vdXNlLWJ1dHRvbi1saXN0
ZW5lci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdBMTQ1OEZCMUFENUMwMzUwMEUwNjc3MiAvKiBtb3VzZS1idXR0b24tbGlzdGVuZXIu
aHRtbCAqLzsgfTsKKwkJN0EzOEQ3RTYxQzc1MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMzhE
N0U1MUM3NTJENUYwMDRGMTU3RCAvKiBIYXNoQ291bnRlZFNldC5jcHAgKi87IH07CiAJCTdBNTYy
MzExMUFENUFGM0UwMDk2QjkyMCAvKiBNZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTU2MjMxMDFBRDVBRjNF
MDA5NkI5MjAgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMuY3BwICovOyB9OwogCQk3QTk5RDk5
NDFBRDRBMjlEMDAzNzMxNDEgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTk5RDk5MzFBRDRBMjlEMDAz
NzMxNDEgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW0gKi87IH07CiAJCTdBQTAyMUJCMUFC
MDlFQTcwMDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QUEwMjFCQTFBQjA5RUE3MDA1Mjk1M0YgLyogRGF0ZU1hdGgu
Y3BwICovOyB9OwpAQCAtNjEwLDYgKzYxMSw3IEBACiAJCTc2RTE4MkRDMTU0NzU2OTEwMEYxRkFE
RCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2RTE4MkRFMTU0NzVBODMwMEYxRkFERCAvKiBhdXRvLXN1
Ym1pdHRpbmctZm9ybS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImF1dG8tc3Vi
bWl0dGluZy1mb3JtLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTE0NThG
QjFBRDVDMDM1MDBFMDY3NzIgLyogbW91c2UtYnV0dG9uLWxpc3RlbmVyLmh0bWwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0Lmh0bWw7IHBhdGggPSAibW91c2UtYnV0dG9uLWxpc3RlbmVyLmh0bWwiOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QTM4RDdFNTFDNzUyRDVGMDA0RjE1N0QgLyogSGFzaENv
dW50ZWRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFzaENv
dW50ZWRTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTU2MjMxMDFBRDVB
RjNFMDA5NkI5MjAgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVudVR5cGVzRm9yTW91c2VFdmVudHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTk5RDk5MzFBRDRBMjlEMDAzNzMxNDEgLyogTWVu
dVR5cGVzRm9yTW91c2VFdmVudHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBNZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0FBMDIxQkExQUIwOUVBNzAwNTI5NTNGIC8qIERhdGVNYXRoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVNYXRoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjgsNiArMTIzMCw3IEBACiAJCQkJN0FBMDIxQkExQUIwOUVB
NzAwNTI5NTNGIC8qIERhdGVNYXRoLmNwcCAqLywKIAkJCQlFNEE3NTdEMzE3OEFFQTVCMDBCNUQ3
QTQgLyogRGVxdWUuY3BwICovLAogCQkJCTFBQTlFNTU3MTQ5ODBBOTkwMDAwMUE4QSAvKiBGdW5j
dGlvbmFsLmNwcCAqLywKKwkJCQk3QTM4RDdFNTFDNzUyRDVGMDA0RjE1N0QgLyogSGFzaENvdW50
ZWRTZXQuY3BwICovLAogCQkJCTBCQ0Q4MzM0MTQ4NTdDRTQwMEVBMjAwMyAvKiBIYXNoTWFwLmNw
cCAqLywKIAkJCQkyNkIyREZGODE1QkRFNTk5MDA0RjY5MUQgLyogSGFzaFNldC5jcHAgKi8sCiAJ
CQkJMjY2RkFGRDIxNUU1Nzc1MjAwRjYxRDVCIC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24u
Y3BwICovLApAQCAtMTg2Myw2ICsxODY2LDcgQEAKIAkJCQk5QjA3ODZBMzFDNTg4MzBGMDBEMTU5
RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBNEY4MUNDMUJERkZEMzcwMDRFNjcyRSAvKiBSZW1vdGVPYmplY3RSZWdpc3Ry
eS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQ0I0QUQ4MUIzQTA3OUMwMEMxQjFDNiAvKiBNb2Rh
bEFsZXJ0c1NQSS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QTM4RDdFNjFDNzUyRDVGMDA0RjE1
N0QgLyogSGFzaENvdW50ZWRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUI3OTE2NTAxQkQ4
OUQwRDAwRDUwQjhGIC8qIEZpcnN0UmVzcG9uZGVyU2Nyb2xsaW5nUG9zaXRpb24ubW0gaW4gU291
cmNlcyAqLywKIAkJCQkxQ0YwRDM3OTFCQkYyRjNEMDBCNEVGNTQgLyogV0tSZXRhaW5QdHIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMjZGNkUxRjAxQURDNzQ5QjAwREU2OTZCIC8qIERGQU1pbmlt
aXplci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0hhc2hDb3VudGVkU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9IYXNoQ291bnRlZFNldC5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoQ291bnRlZFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkNvdW50ZXJzLmgiCisjaW5jbHVkZSAiTW92ZU9ubHkuaCIKKyNpbmNsdWRlICJSZWZMb2dn
ZXIuaCIKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CisgICAgCit0eXBlZGVmIFdURjo6SGFzaENvdW50ZWRTZXQ8aW50PiBJbnRIYXNoQ291
bnRlZFNldDsKKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIEhhc2hUYWJsZUl0ZXJhdG9yQ29t
cGFyaXNvbikKK3sKKyAgICBJbnRIYXNoQ291bnRlZFNldCBoYXNoQ291bnRlZFNldDsKKyAgICBo
YXNoQ291bnRlZFNldC5hZGQoMSk7CisgICAgQVNTRVJUX1RSVUUoaGFzaENvdW50ZWRTZXQuYmVn
aW4oKSAhPSBoYXNoQ291bnRlZFNldC5lbmQoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGhhc2hDb3Vu
dGVkU2V0LmJlZ2luKCkgPT0gaGFzaENvdW50ZWRTZXQuZW5kKCkpOworICAgIAorICAgIEludEhh
c2hDb3VudGVkU2V0Ojpjb25zdF9pdGVyYXRvciBiZWdpbiA9IGhhc2hDb3VudGVkU2V0LmJlZ2lu
KCk7CisgICAgQVNTRVJUX1RSVUUoYmVnaW4gPT0gaGFzaENvdW50ZWRTZXQuYmVnaW4oKSk7Cisg
ICAgQVNTRVJUX1RSVUUoaGFzaENvdW50ZWRTZXQuYmVnaW4oKSA9PSBiZWdpbik7CisgICAgQVNT
RVJUX1RSVUUoYmVnaW4gIT0gaGFzaENvdW50ZWRTZXQuZW5kKCkpOworICAgIEFTU0VSVF9UUlVF
KGhhc2hDb3VudGVkU2V0LmVuZCgpICE9IGJlZ2luKTsKKyAgICBBU1NFUlRfRkFMU0UoYmVnaW4g
IT0gaGFzaENvdW50ZWRTZXQuYmVnaW4oKSk7CisgICAgQVNTRVJUX0ZBTFNFKGhhc2hDb3VudGVk
U2V0LmJlZ2luKCkgIT0gYmVnaW4pOworICAgIEFTU0VSVF9GQUxTRShiZWdpbiA9PSBoYXNoQ291
bnRlZFNldC5lbmQoKSk7CisgICAgQVNTRVJUX0ZBTFNFKGhhc2hDb3VudGVkU2V0LmVuZCgpID09
IGJlZ2luKTsKK30KKworc3RydWN0IFRlc3REb3VibGVIYXNoVHJhaXRzIDogSGFzaFRyYWl0czxk
b3VibGU+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmltdW1UYWJsZVNpemUgPSA4OworfTsK
KwordHlwZWRlZiBIYXNoQ291bnRlZFNldDxkb3VibGUsIERlZmF1bHRIYXNoPGRvdWJsZT46Okhh
c2gsIFRlc3REb3VibGVIYXNoVHJhaXRzPiBEb3VibGVIYXNoQ291bnRlZFNldDsKKworc3RhdGlj
IGludCBidWNrZXRGb3JLZXkoZG91YmxlIGtleSkKK3sKKyAgICByZXR1cm4gRGVmYXVsdEhhc2g8
ZG91YmxlPjo6SGFzaDo6aGFzaChrZXkpICYgKFRlc3REb3VibGVIYXNoVHJhaXRzOjptaW5pbXVt
VGFibGVTaXplIC0gMSk7Cit9CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBEb3VibGVIYXNo
Q29sbGlzaW9ucykKK3sKKyAgICAvLyBUaGUgImNsb2JiZXIiIGtleSBoZXJlIGlzIG9uZSB0aGF0
IGVuZHMgdXAgc3RlYWxpbmcgdGhlIGJ1Y2tldCB0aGF0IHRoZSAtMCBrZXkKKyAgICAvLyBvcmln
aW5hbGx5IHdhbnRzIHRvIGJlIGluLiBUaGlzIG1ha2VzIHRoZSAwIGFuZCAtMCBrZXlzIGNvbGxp
ZGUgYW5kIHRoZSB0ZXN0IHRoZW4KKyAgICAvLyBmYWlscyB1bmxlc3MgdGhlIEZsb2F0SGFzaDo6
ZXF1YWxzKCkgaW1wbGVtZW50YXRpb24gY2FuIGRpc3Rpbmd1aXNoIHRoZW0uCisgICAgY29uc3Qg
ZG91YmxlIGNsb2JiZXJLZXkgPSA2OworICAgIGNvbnN0IGRvdWJsZSB6ZXJvS2V5ID0gMDsKKyAg
ICBjb25zdCBkb3VibGUgbmVnYXRpdmVaZXJvS2V5ID0gLXplcm9LZXk7CisgICAgCisgICAgRG91
YmxlSGFzaENvdW50ZWRTZXQgaGFzaENvdW50ZWRTZXQ7CisgICAgCisgICAgaGFzaENvdW50ZWRT
ZXQuYWRkKGNsb2JiZXJLZXkpOworCisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50
KGNsb2JiZXJLZXkpLCAxdSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KHpl
cm9LZXkpLCAwdSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KG5lZ2F0aXZl
WmVyb0tleSksIDB1KTsKKworICAgIGhhc2hDb3VudGVkU2V0LmFkZCh6ZXJvS2V5KTsKKyAgICBo
YXNoQ291bnRlZFNldC5hZGQobmVnYXRpdmVaZXJvS2V5KTsKKyAgICAKKyAgICBBU1NFUlRfRVEo
YnVja2V0Rm9yS2V5KGNsb2JiZXJLZXkpLCBidWNrZXRGb3JLZXkobmVnYXRpdmVaZXJvS2V5KSk7
CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KGNsb2JiZXJLZXkpLCAxdSk7Cisg
ICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KHplcm9LZXkpLCAxdSk7CisgICAgQVNT
RVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KG5lZ2F0aXZlWmVyb0tleSksIDF1KTsKKworICAg
IGhhc2hDb3VudGVkU2V0LmFkZChjbG9iYmVyS2V5KTsKKyAgICBoYXNoQ291bnRlZFNldC5hZGQo
emVyb0tleSk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKG5lZ2F0aXZlWmVyb0tleSk7CisgICAg
CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KGNsb2JiZXJLZXkpLCAydSk7Cisg
ICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KHplcm9LZXkpLCAydSk7CisgICAgQVNT
RVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KG5lZ2F0aXZlWmVyb0tleSksIDJ1KTsKKworICAg
IGhhc2hDb3VudGVkU2V0LmFkZChjbG9iYmVyS2V5LCAxMik7CisgICAgaGFzaENvdW50ZWRTZXQu
YWRkKHplcm9LZXksIDE1KTsKKyAgICBoYXNoQ291bnRlZFNldC5hZGQobmVnYXRpdmVaZXJvS2V5
LCAxNyk7CisgICAgCisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KGNsb2JiZXJL
ZXkpLCAxNHUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudCh6ZXJvS2V5KSwg
MTd1KTsKKyAgICBBU1NFUlRfRVEoaGFzaENvdW50ZWRTZXQuY291bnQobmVnYXRpdmVaZXJvS2V5
KSwgMTl1KTsKK30KKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIERvdWJsZUhhc2hDb2xsaXNp
b25zSW5pdGlhbENvdW50KQoreworICAgIC8vIFRoZSAiY2xvYmJlciIga2V5IGhlcmUgaXMgb25l
IHRoYXQgZW5kcyB1cCBzdGVhbGluZyB0aGUgYnVja2V0IHRoYXQgdGhlIC0wIGtleQorICAgIC8v
IG9yaWdpbmFsbHkgd2FudHMgdG8gYmUgaW4uIFRoaXMgbWFrZXMgdGhlIDAgYW5kIC0wIGtleXMg
Y29sbGlkZSBhbmQgdGhlIHRlc3QgdGhlbgorICAgIC8vIGZhaWxzIHVubGVzcyB0aGUgRmxvYXRI
YXNoOjplcXVhbHMoKSBpbXBsZW1lbnRhdGlvbiBjYW4gZGlzdGluZ3Vpc2ggdGhlbS4KKyAgICBj
b25zdCBkb3VibGUgY2xvYmJlcktleSA9IDY7CisgICAgY29uc3QgZG91YmxlIHplcm9LZXkgPSAw
OworICAgIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVplcm9LZXkgPSAtemVyb0tleTsKKyAgICAKKyAg
ICBEb3VibGVIYXNoQ291bnRlZFNldCBoYXNoQ291bnRlZFNldDsKKyAgICAKKyAgICBoYXNoQ291
bnRlZFNldC5hZGQoY2xvYmJlcktleSwgNSk7CisgICAgCisgICAgQVNTRVJUX0VRKGhhc2hDb3Vu
dGVkU2V0LmNvdW50KGNsb2JiZXJLZXkpLCA1dSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVk
U2V0LmNvdW50KHplcm9LZXkpLCAwdSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNv
dW50KG5lZ2F0aXZlWmVyb0tleSksIDB1KTsKKyAgICAKKyAgICBoYXNoQ291bnRlZFNldC5hZGQo
emVyb0tleSwgMjIpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChuZWdhdGl2ZVplcm9LZXksIDAp
OworICAgIAorICAgIEFTU0VSVF9FUShidWNrZXRGb3JLZXkoY2xvYmJlcktleSksIGJ1Y2tldEZv
cktleShuZWdhdGl2ZVplcm9LZXkpKTsKKyAgICBBU1NFUlRfRVEoaGFzaENvdW50ZWRTZXQuY291
bnQoY2xvYmJlcktleSksIDV1KTsKKyAgICBBU1NFUlRfRVEoaGFzaENvdW50ZWRTZXQuY291bnQo
emVyb0tleSksIDIydSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KG5lZ2F0
aXZlWmVyb0tleSksIDB1KTsKKyAgICAKKyAgICBoYXNoQ291bnRlZFNldC5hZGQoY2xvYmJlcktl
eSk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKHplcm9LZXkpOworICAgIGhhc2hDb3VudGVkU2V0
LmFkZChuZWdhdGl2ZVplcm9LZXkpOworICAgIAorICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNl
dC5jb3VudChjbG9iYmVyS2V5KSwgNnUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5j
b3VudCh6ZXJvS2V5KSwgMjN1KTsKKyAgICBBU1NFUlRfRVEoaGFzaENvdW50ZWRTZXQuY291bnQo
bmVnYXRpdmVaZXJvS2V5KSwgMXUpOworfQorCisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBN
b3ZlT25seUtleXMpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8TW92ZU9ubHk+IG1vdmVPbmx5S2V5
czsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAg
IE1vdmVPbmx5IG1vdmVPbmx5KGkgKyAxKTsKKyAgICAgICAgbW92ZU9ubHlLZXlzLmFkZChXVEZN
b3ZlKG1vdmVPbmx5KSk7CisgICAgfQorICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
MTAwOyArK2kpIHsKKyAgICAgICAgYXV0byBpdCA9IG1vdmVPbmx5S2V5cy5maW5kKE1vdmVPbmx5
KGkgKyAxKSk7CisgICAgICAgIEFTU0VSVF9GQUxTRShpdCA9PSBtb3ZlT25seUtleXMuZW5kKCkp
OworICAgICAgICBBU1NFUlRfRVEoaXQtPnZhbHVlLCAxdSk7CisgICAgfQorICAgIAorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFTU0VSVF9GQUxTRShtb3Zl
T25seUtleXMuYWRkKE1vdmVPbmx5KGkgKyAxKSkuaXNOZXdFbnRyeSk7CisgICAgCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgQVNTRVJUX0ZBTFNFKG1vdmVP
bmx5S2V5cy5yZW1vdmUoTW92ZU9ubHkoaSArIDEpKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDEwMDsgKytpKQorICAgICAgICBBU1NFUlRfVFJVRShtb3ZlT25seUtleXMucmVtb3Zl
KE1vdmVPbmx5KGkgKyAxKSkpOworCisgICAgQVNTRVJUX1RSVUUobW92ZU9ubHlLZXlzLmlzRW1w
dHkoKSk7Cit9CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBNb3ZlT25seUtleXNJbml0aWFs
Q291bnQpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8TW92ZU9ubHk+IG1vdmVPbmx5S2V5czsKKyAg
ICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIE1vdmVP
bmx5IG1vdmVPbmx5KGkgKyAxKTsKKyAgICAgICAgbW92ZU9ubHlLZXlzLmFkZChXVEZNb3ZlKG1v
dmVPbmx5KSwgaSArIDEpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDEwMDsgKytpKSB7CisgICAgICAgIGF1dG8gaXQgPSBtb3ZlT25seUtleXMuZmluZChNb3ZlT25s
eShpICsgMSkpOworICAgICAgICBBU1NFUlRfRkFMU0UoaXQgPT0gbW92ZU9ubHlLZXlzLmVuZCgp
KTsKKyAgICAgICAgQVNTRVJUX0VRKGl0LT52YWx1ZSwgaSArIDEpOworICAgIH0KKyAgICAKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBBU1NFUlRfRkFMU0Uo
bW92ZU9ubHlLZXlzLmFkZChNb3ZlT25seShpICsgMSkpLmlzTmV3RW50cnkpOworICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFTU0VSVF9FUShtb3Zl
T25seUtleXMuY291bnQoTW92ZU9ubHkoaSArIDEpKSwgaSArIDIpOworICAgIAorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFTU0VSVF9GQUxTRShtb3ZlT25s
eUtleXMucmVtb3ZlKE1vdmVPbmx5KGkgKyAxKSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCAxMDA7ICsraSkKKyAgICAgICAgQVNTRVJUX0VRKG1vdmVPbmx5S2V5cy5jb3VudChNb3Zl
T25seShpICsgMSkpLCBpICsgMSk7Cit9CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBJbml0
aWFsaXplckxpc3QpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8U3RyaW5nPiBoYXNoQ291bnRlZFNl
dCA9IHsKKyAgICAgICAgIm9uZSIsCisgICAgICAgICJ0d28iLAorICAgICAgICAidGhyZWUiLAor
ICAgICAgICAiZm91ciIsCisgICAgICAgICJmb3VyIiwKKyAgICAgICAgImZvdXIiLAorICAgICAg
ICAiZm91ciIsCisgICAgfTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoNHUsIGhhc2hDb3VudGVkU2V0
LnNpemUoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KCJvbmUi
KSwgMXUpOworICAgIEVYUEVDVF9FUShoYXNoQ291bnRlZFNldC5jb3VudCgidHdvIiksIDF1KTsK
KyAgICBFWFBFQ1RfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoInRocmVlIiksIDF1KTsKKyAgICBF
WFBFQ1RfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoImZvdXIiKSwgNHUpOworfQorCitURVNUKFdU
Rl9IYXNoQ291bnRlZFNldCwgSW5pdGlhbGl6ZXJMaXN0SW5pdGlhbENvdW50KQoreworICAgIEhh
c2hDb3VudGVkU2V0PFN0cmluZz4gaGFzaENvdW50ZWRTZXQgPSB7CisgICAgICAgIHsgU3RyaW5n
KCJvbmUiKSwgMXUgfSwKKyAgICAgICAgeyBTdHJpbmcoInR3byIpLCAydSB9LAorICAgICAgICB7
IFN0cmluZygidGhyZWUiKSwgM3UgfSwKKyAgICAgICAgeyBTdHJpbmcoImZvdXIiKSwgNHUgfSwK
KyAgICB9OworICAgIAorICAgIEVYUEVDVF9FUSg0dSwgaGFzaENvdW50ZWRTZXQuc2l6ZSgpKTsK
KyAgICAKKyAgICBFWFBFQ1RfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoIm9uZSIpLCAxdSk7Cisg
ICAgRVhQRUNUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KCJ0d28iKSwgMnUpOworICAgIEVYUEVD
VF9FUShoYXNoQ291bnRlZFNldC5jb3VudCgidGhyZWUiKSwgM3UpOworICAgIEVYUEVDVF9FUSho
YXNoQ291bnRlZFNldC5jb3VudCgiZm91ciIpLCA0dSk7Cit9CisKK1RFU1QoV1RGX0hhc2hDb3Vu
dGVkU2V0LCBVbmlxdWVQdHJLZXkpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6VGVzdGluZ1Njb3BlIHNjb3BlOworICAgIAorICAgIEhhc2hDb3VudGVkU2V0PHN0ZDo6dW5p
cXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gaGFzaENvdW50ZWRTZXQ7Cisg
ICAgCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKFdURk1vdmUodW5pcXVl
UHRyKSk7CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKyAgICAKKyAgICBoYXNoQ291bnRl
ZFNldC5jbGVhcigpOworICAgIAorICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RG
X0hhc2hDb3VudGVkU2V0LCBVbmlxdWVQdHJLZXlJbml0aWFsQ291bnQpCit7CisgICAgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworICAgIAorICAgIEhh
c2hDb3VudGVkU2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
Pj4gaGFzaENvdW50ZWRTZXQ7CisgICAgCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgaGFzaENvdW50ZWRT
ZXQuYWRkKFdURk1vdmUodW5pcXVlUHRyKSwgMTIpOworICAgIAorICAgIEVYUEVDVF9FUSgxdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVY
UEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3Vu
dCk7CisgICAgCisgICAgaGFzaENvdW50ZWRTZXQuY2xlYXIoKTsKKyAgICAKKyAgICBFWFBFQ1Rf
RVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0
aW9uQ291bnQpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgVW5pcXVlUHRyS2V5X0N1
c3RvbURlbGV0ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGlu
Z1Njb3BlIGNvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXJTY29wZTsKKyAgICBEZWxldGVyQ291
bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPjo6VGVzdGluZ1Njb3BlIGRlbGV0ZXJD
b3VudGVyU2NvcGU7CisgICAgCisgICAgSGFzaENvdW50ZWRTZXQ8c3RkOjp1bmlxdWVfcHRyPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI+Pj4gaGFzaENvdW50ZWRTZXQ7CisgICAgCisgICAgc3RkOjp1bmlxdWVf
cHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXIsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiB1bmlxdWVQdHIobmV3IENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXIoKSwgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4o
KSk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKFdURk1vdmUodW5pcXVlUHRyKSk7CisgICAgCisg
ICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rp
b25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
OjpkZXN0cnVjdGlvbkNvdW50KTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoMHUsIERlbGV0ZXJDb3Vu
dGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+OjpkZWxldGVyQ291bnQpOworICAgIAor
ICAgIGhhc2hDb3VudGVkU2V0LmNsZWFyKCk7CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBDb25z
dHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNU
X0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsK
KyAgICAKKyAgICBFWFBFQ1RfRVEoMXUsIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI+OjpkZWxldGVyQ291bnQpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNl
dCwgVW5pcXVlUHRyS2V5X0ZpbmRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaENvdW50ZWRT
ZXQ8c3RkOjp1bmlxdWVfcHRyPGludD4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIGF1dG8g
dW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5p
cXVlUHRyLmdldCgpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikp
OworICAgIAorICAgIGF1dG8gaXQgPSBoYXNoQ291bnRlZFNldC5maW5kKHB0cik7CisgICAgQVNT
RVJUX1RSVUUoaXQgIT0gaGFzaENvdW50ZWRTZXQuZW5kKCkpOworICAgIEVYUEVDVF9FUShwdHIs
IGl0LT5rZXkuZ2V0KCkpOworICAgIEVYUEVDVF9FUSgxdSwgaXQtPnZhbHVlKTsKK30KKworVEVT
VChXVEZfSGFzaENvdW50ZWRTZXQsIFVuaXF1ZVB0cktleV9Db250YWluc1VzaW5nUmF3UG9pbnRl
cikKK3sKKyAgICBIYXNoQ291bnRlZFNldDxzdGQ6OnVuaXF1ZV9wdHI8aW50Pj4gaGFzaENvdW50
ZWRTZXQ7CisgICAgCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPGludD4o
NSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgaGFzaENvdW50ZWRTZXQu
YWRkKFdURk1vdmUodW5pcXVlUHRyKSk7CisgICAgCisgICAgRVhQRUNUX0VRKHRydWUsIGhhc2hD
b3VudGVkU2V0LmNvbnRhaW5zKHB0cikpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwg
VW5pcXVlUHRyS2V5X0dldFVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBIYXNoQ291bnRlZFNldDxz
dGQ6OnVuaXF1ZV9wdHI8aW50Pj4gaGFzaENvdW50ZWRTZXQ7CisgICAgCisgICAgYXV0byB1bmlx
dWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPGludD4oNSk7CisgICAgaW50KiBwdHIgPSB1bmlxdWVQ
dHIuZ2V0KCk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKFdURk1vdmUodW5pcXVlUHRyKSk7Cisg
ICAgCisgICAgaW50IHZhbHVlID0gaGFzaENvdW50ZWRTZXQuY291bnQocHRyKTsKKyAgICBFWFBF
Q1RfRVEoMSwgdmFsdWUpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgVW5pcXVlUHRy
S2V5X1JlbW92ZVVzaW5nUmF3UG9pbnRlcikKK3sKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpUZXN0aW5nU2NvcGUgc2NvcGU7CisgICAgCisgICAgSGFzaENvdW50ZWRTZXQ8c3Rk
Ojp1bmlxdWVfcHRyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+PiBoYXNoQ291bnRlZFNl
dDsKKyAgICAKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKKyAgICBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
KiBwdHIgPSB1bmlxdWVQdHIuZ2V0KCk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKFdURk1vdmUo
dW5pcXVlUHRyKSk7CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0
b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKKyAgICAKKyAgICBib29s
IHJlc3VsdCA9IGhhc2hDb3VudGVkU2V0LnJlbW92ZShwdHIpOworICAgIEVYUEVDVF9FUSh0cnVl
LCByZXN1bHQpOworICAgIAorICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7Cit9CisKK1RFU1QoV1RGX0hh
c2hDb3VudGVkU2V0LCBSZWZQdHJLZXlfQWRkKQoreworICAgIEhhc2hDb3VudGVkU2V0PFJlZlB0
cjxSZWZMb2dnZXI+PiBoYXNoQ291bnRlZFNldDsKKyAgICAKKyAgICBEZXJpdmVkUmVmTG9nZ2Vy
IGEoImEiKTsKKyAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgIGhhc2hDb3VudGVk
U2V0LmFkZChwdHIpOworICAgIAorICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSAiLCB0
YWtlTG9nU3RyKCkuY19zdHIoKSk7CisgICAgRVhQRUNUX0VRKDFVLCBoYXNoQ291bnRlZFNldC5j
b3VudChwdHIpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIGhhc2hDb3VudGVkU2V0LmNvdW50KHB0ci5n
ZXQoKSkpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgUmVmUHRyS2V5X0FkZFVzaW5n
UmVsZWFzZSkKK3sKKyAgICBIYXNoQ291bnRlZFNldDxSZWZQdHI8UmVmTG9nZ2VyPj4gaGFzaENv
dW50ZWRTZXQ7CisgICAgCisgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisgICAgUmVmUHRy
PFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICBoYXNoQ291bnRlZFNldC5hZGQocHRyLnJlbGVhc2Uo
KSk7CisgICAgCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgUmVmUHRyS2V5X0FkZFVzaW5nTW92
ZSkKK3sKKyAgICBIYXNoQ291bnRlZFNldDxSZWZQdHI8UmVmTG9nZ2VyPj4gaGFzaENvdW50ZWRT
ZXQ7CisgICAgCisgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcHRyKCZhKTsKKyAgICBoYXNoQ291bnRlZFNldC5hZGQoV1RGTW92ZShwdHIpKTsKKyAg
ICAKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9
CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBSZWZQdHJLZXlfQWRkVXNpbmdSYXcpCit7Cisg
ICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPFJlZkxvZ2dlcj4+IGhhc2hDb3VudGVkU2V0OworICAg
IAorICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0
cigmYSk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKHB0ci5nZXQoKSk7CisgICAgCisgICAgRVhQ
RUNUX1NUUkVRKCJyZWYoYSkgcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICBF
WFBFQ1RfRVEoMVUsIGhhc2hDb3VudGVkU2V0LmNvdW50KHB0cikpOworICAgIEVYUEVDVF9FUSgx
VSwgaGFzaENvdW50ZWRTZXQuY291bnQocHRyLmdldCgpKSk7Cit9CisKK1RFU1QoV1RGX0hhc2hD
b3VudGVkU2V0LCBSZWZQdHJLZXlfQWRkS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgSGFzaENv
dW50ZWRTZXQ8UmVmUHRyPFJlZkxvZ2dlcj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIERl
cml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAgIAorICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcHRyKCZhKTsKKyAgICAgICAgaGFzaENvdW50ZWRTZXQuYWRkKHB0cik7CisgICAgfQor
ICAgIAorICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7CisgICAgCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBw
dHIyKCZhKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBoYXNoQ291bnRlZFNldC5hZGQocHRy
Mik7CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQor
ICAgIAorICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5j
X3N0cigpKTsKK30KKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIFJlZlB0cktleV9BZGRVc2lu
Z1JlbGVhc2VLZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICBIYXNoQ291bnRlZFNldDxSZWZQdHI8
UmVmTG9nZ2VyPj4gaGFzaENvdW50ZWRTZXQ7CisgICAgCisgICAgRGVyaXZlZFJlZkxvZ2dlciBh
KCJhIik7CisgICAgCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOwor
ICAgICAgICBoYXNoQ291bnRlZFNldC5hZGQocHRyKTsKKyAgICB9CisgICAgCisgICAgRVhQRUNU
X1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
KyAgICAKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IGhhc2hDb3VudGVkU2V0LmFkZChwdHIyLnJlbGVhc2UoKSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIAor
ICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsKK30KKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIFJlZlB0cktleV9BZGRVc2luZ01vdmVL
ZXlBbHJlYWR5UHJlc2VudCkKK3sKKyAgICBIYXNoQ291bnRlZFNldDxSZWZQdHI8UmVmTG9nZ2Vy
Pj4gaGFzaENvdW50ZWRTZXQ7CisgICAgCisgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7Cisg
ICAgCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgICAgICBo
YXNoQ291bnRlZFNldC5hZGQocHRyKTsKKyAgICB9CisgICAgCisgICAgRVhQRUNUX1NUUkVRKCJy
ZWYoYSkgcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKKyAgICAKKyAg
ICB7CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cjIoJmEpOworICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IGhhc2hDb3VudGVkU2V0LmFkZChXVEZNb3ZlKHB0cjIpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisgICAgCisgICAgRVhQRUNU
X1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorICAg
IAorfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271714</attachid>
            <date>2016-02-18 16:03:58 -0800</date>
            <delta_ts>2016-02-18 16:06:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154352-20160218162458.patch</filename>
            <type>text/plain</type>
            <size>30876</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTY3NzcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE2LTAyLTE4ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZCBIYXNoQ291bnRlZFNldCB3aXRoIGEg
bWV0aG9kIHRvIGVmZmljaWVudGx5IHNldCB0aGUgY291bnQgb2YgYW4gZW50cnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RlZCBieSBuZXcgVGVz
dFdlYktpdEFQSSB0ZXN0cy4KKworICAgICAgICBVcGRhdGUgdGhlIEhhc2hDb3VudGVkU2V0IGNs
YXNzIHdpdGggYSBuZXcgJ2FkZCcgbWV0aG9kIHRvIHN1cHBvcnQgZWZmaWNpZW50IGluaXRpYWxp
emF0aW9uIG9mCisgICAgICAgIHRoZSBjb3VudCBvZiBhIGdpdmVuIGtleS4gQWxzbyBwcm92aWRl
IG1vdmUgYW5kIHBvaW50ZXIgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIHRvIGV4cGFuZCB0aGUK
KyAgICAgICAgdHlwZXMgb2YgZGF0YSB0aGF0IGNhbiBiZSB1c2VkIGFzICdrZXlzJyBpbiB0aGUg
SGFzaENvdW50ZWRTZXQgdG8gbWF0Y2ggdGhlIHVuZGVybHlpbmcgSGFzaE1hcAorICAgICAgICBp
bXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHd0Zi9IYXNoQ291bnRlZFNldC5oOgorICAgICAg
ICAoV1RGOjpUcmFpdHM+OjphZGQpOiBBZGRlZCBuZXcgb3ZlcmxvYWQgc3VwcG9ydGluZyBhIHN1
cHBsaWVkIGNvdW50LgorCiAyMDE2LTAyLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIExMVk0gZGVwZW5kZW5jaWVzIGZyb20gV2ViS2l0CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0hhc2hDb3VudGVkU2V0LmgJKHJldmlzaW9uIDE5Njc3NykKKysrIFNvdXJjZS9XVEYv
d3RmL0hhc2hDb3VudGVkU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgV1RGX0hhc2hDb3VudGVkU2V0X2gKICNkZWZpbmUg
V1RGX0hhc2hDb3VudGVkU2V0X2gKIAorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDYgKzM4LDIyIEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIEltcGxUeXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBJbXBsVHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSW1wbFR5cGU6OkFkZFJlc3VsdCBBZGRSZXN1
bHQ7CisKKyAgICAgICAgSGFzaENvdW50ZWRTZXQoKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBIYXNoQ291bnRlZFNldChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dHlwZW5hbWUgSW1w
bFR5cGU6OktleVZhbHVlUGFpclR5cGU+IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBpbml0aWFsaXplckxpc3Qp
CisgICAgICAgICAgICAgICAgYWRkKGtleVZhbHVlUGFpci5rZXksIGtleVZhbHVlUGFpci52YWx1
ZSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNoQ291bnRlZFNldChzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8dHlwZW5hbWUgSW1wbFR5cGU6OktleVR5cGU+IGluaXRpYWxpemVyTGlzdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGluaXRpYWxpemVyTGlz
dCkKKyAgICAgICAgICAgICAgICBhZGQodmFsdWUpOworICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB2b2lkIHN3YXAoSGFzaENvdW50ZWRTZXQmKTsKICAgICAgICAgCkBAIC01OSw3ICs3Niwx
MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpbmNsdWRl
cyBib3RoIGFuIGl0ZXJhdG9yIHRvIHRoZSB2YWx1ZSdzIGxvY2F0aW9uLAogICAgICAgICAvLyBh
bmQgYW4gaXNOZXdFbnRyeSBib29sIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgaXQgaXMgYSBuZXcg
b3IgZXhpc3RpbmcgZW50cnkuCiAgICAgICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVUeXBl
Jik7Ci0gICAgICAgIAorICAgICAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmKTsKKworICAg
ICAgICAvLyBJbmNyZW1lbnRzIHRoZSBjb3VudCBvZiBhIHZhbHVlIGJ5IHRoZSBwYXNzZWQgYW1v
dW50LgorICAgICAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYsIHVuc2lnbmVkKTsK
KyAgICAgICAgQWRkUmVzdWx0IGFkZChWYWx1ZVR5cGUmJiwgdW5zaWduZWQpOworCiAgICAgICAg
IC8vIERlY3JlbWVudHMgdGhlIGNvdW50IG9mIHRoZSB2YWx1ZSwgYW5kIHJlbW92ZXMgaXQgaWYg
Y291bnQgZ29lcyBkb3duIHRvIHplcm8uCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dmFsdWUgaXMgcmVtb3ZlZC4KICAgICAgICAgYm9vbCByZW1vdmUoY29uc3QgVmFsdWVUeXBlJik7
CkBAIC03MywxMCArOTUsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIENsZWFycyB0
aGUgd2hvbGUgc2V0LgogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKKyAgICAgICAgLy8gT3Zlcmxv
YWRzIGZvciBzbWFydCBwb2ludGVyIGtleXMgdGhhdCB0YWtlIHRoZSByYXcgcG9pbnRlciB0eXBl
IGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5
cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRv
cj46OnR5cGUgZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlIGZpbmQodHlwZW5h
bWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxW
Pjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6
UHRyVHlwZSkgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5cGU+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCB1bnNpZ25lZD46
OnR5cGUgY291bnQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKSBjb25zdDsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIHJlbW92ZSh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgSW1wbFR5
cGUgbV9pbXBsOwogICAgIH07CiAKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CiAgICAgaW5saW5lIHZvaWQgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnN3YXAoSGFzaENvdW50
ZWRTZXQmIG90aGVyKQogICAgIHsKQEAgLTE1Niw2ICsxODYsMzAgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGluZSB0eXBlbmFtZSBIYXNoQ291bnRl
ZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6QWRkUmVzdWx0IEhhc2hDb3VudGVk
U2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjphZGQoVmFsdWVUeXBlJiYgdmFsdWUp
CisgICAgeworICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZChzdGQ6OmZvcndh
cmQ8VmFsdWU+KHZhbHVlKSwgMCk7CisgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGlu
ZSB0eXBlbmFtZSBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6
QWRkUmVzdWx0IEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojph
ZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSwgdW5zaWduZWQgY291bnQpCisgICAgeworICAgICAg
ICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZCh2YWx1ZSwgMCk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hDb3VudGVkU2V0
PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpBZGRSZXN1bHQgSGFzaENvdW50ZWRTZXQ8
VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSwgdW5z
aWduZWQgY291bnQpCisgICAgeworICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFk
ZChzdGQ6OmZvcndhcmQ8VmFsdWU+KHZhbHVlKSwgMCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgKz0gY291bnQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHM+CiAgICAgaW5saW5lIGJvb2wgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQpAQCAtMjI5
LDggKzI4Myw0MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3RvcltpXSA9ICgq
aXQpLmtleTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+
CisgICAgaW5saW5lIGF1dG8gSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0
eXBlCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQodmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+CisgICAg
aW5saW5lIGF1dG8gSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0
b3I+Ojp0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQodmFs
dWUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+
CisgICAgaW5saW5lIGF1dG8gSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkg
Y29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJv
b2w+Ojp0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5z
KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWPgorICAgIGlubGluZSBhdXRvIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+Ojpjb3VudCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUp
IGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCB1
bnNpZ25lZD46OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZ2V0
KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWPgorICAgIGlubGluZSBhdXRvIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVl
KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46
OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOworICAgIH0K
IAotfSAvLyBuYW1lc3BhY2Uga2h0bWwKK30gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6
Okhhc2hDb3VudGVkU2V0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTY3NzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxNi0wMi0xOCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBFeHRlbmQgSGFzaENvdW50ZWRTZXQgd2l0aCBhIG1ldGhvZCB0byBlZmZpY2llbnRseSBzZXQg
dGhlIGNvdW50IG9mIGFuIGVudHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTQzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0ZWQgYnkgbmV3IFRlc3RXZWJLaXRBUEkgdGVzdHMuCisKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZWNvZGVIYXNoQ291bnRlZFNldCk6IFVwZGF0ZSB0byB1c2UgbmV3IEhhc2hDb3VudGVkU2V0
OjphZGQgbWV0aG9kLgorCiAyMDE2LTAyLTE4ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRml4IHVudXNlZC1jb25zdC12YXJpYWJsZSB3YXJuaW5nIG9u
IG5vbiBDb2NvYSBwbGF0Zm9ybXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDE5Njc3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI0LDEwICsxMjQsOCBAQCBzdGF0aWMgdm9pZCBkZWNvZGVIYXNoQ291bnRlZFNldChLZXll
ZERlCiAgICAgICAgIHVuc2lnbmVkIGNvdW50OwogICAgICAgICBpZiAoIWRlY29kZXJJbm5lci5k
ZWNvZGVVSW50MzIoImNvdW50IiwgY291bnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IENyZWF0ZSBhIEhhc2hDb3VudGVkU2V0IG1ldGhv
ZCB0byBkbyB0aGlzIGVmZmljaWVudGx5Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQotICAgICAgICAgICAgaGFzaENvdW50ZWRTZXQuYWRkKG9yaWdpbik7CisK
KyAgICAgICAgaGFzaENvdW50ZWRTZXQuYWRkKG9yaWdpbiwgY291bnQpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9KTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Njc3NykKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTAyLTE4ICBCcmVudCBGdWxnaGFt
ICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZCBIYXNoQ291bnRlZFNldCB3
aXRoIGEgbWV0aG9kIHRvIGVmZmljaWVudGx5IHNldCB0aGUgY291bnQgb2YgYW4gZW50cnkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDM1MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9DTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBIYXNoQ291bnRlZFNldCB0ZXN0IGZpbGVzLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoQ291
bnRlZFNldC5jcHA6IEFkZGVkLgorCiAyMDE2LTAyLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHJlbWFpbmluZyByZWZlcmVuY2VzIHRvIExMVk0s
IGFuZCBtYWtlIHN1cmUgY29tbWVudHMgcmVmZXIgdG8gdGhlIGJhY2tlbmQgYXMgIkIzIiBub3Qg
IkxMVk0iCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCShyZXZpc2lvbiAxOTY3NzcpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdGRpcnMucG0JKHdvcmtpbmcgY29weSkKQEAgLTE3MTksNyArMTcxOSw3IEBA
IHN1YiBzZXR1cEN5Z3dpbkVudigpCiAgICAgcHJpbnQgIldFQktJVF9PVVRQVVRESVIgaXMgc2V0
IHRvOiAiLCAkRU5WeyJXRUJLSVRfT1VUUFVURElSIn0sICJcbiI7CiAgICAgcHJpbnQgIldFQktJ
VF9MSUJSQVJJRVMgaXMgc2V0IHRvOiAiLCAkRU5WeyJXRUJLSVRfTElCUkFSSUVTIn0sICJcbiI7
CiAgICAgIyBGSVhNRSAoMTI1MTgwKTogUmVtb3ZlIHRoZSBmb2xsb3dpbmcgdGVtcG9yYXJ5IDY0
LWJpdCBzdXBwb3J0IG9uY2Ugb2ZmaWNpYWwgc3VwcG9ydCBpcyBhdmFpbGFibGUuCi0gICAgcHJp
bnQgIldFQktJVF82NF9TVVBQT1JUIGlzIHNldCB0bzogIiwgJEVOVnsiV0VCS0lUXzY0X1NVUFBP
UlQifSwgIlxuIiBpZiBpc1dpbjY0KCk7CisgICAgI3ByaW50ICJXRUJLSVRfNjRfU1VQUE9SVCBp
cyBzZXQgdG86ICIsICRFTlZ7IldFQktJVF82NF9TVVBQT1JUIn0sICJcbiIgaWYgaXNXaW42NCgp
OwogCiAgICAgIyBXZSB3aWxsIGFjdHVhbGx5IHVzZSBNU0J1aWxkIHRvIGJ1aWxkIFdlYktpdCwg
YnV0IHdlIG5lZWQgdG8gZmluZCB0aGUgVmlzdWFsIFN0dWRpbyBpbnN0YWxsIChhYm92ZSkgdG8g
bWFrZQogICAgICMgc3VyZSB3ZSB1c2UgdGhlIHJpZ2h0IG9wdGlvbnMuCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5Njc3NykKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgc2V0
KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9EYXRl
TWF0aC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvRGVxdWUuY3BwCiAg
ICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0Z1bmN0aW9uYWwuY3BwCisgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0hhc2hDb3VudGVkU2V0LmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoTWFwLmNwcAogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcApJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDE5Njc3NykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdl
YktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2
ICs3OSw3IEBACiAJCTc2RTE4MkREMTU0NzU2OTEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2
ZW50X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NkUxODJEQzE1NDc1NjkxMDBGMUZBREQgLyogV2lsbFNlbmRTdWJtaXRFdmVudF9CdW5k
bGUuY3BwICovOyB9OwogCQk3NkUxODJERjE1NDc2N0U2MDBGMUZBREQgLyogYXV0by1zdWJtaXR0
aW5nLWZvcm0uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NkUxODJERTE1NDc1QTgzMDBGMUZBREQgLyogYXV0by1zdWJtaXR0aW5nLWZv
cm0uaHRtbCAqLzsgfTsKIAkJN0ExNDU4RkMxQUQ1QzA3MDAwRTA2NzcyIC8qIG1vdXNlLWJ1dHRv
bi1saXN0ZW5lci5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdBMTQ1OEZCMUFENUMwMzUwMEUwNjc3MiAvKiBtb3VzZS1idXR0b24tbGlz
dGVuZXIuaHRtbCAqLzsgfTsKKwkJN0EzOEQ3RTYxQzc1MkQ1RjAwNEYxNTdEIC8qIEhhc2hDb3Vu
dGVkU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBMzhEN0U1MUM3NTJENUYwMDRGMTU3RCAvKiBIYXNoQ291bnRlZFNldC5jcHAgKi87IH07CiAJ
CTdBNTYyMzExMUFENUFGM0UwMDk2QjkyMCAvKiBNZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTU2MjMxMDFB
RDVBRjNFMDA5NkI5MjAgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMuY3BwICovOyB9OwogCQk3
QTk5RDk5NDFBRDRBMjlEMDAzNzMxNDEgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QTk5RDk5MzFBRDRB
MjlEMDAzNzMxNDEgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW0gKi87IH07CiAJCTdBQTAy
MUJCMUFCMDlFQTcwMDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUEwMjFCQTFBQjA5RUE3MDA1Mjk1M0YgLyogRGF0
ZU1hdGguY3BwICovOyB9OwpAQCAtNjEwLDYgKzYxMSw3IEBACiAJCTc2RTE4MkRDMTU0NzU2OTEw
MEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2RTE4MkRFMTU0NzVBODMwMEYxRkFERCAvKiBh
dXRvLXN1Ym1pdHRpbmctZm9ybS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gImF1
dG8tc3VibWl0dGluZy1mb3JtLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QTE0NThGQjFBRDVDMDM1MDBFMDY3NzIgLyogbW91c2UtYnV0dG9uLWxpc3RlbmVyLmh0bWwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibW91c2UtYnV0dG9uLWxpc3RlbmVyLmh0bWwiOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTM4RDdFNTFDNzUyRDVGMDA0RjE1N0QgLyog
SGFzaENvdW50ZWRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SGFzaENvdW50ZWRTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTU2MjMx
MDFBRDVBRjNFMDA5NkI5MjAgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVudVR5cGVzRm9yTW91c2VFdmVudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTk5RDk5MzFBRDRBMjlEMDAzNzMxNDEg
LyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBNZW51VHlwZXNGb3JNb3VzZUV2ZW50cy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FBMDIxQkExQUIwOUVBNzAwNTI5NTNGIC8qIERhdGVNYXRoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVNYXRoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjgsNiArMTIzMCw3IEBACiAJCQkJN0FBMDIxQkEx
QUIwOUVBNzAwNTI5NTNGIC8qIERhdGVNYXRoLmNwcCAqLywKIAkJCQlFNEE3NTdEMzE3OEFFQTVC
MDBCNUQ3QTQgLyogRGVxdWUuY3BwICovLAogCQkJCTFBQTlFNTU3MTQ5ODBBOTkwMDAwMUE4QSAv
KiBGdW5jdGlvbmFsLmNwcCAqLywKKwkJCQk3QTM4RDdFNTFDNzUyRDVGMDA0RjE1N0QgLyogSGFz
aENvdW50ZWRTZXQuY3BwICovLAogCQkJCTBCQ0Q4MzM0MTQ4NTdDRTQwMEVBMjAwMyAvKiBIYXNo
TWFwLmNwcCAqLywKIAkJCQkyNkIyREZGODE1QkRFNTk5MDA0RjY5MUQgLyogSGFzaFNldC5jcHAg
Ki8sCiAJCQkJMjY2RkFGRDIxNUU1Nzc1MjAwRjYxRDVCIC8qIEludGVnZXJUb1N0cmluZ0NvbnZl
cnNpb24uY3BwICovLApAQCAtMTg2Myw2ICsxODY2LDcgQEAKIAkJCQk5QjA3ODZBMzFDNTg4MzBG
MDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hhZG93Um9vdHNPcGVuLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBNEY4MUNDMUJERkZEMzcwMDRFNjcyRSAvKiBSZW1vdGVPYmplY3RS
ZWdpc3RyeS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQ0I0QUQ4MUIzQTA3OUMwMEMxQjFDNiAv
KiBNb2RhbEFsZXJ0c1NQSS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QTM4RDdFNjFDNzUyRDVG
MDA0RjE1N0QgLyogSGFzaENvdW50ZWRTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUI3OTE2
NTAxQkQ4OUQwRDAwRDUwQjhGIC8qIEZpcnN0UmVzcG9uZGVyU2Nyb2xsaW5nUG9zaXRpb24ubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQ0YwRDM3OTFCQkYyRjNEMDBCNEVGNTQgLyogV0tSZXRhaW5Q
dHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjZGNkUxRjAxQURDNzQ5QjAwREU2OTZCIC8qIERG
QU1pbmltaXplci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0hhc2hDb3VudGVkU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9IYXNoQ291bnRlZFNldC5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaENvdW50ZWRTZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJDb3VudGVycy5oIgorI2luY2x1ZGUgIk1vdmVPbmx5LmgiCisjaW5jbHVkZSAi
UmVmTG9nZ2VyLmgiCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRl
ZFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgeworICAgIAordHlwZWRlZiBXVEY6Okhhc2hDb3VudGVkU2V0PGludD4gSW50
SGFzaENvdW50ZWRTZXQ7CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBIYXNoVGFibGVJdGVy
YXRvckNvbXBhcmlzb24pCit7CisgICAgSW50SGFzaENvdW50ZWRTZXQgaGFzaENvdW50ZWRTZXQ7
CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKDEpOworICAgIEFTU0VSVF9UUlVFKGhhc2hDb3VudGVk
U2V0LmJlZ2luKCkgIT0gaGFzaENvdW50ZWRTZXQuZW5kKCkpOworICAgIEFTU0VSVF9GQUxTRSho
YXNoQ291bnRlZFNldC5iZWdpbigpID09IGhhc2hDb3VudGVkU2V0LmVuZCgpKTsKKyAgICAKKyAg
ICBJbnRIYXNoQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4gPSBoYXNoQ291bnRlZFNl
dC5iZWdpbigpOworICAgIEFTU0VSVF9UUlVFKGJlZ2luID09IGhhc2hDb3VudGVkU2V0LmJlZ2lu
KCkpOworICAgIEFTU0VSVF9UUlVFKGhhc2hDb3VudGVkU2V0LmJlZ2luKCkgPT0gYmVnaW4pOwor
ICAgIEFTU0VSVF9UUlVFKGJlZ2luICE9IGhhc2hDb3VudGVkU2V0LmVuZCgpKTsKKyAgICBBU1NF
UlRfVFJVRShoYXNoQ291bnRlZFNldC5lbmQoKSAhPSBiZWdpbik7CisgICAgQVNTRVJUX0ZBTFNF
KGJlZ2luICE9IGhhc2hDb3VudGVkU2V0LmJlZ2luKCkpOworICAgIEFTU0VSVF9GQUxTRShoYXNo
Q291bnRlZFNldC5iZWdpbigpICE9IGJlZ2luKTsKKyAgICBBU1NFUlRfRkFMU0UoYmVnaW4gPT0g
aGFzaENvdW50ZWRTZXQuZW5kKCkpOworICAgIEFTU0VSVF9GQUxTRShoYXNoQ291bnRlZFNldC5l
bmQoKSA9PSBiZWdpbik7Cit9CisKK3N0cnVjdCBUZXN0RG91YmxlSGFzaFRyYWl0cyA6IEhhc2hU
cmFpdHM8ZG91YmxlPiB7CisgICAgc3RhdGljIGNvbnN0IGludCBtaW5pbXVtVGFibGVTaXplID0g
ODsKK307CisKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8ZG91YmxlLCBEZWZhdWx0SGFzaDxkb3Vi
bGU+OjpIYXNoLCBUZXN0RG91YmxlSGFzaFRyYWl0cz4gRG91YmxlSGFzaENvdW50ZWRTZXQ7CisK
K3N0YXRpYyBpbnQgYnVja2V0Rm9yS2V5KGRvdWJsZSBrZXkpCit7CisgICAgcmV0dXJuIERlZmF1
bHRIYXNoPGRvdWJsZT46Okhhc2g6Omhhc2goa2V5KSAmIChUZXN0RG91YmxlSGFzaFRyYWl0czo6
bWluaW11bVRhYmxlU2l6ZSAtIDEpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgRG91
YmxlSGFzaENvbGxpc2lvbnMpCit7CisgICAgLy8gVGhlICJjbG9iYmVyIiBrZXkgaGVyZSBpcyBv
bmUgdGhhdCBlbmRzIHVwIHN0ZWFsaW5nIHRoZSBidWNrZXQgdGhhdCB0aGUgLTAga2V5CisgICAg
Ly8gb3JpZ2luYWxseSB3YW50cyB0byBiZSBpbi4gVGhpcyBtYWtlcyB0aGUgMCBhbmQgLTAga2V5
cyBjb2xsaWRlIGFuZCB0aGUgdGVzdCB0aGVuCisgICAgLy8gZmFpbHMgdW5sZXNzIHRoZSBGbG9h
dEhhc2g6OmVxdWFscygpIGltcGxlbWVudGF0aW9uIGNhbiBkaXN0aW5ndWlzaCB0aGVtLgorICAg
IGNvbnN0IGRvdWJsZSBjbG9iYmVyS2V5ID0gNjsKKyAgICBjb25zdCBkb3VibGUgemVyb0tleSA9
IDA7CisgICAgY29uc3QgZG91YmxlIG5lZ2F0aXZlWmVyb0tleSA9IC16ZXJvS2V5OworICAgIAor
ICAgIERvdWJsZUhhc2hDb3VudGVkU2V0IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIGhhc2hD
b3VudGVkU2V0LmFkZChjbG9iYmVyS2V5KTsKKworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNl
dC5jb3VudChjbG9iYmVyS2V5KSwgMXUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5j
b3VudCh6ZXJvS2V5KSwgMHUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChu
ZWdhdGl2ZVplcm9LZXkpLCAwdSk7CisKKyAgICBoYXNoQ291bnRlZFNldC5hZGQoemVyb0tleSk7
CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKG5lZ2F0aXZlWmVyb0tleSk7CisgICAgCisgICAgQVNT
RVJUX0VRKGJ1Y2tldEZvcktleShjbG9iYmVyS2V5KSwgYnVja2V0Rm9yS2V5KG5lZ2F0aXZlWmVy
b0tleSkpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChjbG9iYmVyS2V5KSwg
MXUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudCh6ZXJvS2V5KSwgMXUpOwor
ICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChuZWdhdGl2ZVplcm9LZXkpLCAxdSk7
CisKKyAgICBoYXNoQ291bnRlZFNldC5hZGQoY2xvYmJlcktleSk7CisgICAgaGFzaENvdW50ZWRT
ZXQuYWRkKHplcm9LZXkpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChuZWdhdGl2ZVplcm9LZXkp
OworICAgIAorICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChjbG9iYmVyS2V5KSwg
MnUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudCh6ZXJvS2V5KSwgMnUpOwor
ICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChuZWdhdGl2ZVplcm9LZXkpLCAydSk7
CisKKyAgICBoYXNoQ291bnRlZFNldC5hZGQoY2xvYmJlcktleSwgMTIpOworICAgIGhhc2hDb3Vu
dGVkU2V0LmFkZCh6ZXJvS2V5LCAxNSk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKG5lZ2F0aXZl
WmVyb0tleSwgMTcpOworICAgIAorICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChj
bG9iYmVyS2V5KSwgMTR1KTsKKyAgICBBU1NFUlRfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoemVy
b0tleSksIDE3dSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KG5lZ2F0aXZl
WmVyb0tleSksIDE5dSk7Cit9CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBEb3VibGVIYXNo
Q29sbGlzaW9uc0luaXRpYWxDb3VudCkKK3sKKyAgICAvLyBUaGUgImNsb2JiZXIiIGtleSBoZXJl
IGlzIG9uZSB0aGF0IGVuZHMgdXAgc3RlYWxpbmcgdGhlIGJ1Y2tldCB0aGF0IHRoZSAtMCBrZXkK
KyAgICAvLyBvcmlnaW5hbGx5IHdhbnRzIHRvIGJlIGluLiBUaGlzIG1ha2VzIHRoZSAwIGFuZCAt
MCBrZXlzIGNvbGxpZGUgYW5kIHRoZSB0ZXN0IHRoZW4KKyAgICAvLyBmYWlscyB1bmxlc3MgdGhl
IEZsb2F0SGFzaDo6ZXF1YWxzKCkgaW1wbGVtZW50YXRpb24gY2FuIGRpc3Rpbmd1aXNoIHRoZW0u
CisgICAgY29uc3QgZG91YmxlIGNsb2JiZXJLZXkgPSA2OworICAgIGNvbnN0IGRvdWJsZSB6ZXJv
S2V5ID0gMDsKKyAgICBjb25zdCBkb3VibGUgbmVnYXRpdmVaZXJvS2V5ID0gLXplcm9LZXk7Cisg
ICAgCisgICAgRG91YmxlSGFzaENvdW50ZWRTZXQgaGFzaENvdW50ZWRTZXQ7CisgICAgCisgICAg
aGFzaENvdW50ZWRTZXQuYWRkKGNsb2JiZXJLZXksIDUpOworICAgIAorICAgIEFTU0VSVF9FUSho
YXNoQ291bnRlZFNldC5jb3VudChjbG9iYmVyS2V5KSwgNXUpOworICAgIEFTU0VSVF9FUShoYXNo
Q291bnRlZFNldC5jb3VudCh6ZXJvS2V5KSwgMHUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRl
ZFNldC5jb3VudChuZWdhdGl2ZVplcm9LZXkpLCAwdSk7CisgICAgCisgICAgaGFzaENvdW50ZWRT
ZXQuYWRkKHplcm9LZXksIDIyKTsKKyAgICBoYXNoQ291bnRlZFNldC5hZGQobmVnYXRpdmVaZXJv
S2V5LCAwKTsKKyAgICAKKyAgICBBU1NFUlRfRVEoYnVja2V0Rm9yS2V5KGNsb2JiZXJLZXkpLCBi
dWNrZXRGb3JLZXkobmVnYXRpdmVaZXJvS2V5KSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVk
U2V0LmNvdW50KGNsb2JiZXJLZXkpLCA1dSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0
LmNvdW50KHplcm9LZXkpLCAyMnUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3Vu
dChuZWdhdGl2ZVplcm9LZXkpLCAwdSk7CisgICAgCisgICAgaGFzaENvdW50ZWRTZXQuYWRkKGNs
b2JiZXJLZXkpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZCh6ZXJvS2V5KTsKKyAgICBoYXNoQ291
bnRlZFNldC5hZGQobmVnYXRpdmVaZXJvS2V5KTsKKyAgICAKKyAgICBBU1NFUlRfRVEoaGFzaENv
dW50ZWRTZXQuY291bnQoY2xvYmJlcktleSksIDZ1KTsKKyAgICBBU1NFUlRfRVEoaGFzaENvdW50
ZWRTZXQuY291bnQoemVyb0tleSksIDIzdSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0
LmNvdW50KG5lZ2F0aXZlWmVyb0tleSksIDF1KTsKK30KKworCitURVNUKFdURl9IYXNoQ291bnRl
ZFNldCwgTW92ZU9ubHlLZXlzKQoreworICAgIEhhc2hDb3VudGVkU2V0PE1vdmVPbmx5PiBtb3Zl
T25seUtleXM7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgewor
ICAgICAgICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7CisgICAgICAgIG1vdmVPbmx5S2V5cy5h
ZGQoV1RGTW92ZShtb3ZlT25seSkpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGF1dG8gaXQgPSBtb3ZlT25seUtleXMuZmluZChN
b3ZlT25seShpICsgMSkpOworICAgICAgICBBU1NFUlRfRkFMU0UoaXQgPT0gbW92ZU9ubHlLZXlz
LmVuZCgpKTsKKyAgICAgICAgQVNTRVJUX0VRKGl0LT52YWx1ZSwgMXUpOworICAgIH0KKyAgICAK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBBU1NFUlRfRkFM
U0UobW92ZU9ubHlLZXlzLmFkZChNb3ZlT25seShpICsgMSkpLmlzTmV3RW50cnkpOworICAgIAor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFTU0VSVF9GQUxT
RShtb3ZlT25seUtleXMucmVtb3ZlKE1vdmVPbmx5KGkgKyAxKSkpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgQVNTRVJUX1RSVUUobW92ZU9ubHlLZXlz
LnJlbW92ZShNb3ZlT25seShpICsgMSkpKTsKKworICAgIEFTU0VSVF9UUlVFKG1vdmVPbmx5S2V5
cy5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgTW92ZU9ubHlLZXlz
SW5pdGlhbENvdW50KQoreworICAgIEhhc2hDb3VudGVkU2V0PE1vdmVPbmx5PiBtb3ZlT25seUtl
eXM7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAg
ICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7CisgICAgICAgIG1vdmVPbmx5S2V5cy5hZGQoV1RG
TW92ZShtb3ZlT25seSksIGkgKyAxKTsKKyAgICB9CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBhdXRvIGl0ID0gbW92ZU9ubHlLZXlzLmZpbmQo
TW92ZU9ubHkoaSArIDEpKTsKKyAgICAgICAgQVNTRVJUX0ZBTFNFKGl0ID09IG1vdmVPbmx5S2V5
cy5lbmQoKSk7CisgICAgICAgIEFTU0VSVF9FUShpdC0+dmFsdWUsIGkgKyAxKTsKKyAgICB9Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgQVNTRVJU
X0ZBTFNFKG1vdmVPbmx5S2V5cy5hZGQoTW92ZU9ubHkoaSArIDEpKS5pc05ld0VudHJ5KTsKKyAg
ICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBBU1NFUlRf
RVEobW92ZU9ubHlLZXlzLmNvdW50KE1vdmVPbmx5KGkgKyAxKSksIGkgKyAyKTsKKyAgICAKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBBU1NFUlRfRkFMU0Uo
bW92ZU9ubHlLZXlzLnJlbW92ZShNb3ZlT25seShpICsgMSkpKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFTU0VSVF9FUShtb3ZlT25seUtleXMuY291
bnQoTW92ZU9ubHkoaSArIDEpKSwgaSArIDEpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNl
dCwgSW5pdGlhbGl6ZXJMaXN0KQoreworICAgIEhhc2hDb3VudGVkU2V0PFN0cmluZz4gaGFzaENv
dW50ZWRTZXQgPSB7CisgICAgICAgICJvbmUiLAorICAgICAgICAidHdvIiwKKyAgICAgICAgInRo
cmVlIiwKKyAgICAgICAgImZvdXIiLAorICAgICAgICAiZm91ciIsCisgICAgICAgICJmb3VyIiwK
KyAgICAgICAgImZvdXIiLAorICAgIH07CisgICAgCisgICAgRVhQRUNUX0VRKDR1LCBoYXNoQ291
bnRlZFNldC5zaXplKCkpOworICAgIAorICAgIEVYUEVDVF9FUShoYXNoQ291bnRlZFNldC5jb3Vu
dCgib25lIiksIDF1KTsKKyAgICBFWFBFQ1RfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoInR3byIp
LCAxdSk7CisgICAgRVhQRUNUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KCJ0aHJlZSIpLCAxdSk7
CisgICAgRVhQRUNUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KCJmb3VyIiksIDR1KTsKK30KKwor
VEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIEluaXRpYWxpemVyTGlzdEluaXRpYWxDb3VudCkKK3sK
KyAgICBIYXNoQ291bnRlZFNldDxTdHJpbmc+IGhhc2hDb3VudGVkU2V0ID0geworICAgICAgICB7
IFN0cmluZygib25lIiksIDF1IH0sCisgICAgICAgIHsgU3RyaW5nKCJ0d28iKSwgMnUgfSwKKyAg
ICAgICAgeyBTdHJpbmcoInRocmVlIiksIDN1IH0sCisgICAgICAgIHsgU3RyaW5nKCJmb3VyIiks
IDR1IH0sCisgICAgfTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoNHUsIGhhc2hDb3VudGVkU2V0LnNp
emUoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KCJvbmUiKSwg
MXUpOworICAgIEVYUEVDVF9FUShoYXNoQ291bnRlZFNldC5jb3VudCgidHdvIiksIDJ1KTsKKyAg
ICBFWFBFQ1RfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoInRocmVlIiksIDN1KTsKKyAgICBFWFBF
Q1RfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoImZvdXIiKSwgNHUpOworfQorCitURVNUKFdURl9I
YXNoQ291bnRlZFNldCwgVW5pcXVlUHRyS2V5KQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3Rv
ckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKyAgICAKKyAgICBIYXNoQ291bnRlZFNldDxz
dGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+IGhhc2hDb3VudGVk
U2V0OworICAgIAorICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChXVEZNb3Zl
KHVuaXF1ZVB0cikpOworICAgIAorICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVj
dG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisgICAgCisgICAgaGFz
aENvdW50ZWRTZXQuY2xlYXIoKTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUs
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitU
RVNUKFdURl9IYXNoQ291bnRlZFNldCwgVW5pcXVlUHRyS2V5SW5pdGlhbENvdW50KQoreworICAg
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKyAgICAK
KyAgICBIYXNoQ291bnRlZFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIGF1dG8gdW5pcXVlUHRyID0gc3Rk
OjptYWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIGhhc2hD
b3VudGVkU2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDEyKTsKKyAgICAKKyAgICBFWFBFQ1Rf
RVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0
aW9uQ291bnQpOworICAgIAorICAgIGhhc2hDb3VudGVkU2V0LmNsZWFyKCk7CisgICAgCisgICAg
RVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1Y3Rpb25D
b3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpk
ZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIFVuaXF1ZVB0
cktleV9DdXN0b21EZWxldGVyKQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6
OlRlc3RpbmdTY29wZSBjb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyU2NvcGU7CisgICAgRGVs
ZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj46OlRlc3RpbmdTY29wZSBk
ZWxldGVyQ291bnRlclNjb3BlOworICAgIAorICAgIEhhc2hDb3VudGVkU2V0PHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1
Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBEZWxldGVyQ291bnRlcjxD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gdW5pcXVlUHRyKG5ldyBDb25zdHJ1Y3RvckRl
c3RydWN0b3JDb3VudGVyKCksIERlbGV0ZXJDb3VudGVyPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNv
dW50ZXI+KCkpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOwor
ICAgIAorICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29u
c3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisgICAgCisgICAgRVhQRUNUX0VRKDB1LCBEZWxl
dGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPjo6ZGVsZXRlckNvdW50KTsK
KyAgICAKKyAgICBoYXNoQ291bnRlZFNldC5jbGVhcigpOworICAgIAorICAgIEVYUEVDVF9FUSgx
dSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAg
IEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25D
b3VudCk7CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyPjo6ZGVsZXRlckNvdW50KTsKK30KKworVEVTVChXVEZfSGFzaENv
dW50ZWRTZXQsIFVuaXF1ZVB0cktleV9GaW5kVXNpbmdSYXdQb2ludGVyKQoreworICAgIEhhc2hD
b3VudGVkU2V0PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+PiBoYXNoQ291bnRlZFNldDsKKyAgICAKKyAg
ICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8aW50Pig1KTsKKyAgICBpbnQqIHB0
ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBoYXNoQ291bnRlZFNldC5hZGQoV1RGTW92ZSh1bmlx
dWVQdHIpKTsKKyAgICAKKyAgICBhdXRvIGl0ID0gaGFzaENvdW50ZWRTZXQuZmluZChwdHIpOwor
ICAgIEFTU0VSVF9UUlVFKGl0ICE9IGhhc2hDb3VudGVkU2V0LmVuZCgpKTsKKyAgICBFWFBFQ1Rf
RVEocHRyLCBpdC0+a2V5LmdldCgpKTsKKyAgICBFWFBFQ1RfRVEoMXUsIGl0LT52YWx1ZSk7Cit9
CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBVbmlxdWVQdHJLZXlfQ29udGFpbnNVc2luZ1Jh
d1BvaW50ZXIpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8c3RkOjp1bmlxdWVfcHRyPGludD4+IGhh
c2hDb3VudGVkU2V0OworICAgIAorICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1
ZTxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIGhhc2hDb3Vu
dGVkU2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworICAgIAorICAgIEVYUEVDVF9FUSh0cnVl
LCBoYXNoQ291bnRlZFNldC5jb250YWlucyhwdHIpKTsKK30KKworVEVTVChXVEZfSGFzaENvdW50
ZWRTZXQsIFVuaXF1ZVB0cktleV9HZXRVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaENvdW50
ZWRTZXQ8c3RkOjp1bmlxdWVfcHRyPGludD4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIGF1
dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KDUpOworICAgIGludCogcHRyID0g
dW5pcXVlUHRyLmdldCgpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0
cikpOworICAgIAorICAgIGludCB2YWx1ZSA9IGhhc2hDb3VudGVkU2V0LmNvdW50KHB0cik7Cisg
ICAgRVhQRUNUX0VRKDEsIHZhbHVlKTsKK30KKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIFVu
aXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOworICAgIAorICAgIEhhc2hDb3VudGVk
U2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gaGFzaENv
dW50ZWRTZXQ7CisgICAgCisgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChX
VEZNb3ZlKHVuaXF1ZVB0cikpOworICAgIAorICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisgICAgCisg
ICAgYm9vbCByZXN1bHQgPSBoYXNoQ291bnRlZFNldC5yZW1vdmUocHRyKTsKKyAgICBFWFBFQ1Rf
RVEodHJ1ZSwgcmVzdWx0KTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVz
dHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworfQorCitURVNU
KFdURl9IYXNoQ291bnRlZFNldCwgUmVmUHRyS2V5X0FkZCkKK3sKKyAgICBIYXNoQ291bnRlZFNl
dDxSZWZQdHI8UmVmTG9nZ2VyPj4gaGFzaENvdW50ZWRTZXQ7CisgICAgCisgICAgRGVyaXZlZFJl
ZkxvZ2dlciBhKCJhIik7CisgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICBoYXNo
Q291bnRlZFNldC5hZGQocHRyKTsKKyAgICAKKyAgICBBU1NFUlRfU1RSRVEoInJlZihhKSByZWYo
YSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIEVYUEVDVF9FUSgxVSwgaGFzaENvdW50
ZWRTZXQuY291bnQocHRyKSk7CisgICAgRVhQRUNUX0VRKDFVLCBoYXNoQ291bnRlZFNldC5jb3Vu
dChwdHIuZ2V0KCkpKTsKK30KKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIFJlZlB0cktleV9B
ZGRVc2luZ1JlbGVhc2UpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPFJlZkxvZ2dlcj4+
IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAg
IFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKHB0ci5y
ZWxlYXNlKCkpOworICAgIAorICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIFJlZlB0cktleV9BZGRV
c2luZ01vdmUpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPFJlZkxvZ2dlcj4+IGhhc2hD
b3VudGVkU2V0OworICAgIAorICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKFdURk1vdmUocHRy
KSk7CisgICAgCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3Ry
KCkpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgUmVmUHRyS2V5X0FkZFVzaW5nUmF3
KQoreworICAgIEhhc2hDb3VudGVkU2V0PFJlZlB0cjxSZWZMb2dnZXI+PiBoYXNoQ291bnRlZFNl
dDsKKyAgICAKKyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKyAgICBSZWZQdHI8UmVmTG9n
Z2VyPiBwdHIoJmEpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChwdHIuZ2V0KCkpOworICAgIAor
ICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7
CisgICAgRVhQRUNUX0VRKDFVLCBoYXNoQ291bnRlZFNldC5jb3VudChwdHIpKTsKKyAgICBFWFBF
Q1RfRVEoMVUsIGhhc2hDb3VudGVkU2V0LmNvdW50KHB0ci5nZXQoKSkpOworfQorCitURVNUKFdU
Rl9IYXNoQ291bnRlZFNldCwgUmVmUHRyS2V5X0FkZEtleUFscmVhZHlQcmVzZW50KQoreworICAg
IEhhc2hDb3VudGVkU2V0PFJlZlB0cjxSZWZMb2dnZXI+PiBoYXNoQ291bnRlZFNldDsKKyAgICAK
KyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAKKyAgICB7CisgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIGhhc2hDb3VudGVkU2V0LmFkZChwdHIpOwor
ICAgIH0KKyAgICAKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSByZWYoYSkgZGVyZWYoYSkgIiwg
dGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIAorICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxv
Z2dlcj4gcHRyMigmYSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gaGFzaENvdW50ZWRTZXQu
YWRkKHB0cjIpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgIH0KKyAgICAKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBSZWZQdHJLZXlf
QWRkVXNpbmdSZWxlYXNlS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8
UmVmUHRyPFJlZkxvZ2dlcj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIERlcml2ZWRSZWZM
b2dnZXIgYSgiYSIpOworICAgIAorICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRy
KCZhKTsKKyAgICAgICAgaGFzaENvdW50ZWRTZXQuYWRkKHB0cik7CisgICAgfQorICAgIAorICAg
IEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19z
dHIoKSk7CisgICAgCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsK
KyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBoYXNoQ291bnRlZFNldC5hZGQocHRyMi5yZWxlYXNl
KCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0K
KyAgICAKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBSZWZQdHJLZXlfQWRkVXNp
bmdNb3ZlS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPFJl
ZkxvZ2dlcj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIERlcml2ZWRSZWZMb2dnZXIgYSgi
YSIpOworICAgIAorICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAg
ICAgICAgaGFzaENvdW50ZWRTZXQuYWRkKHB0cik7CisgICAgfQorICAgIAorICAgIEVYUEVDVF9T
VFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cisg
ICAgCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBoYXNoQ291bnRlZFNldC5hZGQoV1RGTW92ZShwdHIyKSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorICAgIAorICAg
IEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsK
K30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271715</attachid>
            <date>2016-02-18 16:06:20 -0800</date>
            <delta_ts>2016-02-18 16:17:48 -0800</delta_ts>
            <desc>Patch (With Windows fixes)</desc>
            <filename>bug-154352-20160218162720.patch</filename>
            <type>text/plain</type>
            <size>30042</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTY3NzcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE2LTAyLTE4ICBCcmVudCBGdWxnaGFtICA8YmZ1
bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZCBIYXNoQ291bnRlZFNldCB3aXRoIGEg
bWV0aG9kIHRvIGVmZmljaWVudGx5IHNldCB0aGUgY291bnQgb2YgYW4gZW50cnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RlZCBieSBuZXcgVGVz
dFdlYktpdEFQSSB0ZXN0cy4KKworICAgICAgICBVcGRhdGUgdGhlIEhhc2hDb3VudGVkU2V0IGNs
YXNzIHdpdGggYSBuZXcgJ2FkZCcgbWV0aG9kIHRvIHN1cHBvcnQgZWZmaWNpZW50IGluaXRpYWxp
emF0aW9uIG9mCisgICAgICAgIHRoZSBjb3VudCBvZiBhIGdpdmVuIGtleS4gQWxzbyBwcm92aWRl
IG1vdmUgYW5kIHBvaW50ZXIgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIHRvIGV4cGFuZCB0aGUK
KyAgICAgICAgdHlwZXMgb2YgZGF0YSB0aGF0IGNhbiBiZSB1c2VkIGFzICdrZXlzJyBpbiB0aGUg
SGFzaENvdW50ZWRTZXQgdG8gbWF0Y2ggdGhlIHVuZGVybHlpbmcgSGFzaE1hcAorICAgICAgICBp
bXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIHd0Zi9IYXNoQ291bnRlZFNldC5oOgorICAgICAg
ICAoV1RGOjpUcmFpdHM+OjphZGQpOiBBZGRlZCBuZXcgb3ZlcmxvYWQgc3VwcG9ydGluZyBhIHN1
cHBsaWVkIGNvdW50LgorCiAyMDE2LTAyLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIExMVk0gZGVwZW5kZW5jaWVzIGZyb20gV2ViS2l0CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9IYXNoQ291bnRlZFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0hhc2hDb3VudGVkU2V0LmgJKHJldmlzaW9uIDE5Njc3NykKKysrIFNvdXJjZS9XVEYv
d3RmL0hhc2hDb3VudGVkU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMywg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIxLDYgKzIxLDcgQEAKICNpZm5kZWYgV1RGX0hhc2hDb3VudGVkU2V0X2gKICNkZWZpbmUg
V1RGX0hhc2hDb3VudGVkU2V0X2gKIAorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiAjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM3LDYgKzM4LDIyIEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIEltcGxUeXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICAgICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBJbXBsVHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0
b3I7CiAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgSW1wbFR5cGU6OkFkZFJlc3VsdCBBZGRSZXN1
bHQ7CisKKyAgICAgICAgSGFzaENvdW50ZWRTZXQoKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBIYXNoQ291bnRlZFNldChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8dHlwZW5hbWUgSW1w
bFR5cGU6OktleVZhbHVlUGFpclR5cGU+IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBpbml0aWFsaXplckxpc3Qp
CisgICAgICAgICAgICAgICAgYWRkKGtleVZhbHVlUGFpci5rZXksIGtleVZhbHVlUGFpci52YWx1
ZSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNoQ291bnRlZFNldChzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8dHlwZW5hbWUgSW1wbFR5cGU6OktleVR5cGU+IGluaXRpYWxpemVyTGlzdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6IGluaXRpYWxpemVyTGlz
dCkKKyAgICAgICAgICAgICAgICBhZGQodmFsdWUpOworICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICB2b2lkIHN3YXAoSGFzaENvdW50ZWRTZXQmKTsKICAgICAgICAgCkBAIC01OSw3ICs3Niwx
MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpbmNsdWRl
cyBib3RoIGFuIGl0ZXJhdG9yIHRvIHRoZSB2YWx1ZSdzIGxvY2F0aW9uLAogICAgICAgICAvLyBh
bmQgYW4gaXNOZXdFbnRyeSBib29sIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgaXQgaXMgYSBuZXcg
b3IgZXhpc3RpbmcgZW50cnkuCiAgICAgICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgVmFsdWVUeXBl
Jik7Ci0gICAgICAgIAorICAgICAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmKTsKKworICAg
ICAgICAvLyBJbmNyZW1lbnRzIHRoZSBjb3VudCBvZiBhIHZhbHVlIGJ5IHRoZSBwYXNzZWQgYW1v
dW50LgorICAgICAgICBBZGRSZXN1bHQgYWRkKGNvbnN0IFZhbHVlVHlwZSYsIHVuc2lnbmVkKTsK
KyAgICAgICAgQWRkUmVzdWx0IGFkZChWYWx1ZVR5cGUmJiwgdW5zaWduZWQpOworCiAgICAgICAg
IC8vIERlY3JlbWVudHMgdGhlIGNvdW50IG9mIHRoZSB2YWx1ZSwgYW5kIHJlbW92ZXMgaXQgaWYg
Y291bnQgZ29lcyBkb3duIHRvIHplcm8uCiAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
dmFsdWUgaXMgcmVtb3ZlZC4KICAgICAgICAgYm9vbCByZW1vdmUoY29uc3QgVmFsdWVUeXBlJik7
CkBAIC03MywxMCArOTUsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIENsZWFycyB0
aGUgd2hvbGUgc2V0LgogICAgICAgICB2b2lkIGNsZWFyKCk7CiAKKyAgICAgICAgLy8gT3Zlcmxv
YWRzIGZvciBzbWFydCBwb2ludGVyIGtleXMgdGhhdCB0YWtlIHRoZSByYXcgcG9pbnRlciB0eXBl
IGFzIHRoZSBwYXJhbWV0ZXIuCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5
cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRv
cj46OnR5cGUgZmluZCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpOworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0b3I+Ojp0eXBlIGZpbmQodHlwZW5h
bWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKSBjb25zdDsKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxW
Pjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6
UHRyVHlwZSkgY29uc3Q7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5cGU+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCB1bnNpZ25lZD46
OnR5cGUgY291bnQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKSBjb25zdDsKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIHJlbW92ZSh0eXBlbmFtZSBH
ZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgSW1wbFR5
cGUgbV9pbXBsOwogICAgIH07CiAKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+CiAgICAgaW5saW5lIHZvaWQgSGFz
aENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnN3YXAoSGFzaENvdW50
ZWRTZXQmIG90aGVyKQogICAgIHsKQEAgLTE1Niw2ICsxODYsMzAgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGluZSB0eXBlbmFtZSBIYXNoQ291bnRl
ZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6QWRkUmVzdWx0IEhhc2hDb3VudGVk
U2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjphZGQoVmFsdWVUeXBlJiYgdmFsdWUp
CisgICAgeworICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZChzdGQ6OmZvcndh
cmQ8VmFsdWU+KHZhbHVlKSwgMCk7CisgICAgICAgICsrcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIGlubGlu
ZSB0eXBlbmFtZSBIYXNoQ291bnRlZFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6
QWRkUmVzdWx0IEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojph
ZGQoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSwgdW5zaWduZWQgY291bnQpCisgICAgeworICAgICAg
ICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFkZCh2YWx1ZSwgMCk7CisgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgKz0gY291bnQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rp
b25zLCB0eXBlbmFtZSBUcmFpdHM+CisgICAgaW5saW5lIHR5cGVuYW1lIEhhc2hDb3VudGVkU2V0
PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpBZGRSZXN1bHQgSGFzaENvdW50ZWRTZXQ8
VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSwgdW5z
aWduZWQgY291bnQpCisgICAgeworICAgICAgICBBZGRSZXN1bHQgcmVzdWx0ID0gbV9pbXBsLmFk
ZChzdGQ6OmZvcndhcmQ8VmFsdWU+KHZhbHVlKSwgMCk7CisgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgKz0gY291bnQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBl
bmFtZSBUcmFpdHM+CiAgICAgaW5saW5lIGJvb2wgSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQpAQCAtMjI5
LDggKzI4Myw0MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgICAgIHZlY3RvcltpXSA9ICgq
aXQpLmtleTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+
CisgICAgaW5saW5lIGF1dG8gSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0
eXBlCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQodmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+CisgICAg
aW5saW5lIGF1dG8gSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46
OmZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgY29uc3RfaXRlcmF0
b3I+Ojp0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGZpbmQodmFs
dWUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUg
SGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+
CisgICAgaW5saW5lIGF1dG8gSGFzaENvdW50ZWRTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OmNvbnRhaW5zKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkg
Y29uc3QgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJv
b2w+Ojp0eXBlCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5z
KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWPgorICAgIGlubGluZSBhdXRvIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+Ojpjb3VudCh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUp
IGNvbnN0IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCB1
bnNpZ25lZD46OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgZ2V0
KHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWPgorICAgIGlubGluZSBhdXRvIEhhc2hDb3VudGVkU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25z
LCBUcmFpdHM+OjpyZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVl
KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgYm9vbD46
OnR5cGUKKyAgICB7CisgICAgICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOworICAgIH0K
IAotfSAvLyBuYW1lc3BhY2Uga2h0bWwKK30gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6
Okhhc2hDb3VudGVkU2V0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTY3NzcpCisrKyBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAxNi0wMi0xOCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAg
ICBFeHRlbmQgSGFzaENvdW50ZWRTZXQgd2l0aCBhIG1ldGhvZCB0byBlZmZpY2llbnRseSBzZXQg
dGhlIGNvdW50IG9mIGFuIGVudHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTQzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUZXN0ZWQgYnkgbmV3IFRlc3RXZWJLaXRBUEkgdGVzdHMuCisKKyAgICAg
ICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkZWNvZGVIYXNoQ291bnRlZFNldCk6IFVwZGF0ZSB0byB1c2UgbmV3IEhhc2hDb3VudGVkU2V0
OjphZGQgbWV0aG9kLgorCiAyMDE2LTAyLTE4ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdl
YmtpdC5vcmc+CiAKICAgICAgICAgRml4IHVudXNlZC1jb25zdC12YXJpYWJsZSB3YXJuaW5nIG9u
IG5vbiBDb2NvYSBwbGF0Zm9ybXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljcy5jcHAJKHJldmlzaW9uIDE5Njc3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI0LDEwICsxMjQsOCBAQCBzdGF0aWMgdm9pZCBkZWNvZGVIYXNoQ291bnRlZFNldChLZXll
ZERlCiAgICAgICAgIHVuc2lnbmVkIGNvdW50OwogICAgICAgICBpZiAoIWRlY29kZXJJbm5lci5k
ZWNvZGVVSW50MzIoImNvdW50IiwgY291bnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IENyZWF0ZSBhIEhhc2hDb3VudGVkU2V0IG1ldGhv
ZCB0byBkbyB0aGlzIGVmZmljaWVudGx5Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQotICAgICAgICAgICAgaGFzaENvdW50ZWRTZXQuYWRkKG9yaWdpbik7CisK
KyAgICAgICAgaGFzaENvdW50ZWRTZXQuYWRkKG9yaWdpbiwgY291bnQpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9KTsKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Njc3NykKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE2LTAyLTE4ICBCcmVudCBGdWxnaGFt
ICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZCBIYXNoQ291bnRlZFNldCB3
aXRoIGEgbWV0aG9kIHRvIGVmZmljaWVudGx5IHNldCB0aGUgY291bnQgb2YgYW4gZW50cnkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDM1MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9DTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBIYXNoQ291bnRlZFNldCB0ZXN0IGZpbGVzLgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOiBEaXR0by4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoQ291
bnRlZFNldC5jcHA6IEFkZGVkLgorCiAyMDE2LTAyLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHJlbWFpbmluZyByZWZlcmVuY2VzIHRvIExMVk0s
IGFuZCBtYWtlIHN1cmUgY29tbWVudHMgcmVmZXIgdG8gdGhlIGJhY2tlbmQgYXMgIkIzIiBub3Qg
IkxMVk0iCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5Njc3
NykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDYgKzQ3LDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dURi9EYXRlTWF0aC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9U
ZXN0cy9XVEYvRGVxdWUuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0Z1
bmN0aW9uYWwuY3BwCisgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL0hhc2hDb3Vu
dGVkU2V0LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoTWFwLmNw
cAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9IYXNoU2V0LmNwcAogICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9JbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNw
cApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5Njc3NykKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw3IEBACiAJCTc2RTE4MkREMTU0NzU2OTEwMEYxRkFE
RCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJEQzE1NDc1NjkxMDBGMUZBREQgLyogV2ls
bFNlbmRTdWJtaXRFdmVudF9CdW5kbGUuY3BwICovOyB9OwogCQk3NkUxODJERjE1NDc2N0U2MDBG
MUZBREQgLyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NkUxODJERTE1NDc1QTgzMDBGMUZBREQg
LyogYXV0by1zdWJtaXR0aW5nLWZvcm0uaHRtbCAqLzsgfTsKIAkJN0ExNDU4RkMxQUQ1QzA3MDAw
RTA2NzcyIC8qIG1vdXNlLWJ1dHRvbi1saXN0ZW5lci5odG1sIGluIENvcHkgUmVzb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMTQ1OEZCMUFENUMwMzUwMEUwNjc3
MiAvKiBtb3VzZS1idXR0b24tbGlzdGVuZXIuaHRtbCAqLzsgfTsKKwkJN0EzOEQ3RTYxQzc1MkQ1
RjAwNEYxNTdEIC8qIEhhc2hDb3VudGVkU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMzhEN0U1MUM3NTJENUYwMDRGMTU3RCAvKiBIYXNoQ291
bnRlZFNldC5jcHAgKi87IH07CiAJCTdBNTYyMzExMUFENUFGM0UwMDk2QjkyMCAvKiBNZW51VHlw
ZXNGb3JNb3VzZUV2ZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QTU2MjMxMDFBRDVBRjNFMDA5NkI5MjAgLyogTWVudVR5cGVzRm9yTW91c2VF
dmVudHMuY3BwICovOyB9OwogCQk3QTk5RDk5NDFBRDRBMjlEMDAzNzMxNDEgLyogTWVudVR5cGVz
Rm9yTW91c2VFdmVudHMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QTk5RDk5MzFBRDRBMjlEMDAzNzMxNDEgLyogTWVudVR5cGVzRm9yTW91c2VFdmVu
dHMubW0gKi87IH07CiAJCTdBQTAyMUJCMUFCMDlFQTcwMDUyOTUzRiAvKiBEYXRlTWF0aC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUEwMjFCQTFB
QjA5RUE3MDA1Mjk1M0YgLyogRGF0ZU1hdGguY3BwICovOyB9OwpAQCAtNjEwLDYgKzYxMSw3IEBA
CiAJCTc2RTE4MkRDMTU0NzU2OTEwMEYxRkFERCAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRs
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsU2VuZFN1Ym1p
dEV2ZW50X0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2RTE4MkRF
MTU0NzVBODMwMEYxRkFERCAvKiBhdXRvLXN1Ym1pdHRpbmctZm9ybS5odG1sICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5odG1sOyBwYXRoID0gImF1dG8tc3VibWl0dGluZy1mb3JtLmh0bWwiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QTE0NThGQjFBRDVDMDM1MDBFMDY3NzIgLyogbW91c2UtYnV0
dG9uLWxpc3RlbmVyLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAibW91c2UtYnV0
dG9uLWxpc3RlbmVyLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTM4RDdF
NTFDNzUyRDVGMDA0RjE1N0QgLyogSGFzaENvdW50ZWRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSGFzaENvdW50ZWRTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QTU2MjMxMDFBRDVBRjNFMDA5NkI5MjAgLyogTWVudVR5cGVzRm9yTW91
c2VFdmVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVudVR5
cGVzRm9yTW91c2VFdmVudHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTk5
RDk5MzFBRDRBMjlEMDAzNzMxNDEgLyogTWVudVR5cGVzRm9yTW91c2VFdmVudHMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZW51VHlwZXNGb3JNb3VzZUV2ZW50
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FBMDIxQkExQUIwOUVBNzAwNTI5
NTNGIC8qIERhdGVNYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERhdGVNYXRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjgsNiArMTIz
MCw3IEBACiAJCQkJN0FBMDIxQkExQUIwOUVBNzAwNTI5NTNGIC8qIERhdGVNYXRoLmNwcCAqLywK
IAkJCQlFNEE3NTdEMzE3OEFFQTVCMDBCNUQ3QTQgLyogRGVxdWUuY3BwICovLAogCQkJCTFBQTlF
NTU3MTQ5ODBBOTkwMDAwMUE4QSAvKiBGdW5jdGlvbmFsLmNwcCAqLywKKwkJCQk3QTM4RDdFNTFD
NzUyRDVGMDA0RjE1N0QgLyogSGFzaENvdW50ZWRTZXQuY3BwICovLAogCQkJCTBCQ0Q4MzM0MTQ4
NTdDRTQwMEVBMjAwMyAvKiBIYXNoTWFwLmNwcCAqLywKIAkJCQkyNkIyREZGODE1QkRFNTk5MDA0
RjY5MUQgLyogSGFzaFNldC5jcHAgKi8sCiAJCQkJMjY2RkFGRDIxNUU1Nzc1MjAwRjYxRDVCIC8q
IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uY3BwICovLApAQCAtMTg2Myw2ICsxODY2LDcgQEAK
IAkJCQk5QjA3ODZBMzFDNTg4MzBGMDBEMTU5RTMgLyogSW5qZWN0ZWRCdW5kbGVNYWtlQWxsU2hh
ZG93Um9vdHNPcGVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNEY4MUNDMUJERkZEMzcwMDRF
NjcyRSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxQ0I0
QUQ4MUIzQTA3OUMwMEMxQjFDNiAvKiBNb2RhbEFsZXJ0c1NQSS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk3QTM4RDdFNjFDNzUyRDVGMDA0RjE1N0QgLyogSGFzaENvdW50ZWRTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOUI3OTE2NTAxQkQ4OUQwRDAwRDUwQjhGIC8qIEZpcnN0UmVzcG9uZGVy
U2Nyb2xsaW5nUG9zaXRpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQ0YwRDM3OTFCQkYyRjNE
MDBCNEVGNTQgLyogV0tSZXRhaW5QdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMjZGNkUxRjAx
QURDNzQ5QjAwREU2OTZCIC8qIERGQU1pbmltaXplci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0hhc2hDb3VudGVkU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9IYXNoQ291bnRlZFNldC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSGFzaENvdW50
ZWRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDb3VudGVycy5oIgorI2luY2x1ZGUgIk1v
dmVPbmx5LmgiCisjaW5jbHVkZSAiUmVmTG9nZ2VyLmgiCisjaW5jbHVkZSA8c3RyaW5nPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworICAgIAordHlwZWRlZiBXVEY6Okhh
c2hDb3VudGVkU2V0PGludD4gSW50SGFzaENvdW50ZWRTZXQ7CisKK1RFU1QoV1RGX0hhc2hDb3Vu
dGVkU2V0LCBIYXNoVGFibGVJdGVyYXRvckNvbXBhcmlzb24pCit7CisgICAgSW50SGFzaENvdW50
ZWRTZXQgaGFzaENvdW50ZWRTZXQ7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKDEpOworICAgIEFT
U0VSVF9UUlVFKGhhc2hDb3VudGVkU2V0LmJlZ2luKCkgIT0gaGFzaENvdW50ZWRTZXQuZW5kKCkp
OworICAgIEFTU0VSVF9GQUxTRShoYXNoQ291bnRlZFNldC5iZWdpbigpID09IGhhc2hDb3VudGVk
U2V0LmVuZCgpKTsKKyAgICAKKyAgICBJbnRIYXNoQ291bnRlZFNldDo6Y29uc3RfaXRlcmF0b3Ig
YmVnaW4gPSBoYXNoQ291bnRlZFNldC5iZWdpbigpOworICAgIEFTU0VSVF9UUlVFKGJlZ2luID09
IGhhc2hDb3VudGVkU2V0LmJlZ2luKCkpOworICAgIEFTU0VSVF9UUlVFKGhhc2hDb3VudGVkU2V0
LmJlZ2luKCkgPT0gYmVnaW4pOworICAgIEFTU0VSVF9UUlVFKGJlZ2luICE9IGhhc2hDb3VudGVk
U2V0LmVuZCgpKTsKKyAgICBBU1NFUlRfVFJVRShoYXNoQ291bnRlZFNldC5lbmQoKSAhPSBiZWdp
bik7CisgICAgQVNTRVJUX0ZBTFNFKGJlZ2luICE9IGhhc2hDb3VudGVkU2V0LmJlZ2luKCkpOwor
ICAgIEFTU0VSVF9GQUxTRShoYXNoQ291bnRlZFNldC5iZWdpbigpICE9IGJlZ2luKTsKKyAgICBB
U1NFUlRfRkFMU0UoYmVnaW4gPT0gaGFzaENvdW50ZWRTZXQuZW5kKCkpOworICAgIEFTU0VSVF9G
QUxTRShoYXNoQ291bnRlZFNldC5lbmQoKSA9PSBiZWdpbik7Cit9CisKK3N0cnVjdCBUZXN0RG91
YmxlSGFzaFRyYWl0cyA6IEhhc2hUcmFpdHM8ZG91YmxlPiB7CisgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5pbXVtVGFibGVTaXplID0gODsKK307CisKK3R5cGVkZWYgSGFzaENvdW50ZWRTZXQ8ZG91
YmxlLCBEZWZhdWx0SGFzaDxkb3VibGU+OjpIYXNoLCBUZXN0RG91YmxlSGFzaFRyYWl0cz4gRG91
YmxlSGFzaENvdW50ZWRTZXQ7CisKK3N0YXRpYyBpbnQgYnVja2V0Rm9yS2V5KGRvdWJsZSBrZXkp
Cit7CisgICAgcmV0dXJuIERlZmF1bHRIYXNoPGRvdWJsZT46Okhhc2g6Omhhc2goa2V5KSAmIChU
ZXN0RG91YmxlSGFzaFRyYWl0czo6bWluaW11bVRhYmxlU2l6ZSAtIDEpOworfQorCitURVNUKFdU
Rl9IYXNoQ291bnRlZFNldCwgRG91YmxlSGFzaENvbGxpc2lvbnMpCit7CisgICAgLy8gVGhlICJj
bG9iYmVyIiBrZXkgaGVyZSBpcyBvbmUgdGhhdCBlbmRzIHVwIHN0ZWFsaW5nIHRoZSBidWNrZXQg
dGhhdCB0aGUgLTAga2V5CisgICAgLy8gb3JpZ2luYWxseSB3YW50cyB0byBiZSBpbi4gVGhpcyBt
YWtlcyB0aGUgMCBhbmQgLTAga2V5cyBjb2xsaWRlIGFuZCB0aGUgdGVzdCB0aGVuCisgICAgLy8g
ZmFpbHMgdW5sZXNzIHRoZSBGbG9hdEhhc2g6OmVxdWFscygpIGltcGxlbWVudGF0aW9uIGNhbiBk
aXN0aW5ndWlzaCB0aGVtLgorICAgIGNvbnN0IGRvdWJsZSBjbG9iYmVyS2V5ID0gNjsKKyAgICBj
b25zdCBkb3VibGUgemVyb0tleSA9IDA7CisgICAgY29uc3QgZG91YmxlIG5lZ2F0aXZlWmVyb0tl
eSA9IC16ZXJvS2V5OworICAgIAorICAgIERvdWJsZUhhc2hDb3VudGVkU2V0IGhhc2hDb3VudGVk
U2V0OworICAgIAorICAgIGhhc2hDb3VudGVkU2V0LmFkZChjbG9iYmVyS2V5KTsKKworICAgIEFT
U0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChjbG9iYmVyS2V5KSwgMXUpOworICAgIEFTU0VS
VF9FUShoYXNoQ291bnRlZFNldC5jb3VudCh6ZXJvS2V5KSwgMHUpOworICAgIEFTU0VSVF9FUSho
YXNoQ291bnRlZFNldC5jb3VudChuZWdhdGl2ZVplcm9LZXkpLCAwdSk7CisKKyAgICBoYXNoQ291
bnRlZFNldC5hZGQoemVyb0tleSk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKG5lZ2F0aXZlWmVy
b0tleSk7CisgICAgCisgICAgQVNTRVJUX0VRKGJ1Y2tldEZvcktleShjbG9iYmVyS2V5KSwgYnVj
a2V0Rm9yS2V5KG5lZ2F0aXZlWmVyb0tleSkpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNl
dC5jb3VudChjbG9iYmVyS2V5KSwgMXUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5j
b3VudCh6ZXJvS2V5KSwgMXUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChu
ZWdhdGl2ZVplcm9LZXkpLCAxdSk7CisKKyAgICBoYXNoQ291bnRlZFNldC5hZGQoY2xvYmJlcktl
eSk7CisgICAgaGFzaENvdW50ZWRTZXQuYWRkKHplcm9LZXkpOworICAgIGhhc2hDb3VudGVkU2V0
LmFkZChuZWdhdGl2ZVplcm9LZXkpOworICAgIAorICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNl
dC5jb3VudChjbG9iYmVyS2V5KSwgMnUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5j
b3VudCh6ZXJvS2V5KSwgMnUpOworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChu
ZWdhdGl2ZVplcm9LZXkpLCAydSk7CisKKyAgICBoYXNoQ291bnRlZFNldC5hZGQoY2xvYmJlcktl
eSwgMTIpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZCh6ZXJvS2V5LCAxNSk7CisgICAgaGFzaENv
dW50ZWRTZXQuYWRkKG5lZ2F0aXZlWmVyb0tleSwgMTcpOworICAgIAorICAgIEFTU0VSVF9FUSho
YXNoQ291bnRlZFNldC5jb3VudChjbG9iYmVyS2V5KSwgMTR1KTsKKyAgICBBU1NFUlRfRVEoaGFz
aENvdW50ZWRTZXQuY291bnQoemVyb0tleSksIDE3dSk7CisgICAgQVNTRVJUX0VRKGhhc2hDb3Vu
dGVkU2V0LmNvdW50KG5lZ2F0aXZlWmVyb0tleSksIDE5dSk7Cit9CisKK1RFU1QoV1RGX0hhc2hD
b3VudGVkU2V0LCBEb3VibGVIYXNoQ29sbGlzaW9uc0luaXRpYWxDb3VudCkKK3sKKyAgICAvLyBU
aGUgImNsb2JiZXIiIGtleSBoZXJlIGlzIG9uZSB0aGF0IGVuZHMgdXAgc3RlYWxpbmcgdGhlIGJ1
Y2tldCB0aGF0IHRoZSAtMCBrZXkKKyAgICAvLyBvcmlnaW5hbGx5IHdhbnRzIHRvIGJlIGluLiBU
aGlzIG1ha2VzIHRoZSAwIGFuZCAtMCBrZXlzIGNvbGxpZGUgYW5kIHRoZSB0ZXN0IHRoZW4KKyAg
ICAvLyBmYWlscyB1bmxlc3MgdGhlIEZsb2F0SGFzaDo6ZXF1YWxzKCkgaW1wbGVtZW50YXRpb24g
Y2FuIGRpc3Rpbmd1aXNoIHRoZW0uCisgICAgY29uc3QgZG91YmxlIGNsb2JiZXJLZXkgPSA2Owor
ICAgIGNvbnN0IGRvdWJsZSB6ZXJvS2V5ID0gMDsKKyAgICBjb25zdCBkb3VibGUgbmVnYXRpdmVa
ZXJvS2V5ID0gLXplcm9LZXk7CisgICAgCisgICAgRG91YmxlSGFzaENvdW50ZWRTZXQgaGFzaENv
dW50ZWRTZXQ7CisgICAgCisgICAgaGFzaENvdW50ZWRTZXQuYWRkKGNsb2JiZXJLZXksIDUpOwor
ICAgIAorICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChjbG9iYmVyS2V5KSwgNXUp
OworICAgIEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudCh6ZXJvS2V5KSwgMHUpOworICAg
IEFTU0VSVF9FUShoYXNoQ291bnRlZFNldC5jb3VudChuZWdhdGl2ZVplcm9LZXkpLCAwdSk7Cisg
ICAgCisgICAgaGFzaENvdW50ZWRTZXQuYWRkKHplcm9LZXksIDIyKTsKKyAgICBoYXNoQ291bnRl
ZFNldC5hZGQobmVnYXRpdmVaZXJvS2V5LCAwKTsKKyAgICAKKyAgICBBU1NFUlRfRVEoYnVja2V0
Rm9yS2V5KGNsb2JiZXJLZXkpLCBidWNrZXRGb3JLZXkobmVnYXRpdmVaZXJvS2V5KSk7CisgICAg
QVNTRVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KGNsb2JiZXJLZXkpLCA1dSk7CisgICAgQVNT
RVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KHplcm9LZXkpLCAyMnUpOworICAgIEFTU0VSVF9F
UShoYXNoQ291bnRlZFNldC5jb3VudChuZWdhdGl2ZVplcm9LZXkpLCAwdSk7CisgICAgCisgICAg
aGFzaENvdW50ZWRTZXQuYWRkKGNsb2JiZXJLZXkpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZCh6
ZXJvS2V5KTsKKyAgICBoYXNoQ291bnRlZFNldC5hZGQobmVnYXRpdmVaZXJvS2V5KTsKKyAgICAK
KyAgICBBU1NFUlRfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoY2xvYmJlcktleSksIDZ1KTsKKyAg
ICBBU1NFUlRfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoemVyb0tleSksIDIzdSk7CisgICAgQVNT
RVJUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50KG5lZ2F0aXZlWmVyb0tleSksIDF1KTsKK30KKwor
CitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgTW92ZU9ubHlLZXlzKQoreworICAgIEhhc2hDb3Vu
dGVkU2V0PE1vdmVPbmx5PiBtb3ZlT25seUtleXM7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7Cisg
ICAgICAgIG1vdmVPbmx5S2V5cy5hZGQoV1RGTW92ZShtb3ZlT25seSkpOworICAgIH0KKyAgICAK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGF1dG8gaXQg
PSBtb3ZlT25seUtleXMuZmluZChNb3ZlT25seShpICsgMSkpOworICAgICAgICBBU1NFUlRfRkFM
U0UoaXQgPT0gbW92ZU9ubHlLZXlzLmVuZCgpKTsKKyAgICAgICAgQVNTRVJUX0VRKGl0LT52YWx1
ZSwgMXUpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytp
KQorICAgICAgICBBU1NFUlRfRkFMU0UobW92ZU9ubHlLZXlzLmFkZChNb3ZlT25seShpICsgMSkp
LmlzTmV3RW50cnkpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kp
CisgICAgICAgIEFTU0VSVF9GQUxTRShtb3ZlT25seUtleXMucmVtb3ZlKE1vdmVPbmx5KGkgKyAx
KSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgQVNT
RVJUX1RSVUUobW92ZU9ubHlLZXlzLnJlbW92ZShNb3ZlT25seShpICsgMSkpKTsKKworICAgIEFT
U0VSVF9UUlVFKG1vdmVPbmx5S2V5cy5pc0VtcHR5KCkpOworfQorCitURVNUKFdURl9IYXNoQ291
bnRlZFNldCwgTW92ZU9ubHlLZXlzSW5pdGlhbENvdW50KQoreworICAgIEhhc2hDb3VudGVkU2V0
PE1vdmVPbmx5PiBtb3ZlT25seUtleXM7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCAxMDA7ICsraSkgeworICAgICAgICBNb3ZlT25seSBtb3ZlT25seShpICsgMSk7CisgICAgICAg
IG1vdmVPbmx5S2V5cy5hZGQoV1RGTW92ZShtb3ZlT25seSksIGkgKyAxKTsKKyAgICB9CisgICAg
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgICAgICBhdXRvIGl0
ID0gbW92ZU9ubHlLZXlzLmZpbmQoTW92ZU9ubHkoaSArIDEpKTsKKyAgICAgICAgQVNTRVJUX0ZB
TFNFKGl0ID09IG1vdmVPbmx5S2V5cy5lbmQoKSk7CisgICAgICAgIEFTU0VSVF9FUShpdC0+dmFs
dWUsIGkgKyAxKTsKKyAgICB9CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxMDA7
ICsraSkKKyAgICAgICAgQVNTRVJUX0ZBTFNFKG1vdmVPbmx5S2V5cy5hZGQoTW92ZU9ubHkoaSAr
IDEpKS5pc05ld0VudHJ5KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsg
KytpKQorICAgICAgICBBU1NFUlRfRVEobW92ZU9ubHlLZXlzLmNvdW50KE1vdmVPbmx5KGkgKyAx
KSksIGkgKyAyKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgKytpKQor
ICAgICAgICBBU1NFUlRfRkFMU0UobW92ZU9ubHlLZXlzLnJlbW92ZShNb3ZlT25seShpICsgMSkp
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIEFTU0VS
VF9FUShtb3ZlT25seUtleXMuY291bnQoTW92ZU9ubHkoaSArIDEpKSwgaSArIDEpOworfQorCitU
RVNUKFdURl9IYXNoQ291bnRlZFNldCwgSW5pdGlhbGl6ZXJMaXN0KQoreworICAgIEhhc2hDb3Vu
dGVkU2V0PFN0cmluZz4gaGFzaENvdW50ZWRTZXQgPSB7CisgICAgICAgICJvbmUiLAorICAgICAg
ICAidHdvIiwKKyAgICAgICAgInRocmVlIiwKKyAgICAgICAgImZvdXIiLAorICAgICAgICAiZm91
ciIsCisgICAgICAgICJmb3VyIiwKKyAgICAgICAgImZvdXIiLAorICAgIH07CisgICAgCisgICAg
RVhQRUNUX0VRKDR1LCBoYXNoQ291bnRlZFNldC5zaXplKCkpOworICAgIAorICAgIEVYUEVDVF9F
UShoYXNoQ291bnRlZFNldC5jb3VudCgib25lIiksIDF1KTsKKyAgICBFWFBFQ1RfRVEoaGFzaENv
dW50ZWRTZXQuY291bnQoInR3byIpLCAxdSk7CisgICAgRVhQRUNUX0VRKGhhc2hDb3VudGVkU2V0
LmNvdW50KCJ0aHJlZSIpLCAxdSk7CisgICAgRVhQRUNUX0VRKGhhc2hDb3VudGVkU2V0LmNvdW50
KCJmb3VyIiksIDR1KTsKK30KKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIEluaXRpYWxpemVy
TGlzdEluaXRpYWxDb3VudCkKK3sKKyAgICBIYXNoQ291bnRlZFNldDxTdHJpbmc+IGhhc2hDb3Vu
dGVkU2V0ID0geworICAgICAgICB7IFN0cmluZygib25lIiksIDF1IH0sCisgICAgICAgIHsgU3Ry
aW5nKCJ0d28iKSwgMnUgfSwKKyAgICAgICAgeyBTdHJpbmcoInRocmVlIiksIDN1IH0sCisgICAg
ICAgIHsgU3RyaW5nKCJmb3VyIiksIDR1IH0sCisgICAgfTsKKyAgICAKKyAgICBFWFBFQ1RfRVEo
NHUsIGhhc2hDb3VudGVkU2V0LnNpemUoKSk7CisgICAgCisgICAgRVhQRUNUX0VRKGhhc2hDb3Vu
dGVkU2V0LmNvdW50KCJvbmUiKSwgMXUpOworICAgIEVYUEVDVF9FUShoYXNoQ291bnRlZFNldC5j
b3VudCgidHdvIiksIDJ1KTsKKyAgICBFWFBFQ1RfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoInRo
cmVlIiksIDN1KTsKKyAgICBFWFBFQ1RfRVEoaGFzaENvdW50ZWRTZXQuY291bnQoImZvdXIiKSwg
NHUpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgVW5pcXVlUHRyS2V5KQoreworICAg
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBzY29wZTsKKyAgICAK
KyAgICBIYXNoQ291bnRlZFNldDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIGF1dG8gdW5pcXVlUHRyID0gc3Rk
OjptYWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOworICAgIGhhc2hD
b3VudGVkU2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworICAgIAorICAgIEVYUEVDVF9FUSgx
dSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAg
IEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25D
b3VudCk7CisgICAgCisgICAgaGFzaENvdW50ZWRTZXQuY2xlYXIoKTsKKyAgICAKKyAgICBFWFBF
Q1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50
KTsKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3Ry
dWN0aW9uQ291bnQpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgVW5pcXVlUHRyS2V5
SW5pdGlhbENvdW50KQoreworICAgIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3Rp
bmdTY29wZSBzY29wZTsKKyAgICAKKyAgICBIYXNoQ291bnRlZFNldDxzdGQ6OnVuaXF1ZV9wdHI8
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAg
IGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyPigpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0ciksIDEy
KTsKKyAgICAKKyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6
OmNvbnN0cnVjdGlvbkNvdW50KTsKKyAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOworICAgIAorICAgIGhhc2hDb3VudGVkU2V0
LmNsZWFyKCk7CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyOjpjb25zdHJ1Y3Rpb25Db3VudCk7CisgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3Rv
ckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVjdGlvbkNvdW50KTsKK30KKworVEVTVChXVEZfSGFz
aENvdW50ZWRTZXQsIFVuaXF1ZVB0cktleV9DdXN0b21EZWxldGVyKQoreworICAgIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI6OlRlc3RpbmdTY29wZSBjb25zdHJ1Y3RvckRlc3RydWN0b3JD
b3VudGVyU2NvcGU7CisgICAgRGVsZXRlckNvdW50ZXI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcj46OlRlc3RpbmdTY29wZSBkZWxldGVyQ291bnRlclNjb3BlOworICAgIAorICAgIEhhc2hD
b3VudGVkU2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyLCBE
ZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4+IGhhc2hDb3VudGVk
U2V0OworICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyLCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPj4gdW5pcXVl
UHRyKG5ldyBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyKCksIERlbGV0ZXJDb3VudGVyPENv
bnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCkpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChX
VEZNb3ZlKHVuaXF1ZVB0cikpOworICAgIAorICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JE
ZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgwdSwg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisgICAgCisg
ICAgRVhQRUNUX0VRKDB1LCBEZWxldGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3Vu
dGVyPjo6ZGVsZXRlckNvdW50KTsKKyAgICAKKyAgICBoYXNoQ291bnRlZFNldC5jbGVhcigpOwor
ICAgIAorICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29u
c3RydWN0aW9uQ291bnQpOworICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CisgICAgCisgICAgRVhQRUNUX0VRKDF1LCBEZWxl
dGVyQ291bnRlcjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPjo6ZGVsZXRlckNvdW50KTsK
K30KKworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIFVuaXF1ZVB0cktleV9GaW5kVXNpbmdSYXdQ
b2ludGVyKQoreworICAgIEhhc2hDb3VudGVkU2V0PHN0ZDo6dW5pcXVlX3B0cjxpbnQ+PiBoYXNo
Q291bnRlZFNldDsKKyAgICAKKyAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8
aW50Pig1KTsKKyAgICBpbnQqIHB0ciA9IHVuaXF1ZVB0ci5nZXQoKTsKKyAgICBoYXNoQ291bnRl
ZFNldC5hZGQoV1RGTW92ZSh1bmlxdWVQdHIpKTsKKyAgICAKKyAgICBhdXRvIGl0ID0gaGFzaENv
dW50ZWRTZXQuZmluZChwdHIpOworICAgIEFTU0VSVF9UUlVFKGl0ICE9IGhhc2hDb3VudGVkU2V0
LmVuZCgpKTsKKyAgICBFWFBFQ1RfRVEocHRyLCBpdC0+a2V5LmdldCgpKTsKKyAgICBFWFBFQ1Rf
RVEoMXUsIGl0LT52YWx1ZSk7Cit9CisKK1RFU1QoV1RGX0hhc2hDb3VudGVkU2V0LCBVbmlxdWVQ
dHJLZXlfQ29udGFpbnNVc2luZ1Jhd1BvaW50ZXIpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8c3Rk
Ojp1bmlxdWVfcHRyPGludD4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIGF1dG8gdW5pcXVl
UHRyID0gc3RkOjptYWtlX3VuaXF1ZTxpbnQ+KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRy
LmdldCgpOworICAgIGhhc2hDb3VudGVkU2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworICAg
IAorICAgIEVYUEVDVF9FUSh0cnVlLCBoYXNoQ291bnRlZFNldC5jb250YWlucyhwdHIpKTsKK30K
KworVEVTVChXVEZfSGFzaENvdW50ZWRTZXQsIFVuaXF1ZVB0cktleV9HZXRVc2luZ1Jhd1BvaW50
ZXIpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8c3RkOjp1bmlxdWVfcHRyPGludD4+IGhhc2hDb3Vu
dGVkU2V0OworICAgIAorICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxpbnQ+
KDUpOworICAgIGludCogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAgIGhhc2hDb3VudGVkU2V0
LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworICAgIAorICAgIGludCB2YWx1ZSA9IGhhc2hDb3Vu
dGVkU2V0LmNvdW50KHB0cik7CisgICAgRVhQRUNUX0VRKDEsIHZhbHVlKTsKK30KKworVEVTVChX
VEZfSGFzaENvdW50ZWRTZXQsIFVuaXF1ZVB0cktleV9SZW1vdmVVc2luZ1Jhd1BvaW50ZXIpCit7
CisgICAgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6VGVzdGluZ1Njb3BlIHNjb3BlOwor
ICAgIAorICAgIEhhc2hDb3VudGVkU2V0PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyPj4gaGFzaENvdW50ZWRTZXQ7CisgICAgCisgICAgYXV0byB1bmlxdWVQdHIg
PSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7CisgICAg
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlciogcHRyID0gdW5pcXVlUHRyLmdldCgpOworICAg
IGhhc2hDb3VudGVkU2V0LmFkZChXVEZNb3ZlKHVuaXF1ZVB0cikpOworICAgIAorICAgIEVYUEVD
VF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQp
OworICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6ZGVzdHJ1
Y3Rpb25Db3VudCk7CisgICAgCisgICAgYm9vbCByZXN1bHQgPSBoYXNoQ291bnRlZFNldC5yZW1v
dmUocHRyKTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgcmVzdWx0KTsKKyAgICAKKyAgICBFWFBFQ1Rf
RVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsK
KyAgICBFWFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0
aW9uQ291bnQpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgUmVmUHRyS2V5X0FkZCkK
K3sKKyAgICBIYXNoQ291bnRlZFNldDxSZWZQdHI8UmVmTG9nZ2VyPj4gaGFzaENvdW50ZWRTZXQ7
CisgICAgCisgICAgRGVyaXZlZFJlZkxvZ2dlciBhKCJhIik7CisgICAgUmVmUHRyPFJlZkxvZ2dl
cj4gcHRyKCZhKTsKKyAgICBoYXNoQ291bnRlZFNldC5hZGQocHRyKTsKKyAgICAKKyAgICBBU1NF
UlRfU1RSRVEoInJlZihhKSByZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIEVY
UEVDVF9FUSgxVSwgaGFzaENvdW50ZWRTZXQuY291bnQocHRyKSk7CisgICAgRVhQRUNUX0VRKDFV
LCBoYXNoQ291bnRlZFNldC5jb3VudChwdHIuZ2V0KCkpKTsKK30KKworVEVTVChXVEZfSGFzaENv
dW50ZWRTZXQsIFJlZlB0cktleV9BZGRVc2luZ1JlbGVhc2UpCit7CisgICAgSGFzaENvdW50ZWRT
ZXQ8UmVmUHRyPFJlZkxvZ2dlcj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIERlcml2ZWRS
ZWZMb2dnZXIgYSgiYSIpOworICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgaGFz
aENvdW50ZWRTZXQuYWRkKHB0ci5yZWxlYXNlKCkpOworICAgIAorICAgIEVYUEVDVF9TVFJFUSgi
cmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKworVEVTVChXVEZfSGFzaENvdW50
ZWRTZXQsIFJlZlB0cktleV9BZGRVc2luZ01vdmUpCit7CisgICAgSGFzaENvdW50ZWRTZXQ8UmVm
UHRyPFJlZkxvZ2dlcj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAgIERlcml2ZWRSZWZMb2dn
ZXIgYSgiYSIpOworICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgaGFzaENvdW50
ZWRTZXQuYWRkKFdURk1vdmUocHRyKSk7CisgICAgCisgICAgRVhQRUNUX1NUUkVRKCJyZWYoYSkg
IiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwg
UmVmUHRyS2V5X0FkZFVzaW5nUmF3KQoreworICAgIEhhc2hDb3VudGVkU2V0PFJlZlB0cjxSZWZM
b2dnZXI+PiBoYXNoQ291bnRlZFNldDsKKyAgICAKKyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEi
KTsKKyAgICBSZWZQdHI8UmVmTG9nZ2VyPiBwdHIoJmEpOworICAgIGhhc2hDb3VudGVkU2V0LmFk
ZChwdHIuZ2V0KCkpOworICAgIAorICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSAiLCB0
YWtlTG9nU3RyKCkuY19zdHIoKSk7CisgICAgRVhQRUNUX0VRKDFVLCBoYXNoQ291bnRlZFNldC5j
b3VudChwdHIpKTsKKyAgICBFWFBFQ1RfRVEoMVUsIGhhc2hDb3VudGVkU2V0LmNvdW50KHB0ci5n
ZXQoKSkpOworfQorCitURVNUKFdURl9IYXNoQ291bnRlZFNldCwgUmVmUHRyS2V5X0FkZEtleUFs
cmVhZHlQcmVzZW50KQoreworICAgIEhhc2hDb3VudGVkU2V0PFJlZlB0cjxSZWZMb2dnZXI+PiBo
YXNoQ291bnRlZFNldDsKKyAgICAKKyAgICBEZXJpdmVkUmVmTG9nZ2VyIGEoImEiKTsKKyAgICAK
KyAgICB7CisgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHB0cigmYSk7CisgICAgICAgIGhhc2hD
b3VudGVkU2V0LmFkZChwdHIpOworICAgIH0KKyAgICAKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihh
KSByZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOworICAgIAorICAgIHsK
KyAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcHRyMigmYSk7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gaGFzaENvdW50ZWRTZXQuYWRkKHB0cjIpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRk
UmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKyAgICAKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihh
KSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX0hhc2hD
b3VudGVkU2V0LCBSZWZQdHJLZXlfQWRkVXNpbmdSZWxlYXNlS2V5QWxyZWFkeVByZXNlbnQpCit7
CisgICAgSGFzaENvdW50ZWRTZXQ8UmVmUHRyPFJlZkxvZ2dlcj4+IGhhc2hDb3VudGVkU2V0Owor
ICAgIAorICAgIERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAgIAorICAgIHsKKyAgICAgICAg
UmVmUHRyPFJlZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgaGFzaENvdW50ZWRTZXQuYWRkKHB0
cik7CisgICAgfQorICAgIAorICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CisgICAgCisgICAgeworICAgICAgICBSZWZQdHI8
UmVmTG9nZ2VyPiBwdHIyKCZhKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBoYXNoQ291bnRl
ZFNldC5hZGQocHRyMi5yZWxlYXNlKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYWRkUmVzdWx0
LmlzTmV3RW50cnkpOworICAgIH0KKyAgICAKKyAgICBFWFBFQ1RfU1RSRVEoInJlZihhKSBkZXJl
ZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7Cit9CisKK1RFU1QoV1RGX0hhc2hDb3VudGVk
U2V0LCBSZWZQdHJLZXlfQWRkVXNpbmdNb3ZlS2V5QWxyZWFkeVByZXNlbnQpCit7CisgICAgSGFz
aENvdW50ZWRTZXQ8UmVmUHRyPFJlZkxvZ2dlcj4+IGhhc2hDb3VudGVkU2V0OworICAgIAorICAg
IERlcml2ZWRSZWZMb2dnZXIgYSgiYSIpOworICAgIAorICAgIHsKKyAgICAgICAgUmVmUHRyPFJl
ZkxvZ2dlcj4gcHRyKCZhKTsKKyAgICAgICAgaGFzaENvdW50ZWRTZXQuYWRkKHB0cik7CisgICAg
fQorICAgIAorICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSAiLCB0YWtl
TG9nU3RyKCkuY19zdHIoKSk7CisgICAgCisgICAgeworICAgICAgICBSZWZQdHI8UmVmTG9nZ2Vy
PiBwdHIyKCZhKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBoYXNoQ291bnRlZFNldC5hZGQo
V1RGTW92ZShwdHIyKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgfQorICAgIAorICAgIEVYUEVDVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkK
</data>
<flag name="review"
          id="296543"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>