<?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>80996</bug_id>
          
          <creation_ts>2012-03-13 08:59:26 -0700</creation_ts>
          <short_desc>[Qt] Add test specific platform plugin to achieve unified layout test results</short_desc>
          <delta_ts>2012-09-25 05:55:45 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>85795</dependson>
          <blocked>80272</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Balazs Kelemen">kbalazs</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>577382</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-03-13 08:59:26 -0700</bug_when>
    <thetext>This is part of unifying text metric dependent test results across Linux and Mac (can be extended to others in the future).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577494</commentid>
    <comment_count>1</comment_count>
      <attachid>131656</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-03-13 10:13:09 -0700</bug_when>
    <thetext>Created attachment 131656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577497</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-13 10:21:17 -0700</bug_when>
    <thetext>Attachment 131656 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Tools/QtTestPlatformPlugin/TestIntegration.cpp:1:  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: 1 in 15 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>577524</commentid>
    <comment_count>3</comment_count>
      <attachid>131663</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-03-13 10:42:01 -0700</bug_when>
    <thetext>Created attachment 131663
Patch

forgot to add a file last time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577529</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-13 10:45:25 -0700</bug_when>
    <thetext>Attachment 131663 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Tools/QtTestPlatformPlugin/TestIntegration.cpp:1:  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: 1 in 16 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>577619</commentid>
    <comment_count>5</comment_count>
      <attachid>131663</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-13 11:52:42 -0700</bug_when>
    <thetext>Comment on attachment 131663
Patch

Attachment 131663 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11941705</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577727</commentid>
    <comment_count>6</comment_count>
      <attachid>131700</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-03-13 13:19:10 -0700</bug_when>
    <thetext>Created attachment 131700
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>577734</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-13 13:22:13 -0700</bug_when>
    <thetext>Attachment 131700 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Tools/QtTestPlatformPlugin/TestIntegration.cpp:1:  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: 1 in 16 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>577750</commentid>
    <comment_count>8</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-03-13 13:30:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Attachment 131700 [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;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
&gt; Tools/QtTestPlatformPlugin/TestIntegration.cpp:1:  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: 1 in 16 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

We already have a bug for this: https://bugs.webkit.org/show_bug.cgi?id=65372. check-webkit-style should not complain about config.h outside of Sources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578239</commentid>
    <comment_count>9</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-03-14 01:38:03 -0700</bug_when>
    <thetext>An additional qt fix will be is necessary to make the plugin lib loading properly: http://codereview.qt-project.org/#change,19858.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601978</commentid>
    <comment_count>10</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-04-13 04:49:43 -0700</bug_when>
    <thetext>Simon, could you take a look? I already got an lgtm from Tor Arne but he would like you do a pass as well :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601994</commentid>
    <comment_count>11</comment_count>
      <attachid>131700</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-04-13 05:51:48 -0700</bug_when>
    <thetext>Comment on attachment 131700
Patch

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

In general this looks good. I have a few nitpicks/comments and the bigger remaining issue is that none of the new files have an appropriate license and copyright header.

&gt; Source/WebKit2/qt/MainQt.cpp:44
&gt; +    QByteArray pluginPath = qgetenv(&quot;QT_WEBKIT2_TEST_PLATFORM_PLUGIN_PATH&quot;);
&gt; +    if (pluginPath.isEmpty())
&gt; +        return;
&gt; +
&gt; +    QPluginLoader loader(QString::fromLatin1(pluginPath.data()));

The value of the environment variable is a path, so instead of QString::fromLatin1 you should use QFile::decodeName.

&gt; Tools/QtTestPlatformPlugin/mac/TestFontDatabase.mm:47
&gt; +const char* defaultWebKitTestFontFamily = &quot;Nimbus Sans L&quot;;

This declares a variable that points to an array of read-only chars, but the variable itself is still read-write (and therefore ends up in the data segment with relocations). I suggest to simply use

const QStringLiteral defaultWebKitTestFontfamily(&quot;Nimbus Sans L&quot;) :)

&gt; Tools/QtTestPlatformPlugin/mac/TestFontDatabase.mm:54
&gt; +void TestFontDatabase::populateFontDatabase()

A whole bunch of code in this function is copied from Qt code. This needs to be reflected in the copyright and at least a more verbose comment.

&gt; Tools/QtTestPlatformPlugin/main.cpp:24
&gt; +    if (system.toLower() == QStringLiteral(&quot;testplatform&quot;))

Just a nitpick, but please use

    if (system.compare(QStringLiteral(&quot;testplatform&quot;), Qt::CaseInsensitive) == 0)

to avoid the unnecessary conversion and allocation to lower-case.

&gt; Tools/QtTestPlatformPlugin/main.cpp:38
&gt; +void TestIntegrationPlugin::initialize()
&gt; +{
&gt; +    QStaticPlugin plugin;
&gt; +    plugin.instance = &amp;qt_plugin_instance;
&gt; +    plugin.metaData = &amp;qt_plugin_query_metadata;
&gt; +    qRegisterStaticPluginFunction(plugin);
&gt; +}

Interesting idea... :)

One thought regarding the use of QMetaObject::invoke to call this function: Why not use Q_CONSTRUCTOR_FUNCTION instead to ensure the initialization/registration?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603103</commentid>
    <comment_count>12</comment_count>
      <attachid>137334</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-04-16 06:32:43 -0700</bug_when>
    <thetext>Created attachment 137334
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603104</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-16 06:36:24 -0700</bug_when>
    <thetext>Attachment 137334 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Tools/QtTestPlatformPlugin/TestIntegration.cpp:26:  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: 1 in 16 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>603105</commentid>
    <comment_count>14</comment_count>
      <attachid>137334</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-04-16 06:36:32 -0700</bug_when>
    <thetext>Comment on attachment 137334
Patch

Attachment 137334 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12409968</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603108</commentid>
    <comment_count>15</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-04-16 06:42:20 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 131700 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131700&amp;action=review
&gt; 
&gt; In general this looks good. I have a few nitpicks/comments and the bigger remaining issue is that none of the new files have an appropriate license and copyright header.

Oops. Ok, for the parts where I reused Qt code I have added a slightly modified version of the original Nokia copyright sections. I added u-szeged as holder, removed reference to licence files that we don&apos;t have checked in and made it more WebKitish in style. For the rest of the files I used the u-szeged style BSD licence.

&gt; 
&gt; &gt; Source/WebKit2/qt/MainQt.cpp:44
&gt; &gt; +    QByteArray pluginPath = qgetenv(&quot;QT_WEBKIT2_TEST_PLATFORM_PLUGIN_PATH&quot;);
&gt; &gt; +    if (pluginPath.isEmpty())
&gt; &gt; +        return;
&gt; &gt; +
&gt; &gt; +    QPluginLoader loader(QString::fromLatin1(pluginPath.data()));
&gt; 
&gt; The value of the environment variable is a path, so instead of QString::fromLatin1 you should use QFile::decodeName.

Fixed.

&gt; 
&gt; &gt; Tools/QtTestPlatformPlugin/mac/TestFontDatabase.mm:47
&gt; &gt; +const char* defaultWebKitTestFontFamily = &quot;Nimbus Sans L&quot;;
&gt; 
&gt; This declares a variable that points to an array of read-only chars, but the variable itself is still read-write (and therefore ends up in the data segment with relocations). I suggest to simply use
&gt; 
&gt; const QStringLiteral defaultWebKitTestFontfamily(&quot;Nimbus Sans L&quot;) :)

This doesn&apos;t work since QStringLiteral is not a type but a define :)
I have just put this to the function where it is used.

&gt; 
&gt; &gt; Tools/QtTestPlatformPlugin/mac/TestFontDatabase.mm:54
&gt; &gt; +void TestFontDatabase::populateFontDatabase()
&gt; 
&gt; A whole bunch of code in this function is copied from Qt code. This needs to be reflected in the copyright and at least a more verbose comment.
&gt; 
&gt; &gt; Tools/QtTestPlatformPlugin/main.cpp:24
&gt; &gt; +    if (system.toLower() == QStringLiteral(&quot;testplatform&quot;))
&gt; 
&gt; Just a nitpick, but please use
&gt; 
&gt;     if (system.compare(QStringLiteral(&quot;testplatform&quot;), Qt::CaseInsensitive) == 0)
&gt; 
&gt; to avoid the unnecessary conversion and allocation to lower-case.

Fixed.

&gt; 
&gt; &gt; Tools/QtTestPlatformPlugin/main.cpp:38
&gt; &gt; +void TestIntegrationPlugin::initialize()
&gt; &gt; +{
&gt; &gt; +    QStaticPlugin plugin;
&gt; &gt; +    plugin.instance = &amp;qt_plugin_instance;
&gt; &gt; +    plugin.metaData = &amp;qt_plugin_query_metadata;
&gt; &gt; +    qRegisterStaticPluginFunction(plugin);
&gt; &gt; +}
&gt; 
&gt; Interesting idea... :)
&gt; 
&gt; One thought regarding the use of QMetaObject::invoke to call this function: Why not use Q_CONSTRUCTOR_FUNCTION instead to ensure the initialization/registration?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603111</commentid>
    <comment_count>16</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-04-16 06:46:31 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 137334 [details])
&gt; Attachment 137334 [details] did not pass qt-wk2-ews (qt):
&gt; Output: http://queues.webkit.org/results/12409968

Oops. I forgot to remove the -Wl,--no-undefined from the pro file. Let me postpone it before landing. Btw the plugin will not work before this export fix lands in Qt: https://codereview.qt-project.org/#change,19858</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607681</commentid>
    <comment_count>17</comment_count>
      <attachid>138349</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-04-23 07:54:51 -0700</bug_when>
    <thetext>Created attachment 138349
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607686</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 07:58:37 -0700</bug_when>
    <thetext>Attachment 138349 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Tools/QtTestPlatformPlugin/TestIntegration.cpp:26:  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: 1 in 16 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>616443</commentid>
    <comment_count>19</comment_count>
      <attachid>138349</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-05-04 11:13:09 -0700</bug_when>
    <thetext>Comment on attachment 138349
updated patch

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

r=me. Land with care :)

&gt; Tools/DumpRenderTree/qt/main.cpp:132
&gt; +static void initializeTestPlatformPlugin(int argc, char* argv[])

I suppose char* argv[] should be char* argv[] const? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617524</commentid>
    <comment_count>20</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-05-07 04:48:29 -0700</bug_when>
    <thetext>Committed r116299: &lt;http://trac.webkit.org/changeset/116299&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617525</commentid>
    <comment_count>21</comment_count>
      <attachid>138349</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-05-07 04:50:44 -0700</bug_when>
    <thetext>Comment on attachment 138349
updated patch

Could somebody review the fix for qt: https://codereview.qt-project.org/#change,19858?
Without that this patch is not usable.
Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617530</commentid>
    <comment_count>22</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-07 05:06:34 -0700</bug_when>
    <thetext>Reopen, because it broke the build on all bots. Could you fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617544</commentid>
    <comment_count>23</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-07 05:51:03 -0700</bug_when>
    <thetext>After two buildfix it still fail:

TestIntegration.cpp:(.text+0xb1): undefined reference to `QPlatformIntegrationFactory::create(QString const&amp;, QString const&amp;)&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617546</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-07 05:54:26 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 85795</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617552</commentid>
    <comment_count>25</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-07 05:58:42 -0700</bug_when>
    <thetext>Rollout landed in http://trac.webkit.org/changeset/116304</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617591</commentid>
    <comment_count>26</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-05-07 07:45:49 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; After two buildfix it still fail:
&gt; 
&gt; TestIntegration.cpp:(.text+0xb1): undefined reference to `QPlatformIntegrationFactory::create(QString const&amp;, QString const&amp;)&apos;

Sorry for that. Last time I tried it did build even without the qt patch (that makes QPlatformIntegrationFactory exported) because it&apos;s a lib. I am going to reland after the fix land to qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727556</commentid>
    <comment_count>27</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-09-25 05:55:45 -0700</bug_when>
    <thetext>This patch would definitely need an update, but unfortunately I could not make it produce the result we want. I&apos;m not 100% sure but it seems like the new Liberation fonts has some differencies system wide so even if we use the same font files we don&apos;t get the same metrics. For this reason I don&apos;t really think it is worth to go with this work further.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131656</attachid>
            <date>2012-03-13 10:13:09 -0700</date>
            <delta_ts>2012-03-13 10:41:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80996-20120313181307.patch</filename>
            <type>text/plain</type>
            <size>25730</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGUyOWRmOTU0OTM2OTMx
