<?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>58435</bug_id>
          
          <creation_ts>2011-04-13 06:06:47 -0700</creation_ts>
          <short_desc>[Qt] Upstream Symbian platform plugin.</short_desc>
          <delta_ts>2011-05-23 07:37:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>59271</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexis Menard (darktears)">menard</reporter>
          <assigned_to name="Yi Shen">max.hong.shen</assigned_to>
          <cc>abarth</cc>
    
    <cc>ademar</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>hui_huang</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>max.hong.shen</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>384818</commentid>
    <comment_count>0</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-04-13 06:06:47 -0700</bug_when>
    <thetext>The plugin needs to be upstreamed for a better maintainability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389309</commentid>
    <comment_count>1</comment_count>
      <attachid>90355</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-20 10:01:42 -0700</bug_when>
    <thetext>Created attachment 90355
platformpluginV1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389310</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-20 10:02:54 -0700</bug_when>
    <thetext>Attachment 90355 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit.pro&apos;, u&apos;Source...&quot; exit_code: 1

Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:21:  #ifndef header guard has wrong style, please use: WTF_qwebkitplatformplugin_h  [build/header_guard] [5]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:37:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:57:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:71:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:82:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:96:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:114:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:144:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:156:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:157:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 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>389312</commentid>
    <comment_count>3</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-20 10:06:35 -0700</bug_when>
    <thetext>The file has style issue is copied from WebKit/qt/Api/qwebkitplatformplugin.h. Should we fix the sytle problem for WebKit/qt/Api/qwebkitplatformplugin.h?

(In reply to comment #2)
&gt; Attachment 90355 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit.pro&apos;, u&apos;Source...&quot; exit_code: 1
&gt; 
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:21:  #ifndef header guard has wrong style, please use: WTF_qwebkitplatformplugin_h  [build/header_guard] [5]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:37:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:57:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:71:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:82:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:96:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:114:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:144:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:156:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:157:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Total errors found: 10 in 8 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389314</commentid>
    <comment_count>4</comment_count>
      <attachid>90355</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-04-20 10:07:31 -0700</bug_when>
    <thetext>Comment on attachment 90355
platformpluginV1

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

Where is the implementation for the video part????

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:26
&gt; +#include &lt;akndiscreetpopup.h&gt;

Sorting?

&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:32
&gt; +#if defined(WTF_USE_QT_MULTIMEDIA) &amp;&amp; WTF_USE_QT_MULTIMEDIA

I believe you can use USE(QT_MULTIMEDIA), moc will still be run on the classes below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389325</commentid>
    <comment_count>5</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-20 10:20:19 -0700</bug_when>
    <thetext>To speed up the review process, I plan to upstream the plugin in two steps. In this step 1, the patch doesn&apos;t include the video part (which needs to be cleared before upstream). Once the patch V1 gets landed, I will provide patch V2 with the video part.

(In reply to comment #4)
&gt; (From update of attachment 90355 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90355&amp;action=review
&gt; 
&gt; Where is the implementation for the video part????
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:26
&gt; &gt; +#include &lt;akndiscreetpopup.h&gt;
&gt; 
&gt; Sorting?

Sorry, I didn&apos;t get it :)

&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:32
&gt; &gt; +#if defined(WTF_USE_QT_MULTIMEDIA) &amp;&amp; WTF_USE_QT_MULTIMEDIA
&gt; 
&gt; I believe you can use USE(QT_MULTIMEDIA), moc will still be run on the classes below.

I copied this from WebKit/qt/Api/qwebkitplatformplugin.h. Do I need to update  WebKit/qt/Api/qwebkitplatformplugin.h also?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389332</commentid>
    <comment_count>6</comment_count>
      <attachid>90355</attachid>
    <who name="Yael">yael</who>
    <bug_when>2011-04-20 10:33:40 -0700</bug_when>
    <thetext>Comment on attachment 90355
platformpluginV1

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

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:34
&gt; +          QLibrary testLib(&quot;qttestability&quot;);

Do we need this test code?

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:38
&gt; +#ifdef Q_OS_SYMBIAN

This is a Symbian specific plugin. We don&apos;t need this check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389335</commentid>
    <comment_count>7</comment_count>
      <attachid>90355</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-04-20 10:37:03 -0700</bug_when>
    <thetext>Comment on attachment 90355
platformpluginV1

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

&gt;&gt;&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:26
&gt;&gt;&gt; +#include &lt;akndiscreetpopup.h&gt;
&gt;&gt; 
&gt;&gt; Sorting?
&gt; 
&gt; Sorry, I didn&apos;t get it :)

The sorting of the headers?

&gt;&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:34
&gt;&gt; +          QLibrary testLib(&quot;qttestability&quot;);
&gt; 
&gt; Do we need this test code?

Well in theory it would be nice :D.

&gt;&gt;&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:32
&gt;&gt;&gt; +#if defined(WTF_USE_QT_MULTIMEDIA) &amp;&amp; WTF_USE_QT_MULTIMEDIA
&gt;&gt; 
&gt;&gt; I believe you can use USE(QT_MULTIMEDIA), moc will still be run on the classes below.
&gt; 
&gt; I copied this from WebKit/qt/Api/qwebkitplatformplugin.h. Do I need to update  WebKit/qt/Api/qwebkitplatformplugin.h also?

Ok well then let it like there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389360</commentid>
    <comment_count>8</comment_count>
      <attachid>90366</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-20 11:11:14 -0700</bug_when>
    <thetext>Created attachment 90366
platformpluginV1.1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389364</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-20 11:14:38 -0700</bug_when>
    <thetext>Attachment 90366 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit.pro&apos;, u&apos;Source...&quot; exit_code: 1

Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:21:  #ifndef header guard has wrong style, please use: WTF_qwebkitplatformplugin_h  [build/header_guard] [5]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:37:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:57:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:71:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:82:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:96:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:114:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:144:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:156:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:157:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 11 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>389371</commentid>
    <comment_count>10</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-20 11:19:24 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 90355 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90355&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:26
&gt; &gt;&gt;&gt; +#include &lt;akndiscreetpopup.h&gt;
&gt; &gt;&gt; 
&gt; &gt;&gt; Sorting?
&gt; &gt; 
&gt; &gt; Sorry, I didn&apos;t get it :)
&gt; 
&gt; The sorting of the headers?
I think it is correct, since no error from sytle-checker (the lower case is after upper case in alphabetically sorting)
&gt; 
&gt; &gt;&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:34
&gt; &gt;&gt; +          QLibrary testLib(&quot;qttestability&quot;);
&gt; &gt; 
&gt; &gt; Do we need this test code?
&gt; 
&gt; Well in theory it would be nice :D.
Let&apos;s get rid of it for now and put it back if we need it in the future :)
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:32
&gt; &gt;&gt;&gt; +#if defined(WTF_USE_QT_MULTIMEDIA) &amp;&amp; WTF_USE_QT_MULTIMEDIA
&gt; &gt;&gt; 
&gt; &gt;&gt; I believe you can use USE(QT_MULTIMEDIA), moc will still be run on the classes below.
&gt; &gt; 
&gt; &gt; I copied this from WebKit/qt/Api/qwebkitplatformplugin.h. Do I need to update  WebKit/qt/Api/qwebkitplatformplugin.h also?
&gt; 
&gt; Ok well then let it like there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389375</commentid>
    <comment_count>11</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-04-20 11:25:04 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Attachment 90366 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit.pro&apos;, u&apos;Source...&quot; exit_code: 1
&gt; 
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:21:  #ifndef header guard has wrong style, please use: WTF_qwebkitplatformplugin_h  [build/header_guard] [5]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:37:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:57:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:71:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:82:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:96:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:114:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:144:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:156:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:157:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
&gt; Total errors found: 11 in 8 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

You should probably run check-webkit-style locally before submitting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389384</commentid>
    <comment_count>12</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-20 11:33:23 -0700</bug_when>
    <thetext>Hi Alexis, I did run the check-webkit-style locally before the submit :)

The errors show below doesn&apos;t make sense to me. First, Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h is the same copy of Source/WebKit/qt/Api/qwebkitplatformplugin.h and I don&apos;t think I should fix the style error in my qwebkitplatformplugin.h.

Second, for Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:21:  Found header this file implements before WebCore config.h, I didn&apos;t see any reason that I have to include &quot;config.h&quot; in WebPlugin.cpp. (The platform plugin should not include any unexposed webkit head file, right? )

Please let me know your thoughts, thanks

(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; Attachment 90366 [details] [details] did not pass style-queue:
&gt; &gt; 
&gt; &gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;ChangeLog&apos;, u&apos;Source/WebKit.pro&apos;, u&apos;Source...&quot; exit_code: 1
&gt; &gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:21:  #ifndef header guard has wrong style, please use: WTF_qwebkitplatformplugin_h  [build/header_guard] [5]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:37:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:57:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:71:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:82:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:96:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:114:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:144:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:156:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:157:  The parameter name &quot;extension&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:21:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
&gt; &gt; Total errors found: 11 in 8 files
&gt; &gt; 
&gt; &gt; 
&gt; &gt; If any of these errors are false positives, please file a bug against check-webkit-style.
&gt; 
&gt; You should probably run check-webkit-style locally before submitting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389515</commentid>
    <comment_count>13</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-20 14:20:02 -0700</bug_when>
    <thetext>I will add some check style exemptions for my patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389530</commentid>
    <comment_count>14</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-04-20 14:31:36 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; I will add some check style exemptions for my patch.

Add it to the exemption because it&apos;s a Qt API so it does not follow the rules. Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389719</commentid>
    <comment_count>15</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-20 18:23:46 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; I will add some check style exemptions for my patch.
&gt; 
&gt; Add it to the exemption because it&apos;s a Qt API so it does not follow the rules. Sorry for the noise.

Thanks for the comment, Alexis. I am going to put something like below into Tools/Scripts/webkitpy/style/checker.py

	     ([# Qt Symian platform plugin has no config.h or
               # exceptional header guards
	      &quot;Source/WebKit/qt/symbian/platformplugin&quot;],
	     [&quot;-build/include&quot;,
              &quot;-build/header_guard&quot;]),

However, it won&apos;t fix the style errors for the Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h. 

To fix the qwebkitplatformplugin, I need to add &apos;-whitespace/braces&apos; and &apos;-readability/parameter_name&apos; for Source/WebKit/qt/symbian/platformplugin, which I believe is not right. (I still want to check the parameter name and whitespace/braces for other files under Source/WebKit/qt/symbian/platformplugin, like WebPlugin.cpp).

My suggestion is we can just ignore the style errors for qwebkitplatformplugin.h this time. Let me know your thoughts. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389983</commentid>
    <comment_count>16</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-21 06:36:46 -0700</bug_when>
    <thetext>I created a separated bug to fix the style issue for Api/qwebkitplatformplugin.h in https://bugs.webkit.org/show_bug.cgi?id=59097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390009</commentid>
    <comment_count>17</comment_count>
      <attachid>90527</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-21 07:14:42 -0700</bug_when>
    <thetext>Created attachment 90527
platformpluginV1.2

fix style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390258</commentid>
    <comment_count>18</comment_count>
      <attachid>90527</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-04-21 12:49:22 -0700</bug_when>
    <thetext>Comment on attachment 90527
platformpluginV1.2

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

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:30
&gt; +           : QStyledItemDelegate(parent)

seems to be indented a bit too much here

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:53
&gt; +Popup::Popup(const QWebSelectData&amp; data) : m_data(data)

: part goes on next line

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:207
&gt; +    QAction* cancelAction = new QAction(&quot;Cancel&quot;, this);

How are we dealing with translations?

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:212
&gt; +    QAction* okAction = new QAction(&quot;Ok&quot;, this);

isnt it OK in English?

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.h:97
&gt; +    WebNotificationPresenter() {}
&gt; +    ~WebNotificationPresenter() {}

there needs to be a space within the {}

&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:58
&gt; +    virtual ~QWebSelectMethod() {}

also here

&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:70
&gt; +    virtual ~QWebNotificationData() {}

and here

&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:92
&gt; +class QWebHapticFeedbackPlayer: public QObject {
&gt; +    Q_OBJECT

Is this haptics support really in trunk?

&gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:95
&gt; +    QWebHapticFeedbackPlayer() {}
&gt; +    virtual ~QWebHapticFeedbackPlayer() {}

and here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390267</commentid>
    <comment_count>19</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-21 13:00:14 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 90527 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90527&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:30
&gt; &gt; +           : QStyledItemDelegate(parent)
&gt; 
&gt; seems to be indented a bit too much here
Thanks, I will fix it.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:53
&gt; &gt; +Popup::Popup(const QWebSelectData&amp; data) : m_data(data)
&gt; 
&gt; : part goes on next line
Will fix it.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:207
&gt; &gt; +    QAction* cancelAction = new QAction(&quot;Cancel&quot;, this);
&gt; 
&gt; How are we dealing with translations?
Good question. Yael or Laszlo or Alexis, any thoughts? Thanks!
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:212
&gt; &gt; +    QAction* okAction = new QAction(&quot;Ok&quot;, this);
&gt; 
&gt; isnt it OK in English?
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.h:97
&gt; &gt; +    WebNotificationPresenter() {}
&gt; &gt; +    ~WebNotificationPresenter() {}
&gt; 
&gt; there needs to be a space within the {}
&gt; 
Will fix it. (hmmm, but the style check doesn&apos;t complain it)
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:58
&gt; &gt; +    virtual ~QWebSelectMethod() {}
&gt; 
&gt; also here
&gt; 
It is a only copy from Api/qwebkitplatformplugin.h. I am not sure I should fix this or not since the style check doesn&apos;t complain it.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:70
&gt; &gt; +    virtual ~QWebNotificationData() {}
&gt; 
&gt; and here
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:92
&gt; &gt; +class QWebHapticFeedbackPlayer: public QObject {
&gt; &gt; +    Q_OBJECT
&gt; 
&gt; Is this haptics support really in trunk?
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:95
&gt; &gt; +    QWebHapticFeedbackPlayer() {}
&gt; &gt; +    virtual ~QWebHapticFeedbackPlayer() {}
&gt; 
&gt; and here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390469</commentid>
    <comment_count>20</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2011-04-21 17:04:24 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 90527 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=90527&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/qwebkitplatformplugin.h:92
&gt; &gt; +class QWebHapticFeedbackPlayer: public QObject {
&gt; &gt; +    Q_OBJECT
&gt; 
&gt; Is this haptics support really in trunk?

Yes it is - http://trac.webkit.org/changeset/64557; It is not used at the moment however I do not see an urgency to remove it as we have plans to use it eventually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390764</commentid>
    <comment_count>21</comment_count>
      <attachid>90705</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-22 07:14:59 -0700</bug_when>
    <thetext>Created attachment 90705
platformpluginV1.3

updated with Kenneth&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390774</commentid>
    <comment_count>22</comment_count>
      <attachid>90705</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-22 07:43:23 -0700</bug_when>
    <thetext>Comment on attachment 90705
platformpluginV1.3

Clearing flags on attachment: 90705

Committed r84627: &lt;http://trac.webkit.org/changeset/84627&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390775</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-22 07:43:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390779</commentid>
    <comment_count>24</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-22 08:12:47 -0700</bug_when>
    <thetext>Will provide the patchV2 with the video part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390839</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 09:48:58 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/84627 might have broken GTK Linux 32-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390850</commentid>
    <comment_count>26</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2011-04-22 10:04:12 -0700</bug_when>
    <thetext>Yi, the plugin does not build on the public SDK - see the buildlog on the Symbian buildbot.


 compile    : Source\WebKit\qt\symbian\platformplugin\WebPlugin.cpp  	[armv5_urel.rvct4_0]
   &quot;D:/webkit_qtsdk1.1/qt-symbian-release/build/Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp&quot;, line 25: Error:  #5: cannot open source input file &quot;akndiscreetpopup.h&quot;: No such file or directory
     #include &lt;akndiscreetpopup.h&gt;
                                  ^
   D:/webkit_qtsdk1.1/qt-symbian-release/build/Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp: 0 warnings, 1 error
   

We should either introduce a build flag to work around the problem or add the missing header to the SDK (perhaps you only need to update the SDK to a newer version on the bot).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391387</commentid>
    <comment_count>27</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-04-22 20:59:47 -0700</bug_when>
    <thetext>Rolled out by http://trac.webkit.org/changeset/84734

But unfortunately the public Symbian bot is still sick. It seems it needs a kick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391447</commentid>
    <comment_count>28</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-23 06:03:21 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Rolled out by http://trac.webkit.org/changeset/84734
&gt; 
&gt; But unfortunately the public Symbian bot is still sick. It seems it needs a kick.

Sorry, I only tested that patch on Qt SDK 1.1 RC, on which the build is fine. But for 1.1 Beta, seems it is missing epoc/include/platform/mw/akndiscreetpopup.h, which needed by our plugin. We may need to know more information about the buildbot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393653</commentid>
    <comment_count>29</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-27 10:55:56 -0700</bug_when>
    <thetext>Committed r85062: &lt;http://trac.webkit.org/changeset/85062&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393655</commentid>
    <comment_count>30</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-27 10:57:35 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Committed r85062: &lt;http://trac.webkit.org/changeset/85062&gt;

We have updated the symbian buildbot with 1.1 RC SDK with Qt 4.7.3, so I just resubmit the patch and will check the buildbot again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393712</commentid>
    <comment_count>31</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-27 12:29:01 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; Committed r85062: &lt;http://trac.webkit.org/changeset/85062&gt;
&gt; 
&gt; We have updated the symbian buildbot with 1.1 RC SDK with Qt 4.7.3, so I just resubmit the patch and will check the buildbot again.

The buildbot with 1.1 RC SDK is green for platformpluginV1.3 :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393713</commentid>
    <comment_count>32</comment_count>
      <attachid>91324</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-27 12:35:41 -0700</bug_when>
    <thetext>Created attachment 91324
platformpluginV2

Platformplugin part 2 which includes a html5 video player.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394100</commentid>
    <comment_count>33</comment_count>
      <attachid>91324</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-04-27 18:59:31 -0700</bug_when>
    <thetext>Comment on attachment 91324
platformpluginV2

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

First round of comments :D.

By the way there was no way a progress bar could be implemented rather than a refresh button? Like in trunk...

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoPlugin.cpp:21
&gt; +#include &quot;Html5VideoPlugin.h&quot;

Proposal : Can we do like webkit HTMLXXX?

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoPlugin.cpp:24
&gt; +#include &lt;QtGui&gt;

Just include the files you need.

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoPlugin.cpp:43
&gt; +    if (player-&gt;state() == QMediaPlayer::PlayingState)

Why pausing the playback?

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoPlugin.cpp:106
&gt; +        videoWidget-&gt;onPlayerStopped();

Could we somehow connect directly the videowidget with the player? Why this intermediate slot?

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:52
&gt; +    overlayWidget-&gt;onPlayerStopped();

Same here, could you connect directly to the overlayWidget?

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:57
&gt; +    overlayWidget-&gt;onPlayerError();

Ditto.

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:63
&gt; +}

Ditto.

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:67
&gt; +    overlayWidget-&gt;onBufferingMedia();

Ditto.

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:72
&gt; +    overlayWidget-&gt;onBufferedMedia();

Ditto.

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:101
&gt; +    emit muted(isMuted);

you can connect two signals directly so you can avoid those bunch of SLOTs connect(foo, SIGNAL(), bar, SIGNAL());

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:106
&gt; +    emit volumeChanged(value);

you can connect two signals directly so you can avoid those bunch of SLOTs connect(foo, SIGNAL(), bar, SIGNAL());

&gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:117
&gt; +    overlayWidget-&gt;setVolume(volume);

Connect directly same.

&gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:29
&gt; +    : QWidget(parent, Qt::Tool | Qt::FramelessWindowHint)

Qt::Tool why?

&gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:85
&gt; +    timer = new QTimer(this);

Could you give a name more explicit?

&gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:106
&gt; +    delete playerLabel;

Some of the deletes are not necessary. The parenting system of Qt will take care.

&gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:162
&gt; +QString OverlayWidget::timeToString(int seconds)

Not sure it is feasible but can&apos;t we use the implementation in WebKit somehow? If not could you make sure the implementation is the same?

&gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:172
&gt; +    setStyleSheet(&quot;QSlider::groove { border: 2px solid black; border-radius: 5px; background: white; }&quot;

Perhaps in a file and a qrc?

&gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.cpp:27
&gt; +    : QToolButton(parent)

A tool button? Why?

&gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.h:29
&gt; +class PlayerButton : public QToolButton {

Same why a QToolButton?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394101</commentid>
    <comment_count>34</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-04-27 19:00:18 -0700</bug_when>
    <thetext>Though good job Yi to work on upstreaming that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394526</commentid>
    <comment_count>35</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-28 10:24:31 -0700</bug_when>
    <thetext>Thanks for reviewing, Alexis :) See my comments below,
(In reply to comment #33)
&gt; (From update of attachment 91324 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91324&amp;action=review
&gt; 
&gt; First round of comments :D.
&gt; 
&gt; By the way there was no way a progress bar could be implemented rather than a refresh button? Like in trunk...
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoPlugin.cpp:21
&gt; &gt; +#include &quot;Html5VideoPlugin.h&quot;
&gt; 
&gt; Proposal : Can we do like webkit HTMLXXX?
Sure, I can change the names.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoPlugin.cpp:24
&gt; &gt; +#include &lt;QtGui&gt;
&gt; 
&gt; Just include the files you need.
&gt; 
will remove it.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoPlugin.cpp:43
&gt; &gt; +    if (player-&gt;state() == QMediaPlayer::PlayingState)
&gt; 
&gt; Why pausing the playback?
&gt; 
It was a requirement - disable the auto play. I will just remove it.  
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoPlugin.cpp:106
&gt; &gt; +        videoWidget-&gt;onPlayerStopped();
&gt; 
&gt; Could we somehow connect directly the videowidget with the player? Why this intermediate slot?
&gt; 
The intermediate slot checks the player state before calling  videoWidget-&gt;onPlayerStopped(). Let&apos;s keep it for now :)

&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:52
&gt; &gt; +    overlayWidget-&gt;onPlayerStopped();
&gt; 
&gt; Same here, could you connect directly to the overlayWidget?
Can we keep this for now? As I remember, our developer designed the plugin in this way is to bypass some old symbian/qtmobility issues. These issues may be already get fixed, but I prefer to keep current design for the backward compatibility.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:57
&gt; &gt; +    overlayWidget-&gt;onPlayerError();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:63
&gt; &gt; +}
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:67
&gt; &gt; +    overlayWidget-&gt;onBufferingMedia();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:72
&gt; &gt; +    overlayWidget-&gt;onBufferedMedia();
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:101
&gt; &gt; +    emit muted(isMuted);
&gt; 
&gt; you can connect two signals directly so you can avoid those bunch of SLOTs connect(foo, SIGNAL(), bar, SIGNAL());
&gt; 
Will fix it.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:106
&gt; &gt; +    emit volumeChanged(value);
&gt; 
&gt; you can connect two signals directly so you can avoid those bunch of SLOTs connect(foo, SIGNAL(), bar, SIGNAL());
&gt; 
Will Fix it.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/Html5VideoWidget.cpp:117
&gt; &gt; +    overlayWidget-&gt;setVolume(volume);
&gt; 
&gt; Connect directly same.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:29
&gt; &gt; +    : QWidget(parent, Qt::Tool | Qt::FramelessWindowHint)
&gt; 
&gt; Qt::Tool why?
&gt; 
Not know why. Will remove and test it.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:85
&gt; &gt; +    timer = new QTimer(this);
&gt; 
&gt; Could you give a name more explicit?
&gt; 
Will rename it
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:106
&gt; &gt; +    delete playerLabel;
&gt; 
&gt; Some of the deletes are not necessary. The parenting system of Qt will take care.
&gt; 
You are right. Will remove them
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:162
&gt; &gt; +QString OverlayWidget::timeToString(int seconds)
&gt; 
&gt; Not sure it is feasible but can&apos;t we use the implementation in WebKit somehow? If not could you make sure the implementation is the same?
&gt; 
I couldn&apos;t find it in WebKit. The implementation looks fine for me :)
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:172
&gt; &gt; +    setStyleSheet(&quot;QSlider::groove { border: 2px solid black; border-radius: 5px; background: white; }&quot;
&gt; 
&gt; Perhaps in a file and a qrc?
&gt; 
OK, I will remove them to a qss file.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.cpp:27
&gt; &gt; +    : QToolButton(parent)
&gt; 
&gt; A tool button? Why?
&gt;
Talked to Hui about this, and he said QToolButton&apos;s looks and feel fits the need in UI requirement, so we just used it here. 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.h:29
&gt; &gt; +class PlayerButton : public QToolButton {
&gt; 
&gt; Same why a QToolButton?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394685</commentid>
    <comment_count>36</comment_count>
      <attachid>91542</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-28 12:56:48 -0700</bug_when>
    <thetext>Created attachment 91542
platformpluginV21</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394686</commentid>
    <comment_count>37</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-04-28 12:59:08 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:29
&gt; &gt; +    : QWidget(parent, Qt::Tool | Qt::FramelessWindowHint)
&gt; 
&gt; Qt::Tool why?
&gt; 
&gt; Not know why. Will remove and test it.

Seems we need it to bypass a symbian/qt issue. Without Qt:Tool flag, this OverlayWidget(the control bar) doesn&apos;t show up. Let&apos;s keep it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397421</commentid>
    <comment_count>38</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-03 15:01:39 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:29
&gt; &gt; &gt; +    : QWidget(parent, Qt::Tool | Qt::FramelessWindowHint)
&gt; &gt; 
&gt; &gt; Qt::Tool why?
&gt; &gt; 
&gt; &gt; Not know why. Will remove and test it.
&gt; 
&gt; Seems we need it to bypass a symbian/qt issue. Without Qt:Tool flag, this OverlayWidget(the control bar) doesn&apos;t show up. Let&apos;s keep it for now.

Well it&apos;s more than a little workaround. I wonder why a simple QPushButton doesn&apos;t show up? Perhaps a little debugging in Qt would be nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397441</commentid>
    <comment_count>39</comment_count>
      <attachid>91542</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-03 15:17:54 -0700</bug_when>
    <thetext>Comment on attachment 91542
platformpluginV21

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

&gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:30
&gt; +    : QWidget(parent, Qt::Tool | Qt::FramelessWindowHint)

I&apos;m sure the button does not show up because of the parent (or something like that).

&gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:45
&gt; +    m_slider = new QSlider(Qt::Horizontal, this);

better name?

&gt; Source/WebKit/qt/symbian/platformplugin/PlayerLabel.cpp:32
&gt; +    m_bufferingAnimationIterator = m_bufferingAnimation;

Can you just take one icon and rotate it while you render? (with different angle).

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:23
&gt; +#if defined(ENABLE_QT_MULTIMEDIA) &amp;&amp; ENABLE_QT_MULTIMEDIA

Please be consistent with trunk. USE.

&gt; Source/WebKit/qt/symbian/platformplugin/WebPlugin.cpp:254
&gt; +#if defined(ENABLE_QT_MULTIMEDIA) &amp;&amp; ENABLE_QT_MULTIMEDIA

Ditto.

&gt; Source/WebKit/qt/symbian/platformplugin/platformplugin.pro:22
&gt; +    DEFINES += ENABLE_QT_MULTIMEDIA=1

Get rid of that one and update the code of the plugin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397684</commentid>
    <comment_count>40</comment_count>
    <who name="Hui Huang">hui_huang</who>
    <bug_when>2011-05-03 21:25:48 -0700</bug_when>
    <thetext>&gt; Can you just take one icon and rotate it while you render? (with different angle).

Using multiple &quot;refresh&quot; icons (instead of a progress bar) for buffering animation was based on the UI Design. I think the UI Designer took these icons from Symbian platform. I&apos;m not sure why Symbian doesn&apos;t take one icon and rotate as you suggested. Maybe for better performance?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397815</commentid>
    <comment_count>41</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-04 04:50:51 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; &gt; Can you just take one icon and rotate it while you render? (with different angle).
&gt; 
&gt; Using multiple &quot;refresh&quot; icons (instead of a progress bar) for buffering animation was based on the UI Design. I think the UI Designer took these icons from Symbian platform. I&apos;m not sure why Symbian doesn&apos;t take one icon and rotate as you suggested. Maybe for better performance?

Painting with a rotation should be fast, and it&apos;s better than having 3 or 4 images loaded in memory. Now perhaps there is a quality loss...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397890</commentid>
    <comment_count>42</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-04 06:50:14 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; (In reply to comment #40)
&gt; &gt; &gt; Can you just take one icon and rotate it while you render? (with different angle).
&gt; &gt; 
&gt; &gt; Using multiple &quot;refresh&quot; icons (instead of a progress bar) for buffering animation was based on the UI Design. I think the UI Designer took these icons from Symbian platform. I&apos;m not sure why Symbian doesn&apos;t take one icon and rotate as you suggested. Maybe for better performance?
&gt; 
&gt; Painting with a rotation should be fast, and it&apos;s better than having 3 or 4 images loaded in memory. Now perhaps there is a quality loss...

Well apparently visually it&apos;s better so keep it like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398160</commentid>
    <comment_count>43</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-05-04 12:13:02 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (In reply to comment #41)
&gt; &gt; (In reply to comment #40)
&gt; &gt; &gt; &gt; Can you just take one icon and rotate it while you render? (with different angle).
&gt; &gt; &gt; 
&gt; &gt; &gt; Using multiple &quot;refresh&quot; icons (instead of a progress bar) for buffering animation was based on the UI Design. I think the UI Designer took these icons from Symbian platform. I&apos;m not sure why Symbian doesn&apos;t take one icon and rotate as you suggested. Maybe for better performance?
&gt; &gt; 
&gt; &gt; Painting with a rotation should be fast, and it&apos;s better than having 3 or 4 images loaded in memory. Now perhaps there is a quality loss...
&gt; 
&gt; Well apparently visually it&apos;s better so keep it like this.

Thanks for the comments. I may update this patch in next week since I have some high priority work needed to be done in this week. But I will update it ASAP :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398172</commentid>
    <comment_count>44</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-05-04 12:24:26 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (From update of attachment 91542 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91542&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:30
&gt; &gt; +    : QWidget(parent, Qt::Tool | Qt::FramelessWindowHint)
&gt; 
&gt; I&apos;m sure the button does not show up because of the parent (or something like that).

The parent of the OverlayWidget is the HTML5VideoWidget, which has no parent.
Would this be a problem? Hui, could you please take a look at this? I think we should just keep the workaround if this is a Qt/Symbian bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398224</commentid>
    <comment_count>45</comment_count>
    <who name="Hui Huang">hui_huang</who>
    <bug_when>2011-05-04 13:49:13 -0700</bug_when>
    <thetext>&gt; The parent of the OverlayWidget is the HTML5VideoWidget, which has no parent.
&gt; Would this be a problem? Hui, could you please take a look at this? I think we should just keep the workaround if this is a Qt/Symbian bug.

I prototyped this part of code long time ago. Forgot why a tool window was used. Guess it was used together with the Tool Buttons. Maybe we need to change overlay to a top level widget to see if the push buttons show up:
OverlayWidget::OverlayWidget(int duration, QWidget *parent)
-    : QWidget(parent, Qt::Tool | Qt::FramelessWindowHint)
+    : QWidget(NULL, Qt::FramelessWindowHint)
    , isPaused(false)
    , isMuted(false)
{</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>400725</commentid>
    <comment_count>46</comment_count>
    <who name="Hui Huang">hui_huang</who>
    <bug_when>2011-05-09 13:50:54 -0700</bug_when>
    <thetext>I tried the solution below on Symbian 3. It works.

(In reply to comment #45)
&gt; I prototyped this part of code long time ago. Forgot why a tool window was used. Guess it was used together with the Tool Buttons. Maybe we need to change overlay to a top level widget to see if the push buttons show up:
&gt; OverlayWidget::OverlayWidget(int duration, QWidget *parent)
&gt; -    : QWidget(parent, Qt::Tool | Qt::FramelessWindowHint)
&gt; +    : QWidget(NULL, Qt::FramelessWindowHint)
&gt;     , isPaused(false)
&gt;     , isMuted(false)
&gt; {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401994</commentid>
    <comment_count>47</comment_count>
      <attachid>93124</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-05-11 08:42:48 -0700</bug_when>
    <thetext>Created attachment 93124
platformpluginV22

Thanks for Alexis &amp; Hui&apos;s help :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402012</commentid>
    <comment_count>48</comment_count>
      <attachid>93124</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-11 09:05:58 -0700</bug_when>
    <thetext>Comment on attachment 93124
platformpluginV22

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

Almost there :D, just very unhappy with the QToolButton.

&gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoPlugin.cpp:38
&gt; +    m_videoWidget = new HTML5VideoWidget(player-&gt;duration() / 1000);

Please call setDuration and remove it from the constructor.

&gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoWidget.cpp:23
&gt; +HTML5VideoWidget::HTML5VideoWidget(int duration, QWidget *parent)

why the duration as parameter? You can call setDuration afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402112</commentid>
    <comment_count>49</comment_count>
    <who name="Hui Huang">hui_huang</who>
    <bug_when>2011-05-11 11:09:42 -0700</bug_when>
    <thetext>&gt; Almost there :D, just very unhappy with the QToolButton.
Replaced QToolButton with QPushButton on Symbian 3 as you suggested. It works fine. Maybe we should just use QPushButton since we are not using Qt::Tool flag or QToolBar.

&gt; why the duration as parameter? You can call setDuration afterwards.
The method setDuration was added later as part of a bug fix. I agree that duration can be removed from the constructor after the introduction of this method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402221</commentid>
    <comment_count>50</comment_count>
      <attachid>93170</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-05-11 13:30:57 -0700</bug_when>
    <thetext>Created attachment 93170
platformpluginV23

Updated with Alexis&apos;s comments :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402238</commentid>
    <comment_count>51</comment_count>
      <attachid>93170</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-11 13:44:00 -0700</bug_when>
    <thetext>Comment on attachment 93170
platformpluginV23

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

&gt; Source/WebKit/qt/ChangeLog:90
&gt; +        * symbian/platformplugin/qss/OverlayWidget.qss: Added.

I trust you for regenerating the changelog at each round :D.

&gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoPlugin.cpp:30
&gt; +    m_savedOrientation = CAknAppUi::EAppUiOrientationUnspecified;

could you move that with , m_fullScreen(false) and friends?

&gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoPlugin.cpp:40
&gt; +        return;

Blank line after return.

&gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoWidget.cpp:26
&gt; +    m_overlayWidget = new OverlayWidget(this);

Can you put that alongside with : QVideoWidget(parent)

&gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoWidget.cpp:37
&gt; +    delete m_overlayWidget;

Don&apos;t need. m_overlayWidget = new OverlayWidget(this); it&apos;s parented :D.

&gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:96
&gt; +{

Please remove, it&apos;s empty.

&gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.h:33
&gt; +    ~OverlayWidget();

remove.

&gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.cpp:28
&gt; +    , m_buttonImage(0)

remove, seems useless.

&gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.h:24
&gt; +#include &lt;QIcon&gt;

remove.

&gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.h:39
&gt; +    QIcon* m_buttonImage;

What it is used for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402270</commentid>
    <comment_count>52</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-05-11 14:14:00 -0700</bug_when>
    <thetext>Thanks for the carefully reviewing, Alexis :)

(In reply to comment #51)
&gt; (From update of attachment 93170 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93170&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/qt/ChangeLog:90
&gt; &gt; +        * symbian/platformplugin/qss/OverlayWidget.qss: Added.
&gt; 
&gt; I trust you for regenerating the changelog at each round :D.
What is the problem for this qss? Yes, I regenerate the changelog every time.
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoPlugin.cpp:30
&gt; &gt; +    m_savedOrientation = CAknAppUi::EAppUiOrientationUnspecified;
&gt; 
&gt; could you move that with , m_fullScreen(false) and friends?
Sure, will change it
&gt; 
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoPlugin.cpp:40
&gt; &gt; +        return;
&gt; 
&gt; Blank line after return.
&gt; 
Will change it.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoWidget.cpp:26
&gt; &gt; +    m_overlayWidget = new OverlayWidget(this);
&gt; 
&gt; Can you put that alongside with : QVideoWidget(parent)
&gt; 
Will change it.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoWidget.cpp:37
&gt; &gt; +    delete m_overlayWidget;
&gt; 
&gt; Don&apos;t need. m_overlayWidget = new OverlayWidget(this); it&apos;s parented :D.
&gt; 
Will remove it.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:96
&gt; &gt; +{
&gt; 
&gt; Please remove, it&apos;s empty.
&gt; 
OK.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.h:33
&gt; &gt; +    ~OverlayWidget();
&gt; 
&gt; remove.
&gt; 
OK.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.cpp:28
&gt; &gt; +    , m_buttonImage(0)
&gt; 
&gt; remove, seems useless.
&gt; 
OK
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.h:24
&gt; &gt; +#include &lt;QIcon&gt;
&gt; 
&gt; remove.
&gt; 
OK.
&gt; &gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.h:39
&gt; &gt; +    QIcon* m_buttonImage;
&gt; 
&gt; What it is used for?
I think it is useless. Hui, any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402300</commentid>
    <comment_count>53</comment_count>
    <who name="Hui Huang">hui_huang</who>
    <bug_when>2011-05-11 14:43:49 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.h:39
&gt; &gt; &gt; +    QIcon* m_buttonImage;
&gt; &gt; 
&gt; &gt; What it is used for?
&gt; I think it is useless. Hui, any comments?

It is useless. My oversight :-) Please remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402336</commentid>
    <comment_count>54</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-11 15:22:31 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; Thanks for the carefully reviewing, Alexis :)
&gt; 
&gt; (In reply to comment #51)
&gt; &gt; (From update of attachment 93170 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93170&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/qt/ChangeLog:90
&gt; &gt; &gt; +        * symbian/platformplugin/qss/OverlayWidget.qss: Added.
&gt; &gt; 
&gt; &gt; I trust you for regenerating the changelog at each round :D.
&gt; What is the problem for this qss? Yes, I regenerate the changelog every time.

No it&apos;s no problem it was just to make sure because I didn&apos;t check every entries :D.

&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoPlugin.cpp:30
&gt; &gt; &gt; +    m_savedOrientation = CAknAppUi::EAppUiOrientationUnspecified;
&gt; &gt; 
&gt; &gt; could you move that with , m_fullScreen(false) and friends?
&gt; Sure, will change it
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoPlugin.cpp:40
&gt; &gt; &gt; +        return;
&gt; &gt; 
&gt; &gt; Blank line after return.
&gt; &gt; 
&gt; Will change it.
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoWidget.cpp:26
&gt; &gt; &gt; +    m_overlayWidget = new OverlayWidget(this);
&gt; &gt; 
&gt; &gt; Can you put that alongside with : QVideoWidget(parent)
&gt; &gt; 
&gt; Will change it.
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/HTML5VideoWidget.cpp:37
&gt; &gt; &gt; +    delete m_overlayWidget;
&gt; &gt; 
&gt; &gt; Don&apos;t need. m_overlayWidget = new OverlayWidget(this); it&apos;s parented :D.
&gt; &gt; 
&gt; Will remove it.
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.cpp:96
&gt; &gt; &gt; +{
&gt; &gt; 
&gt; &gt; Please remove, it&apos;s empty.
&gt; &gt; 
&gt; OK.
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/OverlayWidget.h:33
&gt; &gt; &gt; +    ~OverlayWidget();
&gt; &gt; 
&gt; &gt; remove.
&gt; &gt; 
&gt; OK.
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.cpp:28
&gt; &gt; &gt; +    , m_buttonImage(0)
&gt; &gt; 
&gt; &gt; remove, seems useless.
&gt; &gt; 
&gt; OK
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.h:24
&gt; &gt; &gt; +#include &lt;QIcon&gt;
&gt; &gt; 
&gt; &gt; remove.
&gt; &gt; 
&gt; OK.
&gt; &gt; &gt; Source/WebKit/qt/symbian/platformplugin/PlayerButton.h:39
&gt; &gt; &gt; +    QIcon* m_buttonImage;
&gt; &gt; 
&gt; &gt; What it is used for?
&gt; I think it is useless. Hui, any comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402984</commentid>
    <comment_count>55</comment_count>
      <attachid>93310</attachid>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-05-12 11:17:20 -0700</bug_when>
    <thetext>Created attachment 93310
platformpluginV24</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402994</commentid>
    <comment_count>56</comment_count>
      <attachid>93310</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-12 11:22:11 -0700</bug_when>
    <thetext>Comment on attachment 93310
platformpluginV24

It seems good. Now you have to find a reviewer :D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403084</commentid>
    <comment_count>57</comment_count>
    <who name="Yi Shen">max.hong.shen</who>
    <bug_when>2011-05-12 12:42:54 -0700</bug_when>
    <thetext>Thanks for your review, Alexis :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407707</commentid>
    <comment_count>58</comment_count>
      <attachid>93310</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2011-05-22 14:56:39 -0700</bug_when>
    <thetext>Comment on attachment 93310
platformpluginV24

Looks good to me. Thanks for helping with the review Alexis. 

r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407708</commentid>
    <comment_count>59</comment_count>
      <attachid>93310</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-22 15:18:39 -0700</bug_when>
    <thetext>Comment on attachment 93310
platformpluginV24

Clearing flags on attachment: 93310

Committed r87044: &lt;http://trac.webkit.org/changeset/87044&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407709</commentid>
    <comment_count>60</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-05-22 15:18:48 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407967</commentid>
    <comment_count>61</comment_count>
    <who name="Ademar Reis">ademar</who>
    <bug_when>2011-05-23 07:37:39 -0700</bug_when>
    <thetext>Revision r87044 cherry-picked into qtwebkit-2.2 with commit c39655e &lt;http://gitorious.org/webkit/qtwebkit/commit/c39655e&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90355</attachid>
            <date>2011-04-20 10:01:42 -0700</date>
            <delta_ts>2011-04-20 11:11:14 -0700</delta_ts>
            <desc>platformpluginV1</desc>
            <filename>58435.patch</filename>
            <type>text/plain</type>
            <size>22009</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDg0Mzgy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDQt
MjAgIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9y
bSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU4NDM1CisKKyAgICAgICAgVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4uCisKKyAg
ICAgICAgKiBTb3VyY2UvV2ViS2l0LnBybzogQWRkIHBsYXRmb3JtcGx1Z2luIHBhdGggdG8gdGhl
IFNVQkRJUlMuCisKIDIwMTEtMDQtMTggIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViS2l0
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0LnBybwkocmV2aXNpb24gODQzNjcpCisr
KyBTb3VyY2UvV2ViS2l0LnBybwkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCBidWls
ZC1xdHNjcmlwdCB7CiB9CiAKIHN5bWJpYW4geworICAgIGV4aXN0cygkJFBXRC9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbik6IFNVQkRJUlMgKz0gV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4KKwogICAgICMgRm9yd2FyZCB0aGUgaW5zdGFsbCB0YXJnZXQgdG8gV2ViQ29y
ZS4gQSB3b3JrYXJvdW5kIHNpbmNlIElOU1RBTExTIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3Igc3lt
YmlhbgogICAgIGluc3RhbGwuY29tbWFuZHMgPSAkKE1BS0UpIC1DIFdlYkNvcmUgaW5zdGFsbAog
ICAgIFFNQUtFX0VYVFJBX1RBUkdFVFMgKz0gaW5zdGFsbApJbmRleDogU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0MzgyKQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw1NCBAQAorMjAxMS0wNC0yMCAgWWkgU2hlbiAgPHlpLjQuc2hlbkBub2tp
YS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1F0XSBVcHN0cmVhbSBTeW1iaWFuIHBsYXRmb3JtIHBsdWdpbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0MzUKKworICAgICAgICBVcHN0cmVhbSBT
eW1iaWFuIHBsYXRmb3JtIHBsdWdpbi4KKworICAgICAgICAqIFF0V2ViS2l0LnBybzogQWRkIHBs
YXRmb3JtcGx1Z2luLmRsbCB0byB0aGUgUXRXZWJLaXQuc2lzLgorICAgICAgICAqIHN5bWJpYW4v
cGxhdGZvcm1wbHVnaW46IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4v
V2ViUGx1Z2luLmNwcDogQWRkZWQuCisgICAgICAgIChJdGVtTGlzdERlbGVnYXRlOjpJdGVtTGlz
dERlbGVnYXRlKToKKyAgICAgICAgKEl0ZW1MaXN0RGVsZWdhdGU6OnBhaW50KToKKyAgICAgICAg
KFBvcHVwOjpQb3B1cCk6CisgICAgICAgIChQb3B1cDo6cmVzaXplRXZlbnQpOgorICAgICAgICAo
UG9wdXA6OnBvcHVsYXRlTGlzdCk6CisgICAgICAgIChQb3B1cDo6b25JdGVtU2VsZWN0ZWQpOgor
ICAgICAgICAoUG9wdXA6OnVwZGF0ZVNlbGVjdGlvbnNCZWZvcmVEaWFsb2dDbG9zaW5nKToKKyAg
ICAgICAgKFBvcHVwOjp1cGRhdGVBbmRDbG9zZSk6CisgICAgICAgIChXZWJQb3B1cDo6V2ViUG9w
dXApOgorICAgICAgICAoV2ViUG9wdXA6On5XZWJQb3B1cCk6CisgICAgICAgIChXZWJQb3B1cDo6
Y3JlYXRlU2luZ2xlU2VsZWN0aW9uUG9wdXApOgorICAgICAgICAoV2ViUG9wdXA6OmNyZWF0ZU11
bHRpcGxlU2VsZWN0aW9uUG9wdXApOgorICAgICAgICAoV2ViUG9wdXA6OmNyZWF0ZVBvcHVwKToK
KyAgICAgICAgKFdlYlBvcHVwOjpzaG93KToKKyAgICAgICAgKFdlYlBvcHVwOjpoaWRlKToKKyAg
ICAgICAgKFdlYlBvcHVwOjpwb3B1cENsb3NlZCk6CisgICAgICAgIChXZWJQb3B1cDo6aXRlbUNs
aWNrZWQpOgorICAgICAgICAoU2luZ2xlU2VsZWN0aW9uUG9wdXA6OlNpbmdsZVNlbGVjdGlvblBv
cHVwKToKKyAgICAgICAgKE11bHRpcGxlU2VsZWN0aW9uUG9wdXA6Ok11bHRpcGxlU2VsZWN0aW9u
UG9wdXApOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93Tm90aWZpY2F0
aW9uKToKKyAgICAgICAgKFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAo
V2ViUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24pOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vV2ViUGx1Z2luLmg6IEFkZGVkLgorICAgICAgICAoUG9wdXA6OnByZVNlbGVjdGVkSW5k
aWNlcyk6CisgICAgICAgIChQb3B1cDo6bGlzdFdpZGdldCk6CisgICAgICAgIChXZWJOb3RpZmlj
YXRpb25QcmVzZW50ZXI6OldlYk5vdGlmaWNhdGlvblByZXNlbnRlcik6CisgICAgICAgIChXZWJO
b3RpZmljYXRpb25QcmVzZW50ZXI6On5XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAg
ICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOiBBZGRlZC4KKyAg
ICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOiBB
ZGRlZC4KKyAgICAgICAgKFFXZWJTZWxlY3REYXRhOjp+UVdlYlNlbGVjdERhdGEpOgorICAgICAg
ICAoUVdlYlNlbGVjdE1ldGhvZDo6flFXZWJTZWxlY3RNZXRob2QpOgorICAgICAgICAoUVdlYk5v
dGlmaWNhdGlvbkRhdGE6On5RV2ViTm90aWZpY2F0aW9uRGF0YSk6CisgICAgICAgIChRV2ViTm90
aWZpY2F0aW9uUHJlc2VudGVyOjpRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAg
KFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6On5RV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToK
KyAgICAgICAgKFFXZWJUb3VjaE1vZGlmaWVyOjp+UVdlYlRvdWNoTW9kaWZpZXIpOgorICAgICAg
ICAoUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OlFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
KToKKyAgICAgICAgKFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXIpOgorICAgICAgICAoUVdlYktpdFBsYXRmb3JtUGx1Z2luOjp+UVdlYktpdFBs
YXRmb3JtUGx1Z2luKToKKwogMjAxMS0wNC0yMCAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC9RdFdlYktpdC5wcm8JKHJldmlzaW9uIDg0MzY3KQorKysgU291cmNlL1dlYktpdC9x
dC9RdFdlYktpdC5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsMTAgQEAgc3ltYmlh
biB7CiAgICAgICAgICBERVBMT1lNRU5UICs9IGRlY2xhcmF0aXZlSW1wb3J0CiAgICAgfQogCi0g
ICAgREVQTE9ZTUVOVCArPSB3ZWJraXRzaXNoZWFkZXIgd2Via2l0bGlicyB3ZWJraXRiYWNrdXAK
KyAgICBwbGF0Zm9ybXBsdWdpbi5zb3VyY2VzID0gJCRPVVRQVVRfRElSL3BsdWdpbnMvUXRXZWJL
aXQvcGxhdGZvcm1wbHVnaW4kJHtRVF9MSUJJTkZJWH0uZGxsCisgICAgcGxhdGZvcm1wbHVnaW4u
cGF0aCA9IGM6JCRRVF9QTFVHSU5TX0JBU0VfRElSL1F0V2ViS2l0CisKKyAgICBERVBMT1lNRU5U
ICs9IHdlYmtpdHNpc2hlYWRlciB3ZWJraXRsaWJzIHdlYmtpdGJhY2t1cCBwbGF0Zm9ybXBsdWdp
bgogICAgICFDT05GSUcocHJvZHVjdGlvbik6Q09ORklHLT1kZWZfZmlsZXMKIAogICAgICMgTmVl
ZCB0byBidWlsZCB0aGVzZSBzb3VyY2VzIGhlcmUgYmVjYXVzZSBvZiBleHBvcnRlZCBzeW1ib2xz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vV2ViUGx1Z2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlh
bi9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJQbHVnaW4uaCIKKworI2luY2x1ZGUgPFF0R3VpPgorI2luY2x1ZGUgPFF0UGx1Z2luPgorI2lu
Y2x1ZGUgPGFrbmRpc2NyZWV0cG9wdXAuaD4KKworY2xhc3MgSXRlbUxpc3REZWxlZ2F0ZSA6IHB1
YmxpYyBRU3R5bGVkSXRlbURlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBJdGVtTGlzdERlbGVnYXRl
KFFPYmplY3QqIHBhcmVudCA9IDApCisgICAgICAgICAgIDogUVN0eWxlZEl0ZW1EZWxlZ2F0ZShw
YXJlbnQpCisgICAgeworI2lmICFkZWZpbmVkKFFUX05PX0xJQlJBUlkpCisgICAgICAgICAgUUxp
YnJhcnkgdGVzdExpYigicXR0ZXN0YWJpbGl0eSIpOworICAgICAgICAgIGlmICh0ZXN0TGliLmxv
YWQoKSkgeworICAgICAgICAgICAgICB0eXBlZGVmIHZvaWQgKCpUYXNJbml0aWFsaXplKSAodm9p
ZCk7CisgICAgICAgICAgICAgIFRhc0luaXRpYWxpemUgaW5pdEZ1bmN0aW9uID0gKFRhc0luaXRp
YWxpemUpdGVzdExpYi5yZXNvbHZlKCJxdF90ZXN0YWJpbGl0eV9pbml0Iik7CisjaWZkZWYgUV9P
U19TWU1CSUFOCisgICAgICAgICAgICAgIGlmICghaW5pdEZ1bmN0aW9uKQorICAgICAgICAgICAg
ICAgICAgaW5pdEZ1bmN0aW9uID0gKFRhc0luaXRpYWxpemUpdGVzdExpYi5yZXNvbHZlKCIxIik7
CisjZW5kaWYKKyAgICAgICAgICAgICAgaWYgKGluaXRGdW5jdGlvbikKKyAgICAgICAgICAgICAg
ICAgIGluaXRGdW5jdGlvbigpOworICAgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKworICAgIHZv
aWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvblZpZXdJdGVtJiBv
cHRpb24sIGNvbnN0IFFNb2RlbEluZGV4JiBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIFFf
QVNTRVJUKGluZGV4LmlzVmFsaWQoKSk7CisKKyAgICAgICAgUVN0eWxlT3B0aW9uVmlld0l0ZW1W
NCBvcHQgPSBvcHRpb247CisgICAgICAgIG9wdC5zdGF0ZSA9IG9wdC5zdGF0ZSAmICh+UVN0eWxl
OjpTdGF0ZV9IYXNGb2N1cyk7CisgICAgICAgIG9wdC50ZXh0ID0gaW5kZXguZGF0YSgpLnRvU3Ry
aW5nKCk7CisgICAgICAgIGluaXRTdHlsZU9wdGlvbigmb3B0LCBpbmRleCk7CisKKyAgICAgICAg
Y29uc3QgUVdpZGdldCogd2lkZ2V0ID0gMDsKKyAgICAgICAgUG9wdXAqIHNlbGVjdFBvcHVwID0g
cW9iamVjdF9jYXN0PFBvcHVwKj4ocGFyZW50KCkpOworICAgICAgICBpZiAoc2VsZWN0UG9wdXAp
CisgICAgICAgICAgICB3aWRnZXQgPSBzZWxlY3RQb3B1cC0+bGlzdFdpZGdldCgpOworCisgICAg
ICAgIFFTdHlsZSogc3R5bGUgPSB3aWRnZXQgPyB3aWRnZXQtPnN0eWxlKCkgOiBRQXBwbGljYXRp
b246OnN0eWxlKCk7CisgICAgICAgIHN0eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6OkNFX0l0ZW1W
aWV3SXRlbSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsKKyAgICB9Cit9OworCitQb3B1cDo6UG9w
dXAoY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpIDogbV9kYXRhKGRhdGEpCit7CisgICAgc2V0
TW9kYWwodHJ1ZSk7CisgICAgbV9saXN0ID0gbmV3IFFMaXN0V2lkZ2V0KHRoaXMpOworICAgIGlu
dCB3aWR0aCA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zaXplKCkud2lkdGgoKTsKKyAgICBR
VkJveExheW91dCogdkxheW91dCA9IG5ldyBRVkJveExheW91dCh0aGlzKTsKKyAgICB2TGF5b3V0
LT5zZXRDb250ZW50c01hcmdpbnMod2lkdGggLyAyMCwgNSwgNSwgNSk7CisgICAgaWYgKGRhdGEu
bXVsdGlwbGUoKSkKKyAgICAgICAgbV9saXN0LT5zZXRTZWxlY3Rpb25Nb2RlKFFBYnN0cmFjdEl0
ZW1WaWV3OjpNdWx0aVNlbGVjdGlvbik7CisgICAgcG9wdWxhdGVMaXN0KCk7CisgICAgdkxheW91
dC0+YWRkV2lkZ2V0KG1fbGlzdCk7CisgICAKKyAgICBJdGVtTGlzdERlbGVnYXRlKiBpdGVtRGVs
ZWdhdGUgPSBuZXcgSXRlbUxpc3REZWxlZ2F0ZSh0aGlzKTsKKyAgICBtX2xpc3QtPnNldEl0ZW1E
ZWxlZ2F0ZShpdGVtRGVsZWdhdGUpOworfQorCit2b2lkIFBvcHVwOjpyZXNpemVFdmVudChRUmVz
aXplRXZlbnQqIGUpCit7CisgICAgUURpYWxvZzo6cmVzaXplRXZlbnQoZSk7CisgICAgbV9saXN0
LT5zZXRHZW9tZXRyeShtX2xpc3QtPmdlb21ldHJ5KCkueCgpLCBtX2xpc3QtPmdlb21ldHJ5KCku
eSgpLCBtX2xpc3QtPndpZHRoKCksIG1fbGlzdC0+aGVpZ2h0KCkpOworfQorCit2b2lkIFBvcHVw
Ojpwb3B1bGF0ZUxpc3QoKQoreworICAgIFFMaXN0V2lkZ2V0SXRlbSogbGlzdEl0ZW07CisgICAg
bV9wcmVTZWxlY3RlZEluZGljZXMuY2xlYXIoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
ZGF0YS5pdGVtQ291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2RhdGEuaXRlbVR5cGUoaSkg
PT0gUVdlYlNlbGVjdERhdGE6Ok9wdGlvbikgeworICAgICAgICAgICAgbGlzdEl0ZW0gPSBuZXcg
UUxpc3RXaWRnZXRJdGVtKG1fZGF0YS5pdGVtVGV4dChpKSk7CisgICAgICAgICAgICBtX2xpc3Qt
PmFkZEl0ZW0obGlzdEl0ZW0pOworICAgICAgICAgICAgbGlzdEl0ZW0tPnNldFNlbGVjdGVkKG1f
ZGF0YS5pdGVtSXNTZWxlY3RlZChpKSk7CisgICAgICAgICAgICBpZiAobV9kYXRhLml0ZW1Jc1Nl
bGVjdGVkKGkpKSB7CisgICAgICAgICAgICAgICAgbV9wcmVTZWxlY3RlZEluZGljZXMuYXBwZW5k
KGkpOworICAgICAgICAgICAgICAgIG1fbGlzdC0+c2V0Q3VycmVudEl0ZW0obGlzdEl0ZW0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1fZGF0YS5pdGVtVHlwZShpKSA9PSBR
V2ViU2VsZWN0RGF0YTo6R3JvdXApIHsKKyAgICAgICAgICAgIGxpc3RJdGVtID0gbmV3IFFMaXN0
V2lkZ2V0SXRlbShtX2RhdGEuaXRlbVRleHQoaSkpOworICAgICAgICAgICAgbV9saXN0LT5hZGRJ
dGVtKGxpc3RJdGVtKTsKKyAgICAgICAgICAgIGxpc3RJdGVtLT5zZXRTZWxlY3RlZChmYWxzZSk7
CisgICAgICAgICAgICBsaXN0SXRlbS0+c2V0RmxhZ3MoUXQ6Ok5vSXRlbUZsYWdzKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjb25uZWN0KG1fbGlzdCwgU0lHTkFMKGl0ZW1DbGlja2VkKFFMaXN0
V2lkZ2V0SXRlbSopKSwgdGhpcywgU0xPVChvbkl0ZW1TZWxlY3RlZChRTGlzdFdpZGdldEl0ZW0q
KSkpOworfQorCit2b2lkIFBvcHVwOjpvbkl0ZW1TZWxlY3RlZChRTGlzdFdpZGdldEl0ZW0qIGl0
ZW0pCit7CisgICAgaWYgKGl0ZW0tPmZsYWdzKCkgIT0gUXQ6Ok5vSXRlbUZsYWdzKSB7CisgICAg
ICAgIGlmICghbV9kYXRhLm11bHRpcGxlKCkpCisgICAgICAgICAgICB1cGRhdGVBbmRDbG9zZSgp
OworICAgIH0KK30KKwordm9pZCBQb3B1cDo6dXBkYXRlU2VsZWN0aW9uc0JlZm9yZURpYWxvZ0Ns
b3NpbmcoKQoreworICAgIFFMaXN0PFFMaXN0V2lkZ2V0SXRlbSo+IHNlbGVjdGVkID0gbV9saXN0
LT5zZWxlY3RlZEl0ZW1zKCk7CisgICAgaWYgKG1fZGF0YS5tdWx0aXBsZSgpKSB7CisgICAgICAg
IFFMaXN0PGludD4gc2VsZWN0ZWRJbmRpY2VzOworICAgICAgICBRX0ZPUkVBQ0goUUxpc3RXaWRn
ZXRJdGVtKiBpdGVtLCBzZWxlY3RlZCkKKyAgICAgICAgICAgIHNlbGVjdGVkSW5kaWNlcy5hcHBl
bmQobV9saXN0LT5yb3coaXRlbSkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9k
YXRhLml0ZW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgobV9wcmVTZWxlY3RlZElu
ZGljZXMuY29udGFpbnMoaSkgJiYgIXNlbGVjdGVkSW5kaWNlcy5jb250YWlucyhpKSkgfHwgKCFt
X3ByZVNlbGVjdGVkSW5kaWNlcy5jb250YWlucyhpKSAmJiBzZWxlY3RlZEluZGljZXMuY29udGFp
bnMoaSkpKQorICAgICAgICAgICAgICAgIGVtaXQgaXRlbUNsaWNrZWQoaSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBRX0ZPUkVBQ0goUUxpc3RXaWRnZXRJdGVtKiBpdGVtLCBz
ZWxlY3RlZCkKKyAgICAgICAgICAgIGVtaXQgaXRlbUNsaWNrZWQobV9saXN0LT5yb3coaXRlbSkp
OworICAgIH0KK30KKwordm9pZCBQb3B1cDo6dXBkYXRlQW5kQ2xvc2UoKQoreworICAgIHVwZGF0
ZVNlbGVjdGlvbnNCZWZvcmVEaWFsb2dDbG9zaW5nKCk7CisgICAgYWNjZXB0KCk7Cit9CisKK1dl
YlBvcHVwOjpXZWJQb3B1cCgpCisgICAgOiBtX3BvcHVwKDApCit7Cit9CisKK1dlYlBvcHVwOjp+
V2ViUG9wdXAoKQoreworICAgIGlmIChtX3BvcHVwKQorICAgICAgICBtX3BvcHVwLT5kZWxldGVM
YXRlcigpOworfQorCitQb3B1cCogV2ViUG9wdXA6OmNyZWF0ZVNpbmdsZVNlbGVjdGlvblBvcHVw
KGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQoreworICAgIHJldHVybiBuZXcgU2luZ2xlU2Vs
ZWN0aW9uUG9wdXAoZGF0YSk7Cit9CisKK1BvcHVwKiBXZWJQb3B1cDo6Y3JlYXRlTXVsdGlwbGVT
ZWxlY3Rpb25Qb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYgZGF0YSkKK3sKKyAgICByZXR1cm4g
bmV3IE11bHRpcGxlU2VsZWN0aW9uUG9wdXAoZGF0YSk7Cit9CisKK1BvcHVwKiBXZWJQb3B1cDo6
Y3JlYXRlUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpCit7CisgICAgUG9wdXAqIHJl
c3VsdCA9IGRhdGEubXVsdGlwbGUoKSA/IGNyZWF0ZU11bHRpcGxlU2VsZWN0aW9uUG9wdXAoZGF0
YSkgOiBjcmVhdGVTaW5nbGVTZWxlY3Rpb25Qb3B1cChkYXRhKTsKKyAgICBjb25uZWN0KHJlc3Vs
dCwgU0lHTkFMKGZpbmlzaGVkKGludCkpLCB0aGlzLCBTTE9UKHBvcHVwQ2xvc2VkKCkpKTsKKyAg
ICBjb25uZWN0KHJlc3VsdCwgU0lHTkFMKGl0ZW1DbGlja2VkKGludCkpLCB0aGlzLCBTTE9UKGl0
ZW1DbGlja2VkKGludCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdlYlBvcHVw
OjpzaG93KGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQoreworICAgIGlmIChtX3BvcHVwKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3BvcHVwID0gY3JlYXRlUG9wdXAoZGF0YSk7CisgICAg
bV9wb3B1cC0+c2hvd01heGltaXplZCgpOworfQorCit2b2lkIFdlYlBvcHVwOjpoaWRlKCkKK3sK
KyAgICBpZiAoIW1fcG9wdXApCisgICAgICAgIHJldHVybjsKKworICAgIG1fcG9wdXAtPmFjY2Vw
dCgpOworfQorCit2b2lkIFdlYlBvcHVwOjpwb3B1cENsb3NlZCgpCit7CisgICAgaWYgKCFtX3Bv
cHVwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BvcHVwLT5kZWxldGVMYXRlcigpOworICAg
IG1fcG9wdXAgPSAwOworICAgIGVtaXQgZGlkSGlkZSgpOworfQorCit2b2lkIFdlYlBvcHVwOjpp
dGVtQ2xpY2tlZChpbnQgaWR4KQoreworICAgIGVtaXQgc2VsZWN0SXRlbShpZHgsIHRydWUsIGZh
bHNlKTsKK30KKworU2luZ2xlU2VsZWN0aW9uUG9wdXA6OlNpbmdsZVNlbGVjdGlvblBvcHVwKGNv
bnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQorICAgIDogUG9wdXAoZGF0YSkKK3sKKyAgICBzZXRX
aW5kb3dUaXRsZSgiU2VsZWN0IGl0ZW0iKTsKKworICAgIFFBY3Rpb24qIGNhbmNlbEFjdGlvbiA9
IG5ldyBRQWN0aW9uKCJDYW5jZWwiLCB0aGlzKTsKKyAgICBjYW5jZWxBY3Rpb24tPnNldFNvZnRL
ZXlSb2xlKFFBY3Rpb246Ok5lZ2F0aXZlU29mdEtleSk7CisgICAgYWRkQWN0aW9uKGNhbmNlbEFj
dGlvbik7CisgICAgY29ubmVjdChjYW5jZWxBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkp
LCB0aGlzLCBTTE9UKHJlamVjdCgpKSk7Cit9CisKK011bHRpcGxlU2VsZWN0aW9uUG9wdXA6Ok11
bHRpcGxlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpCisgICAgOiBQ
b3B1cChkYXRhKQoreworICAgIHNldFdpbmRvd1RpdGxlKCJTZWxlY3QgaXRlbXMiKTsKKworICAg
IFFBY3Rpb24qIGNhbmNlbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJDYW5jZWwiLCB0aGlzKTsKKyAg
ICBjYW5jZWxBY3Rpb24tPnNldFNvZnRLZXlSb2xlKFFBY3Rpb246Ok5lZ2F0aXZlU29mdEtleSk7
CisgICAgYWRkQWN0aW9uKGNhbmNlbEFjdGlvbik7CisgICAgY29ubmVjdChjYW5jZWxBY3Rpb24s
IFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCB0aGlzLCBTTE9UKHJlamVjdCgpKSk7CisKKyAgICBR
QWN0aW9uKiBva0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJPayIsIHRoaXMpOworICAgIG9rQWN0aW9u
LT5zZXRTb2Z0S2V5Um9sZShRQWN0aW9uOjpQb3NpdGl2ZVNvZnRLZXkpOworICAgIGFkZEFjdGlv
bihva0FjdGlvbik7CisgICAgY29ubmVjdChva0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29s
KSksIHRoaXMsIFNMT1QodXBkYXRlQW5kQ2xvc2UoKSkpOworfQorCit2b2lkIFdlYk5vdGlmaWNh
dGlvblByZXNlbnRlcjo6c2hvd05vdGlmaWNhdGlvbihjb25zdCBRV2ViTm90aWZpY2F0aW9uRGF0
YSogZGF0YSkKK3sKKyAgICBIQnVmQyogdGl0bGUgPSBIQnVmQzo6TmV3KGRhdGEtPnRpdGxlKCku
c2l6ZSgpKTsKKyAgICAqdGl0bGUgPSBUUHRyQyhkYXRhLT50aXRsZSgpLnV0ZjE2KCksIGRhdGEt
PnRpdGxlKCkuc2l6ZSgpKTsKKyAgICBIQnVmQyogbWVzc2FnZSA9IEhCdWZDOjpOZXcoZGF0YS0+
bWVzc2FnZSgpLnNpemUoKSk7CisgICAgKm1lc3NhZ2UgPSBUUHRyQyhkYXRhLT5tZXNzYWdlKCku
dXRmMTYoKSwgZGF0YS0+bWVzc2FnZSgpLnNpemUoKSk7CisgICAgVFJBUF9JR05PUkUoQ0FrbkRp
c2NyZWV0UG9wdXA6OlNob3dHbG9iYWxQb3B1cEwoKnRpdGxlLCAqbWVzc2FnZSwgS0FrbnNJSURO
b25lLCBLTnVsbERlc0MpKTsKKyAgICBlbWl0IG5vdGlmaWNhdGlvbkNsb3NlZCgpOworICAgIGRl
bGV0ZUxhdGVyKCk7CisgICAgZGVsZXRlIHRpdGxlOworICAgIGRlbGV0ZSBtZXNzYWdlOworfQor
Citib29sIFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikg
Y29uc3QKK3sKKyAgICBpZiAoZXh0ZW5zaW9uID09IE11bHRpcGxlU2VsZWN0aW9ucykKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGV4dGVuc2lvbiA9PSBOb3RpZmljYXRpb25zKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZXh0ZW5zaW9uID09IEZ1bGxTY3JlZW5WaWRlb1Bs
YXllcikKKyAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK1FPYmplY3QqIFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNp
b24pIGNvbnN0Cit7CisgICAgc3dpdGNoIChleHRlbnNpb24pIHsKKyAgICBjYXNlIE11bHRpcGxl
U2VsZWN0aW9uczoKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJQb3B1cCgpOworICAgIGNhc2UgTm90
aWZpY2F0aW9uczoKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIo
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK1FfRVhQT1JU
X1BMVUdJTjIocXdlYnNlbGVjdGltLCBXZWJQbHVnaW4pCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisgCisjaWZu
ZGVmIFdlYlBsdWdpbl9oCisjZGVmaW5lIFdlYlBsdWdpbl9oCisKKyNpbmNsdWRlICJxd2Via2l0
cGxhdGZvcm1wbHVnaW4uaCIKKyNpbmNsdWRlIDxRRGlhbG9nPgorCitjbGFzcyBRTGlzdFdpZGdl
dEl0ZW07CitjbGFzcyBRTGlzdFdpZGdldDsKK2NsYXNzIFFTY3JvbGxBcmVhOworCitjbGFzcyBQ
b3B1cFNjcm9sbGluZ0hhbmRsZXI7CisKK2NsYXNzIFBvcHVwIDogcHVibGljIFFEaWFsb2cgewor
ICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmKTsK
KyAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbnNCZWZvcmVEaWFsb2dDbG9zaW5nKCk7CisgICAgUUxp
c3Q8aW50PiBwcmVTZWxlY3RlZEluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3ByZVNlbGVjdGVk
SW5kaWNlczsgfQorICAgIFFMaXN0V2lkZ2V0KiBsaXN0V2lkZ2V0KCkgeyByZXR1cm4gbV9saXN0
OyB9CisKK3NpZ25hbHM6CisgICAgdm9pZCBpdGVtQ2xpY2tlZChpbnQgaWR4KTsKKworcHJvdGVj
dGVkIHNsb3RzOgorICAgIHZvaWQgb25JdGVtU2VsZWN0ZWQoUUxpc3RXaWRnZXRJdGVtKik7Cisg
ICAgdm9pZCB1cGRhdGVBbmRDbG9zZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBwb3B1bGF0
ZUxpc3QoKTsKKyAgICB2b2lkIHJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCopOworICAgIGNvbnN0
IFFXZWJTZWxlY3REYXRhJiBtX2RhdGE7CisgICAgUUxpc3RXaWRnZXQqIG1fbGlzdDsKKyAgICBR
TGlzdDxpbnQ+IG1fcHJlU2VsZWN0ZWRJbmRpY2VzOworICAgIFBvcHVwU2Nyb2xsaW5nSGFuZGxl
ciogbV9zY3JvbGxpbmdIYW5kbGVyOworfTsKKworCitjbGFzcyBTaW5nbGVTZWxlY3Rpb25Qb3B1
cCA6IHB1YmxpYyBQb3B1cCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBTaW5nbGVTZWxl
Y3Rpb25Qb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYpOworfTsKKworCitjbGFzcyBNdWx0aXBs
ZVNlbGVjdGlvblBvcHVwIDogcHVibGljIFBvcHVwIHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIE11bHRpcGxlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmKTsKK307CisK
KworY2xhc3MgV2ViUG9wdXAgOiBwdWJsaWMgUVdlYlNlbGVjdE1ldGhvZCB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICBXZWJQb3B1cCgpOworICAgIH5XZWJQb3B1cCgpOworCisgICAgdmly
dHVhbCB2b2lkIHNob3coY29uc3QgUVdlYlNlbGVjdERhdGEmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aGlkZSgpOworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgcG9wdXBDbG9zZWQoKTsKKyAgICB2
b2lkIGl0ZW1DbGlja2VkKGludCBpZHgpOworCitwcml2YXRlOgorICAgIFBvcHVwKiBtX3BvcHVw
OworCisgICAgUG9wdXAqIGNyZWF0ZVBvcHVwKGNvbnN0IFFXZWJTZWxlY3REYXRhJik7CisgICAg
UG9wdXAqIGNyZWF0ZVNpbmdsZVNlbGVjdGlvblBvcHVwKGNvbnN0IFFXZWJTZWxlY3REYXRhJik7
CisgICAgUG9wdXAqIGNyZWF0ZU11bHRpcGxlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdlYlNlbGVj
dERhdGEmKTsKK307CisKK2NsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciA6IHB1YmxpYyBR
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFdl
Yk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHt9CisgICAgfldlYk5vdGlmaWNhdGlvblByZXNlbnRl
cigpIHt9CisgICAgdm9pZCBzaG93Tm90aWZpY2F0aW9uKGNvbnN0IFFXZWJOb3RpZmljYXRpb25E
YXRhKik7Cit9OworCitjbGFzcyBXZWJQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFX
ZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CisgICAgUV9PQkpFQ1QKKyAgICBRX0lOVEVSRkFDRVMoUVdl
YktpdFBsYXRmb3JtUGx1Z2luKQorcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4
dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0OworICAgIHZpcnR1YWwgUU9iamVjdCogY3JlYXRlRXh0
ZW5zaW9uKEV4dGVuc2lvbikgY29uc3Q7Cit9OworCisjZW5kaWYgLy8gV2ViUGx1Z2luX2gKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdp
bi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1
Z2luL3BsYXRmb3JtcGx1Z2luLnBybwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDAgQEAKK1RFTVBMQVRFID0gbGliCitDT05GSUcgKz0gcGx1Z2luIFwKKyAgICAg
ICAgICBtb2JpbGl0eQorCitNT0JJTElUWSA9IG11bHRpbWVkaWEKKworVEFSR0VUID0gJCRxdExp
YnJhcnlUYXJnZXQocGxhdGZvcm1wbHVnaW4pCitUQVJHRVRQQVRIID0gUXRXZWJLaXQKK1FUICAg
ICAgICs9IGNvcmUgZ3VpIFwKKyAgICAgICAgICAgIG5ldHdvcmsgXAorICAgICAgICAgICAgeG1s
CisKK2luY2x1ZGUoLi4vLi4vLi4vLi4vV2ViS2l0LnByaSkKKworIyMgbG9hZCBtb2JpbGl0eWNv
bmZpZyBpZiBtb2JpbGl0eSBpcyBhdmFpbGFibGUKK2xvYWQobW9iaWxpdHljb25maWcsIHRydWUp
CisKK2lzRW1wdHkoT1VUUFVUX0RJUik6IE9VVFBVVF9ESVIgPSAuLi8uLi8uLi8uLgorCitTT1VS
Q0VTICs9IFwKKyAgICBXZWJQbHVnaW4uY3BwCisKK0hFQURFUlMgKz0gXAorICAgIFdlYlBsdWdp
bi5oIFwKKyAgICBxd2Via2l0cGxhdGZvcm1wbHVnaW4uaAorCitERVNURElSID0gJCRPVVRQVVRf
RElSL3BsdWdpbnMvJCRUQVJHRVRQQVRICisKK3N5bWJpYW46IHsKKyMgRVBPQ0FMTE9XRExMREFU
QSBoYXZlIHRvIHNldCB0cnVlIGJlY2F1c2UgUXQgbWFjcm9zIGhhcyBpbml0aWFsaXNlZCBnbG9i
YWwgZGF0YQorICAgIFRBUkdFVC5FUE9DQUxMT1dETExEQVRBPTEKKyAgICBUQVJHRVQuQ0FQQUJJ
TElUWSA9IEFsbCAtVGNiCisgICAgVEFSR0VULlVJRDMgPSAweDIwMDJFNjc0CisgICAgVEFSR0VU
LlZJRCA9IFZJRF9ERUZBVUxUCisgICAgVEFSR0VUID0gJCRUQVJHRVQkJHtRVF9MSUJJTkZJWH0K
KworICAgIExJQlMgKz0gLWxjb25lIC1sZWlrY29yZSAtbGF2a29uCit9Cit0YXJnZXQucGF0aCAr
PSAkJFtRVF9JTlNUQUxMX1BMVUdJTlNdLyQkVEFSR0VUUEFUSAorSU5TVEFMTFMgKz0gdGFyZ2V0
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBs
YXRmb3JtcGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3Bs
YXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgUVdFQktJVFBMQVRGT1JNUExVR0lOX0gKKyNkZWZpbmUgUVdFQktJVFBMQVRGT1JNUExV
R0lOX0gKKworLyoKKyAqICBXYXJuaW5nOiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGlzIG5v
dCAgcGFydCBvZiB0aGUgcHVibGljIFF0V2ViS2l0IEFQSQorICogIGFuZCBtYXkgYmUgY2hhbmdl
ZCBmcm9tIHZlcnNpb24gdG8gdmVyc2lvbiBvciBldmVuIGJlIGNvbXBsZXRlbHkgcmVtb3ZlZC4K
KyovCisKKyNpbmNsdWRlIDxRQ29sb3I+CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxR
VXJsPgorI2lmIGRlZmluZWQoV1RGX1VTRV9RVF9NVUxUSU1FRElBKSAmJiBXVEZfVVNFX1FUX01V
TFRJTUVESUEKKyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisjZW5kaWYKKworY2xhc3MgUVdlYlNl
bGVjdERhdGEKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5RV2ViU2VsZWN0RGF0YSgpIHt9CisK
KyAgICBlbnVtIEl0ZW1UeXBlIHsgT3B0aW9uLCBHcm91cCwgU2VwYXJhdG9yIH07CisKKyAgICB2
aXJ0dWFsIEl0ZW1UeXBlIGl0ZW1UeXBlKGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUVN0
cmluZyBpdGVtVGV4dChpbnQgaW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFTdHJpbmcg
aXRlbVRvb2xUaXAoaW50IGluZGV4KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGl0ZW1J
c0VuYWJsZWQoaW50IGluZGV4KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc1Nl
bGVjdGVkKGludCBpbmRleCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGl0ZW1Db3VudCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbXVsdGlwbGUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBRQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
UUNvbG9yIGZvcmVncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFDb2xvciBp
dGVtQmFja2dyb3VuZENvbG9yKGludCBpbmRleCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUUNv
bG9yIGl0ZW1Gb3JlZ3JvdW5kQ29sb3IoaW50IGluZGV4KSBjb25zdCA9IDA7Cit9OworCitjbGFz
cyBRV2ViU2VsZWN0TWV0aG9kIDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorcHVi
bGljOgorICAgIHZpcnR1YWwgflFXZWJTZWxlY3RNZXRob2QoKSB7fQorCisgICAgdmlydHVhbCB2
b2lkIHNob3coY29uc3QgUVdlYlNlbGVjdERhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGhp
ZGUoKSA9IDA7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHNlbGVjdEl0ZW0oaW50IGluZGV4LCBi
b29sIGFsbG93TXVsdGlwbHlTZWxlY3Rpb25zLCBib29sIHNoaWZ0KTsKKyAgICB2b2lkIGRpZEhp
ZGUoKTsKK307CisKK2NsYXNzIFFXZWJOb3RpZmljYXRpb25EYXRhCit7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+UVdlYk5vdGlmaWNhdGlvbkRhdGEoKSB7fQorCisgICAgdmlydHVhbCBjb25zdCBR
U3RyaW5nIHRpdGxlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgUVN0cmluZyBtZXNz
YWdlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgUUJ5dGVBcnJheSBpY29uRGF0YSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IFFVcmwgb3BlbmVyUGFnZVVybCgpIGNvbnN0
ID0gMDsKK307CisKK2NsYXNzIFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIgOiBwdWJsaWMgUU9i
amVjdAoreworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdlYk5vdGlmaWNhdGlvblByZXNl
bnRlcigpIHt9CisgICAgdmlydHVhbCB+UVdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHt9CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2hvd05vdGlmaWNhdGlvbihjb25zdCBRV2ViTm90aWZpY2F0aW9u
RGF0YSopID0gMDsKKyAgICAKK1FfU0lHTkFMUzoKKyAgICB2b2lkIG5vdGlmaWNhdGlvbkNsb3Nl
ZCgpOworICAgIHZvaWQgbm90aWZpY2F0aW9uQ2xpY2tlZCgpOworfTsKKworY2xhc3MgUVdlYkhh
cHRpY0ZlZWRiYWNrUGxheWVyOiBwdWJsaWMgUU9iamVjdAoreworICAgIFFfT0JKRUNUCitwdWJs
aWM6CisgICAgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKCkge30KKyAgICB2aXJ0dWFsIH5RV2Vi
SGFwdGljRmVlZGJhY2tQbGF5ZXIoKSB7fQorCisgICAgZW51bSBIYXB0aWNTdHJlbmd0aCB7Cisg
ICAgICAgIE5vbmUsIFdlYWssIE1lZGl1bSwgU3Ryb25nCisgICAgfTsKKworICAgIGVudW0gSGFw
dGljRXZlbnQgeworICAgICAgICBQcmVzcywgUmVsZWFzZQorICAgIH07CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGxheUhhcHRpY0ZlZWRiYWNrKGNvbnN0IEhhcHRpY0V2ZW50LCBjb25zdCBRU3RyaW5n
JiBoYXB0aWNUeXBlLCBjb25zdCBIYXB0aWNTdHJlbmd0aCkgPSAwOworfTsKKworY2xhc3MgUVdl
YlRvdWNoTW9kaWZpZXIgOiBwdWJsaWMgUU9iamVjdAoreworICAgIFFfT0JKRUNUCitwdWJsaWM6
CisgICAgdmlydHVhbCB+UVdlYlRvdWNoTW9kaWZpZXIoKSB7fQorCisgICAgZW51bSBQYWRkaW5n
RGlyZWN0aW9uIHsKKyAgICAgICAgVXAsIFJpZ2h0LCBEb3duLCBMZWZ0CisgICAgfTsKKworICAg
IHZpcnR1YWwgdW5zaWduZWQgaGl0VGVzdFBhZGRpbmdGb3JUb3VjaChjb25zdCBQYWRkaW5nRGly
ZWN0aW9uKSBjb25zdCA9IDA7Cit9OworCisjaWYgZGVmaW5lZChXVEZfVVNFX1FUX01VTFRJTUVE
SUEpICYmIFdURl9VU0VfUVRfTVVMVElNRURJQQorY2xhc3MgUVdlYkZ1bGxTY3JlZW5WaWRlb0hh
bmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2Vi
RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAgdmlydHVhbCB+UVdlYkZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXIoKSB7fQorICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0Z1bGxTY3JlZW5Gb3JW
aWRlb1BsYXliYWNrKCkgY29uc3QgPSAwOworCitRX1NJR05BTFM6CisgICAgdm9pZCBmdWxsU2Ny
ZWVuQ2xvc2VkKCk7CisKK3B1YmxpYyBRX1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1
bGxTY3JlZW4oUU1lZGlhUGxheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0RnVsbFNj
cmVlbigpID0gMDsKK307CisjZW5kaWYKKworY2xhc3MgUVdlYktpdFBsYXRmb3JtUGx1Z2luCit7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+UVdlYktpdFBsYXRmb3JtUGx1Z2luKCkge30KKworICAg
IGVudW0gRXh0ZW5zaW9uIHsKKyAgICAgICAgTXVsdGlwbGVTZWxlY3Rpb25zLAorICAgICAgICBO
b3RpZmljYXRpb25zLAorICAgICAgICBIYXB0aWNzLAorICAgICAgICBUb3VjaEludGVyYWN0aW9u
LAorICAgICAgICBGdWxsU2NyZWVuVmlkZW9QbGF5ZXIKKyAgICB9OworCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFFPYmplY3QqIGNyZWF0ZUV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBj
b25zdCA9IDA7Cit9OworCitRVF9CRUdJTl9OQU1FU1BBQ0UKK1FfREVDTEFSRV9JTlRFUkZBQ0Uo
UVdlYktpdFBsYXRmb3JtUGx1Z2luLCAiY29tLm5va2lhLlF0LldlYktpdC5QbGF0Zm9ybVBsdWdp
bi8xLjciKTsKK1FUX0VORF9OQU1FU1BBQ0UKKworI2VuZGlmIC8vIFFXRUJLSVRQTEFURk9STVBM
VUdJTl9ICg==
</data>
<flag name="review"
          id="83098"
          type_id="1"
          status="-"
          setter="menard"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90366</attachid>
            <date>2011-04-20 11:11:14 -0700</date>
            <delta_ts>2011-04-21 07:14:42 -0700</delta_ts>
            <desc>platformpluginV1.1</desc>
            <filename>58435.patch</filename>
            <type>text/plain</type>
            <size>21470</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDg0Mzgy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDQt
MjAgIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9y
bSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU4NDM1CisKKyAgICAgICAgVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4uCisKKyAg
ICAgICAgKiBTb3VyY2UvV2ViS2l0LnBybzogQWRkIHBsYXRmb3JtcGx1Z2luIHBhdGggdG8gdGhl
IFNVQkRJUlMuCisKIDIwMTEtMDQtMTggIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViS2l0
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0LnBybwkocmV2aXNpb24gODQzNjcpCisr
KyBTb3VyY2UvV2ViS2l0LnBybwkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCBidWls
ZC1xdHNjcmlwdCB7CiB9CiAKIHN5bWJpYW4geworICAgIGV4aXN0cygkJFBXRC9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbik6IFNVQkRJUlMgKz0gV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4KKwogICAgICMgRm9yd2FyZCB0aGUgaW5zdGFsbCB0YXJnZXQgdG8gV2ViQ29y
ZS4gQSB3b3JrYXJvdW5kIHNpbmNlIElOU1RBTExTIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3Igc3lt
YmlhbgogICAgIGluc3RhbGwuY29tbWFuZHMgPSAkKE1BS0UpIC1DIFdlYkNvcmUgaW5zdGFsbAog
ICAgIFFNQUtFX0VYVFJBX1RBUkdFVFMgKz0gaW5zdGFsbApJbmRleDogU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0MzgyKQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw1NCBAQAorMjAxMS0wNC0yMCAgWWkgU2hlbiAgPHlpLjQuc2hlbkBub2tp
YS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1F0XSBVcHN0cmVhbSBTeW1iaWFuIHBsYXRmb3JtIHBsdWdpbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0MzUKKworICAgICAgICBVcHN0cmVhbSBT
eW1iaWFuIHBsYXRmb3JtIHBsdWdpbi4KKworICAgICAgICAqIFF0V2ViS2l0LnBybzogQWRkIHBs
YXRmb3JtcGx1Z2luLmRsbCB0byB0aGUgUXRXZWJLaXQuc2lzLgorICAgICAgICAqIHN5bWJpYW4v
cGxhdGZvcm1wbHVnaW46IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4v
V2ViUGx1Z2luLmNwcDogQWRkZWQuCisgICAgICAgIChJdGVtTGlzdERlbGVnYXRlOjpJdGVtTGlz
dERlbGVnYXRlKToKKyAgICAgICAgKEl0ZW1MaXN0RGVsZWdhdGU6OnBhaW50KToKKyAgICAgICAg
KFBvcHVwOjpQb3B1cCk6CisgICAgICAgIChQb3B1cDo6cmVzaXplRXZlbnQpOgorICAgICAgICAo
UG9wdXA6OnBvcHVsYXRlTGlzdCk6CisgICAgICAgIChQb3B1cDo6b25JdGVtU2VsZWN0ZWQpOgor
ICAgICAgICAoUG9wdXA6OnVwZGF0ZVNlbGVjdGlvbnNCZWZvcmVEaWFsb2dDbG9zaW5nKToKKyAg
ICAgICAgKFBvcHVwOjp1cGRhdGVBbmRDbG9zZSk6CisgICAgICAgIChXZWJQb3B1cDo6V2ViUG9w
dXApOgorICAgICAgICAoV2ViUG9wdXA6On5XZWJQb3B1cCk6CisgICAgICAgIChXZWJQb3B1cDo6
Y3JlYXRlU2luZ2xlU2VsZWN0aW9uUG9wdXApOgorICAgICAgICAoV2ViUG9wdXA6OmNyZWF0ZU11
bHRpcGxlU2VsZWN0aW9uUG9wdXApOgorICAgICAgICAoV2ViUG9wdXA6OmNyZWF0ZVBvcHVwKToK
KyAgICAgICAgKFdlYlBvcHVwOjpzaG93KToKKyAgICAgICAgKFdlYlBvcHVwOjpoaWRlKToKKyAg
ICAgICAgKFdlYlBvcHVwOjpwb3B1cENsb3NlZCk6CisgICAgICAgIChXZWJQb3B1cDo6aXRlbUNs
aWNrZWQpOgorICAgICAgICAoU2luZ2xlU2VsZWN0aW9uUG9wdXA6OlNpbmdsZVNlbGVjdGlvblBv
cHVwKToKKyAgICAgICAgKE11bHRpcGxlU2VsZWN0aW9uUG9wdXA6Ok11bHRpcGxlU2VsZWN0aW9u
UG9wdXApOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93Tm90aWZpY2F0
aW9uKToKKyAgICAgICAgKFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAo
V2ViUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24pOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vV2ViUGx1Z2luLmg6IEFkZGVkLgorICAgICAgICAoUG9wdXA6OnByZVNlbGVjdGVkSW5k
aWNlcyk6CisgICAgICAgIChQb3B1cDo6bGlzdFdpZGdldCk6CisgICAgICAgIChXZWJOb3RpZmlj
YXRpb25QcmVzZW50ZXI6OldlYk5vdGlmaWNhdGlvblByZXNlbnRlcik6CisgICAgICAgIChXZWJO
b3RpZmljYXRpb25QcmVzZW50ZXI6On5XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAg
ICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOiBBZGRlZC4KKyAg
ICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOiBB
ZGRlZC4KKyAgICAgICAgKFFXZWJTZWxlY3REYXRhOjp+UVdlYlNlbGVjdERhdGEpOgorICAgICAg
ICAoUVdlYlNlbGVjdE1ldGhvZDo6flFXZWJTZWxlY3RNZXRob2QpOgorICAgICAgICAoUVdlYk5v
dGlmaWNhdGlvbkRhdGE6On5RV2ViTm90aWZpY2F0aW9uRGF0YSk6CisgICAgICAgIChRV2ViTm90
aWZpY2F0aW9uUHJlc2VudGVyOjpRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAg
KFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI6On5RV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToK
KyAgICAgICAgKFFXZWJUb3VjaE1vZGlmaWVyOjp+UVdlYlRvdWNoTW9kaWZpZXIpOgorICAgICAg
ICAoUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OlFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
KToKKyAgICAgICAgKFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxTY3JlZW5W
aWRlb0hhbmRsZXIpOgorICAgICAgICAoUVdlYktpdFBsYXRmb3JtUGx1Z2luOjp+UVdlYktpdFBs
YXRmb3JtUGx1Z2luKToKKwogMjAxMS0wNC0yMCAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC9RdFdlYktpdC5wcm8JKHJldmlzaW9uIDg0MzY3KQorKysgU291cmNlL1dlYktpdC9x
dC9RdFdlYktpdC5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsMTAgQEAgc3ltYmlh
biB7CiAgICAgICAgICBERVBMT1lNRU5UICs9IGRlY2xhcmF0aXZlSW1wb3J0CiAgICAgfQogCi0g
ICAgREVQTE9ZTUVOVCArPSB3ZWJraXRzaXNoZWFkZXIgd2Via2l0bGlicyB3ZWJraXRiYWNrdXAK
KyAgICBwbGF0Zm9ybXBsdWdpbi5zb3VyY2VzID0gJCRPVVRQVVRfRElSL3BsdWdpbnMvUXRXZWJL
aXQvcGxhdGZvcm1wbHVnaW4kJHtRVF9MSUJJTkZJWH0uZGxsCisgICAgcGxhdGZvcm1wbHVnaW4u
cGF0aCA9IGM6JCRRVF9QTFVHSU5TX0JBU0VfRElSL1F0V2ViS2l0CisKKyAgICBERVBMT1lNRU5U
ICs9IHdlYmtpdHNpc2hlYWRlciB3ZWJraXRsaWJzIHdlYmtpdGJhY2t1cCBwbGF0Zm9ybXBsdWdp
bgogICAgICFDT05GSUcocHJvZHVjdGlvbik6Q09ORklHLT1kZWZfZmlsZXMKIAogICAgICMgTmVl
ZCB0byBidWlsZCB0aGVzZSBzb3VyY2VzIGhlcmUgYmVjYXVzZSBvZiBleHBvcnRlZCBzeW1ib2xz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vV2ViUGx1Z2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlh
bi9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJXZWJQbHVnaW4uaCIKKworI2luY2x1
ZGUgPFF0R3VpPgorI2luY2x1ZGUgPFF0UGx1Z2luPgorI2luY2x1ZGUgPGFrbmRpc2NyZWV0cG9w
dXAuaD4KKworY2xhc3MgSXRlbUxpc3REZWxlZ2F0ZSA6IHB1YmxpYyBRU3R5bGVkSXRlbURlbGVn
YXRlIHsKK3B1YmxpYzoKKyAgICBJdGVtTGlzdERlbGVnYXRlKFFPYmplY3QqIHBhcmVudCA9IDAp
CisgICAgICAgICAgIDogUVN0eWxlZEl0ZW1EZWxlZ2F0ZShwYXJlbnQpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvblZp
ZXdJdGVtJiBvcHRpb24sIGNvbnN0IFFNb2RlbEluZGV4JiBpbmRleCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIFFfQVNTRVJUKGluZGV4LmlzVmFsaWQoKSk7CisKKyAgICAgICAgUVN0eWxlT3B0aW9u
Vmlld0l0ZW1WNCBvcHQgPSBvcHRpb247CisgICAgICAgIG9wdC5zdGF0ZSA9IG9wdC5zdGF0ZSAm
ICh+UVN0eWxlOjpTdGF0ZV9IYXNGb2N1cyk7CisgICAgICAgIG9wdC50ZXh0ID0gaW5kZXguZGF0
YSgpLnRvU3RyaW5nKCk7CisgICAgICAgIGluaXRTdHlsZU9wdGlvbigmb3B0LCBpbmRleCk7CisK
KyAgICAgICAgY29uc3QgUVdpZGdldCogd2lkZ2V0ID0gMDsKKyAgICAgICAgUG9wdXAqIHNlbGVj
dFBvcHVwID0gcW9iamVjdF9jYXN0PFBvcHVwKj4ocGFyZW50KCkpOworICAgICAgICBpZiAoc2Vs
ZWN0UG9wdXApCisgICAgICAgICAgICB3aWRnZXQgPSBzZWxlY3RQb3B1cC0+bGlzdFdpZGdldCgp
OworCisgICAgICAgIFFTdHlsZSogc3R5bGUgPSB3aWRnZXQgPyB3aWRnZXQtPnN0eWxlKCkgOiBR
QXBwbGljYXRpb246OnN0eWxlKCk7CisgICAgICAgIHN0eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6
OkNFX0l0ZW1WaWV3SXRlbSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsKKyAgICB9Cit9OworCitQ
b3B1cDo6UG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpIDogbV9kYXRhKGRhdGEpCit7
CisgICAgc2V0TW9kYWwodHJ1ZSk7CisgICAgbV9saXN0ID0gbmV3IFFMaXN0V2lkZ2V0KHRoaXMp
OworICAgIGludCB3aWR0aCA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5zaXplKCkud2lkdGgo
KTsKKyAgICBRVkJveExheW91dCogdkxheW91dCA9IG5ldyBRVkJveExheW91dCh0aGlzKTsKKyAg
ICB2TGF5b3V0LT5zZXRDb250ZW50c01hcmdpbnMod2lkdGggLyAyMCwgNSwgNSwgNSk7CisgICAg
aWYgKGRhdGEubXVsdGlwbGUoKSkKKyAgICAgICAgbV9saXN0LT5zZXRTZWxlY3Rpb25Nb2RlKFFB
YnN0cmFjdEl0ZW1WaWV3OjpNdWx0aVNlbGVjdGlvbik7CisgICAgcG9wdWxhdGVMaXN0KCk7Cisg
ICAgdkxheW91dC0+YWRkV2lkZ2V0KG1fbGlzdCk7CisgICAKKyAgICBJdGVtTGlzdERlbGVnYXRl
KiBpdGVtRGVsZWdhdGUgPSBuZXcgSXRlbUxpc3REZWxlZ2F0ZSh0aGlzKTsKKyAgICBtX2xpc3Qt
PnNldEl0ZW1EZWxlZ2F0ZShpdGVtRGVsZWdhdGUpOworfQorCit2b2lkIFBvcHVwOjpyZXNpemVF
dmVudChRUmVzaXplRXZlbnQqIGUpCit7CisgICAgUURpYWxvZzo6cmVzaXplRXZlbnQoZSk7Cisg
ICAgbV9saXN0LT5zZXRHZW9tZXRyeShtX2xpc3QtPmdlb21ldHJ5KCkueCgpLCBtX2xpc3QtPmdl
b21ldHJ5KCkueSgpLCBtX2xpc3QtPndpZHRoKCksIG1fbGlzdC0+aGVpZ2h0KCkpOworfQorCit2
b2lkIFBvcHVwOjpwb3B1bGF0ZUxpc3QoKQoreworICAgIFFMaXN0V2lkZ2V0SXRlbSogbGlzdEl0
ZW07CisgICAgbV9wcmVTZWxlY3RlZEluZGljZXMuY2xlYXIoKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1fZGF0YS5pdGVtQ291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2RhdGEuaXRl
bVR5cGUoaSkgPT0gUVdlYlNlbGVjdERhdGE6Ok9wdGlvbikgeworICAgICAgICAgICAgbGlzdEl0
ZW0gPSBuZXcgUUxpc3RXaWRnZXRJdGVtKG1fZGF0YS5pdGVtVGV4dChpKSk7CisgICAgICAgICAg
ICBtX2xpc3QtPmFkZEl0ZW0obGlzdEl0ZW0pOworICAgICAgICAgICAgbGlzdEl0ZW0tPnNldFNl
bGVjdGVkKG1fZGF0YS5pdGVtSXNTZWxlY3RlZChpKSk7CisgICAgICAgICAgICBpZiAobV9kYXRh
Lml0ZW1Jc1NlbGVjdGVkKGkpKSB7CisgICAgICAgICAgICAgICAgbV9wcmVTZWxlY3RlZEluZGlj
ZXMuYXBwZW5kKGkpOworICAgICAgICAgICAgICAgIG1fbGlzdC0+c2V0Q3VycmVudEl0ZW0obGlz
dEl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1fZGF0YS5pdGVtVHlw
ZShpKSA9PSBRV2ViU2VsZWN0RGF0YTo6R3JvdXApIHsKKyAgICAgICAgICAgIGxpc3RJdGVtID0g
bmV3IFFMaXN0V2lkZ2V0SXRlbShtX2RhdGEuaXRlbVRleHQoaSkpOworICAgICAgICAgICAgbV9s
aXN0LT5hZGRJdGVtKGxpc3RJdGVtKTsKKyAgICAgICAgICAgIGxpc3RJdGVtLT5zZXRTZWxlY3Rl
ZChmYWxzZSk7CisgICAgICAgICAgICBsaXN0SXRlbS0+c2V0RmxhZ3MoUXQ6Ok5vSXRlbUZsYWdz
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjb25uZWN0KG1fbGlzdCwgU0lHTkFMKGl0ZW1DbGlj
a2VkKFFMaXN0V2lkZ2V0SXRlbSopKSwgdGhpcywgU0xPVChvbkl0ZW1TZWxlY3RlZChRTGlzdFdp
ZGdldEl0ZW0qKSkpOworfQorCit2b2lkIFBvcHVwOjpvbkl0ZW1TZWxlY3RlZChRTGlzdFdpZGdl
dEl0ZW0qIGl0ZW0pCit7CisgICAgaWYgKGl0ZW0tPmZsYWdzKCkgIT0gUXQ6Ok5vSXRlbUZsYWdz
KSB7CisgICAgICAgIGlmICghbV9kYXRhLm11bHRpcGxlKCkpCisgICAgICAgICAgICB1cGRhdGVB
bmRDbG9zZSgpOworICAgIH0KK30KKwordm9pZCBQb3B1cDo6dXBkYXRlU2VsZWN0aW9uc0JlZm9y
ZURpYWxvZ0Nsb3NpbmcoKQoreworICAgIFFMaXN0PFFMaXN0V2lkZ2V0SXRlbSo+IHNlbGVjdGVk
ID0gbV9saXN0LT5zZWxlY3RlZEl0ZW1zKCk7CisgICAgaWYgKG1fZGF0YS5tdWx0aXBsZSgpKSB7
CisgICAgICAgIFFMaXN0PGludD4gc2VsZWN0ZWRJbmRpY2VzOworICAgICAgICBRX0ZPUkVBQ0go
UUxpc3RXaWRnZXRJdGVtKiBpdGVtLCBzZWxlY3RlZCkKKyAgICAgICAgICAgIHNlbGVjdGVkSW5k
aWNlcy5hcHBlbmQobV9saXN0LT5yb3coaXRlbSkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbV9kYXRhLml0ZW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgobV9wcmVT
ZWxlY3RlZEluZGljZXMuY29udGFpbnMoaSkgJiYgIXNlbGVjdGVkSW5kaWNlcy5jb250YWlucyhp
KSkgfHwgKCFtX3ByZVNlbGVjdGVkSW5kaWNlcy5jb250YWlucyhpKSAmJiBzZWxlY3RlZEluZGlj
ZXMuY29udGFpbnMoaSkpKQorICAgICAgICAgICAgICAgIGVtaXQgaXRlbUNsaWNrZWQoaSk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBRX0ZPUkVBQ0goUUxpc3RXaWRnZXRJdGVt
KiBpdGVtLCBzZWxlY3RlZCkKKyAgICAgICAgICAgIGVtaXQgaXRlbUNsaWNrZWQobV9saXN0LT5y
b3coaXRlbSkpOworICAgIH0KK30KKwordm9pZCBQb3B1cDo6dXBkYXRlQW5kQ2xvc2UoKQorewor
ICAgIHVwZGF0ZVNlbGVjdGlvbnNCZWZvcmVEaWFsb2dDbG9zaW5nKCk7CisgICAgYWNjZXB0KCk7
Cit9CisKK1dlYlBvcHVwOjpXZWJQb3B1cCgpCisgICAgOiBtX3BvcHVwKDApCit7Cit9CisKK1dl
YlBvcHVwOjp+V2ViUG9wdXAoKQoreworICAgIGlmIChtX3BvcHVwKQorICAgICAgICBtX3BvcHVw
LT5kZWxldGVMYXRlcigpOworfQorCitQb3B1cCogV2ViUG9wdXA6OmNyZWF0ZVNpbmdsZVNlbGVj
dGlvblBvcHVwKGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQoreworICAgIHJldHVybiBuZXcg
U2luZ2xlU2VsZWN0aW9uUG9wdXAoZGF0YSk7Cit9CisKK1BvcHVwKiBXZWJQb3B1cDo6Y3JlYXRl
TXVsdGlwbGVTZWxlY3Rpb25Qb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYgZGF0YSkKK3sKKyAg
ICByZXR1cm4gbmV3IE11bHRpcGxlU2VsZWN0aW9uUG9wdXAoZGF0YSk7Cit9CisKK1BvcHVwKiBX
ZWJQb3B1cDo6Y3JlYXRlUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpCit7CisgICAg
UG9wdXAqIHJlc3VsdCA9IGRhdGEubXVsdGlwbGUoKSA/IGNyZWF0ZU11bHRpcGxlU2VsZWN0aW9u
UG9wdXAoZGF0YSkgOiBjcmVhdGVTaW5nbGVTZWxlY3Rpb25Qb3B1cChkYXRhKTsKKyAgICBjb25u
ZWN0KHJlc3VsdCwgU0lHTkFMKGZpbmlzaGVkKGludCkpLCB0aGlzLCBTTE9UKHBvcHVwQ2xvc2Vk
KCkpKTsKKyAgICBjb25uZWN0KHJlc3VsdCwgU0lHTkFMKGl0ZW1DbGlja2VkKGludCkpLCB0aGlz
LCBTTE9UKGl0ZW1DbGlja2VkKGludCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IFdlYlBvcHVwOjpzaG93KGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQoreworICAgIGlmICht
X3BvcHVwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BvcHVwID0gY3JlYXRlUG9wdXAoZGF0
YSk7CisgICAgbV9wb3B1cC0+c2hvd01heGltaXplZCgpOworfQorCit2b2lkIFdlYlBvcHVwOjpo
aWRlKCkKK3sKKyAgICBpZiAoIW1fcG9wdXApCisgICAgICAgIHJldHVybjsKKworICAgIG1fcG9w
dXAtPmFjY2VwdCgpOworfQorCit2b2lkIFdlYlBvcHVwOjpwb3B1cENsb3NlZCgpCit7CisgICAg
aWYgKCFtX3BvcHVwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BvcHVwLT5kZWxldGVMYXRl
cigpOworICAgIG1fcG9wdXAgPSAwOworICAgIGVtaXQgZGlkSGlkZSgpOworfQorCit2b2lkIFdl
YlBvcHVwOjppdGVtQ2xpY2tlZChpbnQgaWR4KQoreworICAgIGVtaXQgc2VsZWN0SXRlbShpZHgs
IHRydWUsIGZhbHNlKTsKK30KKworU2luZ2xlU2VsZWN0aW9uUG9wdXA6OlNpbmdsZVNlbGVjdGlv
blBvcHVwKGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQorICAgIDogUG9wdXAoZGF0YSkKK3sK
KyAgICBzZXRXaW5kb3dUaXRsZSgiU2VsZWN0IGl0ZW0iKTsKKworICAgIFFBY3Rpb24qIGNhbmNl
bEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJDYW5jZWwiLCB0aGlzKTsKKyAgICBjYW5jZWxBY3Rpb24t
PnNldFNvZnRLZXlSb2xlKFFBY3Rpb246Ok5lZ2F0aXZlU29mdEtleSk7CisgICAgYWRkQWN0aW9u
KGNhbmNlbEFjdGlvbik7CisgICAgY29ubmVjdChjYW5jZWxBY3Rpb24sIFNJR05BTCh0cmlnZ2Vy
ZWQoYm9vbCkpLCB0aGlzLCBTTE9UKHJlamVjdCgpKSk7Cit9CisKK011bHRpcGxlU2VsZWN0aW9u
UG9wdXA6Ok11bHRpcGxlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEp
CisgICAgOiBQb3B1cChkYXRhKQoreworICAgIHNldFdpbmRvd1RpdGxlKCJTZWxlY3QgaXRlbXMi
KTsKKworICAgIFFBY3Rpb24qIGNhbmNlbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJDYW5jZWwiLCB0
aGlzKTsKKyAgICBjYW5jZWxBY3Rpb24tPnNldFNvZnRLZXlSb2xlKFFBY3Rpb246Ok5lZ2F0aXZl
U29mdEtleSk7CisgICAgYWRkQWN0aW9uKGNhbmNlbEFjdGlvbik7CisgICAgY29ubmVjdChjYW5j
ZWxBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCB0aGlzLCBTTE9UKHJlamVjdCgpKSk7
CisKKyAgICBRQWN0aW9uKiBva0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJPayIsIHRoaXMpOworICAg
IG9rQWN0aW9uLT5zZXRTb2Z0S2V5Um9sZShRQWN0aW9uOjpQb3NpdGl2ZVNvZnRLZXkpOworICAg
IGFkZEFjdGlvbihva0FjdGlvbik7CisgICAgY29ubmVjdChva0FjdGlvbiwgU0lHTkFMKHRyaWdn
ZXJlZChib29sKSksIHRoaXMsIFNMT1QodXBkYXRlQW5kQ2xvc2UoKSkpOworfQorCit2b2lkIFdl
Yk5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvd05vdGlmaWNhdGlvbihjb25zdCBRV2ViTm90aWZp
Y2F0aW9uRGF0YSogZGF0YSkKK3sKKyAgICBIQnVmQyogdGl0bGUgPSBIQnVmQzo6TmV3KGRhdGEt
PnRpdGxlKCkuc2l6ZSgpKTsKKyAgICAqdGl0bGUgPSBUUHRyQyhkYXRhLT50aXRsZSgpLnV0ZjE2
KCksIGRhdGEtPnRpdGxlKCkuc2l6ZSgpKTsKKyAgICBIQnVmQyogbWVzc2FnZSA9IEhCdWZDOjpO
ZXcoZGF0YS0+bWVzc2FnZSgpLnNpemUoKSk7CisgICAgKm1lc3NhZ2UgPSBUUHRyQyhkYXRhLT5t
ZXNzYWdlKCkudXRmMTYoKSwgZGF0YS0+bWVzc2FnZSgpLnNpemUoKSk7CisgICAgVFJBUF9JR05P
UkUoQ0FrbkRpc2NyZWV0UG9wdXA6OlNob3dHbG9iYWxQb3B1cEwoKnRpdGxlLCAqbWVzc2FnZSwg
S0FrbnNJSUROb25lLCBLTnVsbERlc0MpKTsKKyAgICBlbWl0IG5vdGlmaWNhdGlvbkNsb3NlZCgp
OworICAgIGRlbGV0ZUxhdGVyKCk7CisgICAgZGVsZXRlIHRpdGxlOworICAgIGRlbGV0ZSBtZXNz
YWdlOworfQorCitib29sIFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24oRXh0ZW5zaW9uIGV4
dGVuc2lvbikgY29uc3QKK3sKKyAgICBpZiAoZXh0ZW5zaW9uID09IE11bHRpcGxlU2VsZWN0aW9u
cykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGV4dGVuc2lvbiA9PSBOb3RpZmljYXRp
b25zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZXh0ZW5zaW9uID09IEZ1bGxTY3Jl
ZW5WaWRlb1BsYXllcikKKyAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1FPYmplY3QqIFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lv
biBleHRlbnNpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoIChleHRlbnNpb24pIHsKKyAgICBjYXNl
IE11bHRpcGxlU2VsZWN0aW9uczoKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJQb3B1cCgpOworICAg
IGNhc2UgTm90aWZpY2F0aW9uczoKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJOb3RpZmljYXRpb25Q
cmVzZW50ZXIoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisK
K1FfRVhQT1JUX1BMVUdJTjIocXdlYnNlbGVjdGltLCBXZWJQbHVnaW4pCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dl
YlBsdWdpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisgCisjaWZuZGVmIFdlYlBsdWdpbl9oCisjZGVmaW5lIFdlYlBsdWdpbl9oCisKKyNpbmNsdWRl
ICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKyNpbmNsdWRlIDxRRGlhbG9nPgorCitjbGFzcyBR
TGlzdFdpZGdldEl0ZW07CitjbGFzcyBRTGlzdFdpZGdldDsKK2NsYXNzIFFTY3JvbGxBcmVhOwor
CitjbGFzcyBQb3B1cFNjcm9sbGluZ0hhbmRsZXI7CisKK2NsYXNzIFBvcHVwIDogcHVibGljIFFE
aWFsb2cgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUG9wdXAoY29uc3QgUVdlYlNlbGVj
dERhdGEmKTsKKyAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbnNCZWZvcmVEaWFsb2dDbG9zaW5nKCk7
CisgICAgUUxpc3Q8aW50PiBwcmVTZWxlY3RlZEluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3By
ZVNlbGVjdGVkSW5kaWNlczsgfQorICAgIFFMaXN0V2lkZ2V0KiBsaXN0V2lkZ2V0KCkgeyByZXR1
cm4gbV9saXN0OyB9CisKK3NpZ25hbHM6CisgICAgdm9pZCBpdGVtQ2xpY2tlZChpbnQgaWR4KTsK
KworcHJvdGVjdGVkIHNsb3RzOgorICAgIHZvaWQgb25JdGVtU2VsZWN0ZWQoUUxpc3RXaWRnZXRJ
dGVtKik7CisgICAgdm9pZCB1cGRhdGVBbmRDbG9zZSgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBwb3B1bGF0ZUxpc3QoKTsKKyAgICB2b2lkIHJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCopOwor
ICAgIGNvbnN0IFFXZWJTZWxlY3REYXRhJiBtX2RhdGE7CisgICAgUUxpc3RXaWRnZXQqIG1fbGlz
dDsKKyAgICBRTGlzdDxpbnQ+IG1fcHJlU2VsZWN0ZWRJbmRpY2VzOworICAgIFBvcHVwU2Nyb2xs
aW5nSGFuZGxlciogbV9zY3JvbGxpbmdIYW5kbGVyOworfTsKKworCitjbGFzcyBTaW5nbGVTZWxl
Y3Rpb25Qb3B1cCA6IHB1YmxpYyBQb3B1cCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBT
aW5nbGVTZWxlY3Rpb25Qb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYpOworfTsKKworCitjbGFz
cyBNdWx0aXBsZVNlbGVjdGlvblBvcHVwIDogcHVibGljIFBvcHVwIHsKKyAgICBRX09CSkVDVAor
cHVibGljOgorICAgIE11bHRpcGxlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEm
KTsKK307CisKKworY2xhc3MgV2ViUG9wdXAgOiBwdWJsaWMgUVdlYlNlbGVjdE1ldGhvZCB7Cisg
ICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBXZWJQb3B1cCgpOworICAgIH5XZWJQb3B1cCgpOwor
CisgICAgdmlydHVhbCB2b2lkIHNob3coY29uc3QgUVdlYlNlbGVjdERhdGEmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaGlkZSgpOworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgcG9wdXBDbG9zZWQo
KTsKKyAgICB2b2lkIGl0ZW1DbGlja2VkKGludCBpZHgpOworCitwcml2YXRlOgorICAgIFBvcHVw
KiBtX3BvcHVwOworCisgICAgUG9wdXAqIGNyZWF0ZVBvcHVwKGNvbnN0IFFXZWJTZWxlY3REYXRh
Jik7CisgICAgUG9wdXAqIGNyZWF0ZVNpbmdsZVNlbGVjdGlvblBvcHVwKGNvbnN0IFFXZWJTZWxl
Y3REYXRhJik7CisgICAgUG9wdXAqIGNyZWF0ZU11bHRpcGxlU2VsZWN0aW9uUG9wdXAoY29uc3Qg
UVdlYlNlbGVjdERhdGEmKTsKK307CisKK2NsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlciA6
IHB1YmxpYyBRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIHsKKyAgICBRX09CSkVDVAorcHVibGlj
OgorICAgIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHt9CisgICAgfldlYk5vdGlmaWNhdGlv
blByZXNlbnRlcigpIHt9CisgICAgdm9pZCBzaG93Tm90aWZpY2F0aW9uKGNvbnN0IFFXZWJOb3Rp
ZmljYXRpb25EYXRhKik7Cit9OworCitjbGFzcyBXZWJQbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwg
cHVibGljIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CisgICAgUV9PQkpFQ1QKKyAgICBRX0lOVEVS
RkFDRVMoUVdlYktpdFBsYXRmb3JtUGx1Z2luKQorcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0OworICAgIHZpcnR1YWwgUU9iamVjdCog
Y3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbikgY29uc3Q7Cit9OworCisjZW5kaWYgLy8gV2ViUGx1
Z2luX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0
Zm9ybXBsdWdpbi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3Bs
YXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzggQEAKK1RFTVBMQVRFID0gbGliCitDT05GSUcgKz0gcGx1Z2lu
IFwKKyAgICAgICAgICBtb2JpbGl0eQorCitNT0JJTElUWSA9IG11bHRpbWVkaWEKKworVEFSR0VU
ID0gJCRxdExpYnJhcnlUYXJnZXQocGxhdGZvcm1wbHVnaW4pCitUQVJHRVRQQVRIID0gUXRXZWJL
aXQKK1FUICAgICAgICs9IGNvcmUgZ3VpIFwKKyAgICAgICAgICAgIG5ldHdvcmsgXAorICAgICAg
ICAgICAgeG1sCisKKyMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxpdHkgaXMgYXZhaWxh
YmxlCitsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQorCitpc0VtcHR5KE9VVFBVVF9ESVIpOiBP
VVRQVVRfRElSID0gLi4vLi4vLi4vLi4KKworU09VUkNFUyArPSBcCisgICAgV2ViUGx1Z2luLmNw
cAorCitIRUFERVJTICs9IFwKKyAgICBXZWJQbHVnaW4uaCBcCisgICAgcXdlYmtpdHBsYXRmb3Jt
cGx1Z2luLmgKKworREVTVERJUiA9ICQkT1VUUFVUX0RJUi9wbHVnaW5zLyQkVEFSR0VUUEFUSAor
CitzeW1iaWFuOiB7CisjIEVQT0NBTExPV0RMTERBVEEgaGF2ZSB0byBzZXQgdHJ1ZSBiZWNhdXNl
IFF0IG1hY3JvcyBoYXMgaW5pdGlhbGlzZWQgZ2xvYmFsIGRhdGEKKyAgICBUQVJHRVQuRVBPQ0FM
TE9XRExMREFUQT0xCisgICAgVEFSR0VULkNBUEFCSUxJVFkgPSBBbGwgLVRjYgorICAgIFRBUkdF
VC5VSUQzID0gMHgyMDAyRTY3NAorICAgIFRBUkdFVC5WSUQgPSBWSURfREVGQVVMVAorICAgIFRB
UkdFVCA9ICQkVEFSR0VUJCR7UVRfTElCSU5GSVh9CisKKyAgICBMSUJTICs9IC1sY29uZSAtbGVp
a2NvcmUgLWxhdmtvbgorfQordGFyZ2V0LnBhdGggKz0gJCRbUVRfSU5TVEFMTF9QTFVHSU5TXS8k
JFRBUkdFVFBBVEgKK0lOU1RBTExTICs9IHRhcmdldApJbmRleDogU291cmNlL1dlYktpdC9xdC9z
eW1iaWFuL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZv
cm1wbHVnaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFFXRUJLSVRQTEFURk9STVBMVUdJ
Tl9ICisjZGVmaW5lIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICisKKy8qCisgKiAgV2FybmluZzog
VGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBpcyBub3QgIHBhcnQgb2YgdGhlIHB1YmxpYyBRdFdl
YktpdCBBUEkKKyAqICBhbmQgbWF5IGJlIGNoYW5nZWQgZnJvbSB2ZXJzaW9uIHRvIHZlcnNpb24g
b3IgZXZlbiBiZSBjb21wbGV0ZWx5IHJlbW92ZWQuCisqLworCisjaW5jbHVkZSA8UUNvbG9yPgor
I2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UVVybD4KKyNpZiBkZWZpbmVkKFdURl9VU0Vf
UVRfTVVMVElNRURJQSkgJiYgV1RGX1VTRV9RVF9NVUxUSU1FRElBCisjaW5jbHVkZSA8UU1lZGlh
UGxheWVyPgorI2VuZGlmCisKK2NsYXNzIFFXZWJTZWxlY3REYXRhCit7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+UVdlYlNlbGVjdERhdGEoKSB7fQorCisgICAgZW51bSBJdGVtVHlwZSB7IE9wdGlv
biwgR3JvdXAsIFNlcGFyYXRvciB9OworCisgICAgdmlydHVhbCBJdGVtVHlwZSBpdGVtVHlwZShp
bnQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFTdHJpbmcgaXRlbVRleHQoaW50IGluZGV4KSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBRU3RyaW5nIGl0ZW1Ub29sVGlwKGludCBpbmRleCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKGludCBpbmRleCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZChpbnQgaW5kZXgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGludCBpdGVtQ291bnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIG11bHRpcGxlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUUNvbG9yIGJhY2tncm91bmRD
b2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFDb2xvciBmb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBRQ29sb3IgaXRlbUJhY2tncm91bmRDb2xvcihpbnQgaW5k
ZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFDb2xvciBpdGVtRm9yZWdyb3VuZENvbG9yKGlu
dCBpbmRleCkgY29uc3QgPSAwOworfTsKKworY2xhc3MgUVdlYlNlbGVjdE1ldGhvZCA6IHB1Ymxp
YyBRT2JqZWN0Cit7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5RV2ViU2Vs
ZWN0TWV0aG9kKCkge30KKworICAgIHZpcnR1YWwgdm9pZCBzaG93KGNvbnN0IFFXZWJTZWxlY3RE
YXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBoaWRlKCkgPSAwOworCitRX1NJR05BTFM6Cisg
ICAgdm9pZCBzZWxlY3RJdGVtKGludCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGx5U2VsZWN0aW9u
cywgYm9vbCBzaGlmdCk7CisgICAgdm9pZCBkaWRIaWRlKCk7Cit9OworCitjbGFzcyBRV2ViTm90
aWZpY2F0aW9uRGF0YQoreworcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJOb3RpZmljYXRpb25E
YXRhKCkge30KKworICAgIHZpcnR1YWwgY29uc3QgUVN0cmluZyB0aXRsZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGNvbnN0IFFTdHJpbmcgbWVzc2FnZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IFFCeXRlQXJyYXkgaWNvbkRhdGEoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBj
b25zdCBRVXJsIG9wZW5lclBhZ2VVcmwoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBRV2ViTm90
aWZpY2F0aW9uUHJlc2VudGVyIDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorcHVi
bGljOgorICAgIFFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIoKSB7fQorICAgIHZpcnR1YWwgflFX
ZWJOb3RpZmljYXRpb25QcmVzZW50ZXIoKSB7fQorCisgICAgdmlydHVhbCB2b2lkIHNob3dOb3Rp
ZmljYXRpb24oY29uc3QgUVdlYk5vdGlmaWNhdGlvbkRhdGEqKSA9IDA7CisgICAgCitRX1NJR05B
TFM6CisgICAgdm9pZCBub3RpZmljYXRpb25DbG9zZWQoKTsKKyAgICB2b2lkIG5vdGlmaWNhdGlv
bkNsaWNrZWQoKTsKK307CisKK2NsYXNzIFFXZWJIYXB0aWNGZWVkYmFja1BsYXllcjogcHVibGlj
IFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFFXZWJIYXB0aWNGZWVkYmFj
a1BsYXllcigpIHt9CisgICAgdmlydHVhbCB+UVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKCkge30K
KworICAgIGVudW0gSGFwdGljU3RyZW5ndGggeworICAgICAgICBOb25lLCBXZWFrLCBNZWRpdW0s
IFN0cm9uZworICAgIH07CisKKyAgICBlbnVtIEhhcHRpY0V2ZW50IHsKKyAgICAgICAgUHJlc3Ms
IFJlbGVhc2UKKyAgICB9OworCisgICAgdmlydHVhbCB2b2lkIHBsYXlIYXB0aWNGZWVkYmFjayhj
b25zdCBIYXB0aWNFdmVudCwgY29uc3QgUVN0cmluZyYgaGFwdGljVHlwZSwgY29uc3QgSGFwdGlj
U3RyZW5ndGgpID0gMDsKK307CisKK2NsYXNzIFFXZWJUb3VjaE1vZGlmaWVyIDogcHVibGljIFFP
YmplY3QKK3sKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJUb3VjaE1v
ZGlmaWVyKCkge30KKworICAgIGVudW0gUGFkZGluZ0RpcmVjdGlvbiB7CisgICAgICAgIFVwLCBS
aWdodCwgRG93biwgTGVmdAorICAgIH07CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGhpdFRlc3RQ
YWRkaW5nRm9yVG91Y2goY29uc3QgUGFkZGluZ0RpcmVjdGlvbikgY29uc3QgPSAwOworfTsKKwor
I2lmIGRlZmluZWQoV1RGX1VTRV9RVF9NVUxUSU1FRElBKSAmJiBXVEZfVVNFX1FUX01VTFRJTUVE
SUEKK2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGljIFFPYmplY3Qgewor
ICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKSB7
fQorICAgIHZpcnR1YWwgflFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0
dWFsIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0ID0gMDsK
KworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbFNjcmVlbkNsb3NlZCgpOworCitwdWJsaWMgUV9T
TE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBsYXllciopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSA9IDA7Cit9OworI2VuZGlmCisK
K2NsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbgoreworcHVibGljOgorICAgIHZpcnR1YWwgflFX
ZWJLaXRQbGF0Zm9ybVBsdWdpbigpIHt9CisKKyAgICBlbnVtIEV4dGVuc2lvbiB7CisgICAgICAg
IE11bHRpcGxlU2VsZWN0aW9ucywKKyAgICAgICAgTm90aWZpY2F0aW9ucywKKyAgICAgICAgSGFw
dGljcywKKyAgICAgICAgVG91Y2hJbnRlcmFjdGlvbiwKKyAgICAgICAgRnVsbFNjcmVlblZpZGVv
UGxheWVyCisgICAgfTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRl
bnNpb24gZXh0ZW5zaW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBRT2JqZWN0KiBjcmVhdGVF
eHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QgPSAwOworfTsKKworUVRfQkVHSU5f
TkFNRVNQQUNFCitRX0RFQ0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiwgImNv
bS5ub2tpYS5RdC5XZWJLaXQuUGxhdGZvcm1QbHVnaW4vMS43Iik7CitRVF9FTkRfTkFNRVNQQUNF
CisKKyNlbmRpZiAvLyBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSAo=
</data>
<flag name="review"
          id="83112"
          type_id="1"
          status="-"
          setter="menard"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90527</attachid>
            <date>2011-04-21 07:14:42 -0700</date>
            <delta_ts>2011-04-22 07:14:59 -0700</delta_ts>
            <desc>platformpluginV1.2</desc>
            <filename>58435.patch</filename>
            <type>text/plain</type>
            <size>24136</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDg0NDk2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDQt
MjEgIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9y
bSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU4NDM1CisKKyAgICAgICAgVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4uCisKKyAg
ICAgICAgKiBTb3VyY2UvV2ViS2l0LnBybzogQWRkIHBsYXRmb3JtcGx1Z2luIHBhdGggdG8gdGhl
IFNVQkRJUlMuCisKIDIwMTEtMDQtMTggIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViS2l0
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0LnBybwkocmV2aXNpb24gODQ0ODkpCisr
KyBTb3VyY2UvV2ViS2l0LnBybwkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCBidWls
ZC1xdHNjcmlwdCB7CiB9CiAKIHN5bWJpYW4geworICAgIGV4aXN0cygkJFBXRC9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbik6IFNVQkRJUlMgKz0gV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4KKwogICAgICMgRm9yd2FyZCB0aGUgaW5zdGFsbCB0YXJnZXQgdG8gV2ViQ29y
ZS4gQSB3b3JrYXJvdW5kIHNpbmNlIElOU1RBTExTIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3Igc3lt
YmlhbgogICAgIGluc3RhbGwuY29tbWFuZHMgPSAkKE1BS0UpIC1DIFdlYkNvcmUgaW5zdGFsbAog
ICAgIFFNQUtFX0VYVFJBX1RBUkdFVFMgKz0gaW5zdGFsbApJbmRleDogU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0NDk2KQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw1NCBAQAorMjAxMS0wNC0yMSAgWWkgU2hlbiAgPHlpLjQuc2hlbkBub2tp
YS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1F0XSBVcHN0cmVhbSBTeW1iaWFuIHBsYXRmb3JtIHBsdWdpbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0MzUKKworICAgICAgICBVcHN0cmVhbSBT
eW1iaWFuIHBsYXRmb3JtIHBsdWdpbi4KKworICAgICAgICAqIFF0V2ViS2l0LnBybzogQWRkIHBs
YXRmb3JtcGx1Z2luLmRsbCB0byB0aGUgUXRXZWJLaXQuc2lzLgorICAgICAgICAqIHN5bWJpYW4v
cGxhdGZvcm1wbHVnaW46IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4v
V2ViUGx1Z2luLmNwcDogQWRkZWQuCisgICAgICAgIChJdGVtTGlzdERlbGVnYXRlOjpJdGVtTGlz
dERlbGVnYXRlKToKKyAgICAgICAgKEl0ZW1MaXN0RGVsZWdhdGU6OnBhaW50KToKKyAgICAgICAg
KFBvcHVwOjpQb3B1cCk6CisgICAgICAgIChQb3B1cDo6cmVzaXplRXZlbnQpOgorICAgICAgICAo
UG9wdXA6OnBvcHVsYXRlTGlzdCk6CisgICAgICAgIChQb3B1cDo6b25JdGVtU2VsZWN0ZWQpOgor
ICAgICAgICAoUG9wdXA6OnVwZGF0ZVNlbGVjdGlvbnNCZWZvcmVEaWFsb2dDbG9zaW5nKToKKyAg
ICAgICAgKFBvcHVwOjp1cGRhdGVBbmRDbG9zZSk6CisgICAgICAgIChXZWJQb3B1cDo6V2ViUG9w
dXApOgorICAgICAgICAoV2ViUG9wdXA6On5XZWJQb3B1cCk6CisgICAgICAgIChXZWJQb3B1cDo6
Y3JlYXRlU2luZ2xlU2VsZWN0aW9uUG9wdXApOgorICAgICAgICAoV2ViUG9wdXA6OmNyZWF0ZU11
bHRpcGxlU2VsZWN0aW9uUG9wdXApOgorICAgICAgICAoV2ViUG9wdXA6OmNyZWF0ZVBvcHVwKToK
KyAgICAgICAgKFdlYlBvcHVwOjpzaG93KToKKyAgICAgICAgKFdlYlBvcHVwOjpoaWRlKToKKyAg
ICAgICAgKFdlYlBvcHVwOjpwb3B1cENsb3NlZCk6CisgICAgICAgIChXZWJQb3B1cDo6aXRlbUNs
aWNrZWQpOgorICAgICAgICAoU2luZ2xlU2VsZWN0aW9uUG9wdXA6OlNpbmdsZVNlbGVjdGlvblBv
cHVwKToKKyAgICAgICAgKE11bHRpcGxlU2VsZWN0aW9uUG9wdXA6Ok11bHRpcGxlU2VsZWN0aW9u
UG9wdXApOgorICAgICAgICAoV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOjpzaG93Tm90aWZpY2F0
aW9uKToKKyAgICAgICAgKFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24pOgorICAgICAgICAo
V2ViUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24pOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vV2ViUGx1Z2luLmg6IEFkZGVkLgorICAgICAgICAoUG9wdXA6OnByZVNlbGVjdGVkSW5k
aWNlcyk6CisgICAgICAgIChQb3B1cDo6bGlzdFdpZGdldCk6CisgICAgICAgIChXZWJOb3RpZmlj
YXRpb25QcmVzZW50ZXI6OldlYk5vdGlmaWNhdGlvblByZXNlbnRlcik6CisgICAgICAgIChXZWJO
b3RpZmljYXRpb25QcmVzZW50ZXI6On5XZWJOb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAg
ICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOiBBZGRlZC4KKyAg
ICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oOiBD
b3BpZWQgZnJvbSBXZWJLaXQvcXQvQXBpL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oLgorICAgICAg
ICAoUVdlYlNlbGVjdERhdGE6On5RV2ViU2VsZWN0RGF0YSk6CisgICAgICAgIChRV2ViU2VsZWN0
TWV0aG9kOjp+UVdlYlNlbGVjdE1ldGhvZCk6CisgICAgICAgIChRV2ViTm90aWZpY2F0aW9uRGF0
YTo6flFXZWJOb3RpZmljYXRpb25EYXRhKToKKyAgICAgICAgKFFXZWJOb3RpZmljYXRpb25QcmVz
ZW50ZXI6OlFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoUVdlYk5vdGlmaWNh
dGlvblByZXNlbnRlcjo6flFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoUVdl
YlRvdWNoTW9kaWZpZXI6On5RV2ViVG91Y2hNb2RpZmllcik6CisgICAgICAgIChRV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlcjo6UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIpOgorICAgICAgICAo
UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6On5RV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlcik6
CisgICAgICAgIChRV2ViS2l0UGxhdGZvcm1QbHVnaW46On5RV2ViS2l0UGxhdGZvcm1QbHVnaW4p
OgorCiAyMDExLTA0LTIxICBDYWlvIE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9s
aXZlaXJhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJv
Z29uw6FjLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8JKHJldmlzaW9uIDg0NDg5KQorKysgU291
cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMs
MTAgQEAgc3ltYmlhbiB7CiAgICAgICAgICBERVBMT1lNRU5UICs9IGRlY2xhcmF0aXZlSW1wb3J0
CiAgICAgfQogCi0gICAgREVQTE9ZTUVOVCArPSB3ZWJraXRzaXNoZWFkZXIgd2Via2l0bGlicyB3
ZWJraXRiYWNrdXAKKyAgICBwbGF0Zm9ybXBsdWdpbi5zb3VyY2VzID0gJCRPVVRQVVRfRElSL3Bs
dWdpbnMvUXRXZWJLaXQvcGxhdGZvcm1wbHVnaW4kJHtRVF9MSUJJTkZJWH0uZGxsCisgICAgcGxh
dGZvcm1wbHVnaW4ucGF0aCA9IGM6JCRRVF9QTFVHSU5TX0JBU0VfRElSL1F0V2ViS2l0CisKKyAg
ICBERVBMT1lNRU5UICs9IHdlYmtpdHNpc2hlYWRlciB3ZWJraXRsaWJzIHdlYmtpdGJhY2t1cCBw
bGF0Zm9ybXBsdWdpbgogICAgICFDT05GSUcocHJvZHVjdGlvbik6Q09ORklHLT1kZWZfZmlsZXMK
IAogICAgICMgTmVlZCB0byBidWlsZCB0aGVzZSBzb3VyY2VzIGhlcmUgYmVjYXVzZSBvZiBleHBv
cnRlZCBzeW1ib2xzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vV2ViUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4v
cGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJXZWJQbHVnaW4u
aCIKKworI2luY2x1ZGUgPFF0R3VpPgorI2luY2x1ZGUgPFF0UGx1Z2luPgorI2luY2x1ZGUgPGFr
bmRpc2NyZWV0cG9wdXAuaD4KKworY2xhc3MgSXRlbUxpc3REZWxlZ2F0ZSA6IHB1YmxpYyBRU3R5
bGVkSXRlbURlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBJdGVtTGlzdERlbGVnYXRlKFFPYmplY3Qq
IHBhcmVudCA9IDApCisgICAgICAgICAgIDogUVN0eWxlZEl0ZW1EZWxlZ2F0ZShwYXJlbnQpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFT
dHlsZU9wdGlvblZpZXdJdGVtJiBvcHRpb24sIGNvbnN0IFFNb2RlbEluZGV4JiBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKGluZGV4LmlzVmFsaWQoKSk7CisKKyAgICAgICAg
UVN0eWxlT3B0aW9uVmlld0l0ZW1WNCBvcHQgPSBvcHRpb247CisgICAgICAgIG9wdC5zdGF0ZSA9
IG9wdC5zdGF0ZSAmICh+UVN0eWxlOjpTdGF0ZV9IYXNGb2N1cyk7CisgICAgICAgIG9wdC50ZXh0
ID0gaW5kZXguZGF0YSgpLnRvU3RyaW5nKCk7CisgICAgICAgIGluaXRTdHlsZU9wdGlvbigmb3B0
LCBpbmRleCk7CisKKyAgICAgICAgY29uc3QgUVdpZGdldCogd2lkZ2V0ID0gMDsKKyAgICAgICAg
UG9wdXAqIHNlbGVjdFBvcHVwID0gcW9iamVjdF9jYXN0PFBvcHVwKj4ocGFyZW50KCkpOworICAg
ICAgICBpZiAoc2VsZWN0UG9wdXApCisgICAgICAgICAgICB3aWRnZXQgPSBzZWxlY3RQb3B1cC0+
bGlzdFdpZGdldCgpOworCisgICAgICAgIFFTdHlsZSogc3R5bGUgPSB3aWRnZXQgPyB3aWRnZXQt
PnN0eWxlKCkgOiBRQXBwbGljYXRpb246OnN0eWxlKCk7CisgICAgICAgIHN0eWxlLT5kcmF3Q29u
dHJvbChRU3R5bGU6OkNFX0l0ZW1WaWV3SXRlbSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsKKyAg
ICB9Cit9OworCitQb3B1cDo6UG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmIGRhdGEpIDogbV9k
YXRhKGRhdGEpCit7CisgICAgc2V0TW9kYWwodHJ1ZSk7CisgICAgbV9saXN0ID0gbmV3IFFMaXN0
V2lkZ2V0KHRoaXMpOworICAgIGludCB3aWR0aCA9IFFBcHBsaWNhdGlvbjo6ZGVza3RvcCgpLT5z
aXplKCkud2lkdGgoKTsKKyAgICBRVkJveExheW91dCogdkxheW91dCA9IG5ldyBRVkJveExheW91
dCh0aGlzKTsKKyAgICB2TGF5b3V0LT5zZXRDb250ZW50c01hcmdpbnMod2lkdGggLyAyMCwgNSwg
NSwgNSk7CisgICAgaWYgKGRhdGEubXVsdGlwbGUoKSkKKyAgICAgICAgbV9saXN0LT5zZXRTZWxl
Y3Rpb25Nb2RlKFFBYnN0cmFjdEl0ZW1WaWV3OjpNdWx0aVNlbGVjdGlvbik7CisgICAgcG9wdWxh
dGVMaXN0KCk7CisgICAgdkxheW91dC0+YWRkV2lkZ2V0KG1fbGlzdCk7CisgICAKKyAgICBJdGVt
TGlzdERlbGVnYXRlKiBpdGVtRGVsZWdhdGUgPSBuZXcgSXRlbUxpc3REZWxlZ2F0ZSh0aGlzKTsK
KyAgICBtX2xpc3QtPnNldEl0ZW1EZWxlZ2F0ZShpdGVtRGVsZWdhdGUpOworfQorCit2b2lkIFBv
cHVwOjpyZXNpemVFdmVudChRUmVzaXplRXZlbnQqIGUpCit7CisgICAgUURpYWxvZzo6cmVzaXpl
RXZlbnQoZSk7CisgICAgbV9saXN0LT5zZXRHZW9tZXRyeShtX2xpc3QtPmdlb21ldHJ5KCkueCgp
LCBtX2xpc3QtPmdlb21ldHJ5KCkueSgpLCBtX2xpc3QtPndpZHRoKCksIG1fbGlzdC0+aGVpZ2h0
KCkpOworfQorCit2b2lkIFBvcHVwOjpwb3B1bGF0ZUxpc3QoKQoreworICAgIFFMaXN0V2lkZ2V0
SXRlbSogbGlzdEl0ZW07CisgICAgbV9wcmVTZWxlY3RlZEluZGljZXMuY2xlYXIoKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1fZGF0YS5pdGVtQ291bnQoKTsgKytpKSB7CisgICAgICAgIGlm
IChtX2RhdGEuaXRlbVR5cGUoaSkgPT0gUVdlYlNlbGVjdERhdGE6Ok9wdGlvbikgeworICAgICAg
ICAgICAgbGlzdEl0ZW0gPSBuZXcgUUxpc3RXaWRnZXRJdGVtKG1fZGF0YS5pdGVtVGV4dChpKSk7
CisgICAgICAgICAgICBtX2xpc3QtPmFkZEl0ZW0obGlzdEl0ZW0pOworICAgICAgICAgICAgbGlz
dEl0ZW0tPnNldFNlbGVjdGVkKG1fZGF0YS5pdGVtSXNTZWxlY3RlZChpKSk7CisgICAgICAgICAg
ICBpZiAobV9kYXRhLml0ZW1Jc1NlbGVjdGVkKGkpKSB7CisgICAgICAgICAgICAgICAgbV9wcmVT
ZWxlY3RlZEluZGljZXMuYXBwZW5kKGkpOworICAgICAgICAgICAgICAgIG1fbGlzdC0+c2V0Q3Vy
cmVudEl0ZW0obGlzdEl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1f
ZGF0YS5pdGVtVHlwZShpKSA9PSBRV2ViU2VsZWN0RGF0YTo6R3JvdXApIHsKKyAgICAgICAgICAg
IGxpc3RJdGVtID0gbmV3IFFMaXN0V2lkZ2V0SXRlbShtX2RhdGEuaXRlbVRleHQoaSkpOworICAg
ICAgICAgICAgbV9saXN0LT5hZGRJdGVtKGxpc3RJdGVtKTsKKyAgICAgICAgICAgIGxpc3RJdGVt
LT5zZXRTZWxlY3RlZChmYWxzZSk7CisgICAgICAgICAgICBsaXN0SXRlbS0+c2V0RmxhZ3MoUXQ6
Ok5vSXRlbUZsYWdzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjb25uZWN0KG1fbGlzdCwgU0lH
TkFMKGl0ZW1DbGlja2VkKFFMaXN0V2lkZ2V0SXRlbSopKSwgdGhpcywgU0xPVChvbkl0ZW1TZWxl
Y3RlZChRTGlzdFdpZGdldEl0ZW0qKSkpOworfQorCit2b2lkIFBvcHVwOjpvbkl0ZW1TZWxlY3Rl
ZChRTGlzdFdpZGdldEl0ZW0qIGl0ZW0pCit7CisgICAgaWYgKGl0ZW0tPmZsYWdzKCkgIT0gUXQ6
Ok5vSXRlbUZsYWdzKSB7CisgICAgICAgIGlmICghbV9kYXRhLm11bHRpcGxlKCkpCisgICAgICAg
ICAgICB1cGRhdGVBbmRDbG9zZSgpOworICAgIH0KK30KKwordm9pZCBQb3B1cDo6dXBkYXRlU2Vs
ZWN0aW9uc0JlZm9yZURpYWxvZ0Nsb3NpbmcoKQoreworICAgIFFMaXN0PFFMaXN0V2lkZ2V0SXRl
bSo+IHNlbGVjdGVkID0gbV9saXN0LT5zZWxlY3RlZEl0ZW1zKCk7CisgICAgaWYgKG1fZGF0YS5t
dWx0aXBsZSgpKSB7CisgICAgICAgIFFMaXN0PGludD4gc2VsZWN0ZWRJbmRpY2VzOworICAgICAg
ICBRX0ZPUkVBQ0goUUxpc3RXaWRnZXRJdGVtKiBpdGVtLCBzZWxlY3RlZCkKKyAgICAgICAgICAg
IHNlbGVjdGVkSW5kaWNlcy5hcHBlbmQobV9saXN0LT5yb3coaXRlbSkpOworCisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV9kYXRhLml0ZW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAg
IGlmICgobV9wcmVTZWxlY3RlZEluZGljZXMuY29udGFpbnMoaSkgJiYgIXNlbGVjdGVkSW5kaWNl
cy5jb250YWlucyhpKSkgfHwgKCFtX3ByZVNlbGVjdGVkSW5kaWNlcy5jb250YWlucyhpKSAmJiBz
ZWxlY3RlZEluZGljZXMuY29udGFpbnMoaSkpKQorICAgICAgICAgICAgICAgIGVtaXQgaXRlbUNs
aWNrZWQoaSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBRX0ZPUkVBQ0goUUxp
c3RXaWRnZXRJdGVtKiBpdGVtLCBzZWxlY3RlZCkKKyAgICAgICAgICAgIGVtaXQgaXRlbUNsaWNr
ZWQobV9saXN0LT5yb3coaXRlbSkpOworICAgIH0KK30KKwordm9pZCBQb3B1cDo6dXBkYXRlQW5k
Q2xvc2UoKQoreworICAgIHVwZGF0ZVNlbGVjdGlvbnNCZWZvcmVEaWFsb2dDbG9zaW5nKCk7Cisg
ICAgYWNjZXB0KCk7Cit9CisKK1dlYlBvcHVwOjpXZWJQb3B1cCgpCisgICAgOiBtX3BvcHVwKDAp
Cit7Cit9CisKK1dlYlBvcHVwOjp+V2ViUG9wdXAoKQoreworICAgIGlmIChtX3BvcHVwKQorICAg
ICAgICBtX3BvcHVwLT5kZWxldGVMYXRlcigpOworfQorCitQb3B1cCogV2ViUG9wdXA6OmNyZWF0
ZVNpbmdsZVNlbGVjdGlvblBvcHVwKGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQoreworICAg
IHJldHVybiBuZXcgU2luZ2xlU2VsZWN0aW9uUG9wdXAoZGF0YSk7Cit9CisKK1BvcHVwKiBXZWJQ
b3B1cDo6Y3JlYXRlTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYg
ZGF0YSkKK3sKKyAgICByZXR1cm4gbmV3IE11bHRpcGxlU2VsZWN0aW9uUG9wdXAoZGF0YSk7Cit9
CisKK1BvcHVwKiBXZWJQb3B1cDo6Y3JlYXRlUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmIGRh
dGEpCit7CisgICAgUG9wdXAqIHJlc3VsdCA9IGRhdGEubXVsdGlwbGUoKSA/IGNyZWF0ZU11bHRp
cGxlU2VsZWN0aW9uUG9wdXAoZGF0YSkgOiBjcmVhdGVTaW5nbGVTZWxlY3Rpb25Qb3B1cChkYXRh
KTsKKyAgICBjb25uZWN0KHJlc3VsdCwgU0lHTkFMKGZpbmlzaGVkKGludCkpLCB0aGlzLCBTTE9U
KHBvcHVwQ2xvc2VkKCkpKTsKKyAgICBjb25uZWN0KHJlc3VsdCwgU0lHTkFMKGl0ZW1DbGlja2Vk
KGludCkpLCB0aGlzLCBTTE9UKGl0ZW1DbGlja2VkKGludCkpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIFdlYlBvcHVwOjpzaG93KGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQor
eworICAgIGlmIChtX3BvcHVwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BvcHVwID0gY3Jl
YXRlUG9wdXAoZGF0YSk7CisgICAgbV9wb3B1cC0+c2hvd01heGltaXplZCgpOworfQorCit2b2lk
IFdlYlBvcHVwOjpoaWRlKCkKK3sKKyAgICBpZiAoIW1fcG9wdXApCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcG9wdXAtPmFjY2VwdCgpOworfQorCit2b2lkIFdlYlBvcHVwOjpwb3B1cENsb3Nl
ZCgpCit7CisgICAgaWYgKCFtX3BvcHVwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BvcHVw
LT5kZWxldGVMYXRlcigpOworICAgIG1fcG9wdXAgPSAwOworICAgIGVtaXQgZGlkSGlkZSgpOwor
fQorCit2b2lkIFdlYlBvcHVwOjppdGVtQ2xpY2tlZChpbnQgaWR4KQoreworICAgIGVtaXQgc2Vs
ZWN0SXRlbShpZHgsIHRydWUsIGZhbHNlKTsKK30KKworU2luZ2xlU2VsZWN0aW9uUG9wdXA6OlNp
bmdsZVNlbGVjdGlvblBvcHVwKGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQorICAgIDogUG9w
dXAoZGF0YSkKK3sKKyAgICBzZXRXaW5kb3dUaXRsZSgiU2VsZWN0IGl0ZW0iKTsKKworICAgIFFB
Y3Rpb24qIGNhbmNlbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJDYW5jZWwiLCB0aGlzKTsKKyAgICBj
YW5jZWxBY3Rpb24tPnNldFNvZnRLZXlSb2xlKFFBY3Rpb246Ok5lZ2F0aXZlU29mdEtleSk7Cisg
ICAgYWRkQWN0aW9uKGNhbmNlbEFjdGlvbik7CisgICAgY29ubmVjdChjYW5jZWxBY3Rpb24sIFNJ
R05BTCh0cmlnZ2VyZWQoYm9vbCkpLCB0aGlzLCBTTE9UKHJlamVjdCgpKSk7Cit9CisKK011bHRp
cGxlU2VsZWN0aW9uUG9wdXA6Ok11bHRpcGxlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdlYlNlbGVj
dERhdGEmIGRhdGEpCisgICAgOiBQb3B1cChkYXRhKQoreworICAgIHNldFdpbmRvd1RpdGxlKCJT
ZWxlY3QgaXRlbXMiKTsKKworICAgIFFBY3Rpb24qIGNhbmNlbEFjdGlvbiA9IG5ldyBRQWN0aW9u
KCJDYW5jZWwiLCB0aGlzKTsKKyAgICBjYW5jZWxBY3Rpb24tPnNldFNvZnRLZXlSb2xlKFFBY3Rp
b246Ok5lZ2F0aXZlU29mdEtleSk7CisgICAgYWRkQWN0aW9uKGNhbmNlbEFjdGlvbik7CisgICAg
Y29ubmVjdChjYW5jZWxBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCB0aGlzLCBTTE9U
KHJlamVjdCgpKSk7CisKKyAgICBRQWN0aW9uKiBva0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJPayIs
IHRoaXMpOworICAgIG9rQWN0aW9uLT5zZXRTb2Z0S2V5Um9sZShRQWN0aW9uOjpQb3NpdGl2ZVNv
ZnRLZXkpOworICAgIGFkZEFjdGlvbihva0FjdGlvbik7CisgICAgY29ubmVjdChva0FjdGlvbiwg
U0lHTkFMKHRyaWdnZXJlZChib29sKSksIHRoaXMsIFNMT1QodXBkYXRlQW5kQ2xvc2UoKSkpOwor
fQorCit2b2lkIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvd05vdGlmaWNhdGlvbihjb25z
dCBRV2ViTm90aWZpY2F0aW9uRGF0YSogZGF0YSkKK3sKKyAgICBIQnVmQyogdGl0bGUgPSBIQnVm
Qzo6TmV3KGRhdGEtPnRpdGxlKCkuc2l6ZSgpKTsKKyAgICAqdGl0bGUgPSBUUHRyQyhkYXRhLT50
aXRsZSgpLnV0ZjE2KCksIGRhdGEtPnRpdGxlKCkuc2l6ZSgpKTsKKyAgICBIQnVmQyogbWVzc2Fn
ZSA9IEhCdWZDOjpOZXcoZGF0YS0+bWVzc2FnZSgpLnNpemUoKSk7CisgICAgKm1lc3NhZ2UgPSBU
UHRyQyhkYXRhLT5tZXNzYWdlKCkudXRmMTYoKSwgZGF0YS0+bWVzc2FnZSgpLnNpemUoKSk7Cisg
ICAgVFJBUF9JR05PUkUoQ0FrbkRpc2NyZWV0UG9wdXA6OlNob3dHbG9iYWxQb3B1cEwoKnRpdGxl
LCAqbWVzc2FnZSwgS0FrbnNJSUROb25lLCBLTnVsbERlc0MpKTsKKyAgICBlbWl0IG5vdGlmaWNh
dGlvbkNsb3NlZCgpOworICAgIGRlbGV0ZUxhdGVyKCk7CisgICAgZGVsZXRlIHRpdGxlOworICAg
IGRlbGV0ZSBtZXNzYWdlOworfQorCitib29sIFdlYlBsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24o
RXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKK3sKKyAgICBpZiAoZXh0ZW5zaW9uID09IE11bHRp
cGxlU2VsZWN0aW9ucykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGV4dGVuc2lvbiA9
PSBOb3RpZmljYXRpb25zKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZXh0ZW5zaW9u
ID09IEZ1bGxTY3JlZW5WaWRlb1BsYXllcikKKyAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1FPYmplY3QqIFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5z
aW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoIChleHRlbnNpb24p
IHsKKyAgICBjYXNlIE11bHRpcGxlU2VsZWN0aW9uczoKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJQ
b3B1cCgpOworICAgIGNhc2UgTm90aWZpY2F0aW9uczoKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJO
b3RpZmljYXRpb25QcmVzZW50ZXIoKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKK1FfRVhQT1JUX1BMVUdJTjIocXdlYnNlbGVjdGltLCBXZWJQbHVnaW4pCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dl
YlBsdWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRm
b3JtcGx1Z2luL1dlYlBsdWdpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisgCisjaWZuZGVmIFdlYlBsdWdpbl9oCisjZGVmaW5lIFdlYlBsdWdpbl9o
CisKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKyNpbmNsdWRlIDxRRGlhbG9n
PgorCitjbGFzcyBRTGlzdFdpZGdldEl0ZW07CitjbGFzcyBRTGlzdFdpZGdldDsKK2NsYXNzIFFT
Y3JvbGxBcmVhOworCitjbGFzcyBQb3B1cFNjcm9sbGluZ0hhbmRsZXI7CisKK2NsYXNzIFBvcHVw
IDogcHVibGljIFFEaWFsb2cgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUG9wdXAoY29u
c3QgUVdlYlNlbGVjdERhdGEmKTsKKyAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbnNCZWZvcmVEaWFs
b2dDbG9zaW5nKCk7CisgICAgUUxpc3Q8aW50PiBwcmVTZWxlY3RlZEluZGljZXMoKSBjb25zdCB7
IHJldHVybiBtX3ByZVNlbGVjdGVkSW5kaWNlczsgfQorICAgIFFMaXN0V2lkZ2V0KiBsaXN0V2lk
Z2V0KCkgeyByZXR1cm4gbV9saXN0OyB9CisKK3NpZ25hbHM6CisgICAgdm9pZCBpdGVtQ2xpY2tl
ZChpbnQgaWR4KTsKKworcHJvdGVjdGVkIHNsb3RzOgorICAgIHZvaWQgb25JdGVtU2VsZWN0ZWQo
UUxpc3RXaWRnZXRJdGVtKik7CisgICAgdm9pZCB1cGRhdGVBbmRDbG9zZSgpOworCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBwb3B1bGF0ZUxpc3QoKTsKKyAgICB2b2lkIHJlc2l6ZUV2ZW50KFFSZXNp
emVFdmVudCopOworICAgIGNvbnN0IFFXZWJTZWxlY3REYXRhJiBtX2RhdGE7CisgICAgUUxpc3RX
aWRnZXQqIG1fbGlzdDsKKyAgICBRTGlzdDxpbnQ+IG1fcHJlU2VsZWN0ZWRJbmRpY2VzOworICAg
IFBvcHVwU2Nyb2xsaW5nSGFuZGxlciogbV9zY3JvbGxpbmdIYW5kbGVyOworfTsKKworCitjbGFz
cyBTaW5nbGVTZWxlY3Rpb25Qb3B1cCA6IHB1YmxpYyBQb3B1cCB7CisgICAgUV9PQkpFQ1QKK3B1
YmxpYzoKKyAgICBTaW5nbGVTZWxlY3Rpb25Qb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYpOwor
fTsKKworCitjbGFzcyBNdWx0aXBsZVNlbGVjdGlvblBvcHVwIDogcHVibGljIFBvcHVwIHsKKyAg
ICBRX09CSkVDVAorcHVibGljOgorICAgIE11bHRpcGxlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdl
YlNlbGVjdERhdGEmKTsKK307CisKKworY2xhc3MgV2ViUG9wdXAgOiBwdWJsaWMgUVdlYlNlbGVj
dE1ldGhvZCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBXZWJQb3B1cCgpOworICAgIH5X
ZWJQb3B1cCgpOworCisgICAgdmlydHVhbCB2b2lkIHNob3coY29uc3QgUVdlYlNlbGVjdERhdGEm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpOworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQg
cG9wdXBDbG9zZWQoKTsKKyAgICB2b2lkIGl0ZW1DbGlja2VkKGludCBpZHgpOworCitwcml2YXRl
OgorICAgIFBvcHVwKiBtX3BvcHVwOworCisgICAgUG9wdXAqIGNyZWF0ZVBvcHVwKGNvbnN0IFFX
ZWJTZWxlY3REYXRhJik7CisgICAgUG9wdXAqIGNyZWF0ZVNpbmdsZVNlbGVjdGlvblBvcHVwKGNv
bnN0IFFXZWJTZWxlY3REYXRhJik7CisgICAgUG9wdXAqIGNyZWF0ZU11bHRpcGxlU2VsZWN0aW9u
UG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmKTsKK307CisKK2NsYXNzIFdlYk5vdGlmaWNhdGlv
blByZXNlbnRlciA6IHB1YmxpYyBRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIHsKKyAgICBRX09C
SkVDVAorcHVibGljOgorICAgIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHt9CisgICAgfldl
Yk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHt9CisgICAgdm9pZCBzaG93Tm90aWZpY2F0aW9uKGNv
bnN0IFFXZWJOb3RpZmljYXRpb25EYXRhKik7Cit9OworCitjbGFzcyBXZWJQbHVnaW4gOiBwdWJs
aWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CisgICAgUV9PQkpFQ1QK
KyAgICBRX0lOVEVSRkFDRVMoUVdlYktpdFBsYXRmb3JtUGx1Z2luKQorcHVibGljOgorICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0OworICAgIHZpcnR1
YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbikgY29uc3Q7Cit9OworCisjZW5k
aWYgLy8gV2ViUGx1Z2luX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9y
bXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdp
bi5wcm8JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKK1RFTVBMQVRFID0gbGliCitDT05G
SUcgKz0gcGx1Z2luIFwKKyAgICAgICAgICBtb2JpbGl0eQorCitNT0JJTElUWSA9IG11bHRpbWVk
aWEKKworVEFSR0VUID0gJCRxdExpYnJhcnlUYXJnZXQocGxhdGZvcm1wbHVnaW4pCitUQVJHRVRQ
QVRIID0gUXRXZWJLaXQKK1FUICAgICAgICs9IGNvcmUgZ3VpIFwKKyAgICAgICAgICAgIG5ldHdv
cmsgXAorICAgICAgICAgICAgeG1sCisKKyMjIGxvYWQgbW9iaWxpdHljb25maWcgaWYgbW9iaWxp
dHkgaXMgYXZhaWxhYmxlCitsb2FkKG1vYmlsaXR5Y29uZmlnLCB0cnVlKQorCitpc0VtcHR5KE9V
VFBVVF9ESVIpOiBPVVRQVVRfRElSID0gLi4vLi4vLi4vLi4KKworU09VUkNFUyArPSBcCisgICAg
V2ViUGx1Z2luLmNwcAorCitIRUFERVJTICs9IFwKKyAgICBXZWJQbHVnaW4uaCBcCisgICAgcXdl
YmtpdHBsYXRmb3JtcGx1Z2luLmgKKworREVTVERJUiA9ICQkT1VUUFVUX0RJUi9wbHVnaW5zLyQk
VEFSR0VUUEFUSAorCitzeW1iaWFuOiB7CisjIEVQT0NBTExPV0RMTERBVEEgaGF2ZSB0byBzZXQg
dHJ1ZSBiZWNhdXNlIFF0IG1hY3JvcyBoYXMgaW5pdGlhbGlzZWQgZ2xvYmFsIGRhdGEKKyAgICBU
QVJHRVQuRVBPQ0FMTE9XRExMREFUQT0xCisgICAgVEFSR0VULkNBUEFCSUxJVFkgPSBBbGwgLVRj
YgorICAgIFRBUkdFVC5VSUQzID0gMHgyMDAyRTY3NAorICAgIFRBUkdFVC5WSUQgPSBWSURfREVG
QVVMVAorICAgIFRBUkdFVCA9ICQkVEFSR0VUJCR7UVRfTElCSU5GSVh9CisKKyAgICBMSUJTICs9
IC1sY29uZSAtbGVpa2NvcmUgLWxhdmtvbgorfQordGFyZ2V0LnBhdGggKz0gJCRbUVRfSU5TVEFM
TF9QTFVHSU5TXS8kJFRBUkdFVFBBVEgKK0lOU1RBTExTICs9IHRhcmdldApJbmRleDogU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3F3ZWJraXRwbGF0Zm9ybXBsdWdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9x
d2Via2l0cGxhdGZvcm1wbHVnaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFFXRUJLSVRQ
TEFURk9STVBMVUdJTl9ICisjZGVmaW5lIFFXRUJLSVRQTEFURk9STVBMVUdJTl9ICisKKy8qCisg
KiAgV2FybmluZzogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBpcyBub3QgIHBhcnQgb2YgdGhl
IHB1YmxpYyBRdFdlYktpdCBBUEkKKyAqICBhbmQgbWF5IGJlIGNoYW5nZWQgZnJvbSB2ZXJzaW9u
IHRvIHZlcnNpb24gb3IgZXZlbiBiZSBjb21wbGV0ZWx5IHJlbW92ZWQuCisqLworCisjaW5jbHVk
ZSA8UUNvbG9yPgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UVVybD4KKyNpZiBkZWZp
bmVkKFdURl9VU0VfUVRfTVVMVElNRURJQSkgJiYgV1RGX1VTRV9RVF9NVUxUSU1FRElBCisjaW5j
bHVkZSA8UU1lZGlhUGxheWVyPgorI2VuZGlmCisKK2NsYXNzIFFXZWJTZWxlY3REYXRhIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5RV2ViU2VsZWN0RGF0YSgpIHt9CisKKyAgICBlbnVtIEl0ZW1U
eXBlIHsgT3B0aW9uLCBHcm91cCwgU2VwYXJhdG9yIH07CisKKyAgICB2aXJ0dWFsIEl0ZW1UeXBl
IGl0ZW1UeXBlKGludCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUVN0cmluZyBpdGVtVGV4dChp
bnQgaW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFTdHJpbmcgaXRlbVRvb2xUaXAoaW50
IGluZGV4KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQoaW50IGlu
ZGV4KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKGludCBpbmRl
eCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGl0ZW1Db3VudCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgbXVsdGlwbGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBRQ29sb3Ig
YmFja2dyb3VuZENvbG9yKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUUNvbG9yIGZvcmVncm91
bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFFDb2xvciBpdGVtQmFja2dyb3VuZENv
bG9yKGludCBpbmRleCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUUNvbG9yIGl0ZW1Gb3JlZ3Jv
dW5kQ29sb3IoaW50IGluZGV4KSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBRV2ViU2VsZWN0TWV0
aG9kIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgdmlydHVh
bCB+UVdlYlNlbGVjdE1ldGhvZCgpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hvdyhjb25zdCBR
V2ViU2VsZWN0RGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZSgpID0gMDsKKworUV9T
SUdOQUxTOgorICAgIHZvaWQgc2VsZWN0SXRlbShpbnQgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBs
eVNlbGVjdGlvbnMsIGJvb2wgc2hpZnQpOworICAgIHZvaWQgZGlkSGlkZSgpOworfTsKKworY2xh
c3MgUVdlYk5vdGlmaWNhdGlvbkRhdGEgeworcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJOb3Rp
ZmljYXRpb25EYXRhKCkge30KKworICAgIHZpcnR1YWwgY29uc3QgUVN0cmluZyB0aXRsZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IFFTdHJpbmcgbWVzc2FnZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGNvbnN0IFFCeXRlQXJyYXkgaWNvbkRhdGEoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBjb25zdCBRVXJsIG9wZW5lclBhZ2VVcmwoKSBjb25zdCA9IDA7Cit9OworCitjbGFz
cyBRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JK
RUNUCitwdWJsaWM6CisgICAgUVdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHt9CisgICAgdmly
dHVhbCB+UVdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQg
c2hvd05vdGlmaWNhdGlvbihjb25zdCBRV2ViTm90aWZpY2F0aW9uRGF0YSopID0gMDsKKyAgICAK
K1FfU0lHTkFMUzoKKyAgICB2b2lkIG5vdGlmaWNhdGlvbkNsb3NlZCgpOworICAgIHZvaWQgbm90
aWZpY2F0aW9uQ2xpY2tlZCgpOworfTsKKworY2xhc3MgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVy
OiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBRV2ViSGFwdGlj
RmVlZGJhY2tQbGF5ZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJIYXB0aWNGZWVkYmFja1BsYXll
cigpIHt9CisKKyAgICBlbnVtIEhhcHRpY1N0cmVuZ3RoIHsKKyAgICAgICAgTm9uZSwgV2Vhaywg
TWVkaXVtLCBTdHJvbmcKKyAgICB9OworCisgICAgZW51bSBIYXB0aWNFdmVudCB7CisgICAgICAg
IFByZXNzLCBSZWxlYXNlCisgICAgfTsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF5SGFwdGljRmVl
ZGJhY2soY29uc3QgSGFwdGljRXZlbnQsIGNvbnN0IFFTdHJpbmcmIGhhcHRpY1R5cGUsIGNvbnN0
IEhhcHRpY1N0cmVuZ3RoKSA9IDA7Cit9OworCitjbGFzcyBRV2ViVG91Y2hNb2RpZmllciA6IHB1
YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJU
b3VjaE1vZGlmaWVyKCkge30KKworICAgIGVudW0gUGFkZGluZ0RpcmVjdGlvbiB7CisgICAgICAg
IFVwLCBSaWdodCwgRG93biwgTGVmdAorICAgIH07CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGhp
dFRlc3RQYWRkaW5nRm9yVG91Y2goY29uc3QgUGFkZGluZ0RpcmVjdGlvbikgY29uc3QgPSAwOwor
fTsKKworI2lmIGRlZmluZWQoV1RGX1VTRV9RVF9NVUxUSU1FRElBKSAmJiBXVEZfVVNFX1FUX01V
TFRJTUVESUEKK2NsYXNzIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyIDogcHVibGljIFFPYmpl
Y3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkge30KKyAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0
ID0gMDsKKworUV9TSUdOQUxTOgorICAgIHZvaWQgZnVsbFNjcmVlbkNsb3NlZCgpOworCitwdWJs
aWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBsYXll
ciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSA9IDA7Cit9OworI2Vu
ZGlmCisKK2NsYXNzIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+UVdlYktpdFBsYXRmb3JtUGx1Z2luKCkge30KKworICAgIGVudW0gRXh0ZW5zaW9uIHsKKyAg
ICAgICAgTXVsdGlwbGVTZWxlY3Rpb25zLAorICAgICAgICBOb3RpZmljYXRpb25zLAorICAgICAg
ICBIYXB0aWNzLAorICAgICAgICBUb3VjaEludGVyYWN0aW9uLAorICAgICAgICBGdWxsU2NyZWVu
VmlkZW9QbGF5ZXIKKyAgICB9OworCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9u
KEV4dGVuc2lvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5z
aW9uKEV4dGVuc2lvbikgY29uc3QgPSAwOworfTsKKworUVRfQkVHSU5fTkFNRVNQQUNFCitRX0RF
Q0xBUkVfSU5URVJGQUNFKFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiwgImNvbS5ub2tpYS5RdC5XZWJL
aXQuUGxhdGZvcm1QbHVnaW4vMS43Iik7CitRVF9FTkRfTkFNRVNQQUNFCisKKyNlbmRpZiAvLyBR
V0VCS0lUUExBVEZPUk1QTFVHSU5fSApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gODQ0OTYpCisrKyBUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wNC0yMSAgWWkgU2hlbiAgPHlp
LjQuc2hlbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1F0XSBVcHN0cmVhbSBTeW1iaWFuIHBsYXRmb3JtIHBsdWdpbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg0MzUKKworICAgICAg
ICBFeGVtcHRpbmcgZGlyZWN0b3J5IFdlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luIGZy
b20gc3R5bGUgZ3VpZGUuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0
LnB5OgorCiAyMDExLTA0LTIwICBEb21pbmljIENvb25leSAgPGRvbWluaWNjQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CShyZXZpc2lvbiA4NDQ4OSkKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQkod29ya2luZyBjb3B5KQpAQCAtMTk4
LDYgKzE5OCwxNCBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICAiK3BlcDgvVzE5
MSIsICAjIFRhYnMKICAgICAgICIrcGVwOC9XMjkxIiwgICMgVHJhaWxpbmcgd2hpdGUgc3BhY2UK
ICAgICAgICIrd2hpdGVzcGFjZS9jYXJyaWFnZV9yZXR1cm4iXSksCisKKyAgICAoWyMgUXQgU3lt
YmlhbiBwbGF0Zm9ybSBwbHVnaW4gaGFzIG5vIGNvbmZpZy5oIG9yIGhlYWRlciBndWFyZC4KKyAg
ICAgICMgUXQgY29kZSB1c2VzICdfJyBpbiBzb21lIHBsYWNlcyAoc3VjaCBhcyBwcml2YXRlIHNs
b3RzCisgICAgICAjIGFuZCBvbiB0ZXN0IHh4eF9kYXRhIG1ldGhvcyBvbiB0ZXN0cykuCisgICAg
ICAiU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luLyJdLAorICAgICBbIi1y
ZWFkYWJpbGl0eS9uYW1pbmciLAorICAgICAgIi1idWlsZC9oZWFkZXJfZ3VhcmQiLAorICAgICAg
Ii1idWlsZC9pbmNsdWRlX29yZGVyIl0pLAogXQogCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDg0NDg5KQor
KysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzcsNiArMjM3LDggQEAgY2xhc3MgR2xvYmFsVmFyaWFibGVzVGVzdCh1
bml0dGVzdC5UZXN0QwogICAgICAgICAgICAgICAgICAgICAicmVhZGFiaWxpdHkvYnJhY2VzIikK
ICAgICAgICAgYXNzZXJ0Q2hlY2soIlNvdXJjZS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1w
bHVnaW4vV2ViUGx1Z2luLmNwcCIsCiAgICAgICAgICAgICAgICAgICAgICJyZWFkYWJpbGl0eS9i
cmFjZXMiKQorICAgICAgICBhc3NlcnRDaGVjaygiU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3Bs
YXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAiLAorICAgICAgICAgICAgICAgICAgICAicmVhZGFi
aWxpdHkvYnJhY2VzIikKICAgICAgICAgYXNzZXJ0Tm9DaGVjaygiU291cmNlL0phdmFTY3JpcHRD
b3JlL3F0L2FwaS9xc2NyaXB0ZW5naW5lLmNwcCIsCiAgICAgICAgICAgICAgICAgICAgICAgInJl
YWRhYmlsaXR5L25hbWluZyIpCiAgICAgICAgIGFzc2VydE5vQ2hlY2soIlNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9xdC9iZW5jaG1hcmtzIgpAQCAtMjUwLDYgKzI1Miw4IEBAIGNsYXNzIEdsb2JhbFZh
cmlhYmxlc1Rlc3QodW5pdHRlc3QuVGVzdEMKICAgICAgICAgICAgICAgICAgICAgICAicmVhZGFi
aWxpdHkvbmFtaW5nIikKICAgICAgICAgYXNzZXJ0Tm9DaGVjaygiU291cmNlL1dlYktpdC9xdC9l
eGFtcGxlcy9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwIiwKICAgICAgICAgICAgICAgICAg
ICAgICAicmVhZGFiaWxpdHkvbmFtaW5nIikKKyAgICAgICAgYXNzZXJ0Tm9DaGVjaygiU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAiLAorICAgICAg
ICAgICAgICAgICAgICAgICJidWlsZC9oZWFkZXJfZ3VhcmQiKQogCiAgICAgICAgIGFzc2VydE5v
Q2hlY2soIlRvb2xzL01pbmlCcm93c2VyL3F0L1VybExvYWRlci5jcHAiLAogICAgICAgICAgICAg
ICAgICAgICAiYnVpbGQvaW5jbHVkZSIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90705</attachid>
            <date>2011-04-22 07:14:59 -0700</date>
            <delta_ts>2011-04-22 07:43:22 -0700</delta_ts>
            <desc>platformpluginV1.3</desc>
            <filename>58435v13.patch</filename>
            <type>text/plain</type>
            <size>24104</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDg0NjI2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDQt
MjIgIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9y
bSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU4NDM1CisKKyAgICAgICAgVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4uCisKKyAg
ICAgICAgKiBTb3VyY2UvV2ViS2l0LnBybzogQWRkIHBsYXRmb3JtcGx1Z2luIHBhdGggdG8gdGhl
IFNVQkRJUlMuCisKIDIwMTEtMDQtMjEgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogU291cmNlL1dlYktp
dC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC5wcm8JKHJldmlzaW9uIDg0NjIzKQor
KysgU291cmNlL1dlYktpdC5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAgYnVp
bGQtcXRzY3JpcHQgewogfQogCiBzeW1iaWFuIHsKKyAgICBleGlzdHMoJCRQV0QvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4pOiBTVUJESVJTICs9IFdlYktpdC9xdC9zeW1iaWFuL3Bs
YXRmb3JtcGx1Z2luCisKICAgICAjIEZvcndhcmQgdGhlIGluc3RhbGwgdGFyZ2V0IHRvIFdlYkNv
cmUuIEEgd29ya2Fyb3VuZCBzaW5jZSBJTlNUQUxMUyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHN5
bWJpYW4KICAgICBpbnN0YWxsLmNvbW1hbmRzID0gJChNQUtFKSAtQyBXZWJDb3JlIGluc3RhbGwK
ICAgICBRTUFLRV9FWFRSQV9UQVJHRVRTICs9IGluc3RhbGwKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA4NDYyNikKKysrIFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTEtMDQtMjIgIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDM1CisKKyAgICAgICAgVXBzdHJlYW0g
U3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4uCisKKyAgICAgICAgKiBRdFdlYktpdC5wcm86IEFkZCBw
bGF0Zm9ybXBsdWdpbi5kbGwgdG8gdGhlIFF0V2ViS2l0LnNpcy4KKyAgICAgICAgKiBzeW1iaWFu
L3BsYXRmb3JtcGx1Z2luOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L1dlYlBsdWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSXRlbUxpc3REZWxlZ2F0ZTo6SXRlbUxp
c3REZWxlZ2F0ZSk6CisgICAgICAgIChJdGVtTGlzdERlbGVnYXRlOjpwYWludCk6CisgICAgICAg
IChQb3B1cDo6UG9wdXApOgorICAgICAgICAoUG9wdXA6OnJlc2l6ZUV2ZW50KToKKyAgICAgICAg
KFBvcHVwOjpwb3B1bGF0ZUxpc3QpOgorICAgICAgICAoUG9wdXA6Om9uSXRlbVNlbGVjdGVkKToK
KyAgICAgICAgKFBvcHVwOjp1cGRhdGVTZWxlY3Rpb25zQmVmb3JlRGlhbG9nQ2xvc2luZyk6Cisg
ICAgICAgIChQb3B1cDo6dXBkYXRlQW5kQ2xvc2UpOgorICAgICAgICAoV2ViUG9wdXA6OldlYlBv
cHVwKToKKyAgICAgICAgKFdlYlBvcHVwOjp+V2ViUG9wdXApOgorICAgICAgICAoV2ViUG9wdXA6
OmNyZWF0ZVNpbmdsZVNlbGVjdGlvblBvcHVwKToKKyAgICAgICAgKFdlYlBvcHVwOjpjcmVhdGVN
dWx0aXBsZVNlbGVjdGlvblBvcHVwKToKKyAgICAgICAgKFdlYlBvcHVwOjpjcmVhdGVQb3B1cCk6
CisgICAgICAgIChXZWJQb3B1cDo6c2hvdyk6CisgICAgICAgIChXZWJQb3B1cDo6aGlkZSk6Cisg
ICAgICAgIChXZWJQb3B1cDo6cG9wdXBDbG9zZWQpOgorICAgICAgICAoV2ViUG9wdXA6Oml0ZW1D
bGlja2VkKToKKyAgICAgICAgKFNpbmdsZVNlbGVjdGlvblBvcHVwOjpTaW5nbGVTZWxlY3Rpb25Q
b3B1cCk6CisgICAgICAgIChNdWx0aXBsZVNlbGVjdGlvblBvcHVwOjpNdWx0aXBsZVNlbGVjdGlv
blBvcHVwKToKKyAgICAgICAgKFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjo6c2hvd05vdGlmaWNh
dGlvbik6CisgICAgICAgIChXZWJQbHVnaW46OnN1cHBvcnRzRXh0ZW5zaW9uKToKKyAgICAgICAg
KFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKToKKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3Jt
cGx1Z2luL1dlYlBsdWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKFBvcHVwOjpwcmVTZWxlY3RlZElu
ZGljZXMpOgorICAgICAgICAoUG9wdXA6Omxpc3RXaWRnZXQpOgorICAgICAgICAoV2ViTm90aWZp
Y2F0aW9uUHJlc2VudGVyOjpXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIpOgorICAgICAgICAoV2Vi
Tm90aWZpY2F0aW9uUHJlc2VudGVyOjp+V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAg
ICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybzogQWRkZWQuCisg
ICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaDog
Q29waWVkIGZyb20gV2ViS2l0L3F0L0FwaS9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaC4KKyAgICAg
ICAgKFFXZWJTZWxlY3REYXRhOjp+UVdlYlNlbGVjdERhdGEpOgorICAgICAgICAoUVdlYlNlbGVj
dE1ldGhvZDo6flFXZWJTZWxlY3RNZXRob2QpOgorICAgICAgICAoUVdlYk5vdGlmaWNhdGlvbkRh
dGE6On5RV2ViTm90aWZpY2F0aW9uRGF0YSk6CisgICAgICAgIChRV2ViTm90aWZpY2F0aW9uUHJl
c2VudGVyOjpRV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAgKFFXZWJOb3RpZmlj
YXRpb25QcmVzZW50ZXI6On5RV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKToKKyAgICAgICAgKFFX
ZWJUb3VjaE1vZGlmaWVyOjp+UVdlYlRvdWNoTW9kaWZpZXIpOgorICAgICAgICAoUVdlYkZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXI6OlFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAg
KFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjp+UVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIp
OgorICAgICAgICAoUVdlYktpdFBsYXRmb3JtUGx1Z2luOjp+UVdlYktpdFBsYXRmb3JtUGx1Z2lu
KToKKwogMjAxMS0wNC0yMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9RdFdl
YktpdC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8JKHJl
dmlzaW9uIDg0NjIzKQorKysgU291cmNlL1dlYktpdC9xdC9RdFdlYktpdC5wcm8JKHdvcmtpbmcg
Y29weSkKQEAgLTEyMyw3ICsxMjMsMTAgQEAgc3ltYmlhbiB7CiAgICAgICAgICBERVBMT1lNRU5U
ICs9IGRlY2xhcmF0aXZlSW1wb3J0CiAgICAgfQogCi0gICAgREVQTE9ZTUVOVCArPSB3ZWJraXRz
aXNoZWFkZXIgd2Via2l0bGlicyB3ZWJraXRiYWNrdXAKKyAgICBwbGF0Zm9ybXBsdWdpbi5zb3Vy
Y2VzID0gJCRPVVRQVVRfRElSL3BsdWdpbnMvUXRXZWJLaXQvcGxhdGZvcm1wbHVnaW4kJHtRVF9M
SUJJTkZJWH0uZGxsCisgICAgcGxhdGZvcm1wbHVnaW4ucGF0aCA9IGM6JCRRVF9QTFVHSU5TX0JB
U0VfRElSL1F0V2ViS2l0CisKKyAgICBERVBMT1lNRU5UICs9IHdlYmtpdHNpc2hlYWRlciB3ZWJr
aXRsaWJzIHdlYmtpdGJhY2t1cCBwbGF0Zm9ybXBsdWdpbgogICAgICFDT05GSUcocHJvZHVjdGlv
bik6Q09ORklHLT1kZWZfZmlsZXMKIAogICAgICMgTmVlZCB0byBidWlsZCB0aGVzZSBzb3VyY2Vz
IGhlcmUgYmVjYXVzZSBvZiBleHBvcnRlZCBzeW1ib2xzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVn
aW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJXZWJQbHVnaW4uaCIKKworI2luY2x1ZGUgPFF0R3VpPgorI2luY2x1ZGUgPFF0
UGx1Z2luPgorI2luY2x1ZGUgPGFrbmRpc2NyZWV0cG9wdXAuaD4KKworY2xhc3MgSXRlbUxpc3RE
ZWxlZ2F0ZSA6IHB1YmxpYyBRU3R5bGVkSXRlbURlbGVnYXRlIHsKK3B1YmxpYzoKKyAgICBJdGVt
TGlzdERlbGVnYXRlKFFPYmplY3QqIHBhcmVudCA9IDApCisgICAgICAgIDogUVN0eWxlZEl0ZW1E
ZWxlZ2F0ZShwYXJlbnQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIq
IHBhaW50ZXIsIGNvbnN0IFFTdHlsZU9wdGlvblZpZXdJdGVtJiBvcHRpb24sIGNvbnN0IFFNb2Rl
bEluZGV4JiBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKGluZGV4LmlzVmFs
aWQoKSk7CisKKyAgICAgICAgUVN0eWxlT3B0aW9uVmlld0l0ZW1WNCBvcHQgPSBvcHRpb247Cisg
ICAgICAgIG9wdC5zdGF0ZSA9IG9wdC5zdGF0ZSAmICh+UVN0eWxlOjpTdGF0ZV9IYXNGb2N1cyk7
CisgICAgICAgIG9wdC50ZXh0ID0gaW5kZXguZGF0YSgpLnRvU3RyaW5nKCk7CisgICAgICAgIGlu
aXRTdHlsZU9wdGlvbigmb3B0LCBpbmRleCk7CisKKyAgICAgICAgY29uc3QgUVdpZGdldCogd2lk
Z2V0ID0gMDsKKyAgICAgICAgUG9wdXAqIHNlbGVjdFBvcHVwID0gcW9iamVjdF9jYXN0PFBvcHVw
Kj4ocGFyZW50KCkpOworICAgICAgICBpZiAoc2VsZWN0UG9wdXApCisgICAgICAgICAgICB3aWRn
ZXQgPSBzZWxlY3RQb3B1cC0+bGlzdFdpZGdldCgpOworCisgICAgICAgIFFTdHlsZSogc3R5bGUg
PSB3aWRnZXQgPyB3aWRnZXQtPnN0eWxlKCkgOiBRQXBwbGljYXRpb246OnN0eWxlKCk7CisgICAg
ICAgIHN0eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6OkNFX0l0ZW1WaWV3SXRlbSwgJm9wdCwgcGFp
bnRlciwgd2lkZ2V0KTsKKyAgICB9Cit9OworCitQb3B1cDo6UG9wdXAoY29uc3QgUVdlYlNlbGVj
dERhdGEmIGRhdGEpCisgICAgOiBtX2RhdGEoZGF0YSkKK3sKKyAgICBzZXRNb2RhbCh0cnVlKTsK
KyAgICBtX2xpc3QgPSBuZXcgUUxpc3RXaWRnZXQodGhpcyk7CisgICAgaW50IHdpZHRoID0gUUFw
cGxpY2F0aW9uOjpkZXNrdG9wKCktPnNpemUoKS53aWR0aCgpOworICAgIFFWQm94TGF5b3V0KiB2
TGF5b3V0ID0gbmV3IFFWQm94TGF5b3V0KHRoaXMpOworICAgIHZMYXlvdXQtPnNldENvbnRlbnRz
TWFyZ2lucyh3aWR0aCAvIDIwLCA1LCA1LCA1KTsKKyAgICBpZiAoZGF0YS5tdWx0aXBsZSgpKQor
ICAgICAgICBtX2xpc3QtPnNldFNlbGVjdGlvbk1vZGUoUUFic3RyYWN0SXRlbVZpZXc6Ok11bHRp
U2VsZWN0aW9uKTsKKyAgICBwb3B1bGF0ZUxpc3QoKTsKKyAgICB2TGF5b3V0LT5hZGRXaWRnZXQo
bV9saXN0KTsKKyAgIAorICAgIEl0ZW1MaXN0RGVsZWdhdGUqIGl0ZW1EZWxlZ2F0ZSA9IG5ldyBJ
dGVtTGlzdERlbGVnYXRlKHRoaXMpOworICAgIG1fbGlzdC0+c2V0SXRlbURlbGVnYXRlKGl0ZW1E
ZWxlZ2F0ZSk7Cit9CisKK3ZvaWQgUG9wdXA6OnJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCogZSkK
K3sKKyAgICBRRGlhbG9nOjpyZXNpemVFdmVudChlKTsKKyAgICBtX2xpc3QtPnNldEdlb21ldHJ5
KG1fbGlzdC0+Z2VvbWV0cnkoKS54KCksIG1fbGlzdC0+Z2VvbWV0cnkoKS55KCksIG1fbGlzdC0+
d2lkdGgoKSwgbV9saXN0LT5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgUG9wdXA6OnBvcHVsYXRlTGlz
dCgpCit7CisgICAgUUxpc3RXaWRnZXRJdGVtKiBsaXN0SXRlbTsKKyAgICBtX3ByZVNlbGVjdGVk
SW5kaWNlcy5jbGVhcigpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9kYXRhLml0ZW1Db3Vu
dCgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZGF0YS5pdGVtVHlwZShpKSA9PSBRV2ViU2VsZWN0
RGF0YTo6T3B0aW9uKSB7CisgICAgICAgICAgICBsaXN0SXRlbSA9IG5ldyBRTGlzdFdpZGdldEl0
ZW0obV9kYXRhLml0ZW1UZXh0KGkpKTsKKyAgICAgICAgICAgIG1fbGlzdC0+YWRkSXRlbShsaXN0
SXRlbSk7CisgICAgICAgICAgICBsaXN0SXRlbS0+c2V0U2VsZWN0ZWQobV9kYXRhLml0ZW1Jc1Nl
bGVjdGVkKGkpKTsKKyAgICAgICAgICAgIGlmIChtX2RhdGEuaXRlbUlzU2VsZWN0ZWQoaSkpIHsK
KyAgICAgICAgICAgICAgICBtX3ByZVNlbGVjdGVkSW5kaWNlcy5hcHBlbmQoaSk7CisgICAgICAg
ICAgICAgICAgbV9saXN0LT5zZXRDdXJyZW50SXRlbShsaXN0SXRlbSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAobV9kYXRhLml0ZW1UeXBlKGkpID09IFFXZWJTZWxlY3REYXRh
OjpHcm91cCkgeworICAgICAgICAgICAgbGlzdEl0ZW0gPSBuZXcgUUxpc3RXaWRnZXRJdGVtKG1f
ZGF0YS5pdGVtVGV4dChpKSk7CisgICAgICAgICAgICBtX2xpc3QtPmFkZEl0ZW0obGlzdEl0ZW0p
OworICAgICAgICAgICAgbGlzdEl0ZW0tPnNldFNlbGVjdGVkKGZhbHNlKTsKKyAgICAgICAgICAg
IGxpc3RJdGVtLT5zZXRGbGFncyhRdDo6Tm9JdGVtRmxhZ3MpOworICAgICAgICB9CisgICAgfQor
ICAgIGNvbm5lY3QobV9saXN0LCBTSUdOQUwoaXRlbUNsaWNrZWQoUUxpc3RXaWRnZXRJdGVtKikp
LCB0aGlzLCBTTE9UKG9uSXRlbVNlbGVjdGVkKFFMaXN0V2lkZ2V0SXRlbSopKSk7Cit9CisKK3Zv
aWQgUG9wdXA6Om9uSXRlbVNlbGVjdGVkKFFMaXN0V2lkZ2V0SXRlbSogaXRlbSkKK3sKKyAgICBp
ZiAoaXRlbS0+ZmxhZ3MoKSAhPSBRdDo6Tm9JdGVtRmxhZ3MpIHsKKyAgICAgICAgaWYgKCFtX2Rh
dGEubXVsdGlwbGUoKSkKKyAgICAgICAgICAgIHVwZGF0ZUFuZENsb3NlKCk7CisgICAgfQorfQor
Cit2b2lkIFBvcHVwOjp1cGRhdGVTZWxlY3Rpb25zQmVmb3JlRGlhbG9nQ2xvc2luZygpCit7Cisg
ICAgUUxpc3Q8UUxpc3RXaWRnZXRJdGVtKj4gc2VsZWN0ZWQgPSBtX2xpc3QtPnNlbGVjdGVkSXRl
bXMoKTsKKyAgICBpZiAobV9kYXRhLm11bHRpcGxlKCkpIHsKKyAgICAgICAgUUxpc3Q8aW50PiBz
ZWxlY3RlZEluZGljZXM7CisgICAgICAgIFFfRk9SRUFDSChRTGlzdFdpZGdldEl0ZW0qIGl0ZW0s
IHNlbGVjdGVkKQorICAgICAgICAgICAgc2VsZWN0ZWRJbmRpY2VzLmFwcGVuZChtX2xpc3QtPnJv
dyhpdGVtKSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2RhdGEuaXRlbUNvdW50
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKChtX3ByZVNlbGVjdGVkSW5kaWNlcy5jb250YWlu
cyhpKSAmJiAhc2VsZWN0ZWRJbmRpY2VzLmNvbnRhaW5zKGkpKSB8fCAoIW1fcHJlU2VsZWN0ZWRJ
bmRpY2VzLmNvbnRhaW5zKGkpICYmIHNlbGVjdGVkSW5kaWNlcy5jb250YWlucyhpKSkpCisgICAg
ICAgICAgICAgICAgZW1pdCBpdGVtQ2xpY2tlZChpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIFFfRk9SRUFDSChRTGlzdFdpZGdldEl0ZW0qIGl0ZW0sIHNlbGVjdGVkKQorICAg
ICAgICAgICAgZW1pdCBpdGVtQ2xpY2tlZChtX2xpc3QtPnJvdyhpdGVtKSk7CisgICAgfQorfQor
Cit2b2lkIFBvcHVwOjp1cGRhdGVBbmRDbG9zZSgpCit7CisgICAgdXBkYXRlU2VsZWN0aW9uc0Jl
Zm9yZURpYWxvZ0Nsb3NpbmcoKTsKKyAgICBhY2NlcHQoKTsKK30KKworV2ViUG9wdXA6OldlYlBv
cHVwKCkKKyAgICA6IG1fcG9wdXAoMCkKK3sKK30KKworV2ViUG9wdXA6On5XZWJQb3B1cCgpCit7
CisgICAgaWYgKG1fcG9wdXApCisgICAgICAgIG1fcG9wdXAtPmRlbGV0ZUxhdGVyKCk7Cit9CisK
K1BvcHVwKiBXZWJQb3B1cDo6Y3JlYXRlU2luZ2xlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdlYlNl
bGVjdERhdGEmIGRhdGEpCit7CisgICAgcmV0dXJuIG5ldyBTaW5nbGVTZWxlY3Rpb25Qb3B1cChk
YXRhKTsKK30KKworUG9wdXAqIFdlYlBvcHVwOjpjcmVhdGVNdWx0aXBsZVNlbGVjdGlvblBvcHVw
KGNvbnN0IFFXZWJTZWxlY3REYXRhJiBkYXRhKQoreworICAgIHJldHVybiBuZXcgTXVsdGlwbGVT
ZWxlY3Rpb25Qb3B1cChkYXRhKTsKK30KKworUG9wdXAqIFdlYlBvcHVwOjpjcmVhdGVQb3B1cChj
b25zdCBRV2ViU2VsZWN0RGF0YSYgZGF0YSkKK3sKKyAgICBQb3B1cCogcmVzdWx0ID0gZGF0YS5t
dWx0aXBsZSgpID8gY3JlYXRlTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cChkYXRhKSA6IGNyZWF0ZVNp
bmdsZVNlbGVjdGlvblBvcHVwKGRhdGEpOworICAgIGNvbm5lY3QocmVzdWx0LCBTSUdOQUwoZmlu
aXNoZWQoaW50KSksIHRoaXMsIFNMT1QocG9wdXBDbG9zZWQoKSkpOworICAgIGNvbm5lY3QocmVz
dWx0LCBTSUdOQUwoaXRlbUNsaWNrZWQoaW50KSksIHRoaXMsIFNMT1QoaXRlbUNsaWNrZWQoaW50
KSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2ViUG9wdXA6OnNob3coY29uc3Qg
UVdlYlNlbGVjdERhdGEmIGRhdGEpCit7CisgICAgaWYgKG1fcG9wdXApCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcG9wdXAgPSBjcmVhdGVQb3B1cChkYXRhKTsKKyAgICBtX3BvcHVwLT5zaG93
TWF4aW1pemVkKCk7Cit9CisKK3ZvaWQgV2ViUG9wdXA6OmhpZGUoKQoreworICAgIGlmICghbV9w
b3B1cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wb3B1cC0+YWNjZXB0KCk7Cit9CisKK3Zv
aWQgV2ViUG9wdXA6OnBvcHVwQ2xvc2VkKCkKK3sKKyAgICBpZiAoIW1fcG9wdXApCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcG9wdXAtPmRlbGV0ZUxhdGVyKCk7CisgICAgbV9wb3B1cCA9IDA7
CisgICAgZW1pdCBkaWRIaWRlKCk7Cit9CisKK3ZvaWQgV2ViUG9wdXA6Oml0ZW1DbGlja2VkKGlu
dCBpZHgpCit7CisgICAgZW1pdCBzZWxlY3RJdGVtKGlkeCwgdHJ1ZSwgZmFsc2UpOworfQorCitT
aW5nbGVTZWxlY3Rpb25Qb3B1cDo6U2luZ2xlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdlYlNlbGVj
dERhdGEmIGRhdGEpCisgICAgOiBQb3B1cChkYXRhKQoreworICAgIHNldFdpbmRvd1RpdGxlKCJT
ZWxlY3QgaXRlbSIpOworCisgICAgUUFjdGlvbiogY2FuY2VsQWN0aW9uID0gbmV3IFFBY3Rpb24o
IkNhbmNlbCIsIHRoaXMpOworICAgIGNhbmNlbEFjdGlvbi0+c2V0U29mdEtleVJvbGUoUUFjdGlv
bjo6TmVnYXRpdmVTb2Z0S2V5KTsKKyAgICBhZGRBY3Rpb24oY2FuY2VsQWN0aW9uKTsKKyAgICBj
b25uZWN0KGNhbmNlbEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIHRoaXMsIFNMT1Qo
cmVqZWN0KCkpKTsKK30KKworTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cDo6TXVsdGlwbGVTZWxlY3Rp
b25Qb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYgZGF0YSkKKyAgICA6IFBvcHVwKGRhdGEpCit7
CisgICAgc2V0V2luZG93VGl0bGUoIlNlbGVjdCBpdGVtcyIpOworCisgICAgUUFjdGlvbiogY2Fu
Y2VsQWN0aW9uID0gbmV3IFFBY3Rpb24oIkNhbmNlbCIsIHRoaXMpOworICAgIGNhbmNlbEFjdGlv
bi0+c2V0U29mdEtleVJvbGUoUUFjdGlvbjo6TmVnYXRpdmVTb2Z0S2V5KTsKKyAgICBhZGRBY3Rp
b24oY2FuY2VsQWN0aW9uKTsKKyAgICBjb25uZWN0KGNhbmNlbEFjdGlvbiwgU0lHTkFMKHRyaWdn
ZXJlZChib29sKSksIHRoaXMsIFNMT1QocmVqZWN0KCkpKTsKKworICAgIFFBY3Rpb24qIG9rQWN0
aW9uID0gbmV3IFFBY3Rpb24oIk9rIiwgdGhpcyk7CisgICAgb2tBY3Rpb24tPnNldFNvZnRLZXlS
b2xlKFFBY3Rpb246OlBvc2l0aXZlU29mdEtleSk7CisgICAgYWRkQWN0aW9uKG9rQWN0aW9uKTsK
KyAgICBjb25uZWN0KG9rQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgdGhpcywgU0xP
VCh1cGRhdGVBbmRDbG9zZSgpKSk7Cit9CisKK3ZvaWQgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVy
OjpzaG93Tm90aWZpY2F0aW9uKGNvbnN0IFFXZWJOb3RpZmljYXRpb25EYXRhKiBkYXRhKQorewor
ICAgIEhCdWZDKiB0aXRsZSA9IEhCdWZDOjpOZXcoZGF0YS0+dGl0bGUoKS5zaXplKCkpOworICAg
ICp0aXRsZSA9IFRQdHJDKGRhdGEtPnRpdGxlKCkudXRmMTYoKSwgZGF0YS0+dGl0bGUoKS5zaXpl
KCkpOworICAgIEhCdWZDKiBtZXNzYWdlID0gSEJ1ZkM6Ok5ldyhkYXRhLT5tZXNzYWdlKCkuc2l6
ZSgpKTsKKyAgICAqbWVzc2FnZSA9IFRQdHJDKGRhdGEtPm1lc3NhZ2UoKS51dGYxNigpLCBkYXRh
LT5tZXNzYWdlKCkuc2l6ZSgpKTsKKyAgICBUUkFQX0lHTk9SRShDQWtuRGlzY3JlZXRQb3B1cDo6
U2hvd0dsb2JhbFBvcHVwTCgqdGl0bGUsICptZXNzYWdlLCBLQWtuc0lJRE5vbmUsIEtOdWxsRGVz
QykpOworICAgIGVtaXQgbm90aWZpY2F0aW9uQ2xvc2VkKCk7CisgICAgZGVsZXRlTGF0ZXIoKTsK
KyAgICBkZWxldGUgdGl0bGU7CisgICAgZGVsZXRlIG1lc3NhZ2U7Cit9CisKK2Jvb2wgV2ViUGx1
Z2luOjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAoreworICAg
IGlmIChleHRlbnNpb24gPT0gTXVsdGlwbGVTZWxlY3Rpb25zKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoZXh0ZW5zaW9uID09IE5vdGlmaWNhdGlvbnMpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChleHRlbnNpb24gPT0gRnVsbFNjcmVlblZpZGVvUGxheWVyKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsgICAgICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworUU9iamVjdCog
V2ViUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKGV4dGVuc2lvbikgeworICAgIGNhc2UgTXVsdGlwbGVTZWxlY3Rpb25zOgor
ICAgICAgICByZXR1cm4gbmV3IFdlYlBvcHVwKCk7CisgICAgY2FzZSBOb3RpZmljYXRpb25zOgor
ICAgICAgICByZXR1cm4gbmV3IFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworUV9FWFBPUlRfUExVR0lOMihxd2Vi
c2VsZWN0aW0sIFdlYlBsdWdpbikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9XZWJQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5
bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyAKKyNpZm5kZWYgV2ViUGx1Z2lu
X2gKKyNkZWZpbmUgV2ViUGx1Z2luX2gKKworI2luY2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdp
bi5oIgorI2luY2x1ZGUgPFFEaWFsb2c+CisKK2NsYXNzIFFMaXN0V2lkZ2V0SXRlbTsKK2NsYXNz
IFFMaXN0V2lkZ2V0OworY2xhc3MgUVNjcm9sbEFyZWE7CisKK2NsYXNzIFBvcHVwU2Nyb2xsaW5n
SGFuZGxlcjsKKworY2xhc3MgUG9wdXAgOiBwdWJsaWMgUURpYWxvZyB7CisgICAgUV9PQkpFQ1QK
K3B1YmxpYzoKKyAgICBQb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYpOworICAgIHZvaWQgdXBk
YXRlU2VsZWN0aW9uc0JlZm9yZURpYWxvZ0Nsb3NpbmcoKTsKKyAgICBRTGlzdDxpbnQ+IHByZVNl
bGVjdGVkSW5kaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlU2VsZWN0ZWRJbmRpY2VzOyB9Cisg
ICAgUUxpc3RXaWRnZXQqIGxpc3RXaWRnZXQoKSB7IHJldHVybiBtX2xpc3Q7IH0KKworc2lnbmFs
czoKKyAgICB2b2lkIGl0ZW1DbGlja2VkKGludCBpZHgpOworCitwcm90ZWN0ZWQgc2xvdHM6Cisg
ICAgdm9pZCBvbkl0ZW1TZWxlY3RlZChRTGlzdFdpZGdldEl0ZW0qKTsKKyAgICB2b2lkIHVwZGF0
ZUFuZENsb3NlKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHBvcHVsYXRlTGlzdCgpOworICAg
IHZvaWQgcmVzaXplRXZlbnQoUVJlc2l6ZUV2ZW50Kik7CisgICAgY29uc3QgUVdlYlNlbGVjdERh
dGEmIG1fZGF0YTsKKyAgICBRTGlzdFdpZGdldCogbV9saXN0OworICAgIFFMaXN0PGludD4gbV9w
cmVTZWxlY3RlZEluZGljZXM7CisgICAgUG9wdXBTY3JvbGxpbmdIYW5kbGVyKiBtX3Njcm9sbGlu
Z0hhbmRsZXI7Cit9OworCisKK2NsYXNzIFNpbmdsZVNlbGVjdGlvblBvcHVwIDogcHVibGljIFBv
cHVwIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFNpbmdsZVNlbGVjdGlvblBvcHVwKGNv
bnN0IFFXZWJTZWxlY3REYXRhJik7Cit9OworCisKK2NsYXNzIE11bHRpcGxlU2VsZWN0aW9uUG9w
dXAgOiBwdWJsaWMgUG9wdXAgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgTXVsdGlwbGVT
ZWxlY3Rpb25Qb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYpOworfTsKKworCitjbGFzcyBXZWJQ
b3B1cCA6IHB1YmxpYyBRV2ViU2VsZWN0TWV0aG9kIHsKKyAgICBRX09CSkVDVAorcHVibGljOgor
ICAgIFdlYlBvcHVwKCk7CisgICAgfldlYlBvcHVwKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2hv
dyhjb25zdCBRV2ViU2VsZWN0RGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCBoaWRlKCk7CisKK3By
aXZhdGUgc2xvdHM6CisgICAgdm9pZCBwb3B1cENsb3NlZCgpOworICAgIHZvaWQgaXRlbUNsaWNr
ZWQoaW50IGlkeCk7CisKK3ByaXZhdGU6CisgICAgUG9wdXAqIG1fcG9wdXA7CisKKyAgICBQb3B1
cCogY3JlYXRlUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmKTsKKyAgICBQb3B1cCogY3JlYXRl
U2luZ2xlU2VsZWN0aW9uUG9wdXAoY29uc3QgUVdlYlNlbGVjdERhdGEmKTsKKyAgICBQb3B1cCog
Y3JlYXRlTXVsdGlwbGVTZWxlY3Rpb25Qb3B1cChjb25zdCBRV2ViU2VsZWN0RGF0YSYpOworfTsK
KworY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyIDogcHVibGljIFFXZWJOb3RpZmljYXRp
b25QcmVzZW50ZXIgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgV2ViTm90aWZpY2F0aW9u
UHJlc2VudGVyKCkgeyB9CisgICAgfldlYk5vdGlmaWNhdGlvblByZXNlbnRlcigpIHsgfQorICAg
IHZvaWQgc2hvd05vdGlmaWNhdGlvbihjb25zdCBRV2ViTm90aWZpY2F0aW9uRGF0YSopOworfTsK
KworY2xhc3MgV2ViUGx1Z2luIDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBRV2ViS2l0UGxhdGZv
cm1QbHVnaW4geworICAgIFFfT0JKRUNUCisgICAgUV9JTlRFUkZBQ0VTKFFXZWJLaXRQbGF0Zm9y
bVBsdWdpbikKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24oRXh0
ZW5zaW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFPYmplY3QqIGNyZWF0ZUV4dGVuc2lvbihFeHRl
bnNpb24pIGNvbnN0OworfTsKKworI2VuZGlmIC8vIFdlYlBsdWdpbl9oCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9y
bXBsdWdpbi5wcm8JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4
IEBACitURU1QTEFURSA9IGxpYgorQ09ORklHICs9IHBsdWdpbiBcCisgICAgICAgICAgbW9iaWxp
dHkKKworTU9CSUxJVFkgPSBtdWx0aW1lZGlhCisKK1RBUkdFVCA9ICQkcXRMaWJyYXJ5VGFyZ2V0
KHBsYXRmb3JtcGx1Z2luKQorVEFSR0VUUEFUSCA9IFF0V2ViS2l0CitRVCAgICAgICArPSBjb3Jl
IGd1aSBcCisgICAgICAgICAgICBuZXR3b3JrIFwKKyAgICAgICAgICAgIHhtbAorCisjIyBsb2Fk
IG1vYmlsaXR5Y29uZmlnIGlmIG1vYmlsaXR5IGlzIGF2YWlsYWJsZQorbG9hZChtb2JpbGl0eWNv
bmZpZywgdHJ1ZSkKKworaXNFbXB0eShPVVRQVVRfRElSKTogT1VUUFVUX0RJUiA9IC4uLy4uLy4u
Ly4uCisKK1NPVVJDRVMgKz0gXAorICAgIFdlYlBsdWdpbi5jcHAKKworSEVBREVSUyArPSBcCisg
ICAgV2ViUGx1Z2luLmggXAorICAgIHF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oCisKK0RFU1RESVIg
PSAkJE9VVFBVVF9ESVIvcGx1Z2lucy8kJFRBUkdFVFBBVEgKKworc3ltYmlhbjogeworIyBFUE9D
QUxMT1dETExEQVRBIGhhdmUgdG8gc2V0IHRydWUgYmVjYXVzZSBRdCBtYWNyb3MgaGFzIGluaXRp
YWxpc2VkIGdsb2JhbCBkYXRhCisgICAgVEFSR0VULkVQT0NBTExPV0RMTERBVEE9MQorICAgIFRB
UkdFVC5DQVBBQklMSVRZID0gQWxsIC1UY2IKKyAgICBUQVJHRVQuVUlEMyA9IDB4MjAwMkU2NzQK
KyAgICBUQVJHRVQuVklEID0gVklEX0RFRkFVTFQKKyAgICBUQVJHRVQgPSAkJFRBUkdFVCQke1FU
X0xJQklORklYfQorCisgICAgTElCUyArPSAtbGNvbmUgLWxlaWtjb3JlIC1sYXZrb24KK30KK3Rh
cmdldC5wYXRoICs9ICQkW1FUX0lOU1RBTExfUExVR0lOU10vJCRUQVJHRVRQQVRICitJTlNUQUxM
UyArPSB0YXJnZXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdp
bi9xd2Via2l0cGxhdGZvcm1wbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBsYXRmb3JtcGx1Z2luLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcXdlYmtpdHBs
YXRmb3JtcGx1Z2luLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBRV0VCS0lUUExBVEZPUk1QTFVHSU5fSAorI2RlZmluZSBRV0VCS0lU
UExBVEZPUk1QTFVHSU5fSAorCisvKgorICogIFdhcm5pbmc6IFRoZSBjb250ZW50cyBvZiB0aGlz
IGZpbGUgaXMgbm90ICBwYXJ0IG9mIHRoZSBwdWJsaWMgUXRXZWJLaXQgQVBJCisgKiAgYW5kIG1h
eSBiZSBjaGFuZ2VkIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uIG9yIGV2ZW4gYmUgY29tcGxldGVs
eSByZW1vdmVkLgorKi8KKworI2luY2x1ZGUgPFFDb2xvcj4KKyNpbmNsdWRlIDxRT2JqZWN0Pgor
I2luY2x1ZGUgPFFVcmw+CisjaWYgZGVmaW5lZChXVEZfVVNFX1FUX01VTFRJTUVESUEpICYmIFdU
Rl9VU0VfUVRfTVVMVElNRURJQQorI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4KKyNlbmRpZgorCitj
bGFzcyBRV2ViU2VsZWN0RGF0YSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UVdlYlNlbGVjdERh
dGEoKSB7fQorCisgICAgZW51bSBJdGVtVHlwZSB7IE9wdGlvbiwgR3JvdXAsIFNlcGFyYXRvciB9
OworCisgICAgdmlydHVhbCBJdGVtVHlwZSBpdGVtVHlwZShpbnQpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFFTdHJpbmcgaXRlbVRleHQoaW50IGluZGV4KSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBRU3RyaW5nIGl0ZW1Ub29sVGlwKGludCBpbmRleCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpdGVtSXNFbmFibGVkKGludCBpbmRleCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBpdGVtSXNTZWxlY3RlZChpbnQgaW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBp
dGVtQ291bnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIG11bHRpcGxlKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgUUNvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFFDb2xvciBmb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBRQ29sb3IgaXRlbUJhY2tncm91bmRDb2xvcihpbnQgaW5kZXgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFFDb2xvciBpdGVtRm9yZWdyb3VuZENvbG9yKGludCBpbmRleCkgY29uc3QgPSAwOwor
fTsKKworY2xhc3MgUVdlYlNlbGVjdE1ldGhvZCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09C
SkVDVAorcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJTZWxlY3RNZXRob2QoKSB7fQorCisgICAg
dmlydHVhbCB2b2lkIHNob3coY29uc3QgUVdlYlNlbGVjdERhdGEmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGhpZGUoKSA9IDA7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHNlbGVjdEl0ZW0oaW50
IGluZGV4LCBib29sIGFsbG93TXVsdGlwbHlTZWxlY3Rpb25zLCBib29sIHNoaWZ0KTsKKyAgICB2
b2lkIGRpZEhpZGUoKTsKK307CisKK2NsYXNzIFFXZWJOb3RpZmljYXRpb25EYXRhIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5RV2ViTm90aWZpY2F0aW9uRGF0YSgpIHt9CisKKyAgICB2aXJ0dWFs
IGNvbnN0IFFTdHJpbmcgdGl0bGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBRU3Ry
aW5nIG1lc3NhZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBjb25zdCBRQnl0ZUFycmF5IGlj
b25EYXRhKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgUVVybCBvcGVuZXJQYWdlVXJs
KCkgY29uc3QgPSAwOworfTsKKworY2xhc3MgUVdlYk5vdGlmaWNhdGlvblByZXNlbnRlciA6IHB1
YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFFXZWJOb3RpZmljYXRp
b25QcmVzZW50ZXIoKSB7fQorICAgIHZpcnR1YWwgflFXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIo
KSB7fQorCisgICAgdmlydHVhbCB2b2lkIHNob3dOb3RpZmljYXRpb24oY29uc3QgUVdlYk5vdGlm
aWNhdGlvbkRhdGEqKSA9IDA7CisgICAgCitRX1NJR05BTFM6CisgICAgdm9pZCBub3RpZmljYXRp
b25DbG9zZWQoKTsKKyAgICB2b2lkIG5vdGlmaWNhdGlvbkNsaWNrZWQoKTsKK307CisKK2NsYXNz
IFFXZWJIYXB0aWNGZWVkYmFja1BsYXllcjogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNU
CitwdWJsaWM6CisgICAgUVdlYkhhcHRpY0ZlZWRiYWNrUGxheWVyKCkge30KKyAgICB2aXJ0dWFs
IH5RV2ViSGFwdGljRmVlZGJhY2tQbGF5ZXIoKSB7fQorCisgICAgZW51bSBIYXB0aWNTdHJlbmd0
aCB7CisgICAgICAgIE5vbmUsIFdlYWssIE1lZGl1bSwgU3Ryb25nCisgICAgfTsKKworICAgIGVu
dW0gSGFwdGljRXZlbnQgeworICAgICAgICBQcmVzcywgUmVsZWFzZQorICAgIH07CisKKyAgICB2
aXJ0dWFsIHZvaWQgcGxheUhhcHRpY0ZlZWRiYWNrKGNvbnN0IEhhcHRpY0V2ZW50LCBjb25zdCBR
U3RyaW5nJiBoYXB0aWNUeXBlLCBjb25zdCBIYXB0aWNTdHJlbmd0aCkgPSAwOworfTsKKworY2xh
c3MgUVdlYlRvdWNoTW9kaWZpZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5RV2ViVG91Y2hNb2RpZmllcigpIHt9CisKKyAgICBlbnVtIFBh
ZGRpbmdEaXJlY3Rpb24geworICAgICAgICBVcCwgUmlnaHQsIERvd24sIExlZnQKKyAgICB9Owor
CisgICAgdmlydHVhbCB1bnNpZ25lZCBoaXRUZXN0UGFkZGluZ0ZvclRvdWNoKGNvbnN0IFBhZGRp
bmdEaXJlY3Rpb24pIGNvbnN0ID0gMDsKK307CisKKyNpZiBkZWZpbmVkKFdURl9VU0VfUVRfTVVM
VElNRURJQSkgJiYgV1RGX1VTRV9RVF9NVUxUSU1FRElBCitjbGFzcyBRV2ViRnVsbFNjcmVlblZp
ZGVvSGFuZGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAg
IFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkge30KKyAgICB2aXJ0dWFsIH5RV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlcigpIHt9CisgICAgdmlydHVhbCBib29sIHJlcXVpcmVzRnVsbFNjcmVl
bkZvclZpZGVvUGxheWJhY2soKSBjb25zdCA9IDA7CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIGZ1
bGxTY3JlZW5DbG9zZWQoKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2b2lkIGVu
dGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4aXRG
dWxsU2NyZWVuKCkgPSAwOworfTsKKyNlbmRpZgorCitjbGFzcyBRV2ViS2l0UGxhdGZvcm1QbHVn
aW4geworcHVibGljOgorICAgIHZpcnR1YWwgflFXZWJLaXRQbGF0Zm9ybVBsdWdpbigpIHt9CisK
KyAgICBlbnVtIEV4dGVuc2lvbiB7CisgICAgICAgIE11bHRpcGxlU2VsZWN0aW9ucywKKyAgICAg
ICAgTm90aWZpY2F0aW9ucywKKyAgICAgICAgSGFwdGljcywKKyAgICAgICAgVG91Y2hJbnRlcmFj
dGlvbiwKKyAgICAgICAgRnVsbFNjcmVlblZpZGVvUGxheWVyCisgICAgfTsKKworICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIFFPYmplY3QqIGNyZWF0ZUV4dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0ID0gMDsKK307CisK
K1FUX0JFR0lOX05BTUVTUEFDRQorUV9ERUNMQVJFX0lOVEVSRkFDRShRV2ViS2l0UGxhdGZvcm1Q
bHVnaW4sICJjb20ubm9raWEuUXQuV2ViS2l0LlBsYXRmb3JtUGx1Z2luLzEuNyIpOworUVRfRU5E
X05BTUVTUEFDRQorCisjZW5kaWYgLy8gUVdFQktJVFBMQVRGT1JNUExVR0lOX0gKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0
NjI2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDQtMjIgIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gU3ltYmlh
biBwbGF0Zm9ybSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU4NDM1CisKKyAgICAgICAgRXhlbXB0aW5nIGRpcmVjdG9yeSBXZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbiBmcm9tIHN0eWxlIGd1aWRlLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weToKKwogMjAxMS0wNC0yMiAgQmFsYXpzIEtlbGVt
ZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6
dHJvZ29uw6FjLgpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQko
cmV2aXNpb24gODQ2MjMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgsMTQgQEAgX1BBVEhfUlVMRVNfU1BFQ0lG
SUVSID0gWwogICAgICAgIitwZXA4L1cxOTEiLCAgIyBUYWJzCiAgICAgICAiK3BlcDgvVzI5MSIs
ICAjIFRyYWlsaW5nIHdoaXRlIHNwYWNlCiAgICAgICAiK3doaXRlc3BhY2UvY2FycmlhZ2VfcmV0
dXJuIl0pLAorCisgICAgKFsjIFF0IFN5bWJpYW4gcGxhdGZvcm0gcGx1Z2luIGhhcyBubyBjb25m
aWcuaCBvciBoZWFkZXIgZ3VhcmQuCisgICAgICAjIFF0IGNvZGUgdXNlcyAnXycgaW4gc29tZSBw
bGFjZXMgKHN1Y2ggYXMgcHJpdmF0ZSBzbG90cworICAgICAgIyBhbmQgb24gdGVzdCB4eHhfZGF0
YSBtZXRob3Mgb24gdGVzdHMpLgorICAgICAgIlNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi8iXSwKKyAgICAgWyItcmVhZGFiaWxpdHkvbmFtaW5nIiwKKyAgICAgICItYnVp
bGQvaGVhZGVyX2d1YXJkIiwKKyAgICAgICItYnVpbGQvaW5jbHVkZV9vcmRlciJdKSwKIF0KIAog
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0
ZXN0LnB5CShyZXZpc2lvbiA4NDYyMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcl91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjM3LDYgKzIzNyw4IEBAIGNs
YXNzIEdsb2JhbFZhcmlhYmxlc1Rlc3QodW5pdHRlc3QuVGVzdEMKICAgICAgICAgICAgICAgICAg
ICAgInJlYWRhYmlsaXR5L2JyYWNlcyIpCiAgICAgICAgIGFzc2VydENoZWNrKCJTb3VyY2UvV2Vi
S2l0L3F0L2V4YW1wbGVzL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAiLAogICAgICAgICAg
ICAgICAgICAgICAicmVhZGFiaWxpdHkvYnJhY2VzIikKKyAgICAgICAgYXNzZXJ0Q2hlY2soIlNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwIiwKKyAg
ICAgICAgICAgICAgICAgICAgInJlYWRhYmlsaXR5L2JyYWNlcyIpCiAgICAgICAgIGFzc2VydE5v
Q2hlY2soIlNvdXJjZS9KYXZhU2NyaXB0Q29yZS9xdC9hcGkvcXNjcmlwdGVuZ2luZS5jcHAiLAog
ICAgICAgICAgICAgICAgICAgICAgICJyZWFkYWJpbGl0eS9uYW1pbmciKQogICAgICAgICBhc3Nl
cnROb0NoZWNrKCJTb3VyY2UvSmF2YVNjcmlwdENvcmUvcXQvYmVuY2htYXJrcyIKQEAgLTI1MCw2
ICsyNTIsOCBAQCBjbGFzcyBHbG9iYWxWYXJpYWJsZXNUZXN0KHVuaXR0ZXN0LlRlc3RDCiAgICAg
ICAgICAgICAgICAgICAgICAgInJlYWRhYmlsaXR5L25hbWluZyIpCiAgICAgICAgIGFzc2VydE5v
Q2hlY2soIlNvdXJjZS9XZWJLaXQvcXQvZXhhbXBsZXMvcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2lu
LmNwcCIsCiAgICAgICAgICAgICAgICAgICAgICAgInJlYWRhYmlsaXR5L25hbWluZyIpCisgICAg
ICAgIGFzc2VydE5vQ2hlY2soIlNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdp
bi9XZWJQbHVnaW4uY3BwIiwKKyAgICAgICAgICAgICAgICAgICAgICAiYnVpbGQvaGVhZGVyX2d1
YXJkIikKIAogICAgICAgICBhc3NlcnROb0NoZWNrKCJUb29scy9NaW5pQnJvd3Nlci9xdC9VcmxM
b2FkZXIuY3BwIiwKICAgICAgICAgICAgICAgICAgICAgImJ1aWxkL2luY2x1ZGUiKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91324</attachid>
            <date>2011-04-27 12:35:41 -0700</date>
            <delta_ts>2011-04-28 12:56:48 -0700</delta_ts>
            <desc>platformpluginV2</desc>
            <filename>58435v2.patch</filename>
            <type>text/plain</type>
            <size>62310</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NTA3MikKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDQtMjcgIFlp
IFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVn
aW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDM1
CisKKyAgICAgICAgVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4gd2l0aCBodG1sNSB2
aWRlbyBwbGF5ZXIuCisKKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0h0bWw1Vmlk
ZW9QbHVnaW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKEh0bWw1RnVsbFNjcmVlblZpZGVvSGFuZGxl
cjo6SHRtbDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKToKKyAgICAgICAgKEh0bWw1RnVsbFNjcmVl
blZpZGVvSGFuZGxlcjo6ZW50ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKEh0bWw1RnVsbFNjcmVl
blZpZGVvSGFuZGxlcjo6ZXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoSHRtbDVGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyOjpvblBsYXllckVycm9yKToKKyAgICAgICAgKEh0bWw1RnVsbFNjcmVlblZp
ZGVvSGFuZGxlcjo6b25QbGF5ZXJTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoSHRtbDVGdWxsU2Ny
ZWVuVmlkZW9IYW5kbGVyOjpvbk1lZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChIdG1sNVZp
ZGVvUGx1Z2luOjpzdXBwb3J0c0V4dGVuc2lvbik6CisgICAgICAgIChIdG1sNVZpZGVvUGx1Z2lu
OjpjcmVhdGVFeHRlbnNpb24pOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSHRt
bDVWaWRlb1BsdWdpbi5oOiBBZGRlZC4KKyAgICAgICAgKEh0bWw1RnVsbFNjcmVlblZpZGVvSGFu
ZGxlcjo6cmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjayk6CisgICAgICAgIChIdG1s
NUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmlzRnVsbFNjcmVlbik6CisgICAgICAgIChIdG1sNUZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXI6OnVwZGF0ZVNjcmVlblJlY3QpOgorICAgICAgICAqIHN5bWJp
YW4vcGxhdGZvcm1wbHVnaW4vSHRtbDVWaWRlb1dpZGdldC5jcHA6IEFkZGVkLgorICAgICAgICAo
SHRtbDVWaWRlb1dpZGdldDo6SHRtbDVWaWRlb1dpZGdldCk6CisgICAgICAgIChIdG1sNVZpZGVv
V2lkZ2V0Ojp+SHRtbDVWaWRlb1dpZGdldCk6CisgICAgICAgIChIdG1sNVZpZGVvV2lkZ2V0Ojpz
ZXREdXJhdGlvbik6CisgICAgICAgIChIdG1sNVZpZGVvV2lkZ2V0Ojptb3VzZVByZXNzRXZlbnQp
OgorICAgICAgICAoSHRtbDVWaWRlb1dpZGdldDo6b25QbGF5ZXJTdG9wcGVkKToKKyAgICAgICAg
KEh0bWw1VmlkZW9XaWRnZXQ6Om9uUGxheWVyRXJyb3IpOgorICAgICAgICAoSHRtbDVWaWRlb1dp
ZGdldDo6b25FbmRPZk1lZGlhKToKKyAgICAgICAgKEh0bWw1VmlkZW9XaWRnZXQ6Om9uQnVmZmVy
aW5nTWVkaWEpOgorICAgICAgICAoSHRtbDVWaWRlb1dpZGdldDo6b25CdWZmZXJlZE1lZGlhKToK
KyAgICAgICAgKEh0bWw1VmlkZW9XaWRnZXQ6Om9uQ29udHJvbENsaWNrZWQpOgorICAgICAgICAo
SHRtbDVWaWRlb1dpZGdldDo6b25Qb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoSHRtbDVWaWRl
b1dpZGdldDo6b25TbGlkZXJNb3ZlZCk6CisgICAgICAgIChIdG1sNVZpZGVvV2lkZ2V0OjpvbkNs
b3NlQ2xpY2tlZCk6CisgICAgICAgIChIdG1sNVZpZGVvV2lkZ2V0Ojpvbk11dGVkKToKKyAgICAg
ICAgKEh0bWw1VmlkZW9XaWRnZXQ6Om9uVm9sdW1lQ2hhbmdlZCk6CisgICAgICAgIChIdG1sNVZp
ZGVvV2lkZ2V0OjpzaG93RnVsbFNjcmVlbik6CisgICAgICAgIChIdG1sNVZpZGVvV2lkZ2V0Ojpz
ZXRWb2x1bWUpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSHRtbDVWaWRlb1dp
ZGdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlX
aWRnZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Ok92ZXJsYXlXaWRnZXQp
OgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6fk92ZXJsYXlXaWRnZXQpOgorICAgICAgICAoT3Zl
cmxheVdpZGdldDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2V0UG9z
aXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2V0Vm9sdW1lKToKKyAgICAgICAgKE92
ZXJsYXlXaWRnZXQ6Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0Ojpv
blBsYXllclN0b3BwZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25QbGF5ZXJFcnJvcik6
CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvbkVuZE9mTWVkaWEpOgorICAgICAgICAoT3Zlcmxh
eVdpZGdldDo6b25CdWZmZXJpbmdNZWRpYSk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvbkJ1
ZmZlcmVkTWVkaWEpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6dGltZVRvU3RyaW5nKToKKyAg
ICAgICAgKE92ZXJsYXlXaWRnZXQ6OmFwcGx5U3R5bGVTaGVldCk6CisgICAgICAgIChPdmVybGF5
V2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9uU2xp
ZGVyTW92ZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25Tb3VuZENsaWNrZWQpOgorICAg
ICAgICAoT3ZlcmxheVdpZGdldDo6b25DbG9zZUNsaWNrZWQpOgorICAgICAgICAoT3ZlcmxheVdp
ZGdldDo6b25Wb2x1bWVTbGlkZXJSZWxlYXNlZCk6CisgICAgICAgIChPdmVybGF5V2lkZ2V0Ojpv
blZvbHVtZVNsaWRlck1vdmVkKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9uVGltZXJUaW1l
b3V0KToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OnNob3dGdWxsU2NyZWVuKToKKyAgICAgICAg
KiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuaDogQWRkZWQuCisgICAgICAg
ICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFBsYXllckJ1dHRvbjo6UGxheWVyQnV0dG9uKToKKyAgICAgICAgKFBsYXllckJ1dHRvbjo6
ZXZlbnQpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyQnV0dG9uLmg6
IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyTGFiZWwuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFBsYXllckxhYmVsOjpQbGF5ZXJMYWJlbCk6CisgICAgICAgIChQ
bGF5ZXJMYWJlbDo6b25QbGF5ZXJFcnJvcik6CisgICAgICAgIChQbGF5ZXJMYWJlbDo6c3RhcnRC
dWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFiZWw6OnN0b3BCdWZmZXJpbmdB
bmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFiZWw6Om9uQW5pbWF0aW9uVGltZW91dCk6Cisg
ICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHA6CisgICAgICAgIChX
ZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBs
dWdpbi9pbWFnZXM6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1h
Z2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZzogQWRkZWQuCisgICAgICAgICogc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZzogQWRkZWQuCisgICAg
ICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BsYXkucG5nOiBBZGRl
ZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0b25fc291bmRf
b2ZmLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMv
YnV0dG9uX3NvdW5kX29uLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBs
dWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMS5wbmc6IEFkZGVkLgorICAgICAgICAqIHN5
bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzIucG5nOiBBZGRl
ZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2FkaW5nX2J1ZmZl
cmluZ18zLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFn
ZXMvbG9hZGluZ19idWZmZXJpbmdfNC5wbmc6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxh
dGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZv
cm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucXJjOiBBZGRlZC4KKwogMjAxMS0wNC0yNyAgWWkgU2hl
biAgPHlpLjQuc2hlbkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBS
b2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZv
cm1wbHVnaW4vSHRtbDVWaWRlb1BsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0h0bWw1VmlkZW9QbHVnaW4uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0h0bWw1Vmlk
ZW9QbHVnaW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJIdG1sNVZpZGVvUGx1Z2luLmgiCisKKyNpbmNsdWRlIDxRdFBsdWdp
bj4KKyNpbmNsdWRlIDxRdEd1aT4KKworSHRtbDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpIdG1s
NUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQorICAgIDogdmlkZW9XaWRnZXQoMCkKKyAgICAsIG1f
TWVkaWFQbGF5ZXIoMCkKKyAgICAsIGZ1bGxTY3JlZW4oZmFsc2UpCit7CisgICAgc2F2ZWRPcmll
bnRhdGlvbiA9IENBa25BcHBVaTo6RUFwcFVpT3JpZW50YXRpb25VbnNwZWNpZmllZDsKK30KKwor
dm9pZCBIdG1sNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmVudGVyRnVsbFNjcmVlbihRTWVkaWFQ
bGF5ZXIgKnBsYXllcikKK3sKKyAgICBpZiAoIXBsYXllcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdmlkZW9XaWRnZXQgPSBuZXcgSHRtbDVWaWRlb1dpZGdldChwbGF5ZXItPmR1cmF0aW9uKCkg
LyAxMDAwKTsKKyAgICBpZiAoIXZpZGVvV2lkZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAocGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAgICAg
ICBwbGF5ZXItPnBhdXNlKCk7CisKKyAgICBDQWtuQXBwVWkqIGFwcFVpID0gZHluYW1pY19jYXN0
PENBa25BcHBVaSo+KENFaWtvbkVudjo6U3RhdGljKCktPkFwcFVpKCkpOworICAgIGlmIChhcHBV
aSkgeworICAgICAgICBzYXZlZE9yaWVudGF0aW9uID0gYXBwVWktPk9yaWVudGF0aW9uKCk7Cisg
ICAgICAgIGFwcFVpLT5TZXRPcmllbnRhdGlvbkwoQ0FrbkFwcFVpOjpFQXBwVWlPcmllbnRhdGlv
bkxhbmRzY2FwZSk7CisgICAgfQorCisgICAgbV9NZWRpYVBsYXllciA9IHBsYXllcjsKKyAgICBj
b25uZWN0KG1fTWVkaWFQbGF5ZXIsIFNJR05BTChwb3NpdGlvbkNoYW5nZWQocWludDY0KSksIHZp
ZGVvV2lkZ2V0LCBTTE9UKG9uUG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCkpKTsKKyAgICBjb25uZWN0
KG1fTWVkaWFQbGF5ZXIsIFNJR05BTChkdXJhdGlvbkNoYW5nZWQocWludDY0KSksIHZpZGVvV2lk
Z2V0LCBTTE9UKHNldER1cmF0aW9uKHFpbnQ2NCkpKTsKKyAgICBjb25uZWN0KG1fTWVkaWFQbGF5
ZXIsIFNJR05BTChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpLCB0aGlzLCBTTE9U
KG9uUGxheWVyU3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3RhdGUpKSk7CisgICAgY29ubmVj
dChtX01lZGlhUGxheWVyLCBTSUdOQUwoZXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpLCB0aGlz
LCBTTE9UKG9uUGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpKTsKKyAgICBjb25uZWN0
KG1fTWVkaWFQbGF5ZXIsIFNJR05BTChtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpN
ZWRpYVN0YXR1cykpLCB0aGlzLCBTTE9UKG9uTWVkaWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXll
cjo6TWVkaWFTdGF0dXMpKSk7CisgICAgY29ubmVjdCh2aWRlb1dpZGdldCwgU0lHTkFMKHBvc2l0
aW9uQ2hhbmdlZEJ5VXNlcihxaW50NjQpKSwgbV9NZWRpYVBsYXllciwgU0xPVChzZXRQb3NpdGlv
bihxaW50NjQpKSk7CisgICAgY29ubmVjdCh2aWRlb1dpZGdldCwgU0lHTkFMKGNsb3NlQ2xpY2tl
ZCgpKSwgdGhpcywgU0lHTkFMKGZ1bGxTY3JlZW5DbG9zZWQoKSkpOworICAgIGNvbm5lY3Qodmlk
ZW9XaWRnZXQsIFNJR05BTChtdXRlZChib29sKSksIG1fTWVkaWFQbGF5ZXIsIFNMT1Qoc2V0TXV0
ZWQoYm9vbCkpKTsKKyAgICBjb25uZWN0KHZpZGVvV2lkZ2V0LCBTSUdOQUwodm9sdW1lQ2hhbmdl
ZChpbnQpKSwgbV9NZWRpYVBsYXllciwgU0xPVChzZXRWb2x1bWUoaW50KSkpOworICAgIGNvbm5l
Y3QodmlkZW9XaWRnZXQsIFNJR05BTChwYXVzZUNsaWNrZWQoKSksIG1fTWVkaWFQbGF5ZXIsIFNM
T1QocGF1c2UoKSkpOworICAgIGNvbm5lY3QodmlkZW9XaWRnZXQsIFNJR05BTChwbGF5Q2xpY2tl
ZCgpKSwgbV9NZWRpYVBsYXllciwgU0xPVChwbGF5KCkpKTsKKworICAgIG1fTWVkaWFQbGF5ZXIt
PnNldFZpZGVvT3V0cHV0KHZpZGVvV2lkZ2V0KTsKKworICAgIHZpZGVvV2lkZ2V0LT5zZXRWb2x1
bWUobV9NZWRpYVBsYXllci0+dm9sdW1lKCkpOworICAgIHZpZGVvV2lkZ2V0LT5zZXRTaXplUG9s
aWN5KFFTaXplUG9saWN5OjpJZ25vcmVkLCBRU2l6ZVBvbGljeTo6SWdub3JlZCk7CisgICAgdmlk
ZW9XaWRnZXQtPnNob3dGdWxsU2NyZWVuKCk7CisgICAgZnVsbFNjcmVlbiA9IHRydWU7CisKKyAg
ICAvLyBIYW5kbGUgY3VycmVudCBNZWRpYSBTdGF0dXMgYW5kIE1lZGlhIFBsYXllciBlcnJvci4K
KyAgICBvbk1lZGlhU3RhdHVzQ2hhbmdlZChtX01lZGlhUGxheWVyLT5tZWRpYVN0YXR1cygpKTsK
KyAgICBvblBsYXllckVycm9yKG1fTWVkaWFQbGF5ZXItPmVycm9yKCkpOworfQorCit2b2lkIEh0
bWw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1bGxTY3JlZW4oKQoreworICAgIHZpZGVv
V2lkZ2V0LT5oaWRlKCk7CisgICAgbV9NZWRpYVBsYXllci0+ZGlzY29ubmVjdCh2aWRlb1dpZGdl
dCk7CisgICAgbV9NZWRpYVBsYXllci0+ZGlzY29ubmVjdCh0aGlzKTsKKyAgICBkZWxldGUgdmlk
ZW9XaWRnZXQ7CisgICAgdmlkZW9XaWRnZXQgPSAwOworICAgIGlmIChtX01lZGlhUGxheWVyLT5z
dGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAgICAgICBtX01lZGlhUGxh
eWVyLT5wYXVzZSgpOworICAgIGZ1bGxTY3JlZW4gPSBmYWxzZTsKKworICAgIENBa25BcHBVaSog
YXBwVWkgPSBkeW5hbWljX2Nhc3Q8Q0FrbkFwcFVpKj4oQ0Vpa29uRW52OjpTdGF0aWMoKS0+QXBw
VWkoKSk7CisgICAgaWYgKGFwcFVpKSAKKyAgICAgICAgYXBwVWktPlNldE9yaWVudGF0aW9uTChz
YXZlZE9yaWVudGF0aW9uKTsKK30KKwordm9pZCBIdG1sNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6
Om9uUGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvciBlcnJvcikKK3sKKyAgICBzd2l0Y2gg
KGVycm9yKSB7CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6Ok5vRXJyb3I6CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHZpZGVvV2lkZ2V0LT5vblBsYXllckVycm9yKCk7Cisg
ICAgfQorfQorCit2b2lkIEh0bWw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJTdGF0
ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBpZiAoc3RhdGUgPT0g
UU1lZGlhUGxheWVyOjpTdG9wcGVkU3RhdGUpCisgICAgICAgIHZpZGVvV2lkZ2V0LT5vblBsYXll
clN0b3BwZWQoKTsKK30KKwordm9pZCBIdG1sNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6Om9uTWVk
aWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMgc3RhdHVzKQoreworICAg
IHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6OkVuZE9mTWVkaWE6Cisg
ICAgICAgIHZpZGVvV2lkZ2V0LT5vbkVuZE9mTWVkaWEoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBRTWVkaWFQbGF5ZXI6OlN0YWxsZWRNZWRpYToKKyAgICBjYXNlIFFNZWRpYVBsYXllcjo6
TG9hZGluZ01lZGlhOgorICAgIGNhc2UgUU1lZGlhUGxheWVyOjpCdWZmZXJpbmdNZWRpYToKKyAg
ICAgICAgdmlkZW9XaWRnZXQtPm9uQnVmZmVyaW5nTWVkaWEoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBRTWVkaWFQbGF5ZXI6OkxvYWRlZE1lZGlhOgorICAgIGNhc2UgUU1lZGlhUGxheWVy
OjpCdWZmZXJlZE1lZGlhOgorICAgICAgICB2aWRlb1dpZGdldC0+b25CdWZmZXJlZE1lZGlhKCk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm47Cit9CisKK2Jvb2wgSHRtbDVWaWRlb1BsdWdpbjo6c3VwcG9ydHNFeHRlbnNpb24o
RXh0ZW5zaW9uIGV4dGVuc2lvbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGV4dGVuc2lvbikgewor
ICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitRT2JqZWN0KiBI
dG1sNVZpZGVvUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24oRXh0ZW5zaW9uIGV4dGVuc2lvbikgY29u
c3QKK3sKKyAgICBIdG1sNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIqIHZpZGVvSGFuZGxlciA9IDA7
CisgICAgc3dpdGNoIChleHRlbnNpb24pIHsKKyAgICBjYXNlIEZ1bGxTY3JlZW5WaWRlb1BsYXll
cjoKKyAgICAgICAgdmlkZW9IYW5kbGVyID0gbmV3IEh0bWw1RnVsbFNjcmVlblZpZGVvSGFuZGxl
cjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiB2aWRlb0hhbmRsZXI7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJp
YW4vcGxhdGZvcm1wbHVnaW4vSHRtbDVWaWRlb1BsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IdG1sNVZpZGVvUGx1Z2luLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSHRt
bDVWaWRlb1BsdWdpbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBIdG1sNVZpZGVvUGx1Z2luX2gKKyNkZWZpbmUgSHRtbDVWaWRlb1Bs
dWdpbl9oCisKKyNpbmNsdWRlICJIdG1sNVZpZGVvV2lkZ2V0LmgiCisjaW5jbHVkZSAicXdlYmtp
dHBsYXRmb3JtcGx1Z2luLmgiCisjaW5jbHVkZSA8UU1lZGlhUGxheWVyPgorCisjaW5jbHVkZSA8
YWtuYXBwdWkuaD4KKyNpbmNsdWRlIDxha25lbnYuaD4KKyNpbmNsdWRlIDxlaWthcHB1aS5oPgor
I2luY2x1ZGUgPGVpa2Vudi5oPgorCitjbGFzcyBIdG1sNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIg
OiBwdWJsaWMgUVdlYkZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIgeworICAgIFFfT0JKRUNUCitwdWJs
aWM6CisgICAgSHRtbDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisgICAgYm9vbCByZXF1aXJl
c0Z1bGxTY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAg
IGJvb2wgaXNGdWxsU2NyZWVuKCkgY29uc3QgeyByZXR1cm4gZnVsbFNjcmVlbjsgfQorICAgIHZv
aWQgdXBkYXRlU2NyZWVuUmVjdChjb25zdCBRUmVjdCYpIHt9CisKK3B1YmxpYyBRX1NMT1RTOgor
ICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyICopOworICAgIHZp
cnR1YWwgdm9pZCBleGl0RnVsbFNjcmVlbigpOworICAgIHZvaWQgb25QbGF5ZXJTdGF0ZUNoYW5n
ZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSk7CisgICAgdm9pZCBvblBsYXllckVycm9yKFFNZWRpYVBs
YXllcjo6RXJyb3IpOworICAgIHZvaWQgb25NZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVy
OjpNZWRpYVN0YXR1cyk7CisKK3ByaXZhdGU6CisgICAgSHRtbDVWaWRlb1dpZGdldCAqdmlkZW9X
aWRnZXQ7CisgICAgUU1lZGlhUGxheWVyICptX01lZGlhUGxheWVyOworICAgIFFQaXhtYXAgZnJh
bWU7CisgICAgYm9vbCBmdWxsU2NyZWVuOworICAgIENBa25BcHBVaTo6VEFwcFVpT3JpZW50YXRp
b24gc2F2ZWRPcmllbnRhdGlvbjsKK307CisKK2NsYXNzIEh0bWw1VmlkZW9QbHVnaW4gOiBwdWJs
aWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CisgICAgUV9PQkpFQ1QK
KyAgICBRX0lOVEVSRkFDRVMoUVdlYktpdFBsYXRmb3JtUGx1Z2luKQorcHVibGljOgorICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0OworICAgIHZpcnR1
YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbikgY29uc3Q7Cit9OworCisjZW5k
aWYgLyogSHRtbDVWaWRlb1BsdWdpbl9oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJp
YW4vcGxhdGZvcm1wbHVnaW4vSHRtbDVWaWRlb1dpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0h0bWw1VmlkZW9XaWRnZXQuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L0h0bWw1VmlkZW9XaWRnZXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJIdG1sNVZpZGVvV2lkZ2V0LmgiCisKK0h0bWw1Vmlk
ZW9XaWRnZXQ6Okh0bWw1VmlkZW9XaWRnZXQoaW50IGR1cmF0aW9uLCBRV2lkZ2V0ICpwYXJlbnQp
CisgICAgOiBRVmlkZW9XaWRnZXQocGFyZW50KQoreworICAgIG92ZXJsYXlXaWRnZXQgPSBuZXcg
T3ZlcmxheVdpZGdldChkdXJhdGlvbiwgdGhpcyk7CisgICAgY29ubmVjdChvdmVybGF5V2lkZ2V0
LCBTSUdOQUwoY29udHJvbENsaWNrZWQoYm9vbCkpLCB0aGlzLCBTTE9UKG9uQ29udHJvbENsaWNr
ZWQoYm9vbCkpKTsKKyAgICBjb25uZWN0KG92ZXJsYXlXaWRnZXQsIFNJR05BTChzbGlkZXJNb3Zl
ZChpbnQpKSwgdGhpcywgU0xPVChvblNsaWRlck1vdmVkKGludCkpKTsKKyAgICBjb25uZWN0KG92
ZXJsYXlXaWRnZXQsIFNJR05BTChjbG9zZUNsaWNrZWQoKSksIHRoaXMsIFNMT1Qob25DbG9zZUNs
aWNrZWQoKSkpOworICAgIGNvbm5lY3Qob3ZlcmxheVdpZGdldCwgU0lHTkFMKG11dGVkKGJvb2wp
KSwgdGhpcywgU0xPVChvbk11dGVkKGJvb2wpKSk7CisgICAgY29ubmVjdChvdmVybGF5V2lkZ2V0
LCBTSUdOQUwodm9sdW1lQ2hhbmdlZChpbnQpKSwgdGhpcywgU0xPVChvblZvbHVtZUNoYW5nZWQo
aW50KSkpOworICAgIG92ZXJsYXlXaWRnZXQtPnNldFNpemVQb2xpY3koUVNpemVQb2xpY3k6Okln
bm9yZWQsIFFTaXplUG9saWN5OjpJZ25vcmVkKTsKK30KKworSHRtbDVWaWRlb1dpZGdldDo6fkh0
bWw1VmlkZW9XaWRnZXQoKQoreworICAgIGRlbGV0ZSBvdmVybGF5V2lkZ2V0OworfQorCit2b2lk
IEh0bWw1VmlkZW9XaWRnZXQ6OnNldER1cmF0aW9uKHFpbnQ2NCBkdXJhdGlvbikKK3sKKyAgICBv
dmVybGF5V2lkZ2V0LT5zZXREdXJhdGlvbihkdXJhdGlvbiAvIDEwMDApOworfQorCit2b2lkIEh0
bWw1VmlkZW9XaWRnZXQ6Om1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCAqKQoreworICAgIG92
ZXJsYXlXaWRnZXQtPnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgSHRtbDVWaWRlb1dpZGdl
dDo6b25QbGF5ZXJTdG9wcGVkKCkKK3sKKyAgICBvdmVybGF5V2lkZ2V0LT5vblBsYXllclN0b3Bw
ZWQoKTsKK30KKwordm9pZCBIdG1sNVZpZGVvV2lkZ2V0OjpvblBsYXllckVycm9yKCkKK3sKKyAg
ICBvdmVybGF5V2lkZ2V0LT5vblBsYXllckVycm9yKCk7Cit9CisKK3ZvaWQgSHRtbDVWaWRlb1dp
ZGdldDo6b25FbmRPZk1lZGlhKCkKK3sKKyAgICBvdmVybGF5V2lkZ2V0LT5vbkVuZE9mTWVkaWEo
KTsKK30KKwordm9pZCBIdG1sNVZpZGVvV2lkZ2V0OjpvbkJ1ZmZlcmluZ01lZGlhKCkKK3sKKyAg
ICBvdmVybGF5V2lkZ2V0LT5vbkJ1ZmZlcmluZ01lZGlhKCk7Cit9CisKK3ZvaWQgSHRtbDVWaWRl
b1dpZGdldDo6b25CdWZmZXJlZE1lZGlhKCkKK3sKKyAgICBvdmVybGF5V2lkZ2V0LT5vbkJ1ZmZl
cmVkTWVkaWEoKTsKK30KKwordm9pZCBIdG1sNVZpZGVvV2lkZ2V0OjpvbkNvbnRyb2xDbGlja2Vk
KGJvb2wgaXNQYXVzZWQpCit7CisgICAgaWYgKGlzUGF1c2VkKQorICAgICAgICBlbWl0IHBhdXNl
Q2xpY2tlZCgpOworICAgIGVsc2UKKyAgICAgICAgZW1pdCBwbGF5Q2xpY2tlZCgpOworfQorCit2
b2lkIEh0bWw1VmlkZW9XaWRnZXQ6Om9uUG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCBwb3NpdGlvbikK
K3sKKyAgICBvdmVybGF5V2lkZ2V0LT5zZXRQb3NpdGlvbihwb3NpdGlvbiAvIDEwMDApOworfQor
Cit2b2lkIEh0bWw1VmlkZW9XaWRnZXQ6Om9uU2xpZGVyTW92ZWQoaW50IHZhbHVlKQoreworICAg
IGVtaXQgcG9zaXRpb25DaGFuZ2VkQnlVc2VyKCgocWludDY0KXZhbHVlKSAqIDEwMDApOworfQor
Cit2b2lkIEh0bWw1VmlkZW9XaWRnZXQ6Om9uQ2xvc2VDbGlja2VkKCkKK3sKKyAgICBoaWRlKCk7
CisgICAgZW1pdCBjbG9zZUNsaWNrZWQoKTsKK30KKwordm9pZCBIdG1sNVZpZGVvV2lkZ2V0Ojpv
bk11dGVkKGJvb2wgaXNNdXRlZCkKK3sKKyAgICBlbWl0IG11dGVkKGlzTXV0ZWQpOworfQorCit2
b2lkIEh0bWw1VmlkZW9XaWRnZXQ6Om9uVm9sdW1lQ2hhbmdlZChpbnQgdmFsdWUpCit7CisgICAg
ZW1pdCB2b2x1bWVDaGFuZ2VkKHZhbHVlKTsKK30KKwordm9pZCBIdG1sNVZpZGVvV2lkZ2V0Ojpz
aG93RnVsbFNjcmVlbigpCit7CisgICAgc2V0RnVsbFNjcmVlbih0cnVlKTsKKyAgICBvdmVybGF5
V2lkZ2V0LT5zaG93RnVsbFNjcmVlbigpOworfQorCit2b2lkIEh0bWw1VmlkZW9XaWRnZXQ6OnNl
dFZvbHVtZShpbnQgdm9sdW1lKQoreworICAgIG92ZXJsYXlXaWRnZXQtPnNldFZvbHVtZSh2b2x1
bWUpOworfQpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0h0
bWw1VmlkZW9XaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4v
cGxhdGZvcm1wbHVnaW4vSHRtbDVWaWRlb1dpZGdldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0h0bWw1VmlkZW9XaWRnZXQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSHRt
bDVWaWRlb1dpZGdldF9oCisjZGVmaW5lIEh0bWw1VmlkZW9XaWRnZXRfaAorCisjaW5jbHVkZSAi
T3ZlcmxheVdpZGdldC5oIgorCisjaW5jbHVkZSA8UVZpZGVvV2lkZ2V0PgorCitjbGFzcyBIdG1s
NVZpZGVvV2lkZ2V0IDogcHVibGljIFFWaWRlb1dpZGdldCB7CisgICAgUV9PQkpFQ1QKK3B1Ymxp
YzoKKyAgICBIdG1sNVZpZGVvV2lkZ2V0KGludCBkdXJhdGlvbiwgUVdpZGdldCAqcGFyZW50ID0g
MCk7CisgICAgfkh0bWw1VmlkZW9XaWRnZXQoKTsKKyAgICB2b2lkIG1vdXNlUHJlc3NFdmVudChR
TW91c2VFdmVudCAqKTsKKyAgICB2b2lkIG9uUGxheWVyU3RvcHBlZCgpOworICAgIHZvaWQgb25Q
bGF5ZXJFcnJvcigpOworICAgIHZvaWQgb25FbmRPZk1lZGlhKCk7CisgICAgdm9pZCBvbkJ1ZmZl
cmluZ01lZGlhKCk7CisgICAgdm9pZCBvbkJ1ZmZlcmVkTWVkaWEoKTsKKyAgICB2b2lkIHNldFZv
bHVtZShpbnQpOworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgb25Db250cm9sQ2xpY2tlZChi
b29sKTsKKyAgICB2b2lkIG9uUG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCk7CisgICAgdm9pZCBzZXRE
dXJhdGlvbihxaW50NjQpOworICAgIHZvaWQgb25TbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQg
b25DbG9zZUNsaWNrZWQoKTsKKyAgICB2b2lkIG9uTXV0ZWQoYm9vbCk7CisgICAgdm9pZCBvblZv
bHVtZUNoYW5nZWQoaW50KTsKKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgc2hvd0Z1bGxTY3Jl
ZW4oKTsKKworc2lnbmFsczoKKyAgICB2b2lkIHBhdXNlQ2xpY2tlZCgpOworICAgIHZvaWQgcGxh
eUNsaWNrZWQoKTsKKyAgICB2b2lkIHBvc2l0aW9uQ2hhbmdlZEJ5VXNlcihxaW50NjQpOworICAg
IHZvaWQgY2xvc2VDbGlja2VkKCk7CisgICAgdm9pZCBtdXRlZChib29sKTsKKyAgICB2b2lkIHZv
bHVtZUNoYW5nZWQoaW50KTsKKworcHJpdmF0ZToKKyAgICBPdmVybGF5V2lkZ2V0ICpvdmVybGF5
V2lkZ2V0OworfTsKKworI2VuZGlmIC8qIEh0bWw1VmlkZW9XaWRnZXRfaCAqLwpJbmRleDogU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVy
bGF5V2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiT3ZlcmxheVdpZGdldC5oIgorCisj
aW5jbHVkZSA8UUdyaWRMYXlvdXQ+CisjaW5jbHVkZSA8UUhCb3hMYXlvdXQ+CisjaW5jbHVkZSA8
UVN0eWxlPgorI2luY2x1ZGUgPFFUaW1lPgorCitPdmVybGF5V2lkZ2V0OjpPdmVybGF5V2lkZ2V0
KGludCBkdXJhdGlvbiwgUVdpZGdldCAqcGFyZW50KQorICAgIDogUVdpZGdldChwYXJlbnQsIFF0
OjpUb29sIHwgUXQ6OkZyYW1lbGVzc1dpbmRvd0hpbnQpCisgICAgLCBpc1BhdXNlZChmYWxzZSkK
KyAgICAsIGlzTXV0ZWQoZmFsc2UpCit7CisgICAgYXBwbHlTdHlsZVNoZWV0KCk7CisKKyAgICBw
bGF5SWNvbiA9IFFJY29uKCI6L2ltYWdlcy9idXR0b25fcGxheS5wbmciKTsKKyAgICBwYXVzZUlj
b24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZyIpOworICAgIHNvdW5kT25JY29u
ID0gUUljb24oIjovaW1hZ2VzL2J1dHRvbl9zb3VuZF9vbi5wbmciKTsKKyAgICBzb3VuZE9mZklj
b24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3NvdW5kX29mZi5wbmciKTsKKworICAgIGNvbnRy
b2xCdXR0b24gPSBuZXcgUGxheWVyQnV0dG9uKHRoaXMpOworICAgIGNvbnRyb2xCdXR0b24tPnNl
dEljb24ocGF1c2VJY29uKTsKKyAgICBjb25uZWN0KGNvbnRyb2xCdXR0b24sIFNJR05BTChjbGlj
a2VkKCkpLCB0aGlzLCBTTE9UKG9uQ29udHJvbENsaWNrZWQoKSkpOworCisgICAgc2xpZGVyID0g
bmV3IFFTbGlkZXIoUXQ6Okhvcml6b250YWwsIHRoaXMpOworICAgIHNsaWRlci0+c2V0UmFuZ2Uo
MCwgZHVyYXRpb24pOworICAgIGNvbm5lY3Qoc2xpZGVyLCBTSUdOQUwoc2xpZGVyTW92ZWQoaW50
KSksIHRoaXMsIFNMT1Qob25TbGlkZXJNb3ZlZChpbnQpKSk7CisKKyAgICBwb3NpdGlvbkxhYmVs
ID0gbmV3IFFMYWJlbCh0aGlzKTsKKyAgICBwb3NpdGlvbkxhYmVsLT5zZXRUZXh0KHRpbWVUb1N0
cmluZygwKSk7CisgICAgZHVyYXRpb25MYWJlbCA9IG5ldyBRTGFiZWwodGhpcyk7CisgICAgZHVy
YXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmcoZHVyYXRpb24pKTsKKworICAgIHNvdW5k
QnV0dG9uID0gbmV3IFBsYXllckJ1dHRvbih0aGlzKTsKKyAgICBzb3VuZEJ1dHRvbi0+c2V0SWNv
bihzb3VuZE9uSWNvbik7CisgICAgY29ubmVjdChzb3VuZEJ1dHRvbiwgU0lHTkFMKGNsaWNrZWQo
KSksIHRoaXMsIFNMT1Qob25Tb3VuZENsaWNrZWQoKSkpOworCisgICAgY2xvc2VCdXR0b24gPSBu
ZXcgUGxheWVyQnV0dG9uKHRoaXMpOworICAgIGNsb3NlQnV0dG9uLT5zZXRJY29uKFFJY29uKCI6
L2ltYWdlcy9idXR0b25fY2xvc2UucG5nIikpOworICAgIGNvbm5lY3QoY2xvc2VCdXR0b24sIFNJ
R05BTChjbGlja2VkKCkpLCB0aGlzLCBTTE9UKG9uQ2xvc2VDbGlja2VkKCkpKTsKKworICAgIHZv
bHVtZVNsaWRlciA9IG5ldyBRU2xpZGVyKFF0OjpWZXJ0aWNhbCwgdGhpcyk7CisgICAgdm9sdW1l
U2xpZGVyLT5zZXRSYW5nZSgwLCAxMDApOworICAgIGNvbm5lY3Qoc291bmRCdXR0b24sIFNJR05B
TCh0YXBBbmRIb2xkKCkpLCB2b2x1bWVTbGlkZXIsIFNMT1Qoc2hvdygpKSk7CisgICAgY29ubmVj
dCh2b2x1bWVTbGlkZXIsIFNJR05BTChzbGlkZXJSZWxlYXNlZCgpKSwgdGhpcywgU0xPVChvblZv
bHVtZVNsaWRlclJlbGVhc2VkKCkpKTsKKyAgICBjb25uZWN0KHZvbHVtZVNsaWRlciwgU0lHTkFM
KHNsaWRlck1vdmVkKGludCkpLCB0aGlzLCBTTE9UKG9uVm9sdW1lU2xpZGVyTW92ZWQoaW50KSkp
OworICAgIHZvbHVtZVNsaWRlci0+aGlkZSgpOworCisgICAgcGxheWVyTGFiZWwgPSBuZXcgUGxh
eWVyTGFiZWwodGhpcyk7CisgICAgcGxheWVyTGFiZWwtPmhpZGUoKTsKKworICAgIFFCb3hMYXlv
dXQqIGNvbnRyb2xMYXlvdXQgPSBuZXcgUUhCb3hMYXlvdXQ7CisgICAgY29udHJvbExheW91dC0+
YWRkV2lkZ2V0KGNvbnRyb2xCdXR0b24pOworICAgIGNvbnRyb2xMYXlvdXQtPmFkZFdpZGdldChw
b3NpdGlvbkxhYmVsKTsKKyAgICBjb250cm9sTGF5b3V0LT5hZGRXaWRnZXQoc2xpZGVyKTsKKyAg
ICBjb250cm9sTGF5b3V0LT5hZGRXaWRnZXQoZHVyYXRpb25MYWJlbCk7CisKKyAgICBRR3JpZExh
eW91dCogbGF5b3V0ID0gbmV3IFFHcmlkTGF5b3V0OworICAgIGxheW91dC0+YWRkV2lkZ2V0KGNs
b3NlQnV0dG9uLCAwLCAwLCAxLCAyLCBRdDo6QWxpZ25SaWdodCB8IFF0OjpBbGlnblRvcCk7Cisg
ICAgbGF5b3V0LT5hZGRXaWRnZXQocGxheWVyTGFiZWwsIDEsIDAsIFF0OjpBbGlnbkNlbnRlcik7
CisgICAgbGF5b3V0LT5hZGRXaWRnZXQodm9sdW1lU2xpZGVyLCAxLCAxKTsKKyAgICBsYXlvdXQt
PmFkZExheW91dChjb250cm9sTGF5b3V0LCAyLCAwLCBRdDo6QWxpZ25Cb3R0b20pOworICAgIGxh
eW91dC0+YWRkV2lkZ2V0KHNvdW5kQnV0dG9uLCAyLCAxLCBRdDo6QWxpZ25Cb3R0b20pOworICAg
IHNldExheW91dChsYXlvdXQpOworCisgICAgdGltZXIgPSBuZXcgUVRpbWVyKHRoaXMpOworICAg
IHRpbWVyLT5zZXRTaW5nbGVTaG90KHRydWUpOworICAgIHRpbWVyLT5zZXRJbnRlcnZhbCgzMDAw
KTsKKyAgICBjb25uZWN0KHRpbWVyLCBTSUdOQUwodGltZW91dCgpKSwgdGhpcywgU0xPVChvblRp
bWVyVGltZW91dCgpKSk7CisgICAgY29ubmVjdChzbGlkZXIsIFNJR05BTChzbGlkZXJQcmVzc2Vk
KCkpLCB0aW1lciwgU0xPVChzdG9wKCkpKTsKKyAgICBjb25uZWN0KHNsaWRlciwgU0lHTkFMKHNs
aWRlclJlbGVhc2VkKCkpLCB0aW1lciwgU0xPVChzdGFydCgpKSk7CisgICAgY29ubmVjdCh2b2x1
bWVTbGlkZXIsIFNJR05BTChzbGlkZXJQcmVzc2VkKCkpLCB0aW1lciwgU0xPVChzdG9wKCkpKTsK
KworICAgIHNldEF0dHJpYnV0ZShRdDo6V0FfVHJhbnNsdWNlbnRCYWNrZ3JvdW5kKTsKK30KKwor
T3ZlcmxheVdpZGdldDo6fk92ZXJsYXlXaWRnZXQoKQoreworICAgIGRlbGV0ZSBjb250cm9sQnV0
dG9uOworICAgIGRlbGV0ZSBzbGlkZXI7CisgICAgZGVsZXRlIHBvc2l0aW9uTGFiZWw7CisgICAg
ZGVsZXRlIGR1cmF0aW9uTGFiZWw7CisgICAgZGVsZXRlIHNvdW5kQnV0dG9uOworICAgIGRlbGV0
ZSBjbG9zZUJ1dHRvbjsKKyAgICBkZWxldGUgdm9sdW1lU2xpZGVyOworICAgIGRlbGV0ZSB0aW1l
cjsKKyAgICBkZWxldGUgcGxheWVyTGFiZWw7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6c2V0
RHVyYXRpb24oaW50IGR1cmF0aW9uKQoreworICAgIHNsaWRlci0+c2V0TWF4aW11bShkdXJhdGlv
bik7CisgICAgZHVyYXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmcoZHVyYXRpb24pKTsK
K30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pCit7Cisg
ICAgaWYgKCFzbGlkZXItPmlzU2xpZGVyRG93bigpKSB7CisgICAgICAgIHNsaWRlci0+c2V0VmFs
dWUocG9zaXRpb24pOworICAgICAgICBwb3NpdGlvbkxhYmVsLT5zZXRUZXh0KHRpbWVUb1N0cmlu
Zyhwb3NpdGlvbikpOworICAgIH0KK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpzZXRWb2x1bWUo
aW50IHZvbHVtZSkKK3sKKyAgICB2b2x1bWVTbGlkZXItPnNldFZhbHVlKHZvbHVtZSk7Cit9CisK
K3ZvaWQgT3ZlcmxheVdpZGdldDo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICopCit7Cisg
ICAgdGltZXItPnN0b3AoKTsKKyAgICBoaWRlKCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6
b25QbGF5ZXJTdG9wcGVkKCkKK3sKKyAgICBjb250cm9sQnV0dG9uLT5zZXRJY29uKHBsYXlJY29u
KTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvblBsYXllckVycm9yKCkKK3sKKyAgICBjb250
cm9sQnV0dG9uLT5zZXREaXNhYmxlZCh0cnVlKTsKKyAgICBzbGlkZXItPnNldERpc2FibGVkKHRy
dWUpOworICAgIHBsYXllckxhYmVsLT5vblBsYXllckVycm9yKCk7CisgICAgc2hvd0Z1bGxTY3Jl
ZW4oKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvbkVuZE9mTWVkaWEoKQoreworICAgIFFX
aWRnZXQ6OnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25CdWZm
ZXJpbmdNZWRpYSgpCit7CisgICAgcGxheWVyTGFiZWwtPnN0YXJ0QnVmZmVyaW5nQW5pbWF0aW9u
KCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25CdWZmZXJlZE1lZGlhKCkKK3sKKyAgICBw
bGF5ZXJMYWJlbC0+c3RvcEJ1ZmZlcmluZ0FuaW1hdGlvbigpOworfQorCitRU3RyaW5nIE92ZXJs
YXlXaWRnZXQ6OnRpbWVUb1N0cmluZyhpbnQgc2Vjb25kcykKK3sKKyAgICBRVGltZSBpbml0VGlt
ZSgwLCAwLCAwKTsKKyAgICBRVGltZSB0aW1lID0gaW5pdFRpbWUuYWRkU2VjcyhzZWNvbmRzKTsK
KyAgICByZXR1cm4gdGltZS5ob3VyKCkgPyB0aW1lLnRvU3RyaW5nKCJoOm1tOnNzIikgOiB0aW1l
LnRvU3RyaW5nKCJtbTpzcyIpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6OmFwcGx5U3R5bGVT
aGVldCgpCit7CisgICAgLy8gU2V0IFF0IFN0eWxlIFNoZWV0IGZvciBzbGlkZXJzLgorICAgIHNl
dFN0eWxlU2hlZXQoIlFTbGlkZXI6Omdyb292ZSB7IGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOyBi
b3JkZXItcmFkaXVzOiA1cHg7IGJhY2tncm91bmQ6IHdoaXRlOyB9IgorICAgICAgICAgICAgICAg
ICAgIlFTbGlkZXI6OmhhbmRsZSB7IGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOyBib3JkZXItcmFk
aXVzOiA4cHg7ICIKKyAgICAgICAgICAgICAgICAgICJiYWNrZ3JvdW5kOiBxbGluZWFyZ3JhZGll
bnQoeDE6MCwgeTE6MCwgeDI6MSwgeTI6MSwgc3RvcDowICNlZWUsIHN0b3A6MSAjY2NjKTsgfSIK
KyAgICAgICAgICAgICAgICAgICJRU2xpZGVyOjphZGQtcGFnZSB7IGJvcmRlcjogMnB4IHNvbGlk
IGJsYWNrOyBib3JkZXItcmFkaXVzOiA1cHg7IH0iCisgICAgICAgICAgICAgICAgICAiUVNsaWRl
cjo6c3ViLXBhZ2UgeyBib3JkZXI6IDJweCBzb2xpZCBibGFjazsgYm9yZGVyLXJhZGl1czogNXB4
OyB9IgorICAgICAgICAgICAgICAgICAgIlFTbGlkZXI6Omdyb292ZTpob3Jpem9udGFsIHsgaGVp
Z2h0OiAxMHB4OyB9IgorICAgICAgICAgICAgICAgICAgIlFTbGlkZXI6OmhhbmRsZTpob3Jpem9u
dGFsIHsgd2lkdGg6IDQwcHg7IG1hcmdpbi10b3A6IC0xNXB4OyBtYXJnaW4tYm90dG9tOiAtMTVw
eDsgfSIKKyAgICAgICAgICAgICAgICAgICJRU2xpZGVyOjphZGQtcGFnZTpob3Jpem9udGFsIHsg
aGVpZ2h0OiAxMHB4OyBiYWNrZ3JvdW5kOiB3aGl0ZTsgfSIKKyAgICAgICAgICAgICAgICAgICJR
U2xpZGVyOjpzdWItcGFnZTpob3Jpem9udGFsIHsgaGVpZ2h0OiAxMHB4OyAiCisgICAgICAgICAg
ICAgICAgICAiYmFja2dyb3VuZDogcWxpbmVhcmdyYWRpZW50KHgxOjAsIHkxOjAsIHgyOjEsIHky
OjEsIHN0b3A6MCAjZWVlLCBzdG9wOjEgI2NjYyk7IH0iCisgICAgICAgICAgICAgICAgICAiUVNs
aWRlcjo6Z3Jvb3ZlOnZlcnRpY2FsIHsgd2lkdGg6IDEwcHg7IH0iCisgICAgICAgICAgICAgICAg
ICAiUVNsaWRlcjo6aGFuZGxlOnZlcnRpY2FsIHsgaGVpZ2h0OiA0MHB4OyBtYXJnaW4tbGVmdDog
LTE1cHg7IG1hcmdpbi1yaWdodDogLTE1cHg7IH0iCisgICAgICAgICAgICAgICAgICAiUVNsaWRl
cjo6YWRkLXBhZ2U6dmVydGljYWwgeyB3aWR0aDogMTBweDsgIgorICAgICAgICAgICAgICAgICAg
ImJhY2tncm91bmQ6IHFsaW5lYXJncmFkaWVudCh4MTowLCB5MTowLCB4MjoxLCB5MjoxLCBzdG9w
OjAgI2VlZSwgc3RvcDoxICNjY2MpOyB9IgorICAgICAgICAgICAgICAgICAgIlFTbGlkZXI6OnN1
Yi1wYWdlOnZlcnRpY2FsIHsgd2lkdGg6IDEwcHg7IGJhY2tncm91bmQ6IHdoaXRlOyB9Iik7Cit9
CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25Db250cm9sQ2xpY2tlZCgpCit7CisgICAgaXNQYXVz
ZWQgPSAhaXNQYXVzZWQ7CisgICAgaWYgKGlzUGF1c2VkKSB7CisgICAgICAgIGNvbnRyb2xCdXR0
b24tPnNldEljb24ocGxheUljb24pOworICAgICAgICB0aW1lci0+c3RvcCgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGNvbnRyb2xCdXR0b24tPnNldEljb24ocGF1c2VJY29uKTsKKyAgICAgICAg
dGltZXItPnN0YXJ0KCk7CisgICAgfQorICAgIGVtaXQgY29udHJvbENsaWNrZWQoaXNQYXVzZWQp
OworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uU2xpZGVyTW92ZWQoaW50IHZhbHVlKQorewor
ICAgIGVtaXQgc2xpZGVyTW92ZWQodmFsdWUpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9u
U291bmRDbGlja2VkKCkKK3sKKyAgICBpZiAodm9sdW1lU2xpZGVyLT5pc1Zpc2libGUoKSkKKyAg
ICAgICAgaXNNdXRlZCA9IGZhbHNlOworICAgIGVsc2UKKyAgICAgICAgaXNNdXRlZCA9ICFpc011
dGVkOworCisgICAgaWYgKGlzTXV0ZWQpCisgICAgICAgIHNvdW5kQnV0dG9uLT5zZXRJY29uKHNv
dW5kT2ZmSWNvbik7CisgICAgZWxzZQorICAgICAgICBzb3VuZEJ1dHRvbi0+c2V0SWNvbihzb3Vu
ZE9uSWNvbik7CisKKyAgICB0aW1lci0+c3RhcnQoKTsKKyAgICBlbWl0IG11dGVkKGlzTXV0ZWQp
OworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uQ2xvc2VDbGlja2VkKCkKK3sKKyAgICB0aW1l
ci0+c3RvcCgpOworICAgIGhpZGUoKTsKKyAgICBlbWl0IGNsb3NlQ2xpY2tlZCgpOworfQorCit2
b2lkIE92ZXJsYXlXaWRnZXQ6Om9uVm9sdW1lU2xpZGVyUmVsZWFzZWQoKQoreworICAgIHRpbWVy
LT5zdGFydCgpOworICAgIGVtaXQgdm9sdW1lQ2hhbmdlZCh2b2x1bWVTbGlkZXItPnZhbHVlKCkp
OworICAgIHZvbHVtZVNsaWRlci0+aGlkZSgpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9u
Vm9sdW1lU2xpZGVyTW92ZWQoaW50IHZhbHVlKQoreworICAgIGVtaXQgdm9sdW1lQ2hhbmdlZCh2
YWx1ZSk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25UaW1lclRpbWVvdXQoKQoreworICAg
IGlmICghaXNQYXVzZWQpCisgICAgICAgIGhpZGUoKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0
OjpzaG93RnVsbFNjcmVlbigpCit7CisgICAgdGltZXItPnN0YXJ0KCk7CisgICAgUVdpZGdldDo6
c2hvd0Z1bGxTY3JlZW4oKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9x
dC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IE92ZXJsYXlXaWRnZXRfaAorI2RlZmluZSBPdmVybGF5V2lkZ2V0X2gKKworI2luY2x1ZGUgIlBs
YXllckJ1dHRvbi5oIgorI2luY2x1ZGUgIlBsYXllckxhYmVsLmgiCisKKyNpbmNsdWRlIDxRU2xp
ZGVyPgorCitjbGFzcyBPdmVybGF5V2lkZ2V0IDogcHVibGljIFFXaWRnZXQgeworICAgIFFfT0JK
RUNUCitwdWJsaWM6CisgICAgT3ZlcmxheVdpZGdldChpbnQgZHVyYXRpb24sIFFXaWRnZXQgKnBh
cmVudCA9IDApOworICAgIH5PdmVybGF5V2lkZ2V0KCk7CisgICAgdm9pZCBzZXREdXJhdGlvbihp
bnQpOworICAgIHZvaWQgc2V0UG9zaXRpb24oaW50KTsKKyAgICB2b2lkIHNldFZvbHVtZShpbnQp
OworICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICopOworICAgIHZvaWQgb25Q
bGF5ZXJTdG9wcGVkKCk7CisgICAgdm9pZCBvblBsYXllckVycm9yKCk7CisgICAgdm9pZCBvbkVu
ZE9mTWVkaWEoKTsKKyAgICB2b2lkIG9uQnVmZmVyaW5nTWVkaWEoKTsKKyAgICB2b2lkIG9uQnVm
ZmVyZWRNZWRpYSgpOworCitwcml2YXRlOgorICAgIFFTdHJpbmcgdGltZVRvU3RyaW5nKGludCk7
CisgICAgdm9pZCBhcHBseVN0eWxlU2hlZXQoKTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lk
IG9uQ29udHJvbENsaWNrZWQoKTsKKyAgICB2b2lkIG9uU2xpZGVyTW92ZWQoaW50KTsKKyAgICB2
b2lkIG9uU291bmRDbGlja2VkKCk7CisgICAgdm9pZCBvbkNsb3NlQ2xpY2tlZCgpOworICAgIHZv
aWQgb25Wb2x1bWVTbGlkZXJSZWxlYXNlZCgpOworICAgIHZvaWQgb25Wb2x1bWVTbGlkZXJNb3Zl
ZChpbnQpOworICAgIHZvaWQgb25UaW1lclRpbWVvdXQoKTsKKworcHVibGljIHNsb3RzOgorICAg
IHZvaWQgc2hvd0Z1bGxTY3JlZW4oKTsKKworc2lnbmFsczoKKyAgICB2b2lkIGNvbnRyb2xDbGlj
a2VkKGJvb2wpOworICAgIHZvaWQgc2xpZGVyTW92ZWQoaW50KTsKKyAgICB2b2lkIGNsb3NlQ2xp
Y2tlZCgpOworICAgIHZvaWQgbXV0ZWQoYm9vbCk7CisgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKGlu
dCk7CisKK3ByaXZhdGU6CisgICAgUGxheWVyQnV0dG9uICpjb250cm9sQnV0dG9uOworICAgIGJv
b2wgaXNQYXVzZWQ7CisgICAgUVNsaWRlciAqc2xpZGVyOworICAgIFFMYWJlbCAqcG9zaXRpb25M
YWJlbDsKKyAgICBRTGFiZWwgKmR1cmF0aW9uTGFiZWw7CisgICAgUGxheWVyQnV0dG9uICpzb3Vu
ZEJ1dHRvbjsKKyAgICBQbGF5ZXJCdXR0b24gKmNsb3NlQnV0dG9uOworICAgIFFTbGlkZXIgKnZv
bHVtZVNsaWRlcjsKKyAgICBib29sIGlzTXV0ZWQ7CisgICAgUUljb24gcGxheUljb247CisgICAg
UUljb24gcGF1c2VJY29uOworICAgIFFJY29uIHNvdW5kT25JY29uOworICAgIFFJY29uIHNvdW5k
T2ZmSWNvbjsKKyAgICBRVGltZXIgKnRpbWVyOworICAgIFBsYXllckxhYmVsICpwbGF5ZXJMYWJl
bDsKK307CisKKyNlbmRpZiAvKiBPdmVybGF5V2lkZ2V0X2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1
Z2luL1BsYXllckJ1dHRvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiUGxheWVyQnV0dG9uLmgiCisKKyNpbmNsdWRlIDxRR2Vz
dHVyZT4KKyNpbmNsdWRlIDxRR2VzdHVyZUV2ZW50PgorCitQbGF5ZXJCdXR0b246OlBsYXllckJ1
dHRvbihRV2lkZ2V0ICpwYXJlbnQpCisgICAgOiBRVG9vbEJ1dHRvbihwYXJlbnQpCisgICAgLCBi
dXR0b25JbWFnZSgwKQoreworICAgIGdyYWJHZXN0dXJlKFF0OjpUYXBBbmRIb2xkR2VzdHVyZSk7
CisgICAgc2V0Rml4ZWRTaXplKDUwLCA1MCk7CisgICAgc2V0SWNvblNpemUoUVNpemUoNTAsIDUw
KSk7CisgICAgc2V0U3R5bGVTaGVldCgiYm9yZGVyOiBub25lIik7Cit9CisKK2Jvb2wgUGxheWVy
QnV0dG9uOjpldmVudChRRXZlbnQgKmV2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgpID09
IFFFdmVudDo6R2VzdHVyZSkgeworICAgICAgICBRR2VzdHVyZUV2ZW50ICogZ2VzdHVyZUV2ZW50
ID0gKFFHZXN0dXJlRXZlbnQqKXN0YXRpY19jYXN0PFFHZXN0dXJlRXZlbnQqPihldmVudCk7Cisg
ICAgICAgIFFHZXN0dXJlICogZ2VzdHVyZSA9IGdlc3R1cmVFdmVudC0+Z2VzdHVyZShRdDo6VGFw
QW5kSG9sZEdlc3R1cmUpOworICAgICAgICBpZiAoZ2VzdHVyZSAmJiBnZXN0dXJlLT5zdGF0ZSgp
ID09IFF0OjpHZXN0dXJlRmluaXNoZWQpIHsKKyAgICAgICAgICAgIGVtaXQgdGFwQW5kSG9sZCgp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IFFUb29sQnV0dG9uOjpldmVudChldmVudCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5
bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyQnV0dG9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckJ1dHRvbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckJ1
dHRvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBQbGF5ZXJCdXR0b25faAorI2RlZmluZSBQbGF5ZXJCdXR0b25faAorCisjaW5jbHVk
ZSA8UUljb24+CisjaW5jbHVkZSA8UVRvb2xCdXR0b24+CisKK2NsYXNzIFFFdmVudDsKKworY2xh
c3MgUGxheWVyQnV0dG9uIDogcHVibGljIFFUb29sQnV0dG9uIHsKKyAgICBRX09CSkVDVAorcHVi
bGljOgorICAgIFBsYXllckJ1dHRvbihRV2lkZ2V0ICpwYXJlbnQgPSAwKTsKKyAgICBib29sIGV2
ZW50KFFFdmVudCopOworCitzaWduYWxzOgorICAgIHZvaWQgdGFwQW5kSG9sZCgpOworCitwcml2
YXRlOgorICAgIFFJY29uICpidXR0b25JbWFnZTsKK307CisKKyNlbmRpZiAvKiBQbGF5ZXJCdXR0
b25faCAqLwpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1Bs
YXllckxhYmVsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4vUGxheWVyTGFiZWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckxhYmVsLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJQbGF5ZXJMYWJl
bC5oIgorCitQbGF5ZXJMYWJlbDo6UGxheWVyTGFiZWwoUVdpZGdldCAqcGFyZW50KQorICAgIDog
UUxhYmVsKHBhcmVudCkKKyAgICAsIGJ1ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yKGJ1ZmZlcmlu
Z0FuaW1hdGlvbikKKyAgICAsIGFuaW1hdGlvblRpbWVyKHRoaXMpCit7CisgICAgYnVmZmVyaW5n
QW5pbWF0aW9uLmFwcGVuZChRUGl4bWFwKCI6L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18xLnBu
ZyIpLnNjYWxlZChRU2l6ZSg4MCwgODApKSk7CisgICAgYnVmZmVyaW5nQW5pbWF0aW9uLmFwcGVu
ZChRUGl4bWFwKCI6L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18yLnBuZyIpLnNjYWxlZChRU2l6
ZSg4MCwgODApKSk7CisgICAgYnVmZmVyaW5nQW5pbWF0aW9uLmFwcGVuZChRUGl4bWFwKCI6L2lt
YWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18zLnBuZyIpLnNjYWxlZChRU2l6ZSg4MCwgODApKSk7Cisg
ICAgYnVmZmVyaW5nQW5pbWF0aW9uLmFwcGVuZChRUGl4bWFwKCI6L2ltYWdlcy9sb2FkaW5nX2J1
ZmZlcmluZ180LnBuZyIpLnNjYWxlZChRU2l6ZSg4MCwgODApKSk7CisgICAgYnVmZmVyaW5nQW5p
bWF0aW9uSXRlcmF0b3IgPSBidWZmZXJpbmdBbmltYXRpb247CisgICAgYW5pbWF0aW9uVGltZXIu
c2V0U2luZ2xlU2hvdChmYWxzZSk7CisgICAgYW5pbWF0aW9uVGltZXIuc2V0SW50ZXJ2YWwoMjAw
KTsKKyAgICBjb25uZWN0KCZhbmltYXRpb25UaW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIHRoaXMs
IFNMT1Qob25BbmltYXRpb25UaW1lb3V0KCkpKTsKKworICAgIGNhbm5vdHBsYXkgPSBRUGl4bWFw
KCI6L2ltYWdlcy9idXR0b25fY2Fubm90cGxheS5wbmciKS5zY2FsZWQoUVNpemUoODAsIDgwKSk7
Cit9CisKK3ZvaWQgUGxheWVyTGFiZWw6Om9uUGxheWVyRXJyb3IoKQoreworICAgIHNldFBpeG1h
cChjYW5ub3RwbGF5KTsKKyAgICBzaG93KCk7Cit9CisKK3ZvaWQgUGxheWVyTGFiZWw6OnN0YXJ0
QnVmZmVyaW5nQW5pbWF0aW9uKCkKK3sKKyAgICBidWZmZXJpbmdBbmltYXRpb25JdGVyYXRvci50
b0Zyb250KCk7CisgICAgc2V0UGl4bWFwKGJ1ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yLm5leHQo
KSk7CisgICAgc2hvdygpOworICAgIGFuaW1hdGlvblRpbWVyLnN0YXJ0KCk7Cit9CisKK3ZvaWQg
UGxheWVyTGFiZWw6OnN0b3BCdWZmZXJpbmdBbmltYXRpb24oKQoreworICAgIGhpZGUoKTsKKyAg
ICBhbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgUGxheWVyTGFiZWw6Om9uQW5pbWF0
aW9uVGltZW91dCgpCit7CisgICAgaWYgKCFidWZmZXJpbmdBbmltYXRpb25JdGVyYXRvci5oYXNO
ZXh0KCkpCisgICAgICAgIGJ1ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yLnRvRnJvbnQoKTsKKyAg
ICBzZXRQaXhtYXAoYnVmZmVyaW5nQW5pbWF0aW9uSXRlcmF0b3IubmV4dCgpKTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5
ZXJMYWJlbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRm
b3JtcGx1Z2luL1BsYXllckxhYmVsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaWZuZGVmIFBsYXllckxhYmVsX2gKKyNkZWZpbmUgUGxheWVyTGFi
ZWxfaAorCisjaW5jbHVkZSA8UUxhYmVsPgorI2luY2x1ZGUgPFFUaW1lcj4KKworY2xhc3MgUGxh
eWVyTGFiZWwgOiBwdWJsaWMgUUxhYmVsIHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFBs
YXllckxhYmVsKFFXaWRnZXQgKnBhcmVudCA9IDApOworICAgIHZvaWQgb25QbGF5ZXJFcnJvcigp
OworCitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBzdGFydEJ1ZmZlcmluZ0FuaW1hdGlvbigpOwor
ICAgIHZvaWQgc3RvcEJ1ZmZlcmluZ0FuaW1hdGlvbigpOworICAgIHZvaWQgb25BbmltYXRpb25U
aW1lb3V0KCk7CisKK3ByaXZhdGU6CisgICAgUVBpeG1hcCBjYW5ub3RwbGF5OworICAgIFFMaXN0
PFFQaXhtYXA+IGJ1ZmZlcmluZ0FuaW1hdGlvbjsKKyAgICBRTGlzdEl0ZXJhdG9yPFFQaXhtYXA+
IGJ1ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yOworICAgIFFUaW1lciBhbmltYXRpb25UaW1lcjsK
K307CisKKyNlbmRpZiAvKiBQbGF5ZXJMYWJlbF9oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAkocmV2aXNp
b24gODUwNjcpCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2Vi
UGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsMTAgQEAKIAogI2luY2x1ZGUg
IldlYlBsdWdpbi5oIgogCisjaWYgZGVmaW5lZChFTkFCTEVfUVRfTVVMVElNRURJQSkgJiYgRU5B
QkxFX1FUX01VTFRJTUVESUEKKyNpbmNsdWRlICJIdG1sNVZpZGVvUGx1Z2luLmgiCisjZW5kaWYK
KwogI2luY2x1ZGUgPFF0R3VpPgogI2luY2x1ZGUgPFF0UGx1Z2luPgogI2luY2x1ZGUgPGFrbmRp
c2NyZWV0cG9wdXAuaD4KQEAgLTI0Nyw2ICsyNTEsMTAgQEAgUU9iamVjdCogV2ViUGx1Z2luOjpj
cmVhdGVFeHRlbnNpb24oRXh0ZQogICAgICAgICByZXR1cm4gbmV3IFdlYlBvcHVwKCk7CiAgICAg
Y2FzZSBOb3RpZmljYXRpb25zOgogICAgICAgICByZXR1cm4gbmV3IFdlYk5vdGlmaWNhdGlvblBy
ZXNlbnRlcigpOworI2lmIGRlZmluZWQoRU5BQkxFX1FUX01VTFRJTUVESUEpICYmIEVOQUJMRV9R
VF9NVUxUSU1FRElBCisgICAgY2FzZSBGdWxsU2NyZWVuVmlkZW9QbGF5ZXI6CisgICAgICAgIHJl
dHVybiBuZXcgSHRtbDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5
bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8J
KHJldmlzaW9uIDg1MDY3KQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1
Z2luL3BsYXRmb3JtcGx1Z2luLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsMzAgQEAg
bG9hZChtb2JpbGl0eWNvbmZpZywgdHJ1ZSkKIAogaXNFbXB0eShPVVRQVVRfRElSKTogT1VUUFVU
X0RJUiA9IC4uLy4uLy4uLy4uCiAKK2NvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbXVsdGltZWRp
YSkgeworIAorICAgIENPTkZJRyArPSBtb2JpbGl0eQorICAgIE1PQklMSVRZICs9IG11bHRpbWVk
aWEKKyAgICBERUZJTkVTICs9IEVOQUJMRV9RVF9NVUxUSU1FRElBPTEKKyAgICBERUZJTkVTICs9
IFdURl9VU0VfUVRfTVVMVElNRURJQT0xCisKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgSHRt
bDVWaWRlb1BsdWdpbi5jcHAgXAorICAgICAgICBIdG1sNVZpZGVvV2lkZ2V0LmNwcCBcCisgICAg
ICAgIE92ZXJsYXlXaWRnZXQuY3BwIFwKKyAgICAgICAgUGxheWVyQnV0dG9uLmNwcCBcCisgICAg
ICAgIFBsYXllckxhYmVsLmNwcAorCisgICAgSEVBREVSUyArPSBcCisgICAgICAgIEh0bWw1Vmlk
ZW9QbHVnaW4uaCBcCisgICAgICAgIEh0bWw1VmlkZW9XaWRnZXQuaCBcCisgICAgICAgIE92ZXJs
YXlXaWRnZXQuaCBcCisgICAgICAgIFBsYXllckJ1dHRvbi5oIFwKKyAgICAgICAgUGxheWVyTGFi
ZWwuaAorCisgICAgUkVTT1VSQ0VTID0gcGxhdGZvcm1wbHVnaW4ucXJjCit9CisKIFNPVVJDRVMg
Kz0gXAogICAgIFdlYlBsdWdpbi5jcHAKIApJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFu
L3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnFyYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucXJjCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3BsYXRm
b3JtcGx1Z2luLnFyYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPCFET0NUWVBFIFJD
Qz48UkNDIHZlcnNpb249IjEuMCI+DQorPHFyZXNvdXJjZT4NCisgICAgPGZpbGU+aW1hZ2VzL2J1
dHRvbl9jYW5ub3RwbGF5LnBuZzwvZmlsZT4NCisgICAgPGZpbGU+aW1hZ2VzL2J1dHRvbl9jbG9z
ZS5wbmc8L2ZpbGU+DQorICAgIDxmaWxlPmltYWdlcy9idXR0b25fcGF1c2UucG5nPC9maWxlPg0K
KyAgICA8ZmlsZT5pbWFnZXMvYnV0dG9uX3BsYXkucG5nPC9maWxlPg0KKyAgICA8ZmlsZT5pbWFn
ZXMvYnV0dG9uX3NvdW5kX29mZi5wbmc8L2ZpbGU+DQorICAgIDxmaWxlPmltYWdlcy9idXR0b25f
c291bmRfb24ucG5nPC9maWxlPg0KKyAgICA8ZmlsZT5pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdf
MS5wbmc8L2ZpbGU+DQorICAgIDxmaWxlPmltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18yLnBuZzwv
ZmlsZT4NCisgICAgPGZpbGU+aW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzMucG5nPC9maWxlPg0K
KyAgICA8ZmlsZT5pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfNC5wbmc8L2ZpbGU+DQorPC9xcmVz
b3VyY2U+DQorPC9SQ0M+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0b25fY2Fubm90cGxh
eS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkg
dHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdl
cy9idXR0b25fY2Fubm90cGxheS5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQog
ICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFG
QUFBQUJRQ0FZQUFBSDVGc0k3QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hSRldI
UlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQkNaSlJFRlVlTnFNa0ZF
S0FDQUlROXZ1ZitmRgpJRUVETFQ4RTNYT0trTFIrZ2s0QVRIY1RzbzdqbUNGa3FEZzJZaG5teXlu
NnZPNUJWOStndXByVHV0em5BQlU0L2pqZWFIMExRQ21WCkpBRUFncUQ4LzZNdExVcm81SzBoQkZ5
c3RSbE1Yei9yeGtMYW9Sb1c2dzA3d3ROYXdiR3JxZGdLNEpxM090dzVadFhybmtoRVZFVkUKK3U2
UmdwZWNJUGU2UG5Pa1RFSzJLUURyWkpBRUFBaUN3UFQvZjY2TFRhV1FIdlJZQXhWc1R6UDdHQy80
amRlRXZGazZ5QWhwRkVWOQpGUmhRMlppd0N3alltQWhRRTdEMWd6MmpteGxua2Vob0htVmZDV1ZV
eVZpTFJtTFBTOHRyeDZZZDdDVUFKZlYyQXlBSUExRDBoejExCkVJMnJ1Q2tpaXNIU3g0V0VHQko2
S0Zpb0tiZGUydG1QU1pjeHFWOXAyNCsyMVpWbUoyT1NjaDRMUWIyWUxGdFpOWHZiOTJMcUdkd0QK
aW1yWW0rcnphUWRMMEFqN1FJSVM3QWRHS01FRzBFTUpwb0lFdFRBVDlINUFXRkl6R0VHbnNiQk9h
ZEhTNHVjM2dCWS92UUVVeGRqRQpqUm9uZUhWbW9lYmpFR0VhYWo0T0ZQTmlMZ0ZvcjJNY2dFRVlo
cUwzdjNXbHFtSkFUWWp0ejhBSWVSTEVRTnNwMzVEdkdSSFYxaWtuCmJKdUhRNmQxeWduRktZdWhh
cDIxNzVPSVRxQW4yRitidm1NL29EVFVoYlVYSGdGTllaTXVkcUVJN0FoMG9SUnNES1NoVTVnTVRL
RXEKTEFGS1p5eU9wOXV3RklyRDhCekZreDhPZkR6NThjQ25ZVFJVWHNDT0M3UE9lQUVYcGtMbHh3
SUZjK3RJLzROTFQvNjJ6aU1BcjJaeQpCQ0FNdzhEK3UrYkZONzUyVllCSGdvRkVoOXY1bFVsd2ZB
NytUMlcvd1E3Tzg5c3dTWFp4eWovTUlEbkJhZjMrSk1rcFR2c1FKVWh1CmNFWW4vSVhrRmtlN2c2
bjdXQlVLaUZndzFRd2h1UlF0cU9oQmtpU3BxdkU4UlpmOGdDZEJqUk1lbWNWY0hlMkh0OTQ0YXRv
VjQwNlMKM01RZmtWd21rczFjU0Y0QytFajhkbEpCaVd3d2tnOFNDZXRLcWlYalh5VUNOa0wwa1o2
azlWd3M1Yi8wSktqb3hUMkVYZVFnTXAxVQo1cG9TcHJzNm8rMUU3SU5aeFNKMWJLTFFQbnFjL3ZC
SmxTeHgyc1BFenNJR3B6Vk1ibjVNY2NwaFl5MWxndk1jdG5abUpqalZOcEM2CmVkVEJxWWIxS3FM
QytRUW83d3lTRUlaaEdNaFRlUm8vaFFzSEpnZW1KTGF5Ry9vQldXcVQyTEluWFdvZHBIb3BxVlpJ
YTFFM0FEMVQKbjJsSXVHaytQd045bnRqanJKRkJ5R28rVTBEZmloR3FrRjE4bG9BTVFuYnpLUUVp
Q3BuaVV3cEVFRExOcHgwMEplUXVEb2dnak1KZApudWVoQ2ttSlVSRWtPU2JOMjZhdUN2eXlvVzhu
bG8wYmU2RGhUMEI2SnFESXdjaTVxQ3FaSlNieHVuS0tWa1pxNjFKSy9hMXpSbWdPCjBCSGliWFYv
VGxxK080UTg4Z0NKMm1nbnB6QUpJZjhpaVc3MUl3MUdKcm1jVXhnSmFHUFg0QUNUTFMyTmRZNTF5
RTNCSWwrcXNhR0UKYWpXWVc1cVEvZG5mVk4vYXMra0MzamtmaytSVERreWEwRXJ3S1FNbXp3aDI4
bGtHTmsycGR2Q1pCamFPOTNid3FSak0xazdxVi9DNQovT3VHNFVMeHgvdCs0UHZ0Z0dlRnp3czZU
eXRaN01JelNnQUFBQUJKUlU1RXJrSmdnZz09CgpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1i
aWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0b25fY2xvc2UucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fu
bm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUg
PSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZwpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURJQUFBQXlDQVlBQUFGcE9MZ25BQUFBQ1hC
SVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldG
blpWSmxZV1I1Y2NsbFBBQUFCdnhKUkVGVWVOcGkvUC8vUHdNakkrTW1Ca3pRCnhnS1M2TzN0OVVX
WFdiaHdvVEFUaVBINTgyZUdvb0o4RlByUG56OE1MQ0RKVDU4K01SU1hsakgwZG5lQmFSRDQvZnMz
QTF3blNDSXQKSXhOTW8rZ0VjU0tqWThBNllEUklraEZJNndKeEt4YlhNZ0FFRUVoeUUxWUpvQmYr
WTVOZ0F0bGpiR1RJNE96b2lPSUZKcERUTjIzZQp3dkFMNk56NjJocXc4MEZpWUIwZ2JHcGl6SEQ4
K0FtR2tLQWdNSjhGUkNBN2w2Q3JBQUlJTERGbHloUmZCaUxCbkRsempzRkRCd1pzCnJLMFpqaHc5
aWxNVFNwRENBQmNYRjBORldTbkR1Zk1YR0l3TURjQmkxYlYxS0pyQWtmVHg0MGM0bmpkL1BsZ1Nw
dUhrcVZNbzhxQ1kKeGJCcDRmeDVEUEdKU1hCK2Frb3lpanhXNXdXRmhLTDRvYTkvQWdvZlpCTkFB
SUZDYnc0UWl4RWJlb3pBb1A3UFFBSmcrZm56SndOSgpHbjc5K29WWEFRYzdPOE1QSkVOUmJBQ2xN
aEJvYkc3QnlnZjdvYXFxQ3NVUHJjMU5LRFlnUnlJNGdmLzQ4WU1CR2NPeUlRaUEyT2p5ClRDQW5J
V05RMW9RQkVCdGRuZ25rYVJpZU1ta2lXQ0VvVDRNd0NJREVrTldnZURvek80ZmgyN2R2Y0Q0b3FU
UTNOVElncTJHTWlJaWcKYmNUaHpLSzRBRUFBZ1JNZkx5K3ZkSGQzdHdjRGxRRXdrSDduNWVYdEFH
VUxzWmFXRmc5U3ZVTWtZTlhYMXhjRzV6MGFXUUFHLy83OQpZOEJyQ2FoRUVCY1RZN2gwK1RLNHhN
VUdhcW9xd1hSUFh6ODRsZUswQkZjT2ZQN3NPZGdTUFYxZE1MNXc0U0xEdWcwYndISk5EZlVvCmFr
SEZQRmsrV2I1eUpSaUhoWVlBS3hVakJnTURmVEJHQnVXVlZYaUQ2Ky9mdnd4RXhjbmlKVXZCbHFD
RFU2ZFBFOVJMMENjZ01IM3EKRkJRK0tLdkd4OFl5V0ZpWU01aVptb0x4aVJNbkdSWXVYb3pURW1a
UWZhaW5wNmNPOGhZeVpnZVdoRk1uVDRJclRrNU5BMGIrWnJEYwp1ZlBud1d4UkVSRUdXVmxaQmhr
WkdRWjlQVDJHdmZ2Mk1hQ2JjKy9ldmNmZzNCc2RIZTFMcXlSOCtQRGhZelRQSi9DSWYvZnUzU2R1
CmJtNCtXbGp5NXMyYlR3QUJCQW91Q3lDdW9wRkhYZ0VibENuZ09KazBhWklIR3hzYks3VnRLQzB0
M1FGc0xqeGxNakF3RUdaaVltSUYKTlNLb2pkdmIyMEVsdXhnTHFIME1paHhhQXJBbElGdHBiZ210
ZmNJRXN3UWJabVZod1NrSHc1WVdGbmpsOFFZWEJ3Y0hRMEYrSHBqZAowdGFPMVlWK3ZqN2dLa0JW
VllWaDlweTVwUHVrcEtnUXBXSkNsL2YxOWdaYkFBS2dPc2ZXeGhxblQzQmFVdGZRaU9JYVVHc1FK
dWZ2CjY4dWdyNjhIbHdOVlpudjM3U2ZkRWhCR2J6R0Nhc01BZjMrVWlndlVUVmk5ZGkzZU9HRUNs
ZmY0TWhSNnpRZnJSb0RBMlhQbkdGYXUKV29WWFA5d25oSEl1Y2hNWEJrNmZPY3V3YlBrS2dub0pC
aGNNaDRlRllsZ0M2aElTMG9jU0ovaGNFaGtSRHE1aXNZRUpmYjJVK3lRbQpLb3JCM013TWJpaW9M
Z2ZWOGNnQTFIWW55aWZZSk9OaVlzQ05CUmdBOVpibkxWZ0Fsb04xRHBBYkcyUlpBbW9jd01DeFk4
Y1o1c3liCmh5SVBhbGdnQTFERGcrUTRxYW1yWTNqMCtERzRuejF6OW15c2FtQ2RYRkFRZ2xxUXVP
SUVieWxjVlYxRHNJU05pWXNmSEVVOUN5ekgKRC9sS2krWHQyN2VmYU9XVHIxKy9maUtyazBrR3FB
WUlNTHpqWTBNSVZJTkRDOWpEWmkwcEtiRVNGUlhsRzBxdWYvMzY5YWVlbnA1agp3RWJxYjNDYlhs
bFptVTlRVUpDUDFybUYyZ0RrWnBEYkwxeTQ4QmJzRVhya1Jsb0JrTnZCdVgxWWVZUWVoVEF0eDRZ
b2loRU9Eblp3Ck8wWU0yTXkrZlBrS3crYXRXOGx5Q0tqSnJxdXJ3L0RxMVN1R0pjdVdNZno0OFpN
K1NRdlVZUUcxazhURkVlUFlJSWVBOE1WTGw4SGoKSU1RQVAxQ1hRRThYemdjRlNGRkJBY1BMbDY4
WUZpMVpnblhRakNpUEVKdTB2bno1d3ZEOHhYTVVqOEFBeUdFZ2ZPSGlSWWIxR3paaQoxUjhZQU94
eTZPdmpOQjlrTnNnT3VtVDJOV3ZYZ1hGd1VDQ0RvWUVCaGp6SW9TQjgvc0lGaHJYcjFvUEZjS21G
QVdTMWRDKzFWcTFlCkE4YWh3Y0VNUmthR0dQSWdoK056UExnVGVPNDh1Qk5JdGVLWGtsSUxOdFFL
Nm9hWkdCc1RwZWZNMmJQQVR1YnF3Vm1QZ0RxbklMTk0KVFV6d3FqdDk1Z3pEOGhVckIyYzlBaXFL
emN4TWlWSUw4aWdJbnpwMUdsemtVcTBlZ1EybWtnTmlRVjFXY3pPYzhpZE9uZ0xUMk5TQQpQQTdD
SURXTGdVVXVSUjBTY3BOV2ZGd3NlQVFORnpoKzRnVER3a1dJQWZzRkN4ZmkxQVB5SkFpajZ5RWxh
WUdiOFFvS0NzTE96czVXCnhGWmtvQkU2WE9EWThlTU04K1l2d0d0R1VtSUNnNVdsSlU1NTBDd1Rz
UlhyM3IxN2p6MTQ4T0F0MkNQeTh2TENqbzZPVnNTR0FteWEKSFRTTEFRTkhqeDFqbUROM0hrbWht
WktjeEdCdGhiRDI4ZVBIREIxZDNTZ3pwNFRBL3YzN2p6MTgrQkRpRVRrNU9XRjdlM3NyVXRNbAp5
RVB1Ym03QVdud0RSZWs3TUNDQVllZXVYU1I1QUFZT0hqeDQ3TkdqUjI4cHFrZEFJelNyMTZ5aHVB
aWx4SXpoMlI4WlZoNFpxaDByCjVPSVh2RWlHbloyZDFjbkp5Wm1abVpsMUtIZ0FtSUorNzl1M2Ir
L1BuejkvQTdtdkdLR3IxRUMxVkFvRENhdCtCZ2w0QllvSW9COU8KQUFCVVBWYVFaWlZNRFFBQUFB
QkpSVTVFcmtKZ2dnPT0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vaW1hZ2VzL2J1dHRvbl9wYXVzZS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTog
ZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1i
aWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0b25fcGF1c2UucG5nCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncw
S0dnb0FBQUFOU1VoRVVnQUFBRElBQUFBeUNBWUFBQUZwT0xnbkFBQUFDWEJJV1hNQUFBc1RBQUFM
RXdFQW1wd1lBQUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xs
UEFBQUE2bEpSRUZVZU5waS9QLy9Qd01qSStNbUJrelEKeGdLUzZPM3Q5VVdYV2Jod29UQVRpUEg1
ODJjNERnNE1BTk4vL3Z4aFlBRkpmdnIwQ2E3ano5Ky9ZUDd2Mzc4aGtpQ1ZNUEQzejE5VQpuY2lT
OVkyTkVCT0Frb3hBV2hlSVc3RzRsZ0VnZ0VDU203QktBTDN3SDVzRUM4eWUrdG9hTU4zWTNBS1JR
SFk2c2xkWWtGMkc3Rks0ClJHUjBESEd1QWdnZ3NNU1VLVk44R1lnRWMrYk1PWVlST29RQUtOUXdZ
Z3FFSzhwSzRYUjRXQ2lLSER3ZVBuNzhpR0VpVEF5a0NGa2UKYTh5Q1FIeGlFZ3FON2p5Uy9RU3lD
U0NBUUtFM0I0akZpTlhFQ0F6cS93d2tBSmFmUDM4eWtLVGgxNjlmSkdsZ0F0bUFqRUZ4QWNJdwpO
cm84VGh0ZzR1anlMRDkrL01DcUFTYU9Mby9UMHpCeGRIbVNuY1FZRnhmM242YkJTbkxFNGN5aXVB
QkFBSUVUSHk4dnIzUjNkN2NICkE1VUIwTHUvOC9MeWRvQ3loVmhMUzRzSHFkNGhFckRxNitzTHMy
Q0xVMnFDZi8vK01kRFBFa0pKcGFtaEhzNnVhMmhFRVh2dzRDSEQKdkFVTHFPc1RkTFgvL3YvRHEv
OHZzSnFrM0pKLytDMmhpay8rRTJzSktka1hYZTAvWU9NRW4zNmlmUklURjArVTJJQWxZWGpFdjN2
Mwo3aE0zTnpjZkxTeDU4K2JOSjRBQUFwVmRGa0JjUlNPUHZBSTJLRlBBSmVxa1NaTTgyTmpZV0ts
dFEybHA2UTVnYytFcGs0R0JnVEFUCkV4TXJxQkZCYmR6ZTNnNHEyY1ZZUU8xalVPVFFFb0F0QWRs
S2Mwdm80cE9SRVZ3Szh2SU04WEd4WVBiQlE0Y1lEaHc4Qk85SElQY2wKS0xJRVZQWWcySmhxaVFs
cWdwYjhSYkxrUDdDQ0lzc1NrRXZ4eFFteUlkalVFaE9mQkNPZWFwYmdqNU8vMUltVGdmZkpYeXBF
L1BCSgp3b1RpNU9yVnF4aWRXR3lkMmhGU0NoUEs4VVBISjIvZnZ2MUVLNTk4L2ZyMUUxbWRUREpB
TlVDQTRSMGZHMEtnR2h4YXdCNDJhMGxKCmlaV29xQ2pmVUhMOTY5ZXZQL1gwOUJ3RE5sSi9nOXYw
eXNyS2ZJS0NnbnkwemkzVUJpQTNnOXgrNGNLRnR5eVFvcFgydVpGV0FPUjIKY0c0ZlZoNmhSeUZN
eTJHYjRSY2psSHBFSHRpdmlJdUp4aEEvZFBnd3NKOXhHTTZ2cmNic3dqOTg5SWhoMGVJbDFQTUlK
VWtMVnlBUQprMlFwdFp1cU1ZTGM0RWNWSjJ3dXBYWlQxeU5JN1gxVVMvNFJOcGZhSGhsTldtaWRJ
OUtURmdQMVlvVFNlbVFnWXdTbEhpRzJ0MGRNClQ1TFVQUEtmZ1RwMTJQQXF0WVpOMHFJMFZFQXpU
SjFkM1JqaWI5NitSVEVYbTVwdjM3OE5ubm9FTkZsLzlkbzFndXFJVVRPZzljaG8KZjJUVUk4TTRh
Y0VYeWJDenM3TTZPVGs1TXpNenN3NEZEd0JUME85OSsvYnQvZm56NTI4Zzl4VWpkSlVhYU9JeWhZ
R0VWVCtEQkx3QwpSUVRRRHljQW0zRXVBR0JJZnBJQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9wbGF5
LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0
eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2Vz
L2J1dHRvbl9wbGF5LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURJQUFBQXlD
QVlBQUFGcE9MZ25BQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBk
MkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFCUkZKUkVGVWVOcGkvUC8vUHdNakkr
TW1CalFBCkZQZGpBVW4wOS9mN29rdUN4SmxBakUrZlBqRUUrdnN6YUdwb2dOa2dEQUpneVk4ZlB6
TDgrZnVId2QzTmxhR3VwaHJNQndFV21NNi8KZi82QUJWTFRNK0JHd3lWcjZ4c1lNT3pGNVZvZ2lB
UUlJRVlnTVFlSXhUQjBBYjN3SDRzT0JpYVlrd3Z5Y3VIT0IyRVdtRk5CQU9SMApFQ2d1TFdOZ2dY
a1F3OWt3aWZESUtGVExnUmliY3hrQUFnanMzR25UcGlVekVBbXlzckkyZzBKSEROa05VUkhoRE10
V3JNU3JFUjZrCk1QRG43MStHOHRJU09MKzZ0ZzR6YkdBeENNTi9vSkVGQTM2K1BpanlXRzM2Kytj
dlExeENJbW5PcTZpcUloZ1lBQUdFTHlWZ0F4UEIKYVJrWTNMN0VxTjY1YzZjUzJGay9mLzRreW5n
SEJ3ZHREQTNzN094NERjRFFBSXVUcHBaVzRqUWdKOUhuTDE0d1RKazZEVE1TZi96NApBY2ZJUUZK
Q2dxRzF1UWtVaW5CNWdwN095Y3NuemtrOXZYME1OMi9kSXV5SGI5Ky9NMlJrWmhFZlNvbEp5WVRU
RTdFUjkvZnYzOStnCm5OZ0d4RHJFNWtTQUFDSTE4WkVEcnJEQUxKZzBhWkl2TFd6SXk4dURoQlVw
NFVVT0lHaEpiSFFVZzV5Y0hNUExWNjhZNXN5ZFJ4dEwKL3YyRDFBSGlZbUlNMVpVVmNQRzJqazZN
ckVHK0pmLy9ZUld2cWlpSHN6ZHYyY3B3NU9oUlNuenlqNkJMZlgyOEdSNCtlc2h3NTg1ZAo4aXo1
ajhPUzc4RHNXbFJTU3QwNEFZR2p4NDR4ekowM24vb1JQMzNHREliWGI5N1FOZ2svZWZxVTRuekNE
TVN2Z05pQ2hZV0ZrWWVIClJ4aFlPREZRQS8vNjlldjNwazJidG9Fc0FRZ2dXTm5sREdUblV6bWp2
d0thblFKcjI1QlVvcElLUUsxVGNNc3FLU2xKMjhURVJJbmEKRm9BYVd5QWZnU1Bld01CQUNiMzVR
MFVneGdLdGlSaG9DY0NXME5BWGlBWUh2cVRvNGVaR2RqSW0yaWM2T3RwZ3ZHVHBNbUFoK0lqOAo0
Q0ltVG1LQWxSZW9WT2pzN3FGdG5JQ2FrNkNHM29VTEZ4bldiZGhBZlo4Z0F3TURmVENlQXl5Ujc5
Ky9UOXZVbFpLVUNLNkM2eHViCkNLY3VrQ1c0TUNIQXdjSEIwTm5leGhBU0hJeFRMMVV5NDlObnp4
aVdMbHRHdTh4WVdsNEJyb3FwSHZFZ3NIck5Xb1o5Ky9mVHBsaDUKL09RSlExTnpDMjB5STZ5TDh1
M2JOOXBreHFYTGxqUHMzTFdMc2xJWW4wK2lZK09HUmxGUHYwb0xXTHIrWm1abVpxVnBwYlZseTVZ
ZApvSFlTdGRwY0lIenYzajFZQjNnaXFMWENEY1RMYWRWZkJEYUpxZ0FDRE5hNEExbFVUY3YyRjYw
OEFjU3RRRDk4QllVV1NnczFNakpTCjNkTFNVcEdOalkxMU1Mb2NsSFQyN2R0M2E4T0dEZmVRaDUx
UWh2LzYrdm84QnFzSHNIbW9xS2hvQjBZUENOeFRBZVpHV21kOWFnSDAKa2dQRkk3UXVKR2xlTmlL
Tlk1RnNBRDhmSDhOSHBISFhRZUVSY21MRXc4T2RRVTVXRnR3TVAzemtLTVBwTTJlR3BrZEF4VGVz
cWUvaQo3QVRHSUhEeDBtV0dYYnQzRXoxT05lQkpDK1lSZEtDdnB3dkdJUERpNVV1R0hUdDNNang0
OEhEd3h3ZytJQ0V1enBBUUIybTJnV0pvCjMvNERETWVPSHg5Y01jSkFoRWZRdTBwZW5oNWdEQUxu
enAxbjJMeDFLOFZKa0M0eGdnOFlHUm1DTVFnOGUvNmNZZE9telF4Mzc5MGIKaUR4Q3ZlUWhKU25K
a0pHZUJpNzVObXpjUkxCck9LaGlCQVMrQTVQVjl1MDdHQTRjUERpQXBSWURlUjU1K3ZRcHcrcTE2
eGh1Mzc0OQpkRW90R0RoKzRnVERxbFdyd2ZOd1E2WWVBU2Nab0lNM2JkN01zSHZQM3FGVHM4TkhR
UjQvWmxpNmZEbkRqUnMzaDE0VDVmQ1JJd3lMCmx5d2xhNVJsMENRdFVzZWdCbTJNREp2K3lHRHlD
R2dlRHJ5UTZNYU5HMWRWVkZTMGg0TEQ3OXk1Y3hXSit3bzJIRVRUcVRoYUR3bkIKeDdWZ0FEcDVH
Y21BWmFuWElBT2dWTFFjNkhaNEJRVUF1dDZWbkpQYldpVUFBQUFBU1VWT1JLNUNZSUk9CgpJbmRl
eDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0b25f
c291bmRfb2ZmLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBh
IGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vaW1hZ2VzL2J1dHRvbl9zb3VuZF9vZmYucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1l
LXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1Vo
RVVnQUFBRElBQUFBeUNBWUFBQUZwT0xnbkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFB
CkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUJvaEpSRUZV
ZU5waS9QLy9Qd01qSStNbUJrelEKeGdLUzZPM3Q5VVdYV2Jod29UQVRpUEg1ODJjR1Z4Y1hocVNr
SkRBYmhQLzgrY01BbHZ6MDZST0RycDRldzZ1WEw4RnNFUDc5K3pjRApYR2RhV2hxRHNJZ0lnN2FX
Rmx3bkMwd1NCSEp5Y3VCMmdpUVpnYlF1RUxkaWNTMERRQUNCSkRkaGxRQjY0VDgyQ1NhUVBVYUdo
Z3hGClJVVnc1NE13QzhpcERvNk9ETGR1M2dRN0cwVUh5TmxxNnVvTXprNU9DQjB3SjBkR1JoTG5L
b0FBQWt0TW1UTEZsNEZJTUdmT25HTW8Kb1lNTVVsTlRHV2JQbm8waGpoR2tpb3FLREhhMnRndy9m
LzVrWUdabXhtb1lYTlBIangvQkF0SFIwUXljbkp4Zzl0T25UeGxDZzRNWgo1c3liaDZJSkZMTW9O
bVZrWk1BbGdUSEEwRDl4SW1IbklRTlFPR01ESUpzQUFnZ1Vlbk9BV0l6WTBHTUVCdlYvQmhJQUN5
aUVTTkx3CjY5Y3ZralF3Z1d5QTRiaVlHRkErWktpb3FHQkFGa2ZHY0JzRUJRVVpqcDg4eWVBQ3pI
b2dnTXRtbGg4L2ZvQVo5dmIyREthbXBtRDIKMmJObkdXRGlPRDBOb3NHUnc4TENZR3hzekNBcExz
N1ExdEdCNlFlUTFTQzhhTkVpaHF5c0xMQW1FR2hvYW1Lb0F2b0ZKZy9EVE9pZQpTazVPWnJoKy9U
cVlYVmxkamVGcHhvaUlDTnBHSE00c2lnc0FCQkE0OGZIeThrcDNkM2Q3TUZBWkFBUHBkMTVlM2c1
UXRoQnJhV254CklOVTdSQUpXZlgxOVlSWllYTk1LL1B2M2p3R25KYlkyTmd6Q1FrSU1HelpCZ3Ar
RGc0T2h1TGdZWE9KT25qeVpkRXV3NVlPOSsvWXgKT0RvNE1DUWxKREM4ZmZjT1hDT0JBS2ppSXlY
SDR2UkpXRmdZT0l2QXdKZXZYOEY1akkyVmxVRkdWcGFrNFAzNzl5OTJTMEFTeUFCVQovNEFBcUlJ
QzFhK1JFUkVNQ3hZdUpOb240RFFQTEtGeDFqN0E0aEpjUDhEQTI3ZHZHVTRCaXh4OVlQQzlCRm80
YTg0Y3ZKYnMyclhyCkdBdStzZ201aEFmbUl3WWhZRUlBZ1RWcjE0S3hJYkJlSmhRL2VGTVhPZ0Jt
S2pBTmlpdVkraE1uVGxDV2hIR0JZOGVPa1pSUDRCSC8KN3QyN1Q5emMzSHkweUl4djNyejVCQkJB
b0lpM0FPSXFHbVg0VjhCOGxRSk9YWk1tVGZKZ1kyTmpwYllOcGFXbE80RE5oYWRNQmdZRwp3a3hN
VEt5Z0tvZmF1TDI5SFZTeWk3R0FpZ24wekVkdEFMWUVWbkhTMUJKYSs0UUpaZ2t4T0RBd2tHaTFN
QXkzQkZ1a2dkcFF3QVFCCjU0UGE0aW9xS2lSSFBsNmZnRUJNVkJTNGNNek56V1dRbDVlSDUyQ3lm
SUpOY3Nhc1dXQUYvdjcrREZ4Y1hDakZCS21XWUkxNFVEY0EKQk1RbEpSbWVBNHZ6UzVjdU1lZ0Jp
M1pXWUtWRlRpSmhBWldTNkVrNEpTVUZ6Z2FWdXFCYUVXWVJPY2tkYThTakExaFZETElJRkVkVQpp
WGhzQUdaUkRyRFZDMm9tVXlVSmYvLytIYWRGK2NEVUJyS0lJcCtBa2l5b3V6dGp4Z3dNaTVwYklS
M3Jvb0lDZUVJZ093bUQ4TGx6CjV4aWFtNXN4YWpwUTV3QmNsQU1iZTJRbllXVHc0TUVEc005Z3JV
YVkydHI2ZXNwU0Z6b0dOVTB6TXpNWmlGR0xMVTZJTG9WQkhlTFkKMk5qQlc5Ump6ZkZEc3RKaUFi
WnRQOUhLSjErL2Z2MUVWaWVUREZBTkVLQmQ4M2xKSUlqaStBc1NiNXV5R0JaNFVaUTZtSjRsaWd6
eApVSVFFbnFLemh3Z1V2UGt2K0U5RVB5bnNGaUxXSHFXanB4SkVQWXBySGlvUDBWNmE5MnFYUlhU
VGJNaXRIZ3lvTUxQemRYNTkzMmZXCmtJK1pLREwwYjdFTTI1Sk9wME1PaDBNd1UrL2I3ZlpUTnBz
dHNTV3NrS2YzZUR5QzNXNFhlSytXN3c3c00vYTlYQzUzcHRXY21mZHEKNUJYWWQxcnR2MG9JejAz
WTYvVkN0VnJseW9hK1BDTEJRQUR1N3U4TkVVRThIaWNSaUxFcmxjcGtUUzNzMk1yeXNpYUdKZjV3
bGM5cgpnaENHSlJJSkVBVEJrQVJ4RlRMTTFFSjRpMlZ0ZFJWOFBoK0JuTjJkSFhoa1ZtbHVmaDVz
Tmx2ZkIvSGNEY2RhN05lU1JHVnpZd09FCm1Sbnk1TFZhallEZXd1SWlXZU1mRzVIUEhoYUx4U2ho
MEF3blN4aXdxTER3dWR1RlYwV2g5RWd2aVBlT09QTFV3dHhOMy9sQjlMTlgKRUU2NWlacGFhZ1dq
NkNlbzgvQkFvT0hzL0p3TG9oLzVIQmxHU0Q5QldJOTVPTmpmMndOWmx1SGs5QlJldmxHUWVvNlFh
V1IrUll4RwpveUdqQ3FJb2FyaFpoU0ZJV2o0TDNLS1JnUy81L2RwdkxTYm82UGg0NEkzYUtGRW9G
RXBzbyttUUVMZmJMVVlpa2RCWEduSzVYSFNSCnFBZjQra0NZbjhsazNoSFQxaFpCZlUxUXF3VUho
NGRqQ1NvV2k2VjZ2ZDRaMjZJMEdnMDZCRkVRNXZmNlVWTkRiVHQzZVVsbG0rMkEKd1dBUW1zMG1k
TmxhK2pHTE1naFU0QlVYUWowa0kzZzRJckxzMS9aRkxrZGxvdDB2Y29wa01rbWZVNmtVT0ozT3li
TW9vd2JlUi8zbgpJMzllaU5ueTlWNGgya3N5VnF2VkVnNkgxOWw1WURHREFEYURGRW1TYnBqdFVk
aFhlZXJqTFRXOHVNUXJoVm1URFlpTUE4RTAzTDRCCmhyZE1xWGF3ZHlRQUFBQUFTVVZPUks1Q1lJ
ST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2Vz
L2J1dHRvbl9zb3VuZF9vbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJr
ZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRm
b3JtcGx1Z2luL2ltYWdlcy9idXR0b25fc291bmRfb24ucG5nCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FB
QUFOU1VoRVVnQUFBRElBQUFBeUNBWUFBQUZwT0xnbkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1w
d1lBQUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUJu
VkpSRUZVZU5waS9QLy9Qd01qSStNbUJrelEKeGdLUzZPM3Q5VVdYV2Jod29UQVRpUEg1ODJjd1Rr
cEtnclAvL1BuREFKYjg5T2tUUTMxOVBRUElDaTh2THpELzkrL2ZESENkYVdscApEUC8rL1dPWVBY
czJYQ2NMVEJJRWNuSnk0SGFDSkJtQnRDNFF0Mkp4TFFOQUFJRWtOMkdWQUhyaFB6WUpKcGlUaTRx
S3dMU0doZ2FZClpnRTVGYWlMQWVhTnZYdjNJblNBbkExelpWZFhGNWhtaklpSStFK1Nxd0FDQ0N3
eFpjb1VYd1lpd1p3NWM0NmhoQTR5U0UxTkJRY2oKT3NBSVVrVkZSWWFVbEJRdys4T0hEM0R4MXRa
V2h1cnFhcmdtY0NSOS9QZ1JqS09qbytFbWdpSk1VMU1UTFA3OSszZTRHbERNb3RpVQprWkVCMXdR
S3k5MjdkMk9JWXpnUEdjRENHUjJBYkFJSXdEb1ZuRUFRd3NEczRrZjhYeFYrZldzdjlxQlc0dXNh
OFdjWHRxSis3b3lnCjdDNElKMXdnaEF5SklSTUgyWHMzZi8zSzN0R28vc0NHa1ZJS2JEWFVXcmNh
VHB4dzlTWTNjTTdCRXg5KzRnUjB4aGh3enNGYTIxOUMKREpXRzBSZ0RvNDdrbkh1QmxCS0VFSFAw
d0RGU1NtYytsOGJZajBQSXpLLzR5SS8yOFc2MGV1OTcwemllVWdwaWpPdWx0ZGFRVXBwNQpDT0ZP
eWtwWmZ6dmNVcUlyK3dvZ2NPTGo1ZVdWN3U3dTltQ2dNZ0RHMisrOHZMd2RvSEFYYTJscDhTRFZP
MFFDVm4xOWZXRVc1TGlsCkJRQ1ZGa1Jid3NIQndWQmNYQXd1Y1NkUG5reTZKZmh5b0lTRUJFTldW
aGFjRDZxVjBOVUhCQVF3R0JrWk1kVFYxUkh2azdDd01BWmoKWTJPc2xvSXNnYW52N094a21EaHhJ
c1BLbFNzWjd0Njl5OURVMUFUUHdERHc5KzlmN0phQUpIQUJaRXRBUUU1T2p1SCsvZnZnWU1SbQpG
azZmeko4L0g0eEJBRmhjTWpBek0yTzFaTWFNR1F3WEwxNEVzMEhadDZhbUJyY2wrT0lFVmtnQTh4
R0RrSkFRQTdMNjA2ZFB3OVdCCkxLRTRkUUV6RlpnR3hSVXBTWjRrUzJEZzJMRmpKT1VUZU1TL2Uv
ZnVFN0I0NTZORlpueno1czBuZ0FEVVY3RnFoRUFRRmZHMHRBaWsKMVUrd3pDZkVVckFTN05KWUNE
WTJTV2xoWnlINEwva0tmOERHSm9XS3phRjk5aTJzOFM2N1JvMUNNakRjaW5QN25HSG16UXk0NjRu
bwo2MGtGMzVKRWVhR01tdWY1czZxcWw2TVI0amgrSitQQ2gyeFoxb01zeXhmMG82TTFUVk13KzZP
Q3ZGOHF2aU9FZ2dEMWRKQ3pQWkVaCnlCcDFIR2UxTGROTjRmSjlYeklNWTFkb1Y0VXJpaUpKMTNV
aFEyUGttdlBZNW5DQldSa0FBN2xYMjdicDBDY0tGeGNFUFFLS3FYRk8KODNNUXovT29EYzRZNERF
b0NrSEFrdmRGaEQwRGVnL0FKbjhvdk1QMmlIUFhkZlFkS2V4dmQwMmU4RjZJaE5rVVJTRVJwcmo1
ajJtYQozTHMyMXdtenhWZlBueEdScXFxNGQzRlRHTS9ZYlJCbm5pY1ExM1dscG1tK1FrSzhFdlVh
cmlkaEdOSmZNdjNkYkdMekw4YzZqTlVPCmttVVo5VVFVa2NVVUxzdFNTcEtFbTEzRE1FeG5UZFBv
OHJrcGhlZGExL1hrbWFoT3NDSzNiYnNNOGxOZndFd1ZCSUcweHZaWDJZV0YKR1B6MVo2bGVZUlgv
NzV1VzB2Zjk5U3hQeG5HODdsb3lkOGpicHdEdG1yOXFBa0VReGk5QkVTd09MUlFzck1UR3prWWtw
V2tGSzUvQgpXckRMS3dpV05xbDlBc1hHYUJkakp4WmlyWVUyYVZJSVlwUDdEZGxqRmZWTzR5VzVK
QU5iTGE0ek96dC92bS91SkQvbUkzbVEyN0lRCmRyQldxOTNGWWpIVFQ5cGJaZXl0WHE4L1d5Rzhs
WjQrbFVxWjBXalU5RHBhcmkzb2pPN2o4Zmcxb0VDZzE5SG9sYUM3UlB1dk1zVEwKSkp4T3A2V0I4
WkliOHRRajVYSlpqSUNlbnMxbS9ucGFrR0dWU3NVd1RkTTFFM1IxUXo3enRDRGNnQkE2ZnRIL3lN
M1p1VnhPUmtjdwo0ODFtMDFpdFZsL25rVVFpSVMzeUlmamk1QkhHTEhCd1NvYkRvYURCZUR3dVo3
YmJiV00wR2wzZkVDaE1HQzY3NFF3RWJCTGY2WS8wCnN6T1pqTjEvcnRmcm5UYSswV2dJbFpwTUpv
MWlzU2lHTHBkTFY0YmM2dTQvdGJoMUZDY09XRzZNMk1kOXJNbGt3cnhTakF1SHcvS2MKOVAxT3B5
T2NJMDhzbTgwNjZuVzJSOVFQTGduRy9iTVhpNFVvcWhLRXZtOTFtZ0lIejlYTGRSMjUxQkFkdnlx
cFZxdWlMRXJpQVgyZgpZUlhlWm8rNGNkSnJwNDY0U1pFRW53NmFDZFpTcVhRVzJrY0E2dHc2NHpq
bUZZcS9RUEw1dkl3U2tPbDBhc3puYy9lQXhLMExnYk1zCkpSUzVicmNyZ2NrZzhWam0yajhiTEg1
bzVzRm9nd0VlbnNJSWVKUXZiVkhJTEJSQkRBTGZxeUhCcWFkMVNGcXRscDJoQm9QQjk3VW8KRUJX
TXVNaEVwTlJJSkNLM2U4N1p2Vjd2NTNTLzhCVFFvQ3FvcWZxK2FWR09DZk9vZnp6eTV3M3hHMTdm
TjhUK1NDWVVDZ1VMaGNLOQpWUStDZmpEQWVrSGJmci8vdE5sc3RwUzVtNCt2MUJoYzh1bFMzR2NP
b1VJL1dqYTh2QU1OYkhSTHpseWxMZ0FBQUFCSlJVNUVya0pnCmdnPT0KCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5n
XzEucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5
IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFn
ZXMvbG9hZGluZ19idWZmZXJpbmdfMS5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlw
ZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdB
QUFDa0FBQUFwQ0FZQUFBSGZaekJnQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hS
RldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQThoSlJFRlVlTnBp
L1AvL1B3TTJ3QVJqZEhaMgpUZ05odUF4SVIwZEh4elFRRGNLdlhyMTZERFlGbVFQQ00yZk9YQUNp
R1dGMndJd3BMeS9QQXRHTXVDd0hDQ0NzRWt4STdQL29naUFCCnhsbXpaaTJBT3hGbSszOElRTEVN
ckJyZFRFWVlBeUNBY0RvTGJ6Z2hHZjEvKy9idG0yRnNWRm1neVJVVkZSMGdGMzM2OU9tTm1abVoK
RDBnTVJEOTY5T2dtU0J3cUQxR01oTUZnMjdadG0vOGpBRnllSkRjREJCRFJpcG5JQ2dWR1JrYXB4
NDhmM3dSaEVCc2pCRURZemMydApCQllLSVB3ZjRpWmptRHlLejRFU2J1aWhBUlJqZ3l1RUJRdVV4
aXJHQVBVMUcxUzNNTndxQmdZSDVQQmtRSkl3Um5kalltSmlIVFkzCmdoUkxnYUlRaEVGc3NtS0g2
QUFIQ0NDUzRwdmN0RXhiUTkzZDNVdVFNZ2tHVGtwS3FpUGFVR2c2Kzc5ejU4NXVLTjhkbXFjWklW
eEcKUitRU0RjaG53ekFWTFlreHdITGt6NTgvdjZITG9SVnljQUFxQUdGSkV6MHhzVUZMUnpoQUtx
TXdNQ3pCSVplb1dCTWV6UERTMHRJZQphT3JFeURCSVNmdy9WRjZCb0tIb1dSVVhRTTRTNkhqb3BG
T0FBS0s2UzVrR3ZiZnBheUF3eS9rZU9YSmt6Njlmdjc2Qk10djU4K2VQCmdjVHdtb2d0VFlIS2J2
U2NoQ1VMQ21QVml5M25RUE0zSE1DS2NXUXhhSFlrYkNCeWdiQVNDSUFXOENKYkJoSURXUWhrQjJ0
cmE4ZmgKTlJCV1hjRmNoU3ViQVlFdlRCMjZvZWdLalpFS0FUY2Noam1naHlteW9lQ2NBaXBBZ1RY
cldwQnFUMDlQSHhBTmJQWnNnZkpSWWhYYQpITUpRNStYbEZRdzA2eGZjWnFndC85R0tLZ2RDcmdT
eXJYQjZHZGxRYURoaERVUGtHRWVPTkZ6SkpoaUVRVEVKYW1CZ2kyVzBOaHZoCndoWlc1T05MaDlD
a3cwdVVnVlROS2VqcDdmRGh3M3RBcmdIaGMrZk9IY01YdGpTcENrWmdBUXNRb0IxcngwRVFDS0xC
R0l3RkZaV3gKc2ZJQ1dsRmhRN2NWZDZIM0FGNkJNMUVTRDZBSDRBTE9TNFprSEhkaEVTajhiRExa
aEYzWkp6UHo1czNPVWs0L29qei9KTWpsNkhnSgpnb2ltRFJnRGlVNjI0cVViV1VOMnA1QnFSaDNT
bGZRTzhvRDJOdUJJVFhtdUlYalcyT2l2OTh3QjRHSUlXcTBKaGc3OEh1OXgwYXZOCkZwNHV6WWkz
cTdJc3oyRVlydVVhZGR6WG9pZ3U2SDdJam1SYm5rOTRqblhIYStQSjNBMVpZWE1ydSsvZzZZVTk3
cGo0QythdHFFTEIKUWoyWEhkWTd4V3VINHFVQm9vRWFHbHRRSWJvRmxOVzFDNncxOW5CMXdHWnNl
Z0FIaWoxUkQ3akVCYzRYN0V2bVlsT1hwdEQ5cmRabQpGcENSK0VOcFhkZVZSUVBtWWsvc0szNDZ3
VEs0ZENoMXRmZDNjckQrMlkrSnlTZXdEQzVIQW5BWGtmZ21qdFNlU2phYTJYa1NNY3FKCmxDSGIy
V1dZVTN3NXJXZVZGRFZmUStZZlVSWkg2MGtsTU9SZDcyUUM0eTk2Zndya0ErTjlMZUNqV0dUZ0FB
QUFBRWxGVGtTdVFtQ0MKCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzIucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQv
cXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMi5wbmcK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDa0FBQUFwQ0FZQUFBSGZaekJnQUFBQUNY
QklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJX
Rm5aVkpsWVdSNWNjbGxQQUFBQS9WSlJFRlVlTnBpL1AvL1B3TTJ3QVJqZEhaMgpUbU5rWlBRRllq
YXdBRWhIUjBmSE5CQjk3dHk1WXpObnpsd0FZc04xbkQ5Ly9waWhvYUhWKy9mdnY4RjFBQUZJdXk5
TUp3Z3o0ckljCklJQ3dTakFoc2YrRFhBUmlzTUFFb0xyQU5CTk9Ed0cxK2NGVTQ3UUlJSUJ3T2d0
dk9DRTU1UC8yN2RzM3c5aW9zbENmZzF3S0Nqc2sKUHNPMmJkczIvNGNBU0lnaFMwSWwvajk2OU9q
bWZ3UmdJQmlVMkFCQUFCR3RtSW1zVUFBR3N0VGp4NDl2QW1rRmFNcnh4VkNZbEpSVQpCM1RHVXdF
QkFXRWdseGZJM3BTWW1HaUlOYWlBWERlb202V0EyQUhaOThpZWdjY3JXb1F3WW5Pakc4aWRVTFlE
MWxoeWMzTXJnVnF2CisrblRwemNnTnRDTmRSZ3hCRXJZVUt3QWlpR1FPOG1LSGFJREhDQ0FTSXB2
Y3RNeWJRMEZwUUNrVFBJZm1xMk5rZm1nb2dSZThPREkKU0xBWWtQcVBuREVncVFTckhGUmVEY01N
ZEFGWVpvUEdQUU11REVzYlVQVW9jamk5ejg3T3prVjJvQkx5UHRTTFVranlicmprY0hvZgpWR1JE
Q3lsa2pjYm9GaUZuQ1hROGROSXBRQUJSM2FWTWc5N2I5RFVRVkEyQThqT3Nnb1FXd2I3SW1HQkNo
MGFTOEt0WHJ4NGpwMEZRCjVZbFVnY0xTYWpEQjdBaTBsZmZuejUrUFJVVkZaV0JpTjIvZXZIanAw
cVhIeU9wKy9mcjFIVWp0SXVqQ2xVQUFjd0dJRGNwRldLcDQKdUt2eFprT281dis0U2hlUUFTQnZJ
amNMb0xVcFRnT05rUlM2NGNxM1NMVXNMTS9qREVNcEpQWURQQW5nRmc0OUdBWStRMklyNERGUQpE
WWNlL0dFSUNpOXNBVTkwR0lJd3ROR0xOU1pCbXBGVEFjRllocmtTbUE2L0lXc0NXWUxXNFBzUFVv
UHVPbHoxakM4Ykd4c25zb0NzCnJLd3dFTVBEN2ZYcjEwK0E5WkFzMElEUDZKcFpzQmo0QzlwK2hv
R2ZRRmZtZnY3OCtlM0ZpeGN2Mk5yYVRnUWF0Sm1rUnYxb0FVc1MKQUFqUWpyWGlJQXdFVVVOd0tB
U0JBOUFhZ3NDaFVEZ1VaNmhDTnlrV0RJSXo5QUNFSXlCSW1xQ1J2UUdLQzJCZ0hwbVN5V1M3Wldr
SgpJVERKQmtRWlh1ZjMzdXhiNlBRcjZQa25RZFpLMXd1eEczMjBNVEhFMUQxVEdSMHFRMm1UeGpu
Y0FqQVRqRGc1OHZROEJlOW94dFFHCmZXclM4dnJVSENMV0pFRTdJMkNSSHArdUJoM2grLzZTdnVJ
bExwVkVFcEhUNmtmU1d4UkZLN0Ezb3NjcHZ4OWJKT0VQZnAvNi95Y0EKanJPTlNCcUxvYTdsZHcr
UTRsN3BhbUMvU1NtUVVCVkprdXkwOHpBTTExS3Q1V25QSUFqbUVCRjhwVlhuL2NlNUxvdEFqblJ6
c0hvWgp1RFljKyt1bGFYbzBiSW5XYUJiT1NVN0paNjFFdWh1Y3hpbW50Vm5ncTQ0R3F6emR0c1pC
VTJSN09NL0Zqc1ZIVjJyUFNodEhBczBiClFSSWt5L2NCbnpFaXJ2WHNXMGFRdUhDZW1vcmVoV0d5
NktITGk4ckRxWEdJYVhxVTFqMDl2UFU4ci85SzNVTjdiOGlneTBuSXQrSTQKWHBDLzgwZjBKSUVZ
SWtMQUpjN0p0RjM4UmU4ZlpJN2RBQktvS2hIV0JneHhBQUFBQUVsRlRrU3VRbUNDCgpJbmRleDog
U291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2FkaW5nX2J1
ZmZlcmluZ18zLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBh
IGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzMucG5nCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpt
aW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFO
U1VoRVVnQUFBQ2tBQUFBcENBWUFBQUhmWnpCZ0FBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lB
QUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUErNUpS
RUZVZU5waS9QLy9Qd00yd0FSanZINzkKK3ZHc1diTVd3R1ZBT2pvNk9xYUJhR1EyRXdNdWdLenkx
YXRYajJGOFJseVdBd1FRVmdsazgvK2pDLzQzTnpmM2hVa3dFVElUeEdCRQpWOGtJWXdBRUVOeTl5
TGlpb3FJRG16aTZ3UCtaTTJjdWVQVG8wYzMvQ0lCVjhmOXQyN1p0UnBhRTh2L2pOQmtFUG4zNjlB
WmtBejZUCjRiaW5wMmNTTm5HQUFNSVo3dmlDSEJKR2pJeHNCQldDRkFGdCtQbjQ4ZU9iUUxZQzFy
U1FtSmhZQjhJd1Q0Rm9LQjh6cUlENkhPQVMKRVBaL2JKNzVqeEtOZU9JYTVFWTNiR3dVaGU3dTdx
VkEwM2YrK3ZYckc4Z2tvUHNzUUdKWUV3b1FTTUhpSGNobUl4amcwR0Q2UlREaApZd01BQVVTMFFs
SUFFMEZiZ1U0R2xRZmJ0Mi9mVExTcDJGSWcxUFhHMExJREswQk9EWVJ5SFRqMDBmUXpnUElKTEpN
aHBaci8wQmlTCkltZ29MRHFoNlJPblQyRHBGNm9lUlk2SmdSYUFrUGVCZkRkWW1RSUtCaUJmbUdU
dnc3Q2JtMXNKcmtnQ1JTQW9Jb21PS0Z3WTVGSlEKM1lDZWRTZ3F2MGdCQUFGRWRVT1o2SjQ5UVVC
SFJ5Y09tRTJGS2NxYU1LeXRyUjJISzdtUUhOc3d3MkRnM0xseng0QUcrNUpzSUNneApveWRvWkFC
TlJzTEVGaHk4UDMvKy9BYkNRSFl3ekpBYk4yNWNRRFlVS3M5TDBFQ2thaHlXT3h4Z1lRaEszQ3VC
QUNhUDNnVEFNQkJxCjQzLzAwZ1VJckpCZGc5emdRSGNsUnFHTHBOQUJUK0hzZ0tUT0dGK1JKb1hF
dm9VbnRkM0NvUWZEd0dmSTZSbGZXc2VoaCtndzVBV0YKSThsaENNTG9zUWcxVEFvV3JzanlVRGJC
ZE1nR1NtUElhUTdOUmNGSTZaU042SndDYlhCakJVZzVpYlM4REtwZkRoOCt2QWRXODRFQQpOSDh6
VUZRVndNS1FrR0drR0NoTWpHRTBxVmVvWGdVQUJLakdpbkVUQm9KZ3d3K1FHNVNhRDdoS2h4OXdW
WnA4eEJVMVhSNUN3MTlvClhFWktFWW5DNlZJZzNNQ090Q2V0Um1kODVKYVFXRnBaeHZaNjJMMmJu
ZDI3Vkw2SDFLbnNmeXlTYzZ6cmVEaElBRVBCbFQzMkxpeXcKayt1Rko4aFpLVGhaK2E4Q2JsTlYx
WlArdkJkN2xuc0hPWCtKSFdSSmZidUswVnpEdHJ6R1RseCtsV2REcWd5N2NFWGtDM1FlWURhYwp3
YnVtNGM0K0FGamZuN3VDUkFRNGF1Wmp3WUxWaUsxZ3VFOXpDVlpNd1FVa0hIRWxpMlZRN2kydHhJ
Z3RHZ3RNUEdkTEtLbXdVQVFTCnppRSsyVGxHUERudEI1ZHRIUTJkRStKMldRSXlzRk9rNzFxek5l
R3Y1dlRuUkhPS0owL0RNQngvb2FpY2ZreEJTQU8wQ2tlemJkdTMKVzZrRXorTTk5Z1gvUmVtT0ti
ZUNpalpPelRySk5QZDJPbGFuTmc3OHhxSEFYU2pJcmxHTkxJWnFLOXNPS2RnQUttS0djS1VnSnZN
VQpIVTBkQ3ZhRmlzSGN2ZUpZS2tIVThPSFVNaGdqN2x4MTZ3SnlCRFJtdkRYQTIzUkhjTGR5S3R1
c2xEdDB5dm9CaXhLdDcvdlBwbW5XClhkZHRlUXI3SjVSNUZMMGU0UDVWKzNBQlp0eStiNldSUTM0
QUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZv
cm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzQucG5nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90
IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBh
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfNC5w
bmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDa0FBQUFwQ0FZQUFBSGZaekJnQUFB
QUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNC
SmJXRm5aVkpsWVdSNWNjbGxQQUFBQTlOSlJFRlVlTnBpL1AvL1B3TTJ3QVFpR0JrWgoyVG83TzZl
Qk1Gd0dxc1AzM0xsengwRHNqbzZPYVdBeFpBNUlFcVFJTGdHVEJHR2dCQnVJejRqTGNvQUF3aXJC
aE1UK2p5NElFbUNFClNURGg5QkNTS2taMGxZd3dCa0FBNFhRV1BtTkJZZVVMTmZyLzl1M2JOOFBZ
S0twaElRSEUvN2R0MjdZWmljOEE1ZitIOFpFVk0wQWwKL2lNcCtnOExYN3hCaVEwQUJCRFJpcG5J
Q1FVMklKWjYvUGp4VFJBR3NYR0dBQWg4K3ZUcERRaUQySW1KaVhYWWZQOGZKVmdZR0J5UQorY2ll
K1k4Y2plaGlLSjRCdXNzTlczcENjU1BVUFNodXhCbERRQ0QxNk5Ham15QU1Zc01TT1VteFEzU0FB
d1FRU2ZGTmNpelMxRkJRClJqbC8vdnl4cEtTa09xUk1nb0doOHRnQld0NWdnT2FGLzBoNXd3MU4z
ZzFOWGdyRERDeUdLZ0N4TVJEclFxTVVReE1JdzlJR0tPb0oKR2dwVjlCK3FDWnVsVWxDc0M3VmNn
UmlYU3BIb2ZWK0NocUpuQTF3QUpJOWMzaVBqb1pOT0FRS0k2aTVsR3ZUZVpxSkhYbGREei9lLwpm
djM2QnNJZ05yVFNaQ0E2bjBNVGIvQ3JWNjhlNDBxUElEbWdHbUZzYVJsYkxHTUlBQ3V1V3lCYVZs
WVc3bnFnaTcrenM3TUxBUFgvCkl1aENHRmdKQk1qMUFJZ05Fa09XSnlZYi9rZkx1OEc0Q2hXb1BC
dWh3c0lZaW1FbGpUQVdOUTVJQmhyak5CQzU0TVZWUHFLWFVPZ0YKQlF0YStEOURZcXVoOFVISlNC
aElzVVBaSnRBNE9Jc3pVb0NBRjJZejFoSWFFcDRZd1l3M0RKSGJZZGhpR1ZrZW00RVk2UkRvRmQ2
ZgpQMysrWkdOajQ4U1hEckUxV0hHbFE1Q3dNQkU1Slpnb0w2UEhPclQ5L3gvbzZtL294VCtvOHFK
NVZUQUNDMWlBQUtOSmRUb2txdWNSCjZVZ1dpdE1Mc0ZRQlVwS2dNaEJhMUNNWHNwK0IrRGt3U1gy
bXlCSjhCUVZ5WVFFcWFVQmxJOVF4dnFBeUVsUjQvQ2NDZ05TQjFJUDAKUVF0MEJsSXdVWTZFV1hi
anhvMEx4RG9NbjROQkRXTmNEUkdLSFlrTmdLcTNpb3FLRGxEdGpkUnBBZEVPcGFXbFBjak5CQ3ox
Z0MvTgpIWW1jREFpWW9ZYmNVRUllTFVEdjIyRER4R1Njbjl1M2I5K0NTeEtZMWhKV3IxNnREV1Ey
NFVuM3Q0QVpMQmJZa0wzZjN0NWVEaFBuCjVlVVZQbno0Y0JsUTdnRklEVm1GT1ZDekZkQVJsV2p0
MHJmcDZla05RSDBQeUNnSmpJSFJ2d3hMbXpZQWFONHVjb3NnSG1jZ3dOSm8KQWJYUkhwQlJtTHdG
eHNweG9DUFJRKzBMSmVYa2cxT25UaDJ6c2JGeGhnbUFRZ0dZSVNLQm9YSVpvMFdQQnRMUzBpb0RB
d090a0pJRwpoaG92TDYvSlFIT09VVnhPWWl0Mm9PMUxOUUo2UWVWcU1Lam93cFg1aU1uaHhKVlRR
SU53TlN0QlJReW9xQUhsVXFST0JvaDJ3MWNFClVkMlJzUFl2cUJDbVJtR09ITEpVZFNSeVA0WFNh
aEdXREhBTngxQzlUWTdXd0lEM3pLalp3Qmh0OUk0b1J3SUFULzJzeTM4UEJnSUEKQUFBQVNVVk9S
SzVDWUlJPQoK
</data>
<flag name="review"
          id="84150"
          type_id="1"
          status="-"
          setter="menard"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91542</attachid>
            <date>2011-04-28 12:56:48 -0700</date>
            <delta_ts>2011-05-11 08:42:48 -0700</delta_ts>
            <desc>platformpluginV21</desc>
            <filename>58435v21.patch</filename>
            <type>text/plain</type>
            <size>62705</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NTIyNykKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDQtMjggIFlp
IFNoZW4gIDx5aS40LnNoZW5Abm9raWEuY29tPiwgSHVpIEh1YW5nICA8aHVpLjIuaHVhbmdAbm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDM1CisKKyAgICAgICAgVXBzdHJlYW0g
U3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4gd2l0aCBodG1sNSB2aWRlbyBwbGF5ZXIuCisKKyAgICAg
ICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6SFRNTDVGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJG
dWxsU2NyZWVuKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1
bGxTY3JlZW4pOgorICAgICAgICAoSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvblBsYXll
ckVycm9yKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvbk1l
ZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChIVE1MNVZpZGVvUGx1Z2luOjpzdXBwb3J0c0V4
dGVuc2lvbik6CisgICAgICAgIChIVE1MNVZpZGVvUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24pOgor
ICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRlb1BsdWdpbi5oOiBBZGRl
ZC4KKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsU2Ny
ZWVuRm9yVmlkZW9QbGF5YmFjayk6CisgICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXI6OmlzRnVsbFNjcmVlbik6CisgICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6
OnVwZGF0ZVNjcmVlblJlY3QpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRN
TDVWaWRlb1dpZGdldC5jcHA6IEFkZGVkLgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6SFRN
TDVWaWRlb1dpZGdldCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0Ojp+SFRNTDVWaWRlb1dp
ZGdldCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpzZXREdXJhdGlvbik6CisgICAgICAg
IChIVE1MNVZpZGVvV2lkZ2V0Ojptb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoSFRNTDVWaWRl
b1dpZGdldDo6b25QbGF5ZXJTdG9wcGVkKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9u
UGxheWVyRXJyb3IpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25FbmRPZk1lZGlhKToK
KyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9uQnVmZmVyaW5nTWVkaWEpOgorICAgICAgICAo
SFRNTDVWaWRlb1dpZGdldDo6b25CdWZmZXJlZE1lZGlhKToKKyAgICAgICAgKEhUTUw1VmlkZW9X
aWRnZXQ6Om9uQ29udHJvbENsaWNrZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25Q
b3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25TbGlkZXJNb3Zl
ZCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpvbkNsb3NlQ2xpY2tlZCk6CisgICAgICAg
IChIVE1MNVZpZGVvV2lkZ2V0OjpzaG93RnVsbFNjcmVlbik6CisgICAgICAgIChIVE1MNVZpZGVv
V2lkZ2V0OjpzZXRWb2x1bWUpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRN
TDVWaWRlb1dpZGdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L092ZXJsYXlXaWRnZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Ok92ZXJs
YXlXaWRnZXQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6fk92ZXJsYXlXaWRnZXQpOgorICAg
ICAgICAoT3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdl
dDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2V0Vm9sdW1lKToKKyAg
ICAgICAgKE92ZXJsYXlXaWRnZXQ6Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChPdmVybGF5
V2lkZ2V0OjpvblBsYXllclN0b3BwZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25QbGF5
ZXJFcnJvcik6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvbkVuZE9mTWVkaWEpOgorICAgICAg
ICAoT3ZlcmxheVdpZGdldDo6b25CdWZmZXJpbmdNZWRpYSk6CisgICAgICAgIChPdmVybGF5V2lk
Z2V0OjpvbkJ1ZmZlcmVkTWVkaWEpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6dGltZVRvU3Ry
aW5nKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OmFwcGx5U3R5bGVTaGVldCk6CisgICAgICAg
IChPdmVybGF5V2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKToKKyAgICAgICAgKE92ZXJsYXlXaWRn
ZXQ6Om9uU2xpZGVyTW92ZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25Tb3VuZENsaWNr
ZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25DbG9zZUNsaWNrZWQpOgorICAgICAgICAo
T3ZlcmxheVdpZGdldDo6b25Wb2x1bWVTbGlkZXJSZWxlYXNlZCk6CisgICAgICAgIChPdmVybGF5
V2lkZ2V0OjpvblZvbHVtZVNsaWRlck1vdmVkKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9u
VGltZXJUaW1lb3V0KToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OnNob3dGdWxsU2NyZWVuKToK
KyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuaDogQWRkZWQu
CisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBsYXllckJ1dHRvbjo6UGxheWVyQnV0dG9uKToKKyAgICAgICAgKFBsYXll
ckJ1dHRvbjo6ZXZlbnQpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVy
QnV0dG9uLmg6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVy
TGFiZWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBsYXllckxhYmVsOjpQbGF5ZXJMYWJlbCk6Cisg
ICAgICAgIChQbGF5ZXJMYWJlbDo6b25QbGF5ZXJFcnJvcik6CisgICAgICAgIChQbGF5ZXJMYWJl
bDo6c3RhcnRCdWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFiZWw6OnN0b3BC
dWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFiZWw6Om9uQW5pbWF0aW9uVGlt
ZW91dCk6CisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHA6Cisg
ICAgICAgIChXZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgICogc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9pbWFnZXM6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vaW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZzogQWRkZWQuCisgICAgICAgICogc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZzogQWRkZWQuCisgICAg
ICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZzogQWRk
ZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BsYXku
cG5nOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0
b25fc291bmRfb2ZmLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdp
bi9pbWFnZXMvYnV0dG9uX3NvdW5kX29uLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMS5wbmc6IEFkZGVkLgorICAg
ICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzIu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2Fk
aW5nX2J1ZmZlcmluZ18zLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBs
dWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfNC5wbmc6IEFkZGVkLgorICAgICAgICAqIHN5
bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOgorICAgICAgICAqIHN5bWJp
YW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucXJjOiBBZGRlZC4KKyAgICAgICAgKiBz
eW1iaWFuL3BsYXRmb3JtcGx1Z2luL3FzczogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9xc3MvT3ZlcmxheVdpZGdldC5xc3M6IEFkZGVkLgorCiAyMDExLTA0LTI4ICBZ
YWVsIEFoYXJvbiAgPHlhZWwuYWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBbmRyZWFzIEtsaW5nLgpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3Jt
cGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvUGx1Z2luLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVv
UGx1Z2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaW5jbHVkZSAiSFRNTDVWaWRlb1BsdWdpbi5oIgorCisjaW5jbHVkZSA8UXRQbHVnaW4+
CisKK0hUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6SFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5k
bGVyKCkKKyAgICA6IG1fdmlkZW9XaWRnZXQoMCkKKyAgICAsIG1fbWVkaWFQbGF5ZXIoMCkKKyAg
ICAsIG1fZnVsbFNjcmVlbihmYWxzZSkKK3sKKyAgICBtX3NhdmVkT3JpZW50YXRpb24gPSBDQWtu
QXBwVWk6OkVBcHBVaU9yaWVudGF0aW9uVW5zcGVjaWZpZWQ7Cit9CisKK3ZvaWQgSFRNTDVGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxTY3JlZW4oUU1lZGlhUGxheWVyICpwbGF5ZXIp
Cit7CisgICAgaWYgKCFwbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlkZW9XaWRn
ZXQgPSBuZXcgSFRNTDVWaWRlb1dpZGdldChwbGF5ZXItPmR1cmF0aW9uKCkgLyAxMDAwKTsKKyAg
ICBpZiAoIW1fdmlkZW9XaWRnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIENBa25BcHBVaSog
YXBwVWkgPSBkeW5hbWljX2Nhc3Q8Q0FrbkFwcFVpKj4oQ0Vpa29uRW52OjpTdGF0aWMoKS0+QXBw
VWkoKSk7CisgICAgaWYgKGFwcFVpKSB7CisgICAgICAgIG1fc2F2ZWRPcmllbnRhdGlvbiA9IGFw
cFVpLT5PcmllbnRhdGlvbigpOworICAgICAgICBhcHBVaS0+U2V0T3JpZW50YXRpb25MKENBa25B
cHBVaTo6RUFwcFVpT3JpZW50YXRpb25MYW5kc2NhcGUpOworICAgIH0KKworICAgIG1fbWVkaWFQ
bGF5ZXIgPSBwbGF5ZXI7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwocG9zaXRp
b25DaGFuZ2VkKHFpbnQ2NCkpLCBtX3ZpZGVvV2lkZ2V0LCBTTE9UKG9uUG9zaXRpb25DaGFuZ2Vk
KHFpbnQ2NCkpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChkdXJhdGlvbkNo
YW5nZWQocWludDY0KSksIG1fdmlkZW9XaWRnZXQsIFNMT1Qoc2V0RHVyYXRpb24ocWludDY0KSkp
OworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRTWVkaWFQ
bGF5ZXI6OlN0YXRlKSksIHRoaXMsIFNMT1Qob25QbGF5ZXJTdGF0ZUNoYW5nZWQoUU1lZGlhUGxh
eWVyOjpTdGF0ZSkpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChlcnJvcihR
TWVkaWFQbGF5ZXI6OkVycm9yKSksIHRoaXMsIFNMT1Qob25QbGF5ZXJFcnJvcihRTWVkaWFQbGF5
ZXI6OkVycm9yKSkpOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKG1lZGlhU3Rh
dHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKSksIHRoaXMsIFNMT1Qob25NZWRp
YVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cykpKTsKKyAgICBjb25uZWN0
KG1fdmlkZW9XaWRnZXQsIFNJR05BTChwb3NpdGlvbkNoYW5nZWRCeVVzZXIocWludDY0KSksIG1f
bWVkaWFQbGF5ZXIsIFNMT1Qoc2V0UG9zaXRpb24ocWludDY0KSkpOworICAgIGNvbm5lY3QobV92
aWRlb1dpZGdldCwgU0lHTkFMKGNsb3NlQ2xpY2tlZCgpKSwgdGhpcywgU0lHTkFMKGZ1bGxTY3Jl
ZW5DbG9zZWQoKSkpOworICAgIGNvbm5lY3QobV92aWRlb1dpZGdldCwgU0lHTkFMKG11dGVkKGJv
b2wpKSwgbV9tZWRpYVBsYXllciwgU0xPVChzZXRNdXRlZChib29sKSkpOworICAgIGNvbm5lY3Qo
bV92aWRlb1dpZGdldCwgU0lHTkFMKHZvbHVtZUNoYW5nZWQoaW50KSksIG1fbWVkaWFQbGF5ZXIs
IFNMT1Qoc2V0Vm9sdW1lKGludCkpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05B
TChwYXVzZUNsaWNrZWQoKSksIG1fbWVkaWFQbGF5ZXIsIFNMT1QocGF1c2UoKSkpOworICAgIGNv
bm5lY3QobV92aWRlb1dpZGdldCwgU0lHTkFMKHBsYXlDbGlja2VkKCkpLCBtX21lZGlhUGxheWVy
LCBTTE9UKHBsYXkoKSkpOworCisgICAgbV9tZWRpYVBsYXllci0+c2V0VmlkZW9PdXRwdXQobV92
aWRlb1dpZGdldCk7CisKKyAgICBtX3ZpZGVvV2lkZ2V0LT5zZXRWb2x1bWUobV9tZWRpYVBsYXll
ci0+dm9sdW1lKCkpOworICAgIG1fdmlkZW9XaWRnZXQtPnNldFNpemVQb2xpY3koUVNpemVQb2xp
Y3k6Oklnbm9yZWQsIFFTaXplUG9saWN5OjpJZ25vcmVkKTsKKyAgICBtX3ZpZGVvV2lkZ2V0LT5z
aG93RnVsbFNjcmVlbigpOworICAgIG1fZnVsbFNjcmVlbiA9IHRydWU7CisKKyAgICAvLyBIYW5k
bGUgY3VycmVudCBNZWRpYSBTdGF0dXMgYW5kIE1lZGlhIFBsYXllciBlcnJvci4KKyAgICBvbk1l
ZGlhU3RhdHVzQ2hhbmdlZChtX21lZGlhUGxheWVyLT5tZWRpYVN0YXR1cygpKTsKKyAgICBvblBs
YXllckVycm9yKG1fbWVkaWFQbGF5ZXItPmVycm9yKCkpOworfQorCit2b2lkIEhUTUw1RnVsbFNj
cmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1bGxTY3JlZW4oKQoreworICAgIG1fdmlkZW9XaWRnZXQt
PmhpZGUoKTsKKyAgICBtX21lZGlhUGxheWVyLT5kaXNjb25uZWN0KG1fdmlkZW9XaWRnZXQpOwor
ICAgIG1fbWVkaWFQbGF5ZXItPmRpc2Nvbm5lY3QodGhpcyk7CisgICAgZGVsZXRlIG1fdmlkZW9X
aWRnZXQ7CisgICAgbV92aWRlb1dpZGdldCA9IDA7CisgICAgaWYgKG1fbWVkaWFQbGF5ZXItPnN0
YXRlKCkgPT0gUU1lZGlhUGxheWVyOjpQbGF5aW5nU3RhdGUpCisgICAgICAgIG1fbWVkaWFQbGF5
ZXItPnBhdXNlKCk7CisgICAgbV9mdWxsU2NyZWVuID0gZmFsc2U7CisKKyAgICBDQWtuQXBwVWkq
IGFwcFVpID0gZHluYW1pY19jYXN0PENBa25BcHBVaSo+KENFaWtvbkVudjo6U3RhdGljKCktPkFw
cFVpKCkpOworICAgIGlmIChhcHBVaSkgCisgICAgICAgIGFwcFVpLT5TZXRPcmllbnRhdGlvbkwo
bV9zYXZlZE9yaWVudGF0aW9uKTsKK30KKwordm9pZCBIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXI6Om9uUGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvciBlcnJvcikKK3sKKyAgICBzd2l0
Y2ggKGVycm9yKSB7CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6Ok5vRXJyb3I6CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fdmlkZW9XaWRnZXQtPm9uUGxheWVyRXJyb3Io
KTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvblBsYXll
clN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlIHN0YXRlKQoreworICAgIGlmIChzdGF0
ZSA9PSBRTWVkaWFQbGF5ZXI6OlN0b3BwZWRTdGF0ZSkKKyAgICAgICAgbV92aWRlb1dpZGdldC0+
b25QbGF5ZXJTdG9wcGVkKCk7Cit9CisKK3ZvaWQgSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVy
Ojpvbk1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzIHN0YXR1cykK
K3sKKyAgICBzd2l0Y2ggKHN0YXR1cykgeworICAgIGNhc2UgUU1lZGlhUGxheWVyOjpFbmRPZk1l
ZGlhOgorICAgICAgICBtX3ZpZGVvV2lkZ2V0LT5vbkVuZE9mTWVkaWEoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6OlN0YWxsZWRNZWRpYToKKyAgICBjYXNlIFFNZWRp
YVBsYXllcjo6TG9hZGluZ01lZGlhOgorICAgIGNhc2UgUU1lZGlhUGxheWVyOjpCdWZmZXJpbmdN
ZWRpYToKKyAgICAgICAgbV92aWRlb1dpZGdldC0+b25CdWZmZXJpbmdNZWRpYSgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFFNZWRpYVBsYXllcjo6TG9hZGVkTWVkaWE6CisgICAgY2FzZSBR
TWVkaWFQbGF5ZXI6OkJ1ZmZlcmVkTWVkaWE6CisgICAgICAgIG1fdmlkZW9XaWRnZXQtPm9uQnVm
ZmVyZWRNZWRpYSgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuOworfQorCitib29sIEhUTUw1VmlkZW9QbHVnaW46OnN1cHBv
cnRzRXh0ZW5zaW9uKEV4dGVuc2lvbiBleHRlbnNpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoIChl
eHRlbnNpb24pIHsKKyAgICBjYXNlIEZ1bGxTY3JlZW5WaWRlb1BsYXllcjoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworUU9iamVjdCogSFRNTDVWaWRlb1BsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbiBl
eHRlbnNpb24pIGNvbnN0Cit7CisgICAgSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKiB2aWRl
b0hhbmRsZXIgPSAwOworICAgIHN3aXRjaCAoZXh0ZW5zaW9uKSB7CisgICAgY2FzZSBGdWxsU2Ny
ZWVuVmlkZW9QbGF5ZXI6CisgICAgICAgIHZpZGVvSGFuZGxlciA9IG5ldyBIVE1MNUZ1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gdmlkZW9IYW5kbGVyOworfQpJbmRleDogU291cmNlL1dl
YktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRl
b1BsdWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRm
b3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSFRNTDVWaWRlb1BsdWdpbl9oCisjZGVmaW5l
IEhUTUw1VmlkZW9QbHVnaW5faAorCisjaW5jbHVkZSAiSFRNTDVWaWRlb1dpZGdldC5oIgorI2lu
Y2x1ZGUgInF3ZWJraXRwbGF0Zm9ybXBsdWdpbi5oIgorI2luY2x1ZGUgPFFNZWRpYVBsYXllcj4K
KworI2luY2x1ZGUgPGFrbmFwcHVpLmg+CisjaW5jbHVkZSA8YWtuZW52Lmg+CisjaW5jbHVkZSA8
ZWlrYXBwdWkuaD4KKyNpbmNsdWRlIDxlaWtlbnYuaD4KKworY2xhc3MgSFRNTDVGdWxsU2NyZWVu
VmlkZW9IYW5kbGVyIDogcHVibGljIFFXZWJGdWxsU2NyZWVuVmlkZW9IYW5kbGVyIHsKKyAgICBR
X09CSkVDVAorcHVibGljOgorICAgIEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworICAg
IGJvb2wgcmVxdWlyZXNGdWxsU2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KKyAgICBib29sIGlzRnVsbFNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIG1fZnVsbFNj
cmVlbjsgfQorICAgIHZvaWQgdXBkYXRlU2NyZWVuUmVjdChjb25zdCBRUmVjdCYpIHsgfQorCitw
dWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFFNZWRpYVBs
YXllciAqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIG9u
UGxheWVyU3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3RhdGUpOworICAgIHZvaWQgb25QbGF5
ZXJFcnJvcihRTWVkaWFQbGF5ZXI6OkVycm9yKTsKKyAgICB2b2lkIG9uTWVkaWFTdGF0dXNDaGFu
Z2VkKFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpOworCitwcml2YXRlOgorICAgIEhUTUw1Vmlk
ZW9XaWRnZXQqIG1fdmlkZW9XaWRnZXQ7CisgICAgUU1lZGlhUGxheWVyKiBtX21lZGlhUGxheWVy
OworICAgIGJvb2wgbV9mdWxsU2NyZWVuOworICAgIENBa25BcHBVaTo6VEFwcFVpT3JpZW50YXRp
b24gbV9zYXZlZE9yaWVudGF0aW9uOworfTsKKworY2xhc3MgSFRNTDVWaWRlb1BsdWdpbiA6IHB1
YmxpYyBRT2JqZWN0LCBwdWJsaWMgUVdlYktpdFBsYXRmb3JtUGx1Z2luIHsKKyAgICBRX09CSkVD
VAorICAgIFFfSU5URVJGQUNFUyhRV2ViS2l0UGxhdGZvcm1QbHVnaW4pCitwdWJsaWM6CisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRXh0ZW5zaW9uKEV4dGVuc2lvbikgY29uc3Q7CisgICAgdmly
dHVhbCBRT2JqZWN0KiBjcmVhdGVFeHRlbnNpb24oRXh0ZW5zaW9uKSBjb25zdDsKK307CisKKyNl
bmRpZiAvKiBIVE1MNVZpZGVvUGx1Z2luX2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvV2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRlb1dpZGdldC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vSFRNTDVWaWRlb1dpZGdldC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgIkhUTUw1VmlkZW9XaWRnZXQuaCIKKworSFRNTDVW
aWRlb1dpZGdldDo6SFRNTDVWaWRlb1dpZGdldChpbnQgZHVyYXRpb24sIFFXaWRnZXQgKnBhcmVu
dCkKKyAgICA6IFFWaWRlb1dpZGdldChwYXJlbnQpCit7CisgICAgbV9vdmVybGF5V2lkZ2V0ID0g
bmV3IE92ZXJsYXlXaWRnZXQoZHVyYXRpb24sIHRoaXMpOworICAgIGNvbm5lY3QobV9vdmVybGF5
V2lkZ2V0LCBTSUdOQUwoY29udHJvbENsaWNrZWQoYm9vbCkpLCB0aGlzLCBTTE9UKG9uQ29udHJv
bENsaWNrZWQoYm9vbCkpKTsKKyAgICBjb25uZWN0KG1fb3ZlcmxheVdpZGdldCwgU0lHTkFMKHNs
aWRlck1vdmVkKGludCkpLCB0aGlzLCBTTE9UKG9uU2xpZGVyTW92ZWQoaW50KSkpOworICAgIGNv
bm5lY3QobV9vdmVybGF5V2lkZ2V0LCBTSUdOQUwoY2xvc2VDbGlja2VkKCkpLCB0aGlzLCBTTE9U
KG9uQ2xvc2VDbGlja2VkKCkpKTsKKyAgICBjb25uZWN0KG1fb3ZlcmxheVdpZGdldCwgU0lHTkFM
KG11dGVkKGJvb2wpKSwgdGhpcywgU0lHTkFMKG11dGVkKGJvb2wpKSk7CisgICAgY29ubmVjdCht
X292ZXJsYXlXaWRnZXQsIFNJR05BTCh2b2x1bWVDaGFuZ2VkKGludCkpLCB0aGlzLCBTSUdOQUwo
dm9sdW1lQ2hhbmdlZChpbnQpKSk7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zZXRTaXplUG9saWN5
KFFTaXplUG9saWN5OjpJZ25vcmVkLCBRU2l6ZVBvbGljeTo6SWdub3JlZCk7Cit9CisKK0hUTUw1
VmlkZW9XaWRnZXQ6On5IVE1MNVZpZGVvV2lkZ2V0KCkKK3sKKyAgICBkZWxldGUgbV9vdmVybGF5
V2lkZ2V0OworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6OnNldER1cmF0aW9uKHFpbnQ2NCBk
dXJhdGlvbikKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPnNldER1cmF0aW9uKGR1cmF0aW9uIC8g
MTAwMCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6bW91c2VQcmVzc0V2ZW50KFFNb3Vz
ZUV2ZW50ICopCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zaG93RnVsbFNjcmVlbigpOworfQor
Cit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uUGxheWVyU3RvcHBlZCgpCit7CisgICAgbV9vdmVy
bGF5V2lkZ2V0LT5vblBsYXllclN0b3BwZWQoKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0
OjpvblBsYXllckVycm9yKCkKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPm9uUGxheWVyRXJyb3Io
KTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvbkVuZE9mTWVkaWEoKQoreworICAgIG1f
b3ZlcmxheVdpZGdldC0+b25FbmRPZk1lZGlhKCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdl
dDo6b25CdWZmZXJpbmdNZWRpYSgpCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5vbkJ1ZmZlcmlu
Z01lZGlhKCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25CdWZmZXJlZE1lZGlhKCkK
K3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPm9uQnVmZmVyZWRNZWRpYSgpOworfQorCit2b2lkIEhU
TUw1VmlkZW9XaWRnZXQ6Om9uQ29udHJvbENsaWNrZWQoYm9vbCBpc1BhdXNlZCkKK3sKKyAgICBp
ZiAoaXNQYXVzZWQpCisgICAgICAgIGVtaXQgcGF1c2VDbGlja2VkKCk7CisgICAgZWxzZQorICAg
ICAgICBlbWl0IHBsYXlDbGlja2VkKCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25Q
b3NpdGlvbkNoYW5nZWQocWludDY0IHBvc2l0aW9uKQoreworICAgIG1fb3ZlcmxheVdpZGdldC0+
c2V0UG9zaXRpb24ocG9zaXRpb24gLyAxMDAwKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0
OjpvblNsaWRlck1vdmVkKGludCB2YWx1ZSkKK3sKKyAgICBlbWl0IHBvc2l0aW9uQ2hhbmdlZEJ5
VXNlcigoKHFpbnQ2NCl2YWx1ZSkqMTAwMCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6
b25DbG9zZUNsaWNrZWQoKQoreworICAgIGhpZGUoKTsKKyAgICBlbWl0IGNsb3NlQ2xpY2tlZCgp
OworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6OnNob3dGdWxsU2NyZWVuKCkKK3sKKyAgICBz
ZXRGdWxsU2NyZWVuKHRydWUpOworICAgIG1fb3ZlcmxheVdpZGdldC0+c2hvd0Z1bGxTY3JlZW4o
KTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpzZXRWb2x1bWUoaW50IHZvbHVtZSkKK3sK
KyAgICBtX292ZXJsYXlXaWRnZXQtPnNldFZvbHVtZSh2b2x1bWUpOworfQpJbmRleDogU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9XaWRnZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVW
aWRlb1dpZGdldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3Bs
YXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9XaWRnZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSFRNTDVWaWRlb1dpZGdldF9oCisjZGVm
aW5lIEhUTUw1VmlkZW9XaWRnZXRfaAorCisjaW5jbHVkZSAiT3ZlcmxheVdpZGdldC5oIgorCisj
aW5jbHVkZSA8UVZpZGVvV2lkZ2V0PgorCitjbGFzcyBIVE1MNVZpZGVvV2lkZ2V0IDogcHVibGlj
IFFWaWRlb1dpZGdldCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBIVE1MNVZpZGVvV2lk
Z2V0KGludCBkdXJhdGlvbiwgUVdpZGdldCogcGFyZW50ID0gMCk7CisgICAgfkhUTUw1VmlkZW9X
aWRnZXQoKTsKKyAgICB2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOworICAgIHZv
aWQgb25QbGF5ZXJTdG9wcGVkKCk7CisgICAgdm9pZCBvblBsYXllckVycm9yKCk7CisgICAgdm9p
ZCBvbkVuZE9mTWVkaWEoKTsKKyAgICB2b2lkIG9uQnVmZmVyaW5nTWVkaWEoKTsKKyAgICB2b2lk
IG9uQnVmZmVyZWRNZWRpYSgpOworICAgIHZvaWQgc2V0Vm9sdW1lKGludCk7CisKK3ByaXZhdGUg
c2xvdHM6CisgICAgdm9pZCBvbkNvbnRyb2xDbGlja2VkKGJvb2wpOworICAgIHZvaWQgb25Qb3Np
dGlvbkNoYW5nZWQocWludDY0KTsKKyAgICB2b2lkIHNldER1cmF0aW9uKHFpbnQ2NCk7CisgICAg
dm9pZCBvblNsaWRlck1vdmVkKGludCk7CisgICAgdm9pZCBvbkNsb3NlQ2xpY2tlZCgpOworCitw
dWJsaWMgc2xvdHM6CisgICAgdm9pZCBzaG93RnVsbFNjcmVlbigpOworCitzaWduYWxzOgorICAg
IHZvaWQgcGF1c2VDbGlja2VkKCk7CisgICAgdm9pZCBwbGF5Q2xpY2tlZCgpOworICAgIHZvaWQg
cG9zaXRpb25DaGFuZ2VkQnlVc2VyKHFpbnQ2NCk7CisgICAgdm9pZCBjbG9zZUNsaWNrZWQoKTsK
KyAgICB2b2lkIG11dGVkKGJvb2wpOworICAgIHZvaWQgdm9sdW1lQ2hhbmdlZChpbnQpOworCitw
cml2YXRlOgorICAgIE92ZXJsYXlXaWRnZXQqIG1fb3ZlcmxheVdpZGdldDsKK307CisKKyNlbmRp
ZiAvKiBIVE1MNVZpZGVvV2lkZ2V0X2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlh
bi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vT3ZlcmxheVdpZGdldC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vT3Zlcmxh
eVdpZGdldC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgIk92ZXJsYXlXaWRnZXQuaCIKKworI2luY2x1ZGUgPFFGaWxlPgorI2lu
Y2x1ZGUgPFFHcmlkTGF5b3V0PgorI2luY2x1ZGUgPFFIQm94TGF5b3V0PgorI2luY2x1ZGUgPFFT
dHlsZT4KKyNpbmNsdWRlIDxRVGltZT4KKworT3ZlcmxheVdpZGdldDo6T3ZlcmxheVdpZGdldChp
bnQgZHVyYXRpb24sIFFXaWRnZXQgKnBhcmVudCkKKyAgICA6IFFXaWRnZXQocGFyZW50LCBRdDo6
VG9vbCB8IFF0OjpGcmFtZWxlc3NXaW5kb3dIaW50KQorICAgICwgbV9pc1BhdXNlZChmYWxzZSkK
KyAgICAsIG1faXNNdXRlZChmYWxzZSkKK3sKKyAgICBhcHBseVN0eWxlU2hlZXQoKTsKKworICAg
IG1fcGxheUljb24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3BsYXkucG5nIik7CisgICAgbV9w
YXVzZUljb24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZyIpOworICAgIG1fc291
bmRPbkljb24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3NvdW5kX29uLnBuZyIpOworICAgIG1f
c291bmRPZmZJY29uID0gUUljb24oIjovaW1hZ2VzL2J1dHRvbl9zb3VuZF9vZmYucG5nIik7CisK
KyAgICBtX2NvbnRyb2xCdXR0b24gPSBuZXcgUGxheWVyQnV0dG9uKHRoaXMpOworICAgIG1fY29u
dHJvbEJ1dHRvbi0+c2V0SWNvbihtX3BhdXNlSWNvbik7CisgICAgY29ubmVjdChtX2NvbnRyb2xC
dXR0b24sIFNJR05BTChjbGlja2VkKCkpLCB0aGlzLCBTTE9UKG9uQ29udHJvbENsaWNrZWQoKSkp
OworCisgICAgbV9zbGlkZXIgPSBuZXcgUVNsaWRlcihRdDo6SG9yaXpvbnRhbCwgdGhpcyk7Cisg
ICAgbV9zbGlkZXItPnNldFJhbmdlKDAsIGR1cmF0aW9uKTsKKyAgICBjb25uZWN0KG1fc2xpZGVy
LCBTSUdOQUwoc2xpZGVyTW92ZWQoaW50KSksIHRoaXMsIFNMT1Qob25TbGlkZXJNb3ZlZChpbnQp
KSk7CisKKyAgICBtX3Bvc2l0aW9uTGFiZWwgPSBuZXcgUUxhYmVsKHRoaXMpOworICAgIG1fcG9z
aXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmcoMCkpOworICAgIG1fZHVyYXRpb25MYWJl
bCA9IG5ldyBRTGFiZWwodGhpcyk7CisgICAgbV9kdXJhdGlvbkxhYmVsLT5zZXRUZXh0KHRpbWVU
b1N0cmluZyhkdXJhdGlvbikpOworCisgICAgbV9zb3VuZEJ1dHRvbiA9IG5ldyBQbGF5ZXJCdXR0
b24odGhpcyk7CisgICAgbV9zb3VuZEJ1dHRvbi0+c2V0SWNvbihtX3NvdW5kT25JY29uKTsKKyAg
ICBjb25uZWN0KG1fc291bmRCdXR0b24sIFNJR05BTChjbGlja2VkKCkpLCB0aGlzLCBTTE9UKG9u
U291bmRDbGlja2VkKCkpKTsKKworICAgIG1fY2xvc2VCdXR0b24gPSBuZXcgUGxheWVyQnV0dG9u
KHRoaXMpOworICAgIG1fY2xvc2VCdXR0b24tPnNldEljb24oUUljb24oIjovaW1hZ2VzL2J1dHRv
bl9jbG9zZS5wbmciKSk7CisgICAgY29ubmVjdChtX2Nsb3NlQnV0dG9uLCBTSUdOQUwoY2xpY2tl
ZCgpKSwgdGhpcywgU0xPVChvbkNsb3NlQ2xpY2tlZCgpKSk7CisKKyAgICBtX3ZvbHVtZVNsaWRl
ciA9IG5ldyBRU2xpZGVyKFF0OjpWZXJ0aWNhbCwgdGhpcyk7CisgICAgbV92b2x1bWVTbGlkZXIt
PnNldFJhbmdlKDAsIDEwMCk7CisgICAgY29ubmVjdChtX3NvdW5kQnV0dG9uLCBTSUdOQUwodGFw
QW5kSG9sZCgpKSwgbV92b2x1bWVTbGlkZXIsIFNMT1Qoc2hvdygpKSk7CisgICAgY29ubmVjdCht
X3ZvbHVtZVNsaWRlciwgU0lHTkFMKHNsaWRlclJlbGVhc2VkKCkpLCB0aGlzLCBTTE9UKG9uVm9s
dW1lU2xpZGVyUmVsZWFzZWQoKSkpOworICAgIGNvbm5lY3QobV92b2x1bWVTbGlkZXIsIFNJR05B
TChzbGlkZXJNb3ZlZChpbnQpKSwgdGhpcywgU0xPVChvblZvbHVtZVNsaWRlck1vdmVkKGludCkp
KTsKKyAgICBtX3ZvbHVtZVNsaWRlci0+aGlkZSgpOworCisgICAgbV9wbGF5ZXJMYWJlbCA9IG5l
dyBQbGF5ZXJMYWJlbCh0aGlzKTsKKyAgICBtX3BsYXllckxhYmVsLT5oaWRlKCk7CisKKyAgICBR
Qm94TGF5b3V0KiBtX2NvbnRyb2xMYXlvdXQgPSBuZXcgUUhCb3hMYXlvdXQ7CisgICAgbV9jb250
cm9sTGF5b3V0LT5hZGRXaWRnZXQobV9jb250cm9sQnV0dG9uKTsKKyAgICBtX2NvbnRyb2xMYXlv
dXQtPmFkZFdpZGdldChtX3Bvc2l0aW9uTGFiZWwpOworICAgIG1fY29udHJvbExheW91dC0+YWRk
V2lkZ2V0KG1fc2xpZGVyKTsKKyAgICBtX2NvbnRyb2xMYXlvdXQtPmFkZFdpZGdldChtX2R1cmF0
aW9uTGFiZWwpOworCisgICAgUUdyaWRMYXlvdXQqIGxheW91dCA9IG5ldyBRR3JpZExheW91dDsK
KyAgICBsYXlvdXQtPmFkZFdpZGdldChtX2Nsb3NlQnV0dG9uLCAwLCAwLCAxLCAyLCBRdDo6QWxp
Z25SaWdodCB8IFF0OjpBbGlnblRvcCk7CisgICAgbGF5b3V0LT5hZGRXaWRnZXQobV9wbGF5ZXJM
YWJlbCwgMSwgMCwgUXQ6OkFsaWduQ2VudGVyKTsKKyAgICBsYXlvdXQtPmFkZFdpZGdldChtX3Zv
bHVtZVNsaWRlciwgMSwgMSk7CisgICAgbGF5b3V0LT5hZGRMYXlvdXQobV9jb250cm9sTGF5b3V0
LCAyLCAwLCBRdDo6QWxpZ25Cb3R0b20pOworICAgIGxheW91dC0+YWRkV2lkZ2V0KG1fc291bmRC
dXR0b24sIDIsIDEsIFF0OjpBbGlnbkJvdHRvbSk7CisgICAgc2V0TGF5b3V0KGxheW91dCk7CisK
KyAgICBtX2hpZGVXaWRnZXRUaW1lciA9IG5ldyBRVGltZXIodGhpcyk7CisgICAgbV9oaWRlV2lk
Z2V0VGltZXItPnNldFNpbmdsZVNob3QodHJ1ZSk7CisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnNl
dEludGVydmFsKDMwMDApOworICAgIGNvbm5lY3QobV9oaWRlV2lkZ2V0VGltZXIsIFNJR05BTCh0
aW1lb3V0KCkpLCB0aGlzLCBTTE9UKG9uVGltZXJUaW1lb3V0KCkpKTsKKyAgICBjb25uZWN0KG1f
c2xpZGVyLCBTSUdOQUwoc2xpZGVyUHJlc3NlZCgpKSwgbV9oaWRlV2lkZ2V0VGltZXIsIFNMT1Qo
c3RvcCgpKSk7CisgICAgY29ubmVjdChtX3NsaWRlciwgU0lHTkFMKHNsaWRlclJlbGVhc2VkKCkp
LCBtX2hpZGVXaWRnZXRUaW1lciwgU0xPVChzdGFydCgpKSk7CisgICAgY29ubmVjdChtX3ZvbHVt
ZVNsaWRlciwgU0lHTkFMKHNsaWRlclByZXNzZWQoKSksIG1faGlkZVdpZGdldFRpbWVyLCBTTE9U
KHN0b3AoKSkpOworCisgICAgc2V0QXR0cmlidXRlKFF0OjpXQV9UcmFuc2x1Y2VudEJhY2tncm91
bmQpOworfQorCitPdmVybGF5V2lkZ2V0Ojp+T3ZlcmxheVdpZGdldCgpCit7Cit9CisKK3ZvaWQg
T3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24oaW50IGR1cmF0aW9uKQoreworICAgIG1fc2xpZGVy
LT5zZXRNYXhpbXVtKGR1cmF0aW9uKTsKKyAgICBtX2R1cmF0aW9uTGFiZWwtPnNldFRleHQodGlt
ZVRvU3RyaW5nKGR1cmF0aW9uKSk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6c2V0UG9zaXRp
b24oaW50IHBvc2l0aW9uKQoreworICAgIGlmICghbV9zbGlkZXItPmlzU2xpZGVyRG93bigpKSB7
CisgICAgICAgIG1fc2xpZGVyLT5zZXRWYWx1ZShwb3NpdGlvbik7CisgICAgICAgIG1fcG9zaXRp
b25MYWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmcocG9zaXRpb24pKTsKKyAgICB9Cit9CisKK3Zv
aWQgT3ZlcmxheVdpZGdldDo6c2V0Vm9sdW1lKGludCB2b2x1bWUpCit7CisgICAgbV92b2x1bWVT
bGlkZXItPnNldFZhbHVlKHZvbHVtZSk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6bW91c2VQ
cmVzc0V2ZW50KFFNb3VzZUV2ZW50ICopCit7CisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0b3Ao
KTsKKyAgICBoaWRlKCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25QbGF5ZXJTdG9wcGVk
KCkKK3sKKyAgICBtX2NvbnRyb2xCdXR0b24tPnNldEljb24obV9wbGF5SWNvbik7Cit9CisKK3Zv
aWQgT3ZlcmxheVdpZGdldDo6b25QbGF5ZXJFcnJvcigpCit7CisgICAgbV9jb250cm9sQnV0dG9u
LT5zZXREaXNhYmxlZCh0cnVlKTsKKyAgICBtX3NsaWRlci0+c2V0RGlzYWJsZWQodHJ1ZSk7Cisg
ICAgbV9wbGF5ZXJMYWJlbC0+b25QbGF5ZXJFcnJvcigpOworICAgIHNob3dGdWxsU2NyZWVuKCk7
Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25FbmRPZk1lZGlhKCkKK3sKKyAgICBRV2lkZ2V0
OjpzaG93RnVsbFNjcmVlbigpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uQnVmZmVyaW5n
TWVkaWEoKQoreworICAgIG1fcGxheWVyTGFiZWwtPnN0YXJ0QnVmZmVyaW5nQW5pbWF0aW9uKCk7
Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25CdWZmZXJlZE1lZGlhKCkKK3sKKyAgICBtX3Bs
YXllckxhYmVsLT5zdG9wQnVmZmVyaW5nQW5pbWF0aW9uKCk7Cit9CisKK1FTdHJpbmcgT3Zlcmxh
eVdpZGdldDo6dGltZVRvU3RyaW5nKGludCBzZWNvbmRzKQoreworICAgIFFUaW1lIGluaXRUaW1l
KDAsIDAsIDApOworICAgIFFUaW1lIHRpbWUgPSBpbml0VGltZS5hZGRTZWNzKHNlY29uZHMpOwor
ICAgIHJldHVybiB0aW1lLmhvdXIoKSA/IHRpbWUudG9TdHJpbmcoImg6bW06c3MiKSA6IHRpbWUu
dG9TdHJpbmcoIm1tOnNzIik7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6YXBwbHlTdHlsZVNo
ZWV0KCkKK3sKKyAgICBRRmlsZSBmaWxlKCI6L3Fzcy9PdmVybGF5V2lkZ2V0LnFzcyIpOworICAg
IGZpbGUub3BlbihRRmlsZTo6UmVhZE9ubHkpOworICAgIHNldFN0eWxlU2hlZXQoUUxhdGluMVN0
cmluZyhmaWxlLnJlYWRBbGwoKSkpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uQ29udHJv
bENsaWNrZWQoKQoreworICAgIG1faXNQYXVzZWQgPSAhbV9pc1BhdXNlZDsKKyAgICBpZiAobV9p
c1BhdXNlZCkgeworICAgICAgICBtX2NvbnRyb2xCdXR0b24tPnNldEljb24obV9wbGF5SWNvbik7
CisgICAgICAgIG1faGlkZVdpZGdldFRpbWVyLT5zdG9wKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9jb250cm9sQnV0dG9uLT5zZXRJY29uKG1fcGF1c2VJY29uKTsKKyAgICAgICAgbV9oaWRl
V2lkZ2V0VGltZXItPnN0YXJ0KCk7CisgICAgfQorICAgIGVtaXQgY29udHJvbENsaWNrZWQobV9p
c1BhdXNlZCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25TbGlkZXJNb3ZlZChpbnQgdmFs
dWUpCit7CisgICAgZW1pdCBzbGlkZXJNb3ZlZCh2YWx1ZSk7Cit9CisKK3ZvaWQgT3ZlcmxheVdp
ZGdldDo6b25Tb3VuZENsaWNrZWQoKQoreworICAgIGlmIChtX3ZvbHVtZVNsaWRlci0+aXNWaXNp
YmxlKCkpCisgICAgICAgIG1faXNNdXRlZCA9IGZhbHNlOworICAgIGVsc2UKKyAgICAgICAgbV9p
c011dGVkID0gIW1faXNNdXRlZDsKKworICAgIGlmIChtX2lzTXV0ZWQpCisgICAgICAgIG1fc291
bmRCdXR0b24tPnNldEljb24obV9zb3VuZE9mZkljb24pOworICAgIGVsc2UKKyAgICAgICAgbV9z
b3VuZEJ1dHRvbi0+c2V0SWNvbihtX3NvdW5kT25JY29uKTsKKworICAgIG1faGlkZVdpZGdldFRp
bWVyLT5zdGFydCgpOworICAgIGVtaXQgbXV0ZWQobV9pc011dGVkKTsKK30KKwordm9pZCBPdmVy
bGF5V2lkZ2V0OjpvbkNsb3NlQ2xpY2tlZCgpCit7CisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0
b3AoKTsKKyAgICBoaWRlKCk7CisgICAgZW1pdCBjbG9zZUNsaWNrZWQoKTsKK30KKwordm9pZCBP
dmVybGF5V2lkZ2V0OjpvblZvbHVtZVNsaWRlclJlbGVhc2VkKCkKK3sKKyAgICBtX2hpZGVXaWRn
ZXRUaW1lci0+c3RhcnQoKTsKKyAgICBlbWl0IHZvbHVtZUNoYW5nZWQobV92b2x1bWVTbGlkZXIt
PnZhbHVlKCkpOworICAgIG1fdm9sdW1lU2xpZGVyLT5oaWRlKCk7Cit9CisKK3ZvaWQgT3Zlcmxh
eVdpZGdldDo6b25Wb2x1bWVTbGlkZXJNb3ZlZChpbnQgdmFsdWUpCit7CisgICAgZW1pdCB2b2x1
bWVDaGFuZ2VkKHZhbHVlKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvblRpbWVyVGltZW91
dCgpCit7CisgICAgaWYgKCFtX2lzUGF1c2VkKQorICAgICAgICBoaWRlKCk7Cit9CisKK3ZvaWQg
T3ZlcmxheVdpZGdldDo6c2hvd0Z1bGxTY3JlZW4oKQoreworICAgIG1faGlkZVdpZGdldFRpbWVy
LT5zdGFydCgpOworICAgIFFXaWRnZXQ6OnNob3dGdWxsU2NyZWVuKCk7Cit9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vT3ZlcmxheVdpZGdldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5
V2lkZ2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZv
cm1wbHVnaW4vT3ZlcmxheVdpZGdldC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBPdmVybGF5V2lkZ2V0X2gKKyNkZWZpbmUgT3Zlcmxh
eVdpZGdldF9oCisKKyNpbmNsdWRlICJQbGF5ZXJCdXR0b24uaCIKKyNpbmNsdWRlICJQbGF5ZXJM
YWJlbC5oIgorCisjaW5jbHVkZSA8UVNsaWRlcj4KKworY2xhc3MgT3ZlcmxheVdpZGdldCA6IHB1
YmxpYyBRV2lkZ2V0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIE92ZXJsYXlXaWRnZXQo
aW50IGR1cmF0aW9uLCBRV2lkZ2V0KiBwYXJlbnQgPSAwKTsKKyAgICB+T3ZlcmxheVdpZGdldCgp
OworICAgIHZvaWQgc2V0RHVyYXRpb24oaW50KTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGludCk7
CisgICAgdm9pZCBzZXRWb2x1bWUoaW50KTsKKyAgICB2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91
c2VFdmVudCopOworICAgIHZvaWQgb25QbGF5ZXJTdG9wcGVkKCk7CisgICAgdm9pZCBvblBsYXll
ckVycm9yKCk7CisgICAgdm9pZCBvbkVuZE9mTWVkaWEoKTsKKyAgICB2b2lkIG9uQnVmZmVyaW5n
TWVkaWEoKTsKKyAgICB2b2lkIG9uQnVmZmVyZWRNZWRpYSgpOworCitwcml2YXRlOgorICAgIFFT
dHJpbmcgdGltZVRvU3RyaW5nKGludCk7CisgICAgdm9pZCBhcHBseVN0eWxlU2hlZXQoKTsKKwor
cHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIG9uQ29udHJvbENsaWNrZWQoKTsKKyAgICB2b2lkIG9u
U2xpZGVyTW92ZWQoaW50KTsKKyAgICB2b2lkIG9uU291bmRDbGlja2VkKCk7CisgICAgdm9pZCBv
bkNsb3NlQ2xpY2tlZCgpOworICAgIHZvaWQgb25Wb2x1bWVTbGlkZXJSZWxlYXNlZCgpOworICAg
IHZvaWQgb25Wb2x1bWVTbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQgb25UaW1lclRpbWVvdXQo
KTsKKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgc2hvd0Z1bGxTY3JlZW4oKTsKKworc2lnbmFs
czoKKyAgICB2b2lkIGNvbnRyb2xDbGlja2VkKGJvb2wpOworICAgIHZvaWQgc2xpZGVyTW92ZWQo
aW50KTsKKyAgICB2b2lkIGNsb3NlQ2xpY2tlZCgpOworICAgIHZvaWQgbXV0ZWQoYm9vbCk7Cisg
ICAgdm9pZCB2b2x1bWVDaGFuZ2VkKGludCk7CisKK3ByaXZhdGU6CisgICAgUGxheWVyQnV0dG9u
KiBtX2NvbnRyb2xCdXR0b247CisgICAgYm9vbCBtX2lzUGF1c2VkOworICAgIFFTbGlkZXIqIG1f
c2xpZGVyOworICAgIFFMYWJlbCogbV9wb3NpdGlvbkxhYmVsOworICAgIFFMYWJlbCogbV9kdXJh
dGlvbkxhYmVsOworICAgIFBsYXllckJ1dHRvbiogbV9zb3VuZEJ1dHRvbjsKKyAgICBQbGF5ZXJC
dXR0b24qIG1fY2xvc2VCdXR0b247CisgICAgUVNsaWRlciogbV92b2x1bWVTbGlkZXI7CisgICAg
Ym9vbCBtX2lzTXV0ZWQ7CisgICAgUUljb24gbV9wbGF5SWNvbjsKKyAgICBRSWNvbiBtX3BhdXNl
SWNvbjsKKyAgICBRSWNvbiBtX3NvdW5kT25JY29uOworICAgIFFJY29uIG1fc291bmRPZmZJY29u
OworICAgIFFUaW1lciogbV9oaWRlV2lkZ2V0VGltZXI7CisgICAgUGxheWVyTGFiZWwqIG1fcGxh
eWVyTGFiZWw7Cit9OworCisjZW5kaWYgLyogT3ZlcmxheVdpZGdldF9oICovCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyQnV0dG9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVy
QnV0dG9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgIlBsYXllckJ1dHRvbi5oIgorCisjaW5jbHVk
ZSA8UUdlc3R1cmU+CisjaW5jbHVkZSA8UUdlc3R1cmVFdmVudD4KKworUGxheWVyQnV0dG9uOjpQ
bGF5ZXJCdXR0b24oUVdpZGdldCAqcGFyZW50KQorICAgIDogUVRvb2xCdXR0b24ocGFyZW50KQor
ICAgICwgbV9idXR0b25JbWFnZSgwKQoreworICAgIGdyYWJHZXN0dXJlKFF0OjpUYXBBbmRIb2xk
R2VzdHVyZSk7CisgICAgc2V0Rml4ZWRTaXplKDUwLCA1MCk7CisgICAgc2V0SWNvblNpemUoUVNp
emUoNTAsIDUwKSk7CisgICAgc2V0U3R5bGVTaGVldCgiYm9yZGVyOiBub25lIik7Cit9CisKK2Jv
b2wgUGxheWVyQnV0dG9uOjpldmVudChRRXZlbnQgKmV2ZW50KQoreworICAgIGlmIChldmVudC0+
dHlwZSgpID09IFFFdmVudDo6R2VzdHVyZSkgeworICAgICAgICBRR2VzdHVyZUV2ZW50ICogZ2Vz
dHVyZUV2ZW50ID0gKFFHZXN0dXJlRXZlbnQqKXN0YXRpY19jYXN0PFFHZXN0dXJlRXZlbnQqPihl
dmVudCk7CisgICAgICAgIFFHZXN0dXJlICogZ2VzdHVyZSA9IGdlc3R1cmVFdmVudC0+Z2VzdHVy
ZShRdDo6VGFwQW5kSG9sZEdlc3R1cmUpOworICAgICAgICBpZiAoZ2VzdHVyZSAmJiBnZXN0dXJl
LT5zdGF0ZSgpID09IFF0OjpHZXN0dXJlRmluaXNoZWQpIHsKKyAgICAgICAgICAgIGVtaXQgdGFw
QW5kSG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIFFUb29sQnV0dG9uOjpldmVudChldmVudCk7Cit9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyQnV0dG9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckJ1dHRvbi5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L1BsYXllckJ1dHRvbi5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBQbGF5ZXJCdXR0b25faAorI2RlZmluZSBQbGF5ZXJCdXR0b25faAor
CisjaW5jbHVkZSA8UUljb24+CisjaW5jbHVkZSA8UVRvb2xCdXR0b24+CisKK2NsYXNzIFFFdmVu
dDsKKworY2xhc3MgUGxheWVyQnV0dG9uIDogcHVibGljIFFUb29sQnV0dG9uIHsKKyAgICBRX09C
SkVDVAorcHVibGljOgorICAgIFBsYXllckJ1dHRvbihRV2lkZ2V0KiBwYXJlbnQgPSAwKTsKKyAg
ICBib29sIGV2ZW50KFFFdmVudCopOworCitzaWduYWxzOgorICAgIHZvaWQgdGFwQW5kSG9sZCgp
OworCitwcml2YXRlOgorICAgIFFJY29uKiBtX2J1dHRvbkltYWdlOworfTsKKworI2VuZGlmIC8q
IFBsYXllckJ1dHRvbl9oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZv
cm1wbHVnaW4vUGxheWVyTGFiZWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyTGFiZWwuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUg
IlBsYXllckxhYmVsLmgiCisKK1BsYXllckxhYmVsOjpQbGF5ZXJMYWJlbChRV2lkZ2V0KiBwYXJl
bnQpCisgICAgOiBRTGFiZWwocGFyZW50KQorICAgICwgbV9idWZmZXJpbmdBbmltYXRpb25JdGVy
YXRvcihtX2J1ZmZlcmluZ0FuaW1hdGlvbikKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIodGhpcykK
K3sKKyAgICBtX2J1ZmZlcmluZ0FuaW1hdGlvbi5hcHBlbmQoUVBpeG1hcCgiOi9pbWFnZXMvbG9h
ZGluZ19idWZmZXJpbmdfMS5wbmciKS5zY2FsZWQoUVNpemUoODAsIDgwKSkpOworICAgIG1fYnVm
ZmVyaW5nQW5pbWF0aW9uLmFwcGVuZChRUGl4bWFwKCI6L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmlu
Z18yLnBuZyIpLnNjYWxlZChRU2l6ZSg4MCwgODApKSk7CisgICAgbV9idWZmZXJpbmdBbmltYXRp
b24uYXBwZW5kKFFQaXhtYXAoIjovaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzMucG5nIikuc2Nh
bGVkKFFTaXplKDgwLCA4MCkpKTsKKyAgICBtX2J1ZmZlcmluZ0FuaW1hdGlvbi5hcHBlbmQoUVBp
eG1hcCgiOi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfNC5wbmciKS5zY2FsZWQoUVNpemUoODAs
IDgwKSkpOworICAgIG1fYnVmZmVyaW5nQW5pbWF0aW9uSXRlcmF0b3IgPSBtX2J1ZmZlcmluZ0Fu
aW1hdGlvbjsKKyAgICBtX2FuaW1hdGlvblRpbWVyLnNldFNpbmdsZVNob3QoZmFsc2UpOworICAg
IG1fYW5pbWF0aW9uVGltZXIuc2V0SW50ZXJ2YWwoMjAwKTsKKyAgICBjb25uZWN0KCZtX2FuaW1h
dGlvblRpbWVyLCBTSUdOQUwodGltZW91dCgpKSwgdGhpcywgU0xPVChvbkFuaW1hdGlvblRpbWVv
dXQoKSkpOworCisgICAgbV9jYW5ub3RwbGF5ID0gUVBpeG1hcCgiOi9pbWFnZXMvYnV0dG9uX2Nh
bm5vdHBsYXkucG5nIikuc2NhbGVkKFFTaXplKDgwLCA4MCkpOworfQorCit2b2lkIFBsYXllckxh
YmVsOjpvblBsYXllckVycm9yKCkKK3sKKyAgICBzZXRQaXhtYXAobV9jYW5ub3RwbGF5KTsKKyAg
ICBzaG93KCk7Cit9CisKK3ZvaWQgUGxheWVyTGFiZWw6OnN0YXJ0QnVmZmVyaW5nQW5pbWF0aW9u
KCkKK3sKKyAgICBtX2J1ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yLnRvRnJvbnQoKTsKKyAgICBz
ZXRQaXhtYXAobV9idWZmZXJpbmdBbmltYXRpb25JdGVyYXRvci5uZXh0KCkpOworICAgIHNob3co
KTsKKyAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0KCk7Cit9CisKK3ZvaWQgUGxheWVyTGFiZWw6
OnN0b3BCdWZmZXJpbmdBbmltYXRpb24oKQoreworICAgIGhpZGUoKTsKKyAgICBtX2FuaW1hdGlv
blRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBQbGF5ZXJMYWJlbDo6b25BbmltYXRpb25UaW1lb3V0
KCkKK3sKKyAgICBpZiAoIW1fYnVmZmVyaW5nQW5pbWF0aW9uSXRlcmF0b3IuaGFzTmV4dCgpKQor
ICAgICAgICBtX2J1ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yLnRvRnJvbnQoKTsKKyAgICBzZXRQ
aXhtYXAobV9idWZmZXJpbmdBbmltYXRpb25JdGVyYXRvci5uZXh0KCkpOworfQpJbmRleDogU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckxhYmVsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckxh
YmVsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vUGxheWVyTGFiZWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgUGxheWVyTGFiZWxfaAorI2RlZmluZSBQbGF5ZXJMYWJlbF9o
CisKKyNpbmNsdWRlIDxRTGFiZWw+CisjaW5jbHVkZSA8UVRpbWVyPgorCitjbGFzcyBQbGF5ZXJM
YWJlbCA6IHB1YmxpYyBRTGFiZWwgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgUGxheWVy
TGFiZWwoUVdpZGdldCogcGFyZW50ID0gMCk7CisgICAgdm9pZCBvblBsYXllckVycm9yKCk7CisK
K3B1YmxpYyBzbG90czoKKyAgICB2b2lkIHN0YXJ0QnVmZmVyaW5nQW5pbWF0aW9uKCk7CisgICAg
dm9pZCBzdG9wQnVmZmVyaW5nQW5pbWF0aW9uKCk7CisgICAgdm9pZCBvbkFuaW1hdGlvblRpbWVv
dXQoKTsKKworcHJpdmF0ZToKKyAgICBRUGl4bWFwIG1fY2Fubm90cGxheTsKKyAgICBRTGlzdDxR
UGl4bWFwPiBtX2J1ZmZlcmluZ0FuaW1hdGlvbjsKKyAgICBRTGlzdEl0ZXJhdG9yPFFQaXhtYXA+
IG1fYnVmZmVyaW5nQW5pbWF0aW9uSXRlcmF0b3I7CisgICAgUVRpbWVyIG1fYW5pbWF0aW9uVGlt
ZXI7Cit9OworCisjZW5kaWYgLyogUGxheWVyTGFiZWxfaCAqLwpJbmRleDogU291cmNlL1dlYktp
dC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHAJKHJl
dmlzaW9uIDg1MjI1KQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L1dlYlBsdWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDYgKzIwLDEwIEBACiAKICNpbmNs
dWRlICJXZWJQbHVnaW4uaCIKIAorI2lmIGRlZmluZWQoRU5BQkxFX1FUX01VTFRJTUVESUEpICYm
IEVOQUJMRV9RVF9NVUxUSU1FRElBCisjaW5jbHVkZSAiSFRNTDVWaWRlb1BsdWdpbi5oIgorI2Vu
ZGlmCisKICNpbmNsdWRlIDxRdEd1aT4KICNpbmNsdWRlIDxRdFBsdWdpbj4KICNpbmNsdWRlIDxh
a25kaXNjcmVldHBvcHVwLmg+CkBAIC0yNDcsNiArMjUxLDEwIEBAIFFPYmplY3QqIFdlYlBsdWdp
bjo6Y3JlYXRlRXh0ZW5zaW9uKEV4dGUKICAgICAgICAgcmV0dXJuIG5ldyBXZWJQb3B1cCgpOwog
ICAgIGNhc2UgTm90aWZpY2F0aW9uczoKICAgICAgICAgcmV0dXJuIG5ldyBXZWJOb3RpZmljYXRp
b25QcmVzZW50ZXIoKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9RVF9NVUxUSU1FRElBKSAmJiBFTkFC
TEVfUVRfTVVMVElNRURJQQorICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAg
ICByZXR1cm4gbmV3IEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworI2VuZGlmCiAgICAg
ZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9x
dC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4u
cHJvCShyZXZpc2lvbiA4NTIyNSkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9y
bXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDMw
IEBAIGxvYWQobW9iaWxpdHljb25maWcsIHRydWUpCiAKIGlzRW1wdHkoT1VUUFVUX0RJUik6IE9V
VFBVVF9ESVIgPSAuLi8uLi8uLi8uLgogCitjb250YWlucyhNT0JJTElUWV9DT05GSUcsIG11bHRp
bWVkaWEpIHsKKyAKKyAgICBDT05GSUcgKz0gbW9iaWxpdHkKKyAgICBNT0JJTElUWSArPSBtdWx0
aW1lZGlhCisgICAgREVGSU5FUyArPSBFTkFCTEVfUVRfTVVMVElNRURJQT0xCisgICAgREVGSU5F
UyArPSBXVEZfVVNFX1FUX01VTFRJTUVESUE9MQorCisgICAgU09VUkNFUyArPSBcCisgICAgICAg
IEhUTUw1VmlkZW9QbHVnaW4uY3BwIFwKKyAgICAgICAgSFRNTDVWaWRlb1dpZGdldC5jcHAgXAor
ICAgICAgICBPdmVybGF5V2lkZ2V0LmNwcCBcCisgICAgICAgIFBsYXllckJ1dHRvbi5jcHAgXAor
ICAgICAgICBQbGF5ZXJMYWJlbC5jcHAKKworICAgIEhFQURFUlMgKz0gXAorICAgICAgICBIVE1M
NVZpZGVvUGx1Z2luLmggXAorICAgICAgICBIVE1MNVZpZGVvV2lkZ2V0LmggXAorICAgICAgICBP
dmVybGF5V2lkZ2V0LmggXAorICAgICAgICBQbGF5ZXJCdXR0b24uaCBcCisgICAgICAgIFBsYXll
ckxhYmVsLmgKKworICAgIFJFU09VUkNFUyA9IHBsYXRmb3JtcGx1Z2luLnFyYworfQorCiBTT1VS
Q0VTICs9IFwKICAgICBXZWJQbHVnaW4uY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5xcmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnFyYwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9w
bGF0Zm9ybXBsdWdpbi5xcmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQ
RSBSQ0M+PFJDQyB2ZXJzaW9uPSIxLjAiPgorPHFyZXNvdXJjZT4KKyAgICA8ZmlsZT5pbWFnZXMv
YnV0dG9uX2Nhbm5vdHBsYXkucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25fY2xv
c2UucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25fcGF1c2UucG5nPC9maWxlPgor
ICAgIDxmaWxlPmltYWdlcy9idXR0b25fcGxheS5wbmc8L2ZpbGU+CisgICAgPGZpbGU+aW1hZ2Vz
L2J1dHRvbl9zb3VuZF9vZmYucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25fc291
bmRfb24ucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18xLnBu
ZzwvZmlsZT4KKyAgICA8ZmlsZT5pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMi5wbmc8L2ZpbGU+
CisgICAgPGZpbGU+aW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzMucG5nPC9maWxlPgorICAgIDxm
aWxlPmltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ180LnBuZzwvZmlsZT4KKyAgICA8ZmlsZT5xc3Mv
T3ZlcmxheVdpZGdldC5xc3M8L2ZpbGU+Cis8L3FyZXNvdXJjZT4KKzwvUkNDPgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9y
bXBsdWdpbi9xc3MvT3ZlcmxheVdpZGdldC5xc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3Fzcy9PdmVybGF5V2lkZ2V0LnFzcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9xc3MvT3Zl
cmxheVdpZGdldC5xc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKK1FTbGlkZXI6Omdy
b292ZSB7DQorICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOw0KKyAgICBib3JkZXItcmFkaXVz
OiA1cHg7DQorICAgIGJhY2tncm91bmQ6IHdoaXRlOw0KK30NCisNCitRU2xpZGVyOjpoYW5kbGUg
ew0KKyAgICBib3JkZXI6IDJweCBzb2xpZCBibGFjazsNCisgICAgYm9yZGVyLXJhZGl1czogOHB4
Ow0KKyAgICBiYWNrZ3JvdW5kOiBxbGluZWFyZ3JhZGllbnQoeDE6MCwgeTE6MCwgeDI6MSwgeTI6
MSwgc3RvcDowICNlZWUsIHN0b3A6MSAjY2NjKTsNCit9DQorDQorUVNsaWRlcjo6YWRkLXBhZ2Ug
ew0KKyAgICBib3JkZXI6IDJweCBzb2xpZCBibGFjazsNCisgICAgYm9yZGVyLXJhZGl1czogNXB4
Ow0KK30NCisNCitRU2xpZGVyOjpzdWItcGFnZSB7DQorICAgIGJvcmRlcjogMnB4IHNvbGlkIGJs
YWNrOw0KKyAgICBib3JkZXItcmFkaXVzOiA1cHg7DQorfQ0KKw0KK1FTbGlkZXI6Omdyb292ZTpo
b3Jpem9udGFsIHsgDQorICAgIGhlaWdodDogMTBweDsNCit9DQorDQorUVNsaWRlcjo6aGFuZGxl
Omhvcml6b250YWwgew0KKyAgICB3aWR0aDogNDBweDsNCisgICAgbWFyZ2luLXRvcDogLTE1cHg7
DQorICAgIG1hcmdpbi1ib3R0b206IC0xNXB4Ow0KK30NCisNCitRU2xpZGVyOjphZGQtcGFnZTpo
b3Jpem9udGFsIHsNCisgICAgaGVpZ2h0OiAxMHB4Ow0KKyAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsN
Cit9DQorDQorUVNsaWRlcjo6c3ViLXBhZ2U6aG9yaXpvbnRhbCB7DQorICAgIGhlaWdodDogMTBw
eDsNCisgICAgYmFja2dyb3VuZDogcWxpbmVhcmdyYWRpZW50KHgxOjAsIHkxOjAsIHgyOjEsIHky
OjEsIHN0b3A6MCAjZWVlLCBzdG9wOjEgI2NjYyk7DQorfQ0KKw0KK1FTbGlkZXI6Omdyb292ZTp2
ZXJ0aWNhbCB7DQorICAgIHdpZHRoOiAxMHB4Ow0KK30NCisNCitRU2xpZGVyOjpoYW5kbGU6dmVy
dGljYWwgew0KKyAgICBoZWlnaHQ6IDQwcHg7IG1hcmdpbi1sZWZ0OiAtMTVweDsgbWFyZ2luLXJp
Z2h0OiAtMTVweDsNCit9DQorDQorUVNsaWRlcjo6YWRkLXBhZ2U6dmVydGljYWwgew0KKyAgICB3
aWR0aDogMTBweDsNCisgICAgYmFja2dyb3VuZDogcWxpbmVhcmdyYWRpZW50KHgxOjAsIHkxOjAs
IHgyOjEsIHkyOjEsIHN0b3A6MCAjZWVlLCBzdG9wOjEgI2NjYyk7DQorfQ0KKw0KK1FTbGlkZXI6
OnN1Yi1wYWdlOnZlcnRpY2FsIHsNCisgICAgd2lkdGg6IDEwcHg7DQorICAgIGJhY2tncm91bmQ6
IHdoaXRlOw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBu
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBl
Lgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1
dHRvbl9jYW5ub3RwbGF5LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsg
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUZBQUFB
QlFDQVlBQUFINUZzSTdBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIy
WjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFCQ1pKUkVGVWVOcU1rRkVLQUNB
SVE5dnVmK2ZGCklFRURMVDhFM1hPS2tMUitnazRBVEhjVHNvN2ptQ0ZrcURnMllobm15eW42dk81
QlY5K2d1cHJUdXR6bkFCVTQvamplYUgwTFFDbVYKSkFFQWdxRDgvNk10TFVybzVLMGhCRnlzdFJs
TVh6L3J4a0xhb1JvVzZ3MDd3dE5hd2JHcnFkZ0s0SnEzT3R3NVp0WHJua2hFVkVWRQordTZSZ3Bl
Y0lQZTZQbk9rVEVLMktRRHJaSkFFQUFpQ3dQVC9mNjZMVGFXUUh2UllBeFZzVHpQN0dDLzRqZGVF
dkZrNnlBaHBGRVY5CkZSaFEyWml3Q3dqWW1BaFFFN0QxZ3oyam14bG5rZWhvSG1WZkNXVlV5VmlM
Um1MUFM4dHJ4NllkN0NVQUpmVjJBeUFJQTFEMGh6MTEKRUkycnVDa2lpc0hTeDRXRUdCSjZLRmlv
S2JkZTJ0bVBTWmN4cVY5cDI0KzIxWlZtSjJPU2NoNExRYjJZTEZ0Wk5YdmI5MkxxR2R3RAppbXJZ
bStyemFRZEwwQWo3UUlJUzdBZEdLTUVHMEVNSnBvSUV0VEFUOUg1QVdGSXpHRUduc2JCT2FkSFM0
dWMzZ0JZL3ZRRVV4ZGpFCmpSb25lSFZtb2ViakVHRWFhajRPRlBOaUxnRm9yMk1jZ0VFWWhxTDN2
M1dscW1KQVRZanR6OEFJZVJMRVFOc3AzNUR2R1JIVjFpa24KYkp1SFE2ZDF5Z25GS1l1aGFwMjE3
NU9JVHFBbjJGK2J2bU0vb0RUVWhiVVhIZ0ZOWVpNdWRxRUk3QWgwb1JSc0RLU2hVNWdNVEtFcQpM
QUZLWnl5T3A5dXdGSXJEOEJ6Rmt4OE9mRHo1OGNDbllUUlVYc0NPQzdQT2VBRVhwa0xseHdJRmMr
dEkvNE5MVC82MnppTUFyMlp5CkJDQU13OEQrdStiRk43NTJWWUJIZ29GRWg5djVsVWx3ZkE3K1Qy
Vy93UTdPODlzd1NYWnh5ai9NSURuQmFmMytKTWtwVHZzUUpVaHUKY0VZbi9JWGtGa2U3ZzZuN1dC
VUtpRmd3MVF3aHVSUXRxT2hCa2lTcHF2RThSWmY4Z0NkQmpSTWVtY1ZjSGUySHQ5NDRhdG9WNDA2
UwozTVFma1Z3bWtzMWNTRjRDK0VqOGRsSkJpV3d3a2c4U0NldEtxaVhqWHlVQ05rTDBrWjZrOVZ3
czViLzBKS2pveFQyRVhlUWdNcDFVCjVwb1NwcnM2bysxRTdJTlp4U0oxYktMUVBucWMvdkJKbFN4
eDJzUEV6c0lHcHpWTWJuNU1jY3BoWXkxbGd2TWN0blptSmpqVk5wQzYKZWRUQnFZYjFLcUxDK1FR
bzd3eVNFSVpoR01oVGVSby9oUXNISmdlbUpMYXlHL29CV1dxVDJMSW5YV29kcEhvcHFWWklhMUUz
QUQxVApuMmxJdUdrK1B3TjludGpqckpGQnlHbytVMERmaWhHcWtGMThsb0FNUW5iektRRWlDcG5p
VXdwRUVETE5weDAwSmVRdURvZ2dqTUpkCm51ZWhDa21KVVJFa09TYk4yNmF1Q3Z5eW9XOG5sbzBi
ZTZEaFQwQjZKcURJd2NpNXFDcVpKU2J4dW5LS1ZrWnE2MUpLL2ExelJtZ08KMEJIaWJYVi9UbHEr
TzRRODhnQ0oybWducHpBSklmOGlpVzcxSXcxR0pybWNVeGdKYUdQWDRBQ1RMUzJOZFk1MXlFM0JJ
bCtxc2FHRQphaldZVzVxUS9kbmZWTi9hcytrQzNqa2ZrK1JURGt5YTBFcndLUU1tendoMjhsa0dO
azJwZHZDWkJqYU85M2J3cVJqTTFrN3FWL0M1Ci9PdUc0VUx4eC90KzRQdnRnR2VGendzNlR5dFo3
TUl6U2dBQUFBQkpSVTVFcmtKZ2dnPT0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4v
cGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9jbG9zZS5wbmcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3Qg
ZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktp
dC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0b25fY2xvc2UucG5nCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
CgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRElBQUFBeUNBWUFBQUZwT0xnbkFBQUFDWEJJV1hN
QUFBc1RBQUFMRXdFQW1wd1lBQUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZK
bFlXUjVjY2xsUEFBQUJ2eEpSRUZVZU5waS9QLy9Qd01qSStNbUJrelEKeGdLUzZPM3Q5VVdYV2Jo
d29UQVRpUEg1ODJlR29vSjhGUHJQbno4TUxDREpUNTgrTVJTWGxqSDBkbmVCYVJENC9mczNBMXdu
U0NJdApJeE5NbytnRWNTS2pZOEE2WURSSWtoRkk2d0p4S3hiWE1nQUVFRWh5RTFZSm9CZitZNU5n
QXRsamJHVEk0T3pvaU9JRkpwRFROMjNlCnd2QUw2Tno2MmhxdzgwRmlZQjBnYkdwaXpIRDgrQW1H
a0tBZ01KOEZSQ0E3bDZDckFBSUlMREZseWhSZkJpTEJuRGx6anNGREJ3WnMKckswWmpodzlpbE1U
U3BEQ0FCY1hGME5GV1NuRHVmTVhHSXdNRGNCaTFiVjFLSnJBa2ZUeDQwYzRuamQvUGxnU3B1SGtx
Vk1vOHFDWQp4YkJwNGZ4NURQR0pTWEIrYWtveWlqeFc1d1dGaEtMNG9hOS9BZ29mWkJOQUFJRkNi
dzRRaXhFYmVvekFvUDdQUUFKZytmbnpKd05KCkduNzkrb1ZYQVFjN084TVBKRU5SYkFDbE1oQm9i
RzdCeWdmN29hcXFDc1VQcmMxTktEWWdSeUk0Z2YvNDhZTUJHY095SVFpQTJPankKVENBbklXTlEx
b1FCRUJ0ZG5nbmthUmllTW1raVdDRW9UNE13Q0lERWtOV2dlRG96TzRmaDI3ZHZjRDRvcVRRM05U
SWdxMkdNaUlpZwpiY1RoektLNEFFQUFnUk1mTHkrdmRIZDN0d2NEbFFFd2tIN241ZVh0QUdVTHNa
YVdGZzlTdlVNa1lOWFgxeGNHNXowYVdRQUcvLzc5Clk4QnJDYWhFRUJjVFk3aDArVEs0eE1VR2Fx
b3F3WFJQWHo4NGxlSzBCRmNPZlA3c09kZ1NQVjFkTUw1dzRTTER1ZzBid0hKTkRmVW8KYWtIRlBG
aytXYjV5SlJpSGhZWUFLeFVqQmdNRGZUQkdCdVdWVlhpRDYrL2Z2d3hFeGNuaUpVdkJscUNEVTZk
UEU5UkwwQ2NnTUgzcQpGQlErS0t2R3g4WXlXRmlZTTVpWm1vTHhpUk1uR1JZdVhvelRFbVpRZmFp
bnA2Y084aFl5WmdlV2hGTW5UNElyVGs1TkEwYitackRjCnVmUG53V3hSRVJFR1dWbFpCaGtaR1Fa
OVBUMkd2ZnYyTWFDYmMrL2V2Y2ZnM0JzZEhlMUxxeVI4K1BEaFl6VFBKL0NJZi9mdTNTZHUKYm00
K1dsank1czJiVHdBQkJBb3VDeUN1b3BGSFhnRWJsQ25nT0prMGFaSUhHeHNiSzdWdEtDMHQzUUZz
TGp4bE1qQXdFR1ppWW1JRgpOU0tvamR2YjIwRWx1eGdMcUgwTWloeGFBckFsSUZ0cGJnbXRmY0lF
c3dRYlptVmh3U2tIdzVZV0Zuamw4UVlYQndjSFEwRitIcGpkCjB0YU8xWVYrdmo3Z0trQlZWWVZo
OXB5NXBQdWtwS2dRcFdKQ2wvZjE5Z1piQUFLZ09zZld4aHFuVDNCYVV0ZlFpT0lhVUdzUUp1ZnYK
Njh1Z3I2OEhsd05WWm52MzdTZmRFaEJHYnpHQ2FzTUFmMytVaWd2VVRWaTlkaTNlT0dFQ2xmZjRN
aFI2elFmclJvREEyWFBuR0ZhdQpXb1ZYUDl3bmhISXVjaE1YQms2Zk9jdXdiUGtLZ25vSkJoY01o
NGVGWWxnQzZoSVMwb2NTSi9oY0Voa1JEcTVpc1lFSmZiMlUreVFtCktvckIzTXdNYmlpb0xnZlY4
Y2dBMUhZbnlpZllKT05pWXNDTkJSZ0E5WmJuTFZnQWxvTjFEcEFiRzJSWkFtb2N3TUN4WThjWjVz
eWIKaHlJUGFsZ2dBMUREZytRNHFhbXJZM2owK0RHNG56MXo5bXlzYW1DZFhGQVFnbHFRdU9JRWJ5
bGNWVjFEc0lTTmlZc2ZIRVU5Q3l6SApEL2xLaStYdDI3ZWZhT1dUcjErL2ZpS3JrMGtHcUFZSU1M
empZME1JVklOREM5akRaaTBwS2JFU0ZSWGxHMHF1Zi8zNjlhZWVucDVqCndFYnFiM0NiWGxsWm1V
OVFVSkNQMXJtRjJnRGtacERiTDF5NDhCYnNFWHJrUmxvQmtOdkJ1WDFZZVlRZWhUQXR4NFlvaWhF
T0RuWncKTzBZTTJNeStmUGtLdythdFc4bHlDS2pKcnF1cncvRHExU3VHSmN1V01mejQ4Wk0rU1F2
VVlRRzFrOFRGRWVQWUlJZUE4TVZMbDhIagpJTVFBUDFDWFFFOFh6Z2NGU0ZGQkFjUExsNjhZRmkx
WmduWFFqQ2lQRUp1MHZuejV3dkQ4eFhNVWo4QUF5R0VnZk9IaVJZYjFHelppCjFSOFlBT3h5Nk92
ak5COWtOc2dPdW1UMk5XdlhnWEZ3VUNDRG9ZRUJoanpJb1NCOC9zSUZoclhyMW9QRmNLbUZBV1Mx
ZEMrMVZxMWUKQThhaHdjRU1Sa2FHR1BJZ2grTnpQTGdUZU80OHVCTkl0ZUtYa2xJTE50UUs2b2Fa
R0JzVHBlZk0yYlBBVHVicXdWbVBnRHFuSUxOTQpUVXp3cWp0OTVnekQ4aFVyQjJjOUFpcUt6Y3hN
aVZJTDhpZ0luenAxR2x6a1VxMGVnUTJta2dOaVFWMVdjek9jOGlkT25nTFQyTlNBClBBN0NJRFdM
Z1VVdVJSMFNjcE5XZkZ3c2VBUU5GemgrNGdURHdrV0lBZnNGQ3hmaTFBUHlKQWlqNnlFbGFZR2I4
UW9LQ3NMT3pzNVcKeEZaa29CRTZYT0RZOGVNTTgrWXZ3R3RHVW1JQ2c1V2xKVTU1MEN3VHNSWHIz
cjE3anoxNDhPQXQyQ1B5OHZMQ2pvNk9Wc1NHQW15YQpIVFNMQVFOSGp4MWptRE4zSGttaG1aS2N4
R0J0aGJEMjhlUEhEQjFkM1NnenA0VEEvdjM3anoxOCtCRGlFVGs1T1dGN2Uzc3JVdE1sCnlFUHVi
bTdBV253RFJlazdNQ0NBWWVldVhTUjVBQVlPSGp4NDdOR2pSMjhwcWtkQUl6U3IxNnlodUFpbHhJ
emgyUjhaVmg0WnFoMHIKNU9JWHZFaUduWjJkMWNuSnlabVptWmwxS0hnQW1JSis3OXUzYisvUG56
OS9BN212R0tHcjFFQzFWQW9EQ2F0K0JnbDRCWW9Jb0I5TwpBQUJVUFZhUVpaVk1EUUFBQUFCSlJV
NUVya0pnZ2c9PQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdp
bi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxl
IG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4v
cGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9wYXVzZS5wbmcKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dv
QUFBQU5TVWhFVWdBQUFESUFBQUF5Q0FZQUFBRnBPTGduQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VB
bXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFB
QTZsSlJFRlVlTnBpL1AvL1B3TWpJK01tQmt6UQp4Z0tTNk8zdDlVV1hXYmh3b1RBVGlQSDU4MmM0
RGc0TUFOTi8vdnhoWUFGSmZ2cjBDYTdqejkrL1lQN3YzNzhoa2lDVk1QRDN6MTlVCm5jaVM5WTJO
RUJPQWtveEFXaGVJVzdHNGxnRWdnRUNTbTdCS0FMM3dINXNFQzh5ZSt0b2FNTjNZM0FLUlFIWTZz
bGRZa0YyRzdGSzQKUkdSMERIR3VBZ2dnc01TVUtWTjhHWWdFYytiTU9ZWVJPb1FBS05Rd1lncUVL
OHBLNFhSNFdDaUtIRHdlUG43OGlHRWlUQXlrQ0ZrZQphOHlDUUh4aUVncU43anlTL1FTeUNTQ0FR
S0UzQjRqRmlOWEVDQXpxL3d3a0FKYWZQMzh5a0tUaDE2OWZKR2xnQXRtQWpFRnhBY0l3Ck5ybzhU
aHRnNHVqeUxEOSsvTUNxQVNhT0xvL1QwekJ4ZEhtU25jUVlGeGYzbjZiQlNuTEU0Y3lpdUFCQUFJ
RVRIeTh2cjNSM2Q3Y0gKQTVVQjBMdS84L0x5ZG9DeWhWaExTNHNIcWQ0aEVyRHE2K3NMczJDTFUy
cUNmLy8rTWREUEVrSkpwYW1oSHM2dWEyaEVFWHZ3NENIRAp2QVVMcU9zVGRMWC8vdi9EcS84dnNK
cWszSkovK0MyaGlrLytFMnNKS2RrWFhlMC9ZT01FbjM2aWZSSVRGMCtVMklBbFlYakV2M3YzCjdo
TTNOemNmTFN4NTgrYk5KNEFBQXBWZEZrQmNSU09QdkFJMktGUEFKZXFrU1pNODJOallXS2x0UTJs
cDZRNWdjK0VwazRHQmdUQVQKRXhNcnFCRkJiZHplM2c0cTJjVllRTzFqVU9UUUVvQXRBZGxLYzB2
bzRwT1JFVndLOHZJTThYR3hZUGJCUTRjWURodzhCTzlISVBjbApLTElFVlBZZzJKaHFpUWxxZ3Bi
OFJiTGtQN0NDSXNzU2tFdnh4UW15SWRqVUVoT2ZCQ09lYXBiZ2o1Ty8xSW1UZ2ZmSlh5cEUvUEJK
CndvVGk1T3JWcXhpZFdHeWQyaEZTQ2hQSzhVUEhKMi9mdnYxRUs1OTgvZnIxRTFtZFRESkFOVUNB
NFIwZkcwS2dHaHhhd0I0MmEwbEoKaVpXb3FDamZVSEw5NjlldlAvWDA5QndETmxKL2c5djB5c3JL
ZklLQ2dueTB6aTNVQmlBM2c5eCs0Y0tGdHl5UW9wWDJ1WkZXQU9SMgpjRzRmVmg2aFJ5Rk15Mkdi
NFJjamxIcEVIdGl2aUl1SnhoQS9kUGd3c0o5eEdNNnZyY2Jzd2o5ODlJaGgwZUlsMVBNSUpVa0xW
eUFRCmsyUXB0WnVxTVlMYzRFY1ZKMnd1cFhaVDF5Tkk3WDFVUy80Uk5wZmFIaGxOV21pZEk5S1RG
Z1AxWW9UU2VtUWdZd1NsSGlHMnQwZE0KVDVMVVBQS2ZnVHAxMlBBcXRZWk4wcUkwVkVBelRKMWQz
UmppYjk2K1JURVhtNXB2Mzc4Tm5ub0VORmwvOWRvMWd1cUlVVE9nOWNobwpmMlRVSThNNGFjRVh5
YkN6czdNNk9UazVNek16c3c0RkR3QlQwTzk5Ky9idC9mbno1MjhnOXhVamRKVWFhT0l5aFlHRVZU
K0RCTHdDClJRVFFEeWNBbTNFdUFHQklmcElBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BsYXkucG5n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUu
CnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0
dG9uX3BsYXkucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRElBQUFBeUNBWUFB
QUZwT0xnbkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBCkdYUkZXSFJUYjJaMGQyRnla
UUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUJSRkpSRUZVZU5waS9QLy9Qd01qSStNbUJq
UUEKRlBkakFVbjA5L2Y3b2t1Q3hKbEFqRStmUGpFRSt2c3phR3BvZ05rZ0RBSmd5WThmUHpMOCtm
dUh3ZDNObGFHdXBock1Cd0VXbU02LwpmLzZBQlZMVE0rQkd3eVZyNnhzWU1PekY1Vm9naUFRSUlF
WWdNUWVJeFRCMEFiM3dINHNPQmlhWWt3dnljdUhPQjJFV21GTkJBT1IwCkVDZ3VMV05nZ1hrUXc5
a3dpZkRJS0ZUTGdSaWJjeGtBQWdqczNHblRwaVV6RUFteXNySTJnMEpIRE5rTlVSSGhETXRXck1T
ckVSNmsKTVBEbjcxK0c4dElTT0wrNnRnNHpiR0F4Q01OL29KRUZBMzYrUGlqeVdHMzYrK2N2UTF4
Q0ltbk9xNmlxSWhnWUFBR0VMeVZnQXhQQgphUmtZM0w3RXFONjVjNmNTMkZrL2YvNGt5bmdIQndk
dERBM3M3T3g0RGNEUUFJdVRwcFpXNGpRZ0o5SG5MMTR3VEprNkRUTVNmL3o0CkFjZklRRkpDZ3FH
MXVRa1VpbkI1Z3A3T3ljc256a2s5dlgwTU4yL2RJdXlIYjkrL00yUmtaaEVmU29sSnlZVFRFN0VS
OS9mdjM5K2cKbk5nR3hEckU1a1NBQUNJMThaRURyckRBTEpnMGFaSXZMV3pJeTh1RGhCVXA0VVVP
SUdoSmJIUVVnNXljSE1QTFY2OFk1c3lkUnh0TAovdjJEMUFIaVltSU0xWlVWY1BHMmprNk1yRUcr
SmYvL1lSV3ZxaWlIc3pkdjJjcHc1T2hSU256eWo2QkxmWDI4R1I0K2VzaHc1ODVkCjhpejVqOE9T
NzhEc1dsUlNTdDA0QVlHang0NHh6SjAzbi9vUlAzM0dESWJYYjk3UU5nay9lZnFVNG56Q0RNU3Zn
TmlDaFlXRmtZZUgKUnhoWU9ERlFBLy82OWV2M3BrMmJ0b0VzQVFnZ1dObmxER1RuVXptanZ3S2Fu
UUpyMjVCVW9wSUtRSzFUY01zcUtTbEoyOFRFUkluYQpGb0FhV3lBZmdTUGV3TUJBQ2IzNVEwVWd4
Z0t0aVJob0NjQ1cwTkFYaUFZSHZxVG80ZVpHZGpJbTJpYzZPdHBndkdUcE1tQWgrSWo4CjRDSW1U
bUtBbFJlb1ZPanM3cUZ0bklDYWs2Q0czb1VMRnhuV2JkaEFmWjhnQXdNRGZUQ2VBeXlSNzkrL1Q5
dlVsWktVQ0s2QzZ4dWIKQ0tjdWtDVzRNQ0hBd2NIQjBObmV4aEFTSEl4VEwxVXk0OU5uenhpV0xs
dEd1OHhZV2w0QnJvcXBIdkVnc0hyTldvWjkrL2ZUcGxoNQovT1FKUTFOekMyMHlJNnlMOHUzYk45
cGt4cVhMbGpQczNMV0xzbElZbjAraVkrT0dSbEZQdjBvTFdMcitabVptWnFWcHBiVmx5NVlkCm9I
WVN0ZHBjSUh6djNqMVlCM2dpcUxYQ0RjVExhZFZmQkRhSnFnQUNETmE0QTFsVVRjdjJGNjA4QWNT
dFFEOThCWVVXU2dzMU1qSlMKM2RMU1VwR05qWTExTUxvY2xIVDI3ZHQzYThPR0RmZVFoNTFRaHYv
Nit2bzhCcXNIc0htb3FLaG9CMFlQQ054VEFlWkdXbWQ5YWdIMAprZ1BGSTdRdUpHbGVOaUtOWTVG
c0FEOGZIOE5IcEhIWFFlRVJjbUxFdzhPZFFVNVdGdHdNUDN6a0tNUHBNMmVHcGtkQXhUZXNxZS9p
CjdBVEdJSER4MG1XR1hidDNFejFPTmVCSkMrWVJkS0N2cHd2R0lQRGk1VXVHSFR0M01qeDQ4SER3
eHdnK0lDRXV6cEFRQjJtMmdXSm8KMy80RERNZU9IeDljTWNKQWhFZlF1MHBlbmg1Z0RBTG56cDFu
Mkx4MUs4VkprQzR4Z2c4WUdSbUNNUWc4ZS82Y1lkT216UXgzNzkwYgppRHhDdmVRaEpTbkprSkdl
Qmk3NU5temNSTEJyT0toaUJBUytBNVBWOXUwN0dBNGNQRGlBcFJZRGVSNTUrdlFwdytxMTZ4aHUz
NzQ5CmRFb3RHRGgrNGdURHFsV3J3Zk53UTZZZUFTY1pvSU0zYmQ3TXNIdlAzcUZUczhOSFFSNC9a
bGk2ZkRuRGpSczNoMTRUNWZDUkl3eUwKbHl3bGE1UmwwQ1F0VXNlZ0JtMk1ESnYreUdEeUNHZ2VE
cnlRNk1hTkcxZFZWRlMwaDRMRDc5eTVjeFdKK3dvMkhFVFRxVGhhRHduQgp4N1ZnQURwNUdjbUFa
YW5YSUFPZ1ZMUWM2SFo0QlFVQXV0NlZuSlBiV2lVQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9zb3Vu
ZF9vZmYucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmlu
YXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9p
bWFnZXMvYnV0dG9uX3NvdW5kX29mZi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlw
ZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdB
QUFESUFBQUF5Q0FZQUFBRnBPTGduQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hS
RldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQm9oSlJFRlVlTnBp
L1AvL1B3TWpJK01tQmt6UQp4Z0tTNk8zdDlVV1hXYmh3b1RBVGlQSDU4MmNHVnhjWGhxU2tKREFi
aFAvOCtjTUFsdnowNlJPRHJwNGV3NnVYTDhGc0VQNzkremNEClhHZGFXaHFEc0lnSWc3YVdGbHdu
QzB3U0JISnljdUIyZ2lRWmdiUXVFTGRpY1MwRFFBQ0JKRGRobFFCNjRUODJDU2FRUFVhR2hneEYK
UlVWdzU0TXdDOGlwRG82T0RMZHUzZ1E3RzBVSHlObHE2dW9Nems1T0NCMHdKMGRHUmhMbktvQUFB
a3RNbVRMRmw0RklNR2ZPbkdNbwpvWU1NVWxOVEdXYlBubzBoamhHa2lvcUtESGEydGd3L2YvNWtZ
R1pteG1vWVhOUEhqeC9CQXRIUjBReWNuSnhnOXRPblR4bENnNE1aCjVzeWJoNklKRkxNb05tVmta
TUFsZ1RIQTBEOXhJbUhuSVFOUU9HTURJSnNBQWdnVWVuT0FXSXpZMEdNRUJ2Vi9CaElBQ3lpRVNO
THcKNjljdmtqUXdnV3lBNGJpWUdGQStaS2lvcUdCQUZrZkdjQnNFQlFVWmpwODh5ZUFDekhvZ2dN
dG1saDgvZm9BWjl2YjJES2FtcG1EMgoyYk5uR1dEaU9EME5vc0dSdzhMQ1lHeHN6Q0FwTHM3UTF0
R0I2UWVRMVNDOGFORWlocXlzTExBbUVHaG9hbUtvQXZvRkpnL0RUT2llClNrNU9acmgrL1RxWVhW
bGRqZUZweG9pSUNOcEdITTRzaWdzQUJCQTQ4Zkh5OGtwM2QzZDdNRkFaQUFQcGQxNWUzZzVRdGhC
cmFXbngKSU5VN1JBSldmWDE5WVJaWVhOTUsvUHYzandHbkpiWTJOZ3pDUWtJTUd6WkJncCtEZzRP
aHVMZ1lYT0pPbmp5WmRFdXc1WU85Ky9ZeApPRG80TUNRbEpEQzhmZmNPWENPQkFLamlJeVhINHZS
SldGZ1lPSXZBd0pldlg4RjVqSTJWbFVGR1ZwYWs0UDM3OXk5MlMwQVN5QUJVCi80QUFxSUlDMWEr
UkVSRU1DeFl1Sk5vbjREUVBMS0Z4MWo3QTRoSmNQOERBMjdkdkdVNEJpeHg5WVBDOUJGbzRhODRj
dkpiczJyWHIKR0F1K3NnbTVoQWZtSXdZaFlFSUFnVFZyMTRLeEliQmVKaFEvZUZNWE9nQm1LakFO
aWl1WStoTW5UbENXaEhHQlk4ZU9rWlJQNEJILwo3dDI3VDl6YzNIeTB5SXh2M3J6NUJCQkFvSWkz
QU9JcUdtWDRWOEI4bFFKT1haTW1UZkpnWTJOanBiWU5wYVdsTzRETmhhZE1CZ1lHCndreE1US3ln
S29mYXVMMjlIVlN5aTdHQWlnbjB6RWR0QUxZRVZuSFMxQkphKzRRSlpna3hPREF3a0dpMU1BeTNC
RnVrZ2RwUXdBUUIKNTRQYTRpb3FLaVJIUGw2ZmdFQk1WQlM0Y016TnpXV1FsNWVINTJDeWZJSk5j
c2FzV1dBRi92NytERnhjWENqRkJLbVdZSTE0VURjQQpCTVFsSlJtZUE0dnpTNWN1TWVnQmkzWldZ
S1ZGVGlKaEFaV1M2RWs0SlNVRnpnYVZ1cUJhRVdZUk9ja2RhOFNqQTFoVkRMSUlGRWRVCmlYaHNB
R1pSRHJEVkMyb21VeVVKZi8vK0hhZEYrY0RVQnJLSUlwK0FraXlvdXp0anhnd01pNXBiSVIzcm9v
SUNlRUlnT3dtRDhMbHoKNXhpYW01c3hhanBRNXdCY2xBTWJlMlFuWVdUdzRNRURzTTlnclVhWTJ0
cjZlc3BTRnpvR05VMHpNek1aaUZHTExVNklMb1ZCSGVMWQoyTmpCVzlSanpmRkRzdEppQWJadFA5
SEtKMSsvZnYxRVZpZVRERkFORUtCZDgzbEpJSWppK0FzU2I1dXlHQlo0VVpRNm1KNGxpZ3p4ClVJ
UUVucUt6aHdnVXZQa3YrRTlFUHluc0ZpTFdIcVdqcHhKRVBZcHJIaW9QMFY2YTkycVhSWFRUYk1p
dEhneW9NTFB6ZFg1OTMyZlcKa0krWktETDBiN0VNMjVKT3AwTU9oME13VSsvYjdmWlROcHN0c1NX
c2tLZjNlRHlDM1c0WGVLK1c3dzdzTS9hOVhDNTNwdFdjbWZkcQo1QlhZZDFydHYwb0l6MDNZNi9W
Q3RWcmx5b2ErUENMQlFBRHU3dThORVVFOEhpY1JpTEVybGNwa1RTM3MyTXJ5c2lhR0pmNXdsYzly
CmdoQ0dKUklKRUFUQmtBUnhGVExNMUVKNGkyVnRkUlY4UGgrQm5OMmRIWGhrVm1sdWZoNXNObHZm
Qi9IY0RjZGE3TmVTUkdWell3T0UKbVJueTVMVmFqWURld3VJaVdlTWZHNUhQSGhhTHhTaGgwQXdu
U3hpd3FMRHd1ZHVGVjBXaDlFZ3ZpUGVPT1BMVXd0eE4zL2xCOUxOWApFRTY1aVpwYWFnV2o2Q2Vv
OC9CQW9PSHMvSndMb2gvNUhCbEdTRDlCV0k5NU9OamYyd05abHVIazlCUmV2bEdRZW82UWFXUitS
WXhHCm95R2pDcUlvYXJoWmhTRklXajRMM0tLUmdTLzUvZHB2TFNibzZQaDQ0STNhS0ZFb0ZFcHNv
K21RRUxmYkxVWWlrZEJYR25LNVhIU1IKcUFmNCtrQ1luOGxrM2hIVDFoWkJmVTFRcXdVSGg0ZGpD
U29XaTZWNnZkNFoyNkkwR2cwNkJGRVE1dmY2VVZORGJUdDNlVWxsbSsyQQp3V0FRbXMwbWRObGEr
akdMTWdoVTRCVVhRajBrSTNnNElyTHMxL1pGTGtkbG90MHZjb3BrTWttZlU2a1VPSjNPeWJNb293
YmVSLzNuCkkzOWVpTm55OVY0aDJrc3lWcXZWRWc2SDE5bDVZREdEQURhREZFbVNicGp0VWRoWGVl
cmpMVFc4dU1RcmhWbVREWWlNQThFMDNMNEIKaHJkTXFYYXdkeVFBQUFBQVNVVk9SSzVDWUlJPQoK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0
dG9uX3NvdW5kX29uLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBh
cyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vaW1hZ2VzL2J1dHRvbl9zb3VuZF9vbi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1p
bWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5T
VWhFVWdBQUFESUFBQUF5Q0FZQUFBRnBPTGduQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFB
QUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQm5WSlJF
RlVlTnBpL1AvL1B3TWpJK01tQmt6UQp4Z0tTNk8zdDlVV1hXYmh3b1RBVGlQSDU4MmN3VGtwS2dy
UC8vUG5EQUpiODlPa1RRMzE5UFFQSUNpOHZMekQvOSsvZkRIQ2RhV2xwCkRQLysvV09ZUFhzMlhD
Y0xUQklFY25KeTRIYUNKQm1CdEM0UXQySnhMUU5BQUlFa04yR1ZBSHJoUHpZSkpwaVRpNHFLd0xT
R2hnYVkKWmdFNUZhaUxBZWFOdlh2M0luU0FuQTF6WlZkWEY1aG1qSWlJK0UrU3F3QUNDQ3d4WmNv
VVh3WWl3Wnc1YzQ2aGhBNHlTRTFOQlFjagpPc0FJVWtWRlJZYVVsQlF3KzhPSEQzRHgxdFpXaHVy
cWFyZ21jQ1I5L1BnUmpLT2pvK0VtZ2lKTVUxTVRMUDc5KzNlNEdsRE1vdGlVCmtaRUIxd1FLeTky
N2QyT0lZemdQR2NEQ0dSMkFiQUlJd0RvVm5FQVF3c0RzNGtmOFh4VitmV3N2OXFCVzR1c2E4V2NY
dHFKKzdveWcKN0M0SUoxd2doQXlKSVJNSDJYczNmLzNLM3RHby9zQ0drVklLYkRYVVdyY2FUcHh3
OVNZM2NNN0JFeDkrNGdSMHhoaHd6c0ZhMjE5QwpESldHMFJnRG80N2tuSHVCbEJLRUVIUDB3REZT
U21jK2w4YllqMFBJeksvNHlJLzI4VzYwZXU5NzB6aWVVZ3Bpak91bHRkYVFVcHA1CkNPRk95a3Ba
Znp2Y1VxSXIrd29nY09MajVlV1Y3dTd1OW1DZ01nREcyKys4dkx3ZG9IQVhhMmxwOFNEVk8wUUNW
bjE5ZldFVzVMaWwKQlFDVkZrUmJ3c0hCd1ZCY1hBd3VjU2RQbmt5NkpmaHlvSVNFQkVOV1ZoYWNE
NnFWME5VSEJBUXdHQmtaTWRUVjFSSHZrN0N3TUFaagpZMk9zbG9Jc2dhbnY3T3hrbURoeElzUEts
U3NaN3Q2OXk5RFUxQVRQd0REdzkrOWY3SmFBSkhBQlpFdEFRRTVPanVIKy9mdmdZTVJtCkZrNmZ6
SjgvSDR4QkFGaGNNakF6TTJPMVpNYU1HUXdYTDE0RXMwSFp0NmFtQnJjbCtPSUVWa2dBOHhHRGtK
QVFBN0w2MDZkUHc5V0IKTEtFNGRRRXpGWmdHeFJVcFNaNGtTMkRnMkxGakpPVVRlTVMvZS9mdUU3
QjQ1Nk5GWm56ejVzMG5nQURVVjdGcWhFQVFGZkcwdEFpawoxVSt3ekNmRVVyQVM3TkpZQ0RZMlNX
bGhaeUg0TC9rS2Y4REdKb1dLemFGOTlpMnM4UzY3Um8xQ01qRGNpblA3bkdIbXpReTQ2NG5vCjYw
a0YzNUpFZWFHTW11ZjVzNnFxbDZNUjRqaCtKK1BDaDJ4WjFvTXN5eGYwbzZNMVRWTXcrNk9DdkY4
cXZpT0VnZ0QxZEpDelBaRVoKeUJwMUhHZTFMZE5ONGZKOVh6SU1ZMWRvVjRVcmlpSkoxM1VoUTJQ
a212UFk1bkNCV1JrQUE3bFgyN2JwMENjS0Z4Y0VQUUtLcVhGTwo4M01Rei9Pb0RjNFk0REVvQ2tI
QWt2ZEZoRDBEZWcvQUpuOG92TVAyaUhQWGRmUWRLZXh2ZDAyZThGNkloTmtVUlNFUnByajVqMm1h
CjNMczIxd216eFZmUG54R1JxcXE0ZDNGVEdNL1liUkJubmljUTEzV2xwbW0rUWtLOEV2VWFyaWRo
R05KZk12M2RiR0x6TDhjNmpOVU8Ka21VWjlVUVVrY1VVTHN0U1NwS0VtMTNETUV4blRkUG84cmtw
aGVkYTEvWGttYWhPc0NLM2Jic004bE5md0V3VkJJRzB4dlpYMllXRgpHUHoxWjZsZVlSWC83NXVX
MHZmOTlTeFB4bkc4N2xveWQ4amJwd0R0bXI5cUFrRVF4aTlCRVN3T0xSUXNyTVRHemtZa3BXa0ZL
NS9CCldyRExLd2lXTnFsOUFzWEdhQmRqSnhaaXJZVTJhVklJWXBQN0RkbGpGZlZPNHlXNUpBTmJM
YTR6T3p0L3ZtL3VKRC9tSTNtUTI3SVEKZHJCV3E5M0ZZakhUVDlwYlpleXRYcTgvV3lHOGxaNCts
VXFaMFdqVTlEcGFyaTNvak83ajhmZzFvRUNnMTlIb2xhQzdSUHV2TXNUTApKSnhPcDZXQjhaSWI4
dFFqNVhKWmpJQ2VuczFtL25wYWtHR1ZTc1V3VGRNMUUzUjFRejd6dENEY2dCQTZmdEgveU0zWnVW
eE9Sa2N3CjQ4MW0wMWl0VmwvbmtVUWlJUzN5SWZqaTVCSEdMSEJ3U29iRG9hREJlRHd1WjdiYmJX
TTBHbDNmRUNoTUdDNjc0UXdFYkJMZjZZLzAKc3pPWmpOMS9ydGZyblRhKzBXZ0lsWnBNSm8xaXNT
aUdMcGRMVjRiYzZ1NC90YmgxRkNjT1dHNk0yTWQ5ck1sa3dyeFNqQXVIdy9LYwo5UDFPcHlPY0kw
OHNtODA2Nm5XMlI5UVBMZ25HL2JNWGk0VW9xaEtFdm05MW1nSUh6OVhMZFIyNTFCQWR2eXFwVnF1
aUxFcmlBWDJmCllSWGVabys0Y2RKcnA0NjRTWkVFbnc2YUNkWlNxWFFXMmtjQTZ0dzY0emptRllx
L1FQTDV2SXdTa09sMGFzem5jL2VBeEswTGdiTXMKSlJTNWJyY3JnY2tnOFZqbTJqOGJMSDVvNXNG
b2d3RWVuc0lJZUpRdmJWSElMQlJCREFMZnF5SEJxYWQxU0ZxdGxwMmhCb1BCOTdVbwpFQldNdU1o
RXBOUklKQ0szZTg3WnZWN3Y1M1MvOEJUUW9DcW9xZnErYVZHT0NmT29menp5NXczeEcxN2ZOOFQr
U0NZVUNnVUxoY0s5ClZRK0NmakRBZWtIYmZyLy90TmxzdHBTNW00K3YxQmhjOHVsUzNHY09vVUkv
V2phOHZBTU5iSFJMemx5bExnQUFBQUJKUlU1RXJrSmcKZ2c9PQoKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMS5w
bmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlw
ZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9s
b2FkaW5nX2J1ZmZlcmluZ18xLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAg
ICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNr
QUFBQXBDQVlBQUFIZlp6QmdBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hS
VGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBOGhKUkVGVWVOcGkvUC8v
UHdNMndBUmpkSFoyClRnTmh1QXhJUjBkSHh6UVFEY0t2WHIxNkREWUZtUVBDTTJmT1hBQ2lHV0Yy
d0l3cEx5L1BBdEdNdUN3SENDQ3NFa3hJN1Avb2dpQUIKeGxtelppMkFPeEZtKzM4SVFMRU1yQnJk
VEVZWUF5Q0FjRG9MYnpnaEdmMS8rL2J0bTJGc1ZGbWd5UlVWRlIwZ0YzMzY5T21ObVptWgpEMGdN
UkQ5NjlPZ21TQndxRDFHTWhNRmcyN1p0bS84akFGeWVKRGNEQkJEUmlwbklDZ1ZHUmthcHg0OGYz
d1JoRUJzakJFRFl6YzJ0CkJCWUtJUHdmNGlaam1EeUt6NEVTYnVpaEFSUmpneXVFQlF1VXhpckdB
UFUxRzFTM01Od3FCZ1lINVBCa1FKSXdSbmRqWW1KaUhUWTMKZ2hSTGdhSVFoRUZzc21LSDZBQUhD
Q0NTNHB2Y3RFeGJROTNkM1V1UU1na0dUa3BLcWlQYVVHZzYrNzl6NTg1dUtOOGRtcWNaSVZ4RwpS
K1FTRGNobnd6QVZMWWt4d0hMa3o1OC92NkhMb1JWeWNBQXFBR0ZKRXoweHNVRkxSemhBS3FNd01D
ekJJWmVvV0JNZXpQRFMwdEllCmFPckV5REJJU2Z3L1ZGNkJvS0hvV1JVWFFNNFM2SGpvcEZPQUFL
SzZTNWtHdmJmcGF5QXd5L2tlT1hKa3o2OWZ2NzZCTXR2NTgrZVAKZ2NUd21vZ3RUWUhLYnZTY2hD
VUxDbVBWaXkzblFQTTNITUNLY1dReGFIWWtiQ0J5Z2JBU0NJQVc4Q0piQmhJRFdRaGtCMnRyYThm
aApOUkJXWGNGY2hTdWJBWUV2VEIyNm9lZ0tqWkVLQVRjY2hqbWdoeW15b2VDY0FpcEFnVFhyV3BC
cVQwOVBIeEFOYlBac2dmSlJZaFhhCkhNSlE1K1hsRlF3MDZ4ZmNacWd0LzlHS0tnZENyZ1N5clhC
NkdkbFFhRGhoRFVQa0dFZU9ORnpKSmhpRVFURUphbUJnaTJXME5odmgKd2haVzVPTkxoOUNrdzB1
VWdWVE5LZWpwN2ZEaHczdEFyZ0hoYytmT0hjTVh0alNwQ2taZ0FRc1FvQjFyeDBFUUNLTEJHSXdG
RlpXeApzZklDV2xGaFE3Y1ZkNkgzQUY2Qk0xRVNENkFINEFMT1M0WmtISGRoRVNqOGJETFpoRjNa
SnpQejVzM09VazQvb2p6L0pNamw2SGdKCmdvaW1EUmdEaVU2MjRxVWJXVU4ycDVCcVJoM1NsZlFP
OG9EMk51QklUWG11SVhqVzJPaXY5OHdCNEdJSVdxMEpoZzc4SHU5eDBhdk4KRnA0dXpZaTNxN0lz
ejJFWXJ1VWFkZHpYb2lndTZIN0lqbVJibms5NGpuWEhhK1BKM0ExWllYTXJ1Ky9nNllVOTdwajRD
K2F0cUVMQgpRajJYSGRZN3hXdUg0cVVCb29FYUdsdFFJYm9GbE5XMUM2dzE5bkIxd0dac2VnQUhp
ajFSRDdqRUJjNFg3RXZtWWxPWHB0RDlyZFptCkZwQ1IrRU5wWGRlVlJRUG1Zay9zSzM0NndUSzRk
Q2gxdGZkM2NyRCsyWStKeVNld0RDNUhBbkFYa2ZnbWp0U2VTamFhMlhrU01jcUoKbENIYjJXV1lV
M3c1cldlVkZEVmZRK1lmVVJaSDYwa2xNT1JkNzJRQzR5OTZmd3JrQStOOUxlQ2pXR1RnQUFBQUFF
bEZUa1N1UW1DQwoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdp
bi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxh
eTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9z
eW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18yLnBuZwpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
CgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNrQUFBQXBDQVlBQUFIZlp6QmdBQUFBQ1hCSVdY
TUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpW
SmxZV1I1Y2NsbFBBQUFBL1ZKUkVGVWVOcGkvUC8vUHdNMndBUmpkSFoyClRtTmtaUFFGWWphd0FF
aEhSMGZITkJCOTd0eTVZek5uemx3QVlzTjFuRDkvL3BpaG9hSFYrL2Z2djhGMUFBRkl1eTlNSndn
ejRySWMKSUlDd1NqQWhzZitEWEFSaXNNQUVvTHJBTkJOT0R3RzErY0ZVNDdRSUlJQndPZ3R2T0NF
NTVQLzI3ZHMzdzlpb3NsQ2ZnMXdLQ2pzawpQc08yYmRzMi80Y0FTSWdoUzBJbC9qOTY5T2ptZndS
Z0lCaVUyQUJBQUJHdG1JbXNVQUFHc3RUang0OXZBbWtGYU1yeHhWQ1lsSlJVCkIzVEdVd0VCQVdF
Z2x4ZkkzcFNZbUdpSU5haUFYRGVvbTZXQTJBSFo5OGllZ2NjcldvUXdZbk9qRzhpZFVMWUQxbGh5
YzNNcmdWcXYKKytuVHB6Y2dOdENOZFJneEJFcllVS3dBaWlHUU84bUtIYUlESENDQVNJcHZjdE15
YlEwRnBRQ2tUUElmbXEyTmtmbWdvZ1JlOE9ESQpTTEFZa1BxUG5ERWdxUVNySEZSZURjTU1kQUZZ
Wm9QR1BRTXVERXNiVVBVb2NqaTl6ODdPemtWMm9CTHlQdFNMVWtqeWJyamtjSG9mClZHUkRDeWxr
amNib0ZpRm5DWFE4ZE5JcFFBQlIzYVZNZzk3YjlEVVFWQTJBOGpPc2dvUVd3YjdJbUdCQ2gwYVM4
S3RYcng0anAwRlEKNVlsVWdjTFNhakRCN0FpMGxmZm56NStQUlVWRlpXQmlOMi9ldkhqcDBxWEh5
T3ArL2ZyMUhVanRJdWpDbFVBQWN3R0lEY3BGV0twNAp1S3Z4WmtPbzV2KzRTaGVRQVNCdklqY0xv
TFVwVGdPTmtSUzY0Y3EzU0xVc0xNL2pERU1wSlBZRFBBbmdGZzQ5R0FZK1EySXI0REZRCkRZY2Uv
R0VJQ2k5c0FVOTBHSUl3dE5HTE5TWkJtcEZUQWNGWWhya1NtQTYvSVdzQ1dZTFc0UHNQVW9QdU9s
ejFqQzhiR3hzbnNvQ3MKckt3d0VNUEQ3ZlhyMTArQTlaQXMwSURQNkpwWnNCajRDOXAraG9HZlFG
Zm1mdjc4K2UzRml4Y3YyTnJhVGdRYXRKbWtSdjFvQVVzUwpBQWpRanJYaUlBd0VVVU53S0FTQkE5
QWFnc0NoVURnVVo2aENOeWtXRElJejlBQ0VJeUJJbXFDUnZRR0tDMkJnSHBtU3lXUzdaV2tKCklU
REpCa1FaWHVmMzN1eGI2UFFyNlBrblFkWksxd3V4RzMyME1USEUxRDFUR1IwcVEybVR4am5jQWpB
VGpEZzU4dlE4QmU5b3h0UUcKZldyUzh2clVIQ0xXSkVFN0kyQ1JIcCt1QmgzaCsvNlN2dUlsTHBW
RUVwSFQ2a2ZTV3hSRks3QTNvc2Nwdng5YkpPRVBmcC82L3ljQQpqck9OU0JxTG9hN2xkdytRNGw3
cGFtQy9TU21RVUJWSmt1eTA4ekFNMTFLdDVXblBJQWptRUJGOHBWWG4vY2U1TG90QWpuUnpzSG9a
CnVEWWMrK3VsYVhvMGJJbldhQmJPU1U3Slo2MUV1aHVjeGltbnRWbmdxNDRHcXp6ZHRzWkJVMlI3
T00vRmpzVkhWMnJQU2h0SEFzMGIKUVJJa3kvY0JuekVpcnZYc1cwYVF1SENlbW9yZWhXR3k2S0hM
aThyRHFYR0lhWHFVMWowOXZQVThyLzlLM1VON2I4aWd5MG5JdCtJNApYcEMvODBmMEpJRVlJa0xB
SmM3SnRGMzhSZThmWkk3ZEFCS29LaEhXQmd4eEFBQUFBRWxGVGtTdVFtQ0MKCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVy
aW5nXzMucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmlu
YXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9p
bWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMy5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUt
dHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhF
VWdBQUFDa0FBQUFwQ0FZQUFBSGZaekJnQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEK
R1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQSs1SlJFRlVl
TnBpL1AvL1B3TTJ3QVJqdkg3OQordkdzV2JNV3dHVkFPam82T3FhQmFHUTJFd011Z0t6eTFhdFhq
MkY4Umx5V0F3UVFWZ2xrOC8rakMvNDNOemYzaFVrd0VUSVR4R0JFClY4a0lZd0FFRU55OXlMaWlv
cUlEbXppNndQK1pNMmN1ZVBUbzBjMy9DSUJWOGY5dDI3WnRScGFFOHYvak5Ca0VQbjM2OUFaa0F6
NlQKNGJpbnAyY1NObkdBQU1JWjd2aUNIQkpHakl4c0JCV0NGQUZ0K1BuNDhlT2JRTFlDMXJTUW1K
aFlCOEl3VDRGb0tCOHpxSUQ2SE9BUwpFUFovYko3NWp4S05lT0lhNUVZM2JHd1VoZTd1N3FWQTAz
ZisrdlhyRzhna29Qc3NRR0pZRXdvUVNNSGlIY2htSXhqZzBHRDZSVERoCll3TUFBVVMwUWxJQUUw
RmJnVTRHbFFmYnQyL2ZUTFNwMkZJZzFQWEcwTElESzBCT0RZUnlIVGowMGZRemdQSUpMSk1ocFpy
LzBCaVMKSW1nb0xEcWg2Uk9uVDJEcEY2b2VSWTZKZ1JhQWtQZUJmRGRZbVFJS0JpQmZtR1R2dzdD
Ym0xc0pya2dDUlNBb0lvbU9LRndZNUZKUQozWUNlZFNncXYwZ0JBQUZFZFVPWjZKNDlRVUJIUnlj
T21FMkZLY3FhTUt5dHJSMkhLN21RSE5zd3cyRGczTGx6eDRBRys1SnNJQ2d4Cm95ZG9aQUJOUnNM
RUZoeThQMy8rL0FiQ1FIWXd6SkFiTjI1Y1FEWVVLczlMMEVDa2FoeVdPeHhnWVFoSzNDdUJBQ2FQ
M2dUQU1CQnEKNDMvMDBnVUlySkJkZzl6Z1FIY2xScUdMcE5BQlQrSHNnS1RPR0YrUkpvWEV2b1Vu
dGQzQ29RZkR3R2ZJNlJsZldzZWhoK2d3NUFXRgpJOGxoQ01Mb3NRZzFUQW9XcnNqeVVEYkJkTWdH
U21QSWFRN05SY0ZJNlpTTjZKd0NiWEJqQlVnNWliUzhES3BmRGg4K3ZBZFc4NEVBCk5IOHpVRlFW
d01LUWtHR2tHQ2hNakdFMHFWZW9YZ1VBQktqR2luRVRCb0pnd3crUUc1U2FEN2hLaHg5d1ZacDh4
QlUxWFI1Q3cxOW8KWEVaS0VZbkM2VklnM01DT3RDZXRSbWQ4NUphUVdGcFp4dlo2MkwyYm5kMjdW
TDZIMUtuc2Z5eVNjNnpyZURoSUFFUEJsVDMyTGl5dwprK3VGSjhoWktUaForYThDYmxOVjFaUCt2
QmQ3bG5zSE9YK0pIV1JKZmJ1SzBWekR0cnpHVGx4K2xXZERxZ3k3Y0VYa0MzUWVZRGFjCndidW00
YzQrQUZqZm43dUNSQVE0YXVaandZTFZpSzFndUU5ekNWWk13UVVrSEhFbGkyVlE3aTJ0eElndEdn
dE1QR2RMS0ttd1VBUVMKemlFKzJUbEdQRG50QjVkdEhRMmRFK0oyV1FJeXNGT2s3MXF6TmVHdjV2
VG5SSE9LSjAvRE1CeC9vYWljZmt4QlNBTzBDa2V6YmR1MwpXNmtFeitNOTlnWC9SZW1PS2JlQ2lq
Wk96VHJKTlBkMk9sYW5OZzc4eHFIQVhTaklybEdOTElacUs5c09LZGdBS21LR2NLVWdKdk1VCkhV
MGRDdmFGaXNIY3ZlSllLa0hVOE9IVU1oZ2o3bHgxNndKeUJEUm12RFhBMjNSSGNMZHlLdHVzbER0
MHl2b0JpeEt0Ny92UHBtblcKWGRkdGVRcjdKNVI1RkwwZTRQNVYrM0FCWnR5K2I2V1JRMzRBQUFB
QVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBs
dWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfNC5wbmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlz
cGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9x
dC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ180LnBuZwpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNrQUFBQXBDQVlBQUFIZlp6QmdBQUFBQ1hC
SVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldG
blpWSmxZV1I1Y2NsbFBBQUFBOU5KUkVGVWVOcGkvUC8vUHdNMndBUWlHQmtaCjJUbzdPNmVCTUZ3
R3FzUDMzTGx6eDBEc2pvNk9hV0F4WkE1SUVxUUlMZ0dUQkdHZ0JCdUl6NGpMY29BQXdpckJoTVQr
ank0SUVtQ0UKU1REaDlCQ1NLa1owbFl3d0JrQUE0WFFXUG1OQlllVUxOZnIvOXUzYk44UFlLS3Bo
SVFIRS83ZHQyN1laaWM4QTVmK0g4WkVWTTBBbAovaU1wK2c4TFg3eEJpUTBBQkJEUmlwbklDUVUy
SUpaNi9QanhUUkFHc1hHR0FBaDgrdlRwRFFpRDJJbUppWFhZZlA4ZkpWZ1lHQnlRCitjaWUrWThj
amVoaUtKNEJ1c3NOVzNwQ2NTUFVQU2h1eEJsRFFDRDE2TkdqbXlBTVlzTVNPVW14UTNTQUF3UVFT
ZkZOY2l6UzFGQlEKUmpsLy92eXhwS1NrT3FSTWdvR2g4dGdCV3Q1Z2dPYUYvMGg1d3cxTjNnMU5Y
Z3JEREN5R0tnQ3hNUkRyUXFNVVF4TUl3OUlHS09vSgpHZ3BWOUIrcUNadWxVbENzQzdWY2dSaVhT
cEhvZlYrQ2hxSm5BMXdBSkk5YzNpUGpvWk5PQVFLSTZpNWxHdlRlWnFKSFhsZER6L2UvCmZ2MzZC
c0lnTnJUU1pDQTZuME1UYi9DclY2OGU0MHFQSURtZ0dtRnNhUmxiTEdNSUFDdXVXeUJhVmxZVzdu
cWdpNyt6czdNTEFQWC8KSXVoQ0dGZ0pCTWoxQUlnTkVrT1dKeVliL2tmTHU4RzRDaFdvUEJ1aHdz
SVlpbUVsalRBV05RNUlCaHJqTkJDNTRNVlZQcUtYVU9nRgpCUXRhK0Q5RFlxdWg4VUhKU0JoSXNV
UFpKdEE0T0lzelVvQ0FGMll6MWhJYUVwNFl3WXczREpIYllkaGlHVmtlbTRFWTZSRG9GZDZmClAz
KytaR05qNDhTWERyRTFXSEdsUTVDd01CRTVKWmdvTDZQSE9yVDkveC9vNm0vb3hUK284cUo1VlRB
Q0MxaUFBS05KZFRva3F1Y1IKNlVnV2l0TUxzRlFCVXBLZ01oQmExQ01Yc3ArQitEa3dTWDJteUJK
OEJRVnlZUUVxYVVCbEk5UXh2cUF5RWxSNC9DY0NnTlNCMUlQMApRUXQwQmxJd1VZNkVXWGJqeG8w
THhEb01uNE5CRFdOY0RSR0tIWWtOZ0txM2lvcUtEbER0amRScEFkRU9wYVdsUGNqTkJDejFnQy9O
CkhZbWNEQWlZb1liY1VFSWVMVUR2MjJERHhHU2NuOXUzYjkrQ1N4S1kxaEpXcjE2dERXUTI0VW4z
dDRBWkxCYllrTDNmM3Q1ZURoUG4KNWVVVlBuejRjQmxRN2dGSURWbUZPVkN6RmRBUmxXanQwcmZw
NmVrTlFIMFB5Q2dKaklIUnZ3eExtellBYU40dWNvc2dIbWNnd05KbwpBYlhSSHBCUm1Md0Z4c3B4
b0NQUlErMExKZVhrZzFPblRoMnpzYkZ4aGdtQVFnR1lJU0tCb1hJWm8wV1BCdExTMGlvREF3T3Rr
SklHCmhob3ZMNi9KUUhPT1VWeE9ZaXQyb08xTE5RSjZRZVZxTUtqb3dwWDVpTW5oeEpWVFFJTndO
U3RCUlF5b3FBSGxVcVJPQm9oMncxY0UKVWQyUnNQWXZxQkNtUm1HT0hMSlVkU1J5UDRYU2FoR1dE
SEFOeDFDOVRZN1d3SUQzektqWndCaHQ5STRvUndJQVQvMnN5MzhQQmdJQQpBQUFBU1VWT1JLNUNZ
SUk9Cgo=
</data>
<flag name="review"
          id="84389"
          type_id="1"
          status="-"
          setter="menard"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93124</attachid>
            <date>2011-05-11 08:42:48 -0700</date>
            <delta_ts>2011-05-11 13:30:57 -0700</delta_ts>
            <desc>platformpluginV22</desc>
            <filename>58435v22.patch</filename>
            <type>text/plain</type>
            <size>62764</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NjIzNCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDUtMTEgIEh1
aSBIdWFuZyAgPGh1aS4yLmh1YW5nQG5va2lhLmNvbT4sIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDM1CisKKyAgICAgICAgVXBzdHJlYW0g
U3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4gd2l0aCBodG1sNSB2aWRlbyBwbGF5ZXIuCisKKyAgICAg
ICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6SFRNTDVGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJG
dWxsU2NyZWVuKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1
bGxTY3JlZW4pOgorICAgICAgICAoSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvblBsYXll
ckVycm9yKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvbk1l
ZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChIVE1MNVZpZGVvUGx1Z2luOjpzdXBwb3J0c0V4
dGVuc2lvbik6CisgICAgICAgIChIVE1MNVZpZGVvUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24pOgor
ICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRlb1BsdWdpbi5oOiBBZGRl
ZC4KKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsU2Ny
ZWVuRm9yVmlkZW9QbGF5YmFjayk6CisgICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXI6OmlzRnVsbFNjcmVlbik6CisgICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6
OnVwZGF0ZVNjcmVlblJlY3QpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRN
TDVWaWRlb1dpZGdldC5jcHA6IEFkZGVkLgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6SFRN
TDVWaWRlb1dpZGdldCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0Ojp+SFRNTDVWaWRlb1dp
ZGdldCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpzZXREdXJhdGlvbik6CisgICAgICAg
IChIVE1MNVZpZGVvV2lkZ2V0Ojptb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoSFRNTDVWaWRl
b1dpZGdldDo6b25QbGF5ZXJTdG9wcGVkKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9u
UGxheWVyRXJyb3IpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25FbmRPZk1lZGlhKToK
KyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9uQnVmZmVyaW5nTWVkaWEpOgorICAgICAgICAo
SFRNTDVWaWRlb1dpZGdldDo6b25CdWZmZXJlZE1lZGlhKToKKyAgICAgICAgKEhUTUw1VmlkZW9X
aWRnZXQ6Om9uQ29udHJvbENsaWNrZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25Q
b3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25TbGlkZXJNb3Zl
ZCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpvbkNsb3NlQ2xpY2tlZCk6CisgICAgICAg
IChIVE1MNVZpZGVvV2lkZ2V0OjpzaG93RnVsbFNjcmVlbik6CisgICAgICAgIChIVE1MNVZpZGVv
V2lkZ2V0OjpzZXRWb2x1bWUpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRN
TDVWaWRlb1dpZGdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L092ZXJsYXlXaWRnZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Ok92ZXJs
YXlXaWRnZXQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6fk92ZXJsYXlXaWRnZXQpOgorICAg
ICAgICAoT3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdl
dDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2V0Vm9sdW1lKToKKyAg
ICAgICAgKE92ZXJsYXlXaWRnZXQ6Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChPdmVybGF5
V2lkZ2V0OjpvblBsYXllclN0b3BwZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25QbGF5
ZXJFcnJvcik6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvbkVuZE9mTWVkaWEpOgorICAgICAg
ICAoT3ZlcmxheVdpZGdldDo6b25CdWZmZXJpbmdNZWRpYSk6CisgICAgICAgIChPdmVybGF5V2lk
Z2V0OjpvbkJ1ZmZlcmVkTWVkaWEpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6dGltZVRvU3Ry
aW5nKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OmFwcGx5U3R5bGVTaGVldCk6CisgICAgICAg
IChPdmVybGF5V2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKToKKyAgICAgICAgKE92ZXJsYXlXaWRn
ZXQ6Om9uU2xpZGVyTW92ZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25Tb3VuZENsaWNr
ZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25DbG9zZUNsaWNrZWQpOgorICAgICAgICAo
T3ZlcmxheVdpZGdldDo6b25Wb2x1bWVTbGlkZXJSZWxlYXNlZCk6CisgICAgICAgIChPdmVybGF5
V2lkZ2V0OjpvblZvbHVtZVNsaWRlck1vdmVkKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9u
VGltZXJUaW1lb3V0KToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OnNob3dGdWxsU2NyZWVuKToK
KyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuaDogQWRkZWQu
CisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBsYXllckJ1dHRvbjo6UGxheWVyQnV0dG9uKToKKyAgICAgICAgKFBsYXll
ckJ1dHRvbjo6ZXZlbnQpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVy
QnV0dG9uLmg6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVy
TGFiZWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBsYXllckxhYmVsOjpQbGF5ZXJMYWJlbCk6Cisg
ICAgICAgIChQbGF5ZXJMYWJlbDo6b25QbGF5ZXJFcnJvcik6CisgICAgICAgIChQbGF5ZXJMYWJl
bDo6c3RhcnRCdWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFiZWw6OnN0b3BC
dWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFiZWw6Om9uQW5pbWF0aW9uVGlt
ZW91dCk6CisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHA6Cisg
ICAgICAgIChXZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgICogc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9pbWFnZXM6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vaW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZzogQWRkZWQuCisgICAgICAgICogc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZzogQWRkZWQuCisgICAg
ICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZzogQWRk
ZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BsYXku
cG5nOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0
b25fc291bmRfb2ZmLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdp
bi9pbWFnZXMvYnV0dG9uX3NvdW5kX29uLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMS5wbmc6IEFkZGVkLgorICAg
ICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzIu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2Fk
aW5nX2J1ZmZlcmluZ18zLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBs
dWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfNC5wbmc6IEFkZGVkLgorICAgICAgICAqIHN5
bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOgorICAgICAgICAqIHN5bWJp
YW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucXJjOiBBZGRlZC4KKyAgICAgICAgKiBz
eW1iaWFuL3BsYXRmb3JtcGx1Z2luL3FzczogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9xc3MvT3ZlcmxheVdpZGdldC5xc3M6IEFkZGVkLgorCiAyMDExLTA1LTEwICBB
ZGVtYXIgZGUgU291emEgUmVpcyBKci4gIDxhZGVtYXIucmVpc0BvcGVuYm9zc2Eub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IENzYWJhIE9zenRyb2dvbsOhYy4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvUGx1Z2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRl
b1BsdWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4vSFRNTDVWaWRlb1BsdWdpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgIkhUTUw1VmlkZW9QbHVnaW4uaCIK
KworI2luY2x1ZGUgPFF0UGx1Z2luPgorCitIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OkhU
TUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpCisgICAgOiBtX3ZpZGVvV2lkZ2V0KDApCisgICAg
LCBtX21lZGlhUGxheWVyKDApCisgICAgLCBtX2Z1bGxTY3JlZW4oZmFsc2UpCit7CisgICAgbV9z
YXZlZE9yaWVudGF0aW9uID0gQ0FrbkFwcFVpOjpFQXBwVWlPcmllbnRhdGlvblVuc3BlY2lmaWVk
OworfQorCit2b2lkIEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJGdWxsU2NyZWVu
KFFNZWRpYVBsYXllciAqcGxheWVyKQoreworICAgIGlmICghcGxheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX3ZpZGVvV2lkZ2V0ID0gbmV3IEhUTUw1VmlkZW9XaWRnZXQocGxheWVyLT5k
dXJhdGlvbigpIC8gMTAwMCk7CisgICAgaWYgKCFtX3ZpZGVvV2lkZ2V0KQorICAgICAgICByZXR1
cm47CisKKyAgICBDQWtuQXBwVWkqIGFwcFVpID0gZHluYW1pY19jYXN0PENBa25BcHBVaSo+KENF
aWtvbkVudjo6U3RhdGljKCktPkFwcFVpKCkpOworICAgIGlmIChhcHBVaSkgeworICAgICAgICBt
X3NhdmVkT3JpZW50YXRpb24gPSBhcHBVaS0+T3JpZW50YXRpb24oKTsKKyAgICAgICAgYXBwVWkt
PlNldE9yaWVudGF0aW9uTChDQWtuQXBwVWk6OkVBcHBVaU9yaWVudGF0aW9uTGFuZHNjYXBlKTsK
KyAgICB9CisKKyAgICBtX21lZGlhUGxheWVyID0gcGxheWVyOworICAgIGNvbm5lY3QobV9tZWRp
YVBsYXllciwgU0lHTkFMKHBvc2l0aW9uQ2hhbmdlZChxaW50NjQpKSwgbV92aWRlb1dpZGdldCwg
U0xPVChvblBvc2l0aW9uQ2hhbmdlZChxaW50NjQpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxh
eWVyLCBTSUdOQUwoZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCkpLCBtX3ZpZGVvV2lkZ2V0LCBTTE9U
KHNldER1cmF0aW9uKHFpbnQ2NCkpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05B
TChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpLCB0aGlzLCBTTE9UKG9uUGxheWVy
U3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3RhdGUpKSk7CisgICAgY29ubmVjdChtX21lZGlh
UGxheWVyLCBTSUdOQUwoZXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpLCB0aGlzLCBTTE9UKG9u
UGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQ
bGF5ZXIsIFNJR05BTChtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1
cykpLCB0aGlzLCBTTE9UKG9uTWVkaWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXllcjo6TWVkaWFT
dGF0dXMpKSk7CisgICAgY29ubmVjdChtX3ZpZGVvV2lkZ2V0LCBTSUdOQUwocG9zaXRpb25DaGFu
Z2VkQnlVc2VyKHFpbnQ2NCkpLCBtX21lZGlhUGxheWVyLCBTTE9UKHNldFBvc2l0aW9uKHFpbnQ2
NCkpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTChjbG9zZUNsaWNrZWQoKSks
IHRoaXMsIFNJR05BTChmdWxsU2NyZWVuQ2xvc2VkKCkpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9X
aWRnZXQsIFNJR05BTChtdXRlZChib29sKSksIG1fbWVkaWFQbGF5ZXIsIFNMT1Qoc2V0TXV0ZWQo
Ym9vbCkpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTCh2b2x1bWVDaGFuZ2Vk
KGludCkpLCBtX21lZGlhUGxheWVyLCBTTE9UKHNldFZvbHVtZShpbnQpKSk7CisgICAgY29ubmVj
dChtX3ZpZGVvV2lkZ2V0LCBTSUdOQUwocGF1c2VDbGlja2VkKCkpLCBtX21lZGlhUGxheWVyLCBT
TE9UKHBhdXNlKCkpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTChwbGF5Q2xp
Y2tlZCgpKSwgbV9tZWRpYVBsYXllciwgU0xPVChwbGF5KCkpKTsKKworICAgIG1fbWVkaWFQbGF5
ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9XaWRnZXQpOworCisgICAgbV92aWRlb1dpZGdldC0+
c2V0Vm9sdW1lKG1fbWVkaWFQbGF5ZXItPnZvbHVtZSgpKTsKKyAgICBtX3ZpZGVvV2lkZ2V0LT5z
ZXRTaXplUG9saWN5KFFTaXplUG9saWN5OjpJZ25vcmVkLCBRU2l6ZVBvbGljeTo6SWdub3JlZCk7
CisgICAgbV92aWRlb1dpZGdldC0+c2hvd0Z1bGxTY3JlZW4oKTsKKyAgICBtX2Z1bGxTY3JlZW4g
PSB0cnVlOworCisgICAgLy8gSGFuZGxlIGN1cnJlbnQgTWVkaWEgU3RhdHVzIGFuZCBNZWRpYSBQ
bGF5ZXIgZXJyb3IuCisgICAgb25NZWRpYVN0YXR1c0NoYW5nZWQobV9tZWRpYVBsYXllci0+bWVk
aWFTdGF0dXMoKSk7CisgICAgb25QbGF5ZXJFcnJvcihtX21lZGlhUGxheWVyLT5lcnJvcigpKTsK
K30KKwordm9pZCBIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVuKCkK
K3sKKyAgICBtX3ZpZGVvV2lkZ2V0LT5oaWRlKCk7CisgICAgbV9tZWRpYVBsYXllci0+ZGlzY29u
bmVjdChtX3ZpZGVvV2lkZ2V0KTsKKyAgICBtX21lZGlhUGxheWVyLT5kaXNjb25uZWN0KHRoaXMp
OworICAgIGRlbGV0ZSBtX3ZpZGVvV2lkZ2V0OworICAgIG1fdmlkZW9XaWRnZXQgPSAwOworICAg
IGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRl
KQorICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworICAgIG1fZnVsbFNjcmVlbiA9IGZh
bHNlOworCisgICAgQ0FrbkFwcFVpKiBhcHBVaSA9IGR5bmFtaWNfY2FzdDxDQWtuQXBwVWkqPihD
RWlrb25FbnY6OlN0YXRpYygpLT5BcHBVaSgpKTsKKyAgICBpZiAoYXBwVWkpIAorICAgICAgICBh
cHBVaS0+U2V0T3JpZW50YXRpb25MKG1fc2F2ZWRPcmllbnRhdGlvbik7Cit9CisKK3ZvaWQgSFRN
TDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvblBsYXllckVycm9yKFFNZWRpYVBsYXllcjo6RXJy
b3IgZXJyb3IpCit7CisgICAgc3dpdGNoIChlcnJvcikgeworICAgIGNhc2UgUU1lZGlhUGxheWVy
OjpOb0Vycm9yOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX3ZpZGVv
V2lkZ2V0LT5vblBsYXllckVycm9yKCk7CisgICAgfQorfQorCit2b2lkIEhUTUw1RnVsbFNjcmVl
blZpZGVvSGFuZGxlcjo6b25QbGF5ZXJTdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSBz
dGF0ZSkKK3sKKyAgICBpZiAoc3RhdGUgPT0gUU1lZGlhUGxheWVyOjpTdG9wcGVkU3RhdGUpCisg
ICAgICAgIG1fdmlkZW9XaWRnZXQtPm9uUGxheWVyU3RvcHBlZCgpOworfQorCit2b2lkIEhUTUw1
RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25NZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVy
OjpNZWRpYVN0YXR1cyBzdGF0dXMpCit7CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNl
IFFNZWRpYVBsYXllcjo6RW5kT2ZNZWRpYToKKyAgICAgICAgbV92aWRlb1dpZGdldC0+b25FbmRP
Zk1lZGlhKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUU1lZGlhUGxheWVyOjpTdGFsbGVk
TWVkaWE6CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6OkxvYWRpbmdNZWRpYToKKyAgICBjYXNlIFFN
ZWRpYVBsYXllcjo6QnVmZmVyaW5nTWVkaWE6CisgICAgICAgIG1fdmlkZW9XaWRnZXQtPm9uQnVm
ZmVyaW5nTWVkaWEoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6Okxv
YWRlZE1lZGlhOgorICAgIGNhc2UgUU1lZGlhUGxheWVyOjpCdWZmZXJlZE1lZGlhOgorICAgICAg
ICBtX3ZpZGVvV2lkZ2V0LT5vbkJ1ZmZlcmVkTWVkaWEoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybjsKK30KKworYm9vbCBI
VE1MNVZpZGVvUGx1Z2luOjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBj
b25zdAoreworICAgIHN3aXRjaCAoZXh0ZW5zaW9uKSB7CisgICAgY2FzZSBGdWxsU2NyZWVuVmlk
ZW9QbGF5ZXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK1FPYmplY3QqIEhUTUw1VmlkZW9QbHVnaW46OmNyZWF0
ZUV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAoreworICAgIEhUTUw1RnVsbFNj
cmVlblZpZGVvSGFuZGxlciogdmlkZW9IYW5kbGVyID0gMDsKKyAgICBzd2l0Y2ggKGV4dGVuc2lv
bikgeworICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICB2aWRlb0hhbmRs
ZXIgPSBuZXcgSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHZpZGVvSGFuZGxl
cjsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1M
NVZpZGVvUGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3Bs
YXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvUGx1Z2luLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEhUTUw1
VmlkZW9QbHVnaW5faAorI2RlZmluZSBIVE1MNVZpZGVvUGx1Z2luX2gKKworI2luY2x1ZGUgIkhU
TUw1VmlkZW9XaWRnZXQuaCIKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKyNp
bmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisKKyNpbmNsdWRlIDxha25hcHB1aS5oPgorI2luY2x1ZGUg
PGFrbmVudi5oPgorI2luY2x1ZGUgPGVpa2FwcHVpLmg+CisjaW5jbHVkZSA8ZWlrZW52Lmg+CisK
K2NsYXNzIEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRV2ViRnVsbFNjcmVl
blZpZGVvSGFuZGxlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBIVE1MNUZ1bGxTY3Jl
ZW5WaWRlb0hhbmRsZXIoKTsKKyAgICBib29sIHJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxh
eWJhY2soKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBj
b25zdCB7IHJldHVybiBtX2Z1bGxTY3JlZW47IH0KKyAgICB2b2lkIHVwZGF0ZVNjcmVlblJlY3Qo
Y29uc3QgUVJlY3QmKSB7IH0KKworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2b2lkIGVu
dGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIgKik7CisgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxs
U2NyZWVuKCk7CisgICAgdm9pZCBvblBsYXllclN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0
YXRlKTsKKyAgICB2b2lkIG9uUGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcik7CisgICAg
dm9pZCBvbk1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKTsKKwor
cHJpdmF0ZToKKyAgICBIVE1MNVZpZGVvV2lkZ2V0KiBtX3ZpZGVvV2lkZ2V0OworICAgIFFNZWRp
YVBsYXllciogbV9tZWRpYVBsYXllcjsKKyAgICBib29sIG1fZnVsbFNjcmVlbjsKKyAgICBDQWtu
QXBwVWk6OlRBcHBVaU9yaWVudGF0aW9uIG1fc2F2ZWRPcmllbnRhdGlvbjsKK307CisKK2NsYXNz
IEhUTUw1VmlkZW9QbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0Zm9y
bVBsdWdpbiB7CisgICAgUV9PQkpFQ1QKKyAgICBRX0lOVEVSRkFDRVMoUVdlYktpdFBsYXRmb3Jt
UGx1Z2luKQorcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRl
bnNpb24pIGNvbnN0OworICAgIHZpcnR1YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5zaW9uKEV4dGVu
c2lvbikgY29uc3Q7Cit9OworCisjZW5kaWYgLyogSFRNTDVWaWRlb1BsdWdpbl9oICovCkluZGV4
OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRlb1dpZGdl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1
Z2luL0hUTUw1VmlkZW9XaWRnZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9x
dC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9XaWRnZXQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJIVE1MNVZp
ZGVvV2lkZ2V0LmgiCisKK0hUTUw1VmlkZW9XaWRnZXQ6OkhUTUw1VmlkZW9XaWRnZXQoaW50IGR1
cmF0aW9uLCBRV2lkZ2V0ICpwYXJlbnQpCisgICAgOiBRVmlkZW9XaWRnZXQocGFyZW50KQorewor
ICAgIG1fb3ZlcmxheVdpZGdldCA9IG5ldyBPdmVybGF5V2lkZ2V0KGR1cmF0aW9uLCB0aGlzKTsK
KyAgICBjb25uZWN0KG1fb3ZlcmxheVdpZGdldCwgU0lHTkFMKGNvbnRyb2xDbGlja2VkKGJvb2wp
KSwgdGhpcywgU0xPVChvbkNvbnRyb2xDbGlja2VkKGJvb2wpKSk7CisgICAgY29ubmVjdChtX292
ZXJsYXlXaWRnZXQsIFNJR05BTChzbGlkZXJNb3ZlZChpbnQpKSwgdGhpcywgU0xPVChvblNsaWRl
ck1vdmVkKGludCkpKTsKKyAgICBjb25uZWN0KG1fb3ZlcmxheVdpZGdldCwgU0lHTkFMKGNsb3Nl
Q2xpY2tlZCgpKSwgdGhpcywgU0xPVChvbkNsb3NlQ2xpY2tlZCgpKSk7CisgICAgY29ubmVjdCht
X292ZXJsYXlXaWRnZXQsIFNJR05BTChtdXRlZChib29sKSksIHRoaXMsIFNJR05BTChtdXRlZChi
b29sKSkpOworICAgIGNvbm5lY3QobV9vdmVybGF5V2lkZ2V0LCBTSUdOQUwodm9sdW1lQ2hhbmdl
ZChpbnQpKSwgdGhpcywgU0lHTkFMKHZvbHVtZUNoYW5nZWQoaW50KSkpOworICAgIG1fb3Zlcmxh
eVdpZGdldC0+c2V0U2l6ZVBvbGljeShRU2l6ZVBvbGljeTo6SWdub3JlZCwgUVNpemVQb2xpY3k6
Oklnbm9yZWQpOworfQorCitIVE1MNVZpZGVvV2lkZ2V0Ojp+SFRNTDVWaWRlb1dpZGdldCgpCit7
CisgICAgZGVsZXRlIG1fb3ZlcmxheVdpZGdldDsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0
OjpzZXREdXJhdGlvbihxaW50NjQgZHVyYXRpb24pCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5z
ZXREdXJhdGlvbihkdXJhdGlvbiAvIDEwMDApOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6
Om1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCAqKQoreworICAgIG1fb3ZlcmxheVdpZGdldC0+
c2hvd0Z1bGxTY3JlZW4oKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvblBsYXllclN0
b3BwZWQoKQoreworICAgIG1fb3ZlcmxheVdpZGdldC0+b25QbGF5ZXJTdG9wcGVkKCk7Cit9CisK
K3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25QbGF5ZXJFcnJvcigpCit7CisgICAgbV9vdmVybGF5
V2lkZ2V0LT5vblBsYXllckVycm9yKCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25F
bmRPZk1lZGlhKCkKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPm9uRW5kT2ZNZWRpYSgpOworfQor
Cit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uQnVmZmVyaW5nTWVkaWEoKQoreworICAgIG1fb3Zl
cmxheVdpZGdldC0+b25CdWZmZXJpbmdNZWRpYSgpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRn
ZXQ6Om9uQnVmZmVyZWRNZWRpYSgpCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5vbkJ1ZmZlcmVk
TWVkaWEoKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKGJv
b2wgaXNQYXVzZWQpCit7CisgICAgaWYgKGlzUGF1c2VkKQorICAgICAgICBlbWl0IHBhdXNlQ2xp
Y2tlZCgpOworICAgIGVsc2UKKyAgICAgICAgZW1pdCBwbGF5Q2xpY2tlZCgpOworfQorCit2b2lk
IEhUTUw1VmlkZW9XaWRnZXQ6Om9uUG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCBwb3NpdGlvbikKK3sK
KyAgICBtX292ZXJsYXlXaWRnZXQtPnNldFBvc2l0aW9uKHBvc2l0aW9uIC8gMTAwMCk7Cit9CisK
K3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25TbGlkZXJNb3ZlZChpbnQgdmFsdWUpCit7CisgICAg
ZW1pdCBwb3NpdGlvbkNoYW5nZWRCeVVzZXIoKChxaW50NjQpdmFsdWUpKjEwMDApOworfQorCit2
b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uQ2xvc2VDbGlja2VkKCkKK3sKKyAgICBoaWRlKCk7Cisg
ICAgZW1pdCBjbG9zZUNsaWNrZWQoKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpzaG93
RnVsbFNjcmVlbigpCit7CisgICAgc2V0RnVsbFNjcmVlbih0cnVlKTsKKyAgICBtX292ZXJsYXlX
aWRnZXQtPnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6c2V0
Vm9sdW1lKGludCB2b2x1bWUpCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zZXRWb2x1bWUodm9s
dW1lKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9I
VE1MNVZpZGVvV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFu
L3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9XaWRnZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvV2lkZ2V0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEhU
TUw1VmlkZW9XaWRnZXRfaAorI2RlZmluZSBIVE1MNVZpZGVvV2lkZ2V0X2gKKworI2luY2x1ZGUg
Ik92ZXJsYXlXaWRnZXQuaCIKKworI2luY2x1ZGUgPFFWaWRlb1dpZGdldD4KKworY2xhc3MgSFRN
TDVWaWRlb1dpZGdldCA6IHB1YmxpYyBRVmlkZW9XaWRnZXQgeworICAgIFFfT0JKRUNUCitwdWJs
aWM6CisgICAgSFRNTDVWaWRlb1dpZGdldChpbnQgZHVyYXRpb24sIFFXaWRnZXQqIHBhcmVudCA9
IDApOworICAgIH5IVE1MNVZpZGVvV2lkZ2V0KCk7CisgICAgdm9pZCBtb3VzZVByZXNzRXZlbnQo
UU1vdXNlRXZlbnQqKTsKKyAgICB2b2lkIG9uUGxheWVyU3RvcHBlZCgpOworICAgIHZvaWQgb25Q
bGF5ZXJFcnJvcigpOworICAgIHZvaWQgb25FbmRPZk1lZGlhKCk7CisgICAgdm9pZCBvbkJ1ZmZl
cmluZ01lZGlhKCk7CisgICAgdm9pZCBvbkJ1ZmZlcmVkTWVkaWEoKTsKKyAgICB2b2lkIHNldFZv
bHVtZShpbnQpOworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgb25Db250cm9sQ2xpY2tlZChi
b29sKTsKKyAgICB2b2lkIG9uUG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCk7CisgICAgdm9pZCBzZXRE
dXJhdGlvbihxaW50NjQpOworICAgIHZvaWQgb25TbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQg
b25DbG9zZUNsaWNrZWQoKTsKKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgc2hvd0Z1bGxTY3Jl
ZW4oKTsKKworc2lnbmFsczoKKyAgICB2b2lkIHBhdXNlQ2xpY2tlZCgpOworICAgIHZvaWQgcGxh
eUNsaWNrZWQoKTsKKyAgICB2b2lkIHBvc2l0aW9uQ2hhbmdlZEJ5VXNlcihxaW50NjQpOworICAg
IHZvaWQgY2xvc2VDbGlja2VkKCk7CisgICAgdm9pZCBtdXRlZChib29sKTsKKyAgICB2b2lkIHZv
bHVtZUNoYW5nZWQoaW50KTsKKworcHJpdmF0ZToKKyAgICBPdmVybGF5V2lkZ2V0KiBtX292ZXJs
YXlXaWRnZXQ7Cit9OworCisjZW5kaWYgLyogSFRNTDVWaWRlb1dpZGdldF9oICovCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vT3ZlcmxheVdpZGdldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092
ZXJsYXlXaWRnZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFu
L3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJPdmVybGF5V2lkZ2V0LmgiCisK
KyNpbmNsdWRlIDxRRmlsZT4KKyNpbmNsdWRlIDxRR3JpZExheW91dD4KKyNpbmNsdWRlIDxRSEJv
eExheW91dD4KKyNpbmNsdWRlIDxRU3R5bGU+CisjaW5jbHVkZSA8UVRpbWU+CisKK092ZXJsYXlX
aWRnZXQ6Ok92ZXJsYXlXaWRnZXQoaW50IGR1cmF0aW9uLCBRV2lkZ2V0ICpwYXJlbnQpCisgICAg
OiBRV2lkZ2V0KDAsIFF0OjpGcmFtZWxlc3NXaW5kb3dIaW50KQorICAgICwgbV9pc1BhdXNlZChm
YWxzZSkKKyAgICAsIG1faXNNdXRlZChmYWxzZSkKK3sKKyAgICBhcHBseVN0eWxlU2hlZXQoKTsK
KworICAgIG1fcGxheUljb24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3BsYXkucG5nIik7Cisg
ICAgbV9wYXVzZUljb24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZyIpOworICAg
IG1fc291bmRPbkljb24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3NvdW5kX29uLnBuZyIpOwor
ICAgIG1fc291bmRPZmZJY29uID0gUUljb24oIjovaW1hZ2VzL2J1dHRvbl9zb3VuZF9vZmYucG5n
Iik7CisKKyAgICBtX2NvbnRyb2xCdXR0b24gPSBuZXcgUGxheWVyQnV0dG9uKHRoaXMpOworICAg
IG1fY29udHJvbEJ1dHRvbi0+c2V0SWNvbihtX3BhdXNlSWNvbik7CisgICAgY29ubmVjdChtX2Nv
bnRyb2xCdXR0b24sIFNJR05BTChjbGlja2VkKCkpLCB0aGlzLCBTTE9UKG9uQ29udHJvbENsaWNr
ZWQoKSkpOworCisgICAgbV9wcm9ncmVzc1NsaWRlciA9IG5ldyBRU2xpZGVyKFF0OjpIb3Jpem9u
dGFsLCB0aGlzKTsKKyAgICBtX3Byb2dyZXNzU2xpZGVyLT5zZXRSYW5nZSgwLCBkdXJhdGlvbik7
CisgICAgY29ubmVjdChtX3Byb2dyZXNzU2xpZGVyLCBTSUdOQUwoc2xpZGVyTW92ZWQoaW50KSks
IHRoaXMsIFNMT1Qob25TbGlkZXJNb3ZlZChpbnQpKSk7CisKKyAgICBtX3Bvc2l0aW9uTGFiZWwg
PSBuZXcgUUxhYmVsKHRoaXMpOworICAgIG1fcG9zaXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9T
dHJpbmcoMCkpOworICAgIG1fZHVyYXRpb25MYWJlbCA9IG5ldyBRTGFiZWwodGhpcyk7CisgICAg
bV9kdXJhdGlvbkxhYmVsLT5zZXRUZXh0KHRpbWVUb1N0cmluZyhkdXJhdGlvbikpOworCisgICAg
bV9zb3VuZEJ1dHRvbiA9IG5ldyBQbGF5ZXJCdXR0b24odGhpcyk7CisgICAgbV9zb3VuZEJ1dHRv
bi0+c2V0SWNvbihtX3NvdW5kT25JY29uKTsKKyAgICBjb25uZWN0KG1fc291bmRCdXR0b24sIFNJ
R05BTChjbGlja2VkKCkpLCB0aGlzLCBTTE9UKG9uU291bmRDbGlja2VkKCkpKTsKKworICAgIG1f
Y2xvc2VCdXR0b24gPSBuZXcgUGxheWVyQnV0dG9uKHRoaXMpOworICAgIG1fY2xvc2VCdXR0b24t
PnNldEljb24oUUljb24oIjovaW1hZ2VzL2J1dHRvbl9jbG9zZS5wbmciKSk7CisgICAgY29ubmVj
dChtX2Nsb3NlQnV0dG9uLCBTSUdOQUwoY2xpY2tlZCgpKSwgdGhpcywgU0xPVChvbkNsb3NlQ2xp
Y2tlZCgpKSk7CisKKyAgICBtX3ZvbHVtZVNsaWRlciA9IG5ldyBRU2xpZGVyKFF0OjpWZXJ0aWNh
bCwgdGhpcyk7CisgICAgbV92b2x1bWVTbGlkZXItPnNldFJhbmdlKDAsIDEwMCk7CisgICAgY29u
bmVjdChtX3NvdW5kQnV0dG9uLCBTSUdOQUwodGFwQW5kSG9sZCgpKSwgbV92b2x1bWVTbGlkZXIs
IFNMT1Qoc2hvdygpKSk7CisgICAgY29ubmVjdChtX3ZvbHVtZVNsaWRlciwgU0lHTkFMKHNsaWRl
clJlbGVhc2VkKCkpLCB0aGlzLCBTTE9UKG9uVm9sdW1lU2xpZGVyUmVsZWFzZWQoKSkpOworICAg
IGNvbm5lY3QobV92b2x1bWVTbGlkZXIsIFNJR05BTChzbGlkZXJNb3ZlZChpbnQpKSwgdGhpcywg
U0xPVChvblZvbHVtZVNsaWRlck1vdmVkKGludCkpKTsKKyAgICBtX3ZvbHVtZVNsaWRlci0+aGlk
ZSgpOworCisgICAgbV9wbGF5ZXJMYWJlbCA9IG5ldyBQbGF5ZXJMYWJlbCh0aGlzKTsKKyAgICBt
X3BsYXllckxhYmVsLT5oaWRlKCk7CisKKyAgICBRQm94TGF5b3V0KiBtX2NvbnRyb2xMYXlvdXQg
PSBuZXcgUUhCb3hMYXlvdXQ7CisgICAgbV9jb250cm9sTGF5b3V0LT5hZGRXaWRnZXQobV9jb250
cm9sQnV0dG9uKTsKKyAgICBtX2NvbnRyb2xMYXlvdXQtPmFkZFdpZGdldChtX3Bvc2l0aW9uTGFi
ZWwpOworICAgIG1fY29udHJvbExheW91dC0+YWRkV2lkZ2V0KG1fcHJvZ3Jlc3NTbGlkZXIpOwor
ICAgIG1fY29udHJvbExheW91dC0+YWRkV2lkZ2V0KG1fZHVyYXRpb25MYWJlbCk7CisKKyAgICBR
R3JpZExheW91dCogbGF5b3V0ID0gbmV3IFFHcmlkTGF5b3V0OworICAgIGxheW91dC0+YWRkV2lk
Z2V0KG1fY2xvc2VCdXR0b24sIDAsIDAsIDEsIDIsIFF0OjpBbGlnblJpZ2h0IHwgUXQ6OkFsaWdu
VG9wKTsKKyAgICBsYXlvdXQtPmFkZFdpZGdldChtX3BsYXllckxhYmVsLCAxLCAwLCBRdDo6QWxp
Z25DZW50ZXIpOworICAgIGxheW91dC0+YWRkV2lkZ2V0KG1fdm9sdW1lU2xpZGVyLCAxLCAxKTsK
KyAgICBsYXlvdXQtPmFkZExheW91dChtX2NvbnRyb2xMYXlvdXQsIDIsIDAsIFF0OjpBbGlnbkJv
dHRvbSk7CisgICAgbGF5b3V0LT5hZGRXaWRnZXQobV9zb3VuZEJ1dHRvbiwgMiwgMSwgUXQ6OkFs
aWduQm90dG9tKTsKKyAgICBzZXRMYXlvdXQobGF5b3V0KTsKKworICAgIG1faGlkZVdpZGdldFRp
bWVyID0gbmV3IFFUaW1lcih0aGlzKTsKKyAgICBtX2hpZGVXaWRnZXRUaW1lci0+c2V0U2luZ2xl
U2hvdCh0cnVlKTsKKyAgICBtX2hpZGVXaWRnZXRUaW1lci0+c2V0SW50ZXJ2YWwoMzAwMCk7Cisg
ICAgY29ubmVjdChtX2hpZGVXaWRnZXRUaW1lciwgU0lHTkFMKHRpbWVvdXQoKSksIHRoaXMsIFNM
T1Qob25UaW1lclRpbWVvdXQoKSkpOworICAgIGNvbm5lY3QobV9wcm9ncmVzc1NsaWRlciwgU0lH
TkFMKHNsaWRlclByZXNzZWQoKSksIG1faGlkZVdpZGdldFRpbWVyLCBTTE9UKHN0b3AoKSkpOwor
ICAgIGNvbm5lY3QobV9wcm9ncmVzc1NsaWRlciwgU0lHTkFMKHNsaWRlclJlbGVhc2VkKCkpLCBt
X2hpZGVXaWRnZXRUaW1lciwgU0xPVChzdGFydCgpKSk7CisgICAgY29ubmVjdChtX3ZvbHVtZVNs
aWRlciwgU0lHTkFMKHNsaWRlclByZXNzZWQoKSksIG1faGlkZVdpZGdldFRpbWVyLCBTTE9UKHN0
b3AoKSkpOworCisgICAgc2V0QXR0cmlidXRlKFF0OjpXQV9UcmFuc2x1Y2VudEJhY2tncm91bmQp
OworfQorCitPdmVybGF5V2lkZ2V0Ojp+T3ZlcmxheVdpZGdldCgpCit7Cit9CisKK3ZvaWQgT3Zl
cmxheVdpZGdldDo6c2V0RHVyYXRpb24oaW50IGR1cmF0aW9uKQoreworICAgIG1fcHJvZ3Jlc3NT
bGlkZXItPnNldE1heGltdW0oZHVyYXRpb24pOworICAgIG1fZHVyYXRpb25MYWJlbC0+c2V0VGV4
dCh0aW1lVG9TdHJpbmcoZHVyYXRpb24pKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpzZXRQ
b3NpdGlvbihpbnQgcG9zaXRpb24pCit7CisgICAgaWYgKCFtX3Byb2dyZXNzU2xpZGVyLT5pc1Ns
aWRlckRvd24oKSkgeworICAgICAgICBtX3Byb2dyZXNzU2xpZGVyLT5zZXRWYWx1ZShwb3NpdGlv
bik7CisgICAgICAgIG1fcG9zaXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmcocG9zaXRp
b24pKTsKKyAgICB9Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6c2V0Vm9sdW1lKGludCB2b2x1
bWUpCit7CisgICAgbV92b2x1bWVTbGlkZXItPnNldFZhbHVlKHZvbHVtZSk7Cit9CisKK3ZvaWQg
T3ZlcmxheVdpZGdldDo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICopCit7CisgICAgbV9o
aWRlV2lkZ2V0VGltZXItPnN0b3AoKTsKKyAgICBoaWRlKCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdp
ZGdldDo6b25QbGF5ZXJTdG9wcGVkKCkKK3sKKyAgICBtX2NvbnRyb2xCdXR0b24tPnNldEljb24o
bV9wbGF5SWNvbik7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25QbGF5ZXJFcnJvcigpCit7
CisgICAgbV9jb250cm9sQnV0dG9uLT5zZXREaXNhYmxlZCh0cnVlKTsKKyAgICBtX3Byb2dyZXNz
U2xpZGVyLT5zZXREaXNhYmxlZCh0cnVlKTsKKyAgICBtX3BsYXllckxhYmVsLT5vblBsYXllckVy
cm9yKCk7CisgICAgc2hvd0Z1bGxTY3JlZW4oKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0Ojpv
bkVuZE9mTWVkaWEoKQoreworICAgIFFXaWRnZXQ6OnNob3dGdWxsU2NyZWVuKCk7Cit9CisKK3Zv
aWQgT3ZlcmxheVdpZGdldDo6b25CdWZmZXJpbmdNZWRpYSgpCit7CisgICAgbV9wbGF5ZXJMYWJl
bC0+c3RhcnRCdWZmZXJpbmdBbmltYXRpb24oKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0Ojpv
bkJ1ZmZlcmVkTWVkaWEoKQoreworICAgIG1fcGxheWVyTGFiZWwtPnN0b3BCdWZmZXJpbmdBbmlt
YXRpb24oKTsKK30KKworUVN0cmluZyBPdmVybGF5V2lkZ2V0Ojp0aW1lVG9TdHJpbmcoaW50IHNl
Y29uZHMpCit7CisgICAgUVRpbWUgaW5pdFRpbWUoMCwgMCwgMCk7CisgICAgUVRpbWUgdGltZSA9
IGluaXRUaW1lLmFkZFNlY3Moc2Vjb25kcyk7CisgICAgcmV0dXJuIHRpbWUuaG91cigpID8gdGlt
ZS50b1N0cmluZygiaDptbTpzcyIpIDogdGltZS50b1N0cmluZygibW06c3MiKTsKK30KKwordm9p
ZCBPdmVybGF5V2lkZ2V0OjphcHBseVN0eWxlU2hlZXQoKQoreworICAgIFFGaWxlIGZpbGUoIjov
cXNzL092ZXJsYXlXaWRnZXQucXNzIik7CisgICAgZmlsZS5vcGVuKFFGaWxlOjpSZWFkT25seSk7
CisgICAgc2V0U3R5bGVTaGVldChRTGF0aW4xU3RyaW5nKGZpbGUucmVhZEFsbCgpKSk7Cit9CisK
K3ZvaWQgT3ZlcmxheVdpZGdldDo6b25Db250cm9sQ2xpY2tlZCgpCit7CisgICAgbV9pc1BhdXNl
ZCA9ICFtX2lzUGF1c2VkOworICAgIGlmIChtX2lzUGF1c2VkKSB7CisgICAgICAgIG1fY29udHJv
bEJ1dHRvbi0+c2V0SWNvbihtX3BsYXlJY29uKTsKKyAgICAgICAgbV9oaWRlV2lkZ2V0VGltZXIt
PnN0b3AoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbnRyb2xCdXR0b24tPnNldEljb24o
bV9wYXVzZUljb24pOworICAgICAgICBtX2hpZGVXaWRnZXRUaW1lci0+c3RhcnQoKTsKKyAgICB9
CisgICAgZW1pdCBjb250cm9sQ2xpY2tlZChtX2lzUGF1c2VkKTsKK30KKwordm9pZCBPdmVybGF5
V2lkZ2V0OjpvblNsaWRlck1vdmVkKGludCB2YWx1ZSkKK3sKKyAgICBlbWl0IHNsaWRlck1vdmVk
KHZhbHVlKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvblNvdW5kQ2xpY2tlZCgpCit7Cisg
ICAgaWYgKG1fdm9sdW1lU2xpZGVyLT5pc1Zpc2libGUoKSkKKyAgICAgICAgbV9pc011dGVkID0g
ZmFsc2U7CisgICAgZWxzZQorICAgICAgICBtX2lzTXV0ZWQgPSAhbV9pc011dGVkOworCisgICAg
aWYgKG1faXNNdXRlZCkKKyAgICAgICAgbV9zb3VuZEJ1dHRvbi0+c2V0SWNvbihtX3NvdW5kT2Zm
SWNvbik7CisgICAgZWxzZQorICAgICAgICBtX3NvdW5kQnV0dG9uLT5zZXRJY29uKG1fc291bmRP
bkljb24pOworCisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0YXJ0KCk7CisgICAgZW1pdCBtdXRl
ZChtX2lzTXV0ZWQpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uQ2xvc2VDbGlja2VkKCkK
K3sKKyAgICBtX2hpZGVXaWRnZXRUaW1lci0+c3RvcCgpOworICAgIGhpZGUoKTsKKyAgICBlbWl0
IGNsb3NlQ2xpY2tlZCgpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uVm9sdW1lU2xpZGVy
UmVsZWFzZWQoKQoreworICAgIG1faGlkZVdpZGdldFRpbWVyLT5zdGFydCgpOworICAgIGVtaXQg
dm9sdW1lQ2hhbmdlZChtX3ZvbHVtZVNsaWRlci0+dmFsdWUoKSk7CisgICAgbV92b2x1bWVTbGlk
ZXItPmhpZGUoKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvblZvbHVtZVNsaWRlck1vdmVk
KGludCB2YWx1ZSkKK3sKKyAgICBlbWl0IHZvbHVtZUNoYW5nZWQodmFsdWUpOworfQorCit2b2lk
IE92ZXJsYXlXaWRnZXQ6Om9uVGltZXJUaW1lb3V0KCkKK3sKKyAgICBpZiAoIW1faXNQYXVzZWQp
CisgICAgICAgIGhpZGUoKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpzaG93RnVsbFNjcmVl
bigpCit7CisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0YXJ0KCk7CisgICAgUVdpZGdldDo6c2hv
d0Z1bGxTY3JlZW4oKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9y
bXBsdWdpbi9PdmVybGF5V2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9z
eW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIE92
ZXJsYXlXaWRnZXRfaAorI2RlZmluZSBPdmVybGF5V2lkZ2V0X2gKKworI2luY2x1ZGUgIlBsYXll
ckJ1dHRvbi5oIgorI2luY2x1ZGUgIlBsYXllckxhYmVsLmgiCisKKyNpbmNsdWRlIDxRU2xpZGVy
PgorCitjbGFzcyBPdmVybGF5V2lkZ2V0IDogcHVibGljIFFXaWRnZXQgeworICAgIFFfT0JKRUNU
CitwdWJsaWM6CisgICAgT3ZlcmxheVdpZGdldChpbnQgZHVyYXRpb24sIFFXaWRnZXQqIHBhcmVu
dCA9IDApOworICAgIH5PdmVybGF5V2lkZ2V0KCk7CisgICAgdm9pZCBzZXREdXJhdGlvbihpbnQp
OworICAgIHZvaWQgc2V0UG9zaXRpb24oaW50KTsKKyAgICB2b2lkIHNldFZvbHVtZShpbnQpOwor
ICAgIHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdm9pZCBvblBsYXll
clN0b3BwZWQoKTsKKyAgICB2b2lkIG9uUGxheWVyRXJyb3IoKTsKKyAgICB2b2lkIG9uRW5kT2ZN
ZWRpYSgpOworICAgIHZvaWQgb25CdWZmZXJpbmdNZWRpYSgpOworICAgIHZvaWQgb25CdWZmZXJl
ZE1lZGlhKCk7CisKK3ByaXZhdGU6CisgICAgUVN0cmluZyB0aW1lVG9TdHJpbmcoaW50KTsKKyAg
ICB2b2lkIGFwcGx5U3R5bGVTaGVldCgpOworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgb25D
b250cm9sQ2xpY2tlZCgpOworICAgIHZvaWQgb25TbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQg
b25Tb3VuZENsaWNrZWQoKTsKKyAgICB2b2lkIG9uQ2xvc2VDbGlja2VkKCk7CisgICAgdm9pZCBv
blZvbHVtZVNsaWRlclJlbGVhc2VkKCk7CisgICAgdm9pZCBvblZvbHVtZVNsaWRlck1vdmVkKGlu
dCk7CisgICAgdm9pZCBvblRpbWVyVGltZW91dCgpOworCitwdWJsaWMgc2xvdHM6CisgICAgdm9p
ZCBzaG93RnVsbFNjcmVlbigpOworCitzaWduYWxzOgorICAgIHZvaWQgY29udHJvbENsaWNrZWQo
Ym9vbCk7CisgICAgdm9pZCBzbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQgY2xvc2VDbGlja2Vk
KCk7CisgICAgdm9pZCBtdXRlZChib29sKTsKKyAgICB2b2lkIHZvbHVtZUNoYW5nZWQoaW50KTsK
KworcHJpdmF0ZToKKyAgICBQbGF5ZXJCdXR0b24qIG1fY29udHJvbEJ1dHRvbjsKKyAgICBib29s
IG1faXNQYXVzZWQ7CisgICAgUVNsaWRlciogbV9wcm9ncmVzc1NsaWRlcjsKKyAgICBRTGFiZWwq
IG1fcG9zaXRpb25MYWJlbDsKKyAgICBRTGFiZWwqIG1fZHVyYXRpb25MYWJlbDsKKyAgICBQbGF5
ZXJCdXR0b24qIG1fc291bmRCdXR0b247CisgICAgUGxheWVyQnV0dG9uKiBtX2Nsb3NlQnV0dG9u
OworICAgIFFTbGlkZXIqIG1fdm9sdW1lU2xpZGVyOworICAgIGJvb2wgbV9pc011dGVkOworICAg
IFFJY29uIG1fcGxheUljb247CisgICAgUUljb24gbV9wYXVzZUljb247CisgICAgUUljb24gbV9z
b3VuZE9uSWNvbjsKKyAgICBRSWNvbiBtX3NvdW5kT2ZmSWNvbjsKKyAgICBRVGltZXIqIG1faGlk
ZVdpZGdldFRpbWVyOworICAgIFBsYXllckxhYmVsKiBtX3BsYXllckxhYmVsOworfTsKKworI2Vu
ZGlmIC8qIE92ZXJsYXlXaWRnZXRfaCAqLwpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFu
L3BsYXRmb3JtcGx1Z2luL1BsYXllckJ1dHRvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckJ1dHRvbi5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyQnV0
dG9uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJQbGF5ZXJCdXR0b24uaCIKKworI2luY2x1ZGUgPFFHZXN0dXJlPgorI2luY2x1
ZGUgPFFHZXN0dXJlRXZlbnQ+CisKK1BsYXllckJ1dHRvbjo6UGxheWVyQnV0dG9uKFFXaWRnZXQg
KnBhcmVudCkKKyAgICA6IFFUb29sQnV0dG9uKHBhcmVudCkKKyAgICAsIG1fYnV0dG9uSW1hZ2Uo
MCkKK3sKKyAgICBncmFiR2VzdHVyZShRdDo6VGFwQW5kSG9sZEdlc3R1cmUpOworICAgIHNldEZp
eGVkU2l6ZSg1MCwgNTApOworICAgIHNldEljb25TaXplKFFTaXplKDUwLCA1MCkpOworICAgIHNl
dFN0eWxlU2hlZXQoImJvcmRlcjogbm9uZSIpOworfQorCitib29sIFBsYXllckJ1dHRvbjo6ZXZl
bnQoUUV2ZW50ICpldmVudCkKK3sKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6Okdl
c3R1cmUpIHsKKyAgICAgICAgUUdlc3R1cmVFdmVudCAqIGdlc3R1cmVFdmVudCA9IChRR2VzdHVy
ZUV2ZW50KilzdGF0aWNfY2FzdDxRR2VzdHVyZUV2ZW50Kj4oZXZlbnQpOworICAgICAgICBRR2Vz
dHVyZSAqIGdlc3R1cmUgPSBnZXN0dXJlRXZlbnQtPmdlc3R1cmUoUXQ6OlRhcEFuZEhvbGRHZXN0
dXJlKTsKKyAgICAgICAgaWYgKGdlc3R1cmUgJiYgZ2VzdHVyZS0+c3RhdGUoKSA9PSBRdDo6R2Vz
dHVyZUZpbmlzaGVkKSB7CisgICAgICAgICAgICBlbWl0IHRhcEFuZEhvbGQoKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBRVG9vbEJ1dHRv
bjo6ZXZlbnQoZXZlbnQpOworfQpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRm
b3JtcGx1Z2luL1BsYXllckJ1dHRvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUGxh
eWVyQnV0dG9uX2gKKyNkZWZpbmUgUGxheWVyQnV0dG9uX2gKKworI2luY2x1ZGUgPFFJY29uPgor
I2luY2x1ZGUgPFFUb29sQnV0dG9uPgorCitjbGFzcyBRRXZlbnQ7CisKK2NsYXNzIFBsYXllckJ1
dHRvbiA6IHB1YmxpYyBRVG9vbEJ1dHRvbiB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBQ
bGF5ZXJCdXR0b24oUVdpZGdldCogcGFyZW50ID0gMCk7CisgICAgYm9vbCBldmVudChRRXZlbnQq
KTsKKworc2lnbmFsczoKKyAgICB2b2lkIHRhcEFuZEhvbGQoKTsKKworcHJpdmF0ZToKKyAgICBR
SWNvbiogbV9idXR0b25JbWFnZTsKK307CisKKyNlbmRpZiAvKiBQbGF5ZXJCdXR0b25faCAqLwpJ
bmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckxhYmVs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vUGxheWVyTGFiZWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1i
aWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckxhYmVsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJQbGF5ZXJMYWJlbC5oIgorCitQ
bGF5ZXJMYWJlbDo6UGxheWVyTGFiZWwoUVdpZGdldCogcGFyZW50KQorICAgIDogUUxhYmVsKHBh
cmVudCkKKyAgICAsIG1fYnVmZmVyaW5nQW5pbWF0aW9uSXRlcmF0b3IobV9idWZmZXJpbmdBbmlt
YXRpb24pCisgICAgLCBtX2FuaW1hdGlvblRpbWVyKHRoaXMpCit7CisgICAgbV9idWZmZXJpbmdB
bmltYXRpb24uYXBwZW5kKFFQaXhtYXAoIjovaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzEucG5n
Iikuc2NhbGVkKFFTaXplKDgwLCA4MCkpKTsKKyAgICBtX2J1ZmZlcmluZ0FuaW1hdGlvbi5hcHBl
bmQoUVBpeG1hcCgiOi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMi5wbmciKS5zY2FsZWQoUVNp
emUoODAsIDgwKSkpOworICAgIG1fYnVmZmVyaW5nQW5pbWF0aW9uLmFwcGVuZChRUGl4bWFwKCI6
L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18zLnBuZyIpLnNjYWxlZChRU2l6ZSg4MCwgODApKSk7
CisgICAgbV9idWZmZXJpbmdBbmltYXRpb24uYXBwZW5kKFFQaXhtYXAoIjovaW1hZ2VzL2xvYWRp
bmdfYnVmZmVyaW5nXzQucG5nIikuc2NhbGVkKFFTaXplKDgwLCA4MCkpKTsKKyAgICBtX2J1ZmZl
cmluZ0FuaW1hdGlvbkl0ZXJhdG9yID0gbV9idWZmZXJpbmdBbmltYXRpb247CisgICAgbV9hbmlt
YXRpb25UaW1lci5zZXRTaW5nbGVTaG90KGZhbHNlKTsKKyAgICBtX2FuaW1hdGlvblRpbWVyLnNl
dEludGVydmFsKDIwMCk7CisgICAgY29ubmVjdCgmbV9hbmltYXRpb25UaW1lciwgU0lHTkFMKHRp
bWVvdXQoKSksIHRoaXMsIFNMT1Qob25BbmltYXRpb25UaW1lb3V0KCkpKTsKKworICAgIG1fY2Fu
bm90cGxheSA9IFFQaXhtYXAoIjovaW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZyIpLnNjYWxl
ZChRU2l6ZSg4MCwgODApKTsKK30KKwordm9pZCBQbGF5ZXJMYWJlbDo6b25QbGF5ZXJFcnJvcigp
Cit7CisgICAgc2V0UGl4bWFwKG1fY2Fubm90cGxheSk7CisgICAgc2hvdygpOworfQorCit2b2lk
IFBsYXllckxhYmVsOjpzdGFydEJ1ZmZlcmluZ0FuaW1hdGlvbigpCit7CisgICAgbV9idWZmZXJp
bmdBbmltYXRpb25JdGVyYXRvci50b0Zyb250KCk7CisgICAgc2V0UGl4bWFwKG1fYnVmZmVyaW5n
QW5pbWF0aW9uSXRlcmF0b3IubmV4dCgpKTsKKyAgICBzaG93KCk7CisgICAgbV9hbmltYXRpb25U
aW1lci5zdGFydCgpOworfQorCit2b2lkIFBsYXllckxhYmVsOjpzdG9wQnVmZmVyaW5nQW5pbWF0
aW9uKCkKK3sKKyAgICBoaWRlKCk7CisgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisK
K3ZvaWQgUGxheWVyTGFiZWw6Om9uQW5pbWF0aW9uVGltZW91dCgpCit7CisgICAgaWYgKCFtX2J1
ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yLmhhc05leHQoKSkKKyAgICAgICAgbV9idWZmZXJpbmdB
bmltYXRpb25JdGVyYXRvci50b0Zyb250KCk7CisgICAgc2V0UGl4bWFwKG1fYnVmZmVyaW5nQW5p
bWF0aW9uSXRlcmF0b3IubmV4dCgpKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlh
bi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckxhYmVsLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IFBsYXllckxhYmVsX2gKKyNkZWZpbmUgUGxheWVyTGFiZWxfaAorCisjaW5jbHVkZSA8UUxhYmVs
PgorI2luY2x1ZGUgPFFUaW1lcj4KKworY2xhc3MgUGxheWVyTGFiZWwgOiBwdWJsaWMgUUxhYmVs
IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIFBsYXllckxhYmVsKFFXaWRnZXQqIHBhcmVu
dCA9IDApOworICAgIHZvaWQgb25QbGF5ZXJFcnJvcigpOworCitwdWJsaWMgc2xvdHM6CisgICAg
dm9pZCBzdGFydEJ1ZmZlcmluZ0FuaW1hdGlvbigpOworICAgIHZvaWQgc3RvcEJ1ZmZlcmluZ0Fu
aW1hdGlvbigpOworICAgIHZvaWQgb25BbmltYXRpb25UaW1lb3V0KCk7CisKK3ByaXZhdGU6Cisg
ICAgUVBpeG1hcCBtX2Nhbm5vdHBsYXk7CisgICAgUUxpc3Q8UVBpeG1hcD4gbV9idWZmZXJpbmdB
bmltYXRpb247CisgICAgUUxpc3RJdGVyYXRvcjxRUGl4bWFwPiBtX2J1ZmZlcmluZ0FuaW1hdGlv
bkl0ZXJhdG9yOworICAgIFFUaW1lciBtX2FuaW1hdGlvblRpbWVyOworfTsKKworI2VuZGlmIC8q
IFBsYXllckxhYmVsX2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9y
bXBsdWdpbi9XZWJQbHVnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCShyZXZpc2lvbiA4NjIyNykKKysrIFNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9XZWJQbHVnaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw2ICsyMCwxMCBAQAogCiAjaW5jbHVkZSAiV2ViUGx1Z2luLmgiCiAK
KyNpZiBkZWZpbmVkKFdURl9VU0VfUVRfTVVMVElNRURJQSkgJiYgV1RGX1VTRV9RVF9NVUxUSU1F
RElBCisjaW5jbHVkZSAiSFRNTDVWaWRlb1BsdWdpbi5oIgorI2VuZGlmCisKICNpbmNsdWRlIDxR
dEd1aT4KICNpbmNsdWRlIDxRdFBsdWdpbj4KICNpbmNsdWRlIDxha25kaXNjcmVldHBvcHVwLmg+
CkBAIC0yNDcsNiArMjUxLDEwIEBAIFFPYmplY3QqIFdlYlBsdWdpbjo6Y3JlYXRlRXh0ZW5zaW9u
KEV4dGUKICAgICAgICAgcmV0dXJuIG5ldyBXZWJQb3B1cCgpOwogICAgIGNhc2UgTm90aWZpY2F0
aW9uczoKICAgICAgICAgcmV0dXJuIG5ldyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXIoKTsKKyNp
ZiBkZWZpbmVkKFdURl9VU0VfUVRfTVVMVElNRURJQSkgJiYgV1RGX1VTRV9RVF9NVUxUSU1FRElB
CisgICAgY2FzZSBGdWxsU2NyZWVuVmlkZW9QbGF5ZXI6CisgICAgICAgIHJldHVybiBuZXcgSFRN
TDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCk7CisjZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZv
cm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
cXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHJldmlzaW9uIDg2
MjI3KQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3Jt
cGx1Z2luLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsMjkgQEAgbG9hZChtb2JpbGl0
eWNvbmZpZywgdHJ1ZSkKIAogaXNFbXB0eShPVVRQVVRfRElSKTogT1VUUFVUX0RJUiA9IC4uLy4u
Ly4uLy4uCiAKK2NvbnRhaW5zKE1PQklMSVRZX0NPTkZJRywgbXVsdGltZWRpYSkgeworIAorICAg
IENPTkZJRyArPSBtb2JpbGl0eQorICAgIE1PQklMSVRZICs9IG11bHRpbWVkaWEKKyAgICBERUZJ
TkVTICs9IFdURl9VU0VfUVRfTVVMVElNRURJQT0xCisKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAg
ICAgSFRNTDVWaWRlb1BsdWdpbi5jcHAgXAorICAgICAgICBIVE1MNVZpZGVvV2lkZ2V0LmNwcCBc
CisgICAgICAgIE92ZXJsYXlXaWRnZXQuY3BwIFwKKyAgICAgICAgUGxheWVyQnV0dG9uLmNwcCBc
CisgICAgICAgIFBsYXllckxhYmVsLmNwcAorCisgICAgSEVBREVSUyArPSBcCisgICAgICAgIEhU
TUw1VmlkZW9QbHVnaW4uaCBcCisgICAgICAgIEhUTUw1VmlkZW9XaWRnZXQuaCBcCisgICAgICAg
IE92ZXJsYXlXaWRnZXQuaCBcCisgICAgICAgIFBsYXllckJ1dHRvbi5oIFwKKyAgICAgICAgUGxh
eWVyTGFiZWwuaAorCisgICAgUkVTT1VSQ0VTID0gcGxhdGZvcm1wbHVnaW4ucXJjCit9CisKIFNP
VVJDRVMgKz0gXAogICAgIFdlYlBsdWdpbi5jcHAKIApJbmRleDogU291cmNlL1dlYktpdC9xdC9z
eW1iaWFuL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnFyYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucXJj
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L3BsYXRmb3JtcGx1Z2luLnFyYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPCFET0NU
WVBFIFJDQz48UkNDIHZlcnNpb249IjEuMCI+Cis8cXJlc291cmNlPgorICAgIDxmaWxlPmltYWdl
cy9idXR0b25fY2Fubm90cGxheS5wbmc8L2ZpbGU+CisgICAgPGZpbGU+aW1hZ2VzL2J1dHRvbl9j
bG9zZS5wbmc8L2ZpbGU+CisgICAgPGZpbGU+aW1hZ2VzL2J1dHRvbl9wYXVzZS5wbmc8L2ZpbGU+
CisgICAgPGZpbGU+aW1hZ2VzL2J1dHRvbl9wbGF5LnBuZzwvZmlsZT4KKyAgICA8ZmlsZT5pbWFn
ZXMvYnV0dG9uX3NvdW5kX29mZi5wbmc8L2ZpbGU+CisgICAgPGZpbGU+aW1hZ2VzL2J1dHRvbl9z
b3VuZF9vbi5wbmc8L2ZpbGU+CisgICAgPGZpbGU+aW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzEu
cG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18yLnBuZzwvZmls
ZT4KKyAgICA8ZmlsZT5pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMy5wbmc8L2ZpbGU+CisgICAg
PGZpbGU+aW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzQucG5nPC9maWxlPgorICAgIDxmaWxlPnFz
cy9PdmVybGF5V2lkZ2V0LnFzczwvZmlsZT4KKzwvcXJlc291cmNlPgorPC9SQ0M+ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRm
b3JtcGx1Z2luL3Fzcy9PdmVybGF5V2lkZ2V0LnFzcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcXNzL092ZXJsYXlXaWRnZXQucXNzCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3Fzcy9P
dmVybGF5V2lkZ2V0LnFzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorUVNsaWRlcjo6
Z3Jvb3ZlIHsNCisgICAgYm9yZGVyOiAycHggc29saWQgYmxhY2s7DQorICAgIGJvcmRlci1yYWRp
dXM6IDVweDsNCisgICAgYmFja2dyb3VuZDogd2hpdGU7DQorfQ0KKw0KK1FTbGlkZXI6OmhhbmRs
ZSB7DQorICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOw0KKyAgICBib3JkZXItcmFkaXVzOiA4
cHg7DQorICAgIGJhY2tncm91bmQ6IHFsaW5lYXJncmFkaWVudCh4MTowLCB5MTowLCB4MjoxLCB5
MjoxLCBzdG9wOjAgI2VlZSwgc3RvcDoxICNjY2MpOw0KK30NCisNCitRU2xpZGVyOjphZGQtcGFn
ZSB7DQorICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOw0KKyAgICBib3JkZXItcmFkaXVzOiA1
cHg7DQorfQ0KKw0KK1FTbGlkZXI6OnN1Yi1wYWdlIHsNCisgICAgYm9yZGVyOiAycHggc29saWQg
YmxhY2s7DQorICAgIGJvcmRlci1yYWRpdXM6IDVweDsNCit9DQorDQorUVNsaWRlcjo6Z3Jvb3Zl
Omhvcml6b250YWwgeyANCisgICAgaGVpZ2h0OiAxMHB4Ow0KK30NCisNCitRU2xpZGVyOjpoYW5k
bGU6aG9yaXpvbnRhbCB7DQorICAgIHdpZHRoOiA0MHB4Ow0KKyAgICBtYXJnaW4tdG9wOiAtMTVw
eDsNCisgICAgbWFyZ2luLWJvdHRvbTogLTE1cHg7DQorfQ0KKw0KK1FTbGlkZXI6OmFkZC1wYWdl
Omhvcml6b250YWwgew0KKyAgICBoZWlnaHQ6IDEwcHg7DQorICAgIGJhY2tncm91bmQ6IHdoaXRl
Ow0KK30NCisNCitRU2xpZGVyOjpzdWItcGFnZTpob3Jpem9udGFsIHsNCisgICAgaGVpZ2h0OiAx
MHB4Ow0KKyAgICBiYWNrZ3JvdW5kOiBxbGluZWFyZ3JhZGllbnQoeDE6MCwgeTE6MCwgeDI6MSwg
eTI6MSwgc3RvcDowICNlZWUsIHN0b3A6MSAjY2NjKTsNCit9DQorDQorUVNsaWRlcjo6Z3Jvb3Zl
OnZlcnRpY2FsIHsNCisgICAgd2lkdGg6IDEwcHg7DQorfQ0KKw0KK1FTbGlkZXI6OmhhbmRsZTp2
ZXJ0aWNhbCB7DQorICAgIGhlaWdodDogNDBweDsgbWFyZ2luLWxlZnQ6IC0xNXB4OyBtYXJnaW4t
cmlnaHQ6IC0xNXB4Ow0KK30NCisNCitRU2xpZGVyOjphZGQtcGFnZTp2ZXJ0aWNhbCB7DQorICAg
IHdpZHRoOiAxMHB4Ow0KKyAgICBiYWNrZ3JvdW5kOiBxbGluZWFyZ3JhZGllbnQoeDE6MCwgeTE6
MCwgeDI6MSwgeTI6MSwgc3RvcDowICNlZWUsIHN0b3A6MSAjY2NjKTsNCit9DQorDQorUVNsaWRl
cjo6c3ViLXBhZ2U6dmVydGljYWwgew0KKyAgICB3aWR0aDogMTBweDsNCisgICAgYmFja2dyb3Vu
ZDogd2hpdGU7DQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX2Nhbm5vdHBsYXku
cG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5
cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMv
YnV0dG9uX2Nhbm5vdHBsYXkucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAg
KyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRkFB
QUFCUUNBWUFBQUg1RnNJN0FBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBCkdYUkZXSFJU
YjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUJDWkpSRUZVZU5xTWtGRUtB
Q0FJUTl2dWYrZkYKSUVFRExUOEUzWE9La0xSK2drNEFUSGNUc283am1DRmtxRGcyWWhubXl5bjZ2
TzVCVjkrZ3VwclR1dHpuQUJVNC9qamVhSDBMUUNtVgpKQUVBZ3FEOC82TXRMVXJvNUswaEJGeXN0
UmxNWHovcnhrTGFvUm9XNncwN3d0TmF3YkdycWRnSzRKcTNPdHc1WnRYcm5raEVWRVZFCit1NlJn
cGVjSVBlNlBuT2tURUsyS1FEclpKQUVBQWlDd1BUL2Y2NkxUYVdRSHZSWUF4VnNUelA3R0MvNGpk
ZUV2Rms2eUFocEZFVjkKRlJoUTJaaXdDd2pZbUFoUUU3RDFnejJqbXhsbmtlaG9IbVZmQ1dWVXlW
aUxSbUxQUzh0cng2WWQ3Q1VBSmZWMkF5QUlBMUQwaHoxMQpFSTJydUNraWlzSFN4NFdFR0JKNktG
aW9LYmRlMnRtUFNaY3hxVjlwMjQrMjFaVm1KMk9TY2g0TFFiMllMRnRaTlh2YjkyTHFHZHdECmlt
clltK3J6YVFkTDBBajdRSUlTN0FkR0tNRUcwRU1KcG9JRXRUQVQ5SDVBV0ZJekdFR25zYkJPYWRI
UzR1YzNnQlkvdlFFVXhkakUKalJvbmVIVm1vZWJqRUdFYWFqNE9GUE5pTGdGb3IyTWNnRUVZaHFM
M3YzV2xxbUpBVFlqdHo4QUllUkxFUU5zcDM1RHZHUkhWMWlrbgpiSnVIUTZkMXlnbkZLWXVoYXAy
MTc1T0lUcUFuMkYrYnZtTS9vRFRVaGJVWEhnRk5ZWk11ZHFFSTdBaDBvUlJzREtTaFU1Z01US0Vx
CkxBRktaeXlPcDl1d0ZJckQ4QnpGa3g4T2ZEejU4Y0NuWVRSVVhzQ09DN1BPZUFFWHBrTGx4d0lG
Yyt0SS80TkxULzYyemlNQXIyWnkKQkNBTXc4RCt1K2JGTjc1MlZZQkhnb0ZFaDl2NWxVbHdmQTcr
VDJXL3dRN084OXN3U1haeHlqL01JRG5CYWYzK0pNa3BUdnNRSlVodQpjRVluL0lYa0ZrZTdnNm43
V0JVS2lGZ3cxUXdodVJRdHFPaEJraVNwcXZFOFJaZjhnQ2RCalJNZW1jVmNIZTJIdDk0NGF0b1Y0
MDZTCjNNUWZrVndta3MxY1NGNEMrRWo4ZGxKQmlXd3drZzhTQ2V0S3FpWGpYeVVDTmtMMGtaNms5
VndzNWIvMEpLam94VDJFWGVRZ01wMVUKNXBvU3ByczZvKzFFN0lOWnhTSjFiS0xRUG5xYy92Qkps
U3h4MnNQRXpzSUdwelZNYm41TWNjcGhZeTFsZ3ZNY3RuWm1KampWTnBDNgplZFRCcVliMUtxTEMr
UVFvN3d5U0VJWmhHTWhUZVJvL2hRc0hKZ2VtSkxheUcvb0JXV3FUMkxJblhXb2RwSG9wcVZaSWEx
RTNBRDFUCm4ybEl1R2srUHdOOW50ampySkZCeUdvK1UwRGZpaEdxa0YxOGxvQU1RbmJ6S1FFaUNw
bmlVd3BFRURMTnB4MDBKZVF1RG9nZ2pNSmQKbnVlaENrbUpVUkVrT1NiTjI2YXVDdnl5b1c4bmxv
MGJlNkRoVDBCNkpxREl3Y2k1cUNxWkpTYnh1bktLVmtacTYxSksvYTF6Um1nTwowQkhpYlhWL1Rs
cStPNFE4OGdDSjJtZ25wekFKSWY4aWlXNzFJdzFHSnJtY1V4Z0phR1BYNEFDVExTMk5kWTUxeUUz
QklsK3FzYUdFCmFqV1lXNXFRL2RuZlZOL2FzK2tDM2prZmsrUlREa3lhMEVyd0tRTW16d2gyOGxr
R05rMnBkdkNaQmphTzkzYndxUmpNMWs3cVYvQzUKL091RzRVTHh4L3QrNFB2dGdHZUZ6d3M2VHl0
WjdNSXpTZ0FBQUFCSlJVNUVya0pnZ2c9PQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlh
bi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5v
dCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0g
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
S2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9jbG9zZS5wbmcKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUF5Q0FZQUFBRnBPTGduQUFBQUNYQklX
WE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5a
VkpsWVdSNWNjbGxQQUFBQnZ4SlJFRlVlTnBpL1AvL1B3TWpJK01tQmt6UQp4Z0tTNk8zdDlVV1hX
Ymh3b1RBVGlQSDU4MmVHb29KOEZQclBuejhNTENESlQ1OCtNUlNYbGpIMGRuZUJhUkQ0L2ZzM0Ex
d25TQ0l0Ckl4Tk1vK2dFY1NLalk4QTZZRFJJa2hGSTZ3SnhLeGJYTWdBRUVFaHlFMVlKb0JmK1k1
TmdBdGxqYkdUSTRPem9pT0lGSnBEVE4yM2UKd3ZBTDZOejYyaHF3ODBGaVlCMGdiR3BpekhEOCtB
bUdrS0FnTUo4RlJDQTdsNkNyQUFJSUxERmx5aFJmQmlMQm5EbHpqc0ZEQndacwpySzBaamh3OWls
TVRTcERDQUJjWEYwTkZXU25EdWZNWEdJd01EY0JpMWJWMUtKckFrZlR4NDBjNG5qZC9QbGdTcHVI
a3FWTW84cUNZCnhiQnA0Zng1RFBHSlNYQitha295aWp4VzV3V0ZoS0w0b2E5L0Fnb2ZaQk5BQUlG
Q2J3NFFpeEViZW96QW9QN1BRQUpnK2Zuekp3TkoKR243OStvVlhBUWM3TzhNUEpFTlJiQUNsTWhC
b2JHN0J5Z2Y3b2FxcUNzVVByYzFOS0RZZ1J5STRnZi80OFlNQkdjT3lJUWlBMk9qeQpUQ0FuSVdO
UTFvUUJFQnRkbmdua2FSaWVNbWtpV0NFb1Q0TXdDSURFa05XZ2VEb3pPNGZoMjdkdmNENG9xVFEz
TlRJZ3EyR01pSWlnCmJjVGh6S0s0QUVBQWdSTWZMeSt2ZEhkM3R3Y0RsUUV3a0g3bjVlWHRBR1VM
c1phV0ZnOVN2VU1rWU5YWDF4Y0c1ejBhV1FBRy8vNzkKWThCckNhaEVFQmNUWTdoMCtUSzR4TVVH
YXFvcXdYUlBYejg0bGVLMEJGY09mUDdzT2RnU1BWMWRNTDV3NFNMRHVnMGJ3SEpORGZVbwpha0hG
UEZrK1diNXlKUmlIaFlZQUt4VWpCZ01EZlRCR0J1V1ZWWGlENisvZnZ3eEV4Y25pSlV2QmxxQ0RV
NmRQRTlSTDBDY2dNSDNxCkZCUStLS3ZHeDhZeVdGaVlNNWlabW9MeGlSTW5HUll1WG96VEVtWlFm
YWlucDZjTzhoWXlaZ2VXaEZNblQ0SXJUazVOQTBiK1pyRGMKdWZQbndXeFJFUkVHV1ZsWkJoa1pH
UVo5UFQyR3ZmdjJNYUNiYysvZXZjZmczQnNkSGUxTHF5UjgrUERoWXpUUEovQ0lmL2Z1M1NkdQpi
bTQrV2xqeTVzMmJUd0FCQkFvdUN5Q3VvcEZIWGdFYmxDbmdPSmswYVpJSEd4c2JLN1Z0S0MwdDNR
RnNManhsTWpBd0VHWmlZbUlGCk5TS29qZHZiMjBFbHV4Z0xxSDBNaWh4YUFyQWxJRnRwYmdtdGZj
SUVzd1FiWm1WaHdTa0h3NVlXRm5qbDhRWVhCd2NIUTBGK0hwamQKMHRhTzFZVit2ajdnS2tCVlZZ
Vmg5cHk1cFB1a3BLZ1FwV0pDbC9mMTlnWmJBQUtnT3NmV3hocW5UM0JhVXRmUWlPSWFVR3NRSnVm
dgo2OHVncjY4SGx3TlZabnYzN1NmZEVoQkdiekdDYXNNQWYzK1VpZ3ZVVFZpOWRpM2VPR0VDbGZm
NE1oUjZ6UWZyUm9EQTJYUG5HRmF1CldvVlhQOXduaEhJdWNoTVhCazZmT2N1d2JQa0tnbm9KQmhj
TWg0ZUZZbGdDNmhJUzBvY1NKL2hjRWhrUkRxNWlzWUVKZmIyVSt5UW0KS29yQjNNd01iaWlvTGdm
VjhjZ0ExSFlueWlmWUpPTmlZc0NOQlJnQTlaYm5MVmdBbG9OMURwQWJHMlJaQW1vY3dNQ3hZOGNa
NXN5YgpoeUlQYWxnZ0ExRERnK1E0cWFtclkzajArREc0bnoxejlteXNhbUNkWEZBUWdscVF1T0lF
YnlsY1ZWMURzSVNOaVlzZkhFVTlDeXpICkQvbEtpK1h0MjdlZmFPV1RyMSsvZmlLcmswa0dxQVlJ
TUx6alkwTUlWSU5EQzlqRFppMHBLYkVTRlJYbEcwcXVmLzM2OWFlZW5wNWoKd0VicWIzQ2JYbGxa
bVU5UVVKQ1Axcm1GMmdEa1pwRGJMMXk0OEJic0VYcmtSbG9Ca052QnVYMVllWVFlaFRBdHg0WW9p
aEVPRG5adwpPMFlNMk15K2ZQa0t3K2F0VzhseUNLakpycXVydy9EcTFTdUdKY3VXTWZ6NDhaTStT
UXZVWVFHMWs4VEZFZVBZSUllQThNVkxsOEhqCklNUUFQMUNYUUU4WHpnY0ZTRkZCQWNQTGw2OFlG
aTFaZ25YUWpDaVBFSnUwdm56NXd2RDh4WE1VajhBQXlHRWdmT0hpUlliMUd6WmkKMVI4WUFPeHk2
T3ZqTkI5a05zZ091bVQyTld2WGdYRndVQ0NEb1lFQmhqeklvU0I4L3NJRmhyWHIxb1BGY0ttRkFX
UzFkQysxVnExZQpBOGFod2NFTVJrYUdHUElnaCtOelBMZ1RlTzQ4dUJOSXRlS1hrbElMTnRRSzZv
YVpHQnNUcGVmTTJiUEFUdWJxd1ZtUGdEcW5JTE5NClRVendxanQ5NWd6RDhoVXJCMmM5QWlxS3pj
eE1pVklMOGlnSW56cDFHbHprVXEwZWdRMm1rZ05pUVYxV2N6T2M4aWRPbmdMVDJOU0EKUEE3Q0lE
V0xnVVV1UlIwU2NwTldmRndzZUFRTkZ6aCs0Z1REd2tXSUFmc0ZDeGZpMUFQeUpBaWo2eUVsYVlH
YjhRb0tDc0xPenM1Vwp4Rlprb0JFNlhPRFk4ZU1NOCtZdndHdEdVbUlDZzVXbEpVNTUwQ3dUc1JY
cjNyMTdqejE0OE9BdDJDUHk4dkxDam82T1ZzU0dBbXlhCkhUU0xBUU5Iangxam1ETjNIa21obVpL
Y3hHQnRoYkQyOGVQSERCMWQzU2d6cDRUQS92MzdqejE4K0JEaUVUazVPV0Y3ZTNzclV0TWwKeUVQ
dWJtN0FXbndEUmVrN01DQ0FZZWV1WFNSNUFBWU9Iang0N05HalIyOHBxa2RBSXpTcjE2eWh1QWls
eEl6aDJSOFpWaDRacWgwcgo1T0lYdkVpR25aMmQxY25KeVptWm1abDFLSGdBbUlKKzc5dTNiKy9Q
bno5L0E3bXZHS0dyMUVDMVZBb0RDYXQrQmdsNEJZb0lvQjlPCkFBQlVQVmFRWlpWTURRQUFBQUJK
UlU1RXJrSmdnZz09CgpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1
Z2luL2ltYWdlcy9idXR0b25fcGF1c2UucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZp
bGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlh
bi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZwpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtH
Z29BQUFBTlNVaEVVZ0FBQURJQUFBQXlDQVlBQUFGcE9MZ25BQUFBQ1hCSVdYTUFBQXNUQUFBTEV3
RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBB
QUFBNmxKUkVGVWVOcGkvUC8vUHdNakkrTW1Ca3pRCnhnS1M2TzN0OVVXWFdiaHdvVEFUaVBINTgy
YzREZzRNQU5OLy92eGhZQUZKZnZyMENhN2p6OSsvWVA3djM3OGhraUNWTVBEM3oxOVUKbmNpUzlZ
Mk5FQk9Ba294QVdoZUlXN0c0bGdFZ2dFQ1NtN0JLQUwzd0g1c0VDOHllK3RvYU1OM1kzQUtSUUhZ
NnNsZFlrRjJHN0ZLNApSR1IwREhHdUFnZ2dzTVNVS1ZOOEdZZ0VjK2JNT1lZUk9vUUFLTlF3WWdx
RUs4cEs0WFI0V0NpS0hEd2VQbjc4aUdFaVRBeWtDRmtlCmE4eUNRSHhpRWdxTjdqeVMvUVN5Q1ND
QVFLRTNCNGpGaU5YRUNBenEvd3drQUphZlAzOHlrS1RoMTY5ZkpHbGdBdG1BakVGeEFjSXcKTnJv
OFRodGc0dWp5TEQ5Ky9NQ3FBU2FPTG8vVDB6QnhkSG1TbmNRWUZ4ZjNuNmJCU25MRTRjeWl1QUJB
QUlFVEh5OHZyM1IzZDdjSApBNVVCMEx1LzgvTHlkb0N5aFZoTFM0c0hxZDRoRXJEcTYrc0xzMkNM
VTJxQ2YvLytNZERQRWtKSnBhbWhIczZ1YTJoRUVYdnc0Q0hECnZBVUxxT3NUZExYLy92L0RxLzh2
c0pxazNKSi8rQzJoaWsvK0Uyc0pLZGtYWGUwL1lPTUVuMzZpZlJJVEYwK1UySUFsWVhqRXYzdjMK
N2hNM056Y2ZMU3g1OCtiTko0QUFBcFZkRmtCY1JTT1B2QUkyS0ZQQUplcWtTWk04Mk5qWVdLbHRR
MmxwNlE1Z2MrRXBrNEdCZ1RBVApFeE1ycUJGQmJkemUzZzRxMmNWWVFPMWpVT1RRRW9BdEFkbEtj
MHZvNHBPUkVWd0s4dklNOFhHeFlQYkJRNGNZRGh3OEJPOUhJUGNsCktMSUVWUFlnMkpocWlRbHFn
cGI4UmJMa1A3Q0NJc3NTa0V2eHhRbXlJZGpVRWhPZkJDT2VhcGJnajVPLzFJbVRnZmZKWHlwRS9Q
QkoKd29UaTVPclZxeGlkV0d5ZDJoRlNDaFBLOFVQSEoyL2Z2djFFSzU5OC9mcjFFMW1kVERKQU5V
Q0E0UjBmRzBLZ0doeGF3QjQyYTBsSgppWldvcUNqZlVITDk2OWV2UC9YMDlCd0RObEovZzl2MHlz
cktmSUtDZ255MHppM1VCaUEzZzl4KzRjS0Z0eXlRb3BYMnVaRldBT1IyCmNHNGZWaDZoUnlGTXky
R2I0UmNqbEhwRUh0aXZpSXVKeGhBL2RQZ3dzSjl4R002dnJjYnN3ajk4OUloaDBlSWwxUE1JSlVr
TFZ5QVEKazJRcHRadXFNWUxjNEVjVkoyd3VwWFpUMXlOSTdYMVVTLzRSTnBmYUhobE5XbWlkSTlL
VEZnUDFZb1RTZW1RZ1l3U2xIaUcydDBkTQpUNUxVUFBLZmdUcDEyUEFxdFlaTjBxSTBWRUF6VEox
ZDNSamliOTYrUlRFWG01cHYzNzhObm5vRU5GbC85ZG8xZ3VxSVVUT2c5Y2hvCmYyVFVJOE00YWNF
WHliQ3pzN002T1RrNU16TXpzdzRGRHdCVDBPOTkrL2J0L2ZuejUyOGc5eFVqZEpVYWFPSXloWUdF
VlQrREJMd0MKUlFUUUR5Y0FtM0V1QUdCSWZwSUFBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0b25fcGxheS5w
bmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlw
ZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9i
dXR0b25fcGxheS5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUF5Q0FZ
QUFBRnBPTGduQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJG
eVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQlJGSlJFRlVlTnBpL1AvL1B3TWpJK01t
QmpRQQpGUGRqQVVuMDkvZjdva3VDeEpsQWpFK2ZQakVFK3ZzemFHcG9nTmtnREFKZ3lZOGZQekw4
K2Z1SHdkM05sYUd1cGhyTUJ3RVdtTTYvCmYvNkFCVkxUTStCR3d5VnI2eHNZTU96RjVWb2dpQVFJ
SUVZZ01RZUl4VEIwQWIzd0g0c09CaWFZa3d2eWN1SE9CMkVXbUZOQkFPUjAKRUNndUxXTmdnWGtR
dzlrd2lmRElLRlRMZ1JpYmN4a0FBZ2pzM0duVHBpVXpFQW15c3JJMmcwSkhETmtOVVJIaERNdFdy
TVNyRVI2awpNUERuNzErRzh0SVNPTCs2dGc0emJHQXhDTU4vb0pFRkEzNitQaWp5V0czNisrY3ZR
MXhDSW1uT3E2aXFJaGdZQUFHRUx5VmdBeFBCCmFSa1kzTDdFcU42NWM2Y1MyRmsvZi80a3luZ0hC
d2R0REEzczdPeDREY0RRQUl1VHBwWlc0alFnSjlIbkwxNHdUSms2RFRNU2YvejQKQWNmSVFGSkNn
cUcxdVFrVWluQjVncDdPeWNzbnprazl2WDBNTjIvZEl1eUhiOSsvTTJSa1poRWZTb2xKeVlUVEU3
RVI5L2Z2MzkrZwpuTmdHeERyRTVrU0FBQ0kxOFpFRHJyREFMSmcwYVpJdkxXekl5OHVEaEJVcDRV
VU9JR2hKYkhRVWc1eWNITVBMVjY4WTVzeWRSeHRMCi92MkQxQUhpWW1JTTFaVVZjUEcyams2TXJF
RytKZi8vWVJXdnFpaUhzemR2MmNwdzVPaFJTbnp5ajZCTGZYMjhHUjQrZXNodzU4NWQKOGl6NWo4
T1M3OERzV2xSU1N0MDRBWUdqeDQ0eHpKMDNuL29SUDMzR0RJYlhiOTdRTmdrL2VmcVU0bnpDRE1T
dmdOaUNoWVdGa1llSApSeGhZT0RGUUEvLzY5ZXYzcGsyYnRvRXNBUWdnV05ubERHVG5Vem1qdndL
YW5RSnIyNUJVb3BJS1FLMVRjTXNxS1NsSjI4VEVSSW5hCkZvQWFXeUFmZ1NQZXdNQkFDYjM1UTBV
Z3hnS3RpUmhvQ2NDVzBOQVhpQVlIdnFUbzRlWkdkakltMmljNk90cGd2R1RwTW1BaCtJajgKNENJ
bVRtS0FsUmVvVk9qczdxRnRuSUNhazZDRzNvVUxGeG5XYmRoQWZaOGdBd01EZlRDZUF5eVI3OSsv
VDl2VWxaS1VDSzZDNnh1YgpDS2N1a0NXNE1DSEF3Y0hCME5uZXhoQVNISXhUTDFVeTQ5Tm56eGlX
TGx0R3U4eFlXbDRCcm9xcEh2RWdzSHJOV29aOSsvZlRwbGg1Ci9PUUpRMU56QzIweUk2eUw4dTNi
Tjlwa3hxWExsalBzM0xXTHNsSVluMCtpWStPR1JsRlB2MG9MV0xyK1ptWm1acVZwcGJWbHk1WWQK
b0hZU3RkcGNJSHp2M2oxWUIzZ2lxTFhDRGNUTGFkVmZCRGFKcWdBQ0ROYTRBMWxVVGN2MkY2MDhB
Y1N0UUQ5OEJZVVdTZ3MxTWpKUwozZExTVXBHTmpZMTFNTG9jbEhUMjdkdDNhOE9HRGZlUWg1MVFo
di82K3ZvOEJxc0hzSG1vcUtob0IwWVBDTnhUQWVaR1dtZDlhZ0gwCmtnUEZJN1F1SkdsZU5pS05Z
NUZzQUQ4Zkg4TkhwSEhYUWVFUmNtTEV3OE9kUVU1V0Z0d01QM3prS01QcE0yZUdwa2RBeFRlc3Fl
L2kKN0FUR0lIRHgwbVdHWGJ0M0V6MU9OZUJKQytZUmRLQ3Zwd3ZHSVBEaTVVdUdIVHQzTWp4NDhI
RHd4d2crSUNFdXpwQVFCMm0yZ1dKbwozLzRERE1lT0h4OWNNY0pBaEVmUXUwcGVuaDVnREFMbnpw
MW4yTHgxSzhWSmtDNHhnZzhZR1JtQ01RZzhlLzZjWWRPbXpReDM3OTBiCmlEeEN2ZVFoSlNuSmtK
R2VCaTc1Tm16Y1JMQnJPS2hpQkFTK0E1UFY5dTA3R0E0Y1BEaUFwUllEZVI1NSt2UXB3K3ExNnho
dTM3NDkKZEVvdEdEaCs0Z1REcWxXcndmTndRNlllQVNjWm9JTTNiZDdNc0h2UDNxRlRzOE5IUVI0
L1psaTZmRG5EalJzM2gxNFQ1ZkNSSXd5TApseXdsYTVSbDBDUXRVc2VnQm0yTURKdit5R0R5Q0dn
ZURyeVE2TWFORzFkVlZGUzBoNExENzl5NWN4V0ord28ySEVUVHFUaGFEd25CCng3VmdBRHA1R2Nt
QVphblhJQU9nVkxRYzZIWjRCUVVBdXQ2Vm5KUGJXaVVBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3Nv
dW5kX29mZi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBi
aW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L2ltYWdlcy9idXR0b25fc291bmRfb2ZmLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVV
Z0FBQURJQUFBQXlDQVlBQUFGcE9MZ25BQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpH
WFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFCb2hKUkVGVWVO
cGkvUC8vUHdNakkrTW1Ca3pRCnhnS1M2TzN0OVVXWFdiaHdvVEFUaVBINTgyY0dWeGNYaHFTa0pE
QWJoUC84K2NNQWx2ejA2Uk9EcnA0ZXc2dVhMOEZzRVA3OSt6Y0QKWEdkYVdocURzSWdJZzdhV0Zs
d25DMHdTQkhKeWN1QjJnaVFaZ2JRdUVMZGljUzBEUUFDQkpEZGhsUUI2NFQ4MkNTYVFQVWFHaGd4
RgpSVVZ3NTRNd0M4aXBEbzZPRExkdTNnUTdHMFVIeU5scTZ1b016azVPQ0Iwd0owZEdSaExuS29B
QUFrdE1tVExGbDRGSU1HZk9uR01vCm9ZTU1VbE5UR1diUG5vMGhqaEdraW9xS0RIYTJ0Z3cvZi81
a1lHWm14bW9ZWE5QSGp4L0JBdEhSMFF5Y25KeGc5dE9uVHhsQ2c0TVoKNXN5Ymg2SUpGTE1vTm1W
a1pNQWxnVEhBMEQ5eEltSG5JUU5RT0dNRElKc0FBZ2dVZW5PQVdJelkwR01FQnZWL0JoSUFDeWlF
U05Mdwo2OWN2a2pRd2dXeUE0YmlZR0ZBK1pLaW9xR0JBRmtmR2NCc0VCUVVaanA4OHllQUN6SG9n
Z010bWxoOC9mb0FaOXZiMkRLYW1wbUQyCjJiTm5HV0RpT0QwTm9zR1J3OExDWUd4c3pDQXBMczdR
MXRHQjZRZVExU0M4YU5FaWhxeXNMTEFtRUdob2FtS29Bdm9GSmcvRFRPaWUKU2s1T1pyaCsvVHFZ
WFZsZGplRnB4b2lJQ05wR0hNNHNpZ3NBQkJBNDhmSHk4a3AzZDNkN01GQVpBQVBwZDE1ZTNnNVF0
aEJyYVdueApJTlU3UkFKV2ZYMTlZUlpZWE5NSy9QdjNqd0duSmJZMk5nekNRa0lNR3paQmdwK0Rn
NE9odUxnWVhPSk9uanlaZEV1dzVZTzkrL1l4Ck9EbzRNQ1FsSkRDOGZmY09YQ09CQUtqaUl5WEg0
dlJKV0ZnWU9JdkF3SmV2WDhGNWpJMlZsVUZHVnBhazRQMzc5eTkyUzBBU3lBQlUKLzRBQXFJSUMx
YStSRVJFTUN4WXVKTm9uNERRUExLRngxajdBNGhKY1A4REEyN2R2R1U0Qml4eDlZUEM5QkZvNGE4
NGN2SmJzMnJYcgpHQXUrc2dtNWhBZm1Jd1loWUVJQWdUVnIxNEt4SWJCZUpoUS9lRk1YT2dCbUtq
QU5paXVZK2hNblRsQ1doSEdCWThlT2taUlA0QkgvCjd0MjdUOXpjM0h5MHlJeHYzcno1QkJCQW9J
aTNBT0lxR21YNFY4QjhsUUpPWFpNbVRmSmdZMk5qcGJZTnBhV2xPNEROaGFkTUJnWUcKd2t4TVRL
eWdLb2ZhdUwyOUhWU3lpN0dBaWduMHpFZHRBTFlFVm5IUzFCSmErNFFKWmdreE9EQXdrR2kxTUF5
M0JGdWtnZHBRd0FRQgo1NFBhNGlvcUtpUkhQbDZmZ0VCTVZCUzRjTXpOeldXUWw1ZUg1MkN5ZklK
TmNzYXNXV0FGL3Y3K0RGeGNYQ2pGQkttV1lJMTRVRGNBCkJNUWxKUm1lQTR2elM1Y3VNZWdCaTNa
V1lLVkZUaUpoQVpXUzZFazRKU1VGemdhVnVxQmFFV1lST2NrZGE4U2pBMWhWRExJSUZFZFUKaVho
c0FHWlJEckRWQzJvbVV5VUpmLy8rSGFkRitjRFVCcktJSXArQWtpeW91enRqeGd3TWk1cGJJUjNy
b29JQ2VFSWdPd21EOExsego1eGlhbTVzeGFqcFE1d0JjbEFNYmUyUW5ZV1R3NE1FRHNNOWdyVWFZ
MnRyNmVzcFNGem9HTlUwek16TVppRkdMTFU2SUxvVkJIZUxZCjJOakJXOVJqemZGRHN0SmlBYlp0
UDlIS0oxKy9mdjFFVmllVERGQU5FS0JkODNsSklJamkrQXNTYjV1eUdCWjRVWlE2bUo0bGlnengK
VUlRRW5xS3pod2dVdlBrditFOUVQeW5zRmlMV0hxV2pweEpFUFlwckhpb1AwVjZhOTJxWFJYVFRi
TWl0SGd5b01MUHpkWDU5MzJmVwprSStaS0RMMGI3RU0yNUpPcDBNT2gwTXdVKy9iN2ZaVE5wc3Rz
U1dza0tmM2VEeUMzVzRYZUsrVzd3N3NNL2E5WEM1M3B0V2NtZmRxCjVCWFlkMXJ0djBvSXowM1k2
L1ZDdFZybHlvYStQQ0xCUUFEdTd1OE5FVUU4SGljUmlMRXJsY3BrVFMzczJNcnlzaWFHSmY1d2xj
OXIKZ2hDR0pSSUpFQVRCa0FSeEZUTE0xRUo0aTJWdGRSVjhQaCtCbk4yZEhYaGtWbWx1Zmg1c05s
dmZCL0hjRGNkYTdOZVNSR1Z6WXdPRQptUm55NUxWYWpZRGV3dUlpV2VNZkc1SFBIaGFMeFNoaDBB
d25TeGl3cUxEd3VkdUZWMFdoOUVndmlQZU9PUExVd3R4TjMvbEI5TE5YCkVFNjVpWnBhYWdXajZD
ZW84L0JBb09Icy9Kd0xvaC81SEJsR1NEOUJXSTk1T05qZjJ3TlpsdUhrOUJSZXZsR1FlbzZRYVdS
K1JZeEcKb3lHakNxSW9hcmhaaFNGSVdqNEwzS0tSZ1MvNS9kcHZMU2JvNlBoNDRJM2FLRkVvRkVw
c28rbVFFTGZiTFVZaWtkQlhHbks1WEhTUgpxQWY0K2tDWW44bGszaEhUMWhaQmZVMVFxd1VIaDRk
akNTb1dpNlY2dmQ0WjI2STBHZzA2QkZFUTV2ZjZVVk5EYlR0M2VVbGxtKzJBCndXQVFtczBtZE5s
YStqR0xNZ2hVNEJVWFFqMGtJM2c0SXJMczEvWkZMa2Rsb3QwdmNvcGtNa21mVTZrVU9KM095Yk1v
b3diZVIvM24KSTM5ZWlObnk5VjRoMmtzeVZxdlZFZzZIMTlsNVlER0RBRGFERkVtU2JwanRVZGhY
ZWVyakxUVzh1TVFyaFZtVERZaU1BOEUwM0w0QgpocmRNcVhhd2R5UUFBQUFBU1VWT1JLNUNZSUk9
CgpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9i
dXR0b25fc291bmRfb24ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9y
bXBsdWdpbi9pbWFnZXMvYnV0dG9uX3NvdW5kX29uLnBuZwpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQURJQUFBQXlDQVlBQUFGcE9MZ25BQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZ
QUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFCblZK
UkVGVWVOcGkvUC8vUHdNakkrTW1Ca3pRCnhnS1M2TzN0OVVXWFdiaHdvVEFUaVBINTgyY3dUa3BL
Z3JQLy9QbkRBSmI4OU9rVFEzMTlQUVBJQ2k4dkx6RC85Ky9mREhDZGFXbHAKRFAvKy9XT1lQWHMy
WENjTFRCSUVjbkp5NEhhQ0pCbUJ0QzRRdDJKeExRTkFBSUVrTjJHVkFIcmhQellKSnBpVGk0cUt3
TFNHaGdhWQpaZ0U1RmFpTEFlYU52WHYzSW5TQW5BMXpaVmRYRjVobWpJaUkrRStTcXdBQ0NDd3ha
Y29VWHdZaXdadzVjNDZoaEE0eVNFMU5CUWNqCk9zQUlVa1ZGUllhVWxCUXcrOE9IRDNEeDF0Wldo
dXJxYXJnbWNDUjkvUGdSaktPam8rRW1naUpNVTFNVExQNzkrM2U0R2xETW90aVUKa1pFQjF3UUt5
OTI3ZDJPSVl6Z1BHY0RDR1IyQWJBSUl3RG9WbkVBUXdzRHM0a2Y4WHhWK2ZXc3Y5cUJXNHVzYThX
Y1h0cUorN295Zwo3QzRJSjF3Z2hBeUpJUk1IMlhzM2YvM0szdEdvL3NDR2tWSUtiRFhVV3JjYVRw
eHc5U1kzY003QkV4OSs0Z1IweGhod3pzRmEyMTlDCkRKV0cwUmdEbzQ3a25IdUJsQktFRUhQMHdE
RlNTbWMrbDhiWWowUEl6Sy80eUkvMjhXNjBldTk3MHppZVVncGlqT3VsdGRhUVVwcDUKQ09GT3lr
cFpmenZjVXFJcit3b2djT0xqNWVXVjd1N3U5bUNnTWdERzIrKzh2THdkb0hBWGEybHA4U0RWTzBR
Q1ZuMTlmV0VXNUxpbApCUUNWRmtSYndzSEJ3VkJjWEF3dWNTZFBua3k2SmZoeW9JU0VCRU5XVmhh
Y0Q2cVYwTlVIQkFRd0dCa1pNZFRWMVJIdms3Q3dNQVpqClkyT3Nsb0lzZ2FudjdPeGttRGh4SXNQ
S2xTc1o3dDY5eTlEVTFBVFB3RER3OSs5ZjdKYUFKSEFCWkV0QVFFNU9qdUgrL2Z2Z1lNUm0KRms2
ZnpKOC9INHhCQUZoY01qQXpNMk8xWk1hTUdRd1hMMTRFczBIWnQ2YW1CcmNsK09JRVZrZ0E4eEdE
a0pBUUE3TDYwNmRQdzlXQgpMS0U0ZFFFekZaZ0d4UlVwU1o0a1MyRGcyTEZqSk9VVGVNUy9lL2Z1
RTdCNDU2TkZabnp6NXMwbmdBRFVWN0ZxaEVBUUZmRzB0QWlrCjFVK3d6Q2ZFVXJBUzdOSllDRFky
U1dsaFp5SDRML2tLZjhER0pvV0t6YUY5OWkyczhTNjdSbzFDTWpEY2luUDduR0htelF5NDY0bm8K
NjBrRjM1SkVlYUdNbXVmNXM2cXFsNk1SNGpoK0orUENoMnhaMW9Nc3l4ZjBvNk0xVFZNdys2T0N2
RjhxdmlPRWdnRDFkSkN6UFpFWgp5QnAxSEdlMUxkTk40Zko5WHpJTVkxZG9WNFVyaWlKSjEzVWhR
MlBrbXZQWTVuQ0JXUmtBQTdsWDI3YnAwQ2NLRnhjRVBRS0txWEZPCjgzTVF6L09vRGM0WTRERW9D
a0hBa3ZkRmhEMERlZy9BSm44b3ZNUDJpSFBYZGZRZEtleHZkMDJlOEY2SWhOa1VSU0VScHJqNWoy
bWEKM0xzMjF3bXp4VmZQbnhHUnFxcTRkM0ZUR00vWWJSQm5uaWNRMTNXbHBtbStRa0s4RXZVYXJp
ZGhHTkpmTXYzZGJHTHpMOGM2ak5VTwprbVVaOVVRVWtjVVVMc3RTU3BLRW0xM0RNRXhuVGRQbzhy
a3BoZWRhMS9Ya21haE9zQ0szYmJzTThsTmZ3RXdWQklHMHh2WlgyWVdGCkdQejFaNmxlWVJYLzc1
dVcwdmY5OVN4UHhuRzg3bG95ZDhqYnB3RHRtcjlxQWtFUXhpOUJFU3dPTFJRc3JNVEd6a1lrcFdr
Rks1L0IKV3JETEt3aVdOcWw5QXNYR2FCZGpKeFppcllVMmFWSUlZcFA3RGRsakZmVk80eVc1SkFO
YkxhNHpPenQvdm0vdUpEL21JM21RMjdJUQpkckJXcTkzRllqSFRUOXBiWmV5dFhxOC9XeUc4bFo0
K2xVcVowV2pVOURwYXJpM29qTzdqOGZnMW9FQ2cxOUhvbGFDN1JQdXZNc1RMCkpKeE9wNldCOFpJ
Yjh0UWo1WEpaaklDZW5zMW0vbnBha0dHVlNzVXdUZE0xRTNSMVF6N3p0Q0RjZ0JBNmZ0SC95TTNa
dVZ4T1JrY3cKNDgxbTAxaXRWbC9ua1VRaUlTM3lJZmppNUJIR0xIQndTb2JEb2FEQmVEd3VaN2Ji
YldNMEdsM2ZFQ2hNR0M2NzRRd0ViQkxmNlkvMApzek9aak4xL3J0ZnJuVGErMFdnSWxacE1KbzFp
c1NpR0xwZExWNGJjNnU0L3RiaDFGQ2NPV0c2TTJNZDlyTWxrd3J4U2pBdUh3L0tjCjlQMU9weU9j
STA4c204MDY2blcyUjlRUExnbkcvYk1YaTRVb3FoS0V2bTkxbWdJSHo5WExkUjI1MUJBZHZ5cXBW
cXVpTEVyaUFYMmYKWVJYZVpvKzRjZEpycDQ2NFNaRUVudzZhQ2RaU3FYUVcya2NBNnR3NjR6am1G
WXEvUVBMNXZJd1NrT2wwYXN6bmMvZUF4SzBMZ2JNcwpKUlM1YnJjcmdja2c4VmptMmo4YkxINW81
c0ZvZ3dFZW5zSUllSlF2YlZISUxCUkJEQUxmcXlIQnFhZDFTRnF0bHAyaEJvUEI5N1VvCkVCV011
TWhFcE5SSUpDSzNlODdadlY3djUzUy84QlRRb0Nxb3FmcSthVkdPQ2ZPb2Z6enk1dzN4RzE3Zk44
VCtTQ1lVQ2dVTGhjSzkKVlErQ2ZqREFla0hiZnIvL3RObHN0cFM1bTQrdjFCaGM4dWxTM0djT29V
SS9XamE4dkFNTmJIUkx6bHlsTGdBQUFBQkpSVTVFcmtKZwpnZz09CgpJbmRleDogU291cmNlL1dl
YktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18x
LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0
eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2Vz
L2xvYWRpbmdfYnVmZmVyaW5nXzEucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUK
ICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFB
Q2tBQUFBcENBWUFBQUhmWnpCZ0FBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBCkdYUkZX
SFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUE4aEpSRUZVZU5waS9Q
Ly9Qd00yd0FSamRIWjIKVGdOaHVBeElSMGRIeHpRUURjS3ZYcjE2RERZRm1RUENNMmZPWEFDaUdX
RjJ3SXdwTHkvUEF0R011Q3dIQ0NDc0VreEk3UC9vZ2lBQgp4bG16WmkyQU94Rm0rMzhJUUxFTXJC
cmRURVlZQXlDQWNEb0xiemdoR2YxLysvYnRtMkZzVkZtZ3lSVVZGUjBnRjMzNjlPbU5tWm1aCkQw
Z01SRDk2OU9nbVNCd3FEMUdNaE1GZzI3WnRtLzhqQUZ5ZUpEY0RCQkRSaXBuSUNnVkdSa2FweDQ4
ZjN3UmhFQnNqQkVEWXpjMnQKQkJZS0lQd2Y0aVpqbUR5S3o0RVNidWloQVJSamd5dUVCUXVVeGly
R0FQVTFHMVMzTU53cUJnWUg1UEJrUUpJd1JuZGpZbUppSFRZMwpnaFJMZ2FJUWhFRnNzbUtINkFB
SENDQ1M0cHZjdEV4YlE5M2QzVXVRTWdrR1RrcEtxaVBhVUdnNis3OXo1ODV1S044ZG1xY1pJVnhH
ClIrUVNEY2hud3pBVkxZa3h3SExrejU4L3Y2SExvUlZ5Y0FBcUFHRkpFejB4c1VGTFJ6aEFLcU13
TUN6QklaZW9XQk1lelBEUzB0SWUKYU9yRXlEQklTZncvVkY2Qm9LSG9XUlVYUU00UzZIam9wRk9B
QUtLNlM1a0d2YmZwYXlBd3kva2VPWEprejY5ZnY3NkJNdHY1OCtlUApnY1R3bW9ndFRZSEtidlNj
aENVTENtUFZpeTNuUVBNM0hNQ0tjV1F4YUhZa2JDQnlnYkFTQ0lBVzhDSmJCaElEV1Foa0IydHJh
OGZoCk5SQldYY0ZjaFN1YkFZRXZUQjI2b2VnS2paRUtBVGNjaGptZ2h5bXlvZUNjQWlwQWdUWHJX
cEJxVDA5UEh4QU5iUFpzZ2ZKUlloWGEKSE1KUTUrWGxGUXcwNnhmY1pxZ3QvOUdLS2dkQ3JnU3ly
WEI2R2RsUWFEaGhEVVBrR0VlT05GekpKaGlFUVRFSmFtQmdpMlcwTmh2aAp3aFpXNU9OTGg5Q2t3
MHVVZ1ZUTktlanA3ZkRodzN0QXJnSGhjK2ZPSGNNWHRqU3BDa1pnQVFzUW9CMXJ4MEVRQ0tMQkdJ
d0ZGWld4CnNmSUNXbEZoUTdjVmQ2SDNBRjZCTTFFU0Q2QUg0QUxPUzRaa0hIZGhFU2o4YkRMWmhG
M1pKelB6NXMzT1VrNC9vanovSk1qbDZIZ0oKZ29pbURSZ0RpVTYyNHFVYldVTjJwNUJxUmgzU2xm
UU84b0QyTnVCSVRYbXVJWGpXMk9pdjk4d0I0R0lJV3EwSmhnNzhIdTl4MGF2TgpGcDR1ellpM3E3
SXN6MkVZcnVVYWRkelhvaWd1Nkg3SWptUmJuazk0am5YSGErUEozQTFaWVhNcnUrL2c2WVU5N3Bq
NEMrYXRxRUxCClFqMlhIZFk3eFd1SDRxVUJvb0VhR2x0UUlib0ZsTlcxQzZ3MTluQjF3R1pzZWdB
SGlqMVJEN2pFQmM0WDdFdm1ZbE9YcHREOXJkWm0KRnBDUitFTnBYZGVWUlFQbVlrL3NLMzQ2d1RL
NGRDaDF0ZmQzY3JEKzJZK0p5U2V3REM1SEFuQVhrZmdtanRTZVNqYWEyWGtTTWNxSgpsQ0hiMldX
WVUzdzVyV2VWRkRWZlErWWZVUlpINjBrbE1PUmQ3MlFDNHk5NmZ3cmtBK045TGVDaldHVGdBQUFB
QUVsRlRrU3VRbUNDCgpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1
Z2luL2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18yLnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzIucG5nCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2tBQUFBcENBWUFBQUhmWnpCZ0FBQUFDWEJJ
V1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0Zu
WlZKbFlXUjVjY2xsUEFBQUEvVkpSRUZVZU5waS9QLy9Qd00yd0FSamRIWjIKVG1Oa1pQUUZZamF3
QUVoSFIwZkhOQkI5N3R5NVl6Tm56bHdBWXNOMW5EOS8vcGlob2FIVisvZnZ2OEYxQUFGSXV5OU1K
d2d6NHJJYwpJSUN3U2pBaHNmK0RYQVJpc01BRW9MckFOQk5PRHdHMStjRlU0N1FJSUlCd09ndHZP
Q0U1NVAvMjdkczN3OWlvc2xDZmcxd0tDanNrClBzTzJiZHMyLzRjQVNJZ2hTMElsL2o5NjlPam1m
d1JnSUJpVTJBQkFBQkd0bUltc1VBQUdzdFRqeDQ5dkFta0ZhTXJ4eFZDWWxKUlUKQjNUR1V3RUJB
V0VnbHhmSTNwU1ltR2lJTmFpQVhEZW9tNldBMkFIWjk4aWVnY2NyV29Rd1luT2pHOGlkVUxZRDFs
aHljM01yZ1ZxdgorK25UcHpjZ050Q05kUmd4QkVyWVVLd0FpaUdRTzhtS0hhSURIQ0NBU0lwdmN0
TXliUTBGcFFDa1RQSWZtcTJOa2ZtZ29nUmU4T0RJClNMQVlrUHFQbkRFZ3FRU3JIRlJlRGNNTWRB
Rllab1BHUFFNdURFc2JVUFVvY2ppOXo4N096a1Yyb0JMeVB0U0xVa2p5YnJqa2NIb2YKVkdSREN5
bGtqY2JvRmlGbkNYUThkTklwUUFCUjNhVk1nOTdiOURVUVZBMkE4ak9zZ29RV3diN0ltR0JDaDBh
UzhLdFhyeDRqcDBGUQo1WWxVZ2NMU2FqREI3QWkwbGZmbno1K1BSVVZGWldCaU4yL2V2SGpwMHFY
SHlPcCsvZnIxSFVqdEl1akNsVUFBY3dHSURjcEZXS3A0CnVLdnhaa09vNXYrNFNoZVFBU0J2SWpj
TG9MVXBUZ09Oa1JTNjRjcTNTTFVzTE0vakRFTXBKUFlEUEFuZ0ZnNDlHQVkrUTJJcjRERlEKRFlj
ZS9HRUlDaTlzQVU5MEdJSXd0TkdMTlNaQm1wRlRBY0ZZaHJrU21BNi9JV3NDV1lMVzRQc1BVb1B1
T2x6MWpDOGJHeHNuc29DcwpyS3d3RU1QRDdmWHIxMCtBOVpBczBJRFA2SnBac0JqNEM5cCtob0dm
UUZmbWZ2NzgrZTNGaXhjdjJOcmFUZ1FhdEpta1J2MW9BVXNTCkFBalFqclhpSUF3RVVVTndLQVNC
QTlBYWdzQ2hVRGdVWjZoQ055a1dESUl6OUFDRUl5QkltcUNSdlFHS0MyQmdIcG1TeVdTN1pXa0oK
SVRESkJrUVpYdWYzM3V4YjZQUXI2UGtuUWRaSzF3dXhHMzIwTVRIRTFEMVRHUjBxUTJtVHhqbmNB
akFUakRnNTh2UThCZTlveHRRRwpmV3JTOHZyVUhDTFdKRUU3STJDUkhwK3VCaDNoKy82U3Z1SWxM
cFZFRXBIVDZrZlNXeFJGSzdBM29zY3B2eDliSk9FUGZwLzYveWNBCmpyT05TQnFMb2E3bGR3K1E0
bDdwYW1DL1NTbVFVQlZKa3V5MDh6QU0xMUt0NVduUElBam1FQkY4cFZYbi9jZTVMb3RBam5SenNI
b1oKdURZYysrdWxhWG8wYkluV2FCYk9TVTdKWjYxRXVodWN4aW1udFZuZ3E0NEdxenpkdHNaQlUy
UjdPTS9GanNWSFYyclBTaHRIQXMwYgpRUklreS9jQm56RWlydlhzVzBhUXVIQ2Vtb3JlaFdHeTZL
SExpOHJEcVhHSWFYcVUxajA5dlBVOHIvOUszVU43YjhpZ3kwbkl0K0k0ClhwQy84MGYwSklFWUlr
TEFKYzdKdEYzOFJlOGZaSTdkQUJLb0toSFdCZ3h4QUFBQUFFbEZUa1N1UW1DQwoKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZm
ZXJpbmdfMy5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBi
aW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18zLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNV
aEVVZ0FBQUNrQUFBQXBDQVlBQUFIZlp6QmdBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFB
QQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBKzVKUkVG
VWVOcGkvUC8vUHdNMndBUmp2SDc5Cit2R3NXYk1Xd0dWQU9qbzZPcWFCYUdRMkV3TXVnS3p5MWF0
WGoyRjhSbHlXQXdRUVZnbGs4LytqQy80M056ZjNoVWt3RVRJVHhHQkUKVjhrSVl3QUVFTnk5eUxp
aW9xSURtemk2d1ArWk0yY3VlUFRvMGMzL0NJQlY4Zjl0MjdadFJwYUU4di9qTkJrRVBuMzY5QVpr
QXo2VAo0YmlucDJjU05uR0FBTUlaN3ZpQ0hCSkdqSXhzQkJXQ0ZBRnQrUG40OGVPYlFMWUMxclNR
bUpoWUI4SXdUNEZvS0I4enFJRDZIT0FTCkVQWi9iSjc1anhLTmVPSWE1RVkzYkd3VWhlN3U3cVZB
MDNmKyt2WHJHOGdrb1Bzc1FHSllFd29RU01IaUhjaG1JeGpnMEdENlJURGgKWXdNQUFVUzBRbElB
RTBGYmdVNEdsUWZidDIvZlRMU3AyRklnMVBYRzBMSURLMEJPRFlSeUhUajAwZlF6Z1BJSkxKTWhw
WnIvMEJpUwpJbWdvTERxaDZST25UMkRwRjZvZVJZNkpnUmFBa1BlQmZEZFltUUlLQmlCZm1HVHZ3
N0NibTFzSnJrZ0NSU0FvSW9tT0tGd1k1RkpRCjNZQ2VkU2dxdjBnQkFBRkVkVU9aNko0OVFVQkhS
eWNPbUUyRktjcWFNS3l0clIySEs3bVFITnN3dzJEZzNMbHp4NEFHKzVKc0lDZ3gKb3lkb1pBQk5S
c0xFRmh5OFAzLysvQWJDUUhZd3pKQWJOMjVjUURZVUtzOUwwRUNrYWh5V094eGdZUWhLM0N1QkFD
YVAzZ1RBTUJCcQo0My8wMGdVSXJKQmRnOXpnUUhjbFJxR0xwTkFCVCtIc2dLVE9HRitSSm9YRXZv
VW50ZDNDb1FmRHdHZkk2UmxmV3NlaGgrZ3c1QVdGCkk4bGhDTUxvc1FnMVRBb1dyc2p5VURiQmRN
Z0dTbVBJYVE3TlJjRkk2WlNONkp3Q2JYQmpCVWc1aWJTOERLcGZEaDgrdkFkVzg0RUEKTkg4elVG
UVZ3TUtRa0dHa0dDaE1qR0UwcVZlb1hnVUFCS2pHaW5FVEJvSmd3dytRRzVTYUQ3aEtoeDl3Vlpw
OHhCVTFYUjVDdzE5bwpYRVpLRVluQzZWSWczTUNPdENldFJtZDg1SmFRV0ZwWnh2WjYyTDJibmQy
N1ZMNkgxS25zZnl5U2M2enJlRGhJQUVQQmxUMzJMaXl3CmsrdUZKOGhaS1RoWithOENibE5WMVpQ
K3ZCZDdsbnNIT1grSkhXUkpmYnVLMFZ6RHRyekdUbHgrbFdkRHFneTdjRVhrQzNRZVlEYWMKd2J1
bTRjNCtBRmpmbjd1Q1JBUTRhdVpqd1lMVmlLMWd1RTl6Q1ZaTXdRVWtISEVsaTJWUTdpMnR4SWd0
R2d0TVBHZExLS213VUFRUwp6aUUrMlRsR1BEbnRCNWR0SFEyZEUrSjJXUUl5c0ZPazcxcXpOZUd2
NXZUblJIT0tKMC9ETUJ4L29haWNma3hCU0FPMENrZXpiZHUzClc2a0V6K005OWdYL1JlbU9LYmVD
aWpaT3pUckpOUGQyT2xhbk5nNzh4cUhBWFNqSXJsR05MSVpxSzlzT0tkZ0FLbUtHY0tVZ0p2TVUK
SFUwZEN2YUZpc0hjdmVKWUtrSFU4T0hVTWhnajdseDE2d0p5QkRSbXZEWEEyM1JIY0xkeUt0dXNs
RHQweXZvQml4S3Q3L3ZQcG1uVwpYZGR0ZVFyN0o1UjVGTDBlNFA1ViszQUJadHkrYjZXUlEzNEFB
QUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3Jt
cGx1Z2luL2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ180LnBuZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBk
aXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0
L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzQucG5n
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ2tBQUFBcENBWUFBQUhmWnpCZ0FBQUFD
WEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpi
V0ZuWlZKbFlXUjVjY2xsUEFBQUE5TkpSRUZVZU5waS9QLy9Qd00yd0FRaUdCa1oKMlRvN082ZUJN
RndHcXNQMzNMbHp4MERzam82T2FXQXhaQTVJRXFRSUxnR1RCR0dnQkJ1SXo0akxjb0FBd2lyQmhN
VCtqeTRJRW1DRQpTVERoOUJDU0trWjBsWXd3QmtBQTRYUVdQbU5CWWVVTE5mci85dTNiTjhQWUtL
cGhJUUhFLzdkdDI3WVppYzhBNWYrSDhaRVZNMEFsCi9pTXArZzhMWDd4QmlRMEFCQkRSaXBuSUNR
VTJJSlo2L1BqeFRSQUdzWEdHQUFoOCt2VHBEUWlEMkltSmlYWFlmUDhmSlZnWUdCeVEKK2NpZStZ
OGNqZWhpS0o0QnVzc05XM3BDY1NQVVBTaHV4QmxEUUNEMTZOR2pteUFNWXNNU09VbXhRM1NBQXdR
UVNmRk5jaXpTMUZCUQpSamwvL3Z5eHBLU2tPcVJNZ29HaDh0Z0JXdDVnZ09hRi8waDV3dzFOM2cx
TlhnckREQ3lHS2dDeE1SRHJRcU1VUXhNSXc5SUdLT29KCkdncFY5QitxQ1p1bFVsQ3NDN1ZjZ1Jp
WFNwSG9mVitDaHFKbkExd0FKSTljM2lQam9aTk9BUUtJNmk1bEd2VGVacUpIWGxkRHovZS8KZnYz
NkJzSWdOclRTWkNBNm4wTVRiL0NyVjY4ZTQwcVBJRG1nR21Gc2FSbGJMR01JQUN1dVd5QmFWbFlX
N25xZ2k3K3pzN01MQVBYLwpJdWhDR0ZnSkJNajFBSWdORWtPV0p5WWIva2ZMdThHNENoV29QQnVo
d3NJWWltRWxqVEFXTlE1SUJocmpOQkM1NE1WVlBxS1hVT2dGCkJRdGErRDlEWXF1aDhVSEpTQmhJ
c1VQWkp0QTRPSXN6VW9DQUYyWXoxaElhRXA0WXdZdzNESkhiWWRoaUdWa2VtNEVZNlJEb0ZkNmYK
UDMrK1pHTmo0OFNYRHJFMVdIR2xRNUN3TUJFNUpaZ29MNlBIT3JUOS94L282bS9veFQrbzhxSjVW
VEFDQzFpQUFLTkpkVG9rcXVjUgo2VWdXaXRNTHNGUUJVcEtnTWhCYTFDTVhzcCtCK0Rrd1NYMm15
Qko4QlFWeVlRRXFhVUJsSTlReHZxQXlFbFI0L0NjQ2dOU0IxSVAwClFRdDBCbEl3VVk2RVdYYmp4
bzBMeERvTW40TkJEV05jRFJHS0hZa05nS3EzaW9xS0RsRHRqZFJwQWRFT3BhV2xQY2pOQkN6MWdD
L04KSFltY0RBaVlvWWJjVUVJZUxVRHYyMkREeEdTY245dTNiOStDU3hLWTFoSldyMTZ0RFdRMjRV
bjN0NEFaTEJiWWtMM2YzdDVlRGhQbgo1ZVVWUG56NGNCbFE3Z0ZJRFZtRk9WQ3pGZEFSbFdqdDBy
ZnA2ZWtOUUgwUHlDZ0pqSUhSdnd4TG16WUFhTjR1Y29zZ0htY2d3TkpvCkFiWFJIcEJSbUx3Rnhz
cHhvQ1BSUSswTEplWGtnMU9uVGgyenNiRnhoZ21BUWdHWUlTS0JvWElabzBXUEJ0TFMwaW9EQXdP
dGtKSUcKaGhvdkw2L0pRSE9PVVZ4T1lpdDJvTzFMTlFKNlFlVnFNS2pvd3BYNWlNbmh4SlZUUUlO
d05TdEJSUXlvcUFIbFVxUk9Cb2gydzFjRQpVZDJSc1BZdnFCQ21SbUdPSExKVWRTUnlQNFhTYWhH
V0RIQU54MUM5VFk3V3dJRDN6S2pad0JodDlJNG9Sd0lBVC8yc3kzOFBCZ0lBCkFBQUFTVVZPUks1
Q1lJST0KCg==
</data>
<flag name="review"
          id="86227"
          type_id="1"
          status="-"
          setter="menard"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93170</attachid>
            <date>2011-05-11 13:30:57 -0700</date>
            <delta_ts>2011-05-12 11:17:20 -0700</delta_ts>
            <desc>platformpluginV23</desc>
            <filename>58435v23.patch</filename>
            <type>text/plain</type>
            <size>62600</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NjI1OCkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTEtMDUtMTEgIEh1
aSBIdWFuZyAgPGh1aS4yLmh1YW5nQG5va2lhLmNvbT4sIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDM1CisKKyAgICAgICAgVXBzdHJlYW0g
U3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4gd2l0aCBodG1sNSB2aWRlbyBwbGF5ZXIuCisKKyAgICAg
ICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6SFRNTDVGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJG
dWxsU2NyZWVuKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1
bGxTY3JlZW4pOgorICAgICAgICAoSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvblBsYXll
ckVycm9yKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvbk1l
ZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChIVE1MNVZpZGVvUGx1Z2luOjpzdXBwb3J0c0V4
dGVuc2lvbik6CisgICAgICAgIChIVE1MNVZpZGVvUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24pOgor
ICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRlb1BsdWdpbi5oOiBBZGRl
ZC4KKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsU2Ny
ZWVuRm9yVmlkZW9QbGF5YmFjayk6CisgICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXI6OmlzRnVsbFNjcmVlbik6CisgICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6
OnVwZGF0ZVNjcmVlblJlY3QpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRN
TDVWaWRlb1dpZGdldC5jcHA6IEFkZGVkLgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6SFRN
TDVWaWRlb1dpZGdldCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0Ojp+SFRNTDVWaWRlb1dp
ZGdldCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpzZXREdXJhdGlvbik6CisgICAgICAg
IChIVE1MNVZpZGVvV2lkZ2V0Ojptb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoSFRNTDVWaWRl
b1dpZGdldDo6b25QbGF5ZXJTdG9wcGVkKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9u
UGxheWVyRXJyb3IpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25FbmRPZk1lZGlhKToK
KyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9uQnVmZmVyaW5nTWVkaWEpOgorICAgICAgICAo
SFRNTDVWaWRlb1dpZGdldDo6b25CdWZmZXJlZE1lZGlhKToKKyAgICAgICAgKEhUTUw1VmlkZW9X
aWRnZXQ6Om9uQ29udHJvbENsaWNrZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25Q
b3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25TbGlkZXJNb3Zl
ZCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpvbkNsb3NlQ2xpY2tlZCk6CisgICAgICAg
IChIVE1MNVZpZGVvV2lkZ2V0OjpzaG93RnVsbFNjcmVlbik6CisgICAgICAgIChIVE1MNVZpZGVv
V2lkZ2V0OjpzZXRWb2x1bWUpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRN
TDVWaWRlb1dpZGdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L092ZXJsYXlXaWRnZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Ok92ZXJs
YXlXaWRnZXQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6fk92ZXJsYXlXaWRnZXQpOgorICAg
ICAgICAoT3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdl
dDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2V0Vm9sdW1lKToKKyAg
ICAgICAgKE92ZXJsYXlXaWRnZXQ6Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChPdmVybGF5
V2lkZ2V0OjpvblBsYXllclN0b3BwZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25QbGF5
ZXJFcnJvcik6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvbkVuZE9mTWVkaWEpOgorICAgICAg
ICAoT3ZlcmxheVdpZGdldDo6b25CdWZmZXJpbmdNZWRpYSk6CisgICAgICAgIChPdmVybGF5V2lk
Z2V0OjpvbkJ1ZmZlcmVkTWVkaWEpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6dGltZVRvU3Ry
aW5nKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OmFwcGx5U3R5bGVTaGVldCk6CisgICAgICAg
IChPdmVybGF5V2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKToKKyAgICAgICAgKE92ZXJsYXlXaWRn
ZXQ6Om9uU2xpZGVyTW92ZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25Tb3VuZENsaWNr
ZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25DbG9zZUNsaWNrZWQpOgorICAgICAgICAo
T3ZlcmxheVdpZGdldDo6b25Wb2x1bWVTbGlkZXJSZWxlYXNlZCk6CisgICAgICAgIChPdmVybGF5
V2lkZ2V0OjpvblZvbHVtZVNsaWRlck1vdmVkKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om9u
VGltZXJUaW1lb3V0KToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OnNob3dGdWxsU2NyZWVuKToK
KyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuaDogQWRkZWQu
CisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFBsYXllckJ1dHRvbjo6UGxheWVyQnV0dG9uKToKKyAgICAgICAgKFBsYXll
ckJ1dHRvbjo6ZXZlbnQpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVy
QnV0dG9uLmg6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVy
TGFiZWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBsYXllckxhYmVsOjpQbGF5ZXJMYWJlbCk6Cisg
ICAgICAgIChQbGF5ZXJMYWJlbDo6b25QbGF5ZXJFcnJvcik6CisgICAgICAgIChQbGF5ZXJMYWJl
bDo6c3RhcnRCdWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFiZWw6OnN0b3BC
dWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFiZWw6Om9uQW5pbWF0aW9uVGlt
ZW91dCk6CisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdpbi5jcHA6Cisg
ICAgICAgIChXZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgICogc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9pbWFnZXM6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vaW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZzogQWRkZWQuCisgICAgICAgICogc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZzogQWRkZWQuCisgICAg
ICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZzogQWRk
ZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BsYXku
cG5nOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0
b25fc291bmRfb2ZmLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdp
bi9pbWFnZXMvYnV0dG9uX3NvdW5kX29uLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMS5wbmc6IEFkZGVkLgorICAg
ICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzIu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2Fk
aW5nX2J1ZmZlcmluZ18zLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBs
dWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfNC5wbmc6IEFkZGVkLgorICAgICAgICAqIHN5
bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOgorICAgICAgICAqIHN5bWJp
YW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucXJjOiBBZGRlZC4KKyAgICAgICAgKiBz
eW1iaWFuL3BsYXRmb3JtcGx1Z2luL3FzczogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9xc3MvT3ZlcmxheVdpZGdldC5xc3M6IEFkZGVkLgorCiAyMDExLTA1LTExICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRN
TDVWaWRlb1BsdWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFu
L3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJIVE1MNVZpZGVvUGx1Z2luLmgiCisKKyNpbmNsdWRlIDxRdFBsdWdpbj4KKworSFRNTDVG
dWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKQorICAg
IDogbV92aWRlb1dpZGdldCgwKQorICAgICwgbV9tZWRpYVBsYXllcigwKQorICAgICwgbV9mdWxs
U2NyZWVuKGZhbHNlKQoreworICAgIG1fc2F2ZWRPcmllbnRhdGlvbiA9IENBa25BcHBVaTo6RUFw
cFVpT3JpZW50YXRpb25VbnNwZWNpZmllZDsKK30KKwordm9pZCBIVE1MNUZ1bGxTY3JlZW5WaWRl
b0hhbmRsZXI6OmVudGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIgKnBsYXllcikKK3sKKyAgICBp
ZiAoIXBsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92aWRlb1dpZGdldCA9IG5ldyBI
VE1MNVZpZGVvV2lkZ2V0KCk7CisgICAgaWYgKCFtX3ZpZGVvV2lkZ2V0KQorICAgICAgICByZXR1
cm47CisgICAgbV92aWRlb1dpZGdldC0+c2V0RHVyYXRpb24ocGxheWVyLT5kdXJhdGlvbigpIC8g
MTAwMCk7CisKKyAgICBDQWtuQXBwVWkqIGFwcFVpID0gZHluYW1pY19jYXN0PENBa25BcHBVaSo+
KENFaWtvbkVudjo6U3RhdGljKCktPkFwcFVpKCkpOworICAgIGlmIChhcHBVaSkgeworICAgICAg
ICBtX3NhdmVkT3JpZW50YXRpb24gPSBhcHBVaS0+T3JpZW50YXRpb24oKTsKKyAgICAgICAgYXBw
VWktPlNldE9yaWVudGF0aW9uTChDQWtuQXBwVWk6OkVBcHBVaU9yaWVudGF0aW9uTGFuZHNjYXBl
KTsKKyAgICB9CisKKyAgICBtX21lZGlhUGxheWVyID0gcGxheWVyOworICAgIGNvbm5lY3QobV9t
ZWRpYVBsYXllciwgU0lHTkFMKHBvc2l0aW9uQ2hhbmdlZChxaW50NjQpKSwgbV92aWRlb1dpZGdl
dCwgU0xPVChvblBvc2l0aW9uQ2hhbmdlZChxaW50NjQpKSk7CisgICAgY29ubmVjdChtX21lZGlh
UGxheWVyLCBTSUdOQUwoZHVyYXRpb25DaGFuZ2VkKHFpbnQ2NCkpLCBtX3ZpZGVvV2lkZ2V0LCBT
TE9UKHNldER1cmF0aW9uKHFpbnQ2NCkpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJ
R05BTChzdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSkpLCB0aGlzLCBTTE9UKG9uUGxh
eWVyU3RhdGVDaGFuZ2VkKFFNZWRpYVBsYXllcjo6U3RhdGUpKSk7CisgICAgY29ubmVjdChtX21l
ZGlhUGxheWVyLCBTSUdOQUwoZXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpLCB0aGlzLCBTTE9U
KG9uUGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcikpKTsKKyAgICBjb25uZWN0KG1fbWVk
aWFQbGF5ZXIsIFNJR05BTChtZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0
YXR1cykpLCB0aGlzLCBTTE9UKG9uTWVkaWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXllcjo6TWVk
aWFTdGF0dXMpKSk7CisgICAgY29ubmVjdChtX3ZpZGVvV2lkZ2V0LCBTSUdOQUwocG9zaXRpb25D
aGFuZ2VkQnlVc2VyKHFpbnQ2NCkpLCBtX21lZGlhUGxheWVyLCBTTE9UKHNldFBvc2l0aW9uKHFp
bnQ2NCkpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTChjbG9zZUNsaWNrZWQo
KSksIHRoaXMsIFNJR05BTChmdWxsU2NyZWVuQ2xvc2VkKCkpKTsKKyAgICBjb25uZWN0KG1fdmlk
ZW9XaWRnZXQsIFNJR05BTChtdXRlZChib29sKSksIG1fbWVkaWFQbGF5ZXIsIFNMT1Qoc2V0TXV0
ZWQoYm9vbCkpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTCh2b2x1bWVDaGFu
Z2VkKGludCkpLCBtX21lZGlhUGxheWVyLCBTTE9UKHNldFZvbHVtZShpbnQpKSk7CisgICAgY29u
bmVjdChtX3ZpZGVvV2lkZ2V0LCBTSUdOQUwocGF1c2VDbGlja2VkKCkpLCBtX21lZGlhUGxheWVy
LCBTTE9UKHBhdXNlKCkpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTChwbGF5
Q2xpY2tlZCgpKSwgbV9tZWRpYVBsYXllciwgU0xPVChwbGF5KCkpKTsKKworICAgIG1fbWVkaWFQ
bGF5ZXItPnNldFZpZGVvT3V0cHV0KG1fdmlkZW9XaWRnZXQpOworCisgICAgbV92aWRlb1dpZGdl
dC0+c2V0Vm9sdW1lKG1fbWVkaWFQbGF5ZXItPnZvbHVtZSgpKTsKKyAgICBtX3ZpZGVvV2lkZ2V0
LT5zZXRTaXplUG9saWN5KFFTaXplUG9saWN5OjpJZ25vcmVkLCBRU2l6ZVBvbGljeTo6SWdub3Jl
ZCk7CisgICAgbV92aWRlb1dpZGdldC0+c2hvd0Z1bGxTY3JlZW4oKTsKKyAgICBtX2Z1bGxTY3Jl
ZW4gPSB0cnVlOworCisgICAgLy8gSGFuZGxlIGN1cnJlbnQgTWVkaWEgU3RhdHVzIGFuZCBNZWRp
YSBQbGF5ZXIgZXJyb3IuCisgICAgb25NZWRpYVN0YXR1c0NoYW5nZWQobV9tZWRpYVBsYXllci0+
bWVkaWFTdGF0dXMoKSk7CisgICAgb25QbGF5ZXJFcnJvcihtX21lZGlhUGxheWVyLT5lcnJvcigp
KTsKK30KKwordm9pZCBIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVu
KCkKK3sKKyAgICBtX3ZpZGVvV2lkZ2V0LT5oaWRlKCk7CisgICAgbV9tZWRpYVBsYXllci0+ZGlz
Y29ubmVjdChtX3ZpZGVvV2lkZ2V0KTsKKyAgICBtX21lZGlhUGxheWVyLT5kaXNjb25uZWN0KHRo
aXMpOworICAgIGRlbGV0ZSBtX3ZpZGVvV2lkZ2V0OworICAgIG1fdmlkZW9XaWRnZXQgPSAwOwor
ICAgIGlmIChtX21lZGlhUGxheWVyLT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0
YXRlKQorICAgICAgICBtX21lZGlhUGxheWVyLT5wYXVzZSgpOworICAgIG1fZnVsbFNjcmVlbiA9
IGZhbHNlOworCisgICAgQ0FrbkFwcFVpKiBhcHBVaSA9IGR5bmFtaWNfY2FzdDxDQWtuQXBwVWkq
PihDRWlrb25FbnY6OlN0YXRpYygpLT5BcHBVaSgpKTsKKyAgICBpZiAoYXBwVWkpIAorICAgICAg
ICBhcHBVaS0+U2V0T3JpZW50YXRpb25MKG1fc2F2ZWRPcmllbnRhdGlvbik7Cit9CisKK3ZvaWQg
SFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvblBsYXllckVycm9yKFFNZWRpYVBsYXllcjo6
RXJyb3IgZXJyb3IpCit7CisgICAgc3dpdGNoIChlcnJvcikgeworICAgIGNhc2UgUU1lZGlhUGxh
eWVyOjpOb0Vycm9yOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX3Zp
ZGVvV2lkZ2V0LT5vblBsYXllckVycm9yKCk7CisgICAgfQorfQorCit2b2lkIEhUTUw1RnVsbFNj
cmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJTdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0
ZSBzdGF0ZSkKK3sKKyAgICBpZiAoc3RhdGUgPT0gUU1lZGlhUGxheWVyOjpTdG9wcGVkU3RhdGUp
CisgICAgICAgIG1fdmlkZW9XaWRnZXQtPm9uUGxheWVyU3RvcHBlZCgpOworfQorCit2b2lkIEhU
TUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25NZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxh
eWVyOjpNZWRpYVN0YXR1cyBzdGF0dXMpCit7CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBj
YXNlIFFNZWRpYVBsYXllcjo6RW5kT2ZNZWRpYToKKyAgICAgICAgbV92aWRlb1dpZGdldC0+b25F
bmRPZk1lZGlhKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUU1lZGlhUGxheWVyOjpTdGFs
bGVkTWVkaWE6CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6OkxvYWRpbmdNZWRpYToKKyAgICBjYXNl
IFFNZWRpYVBsYXllcjo6QnVmZmVyaW5nTWVkaWE6CisgICAgICAgIG1fdmlkZW9XaWRnZXQtPm9u
QnVmZmVyaW5nTWVkaWEoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6
OkxvYWRlZE1lZGlhOgorICAgIGNhc2UgUU1lZGlhUGxheWVyOjpCdWZmZXJlZE1lZGlhOgorICAg
ICAgICBtX3ZpZGVvV2lkZ2V0LT5vbkJ1ZmZlcmVkTWVkaWEoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybjsKK30KKworYm9v
bCBIVE1MNVZpZGVvUGx1Z2luOjpzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9u
KSBjb25zdAoreworICAgIHN3aXRjaCAoZXh0ZW5zaW9uKSB7CisgICAgY2FzZSBGdWxsU2NyZWVu
VmlkZW9QbGF5ZXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK1FPYmplY3QqIEhUTUw1VmlkZW9QbHVnaW46OmNy
ZWF0ZUV4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAoreworICAgIEhUTUw1RnVs
bFNjcmVlblZpZGVvSGFuZGxlciogdmlkZW9IYW5kbGVyID0gMDsKKyAgICBzd2l0Y2ggKGV4dGVu
c2lvbikgeworICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICB2aWRlb0hh
bmRsZXIgPSBuZXcgSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHZpZGVvSGFu
ZGxlcjsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9I
VE1MNVZpZGVvUGx1Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFu
L3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvUGx1Z2luLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEhU
TUw1VmlkZW9QbHVnaW5faAorI2RlZmluZSBIVE1MNVZpZGVvUGx1Z2luX2gKKworI2luY2x1ZGUg
IkhUTUw1VmlkZW9XaWRnZXQuaCIKKyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIK
KyNpbmNsdWRlIDxRTWVkaWFQbGF5ZXI+CisKKyNpbmNsdWRlIDxha25hcHB1aS5oPgorI2luY2x1
ZGUgPGFrbmVudi5oPgorI2luY2x1ZGUgPGVpa2FwcHVpLmg+CisjaW5jbHVkZSA8ZWlrZW52Lmg+
CisKK2NsYXNzIEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRV2ViRnVsbFNj
cmVlblZpZGVvSGFuZGxlciB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBIVE1MNUZ1bGxT
Y3JlZW5WaWRlb0hhbmRsZXIoKTsKKyAgICBib29sIHJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVv
UGxheWJhY2soKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBpc0Z1bGxTY3JlZW4o
KSBjb25zdCB7IHJldHVybiBtX2Z1bGxTY3JlZW47IH0KKyAgICB2b2lkIHVwZGF0ZVNjcmVlblJl
Y3QoY29uc3QgUVJlY3QmKSB7IH0KKworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2b2lk
IGVudGVyRnVsbFNjcmVlbihRTWVkaWFQbGF5ZXIgKik7CisgICAgdmlydHVhbCB2b2lkIGV4aXRG
dWxsU2NyZWVuKCk7CisgICAgdm9pZCBvblBsYXllclN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6
OlN0YXRlKTsKKyAgICB2b2lkIG9uUGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcik7Cisg
ICAgdm9pZCBvbk1lZGlhU3RhdHVzQ2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKTsK
KworcHJpdmF0ZToKKyAgICBIVE1MNVZpZGVvV2lkZ2V0KiBtX3ZpZGVvV2lkZ2V0OworICAgIFFN
ZWRpYVBsYXllciogbV9tZWRpYVBsYXllcjsKKyAgICBib29sIG1fZnVsbFNjcmVlbjsKKyAgICBD
QWtuQXBwVWk6OlRBcHBVaU9yaWVudGF0aW9uIG1fc2F2ZWRPcmllbnRhdGlvbjsKK307CisKK2Ns
YXNzIEhUTUw1VmlkZW9QbHVnaW4gOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0
Zm9ybVBsdWdpbiB7CisgICAgUV9PQkpFQ1QKKyAgICBRX0lOVEVSRkFDRVMoUVdlYktpdFBsYXRm
b3JtUGx1Z2luKQorcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihF
eHRlbnNpb24pIGNvbnN0OworICAgIHZpcnR1YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5zaW9uKEV4
dGVuc2lvbikgY29uc3Q7Cit9OworCisjZW5kaWYgLyogSFRNTDVWaWRlb1BsdWdpbl9oICovCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRlb1dp
ZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3Jt
cGx1Z2luL0hUTUw1VmlkZW9XaWRnZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9XaWRnZXQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJIVE1M
NVZpZGVvV2lkZ2V0LmgiCisKK0hUTUw1VmlkZW9XaWRnZXQ6OkhUTUw1VmlkZW9XaWRnZXQoUVdp
ZGdldCAqcGFyZW50KQorICAgIDogUVZpZGVvV2lkZ2V0KHBhcmVudCkKK3sKKyAgICBtX292ZXJs
YXlXaWRnZXQgPSBuZXcgT3ZlcmxheVdpZGdldCh0aGlzKTsKKyAgICBjb25uZWN0KG1fb3Zlcmxh
eVdpZGdldCwgU0lHTkFMKGNvbnRyb2xDbGlja2VkKGJvb2wpKSwgdGhpcywgU0xPVChvbkNvbnRy
b2xDbGlja2VkKGJvb2wpKSk7CisgICAgY29ubmVjdChtX292ZXJsYXlXaWRnZXQsIFNJR05BTChz
bGlkZXJNb3ZlZChpbnQpKSwgdGhpcywgU0xPVChvblNsaWRlck1vdmVkKGludCkpKTsKKyAgICBj
b25uZWN0KG1fb3ZlcmxheVdpZGdldCwgU0lHTkFMKGNsb3NlQ2xpY2tlZCgpKSwgdGhpcywgU0xP
VChvbkNsb3NlQ2xpY2tlZCgpKSk7CisgICAgY29ubmVjdChtX292ZXJsYXlXaWRnZXQsIFNJR05B
TChtdXRlZChib29sKSksIHRoaXMsIFNJR05BTChtdXRlZChib29sKSkpOworICAgIGNvbm5lY3Qo
bV9vdmVybGF5V2lkZ2V0LCBTSUdOQUwodm9sdW1lQ2hhbmdlZChpbnQpKSwgdGhpcywgU0lHTkFM
KHZvbHVtZUNoYW5nZWQoaW50KSkpOworICAgIG1fb3ZlcmxheVdpZGdldC0+c2V0U2l6ZVBvbGlj
eShRU2l6ZVBvbGljeTo6SWdub3JlZCwgUVNpemVQb2xpY3k6Oklnbm9yZWQpOworfQorCitIVE1M
NVZpZGVvV2lkZ2V0Ojp+SFRNTDVWaWRlb1dpZGdldCgpCit7CisgICAgZGVsZXRlIG1fb3Zlcmxh
eVdpZGdldDsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpzZXREdXJhdGlvbihxaW50NjQg
ZHVyYXRpb24pCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zZXREdXJhdGlvbihkdXJhdGlvbiAv
IDEwMDApOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om1vdXNlUHJlc3NFdmVudChRTW91
c2VFdmVudCAqKQoreworICAgIG1fb3ZlcmxheVdpZGdldC0+c2hvd0Z1bGxTY3JlZW4oKTsKK30K
Kwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvblBsYXllclN0b3BwZWQoKQoreworICAgIG1fb3Zl
cmxheVdpZGdldC0+b25QbGF5ZXJTdG9wcGVkKCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdl
dDo6b25QbGF5ZXJFcnJvcigpCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5vblBsYXllckVycm9y
KCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6b25FbmRPZk1lZGlhKCkKK3sKKyAgICBt
X292ZXJsYXlXaWRnZXQtPm9uRW5kT2ZNZWRpYSgpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRn
ZXQ6Om9uQnVmZmVyaW5nTWVkaWEoKQoreworICAgIG1fb3ZlcmxheVdpZGdldC0+b25CdWZmZXJp
bmdNZWRpYSgpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uQnVmZmVyZWRNZWRpYSgp
Cit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5vbkJ1ZmZlcmVkTWVkaWEoKTsKK30KKwordm9pZCBI
VE1MNVZpZGVvV2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKGJvb2wgaXNQYXVzZWQpCit7CisgICAg
aWYgKGlzUGF1c2VkKQorICAgICAgICBlbWl0IHBhdXNlQ2xpY2tlZCgpOworICAgIGVsc2UKKyAg
ICAgICAgZW1pdCBwbGF5Q2xpY2tlZCgpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9u
UG9zaXRpb25DaGFuZ2VkKHFpbnQ2NCBwb3NpdGlvbikKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQt
PnNldFBvc2l0aW9uKHBvc2l0aW9uIC8gMTAwMCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdl
dDo6b25TbGlkZXJNb3ZlZChpbnQgdmFsdWUpCit7CisgICAgZW1pdCBwb3NpdGlvbkNoYW5nZWRC
eVVzZXIoKChxaW50NjQpdmFsdWUpKjEwMDApOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6
Om9uQ2xvc2VDbGlja2VkKCkKK3sKKyAgICBoaWRlKCk7CisgICAgZW1pdCBjbG9zZUNsaWNrZWQo
KTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpzaG93RnVsbFNjcmVlbigpCit7CisgICAg
c2V0RnVsbFNjcmVlbih0cnVlKTsKKyAgICBtX292ZXJsYXlXaWRnZXQtPnNob3dGdWxsU2NyZWVu
KCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6c2V0Vm9sdW1lKGludCB2b2x1bWUpCit7
CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zZXRWb2x1bWUodm9sdW1lKTsKK30KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvV2lkZ2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1
VmlkZW9XaWRnZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvV2lkZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEhUTUw1VmlkZW9XaWRnZXRfaAorI2Rl
ZmluZSBIVE1MNVZpZGVvV2lkZ2V0X2gKKworI2luY2x1ZGUgIk92ZXJsYXlXaWRnZXQuaCIKKwor
I2luY2x1ZGUgPFFWaWRlb1dpZGdldD4KKworY2xhc3MgSFRNTDVWaWRlb1dpZGdldCA6IHB1Ymxp
YyBRVmlkZW9XaWRnZXQgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgSFRNTDVWaWRlb1dp
ZGdldChRV2lkZ2V0KiBwYXJlbnQgPSAwKTsKKyAgICB+SFRNTDVWaWRlb1dpZGdldCgpOworICAg
IHZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdm9pZCBvblBsYXllclN0
b3BwZWQoKTsKKyAgICB2b2lkIG9uUGxheWVyRXJyb3IoKTsKKyAgICB2b2lkIG9uRW5kT2ZNZWRp
YSgpOworICAgIHZvaWQgb25CdWZmZXJpbmdNZWRpYSgpOworICAgIHZvaWQgb25CdWZmZXJlZE1l
ZGlhKCk7CisgICAgdm9pZCBzZXRWb2x1bWUoaW50KTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2
b2lkIG9uQ29udHJvbENsaWNrZWQoYm9vbCk7CisgICAgdm9pZCBvblBvc2l0aW9uQ2hhbmdlZChx
aW50NjQpOworICAgIHZvaWQgb25TbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQgb25DbG9zZUNs
aWNrZWQoKTsKKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgc2hvd0Z1bGxTY3JlZW4oKTsKKyAg
ICB2b2lkIHNldER1cmF0aW9uKHFpbnQ2NCk7CisKK3NpZ25hbHM6CisgICAgdm9pZCBwYXVzZUNs
aWNrZWQoKTsKKyAgICB2b2lkIHBsYXlDbGlja2VkKCk7CisgICAgdm9pZCBwb3NpdGlvbkNoYW5n
ZWRCeVVzZXIocWludDY0KTsKKyAgICB2b2lkIGNsb3NlQ2xpY2tlZCgpOworICAgIHZvaWQgbXV0
ZWQoYm9vbCk7CisgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKGludCk7CisKK3ByaXZhdGU6CisgICAg
T3ZlcmxheVdpZGdldCogbV9vdmVybGF5V2lkZ2V0OworfTsKKworI2VuZGlmIC8qIEhUTUw1Vmlk
ZW9XaWRnZXRfaCAqLwpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1
Z2luL092ZXJsYXlXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiT3ZlcmxheVdpZGdldC5oIgorCisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UUdyaWRM
YXlvdXQ+CisjaW5jbHVkZSA8UUhCb3hMYXlvdXQ+CisjaW5jbHVkZSA8UVN0eWxlPgorI2luY2x1
ZGUgPFFUaW1lPgorCitPdmVybGF5V2lkZ2V0OjpPdmVybGF5V2lkZ2V0KFFXaWRnZXQgKnBhcmVu
dCkKKyAgICA6IFFXaWRnZXQoMCwgUXQ6OkZyYW1lbGVzc1dpbmRvd0hpbnQpCisgICAgLCBtX2lz
UGF1c2VkKGZhbHNlKQorICAgICwgbV9pc011dGVkKGZhbHNlKQoreworICAgIGFwcGx5U3R5bGVT
aGVldCgpOworCisgICAgbV9wbGF5SWNvbiA9IFFJY29uKCI6L2ltYWdlcy9idXR0b25fcGxheS5w
bmciKTsKKyAgICBtX3BhdXNlSWNvbiA9IFFJY29uKCI6L2ltYWdlcy9idXR0b25fcGF1c2UucG5n
Iik7CisgICAgbV9zb3VuZE9uSWNvbiA9IFFJY29uKCI6L2ltYWdlcy9idXR0b25fc291bmRfb24u
cG5nIik7CisgICAgbV9zb3VuZE9mZkljb24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3NvdW5k
X29mZi5wbmciKTsKKworICAgIG1fY29udHJvbEJ1dHRvbiA9IG5ldyBQbGF5ZXJCdXR0b24odGhp
cyk7CisgICAgbV9jb250cm9sQnV0dG9uLT5zZXRJY29uKG1fcGF1c2VJY29uKTsKKyAgICBjb25u
ZWN0KG1fY29udHJvbEJ1dHRvbiwgU0lHTkFMKGNsaWNrZWQoKSksIHRoaXMsIFNMT1Qob25Db250
cm9sQ2xpY2tlZCgpKSk7CisKKyAgICBtX3Byb2dyZXNzU2xpZGVyID0gbmV3IFFTbGlkZXIoUXQ6
Okhvcml6b250YWwsIHRoaXMpOworICAgIGNvbm5lY3QobV9wcm9ncmVzc1NsaWRlciwgU0lHTkFM
KHNsaWRlck1vdmVkKGludCkpLCB0aGlzLCBTTE9UKG9uU2xpZGVyTW92ZWQoaW50KSkpOworCisg
ICAgbV9wb3NpdGlvbkxhYmVsID0gbmV3IFFMYWJlbCh0aGlzKTsKKyAgICBtX3Bvc2l0aW9uTGFi
ZWwtPnNldFRleHQodGltZVRvU3RyaW5nKDApKTsKKyAgICBtX2R1cmF0aW9uTGFiZWwgPSBuZXcg
UUxhYmVsKHRoaXMpOworCisgICAgbV9zb3VuZEJ1dHRvbiA9IG5ldyBQbGF5ZXJCdXR0b24odGhp
cyk7CisgICAgbV9zb3VuZEJ1dHRvbi0+c2V0SWNvbihtX3NvdW5kT25JY29uKTsKKyAgICBjb25u
ZWN0KG1fc291bmRCdXR0b24sIFNJR05BTChjbGlja2VkKCkpLCB0aGlzLCBTTE9UKG9uU291bmRD
bGlja2VkKCkpKTsKKworICAgIG1fY2xvc2VCdXR0b24gPSBuZXcgUGxheWVyQnV0dG9uKHRoaXMp
OworICAgIG1fY2xvc2VCdXR0b24tPnNldEljb24oUUljb24oIjovaW1hZ2VzL2J1dHRvbl9jbG9z
ZS5wbmciKSk7CisgICAgY29ubmVjdChtX2Nsb3NlQnV0dG9uLCBTSUdOQUwoY2xpY2tlZCgpKSwg
dGhpcywgU0xPVChvbkNsb3NlQ2xpY2tlZCgpKSk7CisKKyAgICBtX3ZvbHVtZVNsaWRlciA9IG5l
dyBRU2xpZGVyKFF0OjpWZXJ0aWNhbCwgdGhpcyk7CisgICAgbV92b2x1bWVTbGlkZXItPnNldFJh
bmdlKDAsIDEwMCk7CisgICAgY29ubmVjdChtX3NvdW5kQnV0dG9uLCBTSUdOQUwodGFwQW5kSG9s
ZCgpKSwgbV92b2x1bWVTbGlkZXIsIFNMT1Qoc2hvdygpKSk7CisgICAgY29ubmVjdChtX3ZvbHVt
ZVNsaWRlciwgU0lHTkFMKHNsaWRlclJlbGVhc2VkKCkpLCB0aGlzLCBTTE9UKG9uVm9sdW1lU2xp
ZGVyUmVsZWFzZWQoKSkpOworICAgIGNvbm5lY3QobV92b2x1bWVTbGlkZXIsIFNJR05BTChzbGlk
ZXJNb3ZlZChpbnQpKSwgdGhpcywgU0xPVChvblZvbHVtZVNsaWRlck1vdmVkKGludCkpKTsKKyAg
ICBtX3ZvbHVtZVNsaWRlci0+aGlkZSgpOworCisgICAgbV9wbGF5ZXJMYWJlbCA9IG5ldyBQbGF5
ZXJMYWJlbCh0aGlzKTsKKyAgICBtX3BsYXllckxhYmVsLT5oaWRlKCk7CisKKyAgICBRQm94TGF5
b3V0KiBtX2NvbnRyb2xMYXlvdXQgPSBuZXcgUUhCb3hMYXlvdXQ7CisgICAgbV9jb250cm9sTGF5
b3V0LT5hZGRXaWRnZXQobV9jb250cm9sQnV0dG9uKTsKKyAgICBtX2NvbnRyb2xMYXlvdXQtPmFk
ZFdpZGdldChtX3Bvc2l0aW9uTGFiZWwpOworICAgIG1fY29udHJvbExheW91dC0+YWRkV2lkZ2V0
KG1fcHJvZ3Jlc3NTbGlkZXIpOworICAgIG1fY29udHJvbExheW91dC0+YWRkV2lkZ2V0KG1fZHVy
YXRpb25MYWJlbCk7CisKKyAgICBRR3JpZExheW91dCogbGF5b3V0ID0gbmV3IFFHcmlkTGF5b3V0
OworICAgIGxheW91dC0+YWRkV2lkZ2V0KG1fY2xvc2VCdXR0b24sIDAsIDAsIDEsIDIsIFF0OjpB
bGlnblJpZ2h0IHwgUXQ6OkFsaWduVG9wKTsKKyAgICBsYXlvdXQtPmFkZFdpZGdldChtX3BsYXll
ckxhYmVsLCAxLCAwLCBRdDo6QWxpZ25DZW50ZXIpOworICAgIGxheW91dC0+YWRkV2lkZ2V0KG1f
dm9sdW1lU2xpZGVyLCAxLCAxKTsKKyAgICBsYXlvdXQtPmFkZExheW91dChtX2NvbnRyb2xMYXlv
dXQsIDIsIDAsIFF0OjpBbGlnbkJvdHRvbSk7CisgICAgbGF5b3V0LT5hZGRXaWRnZXQobV9zb3Vu
ZEJ1dHRvbiwgMiwgMSwgUXQ6OkFsaWduQm90dG9tKTsKKyAgICBzZXRMYXlvdXQobGF5b3V0KTsK
KworICAgIG1faGlkZVdpZGdldFRpbWVyID0gbmV3IFFUaW1lcih0aGlzKTsKKyAgICBtX2hpZGVX
aWRnZXRUaW1lci0+c2V0U2luZ2xlU2hvdCh0cnVlKTsKKyAgICBtX2hpZGVXaWRnZXRUaW1lci0+
c2V0SW50ZXJ2YWwoMzAwMCk7CisgICAgY29ubmVjdChtX2hpZGVXaWRnZXRUaW1lciwgU0lHTkFM
KHRpbWVvdXQoKSksIHRoaXMsIFNMT1Qob25UaW1lclRpbWVvdXQoKSkpOworICAgIGNvbm5lY3Qo
bV9wcm9ncmVzc1NsaWRlciwgU0lHTkFMKHNsaWRlclByZXNzZWQoKSksIG1faGlkZVdpZGdldFRp
bWVyLCBTTE9UKHN0b3AoKSkpOworICAgIGNvbm5lY3QobV9wcm9ncmVzc1NsaWRlciwgU0lHTkFM
KHNsaWRlclJlbGVhc2VkKCkpLCBtX2hpZGVXaWRnZXRUaW1lciwgU0xPVChzdGFydCgpKSk7Cisg
ICAgY29ubmVjdChtX3ZvbHVtZVNsaWRlciwgU0lHTkFMKHNsaWRlclByZXNzZWQoKSksIG1faGlk
ZVdpZGdldFRpbWVyLCBTTE9UKHN0b3AoKSkpOworCisgICAgc2V0QXR0cmlidXRlKFF0OjpXQV9U
cmFuc2x1Y2VudEJhY2tncm91bmQpOworfQorCitPdmVybGF5V2lkZ2V0Ojp+T3ZlcmxheVdpZGdl
dCgpCit7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24oaW50IGR1cmF0aW9u
KQoreworICAgIG1fcHJvZ3Jlc3NTbGlkZXItPnNldE1heGltdW0oZHVyYXRpb24pOworICAgIG1f
ZHVyYXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmcoZHVyYXRpb24pKTsKK30KKwordm9p
ZCBPdmVybGF5V2lkZ2V0OjpzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pCit7CisgICAgaWYgKCFt
X3Byb2dyZXNzU2xpZGVyLT5pc1NsaWRlckRvd24oKSkgeworICAgICAgICBtX3Byb2dyZXNzU2xp
ZGVyLT5zZXRWYWx1ZShwb3NpdGlvbik7CisgICAgICAgIG1fcG9zaXRpb25MYWJlbC0+c2V0VGV4
dCh0aW1lVG9TdHJpbmcocG9zaXRpb24pKTsKKyAgICB9Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdl
dDo6c2V0Vm9sdW1lKGludCB2b2x1bWUpCit7CisgICAgbV92b2x1bWVTbGlkZXItPnNldFZhbHVl
KHZvbHVtZSk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6bW91c2VQcmVzc0V2ZW50KFFNb3Vz
ZUV2ZW50ICopCit7CisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0b3AoKTsKKyAgICBoaWRlKCk7
Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25QbGF5ZXJTdG9wcGVkKCkKK3sKKyAgICBtX2Nv
bnRyb2xCdXR0b24tPnNldEljb24obV9wbGF5SWNvbik7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdl
dDo6b25QbGF5ZXJFcnJvcigpCit7CisgICAgbV9jb250cm9sQnV0dG9uLT5zZXREaXNhYmxlZCh0
cnVlKTsKKyAgICBtX3Byb2dyZXNzU2xpZGVyLT5zZXREaXNhYmxlZCh0cnVlKTsKKyAgICBtX3Bs
YXllckxhYmVsLT5vblBsYXllckVycm9yKCk7CisgICAgc2hvd0Z1bGxTY3JlZW4oKTsKK30KKwor
dm9pZCBPdmVybGF5V2lkZ2V0OjpvbkVuZE9mTWVkaWEoKQoreworICAgIFFXaWRnZXQ6OnNob3dG
dWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25CdWZmZXJpbmdNZWRpYSgp
Cit7CisgICAgbV9wbGF5ZXJMYWJlbC0+c3RhcnRCdWZmZXJpbmdBbmltYXRpb24oKTsKK30KKwor
dm9pZCBPdmVybGF5V2lkZ2V0OjpvbkJ1ZmZlcmVkTWVkaWEoKQoreworICAgIG1fcGxheWVyTGFi
ZWwtPnN0b3BCdWZmZXJpbmdBbmltYXRpb24oKTsKK30KKworUVN0cmluZyBPdmVybGF5V2lkZ2V0
Ojp0aW1lVG9TdHJpbmcoaW50IHNlY29uZHMpCit7CisgICAgUVRpbWUgaW5pdFRpbWUoMCwgMCwg
MCk7CisgICAgUVRpbWUgdGltZSA9IGluaXRUaW1lLmFkZFNlY3Moc2Vjb25kcyk7CisgICAgcmV0
dXJuIHRpbWUuaG91cigpID8gdGltZS50b1N0cmluZygiaDptbTpzcyIpIDogdGltZS50b1N0cmlu
ZygibW06c3MiKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjphcHBseVN0eWxlU2hlZXQoKQor
eworICAgIFFGaWxlIGZpbGUoIjovcXNzL092ZXJsYXlXaWRnZXQucXNzIik7CisgICAgZmlsZS5v
cGVuKFFGaWxlOjpSZWFkT25seSk7CisgICAgc2V0U3R5bGVTaGVldChRTGF0aW4xU3RyaW5nKGZp
bGUucmVhZEFsbCgpKSk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25Db250cm9sQ2xpY2tl
ZCgpCit7CisgICAgbV9pc1BhdXNlZCA9ICFtX2lzUGF1c2VkOworICAgIGlmIChtX2lzUGF1c2Vk
KSB7CisgICAgICAgIG1fY29udHJvbEJ1dHRvbi0+c2V0SWNvbihtX3BsYXlJY29uKTsKKyAgICAg
ICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0b3AoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2Nv
bnRyb2xCdXR0b24tPnNldEljb24obV9wYXVzZUljb24pOworICAgICAgICBtX2hpZGVXaWRnZXRU
aW1lci0+c3RhcnQoKTsKKyAgICB9CisgICAgZW1pdCBjb250cm9sQ2xpY2tlZChtX2lzUGF1c2Vk
KTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvblNsaWRlck1vdmVkKGludCB2YWx1ZSkKK3sK
KyAgICBlbWl0IHNsaWRlck1vdmVkKHZhbHVlKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0Ojpv
blNvdW5kQ2xpY2tlZCgpCit7CisgICAgaWYgKG1fdm9sdW1lU2xpZGVyLT5pc1Zpc2libGUoKSkK
KyAgICAgICAgbV9pc011dGVkID0gZmFsc2U7CisgICAgZWxzZQorICAgICAgICBtX2lzTXV0ZWQg
PSAhbV9pc011dGVkOworCisgICAgaWYgKG1faXNNdXRlZCkKKyAgICAgICAgbV9zb3VuZEJ1dHRv
bi0+c2V0SWNvbihtX3NvdW5kT2ZmSWNvbik7CisgICAgZWxzZQorICAgICAgICBtX3NvdW5kQnV0
dG9uLT5zZXRJY29uKG1fc291bmRPbkljb24pOworCisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0
YXJ0KCk7CisgICAgZW1pdCBtdXRlZChtX2lzTXV0ZWQpOworfQorCit2b2lkIE92ZXJsYXlXaWRn
ZXQ6Om9uQ2xvc2VDbGlja2VkKCkKK3sKKyAgICBtX2hpZGVXaWRnZXRUaW1lci0+c3RvcCgpOwor
ICAgIGhpZGUoKTsKKyAgICBlbWl0IGNsb3NlQ2xpY2tlZCgpOworfQorCit2b2lkIE92ZXJsYXlX
aWRnZXQ6Om9uVm9sdW1lU2xpZGVyUmVsZWFzZWQoKQoreworICAgIG1faGlkZVdpZGdldFRpbWVy
LT5zdGFydCgpOworICAgIGVtaXQgdm9sdW1lQ2hhbmdlZChtX3ZvbHVtZVNsaWRlci0+dmFsdWUo
KSk7CisgICAgbV92b2x1bWVTbGlkZXItPmhpZGUoKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0
OjpvblZvbHVtZVNsaWRlck1vdmVkKGludCB2YWx1ZSkKK3sKKyAgICBlbWl0IHZvbHVtZUNoYW5n
ZWQodmFsdWUpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uVGltZXJUaW1lb3V0KCkKK3sK
KyAgICBpZiAoIW1faXNQYXVzZWQpCisgICAgICAgIGhpZGUoKTsKK30KKwordm9pZCBPdmVybGF5
V2lkZ2V0OjpzaG93RnVsbFNjcmVlbigpCit7CisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0YXJ0
KCk7CisgICAgUVdpZGdldDo6c2hvd0Z1bGxTY3JlZW4oKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdp
bi9PdmVybGF5V2lkZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIE92ZXJsYXlXaWRnZXRfaAorI2RlZmluZSBPdmVybGF5V2lkZ2V0
X2gKKworI2luY2x1ZGUgIlBsYXllckJ1dHRvbi5oIgorI2luY2x1ZGUgIlBsYXllckxhYmVsLmgi
CisKKyNpbmNsdWRlIDxRU2xpZGVyPgorCitjbGFzcyBPdmVybGF5V2lkZ2V0IDogcHVibGljIFFX
aWRnZXQgeworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgT3ZlcmxheVdpZGdldChRV2lkZ2V0
KiBwYXJlbnQgPSAwKTsKKyAgICB+T3ZlcmxheVdpZGdldCgpOworICAgIHZvaWQgc2V0RHVyYXRp
b24oaW50KTsKKyAgICB2b2lkIHNldFBvc2l0aW9uKGludCk7CisgICAgdm9pZCBzZXRWb2x1bWUo
aW50KTsKKyAgICB2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOworICAgIHZvaWQg
b25QbGF5ZXJTdG9wcGVkKCk7CisgICAgdm9pZCBvblBsYXllckVycm9yKCk7CisgICAgdm9pZCBv
bkVuZE9mTWVkaWEoKTsKKyAgICB2b2lkIG9uQnVmZmVyaW5nTWVkaWEoKTsKKyAgICB2b2lkIG9u
QnVmZmVyZWRNZWRpYSgpOworCitwcml2YXRlOgorICAgIFFTdHJpbmcgdGltZVRvU3RyaW5nKGlu
dCk7CisgICAgdm9pZCBhcHBseVN0eWxlU2hlZXQoKTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2
b2lkIG9uQ29udHJvbENsaWNrZWQoKTsKKyAgICB2b2lkIG9uU2xpZGVyTW92ZWQoaW50KTsKKyAg
ICB2b2lkIG9uU291bmRDbGlja2VkKCk7CisgICAgdm9pZCBvbkNsb3NlQ2xpY2tlZCgpOworICAg
IHZvaWQgb25Wb2x1bWVTbGlkZXJSZWxlYXNlZCgpOworICAgIHZvaWQgb25Wb2x1bWVTbGlkZXJN
b3ZlZChpbnQpOworICAgIHZvaWQgb25UaW1lclRpbWVvdXQoKTsKKworcHVibGljIHNsb3RzOgor
ICAgIHZvaWQgc2hvd0Z1bGxTY3JlZW4oKTsKKworc2lnbmFsczoKKyAgICB2b2lkIGNvbnRyb2xD
bGlja2VkKGJvb2wpOworICAgIHZvaWQgc2xpZGVyTW92ZWQoaW50KTsKKyAgICB2b2lkIGNsb3Nl
Q2xpY2tlZCgpOworICAgIHZvaWQgbXV0ZWQoYm9vbCk7CisgICAgdm9pZCB2b2x1bWVDaGFuZ2Vk
KGludCk7CisKK3ByaXZhdGU6CisgICAgUGxheWVyQnV0dG9uKiBtX2NvbnRyb2xCdXR0b247Cisg
ICAgYm9vbCBtX2lzUGF1c2VkOworICAgIFFTbGlkZXIqIG1fcHJvZ3Jlc3NTbGlkZXI7CisgICAg
UUxhYmVsKiBtX3Bvc2l0aW9uTGFiZWw7CisgICAgUUxhYmVsKiBtX2R1cmF0aW9uTGFiZWw7Cisg
ICAgUGxheWVyQnV0dG9uKiBtX3NvdW5kQnV0dG9uOworICAgIFBsYXllckJ1dHRvbiogbV9jbG9z
ZUJ1dHRvbjsKKyAgICBRU2xpZGVyKiBtX3ZvbHVtZVNsaWRlcjsKKyAgICBib29sIG1faXNNdXRl
ZDsKKyAgICBRSWNvbiBtX3BsYXlJY29uOworICAgIFFJY29uIG1fcGF1c2VJY29uOworICAgIFFJ
Y29uIG1fc291bmRPbkljb247CisgICAgUUljb24gbV9zb3VuZE9mZkljb247CisgICAgUVRpbWVy
KiBtX2hpZGVXaWRnZXRUaW1lcjsKKyAgICBQbGF5ZXJMYWJlbCogbV9wbGF5ZXJMYWJlbDsKK307
CisKKyNlbmRpZiAvKiBPdmVybGF5V2lkZ2V0X2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1Bs
YXllckJ1dHRvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiUGxheWVyQnV0dG9uLmgiCisKKyNpbmNsdWRlIDxRR2VzdHVyZT4K
KyNpbmNsdWRlIDxRR2VzdHVyZUV2ZW50PgorCitQbGF5ZXJCdXR0b246OlBsYXllckJ1dHRvbihR
V2lkZ2V0ICpwYXJlbnQpCisgICAgOiBRUHVzaEJ1dHRvbihwYXJlbnQpCisgICAgLCBtX2J1dHRv
bkltYWdlKDApCit7CisgICAgZ3JhYkdlc3R1cmUoUXQ6OlRhcEFuZEhvbGRHZXN0dXJlKTsKKyAg
ICBzZXRGaXhlZFNpemUoNTAsIDUwKTsKKyAgICBzZXRJY29uU2l6ZShRU2l6ZSg1MCwgNTApKTsK
KyAgICBzZXRTdHlsZVNoZWV0KCJib3JkZXI6IG5vbmUiKTsKK30KKworYm9vbCBQbGF5ZXJCdXR0
b246OmV2ZW50KFFFdmVudCAqZXZlbnQpCit7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gUUV2
ZW50OjpHZXN0dXJlKSB7CisgICAgICAgIFFHZXN0dXJlRXZlbnQgKiBnZXN0dXJlRXZlbnQgPSAo
UUdlc3R1cmVFdmVudCopc3RhdGljX2Nhc3Q8UUdlc3R1cmVFdmVudCo+KGV2ZW50KTsKKyAgICAg
ICAgUUdlc3R1cmUgKiBnZXN0dXJlID0gZ2VzdHVyZUV2ZW50LT5nZXN0dXJlKFF0OjpUYXBBbmRI
b2xkR2VzdHVyZSk7CisgICAgICAgIGlmIChnZXN0dXJlICYmIGdlc3R1cmUtPnN0YXRlKCkgPT0g
UXQ6Okdlc3R1cmVGaW5pc2hlZCkgeworICAgICAgICAgICAgZW1pdCB0YXBBbmRIb2xkKCk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gUVB1
c2hCdXR0b246OmV2ZW50KGV2ZW50KTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlh
bi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyQnV0dG9uLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyQnV0dG9u
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIFBsYXllckJ1dHRvbl9oCisjZGVmaW5lIFBsYXllckJ1dHRvbl9oCisKKyNpbmNsdWRlIDxR
SWNvbj4KKyNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4KKworY2xhc3MgUUV2ZW50OworCitjbGFzcyBQ
bGF5ZXJCdXR0b24gOiBwdWJsaWMgUVB1c2hCdXR0b24geworICAgIFFfT0JKRUNUCitwdWJsaWM6
CisgICAgUGxheWVyQnV0dG9uKFFXaWRnZXQqIHBhcmVudCA9IDApOworICAgIGJvb2wgZXZlbnQo
UUV2ZW50Kik7CisKK3NpZ25hbHM6CisgICAgdm9pZCB0YXBBbmRIb2xkKCk7CisKK3ByaXZhdGU6
CisgICAgUUljb24qIG1fYnV0dG9uSW1hZ2U7Cit9OworCisjZW5kaWYgLyogUGxheWVyQnV0dG9u
X2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5
ZXJMYWJlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRm
b3JtcGx1Z2luL1BsYXllckxhYmVsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
cXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiUGxheWVyTGFiZWwu
aCIKKworUGxheWVyTGFiZWw6OlBsYXllckxhYmVsKFFXaWRnZXQqIHBhcmVudCkKKyAgICA6IFFM
YWJlbChwYXJlbnQpCisgICAgLCBtX2J1ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yKG1fYnVmZmVy
aW5nQW5pbWF0aW9uKQorICAgICwgbV9hbmltYXRpb25UaW1lcih0aGlzKQoreworICAgIG1fYnVm
ZmVyaW5nQW5pbWF0aW9uLmFwcGVuZChRUGl4bWFwKCI6L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmlu
Z18xLnBuZyIpLnNjYWxlZChRU2l6ZSg4MCwgODApKSk7CisgICAgbV9idWZmZXJpbmdBbmltYXRp
b24uYXBwZW5kKFFQaXhtYXAoIjovaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzIucG5nIikuc2Nh
bGVkKFFTaXplKDgwLCA4MCkpKTsKKyAgICBtX2J1ZmZlcmluZ0FuaW1hdGlvbi5hcHBlbmQoUVBp
eG1hcCgiOi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMy5wbmciKS5zY2FsZWQoUVNpemUoODAs
IDgwKSkpOworICAgIG1fYnVmZmVyaW5nQW5pbWF0aW9uLmFwcGVuZChRUGl4bWFwKCI6L2ltYWdl
cy9sb2FkaW5nX2J1ZmZlcmluZ180LnBuZyIpLnNjYWxlZChRU2l6ZSg4MCwgODApKSk7CisgICAg
bV9idWZmZXJpbmdBbmltYXRpb25JdGVyYXRvciA9IG1fYnVmZmVyaW5nQW5pbWF0aW9uOworICAg
IG1fYW5pbWF0aW9uVGltZXIuc2V0U2luZ2xlU2hvdChmYWxzZSk7CisgICAgbV9hbmltYXRpb25U
aW1lci5zZXRJbnRlcnZhbCgyMDApOworICAgIGNvbm5lY3QoJm1fYW5pbWF0aW9uVGltZXIsIFNJ
R05BTCh0aW1lb3V0KCkpLCB0aGlzLCBTTE9UKG9uQW5pbWF0aW9uVGltZW91dCgpKSk7CisKKyAg
ICBtX2Nhbm5vdHBsYXkgPSBRUGl4bWFwKCI6L2ltYWdlcy9idXR0b25fY2Fubm90cGxheS5wbmci
KS5zY2FsZWQoUVNpemUoODAsIDgwKSk7Cit9CisKK3ZvaWQgUGxheWVyTGFiZWw6Om9uUGxheWVy
RXJyb3IoKQoreworICAgIHNldFBpeG1hcChtX2Nhbm5vdHBsYXkpOworICAgIHNob3coKTsKK30K
Kwordm9pZCBQbGF5ZXJMYWJlbDo6c3RhcnRCdWZmZXJpbmdBbmltYXRpb24oKQoreworICAgIG1f
YnVmZmVyaW5nQW5pbWF0aW9uSXRlcmF0b3IudG9Gcm9udCgpOworICAgIHNldFBpeG1hcChtX2J1
ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yLm5leHQoKSk7CisgICAgc2hvdygpOworICAgIG1fYW5p
bWF0aW9uVGltZXIuc3RhcnQoKTsKK30KKwordm9pZCBQbGF5ZXJMYWJlbDo6c3RvcEJ1ZmZlcmlu
Z0FuaW1hdGlvbigpCit7CisgICAgaGlkZSgpOworICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgp
OworfQorCit2b2lkIFBsYXllckxhYmVsOjpvbkFuaW1hdGlvblRpbWVvdXQoKQoreworICAgIGlm
ICghbV9idWZmZXJpbmdBbmltYXRpb25JdGVyYXRvci5oYXNOZXh0KCkpCisgICAgICAgIG1fYnVm
ZmVyaW5nQW5pbWF0aW9uSXRlcmF0b3IudG9Gcm9udCgpOworICAgIHNldFBpeG1hcChtX2J1ZmZl
cmluZ0FuaW1hdGlvbkl0ZXJhdG9yLm5leHQoKSk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyTGFiZWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyTGFiZWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJM
YWJlbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBQbGF5ZXJMYWJlbF9oCisjZGVmaW5lIFBsYXllckxhYmVsX2gKKworI2luY2x1ZGUg
PFFMYWJlbD4KKyNpbmNsdWRlIDxRVGltZXI+CisKK2NsYXNzIFBsYXllckxhYmVsIDogcHVibGlj
IFFMYWJlbCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBQbGF5ZXJMYWJlbChRV2lkZ2V0
KiBwYXJlbnQgPSAwKTsKKyAgICB2b2lkIG9uUGxheWVyRXJyb3IoKTsKKworcHVibGljIHNsb3Rz
OgorICAgIHZvaWQgc3RhcnRCdWZmZXJpbmdBbmltYXRpb24oKTsKKyAgICB2b2lkIHN0b3BCdWZm
ZXJpbmdBbmltYXRpb24oKTsKKyAgICB2b2lkIG9uQW5pbWF0aW9uVGltZW91dCgpOworCitwcml2
YXRlOgorICAgIFFQaXhtYXAgbV9jYW5ub3RwbGF5OworICAgIFFMaXN0PFFQaXhtYXA+IG1fYnVm
ZmVyaW5nQW5pbWF0aW9uOworICAgIFFMaXN0SXRlcmF0b3I8UVBpeG1hcD4gbV9idWZmZXJpbmdB
bmltYXRpb25JdGVyYXRvcjsKKyAgICBRVGltZXIgbV9hbmltYXRpb25UaW1lcjsKK307CisKKyNl
bmRpZiAvKiBQbGF5ZXJMYWJlbF9oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4v
cGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAkocmV2aXNpb24gODYyMjcp
CisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsMTAgQEAKIAogI2luY2x1ZGUgIldlYlBsdWdp
bi5oIgogCisjaWYgZGVmaW5lZChXVEZfVVNFX1FUX01VTFRJTUVESUEpICYmIFdURl9VU0VfUVRf
TVVMVElNRURJQQorI2luY2x1ZGUgIkhUTUw1VmlkZW9QbHVnaW4uaCIKKyNlbmRpZgorCiAjaW5j
bHVkZSA8UXRHdWk+CiAjaW5jbHVkZSA8UXRQbHVnaW4+CiAjaW5jbHVkZSA8YWtuZGlzY3JlZXRw
b3B1cC5oPgpAQCAtMjQ3LDYgKzI1MSwxMCBAQCBRT2JqZWN0KiBXZWJQbHVnaW46OmNyZWF0ZUV4
dGVuc2lvbihFeHRlCiAgICAgICAgIHJldHVybiBuZXcgV2ViUG9wdXAoKTsKICAgICBjYXNlIE5v
dGlmaWNhdGlvbnM6CiAgICAgICAgIHJldHVybiBuZXcgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVy
KCk7CisjaWYgZGVmaW5lZChXVEZfVVNFX1FUX01VTFRJTUVESUEpICYmIFdURl9VU0VfUVRfTVVM
VElNRURJQQorICAgIGNhc2UgRnVsbFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICByZXR1cm4g
bmV3IEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcigpOworI2VuZGlmCiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFu
L3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvCShyZXZp
c2lvbiA4NjIyNykKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9w
bGF0Zm9ybXBsdWdpbi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDI5IEBAIGxvYWQo
bW9iaWxpdHljb25maWcsIHRydWUpCiAKIGlzRW1wdHkoT1VUUFVUX0RJUik6IE9VVFBVVF9ESVIg
PSAuLi8uLi8uLi8uLgogCitjb250YWlucyhNT0JJTElUWV9DT05GSUcsIG11bHRpbWVkaWEpIHsK
KyAKKyAgICBDT05GSUcgKz0gbW9iaWxpdHkKKyAgICBNT0JJTElUWSArPSBtdWx0aW1lZGlhCisg
ICAgREVGSU5FUyArPSBXVEZfVVNFX1FUX01VTFRJTUVESUE9MQorCisgICAgU09VUkNFUyArPSBc
CisgICAgICAgIEhUTUw1VmlkZW9QbHVnaW4uY3BwIFwKKyAgICAgICAgSFRNTDVWaWRlb1dpZGdl
dC5jcHAgXAorICAgICAgICBPdmVybGF5V2lkZ2V0LmNwcCBcCisgICAgICAgIFBsYXllckJ1dHRv
bi5jcHAgXAorICAgICAgICBQbGF5ZXJMYWJlbC5jcHAKKworICAgIEhFQURFUlMgKz0gXAorICAg
ICAgICBIVE1MNVZpZGVvUGx1Z2luLmggXAorICAgICAgICBIVE1MNVZpZGVvV2lkZ2V0LmggXAor
ICAgICAgICBPdmVybGF5V2lkZ2V0LmggXAorICAgICAgICBQbGF5ZXJCdXR0b24uaCBcCisgICAg
ICAgIFBsYXllckxhYmVsLmgKKworICAgIFJFU09VUkNFUyA9IHBsYXRmb3JtcGx1Z2luLnFyYwor
fQorCiBTT1VSQ0VTICs9IFwKICAgICBXZWJQbHVnaW4uY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5xcmMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1
Z2luLnFyYwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9y
bXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5xcmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAK
KzwhRE9DVFlQRSBSQ0M+PFJDQyB2ZXJzaW9uPSIxLjAiPgorPHFyZXNvdXJjZT4KKyAgICA8Zmls
ZT5pbWFnZXMvYnV0dG9uX2Nhbm5vdHBsYXkucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9i
dXR0b25fY2xvc2UucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25fcGF1c2UucG5n
PC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25fcGxheS5wbmc8L2ZpbGU+CisgICAgPGZp
bGU+aW1hZ2VzL2J1dHRvbl9zb3VuZF9vZmYucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9i
dXR0b25fc291bmRfb24ucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9sb2FkaW5nX2J1ZmZl
cmluZ18xLnBuZzwvZmlsZT4KKyAgICA8ZmlsZT5pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMi5w
bmc8L2ZpbGU+CisgICAgPGZpbGU+aW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzMucG5nPC9maWxl
PgorICAgIDxmaWxlPmltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ180LnBuZzwvZmlsZT4KKyAgICA8
ZmlsZT5xc3MvT3ZlcmxheVdpZGdldC5xc3M8L2ZpbGU+Cis8L3FyZXNvdXJjZT4KKzwvUkNDPgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlh
bi9wbGF0Zm9ybXBsdWdpbi9xc3MvT3ZlcmxheVdpZGdldC5xc3MKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3Fzcy9PdmVybGF5V2lkZ2V0LnFz
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdp
bi9xc3MvT3ZlcmxheVdpZGdldC5xc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKK1FT
bGlkZXI6Omdyb292ZSB7DQorICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOw0KKyAgICBib3Jk
ZXItcmFkaXVzOiA1cHg7DQorICAgIGJhY2tncm91bmQ6IHdoaXRlOw0KK30NCisNCitRU2xpZGVy
OjpoYW5kbGUgew0KKyAgICBib3JkZXI6IDJweCBzb2xpZCBibGFjazsNCisgICAgYm9yZGVyLXJh
ZGl1czogOHB4Ow0KKyAgICBiYWNrZ3JvdW5kOiBxbGluZWFyZ3JhZGllbnQoeDE6MCwgeTE6MCwg
eDI6MSwgeTI6MSwgc3RvcDowICNlZWUsIHN0b3A6MSAjY2NjKTsNCit9DQorDQorUVNsaWRlcjo6
YWRkLXBhZ2Ugew0KKyAgICBib3JkZXI6IDJweCBzb2xpZCBibGFjazsNCisgICAgYm9yZGVyLXJh
ZGl1czogNXB4Ow0KK30NCisNCitRU2xpZGVyOjpzdWItcGFnZSB7DQorICAgIGJvcmRlcjogMnB4
IHNvbGlkIGJsYWNrOw0KKyAgICBib3JkZXItcmFkaXVzOiA1cHg7DQorfQ0KKw0KK1FTbGlkZXI6
Omdyb292ZTpob3Jpem9udGFsIHsgDQorICAgIGhlaWdodDogMTBweDsNCit9DQorDQorUVNsaWRl
cjo6aGFuZGxlOmhvcml6b250YWwgew0KKyAgICB3aWR0aDogNDBweDsNCisgICAgbWFyZ2luLXRv
cDogLTE1cHg7DQorICAgIG1hcmdpbi1ib3R0b206IC0xNXB4Ow0KK30NCisNCitRU2xpZGVyOjph
ZGQtcGFnZTpob3Jpem9udGFsIHsNCisgICAgaGVpZ2h0OiAxMHB4Ow0KKyAgICBiYWNrZ3JvdW5k
OiB3aGl0ZTsNCit9DQorDQorUVNsaWRlcjo6c3ViLXBhZ2U6aG9yaXpvbnRhbCB7DQorICAgIGhl
aWdodDogMTBweDsNCisgICAgYmFja2dyb3VuZDogcWxpbmVhcmdyYWRpZW50KHgxOjAsIHkxOjAs
IHgyOjEsIHkyOjEsIHN0b3A6MCAjZWVlLCBzdG9wOjEgI2NjYyk7DQorfQ0KKw0KK1FTbGlkZXI6
Omdyb292ZTp2ZXJ0aWNhbCB7DQorICAgIHdpZHRoOiAxMHB4Ow0KK30NCisNCitRU2xpZGVyOjpo
YW5kbGU6dmVydGljYWwgew0KKyAgICBoZWlnaHQ6IDQwcHg7IG1hcmdpbi1sZWZ0OiAtMTVweDsg
bWFyZ2luLXJpZ2h0OiAtMTVweDsNCit9DQorDQorUVNsaWRlcjo6YWRkLXBhZ2U6dmVydGljYWwg
ew0KKyAgICB3aWR0aDogMTBweDsNCisgICAgYmFja2dyb3VuZDogcWxpbmVhcmdyYWRpZW50KHgx
OjAsIHkxOjAsIHgyOjEsIHkyOjEsIHN0b3A6MCAjZWVlLCBzdG9wOjEgI2NjYyk7DQorfQ0KKw0K
K1FTbGlkZXI6OnN1Yi1wYWdlOnZlcnRpY2FsIHsNCisgICAgd2lkdGg6IDEwcHg7DQorICAgIGJh
Y2tncm91bmQ6IHdoaXRlOw0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9jYW5u
b3RwbGF5LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJp
bmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4v
aW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVV
Z0FBQUZBQUFBQlFDQVlBQUFINUZzSTdBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpH
WFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFCQ1pKUkVGVWVO
cU1rRkVLQUNBSVE5dnVmK2ZGCklFRURMVDhFM1hPS2tMUitnazRBVEhjVHNvN2ptQ0ZrcURnMllo
bm15eW42dk81QlY5K2d1cHJUdXR6bkFCVTQvamplYUgwTFFDbVYKSkFFQWdxRDgvNk10TFVybzVL
MGhCRnlzdFJsTVh6L3J4a0xhb1JvVzZ3MDd3dE5hd2JHcnFkZ0s0SnEzT3R3NVp0WHJua2hFVkVW
RQordTZSZ3BlY0lQZTZQbk9rVEVLMktRRHJaSkFFQUFpQ3dQVC9mNjZMVGFXUUh2UllBeFZzVHpQ
N0dDLzRqZGVFdkZrNnlBaHBGRVY5CkZSaFEyWml3Q3dqWW1BaFFFN0QxZ3oyam14bG5rZWhvSG1W
ZkNXVlV5VmlMUm1MUFM4dHJ4NllkN0NVQUpmVjJBeUFJQTFEMGh6MTEKRUkycnVDa2lpc0hTeDRX
RUdCSjZLRmlvS2JkZTJ0bVBTWmN4cVY5cDI0KzIxWlZtSjJPU2NoNExRYjJZTEZ0Wk5YdmI5Mkxx
R2R3RAppbXJZbStyemFRZEwwQWo3UUlJUzdBZEdLTUVHMEVNSnBvSUV0VEFUOUg1QVdGSXpHRUdu
c2JCT2FkSFM0dWMzZ0JZL3ZRRVV4ZGpFCmpSb25lSFZtb2ViakVHRWFhajRPRlBOaUxnRm9yMk1j
Z0VFWWhxTDN2M1dscW1KQVRZanR6OEFJZVJMRVFOc3AzNUR2R1JIVjFpa24KYkp1SFE2ZDF5Z25G
S1l1aGFwMjE3NU9JVHFBbjJGK2J2bU0vb0RUVWhiVVhIZ0ZOWVpNdWRxRUk3QWgwb1JSc0RLU2hV
NWdNVEtFcQpMQUZLWnl5T3A5dXdGSXJEOEJ6Rmt4OE9mRHo1OGNDbllUUlVYc0NPQzdQT2VBRVhw
a0xseHdJRmMrdEkvNE5MVC82MnppTUFyMlp5CkJDQU13OEQrdStiRk43NTJWWUJIZ29GRWg5djVs
VWx3ZkE3K1QyVy93UTdPODlzd1NYWnh5ai9NSURuQmFmMytKTWtwVHZzUUpVaHUKY0VZbi9JWGtG
a2U3ZzZuN1dCVUtpRmd3MVF3aHVSUXRxT2hCa2lTcHF2RThSWmY4Z0NkQmpSTWVtY1ZjSGUySHQ5
NDRhdG9WNDA2UwozTVFma1Z3bWtzMWNTRjRDK0VqOGRsSkJpV3d3a2c4U0NldEtxaVhqWHlVQ05r
TDBrWjZrOVZ3czViLzBKS2pveFQyRVhlUWdNcDFVCjVwb1NwcnM2bysxRTdJTlp4U0oxYktMUVBu
cWMvdkJKbFN4eDJzUEV6c0lHcHpWTWJuNU1jY3BoWXkxbGd2TWN0blptSmpqVk5wQzYKZWRUQnFZ
YjFLcUxDK1FRbzd3eVNFSVpoR01oVGVSby9oUXNISmdlbUpMYXlHL29CV1dxVDJMSW5YV29kcEhv
cHFWWklhMUUzQUQxVApuMmxJdUdrK1B3TjludGpqckpGQnlHbytVMERmaWhHcWtGMThsb0FNUW5i
ektRRWlDcG5pVXdwRUVETE5weDAwSmVRdURvZ2dqTUpkCm51ZWhDa21KVVJFa09TYk4yNmF1Q3Z5
eW9XOG5sbzBiZTZEaFQwQjZKcURJd2NpNXFDcVpKU2J4dW5LS1ZrWnE2MUpLL2ExelJtZ08KMEJI
aWJYVi9UbHErTzRRODhnQ0oybWducHpBSklmOGlpVzcxSXcxR0pybWNVeGdKYUdQWDRBQ1RMUzJO
ZFk1MXlFM0JJbCtxc2FHRQphaldZVzVxUS9kbmZWTi9hcytrQzNqa2ZrK1JURGt5YTBFcndLUU1t
endoMjhsa0dOazJwZHZDWkJqYU85M2J3cVJqTTFrN3FWL0M1Ci9PdUc0VUx4eC90KzRQdnRnR2VG
endzNlR5dFo3TUl6U2dBQUFBQkpSVTVFcmtKZ2dnPT0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9jbG9zZS5wbmcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUt
dHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9idXR0b25fY2xvc2Uu
cG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRElBQUFBeUNBWUFBQUZwT0xnbkFB
QUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpT
QkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUJ2eEpSRUZVZU5waS9QLy9Qd01qSStNbUJrelEKeGdLUzZP
M3Q5VVdYV2Jod29UQVRpUEg1ODJlR29vSjhGUHJQbno4TUxDREpUNTgrTVJTWGxqSDBkbmVCYVJE
NC9mczNBMXduU0NJdApJeE5NbytnRWNTS2pZOEE2WURSSWtoRkk2d0p4S3hiWE1nQUVFRWh5RTFZ
Sm9CZitZNU5nQXRsamJHVEk0T3pvaU9JRkpwRFROMjNlCnd2QUw2Tno2MmhxdzgwRmlZQjBnYkdw
aXpIRDgrQW1Ha0tBZ01KOEZSQ0E3bDZDckFBSUlMREZseWhSZkJpTEJuRGx6anNGREJ3WnMKcksw
WmpodzlpbE1UU3BEQ0FCY1hGME5GV1NuRHVmTVhHSXdNRGNCaTFiVjFLSnJBa2ZUeDQwYzRuamQv
UGxnU3B1SGtxVk1vOHFDWQp4YkJwNGZ4NURQR0pTWEIrYWtveWlqeFc1d1dGaEtMNG9hOS9BZ29m
WkJOQUFJRkNidzRRaXhFYmVvekFvUDdQUUFKZytmbnpKd05KCkduNzkrb1ZYQVFjN084TVBKRU5S
YkFDbE1oQm9iRzdCeWdmN29hcXFDc1VQcmMxTktEWWdSeUk0Z2YvNDhZTUJHY095SVFpQTJPankK
VENBbklXTlExb1FCRUJ0ZG5nbmthUmllTW1raVdDRW9UNE13Q0lERWtOV2dlRG96TzRmaDI3ZHZj
RDRvcVRRM05USWdxMkdNaUlpZwpiY1RoektLNEFFQUFnUk1mTHkrdmRIZDN0d2NEbFFFd2tIN241
ZVh0QUdVTHNaYVdGZzlTdlVNa1lOWFgxeGNHNXowYVdRQUcvLzc5Clk4QnJDYWhFRUJjVFk3aDAr
VEs0eE1VR2Fxb3F3WFJQWHo4NGxlSzBCRmNPZlA3c09kZ1NQVjFkTUw1dzRTTER1ZzBid0hKTkRm
VW8KYWtIRlBGaytXYjV5SlJpSGhZWUFLeFVqQmdNRGZUQkdCdVdWVlhpRDYrL2Z2d3hFeGNuaUpV
dkJscUNEVTZkUEU5UkwwQ2NnTUgzcQpGQlErS0t2R3g4WXlXRmlZTTVpWm1vTHhpUk1uR1JZdVhv
elRFbVpRZmFpbnA2Y084aFl5WmdlV2hGTW5UNElyVGs1TkEwYitackRjCnVmUG53V3hSRVJFR1dW
bFpCaGtaR1FaOVBUMkd2ZnYyTWFDYmMrL2V2Y2ZnM0JzZEhlMUxxeVI4K1BEaFl6VFBKL0NJZi9m
dTNTZHUKYm00K1dsank1czJiVHdBQkJBb3VDeUN1b3BGSFhnRWJsQ25nT0prMGFaSUhHeHNiSzdW
dEtDMHQzUUZzTGp4bE1qQXdFR1ppWW1JRgpOU0tvamR2YjIwRWx1eGdMcUgwTWloeGFBckFsSUZ0
cGJnbXRmY0lFc3dRYlptVmh3U2tIdzVZV0Zuamw4UVlYQndjSFEwRitIcGpkCjB0YU8xWVYrdmo3
Z0trQlZWWVZoOXB5NXBQdWtwS2dRcFdKQ2wvZjE5Z1piQUFLZ09zZld4aHFuVDNCYVV0ZlFpT0lh
VUdzUUp1ZnYKNjh1Z3I2OEhsd05WWm52MzdTZmRFaEJHYnpHQ2FzTUFmMytVaWd2VVRWaTlkaTNl
T0dFQ2xmZjRNaFI2elFmclJvREEyWFBuR0ZhdQpXb1ZYUDl3bmhISXVjaE1YQms2Zk9jdXdiUGtL
Z25vSkJoY01oNGVGWWxnQzZoSVMwb2NTSi9oY0Voa1JEcTVpc1lFSmZiMlUreVFtCktvckIzTXdN
Ymlpb0xnZlY4Y2dBMUhZbnlpZllKT05pWXNDTkJSZ0E5WmJuTFZnQWxvTjFEcEFiRzJSWkFtb2N3
TUN4WThjWjVzeWIKaHlJUGFsZ2dBMUREZytRNHFhbXJZM2owK0RHNG56MXo5bXlzYW1DZFhGQVFn
bHFRdU9JRWJ5bGNWVjFEc0lTTmlZc2ZIRVU5Q3l6SApEL2xLaStYdDI3ZWZhT1dUcjErL2ZpS3Jr
MGtHcUFZSU1MempZME1JVklOREM5akRaaTBwS2JFU0ZSWGxHMHF1Zi8zNjlhZWVucDVqCndFYnFi
M0NiWGxsWm1VOVFVSkNQMXJtRjJnRGtacERiTDF5NDhCYnNFWHJrUmxvQmtOdkJ1WDFZZVlRZWhU
QXR4NFlvaWhFT0RuWncKTzBZTTJNeStmUGtLdythdFc4bHlDS2pKcnF1cncvRHExU3VHSmN1V01m
ejQ4Wk0rU1F2VVlRRzFrOFRGRWVQWUlJZUE4TVZMbDhIagpJTVFBUDFDWFFFOFh6Z2NGU0ZGQkFj
UExsNjhZRmkxWmduWFFqQ2lQRUp1MHZuejV3dkQ4eFhNVWo4QUF5R0VnZk9IaVJZYjFHelppCjFS
OFlBT3h5Nk92ak5COWtOc2dPdW1UMk5XdlhnWEZ3VUNDRG9ZRUJoanpJb1NCOC9zSUZoclhyMW9Q
RmNLbUZBV1MxZEMrMVZxMWUKQThhaHdjRU1Sa2FHR1BJZ2grTnpQTGdUZU80OHVCTkl0ZUtYa2xJ
TE50UUs2b2FaR0JzVHBlZk0yYlBBVHVicXdWbVBnRHFuSUxOTQpUVXp3cWp0OTVnekQ4aFVyQjJj
OUFpcUt6Y3hNaVZJTDhpZ0luenAxR2x6a1VxMGVnUTJta2dOaVFWMVdjek9jOGlkT25nTFQyTlNB
ClBBN0NJRFdMZ1VVdVJSMFNjcE5XZkZ3c2VBUU5GemgrNGdURHdrV0lBZnNGQ3hmaTFBUHlKQWlq
NnlFbGFZR2I4UW9LQ3NMT3pzNVcKeEZaa29CRTZYT0RZOGVNTTgrWXZ3R3RHVW1JQ2c1V2xKVTU1
MEN3VHNSWHIzcjE3anoxNDhPQXQyQ1B5OHZMQ2pvNk9Wc1NHQW15YQpIVFNMQVFOSGp4MWptRE4z
SGttaG1aS2N4R0J0aGJEMjhlUEhEQjFkM1NnenA0VEEvdjM3anoxOCtCRGlFVGs1T1dGN2Uzc3JV
dE1sCnlFUHVibTdBV253RFJlazdNQ0NBWWVldVhTUjVBQVlPSGp4NDdOR2pSMjhwcWtkQUl6U3Ix
NnlodUFpbHhJemgyUjhaVmg0WnFoMHIKNU9JWHZFaUduWjJkMWNuSnlabVptWmwxS0hnQW1JSis3
OXUzYisvUG56OS9BN212R0tHcjFFQzFWQW9EQ2F0K0JnbDRCWW9Jb0I5TwpBQUJVUFZhUVpaVk1E
UUFBQUFCSlJVNUVya0pnZ2c9PQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9wYXVzZS5wbmcKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlW
Qk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUF5Q0FZQUFBRnBPTGduQUFBQUNYQklXWE1BQUFz
VEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdS
NWNjbGxQQUFBQTZsSlJFRlVlTnBpL1AvL1B3TWpJK01tQmt6UQp4Z0tTNk8zdDlVV1hXYmh3b1RB
VGlQSDU4MmM0RGc0TUFOTi8vdnhoWUFGSmZ2cjBDYTdqejkrL1lQN3YzNzhoa2lDVk1QRDN6MTlV
Cm5jaVM5WTJORUJPQWtveEFXaGVJVzdHNGxnRWdnRUNTbTdCS0FMM3dINXNFQzh5ZSt0b2FNTjNZ
M0FLUlFIWTZzbGRZa0YyRzdGSzQKUkdSMERIR3VBZ2dnc01TVUtWTjhHWWdFYytiTU9ZWVJPb1FB
S05Rd1lncUVLOHBLNFhSNFdDaUtIRHdlUG43OGlHRWlUQXlrQ0ZrZQphOHlDUUh4aUVncU43anlT
L1FTeUNTQ0FRS0UzQjRqRmlOWEVDQXpxL3d3a0FKYWZQMzh5a0tUaDE2OWZKR2xnQXRtQWpFRnhB
Y0l3Ck5ybzhUaHRnNHVqeUxEOSsvTUNxQVNhT0xvL1QwekJ4ZEhtU25jUVlGeGYzbjZiQlNuTEU0
Y3lpdUFCQUFJRVRIeTh2cjNSM2Q3Y0gKQTVVQjBMdS84L0x5ZG9DeWhWaExTNHNIcWQ0aEVyRHE2
K3NMczJDTFUycUNmLy8rTWREUEVrSkpwYW1oSHM2dWEyaEVFWHZ3NENIRAp2QVVMcU9zVGRMWC8v
di9EcS84dnNKcWszSkovK0MyaGlrLytFMnNKS2RrWFhlMC9ZT01FbjM2aWZSSVRGMCtVMklBbFlY
akV2M3YzCjdoTTNOemNmTFN4NTgrYk5KNEFBQXBWZEZrQmNSU09QdkFJMktGUEFKZXFrU1pNODJO
allXS2x0UTJscDZRNWdjK0VwazRHQmdUQVQKRXhNcnFCRkJiZHplM2c0cTJjVllRTzFqVU9UUUVv
QXRBZGxLYzB2bzRwT1JFVndLOHZJTThYR3hZUGJCUTRjWURodzhCTzlISVBjbApLTElFVlBZZzJK
aHFpUWxxZ3BiOFJiTGtQN0NDSXNzU2tFdnh4UW15SWRqVUVoT2ZCQ09lYXBiZ2o1Ty8xSW1UZ2Zm
Slh5cEUvUEJKCndvVGk1T3JWcXhpZFdHeWQyaEZTQ2hQSzhVUEhKMi9mdnYxRUs1OTgvZnIxRTFt
ZFRESkFOVUNBNFIwZkcwS2dHaHhhd0I0MmEwbEoKaVpXb3FDamZVSEw5NjlldlAvWDA5QndETmxK
L2c5djB5c3JLZklLQ2dueTB6aTNVQmlBM2c5eCs0Y0tGdHl5UW9wWDJ1WkZXQU9SMgpjRzRmVmg2
aFJ5Rk15MkdiNFJjamxIcEVIdGl2aUl1SnhoQS9kUGd3c0o5eEdNNnZyY2Jzd2o5ODlJaGgwZUls
MVBNSUpVa0xWeUFRCmsyUXB0WnVxTVlMYzRFY1ZKMnd1cFhaVDF5Tkk3WDFVUy80Uk5wZmFIaGxO
V21pZEk5S1RGZ1AxWW9UU2VtUWdZd1NsSGlHMnQwZE0KVDVMVVBQS2ZnVHAxMlBBcXRZWk4wcUkw
VkVBelRKMWQzUmppYjk2K1JURVhtNXB2Mzc4Tm5ub0VORmwvOWRvMWd1cUlVVE9nOWNobwpmMlRV
SThNNGFjRVh5YkN6czdNNk9UazVNek16c3c0RkR3QlQwTzk5Ky9idC9mbno1MjhnOXhVamRKVWFh
T0l5aFlHRVZUK0RCTHdDClJRVFFEeWNBbTNFdUFHQklmcElBQUFBQVNVVk9SSzVDWUlJPQoKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9u
X3BsYXkucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmlu
YXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3Bl
cnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9p
bWFnZXMvYnV0dG9uX3BsYXkucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAg
KyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRElB
QUFBeUNBWUFBQUZwT0xnbkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBCkdYUkZXSFJU
YjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUJSRkpSRUZVZU5waS9QLy9Q
d01qSStNbUJqUUEKRlBkakFVbjA5L2Y3b2t1Q3hKbEFqRStmUGpFRSt2c3phR3BvZ05rZ0RBSmd5
WThmUHpMOCtmdUh3ZDNObGFHdXBock1Cd0VXbU02LwpmLzZBQlZMVE0rQkd3eVZyNnhzWU1PekY1
Vm9naUFRSUlFWWdNUWVJeFRCMEFiM3dINHNPQmlhWWt3dnljdUhPQjJFV21GTkJBT1IwCkVDZ3VM
V05nZ1hrUXc5a3dpZkRJS0ZUTGdSaWJjeGtBQWdqczNHblRwaVV6RUFteXNySTJnMEpIRE5rTlVS
SGhETXRXck1TckVSNmsKTVBEbjcxK0c4dElTT0wrNnRnNHpiR0F4Q01OL29KRUZBMzYrUGlqeVdH
MzYrK2N2UTF4Q0ltbk9xNmlxSWhnWUFBR0VMeVZnQXhQQgphUmtZM0w3RXFONjVjNmNTMkZrL2Yv
NGt5bmdIQndkdERBM3M3T3g0RGNEUUFJdVRwcFpXNGpRZ0o5SG5MMTR3VEprNkRUTVNmL3o0CkFj
ZklRRkpDZ3FHMXVRa1VpbkI1Z3A3T3ljc256a2s5dlgwTU4yL2RJdXlIYjkrL00yUmtaaEVmU29s
SnlZVFRFN0VSOS9mdjM5K2cKbk5nR3hEckU1a1NBQUNJMThaRURyckRBTEpnMGFaSXZMV3pJeTh1
RGhCVXA0VVVPSUdoSmJIUVVnNXljSE1QTFY2OFk1c3lkUnh0TAovdjJEMUFIaVltSU0xWlVWY1BH
MmprNk1yRUcrSmYvL1lSV3ZxaWlIc3pkdjJjcHc1T2hSU256eWo2QkxmWDI4R1I0K2VzaHc1ODVk
CjhpejVqOE9TNzhEc1dsUlNTdDA0QVlHang0NHh6SjAzbi9vUlAzM0dESWJYYjk3UU5nay9lZnFV
NG56Q0RNU3ZnTmlDaFlXRmtZZUgKUnhoWU9ERlFBLy82OWV2M3BrMmJ0b0VzQVFnZ1dObmxER1Ru
VXptanZ3S2FuUUpyMjVCVW9wSUtRSzFUY01zcUtTbEoyOFRFUkluYQpGb0FhV3lBZmdTUGV3TUJB
Q2IzNVEwVWd4Z0t0aVJob0NjQ1cwTkFYaUFZSHZxVG80ZVpHZGpJbTJpYzZPdHBndkdUcE1tQWgr
SWo4CjRDSW1UbUtBbFJlb1ZPanM3cUZ0bklDYWs2Q0czb1VMRnhuV2JkaEFmWjhnQXdNRGZUQ2VB
eXlSNzkrL1Q5dlVsWktVQ0s2QzZ4dWIKQ0tjdWtDVzRNQ0hBd2NIQjBObmV4aEFTSEl4VEwxVXk0
OU5uenhpV0xsdEd1OHhZV2w0QnJvcXBIdkVnc0hyTldvWjkrL2ZUcGxoNQovT1FKUTFOekMyMHlJ
NnlMOHUzYk45cGt4cVhMbGpQczNMV0xzbElZbjAraVkrT0dSbEZQdjBvTFdMcitabVptWnFWcHBi
Vmx5NVlkCm9IWVN0ZHBjSUh6djNqMVlCM2dpcUxYQ0RjVExhZFZmQkRhSnFnQUNETmE0QTFsVVRj
djJGNjA4QWNTdFFEOThCWVVXU2dzMU1qSlMKM2RMU1VwR05qWTExTUxvY2xIVDI3ZHQzYThPR0Rm
ZVFoNTFRaHYvNit2bzhCcXNIc0htb3FLaG9CMFlQQ054VEFlWkdXbWQ5YWdIMAprZ1BGSTdRdUpH
bGVOaUtOWTVGc0FEOGZIOE5IcEhIWFFlRVJjbUxFdzhPZFFVNVdGdHdNUDN6a0tNUHBNMmVHcGtk
QXhUZXNxZS9pCjdBVEdJSER4MG1XR1hidDNFejFPTmVCSkMrWVJkS0N2cHd2R0lQRGk1VXVHSFR0
M01qeDQ4SER3eHdnK0lDRXV6cEFRQjJtMmdXSm8KMy80RERNZU9IeDljTWNKQWhFZlF1MHBlbmg1
Z0RBTG56cDFuMkx4MUs4VkprQzR4Z2c4WUdSbUNNUWc4ZS82Y1lkT216UXgzNzkwYgppRHhDdmVR
aEpTbkprSkdlQmk3NU5temNSTEJyT0toaUJBUytBNVBWOXUwN0dBNGNQRGlBcFJZRGVSNTUrdlFw
dytxMTZ4aHUzNzQ5CmRFb3RHRGgrNGdURHFsV3J3Zk53UTZZZUFTY1pvSU0zYmQ3TXNIdlAzcUZU
czhOSFFSNC9abGk2ZkRuRGpSczNoMTRUNWZDUkl3eUwKbHl3bGE1UmwwQ1F0VXNlZ0JtMk1ESnYr
eUdEeUNHZ2VEcnlRNk1hTkcxZFZWRlMwaDRMRDc5eTVjeFdKK3dvMkhFVFRxVGhhRHduQgp4N1Zn
QURwNUdjbUFaYW5YSUFPZ1ZMUWM2SFo0QlFVQXV0NlZuSlBiV2lVQUFBQUFTVVZPUks1Q1lJST0K
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1
dHRvbl9zb3VuZF9vZmYucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9y
bXBsdWdpbi9pbWFnZXMvYnV0dG9uX3NvdW5kX29mZi5wbmcKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
Om1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFB
QU5TVWhFVWdBQUFESUFBQUF5Q0FZQUFBRnBPTGduQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3
WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQm9o
SlJFRlVlTnBpL1AvL1B3TWpJK01tQmt6UQp4Z0tTNk8zdDlVV1hXYmh3b1RBVGlQSDU4MmNHVnhj
WGhxU2tKREFiaFAvOCtjTUFsdnowNlJPRHJwNGV3NnVYTDhGc0VQNzkremNEClhHZGFXaHFEc0ln
SWc3YVdGbHduQzB3U0JISnljdUIyZ2lRWmdiUXVFTGRpY1MwRFFBQ0JKRGRobFFCNjRUODJDU2FR
UFVhR2hneEYKUlVWdzU0TXdDOGlwRG82T0RMZHUzZ1E3RzBVSHlObHE2dW9Nems1T0NCMHdKMGRH
UmhMbktvQUFBa3RNbVRMRmw0RklNR2ZPbkdNbwpvWU1NVWxOVEdXYlBubzBoamhHa2lvcUtESGEy
dGd3L2YvNWtZR1pteG1vWVhOUEhqeC9CQXRIUjBReWNuSnhnOXRPblR4bENnNE1aCjVzeWJoNklK
RkxNb05tVmtaTUFsZ1RIQTBEOXhJbUhuSVFOUU9HTURJSnNBQWdnVWVuT0FXSXpZMEdNRUJ2Vi9C
aElBQ3lpRVNOTHcKNjljdmtqUXdnV3lBNGJpWUdGQStaS2lvcUdCQUZrZkdjQnNFQlFVWmpwODh5
ZUFDekhvZ2dNdG1saDgvZm9BWjl2YjJES2FtcG1EMgoyYk5uR1dEaU9EME5vc0dSdzhMQ1lHeHN6
Q0FwTHM3UTF0R0I2UWVRMVNDOGFORWlocXlzTExBbUVHaG9hbUtvQXZvRkpnL0RUT2llClNrNU9a
cmgrL1RxWVhWbGRqZUZweG9pSUNOcEdITTRzaWdzQUJCQTQ4Zkh5OGtwM2QzZDdNRkFaQUFQcGQx
NWUzZzVRdGhCcmFXbngKSU5VN1JBSldmWDE5WVJaWVhOTUsvUHYzandHbkpiWTJOZ3pDUWtJTUd6
WkJncCtEZzRPaHVMZ1lYT0pPbmp5WmRFdXc1WU85Ky9ZeApPRG80TUNRbEpEQzhmZmNPWENPQkFL
amlJeVhINHZSSldGZ1lPSXZBd0pldlg4RjVqSTJWbFVGR1ZwYWs0UDM3OXk5MlMwQVN5QUJVCi80
QUFxSUlDMWErUkVSRU1DeFl1Sk5vbjREUVBMS0Z4MWo3QTRoSmNQOERBMjdkdkdVNEJpeHg5WVBD
OUJGbzRhODRjdkpiczJyWHIKR0F1K3NnbTVoQWZtSXdZaFlFSUFnVFZyMTRLeEliQmVKaFEvZUZN
WE9nQm1LakFOaWl1WStoTW5UbENXaEhHQlk4ZU9rWlJQNEJILwo3dDI3VDl6YzNIeTB5SXh2M3J6
NUJCQkFvSWkzQU9JcUdtWDRWOEI4bFFKT1haTW1UZkpnWTJOanBiWU5wYVdsTzRETmhhZE1CZ1lH
CndreE1US3lnS29mYXVMMjlIVlN5aTdHQWlnbjB6RWR0QUxZRVZuSFMxQkphKzRRSlpna3hPREF3
a0dpMU1BeTNCRnVrZ2RwUXdBUUIKNTRQYTRpb3FLaVJIUGw2ZmdFQk1WQlM0Y016TnpXV1FsNWVI
NTJDeWZJSk5jc2FzV1dBRi92NytERnhjWENqRkJLbVdZSTE0VURjQQpCTVFsSlJtZUE0dnpTNWN1
TWVnQmkzWldZS1ZGVGlKaEFaV1M2RWs0SlNVRnpnYVZ1cUJhRVdZUk9ja2RhOFNqQTFoVkRMSUlG
RWRVCmlYaHNBR1pSRHJEVkMyb21VeVVKZi8vK0hhZEYrY0RVQnJLSUlwK0FraXlvdXp0anhnd01p
NXBiSVIzcm9vSUNlRUlnT3dtRDhMbHoKNXhpYW01c3hhanBRNXdCY2xBTWJlMlFuWVdUdzRNRURz
TTlnclVhWTJ0cjZlc3BTRnpvR05VMHpNek1aaUZHTExVNklMb1ZCSGVMWQoyTmpCVzlSanpmRkRz
dEppQWJadFA5SEtKMSsvZnYxRVZpZVRERkFORUtCZDgzbEpJSWppK0FzU2I1dXlHQlo0VVpRNm1K
NGxpZ3p4ClVJUUVucUt6aHdnVXZQa3YrRTlFUHluc0ZpTFdIcVdqcHhKRVBZcHJIaW9QMFY2YTky
cVhSWFRUYk1pdEhneW9NTFB6ZFg1OTMyZlcKa0krWktETDBiN0VNMjVKT3AwTU9oME13VSsvYjdm
WlROcHN0c1NXc2tLZjNlRHlDM1c0WGVLK1c3dzdzTS9hOVhDNTNwdFdjbWZkcQo1QlhZZDFydHYw
b0l6MDNZNi9WQ3RWcmx5b2ErUENMQlFBRHU3dThORVVFOEhpY1JpTEVybGNwa1RTM3MyTXJ5c2lh
R0pmNXdsYzlyCmdoQ0dKUklKRUFUQmtBUnhGVExNMUVKNGkyVnRkUlY4UGgrQm5OMmRIWGhrVm1s
dWZoNXNObHZmQi9IY0RjZGE3TmVTUkdWell3T0UKbVJueTVMVmFqWURld3VJaVdlTWZHNUhQSGhh
THhTaGgwQXduU3hpd3FMRHd1ZHVGVjBXaDlFZ3ZpUGVPT1BMVXd0eE4zL2xCOUxOWApFRTY1aVpw
YWFnV2o2Q2VvOC9CQW9PSHMvSndMb2gvNUhCbEdTRDlCV0k5NU9OamYyd05abHVIazlCUmV2bEdR
ZW82UWFXUitSWXhHCm95R2pDcUlvYXJoWmhTRklXajRMM0tLUmdTLzUvZHB2TFNibzZQaDQ0STNh
S0ZFb0ZFcHNvK21RRUxmYkxVWWlrZEJYR25LNVhIU1IKcUFmNCtrQ1luOGxrM2hIVDFoWkJmVTFR
cXdVSGg0ZGpDU29XaTZWNnZkNFoyNkkwR2cwNkJGRVE1dmY2VVZORGJUdDNlVWxsbSsyQQp3V0FR
bXMwbWRObGErakdMTWdoVTRCVVhRajBrSTNnNElyTHMxL1pGTGtkbG90MHZjb3BrTWttZlU2a1VP
SjNPeWJNb293YmVSLzNuCkkzOWVpTm55OVY0aDJrc3lWcXZWRWc2SDE5bDVZREdEQURhREZFbVNi
cGp0VWRoWGVlcmpMVFc4dU1RcmhWbVREWWlNQThFMDNMNEIKaHJkTXFYYXdkeVFBQUFBQVNVVk9S
SzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9p
bWFnZXMvYnV0dG9uX3NvdW5kX29uLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxl
IG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4v
cGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9zb3VuZF9vbi5wbmcKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBL
R2dvQUFBQU5TVWhFVWdBQUFESUFBQUF5Q0FZQUFBRnBPTGduQUFBQUNYQklXWE1BQUFzVEFBQUxF
d0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQ
QUFBQm5WSlJFRlVlTnBpL1AvL1B3TWpJK01tQmt6UQp4Z0tTNk8zdDlVV1hXYmh3b1RBVGlQSDU4
MmN3VGtwS2dyUC8vUG5EQUpiODlPa1RRMzE5UFFQSUNpOHZMekQvOSsvZkRIQ2RhV2xwCkRQLysv
V09ZUFhzMlhDY0xUQklFY25KeTRIYUNKQm1CdEM0UXQySnhMUU5BQUlFa04yR1ZBSHJoUHpZSkpw
aVRpNHFLd0xTR2hnYVkKWmdFNUZhaUxBZWFOdlh2M0luU0FuQTF6WlZkWEY1aG1qSWlJK0UrU3F3
QUNDQ3d4WmNvVVh3WWl3Wnc1YzQ2aGhBNHlTRTFOQlFjagpPc0FJVWtWRlJZYVVsQlF3KzhPSEQz
RHgxdFpXaHVycWFyZ21jQ1I5L1BnUmpLT2pvK0VtZ2lKTVUxTVRMUDc5KzNlNEdsRE1vdGlVCmta
RUIxd1FLeTkyN2QyT0lZemdQR2NEQ0dSMkFiQUlJd0RvVm5FQVF3c0RzNGtmOFh4VitmV3N2OXFC
VzR1c2E4V2NYdHFKKzdveWcKN0M0SUoxd2doQXlKSVJNSDJYczNmLzNLM3RHby9zQ0drVklLYkRY
VVdyY2FUcHh3OVNZM2NNN0JFeDkrNGdSMHhoaHd6c0ZhMjE5QwpESldHMFJnRG80N2tuSHVCbEJL
RUVIUDB3REZTU21jK2w4YllqMFBJeksvNHlJLzI4VzYwZXU5NzB6aWVVZ3Bpak91bHRkYVFVcHA1
CkNPRk95a3BaZnp2Y1VxSXIrd29nY09MajVlV1Y3dTd1OW1DZ01nREcyKys4dkx3ZG9IQVhhMmxw
OFNEVk8wUUNWbjE5ZldFVzVMaWwKQlFDVkZrUmJ3c0hCd1ZCY1hBd3VjU2RQbmt5NkpmaHlvSVNF
QkVOV1ZoYWNENnFWME5VSEJBUXdHQmtaTWRUVjFSSHZrN0N3TUFaagpZMk9zbG9Jc2dhbnY3T3hr
bURoeElzUEtsU3NaN3Q2OXk5RFUxQVRQd0REdzkrOWY3SmFBSkhBQlpFdEFRRTVPanVIKy9mdmdZ
TVJtCkZrNmZ6SjgvSDR4QkFGaGNNakF6TTJPMVpNYU1HUXdYTDE0RXMwSFp0NmFtQnJjbCtPSUVW
a2dBOHhHRGtKQVFBN0w2MDZkUHc5V0IKTEtFNGRRRXpGWmdHeFJVcFNaNGtTMkRnMkxGakpPVVRl
TVMvZS9mdUU3QjQ1Nk5GWm56ejVzMG5nQURVVjdGcWhFQVFGZkcwdEFpawoxVSt3ekNmRVVyQVM3
TkpZQ0RZMlNXbGhaeUg0TC9rS2Y4REdKb1dLemFGOTlpMnM4UzY3Um8xQ01qRGNpblA3bkdIbXpR
eTQ2NG5vCjYwa0YzNUpFZWFHTW11ZjVzNnFxbDZNUjRqaCtKK1BDaDJ4WjFvTXN5eGYwbzZNMVRW
TXcrNk9DdkY4cXZpT0VnZ0QxZEpDelBaRVoKeUJwMUhHZTFMZE5ONGZKOVh6SU1ZMWRvVjRVcmlp
SkoxM1VoUTJQa212UFk1bkNCV1JrQUE3bFgyN2JwMENjS0Z4Y0VQUUtLcVhGTwo4M01Rei9Pb0Rj
NFk0REVvQ2tIQWt2ZEZoRDBEZWcvQUpuOG92TVAyaUhQWGRmUWRLZXh2ZDAyZThGNkloTmtVUlNF
UnByajVqMm1hCjNMczIxd216eFZmUG54R1JxcXE0ZDNGVEdNL1liUkJubmljUTEzV2xwbW0rUWtL
OEV2VWFyaWRoR05KZk12M2RiR0x6TDhjNmpOVU8Ka21VWjlVUVVrY1VVTHN0U1NwS0VtMTNETUV4
blRkUG84cmtwaGVkYTEvWGttYWhPc0NLM2Jic004bE5md0V3VkJJRzB4dlpYMllXRgpHUHoxWjZs
ZVlSWC83NXVXMHZmOTlTeFB4bkc4N2xveWQ4amJwd0R0bXI5cUFrRVF4aTlCRVN3T0xSUXNyTVRH
emtZa3BXa0ZLNS9CCldyRExLd2lXTnFsOUFzWEdhQmRqSnhaaXJZVTJhVklJWXBQN0RkbGpGZlZP
NHlXNUpBTmJMYTR6T3p0L3ZtL3VKRC9tSTNtUTI3SVEKZHJCV3E5M0ZZakhUVDlwYlpleXRYcTgv
V3lHOGxaNCtsVXFaMFdqVTlEcGFyaTNvak83ajhmZzFvRUNnMTlIb2xhQzdSUHV2TXNUTApKSnhP
cDZXQjhaSWI4dFFqNVhKWmpJQ2VuczFtL25wYWtHR1ZTc1V3VGRNMUUzUjFRejd6dENEY2dCQTZm
dEgveU0zWnVWeE9Sa2N3CjQ4MW0wMWl0VmwvbmtVUWlJUzN5SWZqaTVCSEdMSEJ3U29iRG9hREJl
RHd1WjdiYmJXTTBHbDNmRUNoTUdDNjc0UXdFYkJMZjZZLzAKc3pPWmpOMS9ydGZyblRhKzBXZ0ls
WnBNSm8xaXNTaUdMcGRMVjRiYzZ1NC90YmgxRkNjT1dHNk0yTWQ5ck1sa3dyeFNqQXVIdy9LYwo5
UDFPcHlPY0kwOHNtODA2Nm5XMlI5UVBMZ25HL2JNWGk0VW9xaEtFdm05MW1nSUh6OVhMZFIyNTFC
QWR2eXFwVnF1aUxFcmlBWDJmCllSWGVabys0Y2RKcnA0NjRTWkVFbnc2YUNkWlNxWFFXMmtjQTZ0
dzY0emptRllxL1FQTDV2SXdTa09sMGFzem5jL2VBeEswTGdiTXMKSlJTNWJyY3JnY2tnOFZqbTJq
OGJMSDVvNXNGb2d3RWVuc0lJZUpRdmJWSElMQlJCREFMZnF5SEJxYWQxU0ZxdGxwMmhCb1BCOTdV
bwpFQldNdU1oRXBOUklKQ0szZTg3WnZWN3Y1M1MvOEJUUW9DcW9xZnErYVZHT0NmT29menp5NXcz
eEcxN2ZOOFQrU0NZVUNnVUxoY0s5ClZRK0NmakRBZWtIYmZyLy90TmxzdHBTNW00K3YxQmhjOHVs
UzNHY09vVUkvV2phOHZBTU5iSFJMemx5bExnQUFBQUJKUlU1RXJrSmcKZ2c9PQoKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZm
ZXJpbmdfMS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBi
aW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18xLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNV
aEVVZ0FBQUNrQUFBQXBDQVlBQUFIZlp6QmdBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFB
QQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBOGhKUkVG
VWVOcGkvUC8vUHdNMndBUmpkSFoyClRnTmh1QXhJUjBkSHh6UVFEY0t2WHIxNkREWUZtUVBDTTJm
T1hBQ2lHV0Yyd0l3cEx5L1BBdEdNdUN3SENDQ3NFa3hJN1Avb2dpQUIKeGxtelppMkFPeEZtKzM4
SVFMRU1yQnJkVEVZWUF5Q0FjRG9MYnpnaEdmMS8rL2J0bTJGc1ZGbWd5UlVWRlIwZ0YzMzY5T21O
bVptWgpEMGdNUkQ5NjlPZ21TQndxRDFHTWhNRmcyN1p0bS84akFGeWVKRGNEQkJEUmlwbklDZ1ZH
UmthcHg0OGYzd1JoRUJzakJFRFl6YzJ0CkJCWUtJUHdmNGlaam1EeUt6NEVTYnVpaEFSUmpneXVF
QlF1VXhpckdBUFUxRzFTM01Od3FCZ1lINVBCa1FKSXdSbmRqWW1KaUhUWTMKZ2hSTGdhSVFoRUZz
c21LSDZBQUhDQ0NTNHB2Y3RFeGJROTNkM1V1UU1na0dUa3BLcWlQYVVHZzYrNzl6NTg1dUtOOGRt
cWNaSVZ4RwpSK1FTRGNobnd6QVZMWWt4d0hMa3o1OC92NkhMb1JWeWNBQXFBR0ZKRXoweHNVRkxS
emhBS3FNd01DekJJWmVvV0JNZXpQRFMwdEllCmFPckV5REJJU2Z3L1ZGNkJvS0hvV1JVWFFNNFM2
SGpvcEZPQUFLSzZTNWtHdmJmcGF5QXd5L2tlT1hKa3o2OWZ2NzZCTXR2NTgrZVAKZ2NUd21vZ3RU
WUhLYnZTY2hDVUxDbVBWaXkzblFQTTNITUNLY1dReGFIWWtiQ0J5Z2JBU0NJQVc4Q0piQmhJRFdR
aGtCMnRyYThmaApOUkJXWGNGY2hTdWJBWUV2VEIyNm9lZ0tqWkVLQVRjY2hqbWdoeW15b2VDY0Fp
cEFnVFhyV3BCcVQwOVBIeEFOYlBac2dmSlJZaFhhCkhNSlE1K1hsRlF3MDZ4ZmNacWd0LzlHS0tn
ZENyZ1N5clhCNkdkbFFhRGhoRFVQa0dFZU9ORnpKSmhpRVFURUphbUJnaTJXME5odmgKd2haVzVP
TkxoOUNrdzB1VWdWVE5LZWpwN2ZEaHczdEFyZ0hoYytmT0hjTVh0alNwQ2taZ0FRc1FvQjFyeDBF
UUNLTEJHSXdGRlpXeApzZklDV2xGaFE3Y1ZkNkgzQUY2Qk0xRVNENkFINEFMT1M0WmtISGRoRVNq
OGJETFpoRjNaSnpQejVzM09VazQvb2p6L0pNamw2SGdKCmdvaW1EUmdEaVU2MjRxVWJXVU4ycDVC
cVJoM1NsZlFPOG9EMk51QklUWG11SVhqVzJPaXY5OHdCNEdJSVdxMEpoZzc4SHU5eDBhdk4KRnA0
dXpZaTNxN0lzejJFWXJ1VWFkZHpYb2lndTZIN0lqbVJibms5NGpuWEhhK1BKM0ExWllYTXJ1Ky9n
NllVOTdwajRDK2F0cUVMQgpRajJYSGRZN3hXdUg0cVVCb29FYUdsdFFJYm9GbE5XMUM2dzE5bkIx
d0dac2VnQUhpajFSRDdqRUJjNFg3RXZtWWxPWHB0RDlyZFptCkZwQ1IrRU5wWGRlVlJRUG1Zay9z
SzM0NndUSzRkQ2gxdGZkM2NyRCsyWStKeVNld0RDNUhBbkFYa2ZnbWp0U2VTamFhMlhrU01jcUoK
bENIYjJXV1lVM3c1cldlVkZEVmZRK1lmVVJaSDYwa2xNT1JkNzJRQzR5OTZmd3JrQStOOUxlQ2pX
R1RnQUFBQUFFbEZUa1N1UW1DQwoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMi5wbmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5u
b3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9
IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18y
LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNrQUFBQXBDQVlBQUFIZlp6QmdB
QUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWla
U0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBL1ZKUkVGVWVOcGkvUC8vUHdNMndBUmpkSFoyClRtTmta
UFFGWWphd0FFaEhSMGZITkJCOTd0eTVZek5uemx3QVlzTjFuRDkvL3BpaG9hSFYrL2Z2djhGMUFB
Rkl1eTlNSndnejRySWMKSUlDd1NqQWhzZitEWEFSaXNNQUVvTHJBTkJOT0R3RzErY0ZVNDdRSUlJ
QndPZ3R2T0NFNTVQLzI3ZHMzdzlpb3NsQ2ZnMXdLQ2pzawpQc08yYmRzMi80Y0FTSWdoUzBJbC9q
OTY5T2ptZndSZ0lCaVUyQUJBQUJHdG1JbXNVQUFHc3RUang0OXZBbWtGYU1yeHhWQ1lsSlJVCkIz
VEdVd0VCQVdFZ2x4ZkkzcFNZbUdpSU5haUFYRGVvbTZXQTJBSFo5OGllZ2NjcldvUXdZbk9qRzhp
ZFVMWUQxbGh5YzNNcmdWcXYKKytuVHB6Y2dOdENOZFJneEJFcllVS3dBaWlHUU84bUtIYUlESEND
QVNJcHZjdE15YlEwRnBRQ2tUUElmbXEyTmtmbWdvZ1JlOE9ESQpTTEFZa1BxUG5ERWdxUVNySEZS
ZURjTU1kQUZZWm9QR1BRTXVERXNiVVBVb2NqaTl6ODdPemtWMm9CTHlQdFNMVWtqeWJyamtjSG9m
ClZHUkRDeWxramNib0ZpRm5DWFE4ZE5JcFFBQlIzYVZNZzk3YjlEVVFWQTJBOGpPc2dvUVd3YjdJ
bUdCQ2gwYVM4S3RYcng0anAwRlEKNVlsVWdjTFNhakRCN0FpMGxmZm56NStQUlVWRlpXQmlOMi9l
dkhqcDBxWEh5T3ArL2ZyMUhVanRJdWpDbFVBQWN3R0lEY3BGV0twNAp1S3Z4WmtPbzV2KzRTaGVR
QVNCdklqY0xvTFVwVGdPTmtSUzY0Y3EzU0xVc0xNL2pERU1wSlBZRFBBbmdGZzQ5R0FZK1EySXI0
REZRCkRZY2UvR0VJQ2k5c0FVOTBHSUl3dE5HTE5TWkJtcEZUQWNGWWhya1NtQTYvSVdzQ1dZTFc0
UHNQVW9QdU9sejFqQzhiR3hzbnNvQ3MKckt3d0VNUEQ3ZlhyMTArQTlaQXMwSURQNkpwWnNCajRD
OXAraG9HZlFGZm1mdjc4K2UzRml4Y3YyTnJhVGdRYXRKbWtSdjFvQVVzUwpBQWpRanJYaUlBd0VV
VU53S0FTQkE5QWFnc0NoVURnVVo2aENOeWtXRElJejlBQ0VJeUJJbXFDUnZRR0tDMkJnSHBtU3lX
UzdaV2tKCklUREpCa1FaWHVmMzN1eGI2UFFyNlBrblFkWksxd3V4RzMyME1USEUxRDFUR1IwcVEy
bVR4am5jQWpBVGpEZzU4dlE4QmU5b3h0UUcKZldyUzh2clVIQ0xXSkVFN0kyQ1JIcCt1QmgzaCsv
NlN2dUlsTHBWRUVwSFQ2a2ZTV3hSRks3QTNvc2Nwdng5YkpPRVBmcC82L3ljQQpqck9OU0JxTG9h
N2xkdytRNGw3cGFtQy9TU21RVUJWSmt1eTA4ekFNMTFLdDVXblBJQWptRUJGOHBWWG4vY2U1TG90
QWpuUnpzSG9aCnVEWWMrK3VsYVhvMGJJbldhQmJPU1U3Slo2MUV1aHVjeGltbnRWbmdxNDRHcXp6
ZHRzWkJVMlI3T00vRmpzVkhWMnJQU2h0SEFzMGIKUVJJa3kvY0JuekVpcnZYc1cwYVF1SENlbW9y
ZWhXR3k2S0hMaThyRHFYR0lhWHFVMWowOXZQVThyLzlLM1VON2I4aWd5MG5JdCtJNApYcEMvODBm
MEpJRVlJa0xBSmM3SnRGMzhSZThmWkk3ZEFCS29LaEhXQmd4eEFBQUFBRWxGVGtTdVFtQ0MKCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRp
bmdfYnVmZmVyaW5nXzMucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9y
bXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMy5wbmcKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dv
QUFBQU5TVWhFVWdBQUFDa0FBQUFwQ0FZQUFBSGZaekJnQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VB
bXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFB
QSs1SlJFRlVlTnBpL1AvL1B3TTJ3QVJqdkg3OQordkdzV2JNV3dHVkFPam82T3FhQmFHUTJFd011
Z0t6eTFhdFhqMkY4Umx5V0F3UVFWZ2xrOC8rakMvNDNOemYzaFVrd0VUSVR4R0JFClY4a0lZd0FF
RU55OXlMaWlvcUlEbXppNndQK1pNMmN1ZVBUbzBjMy9DSUJWOGY5dDI3WnRScGFFOHYvak5Ca0VQ
bjM2OUFaa0F6NlQKNGJpbnAyY1NObkdBQU1JWjd2aUNIQkpHakl4c0JCV0NGQUZ0K1BuNDhlT2JR
TFlDMXJTUW1KaFlCOEl3VDRGb0tCOHpxSUQ2SE9BUwpFUFovYko3NWp4S05lT0lhNUVZM2JHd1Vo
ZTd1N3FWQTAzZisrdlhyRzhna29Qc3NRR0pZRXdvUVNNSGlIY2htSXhqZzBHRDZSVERoCll3TUFB
VVMwUWxJQUUwRmJnVTRHbFFmYnQyL2ZUTFNwMkZJZzFQWEcwTElESzBCT0RZUnlIVGowMGZRemdQ
SUpMSk1ocFpyLzBCaVMKSW1nb0xEcWg2Uk9uVDJEcEY2b2VSWTZKZ1JhQWtQZUJmRGRZbVFJS0Jp
QmZtR1R2dzdDYm0xc0pya2dDUlNBb0lvbU9LRndZNUZKUQozWUNlZFNncXYwZ0JBQUZFZFVPWjZK
NDlRVUJIUnljT21FMkZLY3FhTUt5dHJSMkhLN21RSE5zd3cyRGczTGx6eDRBRys1SnNJQ2d4Cm95
ZG9aQUJOUnNMRUZoeThQMy8rL0FiQ1FIWXd6SkFiTjI1Y1FEWVVLczlMMEVDa2FoeVdPeHhnWVFo
SzNDdUJBQ2FQM2dUQU1CQnEKNDMvMDBnVUlySkJkZzl6Z1FIY2xScUdMcE5BQlQrSHNnS1RPR0Yr
UkpvWEV2b1VudGQzQ29RZkR3R2ZJNlJsZldzZWhoK2d3NUFXRgpJOGxoQ01Mb3NRZzFUQW9XcnNq
eVVEYkJkTWdHU21QSWFRN05SY0ZJNlpTTjZKd0NiWEJqQlVnNWliUzhES3BmRGg4K3ZBZFc4NEVB
Ck5IOHpVRlFWd01LUWtHR2tHQ2hNakdFMHFWZW9YZ1VBQktqR2luRVRCb0pnd3crUUc1U2FEN2hL
aHg5d1ZacDh4QlUxWFI1Q3cxOW8KWEVaS0VZbkM2VklnM01DT3RDZXRSbWQ4NUphUVdGcFp4dlo2
MkwyYm5kMjdWTDZIMUtuc2Z5eVNjNnpyZURoSUFFUEJsVDMyTGl5dwprK3VGSjhoWktUaForYThD
YmxOVjFaUCt2QmQ3bG5zSE9YK0pIV1JKZmJ1SzBWekR0cnpHVGx4K2xXZERxZ3k3Y0VYa0MzUWVZ
RGFjCndidW00YzQrQUZqZm43dUNSQVE0YXVaandZTFZpSzFndUU5ekNWWk13UVVrSEhFbGkyVlE3
aTJ0eElndEdndE1QR2RMS0ttd1VBUVMKemlFKzJUbEdQRG50QjVkdEhRMmRFK0oyV1FJeXNGT2s3
MXF6TmVHdjV2VG5SSE9LSjAvRE1CeC9vYWljZmt4QlNBTzBDa2V6YmR1MwpXNmtFeitNOTlnWC9S
ZW1PS2JlQ2lqWk96VHJKTlBkMk9sYW5OZzc4eHFIQVhTaklybEdOTElacUs5c09LZGdBS21LR2NL
VWdKdk1VCkhVMGRDdmFGaXNIY3ZlSllLa0hVOE9IVU1oZ2o3bHgxNndKeUJEUm12RFhBMjNSSGNM
ZHlLdHVzbER0MHl2b0JpeEt0Ny92UHBtblcKWGRkdGVRcjdKNVI1RkwwZTRQNVYrM0FCWnR5K2I2
V1JRMzRBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfNC5wbmcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpD
YW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlw
ZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmlu
Z180LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNrQUFBQXBDQVlBQUFIZlp6
QmdBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpH
OWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBOU5KUkVGVWVOcGkvUC8vUHdNMndBUWlHQmtaCjJU
bzdPNmVCTUZ3R3FzUDMzTGx6eDBEc2pvNk9hV0F4WkE1SUVxUUlMZ0dUQkdHZ0JCdUl6NGpMY29B
QXdpckJoTVQrank0SUVtQ0UKU1REaDlCQ1NLa1owbFl3d0JrQUE0WFFXUG1OQlllVUxOZnIvOXUz
Yk44UFlLS3BoSVFIRS83ZHQyN1laaWM4QTVmK0g4WkVWTTBBbAovaU1wK2c4TFg3eEJpUTBBQkJE
UmlwbklDUVUySUpaNi9QanhUUkFHc1hHR0FBaDgrdlRwRFFpRDJJbUppWFhZZlA4ZkpWZ1lHQnlR
CitjaWUrWThjamVoaUtKNEJ1c3NOVzNwQ2NTUFVQU2h1eEJsRFFDRDE2TkdqbXlBTVlzTVNPVW14
UTNTQUF3UVFTZkZOY2l6UzFGQlEKUmpsLy92eXhwS1NrT3FSTWdvR2g4dGdCV3Q1Z2dPYUYvMGg1
d3cxTjNnMU5YZ3JEREN5R0tnQ3hNUkRyUXFNVVF4TUl3OUlHS09vSgpHZ3BWOUIrcUNadWxVbENz
QzdWY2dSaVhTcEhvZlYrQ2hxSm5BMXdBSkk5YzNpUGpvWk5PQVFLSTZpNWxHdlRlWnFKSFhsZER6
L2UvCmZ2MzZCc0lnTnJUU1pDQTZuME1UYi9DclY2OGU0MHFQSURtZ0dtRnNhUmxiTEdNSUFDdXVX
eUJhVmxZVzducWdpNyt6czdNTEFQWC8KSXVoQ0dGZ0pCTWoxQUlnTkVrT1dKeVliL2tmTHU4RzRD
aFdvUEJ1aHdzSVlpbUVsalRBV05RNUlCaHJqTkJDNTRNVlZQcUtYVU9nRgpCUXRhK0Q5RFlxdWg4
VUhKU0JoSXNVUFpKdEE0T0lzelVvQ0FGMll6MWhJYUVwNFl3WXczREpIYllkaGlHVmtlbTRFWTZS
RG9GZDZmClAzKytaR05qNDhTWERyRTFXSEdsUTVDd01CRTVKWmdvTDZQSE9yVDkveC9vNm0vb3hU
K284cUo1VlRBQ0MxaUFBS05KZFRva3F1Y1IKNlVnV2l0TUxzRlFCVXBLZ01oQmExQ01Yc3ArQitE
a3dTWDJteUJKOEJRVnlZUUVxYVVCbEk5UXh2cUF5RWxSNC9DY0NnTlNCMUlQMApRUXQwQmxJd1VZ
NkVXWGJqeG8wTHhEb01uNE5CRFdOY0RSR0tIWWtOZ0txM2lvcUtEbER0amRScEFkRU9wYVdsUGNq
TkJDejFnQy9OCkhZbWNEQWlZb1liY1VFSWVMVUR2MjJERHhHU2NuOXUzYjkrQ1N4S1kxaEpXcjE2
dERXUTI0VW4zdDRBWkxCYllrTDNmM3Q1ZURoUG4KNWVVVlBuejRjQmxRN2dGSURWbUZPVkN6RmRB
UmxXanQwcmZwNmVrTlFIMFB5Q2dKaklIUnZ3eExtellBYU40dWNvc2dIbWNnd05KbwpBYlhSSHBC
Um1Md0Z4c3B4b0NQUlErMExKZVhrZzFPblRoMnpzYkZ4aGdtQVFnR1lJU0tCb1hJWm8wV1BCdExT
MGlvREF3T3RrSklHCmhob3ZMNi9KUUhPT1VWeE9ZaXQyb08xTE5RSjZRZVZxTUtqb3dwWDVpTW5o
eEpWVFFJTndOU3RCUlF5b3FBSGxVcVJPQm9oMncxY0UKVWQyUnNQWXZxQkNtUm1HT0hMSlVkU1J5
UDRYU2FoR1dESEFOeDFDOVRZN1d3SUQzektqWndCaHQ5STRvUndJQVQvMnN5MzhQQmdJQQpBQUFB
U1VWT1JLNUNZSUk9Cgo=
</data>
<flag name="review"
          id="86285"
          type_id="1"
          status="-"
          setter="menard"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93310</attachid>
            <date>2011-05-12 11:17:20 -0700</date>
            <delta_ts>2011-05-22 15:18:39 -0700</delta_ts>
            <desc>platformpluginV24</desc>
            <filename>58435v24.patch</filename>
            <type>text/plain</type>
            <size>62396</size>
            <attacher name="Yi Shen">max.hong.shen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NjMzNSkKKysrIFNvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDUtMTIgIEh1
aSBIdWFuZyAgPGh1aS4yLmh1YW5nQG5va2lhLmNvbT4sIFlpIFNoZW4gIDx5aS40LnNoZW5Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gVXBzdHJlYW0gU3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4NDM1CisKKyAgICAgICAgVXBzdHJlYW0g
U3ltYmlhbiBwbGF0Zm9ybSBwbHVnaW4gd2l0aCBodG1sNSB2aWRlbyBwbGF5ZXIuCisKKyAgICAg
ICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6SFRNTDVGdWxsU2NyZWVuVmlk
ZW9IYW5kbGVyKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZW50ZXJG
dWxsU2NyZWVuKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6ZXhpdEZ1
bGxTY3JlZW4pOgorICAgICAgICAoSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvblBsYXll
ckVycm9yKToKKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25QbGF5ZXJT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjpvbk1l
ZGlhU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIChIVE1MNVZpZGVvUGx1Z2luOjpzdXBwb3J0c0V4
dGVuc2lvbik6CisgICAgICAgIChIVE1MNVZpZGVvUGx1Z2luOjpjcmVhdGVFeHRlbnNpb24pOgor
ICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRlb1BsdWdpbi5oOiBBZGRl
ZC4KKyAgICAgICAgKEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6cmVxdWlyZXNGdWxsU2Ny
ZWVuRm9yVmlkZW9QbGF5YmFjayk6CisgICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRs
ZXI6OmlzRnVsbFNjcmVlbik6CisgICAgICAgIChIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXI6
OnVwZGF0ZVNjcmVlblJlY3QpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRN
TDVWaWRlb1dpZGdldC5jcHA6IEFkZGVkLgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6SFRN
TDVWaWRlb1dpZGdldCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpzZXREdXJhdGlvbik6
CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0Ojptb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAo
SFRNTDVWaWRlb1dpZGdldDo6b25QbGF5ZXJTdG9wcGVkKToKKyAgICAgICAgKEhUTUw1VmlkZW9X
aWRnZXQ6Om9uUGxheWVyRXJyb3IpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25FbmRP
Zk1lZGlhKToKKyAgICAgICAgKEhUTUw1VmlkZW9XaWRnZXQ6Om9uQnVmZmVyaW5nTWVkaWEpOgor
ICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25CdWZmZXJlZE1lZGlhKToKKyAgICAgICAgKEhU
TUw1VmlkZW9XaWRnZXQ6Om9uQ29udHJvbENsaWNrZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dp
ZGdldDo6b25Qb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoSFRNTDVWaWRlb1dpZGdldDo6b25T
bGlkZXJNb3ZlZCk6CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpvbkNsb3NlQ2xpY2tlZCk6
CisgICAgICAgIChIVE1MNVZpZGVvV2lkZ2V0OjpzaG93RnVsbFNjcmVlbik6CisgICAgICAgIChI
VE1MNVZpZGVvV2lkZ2V0OjpzZXRWb2x1bWUpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vSFRNTDVWaWRlb1dpZGdldC5oOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRm
b3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKE92ZXJsYXlXaWRn
ZXQ6Ok92ZXJsYXlXaWRnZXQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6fk92ZXJsYXlXaWRn
ZXQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24pOgorICAgICAgICAoT3Zl
cmxheVdpZGdldDo6c2V0UG9zaXRpb24pOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6c2V0Vm9s
dW1lKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAg
IChPdmVybGF5V2lkZ2V0OjpvblBsYXllclN0b3BwZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdl
dDo6b25QbGF5ZXJFcnJvcik6CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvbkVuZE9mTWVkaWEp
OgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25CdWZmZXJpbmdNZWRpYSk6CisgICAgICAgIChP
dmVybGF5V2lkZ2V0OjpvbkJ1ZmZlcmVkTWVkaWEpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6
dGltZVRvU3RyaW5nKToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OmFwcGx5U3R5bGVTaGVldCk6
CisgICAgICAgIChPdmVybGF5V2lkZ2V0OjpvbkNvbnRyb2xDbGlja2VkKToKKyAgICAgICAgKE92
ZXJsYXlXaWRnZXQ6Om9uU2xpZGVyTW92ZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25T
b3VuZENsaWNrZWQpOgorICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25DbG9zZUNsaWNrZWQpOgor
ICAgICAgICAoT3ZlcmxheVdpZGdldDo6b25Wb2x1bWVTbGlkZXJSZWxlYXNlZCk6CisgICAgICAg
IChPdmVybGF5V2lkZ2V0OjpvblZvbHVtZVNsaWRlck1vdmVkKToKKyAgICAgICAgKE92ZXJsYXlX
aWRnZXQ6Om9uVGltZXJUaW1lb3V0KToKKyAgICAgICAgKE92ZXJsYXlXaWRnZXQ6OnNob3dGdWxs
U2NyZWVuKToKKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQu
aDogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24u
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFBsYXllckJ1dHRvbjo6UGxheWVyQnV0dG9uKToKKyAgICAg
ICAgKFBsYXllckJ1dHRvbjo6ZXZlbnQpOgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vUGxheWVyQnV0dG9uLmg6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vUGxheWVyTGFiZWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKFBsYXllckxhYmVsOjpQbGF5ZXJM
YWJlbCk6CisgICAgICAgIChQbGF5ZXJMYWJlbDo6b25QbGF5ZXJFcnJvcik6CisgICAgICAgIChQ
bGF5ZXJMYWJlbDo6c3RhcnRCdWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFi
ZWw6OnN0b3BCdWZmZXJpbmdBbmltYXRpb24pOgorICAgICAgICAoUGxheWVyTGFiZWw6Om9uQW5p
bWF0aW9uVGltZW91dCk6CisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJM
YWJlbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1dlYlBsdWdp
bi5jcHA6CisgICAgICAgIChXZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lvbik6CisgICAgICAgICog
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXM6IEFkZGVkLgorICAgICAgICAqIHN5bWJpYW4v
cGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZzogQWRkZWQuCisgICAg
ICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX2Nsb3NlLnBuZzogQWRk
ZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BhdXNl
LnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0
dG9uX3BsYXkucG5nOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2lt
YWdlcy9idXR0b25fc291bmRfb2ZmLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3NvdW5kX29uLnBuZzogQWRkZWQuCisgICAgICAgICog
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMS5wbmc6IEFk
ZGVkLgorICAgICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVm
ZmVyaW5nXzIucG5nOiBBZGRlZC4KKyAgICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2lt
YWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18zLnBuZzogQWRkZWQuCisgICAgICAgICogc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfNC5wbmc6IEFkZGVkLgorICAg
ICAgICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucHJvOgorICAgICAg
ICAqIHN5bWJpYW4vcGxhdGZvcm1wbHVnaW4vcGxhdGZvcm1wbHVnaW4ucXJjOiBBZGRlZC4KKyAg
ICAgICAgKiBzeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3FzczogQWRkZWQuCisgICAgICAgICogc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9xc3MvT3ZlcmxheVdpZGdldC5xc3M6IEFkZGVkLgorCiAyMDEx
LTA1LTEyICBZb3VuZyBIYW4gTGVlICA8am95YnJvQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogU291cmNlL1dl
YktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9QbHVnaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZp
ZGVvUGx1Z2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvUGx1Z2luLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiSFRNTDVWaWRlb1BsdWdpbi5o
IgorCisjaW5jbHVkZSA8UXRQbHVnaW4+CisKK0hUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6
SFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyKCkKKyAgICA6IG1fdmlkZW9XaWRnZXQoMCkKKyAg
ICAsIG1fbWVkaWFQbGF5ZXIoMCkKKyAgICAsIG1fZnVsbFNjcmVlbihmYWxzZSkKKyAgICAsIG1f
c2F2ZWRPcmllbnRhdGlvbihDQWtuQXBwVWk6OkVBcHBVaU9yaWVudGF0aW9uVW5zcGVjaWZpZWQp
Cit7Cit9CisKK3ZvaWQgSFRNTDVGdWxsU2NyZWVuVmlkZW9IYW5kbGVyOjplbnRlckZ1bGxTY3Jl
ZW4oUU1lZGlhUGxheWVyICpwbGF5ZXIpCit7CisgICAgaWYgKCFwbGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fdmlkZW9XaWRnZXQgPSBuZXcgSFRNTDVWaWRlb1dpZGdldCgpOworICAg
IGlmICghbV92aWRlb1dpZGdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92aWRlb1dpZGdl
dC0+c2V0RHVyYXRpb24ocGxheWVyLT5kdXJhdGlvbigpIC8gMTAwMCk7CisKKyAgICBDQWtuQXBw
VWkqIGFwcFVpID0gZHluYW1pY19jYXN0PENBa25BcHBVaSo+KENFaWtvbkVudjo6U3RhdGljKCkt
PkFwcFVpKCkpOworICAgIGlmIChhcHBVaSkgeworICAgICAgICBtX3NhdmVkT3JpZW50YXRpb24g
PSBhcHBVaS0+T3JpZW50YXRpb24oKTsKKyAgICAgICAgYXBwVWktPlNldE9yaWVudGF0aW9uTChD
QWtuQXBwVWk6OkVBcHBVaU9yaWVudGF0aW9uTGFuZHNjYXBlKTsKKyAgICB9CisKKyAgICBtX21l
ZGlhUGxheWVyID0gcGxheWVyOworICAgIGNvbm5lY3QobV9tZWRpYVBsYXllciwgU0lHTkFMKHBv
c2l0aW9uQ2hhbmdlZChxaW50NjQpKSwgbV92aWRlb1dpZGdldCwgU0xPVChvblBvc2l0aW9uQ2hh
bmdlZChxaW50NjQpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZHVyYXRp
b25DaGFuZ2VkKHFpbnQ2NCkpLCBtX3ZpZGVvV2lkZ2V0LCBTTE9UKHNldER1cmF0aW9uKHFpbnQ2
NCkpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChzdGF0ZUNoYW5nZWQoUU1l
ZGlhUGxheWVyOjpTdGF0ZSkpLCB0aGlzLCBTTE9UKG9uUGxheWVyU3RhdGVDaGFuZ2VkKFFNZWRp
YVBsYXllcjo6U3RhdGUpKSk7CisgICAgY29ubmVjdChtX21lZGlhUGxheWVyLCBTSUdOQUwoZXJy
b3IoUU1lZGlhUGxheWVyOjpFcnJvcikpLCB0aGlzLCBTTE9UKG9uUGxheWVyRXJyb3IoUU1lZGlh
UGxheWVyOjpFcnJvcikpKTsKKyAgICBjb25uZWN0KG1fbWVkaWFQbGF5ZXIsIFNJR05BTChtZWRp
YVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cykpLCB0aGlzLCBTTE9UKG9u
TWVkaWFTdGF0dXNDaGFuZ2VkKFFNZWRpYVBsYXllcjo6TWVkaWFTdGF0dXMpKSk7CisgICAgY29u
bmVjdChtX3ZpZGVvV2lkZ2V0LCBTSUdOQUwocG9zaXRpb25DaGFuZ2VkQnlVc2VyKHFpbnQ2NCkp
LCBtX21lZGlhUGxheWVyLCBTTE9UKHNldFBvc2l0aW9uKHFpbnQ2NCkpKTsKKyAgICBjb25uZWN0
KG1fdmlkZW9XaWRnZXQsIFNJR05BTChjbG9zZUNsaWNrZWQoKSksIHRoaXMsIFNJR05BTChmdWxs
U2NyZWVuQ2xvc2VkKCkpKTsKKyAgICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTChtdXRl
ZChib29sKSksIG1fbWVkaWFQbGF5ZXIsIFNMT1Qoc2V0TXV0ZWQoYm9vbCkpKTsKKyAgICBjb25u
ZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTCh2b2x1bWVDaGFuZ2VkKGludCkpLCBtX21lZGlhUGxh
eWVyLCBTTE9UKHNldFZvbHVtZShpbnQpKSk7CisgICAgY29ubmVjdChtX3ZpZGVvV2lkZ2V0LCBT
SUdOQUwocGF1c2VDbGlja2VkKCkpLCBtX21lZGlhUGxheWVyLCBTTE9UKHBhdXNlKCkpKTsKKyAg
ICBjb25uZWN0KG1fdmlkZW9XaWRnZXQsIFNJR05BTChwbGF5Q2xpY2tlZCgpKSwgbV9tZWRpYVBs
YXllciwgU0xPVChwbGF5KCkpKTsKKworICAgIG1fbWVkaWFQbGF5ZXItPnNldFZpZGVvT3V0cHV0
KG1fdmlkZW9XaWRnZXQpOworCisgICAgbV92aWRlb1dpZGdldC0+c2V0Vm9sdW1lKG1fbWVkaWFQ
bGF5ZXItPnZvbHVtZSgpKTsKKyAgICBtX3ZpZGVvV2lkZ2V0LT5zZXRTaXplUG9saWN5KFFTaXpl
UG9saWN5OjpJZ25vcmVkLCBRU2l6ZVBvbGljeTo6SWdub3JlZCk7CisgICAgbV92aWRlb1dpZGdl
dC0+c2hvd0Z1bGxTY3JlZW4oKTsKKyAgICBtX2Z1bGxTY3JlZW4gPSB0cnVlOworCisgICAgLy8g
SGFuZGxlIGN1cnJlbnQgTWVkaWEgU3RhdHVzIGFuZCBNZWRpYSBQbGF5ZXIgZXJyb3IuCisgICAg
b25NZWRpYVN0YXR1c0NoYW5nZWQobV9tZWRpYVBsYXllci0+bWVkaWFTdGF0dXMoKSk7CisgICAg
b25QbGF5ZXJFcnJvcihtX21lZGlhUGxheWVyLT5lcnJvcigpKTsKK30KKwordm9pZCBIVE1MNUZ1
bGxTY3JlZW5WaWRlb0hhbmRsZXI6OmV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBtX3ZpZGVvV2lk
Z2V0LT5oaWRlKCk7CisgICAgbV9tZWRpYVBsYXllci0+ZGlzY29ubmVjdChtX3ZpZGVvV2lkZ2V0
KTsKKyAgICBtX21lZGlhUGxheWVyLT5kaXNjb25uZWN0KHRoaXMpOworICAgIGRlbGV0ZSBtX3Zp
ZGVvV2lkZ2V0OworICAgIG1fdmlkZW9XaWRnZXQgPSAwOworICAgIGlmIChtX21lZGlhUGxheWVy
LT5zdGF0ZSgpID09IFFNZWRpYVBsYXllcjo6UGxheWluZ1N0YXRlKQorICAgICAgICBtX21lZGlh
UGxheWVyLT5wYXVzZSgpOworICAgIG1fZnVsbFNjcmVlbiA9IGZhbHNlOworCisgICAgQ0FrbkFw
cFVpKiBhcHBVaSA9IGR5bmFtaWNfY2FzdDxDQWtuQXBwVWkqPihDRWlrb25FbnY6OlN0YXRpYygp
LT5BcHBVaSgpKTsKKyAgICBpZiAoYXBwVWkpIAorICAgICAgICBhcHBVaS0+U2V0T3JpZW50YXRp
b25MKG1fc2F2ZWRPcmllbnRhdGlvbik7Cit9CisKK3ZvaWQgSFRNTDVGdWxsU2NyZWVuVmlkZW9I
YW5kbGVyOjpvblBsYXllckVycm9yKFFNZWRpYVBsYXllcjo6RXJyb3IgZXJyb3IpCit7CisgICAg
c3dpdGNoIChlcnJvcikgeworICAgIGNhc2UgUU1lZGlhUGxheWVyOjpOb0Vycm9yOgorICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX3ZpZGVvV2lkZ2V0LT5vblBsYXllckVy
cm9yKCk7CisgICAgfQorfQorCit2b2lkIEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcjo6b25Q
bGF5ZXJTdGF0ZUNoYW5nZWQoUU1lZGlhUGxheWVyOjpTdGF0ZSBzdGF0ZSkKK3sKKyAgICBpZiAo
c3RhdGUgPT0gUU1lZGlhUGxheWVyOjpTdG9wcGVkU3RhdGUpCisgICAgICAgIG1fdmlkZW9XaWRn
ZXQtPm9uUGxheWVyU3RvcHBlZCgpOworfQorCit2b2lkIEhUTUw1RnVsbFNjcmVlblZpZGVvSGFu
ZGxlcjo6b25NZWRpYVN0YXR1c0NoYW5nZWQoUU1lZGlhUGxheWVyOjpNZWRpYVN0YXR1cyBzdGF0
dXMpCit7CisgICAgc3dpdGNoIChzdGF0dXMpIHsKKyAgICBjYXNlIFFNZWRpYVBsYXllcjo6RW5k
T2ZNZWRpYToKKyAgICAgICAgbV92aWRlb1dpZGdldC0+b25FbmRPZk1lZGlhKCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUU1lZGlhUGxheWVyOjpTdGFsbGVkTWVkaWE6CisgICAgY2FzZSBR
TWVkaWFQbGF5ZXI6OkxvYWRpbmdNZWRpYToKKyAgICBjYXNlIFFNZWRpYVBsYXllcjo6QnVmZmVy
aW5nTWVkaWE6CisgICAgICAgIG1fdmlkZW9XaWRnZXQtPm9uQnVmZmVyaW5nTWVkaWEoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBRTWVkaWFQbGF5ZXI6OkxvYWRlZE1lZGlhOgorICAgIGNh
c2UgUU1lZGlhUGxheWVyOjpCdWZmZXJlZE1lZGlhOgorICAgICAgICBtX3ZpZGVvV2lkZ2V0LT5v
bkJ1ZmZlcmVkTWVkaWEoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHJldHVybjsKK30KKworYm9vbCBIVE1MNVZpZGVvUGx1Z2luOjpz
dXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24gZXh0ZW5zaW9uKSBjb25zdAoreworICAgIHN3aXRj
aCAoZXh0ZW5zaW9uKSB7CisgICAgY2FzZSBGdWxsU2NyZWVuVmlkZW9QbGF5ZXI6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK1FPYmplY3QqIEhUTUw1VmlkZW9QbHVnaW46OmNyZWF0ZUV4dGVuc2lvbihFeHRlbnNp
b24gZXh0ZW5zaW9uKSBjb25zdAoreworICAgIEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlciog
dmlkZW9IYW5kbGVyID0gMDsKKyAgICBzd2l0Y2ggKGV4dGVuc2lvbikgeworICAgIGNhc2UgRnVs
bFNjcmVlblZpZGVvUGxheWVyOgorICAgICAgICB2aWRlb0hhbmRsZXIgPSBuZXcgSFRNTDVGdWxs
U2NyZWVuVmlkZW9IYW5kbGVyOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHZpZGVvSGFuZGxlcjsKK30KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvUGx1Z2luLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1
VmlkZW9QbHVnaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9IVE1MNVZpZGVvUGx1Z2luLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEhUTUw1VmlkZW9QbHVnaW5faAorI2Rl
ZmluZSBIVE1MNVZpZGVvUGx1Z2luX2gKKworI2luY2x1ZGUgIkhUTUw1VmlkZW9XaWRnZXQuaCIK
KyNpbmNsdWRlICJxd2Via2l0cGxhdGZvcm1wbHVnaW4uaCIKKyNpbmNsdWRlIDxRTWVkaWFQbGF5
ZXI+CisKKyNpbmNsdWRlIDxha25hcHB1aS5oPgorI2luY2x1ZGUgPGFrbmVudi5oPgorI2luY2x1
ZGUgPGVpa2FwcHVpLmg+CisjaW5jbHVkZSA8ZWlrZW52Lmg+CisKK2NsYXNzIEhUTUw1RnVsbFNj
cmVlblZpZGVvSGFuZGxlciA6IHB1YmxpYyBRV2ViRnVsbFNjcmVlblZpZGVvSGFuZGxlciB7Cisg
ICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBIVE1MNUZ1bGxTY3JlZW5WaWRlb0hhbmRsZXIoKTsK
KyAgICBib29sIHJlcXVpcmVzRnVsbFNjcmVlbkZvclZpZGVvUGxheWJhY2soKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CisgICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2Z1
bGxTY3JlZW47IH0KKyAgICB2b2lkIHVwZGF0ZVNjcmVlblJlY3QoY29uc3QgUVJlY3QmKSB7IH0K
KworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2b2lkIGVudGVyRnVsbFNjcmVlbihRTWVk
aWFQbGF5ZXIgKik7CisgICAgdmlydHVhbCB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisgICAgdm9p
ZCBvblBsYXllclN0YXRlQ2hhbmdlZChRTWVkaWFQbGF5ZXI6OlN0YXRlKTsKKyAgICB2b2lkIG9u
UGxheWVyRXJyb3IoUU1lZGlhUGxheWVyOjpFcnJvcik7CisgICAgdm9pZCBvbk1lZGlhU3RhdHVz
Q2hhbmdlZChRTWVkaWFQbGF5ZXI6Ok1lZGlhU3RhdHVzKTsKKworcHJpdmF0ZToKKyAgICBIVE1M
NVZpZGVvV2lkZ2V0KiBtX3ZpZGVvV2lkZ2V0OworICAgIFFNZWRpYVBsYXllciogbV9tZWRpYVBs
YXllcjsKKyAgICBib29sIG1fZnVsbFNjcmVlbjsKKyAgICBDQWtuQXBwVWk6OlRBcHBVaU9yaWVu
dGF0aW9uIG1fc2F2ZWRPcmllbnRhdGlvbjsKK307CisKK2NsYXNzIEhUTUw1VmlkZW9QbHVnaW4g
OiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFFXZWJLaXRQbGF0Zm9ybVBsdWdpbiB7CisgICAgUV9P
QkpFQ1QKKyAgICBRX0lOVEVSRkFDRVMoUVdlYktpdFBsYXRmb3JtUGx1Z2luKQorcHVibGljOgor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihFeHRlbnNpb24pIGNvbnN0OworICAg
IHZpcnR1YWwgUU9iamVjdCogY3JlYXRlRXh0ZW5zaW9uKEV4dGVuc2lvbikgY29uc3Q7Cit9Owor
CisjZW5kaWYgLyogSFRNTDVWaWRlb1BsdWdpbl9oICovCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vSFRNTDVWaWRlb1dpZGdldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9XaWRn
ZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3Jt
cGx1Z2luL0hUTUw1VmlkZW9XaWRnZXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJIVE1MNVZpZGVvV2lkZ2V0LmgiCisKK0hU
TUw1VmlkZW9XaWRnZXQ6OkhUTUw1VmlkZW9XaWRnZXQoUVdpZGdldCAqcGFyZW50KQorICAgIDog
UVZpZGVvV2lkZ2V0KHBhcmVudCkKKyAgICAsIG1fb3ZlcmxheVdpZGdldChuZXcgT3ZlcmxheVdp
ZGdldCh0aGlzKSkKK3sKKyAgICBjb25uZWN0KG1fb3ZlcmxheVdpZGdldCwgU0lHTkFMKGNvbnRy
b2xDbGlja2VkKGJvb2wpKSwgdGhpcywgU0xPVChvbkNvbnRyb2xDbGlja2VkKGJvb2wpKSk7Cisg
ICAgY29ubmVjdChtX292ZXJsYXlXaWRnZXQsIFNJR05BTChzbGlkZXJNb3ZlZChpbnQpKSwgdGhp
cywgU0xPVChvblNsaWRlck1vdmVkKGludCkpKTsKKyAgICBjb25uZWN0KG1fb3ZlcmxheVdpZGdl
dCwgU0lHTkFMKGNsb3NlQ2xpY2tlZCgpKSwgdGhpcywgU0xPVChvbkNsb3NlQ2xpY2tlZCgpKSk7
CisgICAgY29ubmVjdChtX292ZXJsYXlXaWRnZXQsIFNJR05BTChtdXRlZChib29sKSksIHRoaXMs
IFNJR05BTChtdXRlZChib29sKSkpOworICAgIGNvbm5lY3QobV9vdmVybGF5V2lkZ2V0LCBTSUdO
QUwodm9sdW1lQ2hhbmdlZChpbnQpKSwgdGhpcywgU0lHTkFMKHZvbHVtZUNoYW5nZWQoaW50KSkp
OworICAgIG1fb3ZlcmxheVdpZGdldC0+c2V0U2l6ZVBvbGljeShRU2l6ZVBvbGljeTo6SWdub3Jl
ZCwgUVNpemVQb2xpY3k6Oklnbm9yZWQpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6OnNl
dER1cmF0aW9uKHFpbnQ2NCBkdXJhdGlvbikKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPnNldER1
cmF0aW9uKGR1cmF0aW9uIC8gMTAwMCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6bW91
c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICopCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5zaG93
RnVsbFNjcmVlbigpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uUGxheWVyU3RvcHBl
ZCgpCit7CisgICAgbV9vdmVybGF5V2lkZ2V0LT5vblBsYXllclN0b3BwZWQoKTsKK30KKwordm9p
ZCBIVE1MNVZpZGVvV2lkZ2V0OjpvblBsYXllckVycm9yKCkKK3sKKyAgICBtX292ZXJsYXlXaWRn
ZXQtPm9uUGxheWVyRXJyb3IoKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpvbkVuZE9m
TWVkaWEoKQoreworICAgIG1fb3ZlcmxheVdpZGdldC0+b25FbmRPZk1lZGlhKCk7Cit9CisKK3Zv
aWQgSFRNTDVWaWRlb1dpZGdldDo6b25CdWZmZXJpbmdNZWRpYSgpCit7CisgICAgbV9vdmVybGF5
V2lkZ2V0LT5vbkJ1ZmZlcmluZ01lZGlhKCk7Cit9CisKK3ZvaWQgSFRNTDVWaWRlb1dpZGdldDo6
b25CdWZmZXJlZE1lZGlhKCkKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPm9uQnVmZmVyZWRNZWRp
YSgpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6Om9uQ29udHJvbENsaWNrZWQoYm9vbCBp
c1BhdXNlZCkKK3sKKyAgICBpZiAoaXNQYXVzZWQpCisgICAgICAgIGVtaXQgcGF1c2VDbGlja2Vk
KCk7CisgICAgZWxzZQorICAgICAgICBlbWl0IHBsYXlDbGlja2VkKCk7Cit9CisKK3ZvaWQgSFRN
TDVWaWRlb1dpZGdldDo6b25Qb3NpdGlvbkNoYW5nZWQocWludDY0IHBvc2l0aW9uKQoreworICAg
IG1fb3ZlcmxheVdpZGdldC0+c2V0UG9zaXRpb24ocG9zaXRpb24gLyAxMDAwKTsKK30KKwordm9p
ZCBIVE1MNVZpZGVvV2lkZ2V0OjpvblNsaWRlck1vdmVkKGludCB2YWx1ZSkKK3sKKyAgICBlbWl0
IHBvc2l0aW9uQ2hhbmdlZEJ5VXNlcigoKHFpbnQ2NCl2YWx1ZSkqMTAwMCk7Cit9CisKK3ZvaWQg
SFRNTDVWaWRlb1dpZGdldDo6b25DbG9zZUNsaWNrZWQoKQoreworICAgIGhpZGUoKTsKKyAgICBl
bWl0IGNsb3NlQ2xpY2tlZCgpOworfQorCit2b2lkIEhUTUw1VmlkZW9XaWRnZXQ6OnNob3dGdWxs
U2NyZWVuKCkKK3sKKyAgICBzZXRGdWxsU2NyZWVuKHRydWUpOworICAgIG1fb3ZlcmxheVdpZGdl
dC0+c2hvd0Z1bGxTY3JlZW4oKTsKK30KKwordm9pZCBIVE1MNVZpZGVvV2lkZ2V0OjpzZXRWb2x1
bWUoaW50IHZvbHVtZSkKK3sKKyAgICBtX292ZXJsYXlXaWRnZXQtPnNldFZvbHVtZSh2b2x1bWUp
OworfQpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1
VmlkZW9XaWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4vSFRNTDVWaWRlb1dpZGdldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL0hUTUw1VmlkZW9XaWRnZXQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSFRNTDVW
aWRlb1dpZGdldF9oCisjZGVmaW5lIEhUTUw1VmlkZW9XaWRnZXRfaAorCisjaW5jbHVkZSAiT3Zl
cmxheVdpZGdldC5oIgorCisjaW5jbHVkZSA8UVZpZGVvV2lkZ2V0PgorCitjbGFzcyBIVE1MNVZp
ZGVvV2lkZ2V0IDogcHVibGljIFFWaWRlb1dpZGdldCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoK
KyAgICBIVE1MNVZpZGVvV2lkZ2V0KFFXaWRnZXQqIHBhcmVudCA9IDApOworICAgIHZvaWQgbW91
c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdm9pZCBvblBsYXllclN0b3BwZWQoKTsK
KyAgICB2b2lkIG9uUGxheWVyRXJyb3IoKTsKKyAgICB2b2lkIG9uRW5kT2ZNZWRpYSgpOworICAg
IHZvaWQgb25CdWZmZXJpbmdNZWRpYSgpOworICAgIHZvaWQgb25CdWZmZXJlZE1lZGlhKCk7Cisg
ICAgdm9pZCBzZXRWb2x1bWUoaW50KTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIG9uQ29u
dHJvbENsaWNrZWQoYm9vbCk7CisgICAgdm9pZCBvblBvc2l0aW9uQ2hhbmdlZChxaW50NjQpOwor
ICAgIHZvaWQgb25TbGlkZXJNb3ZlZChpbnQpOworICAgIHZvaWQgb25DbG9zZUNsaWNrZWQoKTsK
KworcHVibGljIHNsb3RzOgorICAgIHZvaWQgc2hvd0Z1bGxTY3JlZW4oKTsKKyAgICB2b2lkIHNl
dER1cmF0aW9uKHFpbnQ2NCk7CisKK3NpZ25hbHM6CisgICAgdm9pZCBwYXVzZUNsaWNrZWQoKTsK
KyAgICB2b2lkIHBsYXlDbGlja2VkKCk7CisgICAgdm9pZCBwb3NpdGlvbkNoYW5nZWRCeVVzZXIo
cWludDY0KTsKKyAgICB2b2lkIGNsb3NlQ2xpY2tlZCgpOworICAgIHZvaWQgbXV0ZWQoYm9vbCk7
CisgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKGludCk7CisKK3ByaXZhdGU6CisgICAgT3ZlcmxheVdp
ZGdldCogbV9vdmVybGF5V2lkZ2V0OworfTsKKworI2VuZGlmIC8qIEhUTUw1VmlkZW9XaWRnZXRf
aCAqLwpJbmRleDogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJs
YXlXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiT3Zlcmxh
eVdpZGdldC5oIgorCisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UUdyaWRMYXlvdXQ+Cisj
aW5jbHVkZSA8UUhCb3hMYXlvdXQ+CisjaW5jbHVkZSA8UVN0eWxlPgorI2luY2x1ZGUgPFFUaW1l
PgorCitPdmVybGF5V2lkZ2V0OjpPdmVybGF5V2lkZ2V0KFFXaWRnZXQgKnBhcmVudCkKKyAgICA6
IFFXaWRnZXQoMCwgUXQ6OkZyYW1lbGVzc1dpbmRvd0hpbnQpCisgICAgLCBtX2lzUGF1c2VkKGZh
bHNlKQorICAgICwgbV9pc011dGVkKGZhbHNlKQoreworICAgIGFwcGx5U3R5bGVTaGVldCgpOwor
CisgICAgbV9wbGF5SWNvbiA9IFFJY29uKCI6L2ltYWdlcy9idXR0b25fcGxheS5wbmciKTsKKyAg
ICBtX3BhdXNlSWNvbiA9IFFJY29uKCI6L2ltYWdlcy9idXR0b25fcGF1c2UucG5nIik7CisgICAg
bV9zb3VuZE9uSWNvbiA9IFFJY29uKCI6L2ltYWdlcy9idXR0b25fc291bmRfb24ucG5nIik7Cisg
ICAgbV9zb3VuZE9mZkljb24gPSBRSWNvbigiOi9pbWFnZXMvYnV0dG9uX3NvdW5kX29mZi5wbmci
KTsKKworICAgIG1fY29udHJvbEJ1dHRvbiA9IG5ldyBQbGF5ZXJCdXR0b24odGhpcyk7CisgICAg
bV9jb250cm9sQnV0dG9uLT5zZXRJY29uKG1fcGF1c2VJY29uKTsKKyAgICBjb25uZWN0KG1fY29u
dHJvbEJ1dHRvbiwgU0lHTkFMKGNsaWNrZWQoKSksIHRoaXMsIFNMT1Qob25Db250cm9sQ2xpY2tl
ZCgpKSk7CisKKyAgICBtX3Byb2dyZXNzU2xpZGVyID0gbmV3IFFTbGlkZXIoUXQ6Okhvcml6b250
YWwsIHRoaXMpOworICAgIGNvbm5lY3QobV9wcm9ncmVzc1NsaWRlciwgU0lHTkFMKHNsaWRlck1v
dmVkKGludCkpLCB0aGlzLCBTTE9UKG9uU2xpZGVyTW92ZWQoaW50KSkpOworCisgICAgbV9wb3Np
dGlvbkxhYmVsID0gbmV3IFFMYWJlbCh0aGlzKTsKKyAgICBtX3Bvc2l0aW9uTGFiZWwtPnNldFRl
eHQodGltZVRvU3RyaW5nKDApKTsKKyAgICBtX2R1cmF0aW9uTGFiZWwgPSBuZXcgUUxhYmVsKHRo
aXMpOworCisgICAgbV9zb3VuZEJ1dHRvbiA9IG5ldyBQbGF5ZXJCdXR0b24odGhpcyk7CisgICAg
bV9zb3VuZEJ1dHRvbi0+c2V0SWNvbihtX3NvdW5kT25JY29uKTsKKyAgICBjb25uZWN0KG1fc291
bmRCdXR0b24sIFNJR05BTChjbGlja2VkKCkpLCB0aGlzLCBTTE9UKG9uU291bmRDbGlja2VkKCkp
KTsKKworICAgIG1fY2xvc2VCdXR0b24gPSBuZXcgUGxheWVyQnV0dG9uKHRoaXMpOworICAgIG1f
Y2xvc2VCdXR0b24tPnNldEljb24oUUljb24oIjovaW1hZ2VzL2J1dHRvbl9jbG9zZS5wbmciKSk7
CisgICAgY29ubmVjdChtX2Nsb3NlQnV0dG9uLCBTSUdOQUwoY2xpY2tlZCgpKSwgdGhpcywgU0xP
VChvbkNsb3NlQ2xpY2tlZCgpKSk7CisKKyAgICBtX3ZvbHVtZVNsaWRlciA9IG5ldyBRU2xpZGVy
KFF0OjpWZXJ0aWNhbCwgdGhpcyk7CisgICAgbV92b2x1bWVTbGlkZXItPnNldFJhbmdlKDAsIDEw
MCk7CisgICAgY29ubmVjdChtX3NvdW5kQnV0dG9uLCBTSUdOQUwodGFwQW5kSG9sZCgpKSwgbV92
b2x1bWVTbGlkZXIsIFNMT1Qoc2hvdygpKSk7CisgICAgY29ubmVjdChtX3ZvbHVtZVNsaWRlciwg
U0lHTkFMKHNsaWRlclJlbGVhc2VkKCkpLCB0aGlzLCBTTE9UKG9uVm9sdW1lU2xpZGVyUmVsZWFz
ZWQoKSkpOworICAgIGNvbm5lY3QobV92b2x1bWVTbGlkZXIsIFNJR05BTChzbGlkZXJNb3ZlZChp
bnQpKSwgdGhpcywgU0xPVChvblZvbHVtZVNsaWRlck1vdmVkKGludCkpKTsKKyAgICBtX3ZvbHVt
ZVNsaWRlci0+aGlkZSgpOworCisgICAgbV9wbGF5ZXJMYWJlbCA9IG5ldyBQbGF5ZXJMYWJlbCh0
aGlzKTsKKyAgICBtX3BsYXllckxhYmVsLT5oaWRlKCk7CisKKyAgICBRQm94TGF5b3V0KiBtX2Nv
bnRyb2xMYXlvdXQgPSBuZXcgUUhCb3hMYXlvdXQ7CisgICAgbV9jb250cm9sTGF5b3V0LT5hZGRX
aWRnZXQobV9jb250cm9sQnV0dG9uKTsKKyAgICBtX2NvbnRyb2xMYXlvdXQtPmFkZFdpZGdldCht
X3Bvc2l0aW9uTGFiZWwpOworICAgIG1fY29udHJvbExheW91dC0+YWRkV2lkZ2V0KG1fcHJvZ3Jl
c3NTbGlkZXIpOworICAgIG1fY29udHJvbExheW91dC0+YWRkV2lkZ2V0KG1fZHVyYXRpb25MYWJl
bCk7CisKKyAgICBRR3JpZExheW91dCogbGF5b3V0ID0gbmV3IFFHcmlkTGF5b3V0OworICAgIGxh
eW91dC0+YWRkV2lkZ2V0KG1fY2xvc2VCdXR0b24sIDAsIDAsIDEsIDIsIFF0OjpBbGlnblJpZ2h0
IHwgUXQ6OkFsaWduVG9wKTsKKyAgICBsYXlvdXQtPmFkZFdpZGdldChtX3BsYXllckxhYmVsLCAx
LCAwLCBRdDo6QWxpZ25DZW50ZXIpOworICAgIGxheW91dC0+YWRkV2lkZ2V0KG1fdm9sdW1lU2xp
ZGVyLCAxLCAxKTsKKyAgICBsYXlvdXQtPmFkZExheW91dChtX2NvbnRyb2xMYXlvdXQsIDIsIDAs
IFF0OjpBbGlnbkJvdHRvbSk7CisgICAgbGF5b3V0LT5hZGRXaWRnZXQobV9zb3VuZEJ1dHRvbiwg
MiwgMSwgUXQ6OkFsaWduQm90dG9tKTsKKyAgICBzZXRMYXlvdXQobGF5b3V0KTsKKworICAgIG1f
aGlkZVdpZGdldFRpbWVyID0gbmV3IFFUaW1lcih0aGlzKTsKKyAgICBtX2hpZGVXaWRnZXRUaW1l
ci0+c2V0U2luZ2xlU2hvdCh0cnVlKTsKKyAgICBtX2hpZGVXaWRnZXRUaW1lci0+c2V0SW50ZXJ2
YWwoMzAwMCk7CisgICAgY29ubmVjdChtX2hpZGVXaWRnZXRUaW1lciwgU0lHTkFMKHRpbWVvdXQo
KSksIHRoaXMsIFNMT1Qob25UaW1lclRpbWVvdXQoKSkpOworICAgIGNvbm5lY3QobV9wcm9ncmVz
c1NsaWRlciwgU0lHTkFMKHNsaWRlclByZXNzZWQoKSksIG1faGlkZVdpZGdldFRpbWVyLCBTTE9U
KHN0b3AoKSkpOworICAgIGNvbm5lY3QobV9wcm9ncmVzc1NsaWRlciwgU0lHTkFMKHNsaWRlclJl
bGVhc2VkKCkpLCBtX2hpZGVXaWRnZXRUaW1lciwgU0xPVChzdGFydCgpKSk7CisgICAgY29ubmVj
dChtX3ZvbHVtZVNsaWRlciwgU0lHTkFMKHNsaWRlclByZXNzZWQoKSksIG1faGlkZVdpZGdldFRp
bWVyLCBTTE9UKHN0b3AoKSkpOworCisgICAgc2V0QXR0cmlidXRlKFF0OjpXQV9UcmFuc2x1Y2Vu
dEJhY2tncm91bmQpOworfQorCitPdmVybGF5V2lkZ2V0Ojp+T3ZlcmxheVdpZGdldCgpCit7Cit9
CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6c2V0RHVyYXRpb24oaW50IGR1cmF0aW9uKQoreworICAg
IG1fcHJvZ3Jlc3NTbGlkZXItPnNldE1heGltdW0oZHVyYXRpb24pOworICAgIG1fZHVyYXRpb25M
YWJlbC0+c2V0VGV4dCh0aW1lVG9TdHJpbmcoZHVyYXRpb24pKTsKK30KKwordm9pZCBPdmVybGF5
V2lkZ2V0OjpzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pCit7CisgICAgaWYgKCFtX3Byb2dyZXNz
U2xpZGVyLT5pc1NsaWRlckRvd24oKSkgeworICAgICAgICBtX3Byb2dyZXNzU2xpZGVyLT5zZXRW
YWx1ZShwb3NpdGlvbik7CisgICAgICAgIG1fcG9zaXRpb25MYWJlbC0+c2V0VGV4dCh0aW1lVG9T
dHJpbmcocG9zaXRpb24pKTsKKyAgICB9Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6c2V0Vm9s
dW1lKGludCB2b2x1bWUpCit7CisgICAgbV92b2x1bWVTbGlkZXItPnNldFZhbHVlKHZvbHVtZSk7
Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICop
Cit7CisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0b3AoKTsKKyAgICBoaWRlKCk7Cit9CisKK3Zv
aWQgT3ZlcmxheVdpZGdldDo6b25QbGF5ZXJTdG9wcGVkKCkKK3sKKyAgICBtX2NvbnRyb2xCdXR0
b24tPnNldEljb24obV9wbGF5SWNvbik7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25QbGF5
ZXJFcnJvcigpCit7CisgICAgbV9jb250cm9sQnV0dG9uLT5zZXREaXNhYmxlZCh0cnVlKTsKKyAg
ICBtX3Byb2dyZXNzU2xpZGVyLT5zZXREaXNhYmxlZCh0cnVlKTsKKyAgICBtX3BsYXllckxhYmVs
LT5vblBsYXllckVycm9yKCk7CisgICAgc2hvd0Z1bGxTY3JlZW4oKTsKK30KKwordm9pZCBPdmVy
bGF5V2lkZ2V0OjpvbkVuZE9mTWVkaWEoKQoreworICAgIFFXaWRnZXQ6OnNob3dGdWxsU2NyZWVu
KCk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25CdWZmZXJpbmdNZWRpYSgpCit7CisgICAg
bV9wbGF5ZXJMYWJlbC0+c3RhcnRCdWZmZXJpbmdBbmltYXRpb24oKTsKK30KKwordm9pZCBPdmVy
bGF5V2lkZ2V0OjpvbkJ1ZmZlcmVkTWVkaWEoKQoreworICAgIG1fcGxheWVyTGFiZWwtPnN0b3BC
dWZmZXJpbmdBbmltYXRpb24oKTsKK30KKworUVN0cmluZyBPdmVybGF5V2lkZ2V0Ojp0aW1lVG9T
dHJpbmcoaW50IHNlY29uZHMpCit7CisgICAgUVRpbWUgaW5pdFRpbWUoMCwgMCwgMCk7CisgICAg
UVRpbWUgdGltZSA9IGluaXRUaW1lLmFkZFNlY3Moc2Vjb25kcyk7CisgICAgcmV0dXJuIHRpbWUu
aG91cigpID8gdGltZS50b1N0cmluZygiaDptbTpzcyIpIDogdGltZS50b1N0cmluZygibW06c3Mi
KTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjphcHBseVN0eWxlU2hlZXQoKQoreworICAgIFFG
aWxlIGZpbGUoIjovcXNzL092ZXJsYXlXaWRnZXQucXNzIik7CisgICAgZmlsZS5vcGVuKFFGaWxl
OjpSZWFkT25seSk7CisgICAgc2V0U3R5bGVTaGVldChRTGF0aW4xU3RyaW5nKGZpbGUucmVhZEFs
bCgpKSk7Cit9CisKK3ZvaWQgT3ZlcmxheVdpZGdldDo6b25Db250cm9sQ2xpY2tlZCgpCit7Cisg
ICAgbV9pc1BhdXNlZCA9ICFtX2lzUGF1c2VkOworICAgIGlmIChtX2lzUGF1c2VkKSB7CisgICAg
ICAgIG1fY29udHJvbEJ1dHRvbi0+c2V0SWNvbihtX3BsYXlJY29uKTsKKyAgICAgICAgbV9oaWRl
V2lkZ2V0VGltZXItPnN0b3AoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbnRyb2xCdXR0
b24tPnNldEljb24obV9wYXVzZUljb24pOworICAgICAgICBtX2hpZGVXaWRnZXRUaW1lci0+c3Rh
cnQoKTsKKyAgICB9CisgICAgZW1pdCBjb250cm9sQ2xpY2tlZChtX2lzUGF1c2VkKTsKK30KKwor
dm9pZCBPdmVybGF5V2lkZ2V0OjpvblNsaWRlck1vdmVkKGludCB2YWx1ZSkKK3sKKyAgICBlbWl0
IHNsaWRlck1vdmVkKHZhbHVlKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvblNvdW5kQ2xp
Y2tlZCgpCit7CisgICAgaWYgKG1fdm9sdW1lU2xpZGVyLT5pc1Zpc2libGUoKSkKKyAgICAgICAg
bV9pc011dGVkID0gZmFsc2U7CisgICAgZWxzZQorICAgICAgICBtX2lzTXV0ZWQgPSAhbV9pc011
dGVkOworCisgICAgaWYgKG1faXNNdXRlZCkKKyAgICAgICAgbV9zb3VuZEJ1dHRvbi0+c2V0SWNv
bihtX3NvdW5kT2ZmSWNvbik7CisgICAgZWxzZQorICAgICAgICBtX3NvdW5kQnV0dG9uLT5zZXRJ
Y29uKG1fc291bmRPbkljb24pOworCisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0YXJ0KCk7Cisg
ICAgZW1pdCBtdXRlZChtX2lzTXV0ZWQpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uQ2xv
c2VDbGlja2VkKCkKK3sKKyAgICBtX2hpZGVXaWRnZXRUaW1lci0+c3RvcCgpOworICAgIGhpZGUo
KTsKKyAgICBlbWl0IGNsb3NlQ2xpY2tlZCgpOworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9u
Vm9sdW1lU2xpZGVyUmVsZWFzZWQoKQoreworICAgIG1faGlkZVdpZGdldFRpbWVyLT5zdGFydCgp
OworICAgIGVtaXQgdm9sdW1lQ2hhbmdlZChtX3ZvbHVtZVNsaWRlci0+dmFsdWUoKSk7CisgICAg
bV92b2x1bWVTbGlkZXItPmhpZGUoKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0OjpvblZvbHVt
ZVNsaWRlck1vdmVkKGludCB2YWx1ZSkKK3sKKyAgICBlbWl0IHZvbHVtZUNoYW5nZWQodmFsdWUp
OworfQorCit2b2lkIE92ZXJsYXlXaWRnZXQ6Om9uVGltZXJUaW1lb3V0KCkKK3sKKyAgICBpZiAo
IW1faXNQYXVzZWQpCisgICAgICAgIGhpZGUoKTsKK30KKwordm9pZCBPdmVybGF5V2lkZ2V0Ojpz
aG93RnVsbFNjcmVlbigpCit7CisgICAgbV9oaWRlV2lkZ2V0VGltZXItPnN0YXJ0KCk7CisgICAg
UVdpZGdldDo6c2hvd0Z1bGxTY3JlZW4oKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5V2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL092ZXJsYXlXaWRnZXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9PdmVybGF5
V2lkZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIE92ZXJsYXlXaWRnZXRfaAorI2RlZmluZSBPdmVybGF5V2lkZ2V0X2gKKworI2lu
Y2x1ZGUgIlBsYXllckJ1dHRvbi5oIgorI2luY2x1ZGUgIlBsYXllckxhYmVsLmgiCisKKyNpbmNs
dWRlIDxRU2xpZGVyPgorCitjbGFzcyBPdmVybGF5V2lkZ2V0IDogcHVibGljIFFXaWRnZXQgewor
ICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgT3ZlcmxheVdpZGdldChRV2lkZ2V0KiBwYXJlbnQg
PSAwKTsKKyAgICB+T3ZlcmxheVdpZGdldCgpOworICAgIHZvaWQgc2V0RHVyYXRpb24oaW50KTsK
KyAgICB2b2lkIHNldFBvc2l0aW9uKGludCk7CisgICAgdm9pZCBzZXRWb2x1bWUoaW50KTsKKyAg
ICB2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOworICAgIHZvaWQgb25QbGF5ZXJT
dG9wcGVkKCk7CisgICAgdm9pZCBvblBsYXllckVycm9yKCk7CisgICAgdm9pZCBvbkVuZE9mTWVk
aWEoKTsKKyAgICB2b2lkIG9uQnVmZmVyaW5nTWVkaWEoKTsKKyAgICB2b2lkIG9uQnVmZmVyZWRN
ZWRpYSgpOworCitwcml2YXRlOgorICAgIFFTdHJpbmcgdGltZVRvU3RyaW5nKGludCk7CisgICAg
dm9pZCBhcHBseVN0eWxlU2hlZXQoKTsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIG9uQ29u
dHJvbENsaWNrZWQoKTsKKyAgICB2b2lkIG9uU2xpZGVyTW92ZWQoaW50KTsKKyAgICB2b2lkIG9u
U291bmRDbGlja2VkKCk7CisgICAgdm9pZCBvbkNsb3NlQ2xpY2tlZCgpOworICAgIHZvaWQgb25W
b2x1bWVTbGlkZXJSZWxlYXNlZCgpOworICAgIHZvaWQgb25Wb2x1bWVTbGlkZXJNb3ZlZChpbnQp
OworICAgIHZvaWQgb25UaW1lclRpbWVvdXQoKTsKKworcHVibGljIHNsb3RzOgorICAgIHZvaWQg
c2hvd0Z1bGxTY3JlZW4oKTsKKworc2lnbmFsczoKKyAgICB2b2lkIGNvbnRyb2xDbGlja2VkKGJv
b2wpOworICAgIHZvaWQgc2xpZGVyTW92ZWQoaW50KTsKKyAgICB2b2lkIGNsb3NlQ2xpY2tlZCgp
OworICAgIHZvaWQgbXV0ZWQoYm9vbCk7CisgICAgdm9pZCB2b2x1bWVDaGFuZ2VkKGludCk7CisK
K3ByaXZhdGU6CisgICAgUGxheWVyQnV0dG9uKiBtX2NvbnRyb2xCdXR0b247CisgICAgYm9vbCBt
X2lzUGF1c2VkOworICAgIFFTbGlkZXIqIG1fcHJvZ3Jlc3NTbGlkZXI7CisgICAgUUxhYmVsKiBt
X3Bvc2l0aW9uTGFiZWw7CisgICAgUUxhYmVsKiBtX2R1cmF0aW9uTGFiZWw7CisgICAgUGxheWVy
QnV0dG9uKiBtX3NvdW5kQnV0dG9uOworICAgIFBsYXllckJ1dHRvbiogbV9jbG9zZUJ1dHRvbjsK
KyAgICBRU2xpZGVyKiBtX3ZvbHVtZVNsaWRlcjsKKyAgICBib29sIG1faXNNdXRlZDsKKyAgICBR
SWNvbiBtX3BsYXlJY29uOworICAgIFFJY29uIG1fcGF1c2VJY29uOworICAgIFFJY29uIG1fc291
bmRPbkljb247CisgICAgUUljb24gbV9zb3VuZE9mZkljb247CisgICAgUVRpbWVyKiBtX2hpZGVX
aWRnZXRUaW1lcjsKKyAgICBQbGF5ZXJMYWJlbCogbV9wbGF5ZXJMYWJlbDsKK307CisKKyNlbmRp
ZiAvKiBPdmVybGF5V2lkZ2V0X2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9w
bGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckJ1dHRv
bi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiUGxheWVyQnV0dG9uLmgiCisKKyNpbmNsdWRlIDxRR2VzdHVyZT4KKyNpbmNsdWRl
IDxRR2VzdHVyZUV2ZW50PgorCitQbGF5ZXJCdXR0b246OlBsYXllckJ1dHRvbihRV2lkZ2V0ICpw
YXJlbnQpCisgICAgOiBRUHVzaEJ1dHRvbihwYXJlbnQpCit7CisgICAgZ3JhYkdlc3R1cmUoUXQ6
OlRhcEFuZEhvbGRHZXN0dXJlKTsKKyAgICBzZXRGaXhlZFNpemUoNTAsIDUwKTsKKyAgICBzZXRJ
Y29uU2l6ZShRU2l6ZSg1MCwgNTApKTsKKyAgICBzZXRTdHlsZVNoZWV0KCJib3JkZXI6IG5vbmUi
KTsKK30KKworYm9vbCBQbGF5ZXJCdXR0b246OmV2ZW50KFFFdmVudCAqZXZlbnQpCit7CisgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpHZXN0dXJlKSB7CisgICAgICAgIFFHZXN0dXJl
RXZlbnQgKiBnZXN0dXJlRXZlbnQgPSAoUUdlc3R1cmVFdmVudCopc3RhdGljX2Nhc3Q8UUdlc3R1
cmVFdmVudCo+KGV2ZW50KTsKKyAgICAgICAgUUdlc3R1cmUgKiBnZXN0dXJlID0gZ2VzdHVyZUV2
ZW50LT5nZXN0dXJlKFF0OjpUYXBBbmRIb2xkR2VzdHVyZSk7CisgICAgICAgIGlmIChnZXN0dXJl
ICYmIGdlc3R1cmUtPnN0YXRlKCkgPT0gUXQ6Okdlc3R1cmVGaW5pc2hlZCkgeworICAgICAgICAg
ICAgZW1pdCB0YXBBbmRIb2xkKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gUVB1c2hCdXR0b246OmV2ZW50KGV2ZW50KTsKK30KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJCdXR0b24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxh
eWVyQnV0dG9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4vUGxheWVyQnV0dG9uLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFBsYXllckJ1dHRvbl9oCisjZGVmaW5lIFBsYXll
ckJ1dHRvbl9oCisKKyNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4KKworY2xhc3MgUUV2ZW50OworCitj
bGFzcyBQbGF5ZXJCdXR0b24gOiBwdWJsaWMgUVB1c2hCdXR0b24geworICAgIFFfT0JKRUNUCitw
dWJsaWM6CisgICAgUGxheWVyQnV0dG9uKFFXaWRnZXQqIHBhcmVudCA9IDApOworICAgIGJvb2wg
ZXZlbnQoUUV2ZW50Kik7CisKK3NpZ25hbHM6CisgICAgdm9pZCB0YXBBbmRIb2xkKCk7Cit9Owor
CisjZW5kaWYgLyogUGxheWVyQnV0dG9uX2ggKi8KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3lt
Ymlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL1BsYXllckxhYmVsLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJM
YWJlbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiUGxheWVyTGFiZWwuaCIKKworUGxheWVyTGFiZWw6OlBsYXllckxhYmVsKFFX
aWRnZXQqIHBhcmVudCkKKyAgICA6IFFMYWJlbChwYXJlbnQpCisgICAgLCBtX2J1ZmZlcmluZ0Fu
aW1hdGlvbkl0ZXJhdG9yKG1fYnVmZmVyaW5nQW5pbWF0aW9uKQorICAgICwgbV9hbmltYXRpb25U
aW1lcih0aGlzKQoreworICAgIG1fYnVmZmVyaW5nQW5pbWF0aW9uLmFwcGVuZChRUGl4bWFwKCI6
L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18xLnBuZyIpLnNjYWxlZChRU2l6ZSg4MCwgODApKSk7
CisgICAgbV9idWZmZXJpbmdBbmltYXRpb24uYXBwZW5kKFFQaXhtYXAoIjovaW1hZ2VzL2xvYWRp
bmdfYnVmZmVyaW5nXzIucG5nIikuc2NhbGVkKFFTaXplKDgwLCA4MCkpKTsKKyAgICBtX2J1ZmZl
cmluZ0FuaW1hdGlvbi5hcHBlbmQoUVBpeG1hcCgiOi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdf
My5wbmciKS5zY2FsZWQoUVNpemUoODAsIDgwKSkpOworICAgIG1fYnVmZmVyaW5nQW5pbWF0aW9u
LmFwcGVuZChRUGl4bWFwKCI6L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ180LnBuZyIpLnNjYWxl
ZChRU2l6ZSg4MCwgODApKSk7CisgICAgbV9idWZmZXJpbmdBbmltYXRpb25JdGVyYXRvciA9IG1f
YnVmZmVyaW5nQW5pbWF0aW9uOworICAgIG1fYW5pbWF0aW9uVGltZXIuc2V0U2luZ2xlU2hvdChm
YWxzZSk7CisgICAgbV9hbmltYXRpb25UaW1lci5zZXRJbnRlcnZhbCgyMDApOworICAgIGNvbm5l
Y3QoJm1fYW5pbWF0aW9uVGltZXIsIFNJR05BTCh0aW1lb3V0KCkpLCB0aGlzLCBTTE9UKG9uQW5p
bWF0aW9uVGltZW91dCgpKSk7CisKKyAgICBtX2Nhbm5vdHBsYXkgPSBRUGl4bWFwKCI6L2ltYWdl
cy9idXR0b25fY2Fubm90cGxheS5wbmciKS5zY2FsZWQoUVNpemUoODAsIDgwKSk7Cit9CisKK3Zv
aWQgUGxheWVyTGFiZWw6Om9uUGxheWVyRXJyb3IoKQoreworICAgIHNldFBpeG1hcChtX2Nhbm5v
dHBsYXkpOworICAgIHNob3coKTsKK30KKwordm9pZCBQbGF5ZXJMYWJlbDo6c3RhcnRCdWZmZXJp
bmdBbmltYXRpb24oKQoreworICAgIG1fYnVmZmVyaW5nQW5pbWF0aW9uSXRlcmF0b3IudG9Gcm9u
dCgpOworICAgIHNldFBpeG1hcChtX2J1ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yLm5leHQoKSk7
CisgICAgc2hvdygpOworICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnQoKTsKK30KKwordm9pZCBQ
bGF5ZXJMYWJlbDo6c3RvcEJ1ZmZlcmluZ0FuaW1hdGlvbigpCit7CisgICAgaGlkZSgpOworICAg
IG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworfQorCit2b2lkIFBsYXllckxhYmVsOjpvbkFuaW1h
dGlvblRpbWVvdXQoKQoreworICAgIGlmICghbV9idWZmZXJpbmdBbmltYXRpb25JdGVyYXRvci5o
YXNOZXh0KCkpCisgICAgICAgIG1fYnVmZmVyaW5nQW5pbWF0aW9uSXRlcmF0b3IudG9Gcm9udCgp
OworICAgIHNldFBpeG1hcChtX2J1ZmZlcmluZ0FuaW1hdGlvbkl0ZXJhdG9yLm5leHQoKSk7Cit9
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vUGxheWVyTGFi
ZWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVn
aW4vUGxheWVyTGFiZWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlh
bi9wbGF0Zm9ybXBsdWdpbi9QbGF5ZXJMYWJlbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBQbGF5ZXJMYWJlbF9oCisjZGVmaW5lIFBs
YXllckxhYmVsX2gKKworI2luY2x1ZGUgPFFMYWJlbD4KKyNpbmNsdWRlIDxRVGltZXI+CisKK2Ns
YXNzIFBsYXllckxhYmVsIDogcHVibGljIFFMYWJlbCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoK
KyAgICBQbGF5ZXJMYWJlbChRV2lkZ2V0KiBwYXJlbnQgPSAwKTsKKyAgICB2b2lkIG9uUGxheWVy
RXJyb3IoKTsKKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgc3RhcnRCdWZmZXJpbmdBbmltYXRp
b24oKTsKKyAgICB2b2lkIHN0b3BCdWZmZXJpbmdBbmltYXRpb24oKTsKKyAgICB2b2lkIG9uQW5p
bWF0aW9uVGltZW91dCgpOworCitwcml2YXRlOgorICAgIFFQaXhtYXAgbV9jYW5ub3RwbGF5Owor
ICAgIFFMaXN0PFFQaXhtYXA+IG1fYnVmZmVyaW5nQW5pbWF0aW9uOworICAgIFFMaXN0SXRlcmF0
b3I8UVBpeG1hcD4gbV9idWZmZXJpbmdBbmltYXRpb25JdGVyYXRvcjsKKyAgICBRVGltZXIgbV9h
bmltYXRpb25UaW1lcjsKK307CisKKyNlbmRpZiAvKiBQbGF5ZXJMYWJlbF9oICovCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vV2ViUGx1
Z2luLmNwcAkocmV2aXNpb24gODYzMzIpCisrKyBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4vV2ViUGx1Z2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAsNiArMjAsMTAg
QEAKIAogI2luY2x1ZGUgIldlYlBsdWdpbi5oIgogCisjaWYgZGVmaW5lZChXVEZfVVNFX1FUX01V
TFRJTUVESUEpICYmIFdURl9VU0VfUVRfTVVMVElNRURJQQorI2luY2x1ZGUgIkhUTUw1VmlkZW9Q
bHVnaW4uaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8UXRHdWk+CiAjaW5jbHVkZSA8UXRQbHVnaW4+
CiAjaW5jbHVkZSA8YWtuZGlzY3JlZXRwb3B1cC5oPgpAQCAtMjQ3LDYgKzI1MSwxMCBAQCBRT2Jq
ZWN0KiBXZWJQbHVnaW46OmNyZWF0ZUV4dGVuc2lvbihFeHRlCiAgICAgICAgIHJldHVybiBuZXcg
V2ViUG9wdXAoKTsKICAgICBjYXNlIE5vdGlmaWNhdGlvbnM6CiAgICAgICAgIHJldHVybiBuZXcg
V2ViTm90aWZpY2F0aW9uUHJlc2VudGVyKCk7CisjaWYgZGVmaW5lZChXVEZfVVNFX1FUX01VTFRJ
TUVESUEpICYmIFdURl9VU0VfUVRfTVVMVElNRURJQQorICAgIGNhc2UgRnVsbFNjcmVlblZpZGVv
UGxheWVyOgorICAgICAgICByZXR1cm4gbmV3IEhUTUw1RnVsbFNjcmVlblZpZGVvSGFuZGxlcigp
OworI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4v
cGxhdGZvcm1wbHVnaW4ucHJvCShyZXZpc2lvbiA4NjMzMikKKysrIFNvdXJjZS9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTE1LDYgKzE1LDI5IEBAIGxvYWQobW9iaWxpdHljb25maWcsIHRydWUpCiAKIGlzRW1wdHko
T1VUUFVUX0RJUik6IE9VVFBVVF9ESVIgPSAuLi8uLi8uLi8uLgogCitjb250YWlucyhNT0JJTElU
WV9DT05GSUcsIG11bHRpbWVkaWEpIHsKKyAKKyAgICBDT05GSUcgKz0gbW9iaWxpdHkKKyAgICBN
T0JJTElUWSArPSBtdWx0aW1lZGlhCisgICAgREVGSU5FUyArPSBXVEZfVVNFX1FUX01VTFRJTUVE
SUE9MQorCisgICAgU09VUkNFUyArPSBcCisgICAgICAgIEhUTUw1VmlkZW9QbHVnaW4uY3BwIFwK
KyAgICAgICAgSFRNTDVWaWRlb1dpZGdldC5jcHAgXAorICAgICAgICBPdmVybGF5V2lkZ2V0LmNw
cCBcCisgICAgICAgIFBsYXllckJ1dHRvbi5jcHAgXAorICAgICAgICBQbGF5ZXJMYWJlbC5jcHAK
KworICAgIEhFQURFUlMgKz0gXAorICAgICAgICBIVE1MNVZpZGVvUGx1Z2luLmggXAorICAgICAg
ICBIVE1MNVZpZGVvV2lkZ2V0LmggXAorICAgICAgICBPdmVybGF5V2lkZ2V0LmggXAorICAgICAg
ICBQbGF5ZXJCdXR0b24uaCBcCisgICAgICAgIFBsYXllckxhYmVsLmgKKworICAgIFJFU09VUkNF
UyA9IHBsYXRmb3JtcGx1Z2luLnFyYworfQorCiBTT1VSQ0VTICs9IFwKICAgICBXZWJQbHVnaW4u
Y3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0
Zm9ybXBsdWdpbi5xcmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3Bs
YXRmb3JtcGx1Z2luL3BsYXRmb3JtcGx1Z2luLnFyYwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9wbGF0Zm9ybXBsdWdpbi5xcmMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzwhRE9DVFlQRSBSQ0M+PFJDQyB2ZXJzaW9uPSIxLjAi
PgorPHFyZXNvdXJjZT4KKyAgICA8ZmlsZT5pbWFnZXMvYnV0dG9uX2Nhbm5vdHBsYXkucG5nPC9m
aWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25fY2xvc2UucG5nPC9maWxlPgorICAgIDxmaWxl
PmltYWdlcy9idXR0b25fcGF1c2UucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25f
cGxheS5wbmc8L2ZpbGU+CisgICAgPGZpbGU+aW1hZ2VzL2J1dHRvbl9zb3VuZF9vZmYucG5nPC9m
aWxlPgorICAgIDxmaWxlPmltYWdlcy9idXR0b25fc291bmRfb24ucG5nPC9maWxlPgorICAgIDxm
aWxlPmltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18xLnBuZzwvZmlsZT4KKyAgICA8ZmlsZT5pbWFn
ZXMvbG9hZGluZ19idWZmZXJpbmdfMi5wbmc8L2ZpbGU+CisgICAgPGZpbGU+aW1hZ2VzL2xvYWRp
bmdfYnVmZmVyaW5nXzMucG5nPC9maWxlPgorICAgIDxmaWxlPmltYWdlcy9sb2FkaW5nX2J1ZmZl
cmluZ180LnBuZzwvZmlsZT4KKyAgICA8ZmlsZT5xc3MvT3ZlcmxheVdpZGdldC5xc3M8L2ZpbGU+
Cis8L3FyZXNvdXJjZT4KKzwvUkNDPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9xc3MvT3ZlcmxheVdpZGdl
dC5xc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1
Z2luL3Fzcy9PdmVybGF5V2lkZ2V0LnFzcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
cXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9xc3MvT3ZlcmxheVdpZGdldC5xc3MJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTkgQEAKK1FTbGlkZXI6Omdyb292ZSB7DQorICAgIGJvcmRlcjogMnB4
IHNvbGlkIGJsYWNrOw0KKyAgICBib3JkZXItcmFkaXVzOiA1cHg7DQorICAgIGJhY2tncm91bmQ6
IHdoaXRlOw0KK30NCisNCitRU2xpZGVyOjpoYW5kbGUgew0KKyAgICBib3JkZXI6IDJweCBzb2xp
ZCBibGFjazsNCisgICAgYm9yZGVyLXJhZGl1czogOHB4Ow0KKyAgICBiYWNrZ3JvdW5kOiBxbGlu
ZWFyZ3JhZGllbnQoeDE6MCwgeTE6MCwgeDI6MSwgeTI6MSwgc3RvcDowICNlZWUsIHN0b3A6MSAj
Y2NjKTsNCit9DQorDQorUVNsaWRlcjo6YWRkLXBhZ2Ugew0KKyAgICBib3JkZXI6IDJweCBzb2xp
ZCBibGFjazsNCisgICAgYm9yZGVyLXJhZGl1czogNXB4Ow0KK30NCisNCitRU2xpZGVyOjpzdWIt
cGFnZSB7DQorICAgIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOw0KKyAgICBib3JkZXItcmFkaXVz
OiA1cHg7DQorfQ0KKw0KK1FTbGlkZXI6Omdyb292ZTpob3Jpem9udGFsIHsgDQorICAgIGhlaWdo
dDogMTBweDsNCit9DQorDQorUVNsaWRlcjo6aGFuZGxlOmhvcml6b250YWwgew0KKyAgICB3aWR0
aDogNDBweDsNCisgICAgbWFyZ2luLXRvcDogLTE1cHg7DQorICAgIG1hcmdpbi1ib3R0b206IC0x
NXB4Ow0KK30NCisNCitRU2xpZGVyOjphZGQtcGFnZTpob3Jpem9udGFsIHsNCisgICAgaGVpZ2h0
OiAxMHB4Ow0KKyAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsNCit9DQorDQorUVNsaWRlcjo6c3ViLXBh
Z2U6aG9yaXpvbnRhbCB7DQorICAgIGhlaWdodDogMTBweDsNCisgICAgYmFja2dyb3VuZDogcWxp
bmVhcmdyYWRpZW50KHgxOjAsIHkxOjAsIHgyOjEsIHkyOjEsIHN0b3A6MCAjZWVlLCBzdG9wOjEg
I2NjYyk7DQorfQ0KKw0KK1FTbGlkZXI6Omdyb292ZTp2ZXJ0aWNhbCB7DQorICAgIHdpZHRoOiAx
MHB4Ow0KK30NCisNCitRU2xpZGVyOjpoYW5kbGU6dmVydGljYWwgew0KKyAgICBoZWlnaHQ6IDQw
cHg7IG1hcmdpbi1sZWZ0OiAtMTVweDsgbWFyZ2luLXJpZ2h0OiAtMTVweDsNCit9DQorDQorUVNs
aWRlcjo6YWRkLXBhZ2U6dmVydGljYWwgew0KKyAgICB3aWR0aDogMTBweDsNCisgICAgYmFja2dy
b3VuZDogcWxpbmVhcmdyYWRpZW50KHgxOjAsIHkxOjAsIHgyOjEsIHkyOjEsIHN0b3A6MCAjZWVl
LCBzdG9wOjEgI2NjYyk7DQorfQ0KKw0KK1FTbGlkZXI6OnN1Yi1wYWdlOnZlcnRpY2FsIHsNCisg
ICAgd2lkdGg6IDEwcHg7DQorICAgIGJhY2tncm91bmQ6IHdoaXRlOw0KK30KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1w
bHVnaW4vaW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0
L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9jYW5ub3RwbGF5LnBuZwpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
CgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUZBQUFBQlFDQVlBQUFINUZzSTdBQUFBQ1hCSVdY
TUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpW
SmxZV1I1Y2NsbFBBQUFCQ1pKUkVGVWVOcU1rRkVLQUNBSVE5dnVmK2ZGCklFRURMVDhFM1hPS2tM
UitnazRBVEhjVHNvN2ptQ0ZrcURnMllobm15eW42dk81QlY5K2d1cHJUdXR6bkFCVTQvamplYUgw
TFFDbVYKSkFFQWdxRDgvNk10TFVybzVLMGhCRnlzdFJsTVh6L3J4a0xhb1JvVzZ3MDd3dE5hd2JH
cnFkZ0s0SnEzT3R3NVp0WHJua2hFVkVWRQordTZSZ3BlY0lQZTZQbk9rVEVLMktRRHJaSkFFQUFp
Q3dQVC9mNjZMVGFXUUh2UllBeFZzVHpQN0dDLzRqZGVFdkZrNnlBaHBGRVY5CkZSaFEyWml3Q3dq
WW1BaFFFN0QxZ3oyam14bG5rZWhvSG1WZkNXVlV5VmlMUm1MUFM4dHJ4NllkN0NVQUpmVjJBeUFJ
QTFEMGh6MTEKRUkycnVDa2lpc0hTeDRXRUdCSjZLRmlvS2JkZTJ0bVBTWmN4cVY5cDI0KzIxWlZt
SjJPU2NoNExRYjJZTEZ0Wk5YdmI5MkxxR2R3RAppbXJZbStyemFRZEwwQWo3UUlJUzdBZEdLTUVH
MEVNSnBvSUV0VEFUOUg1QVdGSXpHRUduc2JCT2FkSFM0dWMzZ0JZL3ZRRVV4ZGpFCmpSb25lSFZt
b2ViakVHRWFhajRPRlBOaUxnRm9yMk1jZ0VFWWhxTDN2M1dscW1KQVRZanR6OEFJZVJMRVFOc3Az
NUR2R1JIVjFpa24KYkp1SFE2ZDF5Z25GS1l1aGFwMjE3NU9JVHFBbjJGK2J2bU0vb0RUVWhiVVhI
Z0ZOWVpNdWRxRUk3QWgwb1JSc0RLU2hVNWdNVEtFcQpMQUZLWnl5T3A5dXdGSXJEOEJ6Rmt4OE9m
RHo1OGNDbllUUlVYc0NPQzdQT2VBRVhwa0xseHdJRmMrdEkvNE5MVC82MnppTUFyMlp5CkJDQU13
OEQrdStiRk43NTJWWUJIZ29GRWg5djVsVWx3ZkE3K1QyVy93UTdPODlzd1NYWnh5ai9NSURuQmFm
MytKTWtwVHZzUUpVaHUKY0VZbi9JWGtGa2U3ZzZuN1dCVUtpRmd3MVF3aHVSUXRxT2hCa2lTcHF2
RThSWmY4Z0NkQmpSTWVtY1ZjSGUySHQ5NDRhdG9WNDA2UwozTVFma1Z3bWtzMWNTRjRDK0VqOGRs
SkJpV3d3a2c4U0NldEtxaVhqWHlVQ05rTDBrWjZrOVZ3czViLzBKS2pveFQyRVhlUWdNcDFVCjVw
b1NwcnM2bysxRTdJTlp4U0oxYktMUVBucWMvdkJKbFN4eDJzUEV6c0lHcHpWTWJuNU1jY3BoWXkx
bGd2TWN0blptSmpqVk5wQzYKZWRUQnFZYjFLcUxDK1FRbzd3eVNFSVpoR01oVGVSby9oUXNISmdl
bUpMYXlHL29CV1dxVDJMSW5YV29kcEhvcHFWWklhMUUzQUQxVApuMmxJdUdrK1B3TjludGpqckpG
QnlHbytVMERmaWhHcWtGMThsb0FNUW5iektRRWlDcG5pVXdwRUVETE5weDAwSmVRdURvZ2dqTUpk
Cm51ZWhDa21KVVJFa09TYk4yNmF1Q3Z5eW9XOG5sbzBiZTZEaFQwQjZKcURJd2NpNXFDcVpKU2J4
dW5LS1ZrWnE2MUpLL2ExelJtZ08KMEJIaWJYVi9UbHErTzRRODhnQ0oybWducHpBSklmOGlpVzcx
SXcxR0pybWNVeGdKYUdQWDRBQ1RMUzJOZFk1MXlFM0JJbCtxc2FHRQphaldZVzVxUS9kbmZWTi9h
cytrQzNqa2ZrK1JURGt5YTBFcndLUU1tendoMjhsa0dOazJwZHZDWkJqYU85M2J3cVJqTTFrN3FW
L0M1Ci9PdUc0VUx4eC90KzRQdnRnR2VGendzNlR5dFo3TUl6U2dBQUFBQkpSVTVFcmtKZ2dnPT0K
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1
dHRvbl9jbG9zZS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMg
YSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1
Z2luL2ltYWdlcy9idXR0b25fY2xvc2UucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5
cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVn
QUFBRElBQUFBeUNBWUFBQUZwT0xnbkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBCkdY
UkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUJ2eEpSRUZVZU5w
aS9QLy9Qd01qSStNbUJrelEKeGdLUzZPM3Q5VVdYV2Jod29UQVRpUEg1ODJlR29vSjhGUHJQbno4
TUxDREpUNTgrTVJTWGxqSDBkbmVCYVJENC9mczNBMXduU0NJdApJeE5NbytnRWNTS2pZOEE2WURS
SWtoRkk2d0p4S3hiWE1nQUVFRWh5RTFZSm9CZitZNU5nQXRsamJHVEk0T3pvaU9JRkpwRFROMjNl
Cnd2QUw2Tno2MmhxdzgwRmlZQjBnYkdwaXpIRDgrQW1Ha0tBZ01KOEZSQ0E3bDZDckFBSUlMREZs
eWhSZkJpTEJuRGx6anNGREJ3WnMKckswWmpodzlpbE1UU3BEQ0FCY1hGME5GV1NuRHVmTVhHSXdN
RGNCaTFiVjFLSnJBa2ZUeDQwYzRuamQvUGxnU3B1SGtxVk1vOHFDWQp4YkJwNGZ4NURQR0pTWEIr
YWtveWlqeFc1d1dGaEtMNG9hOS9BZ29mWkJOQUFJRkNidzRRaXhFYmVvekFvUDdQUUFKZytmbnpK
d05KCkduNzkrb1ZYQVFjN084TVBKRU5SYkFDbE1oQm9iRzdCeWdmN29hcXFDc1VQcmMxTktEWWdS
eUk0Z2YvNDhZTUJHY095SVFpQTJPankKVENBbklXTlExb1FCRUJ0ZG5nbmthUmllTW1raVdDRW9U
NE13Q0lERWtOV2dlRG96TzRmaDI3ZHZjRDRvcVRRM05USWdxMkdNaUlpZwpiY1RoektLNEFFQUFn
Uk1mTHkrdmRIZDN0d2NEbFFFd2tIN241ZVh0QUdVTHNaYVdGZzlTdlVNa1lOWFgxeGNHNXowYVdR
QUcvLzc5Clk4QnJDYWhFRUJjVFk3aDArVEs0eE1VR2Fxb3F3WFJQWHo4NGxlSzBCRmNPZlA3c09k
Z1NQVjFkTUw1dzRTTER1ZzBid0hKTkRmVW8KYWtIRlBGaytXYjV5SlJpSGhZWUFLeFVqQmdNRGZU
QkdCdVdWVlhpRDYrL2Z2d3hFeGNuaUpVdkJscUNEVTZkUEU5UkwwQ2NnTUgzcQpGQlErS0t2R3g4
WXlXRmlZTTVpWm1vTHhpUk1uR1JZdVhvelRFbVpRZmFpbnA2Y084aFl5WmdlV2hGTW5UNElyVGs1
TkEwYitackRjCnVmUG53V3hSRVJFR1dWbFpCaGtaR1FaOVBUMkd2ZnYyTWFDYmMrL2V2Y2ZnM0Jz
ZEhlMUxxeVI4K1BEaFl6VFBKL0NJZi9mdTNTZHUKYm00K1dsank1czJiVHdBQkJBb3VDeUN1b3BG
SFhnRWJsQ25nT0prMGFaSUhHeHNiSzdWdEtDMHQzUUZzTGp4bE1qQXdFR1ppWW1JRgpOU0tvamR2
YjIwRWx1eGdMcUgwTWloeGFBckFsSUZ0cGJnbXRmY0lFc3dRYlptVmh3U2tIdzVZV0Zuamw4UVlY
QndjSFEwRitIcGpkCjB0YU8xWVYrdmo3Z0trQlZWWVZoOXB5NXBQdWtwS2dRcFdKQ2wvZjE5Z1pi
QUFLZ09zZld4aHFuVDNCYVV0ZlFpT0lhVUdzUUp1ZnYKNjh1Z3I2OEhsd05WWm52MzdTZmRFaEJH
YnpHQ2FzTUFmMytVaWd2VVRWaTlkaTNlT0dFQ2xmZjRNaFI2elFmclJvREEyWFBuR0ZhdQpXb1ZY
UDl3bmhISXVjaE1YQms2Zk9jdXdiUGtLZ25vSkJoY01oNGVGWWxnQzZoSVMwb2NTSi9oY0Voa1JE
cTVpc1lFSmZiMlUreVFtCktvckIzTXdNYmlpb0xnZlY4Y2dBMUhZbnlpZllKT05pWXNDTkJSZ0E5
WmJuTFZnQWxvTjFEcEFiRzJSWkFtb2N3TUN4WThjWjVzeWIKaHlJUGFsZ2dBMUREZytRNHFhbXJZ
M2owK0RHNG56MXo5bXlzYW1DZFhGQVFnbHFRdU9JRWJ5bGNWVjFEc0lTTmlZc2ZIRVU5Q3l6SApE
L2xLaStYdDI3ZWZhT1dUcjErL2ZpS3JrMGtHcUFZSU1MempZME1JVklOREM5akRaaTBwS2JFU0ZS
WGxHMHF1Zi8zNjlhZWVucDVqCndFYnFiM0NiWGxsWm1VOVFVSkNQMXJtRjJnRGtacERiTDF5NDhC
YnNFWHJrUmxvQmtOdkJ1WDFZZVlRZWhUQXR4NFlvaWhFT0RuWncKTzBZTTJNeStmUGtLdythdFc4
bHlDS2pKcnF1cncvRHExU3VHSmN1V01mejQ4Wk0rU1F2VVlRRzFrOFRGRWVQWUlJZUE4TVZMbDhI
agpJTVFBUDFDWFFFOFh6Z2NGU0ZGQkFjUExsNjhZRmkxWmduWFFqQ2lQRUp1MHZuejV3dkQ4eFhN
VWo4QUF5R0VnZk9IaVJZYjFHelppCjFSOFlBT3h5Nk92ak5COWtOc2dPdW1UMk5XdlhnWEZ3VUND
RG9ZRUJoanpJb1NCOC9zSUZoclhyMW9QRmNLbUZBV1MxZEMrMVZxMWUKQThhaHdjRU1Sa2FHR1BJ
Z2grTnpQTGdUZU80OHVCTkl0ZUtYa2xJTE50UUs2b2FaR0JzVHBlZk0yYlBBVHVicXdWbVBnRHFu
SUxOTQpUVXp3cWp0OTVnekQ4aFVyQjJjOUFpcUt6Y3hNaVZJTDhpZ0luenAxR2x6a1VxMGVnUTJt
a2dOaVFWMVdjek9jOGlkT25nTFQyTlNBClBBN0NJRFdMZ1VVdVJSMFNjcE5XZkZ3c2VBUU5Gemgr
NGdURHdrV0lBZnNGQ3hmaTFBUHlKQWlqNnlFbGFZR2I4UW9LQ3NMT3pzNVcKeEZaa29CRTZYT0RZ
OGVNTTgrWXZ3R3RHVW1JQ2c1V2xKVTU1MEN3VHNSWHIzcjE3anoxNDhPQXQyQ1B5OHZMQ2pvNk9W
c1NHQW15YQpIVFNMQVFOSGp4MWptRE4zSGttaG1aS2N4R0J0aGJEMjhlUEhEQjFkM1NnenA0VEEv
djM3anoxOCtCRGlFVGs1T1dGN2Uzc3JVdE1sCnlFUHVibTdBV253RFJlazdNQ0NBWWVldVhTUjVB
QVlPSGp4NDdOR2pSMjhwcWtkQUl6U3IxNnlodUFpbHhJemgyUjhaVmg0WnFoMHIKNU9JWHZFaUdu
WjJkMWNuSnlabVptWmwxS0hnQW1JSis3OXUzYisvUG56OS9BN212R0tHcjFFQzFWQW9EQ2F0K0Jn
bDRCWW9Jb0I5TwpBQUJVUFZhUVpaVk1EUUFBQUFCSlJVNUVya0pnZ2c9PQoKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BhdXNlLnBu
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBl
Lgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1
dHRvbl9wYXVzZS5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUF5Q0FZ
QUFBRnBPTGduQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJG
eVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQTZsSlJFRlVlTnBpL1AvL1B3TWpJK01t
Qmt6UQp4Z0tTNk8zdDlVV1hXYmh3b1RBVGlQSDU4MmM0RGc0TUFOTi8vdnhoWUFGSmZ2cjBDYTdq
ejkrL1lQN3YzNzhoa2lDVk1QRDN6MTlVCm5jaVM5WTJORUJPQWtveEFXaGVJVzdHNGxnRWdnRUNT
bTdCS0FMM3dINXNFQzh5ZSt0b2FNTjNZM0FLUlFIWTZzbGRZa0YyRzdGSzQKUkdSMERIR3VBZ2dn
c01TVUtWTjhHWWdFYytiTU9ZWVJPb1FBS05Rd1lncUVLOHBLNFhSNFdDaUtIRHdlUG43OGlHRWlU
QXlrQ0ZrZQphOHlDUUh4aUVncU43anlTL1FTeUNTQ0FRS0UzQjRqRmlOWEVDQXpxL3d3a0FKYWZQ
Mzh5a0tUaDE2OWZKR2xnQXRtQWpFRnhBY0l3Ck5ybzhUaHRnNHVqeUxEOSsvTUNxQVNhT0xvL1Qw
ekJ4ZEhtU25jUVlGeGYzbjZiQlNuTEU0Y3lpdUFCQUFJRVRIeTh2cjNSM2Q3Y0gKQTVVQjBMdS84
L0x5ZG9DeWhWaExTNHNIcWQ0aEVyRHE2K3NMczJDTFUycUNmLy8rTWREUEVrSkpwYW1oSHM2dWEy
aEVFWHZ3NENIRAp2QVVMcU9zVGRMWC8vdi9EcS84dnNKcWszSkovK0MyaGlrLytFMnNKS2RrWFhl
MC9ZT01FbjM2aWZSSVRGMCtVMklBbFlYakV2M3YzCjdoTTNOemNmTFN4NTgrYk5KNEFBQXBWZEZr
QmNSU09QdkFJMktGUEFKZXFrU1pNODJOallXS2x0UTJscDZRNWdjK0VwazRHQmdUQVQKRXhNcnFC
RkJiZHplM2c0cTJjVllRTzFqVU9UUUVvQXRBZGxLYzB2bzRwT1JFVndLOHZJTThYR3hZUGJCUTRj
WURodzhCTzlISVBjbApLTElFVlBZZzJKaHFpUWxxZ3BiOFJiTGtQN0NDSXNzU2tFdnh4UW15SWRq
VUVoT2ZCQ09lYXBiZ2o1Ty8xSW1UZ2ZmSlh5cEUvUEJKCndvVGk1T3JWcXhpZFdHeWQyaEZTQ2hQ
SzhVUEhKMi9mdnYxRUs1OTgvZnIxRTFtZFRESkFOVUNBNFIwZkcwS2dHaHhhd0I0MmEwbEoKaVpX
b3FDamZVSEw5NjlldlAvWDA5QndETmxKL2c5djB5c3JLZklLQ2dueTB6aTNVQmlBM2c5eCs0Y0tG
dHl5UW9wWDJ1WkZXQU9SMgpjRzRmVmg2aFJ5Rk15MkdiNFJjamxIcEVIdGl2aUl1SnhoQS9kUGd3
c0o5eEdNNnZyY2Jzd2o5ODlJaGgwZUlsMVBNSUpVa0xWeUFRCmsyUXB0WnVxTVlMYzRFY1ZKMnd1
cFhaVDF5Tkk3WDFVUy80Uk5wZmFIaGxOV21pZEk5S1RGZ1AxWW9UU2VtUWdZd1NsSGlHMnQwZE0K
VDVMVVBQS2ZnVHAxMlBBcXRZWk4wcUkwVkVBelRKMWQzUmppYjk2K1JURVhtNXB2Mzc4Tm5ub0VO
RmwvOWRvMWd1cUlVVE9nOWNobwpmMlRVSThNNGFjRVh5YkN6czdNNk9UazVNek16c3c0RkR3QlQw
Tzk5Ky9idC9mbno1MjhnOXhVamRKVWFhT0l5aFlHRVZUK0RCTHdDClJRVFFEeWNBbTNFdUFHQklm
cElBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0
Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BsYXkucG5nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3Bs
YXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3BsYXkucG5nCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBRElBQUFBeUNBWUFBQUZwT0xnbkFBQUFDWEJJV1hNQUFBc1RB
QUFMRXdFQW1wd1lBQUFBCkdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVj
Y2xsUEFBQUJSRkpSRUZVZU5waS9QLy9Qd01qSStNbUJqUUEKRlBkakFVbjA5L2Y3b2t1Q3hKbEFq
RStmUGpFRSt2c3phR3BvZ05rZ0RBSmd5WThmUHpMOCtmdUh3ZDNObGFHdXBock1Cd0VXbU02Lwpm
LzZBQlZMVE0rQkd3eVZyNnhzWU1PekY1Vm9naUFRSUlFWWdNUWVJeFRCMEFiM3dINHNPQmlhWWt3
dnljdUhPQjJFV21GTkJBT1IwCkVDZ3VMV05nZ1hrUXc5a3dpZkRJS0ZUTGdSaWJjeGtBQWdqczNH
blRwaVV6RUFteXNySTJnMEpIRE5rTlVSSGhETXRXck1TckVSNmsKTVBEbjcxK0c4dElTT0wrNnRn
NHpiR0F4Q01OL29KRUZBMzYrUGlqeVdHMzYrK2N2UTF4Q0ltbk9xNmlxSWhnWUFBR0VMeVZnQXhQ
QgphUmtZM0w3RXFONjVjNmNTMkZrL2YvNGt5bmdIQndkdERBM3M3T3g0RGNEUUFJdVRwcFpXNGpR
Z0o5SG5MMTR3VEprNkRUTVNmL3o0CkFjZklRRkpDZ3FHMXVRa1VpbkI1Z3A3T3ljc256a2s5dlgw
TU4yL2RJdXlIYjkrL00yUmtaaEVmU29sSnlZVFRFN0VSOS9mdjM5K2cKbk5nR3hEckU1a1NBQUNJ
MThaRURyckRBTEpnMGFaSXZMV3pJeTh1RGhCVXA0VVVPSUdoSmJIUVVnNXljSE1QTFY2OFk1c3lk
Unh0TAovdjJEMUFIaVltSU0xWlVWY1BHMmprNk1yRUcrSmYvL1lSV3ZxaWlIc3pkdjJjcHc1T2hS
U256eWo2QkxmWDI4R1I0K2VzaHc1ODVkCjhpejVqOE9TNzhEc1dsUlNTdDA0QVlHang0NHh6SjAz
bi9vUlAzM0dESWJYYjk3UU5nay9lZnFVNG56Q0RNU3ZnTmlDaFlXRmtZZUgKUnhoWU9ERlFBLy82
OWV2M3BrMmJ0b0VzQVFnZ1dObmxER1RuVXptanZ3S2FuUUpyMjVCVW9wSUtRSzFUY01zcUtTbEoy
OFRFUkluYQpGb0FhV3lBZmdTUGV3TUJBQ2IzNVEwVWd4Z0t0aVJob0NjQ1cwTkFYaUFZSHZxVG80
ZVpHZGpJbTJpYzZPdHBndkdUcE1tQWgrSWo4CjRDSW1UbUtBbFJlb1ZPanM3cUZ0bklDYWs2Q0cz
b1VMRnhuV2JkaEFmWjhnQXdNRGZUQ2VBeXlSNzkrL1Q5dlVsWktVQ0s2QzZ4dWIKQ0tjdWtDVzRN
Q0hBd2NIQjBObmV4aEFTSEl4VEwxVXk0OU5uenhpV0xsdEd1OHhZV2w0QnJvcXBIdkVnc0hyTldv
WjkrL2ZUcGxoNQovT1FKUTFOekMyMHlJNnlMOHUzYk45cGt4cVhMbGpQczNMV0xzbElZbjAraVkr
T0dSbEZQdjBvTFdMcitabVptWnFWcHBiVmx5NVlkCm9IWVN0ZHBjSUh6djNqMVlCM2dpcUxYQ0Rj
VExhZFZmQkRhSnFnQUNETmE0QTFsVVRjdjJGNjA4QWNTdFFEOThCWVVXU2dzMU1qSlMKM2RMU1Vw
R05qWTExTUxvY2xIVDI3ZHQzYThPR0RmZVFoNTFRaHYvNit2bzhCcXNIc0htb3FLaG9CMFlQQ054
VEFlWkdXbWQ5YWdIMAprZ1BGSTdRdUpHbGVOaUtOWTVGc0FEOGZIOE5IcEhIWFFlRVJjbUxFdzhP
ZFFVNVdGdHdNUDN6a0tNUHBNMmVHcGtkQXhUZXNxZS9pCjdBVEdJSER4MG1XR1hidDNFejFPTmVC
SkMrWVJkS0N2cHd2R0lQRGk1VXVHSFR0M01qeDQ4SER3eHdnK0lDRXV6cEFRQjJtMmdXSm8KMy80
RERNZU9IeDljTWNKQWhFZlF1MHBlbmg1Z0RBTG56cDFuMkx4MUs4VkprQzR4Z2c4WUdSbUNNUWc4
ZS82Y1lkT216UXgzNzkwYgppRHhDdmVRaEpTbkprSkdlQmk3NU5temNSTEJyT0toaUJBUytBNVBW
OXUwN0dBNGNQRGlBcFJZRGVSNTUrdlFwdytxMTZ4aHUzNzQ5CmRFb3RHRGgrNGdURHFsV3J3Zk53
UTZZZUFTY1pvSU0zYmQ3TXNIdlAzcUZUczhOSFFSNC9abGk2ZkRuRGpSczNoMTRUNWZDUkl3eUwK
bHl3bGE1UmwwQ1F0VXNlZ0JtMk1ESnYreUdEeUNHZ2VEcnlRNk1hTkcxZFZWRlMwaDRMRDc5eTVj
eFdKK3dvMkhFVFRxVGhhRHduQgp4N1ZnQURwNUdjbUFaYW5YSUFPZ1ZMUWM2SFo0QlFVQXV0NlZu
SlBiV2lVQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4v
cGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9zb3VuZF9vZmYucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fu
bm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUg
PSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3NvdW5kX29mZi5w
bmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUF5Q0FZQUFBRnBPTGduQUFB
QUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNC
SmJXRm5aVkpsWVdSNWNjbGxQQUFBQm9oSlJFRlVlTnBpL1AvL1B3TWpJK01tQmt6UQp4Z0tTNk8z
dDlVV1hXYmh3b1RBVGlQSDU4MmNHVnhjWGhxU2tKREFiaFAvOCtjTUFsdnowNlJPRHJwNGV3NnVY
TDhGc0VQNzkremNEClhHZGFXaHFEc0lnSWc3YVdGbHduQzB3U0JISnljdUIyZ2lRWmdiUXVFTGRp
Y1MwRFFBQ0JKRGRobFFCNjRUODJDU2FRUFVhR2hneEYKUlVWdzU0TXdDOGlwRG82T0RMZHUzZ1E3
RzBVSHlObHE2dW9Nems1T0NCMHdKMGRHUmhMbktvQUFBa3RNbVRMRmw0RklNR2ZPbkdNbwpvWU1N
VWxOVEdXYlBubzBoamhHa2lvcUtESGEydGd3L2YvNWtZR1pteG1vWVhOUEhqeC9CQXRIUjBReWNu
SnhnOXRPblR4bENnNE1aCjVzeWJoNklKRkxNb05tVmtaTUFsZ1RIQTBEOXhJbUhuSVFOUU9HTURJ
SnNBQWdnVWVuT0FXSXpZMEdNRUJ2Vi9CaElBQ3lpRVNOTHcKNjljdmtqUXdnV3lBNGJpWUdGQSta
S2lvcUdCQUZrZkdjQnNFQlFVWmpwODh5ZUFDekhvZ2dNdG1saDgvZm9BWjl2YjJES2FtcG1EMgoy
Yk5uR1dEaU9EME5vc0dSdzhMQ1lHeHN6Q0FwTHM3UTF0R0I2UWVRMVNDOGFORWlocXlzTExBbUVH
aG9hbUtvQXZvRkpnL0RUT2llClNrNU9acmgrL1RxWVhWbGRqZUZweG9pSUNOcEdITTRzaWdzQUJC
QTQ4Zkh5OGtwM2QzZDdNRkFaQUFQcGQxNWUzZzVRdGhCcmFXbngKSU5VN1JBSldmWDE5WVJaWVhO
TUsvUHYzandHbkpiWTJOZ3pDUWtJTUd6WkJncCtEZzRPaHVMZ1lYT0pPbmp5WmRFdXc1WU85Ky9Z
eApPRG80TUNRbEpEQzhmZmNPWENPQkFLamlJeVhINHZSSldGZ1lPSXZBd0pldlg4RjVqSTJWbFVG
R1ZwYWs0UDM3OXk5MlMwQVN5QUJVCi80QUFxSUlDMWErUkVSRU1DeFl1Sk5vbjREUVBMS0Z4MWo3
QTRoSmNQOERBMjdkdkdVNEJpeHg5WVBDOUJGbzRhODRjdkpiczJyWHIKR0F1K3NnbTVoQWZtSXdZ
aFlFSUFnVFZyMTRLeEliQmVKaFEvZUZNWE9nQm1LakFOaWl1WStoTW5UbENXaEhHQlk4ZU9rWlJQ
NEJILwo3dDI3VDl6YzNIeTB5SXh2M3J6NUJCQkFvSWkzQU9JcUdtWDRWOEI4bFFKT1haTW1UZkpn
WTJOanBiWU5wYVdsTzRETmhhZE1CZ1lHCndreE1US3lnS29mYXVMMjlIVlN5aTdHQWlnbjB6RWR0
QUxZRVZuSFMxQkphKzRRSlpna3hPREF3a0dpMU1BeTNCRnVrZ2RwUXdBUUIKNTRQYTRpb3FLaVJI
UGw2ZmdFQk1WQlM0Y016TnpXV1FsNWVINTJDeWZJSk5jc2FzV1dBRi92NytERnhjWENqRkJLbVdZ
STE0VURjQQpCTVFsSlJtZUE0dnpTNWN1TWVnQmkzWldZS1ZGVGlKaEFaV1M2RWs0SlNVRnpnYVZ1
cUJhRVdZUk9ja2RhOFNqQTFoVkRMSUlGRWRVCmlYaHNBR1pSRHJEVkMyb21VeVVKZi8vK0hhZEYr
Y0RVQnJLSUlwK0FraXlvdXp0anhnd01pNXBiSVIzcm9vSUNlRUlnT3dtRDhMbHoKNXhpYW01c3hh
anBRNXdCY2xBTWJlMlFuWVdUdzRNRURzTTlnclVhWTJ0cjZlc3BTRnpvR05VMHpNek1aaUZHTExV
NklMb1ZCSGVMWQoyTmpCVzlSanpmRkRzdEppQWJadFA5SEtKMSsvZnYxRVZpZVRERkFORUtCZDgz
bEpJSWppK0FzU2I1dXlHQlo0VVpRNm1KNGxpZ3p4ClVJUUVucUt6aHdnVXZQa3YrRTlFUHluc0Zp
TFdIcVdqcHhKRVBZcHJIaW9QMFY2YTkycVhSWFRUYk1pdEhneW9NTFB6ZFg1OTMyZlcKa0krWktE
TDBiN0VNMjVKT3AwTU9oME13VSsvYjdmWlROcHN0c1NXc2tLZjNlRHlDM1c0WGVLK1c3dzdzTS9h
OVhDNTNwdFdjbWZkcQo1QlhZZDFydHYwb0l6MDNZNi9WQ3RWcmx5b2ErUENMQlFBRHU3dThORVVF
OEhpY1JpTEVybGNwa1RTM3MyTXJ5c2lhR0pmNXdsYzlyCmdoQ0dKUklKRUFUQmtBUnhGVExNMUVK
NGkyVnRkUlY4UGgrQm5OMmRIWGhrVm1sdWZoNXNObHZmQi9IY0RjZGE3TmVTUkdWell3T0UKbVJu
eTVMVmFqWURld3VJaVdlTWZHNUhQSGhhTHhTaGgwQXduU3hpd3FMRHd1ZHVGVjBXaDlFZ3ZpUGVP
T1BMVXd0eE4zL2xCOUxOWApFRTY1aVpwYWFnV2o2Q2VvOC9CQW9PSHMvSndMb2gvNUhCbEdTRDlC
V0k5NU9OamYyd05abHVIazlCUmV2bEdRZW82UWFXUitSWXhHCm95R2pDcUlvYXJoWmhTRklXajRM
M0tLUmdTLzUvZHB2TFNibzZQaDQ0STNhS0ZFb0ZFcHNvK21RRUxmYkxVWWlrZEJYR25LNVhIU1IK
cUFmNCtrQ1luOGxrM2hIVDFoWkJmVTFRcXdVSGg0ZGpDU29XaTZWNnZkNFoyNkkwR2cwNkJGRVE1
dmY2VVZORGJUdDNlVWxsbSsyQQp3V0FRbXMwbWRObGErakdMTWdoVTRCVVhRajBrSTNnNElyTHMx
L1pGTGtkbG90MHZjb3BrTWttZlU2a1VPSjNPeWJNb293YmVSLzNuCkkzOWVpTm55OVY0aDJrc3lW
cXZWRWc2SDE5bDVZREdEQURhREZFbVNicGp0VWRoWGVlcmpMVFc4dU1RcmhWbVREWWlNQThFMDNM
NEIKaHJkTXFYYXdkeVFBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
c3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvYnV0dG9uX3NvdW5kX29uLnBuZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWlt
ZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxhdGZvcm1wbHVnaW4vaW1hZ2VzL2J1dHRvbl9zb3Vu
ZF9vbi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFESUFBQUF5Q0FZQUFBRnBP
TGduQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJa
RzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQm5WSlJFRlVlTnBpL1AvL1B3TWpJK01tQmt6UQp4
Z0tTNk8zdDlVV1hXYmh3b1RBVGlQSDU4MmN3VGtwS2dyUC8vUG5EQUpiODlPa1RRMzE5UFFQSUNp
OHZMekQvOSsvZkRIQ2RhV2xwCkRQLysvV09ZUFhzMlhDY0xUQklFY25KeTRIYUNKQm1CdEM0UXQy
SnhMUU5BQUlFa04yR1ZBSHJoUHpZSkpwaVRpNHFLd0xTR2hnYVkKWmdFNUZhaUxBZWFOdlh2M0lu
U0FuQTF6WlZkWEY1aG1qSWlJK0UrU3F3QUNDQ3d4WmNvVVh3WWl3Wnc1YzQ2aGhBNHlTRTFOQlFj
agpPc0FJVWtWRlJZYVVsQlF3KzhPSEQzRHgxdFpXaHVycWFyZ21jQ1I5L1BnUmpLT2pvK0VtZ2lK
TVUxTVRMUDc5KzNlNEdsRE1vdGlVCmtaRUIxd1FLeTkyN2QyT0lZemdQR2NEQ0dSMkFiQUlJd0Rv
Vm5FQVF3c0RzNGtmOFh4VitmV3N2OXFCVzR1c2E4V2NYdHFKKzdveWcKN0M0SUoxd2doQXlKSVJN
SDJYczNmLzNLM3RHby9zQ0drVklLYkRYVVdyY2FUcHh3OVNZM2NNN0JFeDkrNGdSMHhoaHd6c0Zh
MjE5QwpESldHMFJnRG80N2tuSHVCbEJLRUVIUDB3REZTU21jK2w4YllqMFBJeksvNHlJLzI4VzYw
ZXU5NzB6aWVVZ3Bpak91bHRkYVFVcHA1CkNPRk95a3BaZnp2Y1VxSXIrd29nY09MajVlV1Y3dTd1
OW1DZ01nREcyKys4dkx3ZG9IQVhhMmxwOFNEVk8wUUNWbjE5ZldFVzVMaWwKQlFDVkZrUmJ3c0hC
d1ZCY1hBd3VjU2RQbmt5NkpmaHlvSVNFQkVOV1ZoYWNENnFWME5VSEJBUXdHQmtaTWRUVjFSSHZr
N0N3TUFaagpZMk9zbG9Jc2dhbnY3T3hrbURoeElzUEtsU3NaN3Q2OXk5RFUxQVRQd0REdzkrOWY3
SmFBSkhBQlpFdEFRRTVPanVIKy9mdmdZTVJtCkZrNmZ6SjgvSDR4QkFGaGNNakF6TTJPMVpNYU1H
UXdYTDE0RXMwSFp0NmFtQnJjbCtPSUVWa2dBOHhHRGtKQVFBN0w2MDZkUHc5V0IKTEtFNGRRRXpG
WmdHeFJVcFNaNGtTMkRnMkxGakpPVVRlTVMvZS9mdUU3QjQ1Nk5GWm56ejVzMG5nQURVVjdGcWhF
QVFGZkcwdEFpawoxVSt3ekNmRVVyQVM3TkpZQ0RZMlNXbGhaeUg0TC9rS2Y4REdKb1dLemFGOTlp
MnM4UzY3Um8xQ01qRGNpblA3bkdIbXpReTQ2NG5vCjYwa0YzNUpFZWFHTW11ZjVzNnFxbDZNUjRq
aCtKK1BDaDJ4WjFvTXN5eGYwbzZNMVRWTXcrNk9DdkY4cXZpT0VnZ0QxZEpDelBaRVoKeUJwMUhH
ZTFMZE5ONGZKOVh6SU1ZMWRvVjRVcmlpSkoxM1VoUTJQa212UFk1bkNCV1JrQUE3bFgyN2JwMENj
S0Z4Y0VQUUtLcVhGTwo4M01Rei9Pb0RjNFk0REVvQ2tIQWt2ZEZoRDBEZWcvQUpuOG92TVAyaUhQ
WGRmUWRLZXh2ZDAyZThGNkloTmtVUlNFUnByajVqMm1hCjNMczIxd216eFZmUG54R1JxcXE0ZDNG
VEdNL1liUkJubmljUTEzV2xwbW0rUWtLOEV2VWFyaWRoR05KZk12M2RiR0x6TDhjNmpOVU8Ka21V
WjlVUVVrY1VVTHN0U1NwS0VtMTNETUV4blRkUG84cmtwaGVkYTEvWGttYWhPc0NLM2Jic004bE5m
d0V3VkJJRzB4dlpYMllXRgpHUHoxWjZsZVlSWC83NXVXMHZmOTlTeFB4bkc4N2xveWQ4amJwd0R0
bXI5cUFrRVF4aTlCRVN3T0xSUXNyTVRHemtZa3BXa0ZLNS9CCldyRExLd2lXTnFsOUFzWEdhQmRq
SnhaaXJZVTJhVklJWXBQN0RkbGpGZlZPNHlXNUpBTmJMYTR6T3p0L3ZtL3VKRC9tSTNtUTI3SVEK
ZHJCV3E5M0ZZakhUVDlwYlpleXRYcTgvV3lHOGxaNCtsVXFaMFdqVTlEcGFyaTNvak83ajhmZzFv
RUNnMTlIb2xhQzdSUHV2TXNUTApKSnhPcDZXQjhaSWI4dFFqNVhKWmpJQ2VuczFtL25wYWtHR1ZT
c1V3VGRNMUUzUjFRejd6dENEY2dCQTZmdEgveU0zWnVWeE9Sa2N3CjQ4MW0wMWl0VmwvbmtVUWlJ
UzN5SWZqaTVCSEdMSEJ3U29iRG9hREJlRHd1WjdiYmJXTTBHbDNmRUNoTUdDNjc0UXdFYkJMZjZZ
LzAKc3pPWmpOMS9ydGZyblRhKzBXZ0lsWnBNSm8xaXNTaUdMcGRMVjRiYzZ1NC90YmgxRkNjT1dH
Nk0yTWQ5ck1sa3dyeFNqQXVIdy9LYwo5UDFPcHlPY0kwOHNtODA2Nm5XMlI5UVBMZ25HL2JNWGk0
VW9xaEtFdm05MW1nSUh6OVhMZFIyNTFCQWR2eXFwVnF1aUxFcmlBWDJmCllSWGVabys0Y2RKcnA0
NjRTWkVFbnc2YUNkWlNxWFFXMmtjQTZ0dzY0emptRllxL1FQTDV2SXdTa09sMGFzem5jL2VBeEsw
TGdiTXMKSlJTNWJyY3JnY2tnOFZqbTJqOGJMSDVvNXNGb2d3RWVuc0lJZUpRdmJWSElMQlJCREFM
ZnF5SEJxYWQxU0ZxdGxwMmhCb1BCOTdVbwpFQldNdU1oRXBOUklKQ0szZTg3WnZWN3Y1M1MvOEJU
UW9DcW9xZnErYVZHT0NmT29menp5NXczeEcxN2ZOOFQrU0NZVUNnVUxoY0s5ClZRK0NmakRBZWtI
YmZyLy90TmxzdHBTNW00K3YxQmhjOHVsUzNHY09vVUkvV2phOHZBTU5iSFJMemx5bExnQUFBQUJK
UlU1RXJrSmcKZ2c9PQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBs
dWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdfMS5wbmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlz
cGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9x
dC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18xLnBuZwpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNrQUFBQXBDQVlBQUFIZlp6QmdBQUFBQ1hC
SVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldG
blpWSmxZV1I1Y2NsbFBBQUFBOGhKUkVGVWVOcGkvUC8vUHdNMndBUmpkSFoyClRnTmh1QXhJUjBk
SHh6UVFEY0t2WHIxNkREWUZtUVBDTTJmT1hBQ2lHV0Yyd0l3cEx5L1BBdEdNdUN3SENDQ3NFa3hJ
N1Avb2dpQUIKeGxtelppMkFPeEZtKzM4SVFMRU1yQnJkVEVZWUF5Q0FjRG9MYnpnaEdmMS8rL2J0
bTJGc1ZGbWd5UlVWRlIwZ0YzMzY5T21ObVptWgpEMGdNUkQ5NjlPZ21TQndxRDFHTWhNRmcyN1p0
bS84akFGeWVKRGNEQkJEUmlwbklDZ1ZHUmthcHg0OGYzd1JoRUJzakJFRFl6YzJ0CkJCWUtJUHdm
NGlaam1EeUt6NEVTYnVpaEFSUmpneXVFQlF1VXhpckdBUFUxRzFTM01Od3FCZ1lINVBCa1FKSXdS
bmRqWW1KaUhUWTMKZ2hSTGdhSVFoRUZzc21LSDZBQUhDQ0NTNHB2Y3RFeGJROTNkM1V1UU1na0dU
a3BLcWlQYVVHZzYrNzl6NTg1dUtOOGRtcWNaSVZ4RwpSK1FTRGNobnd6QVZMWWt4d0hMa3o1OC92
NkhMb1JWeWNBQXFBR0ZKRXoweHNVRkxSemhBS3FNd01DekJJWmVvV0JNZXpQRFMwdEllCmFPckV5
REJJU2Z3L1ZGNkJvS0hvV1JVWFFNNFM2SGpvcEZPQUFLSzZTNWtHdmJmcGF5QXd5L2tlT1hKa3o2
OWZ2NzZCTXR2NTgrZVAKZ2NUd21vZ3RUWUhLYnZTY2hDVUxDbVBWaXkzblFQTTNITUNLY1dReGFI
WWtiQ0J5Z2JBU0NJQVc4Q0piQmhJRFdRaGtCMnRyYThmaApOUkJXWGNGY2hTdWJBWUV2VEIyNm9l
Z0tqWkVLQVRjY2hqbWdoeW15b2VDY0FpcEFnVFhyV3BCcVQwOVBIeEFOYlBac2dmSlJZaFhhCkhN
SlE1K1hsRlF3MDZ4ZmNacWd0LzlHS0tnZENyZ1N5clhCNkdkbFFhRGhoRFVQa0dFZU9ORnpKSmhp
RVFURUphbUJnaTJXME5odmgKd2haVzVPTkxoOUNrdzB1VWdWVE5LZWpwN2ZEaHczdEFyZ0hoYytm
T0hjTVh0alNwQ2taZ0FRc1FvQjFyeDBFUUNLTEJHSXdGRlpXeApzZklDV2xGaFE3Y1ZkNkgzQUY2
Qk0xRVNENkFINEFMT1M0WmtISGRoRVNqOGJETFpoRjNaSnpQejVzM09VazQvb2p6L0pNamw2SGdK
CmdvaW1EUmdEaVU2MjRxVWJXVU4ycDVCcVJoM1NsZlFPOG9EMk51QklUWG11SVhqVzJPaXY5OHdC
NEdJSVdxMEpoZzc4SHU5eDBhdk4KRnA0dXpZaTNxN0lzejJFWXJ1VWFkZHpYb2lndTZIN0lqbVJi
bms5NGpuWEhhK1BKM0ExWllYTXJ1Ky9nNllVOTdwajRDK2F0cUVMQgpRajJYSGRZN3hXdUg0cVVC
b29FYUdsdFFJYm9GbE5XMUM2dzE5bkIxd0dac2VnQUhpajFSRDdqRUJjNFg3RXZtWWxPWHB0RDly
ZFptCkZwQ1IrRU5wWGRlVlJRUG1Zay9zSzM0NndUSzRkQ2gxdGZkM2NyRCsyWStKeVNld0RDNUhB
bkFYa2ZnbWp0U2VTamFhMlhrU01jcUoKbENIYjJXV1lVM3c1cldlVkZEVmZRK1lmVVJaSDYwa2xN
T1JkNzJRQzR5OTZmd3JrQStOOUxlQ2pXR1RnQUFBQUFFbEZUa1N1UW1DQwoKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJp
bmdfMi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5h
cnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2luL2lt
YWdlcy9sb2FkaW5nX2J1ZmZlcmluZ18yLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVV
Z0FBQUNrQUFBQXBDQVlBQUFIZlp6QmdBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQQpH
WFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBL1ZKUkVGVWVO
cGkvUC8vUHdNMndBUmpkSFoyClRtTmtaUFFGWWphd0FFaEhSMGZITkJCOTd0eTVZek5uemx3QVlz
TjFuRDkvL3BpaG9hSFYrL2Z2djhGMUFBRkl1eTlNSndnejRySWMKSUlDd1NqQWhzZitEWEFSaXNN
QUVvTHJBTkJOT0R3RzErY0ZVNDdRSUlJQndPZ3R2T0NFNTVQLzI3ZHMzdzlpb3NsQ2ZnMXdLQ2pz
awpQc08yYmRzMi80Y0FTSWdoUzBJbC9qOTY5T2ptZndSZ0lCaVUyQUJBQUJHdG1JbXNVQUFHc3RU
ang0OXZBbWtGYU1yeHhWQ1lsSlJVCkIzVEdVd0VCQVdFZ2x4ZkkzcFNZbUdpSU5haUFYRGVvbTZX
QTJBSFo5OGllZ2NjcldvUXdZbk9qRzhpZFVMWUQxbGh5YzNNcmdWcXYKKytuVHB6Y2dOdENOZFJn
eEJFcllVS3dBaWlHUU84bUtIYUlESENDQVNJcHZjdE15YlEwRnBRQ2tUUElmbXEyTmtmbWdvZ1Jl
OE9ESQpTTEFZa1BxUG5ERWdxUVNySEZSZURjTU1kQUZZWm9QR1BRTXVERXNiVVBVb2NqaTl6ODdP
emtWMm9CTHlQdFNMVWtqeWJyamtjSG9mClZHUkRDeWxramNib0ZpRm5DWFE4ZE5JcFFBQlIzYVZN
Zzk3YjlEVVFWQTJBOGpPc2dvUVd3YjdJbUdCQ2gwYVM4S3RYcng0anAwRlEKNVlsVWdjTFNhakRC
N0FpMGxmZm56NStQUlVWRlpXQmlOMi9ldkhqcDBxWEh5T3ArL2ZyMUhVanRJdWpDbFVBQWN3R0lE
Y3BGV0twNAp1S3Z4WmtPbzV2KzRTaGVRQVNCdklqY0xvTFVwVGdPTmtSUzY0Y3EzU0xVc0xNL2pE
RU1wSlBZRFBBbmdGZzQ5R0FZK1EySXI0REZRCkRZY2UvR0VJQ2k5c0FVOTBHSUl3dE5HTE5TWkJt
cEZUQWNGWWhya1NtQTYvSVdzQ1dZTFc0UHNQVW9QdU9sejFqQzhiR3hzbnNvQ3MKckt3d0VNUEQ3
ZlhyMTArQTlaQXMwSURQNkpwWnNCajRDOXAraG9HZlFGZm1mdjc4K2UzRml4Y3YyTnJhVGdRYXRK
bWtSdjFvQVVzUwpBQWpRanJYaUlBd0VVVU53S0FTQkE5QWFnc0NoVURnVVo2aENOeWtXRElJejlB
Q0VJeUJJbXFDUnZRR0tDMkJnSHBtU3lXUzdaV2tKCklUREpCa1FaWHVmMzN1eGI2UFFyNlBrblFk
Wksxd3V4RzMyME1USEUxRDFUR1IwcVEybVR4am5jQWpBVGpEZzU4dlE4QmU5b3h0UUcKZldyUzh2
clVIQ0xXSkVFN0kyQ1JIcCt1QmgzaCsvNlN2dUlsTHBWRUVwSFQ2a2ZTV3hSRks3QTNvc2Nwdng5
YkpPRVBmcC82L3ljQQpqck9OU0JxTG9hN2xkdytRNGw3cGFtQy9TU21RVUJWSmt1eTA4ekFNMTFL
dDVXblBJQWptRUJGOHBWWG4vY2U1TG90QWpuUnpzSG9aCnVEWWMrK3VsYVhvMGJJbldhQmJPU1U3
Slo2MUV1aHVjeGltbnRWbmdxNDRHcXp6ZHRzWkJVMlI3T00vRmpzVkhWMnJQU2h0SEFzMGIKUVJJ
a3kvY0JuekVpcnZYc1cwYVF1SENlbW9yZWhXR3k2S0hMaThyRHFYR0lhWHFVMWowOXZQVThyLzlL
M1VON2I4aWd5MG5JdCtJNApYcEMvODBmMEpJRVlJa0xBSmM3SnRGMzhSZThmWkk3ZEFCS29LaEhX
Qmd4eEFBQUFBRWxGVGtTdVFtQ0MKCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L3N5bWJpYW4vcGxh
dGZvcm1wbHVnaW4vaW1hZ2VzL2xvYWRpbmdfYnVmZmVyaW5nXzMucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fu
bm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUg
PSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZmZXJpbmdf
My5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDa0FBQUFwQ0FZQUFBSGZaekJn
QUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUEKR1hSRldIUlRiMlowZDJGeVpRQkJaRzlp
WlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQSs1SlJFRlVlTnBpL1AvL1B3TTJ3QVJqdkg3OQordkdz
V2JNV3dHVkFPam82T3FhQmFHUTJFd011Z0t6eTFhdFhqMkY4Umx5V0F3UVFWZ2xrOC8rakMvNDNO
emYzaFVrd0VUSVR4R0JFClY4a0lZd0FFRU55OXlMaWlvcUlEbXppNndQK1pNMmN1ZVBUbzBjMy9D
SUJWOGY5dDI3WnRScGFFOHYvak5Ca0VQbjM2OUFaa0F6NlQKNGJpbnAyY1NObkdBQU1JWjd2aUNI
QkpHakl4c0JCV0NGQUZ0K1BuNDhlT2JRTFlDMXJTUW1KaFlCOEl3VDRGb0tCOHpxSUQ2SE9BUwpF
UFovYko3NWp4S05lT0lhNUVZM2JHd1VoZTd1N3FWQTAzZisrdlhyRzhna29Qc3NRR0pZRXdvUVNN
SGlIY2htSXhqZzBHRDZSVERoCll3TUFBVVMwUWxJQUUwRmJnVTRHbFFmYnQyL2ZUTFNwMkZJZzFQ
WEcwTElESzBCT0RZUnlIVGowMGZRemdQSUpMSk1ocFpyLzBCaVMKSW1nb0xEcWg2Uk9uVDJEcEY2
b2VSWTZKZ1JhQWtQZUJmRGRZbVFJS0JpQmZtR1R2dzdDYm0xc0pya2dDUlNBb0lvbU9LRndZNUZK
UQozWUNlZFNncXYwZ0JBQUZFZFVPWjZKNDlRVUJIUnljT21FMkZLY3FhTUt5dHJSMkhLN21RSE5z
d3cyRGczTGx6eDRBRys1SnNJQ2d4Cm95ZG9aQUJOUnNMRUZoeThQMy8rL0FiQ1FIWXd6SkFiTjI1
Y1FEWVVLczlMMEVDa2FoeVdPeHhnWVFoSzNDdUJBQ2FQM2dUQU1CQnEKNDMvMDBnVUlySkJkZzl6
Z1FIY2xScUdMcE5BQlQrSHNnS1RPR0YrUkpvWEV2b1VudGQzQ29RZkR3R2ZJNlJsZldzZWhoK2d3
NUFXRgpJOGxoQ01Mb3NRZzFUQW9XcnNqeVVEYkJkTWdHU21QSWFRN05SY0ZJNlpTTjZKd0NiWEJq
QlVnNWliUzhES3BmRGg4K3ZBZFc4NEVBCk5IOHpVRlFWd01LUWtHR2tHQ2hNakdFMHFWZW9YZ1VB
QktqR2luRVRCb0pnd3crUUc1U2FEN2hLaHg5d1ZacDh4QlUxWFI1Q3cxOW8KWEVaS0VZbkM2Vkln
M01DT3RDZXRSbWQ4NUphUVdGcFp4dlo2MkwyYm5kMjdWTDZIMUtuc2Z5eVNjNnpyZURoSUFFUEJs
VDMyTGl5dwprK3VGSjhoWktUaForYThDYmxOVjFaUCt2QmQ3bG5zSE9YK0pIV1JKZmJ1SzBWekR0
cnpHVGx4K2xXZERxZ3k3Y0VYa0MzUWVZRGFjCndidW00YzQrQUZqZm43dUNSQVE0YXVaandZTFZp
SzFndUU5ekNWWk13UVVrSEhFbGkyVlE3aTJ0eElndEdndE1QR2RMS0ttd1VBUVMKemlFKzJUbEdQ
RG50QjVkdEhRMmRFK0oyV1FJeXNGT2s3MXF6TmVHdjV2VG5SSE9LSjAvRE1CeC9vYWljZmt4QlNB
TzBDa2V6YmR1MwpXNmtFeitNOTlnWC9SZW1PS2JlQ2lqWk96VHJKTlBkMk9sYW5OZzc4eHFIQVhT
aklybEdOTElacUs5c09LZGdBS21LR2NLVWdKdk1VCkhVMGRDdmFGaXNIY3ZlSllLa0hVOE9IVU1o
Z2o3bHgxNndKeUJEUm12RFhBMjNSSGNMZHlLdHVzbER0MHl2b0JpeEt0Ny92UHBtblcKWGRkdGVR
cjdKNVI1RkwwZTRQNVYrM0FCWnR5K2I2V1JRMzRBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvcXQvc3ltYmlhbi9wbGF0Zm9ybXBsdWdpbi9pbWFnZXMvbG9hZGluZ19idWZm
ZXJpbmdfNC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBi
aW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9xdC9zeW1iaWFuL3BsYXRmb3JtcGx1Z2lu
L2ltYWdlcy9sb2FkaW5nX2J1ZmZlcmluZ180LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNV
aEVVZ0FBQUNrQUFBQXBDQVlBQUFIZlp6QmdBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFB
QQpHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBOU5KUkVG
VWVOcGkvUC8vUHdNMndBUWlHQmtaCjJUbzdPNmVCTUZ3R3FzUDMzTGx6eDBEc2pvNk9hV0F4WkE1
SUVxUUlMZ0dUQkdHZ0JCdUl6NGpMY29BQXdpckJoTVQrank0SUVtQ0UKU1REaDlCQ1NLa1owbFl3
d0JrQUE0WFFXUG1OQlllVUxOZnIvOXUzYk44UFlLS3BoSVFIRS83ZHQyN1laaWM4QTVmK0g4WkVW
TTBBbAovaU1wK2c4TFg3eEJpUTBBQkJEUmlwbklDUVUySUpaNi9QanhUUkFHc1hHR0FBaDgrdlRw
RFFpRDJJbUppWFhZZlA4ZkpWZ1lHQnlRCitjaWUrWThjamVoaUtKNEJ1c3NOVzNwQ2NTUFVQU2h1
eEJsRFFDRDE2TkdqbXlBTVlzTVNPVW14UTNTQUF3UVFTZkZOY2l6UzFGQlEKUmpsLy92eXhwS1Nr
T3FSTWdvR2g4dGdCV3Q1Z2dPYUYvMGg1d3cxTjNnMU5YZ3JEREN5R0tnQ3hNUkRyUXFNVVF4TUl3
OUlHS09vSgpHZ3BWOUIrcUNadWxVbENzQzdWY2dSaVhTcEhvZlYrQ2hxSm5BMXdBSkk5YzNpUGpv
Wk5PQVFLSTZpNWxHdlRlWnFKSFhsZER6L2UvCmZ2MzZCc0lnTnJUU1pDQTZuME1UYi9DclY2OGU0
MHFQSURtZ0dtRnNhUmxiTEdNSUFDdXVXeUJhVmxZVzducWdpNyt6czdNTEFQWC8KSXVoQ0dGZ0pC
TWoxQUlnTkVrT1dKeVliL2tmTHU4RzRDaFdvUEJ1aHdzSVlpbUVsalRBV05RNUlCaHJqTkJDNTRN
VlZQcUtYVU9nRgpCUXRhK0Q5RFlxdWg4VUhKU0JoSXNVUFpKdEE0T0lzelVvQ0FGMll6MWhJYUVw
NFl3WXczREpIYllkaGlHVmtlbTRFWTZSRG9GZDZmClAzKytaR05qNDhTWERyRTFXSEdsUTVDd01C
RTVKWmdvTDZQSE9yVDkveC9vNm0vb3hUK284cUo1VlRBQ0MxaUFBS05KZFRva3F1Y1IKNlVnV2l0
TUxzRlFCVXBLZ01oQmExQ01Yc3ArQitEa3dTWDJteUJKOEJRVnlZUUVxYVVCbEk5UXh2cUF5RWxS
NC9DY0NnTlNCMUlQMApRUXQwQmxJd1VZNkVXWGJqeG8wTHhEb01uNE5CRFdOY0RSR0tIWWtOZ0tx
M2lvcUtEbER0amRScEFkRU9wYVdsUGNqTkJDejFnQy9OCkhZbWNEQWlZb1liY1VFSWVMVUR2MjJE
RHhHU2NuOXUzYjkrQ1N4S1kxaEpXcjE2dERXUTI0VW4zdDRBWkxCYllrTDNmM3Q1ZURoUG4KNWVV
VlBuejRjQmxRN2dGSURWbUZPVkN6RmRBUmxXanQwcmZwNmVrTlFIMFB5Q2dKaklIUnZ3eExtellB
YU40dWNvc2dIbWNnd05KbwpBYlhSSHBCUm1Md0Z4c3B4b0NQUlErMExKZVhrZzFPblRoMnpzYkZ4
aGdtQVFnR1lJU0tCb1hJWm8wV1BCdExTMGlvREF3T3RrSklHCmhob3ZMNi9KUUhPT1VWeE9ZaXQy
b08xTE5RSjZRZVZxTUtqb3dwWDVpTW5oeEpWVFFJTndOU3RCUlF5b3FBSGxVcVJPQm9oMncxY0UK
VWQyUnNQWXZxQkNtUm1HT0hMSlVkU1J5UDRYU2FoR1dESEFOeDFDOVRZN1d3SUQzektqWndCaHQ5
STRvUndJQVQvMnN5MzhQQmdJQQpBQUFBU1VWT1JLNUNZSUk9Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>