MmEwNWQyNDRkNjU1OWQ0Y2Y2MGE0MTFjMC4uNDZjYjIwMjUwOTAxNGNjYWViZGFjNTE0ZDBlODQz
YWRhZjg5NGNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAzLTEzICBCYWxh
enMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIEFkZCB0ZXN0
IHNwZWNpZmljIHBsYXRmb3JtIHBsdWdpbiB0byBhY2hpZXZlIHVuaWZpZWQgbGF5b3V0IHRlc3Qg
cmVzdWx0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA5OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bml0aWFsaXplIHRoZSB0ZXN0IHBsYXRmb3JtIHBsdWdpbiBiZWZvcmUgaW5pdGlhbGl6aW5nCisg
ICAgICAgIHRoZSB3ZWIgcHJvY2VzcyBpZiB3ZSBhcmUgaW4gYSBXVFIgcnVuLgorICAgICAgICBJ
dCBpcyBuZWNlc3NhcnkgdG8gcGxhY2UgdGhpcyBpbml0aWFsaXphdGlvbiBoZXJlIGFzIHdlCisg
ICAgICAgIGNhbm5vdCBjb250cm9sIHdpY2ggcGxhdGZvcm0gcGx1Z2luIHdpbGwgYmUgdXNlZCBh
ZnRlcgorICAgICAgICB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgUUd1aUFwcGxpY2F0aW9uLgor
CisgICAgICAgICogcXQvTWFpblF0LmNwcDoKKyAgICAgICAgKGluaXRpYWxpemVUZXN0UGxhdGZv
cm1QbHVnaW5Gb3JXVFJJZlJlcXVpcmVkKToKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTAzLTEx
ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUg
aG93IHRoZSBXZWIgSW5zcGVjdG9yIHJlc291cmNlcyBhcmUgbG9hZGVkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvcXQvTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL3F0L01haW5RdC5j
cHAKaW5kZXggY2FjYjdjOTlkMDM3ZTU0NTIwMGI0MmZhYTI4YzhhYTM3NTliZjhiYS4uMzc4NDVi
YmRkM2IwOWI5YWI1ZGRkZWU4YjcyY2E0NDU0NGY3Zjg5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvcXQvTWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9xdC9NYWluUXQuY3BwCkBA
IC0yNCw2ICsyNCwxMCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKKyNpbmNsdWRlIDxRQnl0ZUFycmF5PgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9u
PgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luPgorI2luY2x1ZGUgPFFQbHVn
aW5Mb2FkZXI+CiAjaW5jbHVkZSA8UXRHbG9iYWw+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
MzEsMTEgKzM1LDI5IEBAIFFfREVDTF9JTVBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KTsKIFFfREVDTF9JTVBPUlQgdm9pZCBpbml0aWFsaXplV2ViS2l0MlRo
ZW1lKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0UGxhdGZvcm1QbHVnaW5Gb3JX
VFJJZlJlcXVpcmVkKCkKK3sKKyAgICBRQnl0ZUFycmF5IHBsdWdpblBhdGggPSBxZ2V0ZW52KCJR
VF9XRUJLSVQyX1RFU1RfUExBVEZPUk1fUExVR0lOX1BBVEgiKTsKKyAgICBpZiAocGx1Z2luUGF0
aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFQbHVnaW5Mb2FkZXIgbG9hZGVy
KFFTdHJpbmc6OmZyb21MYXRpbjEocGx1Z2luUGF0aC5kYXRhKCkpKTsKKyAgICBRUGxhdGZvcm1J
bnRlZ3JhdGlvblBsdWdpbiogcGx1Z2luID0gcW9iamVjdF9jYXN0PFFQbGF0Zm9ybUludGVncmF0
aW9uUGx1Z2luKj4obG9hZGVyLmluc3RhbmNlKCkpOworICAgIGlmICghcGx1Z2luKQorICAgICAg
ICBxRmF0YWwoImNhbm5vdCBpbml0aWFsaXplIHRlc3QgcGxhdGZvcm0gcGx1Z2luXG4iKTsKKwor
ICAgIHFwdXRlbnYoIlFUX1FQQV9QTEFURk9STV9QTFVHSU5fUEFUSCIsIHBsdWdpblBhdGgpOwor
ICAgIHFwdXRlbnYoIlFUX1FQQV9QTEFURk9STSIsICJ0ZXN0cGxhdGZvcm0iKTsKKworICAgIFFN
ZXRhT2JqZWN0OjppbnZva2VNZXRob2QocGx1Z2luLCAiaW5pdGlhbGl6ZSIpOworfQorCiAvLyBU
aGUgZnJhbWV3b3JrIGVudHJ5IHBvaW50LgogLy8gV2UgY2FsbCBvdXIgcGxhdGZvcm0gc3BlY2lm
aWMgZW50cnkgcG9pbnQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gV2ViS2l0TWFpbiBiZWNhdXNlIGl0
IG1ha2VzIGxpdHRsZSBzZW5zZQogLy8gdG8gcmVpbXBsZW1lbnQgdGhlIGhhbmRsaW5nIG9mIGNv
bW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBRQXBwbGljYXRpb24uCiBpbnQgbWFpbihpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCiB7CisgICAgaW5pdGlhbGl6ZVRlc3RQbGF0Zm9ybVBsdWdpbkZvcldU
UklmUmVxdWlyZWQoKTsKICAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXQyVGhlbWUoKTsKICAg
ICByZXR1cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KGFyZ2MsIGFyZ3YpOwogfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNmMmVkZmYwYTUz
YmM3ZWVmMDkwOWM1OWU2MmVkNDlmOTVkN2RhM2EuLmY4MmEwNWQ1YzQwYTgwODA4NmQzZDM2Njg0
YjVlYWZhZmZjYzE0ODMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMi0wMy0xMyAgQmFsYXpzIEtlbGVtZW4gIDxr
YmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1F0XSBBZGQgdGVzdCBzcGVjaWZpYyBwbGF0
Zm9ybSBwbHVnaW4gdG8gYWNoaWV2ZSB1bmlmaWVkIGxheW91dCB0ZXN0IHJlc3VsdHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwOTk2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgUXRUZXN0UGxh
dGZvcm1QbHVnaW4gYXMgYSBuZXcgcHJvamVjdCB1bmRlciBUb29scy4KKyAgICAgICAgVGhpcyBp
cyBhIFF0NS1pc2ggcGxhdGZvcm0gcGx1Z2luIHRoYXQgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhl
CisgICAgICAgIHBsYXRmb3JtIHN1cHBvcnQgaW50ZXJmYWNlcyBpbiBvcmRlciB0byB1bmlmeSBs
YXlvdXQgdGVzdCByZXN1bHRzLgorICAgICAgICBGb3Igbm93IGl0IG9ubHkgb3ZlcnJpZGVzIHRo
ZSBmb250IGRhdGFiYXNlIG9uIE1hYyBhbmQgcmVkaXJlY3RzCisgICAgICAgIGV2ZXJ5dGhpbmcg
ZWxzZSB0byB0aGUgcmVhbCBwbGF0Zm9ybSBwbHVnaW4uIFRoZSBmb250IGRhdGFiYXNlIGl0Cisg
ICAgICAgIHByb3ZpZGVzIG1pbWljcyB0aGUgd2F5IGhvdyB3ZSBzZXQgdXAgdGVzdCBmb250cyB3
aXRoIGZvbnRjb25maWcgb24gTGludXguCisgICAgICAgIE1ha2UgRHVtcFJlbmRlclRyZWUgYW5k
IFdlYktpdFRlc3RSdW5uZXIgdXNlIHRoaXMgcGxhdGZvcm0gcGx1Z2luLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3F0L21haW4uY3BwOgorICAgICAgICAoaW5pdGlhbGl6ZVRlc3RQbGF0Zm9ybVBsdWdp
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBRdFRlc3RQbGF0Zm9ybVBsdWdpbi9RdFRl
c3RQbGF0Zm9ybVBsdWdpbi5wcm86IEFkZGVkLgorICAgICAgICAqIFF0VGVzdFBsYXRmb3JtUGx1
Z2luL1Rlc3RJbnRlZ3JhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdEludGVncmF0aW9u
OjpUZXN0SW50ZWdyYXRpb24pOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpmb250RGF0YWJh
c2UpOgorICAgICAgICAqIFF0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbik6CisgICAgICAgIChUZXN0SW50ZWdyYXRp
b246Omhhc0NhcGFiaWxpdHkpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQbGF0
Zm9ybVBpeG1hcCk6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246OmNyZWF0ZVBsYXRmb3JtV2lu
ZG93KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6Y3JlYXRlUGxhdGZvcm1CYWNraW5nU3Rv
cmUpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQbGF0Zm9ybU9wZW5HTENvbnRl
eHQpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQbGF0Zm9ybVNoYXJlZEdyYXBo
aWNzQ2FjaGUpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpndWlUaHJlYWRFdmVudERpc3Bh
dGNoZXIpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjbGlwYm9hcmQpOgorICAgICAgICAo
VGVzdEludGVncmF0aW9uOjpkcmFnKToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6aW5wdXRD
b250ZXh0KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6YWNjZXNzaWJpbGl0eSk6CisgICAg
ICAgIChUZXN0SW50ZWdyYXRpb246Om5hdGl2ZUludGVyZmFjZSk6CisgICAgICAgIChUZXN0SW50
ZWdyYXRpb246OnNlcnZpY2VzKToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6c3R5bGVIaW50
KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6cGxhdGZvcm1UaGVtZSk6CisgICAgICAgICog
UXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RGb250RGF0YWJhc2UuaDogQWRkZWQuCisgICAg
ICAgIChUZXN0Rm9udERhdGFiYXNlKToKKyAgICAgICAgKiBRdFRlc3RQbGF0Zm9ybVBsdWdpbi9t
YWMvVGVzdEZvbnREYXRhYmFzZS5tbTogQWRkZWQuCisgICAgICAgIChUZXN0Rm9udERhdGFiYXNl
Ojpwb3B1bGF0ZUZvbnREYXRhYmFzZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1QbHVnaW4v
bWFpbi5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdEludGVncmF0aW9uUGx1Z2luOjprZXlzKToK
KyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6Y3JlYXRlKToKKyAgICAgICAgKFRlc3RJ
bnRlZ3JhdGlvblBsdWdpbjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1Q
bHVnaW4vdGVzdHBsYXRmb3JtLmpzb246IEFkZGVkLgorICAgICAgICAqIFRvb2xzLnBybzoKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmk6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9xdC9tYWluLmNwcDoKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTAzLTEyICBNaW5n
IFhpZSAgPG14aWVAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gYnVpbGQtd2Via2l0
IGRvZXNuJ3QgcmVjb2duaXplICItLWNtYWtlYXJnIiBmb3IgdGhlIEJsYWNrQmVycnkgcG9ydApk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCmluZGV4IDU2NjA0ZDUx
ODU2YzNkYjlkYjAwNTJhZGE5ZjJiNjg1YjVkZGEwNjAuLmViYTJmMjk2MTM3MDE3YmJmYmVmZDZm
Y2NkZTAxODA0MjVhZmE1OWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1
bXBSZW5kZXJUcmVlLnBybworKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZS5wcm8KQEAgLTU1LDQgKzU1LDkgQEAgd2luY2UqOiB7CiBERUZJTkVTIC09IFVTRV9TWVNU
RU1fTUFMTE9DPTAKIERFRklORVMgKz0gVVNFX1NZU1RFTV9NQUxMT0M9MQogCittYWM6IExJQl9T
VUZGSVg9LmR5bGliCit3aW46IExJQl9TVUZGSVg9LmRsbAordW5peDohbWFjOiBMSUJfU1VGRklY
PS5zbworREVGSU5FUyArPSBURVNUX1BMQVRGT1JNX1BMVUdJTl9QQVRIPVwiXFxcIiQke1JPT1Rf
QlVJTERfRElSfSQke1FNQUtFX0RJUl9TRVB9bGliJCR7UU1BS0VfRElSX1NFUH1saWJ0ZXN0cGxh
dGZvcm0kJHtMSUJfU1VGRklYfVxcXCJcIgorCiBSRVNPVVJDRVMgPSBEdW1wUmVuZGVyVHJlZS5x
cmMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKaW5kZXggMTc2MzM2NzcwNmYxYWIyN2U4YTE2M2Nj
NWU1NDVmZmI3YTg1ZjAwZS4uM2FjODNkMjQ5ODZlODJiZGI3MDEyZTU5OGFjOTlhNjAwYTA0OTY3
NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKQEAgLTMxLDYgKzMxLDEwIEBACiAKICNpbmNs
dWRlICJRdEluaXRpYWxpemVUZXN0Rm9udHMuaCIKIAorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVn
cmF0aW9uPgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luPgorI2luY2x1ZGUg
PFFQbHVnaW5Mb2FkZXI+CisKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAKICNpbmNs
dWRlIDxxc3RyaW5nbGlzdC5oPgpAQCAtMTIzLDYgKzEyNywzNCBAQCBzdGF0aWMgdm9pZCBXVEZD
cmFzaEhvb2soKQogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0UGxhdGZv
cm1QbHVnaW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyNpZiBRVF9WRVJTSU9OID49IFFU
X1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKKyAgICBRUGx1Z2luTG9hZGVyIGxvYWRlcihURVNUX1BM
QVRGT1JNX1BMVUdJTl9QQVRIKTsKKyAgICBRUGxhdGZvcm1JbnRlZ3JhdGlvblBsdWdpbiogcGx1
Z2luID0gcW9iamVjdF9jYXN0PFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luKj4obG9hZGVyLmlu
c3RhbmNlKCkpOworICAgIGlmICghcGx1Z2luKQorICAgICAgICBxRmF0YWwoImNhbm5vdCBpbml0
aWFsaXplIHRlc3QgcGxhdGZvcm0gcGx1Z2luXG4iKTsKKworICAgIFFCeXRlQXJyYXkgcGxhdGZv
cm0gPSBxZ2V0ZW52KCJRVF9RUEFfUExBVEZPUk0iKTsKKyAgICBRQnl0ZUFycmF5IHBsYXRmb3Jt
UGx1Z2luUGF0aCA9IHFnZXRlbnYoIlFUX1FQQV9QTEFURk9STV9QTFVHSU5fUEFUSCIpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAgIGlmIChRQnl0ZUFycmF5
KGFyZ3ZbaV0pID09ICItcGxhdGZvcm0iICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHBs
YXRmb3JtID0gYXJndltpICsgMV07CisgICAgICAgIGVsc2UgaWYgKFFCeXRlQXJyYXkoYXJndltp
XSkgPT0gIi1wbGF0Zm9ybXBsdWdpbnBhdGgiICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAg
IHBsYXRmb3JtUGx1Z2luUGF0aCA9IGFyZ3ZbaSArIDFdOworICAgIH0KKyAgICBpZiAoIXBsYXRm
b3JtLmlzRW1wdHkoKSkKKyAgICAgICAgcXB1dGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRG
T1JNIiwgcGxhdGZvcm0pOworICAgIGlmICghcGxhdGZvcm1QbHVnaW5QYXRoLmlzRW1wdHkoKSkK
KyAgICAgICAgcXB1dGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRGT1JNX1BMVUdJTl9QQVRI
IiwgcGxhdGZvcm1QbHVnaW5QYXRoKTsKKworICAgIHFwdXRlbnYoIlFUX1FQQV9QTEFURk9STV9Q
TFVHSU5fUEFUSCIsIFRFU1RfUExBVEZPUk1fUExVR0lOX1BBVEgpOworICAgIHFwdXRlbnYoIlFU
X1FQQV9QTEFURk9STSIsICJ0ZXN0cGxhdGZvcm0iKTsKKworICAgIFFNZXRhT2JqZWN0OjppbnZv
a2VNZXRob2QocGx1Z2luLCAiaW5pdGlhbGl6ZSIpOworI2VuZGlmCit9CisKIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiBhcmd2W10pCiB7CiAjaWZkZWYgUV9PU19XSU4KQEAgLTE0Niw2ICsxNzgs
OCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogCiAgICAgV2ViS2l0Ojppbml0
aWFsaXplVGVzdEZvbnRzKCk7CiAKKyAgICBpbml0aWFsaXplVGVzdFBsYXRmb3JtUGx1Z2luKGFy
Z2MsIGFyZ3YpOworCiAgICAgUUFwcGxpY2F0aW9uOjpzZXRHcmFwaGljc1N5c3RlbSgicmFzdGVy
Iik7CiAgICAgUUFwcGxpY2F0aW9uOjpzZXRTdHlsZShuZXcgUVdpbmRvd3NTdHlsZSk7CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1F0VGVzdFBsYXRmb3JtUGx1Z2lu
LnBybyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1F0VGVzdFBsYXRmb3JtUGx1Z2luLnBy
bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jOTUyOGE2N2FlMWZmYzIyMmEyZjI0MGM1ODIwOTNjZmYyNGQzMjE5Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vUXRUZXN0UGxhdGZv
cm1QbHVnaW4ucHJvCkBAIC0wLDAgKzEsMjAgQEAKK1RBUkdFVCA9IHRlc3RwbGF0Zm9ybQorREVT
VERJUiA9ICQkUk9PVF9CVUlMRF9ESVIvbGliCisKK2xvYWQocXRfcGx1Z2luKQorUVQgPSBjb3Jl
IGd1aSBjb3JlLXByaXZhdGUgZ3VpLXByaXZhdGUgcGxhdGZvcm1zdXBwb3J0LXByaXZhdGUKKwor
SEVBREVSUyA9IFwKKyAgICBUZXN0SW50ZWdyYXRpb24uaCBcCisKK1NPVVJDRVMgPSBcCisgICAg
bWFpbi5jcHAgXAorICAgIFRlc3RJbnRlZ3JhdGlvbi5jcHAgXAorCittYWMgeworICAgIExJQlMg
Kz0gLWZyYW1ld29yayBGb3VuZGF0aW9uCisgICAgT0JKRUNUSVZFX0hFQURFUlMgKz0gbWFjL1Rl
c3RGb250RGF0YWJhc2UuaAorICAgIE9CSkVDVElWRV9TT1VSQ0VTICs9IFwKKyAgICAgICAgbWFj
L1Rlc3RGb250RGF0YWJhc2UubW0gXAorICAgICAgICBtYWMvVGVzdEludGVncmF0aW9uTWFjLm1t
IFwKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3Jh
dGlvbi5jcHAgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9UZXN0SW50ZWdyYXRpb24uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjcxOGJlYzYwYzVkZmJjZWY1YzUxY2Y3YmI5MTI2OWI4MDM3ZDViYmMKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9UZXN0SW50ZWdyYXRp
b24uY3BwCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlICJUZXN0SW50ZWdyYXRpb24uaCIKKyNp
bmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorI2luY2x1
ZGUgPFF0R2xvYmFsPgorI2luY2x1ZGUgPFF0R3VpL3ByaXZhdGUvcXBsYXRmb3JtaW50ZWdyYXRp
b25mYWN0b3J5X3FwYV9wLmg+CisjaW5jbHVkZSA8cXN5c3RlbWRldGVjdGlvbi5oPgorCitUZXN0
SW50ZWdyYXRpb246OlRlc3RJbnRlZ3JhdGlvbigpCit7CisgICAgUVN0cmluZyBkZWZhdWx0UGxh
dGZvcm0gPQorI2lmIGRlZmluZWQoUV9PU19NQUMpCisgICAgICAgIFFMYXRpbjFTdHJpbmcoImNv
Y29hIik7CisjZWxpZiBkZWZpbmVkIChRX09TX1dJTikKKyAgICAgICAgUUxhdGluMVN0cmluZygi
d2luZG93cyIpOworI2VsaWYgIWRlZmluZWQgKFFUX05PX1hDQikKKyAgICAgICAgUUxhdGluMVN0
cmluZygieGNiIik7CisjZWxpZiAhZGVmaW5lZCAoUVRfTk9fV0FZTEFORCkKKyAgICAgICAgUUxh
dGluMVN0cmluZygid2F5bGFuZCIpOworI2Vsc2UKKyAgICAgICAgUUxhdGluMVN0cmluZygibWlu
aW1hbCIpOworI2VuZGlmCisKKyAgICBRQnl0ZUFycmF5IG9yaWdpbmFsUGxhdGZvcm0gPSBxZ2V0
ZW52KCJRVF9XRUJLSVRfT1JJR0lOQUxfUExBVEZPUk0iKTsKKyAgICBRQnl0ZUFycmF5IG9yaWdp
bmFsUGx1Z2luUGF0aCA9IHFnZXRlbnYoIlFUX1dFQktJVF9PUklHSU5BTF9QTEFURk9STV9QTFVH
SU5fUEFUSCIpOworICAgIFFTdHJpbmcgcGxhdGZvcm0gPSBvcmlnaW5hbFBsYXRmb3JtLmlzRW1w
dHkoKSA/IGRlZmF1bHRQbGF0Zm9ybSA6IFFTdHJpbmc6OmZyb21MYXRpbjEob3JpZ2luYWxQbGF0
Zm9ybS5kYXRhKCkpOworICAgIFFTdHJpbmcgcGx1Z2luUGF0aCA9IG9yaWdpbmFsUGx1Z2luUGF0
aC5pc0VtcHR5KCkgPyBRU3RyaW5nKCkgOiBRU3RyaW5nOjpmcm9tTGF0aW4xKG9yaWdpbmFsUGx1
Z2luUGF0aC5kYXRhKCkpOworCisgICAgbV9pbnRlZ3JhdGlvbi5yZXNldChRUGxhdGZvcm1JbnRl
Z3JhdGlvbkZhY3Rvcnk6OmNyZWF0ZShwbGF0Zm9ybSwgcGx1Z2luUGF0aCkpOworfQorCisjaWYg
IWRlZmluZWQoUV9PU19NQUMpCitRUGxhdGZvcm1Gb250RGF0YWJhc2UqIFRlc3RJbnRlZ3JhdGlv
bjo6Zm9udERhdGFiYXNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Zm9u
dERhdGFiYXNlKCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3Jt
UGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5oIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVz
dEludGVncmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWYxOWU2MWMzYjcyZmJiZGU3N2NhY2NlNDkyZWYz
NzQ2M2YwZWIxYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2lu
L1Rlc3RJbnRlZ3JhdGlvbi5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgVGVzdEludGVncmF0
aW9uX2gKKyNkZWZpbmUgVGVzdEludGVncmF0aW9uX2gKKworI2luY2x1ZGUgPFFQbGF0Zm9ybUZv
bnREYXRhYmFzZT4KKyNpbmNsdWRlIDxRUGxhdGZvcm1JbnRlZ3JhdGlvbj4KKyNpbmNsdWRlIDxR
UGxhdGZvcm1TY3JlZW4+CisKK2NsYXNzIFRlc3RJbnRlZ3JhdGlvbiA6IHB1YmxpYyBRUGxhdGZv
cm1JbnRlZ3JhdGlvbiB7CitwdWJsaWM6CisgICAgVGVzdEludGVncmF0aW9uKCk7Citwcml2YXRl
OgorICAgIHZpcnR1YWwgUVBsYXRmb3JtRm9udERhdGFiYXNlICpmb250RGF0YWJhc2UoKSBjb25z
dDsKKworICAgIC8vIFJlZGlyZWN0aW5nIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICB2aXJ0dWFsIGJv
b2wgaGFzQ2FwYWJpbGl0eShDYXBhYmlsaXR5IGNhcCkgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+
aGFzQ2FwYWJpbGl0eShjYXApOyB9CisgICAgdmlydHVhbCBRUGxhdGZvcm1QaXhtYXAgKmNyZWF0
ZVBsYXRmb3JtUGl4bWFwKFFQbGF0Zm9ybVBpeG1hcDo6UGl4ZWxUeXBlIHR5cGUpIGNvbnN0IHsg
cmV0dXJuIG1faW50ZWdyYXRpb24tPmNyZWF0ZVBsYXRmb3JtUGl4bWFwKHR5cGUpOyB9CisgICAg
dmlydHVhbCBRUGxhdGZvcm1XaW5kb3cgKmNyZWF0ZVBsYXRmb3JtV2luZG93KFFXaW5kb3cgKndp
bmRvdykgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Y3JlYXRlUGxhdGZvcm1XaW5kb3co
d2luZG93KTsgfQorICAgIHZpcnR1YWwgUVBsYXRmb3JtQmFja2luZ1N0b3JlICpjcmVhdGVQbGF0
Zm9ybUJhY2tpbmdTdG9yZShRV2luZG93ICp3aW5kb3cpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdy
YXRpb24tPmNyZWF0ZVBsYXRmb3JtQmFja2luZ1N0b3JlKHdpbmRvdyk7IH0KKyNpZm5kZWYgUVRf
Tk9fT1BFTkdMCisgICAgdmlydHVhbCBRUGxhdGZvcm1PcGVuR0xDb250ZXh0ICpjcmVhdGVQbGF0
Zm9ybU9wZW5HTENvbnRleHQoUU9wZW5HTENvbnRleHQgKmNvbnRleHQpIGNvbnN0IHsgcmV0dXJu
IG1faW50ZWdyYXRpb24tPmNyZWF0ZVBsYXRmb3JtT3BlbkdMQ29udGV4dChjb250ZXh0KTsgfQor
I2VuZGlmCisgICAgdmlydHVhbCBRUGxhdGZvcm1TaGFyZWRHcmFwaGljc0NhY2hlICpjcmVhdGVQ
bGF0Zm9ybVNoYXJlZEdyYXBoaWNzQ2FjaGUoY29uc3QgY2hhciAqY2FjaGVJZCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Y3JlYXRlUGxhdGZvcm1TaGFyZWRHcmFwaGljc0NhY2hlKGNh
Y2hlSWQpOyB9CisgICAgdmlydHVhbCBRQWJzdHJhY3RFdmVudERpc3BhdGNoZXIgKmd1aVRocmVh
ZEV2ZW50RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24tPmd1aVRocmVh
ZEV2ZW50RGlzcGF0Y2hlcigpOyB9CisjaWZuZGVmIFFUX05PX0NMSVBCT0FSRAorICAgIHZpcnR1
YWwgUVBsYXRmb3JtQ2xpcGJvYXJkICpjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2ludGVn
cmF0aW9uLT5jbGlwYm9hcmQoKTsgfQorI2VuZGlmCisjaWZuZGVmIFFUX05PX0RSQUdBTkREUk9Q
CisgICAgdmlydHVhbCBRUGxhdGZvcm1EcmFnICpkcmFnKCkgY29uc3QgeyByZXR1cm4gbV9pbnRl
Z3JhdGlvbi0+ZHJhZygpOyB9CisjZW5kaWYKKyAgICB2aXJ0dWFsIFFQbGF0Zm9ybUlucHV0Q29u
dGV4dCAqaW5wdXRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+aW5wdXRD
b250ZXh0KCk7IH0KKyAgICB2aXJ0dWFsIFFQbGF0Zm9ybUFjY2Vzc2liaWxpdHkgKmFjY2Vzc2li
aWxpdHkoKSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5hY2Nlc3NpYmlsaXR5KCk7IH0K
KyAgICB2aXJ0dWFsIFFQbGF0Zm9ybU5hdGl2ZUludGVyZmFjZSAqbmF0aXZlSW50ZXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+bmF0aXZlSW50ZXJmYWNlKCk7IH0KKyAgICB2
aXJ0dWFsIFFQbGF0Zm9ybVNlcnZpY2VzICpzZXJ2aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faW50
ZWdyYXRpb24tPnNlcnZpY2VzKCk7IH0KKyAgICB2aXJ0dWFsIFFWYXJpYW50IHN0eWxlSGludChT
dHlsZUhpbnQgaGludCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+c3R5bGVIaW50KGhp
bnQpOyB9CisgICAgdmlydHVhbCBRUGxhdGZvcm1UaGVtZSAqcGxhdGZvcm1UaGVtZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW50ZWdyYXRpb24tPnBsYXRmb3JtVGhlbWUoKTsgfQorCisgICAgUVNjb3Bl
ZFBvaW50ZXI8UVBsYXRmb3JtSW50ZWdyYXRpb24+IG1faW50ZWdyYXRpb247CisjaWYgZGVmaW5l
ZChRX09TX01BQykKKyAgICBtdXRhYmxlIFFTY29wZWRQb2ludGVyPFFQbGF0Zm9ybUZvbnREYXRh
YmFzZT4gbV9mb250RGF0YWJhc2U7CisjZW5kaWYKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
VG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RGb250RGF0YWJhc2UuaCBiL1Rvb2xz
L1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZGY0NTFlZWNjMzhhODJmNzMxYzcxNGM3OTY2OWExNzhhZWUyZGYxYwotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLmgKQEAg
LTAsMCArMSwxMyBAQAorI2lmbmRlZiBUZXN0Rm9udERhdGFiYXNlX2gKKyNkZWZpbmUgVGVzdEZv
bnREYXRhYmFzZV9oCisKKyNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRlIDxRdFBsYXRmb3JtU3Vw
cG9ydC9wcml2YXRlL3Fjb3JldGV4dGZvbnRkYXRhYmFzZV9wLmg+CisKK2NsYXNzIFRlc3RGb250
RGF0YWJhc2UgOiBwdWJsaWMgUUNvcmVUZXh0Rm9udERhdGFiYXNlIHsKK3ByaXZhdGU6CisgICAg
dmlydHVhbCB2b2lkIHBvcHVsYXRlRm9udERhdGFiYXNlKCk7CisgICAgdmlydHVhbCBRRm9udCBk
ZWZhdWx0Rm9udCgpIGNvbnN0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9RdFRl
c3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEZvbnREYXRhYmFzZS5tbSBiL1Rvb2xzL1F0VGVzdFBs
YXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5MjdiOGJk
YTM4YTgwNmE5NzlmOTViODIyNjA2ZTkxMDMwMDUxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEZvbnREYXRhYmFzZS5tbQpAQCAtMCwwICsx
LDE3MyBAQAorI2luY2x1ZGUgIlRlc3RGb250RGF0YWJhc2UuaCIKKyNpbmNsdWRlIDxRdENvcmUv
UURpcj4KKyNpbmNsdWRlIDxRdENvcmUvUUZpbGVJbmZvPgorI2luY2x1ZGUgPFF0Q29yZS9wcml2
YXRlL3Fjb3JlX21hY19wLmg+CisjaW5jbHVkZSA8UXRQbGF0Zm9ybVN1cHBvcnQvcHJpdmF0ZS9x
Zm9udGVuZ2luZV9jb3JldGV4dF9wLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24u
aD4KKworLy8gRnJvbSBxY29yZXRleHRmb250ZGF0YWJhc2UubW0uCitzdGF0aWMgY29uc3QgY2hh
ciAqbGFuZ3VhZ2VGb3JXcml0aW5nU3lzdGVtW10gPSB7CisgICAgMCwgICAgIC8vIEFueQorICAg
ICJlbiIsICAvLyBMYXRpbgorICAgICJlbCIsICAvLyBHcmVlaworICAgICJydSIsICAvLyBDeXJp
bGxpYworICAgICJoeSIsICAvLyBBcm1lbmlhbgorICAgICJoZSIsICAvLyBIZWJyZXcKKyAgICAi
YXIiLCAgLy8gQXJhYmljCisgICAgInN5ciIsIC8vIFN5cmlhYworICAgICJkaXYiLCAvLyBUaGFh
bmEKKyAgICAiaGkiLCAgLy8gRGV2YW5hZ2FyaQorICAgICJibiIsICAvLyBCZW5nYWxpCisgICAg
InBhIiwgIC8vIEd1cm11a2hpCisgICAgImd1IiwgIC8vIEd1amFyYXRpCisgICAgIm9yIiwgIC8v
IE9yaXlhCisgICAgInRhIiwgIC8vIFRhbWlsCisgICAgInRlIiwgIC8vIFRlbHVndQorICAgICJr
biIsICAvLyBLYW5uYWRhCisgICAgIm1sIiwgIC8vIE1hbGF5YWxhbQorICAgICJzaSIsICAvLyBT
aW5oYWxhCisgICAgInRoIiwgIC8vIFRoYWkKKyAgICAibG8iLCAgLy8gTGFvCisgICAgImJvIiwg
IC8vIFRpYmV0YW4KKyAgICAibXkiLCAgLy8gTXlhbm1hcgorICAgICJrYSIsICAvLyBHZW9yZ2lh
bgorICAgICJrbSIsICAvLyBLaG1lcgorICAgICJ6aC1jbiIsIC8vIFNpbXBsaWZpZWRDaGluZXNl
CisgICAgInpoLXR3IiwgLy8gVHJhZGl0aW9uYWxDaGluZXNlCisgICAgImphIiwgIC8vIEphcGFu
ZXNlCisgICAgImtvIiwgIC8vIEtvcmVhbgorICAgICJ2aSIsICAvLyBWaWV0bmFtZXNlCisgICAg
MCwgLy8gU3ltYm9sCisgICAgMCwgLy8gT2doYW0KKyAgICAwLCAvLyBSdW5pYworICAgIDAgLy8g
TidLbworfTsKK2VudW0geyBMYW5ndWFnZUNvdW50ID0gc2l6ZW9mKGxhbmd1YWdlRm9yV3JpdGlu
Z1N5c3RlbSkgLyBzaXplb2YoY29uc3QgY2hhciopIH07CisKK2NvbnN0IGNoYXIqIGRlZmF1bHRX
ZWJLaXRUZXN0Rm9udEZhbWlseSA9ICJOaW1idXMgU2FucyBMIjsKKworUUZvbnQgVGVzdEZvbnRE
YXRhYmFzZTo6ZGVmYXVsdEZvbnQoKSBjb25zdAoreworICAgIHJldHVybiBRRm9udChRU3RyaW5n
Ojpmcm9tTGF0aW4xKGRlZmF1bHRXZWJLaXRUZXN0Rm9udEZhbWlseSkpOworfQorCit2b2lkIFRl
c3RGb250RGF0YWJhc2U6OnBvcHVsYXRlRm9udERhdGFiYXNlKCkKK3sKKyAgICBRQ0ZUeXBlPENU
Rm9udENvbGxlY3Rpb25SZWY+IHN5c3RlbUNvbGxlY3Rpb24oQ1RGb250Q29sbGVjdGlvbkNyZWF0
ZUZyb21BdmFpbGFibGVGb250cygwKSk7CisgICAgUUNGVHlwZTxDRkFycmF5UmVmPiBzeXN0ZW1G
b250cyA9IHN5c3RlbUNvbGxlY3Rpb24gPyBDVEZvbnRDb2xsZWN0aW9uQ3JlYXRlTWF0Y2hpbmdG
b250RGVzY3JpcHRvcnMoc3lzdGVtQ29sbGVjdGlvbikgOiAwOworICAgIGlmICghc3lzdGVtRm9u
dHMpCisgICAgICAgIHFGYXRhbCgiQ2Fubm90IGdldCBzeXN0ZW0gZm9udHNcbiIpOworCisgICAg
UUJ5dGVBcnJheSB0ZXN0Rm9udHNWYXIgPSBnZXRlbnYoIldFQktJVF9URVNURk9OVFMiKTsKKyAg
ICBRRGlyIGZvbnRzRGlyKFFTdHJpbmc6OmZyb21MYXRpbjEodGVzdEZvbnRzVmFyKSk7CisgICAg
aWYgKHRlc3RGb250c1Zhci5pc0VtcHR5KCkgfHwgIWZvbnRzRGlyLmV4aXN0cygpKSB7CisgICAg
ICAgIHFGYXRhbCgiXG5cbiIKKyAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAg
ICAgICAgICAgICAgICJRQ29yZVRleHRGb250RGF0YWJhc2VXS1Rlc3Q6XG4iCisgICAgICAgICAg
ICAgICAgIldFQktJVF9URVNURk9OVFMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBj
b3JyZWN0bHkuXG4iCisgICAgICAgICAgICAgICAgIlRoaXMgdmFyaWFibGUgaGFzIHRvIHBvaW50
IHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZm9udHNcbiIKKyAgICAgICAgICAgICAg
ICAieW91IGNhbiBjbG9uZSBmcm9tIGdpdDovL2dpdG9yaW91cy5vcmcvcXR3ZWJraXQvdGVzdGZv
bnRzLmdpdFxuIgorICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAg
ICAgICApOworICAgIH0KKworICAgIFFDRlR5cGU8Q0ZNdXRhYmxlU2V0UmVmPiBzeXN0ZW1Gb250
U2V0KENGU2V0Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZVNldENhbGxCYWNrcykpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KHN5c3RlbUZvbnRzKTsgKytpKSB7
CisgICAgICAgIENURm9udERlc2NyaXB0b3JSZWYgZm9udCA9IHN0YXRpY19jYXN0PENURm9udERl
c2NyaXB0b3JSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3lzdGVtRm9udHMsIGkpKTsKKyAg
ICAgICAgQ0ZTZXRBZGRWYWx1ZShzeXN0ZW1Gb250U2V0LCBmb250KTsKKyAgICB9CisKKyAgICBR
U3RyaW5nTGlzdCBmaWx0ZXJzOworICAgIGZpbHRlcnMgPDwgUVN0cmluZ0xpdGVyYWwoIioudHRm
Iik7CisgICAgUUZpbGVJbmZvTGlzdCBmaWxlcyA9IGZvbnRzRGlyLmVudHJ5SW5mb0xpc3QoZmls
dGVycywgUURpcjo6RmlsZXMpOworICAgIGZvcmVhY2ggKFFGaWxlSW5mbyBmaWxlLCBmaWxlcykg
eworICAgICAgICBRQnl0ZUFycmF5IHBhdGggPSBRRmlsZTo6ZW5jb2RlTmFtZShmaWxlLmNhbm9u
aWNhbEZpbGVQYXRoKCkpOworICAgICAgICBRQ0ZUeXBlPENGVVJMUmVmPiBmb250RmlsZShDRlVS
TENyZWF0ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oMCwgcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVSW50OCo+KHBhdGguY29uc3REYXRhKCkpLCBwYXRoLmxlbmd0aCgpLCBmYWxzZSkpOwor
ICAgICAgICBDRkVycm9yUmVmIGVycm9yOworICAgICAgICBpZiAoIUNURm9udE1hbmFnZXJSZWdp
c3RlckZvbnRzRm9yVVJMKGZvbnRGaWxlLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVy
cm9yKSkgeworICAgICAgICAgICAgQ0ZSZWxlYXNlKGVycm9yKTsKKyAgICAgICAgICAgIHFGYXRh
bCgiRmFpbGVkIHJlZ2lzdGVyaW5nIGZvbnQgZmlsZTogJXNcbiIsIHBhdGguY29uc3REYXRhKCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBkb25lIHZpYSBmb250cy5jb25m
IG9uIExpbnV4LgorICAgIFFGb250OjppbnNlcnRTdWJzdGl0dXRpb24oUVN0cmluZ0xpdGVyYWwo
IkhlbHZldGljYSIpLCBRU3RyaW5nOjpmcm9tTGF0aW4xKGRlZmF1bHRXZWJLaXRUZXN0Rm9udEZh
bWlseSkpOworCisgICAgUUNGVHlwZTxDVEZvbnRDb2xsZWN0aW9uUmVmPiBjb2xsZWN0aW9uID0g
Q1RGb250Q29sbGVjdGlvbkNyZWF0ZUZyb21BdmFpbGFibGVGb250cygwKTsKKyAgICBRQ0ZUeXBl
PENGQXJyYXlSZWY+IGZvbnRzID0gQ1RGb250Q29sbGVjdGlvbkNyZWF0ZU1hdGNoaW5nRm9udERl
c2NyaXB0b3JzKGNvbGxlY3Rpb24pOworCisgICAgUVN0cmluZyBmb3VuZHJ5TmFtZSA9IFFMYXRp
bjFTdHJpbmcoIkNvcmVUZXh0Iik7CisgICAgY29uc3QgaW50IG51bUZvbnRzID0gQ0ZBcnJheUdl
dENvdW50KGZvbnRzKTsKKyAgICBRSGFzaDxRU3RyaW5nLCBRU3RyaW5nPiBwc05hbWVUb0ZhbWls
eTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUZvbnRzOyArK2kpIHsKKyAgICAgICAgQ1RG
b250RGVzY3JpcHRvclJlZiBmb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250RGVzY3JpcHRvclJlZj4o
Q0ZBcnJheUdldFZhbHVlQXRJbmRleChmb250cywgaSkpOworICAgICAgICBpZiAoQ0ZTZXRHZXRD
b3VudE9mVmFsdWUoc3lzdGVtRm9udFNldCwgZm9udCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgUUNGU3RyaW5nIGZhbWlseU5hbWUgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4o
Q1RGb250RGVzY3JpcHRvckNvcHlMb2NhbGl6ZWRBdHRyaWJ1dGUoZm9udCwga0NURm9udEZhbWls
eU5hbWVBdHRyaWJ1dGUsIE5VTEwpKTsKKyAgICAgICAgUUNGVHlwZTxDRkRpY3Rpb25hcnlSZWY+
IHN0eWxlcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ1RGb250RGVzY3JpcHRvckNv
cHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFRyYWl0c0F0dHJpYnV0ZSkpOworICAgICAgICBRRm9u
dDo6V2VpZ2h0IHdlaWdodCA9IFFGb250OjpOb3JtYWw7CisgICAgICAgIFFGb250OjpTdHlsZSBz
dHlsZSA9IFFGb250OjpTdHlsZU5vcm1hbDsKKyAgICAgICAgUUZvbnQ6OlN0cmV0Y2ggc3RyZXRj
aCA9IFFGb250OjpVbnN0cmV0Y2hlZDsKKyAgICAgICAgYm9vbCBmaXhlZFBpdGNoID0gZmFsc2U7
CisKKyAgICAgICAgaWYgKHN0eWxlcykgeworICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIHdl
aWdodFZhbHVlID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KHN0eWxlcywga0NURm9udFdlaWdodFRyYWl0KSkpIHsKKyAgICAgICAgICAgICAgICBRX0FTU0VS
VChDRk51bWJlcklzRmxvYXRUeXBlKHdlaWdodFZhbHVlKSk7CisgICAgICAgICAgICAgICAgZG91
YmxlIGQ7CisgICAgICAgICAgICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUod2VpZ2h0VmFsdWUs
IGtDRk51bWJlckRvdWJsZVR5cGUsICZkKSkKKyAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ID0g
KGQgPiAwLjApID8gUUZvbnQ6OkJvbGQgOiBRRm9udDo6Tm9ybWFsOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIGl0YWxpYyA9IHN0YXRpY19jYXN0PENGTnVtYmVy
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzdHlsZXMsIGtDVEZvbnRTbGFudFRyYWl0KSkpIHsK
KyAgICAgICAgICAgICAgICBRX0FTU0VSVChDRk51bWJlcklzRmxvYXRUeXBlKGl0YWxpYykpOwor
ICAgICAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAgICAgICAgIGlmIChDRk51bWJlckdl
dFZhbHVlKGl0YWxpYywga0NGTnVtYmVyRG91YmxlVHlwZSwgJmQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChkID4gMC4wKQorICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBRRm9u
dDo6U3R5bGVJdGFsaWM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKENGTnVtYmVyUmVmIHN5bWJvbGljID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+
KENGRGljdGlvbmFyeUdldFZhbHVlKHN0eWxlcywga0NURm9udFN5bWJvbGljVHJhaXQpKSkgewor
ICAgICAgICAgICAgICAgIGludCBkOworICAgICAgICAgICAgICAgIGlmIChDRk51bWJlckdldFZh
bHVlKHN5bWJvbGljLCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmZCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGQgJiBrQ1RGb250TW9ub1NwYWNlVHJhaXQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXhlZFBpdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGQgJiBrQ1RG
b250RXhwYW5kZWRUcmFpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2ggPSBRRm9u
dDo6RXhwYW5kZWQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGQgJiBrQ1RGb250Q29u
ZGVuc2VkVHJhaXQpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJldGNoID0gUUZvbnQ6OkNv
bmRlbnNlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQgcGl4ZWxTaXplID0gMDsKKyAgICAgICAgaWYgKFFDRlR5cGU8Q0ZOdW1iZXJS
ZWY+IHNpemUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlB
dHRyaWJ1dGUoZm9udCwga0NURm9udFNpemVBdHRyaWJ1dGUpKSkgeworICAgICAgICAgICAgaWYg
KENGTnVtYmVySXNGbG9hdFR5cGUoc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZDsK
KyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHNpemUsIGtDRk51bWJlckRvdWJsZVR5
cGUsICZkKTsKKyAgICAgICAgICAgICAgICBwaXhlbFNpemUgPSBkOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHNpemUsIGtDRk51bWJlcklu
dFR5cGUsICZwaXhlbFNpemUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
UVN1cHBvcnRlZFdyaXRpbmdTeXN0ZW1zIHdyaXRpbmdTeXN0ZW1zOworICAgICAgICBpZiAoUUNG
VHlwZTxDRkFycmF5UmVmPiBsYW5ndWFnZXMgPSBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDVEZv
bnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LCBrQ1RGb250TGFuZ3VhZ2VzQXR0cmlidXRl
KSkpIHsKKyAgICAgICAgICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZBcnJheUdldENvdW50KGxhbmd1
YWdlcyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IExhbmd1YWdlQ291bnQ7ICsr
aSkgeworICAgICAgICAgICAgICAgIGlmICghbGFuZ3VhZ2VGb3JXcml0aW5nU3lzdGVtW2ldKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBRQ0ZTdHJpbmcg
bGFuZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgbGFuZ3VhZ2VGb3JXcml0aW5n
U3lzdGVtW2ldLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJKTsKKyAgICAgICAgICAgICAgICBpZiAo
Q0ZBcnJheUNvbnRhaW5zVmFsdWUobGFuZ3VhZ2VzLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBs
YW5nKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGluZ1N5c3RlbXMuc2V0U3VwcG9ydGVkKFFG
b250RGF0YWJhc2U6OldyaXRpbmdTeXN0ZW0oaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgQ0ZSZXRhaW4oZm9udCk7CisgICAgICAgIFFQbGF0Zm9ybUZvbnREYXRhYmFz
ZTo6cmVnaXN0ZXJGb250KGZhbWlseU5hbWUsIGZvdW5kcnlOYW1lLCB3ZWlnaHQsIHN0eWxlLCBz
dHJldGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl
IC8qIGFudGlhbGlhc2VkICovLCB0cnVlIC8qIHNjYWxhYmxlICovLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFNpemUsIGZpeGVkUGl0Y2gsIHdyaXRp
bmdTeXN0ZW1zLCAodm9pZCAqKSBmb250KTsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgcHNOYW1lID0g
c3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZv
bnQsIGtDVEZvbnROYW1lQXR0cmlidXRlKSk7CisgICAgICAgIC8vIHdlIG5lZWQgUG9zdFNjcmlw
dCBOYW1lIHRvIGZhbWlseSBuYW1lIG1hcHBpbmcgZm9yIGZhbGxiYWNrIGxpc3QgY29uc3RydWN0
aW9uCisgICAgICAgIHBzTmFtZVRvRmFtaWx5W1FDRlN0cmluZzo6dG9RU3RyaW5nKChOU1N0cmlu
ZyAqKSBwc05hbWUpXSA9IGZhbWlseU5hbWU7CisgICAgICAgIENGUmVsZWFzZShwc05hbWUpOwor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21haW4uY3Bw
IGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNlMzMx
ZGY5MWU4OTg4ZGUyZDdjZjNhZjg5MWMwMDRkMDM2MTcwMwotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21haW4uY3BwCkBAIC0wLDAgKzEsMzggQEAKKyNpbmNs
dWRlICJUZXN0SW50ZWdyYXRpb24uaCIKKyNpbmNsdWRlIDxRUGxhdGZvcm1JbnRlZ3JhdGlvblBs
dWdpbj4KKyNpbmNsdWRlIDxRdEdsb2JhbD4KKworY2xhc3MgUV9ERUNMX0VYUE9SVCBUZXN0SW50
ZWdyYXRpb25QbHVnaW4gOiBwdWJsaWMgUVBsYXRmb3JtSW50ZWdyYXRpb25QbHVnaW4geworICAg
IFFfT0JKRUNUCisgICAgUV9QTFVHSU5fTUVUQURBVEEoSUlEICJvcmcucXQtcHJvamVjdC5RdC5R
UGxhdGZvcm1JbnRlZ3JhdGlvbkZhY3RvcnlJbnRlcmZhY2UiIEZJTEUgInRlc3RwbGF0Zm9ybS5q
c29uIikKK3B1YmxpYzoKKyAgICBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Q7CisgICAgUVBsYXRm
b3JtSW50ZWdyYXRpb24qIGNyZWF0ZShjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZ0xpc3Qm
KTsKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKK307CisKK1FTdHJpbmdM
aXN0IFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6a2V5cygpIGNvbnN0Cit7CisgICAgUVN0cmluZ0xp
c3QgbGlzdDsKKyAgICBsaXN0IDw8IFFTdHJpbmdMaXRlcmFsKCJ0ZXN0cGxhdGZvcm0iKTsKKyAg
ICByZXR1cm4gbGlzdDsKK30KKworUVBsYXRmb3JtSW50ZWdyYXRpb24qIFRlc3RJbnRlZ3JhdGlv
blBsdWdpbjo6Y3JlYXRlKGNvbnN0IFFTdHJpbmcmIHN5c3RlbSwgY29uc3QgUVN0cmluZ0xpc3Qm
IHBhcmFtZXRlcnMpCit7CisgICAgaWYgKHN5c3RlbS50b0xvd2VyKCkgPT0gUVN0cmluZ0xpdGVy
YWwoInRlc3RwbGF0Zm9ybSIpKQorICAgICAgICByZXR1cm4gbmV3IFRlc3RJbnRlZ3JhdGlvbigp
OworCisgICAgcmV0dXJuIDA7Cit9CisKKyNpbmNsdWRlICJtYWluLm1vYyIKKwordm9pZCBUZXN0
SW50ZWdyYXRpb25QbHVnaW46OmluaXRpYWxpemUoKQoreworICAgIFFTdGF0aWNQbHVnaW4gcGx1
Z2luOworICAgIHBsdWdpbi5pbnN0YW5jZSA9ICZxdF9wbHVnaW5faW5zdGFuY2U7CisgICAgcGx1
Z2luLm1ldGFEYXRhID0gJnF0X3BsdWdpbl9xdWVyeV9tZXRhZGF0YTsKKyAgICBxUmVnaXN0ZXJT
dGF0aWNQbHVnaW5GdW5jdGlvbihwbHVnaW4pOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0
UGxhdGZvcm1QbHVnaW4vdGVzdHBsYXRmb3JtLmpzb24gYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBs
dWdpbi90ZXN0cGxhdGZvcm0uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MzBiYjYyYjBhNWU4YjQxOWM3YmIz
OGEwYTMzYTBmMzVmZDA3NDliCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUXRUZXN0UGxhdGZv
cm1QbHVnaW4vdGVzdHBsYXRmb3JtLmpzb24KQEAgLTAsMCArMSwzIEBACit7CisgICAgIktleXMi
OiBbICJ0ZXN0cGxhdGZvcm0iIF0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rvb2xzLnBybyBiL1Rv
b2xzL1Rvb2xzLnBybwppbmRleCBmYjJiMTlhMzdkOTU2ZDk2ZmI2NWExYTAyNzYwYjIwNGJlMjc5
MDdmLi5mN2VkYjI4NzFjMWUyOGU5YjkyMDkxODQ5NjM2OGY4NDZlYWEwNzQzIDEwMDY0NAotLS0g
YS9Ub29scy9Ub29scy5wcm8KKysrIGIvVG9vbHMvVG9vbHMucHJvCkBAIC0xNSw3ICsxNSw4IEBA
IFNVQkRJUlMgKz0gRHVtcFJlbmRlclRyZWUvcXQvSW1hZ2VEaWZmLnBybwogCiAhbm9fd2Via2l0
MiB7CiAgICAgU1VCRElSUyArPSBNaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8gXAotICAg
ICAgICAgICAgICAgV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnBybworICAgICAg
ICAgICAgICAgV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnBybyBcCisgICAgICAg
ICAgICAgICBRdFRlc3RQbGF0Zm9ybVBsdWdpbi9RdFRlc3RQbGF0Zm9ybVBsdWdpbi5wcm8gXAog
fQogCiAhd2luMzI6Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9
MSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpCmluZGV4IDZmMWRhOTUzZDAwNDllZGY5NTcw
MjAxODEwM2EzYTJhZjU5ZDM0NWUuLmM5N2NkZjFjYTNhZDBhMGNmMzEwYTJlNzM1Y2IxMzgwN2Fm
NzI5ZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaQorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmkKQEAgLTM3LDQgKzM3LDkgQEAgUFJF
RklYX0hFQURFUiA9IFdlYktpdFRlc3RSdW5uZXJQcmVmaXguaAogKi1nKysqOlFNQUtFX0NYWEZM
QUdTICs9ICItaW5jbHVkZSAkJFBSRUZJWF9IRUFERVIiCiAqLWNsYW5nKjpRTUFLRV9DWFhGTEFH
UyArPSAiLWluY2x1ZGUgJCRQUkVGSVhfSEVBREVSIgogCittYWM6IExJQl9TVUZGSVg9LmR5bGli
Cit3aW46IExJQl9TVUZGSVg9LmRsbAordW5peDohbWFjOiBMSUJfU1VGRklYPS5zbworREVGSU5F
UyArPSBURVNUX1BMQVRGT1JNX1BMVUdJTl9QQVRIPVwiXFxcIiQke1JPT1RfQlVJTERfRElSfSQk
e1FNQUtFX0RJUl9TRVB9bGliJCR7UU1BS0VfRElSX1NFUH1saWJ0ZXN0cGxhdGZvcm0kJHtMSUJf
U1VGRklYfVxcXCJcIgorCiBSRVNPVVJDRVMgPSBxdC9XZWJLaXRUZXN0UnVubmVyLnFyYwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9tYWluLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvcXQvbWFpbi5jcHAKaW5kZXggZjk1NzJhODdlMzQ1NTQ3M2U4NWUyZWE0Njcy
NDk1MGNiN2YxZDhiYS4uYTNkYTAxYTQ2OWIxYTUxZTM5YmI5Y2M3ZWQ1MGI4YTQ1NGI2NDQ2OSAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9tYWluLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL3F0L21haW4uY3BwCkBAIC05NCw2ICs5NCwyMiBAQCBpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKICAgICBxcHV0ZW52KCJRVF9XRUJLSVRfVEhFTUVf
TkFNRSIsICJxc3R5bGUiKTsKIAorICAgIFFCeXRlQXJyYXkgcGxhdGZvcm0gPSBxZ2V0ZW52KCJR
VF9RUEFfUExBVEZPUk0iKTsKKyAgICBRQnl0ZUFycmF5IHBsYXRmb3JtUGx1Z2luUGF0aCA9IHFn
ZXRlbnYoIlFUX1FQQV9QTEFURk9STV9QTFVHSU5fUEFUSCIpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAgIGlmIChRQnl0ZUFycmF5KGFyZ3ZbaV0pID09ICIt
cGxhdGZvcm0iICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHBsYXRmb3JtID0gYXJndltp
ICsgMV07CisgICAgICAgIGVsc2UgaWYgKFFCeXRlQXJyYXkoYXJndltpXSkgPT0gIi1wbGF0Zm9y
bXBsdWdpbnBhdGgiICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHBsYXRmb3JtUGx1Z2lu
UGF0aCA9IGFyZ3ZbaSArIDFdOworICAgIH0KKyAgICBpZiAoIXBsYXRmb3JtLmlzRW1wdHkoKSkK
KyAgICAgICAgcXB1dGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRGT1JNIiwgcGxhdGZvcm0p
OworICAgIGlmICghcGxhdGZvcm1QbHVnaW5QYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcXB1dGVu
digiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRGT1JNX1BMVUdJTl9QQVRIIiwgcGxhdGZvcm1QbHVn
aW5QYXRoKTsKKworICAgIC8vIFRlbGwgdGhlIHdlYiBwcm9jZXNzIHRoYXQgd2Ugd2FudCB0byB1
c2UgdGhlIHRlc3QgcGxhdGZvcm0gcGx1Z2luLgorICAgIHFwdXRlbnYoIlFUX1dFQktJVDJfVEVT
VF9QTEFURk9STV9QTFVHSU5fUEFUSCIsIFRFU1RfUExBVEZPUk1fUExVR0lOX1BBVEgpOworCiAg
ICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0RmxpY2thYmxlVmlld3BvcnRFbmFibGVk
KGZhbHNlKTsKICAgICBRQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogICAgIExhdW5jaGVy
IGxhdW5jaGVyKGFyZ2MsIGFyZ3YpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131663</attachid>
            <date>2012-03-13 10:42:01 -0700</date>
            <delta_ts>2012-03-13 13:19:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80996-20120313184159.patch</filename>
            <type>text/plain</type>
            <size>26406</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGUyOWRmOTU0OTM2OTMx
MmEwNWQyNDRkNjU1OWQ0Y2Y2MGE0MTFjMC4uNDZjYjIwMjUwOTAxNGNjYWViZGFjNTE0ZDBlODQz
YWRhZjg5NGNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAzLTEzICBCYWxh
enMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIEFkZCB0ZXN0
IHNwZWNpZmljIHBsYXRmb3JtIHBsdWdpbiB0byBhY2hpZXZlIHVuaWZpZWQgbGF5b3V0IHRlc3Qg
cmVzdWx0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA5OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bml0aWFsaXplIHRoZSB0ZXN0IHBsYXRmb3JtIHBsdWdpbiBiZWZvcmUgaW5pdGlhbGl6aW5nCisg
ICAgICAgIHRoZSB3ZWIgcHJvY2VzcyBpZiB3ZSBhcmUgaW4gYSBXVFIgcnVuLgorICAgICAgICBJ
dCBpcyBuZWNlc3NhcnkgdG8gcGxhY2UgdGhpcyBpbml0aWFsaXphdGlvbiBoZXJlIGFzIHdlCisg
ICAgICAgIGNhbm5vdCBjb250cm9sIHdpY2ggcGxhdGZvcm0gcGx1Z2luIHdpbGwgYmUgdXNlZCBh
ZnRlcgorICAgICAgICB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgUUd1aUFwcGxpY2F0aW9uLgor
CisgICAgICAgICogcXQvTWFpblF0LmNwcDoKKyAgICAgICAgKGluaXRpYWxpemVUZXN0UGxhdGZv
cm1QbHVnaW5Gb3JXVFJJZlJlcXVpcmVkKToKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTAzLTEx
ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUg
aG93IHRoZSBXZWIgSW5zcGVjdG9yIHJlc291cmNlcyBhcmUgbG9hZGVkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvcXQvTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL3F0L01haW5RdC5j
cHAKaW5kZXggY2FjYjdjOTlkMDM3ZTU0NTIwMGI0MmZhYTI4YzhhYTM3NTliZjhiYS4uMzc4NDVi
YmRkM2IwOWI5YWI1ZGRkZWU4YjcyY2E0NDU0NGY3Zjg5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvcXQvTWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9xdC9NYWluUXQuY3BwCkBA
IC0yNCw2ICsyNCwxMCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKKyNpbmNsdWRlIDxRQnl0ZUFycmF5PgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9u
PgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luPgorI2luY2x1ZGUgPFFQbHVn
aW5Mb2FkZXI+CiAjaW5jbHVkZSA8UXRHbG9iYWw+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
MzEsMTEgKzM1LDI5IEBAIFFfREVDTF9JTVBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KTsKIFFfREVDTF9JTVBPUlQgdm9pZCBpbml0aWFsaXplV2ViS2l0MlRo
ZW1lKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0UGxhdGZvcm1QbHVnaW5Gb3JX
VFJJZlJlcXVpcmVkKCkKK3sKKyAgICBRQnl0ZUFycmF5IHBsdWdpblBhdGggPSBxZ2V0ZW52KCJR
VF9XRUJLSVQyX1RFU1RfUExBVEZPUk1fUExVR0lOX1BBVEgiKTsKKyAgICBpZiAocGx1Z2luUGF0
aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFQbHVnaW5Mb2FkZXIgbG9hZGVy
KFFTdHJpbmc6OmZyb21MYXRpbjEocGx1Z2luUGF0aC5kYXRhKCkpKTsKKyAgICBRUGxhdGZvcm1J
bnRlZ3JhdGlvblBsdWdpbiogcGx1Z2luID0gcW9iamVjdF9jYXN0PFFQbGF0Zm9ybUludGVncmF0
aW9uUGx1Z2luKj4obG9hZGVyLmluc3RhbmNlKCkpOworICAgIGlmICghcGx1Z2luKQorICAgICAg
ICBxRmF0YWwoImNhbm5vdCBpbml0aWFsaXplIHRlc3QgcGxhdGZvcm0gcGx1Z2luXG4iKTsKKwor
ICAgIHFwdXRlbnYoIlFUX1FQQV9QTEFURk9STV9QTFVHSU5fUEFUSCIsIHBsdWdpblBhdGgpOwor
ICAgIHFwdXRlbnYoIlFUX1FQQV9QTEFURk9STSIsICJ0ZXN0cGxhdGZvcm0iKTsKKworICAgIFFN
ZXRhT2JqZWN0OjppbnZva2VNZXRob2QocGx1Z2luLCAiaW5pdGlhbGl6ZSIpOworfQorCiAvLyBU
aGUgZnJhbWV3b3JrIGVudHJ5IHBvaW50LgogLy8gV2UgY2FsbCBvdXIgcGxhdGZvcm0gc3BlY2lm
aWMgZW50cnkgcG9pbnQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gV2ViS2l0TWFpbiBiZWNhdXNlIGl0
IG1ha2VzIGxpdHRsZSBzZW5zZQogLy8gdG8gcmVpbXBsZW1lbnQgdGhlIGhhbmRsaW5nIG9mIGNv
bW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBRQXBwbGljYXRpb24uCiBpbnQgbWFpbihpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCiB7CisgICAgaW5pdGlhbGl6ZVRlc3RQbGF0Zm9ybVBsdWdpbkZvcldU
UklmUmVxdWlyZWQoKTsKICAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXQyVGhlbWUoKTsKICAg
ICByZXR1cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KGFyZ2MsIGFyZ3YpOwogfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNmMmVkZmYwYTUz
YmM3ZWVmMDkwOWM1OWU2MmVkNDlmOTVkN2RhM2EuLjdjOWIxOWJkZWQ3ODJlOWE3NjE5NjkxYzBj
YTU2NmVjOGIwZTcwMWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMi0wMy0xMyAgQmFsYXpzIEtlbGVtZW4gIDxr
YmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1F0XSBBZGQgdGVzdCBzcGVjaWZpYyBwbGF0
Zm9ybSBwbHVnaW4gdG8gYWNoaWV2ZSB1bmlmaWVkIGxheW91dCB0ZXN0IHJlc3VsdHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwOTk2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgUXRUZXN0UGxh
dGZvcm1QbHVnaW4gYXMgYSBuZXcgcHJvamVjdCB1bmRlciBUb29scy4KKyAgICAgICAgVGhpcyBp
cyBhIFF0NS1pc2ggcGxhdGZvcm0gcGx1Z2luIHRoYXQgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhl
CisgICAgICAgIHBsYXRmb3JtIHN1cHBvcnQgaW50ZXJmYWNlcyBpbiBvcmRlciB0byB1bmlmeSBs
YXlvdXQgdGVzdCByZXN1bHRzLgorICAgICAgICBGb3Igbm93IGl0IG9ubHkgb3ZlcnJpZGVzIHRo
ZSBmb250IGRhdGFiYXNlIG9uIE1hYyBhbmQgcmVkaXJlY3RzCisgICAgICAgIGV2ZXJ5dGhpbmcg
ZWxzZSB0byB0aGUgcmVhbCBwbGF0Zm9ybSBwbHVnaW4uIFRoZSBmb250IGRhdGFiYXNlIGl0Cisg
ICAgICAgIHByb3ZpZGVzIG1pbWljcyB0aGUgd2F5IGhvdyB3ZSBzZXQgdXAgdGVzdCBmb250cyB3
aXRoIGZvbnRjb25maWcgb24gTGludXguCisgICAgICAgIE1ha2UgRHVtcFJlbmRlclRyZWUgYW5k
IFdlYktpdFRlc3RSdW5uZXIgdXNlIHRoaXMgcGxhdGZvcm0gcGx1Z2luLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3F0L21haW4uY3BwOgorICAgICAgICAoaW5pdGlhbGl6ZVRlc3RQbGF0Zm9ybVBsdWdp
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBRdFRlc3RQbGF0Zm9ybVBsdWdpbi9RdFRl
c3RQbGF0Zm9ybVBsdWdpbi5wcm86IEFkZGVkLgorICAgICAgICAqIFF0VGVzdFBsYXRmb3JtUGx1
Z2luL1Rlc3RJbnRlZ3JhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdEludGVncmF0aW9u
OjpUZXN0SW50ZWdyYXRpb24pOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpmb250RGF0YWJh
c2UpOgorICAgICAgICAqIFF0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbik6CisgICAgICAgIChUZXN0SW50ZWdyYXRp
b246Omhhc0NhcGFiaWxpdHkpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQbGF0
Zm9ybVBpeG1hcCk6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246OmNyZWF0ZVBsYXRmb3JtV2lu
ZG93KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6Y3JlYXRlUGxhdGZvcm1CYWNraW5nU3Rv
cmUpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQbGF0Zm9ybU9wZW5HTENvbnRl
eHQpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQbGF0Zm9ybVNoYXJlZEdyYXBo
aWNzQ2FjaGUpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpndWlUaHJlYWRFdmVudERpc3Bh
dGNoZXIpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjbGlwYm9hcmQpOgorICAgICAgICAo
VGVzdEludGVncmF0aW9uOjpkcmFnKToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6aW5wdXRD
b250ZXh0KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6YWNjZXNzaWJpbGl0eSk6CisgICAg
ICAgIChUZXN0SW50ZWdyYXRpb246Om5hdGl2ZUludGVyZmFjZSk6CisgICAgICAgIChUZXN0SW50
ZWdyYXRpb246OnNlcnZpY2VzKToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6c3R5bGVIaW50
KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6cGxhdGZvcm1UaGVtZSk6CisgICAgICAgICog
UXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RGb250RGF0YWJhc2UuaDogQWRkZWQuCisgICAg
ICAgIChUZXN0Rm9udERhdGFiYXNlKToKKyAgICAgICAgKiBRdFRlc3RQbGF0Zm9ybVBsdWdpbi9t
YWMvVGVzdEZvbnREYXRhYmFzZS5tbTogQWRkZWQuCisgICAgICAgIChUZXN0Rm9udERhdGFiYXNl
Ojpwb3B1bGF0ZUZvbnREYXRhYmFzZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1QbHVnaW4v
bWFjL1Rlc3RJbnRlZ3JhdGlvbk1hYy5tbTogQWRkZWQuCisgICAgICAgIChUZXN0SW50ZWdyYXRp
b246OmZvbnREYXRhYmFzZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFpbi5j
cHA6IEFkZGVkLgorICAgICAgICAoVGVzdEludGVncmF0aW9uUGx1Z2luOjprZXlzKToKKyAgICAg
ICAgKFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6Y3JlYXRlKToKKyAgICAgICAgKFRlc3RJbnRlZ3Jh
dGlvblBsdWdpbjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1QbHVnaW4v
dGVzdHBsYXRmb3JtLmpzb246IEFkZGVkLgorICAgICAgICAqIFRvb2xzLnBybzoKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9xdC9tYWluLmNwcDoKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTAzLTEyICBNaW5nIFhpZSAg
PG14aWVAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gYnVpbGQtd2Via2l0IGRvZXNu
J3QgcmVjb2duaXplICItLWNtYWtlYXJnIiBmb3IgdGhlIEJsYWNrQmVycnkgcG9ydApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCmluZGV4IDU2NjA0ZDUxODU2YzNk
YjlkYjAwNTJhZGE5ZjJiNjg1YjVkZGEwNjAuLmViYTJmMjk2MTM3MDE3YmJmYmVmZDZmY2NkZTAx
ODA0MjVhZmE1OWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5k
ZXJUcmVlLnBybworKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5w
cm8KQEAgLTU1LDQgKzU1LDkgQEAgd2luY2UqOiB7CiBERUZJTkVTIC09IFVTRV9TWVNURU1fTUFM
TE9DPTAKIERFRklORVMgKz0gVVNFX1NZU1RFTV9NQUxMT0M9MQogCittYWM6IExJQl9TVUZGSVg9
LmR5bGliCit3aW46IExJQl9TVUZGSVg9LmRsbAordW5peDohbWFjOiBMSUJfU1VGRklYPS5zbwor
REVGSU5FUyArPSBURVNUX1BMQVRGT1JNX1BMVUdJTl9QQVRIPVwiXFxcIiQke1JPT1RfQlVJTERf
RElSfSQke1FNQUtFX0RJUl9TRVB9bGliJCR7UU1BS0VfRElSX1NFUH1saWJ0ZXN0cGxhdGZvcm0k
JHtMSUJfU1VGRklYfVxcXCJcIgorCiBSRVNPVVJDRVMgPSBEdW1wUmVuZGVyVHJlZS5xcmMKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvbWFpbi5jcHAKaW5kZXggMTc2MzM2NzcwNmYxYWIyN2U4YTE2M2NjNWU1NDVm
ZmI3YTg1ZjAwZS4uM2FjODNkMjQ5ODZlODJiZGI3MDEyZTU5OGFjOTlhNjAwYTA0OTY3NSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKQEAgLTMxLDYgKzMxLDEwIEBACiAKICNpbmNsdWRlICJR
dEluaXRpYWxpemVUZXN0Rm9udHMuaCIKIAorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9u
PgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luPgorI2luY2x1ZGUgPFFQbHVn
aW5Mb2FkZXI+CisKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAKICNpbmNsdWRlIDxx
c3RyaW5nbGlzdC5oPgpAQCAtMTIzLDYgKzEyNywzNCBAQCBzdGF0aWMgdm9pZCBXVEZDcmFzaEhv
b2soKQogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0UGxhdGZvcm1QbHVn
aW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKK3sKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJ
T05fQ0hFQ0soNSwgMCwgMCkKKyAgICBRUGx1Z2luTG9hZGVyIGxvYWRlcihURVNUX1BMQVRGT1JN
X1BMVUdJTl9QQVRIKTsKKyAgICBRUGxhdGZvcm1JbnRlZ3JhdGlvblBsdWdpbiogcGx1Z2luID0g
cW9iamVjdF9jYXN0PFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luKj4obG9hZGVyLmluc3RhbmNl
KCkpOworICAgIGlmICghcGx1Z2luKQorICAgICAgICBxRmF0YWwoImNhbm5vdCBpbml0aWFsaXpl
IHRlc3QgcGxhdGZvcm0gcGx1Z2luXG4iKTsKKworICAgIFFCeXRlQXJyYXkgcGxhdGZvcm0gPSBx
Z2V0ZW52KCJRVF9RUEFfUExBVEZPUk0iKTsKKyAgICBRQnl0ZUFycmF5IHBsYXRmb3JtUGx1Z2lu
UGF0aCA9IHFnZXRlbnYoIlFUX1FQQV9QTEFURk9STV9QTFVHSU5fUEFUSCIpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAgIGlmIChRQnl0ZUFycmF5KGFyZ3Zb
aV0pID09ICItcGxhdGZvcm0iICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHBsYXRmb3Jt
ID0gYXJndltpICsgMV07CisgICAgICAgIGVsc2UgaWYgKFFCeXRlQXJyYXkoYXJndltpXSkgPT0g
Ii1wbGF0Zm9ybXBsdWdpbnBhdGgiICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHBsYXRm
b3JtUGx1Z2luUGF0aCA9IGFyZ3ZbaSArIDFdOworICAgIH0KKyAgICBpZiAoIXBsYXRmb3JtLmlz
RW1wdHkoKSkKKyAgICAgICAgcXB1dGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRGT1JNIiwg
cGxhdGZvcm0pOworICAgIGlmICghcGxhdGZvcm1QbHVnaW5QYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgcXB1dGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRGT1JNX1BMVUdJTl9QQVRIIiwgcGxh
dGZvcm1QbHVnaW5QYXRoKTsKKworICAgIHFwdXRlbnYoIlFUX1FQQV9QTEFURk9STV9QTFVHSU5f
UEFUSCIsIFRFU1RfUExBVEZPUk1fUExVR0lOX1BBVEgpOworICAgIHFwdXRlbnYoIlFUX1FQQV9Q
TEFURk9STSIsICJ0ZXN0cGxhdGZvcm0iKTsKKworICAgIFFNZXRhT2JqZWN0OjppbnZva2VNZXRo
b2QocGx1Z2luLCAiaW5pdGlhbGl6ZSIpOworI2VuZGlmCit9CisKIGludCBtYWluKGludCBhcmdj
LCBjaGFyKiBhcmd2W10pCiB7CiAjaWZkZWYgUV9PU19XSU4KQEAgLTE0Niw2ICsxNzgsOCBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogCiAgICAgV2ViS2l0Ojppbml0aWFsaXpl
VGVzdEZvbnRzKCk7CiAKKyAgICBpbml0aWFsaXplVGVzdFBsYXRmb3JtUGx1Z2luKGFyZ2MsIGFy
Z3YpOworCiAgICAgUUFwcGxpY2F0aW9uOjpzZXRHcmFwaGljc1N5c3RlbSgicmFzdGVyIik7CiAg
ICAgUUFwcGxpY2F0aW9uOjpzZXRTdHlsZShuZXcgUVdpbmRvd3NTdHlsZSk7CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1F0VGVzdFBsYXRmb3JtUGx1Z2luLnBybyBi
L1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1F0VGVzdFBsYXRmb3JtUGx1Z2luLnBybwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jOTUyOGE2N2FlMWZmYzIyMmEyZjI0MGM1ODIwOTNjZmYyNGQzMjE5Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vUXRUZXN0UGxhdGZvcm1QbHVn
aW4ucHJvCkBAIC0wLDAgKzEsMjAgQEAKK1RBUkdFVCA9IHRlc3RwbGF0Zm9ybQorREVTVERJUiA9
ICQkUk9PVF9CVUlMRF9ESVIvbGliCisKK2xvYWQocXRfcGx1Z2luKQorUVQgPSBjb3JlIGd1aSBj
b3JlLXByaXZhdGUgZ3VpLXByaXZhdGUgcGxhdGZvcm1zdXBwb3J0LXByaXZhdGUKKworSEVBREVS
UyA9IFwKKyAgICBUZXN0SW50ZWdyYXRpb24uaCBcCisKK1NPVVJDRVMgPSBcCisgICAgbWFpbi5j
cHAgXAorICAgIFRlc3RJbnRlZ3JhdGlvbi5jcHAgXAorCittYWMgeworICAgIExJQlMgKz0gLWZy
YW1ld29yayBGb3VuZGF0aW9uCisgICAgT0JKRUNUSVZFX0hFQURFUlMgKz0gbWFjL1Rlc3RGb250
RGF0YWJhc2UuaAorICAgIE9CSkVDVElWRV9TT1VSQ0VTICs9IFwKKyAgICAgICAgbWFjL1Rlc3RG
b250RGF0YWJhc2UubW0gXAorICAgICAgICBtYWMvVGVzdEludGVncmF0aW9uTWFjLm1tIFwKK30K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5j
cHAgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9UZXN0SW50ZWdyYXRpb24uY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcxOGJlYzYwYzVkZmJjZWY1YzUxY2Y3YmI5MTI2OWI4MDM3ZDViYmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9UZXN0SW50ZWdyYXRpb24uY3Bw
CkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlICJUZXN0SW50ZWdyYXRpb24uaCIKKyNpbmNsdWRl
IDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorI2luY2x1ZGUgPFF0
R2xvYmFsPgorI2luY2x1ZGUgPFF0R3VpL3ByaXZhdGUvcXBsYXRmb3JtaW50ZWdyYXRpb25mYWN0
b3J5X3FwYV9wLmg+CisjaW5jbHVkZSA8cXN5c3RlbWRldGVjdGlvbi5oPgorCitUZXN0SW50ZWdy
YXRpb246OlRlc3RJbnRlZ3JhdGlvbigpCit7CisgICAgUVN0cmluZyBkZWZhdWx0UGxhdGZvcm0g
PQorI2lmIGRlZmluZWQoUV9PU19NQUMpCisgICAgICAgIFFMYXRpbjFTdHJpbmcoImNvY29hIik7
CisjZWxpZiBkZWZpbmVkIChRX09TX1dJTikKKyAgICAgICAgUUxhdGluMVN0cmluZygid2luZG93
cyIpOworI2VsaWYgIWRlZmluZWQgKFFUX05PX1hDQikKKyAgICAgICAgUUxhdGluMVN0cmluZygi
eGNiIik7CisjZWxpZiAhZGVmaW5lZCAoUVRfTk9fV0FZTEFORCkKKyAgICAgICAgUUxhdGluMVN0
cmluZygid2F5bGFuZCIpOworI2Vsc2UKKyAgICAgICAgUUxhdGluMVN0cmluZygibWluaW1hbCIp
OworI2VuZGlmCisKKyAgICBRQnl0ZUFycmF5IG9yaWdpbmFsUGxhdGZvcm0gPSBxZ2V0ZW52KCJR
VF9XRUJLSVRfT1JJR0lOQUxfUExBVEZPUk0iKTsKKyAgICBRQnl0ZUFycmF5IG9yaWdpbmFsUGx1
Z2luUGF0aCA9IHFnZXRlbnYoIlFUX1dFQktJVF9PUklHSU5BTF9QTEFURk9STV9QTFVHSU5fUEFU
SCIpOworICAgIFFTdHJpbmcgcGxhdGZvcm0gPSBvcmlnaW5hbFBsYXRmb3JtLmlzRW1wdHkoKSA/
IGRlZmF1bHRQbGF0Zm9ybSA6IFFTdHJpbmc6OmZyb21MYXRpbjEob3JpZ2luYWxQbGF0Zm9ybS5k
YXRhKCkpOworICAgIFFTdHJpbmcgcGx1Z2luUGF0aCA9IG9yaWdpbmFsUGx1Z2luUGF0aC5pc0Vt
cHR5KCkgPyBRU3RyaW5nKCkgOiBRU3RyaW5nOjpmcm9tTGF0aW4xKG9yaWdpbmFsUGx1Z2luUGF0
aC5kYXRhKCkpOworCisgICAgbV9pbnRlZ3JhdGlvbi5yZXNldChRUGxhdGZvcm1JbnRlZ3JhdGlv
bkZhY3Rvcnk6OmNyZWF0ZShwbGF0Zm9ybSwgcGx1Z2luUGF0aCkpOworfQorCisjaWYgIWRlZmlu
ZWQoUV9PU19NQUMpCitRUGxhdGZvcm1Gb250RGF0YWJhc2UqIFRlc3RJbnRlZ3JhdGlvbjo6Zm9u
dERhdGFiYXNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Zm9udERhdGFi
YXNlKCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2lu
L1Rlc3RJbnRlZ3JhdGlvbi5oIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVzdEludGVn
cmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMWYxOWU2MWMzYjcyZmJiZGU3N2NhY2NlNDkyZWYzNzQ2M2Yw
ZWIxYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJ
bnRlZ3JhdGlvbi5oCkBAIC0wLDAgKzEsNDMgQEAKKyNpZm5kZWYgVGVzdEludGVncmF0aW9uX2gK
KyNkZWZpbmUgVGVzdEludGVncmF0aW9uX2gKKworI2luY2x1ZGUgPFFQbGF0Zm9ybUZvbnREYXRh
YmFzZT4KKyNpbmNsdWRlIDxRUGxhdGZvcm1JbnRlZ3JhdGlvbj4KKyNpbmNsdWRlIDxRUGxhdGZv
cm1TY3JlZW4+CisKK2NsYXNzIFRlc3RJbnRlZ3JhdGlvbiA6IHB1YmxpYyBRUGxhdGZvcm1JbnRl
Z3JhdGlvbiB7CitwdWJsaWM6CisgICAgVGVzdEludGVncmF0aW9uKCk7Citwcml2YXRlOgorICAg
IHZpcnR1YWwgUVBsYXRmb3JtRm9udERhdGFiYXNlICpmb250RGF0YWJhc2UoKSBjb25zdDsKKwor
ICAgIC8vIFJlZGlyZWN0aW5nIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICB2aXJ0dWFsIGJvb2wgaGFz
Q2FwYWJpbGl0eShDYXBhYmlsaXR5IGNhcCkgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+aGFzQ2Fw
YWJpbGl0eShjYXApOyB9CisgICAgdmlydHVhbCBRUGxhdGZvcm1QaXhtYXAgKmNyZWF0ZVBsYXRm
b3JtUGl4bWFwKFFQbGF0Zm9ybVBpeG1hcDo6UGl4ZWxUeXBlIHR5cGUpIGNvbnN0IHsgcmV0dXJu
IG1faW50ZWdyYXRpb24tPmNyZWF0ZVBsYXRmb3JtUGl4bWFwKHR5cGUpOyB9CisgICAgdmlydHVh
bCBRUGxhdGZvcm1XaW5kb3cgKmNyZWF0ZVBsYXRmb3JtV2luZG93KFFXaW5kb3cgKndpbmRvdykg
Y29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Y3JlYXRlUGxhdGZvcm1XaW5kb3cod2luZG93
KTsgfQorICAgIHZpcnR1YWwgUVBsYXRmb3JtQmFja2luZ1N0b3JlICpjcmVhdGVQbGF0Zm9ybUJh
Y2tpbmdTdG9yZShRV2luZG93ICp3aW5kb3cpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24t
PmNyZWF0ZVBsYXRmb3JtQmFja2luZ1N0b3JlKHdpbmRvdyk7IH0KKyNpZm5kZWYgUVRfTk9fT1BF
TkdMCisgICAgdmlydHVhbCBRUGxhdGZvcm1PcGVuR0xDb250ZXh0ICpjcmVhdGVQbGF0Zm9ybU9w
ZW5HTENvbnRleHQoUU9wZW5HTENvbnRleHQgKmNvbnRleHQpIGNvbnN0IHsgcmV0dXJuIG1faW50
ZWdyYXRpb24tPmNyZWF0ZVBsYXRmb3JtT3BlbkdMQ29udGV4dChjb250ZXh0KTsgfQorI2VuZGlm
CisgICAgdmlydHVhbCBRUGxhdGZvcm1TaGFyZWRHcmFwaGljc0NhY2hlICpjcmVhdGVQbGF0Zm9y
bVNoYXJlZEdyYXBoaWNzQ2FjaGUoY29uc3QgY2hhciAqY2FjaGVJZCkgY29uc3QgeyByZXR1cm4g
bV9pbnRlZ3JhdGlvbi0+Y3JlYXRlUGxhdGZvcm1TaGFyZWRHcmFwaGljc0NhY2hlKGNhY2hlSWQp
OyB9CisgICAgdmlydHVhbCBRQWJzdHJhY3RFdmVudERpc3BhdGNoZXIgKmd1aVRocmVhZEV2ZW50
RGlzcGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24tPmd1aVRocmVhZEV2ZW50
RGlzcGF0Y2hlcigpOyB9CisjaWZuZGVmIFFUX05PX0NMSVBCT0FSRAorICAgIHZpcnR1YWwgUVBs
YXRmb3JtQ2xpcGJvYXJkICpjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9u
LT5jbGlwYm9hcmQoKTsgfQorI2VuZGlmCisjaWZuZGVmIFFUX05PX0RSQUdBTkREUk9QCisgICAg
dmlydHVhbCBRUGxhdGZvcm1EcmFnICpkcmFnKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlv
bi0+ZHJhZygpOyB9CisjZW5kaWYKKyAgICB2aXJ0dWFsIFFQbGF0Zm9ybUlucHV0Q29udGV4dCAq
aW5wdXRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+aW5wdXRDb250ZXh0
KCk7IH0KKyAgICB2aXJ0dWFsIFFQbGF0Zm9ybUFjY2Vzc2liaWxpdHkgKmFjY2Vzc2liaWxpdHko
KSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5hY2Nlc3NpYmlsaXR5KCk7IH0KKyAgICB2
aXJ0dWFsIFFQbGF0Zm9ybU5hdGl2ZUludGVyZmFjZSAqbmF0aXZlSW50ZXJmYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+bmF0aXZlSW50ZXJmYWNlKCk7IH0KKyAgICB2aXJ0dWFs
IFFQbGF0Zm9ybVNlcnZpY2VzICpzZXJ2aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRp
b24tPnNlcnZpY2VzKCk7IH0KKyAgICB2aXJ0dWFsIFFWYXJpYW50IHN0eWxlSGludChTdHlsZUhp
bnQgaGludCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+c3R5bGVIaW50KGhpbnQpOyB9
CisgICAgdmlydHVhbCBRUGxhdGZvcm1UaGVtZSAqcGxhdGZvcm1UaGVtZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW50ZWdyYXRpb24tPnBsYXRmb3JtVGhlbWUoKTsgfQorCisgICAgUVNjb3BlZFBvaW50
ZXI8UVBsYXRmb3JtSW50ZWdyYXRpb24+IG1faW50ZWdyYXRpb247CisjaWYgZGVmaW5lZChRX09T
X01BQykKKyAgICBtdXRhYmxlIFFTY29wZWRQb2ludGVyPFFQbGF0Zm9ybUZvbnREYXRhYmFzZT4g
bV9mb250RGF0YWJhc2U7CisjZW5kaWYKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMv
UXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RGb250RGF0YWJhc2UuaCBiL1Rvb2xzL1F0VGVz
dFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGY0NTFl
ZWNjMzhhODJmNzMxYzcxNGM3OTY2OWExNzhhZWUyZGYxYwotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLmgKQEAgLTAsMCAr
MSwxMyBAQAorI2lmbmRlZiBUZXN0Rm9udERhdGFiYXNlX2gKKyNkZWZpbmUgVGVzdEZvbnREYXRh
YmFzZV9oCisKKyNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRlIDxRdFBsYXRmb3JtU3VwcG9ydC9w
cml2YXRlL3Fjb3JldGV4dGZvbnRkYXRhYmFzZV9wLmg+CisKK2NsYXNzIFRlc3RGb250RGF0YWJh
c2UgOiBwdWJsaWMgUUNvcmVUZXh0Rm9udERhdGFiYXNlIHsKK3ByaXZhdGU6CisgICAgdmlydHVh
bCB2b2lkIHBvcHVsYXRlRm9udERhdGFiYXNlKCk7CisgICAgdmlydHVhbCBRRm9udCBkZWZhdWx0
Rm9udCgpIGNvbnN0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RQbGF0
Zm9ybVBsdWdpbi9tYWMvVGVzdEZvbnREYXRhYmFzZS5tbSBiL1Rvb2xzL1F0VGVzdFBsYXRmb3Jt
UGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5MjdiOGJkYTM4YTgw
NmE5NzlmOTViODIyNjA2ZTkxMDMwMDUxOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9RdFRl
c3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEZvbnREYXRhYmFzZS5tbQpAQCAtMCwwICsxLDE3MyBA
QAorI2luY2x1ZGUgIlRlc3RGb250RGF0YWJhc2UuaCIKKyNpbmNsdWRlIDxRdENvcmUvUURpcj4K
KyNpbmNsdWRlIDxRdENvcmUvUUZpbGVJbmZvPgorI2luY2x1ZGUgPFF0Q29yZS9wcml2YXRlL3Fj
b3JlX21hY19wLmg+CisjaW5jbHVkZSA8UXRQbGF0Zm9ybVN1cHBvcnQvcHJpdmF0ZS9xZm9udGVu
Z2luZV9jb3JldGV4dF9wLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KKwor
Ly8gRnJvbSBxY29yZXRleHRmb250ZGF0YWJhc2UubW0uCitzdGF0aWMgY29uc3QgY2hhciAqbGFu
Z3VhZ2VGb3JXcml0aW5nU3lzdGVtW10gPSB7CisgICAgMCwgICAgIC8vIEFueQorICAgICJlbiIs
ICAvLyBMYXRpbgorICAgICJlbCIsICAvLyBHcmVlaworICAgICJydSIsICAvLyBDeXJpbGxpYwor
ICAgICJoeSIsICAvLyBBcm1lbmlhbgorICAgICJoZSIsICAvLyBIZWJyZXcKKyAgICAiYXIiLCAg
Ly8gQXJhYmljCisgICAgInN5ciIsIC8vIFN5cmlhYworICAgICJkaXYiLCAvLyBUaGFhbmEKKyAg
ICAiaGkiLCAgLy8gRGV2YW5hZ2FyaQorICAgICJibiIsICAvLyBCZW5nYWxpCisgICAgInBhIiwg
IC8vIEd1cm11a2hpCisgICAgImd1IiwgIC8vIEd1amFyYXRpCisgICAgIm9yIiwgIC8vIE9yaXlh
CisgICAgInRhIiwgIC8vIFRhbWlsCisgICAgInRlIiwgIC8vIFRlbHVndQorICAgICJrbiIsICAv
LyBLYW5uYWRhCisgICAgIm1sIiwgIC8vIE1hbGF5YWxhbQorICAgICJzaSIsICAvLyBTaW5oYWxh
CisgICAgInRoIiwgIC8vIFRoYWkKKyAgICAibG8iLCAgLy8gTGFvCisgICAgImJvIiwgIC8vIFRp
YmV0YW4KKyAgICAibXkiLCAgLy8gTXlhbm1hcgorICAgICJrYSIsICAvLyBHZW9yZ2lhbgorICAg
ICJrbSIsICAvLyBLaG1lcgorICAgICJ6aC1jbiIsIC8vIFNpbXBsaWZpZWRDaGluZXNlCisgICAg
InpoLXR3IiwgLy8gVHJhZGl0aW9uYWxDaGluZXNlCisgICAgImphIiwgIC8vIEphcGFuZXNlCisg
ICAgImtvIiwgIC8vIEtvcmVhbgorICAgICJ2aSIsICAvLyBWaWV0bmFtZXNlCisgICAgMCwgLy8g
U3ltYm9sCisgICAgMCwgLy8gT2doYW0KKyAgICAwLCAvLyBSdW5pYworICAgIDAgLy8gTidLbwor
fTsKK2VudW0geyBMYW5ndWFnZUNvdW50ID0gc2l6ZW9mKGxhbmd1YWdlRm9yV3JpdGluZ1N5c3Rl
bSkgLyBzaXplb2YoY29uc3QgY2hhciopIH07CisKK2NvbnN0IGNoYXIqIGRlZmF1bHRXZWJLaXRU
ZXN0Rm9udEZhbWlseSA9ICJOaW1idXMgU2FucyBMIjsKKworUUZvbnQgVGVzdEZvbnREYXRhYmFz
ZTo6ZGVmYXVsdEZvbnQoKSBjb25zdAoreworICAgIHJldHVybiBRRm9udChRU3RyaW5nOjpmcm9t
TGF0aW4xKGRlZmF1bHRXZWJLaXRUZXN0Rm9udEZhbWlseSkpOworfQorCit2b2lkIFRlc3RGb250
RGF0YWJhc2U6OnBvcHVsYXRlRm9udERhdGFiYXNlKCkKK3sKKyAgICBRQ0ZUeXBlPENURm9udENv
bGxlY3Rpb25SZWY+IHN5c3RlbUNvbGxlY3Rpb24oQ1RGb250Q29sbGVjdGlvbkNyZWF0ZUZyb21B
dmFpbGFibGVGb250cygwKSk7CisgICAgUUNGVHlwZTxDRkFycmF5UmVmPiBzeXN0ZW1Gb250cyA9
IHN5c3RlbUNvbGxlY3Rpb24gPyBDVEZvbnRDb2xsZWN0aW9uQ3JlYXRlTWF0Y2hpbmdGb250RGVz
Y3JpcHRvcnMoc3lzdGVtQ29sbGVjdGlvbikgOiAwOworICAgIGlmICghc3lzdGVtRm9udHMpCisg
ICAgICAgIHFGYXRhbCgiQ2Fubm90IGdldCBzeXN0ZW0gZm9udHNcbiIpOworCisgICAgUUJ5dGVB
cnJheSB0ZXN0Rm9udHNWYXIgPSBnZXRlbnYoIldFQktJVF9URVNURk9OVFMiKTsKKyAgICBRRGly
IGZvbnRzRGlyKFFTdHJpbmc6OmZyb21MYXRpbjEodGVzdEZvbnRzVmFyKSk7CisgICAgaWYgKHRl
c3RGb250c1Zhci5pc0VtcHR5KCkgfHwgIWZvbnRzRGlyLmV4aXN0cygpKSB7CisgICAgICAgIHFG
YXRhbCgiXG5cbiIKKyAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICAg
ICAgICAgICJRQ29yZVRleHRGb250RGF0YWJhc2VXS1Rlc3Q6XG4iCisgICAgICAgICAgICAgICAg
IldFQktJVF9URVNURk9OVFMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBjb3JyZWN0
bHkuXG4iCisgICAgICAgICAgICAgICAgIlRoaXMgdmFyaWFibGUgaGFzIHRvIHBvaW50IHRvIHRo
ZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZm9udHNcbiIKKyAgICAgICAgICAgICAgICAieW91
IGNhbiBjbG9uZSBmcm9tIGdpdDovL2dpdG9yaW91cy5vcmcvcXR3ZWJraXQvdGVzdGZvbnRzLmdp
dFxuIgorICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAgICAgICAp
OworICAgIH0KKworICAgIFFDRlR5cGU8Q0ZNdXRhYmxlU2V0UmVmPiBzeXN0ZW1Gb250U2V0KENG
U2V0Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZVNldENhbGxCYWNrcykpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgQ0ZBcnJheUdldENvdW50KHN5c3RlbUZvbnRzKTsgKytpKSB7CisgICAg
ICAgIENURm9udERlc2NyaXB0b3JSZWYgZm9udCA9IHN0YXRpY19jYXN0PENURm9udERlc2NyaXB0
b3JSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoc3lzdGVtRm9udHMsIGkpKTsKKyAgICAgICAg
Q0ZTZXRBZGRWYWx1ZShzeXN0ZW1Gb250U2V0LCBmb250KTsKKyAgICB9CisKKyAgICBRU3RyaW5n
TGlzdCBmaWx0ZXJzOworICAgIGZpbHRlcnMgPDwgUVN0cmluZ0xpdGVyYWwoIioudHRmIik7Cisg
ICAgUUZpbGVJbmZvTGlzdCBmaWxlcyA9IGZvbnRzRGlyLmVudHJ5SW5mb0xpc3QoZmlsdGVycywg
UURpcjo6RmlsZXMpOworICAgIGZvcmVhY2ggKFFGaWxlSW5mbyBmaWxlLCBmaWxlcykgeworICAg
ICAgICBRQnl0ZUFycmF5IHBhdGggPSBRRmlsZTo6ZW5jb2RlTmFtZShmaWxlLmNhbm9uaWNhbEZp
bGVQYXRoKCkpOworICAgICAgICBRQ0ZUeXBlPENGVVJMUmVmPiBmb250RmlsZShDRlVSTENyZWF0
ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oMCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
SW50OCo+KHBhdGguY29uc3REYXRhKCkpLCBwYXRoLmxlbmd0aCgpLCBmYWxzZSkpOworICAgICAg
ICBDRkVycm9yUmVmIGVycm9yOworICAgICAgICBpZiAoIUNURm9udE1hbmFnZXJSZWdpc3RlckZv
bnRzRm9yVVJMKGZvbnRGaWxlLCBrQ1RGb250TWFuYWdlclNjb3BlUHJvY2VzcywgJmVycm9yKSkg
eworICAgICAgICAgICAgQ0ZSZWxlYXNlKGVycm9yKTsKKyAgICAgICAgICAgIHFGYXRhbCgiRmFp
bGVkIHJlZ2lzdGVyaW5nIGZvbnQgZmlsZTogJXNcbiIsIHBhdGguY29uc3REYXRhKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBkb25lIHZpYSBmb250cy5jb25mIG9uIExp
bnV4LgorICAgIFFGb250OjppbnNlcnRTdWJzdGl0dXRpb24oUVN0cmluZ0xpdGVyYWwoIkhlbHZl
dGljYSIpLCBRU3RyaW5nOjpmcm9tTGF0aW4xKGRlZmF1bHRXZWJLaXRUZXN0Rm9udEZhbWlseSkp
OworCisgICAgUUNGVHlwZTxDVEZvbnRDb2xsZWN0aW9uUmVmPiBjb2xsZWN0aW9uID0gQ1RGb250
Q29sbGVjdGlvbkNyZWF0ZUZyb21BdmFpbGFibGVGb250cygwKTsKKyAgICBRQ0ZUeXBlPENGQXJy
YXlSZWY+IGZvbnRzID0gQ1RGb250Q29sbGVjdGlvbkNyZWF0ZU1hdGNoaW5nRm9udERlc2NyaXB0
b3JzKGNvbGxlY3Rpb24pOworCisgICAgUVN0cmluZyBmb3VuZHJ5TmFtZSA9IFFMYXRpbjFTdHJp
bmcoIkNvcmVUZXh0Iik7CisgICAgY29uc3QgaW50IG51bUZvbnRzID0gQ0ZBcnJheUdldENvdW50
KGZvbnRzKTsKKyAgICBRSGFzaDxRU3RyaW5nLCBRU3RyaW5nPiBwc05hbWVUb0ZhbWlseTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUZvbnRzOyArK2kpIHsKKyAgICAgICAgQ1RGb250RGVz
Y3JpcHRvclJlZiBmb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250RGVzY3JpcHRvclJlZj4oQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleChmb250cywgaSkpOworICAgICAgICBpZiAoQ0ZTZXRHZXRDb3VudE9m
VmFsdWUoc3lzdGVtRm9udFNldCwgZm9udCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgUUNGU3RyaW5nIGZhbWlseU5hbWUgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ1RGb250
RGVzY3JpcHRvckNvcHlMb2NhbGl6ZWRBdHRyaWJ1dGUoZm9udCwga0NURm9udEZhbWlseU5hbWVB
dHRyaWJ1dGUsIE5VTEwpKTsKKyAgICAgICAgUUNGVHlwZTxDRkRpY3Rpb25hcnlSZWY+IHN0eWxl
cyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlBdHRy
aWJ1dGUoZm9udCwga0NURm9udFRyYWl0c0F0dHJpYnV0ZSkpOworICAgICAgICBRRm9udDo6V2Vp
Z2h0IHdlaWdodCA9IFFGb250OjpOb3JtYWw7CisgICAgICAgIFFGb250OjpTdHlsZSBzdHlsZSA9
IFFGb250OjpTdHlsZU5vcm1hbDsKKyAgICAgICAgUUZvbnQ6OlN0cmV0Y2ggc3RyZXRjaCA9IFFG
b250OjpVbnN0cmV0Y2hlZDsKKyAgICAgICAgYm9vbCBmaXhlZFBpdGNoID0gZmFsc2U7CisKKyAg
ICAgICAgaWYgKHN0eWxlcykgeworICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIHdlaWdodFZh
bHVlID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHN0eWxl
cywga0NURm9udFdlaWdodFRyYWl0KSkpIHsKKyAgICAgICAgICAgICAgICBRX0FTU0VSVChDRk51
bWJlcklzRmxvYXRUeXBlKHdlaWdodFZhbHVlKSk7CisgICAgICAgICAgICAgICAgZG91YmxlIGQ7
CisgICAgICAgICAgICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUod2VpZ2h0VmFsdWUsIGtDRk51
bWJlckRvdWJsZVR5cGUsICZkKSkKKyAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ID0gKGQgPiAw
LjApID8gUUZvbnQ6OkJvbGQgOiBRRm9udDo6Tm9ybWFsOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKENGTnVtYmVyUmVmIGl0YWxpYyA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShzdHlsZXMsIGtDVEZvbnRTbGFudFRyYWl0KSkpIHsKKyAgICAg
ICAgICAgICAgICBRX0FTU0VSVChDRk51bWJlcklzRmxvYXRUeXBlKGl0YWxpYykpOworICAgICAg
ICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAgICAgICAgIGlmIChDRk51bWJlckdldFZhbHVl
KGl0YWxpYywga0NGTnVtYmVyRG91YmxlVHlwZSwgJmQpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChkID4gMC4wKQorICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBRRm9udDo6U3R5
bGVJdGFsaWM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKENGTnVtYmVyUmVmIHN5bWJvbGljID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKHN0eWxlcywga0NURm9udFN5bWJvbGljVHJhaXQpKSkgeworICAgICAg
ICAgICAgICAgIGludCBkOworICAgICAgICAgICAgICAgIGlmIChDRk51bWJlckdldFZhbHVlKHN5
bWJvbGljLCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmZCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGQgJiBrQ1RGb250TW9ub1NwYWNlVHJhaXQpCisgICAgICAgICAgICAgICAgICAgICAgICBm
aXhlZFBpdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGQgJiBrQ1RGb250RXhw
YW5kZWRUcmFpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2ggPSBRRm9udDo6RXhw
YW5kZWQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGQgJiBrQ1RGb250Q29uZGVuc2Vk
VHJhaXQpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJldGNoID0gUUZvbnQ6OkNvbmRlbnNl
ZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpbnQgcGl4ZWxTaXplID0gMDsKKyAgICAgICAgaWYgKFFDRlR5cGU8Q0ZOdW1iZXJSZWY+IHNp
emUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1
dGUoZm9udCwga0NURm9udFNpemVBdHRyaWJ1dGUpKSkgeworICAgICAgICAgICAgaWYgKENGTnVt
YmVySXNGbG9hdFR5cGUoc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAg
ICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHNpemUsIGtDRk51bWJlckRvdWJsZVR5cGUsICZk
KTsKKyAgICAgICAgICAgICAgICBwaXhlbFNpemUgPSBkOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHNpemUsIGtDRk51bWJlckludFR5cGUs
ICZwaXhlbFNpemUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgUVN1cHBv
cnRlZFdyaXRpbmdTeXN0ZW1zIHdyaXRpbmdTeXN0ZW1zOworICAgICAgICBpZiAoUUNGVHlwZTxD
RkFycmF5UmVmPiBsYW5ndWFnZXMgPSBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDVEZvbnREZXNj
cmlwdG9yQ29weUF0dHJpYnV0ZShmb250LCBrQ1RGb250TGFuZ3VhZ2VzQXR0cmlidXRlKSkpIHsK
KyAgICAgICAgICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZBcnJheUdldENvdW50KGxhbmd1YWdlcyk7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IExhbmd1YWdlQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgICAgIGlmICghbGFuZ3VhZ2VGb3JXcml0aW5nU3lzdGVtW2ldKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBRQ0ZTdHJpbmcgbGFuZyA9
IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwgbGFuZ3VhZ2VGb3JXcml0aW5nU3lzdGVt
W2ldLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJKTsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZBcnJh
eUNvbnRhaW5zVmFsdWUobGFuZ3VhZ2VzLCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBsYW5nKSkK
KyAgICAgICAgICAgICAgICAgICAgd3JpdGluZ1N5c3RlbXMuc2V0U3VwcG9ydGVkKFFGb250RGF0
YWJhc2U6OldyaXRpbmdTeXN0ZW0oaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgQ0ZSZXRhaW4oZm9udCk7CisgICAgICAgIFFQbGF0Zm9ybUZvbnREYXRhYmFzZTo6cmVn
aXN0ZXJGb250KGZhbWlseU5hbWUsIGZvdW5kcnlOYW1lLCB3ZWlnaHQsIHN0eWxlLCBzdHJldGNo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIGFu
dGlhbGlhc2VkICovLCB0cnVlIC8qIHNjYWxhYmxlICovLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFNpemUsIGZpeGVkUGl0Y2gsIHdyaXRpbmdTeXN0
ZW1zLCAodm9pZCAqKSBmb250KTsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgcHNOYW1lID0gc3RhdGlj
X2Nhc3Q8Q0ZTdHJpbmdSZWY+KENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnQsIGtD
VEZvbnROYW1lQXR0cmlidXRlKSk7CisgICAgICAgIC8vIHdlIG5lZWQgUG9zdFNjcmlwdCBOYW1l
IHRvIGZhbWlseSBuYW1lIG1hcHBpbmcgZm9yIGZhbGxiYWNrIGxpc3QgY29uc3RydWN0aW9uCisg
ICAgICAgIHBzTmFtZVRvRmFtaWx5W1FDRlN0cmluZzo6dG9RU3RyaW5nKChOU1N0cmluZyAqKSBw
c05hbWUpXSA9IGZhbWlseU5hbWU7CisgICAgICAgIENGUmVsZWFzZShwc05hbWUpOworICAgIH0K
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0SW50ZWdy
YXRpb25NYWMubW0gYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEludGVncmF0
aW9uTWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwN2NkOGJjMTgyNTU4NGM0MzY0ZmJiYjRjYmZlNzNjYmMy
MDhhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMv
VGVzdEludGVncmF0aW9uTWFjLm1tCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgIi4uL1Rlc3RJ
bnRlZ3JhdGlvbi5oIgorI2luY2x1ZGUgIlRlc3RGb250RGF0YWJhc2UuaCIKKworUVBsYXRmb3Jt
Rm9udERhdGFiYXNlKiBUZXN0SW50ZWdyYXRpb246OmZvbnREYXRhYmFzZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2ZvbnREYXRhYmFzZSkKKyAgICAgICAgbV9mb250RGF0YWJhc2UucmVzZXQobmV3
IFRlc3RGb250RGF0YWJhc2UpOworICAgIHJldHVybiBtX2ZvbnREYXRhYmFzZS5kYXRhKCk7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWluLmNwcCBiL1Rvb2xz
L1F0VGVzdFBsYXRmb3JtUGx1Z2luL21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjZTMzMWRmOTFlODk4
OGRlMmQ3Y2YzYWY4OTFjMDA0ZDAzNjE3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9RdFRl
c3RQbGF0Zm9ybVBsdWdpbi9tYWluLmNwcApAQCAtMCwwICsxLDM4IEBACisjaW5jbHVkZSAiVGVz
dEludGVncmF0aW9uLmgiCisjaW5jbHVkZSA8UVBsYXRmb3JtSW50ZWdyYXRpb25QbHVnaW4+Cisj
aW5jbHVkZSA8UXRHbG9iYWw+CisKK2NsYXNzIFFfREVDTF9FWFBPUlQgVGVzdEludGVncmF0aW9u
UGx1Z2luIDogcHVibGljIFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luIHsKKyAgICBRX09CSkVD
VAorICAgIFFfUExVR0lOX01FVEFEQVRBKElJRCAib3JnLnF0LXByb2plY3QuUXQuUVBsYXRmb3Jt
SW50ZWdyYXRpb25GYWN0b3J5SW50ZXJmYWNlIiBGSUxFICJ0ZXN0cGxhdGZvcm0uanNvbiIpCitw
dWJsaWM6CisgICAgUVN0cmluZ0xpc3Qga2V5cygpIGNvbnN0OworICAgIFFQbGF0Zm9ybUludGVn
cmF0aW9uKiBjcmVhdGUoY29uc3QgUVN0cmluZyYsIGNvbnN0IFFTdHJpbmdMaXN0Jik7CitwdWJs
aWMgc2xvdHM6CisgICAgdm9pZCBpbml0aWFsaXplKCk7Cit9OworCitRU3RyaW5nTGlzdCBUZXN0
SW50ZWdyYXRpb25QbHVnaW46OmtleXMoKSBjb25zdAoreworICAgIFFTdHJpbmdMaXN0IGxpc3Q7
CisgICAgbGlzdCA8PCBRU3RyaW5nTGl0ZXJhbCgidGVzdHBsYXRmb3JtIik7CisgICAgcmV0dXJu
IGxpc3Q7Cit9CisKK1FQbGF0Zm9ybUludGVncmF0aW9uKiBUZXN0SW50ZWdyYXRpb25QbHVnaW46
OmNyZWF0ZShjb25zdCBRU3RyaW5nJiBzeXN0ZW0sIGNvbnN0IFFTdHJpbmdMaXN0JiBwYXJhbWV0
ZXJzKQoreworICAgIGlmIChzeXN0ZW0udG9Mb3dlcigpID09IFFTdHJpbmdMaXRlcmFsKCJ0ZXN0
cGxhdGZvcm0iKSkKKyAgICAgICAgcmV0dXJuIG5ldyBUZXN0SW50ZWdyYXRpb24oKTsKKworICAg
IHJldHVybiAwOworfQorCisjaW5jbHVkZSAibWFpbi5tb2MiCisKK3ZvaWQgVGVzdEludGVncmF0
aW9uUGx1Z2luOjppbml0aWFsaXplKCkKK3sKKyAgICBRU3RhdGljUGx1Z2luIHBsdWdpbjsKKyAg
ICBwbHVnaW4uaW5zdGFuY2UgPSAmcXRfcGx1Z2luX2luc3RhbmNlOworICAgIHBsdWdpbi5tZXRh
RGF0YSA9ICZxdF9wbHVnaW5fcXVlcnlfbWV0YWRhdGE7CisgICAgcVJlZ2lzdGVyU3RhdGljUGx1
Z2luRnVuY3Rpb24ocGx1Z2luKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3Jt
UGx1Z2luL3Rlc3RwbGF0Zm9ybS5qc29uIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vdGVz
dHBsYXRmb3JtLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODMwYmI2MmIwYTVlOGI0MTljN2JiMzhhMGEzM2Ew
ZjM1ZmQwNzQ5YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2lu
L3Rlc3RwbGF0Zm9ybS5qc29uCkBAIC0wLDAgKzEsMyBAQAoreworICAgICJLZXlzIjogWyAidGVz
dHBsYXRmb3JtIiBdCit9CmRpZmYgLS1naXQgYS9Ub29scy9Ub29scy5wcm8gYi9Ub29scy9Ub29s
cy5wcm8KaW5kZXggZmIyYjE5YTM3ZDk1NmQ5NmZiNjVhMWEwMjc2MGIyMDRiZTI3OTA3Zi4uZjdl
ZGIyODcxYzFlMjhlOWI5MjA5MTg0OTYzNjhmODQ2ZWFhMDc0MyAxMDA2NDQKLS0tIGEvVG9vbHMv
VG9vbHMucHJvCisrKyBiL1Rvb2xzL1Rvb2xzLnBybwpAQCAtMTUsNyArMTUsOCBAQCBTVUJESVJT
ICs9IER1bXBSZW5kZXJUcmVlL3F0L0ltYWdlRGlmZi5wcm8KIAogIW5vX3dlYmtpdDIgewogICAg
IFNVQkRJUlMgKz0gTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvIFwKLSAgICAgICAgICAg
ICAgIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci5wcm8KKyAgICAgICAgICAgICAg
IFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci5wcm8gXAorICAgICAgICAgICAgICAg
UXRUZXN0UGxhdGZvcm1QbHVnaW4vUXRUZXN0UGxhdGZvcm1QbHVnaW4ucHJvIFwKIH0KIAogIXdp
bjMyOmNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTEpIHsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaSBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGFyZ2V0LnByaQppbmRleCA2ZjFkYTk1M2QwMDQ5ZWRmOTU3MDIwMTgxMDNh
M2EyYWY1OWQzNDVlLi5jOTdjZGYxY2EzYWQwYTBjZjMxMGEyZTczNWNiMTM4MDdhZjcyOWQzIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmkKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpCkBAIC0zNyw0ICszNyw5IEBAIFBSRUZJWF9IRUFE
RVIgPSBXZWJLaXRUZXN0UnVubmVyUHJlZml4LmgKICotZysrKjpRTUFLRV9DWFhGTEFHUyArPSAi
LWluY2x1ZGUgJCRQUkVGSVhfSEVBREVSIgogKi1jbGFuZyo6UU1BS0VfQ1hYRkxBR1MgKz0gIi1p
bmNsdWRlICQkUFJFRklYX0hFQURFUiIKIAorbWFjOiBMSUJfU1VGRklYPS5keWxpYgord2luOiBM
SUJfU1VGRklYPS5kbGwKK3VuaXg6IW1hYzogTElCX1NVRkZJWD0uc28KK0RFRklORVMgKz0gVEVT
VF9QTEFURk9STV9QTFVHSU5fUEFUSD1cIlxcXCIkJHtST09UX0JVSUxEX0RJUn0kJHtRTUFLRV9E
SVJfU0VQfWxpYiQke1FNQUtFX0RJUl9TRVB9bGlidGVzdHBsYXRmb3JtJCR7TElCX1NVRkZJWH1c
XFwiXCIKKwogUkVTT1VSQ0VTID0gcXQvV2ViS2l0VGVzdFJ1bm5lci5xcmMKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvbWFpbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL3F0L21haW4uY3BwCmluZGV4IGY5NTcyYTg3ZTM0NTU0NzNlODVlMmVhNDY3MjQ5NTBjYjdm
MWQ4YmEuLmEzZGEwMWE0NjliMWE1MWUzOWJiOWNjN2VkNTBiOGE0NTRiNjQ0NjkgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9xdC9tYWluLmNwcApAQCAtOTQsNiArOTQsMjIgQEAgaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogCiAgICAgcXB1dGVudigiUVRfV0VCS0lUX1RIRU1FX05BTUUiLCAi
cXN0eWxlIik7CiAKKyAgICBRQnl0ZUFycmF5IHBsYXRmb3JtID0gcWdldGVudigiUVRfUVBBX1BM
QVRGT1JNIik7CisgICAgUUJ5dGVBcnJheSBwbGF0Zm9ybVBsdWdpblBhdGggPSBxZ2V0ZW52KCJR
VF9RUEFfUExBVEZPUk1fUExVR0lOX1BBVEgiKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFy
Z2M7ICsraSkgeworICAgICAgICBpZiAoUUJ5dGVBcnJheShhcmd2W2ldKSA9PSAiLXBsYXRmb3Jt
IiAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IGFyZ3ZbaSArIDFdOwor
ICAgICAgICBlbHNlIGlmIChRQnl0ZUFycmF5KGFyZ3ZbaV0pID09ICItcGxhdGZvcm1wbHVnaW5w
YXRoIiAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICBwbGF0Zm9ybVBsdWdpblBhdGggPSBh
cmd2W2kgKyAxXTsKKyAgICB9CisgICAgaWYgKCFwbGF0Zm9ybS5pc0VtcHR5KCkpCisgICAgICAg
IHFwdXRlbnYoIlFUX1dFQktJVF9PUklHSU5BTF9QTEFURk9STSIsIHBsYXRmb3JtKTsKKyAgICBp
ZiAoIXBsYXRmb3JtUGx1Z2luUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHFwdXRlbnYoIlFUX1dF
QktJVF9PUklHSU5BTF9QTEFURk9STV9QTFVHSU5fUEFUSCIsIHBsYXRmb3JtUGx1Z2luUGF0aCk7
CisKKyAgICAvLyBUZWxsIHRoZSB3ZWIgcHJvY2VzcyB0aGF0IHdlIHdhbnQgdG8gdXNlIHRoZSB0
ZXN0IHBsYXRmb3JtIHBsdWdpbi4KKyAgICBxcHV0ZW52KCJRVF9XRUJLSVQyX1RFU1RfUExBVEZP
Uk1fUExVR0lOX1BBVEgiLCBURVNUX1BMQVRGT1JNX1BMVUdJTl9QQVRIKTsKKwogICAgIFFRdWlj
a1dlYlZpZXdFeHBlcmltZW50YWw6OnNldEZsaWNrYWJsZVZpZXdwb3J0RW5hYmxlZChmYWxzZSk7
CiAgICAgUUFwcGxpY2F0aW9uIGFwcChhcmdjLCBhcmd2KTsKICAgICBMYXVuY2hlciBsYXVuY2hl
cihhcmdjLCBhcmd2KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131700</attachid>
            <date>2012-03-13 13:19:10 -0700</date>
            <delta_ts>2012-04-16 06:32:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80996-20120313211907.patch</filename>
            <type>text/plain</type>
            <size>26459</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwNDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGUyOWRmOTU0OTM2OTMx
MmEwNWQyNDRkNjU1OWQ0Y2Y2MGE0MTFjMC4uNDZjYjIwMjUwOTAxNGNjYWViZGFjNTE0ZDBlODQz
YWRhZjg5NGNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTAzLTEzICBCYWxh
enMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIEFkZCB0ZXN0
IHNwZWNpZmljIHBsYXRmb3JtIHBsdWdpbiB0byBhY2hpZXZlIHVuaWZpZWQgbGF5b3V0IHRlc3Qg
cmVzdWx0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA5OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bml0aWFsaXplIHRoZSB0ZXN0IHBsYXRmb3JtIHBsdWdpbiBiZWZvcmUgaW5pdGlhbGl6aW5nCisg
ICAgICAgIHRoZSB3ZWIgcHJvY2VzcyBpZiB3ZSBhcmUgaW4gYSBXVFIgcnVuLgorICAgICAgICBJ
dCBpcyBuZWNlc3NhcnkgdG8gcGxhY2UgdGhpcyBpbml0aWFsaXphdGlvbiBoZXJlIGFzIHdlCisg
ICAgICAgIGNhbm5vdCBjb250cm9sIHdpY2ggcGxhdGZvcm0gcGx1Z2luIHdpbGwgYmUgdXNlZCBh
ZnRlcgorICAgICAgICB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgUUd1aUFwcGxpY2F0aW9uLgor
CisgICAgICAgICogcXQvTWFpblF0LmNwcDoKKyAgICAgICAgKGluaXRpYWxpemVUZXN0UGxhdGZv
cm1QbHVnaW5Gb3JXVFJJZlJlcXVpcmVkKToKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTAzLTEx
ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUg
aG93IHRoZSBXZWIgSW5zcGVjdG9yIHJlc291cmNlcyBhcmUgbG9hZGVkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvcXQvTWFpblF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL3F0L01haW5RdC5j
cHAKaW5kZXggY2FjYjdjOTlkMDM3ZTU0NTIwMGI0MmZhYTI4YzhhYTM3NTliZjhiYS4uMzc4NDVi
YmRkM2IwOWI5YWI1ZGRkZWU4YjcyY2E0NDU0NGY3Zjg5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvcXQvTWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9xdC9NYWluUXQuY3BwCkBA
IC0yNCw2ICsyNCwxMCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKKyNpbmNsdWRlIDxRQnl0ZUFycmF5PgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9u
PgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luPgorI2luY2x1ZGUgPFFQbHVn
aW5Mb2FkZXI+CiAjaW5jbHVkZSA8UXRHbG9iYWw+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
MzEsMTEgKzM1LDI5IEBAIFFfREVDTF9JTVBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KTsKIFFfREVDTF9JTVBPUlQgdm9pZCBpbml0aWFsaXplV2ViS2l0MlRo
ZW1lKCk7CiB9CiAKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0UGxhdGZvcm1QbHVnaW5Gb3JX
VFJJZlJlcXVpcmVkKCkKK3sKKyAgICBRQnl0ZUFycmF5IHBsdWdpblBhdGggPSBxZ2V0ZW52KCJR
VF9XRUJLSVQyX1RFU1RfUExBVEZPUk1fUExVR0lOX1BBVEgiKTsKKyAgICBpZiAocGx1Z2luUGF0
aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFQbHVnaW5Mb2FkZXIgbG9hZGVy
KFFTdHJpbmc6OmZyb21MYXRpbjEocGx1Z2luUGF0aC5kYXRhKCkpKTsKKyAgICBRUGxhdGZvcm1J
bnRlZ3JhdGlvblBsdWdpbiogcGx1Z2luID0gcW9iamVjdF9jYXN0PFFQbGF0Zm9ybUludGVncmF0
aW9uUGx1Z2luKj4obG9hZGVyLmluc3RhbmNlKCkpOworICAgIGlmICghcGx1Z2luKQorICAgICAg
ICBxRmF0YWwoImNhbm5vdCBpbml0aWFsaXplIHRlc3QgcGxhdGZvcm0gcGx1Z2luXG4iKTsKKwor
ICAgIHFwdXRlbnYoIlFUX1FQQV9QTEFURk9STV9QTFVHSU5fUEFUSCIsIHBsdWdpblBhdGgpOwor
ICAgIHFwdXRlbnYoIlFUX1FQQV9QTEFURk9STSIsICJ0ZXN0cGxhdGZvcm0iKTsKKworICAgIFFN
ZXRhT2JqZWN0OjppbnZva2VNZXRob2QocGx1Z2luLCAiaW5pdGlhbGl6ZSIpOworfQorCiAvLyBU
aGUgZnJhbWV3b3JrIGVudHJ5IHBvaW50LgogLy8gV2UgY2FsbCBvdXIgcGxhdGZvcm0gc3BlY2lm
aWMgZW50cnkgcG9pbnQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gV2ViS2l0TWFpbiBiZWNhdXNlIGl0
IG1ha2VzIGxpdHRsZSBzZW5zZQogLy8gdG8gcmVpbXBsZW1lbnQgdGhlIGhhbmRsaW5nIG9mIGNv
bW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBRQXBwbGljYXRpb24uCiBpbnQgbWFpbihpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCiB7CisgICAgaW5pdGlhbGl6ZVRlc3RQbGF0Zm9ybVBsdWdpbkZvcldU
UklmUmVxdWlyZWQoKTsKICAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXQyVGhlbWUoKTsKICAg
ICByZXR1cm4gV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KGFyZ2MsIGFyZ3YpOwogfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNmMmVkZmYwYTUz
YmM3ZWVmMDkwOWM1OWU2MmVkNDlmOTVkN2RhM2EuLjdjOWIxOWJkZWQ3ODJlOWE3NjE5NjkxYzBj
YTU2NmVjOGIwZTcwMWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMi0wMy0xMyAgQmFsYXpzIEtlbGVtZW4gIDxr
YmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1F0XSBBZGQgdGVzdCBzcGVjaWZpYyBwbGF0
Zm9ybSBwbHVnaW4gdG8gYWNoaWV2ZSB1bmlmaWVkIGxheW91dCB0ZXN0IHJlc3VsdHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwOTk2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgUXRUZXN0UGxh
dGZvcm1QbHVnaW4gYXMgYSBuZXcgcHJvamVjdCB1bmRlciBUb29scy4KKyAgICAgICAgVGhpcyBp
cyBhIFF0NS1pc2ggcGxhdGZvcm0gcGx1Z2luIHRoYXQgY2FuIGJlIHVzZWQgdG8gdHdlYWsgdGhl
CisgICAgICAgIHBsYXRmb3JtIHN1cHBvcnQgaW50ZXJmYWNlcyBpbiBvcmRlciB0byB1bmlmeSBs
YXlvdXQgdGVzdCByZXN1bHRzLgorICAgICAgICBGb3Igbm93IGl0IG9ubHkgb3ZlcnJpZGVzIHRo
ZSBmb250IGRhdGFiYXNlIG9uIE1hYyBhbmQgcmVkaXJlY3RzCisgICAgICAgIGV2ZXJ5dGhpbmcg
ZWxzZSB0byB0aGUgcmVhbCBwbGF0Zm9ybSBwbHVnaW4uIFRoZSBmb250IGRhdGFiYXNlIGl0Cisg
ICAgICAgIHByb3ZpZGVzIG1pbWljcyB0aGUgd2F5IGhvdyB3ZSBzZXQgdXAgdGVzdCBmb250cyB3
aXRoIGZvbnRjb25maWcgb24gTGludXguCisgICAgICAgIE1ha2UgRHVtcFJlbmRlclRyZWUgYW5k
IFdlYktpdFRlc3RSdW5uZXIgdXNlIHRoaXMgcGxhdGZvcm0gcGx1Z2luLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3F0L21haW4uY3BwOgorICAgICAgICAoaW5pdGlhbGl6ZVRlc3RQbGF0Zm9ybVBsdWdp
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBRdFRlc3RQbGF0Zm9ybVBsdWdpbi9RdFRl
c3RQbGF0Zm9ybVBsdWdpbi5wcm86IEFkZGVkLgorICAgICAgICAqIFF0VGVzdFBsYXRmb3JtUGx1
Z2luL1Rlc3RJbnRlZ3JhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdEludGVncmF0aW9u
OjpUZXN0SW50ZWdyYXRpb24pOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpmb250RGF0YWJh
c2UpOgorICAgICAgICAqIFF0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbik6CisgICAgICAgIChUZXN0SW50ZWdyYXRp
b246Omhhc0NhcGFiaWxpdHkpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQbGF0
Zm9ybVBpeG1hcCk6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246OmNyZWF0ZVBsYXRmb3JtV2lu
ZG93KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6Y3JlYXRlUGxhdGZvcm1CYWNraW5nU3Rv
cmUpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQbGF0Zm9ybU9wZW5HTENvbnRl
eHQpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQbGF0Zm9ybVNoYXJlZEdyYXBo
aWNzQ2FjaGUpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpndWlUaHJlYWRFdmVudERpc3Bh
dGNoZXIpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjbGlwYm9hcmQpOgorICAgICAgICAo
VGVzdEludGVncmF0aW9uOjpkcmFnKToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6aW5wdXRD
b250ZXh0KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6YWNjZXNzaWJpbGl0eSk6CisgICAg
ICAgIChUZXN0SW50ZWdyYXRpb246Om5hdGl2ZUludGVyZmFjZSk6CisgICAgICAgIChUZXN0SW50
ZWdyYXRpb246OnNlcnZpY2VzKToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6c3R5bGVIaW50
KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6cGxhdGZvcm1UaGVtZSk6CisgICAgICAgICog
UXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RGb250RGF0YWJhc2UuaDogQWRkZWQuCisgICAg
ICAgIChUZXN0Rm9udERhdGFiYXNlKToKKyAgICAgICAgKiBRdFRlc3RQbGF0Zm9ybVBsdWdpbi9t
YWMvVGVzdEZvbnREYXRhYmFzZS5tbTogQWRkZWQuCisgICAgICAgIChUZXN0Rm9udERhdGFiYXNl
Ojpwb3B1bGF0ZUZvbnREYXRhYmFzZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1QbHVnaW4v
bWFjL1Rlc3RJbnRlZ3JhdGlvbk1hYy5tbTogQWRkZWQuCisgICAgICAgIChUZXN0SW50ZWdyYXRp
b246OmZvbnREYXRhYmFzZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFpbi5j
cHA6IEFkZGVkLgorICAgICAgICAoVGVzdEludGVncmF0aW9uUGx1Z2luOjprZXlzKToKKyAgICAg
ICAgKFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6Y3JlYXRlKToKKyAgICAgICAgKFRlc3RJbnRlZ3Jh
dGlvblBsdWdpbjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1QbHVnaW4v
dGVzdHBsYXRmb3JtLmpzb246IEFkZGVkLgorICAgICAgICAqIFRvb2xzLnBybzoKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9xdC9tYWluLmNwcDoKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTAzLTEyICBNaW5nIFhpZSAg
PG14aWVAcmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gYnVpbGQtd2Via2l0IGRvZXNu
J3QgcmVjb2duaXplICItLWNtYWtlYXJnIiBmb3IgdGhlIEJsYWNrQmVycnkgcG9ydApkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCmluZGV4IDU2NjA0ZDUxODU2YzNk
YjlkYjAwNTJhZGE5ZjJiNjg1YjVkZGEwNjAuLmViYTJmMjk2MTM3MDE3YmJmYmVmZDZmY2NkZTAx
ODA0MjVhZmE1OWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5k
ZXJUcmVlLnBybworKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5w
cm8KQEAgLTU1LDQgKzU1LDkgQEAgd2luY2UqOiB7CiBERUZJTkVTIC09IFVTRV9TWVNURU1fTUFM
TE9DPTAKIERFRklORVMgKz0gVVNFX1NZU1RFTV9NQUxMT0M9MQogCittYWM6IExJQl9TVUZGSVg9
LmR5bGliCit3aW46IExJQl9TVUZGSVg9LmRsbAordW5peDohbWFjOiBMSUJfU1VGRklYPS5zbwor
REVGSU5FUyArPSBURVNUX1BMQVRGT1JNX1BMVUdJTl9QQVRIPVwiXFxcIiQke1JPT1RfQlVJTERf
RElSfSQke1FNQUtFX0RJUl9TRVB9bGliJCR7UU1BS0VfRElSX1NFUH1saWJ0ZXN0cGxhdGZvcm0k
JHtMSUJfU1VGRklYfVxcXCJcIgorCiBSRVNPVVJDRVMgPSBEdW1wUmVuZGVyVHJlZS5xcmMKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvbWFpbi5jcHAKaW5kZXggMTc2MzM2NzcwNmYxYWIyN2U4YTE2M2NjNWU1NDVm
ZmI3YTg1ZjAwZS4uZWI0MDdmYzBkZDIxZWMxZDkwYTIyZDY0MmFhYmE5ZGQ3N2JkMmFlOSAxMDA2
NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKQEAgLTMxLDYgKzMxLDEyIEBACiAKICNpbmNsdWRlICJR
dEluaXRpYWxpemVUZXN0Rm9udHMuaCIKIAorI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9D
SEVDSyg1LCAwLCAwKQorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uPgorI2luY2x1ZGUg
PFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luPgorI2luY2x1ZGUgPFFQbHVnaW5Mb2FkZXI+Cisj
ZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KIAogI2luY2x1ZGUgPHFzdHJp
bmdsaXN0Lmg+CkBAIC0xMjMsNiArMTI5LDM0IEBAIHN0YXRpYyB2b2lkIFdURkNyYXNoSG9vaygp
CiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRlc3RQbGF0Zm9ybVBsdWdpbihp
bnQgYXJnYywgY2hhciogYXJndltdKQoreworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9D
SEVDSyg1LCAwLCAwKQorICAgIFFQbHVnaW5Mb2FkZXIgbG9hZGVyKFRFU1RfUExBVEZPUk1fUExV
R0lOX1BBVEgpOworICAgIFFQbGF0Zm9ybUludGVncmF0aW9uUGx1Z2luKiBwbHVnaW4gPSBxb2Jq
ZWN0X2Nhc3Q8UVBsYXRmb3JtSW50ZWdyYXRpb25QbHVnaW4qPihsb2FkZXIuaW5zdGFuY2UoKSk7
CisgICAgaWYgKCFwbHVnaW4pCisgICAgICAgIHFGYXRhbCgiY2Fubm90IGluaXRpYWxpemUgdGVz
dCBwbGF0Zm9ybSBwbHVnaW5cbiIpOworCisgICAgUUJ5dGVBcnJheSBwbGF0Zm9ybSA9IHFnZXRl
bnYoIlFUX1FQQV9QTEFURk9STSIpOworICAgIFFCeXRlQXJyYXkgcGxhdGZvcm1QbHVnaW5QYXRo
ID0gcWdldGVudigiUVRfUVBBX1BMQVRGT1JNX1BMVUdJTl9QQVRIIik7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhcmdjOyArK2kpIHsKKyAgICAgICAgaWYgKFFCeXRlQXJyYXkoYXJndltpXSkg
PT0gIi1wbGF0Zm9ybSIgJiYgaSArIDEgPCBhcmdjKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBh
cmd2W2kgKyAxXTsKKyAgICAgICAgZWxzZSBpZiAoUUJ5dGVBcnJheShhcmd2W2ldKSA9PSAiLXBs
YXRmb3JtcGx1Z2lucGF0aCIgJiYgaSArIDEgPCBhcmdjKQorICAgICAgICAgICAgcGxhdGZvcm1Q
bHVnaW5QYXRoID0gYXJndltpICsgMV07CisgICAgfQorICAgIGlmICghcGxhdGZvcm0uaXNFbXB0
eSgpKQorICAgICAgICBxcHV0ZW52KCJRVF9XRUJLSVRfT1JJR0lOQUxfUExBVEZPUk0iLCBwbGF0
Zm9ybSk7CisgICAgaWYgKCFwbGF0Zm9ybVBsdWdpblBhdGguaXNFbXB0eSgpKQorICAgICAgICBx
cHV0ZW52KCJRVF9XRUJLSVRfT1JJR0lOQUxfUExBVEZPUk1fUExVR0lOX1BBVEgiLCBwbGF0Zm9y
bVBsdWdpblBhdGgpOworCisgICAgcXB1dGVudigiUVRfUVBBX1BMQVRGT1JNX1BMVUdJTl9QQVRI
IiwgVEVTVF9QTEFURk9STV9QTFVHSU5fUEFUSCk7CisgICAgcXB1dGVudigiUVRfUVBBX1BMQVRG
T1JNIiwgInRlc3RwbGF0Zm9ybSIpOworCisgICAgUU1ldGFPYmplY3Q6Omludm9rZU1ldGhvZChw
bHVnaW4sICJpbml0aWFsaXplIik7CisjZW5kaWYKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqIGFyZ3ZbXSkKIHsKICNpZmRlZiBRX09TX1dJTgpAQCAtMTQ2LDYgKzE4MCw4IEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAKICAgICBXZWJLaXQ6OmluaXRpYWxpemVUZXN0
Rm9udHMoKTsKIAorICAgIGluaXRpYWxpemVUZXN0UGxhdGZvcm1QbHVnaW4oYXJnYywgYXJndik7
CisKICAgICBRQXBwbGljYXRpb246OnNldEdyYXBoaWNzU3lzdGVtKCJyYXN0ZXIiKTsKICAgICBR
QXBwbGljYXRpb246OnNldFN0eWxlKG5ldyBRV2luZG93c1N0eWxlKTsKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vUXRUZXN0UGxhdGZvcm1QbHVnaW4ucHJvIGIvVG9v
bHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vUXRUZXN0UGxhdGZvcm1QbHVnaW4ucHJvCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM5NTI4YTY3YWUxZmZjMjIyYTJmMjQwYzU4MjA5M2NmZjI0ZDMyMTkKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9RdFRlc3RQbGF0Zm9ybVBsdWdpbi5w
cm8KQEAgLTAsMCArMSwyMCBAQAorVEFSR0VUID0gdGVzdHBsYXRmb3JtCitERVNURElSID0gJCRS
T09UX0JVSUxEX0RJUi9saWIKKworbG9hZChxdF9wbHVnaW4pCitRVCA9IGNvcmUgZ3VpIGNvcmUt
cHJpdmF0ZSBndWktcHJpdmF0ZSBwbGF0Zm9ybXN1cHBvcnQtcHJpdmF0ZQorCitIRUFERVJTID0g
XAorICAgIFRlc3RJbnRlZ3JhdGlvbi5oIFwKKworU09VUkNFUyA9IFwKKyAgICBtYWluLmNwcCBc
CisgICAgVGVzdEludGVncmF0aW9uLmNwcCBcCisKK21hYyB7CisgICAgTElCUyArPSAtZnJhbWV3
b3JrIEZvdW5kYXRpb24KKyAgICBPQkpFQ1RJVkVfSEVBREVSUyArPSBtYWMvVGVzdEZvbnREYXRh
YmFzZS5oCisgICAgT0JKRUNUSVZFX1NPVVJDRVMgKz0gXAorICAgICAgICBtYWMvVGVzdEZvbnRE
YXRhYmFzZS5tbSBcCisgICAgICAgIG1hYy9UZXN0SW50ZWdyYXRpb25NYWMubW0gXAorfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVzdEludGVncmF0aW9uLmNwcCBi
L1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzE4YmVjNjBjNWRmYmNlZjVjNTFjZjdiYjkxMjY5YjgwMzdkNWJiYwotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5jcHAKQEAg
LTAsMCArMSwzNiBAQAorI2luY2x1ZGUgIlRlc3RJbnRlZ3JhdGlvbi5oIgorI2luY2x1ZGUgPFFD
b3JlQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UVN0cmluZ0xpc3Q+CisjaW5jbHVkZSA8UXRHbG9i
YWw+CisjaW5jbHVkZSA8UXRHdWkvcHJpdmF0ZS9xcGxhdGZvcm1pbnRlZ3JhdGlvbmZhY3Rvcnlf
cXBhX3AuaD4KKyNpbmNsdWRlIDxxc3lzdGVtZGV0ZWN0aW9uLmg+CisKK1Rlc3RJbnRlZ3JhdGlv
bjo6VGVzdEludGVncmF0aW9uKCkKK3sKKyAgICBRU3RyaW5nIGRlZmF1bHRQbGF0Zm9ybSA9Cisj
aWYgZGVmaW5lZChRX09TX01BQykKKyAgICAgICAgUUxhdGluMVN0cmluZygiY29jb2EiKTsKKyNl
bGlmIGRlZmluZWQgKFFfT1NfV0lOKQorICAgICAgICBRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIik7
CisjZWxpZiAhZGVmaW5lZCAoUVRfTk9fWENCKQorICAgICAgICBRTGF0aW4xU3RyaW5nKCJ4Y2Ii
KTsKKyNlbGlmICFkZWZpbmVkIChRVF9OT19XQVlMQU5EKQorICAgICAgICBRTGF0aW4xU3RyaW5n
KCJ3YXlsYW5kIik7CisjZWxzZQorICAgICAgICBRTGF0aW4xU3RyaW5nKCJtaW5pbWFsIik7Cisj
ZW5kaWYKKworICAgIFFCeXRlQXJyYXkgb3JpZ2luYWxQbGF0Zm9ybSA9IHFnZXRlbnYoIlFUX1dF
QktJVF9PUklHSU5BTF9QTEFURk9STSIpOworICAgIFFCeXRlQXJyYXkgb3JpZ2luYWxQbHVnaW5Q
YXRoID0gcWdldGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRGT1JNX1BMVUdJTl9QQVRIIik7
CisgICAgUVN0cmluZyBwbGF0Zm9ybSA9IG9yaWdpbmFsUGxhdGZvcm0uaXNFbXB0eSgpID8gZGVm
YXVsdFBsYXRmb3JtIDogUVN0cmluZzo6ZnJvbUxhdGluMShvcmlnaW5hbFBsYXRmb3JtLmRhdGEo
KSk7CisgICAgUVN0cmluZyBwbHVnaW5QYXRoID0gb3JpZ2luYWxQbHVnaW5QYXRoLmlzRW1wdHko
KSA/IFFTdHJpbmcoKSA6IFFTdHJpbmc6OmZyb21MYXRpbjEob3JpZ2luYWxQbHVnaW5QYXRoLmRh
dGEoKSk7CisKKyAgICBtX2ludGVncmF0aW9uLnJlc2V0KFFQbGF0Zm9ybUludGVncmF0aW9uRmFj
dG9yeTo6Y3JlYXRlKHBsYXRmb3JtLCBwbHVnaW5QYXRoKSk7Cit9CisKKyNpZiAhZGVmaW5lZChR
X09TX01BQykKK1FQbGF0Zm9ybUZvbnREYXRhYmFzZSogVGVzdEludGVncmF0aW9uOjpmb250RGF0
YWJhc2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2ludGVncmF0aW9uLT5mb250RGF0YWJhc2Uo
KTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVz
dEludGVncmF0aW9uLmggYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9UZXN0SW50ZWdyYXRp
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xZjE5ZTYxYzNiNzJmYmJkZTc3Y2FjY2U0OTJlZjM3NDYzZjBlYjFi
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVzdEludGVn
cmF0aW9uLmgKQEAgLTAsMCArMSw0MyBAQAorI2lmbmRlZiBUZXN0SW50ZWdyYXRpb25faAorI2Rl
ZmluZSBUZXN0SW50ZWdyYXRpb25faAorCisjaW5jbHVkZSA8UVBsYXRmb3JtRm9udERhdGFiYXNl
PgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uPgorI2luY2x1ZGUgPFFQbGF0Zm9ybVNj
cmVlbj4KKworY2xhc3MgVGVzdEludGVncmF0aW9uIDogcHVibGljIFFQbGF0Zm9ybUludGVncmF0
aW9uIHsKK3B1YmxpYzoKKyAgICBUZXN0SW50ZWdyYXRpb24oKTsKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBRUGxhdGZvcm1Gb250RGF0YWJhc2UgKmZvbnREYXRhYmFzZSgpIGNvbnN0OworCisgICAg
Ly8gUmVkaXJlY3RpbmcgZXZlcnl0aGluZyBlbHNlLgorICAgIHZpcnR1YWwgYm9vbCBoYXNDYXBh
YmlsaXR5KENhcGFiaWxpdHkgY2FwKSB7IHJldHVybiBtX2ludGVncmF0aW9uLT5oYXNDYXBhYmls
aXR5KGNhcCk7IH0KKyAgICB2aXJ0dWFsIFFQbGF0Zm9ybVBpeG1hcCAqY3JlYXRlUGxhdGZvcm1Q
aXhtYXAoUVBsYXRmb3JtUGl4bWFwOjpQaXhlbFR5cGUgdHlwZSkgY29uc3QgeyByZXR1cm4gbV9p
bnRlZ3JhdGlvbi0+Y3JlYXRlUGxhdGZvcm1QaXhtYXAodHlwZSk7IH0KKyAgICB2aXJ0dWFsIFFQ
bGF0Zm9ybVdpbmRvdyAqY3JlYXRlUGxhdGZvcm1XaW5kb3coUVdpbmRvdyAqd2luZG93KSBjb25z
dCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5jcmVhdGVQbGF0Zm9ybVdpbmRvdyh3aW5kb3cpOyB9
CisgICAgdmlydHVhbCBRUGxhdGZvcm1CYWNraW5nU3RvcmUgKmNyZWF0ZVBsYXRmb3JtQmFja2lu
Z1N0b3JlKFFXaW5kb3cgKndpbmRvdykgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Y3Jl
YXRlUGxhdGZvcm1CYWNraW5nU3RvcmUod2luZG93KTsgfQorI2lmbmRlZiBRVF9OT19PUEVOR0wK
KyAgICB2aXJ0dWFsIFFQbGF0Zm9ybU9wZW5HTENvbnRleHQgKmNyZWF0ZVBsYXRmb3JtT3BlbkdM
Q29udGV4dChRT3BlbkdMQ29udGV4dCAqY29udGV4dCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3Jh
dGlvbi0+Y3JlYXRlUGxhdGZvcm1PcGVuR0xDb250ZXh0KGNvbnRleHQpOyB9CisjZW5kaWYKKyAg
ICB2aXJ0dWFsIFFQbGF0Zm9ybVNoYXJlZEdyYXBoaWNzQ2FjaGUgKmNyZWF0ZVBsYXRmb3JtU2hh
cmVkR3JhcGhpY3NDYWNoZShjb25zdCBjaGFyICpjYWNoZUlkKSBjb25zdCB7IHJldHVybiBtX2lu
dGVncmF0aW9uLT5jcmVhdGVQbGF0Zm9ybVNoYXJlZEdyYXBoaWNzQ2FjaGUoY2FjaGVJZCk7IH0K
KyAgICB2aXJ0dWFsIFFBYnN0cmFjdEV2ZW50RGlzcGF0Y2hlciAqZ3VpVGhyZWFkRXZlbnREaXNw
YXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Z3VpVGhyZWFkRXZlbnREaXNw
YXRjaGVyKCk7IH0KKyNpZm5kZWYgUVRfTk9fQ0xJUEJPQVJECisgICAgdmlydHVhbCBRUGxhdGZv
cm1DbGlwYm9hcmQgKmNsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24tPmNs
aXBib2FyZCgpOyB9CisjZW5kaWYKKyNpZm5kZWYgUVRfTk9fRFJBR0FORERST1AKKyAgICB2aXJ0
dWFsIFFQbGF0Zm9ybURyYWcgKmRyYWcoKSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5k
cmFnKCk7IH0KKyNlbmRpZgorICAgIHZpcnR1YWwgUVBsYXRmb3JtSW5wdXRDb250ZXh0ICppbnB1
dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5pbnB1dENvbnRleHQoKTsg
fQorICAgIHZpcnR1YWwgUVBsYXRmb3JtQWNjZXNzaWJpbGl0eSAqYWNjZXNzaWJpbGl0eSgpIGNv
bnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24tPmFjY2Vzc2liaWxpdHkoKTsgfQorICAgIHZpcnR1
YWwgUVBsYXRmb3JtTmF0aXZlSW50ZXJmYWNlICpuYXRpdmVJbnRlcmZhY2UoKSBjb25zdCB7IHJl
dHVybiBtX2ludGVncmF0aW9uLT5uYXRpdmVJbnRlcmZhY2UoKTsgfQorICAgIHZpcnR1YWwgUVBs
YXRmb3JtU2VydmljZXMgKnNlcnZpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+
c2VydmljZXMoKTsgfQorICAgIHZpcnR1YWwgUVZhcmlhbnQgc3R5bGVIaW50KFN0eWxlSGludCBo
aW50KSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5zdHlsZUhpbnQoaGludCk7IH0KKyAg
ICB2aXJ0dWFsIFFQbGF0Zm9ybVRoZW1lICpwbGF0Zm9ybVRoZW1lKCkgY29uc3QgeyByZXR1cm4g
bV9pbnRlZ3JhdGlvbi0+cGxhdGZvcm1UaGVtZSgpOyB9CisKKyAgICBRU2NvcGVkUG9pbnRlcjxR
UGxhdGZvcm1JbnRlZ3JhdGlvbj4gbV9pbnRlZ3JhdGlvbjsKKyNpZiBkZWZpbmVkKFFfT1NfTUFD
KQorICAgIG11dGFibGUgUVNjb3BlZFBvaW50ZXI8UVBsYXRmb3JtRm9udERhdGFiYXNlPiBtX2Zv
bnREYXRhYmFzZTsKKyNlbmRpZgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9RdFRl
c3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEZvbnREYXRhYmFzZS5oIGIvVG9vbHMvUXRUZXN0UGxh
dGZvcm1QbHVnaW4vbWFjL1Rlc3RGb250RGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZjQ1MWVlY2Mz
OGE4MmY3MzFjNzE0Yzc5NjY5YTE3OGFlZTJkZjFjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
UXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RGb250RGF0YWJhc2UuaApAQCAtMCwwICsxLDEz
IEBACisjaWZuZGVmIFRlc3RGb250RGF0YWJhc2VfaAorI2RlZmluZSBUZXN0Rm9udERhdGFiYXNl
X2gKKworI2luY2x1ZGUgPFFGb250PgorI2luY2x1ZGUgPFF0UGxhdGZvcm1TdXBwb3J0L3ByaXZh
dGUvcWNvcmV0ZXh0Zm9udGRhdGFiYXNlX3AuaD4KKworY2xhc3MgVGVzdEZvbnREYXRhYmFzZSA6
IHB1YmxpYyBRQ29yZVRleHRGb250RGF0YWJhc2UgeworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZv
aWQgcG9wdWxhdGVGb250RGF0YWJhc2UoKTsKKyAgICB2aXJ0dWFsIFFGb250IGRlZmF1bHRGb250
KCkgY29uc3Q7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3Jt
UGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLm1tIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVn
aW4vbWFjL1Rlc3RGb250RGF0YWJhc2UubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjkyN2I4YmRhMzhhODA2YTk3
OWY5NWI4MjI2MDZlOTEwMzAwNTE5OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1F0VGVzdFBs
YXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLm1tCkBAIC0wLDAgKzEsMTczIEBACisj
aW5jbHVkZSAiVGVzdEZvbnREYXRhYmFzZS5oIgorI2luY2x1ZGUgPFF0Q29yZS9RRGlyPgorI2lu
Y2x1ZGUgPFF0Q29yZS9RRmlsZUluZm8+CisjaW5jbHVkZSA8UXRDb3JlL3ByaXZhdGUvcWNvcmVf
bWFjX3AuaD4KKyNpbmNsdWRlIDxRdFBsYXRmb3JtU3VwcG9ydC9wcml2YXRlL3Fmb250ZW5naW5l
X2NvcmV0ZXh0X3AuaD4KKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCisvLyBG
cm9tIHFjb3JldGV4dGZvbnRkYXRhYmFzZS5tbS4KK3N0YXRpYyBjb25zdCBjaGFyICpsYW5ndWFn
ZUZvcldyaXRpbmdTeXN0ZW1bXSA9IHsKKyAgICAwLCAgICAgLy8gQW55CisgICAgImVuIiwgIC8v
IExhdGluCisgICAgImVsIiwgIC8vIEdyZWVrCisgICAgInJ1IiwgIC8vIEN5cmlsbGljCisgICAg
Imh5IiwgIC8vIEFybWVuaWFuCisgICAgImhlIiwgIC8vIEhlYnJldworICAgICJhciIsICAvLyBB
cmFiaWMKKyAgICAic3lyIiwgLy8gU3lyaWFjCisgICAgImRpdiIsIC8vIFRoYWFuYQorICAgICJo
aSIsICAvLyBEZXZhbmFnYXJpCisgICAgImJuIiwgIC8vIEJlbmdhbGkKKyAgICAicGEiLCAgLy8g
R3VybXVraGkKKyAgICAiZ3UiLCAgLy8gR3VqYXJhdGkKKyAgICAib3IiLCAgLy8gT3JpeWEKKyAg
ICAidGEiLCAgLy8gVGFtaWwKKyAgICAidGUiLCAgLy8gVGVsdWd1CisgICAgImtuIiwgIC8vIEth
bm5hZGEKKyAgICAibWwiLCAgLy8gTWFsYXlhbGFtCisgICAgInNpIiwgIC8vIFNpbmhhbGEKKyAg
ICAidGgiLCAgLy8gVGhhaQorICAgICJsbyIsICAvLyBMYW8KKyAgICAiYm8iLCAgLy8gVGliZXRh
bgorICAgICJteSIsICAvLyBNeWFubWFyCisgICAgImthIiwgIC8vIEdlb3JnaWFuCisgICAgImtt
IiwgIC8vIEtobWVyCisgICAgInpoLWNuIiwgLy8gU2ltcGxpZmllZENoaW5lc2UKKyAgICAiemgt
dHciLCAvLyBUcmFkaXRpb25hbENoaW5lc2UKKyAgICAiamEiLCAgLy8gSmFwYW5lc2UKKyAgICAi
a28iLCAgLy8gS29yZWFuCisgICAgInZpIiwgIC8vIFZpZXRuYW1lc2UKKyAgICAwLCAvLyBTeW1i
b2wKKyAgICAwLCAvLyBPZ2hhbQorICAgIDAsIC8vIFJ1bmljCisgICAgMCAvLyBOJ0tvCit9Owor
ZW51bSB7IExhbmd1YWdlQ291bnQgPSBzaXplb2YobGFuZ3VhZ2VGb3JXcml0aW5nU3lzdGVtKSAv
IHNpemVvZihjb25zdCBjaGFyKikgfTsKKworY29uc3QgY2hhciogZGVmYXVsdFdlYktpdFRlc3RG
b250RmFtaWx5ID0gIk5pbWJ1cyBTYW5zIEwiOworCitRRm9udCBUZXN0Rm9udERhdGFiYXNlOjpk
ZWZhdWx0Rm9udCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFGb250KFFTdHJpbmc6OmZyb21MYXRp
bjEoZGVmYXVsdFdlYktpdFRlc3RGb250RmFtaWx5KSk7Cit9CisKK3ZvaWQgVGVzdEZvbnREYXRh
YmFzZTo6cG9wdWxhdGVGb250RGF0YWJhc2UoKQoreworICAgIFFDRlR5cGU8Q1RGb250Q29sbGVj
dGlvblJlZj4gc3lzdGVtQ29sbGVjdGlvbihDVEZvbnRDb2xsZWN0aW9uQ3JlYXRlRnJvbUF2YWls
YWJsZUZvbnRzKDApKTsKKyAgICBRQ0ZUeXBlPENGQXJyYXlSZWY+IHN5c3RlbUZvbnRzID0gc3lz
dGVtQ29sbGVjdGlvbiA/IENURm9udENvbGxlY3Rpb25DcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlw
dG9ycyhzeXN0ZW1Db2xsZWN0aW9uKSA6IDA7CisgICAgaWYgKCFzeXN0ZW1Gb250cykKKyAgICAg
ICAgcUZhdGFsKCJDYW5ub3QgZ2V0IHN5c3RlbSBmb250c1xuIik7CisKKyAgICBRQnl0ZUFycmF5
IHRlc3RGb250c1ZhciA9IGdldGVudigiV0VCS0lUX1RFU1RGT05UUyIpOworICAgIFFEaXIgZm9u
dHNEaXIoUVN0cmluZzo6ZnJvbUxhdGluMSh0ZXN0Rm9udHNWYXIpKTsKKyAgICBpZiAodGVzdEZv
bnRzVmFyLmlzRW1wdHkoKSB8fCAhZm9udHNEaXIuZXhpc3RzKCkpIHsKKyAgICAgICAgcUZhdGFs
KCJcblxuIgorICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAgICAg
ICAgIlFDb3JlVGV4dEZvbnREYXRhYmFzZVdLVGVzdDpcbiIKKyAgICAgICAgICAgICAgICAiV0VC
S0lUX1RFU1RGT05UUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IGNvcnJlY3RseS5c
biIKKyAgICAgICAgICAgICAgICAiVGhpcyB2YXJpYWJsZSBoYXMgdG8gcG9pbnQgdG8gdGhlIGRp
cmVjdG9yeSBjb250YWluaW5nIHRoZSBmb250c1xuIgorICAgICAgICAgICAgICAgICJ5b3UgY2Fu
IGNsb25lIGZyb20gZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9xdHdlYmtpdC90ZXN0Zm9udHMuZ2l0XG4i
CisgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgICAgICAgICk7Cisg
ICAgfQorCisgICAgUUNGVHlwZTxDRk11dGFibGVTZXRSZWY+IHN5c3RlbUZvbnRTZXQoQ0ZTZXRD
cmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZUeXBlU2V0Q2FsbEJhY2tzKSk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQoc3lzdGVtRm9udHMpOyArK2kpIHsKKyAgICAgICAg
Q1RGb250RGVzY3JpcHRvclJlZiBmb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250RGVzY3JpcHRvclJl
Zj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChzeXN0ZW1Gb250cywgaSkpOworICAgICAgICBDRlNl
dEFkZFZhbHVlKHN5c3RlbUZvbnRTZXQsIGZvbnQpOworICAgIH0KKworICAgIFFTdHJpbmdMaXN0
IGZpbHRlcnM7CisgICAgZmlsdGVycyA8PCBRU3RyaW5nTGl0ZXJhbCgiKi50dGYiKTsKKyAgICBR
RmlsZUluZm9MaXN0IGZpbGVzID0gZm9udHNEaXIuZW50cnlJbmZvTGlzdChmaWx0ZXJzLCBRRGly
OjpGaWxlcyk7CisgICAgZm9yZWFjaCAoUUZpbGVJbmZvIGZpbGUsIGZpbGVzKSB7CisgICAgICAg
IFFCeXRlQXJyYXkgcGF0aCA9IFFGaWxlOjplbmNvZGVOYW1lKGZpbGUuY2Fub25pY2FsRmlsZVBh
dGgoKSk7CisgICAgICAgIFFDRlR5cGU8Q0ZVUkxSZWY+IGZvbnRGaWxlKENGVVJMQ3JlYXRlRnJv
bUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbigwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4
Kj4ocGF0aC5jb25zdERhdGEoKSksIHBhdGgubGVuZ3RoKCksIGZhbHNlKSk7CisgICAgICAgIENG
RXJyb3JSZWYgZXJyb3I7CisgICAgICAgIGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNG
b3JVUkwoZm9udEZpbGUsIGtDVEZvbnRNYW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3IpKSB7Cisg
ICAgICAgICAgICBDRlJlbGVhc2UoZXJyb3IpOworICAgICAgICAgICAgcUZhdGFsKCJGYWlsZWQg
cmVnaXN0ZXJpbmcgZm9udCBmaWxlOiAlc1xuIiwgcGF0aC5jb25zdERhdGEoKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIGRvbmUgdmlhIGZvbnRzLmNvbmYgb24gTGludXgu
CisgICAgUUZvbnQ6Omluc2VydFN1YnN0aXR1dGlvbihRU3RyaW5nTGl0ZXJhbCgiSGVsdmV0aWNh
IiksIFFTdHJpbmc6OmZyb21MYXRpbjEoZGVmYXVsdFdlYktpdFRlc3RGb250RmFtaWx5KSk7CisK
KyAgICBRQ0ZUeXBlPENURm9udENvbGxlY3Rpb25SZWY+IGNvbGxlY3Rpb24gPSBDVEZvbnRDb2xs
ZWN0aW9uQ3JlYXRlRnJvbUF2YWlsYWJsZUZvbnRzKDApOworICAgIFFDRlR5cGU8Q0ZBcnJheVJl
Zj4gZm9udHMgPSBDVEZvbnRDb2xsZWN0aW9uQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRvcnMo
Y29sbGVjdGlvbik7CisKKyAgICBRU3RyaW5nIGZvdW5kcnlOYW1lID0gUUxhdGluMVN0cmluZygi
Q29yZVRleHQiKTsKKyAgICBjb25zdCBpbnQgbnVtRm9udHMgPSBDRkFycmF5R2V0Q291bnQoZm9u
dHMpOworICAgIFFIYXNoPFFTdHJpbmcsIFFTdHJpbmc+IHBzTmFtZVRvRmFtaWx5OworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtRm9udHM7ICsraSkgeworICAgICAgICBDVEZvbnREZXNjcmlw
dG9yUmVmIGZvbnQgPSBzdGF0aWNfY2FzdDxDVEZvbnREZXNjcmlwdG9yUmVmPihDRkFycmF5R2V0
VmFsdWVBdEluZGV4KGZvbnRzLCBpKSk7CisgICAgICAgIGlmIChDRlNldEdldENvdW50T2ZWYWx1
ZShzeXN0ZW1Gb250U2V0LCBmb250KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBR
Q0ZTdHJpbmcgZmFtaWx5TmFtZSA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPihDVEZvbnREZXNj
cmlwdG9yQ29weUxvY2FsaXplZEF0dHJpYnV0ZShmb250LCBrQ1RGb250RmFtaWx5TmFtZUF0dHJp
YnV0ZSwgTlVMTCkpOworICAgICAgICBRQ0ZUeXBlPENGRGljdGlvbmFyeVJlZj4gc3R5bGVzID0g
c3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0
ZShmb250LCBrQ1RGb250VHJhaXRzQXR0cmlidXRlKSk7CisgICAgICAgIFFGb250OjpXZWlnaHQg
d2VpZ2h0ID0gUUZvbnQ6Ok5vcm1hbDsKKyAgICAgICAgUUZvbnQ6OlN0eWxlIHN0eWxlID0gUUZv
bnQ6OlN0eWxlTm9ybWFsOworICAgICAgICBRRm9udDo6U3RyZXRjaCBzdHJldGNoID0gUUZvbnQ6
OlVuc3RyZXRjaGVkOworICAgICAgICBib29sIGZpeGVkUGl0Y2ggPSBmYWxzZTsKKworICAgICAg
ICBpZiAoc3R5bGVzKSB7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgd2VpZ2h0VmFsdWUg
PSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc3R5bGVzLCBr
Q1RGb250V2VpZ2h0VHJhaXQpKSkgeworICAgICAgICAgICAgICAgIFFfQVNTRVJUKENGTnVtYmVy
SXNGbG9hdFR5cGUod2VpZ2h0VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBkb3VibGUgZDsKKyAg
ICAgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJHZXRWYWx1ZSh3ZWlnaHRWYWx1ZSwga0NGTnVtYmVy
RG91YmxlVHlwZSwgJmQpKQorICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgPSAoZCA+IDAuMCkg
PyBRRm9udDo6Qm9sZCA6IFFGb250OjpOb3JtYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoQ0ZOdW1iZXJSZWYgaXRhbGljID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKHN0eWxlcywga0NURm9udFNsYW50VHJhaXQpKSkgeworICAgICAgICAg
ICAgICAgIFFfQVNTRVJUKENGTnVtYmVySXNGbG9hdFR5cGUoaXRhbGljKSk7CisgICAgICAgICAg
ICAgICAgZG91YmxlIGQ7CisgICAgICAgICAgICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoaXRh
bGljLCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGQgPiAwLjApCisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IFFGb250OjpTdHlsZUl0
YWxpYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
Q0ZOdW1iZXJSZWYgc3ltYm9saWMgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoc3R5bGVzLCBrQ1RGb250U3ltYm9saWNUcmFpdCkpKSB7CisgICAgICAgICAg
ICAgICAgaW50IGQ7CisgICAgICAgICAgICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoc3ltYm9s
aWMsIGtDRk51bWJlclNJbnQzMlR5cGUsICZkKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
ZCAmIGtDVEZvbnRNb25vU3BhY2VUcmFpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVk
UGl0Y2ggPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoZCAmIGtDVEZvbnRFeHBhbmRl
ZFRyYWl0KQorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXRjaCA9IFFGb250OjpFeHBhbmRl
ZDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZCAmIGtDVEZvbnRDb25kZW5zZWRUcmFp
dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2ggPSBRRm9udDo6Q29uZGVuc2VkOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlu
dCBwaXhlbFNpemUgPSAwOworICAgICAgICBpZiAoUUNGVHlwZTxDRk51bWJlclJlZj4gc2l6ZSA9
IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShm
b250LCBrQ1RGb250U2l6ZUF0dHJpYnV0ZSkpKSB7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJJ
c0Zsb2F0VHlwZShzaXplKSkgeworICAgICAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAg
ICAgICAgIENGTnVtYmVyR2V0VmFsdWUoc2l6ZSwga0NGTnVtYmVyRG91YmxlVHlwZSwgJmQpOwor
ICAgICAgICAgICAgICAgIHBpeGVsU2l6ZSA9IGQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUoc2l6ZSwga0NGTnVtYmVySW50VHlwZSwgJnBp
eGVsU2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBRU3VwcG9ydGVk
V3JpdGluZ1N5c3RlbXMgd3JpdGluZ1N5c3RlbXM7CisgICAgICAgIGlmIChRQ0ZUeXBlPENGQXJy
YXlSZWY+IGxhbmd1YWdlcyA9IHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udERlc2NyaXB0
b3JDb3B5QXR0cmlidXRlKGZvbnQsIGtDVEZvbnRMYW5ndWFnZXNBdHRyaWJ1dGUpKSkgeworICAg
ICAgICAgICAgQ0ZJbmRleCBsZW5ndGggPSBDRkFycmF5R2V0Q291bnQobGFuZ3VhZ2VzKTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgTGFuZ3VhZ2VDb3VudDsgKytpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFsYW5ndWFnZUZvcldyaXRpbmdTeXN0ZW1baV0pCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFFDRlN0cmluZyBsYW5nID0gQ0ZT
dHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhOVUxMLCBsYW5ndWFnZUZvcldyaXRpbmdTeXN0ZW1baV0s
IGtDRlN0cmluZ0VuY29kaW5nQVNDSUkpOworICAgICAgICAgICAgICAgIGlmIChDRkFycmF5Q29u
dGFpbnNWYWx1ZShsYW5ndWFnZXMsIENGUmFuZ2VNYWtlKDAsIGxlbmd0aCksIGxhbmcpKQorICAg
ICAgICAgICAgICAgICAgICB3cml0aW5nU3lzdGVtcy5zZXRTdXBwb3J0ZWQoUUZvbnREYXRhYmFz
ZTo6V3JpdGluZ1N5c3RlbShpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBDRlJldGFpbihmb250KTsKKyAgICAgICAgUVBsYXRmb3JtRm9udERhdGFiYXNlOjpyZWdpc3Rl
ckZvbnQoZmFtaWx5TmFtZSwgZm91bmRyeU5hbWUsIHdlaWdodCwgc3R5bGUsIHN0cmV0Y2gsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogYW50aWFs
aWFzZWQgKi8sIHRydWUgLyogc2NhbGFibGUgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBpeGVsU2l6ZSwgZml4ZWRQaXRjaCwgd3JpdGluZ1N5c3RlbXMs
ICh2b2lkICopIGZvbnQpOworICAgICAgICBDRlN0cmluZ1JlZiBwc05hbWUgPSBzdGF0aWNfY2Fz
dDxDRlN0cmluZ1JlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9u
dE5hbWVBdHRyaWJ1dGUpKTsKKyAgICAgICAgLy8gd2UgbmVlZCBQb3N0U2NyaXB0IE5hbWUgdG8g
ZmFtaWx5IG5hbWUgbWFwcGluZyBmb3IgZmFsbGJhY2sgbGlzdCBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgcHNOYW1lVG9GYW1pbHlbUUNGU3RyaW5nOjp0b1FTdHJpbmcoKE5TU3RyaW5nICopIHBzTmFt
ZSldID0gZmFtaWx5TmFtZTsKKyAgICAgICAgQ0ZSZWxlYXNlKHBzTmFtZSk7CisgICAgfQorfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RJbnRlZ3JhdGlv
bk1hYy5tbSBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0SW50ZWdyYXRpb25N
YWMubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjA3Y2Q4YmMxODI1NTg0YzQzNjRmYmJiNGNiZmU3M2NiYzIwOGFl
NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0
SW50ZWdyYXRpb25NYWMubW0KQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSAiLi4vVGVzdEludGVn
cmF0aW9uLmgiCisjaW5jbHVkZSAiVGVzdEZvbnREYXRhYmFzZS5oIgorCitRUGxhdGZvcm1Gb250
RGF0YWJhc2UqIFRlc3RJbnRlZ3JhdGlvbjo6Zm9udERhdGFiYXNlKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fZm9udERhdGFiYXNlKQorICAgICAgICBtX2ZvbnREYXRhYmFzZS5yZXNldChuZXcgVGVz
dEZvbnREYXRhYmFzZSk7CisgICAgcmV0dXJuIG1fZm9udERhdGFiYXNlLmRhdGEoKTsKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21haW4uY3BwIGIvVG9vbHMvUXRU
ZXN0UGxhdGZvcm1QbHVnaW4vbWFpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGNlMzMxZGY5MWU4OTg4ZGUy
ZDdjZjNhZjg5MWMwMDRkMDM2MTcwMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1F0VGVzdFBs
YXRmb3JtUGx1Z2luL21haW4uY3BwCkBAIC0wLDAgKzEsMzggQEAKKyNpbmNsdWRlICJUZXN0SW50
ZWdyYXRpb24uaCIKKyNpbmNsdWRlIDxRUGxhdGZvcm1JbnRlZ3JhdGlvblBsdWdpbj4KKyNpbmNs
dWRlIDxRdEdsb2JhbD4KKworY2xhc3MgUV9ERUNMX0VYUE9SVCBUZXN0SW50ZWdyYXRpb25QbHVn
aW4gOiBwdWJsaWMgUVBsYXRmb3JtSW50ZWdyYXRpb25QbHVnaW4geworICAgIFFfT0JKRUNUCisg
ICAgUV9QTFVHSU5fTUVUQURBVEEoSUlEICJvcmcucXQtcHJvamVjdC5RdC5RUGxhdGZvcm1JbnRl
Z3JhdGlvbkZhY3RvcnlJbnRlcmZhY2UiIEZJTEUgInRlc3RwbGF0Zm9ybS5qc29uIikKK3B1Ymxp
YzoKKyAgICBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Q7CisgICAgUVBsYXRmb3JtSW50ZWdyYXRp
b24qIGNyZWF0ZShjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZ0xpc3QmKTsKK3B1YmxpYyBz
bG90czoKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKK307CisKK1FTdHJpbmdMaXN0IFRlc3RJbnRl
Z3JhdGlvblBsdWdpbjo6a2V5cygpIGNvbnN0Cit7CisgICAgUVN0cmluZ0xpc3QgbGlzdDsKKyAg
ICBsaXN0IDw8IFFTdHJpbmdMaXRlcmFsKCJ0ZXN0cGxhdGZvcm0iKTsKKyAgICByZXR1cm4gbGlz
dDsKK30KKworUVBsYXRmb3JtSW50ZWdyYXRpb24qIFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6Y3Jl
YXRlKGNvbnN0IFFTdHJpbmcmIHN5c3RlbSwgY29uc3QgUVN0cmluZ0xpc3QmIHBhcmFtZXRlcnMp
Cit7CisgICAgaWYgKHN5c3RlbS50b0xvd2VyKCkgPT0gUVN0cmluZ0xpdGVyYWwoInRlc3RwbGF0
Zm9ybSIpKQorICAgICAgICByZXR1cm4gbmV3IFRlc3RJbnRlZ3JhdGlvbigpOworCisgICAgcmV0
dXJuIDA7Cit9CisKKyNpbmNsdWRlICJtYWluLm1vYyIKKwordm9pZCBUZXN0SW50ZWdyYXRpb25Q
bHVnaW46OmluaXRpYWxpemUoKQoreworICAgIFFTdGF0aWNQbHVnaW4gcGx1Z2luOworICAgIHBs
dWdpbi5pbnN0YW5jZSA9ICZxdF9wbHVnaW5faW5zdGFuY2U7CisgICAgcGx1Z2luLm1ldGFEYXRh
ID0gJnF0X3BsdWdpbl9xdWVyeV9tZXRhZGF0YTsKKyAgICBxUmVnaXN0ZXJTdGF0aWNQbHVnaW5G
dW5jdGlvbihwbHVnaW4pOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVn
aW4vdGVzdHBsYXRmb3JtLmpzb24gYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi90ZXN0cGxh
dGZvcm0uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MzBiYjYyYjBhNWU4YjQxOWM3YmIzOGEwYTMzYTBmMzVm
ZDA3NDliCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vdGVz
dHBsYXRmb3JtLmpzb24KQEAgLTAsMCArMSwzIEBACit7CisgICAgIktleXMiOiBbICJ0ZXN0cGxh
dGZvcm0iIF0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rvb2xzLnBybyBiL1Rvb2xzL1Rvb2xzLnBy
bwppbmRleCBmYjJiMTlhMzdkOTU2ZDk2ZmI2NWExYTAyNzYwYjIwNGJlMjc5MDdmLi5mN2VkYjI4
NzFjMWUyOGU5YjkyMDkxODQ5NjM2OGY4NDZlYWEwNzQzIDEwMDY0NAotLS0gYS9Ub29scy9Ub29s
cy5wcm8KKysrIGIvVG9vbHMvVG9vbHMucHJvCkBAIC0xNSw3ICsxNSw4IEBAIFNVQkRJUlMgKz0g
RHVtcFJlbmRlclRyZWUvcXQvSW1hZ2VEaWZmLnBybwogCiAhbm9fd2Via2l0MiB7CiAgICAgU1VC
RElSUyArPSBNaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8gXAotICAgICAgICAgICAgICAg
V2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnBybworICAgICAgICAgICAgICAgV2Vi
S2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnBybyBcCisgICAgICAgICAgICAgICBRdFRl
c3RQbGF0Zm9ybVBsdWdpbi9RdFRlc3RQbGF0Zm9ybVBsdWdpbi5wcm8gXAogfQogCiAhd2luMzI6
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX05FVFNDQVBFX1BMVUdJTl9BUEk9MSkgewpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UYXJnZXQucHJpCmluZGV4IDZmMWRhOTUzZDAwNDllZGY5NTcwMjAxODEwM2EzYTJh
ZjU5ZDM0NWUuLmM5N2NkZjFjYTNhZDBhMGNmMzEwYTJlNzM1Y2IxMzgwN2FmNzI5ZDMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaQorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1RhcmdldC5wcmkKQEAgLTM3LDQgKzM3LDkgQEAgUFJFRklYX0hFQURFUiA9
IFdlYktpdFRlc3RSdW5uZXJQcmVmaXguaAogKi1nKysqOlFNQUtFX0NYWEZMQUdTICs9ICItaW5j
bHVkZSAkJFBSRUZJWF9IRUFERVIiCiAqLWNsYW5nKjpRTUFLRV9DWFhGTEFHUyArPSAiLWluY2x1
ZGUgJCRQUkVGSVhfSEVBREVSIgogCittYWM6IExJQl9TVUZGSVg9LmR5bGliCit3aW46IExJQl9T
VUZGSVg9LmRsbAordW5peDohbWFjOiBMSUJfU1VGRklYPS5zbworREVGSU5FUyArPSBURVNUX1BM
QVRGT1JNX1BMVUdJTl9QQVRIPVwiXFxcIiQke1JPT1RfQlVJTERfRElSfSQke1FNQUtFX0RJUl9T
RVB9bGliJCR7UU1BS0VfRElSX1NFUH1saWJ0ZXN0cGxhdGZvcm0kJHtMSUJfU1VGRklYfVxcXCJc
IgorCiBSRVNPVVJDRVMgPSBxdC9XZWJLaXRUZXN0UnVubmVyLnFyYwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9tYWluLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
cXQvbWFpbi5jcHAKaW5kZXggZjk1NzJhODdlMzQ1NTQ3M2U4NWUyZWE0NjcyNDk1MGNiN2YxZDhi
YS4uYTNkYTAxYTQ2OWIxYTUxZTM5YmI5Y2M3ZWQ1MGI4YTQ1NGI2NDQ2OSAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9tYWluLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL3F0L21haW4uY3BwCkBAIC05NCw2ICs5NCwyMiBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAKICAgICBxcHV0ZW52KCJRVF9XRUJLSVRfVEhFTUVfTkFNRSIsICJxc3R5
bGUiKTsKIAorICAgIFFCeXRlQXJyYXkgcGxhdGZvcm0gPSBxZ2V0ZW52KCJRVF9RUEFfUExBVEZP
Uk0iKTsKKyAgICBRQnl0ZUFycmF5IHBsYXRmb3JtUGx1Z2luUGF0aCA9IHFnZXRlbnYoIlFUX1FQ
QV9QTEFURk9STV9QTFVHSU5fUEFUSCIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnYzsg
KytpKSB7CisgICAgICAgIGlmIChRQnl0ZUFycmF5KGFyZ3ZbaV0pID09ICItcGxhdGZvcm0iICYm
IGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHBsYXRmb3JtID0gYXJndltpICsgMV07CisgICAg
ICAgIGVsc2UgaWYgKFFCeXRlQXJyYXkoYXJndltpXSkgPT0gIi1wbGF0Zm9ybXBsdWdpbnBhdGgi
ICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHBsYXRmb3JtUGx1Z2luUGF0aCA9IGFyZ3Zb
aSArIDFdOworICAgIH0KKyAgICBpZiAoIXBsYXRmb3JtLmlzRW1wdHkoKSkKKyAgICAgICAgcXB1
dGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRGT1JNIiwgcGxhdGZvcm0pOworICAgIGlmICgh
cGxhdGZvcm1QbHVnaW5QYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcXB1dGVudigiUVRfV0VCS0lU
X09SSUdJTkFMX1BMQVRGT1JNX1BMVUdJTl9QQVRIIiwgcGxhdGZvcm1QbHVnaW5QYXRoKTsKKwor
ICAgIC8vIFRlbGwgdGhlIHdlYiBwcm9jZXNzIHRoYXQgd2Ugd2FudCB0byB1c2UgdGhlIHRlc3Qg
cGxhdGZvcm0gcGx1Z2luLgorICAgIHFwdXRlbnYoIlFUX1dFQktJVDJfVEVTVF9QTEFURk9STV9Q
TFVHSU5fUEFUSCIsIFRFU1RfUExBVEZPUk1fUExVR0lOX1BBVEgpOworCiAgICAgUVF1aWNrV2Vi
Vmlld0V4cGVyaW1lbnRhbDo6c2V0RmxpY2thYmxlVmlld3BvcnRFbmFibGVkKGZhbHNlKTsKICAg
ICBRQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogICAgIExhdW5jaGVyIGxhdW5jaGVyKGFy
Z2MsIGFyZ3YpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137334</attachid>
            <date>2012-04-16 06:32:43 -0700</date>
            <delta_ts>2012-04-23 07:54:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-80996-20120416153241.patch</filename>
            <type>text/plain</type>
            <size>33778</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0MjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjYyZTQ2ZjYzMGQ1N2Nh
NjllYTNhMTJiOWM0OTNjODkwMjc1YWYxMS4uZTgxZDc0YWU2ZDZhZGJmYWIxMTE5M2Y0MGVkYjhl
Y2U0YmJjZjgxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA0LTE2ICBCYWxh
enMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIEFkZCB0ZXN0
IHNwZWNpZmljIHBsYXRmb3JtIHBsdWdpbiB0byBhY2hpZXZlIHVuaWZpZWQgbGF5b3V0IHRlc3Qg
cmVzdWx0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA5OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bml0aWFsaXplIHRoZSB0ZXN0IHBsYXRmb3JtIHBsdWdpbiBiZWZvcmUgaW5pdGlhbGl6aW5nCisg
ICAgICAgIHRoZSB3ZWIgcHJvY2VzcyBpZiB3ZSBhcmUgaW4gYSBXVFIgcnVuLgorICAgICAgICBJ
dCBpcyBuZWNlc3NhcnkgdG8gcGxhY2UgdGhpcyBpbml0aWFsaXphdGlvbiBoZXJlIGFzIHdlCisg
ICAgICAgIGNhbm5vdCBjb250cm9sIHdpY2ggcGxhdGZvcm0gcGx1Z2luIHdpbGwgYmUgdXNlZCBh
ZnRlcgorICAgICAgICB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgUUFwcGxpY2F0aW9uLgorCisg
ICAgICAgICogcXQvTWFpblF0LmNwcDoKKyAgICAgICAgKGluaXRpYWxpemVUZXN0UGxhdGZvcm1Q
bHVnaW5Gb3JXVFJJZlJlcXVpcmVkKToKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTA0LTE1ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBVc2UgR1JlZlB0ciB0byBkZWxldGUgdGhlIGRlZmF1bHQgd2ViIGNvbnRleHQgaW4gV2ViS2l0
MiBHVEsrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9xdC9NYWluUXQuY3BwIGIvU291cmNl
L1dlYktpdDIvcXQvTWFpblF0LmNwcAppbmRleCBlNzUxOGQzNDA0ZjIyN2Q4NmZkZjg1OGQ0NGY2
YmY2NDM4NDZmMTM4Li5lMmE0NDY3OWYzOWEzYWU5ZDZmYWM1ZDI0ZmQ0MzRhODU4MGIzYzk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9xdC9NYWluUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL3F0L01haW5RdC5jcHAKQEAgLTI1LDcgKzI1LDExIEBACiAgKi8KIAogI2luY2x1ZGUgPFFB
cHBsaWNhdGlvbj4KLQorI2luY2x1ZGUgPFFCeXRlQXJyYXk+CisjaW5jbHVkZSA8UUZpbGU+Cisj
aW5jbHVkZSA8UVBsYXRmb3JtSW50ZWdyYXRpb24+CisjaW5jbHVkZSA8UVBsYXRmb3JtSW50ZWdy
YXRpb25QbHVnaW4+CisjaW5jbHVkZSA8UVBsdWdpbkxvYWRlcj4KICNpbmNsdWRlIDxzdGRpby5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTQzLDExICs0NywyNyBAQCBzdGF0aWMgdm9pZCBt
ZXNzYWdlSGFuZGxlcihRdE1zZ1R5cGUgdHlwZSwgY29uc3QgY2hhciogbWVzc2FnZSkKICAgICAv
LyBEbyBub3RoaW5nCiB9CiAKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVUZXN0UGxhdGZvcm1QbHVn
aW5Gb3JXVFJJZlJlcXVpcmVkKCkKK3sKKyAgICBRQnl0ZUFycmF5IHBsdWdpblBhdGggPSBxZ2V0
ZW52KCJRVF9XRUJLSVQyX1RFU1RfUExBVEZPUk1fUExVR0lOX1BBVEgiKTsKKyAgICBpZiAocGx1
Z2luUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFQbHVnaW5Mb2FkZXIg
bG9hZGVyKFFGaWxlOjpkZWNvZGVOYW1lKHBsdWdpblBhdGguZGF0YSgpKSk7CisgICAgUVBsYXRm
b3JtSW50ZWdyYXRpb25QbHVnaW4qIHBsdWdpbiA9IHFvYmplY3RfY2FzdDxRUGxhdGZvcm1JbnRl
Z3JhdGlvblBsdWdpbio+KGxvYWRlci5pbnN0YW5jZSgpKTsKKyAgICBpZiAoIXBsdWdpbikKKyAg
ICAgICAgcUZhdGFsKCJjYW5ub3QgaW5pdGlhbGl6ZSB0ZXN0IHBsYXRmb3JtIHBsdWdpblxuIik7
CisKKyAgICBxcHV0ZW52KCJRVF9RUEFfUExBVEZPUk1fUExVR0lOX1BBVEgiLCBwbHVnaW5QYXRo
KTsKKyAgICBxcHV0ZW52KCJRVF9RUEFfUExBVEZPUk0iLCAidGVzdHBsYXRmb3JtIik7Cit9CisK
IC8vIFRoZSBmcmFtZXdvcmsgZW50cnkgcG9pbnQuCiAvLyBXZSBjYWxsIG91ciBwbGF0Zm9ybSBz
cGVjaWZpYyBlbnRyeSBwb2ludCBkaXJlY3RseSByYXRoZXIgdGhhbiBXZWJLaXRNYWluIGJlY2F1
c2UgaXQgbWFrZXMgbGl0dGxlIHNlbnNlCiAvLyB0byByZWltcGxlbWVudCB0aGUgaGFuZGxpbmcg
b2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmcm9tIFFBcHBsaWNhdGlvbi4KIGludCBtYWluKGlu
dCBhcmdjLCBjaGFyKiogYXJndikKIHsKKyAgICBpbml0aWFsaXplVGVzdFBsYXRmb3JtUGx1Z2lu
Rm9yV1RSSWZSZXF1aXJlZCgpOwogICAgIFdlYktpdDo6aW5pdGlhbGl6ZVdlYktpdDJUaGVtZSgp
OwogCiAgICAgLy8gSGFzIHRvIGJlIGRvbmUgYmVmb3JlIFFBcHBsaWNhdGlvbiBpcyBjb25zdHJ1
Y3RlZCBpbiBjYXNlCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggMjkyNzBlZmJhYjc5MjRjNWFlNjM2N2Q3MDczNTZlM2QzNTQyM2I2Ni4uYWFkMjhl
NDlkYmZiMTRjODQ5N2VhODI0ZjQ3NGI2ZDYxZGU0YmUyNCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEyLTA0LTE2
ICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIEFk
ZCB0ZXN0IHNwZWNpZmljIHBsYXRmb3JtIHBsdWdpbiB0byBhY2hpZXZlIHVuaWZpZWQgbGF5b3V0
IHRlc3QgcmVzdWx0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODA5OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCBRdFRlc3RQbGF0Zm9ybVBsdWdpbiBhcyBhIG5ldyBwcm9qZWN0IHVuZGVyIFRv
b2xzLgorICAgICAgICBUaGlzIGlzIGEgUXQ1LWlzaCBwbGF0Zm9ybSBwbHVnaW4gdGhhdCBjYW4g
YmUgdXNlZCB0byB0d2VhayB0aGUKKyAgICAgICAgcGxhdGZvcm0gc3VwcG9ydCBpbnRlcmZhY2Vz
IGluIG9yZGVyIHRvIHVuaWZ5IGxheW91dCB0ZXN0IHJlc3VsdHMuCisgICAgICAgIEZvciBub3cg
aXQgb25seSBvdmVycmlkZXMgdGhlIGZvbnQgZGF0YWJhc2Ugb24gTWFjIGFuZCByZWRpcmVjdHMK
KyAgICAgICAgZXZlcnl0aGluZyBlbHNlIHRvIHRoZSByZWFsIHBsYXRmb3JtIHBsdWdpbi4gVGhl
IGZvbnQgZGF0YWJhc2UgaXQKKyAgICAgICAgcHJvdmlkZXMgbWltaWNzIHRoZSB3YXkgaG93IHdl
IHNldCB1cCB0ZXN0IGZvbnRzIHdpdGggZm9udGNvbmZpZyBvbiBMaW51eC4KKyAgICAgICAgTWFr
ZSBEdW1wUmVuZGVyVHJlZSBhbmQgV2ViS2l0VGVzdFJ1bm5lciB1c2UgdGhpcyBwbGF0Zm9ybSBw
bHVnaW4uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm86
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHA6CisgICAgICAgIChpbml0aWFs
aXplVGVzdFBsYXRmb3JtUGx1Z2luKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFF0VGVz
dFBsYXRmb3JtUGx1Z2luL1F0VGVzdFBsYXRmb3JtUGx1Z2luLnBybzogQWRkZWQuCisgICAgICAg
ICogUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVzdEludGVncmF0aW9uLmNwcDogQWRkZWQuCisgICAg
ICAgIChUZXN0SW50ZWdyYXRpb246OlRlc3RJbnRlZ3JhdGlvbik6CisgICAgICAgIChUZXN0SW50
ZWdyYXRpb246OmZvbnREYXRhYmFzZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1QbHVnaW4v
VGVzdEludGVncmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoVGVzdEludGVncmF0aW9uKToKKyAg
ICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6aGFzQ2FwYWJpbGl0eSk6CisgICAgICAgIChUZXN0SW50
ZWdyYXRpb246OmNyZWF0ZVBsYXRmb3JtUGl4bWFwKToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlv
bjo6Y3JlYXRlUGxhdGZvcm1XaW5kb3cpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVh
dGVQbGF0Zm9ybUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246OmNyZWF0
ZVBsYXRmb3JtT3BlbkdMQ29udGV4dCk6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246OmNyZWF0
ZVBsYXRmb3JtU2hhcmVkR3JhcGhpY3NDYWNoZSk6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246
Omd1aVRocmVhZEV2ZW50RGlzcGF0Y2hlcik6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246OmNs
aXBib2FyZCk6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246OmRyYWcpOgorICAgICAgICAoVGVz
dEludGVncmF0aW9uOjppbnB1dENvbnRleHQpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjph
Y2Nlc3NpYmlsaXR5KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6bmF0aXZlSW50ZXJmYWNl
KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6c2VydmljZXMpOgorICAgICAgICAoVGVzdElu
dGVncmF0aW9uOjpzdHlsZUhpbnQpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpwbGF0Zm9y
bVRoZW1lKToKKyAgICAgICAgKiBRdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEZvbnREYXRh
YmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFRlc3RGb250RGF0YWJhc2UpOgorICAgICAgICAqIFF0
VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFRlc3RGb250RGF0YWJhc2U6OnBvcHVsYXRlRm9udERhdGFiYXNlKToKKyAgICAgICAgKiBR
dFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEludGVncmF0aW9uTWFjLm1tOiBBZGRlZC4KKyAg
ICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6Zm9udERhdGFiYXNlKToKKyAgICAgICAgKiBRdFRlc3RQ
bGF0Zm9ybVBsdWdpbi9tYWluLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0SW50ZWdyYXRpb25Q
bHVnaW46OmtleXMpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uUGx1Z2luOjpjcmVhdGUpOgor
ICAgICAgICAoVGVzdEludGVncmF0aW9uUGx1Z2luOjppbml0aWFsaXplKToKKyAgICAgICAgKiBR
dFRlc3RQbGF0Zm9ybVBsdWdpbi90ZXN0cGxhdGZvcm0uanNvbjogQWRkZWQuCisgICAgICAgICog
VG9vbHMucHJvOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL3F0L21haW4uY3BwOgorICAgICAgICAobWFpbik6CisKIDIw
MTItMDQtMTYgIFNlb2tqdSBLd29uICA8c2Vva2p1Lmt3b25Ac2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF0gRVdlYkxhdWNoZXIgOiBGaXggd3JvbmcgcGFyYW1ldGVyIG9yZGVyIGluIGZ1bmN0
aW9uIGNhbGwgZm9yIG11bHRpcGxlIHdpbmRvd3MuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9E
dW1wUmVuZGVyVHJlZS5wcm8KaW5kZXggMmFhNTRjZGZhNDZhN2FkOWJiYjRkMGY2YTI4NzRjYmI0
ZjIzZTc5OC4uYTZhMjU1OTI1ZTYwNzAwMjUzZGYwNjJiYmFkYTQxZWM2Y2NjMjBlMSAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlLnBybwpAQCAtNTcsNCArNTcsOSBA
QCB3aW5jZSo6IHsKIERFRklORVMgLT0gVVNFX1NZU1RFTV9NQUxMT0M9MAogREVGSU5FUyArPSBV
U0VfU1lTVEVNX01BTExPQz0xCiAKK21hYzogTElCX1NVRkZJWD0uZHlsaWIKK3dpbjogTElCX1NV
RkZJWD0uZGxsCit1bml4OiFtYWM6IExJQl9TVUZGSVg9LnNvCitERUZJTkVTICs9IFRFU1RfUExB
VEZPUk1fUExVR0lOX1BBVEg9XCJcXFwiJCR7Uk9PVF9CVUlMRF9ESVJ9JCR7UU1BS0VfRElSX1NF
UH1saWIkJHtRTUFLRV9ESVJfU0VQfWxpYnRlc3RwbGF0Zm9ybSQke0xJQl9TVUZGSVh9XFxcIlwi
CisKIFJFU09VUkNFUyA9IER1bXBSZW5kZXJUcmVlLnFyYwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvbWFpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNw
cAppbmRleCAxNzYzMzY3NzA2ZjFhYjI3ZThhMTYzY2M1ZTU0NWZmYjdhODVmMDBlLi43OTdlZWY3
ZTNlN2Q2OThiZTNlZDQxY2FhYjM3NTM0MDNmZmYwNDgwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9tYWluLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWlu
LmNwcApAQCAtMzEsNiArMzEsMTIgQEAKIAogI2luY2x1ZGUgIlF0SW5pdGlhbGl6ZVRlc3RGb250
cy5oIgogCisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCisjaW5j
bHVkZSA8UVBsYXRmb3JtSW50ZWdyYXRpb24+CisjaW5jbHVkZSA8UVBsYXRmb3JtSW50ZWdyYXRp
b25QbHVnaW4+CisjaW5jbHVkZSA8UVBsdWdpbkxvYWRlcj4KKyNlbmRpZgorCiAjaW5jbHVkZSA8
d3RmL0Fsd2F5c0lubGluZS5oPgogCiAjaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KQEAgLTEyMyw2
ICsxMjksMzIgQEAgc3RhdGljIHZvaWQgV1RGQ3Jhc2hIb29rKCkKIH0KICNlbmRpZgogCitzdGF0
aWMgdm9pZCBpbml0aWFsaXplVGVzdFBsYXRmb3JtUGx1Z2luKGludCBhcmdjLCBjaGFyKiBhcmd2
W10pCit7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCisgICAg
UVBsdWdpbkxvYWRlciBsb2FkZXIoVEVTVF9QTEFURk9STV9QTFVHSU5fUEFUSCk7CisgICAgUVBs
YXRmb3JtSW50ZWdyYXRpb25QbHVnaW4qIHBsdWdpbiA9IHFvYmplY3RfY2FzdDxRUGxhdGZvcm1J
bnRlZ3JhdGlvblBsdWdpbio+KGxvYWRlci5pbnN0YW5jZSgpKTsKKyAgICBpZiAoIXBsdWdpbikK
KyAgICAgICAgcUZhdGFsKCJjYW5ub3QgaW5pdGlhbGl6ZSB0ZXN0IHBsYXRmb3JtIHBsdWdpblxu
Iik7CisKKyAgICBRQnl0ZUFycmF5IHBsYXRmb3JtID0gcWdldGVudigiUVRfUVBBX1BMQVRGT1JN
Iik7CisgICAgUUJ5dGVBcnJheSBwbGF0Zm9ybVBsdWdpblBhdGggPSBxZ2V0ZW52KCJRVF9RUEFf
UExBVEZPUk1fUExVR0lOX1BBVEgiKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7ICsr
aSkgeworICAgICAgICBpZiAoUUJ5dGVBcnJheShhcmd2W2ldKSA9PSAiLXBsYXRmb3JtIiAmJiBp
ICsgMSA8IGFyZ2MpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IGFyZ3ZbaSArIDFdOworICAgICAg
ICBlbHNlIGlmIChRQnl0ZUFycmF5KGFyZ3ZbaV0pID09ICItcGxhdGZvcm1wbHVnaW5wYXRoIiAm
JiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICBwbGF0Zm9ybVBsdWdpblBhdGggPSBhcmd2W2kg
KyAxXTsKKyAgICB9CisgICAgaWYgKCFwbGF0Zm9ybS5pc0VtcHR5KCkpCisgICAgICAgIHFwdXRl
bnYoIlFUX1dFQktJVF9PUklHSU5BTF9QTEFURk9STSIsIHBsYXRmb3JtKTsKKyAgICBpZiAoIXBs
YXRmb3JtUGx1Z2luUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHFwdXRlbnYoIlFUX1dFQktJVF9P
UklHSU5BTF9QTEFURk9STV9QTFVHSU5fUEFUSCIsIHBsYXRmb3JtUGx1Z2luUGF0aCk7CisKKyAg
ICBxcHV0ZW52KCJRVF9RUEFfUExBVEZPUk1fUExVR0lOX1BBVEgiLCBURVNUX1BMQVRGT1JNX1BM
VUdJTl9QQVRIKTsKKyAgICBxcHV0ZW52KCJRVF9RUEFfUExBVEZPUk0iLCAidGVzdHBsYXRmb3Jt
Iik7CisjZW5kaWYKK30KKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIHsKICNp
ZmRlZiBRX09TX1dJTgpAQCAtMTQ2LDYgKzE3OCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiBhcmd2W10pCiAKICAgICBXZWJLaXQ6OmluaXRpYWxpemVUZXN0Rm9udHMoKTsKIAorICAgIGlu
aXRpYWxpemVUZXN0UGxhdGZvcm1QbHVnaW4oYXJnYywgYXJndik7CisKICAgICBRQXBwbGljYXRp
b246OnNldEdyYXBoaWNzU3lzdGVtKCJyYXN0ZXIiKTsKICAgICBRQXBwbGljYXRpb246OnNldFN0
eWxlKG5ldyBRV2luZG93c1N0eWxlKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0UGxhdGZv
cm1QbHVnaW4vUXRUZXN0UGxhdGZvcm1QbHVnaW4ucHJvIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1Q
bHVnaW4vUXRUZXN0UGxhdGZvcm1QbHVnaW4ucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0MDFmNTk0NWJhMTJi
MTljZDE2Y2Y3Njc1YWZkNWIyZDI3ODZkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9RdFRl
c3RQbGF0Zm9ybVBsdWdpbi9RdFRlc3RQbGF0Zm9ybVBsdWdpbi5wcm8KQEAgLTAsMCArMSwyMiBA
QAorVEFSR0VUID0gdGVzdHBsYXRmb3JtCitERVNURElSID0gJCRST09UX0JVSUxEX0RJUi9saWIK
KworbG9hZChxdF9wbHVnaW4pCitRVCA9IGNvcmUgZ3VpIGNvcmUtcHJpdmF0ZSBndWktcHJpdmF0
ZSBwbGF0Zm9ybXN1cHBvcnQtcHJpdmF0ZQorCitIRUFERVJTID0gXAorICAgIFRlc3RJbnRlZ3Jh
dGlvbi5oIFwKKworU09VUkNFUyA9IFwKKyAgICBtYWluLmNwcCBcCisgICAgVGVzdEludGVncmF0
aW9uLmNwcCBcCisKK21hYyB7CisgICAgTElCUyArPSAtZnJhbWV3b3JrIEZvdW5kYXRpb24KKyAg
ICBPQkpFQ1RJVkVfSEVBREVSUyArPSBtYWMvVGVzdEZvbnREYXRhYmFzZS5oCisgICAgT0JKRUNU
SVZFX1NPVVJDRVMgKz0gXAorICAgICAgICBtYWMvVGVzdEZvbnREYXRhYmFzZS5tbSBcCisgICAg
ICAgIG1hYy9UZXN0SW50ZWdyYXRpb25NYWMubW0gXAorfQorCitRTUFLRV9MRkxBR1MgKz0gLVds
LC0tbm8tdW5kZWZpbmVkCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9U
ZXN0SW50ZWdyYXRpb24uY3BwIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVzdEludGVn
cmF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNDMwYzZhNDg1MWJiYmJmNzI3YmE1MjhlMDQ0NzU3NDll
ODg4ZWQxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVz
dEludGVncmF0aW9uLmNwcApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJUZXN0SW50ZWdyYXRpb24uaCIKKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgor
I2luY2x1ZGUgPFFTdHJpbmdMaXN0PgorI2luY2x1ZGUgPFF0R2xvYmFsPgorI2luY2x1ZGUgPFF0
R3VpL3ByaXZhdGUvcXBsYXRmb3JtaW50ZWdyYXRpb25mYWN0b3J5X3FwYV9wLmg+CisjaW5jbHVk
ZSA8cXN5c3RlbWRldGVjdGlvbi5oPgorCitUZXN0SW50ZWdyYXRpb246OlRlc3RJbnRlZ3JhdGlv
bigpCit7CisgICAgUVN0cmluZyBkZWZhdWx0UGxhdGZvcm0gPQorI2lmIGRlZmluZWQoUV9PU19N
QUMpCisgICAgICAgIFFMYXRpbjFTdHJpbmcoImNvY29hIik7CisjZWxpZiBkZWZpbmVkIChRX09T
X1dJTikKKyAgICAgICAgUUxhdGluMVN0cmluZygid2luZG93cyIpOworI2VsaWYgIWRlZmluZWQg
KFFUX05PX1hDQikKKyAgICAgICAgUUxhdGluMVN0cmluZygieGNiIik7CisjZWxpZiAhZGVmaW5l
ZCAoUVRfTk9fV0FZTEFORCkKKyAgICAgICAgUUxhdGluMVN0cmluZygid2F5bGFuZCIpOworI2Vs
c2UKKyAgICAgICAgUUxhdGluMVN0cmluZygibWluaW1hbCIpOworI2VuZGlmCisKKyAgICBRQnl0
ZUFycmF5IG9yaWdpbmFsUGxhdGZvcm0gPSBxZ2V0ZW52KCJRVF9XRUJLSVRfT1JJR0lOQUxfUExB
VEZPUk0iKTsKKyAgICBRQnl0ZUFycmF5IG9yaWdpbmFsUGx1Z2luUGF0aCA9IHFnZXRlbnYoIlFU
X1dFQktJVF9PUklHSU5BTF9QTEFURk9STV9QTFVHSU5fUEFUSCIpOworICAgIFFTdHJpbmcgcGxh
dGZvcm0gPSBvcmlnaW5hbFBsYXRmb3JtLmlzRW1wdHkoKSA/IGRlZmF1bHRQbGF0Zm9ybSA6IFFT
dHJpbmc6OmZyb21MYXRpbjEob3JpZ2luYWxQbGF0Zm9ybS5kYXRhKCkpOworICAgIFFTdHJpbmcg
cGx1Z2luUGF0aCA9IG9yaWdpbmFsUGx1Z2luUGF0aC5pc0VtcHR5KCkgPyBRU3RyaW5nKCkgOiBR
U3RyaW5nOjpmcm9tTGF0aW4xKG9yaWdpbmFsUGx1Z2luUGF0aC5kYXRhKCkpOworCisgICAgbV9p
bnRlZ3JhdGlvbi5yZXNldChRUGxhdGZvcm1JbnRlZ3JhdGlvbkZhY3Rvcnk6OmNyZWF0ZShwbGF0
Zm9ybSwgcGx1Z2luUGF0aCkpOworfQorCisjaWYgIWRlZmluZWQoUV9PU19NQUMpCitRUGxhdGZv
cm1Gb250RGF0YWJhc2UqIFRlc3RJbnRlZ3JhdGlvbjo6Zm9udERhdGFiYXNlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Zm9udERhdGFiYXNlKCk7Cit9CisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5oIGIv
VG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVzdEludGVncmF0aW9uLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWU0OGUxNWMxMjAzY2FiNGRjMDljYmQyODliOWE1NjhkOTExNjcyOAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5oCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXN0SW50ZWdyYXRpb25faAor
I2RlZmluZSBUZXN0SW50ZWdyYXRpb25faAorCisjaW5jbHVkZSA8UVBsYXRmb3JtRm9udERhdGFi
YXNlPgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uPgorI2luY2x1ZGUgPFFQbGF0Zm9y
bVNjcmVlbj4KKworY2xhc3MgVGVzdEludGVncmF0aW9uIDogcHVibGljIFFQbGF0Zm9ybUludGVn
cmF0aW9uIHsKK3B1YmxpYzoKKyAgICBUZXN0SW50ZWdyYXRpb24oKTsKK3ByaXZhdGU6CisgICAg
dmlydHVhbCBRUGxhdGZvcm1Gb250RGF0YWJhc2UgKmZvbnREYXRhYmFzZSgpIGNvbnN0OworCisg
ICAgLy8gUmVkaXJlY3RpbmcgZXZlcnl0aGluZyBlbHNlLgorICAgIHZpcnR1YWwgYm9vbCBoYXND
YXBhYmlsaXR5KENhcGFiaWxpdHkgY2FwKSB7IHJldHVybiBtX2ludGVncmF0aW9uLT5oYXNDYXBh
YmlsaXR5KGNhcCk7IH0KKyAgICB2aXJ0dWFsIFFQbGF0Zm9ybVBpeG1hcCogY3JlYXRlUGxhdGZv
cm1QaXhtYXAoUVBsYXRmb3JtUGl4bWFwOjpQaXhlbFR5cGUgdHlwZSkgY29uc3QgeyByZXR1cm4g
bV9pbnRlZ3JhdGlvbi0+Y3JlYXRlUGxhdGZvcm1QaXhtYXAodHlwZSk7IH0KKyAgICB2aXJ0dWFs
IFFQbGF0Zm9ybVdpbmRvdyogY3JlYXRlUGxhdGZvcm1XaW5kb3coUVdpbmRvdyAqd2luZG93KSBj
b25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5jcmVhdGVQbGF0Zm9ybVdpbmRvdyh3aW5kb3cp
OyB9CisgICAgdmlydHVhbCBRUGxhdGZvcm1CYWNraW5nU3RvcmUqIGNyZWF0ZVBsYXRmb3JtQmFj
a2luZ1N0b3JlKFFXaW5kb3cgKndpbmRvdykgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+
Y3JlYXRlUGxhdGZvcm1CYWNraW5nU3RvcmUod2luZG93KTsgfQorI2lmbmRlZiBRVF9OT19PUEVO
R0wKKyAgICB2aXJ0dWFsIFFQbGF0Zm9ybU9wZW5HTENvbnRleHQqIGNyZWF0ZVBsYXRmb3JtT3Bl
bkdMQ29udGV4dChRT3BlbkdMQ29udGV4dCAqY29udGV4dCkgY29uc3QgeyByZXR1cm4gbV9pbnRl
Z3JhdGlvbi0+Y3JlYXRlUGxhdGZvcm1PcGVuR0xDb250ZXh0KGNvbnRleHQpOyB9CisjZW5kaWYK
KyAgICB2aXJ0dWFsIFFQbGF0Zm9ybVNoYXJlZEdyYXBoaWNzQ2FjaGUqIGNyZWF0ZVBsYXRmb3Jt
U2hhcmVkR3JhcGhpY3NDYWNoZShjb25zdCBjaGFyICpjYWNoZUlkKSBjb25zdCB7IHJldHVybiBt
X2ludGVncmF0aW9uLT5jcmVhdGVQbGF0Zm9ybVNoYXJlZEdyYXBoaWNzQ2FjaGUoY2FjaGVJZCk7
IH0KKyAgICB2aXJ0dWFsIFFBYnN0cmFjdEV2ZW50RGlzcGF0Y2hlciogZ3VpVGhyZWFkRXZlbnRE
aXNwYXRjaGVyKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Z3VpVGhyZWFkRXZlbnRE
aXNwYXRjaGVyKCk7IH0KKyNpZm5kZWYgUVRfTk9fQ0xJUEJPQVJECisgICAgdmlydHVhbCBRUGxh
dGZvcm1DbGlwYm9hcmQqIGNsaXBib2FyZCgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24t
PmNsaXBib2FyZCgpOyB9CisjZW5kaWYKKyNpZm5kZWYgUVRfTk9fRFJBR0FORERST1AKKyAgICB2
aXJ0dWFsIFFQbGF0Zm9ybURyYWcqIGRyYWcoKSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9u
LT5kcmFnKCk7IH0KKyNlbmRpZgorICAgIHZpcnR1YWwgUVBsYXRmb3JtSW5wdXRDb250ZXh0KiBp
bnB1dENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5pbnB1dENvbnRleHQo
KTsgfQorICAgIHZpcnR1YWwgUVBsYXRmb3JtQWNjZXNzaWJpbGl0eSogYWNjZXNzaWJpbGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24tPmFjY2Vzc2liaWxpdHkoKTsgfQorICAgIHZp
cnR1YWwgUVBsYXRmb3JtTmF0aXZlSW50ZXJmYWNlKiBuYXRpdmVJbnRlcmZhY2UoKSBjb25zdCB7
IHJldHVybiBtX2ludGVncmF0aW9uLT5uYXRpdmVJbnRlcmZhY2UoKTsgfQorICAgIHZpcnR1YWwg
UVBsYXRmb3JtU2VydmljZXMqIHNlcnZpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlv
bi0+c2VydmljZXMoKTsgfQorICAgIHZpcnR1YWwgUVZhcmlhbnQgc3R5bGVIaW50KFN0eWxlSGlu
dCBoaW50KSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5zdHlsZUhpbnQoaGludCk7IH0K
KyAgICB2aXJ0dWFsIFFQbGF0Zm9ybVRoZW1lKiBjcmVhdGVQbGF0Zm9ybVRoZW1lKGNvbnN0IFFT
dHJpbmcmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24tPmNyZWF0ZVBsYXRmb3Jt
VGhlbWUobmFtZSk7IH0KKworICAgIFFTY29wZWRQb2ludGVyPFFQbGF0Zm9ybUludGVncmF0aW9u
PiBtX2ludGVncmF0aW9uOworI2lmIGRlZmluZWQoUV9PU19NQUMpCisgICAgbXV0YWJsZSBRU2Nv
cGVkUG9pbnRlcjxRUGxhdGZvcm1Gb250RGF0YWJhc2U+IG1fZm9udERhdGFiYXNlOworI2VuZGlm
Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21h
Yy9UZXN0Rm9udERhdGFiYXNlLmggYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVz
dEZvbnREYXRhYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEwOGFlNTJiYzdmOGI3YTYyYTM2NDljM2JjNDhm
NjYzMzg5Zjg3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdp
bi9tYWMvVGVzdEZvbnREYXRhYmFzZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
LgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2Fn
ZQorICogVGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIFBsZWFzZSByZXZpZXcgdGhlIGZv
bGxvd2luZyBpbmZvcm1hdGlvbiB0byBlbnN1cmUgdGhlIEdOVSBMZXNzZXIKKyAqIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgcmVxdWlyZW1lbnRzIHdpbGwgYmUgbWV0OgorICog
aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL29sZC1saWNlbnNlcy9sZ3BsLTIuMS5odG1sLgor
ICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisgKiBBbHRlcm5hdGl2ZWx5
LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh
bAorICogUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5m
b3JtYXRpb24gdG8gZW5zdXJlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVy
c2lvbiAzLjAgcmVxdWlyZW1lbnRzIHdpbGwgYmUgbWV0OgorICogaHR0cDovL3d3dy5nbnUub3Jn
L2NvcHlsZWZ0L2dwbC5odG1sLgorICoKKyAqLworCisjaWZuZGVmIFRlc3RGb250RGF0YWJhc2Vf
aAorI2RlZmluZSBUZXN0Rm9udERhdGFiYXNlX2gKKworI2luY2x1ZGUgPFFGb250PgorI2luY2x1
ZGUgPFF0UGxhdGZvcm1TdXBwb3J0L3ByaXZhdGUvcWNvcmV0ZXh0Zm9udGRhdGFiYXNlX3AuaD4K
KworY2xhc3MgVGVzdEZvbnREYXRhYmFzZSA6IHB1YmxpYyBRQ29yZVRleHRGb250RGF0YWJhc2Ug
eworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVGb250RGF0YWJhc2UoKTsKKyAg
ICB2aXJ0dWFsIFFGb250IGRlZmF1bHRGb250KCkgY29uc3Q7Cit9OworCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLm1t
IGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RGb250RGF0YWJhc2UubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWIyNjdmZTk3Y2ZkZTNkOTQ4MjRiYmM1ODY0OTFhMDZiODk1ZTAwMwotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFi
YXNlLm1tCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKyAqIFRoaXMgZmlsZSBt
YXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24uCisgKiBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRp
b24gdG8gZW5zdXJlIHRoZSBHTlUgTGVzc2VyCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl
cnNpb24gMi4xIHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldDoKKyAqIGh0dHA6Ly93d3cuZ251Lm9y
Zy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKyAqCisgKiBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBVc2FnZQorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBi
ZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNl
bnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLgorICogUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvIGVuc3Vy
ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMy4wIHJlcXVpcmVt
ZW50cyB3aWxsIGJlIG1ldDoKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRt
bC4KKyAqCisgKi8KKworI2luY2x1ZGUgIlRlc3RGb250RGF0YWJhc2UuaCIKKyNpbmNsdWRlIDxR
dENvcmUvUURpcj4KKyNpbmNsdWRlIDxRdENvcmUvUUZpbGVJbmZvPgorI2luY2x1ZGUgPFF0Q29y
ZS9wcml2YXRlL3Fjb3JlX21hY19wLmg+CisjaW5jbHVkZSA8UXRQbGF0Zm9ybVN1cHBvcnQvcHJp
dmF0ZS9xZm9udGVuZ2luZV9jb3JldGV4dF9wLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKworLy8gRnJvbSBRdC4KK3N0YXRpYyBjb25zdCBjaGFyICpsYW5ndWFnZUZvcldy
aXRpbmdTeXN0ZW1bXSA9IHsKKyAgICAwLCAgICAgLy8gQW55CisgICAgImVuIiwgIC8vIExhdGlu
CisgICAgImVsIiwgIC8vIEdyZWVrCisgICAgInJ1IiwgIC8vIEN5cmlsbGljCisgICAgImh5Iiwg
IC8vIEFybWVuaWFuCisgICAgImhlIiwgIC8vIEhlYnJldworICAgICJhciIsICAvLyBBcmFiaWMK
KyAgICAic3lyIiwgLy8gU3lyaWFjCisgICAgImRpdiIsIC8vIFRoYWFuYQorICAgICJoaSIsICAv
LyBEZXZhbmFnYXJpCisgICAgImJuIiwgIC8vIEJlbmdhbGkKKyAgICAicGEiLCAgLy8gR3VybXVr
aGkKKyAgICAiZ3UiLCAgLy8gR3VqYXJhdGkKKyAgICAib3IiLCAgLy8gT3JpeWEKKyAgICAidGEi
LCAgLy8gVGFtaWwKKyAgICAidGUiLCAgLy8gVGVsdWd1CisgICAgImtuIiwgIC8vIEthbm5hZGEK
KyAgICAibWwiLCAgLy8gTWFsYXlhbGFtCisgICAgInNpIiwgIC8vIFNpbmhhbGEKKyAgICAidGgi
LCAgLy8gVGhhaQorICAgICJsbyIsICAvLyBMYW8KKyAgICAiYm8iLCAgLy8gVGliZXRhbgorICAg
ICJteSIsICAvLyBNeWFubWFyCisgICAgImthIiwgIC8vIEdlb3JnaWFuCisgICAgImttIiwgIC8v
IEtobWVyCisgICAgInpoLWNuIiwgLy8gU2ltcGxpZmllZENoaW5lc2UKKyAgICAiemgtdHciLCAv
LyBUcmFkaXRpb25hbENoaW5lc2UKKyAgICAiamEiLCAgLy8gSmFwYW5lc2UKKyAgICAia28iLCAg
Ly8gS29yZWFuCisgICAgInZpIiwgIC8vIFZpZXRuYW1lc2UKKyAgICAwLCAvLyBTeW1ib2wKKyAg
ICAwLCAvLyBPZ2hhbQorICAgIDAsIC8vIFJ1bmljCisgICAgMCAvLyBOJ0tvCit9OworZW51bSB7
IExhbmd1YWdlQ291bnQgPSBzaXplb2YobGFuZ3VhZ2VGb3JXcml0aW5nU3lzdGVtKSAvIHNpemVv
Zihjb25zdCBjaGFyKikgfTsKKworUUZvbnQgVGVzdEZvbnREYXRhYmFzZTo6ZGVmYXVsdEZvbnQo
KSBjb25zdAoreworICAgIHJldHVybiBRRm9udChRU3RyaW5nTGl0ZXJhbCgiTmltYnVzIFNhbnMg
TCIpKTsKK30KKwordm9pZCBUZXN0Rm9udERhdGFiYXNlOjpwb3B1bGF0ZUZvbnREYXRhYmFzZSgp
Cit7CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBzZXQgb2YgZGVmYXVsdCBzeXN0ZW0gZm9udHMgaW4g
b3JkZXIgdG8gZmlsdGVyIHRoZW0gb3V0LgorICAgIFFDRlR5cGU8Q1RGb250Q29sbGVjdGlvblJl
Zj4gc3lzdGVtQ29sbGVjdGlvbihDVEZvbnRDb2xsZWN0aW9uQ3JlYXRlRnJvbUF2YWlsYWJsZUZv
bnRzKDApKTsKKyAgICBRQ0ZUeXBlPENGQXJyYXlSZWY+IHN5c3RlbUZvbnRzID0gc3lzdGVtQ29s
bGVjdGlvbiA/IENURm9udENvbGxlY3Rpb25DcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlwdG9ycyhz
eXN0ZW1Db2xsZWN0aW9uKSA6IDA7CisgICAgaWYgKCFzeXN0ZW1Gb250cykKKyAgICAgICAgcUZh
dGFsKCJDYW5ub3QgZ2V0IHN5c3RlbSBmb250c1xuIik7CisKKyAgICBRQnl0ZUFycmF5IHRlc3RG
b250c1ZhciA9IGdldGVudigiV0VCS0lUX1RFU1RGT05UUyIpOworICAgIFFEaXIgZm9udHNEaXIo
UVN0cmluZzo6ZnJvbUxhdGluMSh0ZXN0Rm9udHNWYXIpKTsKKyAgICBpZiAodGVzdEZvbnRzVmFy
LmlzRW1wdHkoKSB8fCAhZm9udHNEaXIuZXhpc3RzKCkpIHsKKyAgICAgICAgcUZhdGFsKCJcblxu
IgorICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAgICAgICAgIlFD
b3JlVGV4dEZvbnREYXRhYmFzZVdLVGVzdDpcbiIKKyAgICAgICAgICAgICAgICAiV0VCS0lUX1RF
U1RGT05UUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IGNvcnJlY3RseS5cbiIKKyAg
ICAgICAgICAgICAgICAiVGhpcyB2YXJpYWJsZSBoYXMgdG8gcG9pbnQgdG8gdGhlIGRpcmVjdG9y
eSBjb250YWluaW5nIHRoZSBmb250c1xuIgorICAgICAgICAgICAgICAgICJ5b3UgY2FuIGNsb25l
IGZyb20gZ2l0Oi8vZ2l0b3Jpb3VzLm9yZy9xdHdlYmtpdC90ZXN0Zm9udHMuZ2l0XG4iCisgICAg
ICAgICAgICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgICAgICAgICk7CisgICAgfQor
CisgICAgUUNGVHlwZTxDRk11dGFibGVTZXRSZWY+IHN5c3RlbUZvbnRTZXQoQ0ZTZXRDcmVhdGVN
dXRhYmxlKDAsIDAsICZrQ0ZUeXBlU2V0Q2FsbEJhY2tzKSk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBDRkFycmF5R2V0Q291bnQoc3lzdGVtRm9udHMpOyArK2kpIHsKKyAgICAgICAgQ1RGb250
RGVzY3JpcHRvclJlZiBmb250ID0gc3RhdGljX2Nhc3Q8Q1RGb250RGVzY3JpcHRvclJlZj4oQ0ZB
cnJheUdldFZhbHVlQXRJbmRleChzeXN0ZW1Gb250cywgaSkpOworICAgICAgICBDRlNldEFkZFZh
bHVlKHN5c3RlbUZvbnRTZXQsIGZvbnQpOworICAgIH0KKworICAgIC8vIEFkZCB0aGUgdGVzdCBm
b250cyB0byB0aGUgc2V0LgorICAgIFFTdHJpbmdMaXN0IGZpbHRlcnM7CisgICAgZmlsdGVycyA8
PCBRU3RyaW5nTGl0ZXJhbCgiKi50dGYiKTsKKyAgICBRRmlsZUluZm9MaXN0IGZpbGVzID0gZm9u
dHNEaXIuZW50cnlJbmZvTGlzdChmaWx0ZXJzLCBRRGlyOjpGaWxlcyk7CisgICAgZm9yZWFjaCAo
UUZpbGVJbmZvIGZpbGUsIGZpbGVzKSB7CisgICAgICAgIFFCeXRlQXJyYXkgcGF0aCA9IFFGaWxl
OjplbmNvZGVOYW1lKGZpbGUuY2Fub25pY2FsRmlsZVBhdGgoKSk7CisgICAgICAgIFFDRlR5cGU8
Q0ZVUkxSZWY+IGZvbnRGaWxlKENGVVJMQ3JlYXRlRnJvbUZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bigwLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4ocGF0aC5jb25zdERhdGEoKSksIHBh
dGgubGVuZ3RoKCksIGZhbHNlKSk7CisgICAgICAgIENGRXJyb3JSZWYgZXJyb3I7CisgICAgICAg
IGlmICghQ1RGb250TWFuYWdlclJlZ2lzdGVyRm9udHNGb3JVUkwoZm9udEZpbGUsIGtDVEZvbnRN
YW5hZ2VyU2NvcGVQcm9jZXNzLCAmZXJyb3IpKSB7CisgICAgICAgICAgICBDRlJlbGVhc2UoZXJy
b3IpOworICAgICAgICAgICAgcUZhdGFsKCJGYWlsZWQgcmVnaXN0ZXJpbmcgZm9udCBmaWxlOiAl
c1xuIiwgcGF0aC5jb25zdERhdGEoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlz
IHN1YnN0aXR1dGlvbiBpcyBkb25lIHZpYSBmb250cy5jb25mIG9uIExpbnV4LgorICAgIFFGb250
OjppbnNlcnRTdWJzdGl0dXRpb24oUVN0cmluZ0xpdGVyYWwoIkhlbHZldGljYSIpLCBRU3RyaW5n
Ojpmcm9tTGF0aW4xKGRlZmF1bHRXZWJLaXRUZXN0Rm9udEZhbWlseSkpOworCisgICAgLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFRoaXMgaXMgYSBjb3B5IG9mIFFDb3JldGV4dEZvbnRE
YXRhYmFzZTo6cG9wdWxhdGVGb250RGF0YWJhc2UgZnJvbSBRdCBleGNlcHQKKyAgICAvLyB3ZSBm
aWx0ZXIgb3V0IHRoZSBzeXN0ZW0gZm9udHMuCisKKyAgICBRQ0ZUeXBlPENURm9udENvbGxlY3Rp
b25SZWY+IGNvbGxlY3Rpb24gPSBDVEZvbnRDb2xsZWN0aW9uQ3JlYXRlRnJvbUF2YWlsYWJsZUZv
bnRzKDApOworICAgIFFDRlR5cGU8Q0ZBcnJheVJlZj4gZm9udHMgPSBDVEZvbnRDb2xsZWN0aW9u
Q3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRvcnMoY29sbGVjdGlvbik7CisKKyAgICBRU3RyaW5n
IGZvdW5kcnlOYW1lID0gUUxhdGluMVN0cmluZygiQ29yZVRleHQiKTsKKyAgICBjb25zdCBpbnQg
bnVtRm9udHMgPSBDRkFycmF5R2V0Q291bnQoZm9udHMpOworICAgIFFIYXNoPFFTdHJpbmcsIFFT
dHJpbmc+IHBzTmFtZVRvRmFtaWx5OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRm9udHM7
ICsraSkgeworICAgICAgICBDVEZvbnREZXNjcmlwdG9yUmVmIGZvbnQgPSBzdGF0aWNfY2FzdDxD
VEZvbnREZXNjcmlwdG9yUmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZvbnRzLCBpKSk7Cisg
ICAgICAgIGlmIChDRlNldEdldENvdW50T2ZWYWx1ZShzeXN0ZW1Gb250U2V0LCBmb250KSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBRQ0ZTdHJpbmcgZmFtaWx5TmFtZSA9IHN0YXRp
Y19jYXN0PENGU3RyaW5nUmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUxvY2FsaXplZEF0dHJpYnV0
ZShmb250LCBrQ1RGb250RmFtaWx5TmFtZUF0dHJpYnV0ZSwgTlVMTCkpOworICAgICAgICBRQ0ZU
eXBlPENGRGljdGlvbmFyeVJlZj4gc3R5bGVzID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVm
PihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LCBrQ1RGb250VHJhaXRzQXR0cmli
dXRlKSk7CisgICAgICAgIFFGb250OjpXZWlnaHQgd2VpZ2h0ID0gUUZvbnQ6Ok5vcm1hbDsKKyAg
ICAgICAgUUZvbnQ6OlN0eWxlIHN0eWxlID0gUUZvbnQ6OlN0eWxlTm9ybWFsOworICAgICAgICBR
Rm9udDo6U3RyZXRjaCBzdHJldGNoID0gUUZvbnQ6OlVuc3RyZXRjaGVkOworICAgICAgICBib29s
IGZpeGVkUGl0Y2ggPSBmYWxzZTsKKworICAgICAgICBpZiAoc3R5bGVzKSB7CisgICAgICAgICAg
ICBpZiAoQ0ZOdW1iZXJSZWYgd2VpZ2h0VmFsdWUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc3R5bGVzLCBrQ1RGb250V2VpZ2h0VHJhaXQpKSkgeworICAg
ICAgICAgICAgICAgIFFfQVNTRVJUKENGTnVtYmVySXNGbG9hdFR5cGUod2VpZ2h0VmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJH
ZXRWYWx1ZSh3ZWlnaHRWYWx1ZSwga0NGTnVtYmVyRG91YmxlVHlwZSwgJmQpKQorICAgICAgICAg
ICAgICAgICAgICB3ZWlnaHQgPSAoZCA+IDAuMCkgPyBRRm9udDo6Qm9sZCA6IFFGb250OjpOb3Jt
YWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgaXRhbGljID0g
c3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHN0eWxlcywga0NU
Rm9udFNsYW50VHJhaXQpKSkgeworICAgICAgICAgICAgICAgIFFfQVNTRVJUKENGTnVtYmVySXNG
bG9hdFR5cGUoaXRhbGljKSk7CisgICAgICAgICAgICAgICAgZG91YmxlIGQ7CisgICAgICAgICAg
ICAgICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoaXRhbGljLCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAm
ZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGQgPiAwLjApCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZSA9IFFGb250OjpTdHlsZUl0YWxpYzsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgc3ltYm9saWMgPSBzdGF0
aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc3R5bGVzLCBrQ1RGb250
U3ltYm9saWNUcmFpdCkpKSB7CisgICAgICAgICAgICAgICAgaW50IGQ7CisgICAgICAgICAgICAg
ICAgaWYgKENGTnVtYmVyR2V0VmFsdWUoc3ltYm9saWMsIGtDRk51bWJlclNJbnQzMlR5cGUsICZk
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZCAmIGtDVEZvbnRNb25vU3BhY2VUcmFpdCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkUGl0Y2ggPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBpZiAoZCAmIGtDVEZvbnRFeHBhbmRlZFRyYWl0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyZXRjaCA9IFFGb250OjpFeHBhbmRlZDsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoZCAmIGtDVEZvbnRDb25kZW5zZWRUcmFpdCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmV0Y2ggPSBRRm9udDo6Q29uZGVuc2VkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludCBwaXhlbFNpemUgPSAwOworICAgICAgICBp
ZiAoUUNGVHlwZTxDRk51bWJlclJlZj4gc2l6ZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihD
VEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LCBrQ1RGb250U2l6ZUF0dHJpYnV0ZSkp
KSB7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJJc0Zsb2F0VHlwZShzaXplKSkgeworICAgICAg
ICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUoc2l6
ZSwga0NGTnVtYmVyRG91YmxlVHlwZSwgJmQpOworICAgICAgICAgICAgICAgIHBpeGVsU2l6ZSA9
IGQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFs
dWUoc2l6ZSwga0NGTnVtYmVySW50VHlwZSwgJnBpeGVsU2l6ZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBRU3VwcG9ydGVkV3JpdGluZ1N5c3RlbXMgd3JpdGluZ1N5c3Rl
bXM7CisgICAgICAgIGlmIChRQ0ZUeXBlPENGQXJyYXlSZWY+IGxhbmd1YWdlcyA9IHN0YXRpY19j
YXN0PENGQXJyYXlSZWY+KENURm9udERlc2NyaXB0b3JDb3B5QXR0cmlidXRlKGZvbnQsIGtDVEZv
bnRMYW5ndWFnZXNBdHRyaWJ1dGUpKSkgeworICAgICAgICAgICAgQ0ZJbmRleCBsZW5ndGggPSBD
RkFycmF5R2V0Q291bnQobGFuZ3VhZ2VzKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgTGFuZ3VhZ2VDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFsYW5ndWFnZUZv
cldyaXRpbmdTeXN0ZW1baV0pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIFFDRlN0cmluZyBsYW5nID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZyhOVUxM
LCBsYW5ndWFnZUZvcldyaXRpbmdTeXN0ZW1baV0sIGtDRlN0cmluZ0VuY29kaW5nQVNDSUkpOwor
ICAgICAgICAgICAgICAgIGlmIChDRkFycmF5Q29udGFpbnNWYWx1ZShsYW5ndWFnZXMsIENGUmFu
Z2VNYWtlKDAsIGxlbmd0aCksIGxhbmcpKQorICAgICAgICAgICAgICAgICAgICB3cml0aW5nU3lz
dGVtcy5zZXRTdXBwb3J0ZWQoUUZvbnREYXRhYmFzZTo6V3JpdGluZ1N5c3RlbShpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBDRlJldGFpbihmb250KTsKKyAgICAgICAg
UVBsYXRmb3JtRm9udERhdGFiYXNlOjpyZWdpc3RlckZvbnQoZmFtaWx5TmFtZSwgZm91bmRyeU5h
bWUsIHdlaWdodCwgc3R5bGUsIHN0cmV0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRydWUgLyogYW50aWFsaWFzZWQgKi8sIHRydWUgLyogc2NhbGFibGUg
Ki8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsU2l6
ZSwgZml4ZWRQaXRjaCwgd3JpdGluZ1N5c3RlbXMsICh2b2lkICopIGZvbnQpOworICAgICAgICBD
RlN0cmluZ1JlZiBwc05hbWUgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ1RGb250RGVzY3Jp
cHRvckNvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udE5hbWVBdHRyaWJ1dGUpKTsKKyAgICAgICAg
Ly8gd2UgbmVlZCBQb3N0U2NyaXB0IE5hbWUgdG8gZmFtaWx5IG5hbWUgbWFwcGluZyBmb3IgZmFs
bGJhY2sgbGlzdCBjb25zdHJ1Y3Rpb24KKyAgICAgICAgcHNOYW1lVG9GYW1pbHlbUUNGU3RyaW5n
Ojp0b1FTdHJpbmcoKE5TU3RyaW5nICopIHBzTmFtZSldID0gZmFtaWx5TmFtZTsKKyAgICAgICAg
Q0ZSZWxlYXNlKHBzTmFtZSk7CisgICAgfQorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK30K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0SW50ZWdyYXRp
b25NYWMubW0gYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEludGVncmF0aW9u
TWFjLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYzNzg2YzkwY2VhOGU5ZTYyODFiMDVjYWU1YTZkM2UwNjU2Nzgx
ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVz
dEludGVncmF0aW9uTWFjLm1tCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdF
RCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgIi4uL1Rlc3RJbnRlZ3JhdGlvbi5oIgorI2luY2x1ZGUgIlRlc3RGb250RGF0YWJh
c2UuaCIKKworUVBsYXRmb3JtRm9udERhdGFiYXNlKiBUZXN0SW50ZWdyYXRpb246OmZvbnREYXRh
YmFzZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2ZvbnREYXRhYmFzZSkKKyAgICAgICAgbV9mb250
RGF0YWJhc2UucmVzZXQobmV3IFRlc3RGb250RGF0YWJhc2UpOworICAgIHJldHVybiBtX2ZvbnRE
YXRhYmFzZS5kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdp
bi9tYWluLmNwcCBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21haW4uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRmNTc3ZjQ2NzU1YjViZDRlNzM1MzdhZjVlNDljY2E1NjY2N2VmMzQKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWluLmNwcApAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9m
IFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgVXNhZ2UKKyAqIFRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lv
biAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBQ
bGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8gZW5zdXJlIHRoZSBHTlUg
TGVzc2VyCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50
cyB3aWxsIGJlIG1ldDoKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5z
ZXMvbGdwbC0yLjEuaHRtbC4KKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2Fn
ZQorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogUGxlYXNlIHJldmll
dyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvIGVuc3VyZSB0aGUgR05VIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIHZlcnNpb24gMy4wIHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldDoKKyAq
IGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbC4KKyAqCisgKi8KKworI2luY2x1
ZGUgIlRlc3RJbnRlZ3JhdGlvbi5oIgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uUGx1
Z2luPgorI2luY2x1ZGUgPFF0R2xvYmFsPgorCitjbGFzcyBRX0RFQ0xfRVhQT1JUIFRlc3RJbnRl
Z3JhdGlvblBsdWdpbiA6IHB1YmxpYyBRUGxhdGZvcm1JbnRlZ3JhdGlvblBsdWdpbiB7CisgICAg
UV9PQkpFQ1QKKyAgICBRX1BMVUdJTl9NRVRBREFUQShJSUQgIm9yZy5xdC1wcm9qZWN0LlF0LlFQ
bGF0Zm9ybUludGVncmF0aW9uRmFjdG9yeUludGVyZmFjZSIgRklMRSAidGVzdHBsYXRmb3JtLmpz
b24iKQorcHVibGljOgorICAgIFFTdHJpbmdMaXN0IGtleXMoKSBjb25zdDsKKyAgICBRUGxhdGZv
cm1JbnRlZ3JhdGlvbiogY3JlYXRlKGNvbnN0IFFTdHJpbmcmLCBjb25zdCBRU3RyaW5nTGlzdCYp
OworCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOworfTsKKworUVN0cmluZ0xpc3QgVGVz
dEludGVncmF0aW9uUGx1Z2luOjprZXlzKCkgY29uc3QKK3sKKyAgICBRU3RyaW5nTGlzdCBsaXN0
OworICAgIGxpc3QgPDwgUVN0cmluZ0xpdGVyYWwoInRlc3RwbGF0Zm9ybSIpOworICAgIHJldHVy
biBsaXN0OworfQorCitRUGxhdGZvcm1JbnRlZ3JhdGlvbiogVGVzdEludGVncmF0aW9uUGx1Z2lu
OjpjcmVhdGUoY29uc3QgUVN0cmluZyYgc3lzdGVtLCBjb25zdCBRU3RyaW5nTGlzdCYgcGFyYW1l
dGVycykKK3sKKyAgICBpZiAoIXN5c3RlbS5jb21wYXJlKFFTdHJpbmdMaXRlcmFsKCJ0ZXN0cGxh
dGZvcm0iKSwgUXQ6OkNhc2VJbnNlbnNpdGl2ZSkpCisgICAgICAgIHJldHVybiBuZXcgVGVzdElu
dGVncmF0aW9uKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworI2luY2x1ZGUgIm1haW4ubW9jIgor
Cit2b2lkIFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6aW5pdGlhbGl6ZSgpCit7CisgICAgUVN0YXRp
Y1BsdWdpbiBwbHVnaW47CisgICAgcGx1Z2luLmluc3RhbmNlID0gJnF0X3BsdWdpbl9pbnN0YW5j
ZTsKKyAgICBwbHVnaW4ubWV0YURhdGEgPSAmcXRfcGx1Z2luX3F1ZXJ5X21ldGFkYXRhOworICAg
IHFSZWdpc3RlclN0YXRpY1BsdWdpbkZ1bmN0aW9uKHBsdWdpbik7Cit9CisKK3N0YXRpYyB2b2lk
IGNvbnN0cnVjdG9yRnVuY3Rpb24oKQoreworICAgIFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6aW5p
dGlhbGl6ZSgpOworfQorCitRX0NPTlNUUlVDVE9SX0ZVTkNUSU9OKGNvbnN0cnVjdG9yRnVuY3Rp
b24pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vdGVzdHBsYXRmb3Jt
Lmpzb24gYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi90ZXN0cGxhdGZvcm0uanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44MzBiYjYyYjBhNWU4YjQxOWM3YmIzOGEwYTMzYTBmMzVmZDA3NDliCi0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vdGVzdHBsYXRmb3JtLmpzb24K
QEAgLTAsMCArMSwzIEBACit7CisgICAgIktleXMiOiBbICJ0ZXN0cGxhdGZvcm0iIF0KK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rvb2xzLnBybyBiL1Rvb2xzL1Rvb2xzLnBybwppbmRleCBmOGFhMjcz
NTMzZjE4NTQwNWY1ODYwZDdkMDM5ZTJiMmYzMTU5NzMxLi5jYzRlZDRmOGRmZDRhYzgzNzNmMzJj
NzIyNjBiMGVjNWM2MmUyNTIzIDEwMDY0NAotLS0gYS9Ub29scy9Ub29scy5wcm8KKysrIGIvVG9v
bHMvVG9vbHMucHJvCkBAIC0xMyw2ICsxMyw4IEBAIFNVQkRJUlMgKz0gUXRUZXN0QnJvd3Nlci9R
dFRlc3RCcm93c2VyLnBybwogU1VCRElSUyArPSBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZS5wcm8KIFNVQkRJUlMgKz0gRHVtcFJlbmRlclRyZWUvcXQvSW1hZ2VEaWZmLnBybwogCito
YXZlUXQoNSk6IFNVQkRJUlMgKz0gUXRUZXN0UGxhdGZvcm1QbHVnaW4vUXRUZXN0UGxhdGZvcm1Q
bHVnaW4ucHJvCisKICFub193ZWJraXQyIHsKICAgICBTVUJESVJTICs9IE1pbmlCcm93c2VyL3F0
L01pbmlCcm93c2VyLnBybyBcCiAgICAgICAgICAgICAgICBXZWJLaXRUZXN0UnVubmVyL1dlYktp
dFRlc3RSdW5uZXIucHJvCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rhcmdl
dC5wcmkgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmkKaW5kZXggYjllN2E4YmRk
ODAyOGFhOTY3ZDU3Y2E2OGE1OTM0NWU4NjUxMTlmZi4uZDM5MzhkY2U3ODMxYzBjN2IxMTQ1NDFl
YzJkYmE5ODhkMzIzNTc0OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJn
ZXQucHJpCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaQpAQCAtMzcsNCAr
MzcsOSBAQCBQUkVGSVhfSEVBREVSID0gV2ViS2l0VGVzdFJ1bm5lclByZWZpeC5oCiAqLWcrKyo6
UU1BS0VfQ1hYRkxBR1MgKz0gIi1pbmNsdWRlICQkUFJFRklYX0hFQURFUiIKICotY2xhbmcqOlFN
QUtFX0NYWEZMQUdTICs9ICItaW5jbHVkZSAkJFBSRUZJWF9IRUFERVIiCiAKK21hYzogTElCX1NV
RkZJWD0uZHlsaWIKK3dpbjogTElCX1NVRkZJWD0uZGxsCit1bml4OiFtYWM6IExJQl9TVUZGSVg9
LnNvCitERUZJTkVTICs9IFRFU1RfUExBVEZPUk1fUExVR0lOX1BBVEg9XCJcXFwiJCR7Uk9PVF9C
VUlMRF9ESVJ9JCR7UU1BS0VfRElSX1NFUH1saWIkJHtRTUFLRV9ESVJfU0VQfWxpYnRlc3RwbGF0
Zm9ybSQke0xJQl9TVUZGSVh9XFxcIlwiCisKIFJFU09VUkNFUyA9IHF0L1dlYktpdFRlc3RSdW5u
ZXIucXJjCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L21haW4uY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9tYWluLmNwcAppbmRleCBmOTU3MmE4N2UzNDU1NDcz
ZTg1ZTJlYTQ2NzI0OTUwY2I3ZjFkOGJhLi5hM2RhMDFhNDY5YjFhNTFlMzliYjljYzdlZDUwYjhh
NDU0YjY0NDY5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L21haW4uY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvbWFpbi5jcHAKQEAgLTk0LDYgKzk0LDIy
IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIAogICAgIHFwdXRlbnYoIlFUX1dF
QktJVF9USEVNRV9OQU1FIiwgInFzdHlsZSIpOwogCisgICAgUUJ5dGVBcnJheSBwbGF0Zm9ybSA9
IHFnZXRlbnYoIlFUX1FQQV9QTEFURk9STSIpOworICAgIFFCeXRlQXJyYXkgcGxhdGZvcm1QbHVn
aW5QYXRoID0gcWdldGVudigiUVRfUVBBX1BMQVRGT1JNX1BMVUdJTl9QQVRIIik7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBhcmdjOyArK2kpIHsKKyAgICAgICAgaWYgKFFCeXRlQXJyYXkoYXJn
dltpXSkgPT0gIi1wbGF0Zm9ybSIgJiYgaSArIDEgPCBhcmdjKQorICAgICAgICAgICAgcGxhdGZv
cm0gPSBhcmd2W2kgKyAxXTsKKyAgICAgICAgZWxzZSBpZiAoUUJ5dGVBcnJheShhcmd2W2ldKSA9
PSAiLXBsYXRmb3JtcGx1Z2lucGF0aCIgJiYgaSArIDEgPCBhcmdjKQorICAgICAgICAgICAgcGxh
dGZvcm1QbHVnaW5QYXRoID0gYXJndltpICsgMV07CisgICAgfQorICAgIGlmICghcGxhdGZvcm0u
aXNFbXB0eSgpKQorICAgICAgICBxcHV0ZW52KCJRVF9XRUJLSVRfT1JJR0lOQUxfUExBVEZPUk0i
LCBwbGF0Zm9ybSk7CisgICAgaWYgKCFwbGF0Zm9ybVBsdWdpblBhdGguaXNFbXB0eSgpKQorICAg
ICAgICBxcHV0ZW52KCJRVF9XRUJLSVRfT1JJR0lOQUxfUExBVEZPUk1fUExVR0lOX1BBVEgiLCBw
bGF0Zm9ybVBsdWdpblBhdGgpOworCisgICAgLy8gVGVsbCB0aGUgd2ViIHByb2Nlc3MgdGhhdCB3
ZSB3YW50IHRvIHVzZSB0aGUgdGVzdCBwbGF0Zm9ybSBwbHVnaW4uCisgICAgcXB1dGVudigiUVRf
V0VCS0lUMl9URVNUX1BMQVRGT1JNX1BMVUdJTl9QQVRIIiwgVEVTVF9QTEFURk9STV9QTFVHSU5f
UEFUSCk7CisKICAgICBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRGbGlja2FibGVWaWV3
cG9ydEVuYWJsZWQoZmFsc2UpOwogICAgIFFBcHBsaWNhdGlvbiBhcHAoYXJnYywgYXJndik7CiAg
ICAgTGF1bmNoZXIgbGF1bmNoZXIoYXJnYywgYXJndik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138349</attachid>
            <date>2012-04-23 07:54:51 -0700</date>
            <delta_ts>2012-05-07 04:50:44 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>bug-80996-20120423165449.patch</filename>
            <type>text/plain</type>
            <size>33719</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE0ODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDhjNjdlNmQzYTJiZTM2
YjQ5NmYyODRmYWY1MjU2ZTM3MmYwYWRmYi4uYzNjOTA2YmUzMGM1ODFjYmJhN2VjYjU3MmYwMzEy
ZTNhNTc1NDRhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA0LTIzICBCYWxh
enMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBbUXRdIEFkZCB0ZXN0
IHNwZWNpZmljIHBsYXRmb3JtIHBsdWdpbiB0byBhY2hpZXZlIHVuaWZpZWQgbGF5b3V0IHRlc3Qg
cmVzdWx0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODA5OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bml0aWFsaXplIHRoZSB0ZXN0IHBsYXRmb3JtIHBsdWdpbiBiZWZvcmUgaW5pdGlhbGl6aW5nCisg
ICAgICAgIHRoZSB3ZWIgcHJvY2VzcyBpZiB3ZSBhcmUgaW4gYSBXVFIgcnVuLgorICAgICAgICBJ
dCBpcyBuZWNlc3NhcnkgdG8gcGxhY2UgdGhpcyBpbml0aWFsaXphdGlvbiBoZXJlIGFzIHdlCisg
ICAgICAgIGNhbm5vdCBjb250cm9sIHdpY2ggcGxhdGZvcm0gcGx1Z2luIHdpbGwgYmUgdXNlZCBh
ZnRlcgorICAgICAgICB0aGUgaW5zdGFudGlhdGlvbiBvZiB0aGUgUUFwcGxpY2F0aW9uLgorCisg
ICAgICAgICogcXQvTWFpblF0LmNwcDoKKyAgICAgICAgKGluaXRpYWxpemVUZXN0UGxhdGZvcm1Q
bHVnaW5Gb3JXVFJJZlJlcXVpcmVkKToKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTA0LTIzICBa
YWxhbiBCdWp0YXMgIDx6YnVqdGFzQGdtYWlsLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gTW92
ZSBub24tYXBpIGNsYXNzZXMgdG8gV2ViS2l0IG5hbWVzcGFjZSBhdCBXZWJLaXQyL1VpUHJvY2Vz
cy9xdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvcXQvTWFpblF0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL3F0L01haW5RdC5jcHAKaW5kZXggZTc1MThkMzQwNGYyMjdkODZmZGY4NThkNDRmNmJm
NjQzODQ2ZjEzOC4uZTJhNDQ2NzlmMzlhM2FlOWQ2ZmFjNWQyNGZkNDM0YTg1ODBiM2M5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvcXQvTWFpblF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9xdC9NYWluUXQuY3BwCkBAIC0yNSw3ICsyNSwxMSBAQAogICovCiAKICNpbmNsdWRlIDxRQXBw
bGljYXRpb24+Ci0KKyNpbmNsdWRlIDxRQnl0ZUFycmF5PgorI2luY2x1ZGUgPFFGaWxlPgorI2lu
Y2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0aW9uPgorI2luY2x1ZGUgPFFQbGF0Zm9ybUludGVncmF0
aW9uUGx1Z2luPgorI2luY2x1ZGUgPFFQbHVnaW5Mb2FkZXI+CiAjaW5jbHVkZSA8c3RkaW8uaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00MywxMSArNDcsMjcgQEAgc3RhdGljIHZvaWQgbWVz
c2FnZUhhbmRsZXIoUXRNc2dUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiAgICAgLy8g
RG8gbm90aGluZwogfQogCitzdGF0aWMgdm9pZCBpbml0aWFsaXplVGVzdFBsYXRmb3JtUGx1Z2lu
Rm9yV1RSSWZSZXF1aXJlZCgpCit7CisgICAgUUJ5dGVBcnJheSBwbHVnaW5QYXRoID0gcWdldGVu
digiUVRfV0VCS0lUMl9URVNUX1BMQVRGT1JNX1BMVUdJTl9QQVRIIik7CisgICAgaWYgKHBsdWdp
blBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGx1Z2luTG9hZGVyIGxv
YWRlcihRRmlsZTo6ZGVjb2RlTmFtZShwbHVnaW5QYXRoLmRhdGEoKSkpOworICAgIFFQbGF0Zm9y
bUludGVncmF0aW9uUGx1Z2luKiBwbHVnaW4gPSBxb2JqZWN0X2Nhc3Q8UVBsYXRmb3JtSW50ZWdy
YXRpb25QbHVnaW4qPihsb2FkZXIuaW5zdGFuY2UoKSk7CisgICAgaWYgKCFwbHVnaW4pCisgICAg
ICAgIHFGYXRhbCgiY2Fubm90IGluaXRpYWxpemUgdGVzdCBwbGF0Zm9ybSBwbHVnaW5cbiIpOwor
CisgICAgcXB1dGVudigiUVRfUVBBX1BMQVRGT1JNX1BMVUdJTl9QQVRIIiwgcGx1Z2luUGF0aCk7
CisgICAgcXB1dGVudigiUVRfUVBBX1BMQVRGT1JNIiwgInRlc3RwbGF0Zm9ybSIpOworfQorCiAv
LyBUaGUgZnJhbWV3b3JrIGVudHJ5IHBvaW50LgogLy8gV2UgY2FsbCBvdXIgcGxhdGZvcm0gc3Bl
Y2lmaWMgZW50cnkgcG9pbnQgZGlyZWN0bHkgcmF0aGVyIHRoYW4gV2ViS2l0TWFpbiBiZWNhdXNl
IGl0IG1ha2VzIGxpdHRsZSBzZW5zZQogLy8gdG8gcmVpbXBsZW1lbnQgdGhlIGhhbmRsaW5nIG9m
IGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZnJvbSBRQXBwbGljYXRpb24uCiBpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiB7CisgICAgaW5pdGlhbGl6ZVRlc3RQbGF0Zm9ybVBsdWdpbkZv
cldUUklmUmVxdWlyZWQoKTsKICAgICBXZWJLaXQ6OmluaXRpYWxpemVXZWJLaXQyVGhlbWUoKTsK
IAogICAgIC8vIEhhcyB0byBiZSBkb25lIGJlZm9yZSBRQXBwbGljYXRpb24gaXMgY29uc3RydWN0
ZWQgaW4gY2FzZQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IGQyNDZiZjk0MmMxNGNkNzc1NTEzM2YyMDViZjMwOTdiZjIyOWE5ODIuLmIyOWY1YmQy
ZWJkOGU2MWRlYzcyM2JmMTcwOGFlZmNmZDFhNWQxZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAxMi0wNC0yMyAg
QmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1F0XSBBZGQg
dGVzdCBzcGVjaWZpYyBwbGF0Zm9ybSBwbHVnaW4gdG8gYWNoaWV2ZSB1bmlmaWVkIGxheW91dCB0
ZXN0IHJlc3VsdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgwOTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkZWQgUXRUZXN0UGxhdGZvcm1QbHVnaW4gYXMgYSBuZXcgcHJvamVjdCB1bmRlciBUb29s
cy4KKyAgICAgICAgVGhpcyBpcyBhIFF0NS1pc2ggcGxhdGZvcm0gcGx1Z2luIHRoYXQgY2FuIGJl
IHVzZWQgdG8gdHdlYWsgdGhlCisgICAgICAgIHBsYXRmb3JtIHN1cHBvcnQgaW50ZXJmYWNlcyBp
biBvcmRlciB0byB1bmlmeSBsYXlvdXQgdGVzdCByZXN1bHRzLgorICAgICAgICBGb3Igbm93IGl0
IG9ubHkgb3ZlcnJpZGVzIHRoZSBmb250IGRhdGFiYXNlIG9uIE1hYyBhbmQgcmVkaXJlY3RzCisg
ICAgICAgIGV2ZXJ5dGhpbmcgZWxzZSB0byB0aGUgcmVhbCBwbGF0Zm9ybSBwbHVnaW4uIFRoZSBm
b250IGRhdGFiYXNlIGl0CisgICAgICAgIHByb3ZpZGVzIG1pbWljcyB0aGUgd2F5IGhvdyB3ZSBz
ZXQgdXAgdGVzdCBmb250cyB3aXRoIGZvbnRjb25maWcgb24gTGludXguCisgICAgICAgIE1ha2Ug
RHVtcFJlbmRlclRyZWUgYW5kIFdlYktpdFRlc3RSdW5uZXIgdXNlIHRoaXMgcGxhdGZvcm0gcGx1
Z2luLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwOgorICAgICAgICAoaW5pdGlhbGl6
ZVRlc3RQbGF0Zm9ybVBsdWdpbik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBRdFRlc3RQ
bGF0Zm9ybVBsdWdpbi9RdFRlc3RQbGF0Zm9ybVBsdWdpbi5wcm86IEFkZGVkLgorICAgICAgICAq
IFF0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5jcHA6IEFkZGVkLgorICAgICAg
ICAoVGVzdEludGVncmF0aW9uOjpUZXN0SW50ZWdyYXRpb24pOgorICAgICAgICAoVGVzdEludGVn
cmF0aW9uOjpmb250RGF0YWJhc2UpOgorICAgICAgICAqIFF0VGVzdFBsYXRmb3JtUGx1Z2luL1Rl
c3RJbnRlZ3JhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbik6CisgICAg
ICAgIChUZXN0SW50ZWdyYXRpb246Omhhc0NhcGFiaWxpdHkpOgorICAgICAgICAoVGVzdEludGVn
cmF0aW9uOjpjcmVhdGVQbGF0Zm9ybVBpeG1hcCk6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246
OmNyZWF0ZVBsYXRmb3JtV2luZG93KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6Y3JlYXRl
UGxhdGZvcm1CYWNraW5nU3RvcmUpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQ
bGF0Zm9ybU9wZW5HTENvbnRleHQpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjcmVhdGVQ
bGF0Zm9ybVNoYXJlZEdyYXBoaWNzQ2FjaGUpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpn
dWlUaHJlYWRFdmVudERpc3BhdGNoZXIpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpjbGlw
Ym9hcmQpOgorICAgICAgICAoVGVzdEludGVncmF0aW9uOjpkcmFnKToKKyAgICAgICAgKFRlc3RJ
bnRlZ3JhdGlvbjo6aW5wdXRDb250ZXh0KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6YWNj
ZXNzaWJpbGl0eSk6CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246Om5hdGl2ZUludGVyZmFjZSk6
CisgICAgICAgIChUZXN0SW50ZWdyYXRpb246OnNlcnZpY2VzKToKKyAgICAgICAgKFRlc3RJbnRl
Z3JhdGlvbjo6c3R5bGVIaW50KToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvbjo6cGxhdGZvcm1U
aGVtZSk6CisgICAgICAgICogUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RGb250RGF0YWJh
c2UuaDogQWRkZWQuCisgICAgICAgIChUZXN0Rm9udERhdGFiYXNlKToKKyAgICAgICAgKiBRdFRl
c3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEZvbnREYXRhYmFzZS5tbTogQWRkZWQuCisgICAgICAg
IChUZXN0Rm9udERhdGFiYXNlOjpwb3B1bGF0ZUZvbnREYXRhYmFzZSk6CisgICAgICAgICogUXRU
ZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RJbnRlZ3JhdGlvbk1hYy5tbTogQWRkZWQuCisgICAg
ICAgIChUZXN0SW50ZWdyYXRpb246OmZvbnREYXRhYmFzZSk6CisgICAgICAgICogUXRUZXN0UGxh
dGZvcm1QbHVnaW4vbWFpbi5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdEludGVncmF0aW9uUGx1
Z2luOjprZXlzKToKKyAgICAgICAgKFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogUXRU
ZXN0UGxhdGZvcm1QbHVnaW4vdGVzdHBsYXRmb3JtLmpzb246IEFkZGVkLgorICAgICAgICAqIFRv
b2xzLnBybzoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmk6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9xdC9tYWluLmNwcDoKKyAgICAgICAgKG1haW4pOgorCiAyMDEy
LTA0LTIzICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCByb2xsaW5nIG91dCByMTE0ODgxLCBiZWNhdXNlIGl0IGJyb2tlIHVwbG9hZCBi
dWlsZHN0ZXAuCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZS5wcm8gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZS5wcm8KaW5k
ZXggMmFhNTRjZGZhNDZhN2FkOWJiYjRkMGY2YTI4NzRjYmI0ZjIzZTc5OC4uYTZhMjU1OTI1ZTYw
NzAwMjUzZGYwNjJiYmFkYTQxZWM2Y2NjMjBlMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L0R1bXBSZW5kZXJUcmVlLnBybwpAQCAtNTcsNCArNTcsOSBAQCB3aW5jZSo6IHsKIERFRklORVMg
LT0gVVNFX1NZU1RFTV9NQUxMT0M9MAogREVGSU5FUyArPSBVU0VfU1lTVEVNX01BTExPQz0xCiAK
K21hYzogTElCX1NVRkZJWD0uZHlsaWIKK3dpbjogTElCX1NVRkZJWD0uZGxsCit1bml4OiFtYWM6
IExJQl9TVUZGSVg9LnNvCitERUZJTkVTICs9IFRFU1RfUExBVEZPUk1fUExVR0lOX1BBVEg9XCJc
XFwiJCR7Uk9PVF9CVUlMRF9ESVJ9JCR7UU1BS0VfRElSX1NFUH1saWIkJHtRTUFLRV9ESVJfU0VQ
fWxpYnRlc3RwbGF0Zm9ybSQke0xJQl9TVUZGSVh9XFxcIlwiCisKIFJFU09VUkNFUyA9IER1bXBS
ZW5kZXJUcmVlLnFyYwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcAppbmRleCAxNzYzMzY3NzA2ZjFh
YjI3ZThhMTYzY2M1ZTU0NWZmYjdhODVmMDBlLi43OTdlZWY3ZTNlN2Q2OThiZTNlZDQxY2FhYjM3
NTM0MDNmZmYwNDgwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcApAQCAtMzEsNiArMzEsMTIg
QEAKIAogI2luY2x1ZGUgIlF0SW5pdGlhbGl6ZVRlc3RGb250cy5oIgogCisjaWYgUVRfVkVSU0lP
TiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCisjaW5jbHVkZSA8UVBsYXRmb3JtSW50ZWdy
YXRpb24+CisjaW5jbHVkZSA8UVBsYXRmb3JtSW50ZWdyYXRpb25QbHVnaW4+CisjaW5jbHVkZSA8
UVBsdWdpbkxvYWRlcj4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgog
CiAjaW5jbHVkZSA8cXN0cmluZ2xpc3QuaD4KQEAgLTEyMyw2ICsxMjksMzIgQEAgc3RhdGljIHZv
aWQgV1RGQ3Jhc2hIb29rKCkKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBpbml0aWFsaXplVGVz
dFBsYXRmb3JtUGx1Z2luKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCit7CisjaWYgUVRfVkVSU0lP
TiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAsIDApCisgICAgUVBsdWdpbkxvYWRlciBsb2FkZXIo
VEVTVF9QTEFURk9STV9QTFVHSU5fUEFUSCk7CisgICAgUVBsYXRmb3JtSW50ZWdyYXRpb25QbHVn
aW4qIHBsdWdpbiA9IHFvYmplY3RfY2FzdDxRUGxhdGZvcm1JbnRlZ3JhdGlvblBsdWdpbio+KGxv
YWRlci5pbnN0YW5jZSgpKTsKKyAgICBpZiAoIXBsdWdpbikKKyAgICAgICAgcUZhdGFsKCJjYW5u
b3QgaW5pdGlhbGl6ZSB0ZXN0IHBsYXRmb3JtIHBsdWdpblxuIik7CisKKyAgICBRQnl0ZUFycmF5
IHBsYXRmb3JtID0gcWdldGVudigiUVRfUVBBX1BMQVRGT1JNIik7CisgICAgUUJ5dGVBcnJheSBw
bGF0Zm9ybVBsdWdpblBhdGggPSBxZ2V0ZW52KCJRVF9RUEFfUExBVEZPUk1fUExVR0lOX1BBVEgi
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7ICsraSkgeworICAgICAgICBpZiAoUUJ5
dGVBcnJheShhcmd2W2ldKSA9PSAiLXBsYXRmb3JtIiAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAg
ICAgICBwbGF0Zm9ybSA9IGFyZ3ZbaSArIDFdOworICAgICAgICBlbHNlIGlmIChRQnl0ZUFycmF5
KGFyZ3ZbaV0pID09ICItcGxhdGZvcm1wbHVnaW5wYXRoIiAmJiBpICsgMSA8IGFyZ2MpCisgICAg
ICAgICAgICBwbGF0Zm9ybVBsdWdpblBhdGggPSBhcmd2W2kgKyAxXTsKKyAgICB9CisgICAgaWYg
KCFwbGF0Zm9ybS5pc0VtcHR5KCkpCisgICAgICAgIHFwdXRlbnYoIlFUX1dFQktJVF9PUklHSU5B
TF9QTEFURk9STSIsIHBsYXRmb3JtKTsKKyAgICBpZiAoIXBsYXRmb3JtUGx1Z2luUGF0aC5pc0Vt
cHR5KCkpCisgICAgICAgIHFwdXRlbnYoIlFUX1dFQktJVF9PUklHSU5BTF9QTEFURk9STV9QTFVH
SU5fUEFUSCIsIHBsYXRmb3JtUGx1Z2luUGF0aCk7CisKKyAgICBxcHV0ZW52KCJRVF9RUEFfUExB
VEZPUk1fUExVR0lOX1BBVEgiLCBURVNUX1BMQVRGT1JNX1BMVUdJTl9QQVRIKTsKKyAgICBxcHV0
ZW52KCJRVF9RUEFfUExBVEZPUk0iLCAidGVzdHBsYXRmb3JtIik7CisjZW5kaWYKK30KKwogaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIHsKICNpZmRlZiBRX09TX1dJTgpAQCAtMTQ2
LDYgKzE3OCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAKICAgICBXZWJL
aXQ6OmluaXRpYWxpemVUZXN0Rm9udHMoKTsKIAorICAgIGluaXRpYWxpemVUZXN0UGxhdGZvcm1Q
bHVnaW4oYXJnYywgYXJndik7CisKICAgICBRQXBwbGljYXRpb246OnNldEdyYXBoaWNzU3lzdGVt
KCJyYXN0ZXIiKTsKICAgICBRQXBwbGljYXRpb246OnNldFN0eWxlKG5ldyBRV2luZG93c1N0eWxl
KTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vUXRUZXN0UGxhdGZv
cm1QbHVnaW4ucHJvIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vUXRUZXN0UGxhdGZvcm1Q
bHVnaW4ucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NTI4YTY3YWUxZmZjMjIyYTJmMjQwYzU4MjA5M2NmZjI0
ZDMyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9RdFRl
c3RQbGF0Zm9ybVBsdWdpbi5wcm8KQEAgLTAsMCArMSwyMCBAQAorVEFSR0VUID0gdGVzdHBsYXRm
b3JtCitERVNURElSID0gJCRST09UX0JVSUxEX0RJUi9saWIKKworbG9hZChxdF9wbHVnaW4pCitR
VCA9IGNvcmUgZ3VpIGNvcmUtcHJpdmF0ZSBndWktcHJpdmF0ZSBwbGF0Zm9ybXN1cHBvcnQtcHJp
dmF0ZQorCitIRUFERVJTID0gXAorICAgIFRlc3RJbnRlZ3JhdGlvbi5oIFwKKworU09VUkNFUyA9
IFwKKyAgICBtYWluLmNwcCBcCisgICAgVGVzdEludGVncmF0aW9uLmNwcCBcCisKK21hYyB7Cisg
ICAgTElCUyArPSAtZnJhbWV3b3JrIEZvdW5kYXRpb24KKyAgICBPQkpFQ1RJVkVfSEVBREVSUyAr
PSBtYWMvVGVzdEZvbnREYXRhYmFzZS5oCisgICAgT0JKRUNUSVZFX1NPVVJDRVMgKz0gXAorICAg
ICAgICBtYWMvVGVzdEZvbnREYXRhYmFzZS5tbSBcCisgICAgICAgIG1hYy9UZXN0SW50ZWdyYXRp
b25NYWMubW0gXAorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vVGVz
dEludGVncmF0aW9uLmNwcCBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3Jh
dGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTQzMGM2YTQ4NTFiYmJiZjcyN2JhNTI4ZTA0NDc1NzQ5ZTg4
OGVkMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJ
bnRlZ3JhdGlvbi5jcHAKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiVGVzdEludGVncmF0aW9uLmgiCisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNp
bmNsdWRlIDxRU3RyaW5nTGlzdD4KKyNpbmNsdWRlIDxRdEdsb2JhbD4KKyNpbmNsdWRlIDxRdEd1
aS9wcml2YXRlL3FwbGF0Zm9ybWludGVncmF0aW9uZmFjdG9yeV9xcGFfcC5oPgorI2luY2x1ZGUg
PHFzeXN0ZW1kZXRlY3Rpb24uaD4KKworVGVzdEludGVncmF0aW9uOjpUZXN0SW50ZWdyYXRpb24o
KQoreworICAgIFFTdHJpbmcgZGVmYXVsdFBsYXRmb3JtID0KKyNpZiBkZWZpbmVkKFFfT1NfTUFD
KQorICAgICAgICBRTGF0aW4xU3RyaW5nKCJjb2NvYSIpOworI2VsaWYgZGVmaW5lZCAoUV9PU19X
SU4pCisgICAgICAgIFFMYXRpbjFTdHJpbmcoIndpbmRvd3MiKTsKKyNlbGlmICFkZWZpbmVkIChR
VF9OT19YQ0IpCisgICAgICAgIFFMYXRpbjFTdHJpbmcoInhjYiIpOworI2VsaWYgIWRlZmluZWQg
KFFUX05PX1dBWUxBTkQpCisgICAgICAgIFFMYXRpbjFTdHJpbmcoIndheWxhbmQiKTsKKyNlbHNl
CisgICAgICAgIFFMYXRpbjFTdHJpbmcoIm1pbmltYWwiKTsKKyNlbmRpZgorCisgICAgUUJ5dGVB
cnJheSBvcmlnaW5hbFBsYXRmb3JtID0gcWdldGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRG
T1JNIik7CisgICAgUUJ5dGVBcnJheSBvcmlnaW5hbFBsdWdpblBhdGggPSBxZ2V0ZW52KCJRVF9X
RUJLSVRfT1JJR0lOQUxfUExBVEZPUk1fUExVR0lOX1BBVEgiKTsKKyAgICBRU3RyaW5nIHBsYXRm
b3JtID0gb3JpZ2luYWxQbGF0Zm9ybS5pc0VtcHR5KCkgPyBkZWZhdWx0UGxhdGZvcm0gOiBRU3Ry
aW5nOjpmcm9tTGF0aW4xKG9yaWdpbmFsUGxhdGZvcm0uZGF0YSgpKTsKKyAgICBRU3RyaW5nIHBs
dWdpblBhdGggPSBvcmlnaW5hbFBsdWdpblBhdGguaXNFbXB0eSgpID8gUVN0cmluZygpIDogUVN0
cmluZzo6ZnJvbUxhdGluMShvcmlnaW5hbFBsdWdpblBhdGguZGF0YSgpKTsKKworICAgIG1faW50
ZWdyYXRpb24ucmVzZXQoUVBsYXRmb3JtSW50ZWdyYXRpb25GYWN0b3J5OjpjcmVhdGUocGxhdGZv
cm0sIHBsdWdpblBhdGgpKTsKK30KKworI2lmICFkZWZpbmVkKFFfT1NfTUFDKQorUVBsYXRmb3Jt
Rm9udERhdGFiYXNlKiBUZXN0SW50ZWdyYXRpb246OmZvbnREYXRhYmFzZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faW50ZWdyYXRpb24tPmZvbnREYXRhYmFzZSgpOworfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9UZXN0SW50ZWdyYXRpb24uaCBiL1Rv
b2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL1Rlc3RJbnRlZ3JhdGlvbi5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjll
NDhlMTVjMTIwM2NhYjRkYzA5Y2JkMjg5YjlhNTY4ZDkxMTY3MjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9UZXN0SW50ZWdyYXRpb24uaApAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGVzdEludGVncmF0aW9uX2gKKyNk
ZWZpbmUgVGVzdEludGVncmF0aW9uX2gKKworI2luY2x1ZGUgPFFQbGF0Zm9ybUZvbnREYXRhYmFz
ZT4KKyNpbmNsdWRlIDxRUGxhdGZvcm1JbnRlZ3JhdGlvbj4KKyNpbmNsdWRlIDxRUGxhdGZvcm1T
Y3JlZW4+CisKK2NsYXNzIFRlc3RJbnRlZ3JhdGlvbiA6IHB1YmxpYyBRUGxhdGZvcm1JbnRlZ3Jh
dGlvbiB7CitwdWJsaWM6CisgICAgVGVzdEludGVncmF0aW9uKCk7Citwcml2YXRlOgorICAgIHZp
cnR1YWwgUVBsYXRmb3JtRm9udERhdGFiYXNlICpmb250RGF0YWJhc2UoKSBjb25zdDsKKworICAg
IC8vIFJlZGlyZWN0aW5nIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICB2aXJ0dWFsIGJvb2wgaGFzQ2Fw
YWJpbGl0eShDYXBhYmlsaXR5IGNhcCkgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+aGFzQ2FwYWJp
bGl0eShjYXApOyB9CisgICAgdmlydHVhbCBRUGxhdGZvcm1QaXhtYXAqIGNyZWF0ZVBsYXRmb3Jt
UGl4bWFwKFFQbGF0Zm9ybVBpeG1hcDo6UGl4ZWxUeXBlIHR5cGUpIGNvbnN0IHsgcmV0dXJuIG1f
aW50ZWdyYXRpb24tPmNyZWF0ZVBsYXRmb3JtUGl4bWFwKHR5cGUpOyB9CisgICAgdmlydHVhbCBR
UGxhdGZvcm1XaW5kb3cqIGNyZWF0ZVBsYXRmb3JtV2luZG93KFFXaW5kb3cgKndpbmRvdykgY29u
c3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+Y3JlYXRlUGxhdGZvcm1XaW5kb3cod2luZG93KTsg
fQorICAgIHZpcnR1YWwgUVBsYXRmb3JtQmFja2luZ1N0b3JlKiBjcmVhdGVQbGF0Zm9ybUJhY2tp
bmdTdG9yZShRV2luZG93ICp3aW5kb3cpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24tPmNy
ZWF0ZVBsYXRmb3JtQmFja2luZ1N0b3JlKHdpbmRvdyk7IH0KKyNpZm5kZWYgUVRfTk9fT1BFTkdM
CisgICAgdmlydHVhbCBRUGxhdGZvcm1PcGVuR0xDb250ZXh0KiBjcmVhdGVQbGF0Zm9ybU9wZW5H
TENvbnRleHQoUU9wZW5HTENvbnRleHQgKmNvbnRleHQpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdy
YXRpb24tPmNyZWF0ZVBsYXRmb3JtT3BlbkdMQ29udGV4dChjb250ZXh0KTsgfQorI2VuZGlmCisg
ICAgdmlydHVhbCBRUGxhdGZvcm1TaGFyZWRHcmFwaGljc0NhY2hlKiBjcmVhdGVQbGF0Zm9ybVNo
YXJlZEdyYXBoaWNzQ2FjaGUoY29uc3QgY2hhciAqY2FjaGVJZCkgY29uc3QgeyByZXR1cm4gbV9p
bnRlZ3JhdGlvbi0+Y3JlYXRlUGxhdGZvcm1TaGFyZWRHcmFwaGljc0NhY2hlKGNhY2hlSWQpOyB9
CisgICAgdmlydHVhbCBRQWJzdHJhY3RFdmVudERpc3BhdGNoZXIqIGd1aVRocmVhZEV2ZW50RGlz
cGF0Y2hlcigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24tPmd1aVRocmVhZEV2ZW50RGlz
cGF0Y2hlcigpOyB9CisjaWZuZGVmIFFUX05PX0NMSVBCT0FSRAorICAgIHZpcnR1YWwgUVBsYXRm
b3JtQ2xpcGJvYXJkKiBjbGlwYm9hcmQoKSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5j
bGlwYm9hcmQoKTsgfQorI2VuZGlmCisjaWZuZGVmIFFUX05PX0RSQUdBTkREUk9QCisgICAgdmly
dHVhbCBRUGxhdGZvcm1EcmFnKiBkcmFnKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+
ZHJhZygpOyB9CisjZW5kaWYKKyAgICB2aXJ0dWFsIFFQbGF0Zm9ybUlucHV0Q29udGV4dCogaW5w
dXRDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+aW5wdXRDb250ZXh0KCk7
IH0KKyAgICB2aXJ0dWFsIFFQbGF0Zm9ybUFjY2Vzc2liaWxpdHkqIGFjY2Vzc2liaWxpdHkoKSBj
b25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5hY2Nlc3NpYmlsaXR5KCk7IH0KKyAgICB2aXJ0
dWFsIFFQbGF0Zm9ybU5hdGl2ZUludGVyZmFjZSogbmF0aXZlSW50ZXJmYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnRlZ3JhdGlvbi0+bmF0aXZlSW50ZXJmYWNlKCk7IH0KKyAgICB2aXJ0dWFsIFFQ
bGF0Zm9ybVNlcnZpY2VzKiBzZXJ2aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faW50ZWdyYXRpb24t
PnNlcnZpY2VzKCk7IH0KKyAgICB2aXJ0dWFsIFFWYXJpYW50IHN0eWxlSGludChTdHlsZUhpbnQg
aGludCkgY29uc3QgeyByZXR1cm4gbV9pbnRlZ3JhdGlvbi0+c3R5bGVIaW50KGhpbnQpOyB9Cisg
ICAgdmlydHVhbCBRUGxhdGZvcm1UaGVtZSogY3JlYXRlUGxhdGZvcm1UaGVtZShjb25zdCBRU3Ry
aW5nJiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2ludGVncmF0aW9uLT5jcmVhdGVQbGF0Zm9ybVRo
ZW1lKG5hbWUpOyB9CisKKyAgICBRU2NvcGVkUG9pbnRlcjxRUGxhdGZvcm1JbnRlZ3JhdGlvbj4g
bV9pbnRlZ3JhdGlvbjsKKyNpZiBkZWZpbmVkKFFfT1NfTUFDKQorICAgIG11dGFibGUgUVNjb3Bl
ZFBvaW50ZXI8UVBsYXRmb3JtRm9udERhdGFiYXNlPiBtX2ZvbnREYXRhYmFzZTsKKyNlbmRpZgor
fTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMv
VGVzdEZvbnREYXRhYmFzZS5oIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RG
b250RGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDhhZTUyYmM3ZjhiN2E2MmEzNjQ5YzNiYzQ4ZjY2
MzM4OWY4NzczCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4v
bWFjL1Rlc3RGb250RGF0YWJhc2UuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UK
KyAqIFRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLjEgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBQbGVhc2UgcmV2aWV3IHRoZSBmb2xs
b3dpbmcgaW5mb3JtYXRpb24gdG8gZW5zdXJlIHRoZSBHTlUgTGVzc2VyCisgKiBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldDoKKyAqIGh0
dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKyAq
CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorICogQWx0ZXJuYXRpdmVseSwg
dGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwK
KyAqIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLgorICogUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9y
bWF0aW9uIHRvIGVuc3VyZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNp
b24gMy4wIHJlcXVpcmVtZW50cyB3aWxsIGJlIG1ldDoKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9j
b3B5bGVmdC9ncGwuaHRtbC4KKyAqCisgKi8KKworI2lmbmRlZiBUZXN0Rm9udERhdGFiYXNlX2gK
KyNkZWZpbmUgVGVzdEZvbnREYXRhYmFzZV9oCisKKyNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRl
IDxRdFBsYXRmb3JtU3VwcG9ydC9wcml2YXRlL3Fjb3JldGV4dGZvbnRkYXRhYmFzZV9wLmg+CisK
K2NsYXNzIFRlc3RGb250RGF0YWJhc2UgOiBwdWJsaWMgUUNvcmVUZXh0Rm9udERhdGFiYXNlIHsK
K3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlRm9udERhdGFiYXNlKCk7CisgICAg
dmlydHVhbCBRRm9udCBkZWZhdWx0Rm9udCgpIGNvbnN0OworfTsKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEZvbnREYXRhYmFzZS5tbSBi
L1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL21hYy9UZXN0Rm9udERhdGFiYXNlLm1tCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmViMjY3ZmU5N2NmZGUzZDk0ODI0YmJjNTg2NDkxYTA2Yjg5NWUwMDMKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEZvbnREYXRhYmFz
ZS5tbQpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisgKiBUaGlzIGZpbGUgbWF5
IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLgorICogUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9u
IHRvIGVuc3VyZSB0aGUgR05VIExlc3NlcgorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz
aW9uIDIuMSByZXF1aXJlbWVudHMgd2lsbCBiZSBtZXQ6CisgKiBodHRwOi8vd3d3LmdudS5vcmcv
bGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisgKgorICogR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgVXNhZ2UKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUg
dXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5z
ZSB2ZXJzaW9uIDMuMCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bi4KKyAqIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0byBlbnN1cmUg
dGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVu
dHMgd2lsbCBiZSBtZXQ6CisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwu
CisgKgorICovCisKKyNpbmNsdWRlICJUZXN0Rm9udERhdGFiYXNlLmgiCisjaW5jbHVkZSA8UXRD
b3JlL1FEaXI+CisjaW5jbHVkZSA8UXRDb3JlL1FGaWxlSW5mbz4KKyNpbmNsdWRlIDxRdENvcmUv
cHJpdmF0ZS9xY29yZV9tYWNfcC5oPgorI2luY2x1ZGUgPFF0UGxhdGZvcm1TdXBwb3J0L3ByaXZh
dGUvcWZvbnRlbmdpbmVfY29yZXRleHRfcC5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CisKKy8vIEZyb20gUXQuCitzdGF0aWMgY29uc3QgY2hhciAqbGFuZ3VhZ2VGb3JXcml0
aW5nU3lzdGVtW10gPSB7CisgICAgMCwgICAgIC8vIEFueQorICAgICJlbiIsICAvLyBMYXRpbgor
ICAgICJlbCIsICAvLyBHcmVlaworICAgICJydSIsICAvLyBDeXJpbGxpYworICAgICJoeSIsICAv
LyBBcm1lbmlhbgorICAgICJoZSIsICAvLyBIZWJyZXcKKyAgICAiYXIiLCAgLy8gQXJhYmljCisg
ICAgInN5ciIsIC8vIFN5cmlhYworICAgICJkaXYiLCAvLyBUaGFhbmEKKyAgICAiaGkiLCAgLy8g
RGV2YW5hZ2FyaQorICAgICJibiIsICAvLyBCZW5nYWxpCisgICAgInBhIiwgIC8vIEd1cm11a2hp
CisgICAgImd1IiwgIC8vIEd1amFyYXRpCisgICAgIm9yIiwgIC8vIE9yaXlhCisgICAgInRhIiwg
IC8vIFRhbWlsCisgICAgInRlIiwgIC8vIFRlbHVndQorICAgICJrbiIsICAvLyBLYW5uYWRhCisg
ICAgIm1sIiwgIC8vIE1hbGF5YWxhbQorICAgICJzaSIsICAvLyBTaW5oYWxhCisgICAgInRoIiwg
IC8vIFRoYWkKKyAgICAibG8iLCAgLy8gTGFvCisgICAgImJvIiwgIC8vIFRpYmV0YW4KKyAgICAi
bXkiLCAgLy8gTXlhbm1hcgorICAgICJrYSIsICAvLyBHZW9yZ2lhbgorICAgICJrbSIsICAvLyBL
aG1lcgorICAgICJ6aC1jbiIsIC8vIFNpbXBsaWZpZWRDaGluZXNlCisgICAgInpoLXR3IiwgLy8g
VHJhZGl0aW9uYWxDaGluZXNlCisgICAgImphIiwgIC8vIEphcGFuZXNlCisgICAgImtvIiwgIC8v
IEtvcmVhbgorICAgICJ2aSIsICAvLyBWaWV0bmFtZXNlCisgICAgMCwgLy8gU3ltYm9sCisgICAg
MCwgLy8gT2doYW0KKyAgICAwLCAvLyBSdW5pYworICAgIDAgLy8gTidLbworfTsKK2VudW0geyBM
YW5ndWFnZUNvdW50ID0gc2l6ZW9mKGxhbmd1YWdlRm9yV3JpdGluZ1N5c3RlbSkgLyBzaXplb2Yo
Y29uc3QgY2hhciopIH07CisKK1FGb250IFRlc3RGb250RGF0YWJhc2U6OmRlZmF1bHRGb250KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gUUZvbnQoUVN0cmluZ0xpdGVyYWwoIk5pbWJ1cyBTYW5zIEwi
KSk7Cit9CisKK3ZvaWQgVGVzdEZvbnREYXRhYmFzZTo6cG9wdWxhdGVGb250RGF0YWJhc2UoKQor
eworICAgIC8vIERldGVybWluZSB0aGUgc2V0IG9mIGRlZmF1bHQgc3lzdGVtIGZvbnRzIGluIG9y
ZGVyIHRvIGZpbHRlciB0aGVtIG91dC4KKyAgICBRQ0ZUeXBlPENURm9udENvbGxlY3Rpb25SZWY+
IHN5c3RlbUNvbGxlY3Rpb24oQ1RGb250Q29sbGVjdGlvbkNyZWF0ZUZyb21BdmFpbGFibGVGb250
cygwKSk7CisgICAgUUNGVHlwZTxDRkFycmF5UmVmPiBzeXN0ZW1Gb250cyA9IHN5c3RlbUNvbGxl
Y3Rpb24gPyBDVEZvbnRDb2xsZWN0aW9uQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRvcnMoc3lz
dGVtQ29sbGVjdGlvbikgOiAwOworICAgIGlmICghc3lzdGVtRm9udHMpCisgICAgICAgIHFGYXRh
bCgiQ2Fubm90IGdldCBzeXN0ZW0gZm9udHNcbiIpOworCisgICAgUUJ5dGVBcnJheSB0ZXN0Rm9u
dHNWYXIgPSBnZXRlbnYoIldFQktJVF9URVNURk9OVFMiKTsKKyAgICBRRGlyIGZvbnRzRGlyKFFT
dHJpbmc6OmZyb21MYXRpbjEodGVzdEZvbnRzVmFyKSk7CisgICAgaWYgKHRlc3RGb250c1Zhci5p
c0VtcHR5KCkgfHwgIWZvbnRzRGlyLmV4aXN0cygpKSB7CisgICAgICAgIHFGYXRhbCgiXG5cbiIK
KyAgICAgICAgICAgICAgICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICAgICAgICAgICJRQ29y
ZVRleHRGb250RGF0YWJhc2VXS1Rlc3Q6XG4iCisgICAgICAgICAgICAgICAgIldFQktJVF9URVNU
Rk9OVFMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCBjb3JyZWN0bHkuXG4iCisgICAg
ICAgICAgICAgICAgIlRoaXMgdmFyaWFibGUgaGFzIHRvIHBvaW50IHRvIHRoZSBkaXJlY3Rvcnkg
Y29udGFpbmluZyB0aGUgZm9udHNcbiIKKyAgICAgICAgICAgICAgICAieW91IGNhbiBjbG9uZSBm
cm9tIGdpdDovL2dpdG9yaW91cy5vcmcvcXR3ZWJraXQvdGVzdGZvbnRzLmdpdFxuIgorICAgICAg
ICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAgICAgICApOworICAgIH0KKwor
ICAgIFFDRlR5cGU8Q0ZNdXRhYmxlU2V0UmVmPiBzeXN0ZW1Gb250U2V0KENGU2V0Q3JlYXRlTXV0
YWJsZSgwLCAwLCAma0NGVHlwZVNldENhbGxCYWNrcykpOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgQ0ZBcnJheUdldENvdW50KHN5c3RlbUZvbnRzKTsgKytpKSB7CisgICAgICAgIENURm9udERl
c2NyaXB0b3JSZWYgZm9udCA9IHN0YXRpY19jYXN0PENURm9udERlc2NyaXB0b3JSZWY+KENGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgoc3lzdGVtRm9udHMsIGkpKTsKKyAgICAgICAgQ0ZTZXRBZGRWYWx1
ZShzeXN0ZW1Gb250U2V0LCBmb250KTsKKyAgICB9CisKKyAgICAvLyBBZGQgdGhlIHRlc3QgZm9u
dHMgdG8gdGhlIHNldC4KKyAgICBRU3RyaW5nTGlzdCBmaWx0ZXJzOworICAgIGZpbHRlcnMgPDwg
UVN0cmluZ0xpdGVyYWwoIioudHRmIik7CisgICAgUUZpbGVJbmZvTGlzdCBmaWxlcyA9IGZvbnRz
RGlyLmVudHJ5SW5mb0xpc3QoZmlsdGVycywgUURpcjo6RmlsZXMpOworICAgIGZvcmVhY2ggKFFG
aWxlSW5mbyBmaWxlLCBmaWxlcykgeworICAgICAgICBRQnl0ZUFycmF5IHBhdGggPSBRRmlsZTo6
ZW5jb2RlTmFtZShmaWxlLmNhbm9uaWNhbEZpbGVQYXRoKCkpOworICAgICAgICBRQ0ZUeXBlPENG
VVJMUmVmPiBmb250RmlsZShDRlVSTENyZWF0ZUZyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24o
MCwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KHBhdGguY29uc3REYXRhKCkpLCBwYXRo
Lmxlbmd0aCgpLCBmYWxzZSkpOworICAgICAgICBDRkVycm9yUmVmIGVycm9yOworICAgICAgICBp
ZiAoIUNURm9udE1hbmFnZXJSZWdpc3RlckZvbnRzRm9yVVJMKGZvbnRGaWxlLCBrQ1RGb250TWFu
YWdlclNjb3BlUHJvY2VzcywgJmVycm9yKSkgeworICAgICAgICAgICAgQ0ZSZWxlYXNlKGVycm9y
KTsKKyAgICAgICAgICAgIHFGYXRhbCgiRmFpbGVkIHJlZ2lzdGVyaW5nIGZvbnQgZmlsZTogJXNc
biIsIHBhdGguY29uc3REYXRhKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBz
dWJzdGl0dXRpb24gaXMgZG9uZSB2aWEgZm9udHMuY29uZiBvbiBMaW51eC4KKyAgICBRRm9udDo6
aW5zZXJ0U3Vic3RpdHV0aW9uKFFTdHJpbmdMaXRlcmFsKCJIZWx2ZXRpY2EiKSwgUVN0cmluZzo6
ZnJvbUxhdGluMShkZWZhdWx0V2ViS2l0VGVzdEZvbnRGYW1pbHkpKTsKKworICAgIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAvLyBUaGlzIGlzIGEgY29weSBvZiBRQ29yZXRleHRGb250RGF0
YWJhc2U6OnBvcHVsYXRlRm9udERhdGFiYXNlIGZyb20gUXQgZXhjZXB0CisgICAgLy8gd2UgZmls
dGVyIG91dCB0aGUgc3lzdGVtIGZvbnRzLgorCisgICAgUUNGVHlwZTxDVEZvbnRDb2xsZWN0aW9u
UmVmPiBjb2xsZWN0aW9uID0gQ1RGb250Q29sbGVjdGlvbkNyZWF0ZUZyb21BdmFpbGFibGVGb250
cygwKTsKKyAgICBRQ0ZUeXBlPENGQXJyYXlSZWY+IGZvbnRzID0gQ1RGb250Q29sbGVjdGlvbkNy
ZWF0ZU1hdGNoaW5nRm9udERlc2NyaXB0b3JzKGNvbGxlY3Rpb24pOworCisgICAgUVN0cmluZyBm
b3VuZHJ5TmFtZSA9IFFMYXRpbjFTdHJpbmcoIkNvcmVUZXh0Iik7CisgICAgY29uc3QgaW50IG51
bUZvbnRzID0gQ0ZBcnJheUdldENvdW50KGZvbnRzKTsKKyAgICBRSGFzaDxRU3RyaW5nLCBRU3Ry
aW5nPiBwc05hbWVUb0ZhbWlseTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUZvbnRzOyAr
K2kpIHsKKyAgICAgICAgQ1RGb250RGVzY3JpcHRvclJlZiBmb250ID0gc3RhdGljX2Nhc3Q8Q1RG
b250RGVzY3JpcHRvclJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmb250cywgaSkpOworICAg
ICAgICBpZiAoQ0ZTZXRHZXRDb3VudE9mVmFsdWUoc3lzdGVtRm9udFNldCwgZm9udCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUUNGU3RyaW5nIGZhbWlseU5hbWUgPSBzdGF0aWNf
Y2FzdDxDRlN0cmluZ1JlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlMb2NhbGl6ZWRBdHRyaWJ1dGUo
Zm9udCwga0NURm9udEZhbWlseU5hbWVBdHRyaWJ1dGUsIE5VTEwpKTsKKyAgICAgICAgUUNGVHlw
ZTxDRkRpY3Rpb25hcnlSZWY+IHN0eWxlcyA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4o
Q1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFRyYWl0c0F0dHJpYnV0
ZSkpOworICAgICAgICBRRm9udDo6V2VpZ2h0IHdlaWdodCA9IFFGb250OjpOb3JtYWw7CisgICAg
ICAgIFFGb250OjpTdHlsZSBzdHlsZSA9IFFGb250OjpTdHlsZU5vcm1hbDsKKyAgICAgICAgUUZv
bnQ6OlN0cmV0Y2ggc3RyZXRjaCA9IFFGb250OjpVbnN0cmV0Y2hlZDsKKyAgICAgICAgYm9vbCBm
aXhlZFBpdGNoID0gZmFsc2U7CisKKyAgICAgICAgaWYgKHN0eWxlcykgeworICAgICAgICAgICAg
aWYgKENGTnVtYmVyUmVmIHdlaWdodFZhbHVlID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKHN0eWxlcywga0NURm9udFdlaWdodFRyYWl0KSkpIHsKKyAgICAg
ICAgICAgICAgICBRX0FTU0VSVChDRk51bWJlcklzRmxvYXRUeXBlKHdlaWdodFZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgZG91YmxlIGQ7CisgICAgICAgICAgICAgICAgaWYgKENGTnVtYmVyR2V0
VmFsdWUod2VpZ2h0VmFsdWUsIGtDRk51bWJlckRvdWJsZVR5cGUsICZkKSkKKyAgICAgICAgICAg
ICAgICAgICAgd2VpZ2h0ID0gKGQgPiAwLjApID8gUUZvbnQ6OkJvbGQgOiBRRm9udDo6Tm9ybWFs
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIGl0YWxpYyA9IHN0
YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzdHlsZXMsIGtDVEZv
bnRTbGFudFRyYWl0KSkpIHsKKyAgICAgICAgICAgICAgICBRX0FTU0VSVChDRk51bWJlcklzRmxv
YXRUeXBlKGl0YWxpYykpOworICAgICAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAgICAg
ICAgIGlmIChDRk51bWJlckdldFZhbHVlKGl0YWxpYywga0NGTnVtYmVyRG91YmxlVHlwZSwgJmQp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkID4gMC4wKQorICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGUgPSBRRm9udDo6U3R5bGVJdGFsaWM7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVmIHN5bWJvbGljID0gc3RhdGlj
X2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHN0eWxlcywga0NURm9udFN5
bWJvbGljVHJhaXQpKSkgeworICAgICAgICAgICAgICAgIGludCBkOworICAgICAgICAgICAgICAg
IGlmIChDRk51bWJlckdldFZhbHVlKHN5bWJvbGljLCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmZCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGQgJiBrQ1RGb250TW9ub1NwYWNlVHJhaXQpCisg
ICAgICAgICAgICAgICAgICAgICAgICBmaXhlZFBpdGNoID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGQgJiBrQ1RGb250RXhwYW5kZWRUcmFpdCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cmV0Y2ggPSBRRm9udDo6RXhwYW5kZWQ7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGQgJiBrQ1RGb250Q29uZGVuc2VkVHJhaXQpCisgICAgICAgICAgICAgICAgICAgICAgICBz
dHJldGNoID0gUUZvbnQ6OkNvbmRlbnNlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQgcGl4ZWxTaXplID0gMDsKKyAgICAgICAgaWYg
KFFDRlR5cGU8Q0ZOdW1iZXJSZWY+IHNpemUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ1RG
b250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFNpemVBdHRyaWJ1dGUpKSkg
eworICAgICAgICAgICAgaWYgKENGTnVtYmVySXNGbG9hdFR5cGUoc2l6ZSkpIHsKKyAgICAgICAg
ICAgICAgICBkb3VibGUgZDsKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHNpemUs
IGtDRk51bWJlckRvdWJsZVR5cGUsICZkKTsKKyAgICAgICAgICAgICAgICBwaXhlbFNpemUgPSBk
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVl
KHNpemUsIGtDRk51bWJlckludFR5cGUsICZwaXhlbFNpemUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgUVN1cHBvcnRlZFdyaXRpbmdTeXN0ZW1zIHdyaXRpbmdTeXN0ZW1z
OworICAgICAgICBpZiAoUUNGVHlwZTxDRkFycmF5UmVmPiBsYW5ndWFnZXMgPSBzdGF0aWNfY2Fz
dDxDRkFycmF5UmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250LCBrQ1RGb250
TGFuZ3VhZ2VzQXR0cmlidXRlKSkpIHsKKyAgICAgICAgICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZB
cnJheUdldENvdW50KGxhbmd1YWdlcyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
IExhbmd1YWdlQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghbGFuZ3VhZ2VGb3JX
cml0aW5nU3lzdGVtW2ldKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBRQ0ZTdHJpbmcgbGFuZyA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoTlVMTCwg
bGFuZ3VhZ2VGb3JXcml0aW5nU3lzdGVtW2ldLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJKTsKKyAg
ICAgICAgICAgICAgICBpZiAoQ0ZBcnJheUNvbnRhaW5zVmFsdWUobGFuZ3VhZ2VzLCBDRlJhbmdl
TWFrZSgwLCBsZW5ndGgpLCBsYW5nKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGluZ1N5c3Rl
bXMuc2V0U3VwcG9ydGVkKFFGb250RGF0YWJhc2U6OldyaXRpbmdTeXN0ZW0oaSkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQ0ZSZXRhaW4oZm9udCk7CisgICAgICAgIFFQ
bGF0Zm9ybUZvbnREYXRhYmFzZTo6cmVnaXN0ZXJGb250KGZhbWlseU5hbWUsIGZvdW5kcnlOYW1l
LCB3ZWlnaHQsIHN0eWxlLCBzdHJldGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlIC8qIGFudGlhbGlhc2VkICovLCB0cnVlIC8qIHNjYWxhYmxlICov
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFNpemUs
IGZpeGVkUGl0Y2gsIHdyaXRpbmdTeXN0ZW1zLCAodm9pZCAqKSBmb250KTsKKyAgICAgICAgQ0ZT
dHJpbmdSZWYgcHNOYW1lID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENURm9udERlc2NyaXB0
b3JDb3B5QXR0cmlidXRlKGZvbnQsIGtDVEZvbnROYW1lQXR0cmlidXRlKSk7CisgICAgICAgIC8v
IHdlIG5lZWQgUG9zdFNjcmlwdCBOYW1lIHRvIGZhbWlseSBuYW1lIG1hcHBpbmcgZm9yIGZhbGxi
YWNrIGxpc3QgY29uc3RydWN0aW9uCisgICAgICAgIHBzTmFtZVRvRmFtaWx5W1FDRlN0cmluZzo6
dG9RU3RyaW5nKChOU1N0cmluZyAqKSBwc05hbWUpXSA9IGZhbWlseU5hbWU7CisgICAgICAgIENG
UmVsZWFzZShwc05hbWUpOworICAgIH0KKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit9CmRp
ZmYgLS1naXQgYS9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWMvVGVzdEludGVncmF0aW9u
TWFjLm1tIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RJbnRlZ3JhdGlvbk1h
Yy5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMzc4NmM5MGNlYThlOWU2MjgxYjA1Y2FlNWE2ZDNlMDY1Njc4MTg4
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFjL1Rlc3RJ
bnRlZ3JhdGlvbk1hYy5tbQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICIuLi9UZXN0SW50ZWdyYXRpb24uaCIKKyNpbmNsdWRlICJUZXN0Rm9udERhdGFiYXNl
LmgiCisKK1FQbGF0Zm9ybUZvbnREYXRhYmFzZSogVGVzdEludGVncmF0aW9uOjpmb250RGF0YWJh
c2UoKSBjb25zdAoreworICAgIGlmICghbV9mb250RGF0YWJhc2UpCisgICAgICAgIG1fZm9udERh
dGFiYXNlLnJlc2V0KG5ldyBUZXN0Rm9udERhdGFiYXNlKTsKKyAgICByZXR1cm4gbV9mb250RGF0
YWJhc2UuZGF0YSgpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4v
bWFpbi5jcHAgYi9Ub29scy9RdFRlc3RQbGF0Zm9ybVBsdWdpbi9tYWluLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ZjU3N2Y0Njc1NWI1YmQ0ZTczNTM3YWY1ZTQ5Y2NhNTY2NjdlZjM0Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vbWFpbi5jcHAKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBT
emVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIFVzYWdlCisgKiBUaGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24g
Mi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogUGxl
YXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvIGVuc3VyZSB0aGUgR05VIExl
c3NlcgorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSByZXF1aXJlbWVudHMg
d2lsbCBiZSBtZXQ6CisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2Vz
L2xncGwtMi4xLmh0bWwuCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UK
KyAqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqIFBsZWFzZSByZXZpZXcg
dGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0byBlbnN1cmUgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVudHMgd2lsbCBiZSBtZXQ6CisgKiBo
dHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwuCisgKgorICovCisKKyNpbmNsdWRl
ICJUZXN0SW50ZWdyYXRpb24uaCIKKyNpbmNsdWRlIDxRUGxhdGZvcm1JbnRlZ3JhdGlvblBsdWdp
bj4KKyNpbmNsdWRlIDxRdEdsb2JhbD4KKworY2xhc3MgUV9ERUNMX0VYUE9SVCBUZXN0SW50ZWdy
YXRpb25QbHVnaW4gOiBwdWJsaWMgUVBsYXRmb3JtSW50ZWdyYXRpb25QbHVnaW4geworICAgIFFf
T0JKRUNUCisgICAgUV9QTFVHSU5fTUVUQURBVEEoSUlEICJvcmcucXQtcHJvamVjdC5RdC5RUGxh
dGZvcm1JbnRlZ3JhdGlvbkZhY3RvcnlJbnRlcmZhY2UiIEZJTEUgInRlc3RwbGF0Zm9ybS5qc29u
IikKK3B1YmxpYzoKKyAgICBRU3RyaW5nTGlzdCBrZXlzKCkgY29uc3Q7CisgICAgUVBsYXRmb3Jt
SW50ZWdyYXRpb24qIGNyZWF0ZShjb25zdCBRU3RyaW5nJiwgY29uc3QgUVN0cmluZ0xpc3QmKTsK
KworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKK307CisKK1FTdHJpbmdMaXN0IFRlc3RJ
bnRlZ3JhdGlvblBsdWdpbjo6a2V5cygpIGNvbnN0Cit7CisgICAgUVN0cmluZ0xpc3QgbGlzdDsK
KyAgICBsaXN0IDw8IFFTdHJpbmdMaXRlcmFsKCJ0ZXN0cGxhdGZvcm0iKTsKKyAgICByZXR1cm4g
bGlzdDsKK30KKworUVBsYXRmb3JtSW50ZWdyYXRpb24qIFRlc3RJbnRlZ3JhdGlvblBsdWdpbjo6
Y3JlYXRlKGNvbnN0IFFTdHJpbmcmIHN5c3RlbSwgY29uc3QgUVN0cmluZ0xpc3QmIHBhcmFtZXRl
cnMpCit7CisgICAgaWYgKCFzeXN0ZW0uY29tcGFyZShRU3RyaW5nTGl0ZXJhbCgidGVzdHBsYXRm
b3JtIiksIFF0OjpDYXNlSW5zZW5zaXRpdmUpKQorICAgICAgICByZXR1cm4gbmV3IFRlc3RJbnRl
Z3JhdGlvbigpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNpbmNsdWRlICJtYWluLm1vYyIKKwor
dm9pZCBUZXN0SW50ZWdyYXRpb25QbHVnaW46OmluaXRpYWxpemUoKQoreworICAgIFFTdGF0aWNQ
bHVnaW4gcGx1Z2luOworICAgIHBsdWdpbi5pbnN0YW5jZSA9ICZxdF9wbHVnaW5faW5zdGFuY2U7
CisgICAgcGx1Z2luLm1ldGFEYXRhID0gJnF0X3BsdWdpbl9xdWVyeV9tZXRhZGF0YTsKKyAgICBx
UmVnaXN0ZXJTdGF0aWNQbHVnaW5GdW5jdGlvbihwbHVnaW4pOworfQorCitzdGF0aWMgdm9pZCBj
b25zdHJ1Y3RvckZ1bmN0aW9uKCkKK3sKKyAgICBUZXN0SW50ZWdyYXRpb25QbHVnaW46OmluaXRp
YWxpemUoKTsKK30KKworUV9DT05TVFJVQ1RPUl9GVU5DVElPTihjb25zdHJ1Y3RvckZ1bmN0aW9u
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL3Rlc3RwbGF0Zm9ybS5q
c29uIGIvVG9vbHMvUXRUZXN0UGxhdGZvcm1QbHVnaW4vdGVzdHBsYXRmb3JtLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODMwYmI2MmIwYTVlOGI0MTljN2JiMzhhMGEzM2EwZjM1ZmQwNzQ5YgotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1F0VGVzdFBsYXRmb3JtUGx1Z2luL3Rlc3RwbGF0Zm9ybS5qc29uCkBA
IC0wLDAgKzEsMyBAQAoreworICAgICJLZXlzIjogWyAidGVzdHBsYXRmb3JtIiBdCit9CmRpZmYg
LS1naXQgYS9Ub29scy9Ub29scy5wcm8gYi9Ub29scy9Ub29scy5wcm8KaW5kZXggZjhhYTI3MzUz
M2YxODU0MDVmNTg2MGQ3ZDAzOWUyYjJmMzE1OTczMS4uY2M0ZWQ0ZjhkZmQ0YWM4MzczZjMyYzcy
MjYwYjBlYzVjNjJlMjUyMyAxMDA2NDQKLS0tIGEvVG9vbHMvVG9vbHMucHJvCisrKyBiL1Rvb2xz
L1Rvb2xzLnBybwpAQCAtMTMsNiArMTMsOCBAQCBTVUJESVJTICs9IFF0VGVzdEJyb3dzZXIvUXRU
ZXN0QnJvd3Nlci5wcm8KIFNVQkRJUlMgKz0gRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWUucHJvCiBTVUJESVJTICs9IER1bXBSZW5kZXJUcmVlL3F0L0ltYWdlRGlmZi5wcm8KIAoraGF2
ZVF0KDUpOiBTVUJESVJTICs9IFF0VGVzdFBsYXRmb3JtUGx1Z2luL1F0VGVzdFBsYXRmb3JtUGx1
Z2luLnBybworCiAhbm9fd2Via2l0MiB7CiAgICAgU1VCRElSUyArPSBNaW5pQnJvd3Nlci9xdC9N
aW5pQnJvd3Nlci5wcm8gXAogICAgICAgICAgICAgICAgV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRU
ZXN0UnVubmVyLnBybwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQu
cHJpIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpCmluZGV4IGI5ZTdhOGJkZDgw
MjhhYTk2N2Q1N2NhNjhhNTkzNDVlODY1MTE5ZmYuLmQzOTM4ZGNlNzgzMWMwYzdiMTE0NTQxZWMy
ZGJhOTg4ZDMyMzU3NDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0
LnByaQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmkKQEAgLTM3LDQgKzM3
LDkgQEAgUFJFRklYX0hFQURFUiA9IFdlYktpdFRlc3RSdW5uZXJQcmVmaXguaAogKi1nKysqOlFN
QUtFX0NYWEZMQUdTICs9ICItaW5jbHVkZSAkJFBSRUZJWF9IRUFERVIiCiAqLWNsYW5nKjpRTUFL
RV9DWFhGTEFHUyArPSAiLWluY2x1ZGUgJCRQUkVGSVhfSEVBREVSIgogCittYWM6IExJQl9TVUZG
SVg9LmR5bGliCit3aW46IExJQl9TVUZGSVg9LmRsbAordW5peDohbWFjOiBMSUJfU1VGRklYPS5z
bworREVGSU5FUyArPSBURVNUX1BMQVRGT1JNX1BMVUdJTl9QQVRIPVwiXFxcIiQke1JPT1RfQlVJ
TERfRElSfSQke1FNQUtFX0RJUl9TRVB9bGliJCR7UU1BS0VfRElSX1NFUH1saWJ0ZXN0cGxhdGZv
cm0kJHtMSUJfU1VGRklYfVxcXCJcIgorCiBSRVNPVVJDRVMgPSBxdC9XZWJLaXRUZXN0UnVubmVy
LnFyYwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9tYWluLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvbWFpbi5jcHAKaW5kZXggZjk1NzJhODdlMzQ1NTQ3M2U4
NWUyZWE0NjcyNDk1MGNiN2YxZDhiYS4uYTNkYTAxYTQ2OWIxYTUxZTM5YmI5Y2M3ZWQ1MGI4YTQ1
NGI2NDQ2OSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9tYWluLmNwcAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL3F0L21haW4uY3BwCkBAIC05NCw2ICs5NCwyMiBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKICAgICBxcHV0ZW52KCJRVF9XRUJL
SVRfVEhFTUVfTkFNRSIsICJxc3R5bGUiKTsKIAorICAgIFFCeXRlQXJyYXkgcGxhdGZvcm0gPSBx
Z2V0ZW52KCJRVF9RUEFfUExBVEZPUk0iKTsKKyAgICBRQnl0ZUFycmF5IHBsYXRmb3JtUGx1Z2lu
UGF0aCA9IHFnZXRlbnYoIlFUX1FQQV9QTEFURk9STV9QTFVHSU5fUEFUSCIpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAgIGlmIChRQnl0ZUFycmF5KGFyZ3Zb
aV0pID09ICItcGxhdGZvcm0iICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHBsYXRmb3Jt
ID0gYXJndltpICsgMV07CisgICAgICAgIGVsc2UgaWYgKFFCeXRlQXJyYXkoYXJndltpXSkgPT0g
Ii1wbGF0Zm9ybXBsdWdpbnBhdGgiICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHBsYXRm
b3JtUGx1Z2luUGF0aCA9IGFyZ3ZbaSArIDFdOworICAgIH0KKyAgICBpZiAoIXBsYXRmb3JtLmlz
RW1wdHkoKSkKKyAgICAgICAgcXB1dGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRGT1JNIiwg
cGxhdGZvcm0pOworICAgIGlmICghcGxhdGZvcm1QbHVnaW5QYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgcXB1dGVudigiUVRfV0VCS0lUX09SSUdJTkFMX1BMQVRGT1JNX1BMVUdJTl9QQVRIIiwgcGxh
dGZvcm1QbHVnaW5QYXRoKTsKKworICAgIC8vIFRlbGwgdGhlIHdlYiBwcm9jZXNzIHRoYXQgd2Ug
d2FudCB0byB1c2UgdGhlIHRlc3QgcGxhdGZvcm0gcGx1Z2luLgorICAgIHFwdXRlbnYoIlFUX1dF
QktJVDJfVEVTVF9QTEFURk9STV9QTFVHSU5fUEFUSCIsIFRFU1RfUExBVEZPUk1fUExVR0lOX1BB
VEgpOworCiAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0RmxpY2thYmxlVmlld3Bv
cnRFbmFibGVkKGZhbHNlKTsKICAgICBRQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogICAg
IExhdW5jaGVyIGxhdW5jaGVyKGFyZ2MsIGFyZ3YpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>