<?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>76172</bug_id>
          
          <creation_ts>2012-01-12 06:45:27 -0800</creation_ts>
          <short_desc>[GTK] Add basic printing support to WebKit2</short_desc>
          <delta_ts>2012-02-01 00:39:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>75544</blocked>
    
    <blocked>76448</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>534793</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-12 06:45:27 -0800</bug_when>
    <thetext>We need to be able to pass GtkSettings and GtkPageSetup from UI to Web process and implement basic printing features in the Web process:
 - Page ranges
 - Paper size and margins
 - Orientation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534805</commentid>
    <comment_count>1</comment_count>
      <attachid>122233</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-12 07:02:13 -0800</bug_when>
    <thetext>Created attachment 122233
Patch

It only implements printing for unix platforms, but it already includes an empty class for win32 to make it easier for someone to implement it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534854</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-12 08:15:28 -0800</bug_when>
    <thetext>Btw, error and print progress reporting hasn&apos;t been implemented yet, because there aren&apos;t IPC messages for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535710</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-13 08:44:48 -0800</bug_when>
    <thetext>I&apos;ve realized that method used by mac and win drawPagesToPDF has a callback that is emitted on the UI process for every page drawn. That would allow us to implement print progress and the UI process would know when the printing has finished to call endPrinting(). I&apos;ll update the patch next week to follow the same approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537047</commentid>
    <comment_count>4</comment_count>
      <attachid>122755</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-17 06:19:50 -0800</bug_when>
    <thetext>Created attachment 122755
Updated patch

It adds a new message drawPagesForPrinting using a callback (a void callback for now) to notify the ui process when the print operation has finished.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537809</commentid>
    <comment_count>5</comment_count>
      <attachid>122911</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-18 06:05:06 -0800</bug_when>
    <thetext>Created attachment 122911
Updated patch

Patch updated again, this time to allow sending empty print settings and page setup from ui to web process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543300</commentid>
    <comment_count>6</comment_count>
      <attachid>122911</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-26 11:07:58 -0800</bug_when>
    <thetext>Comment on attachment 122911
Updated patch

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

A bit involved, given the process boundaries, and idles always make me a little nervous, but I think it&apos;s a great approach overall, keep rocking like this Carlos =D

&gt; Source/WebKit2/Shared/PrintInfo.h:54
&gt;      explicit PrintInfo(NSPrintInfo *);

This is a bit weird, we would usually have a typedef PlatformPrintInfo for these unifdef&apos;ed cases, wouldn&apos;t we? Not a problem with the patch, though =)

&gt; Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:255
&gt; +    GKeyFile* keyFile = g_key_file_new();
&gt; +    gtk_print_settings_to_key_file(printSettings, keyFile, &quot;Print Settings&quot;);
&gt; +    encodeGKeyFile(encoder, keyFile);
&gt; +    g_key_file_free(keyFile);

I think we should add a GKeyFile especialization to GOwnPtr.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:62
&gt; +        if (printerName) {
&gt; +            if (!strcmp(printerName, gtk_printer_get_name(printer)))
&gt; +                selectedPrinter = printer;

Nit: I think this would be more readable as if (printerName &amp;&amp; !strcmp(...)), then you can drop the braces.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:77
&gt; +        if (selectedPrinter) {
&gt; +            static int jobNumber = 0;
&gt; +            const char* applicationName = g_get_application_name();
&gt; +            GOwnPtr&lt;char&gt;jobName(g_strdup_printf(&quot;%s job #%d&quot;, applicationName ? applicationName : &quot;WebKit&quot;, ++jobNumber));
&gt; +            printOperation-&gt;m_printJob = adoptGRef(gtk_print_job_new(jobName.get(), selectedPrinter,
&gt; +                                                                     printOperation-&gt;printSettings(),
&gt; +                                                                     printOperation-&gt;pageSetup()));
&gt; +            return TRUE;
&gt; +        }
&gt; +
&gt; +        return FALSE;
&gt; +    }

This looks a bit confusing, would be more readable using the early return pattern:

 if (!selectedPrinter)
    return FALSE;
… rest of the code …
return TRUE;

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:96
&gt; +        cairo_surface_t* surface = gtk_print_job_get_surface(printOperation-&gt;m_printJob.get(), 0);
&gt; +        if (!surface) {
&gt; +            // FIXME: Printing error.
&gt; +            return;
&gt; +        }

Could this be moved to right after the m_printJob check, so we return as early as possible? Wouldn&apos;t impact much, but still.... =)

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:257
&gt; +    size_t totalToPrint;

This looks like it&apos;s the same as pages.size(), what do you think of doing away with it? Btw, I think we should use the m_* style for these as well.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:262
&gt; +    bool isDone : 1;

How about turning this into a method that does return m_totalPrinted == pages.size()?

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.h:54
&gt; +    unsigned int printPages() const { return m_printPages; }

See bellow.

&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.h:89
&gt; +    unsigned int m_printPagesIdleId;
&gt; +    unsigned int m_printPages;
&gt; +    GtkPageRange* m_pageRanges;
&gt; +    size_t m_pageRangesCount;
&gt; +    bool m_doRotate;

&apos;printPages&apos; and &apos;doRotate&apos; confused me a bit, given their imperative names. How about m_needsRotation and m_pagesToPrint (with the appropriate changes to the accessors)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543902</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 01:42:49 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 122911 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122911&amp;action=review
&gt; 
&gt; A bit involved, given the process boundaries, and idles always make me a little nervous, but I think it&apos;s a great approach overall, keep rocking like this Carlos =D

Thanks! The idle is to make sure we don&apos;t block the web process main loop during the whole printing, but only for every page that is rendered.

&gt; &gt; Source/WebKit2/Shared/PrintInfo.h:54
&gt; &gt;      explicit PrintInfo(NSPrintInfo *);
&gt; 
&gt; This is a bit weird, we would usually have a typedef PlatformPrintInfo for these unifdef&apos;ed cases, wouldn&apos;t we? Not a problem with the patch, though =)

In this case the PlatformPrintInfo is a combination of GtkPrintSettings and GtkPageSetup

&gt; &gt; Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:255
&gt; &gt; +    GKeyFile* keyFile = g_key_file_new();
&gt; &gt; +    gtk_print_settings_to_key_file(printSettings, keyFile, &quot;Print Settings&quot;);
&gt; &gt; +    encodeGKeyFile(encoder, keyFile);
&gt; &gt; +    g_key_file_free(keyFile);
&gt; 
&gt; I think we should add a GKeyFile especialization to GOwnPtr.

https://bugs.webkit.org/show_bug.cgi?id=77191

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:62
&gt; &gt; +        if (printerName) {
&gt; &gt; +            if (!strcmp(printerName, gtk_printer_get_name(printer)))
&gt; &gt; +                selectedPrinter = printer;
&gt; 
&gt; Nit: I think this would be more readable as if (printerName &amp;&amp; !strcmp(...)), then you can drop the braces.

The thing is that we don&apos;t want to use the default printer if a printer name has been chosen by the user, so I would need to check again in the else, that printerName is NULL. So the printerName check is not just to avoid a crash in strcmp, but to check whether a printer has been specified, to use the default one otherwise.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:77
&gt; &gt; +        if (selectedPrinter) {
&gt; &gt; +            static int jobNumber = 0;
&gt; &gt; +            const char* applicationName = g_get_application_name();
&gt; &gt; +            GOwnPtr&lt;char&gt;jobName(g_strdup_printf(&quot;%s job #%d&quot;, applicationName ? applicationName : &quot;WebKit&quot;, ++jobNumber));
&gt; &gt; +            printOperation-&gt;m_printJob = adoptGRef(gtk_print_job_new(jobName.get(), selectedPrinter,
&gt; &gt; +                                                                     printOperation-&gt;printSettings(),
&gt; &gt; +                                                                     printOperation-&gt;pageSetup()));
&gt; &gt; +            return TRUE;
&gt; &gt; +        }
&gt; &gt; +
&gt; &gt; +        return FALSE;
&gt; &gt; +    }
&gt; 
&gt; This looks a bit confusing, would be more readable using the early return pattern:
&gt; 
&gt;  if (!selectedPrinter)
&gt;     return FALSE;
&gt; … rest of the code …
&gt; return TRUE;

Right. 

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:96
&gt; &gt; +        cairo_surface_t* surface = gtk_print_job_get_surface(printOperation-&gt;m_printJob.get(), 0);
&gt; &gt; +        if (!surface) {
&gt; &gt; +            // FIXME: Printing error.
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; 
&gt; Could this be moved to right after the m_printJob check, so we return as early as possible? Wouldn&apos;t impact much, but still.... =)

Yes.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:257
&gt; &gt; +    size_t totalToPrint;
&gt; 
&gt; This looks like it&apos;s the same as pages.size(), what do you think of doing away with it? Btw, I think we should use the m_* style for these as well.

Indeed, that&apos;s because I used and array of integers first, and then I realized it would be better to use a Vector. We use the m_ prefix for members of classes but not for structs.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:262
&gt; &gt; +    bool isDone : 1;
&gt; 
&gt; How about turning this into a method that does return m_totalPrinted == pages.size()?

That would work now, but not when some manual capabilities are implemented like multiple pages per sheet.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.h:54
&gt; &gt; +    unsigned int printPages() const { return m_printPages; }
&gt; 
&gt; See bellow.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.h:89
&gt; &gt; +    unsigned int m_printPagesIdleId;
&gt; &gt; +    unsigned int m_printPages;
&gt; &gt; +    GtkPageRange* m_pageRanges;
&gt; &gt; +    size_t m_pageRangesCount;
&gt; &gt; +    bool m_doRotate;
&gt; 
&gt; &apos;printPages&apos; and &apos;doRotate&apos; confused me a bit, given their imperative names. How about m_needsRotation and m_pagesToPrint (with the appropriate changes to the accessors)?

Sounds good to me :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543914</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 02:25:22 -0800</bug_when>
    <thetext>Committed r106102: &lt;http://trac.webkit.org/changeset/106102&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543937</commentid>
    <comment_count>9</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-01-27 03:40:48 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Committed r106102: &lt;http://trac.webkit.org/changeset/106102&gt;

This broke the gtk bots, not sure why. http://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/21217</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543940</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 03:47:50 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Committed r106102: &lt;http://trac.webkit.org/changeset/106102&gt;
&gt; 
&gt; This broke the gtk bots, not sure why. http://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/21217

This is not actually related to this particular commit, it sometimes happens when building and it&apos;s related to parallel builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543952</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-27 04:02:01 -0800</bug_when>
    <thetext>Closing again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544309</commentid>
    <comment_count>12</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-27 13:14:19 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; +        if (printerName) {
&gt; &gt; &gt; +            if (!strcmp(printerName, gtk_printer_get_name(printer)))
&gt; &gt; &gt; +                selectedPrinter = printer;
&gt; &gt; 
&gt; &gt; Nit: I think this would be more readable as if (printerName &amp;&amp; !strcmp(...)), then you can drop the braces.
&gt; 
&gt; The thing is that we don&apos;t want to use the default printer if a printer name has been chosen by the user, so I would need to check again in the else, that printerName is NULL. So the printerName check is not just to avoid a crash in strcmp, but to check whether a printer has been specified, to use the default one otherwise.

I understand that, but the if (printername &amp;&amp; !strcmp()) I suggested would work the same the current code does, or am I missing something? =)
 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:262
&gt; &gt; &gt; +    bool isDone : 1;
&gt; &gt; 
&gt; &gt; How about turning this into a method that does return m_totalPrinted == pages.size()?
&gt; 
&gt; That would work now, but not when some manual capabilities are implemented like multiple pages per sheet.

Ack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544310</commentid>
    <comment_count>13</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-27 13:15:32 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; This broke the gtk bots, not sure why. http://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/21217
&gt; 
&gt; This is not actually related to this particular commit, it sometimes happens when building and it&apos;s related to parallel builds.

This problem has now been fixed: http://trac.webkit.org/changeset/106132</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546838</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-31 23:46:23 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; +        if (printerName) {
&gt; &gt; &gt; &gt; +            if (!strcmp(printerName, gtk_printer_get_name(printer)))
&gt; &gt; &gt; &gt; +                selectedPrinter = printer;
&gt; &gt; &gt; 
&gt; &gt; &gt; Nit: I think this would be more readable as if (printerName &amp;&amp; !strcmp(...)), then you can drop the braces.
&gt; &gt; 
&gt; &gt; The thing is that we don&apos;t want to use the default printer if a printer name has been chosen by the user, so I would need to check again in the else, that printerName is NULL. So the printerName check is not just to avoid a crash in strcmp, but to check whether a printer has been specified, to use the default one otherwise.
&gt; 
&gt; I understand that, but the if (printername &amp;&amp; !strcmp()) I suggested would work the same the current code does, or am I missing something? =)

Yes, but in that case I would need to check the printername is not NULL in both if branches

if (printername &amp;&amp; !strcmp())
...
else if (!printername &amp;&amp; printer_is_default)

So, I thought it was more clear that in case we have a printerName we are not interested in whether the printer is the default one or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546853</commentid>
    <comment_count>15</comment_count>
      <attachid>122911</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-01 00:17:21 -0800</bug_when>
    <thetext>Comment on attachment 122911
Updated patch

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

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:62
&gt;&gt;&gt; +                selectedPrinter = printer;
&gt;&gt; 
&gt;&gt; Nit: I think this would be more readable as if (printerName &amp;&amp; !strcmp(...)), then you can drop the braces.
&gt; 
&gt; The thing is that we don&apos;t want to use the default printer if a printer name has been chosen by the user, so I would need to check again in the else, that printerName is NULL. So the printerName check is not just to avoid a crash in strcmp, but to check whether a printer has been specified, to use the default one otherwise.

I agree with Gustavo that it&apos;s best to handle the exceptional case up front and avoid the nesting.

if ((printerName &amp;&amp; g_strcmp0(printerName, gtk_printer_get_name(printer)) ||
    (!printerName &amp;&amp; !gtk_printer_is_default(printer))
    return FALSE;
    
You end up checking printerName twice, but this check is so cheap it&apos;s practically free. It&apos;s a lot clearer too. Then you can just use printer and get rid of selectedPrinter.

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:257
&gt;&gt;&gt; +    size_t totalToPrint;
&gt;&gt; 
&gt;&gt; This looks like it&apos;s the same as pages.size(), what do you think of doing away with it? Btw, I think we should use the m_* style for these as well.
&gt; 
&gt; Indeed, that&apos;s because I used and array of integers first, and then I realized it would be better to use a Vector. We use the m_ prefix for members of classes but not for structs.

Structs that have methods should be classes, so these variables should be prefixed with m_.

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:262
&gt;&gt;&gt; +    bool isDone : 1;
&gt;&gt; 
&gt;&gt; How about turning this into a method that does return m_totalPrinted == pages.size()?
&gt; 
&gt; That would work now, but not when some manual capabilities are implemented like multiple pages per sheet.

Please do not use bitfields for booleans. The amount of memory this saves is negligible and we don&apos;t do this typically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546863</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-01 00:39:05 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 122911 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122911&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:62
&gt; &gt;&gt;&gt; +                selectedPrinter = printer;
&gt; &gt;&gt; 
&gt; &gt;&gt; Nit: I think this would be more readable as if (printerName &amp;&amp; !strcmp(...)), then you can drop the braces.
&gt; &gt; 
&gt; &gt; The thing is that we don&apos;t want to use the default printer if a printer name has been chosen by the user, so I would need to check again in the else, that printerName is NULL. So the printerName check is not just to avoid a crash in strcmp, but to check whether a printer has been specified, to use the default one otherwise.
&gt; 
&gt; I agree with Gustavo that it&apos;s best to handle the exceptional case up front and avoid the nesting.
&gt; 
&gt; if ((printerName &amp;&amp; g_strcmp0(printerName, gtk_printer_get_name(printer)) ||
&gt;     (!printerName &amp;&amp; !gtk_printer_is_default(printer))
&gt;     return FALSE;
&gt; 
&gt; You end up checking printerName twice, but this check is so cheap it&apos;s practically free. It&apos;s a lot clearer too. Then you can just use printer and get rid of selectedPrinter.

Ok, fair enough

&gt; &gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:257
&gt; &gt;&gt;&gt; +    size_t totalToPrint;
&gt; &gt;&gt; 
&gt; &gt;&gt; This looks like it&apos;s the same as pages.size(), what do you think of doing away with it? Btw, I think we should use the m_* style for these as well.
&gt; &gt; 
&gt; &gt; Indeed, that&apos;s because I used and array of integers first, and then I realized it would be better to use a Vector. We use the m_ prefix for members of classes but not for structs.
&gt; 
&gt; Structs that have methods should be classes, so these variables should be prefixed with m_.

The coding style document doesn&apos;t say anything, and WebCore is full of examples of structs with methods and without m_ prefix.

&gt; &gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/gtk/WebPrintOperationGtk.cpp:262
&gt; &gt;&gt;&gt; +    bool isDone : 1;
&gt; &gt;&gt; 
&gt; &gt;&gt; How about turning this into a method that does return m_totalPrinted == pages.size()?
&gt; &gt; 
&gt; &gt; That would work now, but not when some manual capabilities are implemented like multiple pages per sheet.
&gt; 
&gt; Please do not use bitfields for booleans. The amount of memory this saves is negligible and we don&apos;t do this typically.

It&apos;s harmless anyway, and again WebCore is full of examples


$ grep &quot;bool m_.* : 1&quot; `find ./WebCore -name &quot;*.h&quot;` | wc -l
423</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122233</attachid>
            <date>2012-01-12 07:02:13 -0800</date>
            <delta_ts>2012-01-17 06:19:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-initial-printing.diff</filename>
            <type>text/plain</type>
            <size>34026</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjMjFiOTRkLi4yMGQ4Mzll
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTItMDEtMTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBiYXNpYyBwcmludGluZyBzdXBwb3J0IHRvIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTcyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb25maWd1cmUu
YWM6IENoZWNrIHdoZXRoZXIgR1RLKyBVTklYIHByaW50aW5nIGlzIGF2YWlsYWJsZS4KKwogMjAx
Mi0wMS0xMSAgVWxhbiBEZWdlbmJhZXYgIDx1bGFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
djhdIEludDE2QXJyYXkuc2V0KGFycmF5LCBvZmZzZXQpIGZhaWxzIG9uIGZpcnN0IGV4ZWN1dGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGZkNGVjZjUuLmYxYmRmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
MiBAQAorMjAxMi0wMS0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gQWRkIGJhc2ljIHByaW50aW5nIHN1cHBvcnQgdG8gV2ViS2l0
MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3Vw
cG9ydCBmb3IgcHJpbnRpbmcgaW4gdGhlIFdlYiBwcm9jZXNzLiBPbmx5IGJhc2ljIHByaW50aW5n
CisgICAgICAgIGZlYXR1cmVzIGFyZSBpbXBsZW1lbnRlZCBmb3Igbm93OiBwYWdlIHJhbmdlcywg
cGFwZXIgc2l6ZSBhbmQKKyAgICAgICAgb3JpZW50YXRpb24uCisKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBTaGFyZWQv
UHJpbnRJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UHJpbnRJbmZvOjplbmNvZGUpOiBFbmNv
ZGUgYWxzbyBHdGtQcmludFNldHRpbmdzIGFuZAorICAgICAgICBHdGtQYWdlU2V0dXAgZm9yIHRo
ZSBHVEsrIHBvcnQuCisgICAgICAgIChXZWJLaXQ6OlByaW50SW5mbzo6ZGVjb2RlKTogRGVjb2Rl
IGFsc28gR3RrUHJpbnRTZXR0aW5ncyBhbmQKKyAgICAgICAgR3RrUGFnZVNldHVwIGZvciB0aGUg
R1RLKyBwb3J0LgorICAgICAgICAqIFNoYXJlZC9QcmludEluZm8uaDogQWRkIEd0a1ByaW50U2V0
dGluZ3MgYW5kIEd0a1BhZ2VTZXR1cCBtZW1iZXIKKyAgICAgICAgZm9yIHRoZSBHVEsrIHBvcnQu
CisgICAgICAgICogU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHA6CisgICAgICAgIChD
b3JlSVBDOjplbmNvZGVHS2V5RmlsZSk6IEhlbHBlciBmdW5jdGlvbiB0byBlbmNvZGUgYSBHS2V5
RmlsZSBhcworICAgICAgICBhIERhdGFSZWZlcmVuY2Ugb2JqZWN0LgorICAgICAgICAoQ29yZUlQ
Qzo6ZGVjb2RlR0tleUZpbGUpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZGVjb2RlIGEgR0tleUZpbGUg
dG8KKyAgICAgICAgYSBEYXRhUmVmZXJlbmNlIG9iamVjdC4KKyAgICAgICAgKENvcmVJUEM6OmVu
Y29kZSk6IEVuY29kZSBHdGtQcmludFNldHRpbmdzIGFuZCBHdGtQYWdlU2V0dXAgdXNpbmcKKyAg
ICAgICAgdGhlIEdLZXlGaWxlIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAoQ29yZUlQQzo6ZGVj
b2RlKTogRGVjb2RlIEd0a1ByaW50U2V0dGluZ3MgYW5kIEd0a1BhZ2VTZXR1cCB1c2luZworICAg
ICAgICB0aGUgR0tleUZpbGUgcmVwcmVzZW50YXRpb24uCisgICAgICAgICogU2hhcmVkL2d0ay9B
cmd1bWVudENvZGVyc0d0ay5oOgorICAgICAgICAqIFNoYXJlZC9ndGsvUHJpbnRJbmZvR3RrLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5jcHAuCisgICAg
ICAgIChXZWJLaXQ6OlByaW50SW5mbzo6UHJpbnRJbmZvKTogQWRkIFByaW50SW5mbyBjb25zdHJ1
Y3RvciB0aGF0CisgICAgICAgIHRha2VzIEd0a1ByaW50U2V0dGluZ3MgYW5kIEd0a1BhZ2VTZXR1
cCBpbnN0YW5jZXMuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpiZWdpblByaW50aW5nKTogQ3JlYXRlIGEgV2ViUHJp
bnRPcGVyYXRpb25HdGsKKyAgICAgICAgYW5kIHN0YXJ0IHByaW50aW5nLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjplbmRQcmludGluZyk6IERlbGV0ZXMgdGhlIFdlYlByaW50T3BlcmF0aW9u
R3RrCisgICAgICAgIG9iamVjdC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25H
dGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UHJpbnRQYWdlc0RhdGE6OlByaW50UGFn
ZXNEYXRhKTogU3RydWN0IHRvIHN0b3JlIGFsbCBkYXRhCisgICAgICAgIHVzZWQgdG8gcmVuZGVy
IHBhZ2VzIGZvciBwcmludGluZy4KKyAgICAgICAgKFdlYktpdDo6UHJpbnRQYWdlc0RhdGE6Omlu
Y3JlbWVudFBhZ2VTZXF1ZW5jZSk6IEhlbHBlciBmdW5jdGlvbgorICAgICAgICB0byBpbmNyZW1l
bnQgdGhlIHBhZ2Ugc2VxdWVuY2UuCisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9u
R3RrOjpjcmVhdGUpOiBDcmVhdGUgYQorICAgICAgICBXZWJQcmludE9wZXJhdGlvbkd0a1VuaXgg
b3IgV2ViUHJpbnRPcGVyYXRpb25HdGtXaW4zMiBkZXBlbmRpbmcgb24KKyAgICAgICAgdGhlIHBs
YXRmb3JtLgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6V2ViUHJpbnRP
cGVyYXRpb25HdGspOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6fldl
YlByaW50T3BlcmF0aW9uR3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25H
dGs6OnBhZ2VDb3VudCk6IFJldHVybiB0aGUgdG90YWwgcGFnZXMKKyAgICAgICAgb2YgdGhlIGRv
Y3VtZW50IHRvIHByaW50LgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6
cm90YXRlUGFnZSk6IEhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICB0cmFuc2Zvcm0gdGhlIGNv
bnRleHQgYWNjb3JkaW5nIHRvIG9yaWVudGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJQcmlu
dE9wZXJhdGlvbkd0azo6cmVuZGVyUGFnZSk6IFJlbmRlciB0aGUgZ2l2ZW4gcGFnZQorICAgICAg
ICBpbnRvIHRoZSBwcmludGluZyBjb250ZXh0LgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9w
ZXJhdGlvbkd0azo6cHJpbnRQYWdlc0lkbGUpOiBJZGxlIGZ1bmN0aW9uIHVzZWQKKyAgICAgICAg
dG8gcHJpbnQgcGFnZXMuCisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpw
cmludFBhZ2VzSWRsZURvbmUpOiBDYWxsYmFjaworICAgICAgICBjYWxsZWQgd2hlbiBwcmludFBh
Z2VzSWRsZSBmaW5pc2hlcy4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6
OnByaW50RG9uZSk6IEhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICBmaW5pc2ggdGhlIHByaW50
IG9wZXJhdGlvbiwgY2FsbGVkIHdoZW4gYWxsIHBhZ2VzIGhhdmUgYmVlbiByZW5kZXJlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnByaW50KTogU3RhcnQgcHJpbnRp
bmcgdGhlIGRvY3VtZW50CisgICAgICAgIHVzaW5nIHRoZSBnaXZlbiBjYWlybyBzdXJmYWNlLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpwcmludFNldHRp
bmdzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnBhZ2VTZXR1cCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpwcmludFBhZ2VzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnBhZ2VSYW5nZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cGFnZVJhbmdlc0NvdW50KToKKwogMjAx
Mi0wMS0xMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dUS10gV2ViIHByb2Nlc3Mgc2hvdWxkIHVzZSB0aGUgc2FtZSBsb2NhbGUgdGhhbiBV
SSBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQyZjg1MWIuLjNhMjY4OWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtCkBAIC0zMjEsNiArMzIxLDcgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lU
R1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9T
T1UKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmgg
XAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUHJpbnRJbmZvR3RrLmNwcCBcCiAJU291cmNl
L1dlYktpdDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmggXApAQCAtODkzLDYgKzg5NCw4IEBAIGxp
YndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElf
TUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViSW5zcGVjdG9yR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuaCBcCiAJU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwIFwKQEAgLTk5Nyw2ICsxMDAwLDcgQEAg
bGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQ
SV9NSU5PUl9WRVJTSU9OQF9sYV9DUFAKIAkkKENPVkVSQUdFX0NGTEFHUykgXAogCSQoR0xJQl9D
RkxBR1MpIFwKIAkkKEdUS19DRkxBR1MpIFwKKwkkKEdUS19VTklYX1BSSU5USU5HX0NGTEFHUykg
XAogCSQoTElCU09VUF9DRkxBR1MpIFwKIAkkKFVOSUNPREVfQ0ZMQUdTKSBcCiAJJChYVF9DRkxB
R1MpCkBAIC0xMDUwLDYgKzEwNTQsNyBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01B
Sk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJQgogCSQoR0xJ
Ql9MSUJTKSBcCiAJJChHU1RSRUFNRVJfTElCUykgXAogCSQoR1RLX0xJQlMpIFwKKwkkKEdUS19V
TklYX1BSSU5USU5HX0xJQlMpIFwKIAkkKEpQRUdfTElCUykgXAogCSQoTElCU09VUF9MSUJTKSBc
CiAJJChMSUJYTUxfTElCUykgXApAQCAtMTIxNSw2ICsxMjIwLDcgQEAgUHJvZ3JhbXNfV2ViS2l0
V2ViUHJvY2Vzc19DRkxBR1MgPSBcCiAJJChDQUlST19DRkxBR1MpIFwKIAkkKEdMSUJfQ0ZMQUdT
KSBcCiAJJChHVEtfQ0ZMQUdTKSBcCisJJChHVEtfVU5JWF9QUklOVElOR19DRkxBR1MpIFwKIAkk
KExJQlNPVVBfQ0ZMQUdTKSBcCiAJJChaTElCX0NGTEFHUykKIApAQCAtMTIyNSw2ICsxMjMxLDcg
QEAgUHJvZ3JhbXNfV2ViS2l0V2ViUHJvY2Vzc19MREFERCA9IFwKIAlsaWJ3ZWJraXQyZ3RrLUBX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
LmxhIFwKIAkkKEdMSUJfTElCUykgXAogCSQoR1RLX0xJQlMpIFwKKwkkKEdUS19VTklYX1BSSU5U
SU5HX0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykgXAogCSQoWkxJQl9DRkxBR1MpCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QcmludEluZm8uY3BwIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1ByaW50SW5mby5jcHAKaW5kZXggMjNkM2VmOS4uY2UxMTkzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL1ByaW50SW5mby5jcHAKQEAgLTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSAiQXJn
dW1lbnRFbmNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAKKyNpZiBQTEFURk9STShH
VEspCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogUHJpbnRJbmZvOjpQcmludEluZm8oKQpAQCAtNDIsMTEgKzQ2LDI1IEBAIFBy
aW50SW5mbzo6UHJpbnRJbmZvKCkKIHZvaWQgUHJpbnRJbmZvOjplbmNvZGUoQ29yZUlQQzo6QXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXItPmVuY29kZShDb3Jl
SVBDOjpJbihwYWdlU2V0dXBTY2FsZUZhY3RvciwgYXZhaWxhYmxlUGFwZXJXaWR0aCwgYXZhaWxh
YmxlUGFwZXJIZWlnaHQpKTsKKyNpZiBQTEFURk9STShHVEspCisgICAgQ29yZUlQQzo6ZW5jb2Rl
KGVuY29kZXIsIHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29kZShlbmNv
ZGVyLCBwYWdlU2V0dXAuZ2V0KCkpOworI2VuZGlmCiB9CiAKIGJvb2wgUHJpbnRJbmZvOjpkZWNv
ZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBQcmludEluZm8mIGluZm8pCiB7
Ci0gICAgcmV0dXJuIGRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5mby5wYWdlU2V0dXBT
Y2FsZUZhY3RvciwgaW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBpbmZvLmF2YWlsYWJsZVBhcGVy
SGVpZ2h0KSk7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8ucGFn
ZVNldHVwU2NhbGVGYWN0b3IsIGluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgaW5mby5hdmFpbGFi
bGVQYXBlckhlaWdodCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShH
VEspCisgICAgaWYgKCFDb3JlSVBDOjpkZWNvZGUoZGVjb2RlciwgaW5mby5wcmludFNldHRpbmdz
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghQ29yZUlQQzo6ZGVjb2RlKGRlY29k
ZXIsIGluZm8ucGFnZVNldHVwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1ByaW50SW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5oCmluZGV4IDUw
MmJlOTMuLmI3M2I3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QcmludElu
Zm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmgKQEAgLTMwLDYgKzMw
LDEwIEBACiAKICNpZiBQTEFURk9STShNQUMpCiBPQkpDX0NMQVNTIE5TUHJpbnRJbmZvOworI2Vs
aWYgUExBVEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgX0d0a1ByaW50U2V0dGluZ3MgR3RrUHJp
bnRTZXR0aW5nczsKK3R5cGVkZWYgc3RydWN0IF9HdGtQYWdlU2V0dXAgR3RrUGFnZVNldHVwOwor
I2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNlbHNlCiAvLyBGSVhNRTogVGhpcyBz
aG91bGQgdXNlIHRoZSB3aW5kb3dzIGVxdWl2YWxlbnQuCiBjbGFzcyBOU1ByaW50SW5mbzsKQEAg
LTQ0LDEyICs0OCwyMSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IFByaW50SW5mbyB7
CiAgICAgUHJpbnRJbmZvKCk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGV4cGxpY2l0IFByaW50
SW5mbyhHdGtQcmludFNldHRpbmdzKiwgR3RrUGFnZVNldHVwKik7CisjZWxzZQogICAgIGV4cGxp
Y2l0IFByaW50SW5mbyhOU1ByaW50SW5mbyAqKTsKKyNlbmRpZgogCiAgICAgZmxvYXQgcGFnZVNl
dHVwU2NhbGVGYWN0b3I7CiAgICAgZmxvYXQgYXZhaWxhYmxlUGFwZXJXaWR0aDsKICAgICBmbG9h
dCBhdmFpbGFibGVQYXBlckhlaWdodDsKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHUmVmUHRy
PEd0a1ByaW50U2V0dGluZ3M+IHByaW50U2V0dGluZ3M7CisgICAgR1JlZlB0cjxHdGtQYWdlU2V0
dXA+IHBhZ2VTZXR1cDsKKyNlbmRpZgorCiAgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyKikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciosIFByaW50SW5mbyYpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKaW5kZXggMGNmYmQ0ZS4uNjk1Yzc0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKQEAgLTI2
LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcmd1bWVudENvZGVy
c0d0ay5oIgogCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvRGF0YU9iamVjdEd0ay5oPgpAQCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5n
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtMjE2LDQgKzIxOCw3MiBAQCBib29sIEFyZ3VtZW50Q29k
ZXI8RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBEcmFnRGF0YSYg
ZHJhZ0RhdAogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBlbmNvZGVHS2V5Rmls
ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIEdLZXlGaWxlKiBrZXlGaWxlKQoreworICAgIGdz
aXplIGRhdGFTaXplOworICAgIEdPd25QdHI8Y2hhcj4gZGF0YShnX2tleV9maWxlX3RvX2RhdGEo
a2V5RmlsZSwgJmRhdGFTaXplLCAwKSk7CisgICAgRGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNl
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEuZ2V0KCkpLCBkYXRhU2l6ZSk7CisgICAg
ZW5jb2Rlci0+ZW5jb2RlKGRhdGFSZWZlcmVuY2UpOworfQorCitzdGF0aWMgYm9vbCBkZWNvZGVH
S2V5RmlsZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdLZXlGaWxlKioga2V5RmlsZSkKK3sK
KyAgICBEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoZGF0YVJlZmVyZW5jZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICprZXlGaWxl
ID0gZ19rZXlfZmlsZV9uZXcoKTsKKyAgICBpZiAoIWdfa2V5X2ZpbGVfbG9hZF9mcm9tX2RhdGEo
KmtleUZpbGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ2NoYXIqPihkYXRhUmVmZXJlbmNlLmRh
dGEoKSksIGRhdGFSZWZlcmVuY2Uuc2l6ZSgpLCBHX0tFWV9GSUxFX05PTkUsIDApKSB7CisgICAg
ICAgIGdfa2V5X2ZpbGVfZnJlZSgqa2V5RmlsZSk7CisgICAgICAgICprZXlGaWxlID0gMDsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIEd0a1ByaW50U2V0dGluZ3MqIHByaW50
U2V0dGluZ3MpCit7CisgICAgR0tleUZpbGUqIGtleUZpbGUgPSBnX2tleV9maWxlX25ldygpOwor
ICAgIGd0a19wcmludF9zZXR0aW5nc190b19rZXlfZmlsZShwcmludFNldHRpbmdzLCBrZXlGaWxl
LCAiUHJpbnQgU2V0dGluZ3MiKTsKKyAgICBlbmNvZGVHS2V5RmlsZShlbmNvZGVyLCBrZXlGaWxl
KTsKKyAgICBnX2tleV9maWxlX2ZyZWUoa2V5RmlsZSk7Cit9CisKK2Jvb2wgZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiYgcHJpbnRTZXR0
aW5ncykKK3sKKyAgICBHS2V5RmlsZSoga2V5RmlsZTsKKyAgICBpZiAoIWRlY29kZUdLZXlGaWxl
KGRlY29kZXIsICZrZXlGaWxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHJpbnRT
ZXR0aW5ncyA9IGFkb3B0R1JlZihndGtfcHJpbnRfc2V0dGluZ3NfbmV3KCkpOworICAgIGlmICgh
Z3RrX3ByaW50X3NldHRpbmdzX2xvYWRfa2V5X2ZpbGUocHJpbnRTZXR0aW5ncy5nZXQoKSwga2V5
RmlsZSwgIlByaW50IFNldHRpbmdzIiwgMCkpCisgICAgICAgIHByaW50U2V0dGluZ3MgPSAwOwor
ICAgIGdfa2V5X2ZpbGVfZnJlZShrZXlGaWxlKTsKKworICAgIHJldHVybiBwcmludFNldHRpbmdz
OworfQorCit2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIEd0a1BhZ2VTZXR1
cCogcGFnZVNldHVwKQoreworICAgIEdLZXlGaWxlKiBrZXlGaWxlID0gZ19rZXlfZmlsZV9uZXco
KTsKKyAgICBndGtfcGFnZV9zZXR1cF90b19rZXlfZmlsZShwYWdlU2V0dXAsIGtleUZpbGUsICJQ
YWdlIFNldHVwIik7CisgICAgZW5jb2RlR0tleUZpbGUoZW5jb2Rlciwga2V5RmlsZSk7CisgICAg
Z19rZXlfZmlsZV9mcmVlKGtleUZpbGUpOworfQorCitib29sIGRlY29kZShBcmd1bWVudERlY29k
ZXIqIGRlY29kZXIsIEdSZWZQdHI8R3RrUGFnZVNldHVwPiYgcGFnZVNldHVwKQoreworICAgIEdL
ZXlGaWxlKiBrZXlGaWxlOworICAgIGlmICghZGVjb2RlR0tleUZpbGUoZGVjb2RlciwgJmtleUZp
bGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwYWdlU2V0dXAgPSBhZG9wdEdSZWYo
Z3RrX3BhZ2Vfc2V0dXBfbmV3KCkpOworICAgIGlmICghZ3RrX3BhZ2Vfc2V0dXBfbG9hZF9rZXlf
ZmlsZShwYWdlU2V0dXAuZ2V0KCksIGtleUZpbGUsICJQYWdlIFNldHVwIiwgMCkpCisgICAgICAg
IHBhZ2VTZXR1cCA9IDA7CisgICAgZ19rZXlfZmlsZV9mcmVlKGtleUZpbGUpOworCisgICAgcmV0
dXJuIHBhZ2VTZXR1cDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1
bWVudENvZGVyc0d0ay5oCmluZGV4IDgyZjQ2ZDIuLjg4ODQyNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKQEAgLTI3LDYgKzI3LDEwIEBACiAj
ZGVmaW5lIEFyZ3VtZW50Q29kZXJzR3RrX2gKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgi
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBfR3Rr
UHJpbnRTZXR0aW5ncyBHdGtQcmludFNldHRpbmdzOwordHlwZWRlZiBzdHJ1Y3QgX0d0a1BhZ2VT
ZXR1cCBHdGtQYWdlU2V0dXA7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFPYmpl
Y3RHdGs7CkBAIC00MCw2ICs0NCwxMiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OkRyYWdEYXRhPiB7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciosIFdlYkNvcmU6OkRyYWdEYXRhJik7CiB9OwogCit2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXIqLCBHdGtQcmludFNldHRpbmdzKik7Citib29sIGRlY29kZShBcmd1bWVudERlY29kZXIq
LCBHUmVmUHRyPEd0a1ByaW50U2V0dGluZ3M+Jik7CisKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciosIEd0a1BhZ2VTZXR1cCopOworYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgR1Jl
ZlB0cjxHdGtQYWdlU2V0dXA+Jik7CisKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlm
IC8vIEFyZ3VtZW50Q29kZXJzR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9ndGsvUHJpbnRJbmZvR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUHJpbnRJ
bmZvR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY2YjIwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9QcmludEluZm9HdGsu
Y3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByaW50SW5mby5o
IgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUHJpbnRJ
bmZvOjpQcmludEluZm8oR3RrUHJpbnRTZXR0aW5ncyogc2V0dGluZ3MsIEd0a1BhZ2VTZXR1cCog
cGFnZVNldHVwKQorICAgIDogcGFnZVNldHVwU2NhbGVGYWN0b3IoZ3RrX3ByaW50X3NldHRpbmdz
X2dldF9zY2FsZShzZXR0aW5ncykgLyAxMDAuMCkKKyAgICAsIGF2YWlsYWJsZVBhcGVyV2lkdGgo
Z3RrX3BhZ2Vfc2V0dXBfZ2V0X3BhcGVyX3dpZHRoKHBhZ2VTZXR1cCwgR1RLX1VOSVRfUE9JTlRT
KSAtIGd0a19wYWdlX3NldHVwX2dldF9sZWZ0X21hcmdpbihwYWdlU2V0dXAsIEdUS19VTklUX1BP
SU5UUykgLSBndGtfcGFnZV9zZXR1cF9nZXRfcmlnaHRfbWFyZ2luKHBhZ2VTZXR1cCwgR1RLX1VO
SVRfUE9JTlRTKSkKKyAgICAsIGF2YWlsYWJsZVBhcGVySGVpZ2h0KGd0a19wYWdlX3NldHVwX2dl
dF9wYXBlcl9oZWlnaHQocGFnZVNldHVwLCBHVEtfVU5JVF9QT0lOVFMpIC0gZ3RrX3BhZ2Vfc2V0
dXBfZ2V0X3RvcF9tYXJnaW4ocGFnZVNldHVwLCBHVEtfVU5JVF9QT0lOVFMpIC0gZ3RrX3BhZ2Vf
c2V0dXBfZ2V0X2JvdHRvbV9tYXJnaW4ocGFnZVNldHVwLCBHVEtfVU5JVF9QT0lOVFMpKQorICAg
ICwgcHJpbnRTZXR0aW5ncyhzZXR0aW5ncykKKyAgICAsIHBhZ2VTZXR1cChwYWdlU2V0dXApCit7
CisgICAgQVNTRVJUKHNldHRpbmdzKTsKKyAgICBBU1NFUlQocGFnZVNldHVwKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGQw
NDNlYjQuLjE1MzY5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKQEAgLTEzMyw3ICsxMzMsOSBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShH
VEspCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKyNp
bmNsdWRlICJXZWJQcmludE9wZXJhdGlvbkd0ay5oIgogI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVH
CkBAIC0yNjE3LDEwICsyNjE5LDE4IEBAIHZvaWQgV2ViUGFnZTo6YmVnaW5QcmludGluZyh1aW50
NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbykKIAogICAgIGZsb2F0IGZ1
bGxQYWdlSGVpZ2h0OwogICAgIG1fcHJpbnRDb250ZXh0LT5jb21wdXRlUGFnZVJlY3RzKEZsb2F0
UmVjdCgwLCAwLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2YWls
YWJsZVBhcGVySGVpZ2h0KSwgMCwgMCwgcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9yLCBm
dWxsUGFnZUhlaWdodCwgdHJ1ZSk7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgbV9wcmludE9w
ZXJhdGlvbiA9IFdlYlByaW50T3BlcmF0aW9uR3RrOjpjcmVhdGUocHJpbnRJbmZvKTsKKyAgICBt
X3ByaW50T3BlcmF0aW9uLT5zdGFydFByaW50KG1fcHJpbnRDb250ZXh0LmdldCgpKTsKKyNlbmRp
ZgogfQogCiB2b2lkIFdlYlBhZ2U6OmVuZFByaW50aW5nKCkKIHsKKyNpZiBQTEFURk9STShHVEsp
CisgICAgbV9wcmludE9wZXJhdGlvbiA9IDA7CisjZW5kaWYKICAgICBtX3ByaW50Q29udGV4dCA9
IG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCmluZGV4IDQwMDcyY2YuLjRiY2YzZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNzAsNiArNzAsNyBAQAogCiAjaWYgUExBVEZPUk0oR1RL
KQogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisjaW5jbHVkZSAiV2ViUHJpbnRPcGVy
YXRpb25HdGsuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTcxNyw2
ICs3MTgsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXI+IG1fbm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOwogCiAg
ICAgT3duUHRyPFdlYkNvcmU6OlByaW50Q29udGV4dD4gbV9wcmludENvbnRleHQ7CisjaWYgUExB
VEZPUk0oR1RLKQorICAgIFJlZlB0cjxXZWJQcmludE9wZXJhdGlvbkd0az4gbV9wcmludE9wZXJh
dGlvbjsKKyNlbmRpZgogCiAgICAgU2FuZGJveEV4dGVuc2lvblRyYWNrZXIgbV9zYW5kYm94RXh0
ZW5zaW9uVHJhY2tlcjsKICAgICB1aW50NjRfdCBtX3BhZ2VJRDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlv
bkd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5YzZmNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
UHJpbnRPcGVyYXRpb25HdGsuY3BwCkBAIC0wLDAgKzEsMzcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJQcmludE9wZXJhdGlvbkd0ay5oIgorCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1ByaW50Q29u
dGV4dC5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
KyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCisjaW5jbHVkZSA8Y2Fpcm8tcGRmLmg+Cisj
aW5jbHVkZSA8Y2Fpcm8tcHMuaD4KKyNpbmNsdWRlIDxndGsvZ3RrdW5peHByaW50Lmg+CisjZW5k
aWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5H
CitjbGFzcyBXZWJQcmludE9wZXJhdGlvbkd0a1VuaXg6IHB1YmxpYyBXZWJQcmludE9wZXJhdGlv
bkd0ayB7CitwdWJsaWM6CisgICAgV2ViUHJpbnRPcGVyYXRpb25HdGtVbml4KGNvbnN0IFByaW50
SW5mbyYgcHJpbnRJbmZvKQorICAgICAgICA6IFdlYlByaW50T3BlcmF0aW9uR3RrKHByaW50SW5m
bykKKyAgICAgICAgLCBtX3ByaW50Sm9iKDApCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBn
Ym9vbGVhbiBlbnVtZXJhdGVQcmludGVyc0Z1bmN0aW9uKEd0a1ByaW50ZXIqIHByaW50ZXIsIFdl
YlByaW50T3BlcmF0aW9uR3RrVW5peCogcHJpbnRPcGVyYXRpb24pCisgICAgeworICAgICAgICBH
dGtQcmludGVyKiBzZWxlY3RlZFByaW50ZXIgPSAwOworICAgICAgICBjb25zdCBjaGFyKiBwcmlu
dGVyTmFtZSA9IGd0a19wcmludF9zZXR0aW5nc19nZXRfcHJpbnRlcihwcmludE9wZXJhdGlvbi0+
cHJpbnRTZXR0aW5ncygpKTsKKyAgICAgICAgaWYgKHByaW50ZXJOYW1lKSB7CisgICAgICAgICAg
ICBpZiAoIXN0cmNtcChwcmludGVyTmFtZSwgZ3RrX3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlcikp
KQorICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJpbnRlciA9IHByaW50ZXI7CisgICAgICAgIH0g
ZWxzZSBpZiAoZ3RrX3ByaW50ZXJfaXNfZGVmYXVsdChwcmludGVyKSkKKyAgICAgICAgICAgIHNl
bGVjdGVkUHJpbnRlciA9IHByaW50ZXI7CisKKyAgICAgICAgaWYgKHNlbGVjdGVkUHJpbnRlcikg
eworICAgICAgICAgICAgcHJpbnRPcGVyYXRpb24tPm1fcHJpbnRKb2IgPSBhZG9wdEdSZWYoZ3Rr
X3ByaW50X2pvYl9uZXcoIldlYktpdCBwcmludCBqb2IiLCBzZWxlY3RlZFByaW50ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcmludE9wZXJhdGlvbi0+cHJpbnRTZXR0aW5ncygpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp
bnRPcGVyYXRpb24tPnBhZ2VTZXR1cCgpKSk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBlbnVtZXJhdGVQcmludGVyc0ZpbmlzaGVkKFdlYlByaW50T3BlcmF0aW9uR3RrVW5peCogcHJp
bnRPcGVyYXRpb24pCisgICAgeworICAgICAgICBpZiAoIXByaW50T3BlcmF0aW9uLT5tX3ByaW50
Sm9iKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJpbnRpbmcgZXJyb3IuCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmFuZ2VzQ291bnQ7CisgICAgICAg
IHByaW50T3BlcmF0aW9uLT5tX3BhZ2VSYW5nZXMgPSBndGtfcHJpbnRfam9iX2dldF9wYWdlX3Jh
bmdlcyhwcmludE9wZXJhdGlvbi0+bV9wcmludEpvYi5nZXQoKSwgJnJhbmdlc0NvdW50KTsKKyAg
ICAgICAgcHJpbnRPcGVyYXRpb24tPm1fcGFnZVJhbmdlc0NvdW50ID0gcmFuZ2VzQ291bnQ7Cisg
ICAgICAgIHByaW50T3BlcmF0aW9uLT5tX3ByaW50UGFnZXMgPSBndGtfcHJpbnRfam9iX2dldF9w
YWdlcyhwcmludE9wZXJhdGlvbi0+bV9wcmludEpvYi5nZXQoKSk7CisgICAgICAgIHByaW50T3Bl
cmF0aW9uLT5tX2RvUm90YXRlID0gZ3RrX3ByaW50X2pvYl9nZXRfcm90YXRlKHByaW50T3BlcmF0
aW9uLT5tX3ByaW50Sm9iLmdldCgpKTsKKworICAgICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UgPSBndGtfcHJpbnRfam9iX2dldF9zdXJmYWNlKHByaW50T3BlcmF0aW9uLT5tX3ByaW50Sm9i
LmdldCgpLCAwKTsKKyAgICAgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogUHJpbnRpbmcgZXJyb3IuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBwcmludE9wZXJhdGlvbi0+cHJpbnQoc3VyZmFjZSwgNzIsIDcyKTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0YXJ0UHJpbnQoV2ViQ29yZTo6UHJpbnRDb250ZXh0KiBwcmludENvbnRleHQpCisg
ICAgeworICAgICAgICBtX3ByaW50Q29udGV4dCA9IHByaW50Q29udGV4dDsKKyAgICAgICAgZ3Rr
X2VudW1lcmF0ZV9wcmludGVycyhyZWludGVycHJldF9jYXN0PEd0a1ByaW50ZXJGdW5jPihlbnVt
ZXJhdGVQcmludGVyc0Z1bmN0aW9uKSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihlbnVtZXJhdGVQcmludGVyc0Zp
bmlzaGVkKSwgRkFMU0UpOworICAgIH0KKworICAgIHZvaWQgc3RhcnRQYWdlKGNhaXJvX3QqIGNy
KQorICAgIHsKKyAgICAgICAgR3RrUGFwZXJTaXplKiBwYXBlclNpemUgPSBndGtfcGFnZV9zZXR1
cF9nZXRfcGFwZXJfc2l6ZShtX3BhZ2VTZXR1cC5nZXQoKSk7CisgICAgICAgIGRvdWJsZSB3aWR0
aCA9IGd0a19wYXBlcl9zaXplX2dldF93aWR0aChwYXBlclNpemUsIEdUS19VTklUX1BPSU5UUyk7
CisgICAgICAgIGRvdWJsZSBoZWlnaHQgPSBndGtfcGFwZXJfc2l6ZV9nZXRfaGVpZ2h0KHBhcGVy
U2l6ZSwgR1RLX1VOSVRfUE9JTlRTKTsKKworICAgICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UgPSBndGtfcHJpbnRfam9iX2dldF9zdXJmYWNlKG1fcHJpbnRKb2IuZ2V0KCksIDApOworICAg
ICAgICBjYWlyb19zdXJmYWNlX3R5cGVfdCBzdXJmYWNlVHlwZSA9IGNhaXJvX3N1cmZhY2VfZ2V0
X3R5cGUoc3VyZmFjZSk7CisgICAgICAgIGlmIChzdXJmYWNlVHlwZSA9PSBDQUlST19TVVJGQUNF
X1RZUEVfUFMpIHsKKyAgICAgICAgICAgIGNhaXJvX3BzX3N1cmZhY2Vfc2V0X3NpemUoc3VyZmFj
ZSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBjYWlyb19wc19zdXJmYWNlX2RzY19iZWdp
bl9wYWdlX3NldHVwKHN1cmZhY2UpOworCisgICAgICAgICAgICBzd2l0Y2ggKGd0a19wYWdlX3Nl
dHVwX2dldF9vcmllbnRhdGlvbihtX3BhZ2VTZXR1cC5nZXQoKSkpIHsKKyAgICAgICAgICAgIGNh
c2UgR1RLX1BBR0VfT1JJRU5UQVRJT05fUE9SVFJBSVQ6CisgICAgICAgICAgICBjYXNlIEdUS19Q
QUdFX09SSUVOVEFUSU9OX1JFVkVSU0VfUE9SVFJBSVQ6CisgICAgICAgICAgICAgICAgY2Fpcm9f
cHNfc3VyZmFjZV9kc2NfY29tbWVudChzdXJmYWNlLCAiJSVQYWdlT3JpZW50YXRpb246IFBvcnRy
YWl0Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdUS19QQUdF
X09SSUVOVEFUSU9OX0xBTkRTQ0FQRToKKyAgICAgICAgICAgIGNhc2UgR1RLX1BBR0VfT1JJRU5U
QVRJT05fUkVWRVJTRV9MQU5EU0NBUEU6CisgICAgICAgICAgICAgICAgY2Fpcm9fcHNfc3VyZmFj
ZV9kc2NfY29tbWVudChzdXJmYWNlLCAiJSVQYWdlT3JpZW50YXRpb246IExhbmRzY2FwZSIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KHN1cmZhY2VUeXBlID09IENBSVJPX1NVUkZBQ0VfVFlQRV9QREYpCisgICAgICAgICAgICBjYWly
b19wZGZfc3VyZmFjZV9zZXRfc2l6ZShzdXJmYWNlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisK
KyAgICB2b2lkIGVuZFBhZ2UoY2Fpcm9fdCogY3IpCisgICAgeworICAgICAgICBjYWlyb19zaG93
X3BhZ2UoY3IpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHByaW50Sm9iQ29tcGxldGUoR3Rr
UHJpbnRKb2IqIHByaW50Sm9iLCBXZWJQcmludE9wZXJhdGlvbkd0a1VuaXgqIHByaW50T3BlcmF0
aW9uLCBjb25zdCBHRXJyb3IqKQorICAgIHsKKyAgICAgICAgcHJpbnRPcGVyYXRpb24tPm1fcHJp
bnRKb2IgPSAwOworICAgIH0KKworICAgIHZvaWQgZW5kUHJpbnQoKQorICAgIHsKKyAgICAgICAg
Y2Fpcm9fc3VyZmFjZV9maW5pc2goZ3RrX3ByaW50X2pvYl9nZXRfc3VyZmFjZShtX3ByaW50Sm9i
LmdldCgpLCAwKSk7CisgICAgICAgIGd0a19wcmludF9qb2Jfc2VuZChtX3ByaW50Sm9iLmdldCgp
LCByZWludGVycHJldF9jYXN0PEd0a1ByaW50Sm9iQ29tcGxldGVGdW5jPihwcmludEpvYkNvbXBs
ZXRlKSwgdGhpcywgMCk7CisgICAgfQorCisgICAgR1JlZlB0cjxHdGtQcmludEpvYj4gbV9wcmlu
dEpvYjsKK307CisjZW5kaWYKKworI2lmZGVmIEdfT1NfV0lOMzIKK2NsYXNzIFdlYlByaW50T3Bl
cmF0aW9uR3RrV2luMzI6IHB1YmxpYyBXZWJQcmludE9wZXJhdGlvbkd0ayB7CitwdWJsaWM6Cisg
ICAgV2ViUHJpbnRPcGVyYXRpb25HdGtXaW4zMihjb25zdCBQcmludEluZm8mIHByaW50SW5mbykK
KyAgICAgICAgOiBXZWJQcmludE9wZXJhdGlvbkd0ayhwcmludEluZm8pCisgICAgeworICAgIH0K
KworICAgIHZvaWQgc3RhcnRQcmludChXZWJDb3JlOjpQcmludENvbnRleHQqIHByaW50Q29udGV4
dCkKKyAgICB7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgdm9pZCBz
dGFydFBhZ2UoY2Fpcm9fdCogY3IpCisgICAgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIH0KKworICAgIHZvaWQgZW5kUGFnZShjYWlyb190KiBjcikKKyAgICB7CisgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgdm9pZCBlbmRQcmludCgpCisgICAgeworICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KK307CisjZW5kaWYKKworc3RydWN0IFByaW50
UGFnZXNEYXRhIHsKKyAgICBQcmludFBhZ2VzRGF0YShXZWJQcmludE9wZXJhdGlvbkd0ayogcHJp
bnRPcGVyYXRpb24pCisgICAgICAgIDogcHJpbnRPcGVyYXRpb24ocHJpbnRPcGVyYXRpb24pCisg
ICAgICAgICwgdG90YWxQcmludGVkKC0xKQorICAgICAgICAsIHRvdGFsVG9QcmludCgwKQorICAg
ICAgICAsIHBhZ2VOdW1iZXIoMCkKKyAgICAgICAgLCBwYWdlUG9zaXRpb24oMCkKKyAgICAgICAg
LCBpc0RvbmUoZmFsc2UpCisgICAgeworICAgICAgICBpZiAocHJpbnRPcGVyYXRpb24tPnByaW50
UGFnZXMoKSA9PSBHVEtfUFJJTlRfUEFHRVNfUkFOR0VTKSB7CisgICAgICAgICAgICBWZWN0b3I8
R3RrUGFnZVJhbmdlPiBwYWdlUmFuZ2VzOworICAgICAgICAgICAgR3RrUGFnZVJhbmdlKiByYW5n
ZXMgPSBwcmludE9wZXJhdGlvbi0+cGFnZVJhbmdlcygpOworICAgICAgICAgICAgc2l6ZV90IHJh
bmdlc0NvdW50ID0gcHJpbnRPcGVyYXRpb24tPnBhZ2VSYW5nZXNDb3VudCgpOworICAgICAgICAg
ICAgaW50IHBhZ2VDb3VudCA9IHByaW50T3BlcmF0aW9uLT5wYWdlQ291bnQoKTsKKworICAgICAg
ICAgICAgcGFnZVJhbmdlcy5yZXNlcnZlQ2FwYWNpdHkocmFuZ2VzQ291bnQpOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByYW5nZXNDb3VudDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHJhbmdlc1tpXS5zdGFydCA+PSAwICYmIHJhbmdlc1tpXS5zdGFydCA8IHBhZ2VD
b3VudCAmJiByYW5nZXNbaV0uZW5kID49IDAgJiYgcmFuZ2VzW2ldLmVuZCA8IHBhZ2VDb3VudCkK
KyAgICAgICAgICAgICAgICAgICAgcGFnZVJhbmdlcy5hcHBlbmQocmFuZ2VzW2ldKTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChyYW5nZXNbaV0uc3RhcnQgPj0gMCAmJiByYW5nZXNbaV0uc3Rh
cnQgPCBwYWdlQ291bnQgJiYgcmFuZ2VzW2ldLmVuZCA+PSBwYWdlQ291bnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcGFnZVJhbmdlcy5hcHBlbmQocmFuZ2VzW2ldKTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFnZVJhbmdlcy5sYXN0KCkuZW5kID0gcGFnZUNvdW50IC0gMTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHJhbmdlc1tpXS5lbmQgPj0gMCAmJiByYW5nZXNbaV0uZW5kIDwgcGFn
ZUNvdW50ICYmIHJhbmdlc1tpXS5zdGFydCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFn
ZVJhbmdlcy5hcHBlbmQocmFuZ2VzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgcGFnZVJhbmdl
cy5sYXN0KCkuc3RhcnQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWdlUmFuZ2VzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHBhZ2VSYW5nZXNbaV0uc3RhcnQ7IGog
PD0gcGFnZVJhbmdlc1tpXS5lbmQ7ICsraikKKyAgICAgICAgICAgICAgICAgICAgcGFnZXMuYXBw
ZW5kKGopOworICAgICAgICAgICAgICAgIHRvdGFsVG9QcmludCArPSBwYWdlUmFuZ2VzW2ldLmVu
ZCAtIHBhZ2VSYW5nZXNbaV0uc3RhcnQgKyAxOworICAgICAgICAgICAgfQorCisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB0b3RhbFRvUHJpbnQgPSBwcmludE9wZXJhdGlvbi0+cGFnZUNv
dW50KCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdGFsVG9QcmludDsg
KytpKQorICAgICAgICAgICAgICAgIHBhZ2VzLmFwcGVuZChpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHBhZ2VOdW1iZXIgPSBwYWdlc1twYWdlUG9zaXRpb25dOworICAgIH0KKworICAgIHZvaWQg
aW5jcmVtZW50UGFnZVNlcXVlbmNlKCkKKyAgICB7CisgICAgICAgIGlmICh0b3RhbFByaW50ZWQg
PT0gLTEpIHsKKyAgICAgICAgICAgIHRvdGFsUHJpbnRlZCA9IDA7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBwYWdlUG9zaXRpb24rKzsKKyAgICAgICAgaWYgKHBh
Z2VQb3NpdGlvbiA+PSB0b3RhbFRvUHJpbnQpIHsKKyAgICAgICAgICAgIGlzRG9uZSA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGFnZU51bWJlciA9IHBh
Z2VzW3BhZ2VQb3NpdGlvbl07CisgICAgICAgIHRvdGFsUHJpbnRlZCsrOworICAgIH0KKworICAg
IFJlZlB0cjxXZWJQcmludE9wZXJhdGlvbkd0az4gcHJpbnRPcGVyYXRpb247CisKKyAgICBpbnQg
dG90YWxQcmludGVkOworICAgIHNpemVfdCB0b3RhbFRvUHJpbnQ7CisgICAgaW50IHBhZ2VOdW1i
ZXI7CisgICAgc2l6ZV90IHBhZ2VQb3NpdGlvbjsKKyAgICBWZWN0b3I8c2l6ZV90PiBwYWdlczsK
KworICAgIGJvb2wgaXNEb25lIDogMTsKK307CisKK1Bhc3NSZWZQdHI8V2ViUHJpbnRPcGVyYXRp
b25HdGs+IFdlYlByaW50T3BlcmF0aW9uR3RrOjpjcmVhdGUoY29uc3QgUHJpbnRJbmZvJiBwcmlu
dEluZm8pCit7CisjaWZkZWYgSEFWRV9HVEtfVU5JWF9QUklOVElORworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViUHJpbnRPcGVyYXRpb25HdGtVbml4KHByaW50SW5mbykpOworI2VuZGlmCisj
aWZkZWYgR19PU19XSU4zMgorICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUHJpbnRPcGVyYXRp
b25HdGtXaW4zMihwcmludEluZm8pKTsKKyNlbmRpZgorfQorCitXZWJQcmludE9wZXJhdGlvbkd0
azo6V2ViUHJpbnRPcGVyYXRpb25HdGsoY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8pCisgICAg
OiBtX3ByaW50U2V0dGluZ3MocHJpbnRJbmZvLnByaW50U2V0dGluZ3MuZ2V0KCkpCisgICAgLCBt
X3BhZ2VTZXR1cChwcmludEluZm8ucGFnZVNldHVwLmdldCgpKQorICAgICwgbV9wcmludENvbnRl
eHQoMCkKKyAgICAsIG1feERQSSgxKQorICAgICwgbV95RFBJKDEpCisgICAgLCBtX3ByaW50UGFn
ZXNJZGxlSWQoMCkKKyAgICAsIG1fcHJpbnRQYWdlcyhHVEtfUFJJTlRfUEFHRVNfQUxMKQorICAg
ICwgbV9wYWdlUmFuZ2VzKDApCisgICAgLCBtX3BhZ2VSYW5nZXNDb3VudCgwKQorICAgICwgbV9k
b1JvdGF0ZShmYWxzZSkKK3sKK30KKworV2ViUHJpbnRPcGVyYXRpb25HdGs6On5XZWJQcmludE9w
ZXJhdGlvbkd0aygpCit7CisgICAgaWYgKG1fcHJpbnRQYWdlc0lkbGVJZCkKKyAgICAgICAgZ19z
b3VyY2VfcmVtb3ZlKG1fcHJpbnRQYWdlc0lkbGVJZCk7Cit9CisKK2ludCBXZWJQcmludE9wZXJh
dGlvbkd0azo6cGFnZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcmludENvbnRleHQg
PyBtX3ByaW50Q29udGV4dC0+cGFnZUNvdW50KCkgOiAwOworfQorCit2b2lkIFdlYlByaW50T3Bl
cmF0aW9uR3RrOjpyb3RhdGVQYWdlKCkKK3sKKyAgICBHdGtQYXBlclNpemUqIHBhcGVyU2l6ZSA9
IGd0a19wYWdlX3NldHVwX2dldF9wYXBlcl9zaXplKG1fcGFnZVNldHVwLmdldCgpKTsKKyAgICBk
b3VibGUgd2lkdGggPSBndGtfcGFwZXJfc2l6ZV9nZXRfd2lkdGgocGFwZXJTaXplLCBHVEtfVU5J
VF9JTkNIKSAqIG1feERQSTsKKyAgICBkb3VibGUgaGVpZ2h0ID0gZ3RrX3BhcGVyX3NpemVfZ2V0
X2hlaWdodChwYXBlclNpemUsIEdUS19VTklUX0lOQ0gpICogbV95RFBJOworCisgICAgY2Fpcm9f
bWF0cml4X3QgbWF0cml4OworICAgIHN3aXRjaCAoZ3RrX3BhZ2Vfc2V0dXBfZ2V0X29yaWVudGF0
aW9uKG1fcGFnZVNldHVwLmdldCgpKSkgeworICAgIGNhc2UgR1RLX1BBR0VfT1JJRU5UQVRJT05f
TEFORFNDQVBFOgorICAgICAgICBjYWlyb190cmFuc2xhdGUobV9jYWlyb0NvbnRleHQuZ2V0KCks
IDAsIGhlaWdodCk7CisgICAgICAgIGNhaXJvX21hdHJpeF9pbml0KCZtYXRyaXgsIDAsIC0xLCAx
LCAwLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fdHJhbnNmb3JtKG1fY2Fpcm9Db250ZXh0LmdldCgp
LCAmbWF0cml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHVEtfUEFHRV9PUklFTlRBVElP
Tl9SRVZFUlNFX1BPUlRSQUlUOgorICAgICAgICBjYWlyb190cmFuc2xhdGUobV9jYWlyb0NvbnRl
eHQuZ2V0KCksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBjYWlyb19tYXRyaXhfaW5pdCgmbWF0
cml4LCAtMSwgMCwgMCwgLTEsIDAsIDApOworICAgICAgICBjYWlyb190cmFuc2Zvcm0obV9jYWly
b0NvbnRleHQuZ2V0KCksICZtYXRyaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdUS19Q
QUdFX09SSUVOVEFUSU9OX1JFVkVSU0VfTEFORFNDQVBFOgorICAgICAgICBjYWlyb190cmFuc2xh
dGUobV9jYWlyb0NvbnRleHQuZ2V0KCksIHdpZHRoLCAwKTsKKyAgICAgICAgY2Fpcm9fbWF0cml4
X2luaXQoJm1hdHJpeCwgMCwgMSwgLTEsIDAsIDAsIDApOworICAgICAgICBjYWlyb190cmFuc2Zv
cm0obV9jYWlyb0NvbnRleHQuZ2V0KCksICZtYXRyaXgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdUS19QQUdFX09SSUVOVEFUSU9OX1BPUlRSQUlUOgorICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCBXZWJQcmludE9wZXJhdGlvbkd0azo6cmVuZGVyUGFn
ZShpbnQgcGFnZU51bWJlcikKK3sKKyAgICBzdGFydFBhZ2UobV9jYWlyb0NvbnRleHQuZ2V0KCkp
OworCisgICAgaWYgKG1fZG9Sb3RhdGUpCisgICAgICAgIHJvdGF0ZVBhZ2UoKTsKKworICAgIGRv
dWJsZSBsZWZ0ID0gZ3RrX3BhZ2Vfc2V0dXBfZ2V0X2xlZnRfbWFyZ2luKG1fcGFnZVNldHVwLmdl
dCgpLCBHVEtfVU5JVF9JTkNIKTsKKyAgICBkb3VibGUgdG9wID0gZ3RrX3BhZ2Vfc2V0dXBfZ2V0
X3RvcF9tYXJnaW4obV9wYWdlU2V0dXAuZ2V0KCksIEdUS19VTklUX0lOQ0gpOworICAgIGNhaXJv
X3RyYW5zbGF0ZShtX2NhaXJvQ29udGV4dC5nZXQoKSwgbGVmdCAqIG1feERQSSwgdG9wICogbV95
RFBJKTsKKworICAgIGRvdWJsZSBwYWdlV2lkdGggPSBndGtfcGFnZV9zZXR1cF9nZXRfcGFnZV93
aWR0aChtX3BhZ2VTZXR1cC5nZXQoKSwgR1RLX1VOSVRfSU5DSCkgKiBtX3hEUEk7CisgICAgV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0Q2Fpcm8gcGxhdGZvcm1Db250ZXh0KG1fY2Fpcm9Db250ZXh0
LmdldCgpKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KCZw
bGF0Zm9ybUNvbnRleHQpOworICAgIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoZ3JhcGhpY3ND
b250ZXh0LCBwYWdlTnVtYmVyLCBwYWdlV2lkdGgpOworCisgICAgZW5kUGFnZShtX2NhaXJvQ29u
dGV4dC5nZXQoKSk7Cit9CisKK2dib29sZWFuIFdlYlByaW50T3BlcmF0aW9uR3RrOjpwcmludFBh
Z2VzSWRsZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBQcmludFBhZ2VzRGF0YSogZGF0YSA9
IHN0YXRpY19jYXN0PFByaW50UGFnZXNEYXRhKj4odXNlckRhdGEpOworCisgICAgZGF0YS0+aW5j
cmVtZW50UGFnZVNlcXVlbmNlKCk7CisgICAgaWYgKGRhdGEtPmlzRG9uZSkKKyAgICAgICAgcmV0
dXJuIEZBTFNFOworCisgICAgZGF0YS0+cHJpbnRPcGVyYXRpb24tPnJlbmRlclBhZ2UoZGF0YS0+
cGFnZU51bWJlcik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgV2ViUHJpbnRPcGVyYXRp
b25HdGs6OnByaW50UGFnZXNJZGxlRG9uZShncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBQcmlu
dFBhZ2VzRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFByaW50UGFnZXNEYXRhKj4odXNlckRhdGEp
OworCisgICAgZGF0YS0+cHJpbnRPcGVyYXRpb24tPnByaW50RG9uZSgpOworICAgIGRlbGV0ZSBk
YXRhOworfQorCit2b2lkIFdlYlByaW50T3BlcmF0aW9uR3RrOjpwcmludERvbmUoKQoreworICAg
IG1fcHJpbnRQYWdlc0lkbGVJZCA9IDA7CisKKyAgICBlbmRQcmludCgpOworICAgIG1fY2Fpcm9D
b250ZXh0ID0gMDsKK30KKwordm9pZCBXZWJQcmludE9wZXJhdGlvbkd0azo6cHJpbnQoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlLCBkb3VibGUgeERQSSwgZG91YmxlIHlEUEkpCit7CisgICAgQVNT
RVJUKG1fcHJpbnRDb250ZXh0KTsKKworICAgIG1feERQSSA9IHhEUEk7CisgICAgbV95RFBJID0g
eURQSTsKKyAgICBtX2NhaXJvQ29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNl
KSk7CisKKyAgICBQcmludFBhZ2VzRGF0YSogZGF0YSA9IG5ldyBQcmludFBhZ2VzRGF0YSh0aGlz
KTsKKyAgICBtX3ByaW50UGFnZXNJZGxlSWQgPSBnZGtfdGhyZWFkc19hZGRfaWRsZV9mdWxsKEdf
UFJJT1JJVFlfREVGQVVMVF9JRExFICsgMTAsIHByaW50UGFnZXNJZGxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgcHJpbnRQYWdlc0lk
bGVEb25lKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjRhOTFmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmgKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYlByaW50T3BlcmF0aW9uR3RrX2gKKyNkZWZpbmUgV2ViUHJpbnRPcGVy
YXRpb25HdGtfaAorCisjaW5jbHVkZSAiUHJpbnRJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9S
ZWZQdHJDYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3R5cGVk
ZWYgc3RydWN0IF9HdGtQcmludFNldHRpbmdzIEd0a1ByaW50U2V0dGluZ3M7Cit0eXBlZGVmIHN0
cnVjdCBfR3RrUGFnZVNldHVwIEd0a1BhZ2VTZXR1cDsKK3R5cGVkZWYgc3RydWN0IF9HdGtQYWdl
UmFuZ2UgR3RrUGFnZVJhbmdlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQcmludENv
bnRleHQ7Cit9OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUHJpbnRPcGVyYXRp
b25HdGsgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQcmludE9wZXJhdGlvbkd0az4geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlByaW50T3BlcmF0aW9uR3RrPiBjcmVhdGUoY29u
c3QgUHJpbnRJbmZvJik7CisgICAgfldlYlByaW50T3BlcmF0aW9uR3RrKCk7CisKKyAgICBHdGtQ
cmludFNldHRpbmdzKiBwcmludFNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9wcmludFNldHRp
bmdzLmdldCgpOyB9CisgICAgR3RrUGFnZVNldHVwKiBwYWdlU2V0dXAoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2VTZXR1cC5nZXQoKTsgfQorICAgIHVuc2lnbmVkIGludCBwcmludFBhZ2VzKCkgY29u
c3QgeyByZXR1cm4gbV9wcmludFBhZ2VzOyB9CisgICAgaW50IHBhZ2VDb3VudCgpIGNvbnN0Owor
ICAgIEd0a1BhZ2VSYW5nZSogcGFnZVJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJhbmdl
czsgfQorICAgIHNpemVfdCBwYWdlUmFuZ2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VS
YW5nZXNDb3VudDsgfQorCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0UHJpbnQoV2ViQ29yZTo6UHJp
bnRDb250ZXh0KikgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgV2ViUHJpbnRPcGVyYXRpb25HdGso
Y29uc3QgUHJpbnRJbmZvJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQYWdlKGNhaXJvX3Qq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhZ2UoY2Fpcm9fdCopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5kUHJpbnQoKSA9IDA7CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcHJpbnRQYWdl
c0lkbGUoZ3BvaW50ZXIpOworICAgIHN0YXRpYyB2b2lkIHByaW50UGFnZXNJZGxlRG9uZShncG9p
bnRlcik7CisKKyAgICB2b2lkIHByaW50KGNhaXJvX3N1cmZhY2VfdCosIGRvdWJsZSB4RFBJLCBk
b3VibGUgeURQSSk7CisgICAgdm9pZCByZW5kZXJQYWdlKGludCBwYWdlTnVtYmVyKTsKKyAgICB2
b2lkIHJvdGF0ZVBhZ2UoKTsKKyAgICB2b2lkIHByaW50RG9uZSgpOworCisgICAgR1JlZlB0cjxH
dGtQcmludFNldHRpbmdzPiBtX3ByaW50U2V0dGluZ3M7CisgICAgR1JlZlB0cjxHdGtQYWdlU2V0
dXA+IG1fcGFnZVNldHVwOworICAgIFdlYkNvcmU6OlByaW50Q29udGV4dCogbV9wcmludENvbnRl
eHQ7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1fY2Fpcm9Db250ZXh0OworICAgIGRvdWJsZSBtX3hE
UEk7CisgICAgZG91YmxlIG1feURQSTsKKworICAgIHVuc2lnbmVkIGludCBtX3ByaW50UGFnZXNJ
ZGxlSWQ7CisgICAgdW5zaWduZWQgaW50IG1fcHJpbnRQYWdlczsKKyAgICBHdGtQYWdlUmFuZ2Uq
IG1fcGFnZVJhbmdlczsKKyAgICBzaXplX3QgbV9wYWdlUmFuZ2VzQ291bnQ7CisgICAgYm9vbCBt
X2RvUm90YXRlOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViUHJpbnRPcGVyYXRpb25HdGtfaApk
aWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDI4MTM0ODcuLjhk
ZjVkYjYgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTEw
NzEsNiArMTA3MSwxNiBAQCBpZiB0ZXN0ICIkZW5hYmxlX3dlYmtpdDIiID0gInllcyI7IHRoZW4K
ICAgIGlmIHRlc3QgIiRHVEtfQVBJX1ZFUlNJT04iID0gIjIuMCI7IHRoZW4KICAgICAgIEFDX01T
R19FUlJPUihbV2ViS2l0MiByZXF1aXJlcyBHVEsrIDMueCwgdXNlIC0td2l0aC1ndGs9My4wXSkK
ICAgIGZpCisKKyAgICMgQ2hlY2sgVW5peCBwcmludGluZworICAgUEtHX0NIRUNLX01PRFVMRVMo
R1RLX1VOSVhfUFJJTlRJTkcsIGd0aystdW5peC1wcmludC0zLjAsCisgICAgICAgICAgICAgICAg
ICAgICBbaGF2ZV9ndGtfdW5peF9wcmludGluZz15ZXNdLAorICAgICAgICAgICAgICAgICAgICAg
W2hhdmVfZ3RrX3VuaXhfcHJpbnRpbmc9bm9dKQorICAgQUNfU1VCU1QoR1RLX1VOSVhfUFJJTlRJ
TkdfQ0ZMQUdTKQorICAgQUNfU1VCU1QoR1RLX1VOSVhfUFJJTlRJTkdfTElCUykKKyAgIGlmIHRl
c3QgIiRoYXZlX2d0a191bml4X3ByaW50aW5nIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgQUNfREVG
SU5FKFtIQVZFX0dUS19VTklYX1BSSU5USU5HXSwgWzFdLCBbRGVmaW5lIGlmIEdUSysgVU5JWCBQ
cmludGluZyBpcyBhdmFpbGFibGVdKQorICAgZmkKIGZpCiAKICMgUGx1Z2luIFByb2Nlc3MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122755</attachid>
            <date>2012-01-17 06:19:50 -0800</date>
            <delta_ts>2012-01-18 06:05:06 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-web-process-printing2.diff</filename>
            <type>text/plain</type>
            <size>39266</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3NmM5NTViLi4zNzgxODdl
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTItMDEtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBiYXNpYyBwcmludGluZyBzdXBwb3J0IHRvIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTcyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb25maWd1cmUu
YWM6IENoZWNrIHdoZXRoZXIgR1RLKyBVTklYIHByaW50aW5nIGlzIGF2YWlsYWJsZS4KKwogMjAx
Mi0wMS0xNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dUS10gVXBkYXRlIE5FV1MgYW5kIGNvbmZpZ3VyZS5hYyBmb3IgMS43LjQgcmVsZWFz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IDc0M2I5M2EuLjMzN2FlNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
MyBAQAorMjAxMi0wMS0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gQWRkIGJhc2ljIHByaW50aW5nIHN1cHBvcnQgdG8gV2ViS2l0
MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzYxNzIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFNoYXJl
ZC9QcmludEluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpQcmludEluZm86OmVuY29kZSk6IEVu
Y29kZSBhbHNvIEd0a1ByaW50U2V0dGluZ3MgYW5kCisgICAgICAgIEd0a1BhZ2VTZXR1cCBmb3Ig
dGhlIEdUSysgcG9ydC4KKyAgICAgICAgKFdlYktpdDo6UHJpbnRJbmZvOjpkZWNvZGUpOiBEZWNv
ZGUgYWxzbyBHdGtQcmludFNldHRpbmdzIGFuZAorICAgICAgICBHdGtQYWdlU2V0dXAgZm9yIHRo
ZSBHVEsrIHBvcnQuCisgICAgICAgICogU2hhcmVkL1ByaW50SW5mby5oOiBBZGQgR3RrUHJpbnRT
ZXR0aW5ncyBhbmQgR3RrUGFnZVNldHVwIG1lbWJlcgorICAgICAgICBmb3IgdGhlIEdUSysgcG9y
dC4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcDoKKyAgICAgICAg
KENvcmVJUEM6OmVuY29kZUdLZXlGaWxlKTogSGVscGVyIGZ1bmN0aW9uIHRvIGVuY29kZSBhIEdL
ZXlGaWxlIGFzCisgICAgICAgIGEgRGF0YVJlZmVyZW5jZSBvYmplY3QuCisgICAgICAgIChDb3Jl
SVBDOjpkZWNvZGVHS2V5RmlsZSk6IEhlbHBlciBmdW5jdGlvbiB0byBkZWNvZGUgYSBHS2V5Rmls
ZSB0bworICAgICAgICBhIERhdGFSZWZlcmVuY2Ugb2JqZWN0LgorICAgICAgICAoQ29yZUlQQzo6
ZW5jb2RlKTogRW5jb2RlIEd0a1ByaW50U2V0dGluZ3MgYW5kIEd0a1BhZ2VTZXR1cCB1c2luZwor
ICAgICAgICB0aGUgR0tleUZpbGUgcmVwcmVzZW50YXRpb24uCisgICAgICAgIChDb3JlSVBDOjpk
ZWNvZGUpOiBEZWNvZGUgR3RrUHJpbnRTZXR0aW5ncyBhbmQgR3RrUGFnZVNldHVwIHVzaW5nCisg
ICAgICAgIHRoZSBHS2V5RmlsZSByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgKiBTaGFyZWQvZ3Rr
L0FyZ3VtZW50Q29kZXJzR3RrLmg6CisgICAgICAgICogU2hhcmVkL2d0ay9QcmludEluZm9HdGsu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmNwcC4KKyAg
ICAgICAgKFdlYktpdDo6UHJpbnRJbmZvOjpQcmludEluZm8pOiBBZGQgUHJpbnRJbmZvIGNvbnN0
cnVjdG9yIHRoYXQKKyAgICAgICAgdGFrZXMgR3RrUHJpbnRTZXR0aW5ncyBhbmQgR3RrUGFnZVNl
dHVwIGluc3RhbmNlcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmF3UGFnZXNGb3JQcmludGluZyk6IFNlbmQK
KyAgICAgICAgRHJhd1BhZ2VzRm9yUHJpbnRpbmcgbWVzc2FnZSB0byBXZWIgcHJvY2VzcyB0byBz
dGFydCBwcmludGluZy4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpiZWdpblByaW50aW5nKTogQ3JlYXRlIGEgV2ViUHJpbnRPcGVyYXRpb25HdGsuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVuZFByaW50aW5nKTogRGVsZXRlIHRoZSBXZWJQcmlu
dE9wZXJhdGlvbkd0aworICAgICAgICBvYmplY3QuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OmRyYXdQYWdlc0ZvclByaW50aW5nKTogU3RhcnQgcHJpbnRpbmcgcGFnZXMuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbjogQWRkIERyYXdQYWdlc0ZvclByaW50aW5nIG1lc3NhZ2Uu
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQcmludFBhZ2VzRGF0YTo6UHJpbnRQYWdlc0Rh
dGEpOiBTdHJ1Y3QgdG8gc3RvcmUgYWxsIGRhdGEKKyAgICAgICAgdXNlZCB0byByZW5kZXIgcGFn
ZXMgZm9yIHByaW50aW5nLgorICAgICAgICAoV2ViS2l0OjpQcmludFBhZ2VzRGF0YTo6aW5jcmVt
ZW50UGFnZVNlcXVlbmNlKTogSGVscGVyIGZ1bmN0aW9uCisgICAgICAgIHRvIGluY3JlbWVudCB0
aGUgcGFnZSBzZXF1ZW5jZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6
OmNyZWF0ZSk6IENyZWF0ZSBhCisgICAgICAgIFdlYlByaW50T3BlcmF0aW9uR3RrVW5peCBvciBX
ZWJQcmludE9wZXJhdGlvbkd0a1dpbjMyIGRlcGVuZGluZyBvbgorICAgICAgICB0aGUgcGxhdGZv
cm0uCisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpXZWJQcmludE9wZXJh
dGlvbkd0ayk6CisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjp+V2ViUHJp
bnRPcGVyYXRpb25HdGspOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6
cGFnZUNvdW50KTogUmV0dXJuIHRoZSB0b3RhbCBwYWdlcworICAgICAgICBvZiB0aGUgZG9jdW1l
bnQgdG8gcHJpbnQuCisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpyb3Rh
dGVQYWdlKTogSGVscGVyIGZ1bmN0aW9uIHRvCisgICAgICAgIHRyYW5zZm9ybSB0aGUgY29udGV4
dCBhY2NvcmRpbmcgdG8gb3JpZW50YXRpb24uCisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3Bl
cmF0aW9uR3RrOjpyZW5kZXJQYWdlKTogUmVuZGVyIHRoZSBnaXZlbiBwYWdlCisgICAgICAgIGlu
dG8gdGhlIHByaW50aW5nIGNvbnRleHQuCisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0
aW9uR3RrOjpwcmludFBhZ2VzSWRsZSk6IElkbGUgZnVuY3Rpb24gdXNlZAorICAgICAgICB0byBw
cmludCBwYWdlcy4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnByaW50
UGFnZXNJZGxlRG9uZSk6IENhbGxiYWNrCisgICAgICAgIGNhbGxlZCB3aGVuIHByaW50UGFnZXNJ
ZGxlIGZpbmlzaGVzLgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cHJp
bnREb25lKTogSGVscGVyIGZ1bmN0aW9uIHRvCisgICAgICAgIGZpbmlzaCB0aGUgcHJpbnQgb3Bl
cmF0aW9uLCBjYWxsZWQgd2hlbiBhbGwgcGFnZXMgaGF2ZSBiZWVuIHJlbmRlcmVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cHJpbnQpOiBTdGFydCBwcmludGluZyB0
aGUgZG9jdW1lbnQKKyAgICAgICAgdXNpbmcgdGhlIGdpdmVuIGNhaXJvIHN1cmZhY2UuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnByaW50U2V0dGluZ3Mp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cGFnZVNldHVwKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnByaW50UGFnZXMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cGFnZVJhbmdlcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpwYWdlUmFuZ2VzQ291bnQpOgorCiAyMDEyLTAx
LTE2ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzEwNzAyNzU4PiBSRUdSRVNTSU9OOiBFdmVyeSBTYWZhcmkgUmVhZGVyIFdLVmlldyBs
ZWFrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBhNzcxYjlkLi45YTkyYzJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbQpAQCAtMzIxLDYgKzMyMSw3IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19B
UElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJ
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9QbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1ByaW50SW5mb0d0ay5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9ndGsvV2ViQ29yZUFyZ3VtZW50Q29kZXJzR3RrLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9XZWJFdmVudEZhY3RvcnkuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5oIFwKQEAgLTg5NCw2ICs4OTUsOCBAQCBsaWJ3ZWJr
aXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9S
X1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5k
Q29udHJvbGxlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dl
Ykluc3BlY3Rvckd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViUGFnZUd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmggXAogCVNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuaCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBcCkBAIC05OTgsNiArMTAwMSw3IEBAIGxpYndl
YmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlO
T1JfVkVSU0lPTkBfbGFfQ1BQCiAJJChDT1ZFUkFHRV9DRkxBR1MpIFwKIAkkKEdMSUJfQ0ZMQUdT
KSBcCiAJJChHVEtfQ0ZMQUdTKSBcCisJJChHVEtfVU5JWF9QUklOVElOR19DRkxBR1MpIFwKIAkk
KExJQlNPVVBfQ0ZMQUdTKSBcCiAJJChVTklDT0RFX0NGTEFHUykgXAogCSQoWFRfQ0ZMQUdTKQpA
QCAtMTA1MSw2ICsxMDU1LDcgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9W
RVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9MSUIKIAkkKEdMSUJfTElC
UykgXAogCSQoR1NUUkVBTUVSX0xJQlMpIFwKIAkkKEdUS19MSUJTKSBcCisJJChHVEtfVU5JWF9Q
UklOVElOR19MSUJTKSBcCiAJJChKUEVHX0xJQlMpIFwKIAkkKExJQlNPVVBfTElCUykgXAogCSQo
TElCWE1MX0xJQlMpIFwKQEAgLTEyMTYsNiArMTIyMSw3IEBAIFByb2dyYW1zX1dlYktpdFdlYlBy
b2Nlc3NfQ0ZMQUdTID0gXAogCSQoQ0FJUk9fQ0ZMQUdTKSBcCiAJJChHTElCX0NGTEFHUykgXAog
CSQoR1RLX0NGTEFHUykgXAorCSQoR1RLX1VOSVhfUFJJTlRJTkdfQ0ZMQUdTKSBcCiAJJChMSUJT
T1VQX0NGTEFHUykgXAogCSQoWkxJQl9DRkxBR1MpCiAKQEAgLTEyMjYsNiArMTIzMiw3IEBAIFBy
b2dyYW1zX1dlYktpdFdlYlByb2Nlc3NfTERBREQgPSBcCiAJbGlid2Via2l0Mmd0ay1AV0VCS0lU
R1RLX0FQSV9NQUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBc
CiAJJChHTElCX0xJQlMpIFwKIAkkKEdUS19MSUJTKSBcCisJJChHVEtfVU5JWF9QUklOVElOR19M
SUJTKSBcCiAJJChMSUJTT1VQX0xJQlMpIFwKIAkkKFpMSUJfQ0ZMQUdTKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9QcmludEluZm8uY3BwCmluZGV4IDIzZDNlZjkuLmNlMTE5MzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9QcmludEluZm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9QcmludEluZm8uY3BwCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgIkFyZ3VtZW50
RW5jb2Rlci5oIgogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogCisjaWYgUExBVEZPUk0oR1RLKQor
I2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIFByaW50SW5mbzo6UHJpbnRJbmZvKCkKQEAgLTQyLDExICs0NiwyNSBAQCBQcmludElu
Zm86OlByaW50SW5mbygpCiB2b2lkIFByaW50SW5mbzo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciogZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyLT5lbmNvZGUoQ29yZUlQQzo6
SW4ocGFnZVNldHVwU2NhbGVGYWN0b3IsIGF2YWlsYWJsZVBhcGVyV2lkdGgsIGF2YWlsYWJsZVBh
cGVySGVpZ2h0KSk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIENvcmVJUEM6OmVuY29kZShlbmNv
ZGVyLCBwcmludFNldHRpbmdzLmdldCgpKTsKKyAgICBDb3JlSVBDOjplbmNvZGUoZW5jb2Rlciwg
cGFnZVNldHVwLmdldCgpKTsKKyNlbmRpZgogfQogCiBib29sIFByaW50SW5mbzo6ZGVjb2RlKENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUHJpbnRJbmZvJiBpbmZvKQogewotICAg
IHJldHVybiBkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8ucGFnZVNldHVwU2NhbGVG
YWN0b3IsIGluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgaW5mby5hdmFpbGFibGVQYXBlckhlaWdo
dCkpOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKENvcmVJUEM6Ok91dChpbmZvLnBhZ2VTZXR1
cFNjYWxlRmFjdG9yLCBpbmZvLmF2YWlsYWJsZVBhcGVyV2lkdGgsIGluZm8uYXZhaWxhYmxlUGFw
ZXJIZWlnaHQpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgUExBVEZPUk0oR1RLKQor
ICAgIGlmICghQ29yZUlQQzo6ZGVjb2RlKGRlY29kZXIsIGluZm8ucHJpbnRTZXR0aW5ncykpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIUNvcmVJUEM6OmRlY29kZShkZWNvZGVyLCBp
bmZvLnBhZ2VTZXR1cCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Qcmlu
dEluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QcmludEluZm8uaAppbmRleCA1MDJiZTkz
Li5iNzNiN2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmgK
KysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5oCkBAIC0zMCw2ICszMCwxMCBA
QAogCiAjaWYgUExBVEZPUk0oTUFDKQogT0JKQ19DTEFTUyBOU1ByaW50SW5mbzsKKyNlbGlmIFBM
QVRGT1JNKEdUSykKK3R5cGVkZWYgc3RydWN0IF9HdGtQcmludFNldHRpbmdzIEd0a1ByaW50U2V0
dGluZ3M7Cit0eXBlZGVmIHN0cnVjdCBfR3RrUGFnZVNldHVwIEd0a1BhZ2VTZXR1cDsKKyNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAjZWxzZQogLy8gRklYTUU6IFRoaXMgc2hvdWxk
IHVzZSB0aGUgd2luZG93cyBlcXVpdmFsZW50LgogY2xhc3MgTlNQcmludEluZm87CkBAIC00NCwx
MiArNDgsMjEgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBQcmludEluZm8gewogICAg
IFByaW50SW5mbygpOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBleHBsaWNpdCBQcmludEluZm8o
R3RrUHJpbnRTZXR0aW5ncyosIEd0a1BhZ2VTZXR1cCopOworI2Vsc2UKICAgICBleHBsaWNpdCBQ
cmludEluZm8oTlNQcmludEluZm8gKik7CisjZW5kaWYKIAogICAgIGZsb2F0IHBhZ2VTZXR1cFNj
YWxlRmFjdG9yOwogICAgIGZsb2F0IGF2YWlsYWJsZVBhcGVyV2lkdGg7CiAgICAgZmxvYXQgYXZh
aWxhYmxlUGFwZXJIZWlnaHQ7CiAKKyNpZiBQTEFURk9STShHVEspCisgICAgR1JlZlB0cjxHdGtQ
cmludFNldHRpbmdzPiBwcmludFNldHRpbmdzOworICAgIEdSZWZQdHI8R3RrUGFnZVNldHVwPiBw
YWdlU2V0dXA7CisjZW5kaWYKKwogICAgIHZvaWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5j
b2RlciopIGNvbnN0OwogICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqLCBQcmludEluZm8mKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
QXJndW1lbnRDb2RlcnNHdGsuY3BwCmluZGV4IDBjZmJkNGUuLjY5NWM3NDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsu
aCIKIAorI2luY2x1ZGUgIkRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRt
YXAuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL0RhdGFPYmplY3RHdGsuaD4KQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3RrVmVyc2lvbmluZy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKQEAgLTIxNiw0ICsyMTgsNzIgQEAgYm9vbCBBcmd1bWVudENvZGVyPERy
YWdEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRHJhZ0RhdGEmIGRyYWdE
YXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgZW5jb2RlR0tleUZpbGUoQXJn
dW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBHS2V5RmlsZSoga2V5RmlsZSkKK3sKKyAgICBnc2l6ZSBk
YXRhU2l6ZTsKKyAgICBHT3duUHRyPGNoYXI+IGRhdGEoZ19rZXlfZmlsZV90b19kYXRhKGtleUZp
bGUsICZkYXRhU2l6ZSwgMCkpOworICAgIERhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZShyZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhLmdldCgpKSwgZGF0YVNpemUpOworICAgIGVuY29k
ZXItPmVuY29kZShkYXRhUmVmZXJlbmNlKTsKK30KKworc3RhdGljIGJvb2wgZGVjb2RlR0tleUZp
bGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHS2V5RmlsZSoqIGtleUZpbGUpCit7CisgICAg
RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGRh
dGFSZWZlcmVuY2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAqa2V5RmlsZSA9IGdf
a2V5X2ZpbGVfbmV3KCk7CisgICAgaWYgKCFnX2tleV9maWxlX2xvYWRfZnJvbV9kYXRhKCprZXlG
aWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGdjaGFyKj4oZGF0YVJlZmVyZW5jZS5kYXRhKCkp
LCBkYXRhUmVmZXJlbmNlLnNpemUoKSwgR19LRVlfRklMRV9OT05FLCAwKSkgeworICAgICAgICBn
X2tleV9maWxlX2ZyZWUoKmtleUZpbGUpOworICAgICAgICAqa2V5RmlsZSA9IDA7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBlbmNv
ZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBHdGtQcmludFNldHRpbmdzKiBwcmludFNldHRp
bmdzKQoreworICAgIEdLZXlGaWxlKiBrZXlGaWxlID0gZ19rZXlfZmlsZV9uZXcoKTsKKyAgICBn
dGtfcHJpbnRfc2V0dGluZ3NfdG9fa2V5X2ZpbGUocHJpbnRTZXR0aW5ncywga2V5RmlsZSwgIlBy
aW50IFNldHRpbmdzIik7CisgICAgZW5jb2RlR0tleUZpbGUoZW5jb2Rlciwga2V5RmlsZSk7Cisg
ICAgZ19rZXlfZmlsZV9mcmVlKGtleUZpbGUpOworfQorCitib29sIGRlY29kZShBcmd1bWVudERl
Y29kZXIqIGRlY29kZXIsIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4mIHByaW50U2V0dGluZ3Mp
Cit7CisgICAgR0tleUZpbGUqIGtleUZpbGU7CisgICAgaWYgKCFkZWNvZGVHS2V5RmlsZShkZWNv
ZGVyLCAma2V5RmlsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHByaW50U2V0dGlu
Z3MgPSBhZG9wdEdSZWYoZ3RrX3ByaW50X3NldHRpbmdzX25ldygpKTsKKyAgICBpZiAoIWd0a19w
cmludF9zZXR0aW5nc19sb2FkX2tleV9maWxlKHByaW50U2V0dGluZ3MuZ2V0KCksIGtleUZpbGUs
ICJQcmludCBTZXR0aW5ncyIsIDApKQorICAgICAgICBwcmludFNldHRpbmdzID0gMDsKKyAgICBn
X2tleV9maWxlX2ZyZWUoa2V5RmlsZSk7CisKKyAgICByZXR1cm4gcHJpbnRTZXR0aW5nczsKK30K
Kwordm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBHdGtQYWdlU2V0dXAqIHBh
Z2VTZXR1cCkKK3sKKyAgICBHS2V5RmlsZSoga2V5RmlsZSA9IGdfa2V5X2ZpbGVfbmV3KCk7Cisg
ICAgZ3RrX3BhZ2Vfc2V0dXBfdG9fa2V5X2ZpbGUocGFnZVNldHVwLCBrZXlGaWxlLCAiUGFnZSBT
ZXR1cCIpOworICAgIGVuY29kZUdLZXlGaWxlKGVuY29kZXIsIGtleUZpbGUpOworICAgIGdfa2V5
X2ZpbGVfZnJlZShrZXlGaWxlKTsKK30KKworYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBHUmVmUHRyPEd0a1BhZ2VTZXR1cD4mIHBhZ2VTZXR1cCkKK3sKKyAgICBHS2V5Rmls
ZSoga2V5RmlsZTsKKyAgICBpZiAoIWRlY29kZUdLZXlGaWxlKGRlY29kZXIsICZrZXlGaWxlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcGFnZVNldHVwID0gYWRvcHRHUmVmKGd0a19w
YWdlX3NldHVwX25ldygpKTsKKyAgICBpZiAoIWd0a19wYWdlX3NldHVwX2xvYWRfa2V5X2ZpbGUo
cGFnZVNldHVwLmdldCgpLCBrZXlGaWxlLCAiUGFnZSBTZXR1cCIsIDApKQorICAgICAgICBwYWdl
U2V0dXAgPSAwOworICAgIGdfa2V5X2ZpbGVfZnJlZShrZXlGaWxlKTsKKworICAgIHJldHVybiBw
YWdlU2V0dXA7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
QXJndW1lbnRDb2RlcnNHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRD
b2RlcnNHdGsuaAppbmRleCA4MmY0NmQyLi44ODg0MjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oCkBAIC0yNyw2ICsyNywxMCBAQAogI2RlZmlu
ZSBBcmd1bWVudENvZGVyc0d0a19oCiAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0d0a1ByaW50
U2V0dGluZ3MgR3RrUHJpbnRTZXR0aW5nczsKK3R5cGVkZWYgc3RydWN0IF9HdGtQYWdlU2V0dXAg
R3RrUGFnZVNldHVwOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEYXRhT2JqZWN0R3Rr
OwpAQCAtNDAsNiArNDQsMTIgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpEcmFnRGF0YT4gewogICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIq
LCBXZWJDb3JlOjpEcmFnRGF0YSYpOwogfTsKIAordm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiwgR3RrUHJpbnRTZXR0aW5ncyopOworYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgR1Jl
ZlB0cjxHdGtQcmludFNldHRpbmdzPiYpOworCit2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIq
LCBHdGtQYWdlU2V0dXAqKTsKK2Jvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIEdSZWZQdHI8
R3RrUGFnZVNldHVwPiYpOworCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCiAKICNlbmRpZiAvLyBB
cmd1bWVudENvZGVyc0d0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3Rr
L1ByaW50SW5mb0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1ByaW50SW5mb0d0
ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA2NmIyMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUHJpbnRJbmZvR3RrLmNwcApA
QCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcmludEluZm8uaCIKKwor
I2luY2x1ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1ByaW50SW5mbzo6
UHJpbnRJbmZvKEd0a1ByaW50U2V0dGluZ3MqIHNldHRpbmdzLCBHdGtQYWdlU2V0dXAqIHBhZ2VT
ZXR1cCkKKyAgICA6IHBhZ2VTZXR1cFNjYWxlRmFjdG9yKGd0a19wcmludF9zZXR0aW5nc19nZXRf
c2NhbGUoc2V0dGluZ3MpIC8gMTAwLjApCisgICAgLCBhdmFpbGFibGVQYXBlcldpZHRoKGd0a19w
YWdlX3NldHVwX2dldF9wYXBlcl93aWR0aChwYWdlU2V0dXAsIEdUS19VTklUX1BPSU5UUykgLSBn
dGtfcGFnZV9zZXR1cF9nZXRfbGVmdF9tYXJnaW4ocGFnZVNldHVwLCBHVEtfVU5JVF9QT0lOVFMp
IC0gZ3RrX3BhZ2Vfc2V0dXBfZ2V0X3JpZ2h0X21hcmdpbihwYWdlU2V0dXAsIEdUS19VTklUX1BP
SU5UUykpCisgICAgLCBhdmFpbGFibGVQYXBlckhlaWdodChndGtfcGFnZV9zZXR1cF9nZXRfcGFw
ZXJfaGVpZ2h0KHBhZ2VTZXR1cCwgR1RLX1VOSVRfUE9JTlRTKSAtIGd0a19wYWdlX3NldHVwX2dl
dF90b3BfbWFyZ2luKHBhZ2VTZXR1cCwgR1RLX1VOSVRfUE9JTlRTKSAtIGd0a19wYWdlX3NldHVw
X2dldF9ib3R0b21fbWFyZ2luKHBhZ2VTZXR1cCwgR1RLX1VOSVRfUE9JTlRTKSkKKyAgICAsIHBy
aW50U2V0dGluZ3Moc2V0dGluZ3MpCisgICAgLCBwYWdlU2V0dXAocGFnZVNldHVwKQoreworICAg
IEFTU0VSVChzZXR0aW5ncyk7CisgICAgQVNTRVJUKHBhZ2VTZXR1cCk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggN2UwOGNlYy4uMDI4ZjFk
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTM0NzUs
NiArMzQ3NSwyMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhd1BhZ2VzVG9QREYoV2ViRnJhbWVQ
cm94eSogZnJhbWUsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbgogICAgIG1fZGF0YUNhbGxiYWNr
cy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2suZ2V0KCkpOwogICAgIHByb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RHJhd1BhZ2VzVG9QREYoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJ
bmZvLCBmaXJzdCwgY291bnQsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCwgbV9pc1BlcmZvcm1pbmdE
T01QcmludE9wZXJhdGlvbiA/IENvcmVJUEM6OkRpc3BhdGNoTWVzc2FnZUV2ZW5XaGVuV2FpdGlu
Z0ZvclN5bmNSZXBseSA6IDApOwogfQorI2VsaWYgUExBVEZPUk0oR1RLKQordm9pZCBXZWJQYWdl
UHJveHk6OmRyYXdQYWdlc0ZvclByaW50aW5nKFdlYkZyYW1lUHJveHkqIGZyYW1lLCBjb25zdCBQ
cmludEluZm8mIHByaW50SW5mbywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IGRpZFByaW50Q2Fs
bGJhY2spCit7CisgICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gY2FsbGJhY2sgPSBkaWRQcmludENh
bGxiYWNrOworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5pbnZhbGlk
YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50NjRfdCBjYWxsYmFja0lE
ID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKKyAgICBtX3ZvaWRDYWxsYmFja3Muc2V0KGNhbGxi
YWNrSUQsIGNhbGxiYWNrLmdldCgpKTsKKyAgICBtX2lzSW5QcmludGluZ01vZGUgPSB0cnVlOwor
ICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RHJhd1BhZ2VzRm9yUHJpbnRp
bmcoZnJhbWUtPmZyYW1lSUQoKSwgcHJpbnRJbmZvLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQsIG1f
aXNQZXJmb3JtaW5nRE9NUHJpbnRPcGVyYXRpb24gPyBDb3JlSVBDOjpEaXNwYXRjaE1lc3NhZ2VF
dmVuV2hlbldhaXRpbmdGb3JTeW5jUmVwbHkgOiAwKTsKK30KICNlbmRpZgogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYg
dXBkYXRlUmVjdHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXgg
NDNlNTNiMS4uMWJmMzZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aApAQCAtNTc2LDYgKzU3Niw4IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRG
T1JNKFdJTikKICAgICB2b2lkIGRyYXdSZWN0VG9QREYoV2ViRnJhbWVQcm94eSosIGNvbnN0IFBy
aW50SW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPERhdGFDYWxsYmFj
az4pOwogICAgIHZvaWQgZHJhd1BhZ2VzVG9QREYoV2ViRnJhbWVQcm94eSosIGNvbnN0IFByaW50
SW5mbyYsIHVpbnQzMl90IGZpcnN0LCB1aW50MzJfdCBjb3VudCwgUGFzc1JlZlB0cjxEYXRhQ2Fs
bGJhY2s+KTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICB2b2lkIGRyYXdQYWdlc0ZvclByaW50
aW5nKFdlYkZyYW1lUHJveHkqLCBjb25zdCBQcmludEluZm8mLCBQYXNzUmVmUHRyPFZvaWRDYWxs
YmFjaz4pOwogI2VuZGlmCiAKICAgICBjb25zdCBTdHJpbmcmIHBlbmRpbmdBUElSZXF1ZXN0VVJM
KCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nQVBJUmVxdWVzdFVSTDsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGExYzNjMmMuLjcxMmI5
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
QEAgLTEzNCw3ICsxMzQsOSBAQAogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKyNpbmNsdWRlICJXZWJQ
cmludE9wZXJhdGlvbkd0ay5oIgogI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yNjQxLDEw
ICsyNjQzLDE4IEBAIHZvaWQgV2ViUGFnZTo6YmVnaW5QcmludGluZyh1aW50NjRfdCBmcmFtZUlE
LCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbykKIAogICAgIGZsb2F0IGZ1bGxQYWdlSGVpZ2h0
OwogICAgIG1fcHJpbnRDb250ZXh0LT5jb21wdXRlUGFnZVJlY3RzKEZsb2F0UmVjdCgwLCAwLCBw
cmludEluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgcHJpbnRJbmZvLmF2YWlsYWJsZVBhcGVySGVp
Z2h0KSwgMCwgMCwgcHJpbnRJbmZvLnBhZ2VTZXR1cFNjYWxlRmFjdG9yLCBmdWxsUGFnZUhlaWdo
dCwgdHJ1ZSk7CisKKyNpZiBQTEFURk9STShHVEspCisgICAgaWYgKCFtX3ByaW50T3BlcmF0aW9u
KQorICAgICAgICBtX3ByaW50T3BlcmF0aW9uID0gV2ViUHJpbnRPcGVyYXRpb25HdGs6OmNyZWF0
ZSh0aGlzLCBwcmludEluZm8pOworI2VuZGlmCiB9CiAKIHZvaWQgV2ViUGFnZTo6ZW5kUHJpbnRp
bmcoKQogeworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBtX3ByaW50T3BlcmF0aW9uID0gMDsKKyNl
bmRpZgogICAgIG1fcHJpbnRDb250ZXh0ID0gbnVsbHB0cjsKIH0KIApAQCAtMjgyNCw2ICsyODM0
LDE3IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREYodWludDY0X3QgZnJhbWVJRCwgY29u
c3QgUHJpbnRJbmZvJiBwcmludEluZm8sIHVpbnQzCiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRhdGFDYWxsYmFjayhDb3JlSVBDOjpEYXRhUmVmZXJlbmNlKENGRGF0YUdldEJ5
dGVQdHIocGRmUGFnZURhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgocGRmUGFnZURhdGEuZ2V0
KCkpKSwgY2FsbGJhY2tJRCkpOwogfQorI2VsaWYgUExBVEZPUk0oR1RLKQordm9pZCBXZWJQYWdl
OjpkcmF3UGFnZXNGb3JQcmludGluZyh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8m
IHByaW50SW5mbywgdWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICBiZWdpblByaW50aW5nKGZy
YW1lSUQsIHByaW50SW5mbyk7CisgICAgaWYgKG1fcHJpbnRDb250ZXh0ICYmIG1fcHJpbnRPcGVy
YXRpb24pIHsKKyAgICAgICAgbV9wcmludE9wZXJhdGlvbi0+c3RhcnRQcmludChtX3ByaW50Q29u
dGV4dC5nZXQoKSwgY2FsbGJhY2tJRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7Cit9
CiAjZW5kaWYKIAogdm9pZCBXZWJQYWdlOjpydW5Nb2RhbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA0MDA3MmNmLi43NmY2OWMyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTcwLDYgKzcwLDcg
QEAKIAogI2lmIFBMQVRGT1JNKEdUSykKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc0d0ay5oIgor
I2luY2x1ZGUgIldlYlByaW50T3BlcmF0aW9uR3RrLmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCkBAIC00MzYsNiArNDM3LDggQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd1JlY3RUb1BERih1aW50NjRfdCBmcmFt
ZUlELCBjb25zdCBQcmludEluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgdWludDY0X3Qg
Y2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkcmF3UGFnZXNUb1BERih1aW50NjRfdCBmcmFtZUlELCBj
b25zdCBQcmludEluZm8mLCB1aW50MzJfdCBmaXJzdCwgdWludDMyX3QgY291bnQsIHVpbnQ2NF90
IGNhbGxiYWNrSUQpOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgZHJhd1BhZ2VzRm9y
UHJpbnRpbmcodWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiwgdWludDY0X3QgY2Fs
bGJhY2tJRCk7CiAjZW5kaWYKIAogICAgIGJvb2wgbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50
YXRpb24oKSBjb25zdDsKQEAgLTcxNyw2ICs3MjAsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI+IG1fbm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyOwogCiAgICAgT3duUHRyPFdlYkNvcmU6OlByaW50Q29udGV4dD4g
bV9wcmludENvbnRleHQ7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIFJlZlB0cjxXZWJQcmludE9w
ZXJhdGlvbkd0az4gbV9wcmludE9wZXJhdGlvbjsKKyNlbmRpZgogCiAgICAgU2FuZGJveEV4dGVu
c2lvblRyYWNrZXIgbV9zYW5kYm94RXh0ZW5zaW9uVHJhY2tlcjsKICAgICB1aW50NjRfdCBtX3Bh
Z2VJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KaW5kZXggNWEzYmI0NS4uMDlmODJjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTE4
Nyw2ICsxODcsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBEcmF3UmVjdFRvUERGKHVp
bnQ2NF90IGZyYW1lSUQsIFdlYktpdDo6UHJpbnRJbmZvIHByaW50SW5mbywgV2ViQ29yZTo6SW50
UmVjdCByZWN0LCB1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIERyYXdQYWdlc1RvUERGKHVpbnQ2
NF90IGZyYW1lSUQsIFdlYktpdDo6UHJpbnRJbmZvIHByaW50SW5mbywgdWludDMyX3QgZmlyc3Qs
IHVpbnQzMl90IGNvdW50LCB1aW50NjRfdCBjYWxsYmFja0lEKQogI2VuZGlmCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIERyYXdQYWdlc0ZvclByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIFdlYktp
dDo6UHJpbnRJbmZvIHByaW50SW5mbywgdWludDY0X3QgY2FsbGJhY2tJRCkKKyNlbmRpZgogCiAg
ICAgU2V0TWVtb3J5Q2FjaGVNZXNzYWdlc0VuYWJsZWQoYm9vbCBtZW1vcnlDYWNoZU1lc3NhZ2Vz
RW5hYmxlZCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mMDA2MzVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKQEAgLTAs
MCArMSwzOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlByaW50T3BlcmF0aW9uR3Rr
LmgiCisKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+CisKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BSSU5USU5HCisjaW5jbHVkZSA8Y2Fpcm8tcGRm
Lmg+CisjaW5jbHVkZSA8Y2Fpcm8tcHMuaD4KKyNpbmNsdWRlIDxndGsvZ3RrdW5peHByaW50Lmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKyNpZmRlZiBIQVZFX0dUS19VTklYX1BS
SU5USU5HCitjbGFzcyBXZWJQcmludE9wZXJhdGlvbkd0a1VuaXg6IHB1YmxpYyBXZWJQcmludE9w
ZXJhdGlvbkd0ayB7CitwdWJsaWM6CisgICAgV2ViUHJpbnRPcGVyYXRpb25HdGtVbml4KFdlYlBh
Z2UqIHBhZ2UsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvKQorICAgICAgICA6IFdlYlByaW50
T3BlcmF0aW9uR3RrKHBhZ2UsIHByaW50SW5mbykKKyAgICAgICAgLCBtX3ByaW50Sm9iKDApCisg
ICAgeworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBlbnVtZXJhdGVQcmludGVyc0Z1bmN0
aW9uKEd0a1ByaW50ZXIqIHByaW50ZXIsIFdlYlByaW50T3BlcmF0aW9uR3RrVW5peCogcHJpbnRP
cGVyYXRpb24pCisgICAgeworICAgICAgICBHdGtQcmludGVyKiBzZWxlY3RlZFByaW50ZXIgPSAw
OworICAgICAgICBjb25zdCBjaGFyKiBwcmludGVyTmFtZSA9IGd0a19wcmludF9zZXR0aW5nc19n
ZXRfcHJpbnRlcihwcmludE9wZXJhdGlvbi0+cHJpbnRTZXR0aW5ncygpKTsKKyAgICAgICAgaWYg
KHByaW50ZXJOYW1lKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChwcmludGVyTmFtZSwgZ3Rr
X3ByaW50ZXJfZ2V0X25hbWUocHJpbnRlcikpKQorICAgICAgICAgICAgICAgIHNlbGVjdGVkUHJp
bnRlciA9IHByaW50ZXI7CisgICAgICAgIH0gZWxzZSBpZiAoZ3RrX3ByaW50ZXJfaXNfZGVmYXVs
dChwcmludGVyKSkKKyAgICAgICAgICAgIHNlbGVjdGVkUHJpbnRlciA9IHByaW50ZXI7CisKKyAg
ICAgICAgaWYgKHNlbGVjdGVkUHJpbnRlcikgeworICAgICAgICAgICAgc3RhdGljIGludCBqb2JO
dW1iZXIgPSAwOworICAgICAgICAgICAgY29uc3QgY2hhciogYXBwbGljYXRpb25OYW1lID0gZ19n
ZXRfYXBwbGljYXRpb25fbmFtZSgpOworICAgICAgICAgICAgR093blB0cjxjaGFyPmpvYk5hbWUo
Z19zdHJkdXBfcHJpbnRmKCIlcyBqb2IgIyVkIiwgYXBwbGljYXRpb25OYW1lID8gYXBwbGljYXRp
b25OYW1lIDogIldlYktpdCIsICsram9iTnVtYmVyKSk7CisgICAgICAgICAgICBwcmludE9wZXJh
dGlvbi0+bV9wcmludEpvYiA9IGFkb3B0R1JlZihndGtfcHJpbnRfam9iX25ldyhqb2JOYW1lLmdl
dCgpLCBzZWxlY3RlZFByaW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludE9wZXJhdGlvbi0+cHJpbnRT
ZXR0aW5ncygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRPcGVyYXRpb24tPnBhZ2VTZXR1cCgpKSk7Cisg
ICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBGQUxT
RTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBlbnVtZXJhdGVQcmludGVyc0ZpbmlzaGVkKFdl
YlByaW50T3BlcmF0aW9uR3RrVW5peCogcHJpbnRPcGVyYXRpb24pCisgICAgeworICAgICAgICBp
ZiAoIXByaW50T3BlcmF0aW9uLT5tX3ByaW50Sm9iKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
UHJpbnRpbmcgZXJyb3IuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpbnQgcmFuZ2VzQ291bnQ7CisgICAgICAgIHByaW50T3BlcmF0aW9uLT5tX3BhZ2VSYW5nZXMg
PSBndGtfcHJpbnRfam9iX2dldF9wYWdlX3JhbmdlcyhwcmludE9wZXJhdGlvbi0+bV9wcmludEpv
Yi5nZXQoKSwgJnJhbmdlc0NvdW50KTsKKyAgICAgICAgcHJpbnRPcGVyYXRpb24tPm1fcGFnZVJh
bmdlc0NvdW50ID0gcmFuZ2VzQ291bnQ7CisgICAgICAgIHByaW50T3BlcmF0aW9uLT5tX3ByaW50
UGFnZXMgPSBndGtfcHJpbnRfam9iX2dldF9wYWdlcyhwcmludE9wZXJhdGlvbi0+bV9wcmludEpv
Yi5nZXQoKSk7CisgICAgICAgIHByaW50T3BlcmF0aW9uLT5tX2RvUm90YXRlID0gZ3RrX3ByaW50
X2pvYl9nZXRfcm90YXRlKHByaW50T3BlcmF0aW9uLT5tX3ByaW50Sm9iLmdldCgpKTsKKworICAg
ICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBndGtfcHJpbnRfam9iX2dldF9zdXJmYWNl
KHByaW50T3BlcmF0aW9uLT5tX3ByaW50Sm9iLmdldCgpLCAwKTsKKyAgICAgICAgaWYgKCFzdXJm
YWNlKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJpbnRpbmcgZXJyb3IuCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBwcmludE9wZXJhdGlvbi0+cHJpbnQoc3Vy
ZmFjZSwgNzIsIDcyKTsKKyAgICB9CisKKyAgICB2b2lkIHN0YXJ0UHJpbnQoV2ViQ29yZTo6UHJp
bnRDb250ZXh0KiBwcmludENvbnRleHQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgeworICAg
ICAgICBtX3ByaW50Q29udGV4dCA9IHByaW50Q29udGV4dDsKKyAgICAgICAgbV9jYWxsYmFja0lE
ID0gY2FsbGJhY2tJRDsKKyAgICAgICAgZ3RrX2VudW1lcmF0ZV9wcmludGVycyhyZWludGVycHJl
dF9jYXN0PEd0a1ByaW50ZXJGdW5jPihlbnVtZXJhdGVQcmludGVyc0Z1bmN0aW9uKSwgdGhpcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95
Tm90aWZ5PihlbnVtZXJhdGVQcmludGVyc0ZpbmlzaGVkKSwgRkFMU0UpOworICAgIH0KKworICAg
IHZvaWQgc3RhcnRQYWdlKGNhaXJvX3QqIGNyKQorICAgIHsKKyAgICAgICAgR3RrUGFwZXJTaXpl
KiBwYXBlclNpemUgPSBndGtfcGFnZV9zZXR1cF9nZXRfcGFwZXJfc2l6ZShtX3BhZ2VTZXR1cC5n
ZXQoKSk7CisgICAgICAgIGRvdWJsZSB3aWR0aCA9IGd0a19wYXBlcl9zaXplX2dldF93aWR0aChw
YXBlclNpemUsIEdUS19VTklUX1BPSU5UUyk7CisgICAgICAgIGRvdWJsZSBoZWlnaHQgPSBndGtf
cGFwZXJfc2l6ZV9nZXRfaGVpZ2h0KHBhcGVyU2l6ZSwgR1RLX1VOSVRfUE9JTlRTKTsKKworICAg
ICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBndGtfcHJpbnRfam9iX2dldF9zdXJmYWNl
KG1fcHJpbnRKb2IuZ2V0KCksIDApOworICAgICAgICBjYWlyb19zdXJmYWNlX3R5cGVfdCBzdXJm
YWNlVHlwZSA9IGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSk7CisgICAgICAgIGlmIChz
dXJmYWNlVHlwZSA9PSBDQUlST19TVVJGQUNFX1RZUEVfUFMpIHsKKyAgICAgICAgICAgIGNhaXJv
X3BzX3N1cmZhY2Vfc2V0X3NpemUoc3VyZmFjZSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAg
ICBjYWlyb19wc19zdXJmYWNlX2RzY19iZWdpbl9wYWdlX3NldHVwKHN1cmZhY2UpOworCisgICAg
ICAgICAgICBzd2l0Y2ggKGd0a19wYWdlX3NldHVwX2dldF9vcmllbnRhdGlvbihtX3BhZ2VTZXR1
cC5nZXQoKSkpIHsKKyAgICAgICAgICAgIGNhc2UgR1RLX1BBR0VfT1JJRU5UQVRJT05fUE9SVFJB
SVQ6CisgICAgICAgICAgICBjYXNlIEdUS19QQUdFX09SSUVOVEFUSU9OX1JFVkVSU0VfUE9SVFJB
SVQ6CisgICAgICAgICAgICAgICAgY2Fpcm9fcHNfc3VyZmFjZV9kc2NfY29tbWVudChzdXJmYWNl
LCAiJSVQYWdlT3JpZW50YXRpb246IFBvcnRyYWl0Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEdUS19QQUdFX09SSUVOVEFUSU9OX0xBTkRTQ0FQRToKKyAgICAg
ICAgICAgIGNhc2UgR1RLX1BBR0VfT1JJRU5UQVRJT05fUkVWRVJTRV9MQU5EU0NBUEU6CisgICAg
ICAgICAgICAgICAgY2Fpcm9fcHNfc3VyZmFjZV9kc2NfY29tbWVudChzdXJmYWNlLCAiJSVQYWdl
T3JpZW50YXRpb246IExhbmRzY2FwZSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHN1cmZhY2VUeXBlID09IENBSVJPX1NVUkZBQ0Vf
VFlQRV9QREYpCisgICAgICAgICAgICBjYWlyb19wZGZfc3VyZmFjZV9zZXRfc2l6ZShzdXJmYWNl
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisKKyAgICB2b2lkIGVuZFBhZ2UoY2Fpcm9fdCogY3Ip
CisgICAgeworICAgICAgICBjYWlyb19zaG93X3BhZ2UoY3IpOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIHByaW50Sm9iQ29tcGxldGUoR3RrUHJpbnRKb2IqIHByaW50Sm9iLCBXZWJQcmludE9w
ZXJhdGlvbkd0a1VuaXgqIHByaW50T3BlcmF0aW9uLCBjb25zdCBHRXJyb3IqKQorICAgIHsKKyAg
ICAgICAgcHJpbnRPcGVyYXRpb24tPm1fcHJpbnRKb2IgPSAwOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIHByaW50Sm9iRmluaXNoZWQoV2ViUHJpbnRPcGVyYXRpb25HdGtVbml4KiBwcmludE9w
ZXJhdGlvbikKKyAgICB7CisgICAgICAgIHByaW50T3BlcmF0aW9uLT5kZXJlZigpOworICAgIH0K
KworICAgIHZvaWQgZW5kUHJpbnQoKQorICAgIHsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9maW5p
c2goZ3RrX3ByaW50X2pvYl9nZXRfc3VyZmFjZShtX3ByaW50Sm9iLmdldCgpLCAwKSk7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgb3BlcmF0aW9uIGlzIGFsaXZlIGF1bnRpbCB0aGUgam9iIGlz
IHNlbnQuCisgICAgICAgIHJlZigpOworICAgICAgICBndGtfcHJpbnRfam9iX3NlbmQobV9wcmlu
dEpvYi5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHdGtQcmludEpvYkNvbXBsZXRlRnVuYz4ocHJp
bnRKb2JDb21wbGV0ZSksIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihwcmludEpvYkZpbmlzaGVkKSk7CisgICAgfQorCisg
ICAgR1JlZlB0cjxHdGtQcmludEpvYj4gbV9wcmludEpvYjsKK307CisjZW5kaWYKKworI2lmZGVm
IEdfT1NfV0lOMzIKK2NsYXNzIFdlYlByaW50T3BlcmF0aW9uR3RrV2luMzI6IHB1YmxpYyBXZWJQ
cmludE9wZXJhdGlvbkd0ayB7CitwdWJsaWM6CisgICAgV2ViUHJpbnRPcGVyYXRpb25HdGtXaW4z
MihXZWJQYWdlKiBwYWdlLCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbykKKyAgICAgICAgOiBX
ZWJQcmludE9wZXJhdGlvbkd0ayhwYWdlLCBwcmludEluZm8pCisgICAgeworICAgIH0KKworICAg
IHZvaWQgc3RhcnRQcmludChXZWJDb3JlOjpQcmludENvbnRleHQqIHByaW50Q29udGV4dCwgdWlu
dDY0X3QgY2FsbGJhY2tJRCkKKyAgICB7CisgICAgICAgIG1fcHJpbnRDb250ZXh0ID0gcHJpbnRD
b250ZXh0OworICAgICAgICBtX2NhbGxiYWNrSUQgPSBjYWxsYmFja0lEOworICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIHZvaWQgc3RhcnRQYWdlKGNhaXJvX3QqIGNyKQor
ICAgIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGVuZFBh
Z2UoY2Fpcm9fdCogY3IpCisgICAgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0K
KworICAgIHZvaWQgZW5kUHJpbnQoKQorICAgIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICB9Cit9OworI2VuZGlmCisKK3N0cnVjdCBQcmludFBhZ2VzRGF0YSB7CisgICAgUHJpbnRQ
YWdlc0RhdGEoV2ViUHJpbnRPcGVyYXRpb25HdGsqIHByaW50T3BlcmF0aW9uKQorICAgICAgICA6
IHByaW50T3BlcmF0aW9uKHByaW50T3BlcmF0aW9uKQorICAgICAgICAsIHRvdGFsUHJpbnRlZCgt
MSkKKyAgICAgICAgLCB0b3RhbFRvUHJpbnQoMCkKKyAgICAgICAgLCBwYWdlTnVtYmVyKDApCisg
ICAgICAgICwgcGFnZVBvc2l0aW9uKDApCisgICAgICAgICwgaXNEb25lKGZhbHNlKQorICAgIHsK
KyAgICAgICAgaWYgKHByaW50T3BlcmF0aW9uLT5wcmludFBhZ2VzKCkgPT0gR1RLX1BSSU5UX1BB
R0VTX1JBTkdFUykgeworICAgICAgICAgICAgVmVjdG9yPEd0a1BhZ2VSYW5nZT4gcGFnZVJhbmdl
czsKKyAgICAgICAgICAgIEd0a1BhZ2VSYW5nZSogcmFuZ2VzID0gcHJpbnRPcGVyYXRpb24tPnBh
Z2VSYW5nZXMoKTsKKyAgICAgICAgICAgIHNpemVfdCByYW5nZXNDb3VudCA9IHByaW50T3BlcmF0
aW9uLT5wYWdlUmFuZ2VzQ291bnQoKTsKKyAgICAgICAgICAgIGludCBwYWdlQ291bnQgPSBwcmlu
dE9wZXJhdGlvbi0+cGFnZUNvdW50KCk7CisKKyAgICAgICAgICAgIHBhZ2VSYW5nZXMucmVzZXJ2
ZUNhcGFjaXR5KHJhbmdlc0NvdW50KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmFuZ2VzQ291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChyYW5nZXNbaV0uc3Rh
cnQgPj0gMCAmJiByYW5nZXNbaV0uc3RhcnQgPCBwYWdlQ291bnQgJiYgcmFuZ2VzW2ldLmVuZCA+
PSAwICYmIHJhbmdlc1tpXS5lbmQgPCBwYWdlQ291bnQpCisgICAgICAgICAgICAgICAgICAgIHBh
Z2VSYW5nZXMuYXBwZW5kKHJhbmdlc1tpXSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAocmFu
Z2VzW2ldLnN0YXJ0ID49IDAgJiYgcmFuZ2VzW2ldLnN0YXJ0IDwgcGFnZUNvdW50ICYmIHJhbmdl
c1tpXS5lbmQgPj0gcGFnZUNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIHBhZ2VSYW5nZXMu
YXBwZW5kKHJhbmdlc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIHBhZ2VSYW5nZXMubGFzdCgp
LmVuZCA9IHBhZ2VDb3VudCAtIDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyYW5nZXNb
aV0uZW5kID49IDAgJiYgcmFuZ2VzW2ldLmVuZCA8IHBhZ2VDb3VudCAmJiByYW5nZXNbaV0uc3Rh
cnQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHBhZ2VSYW5nZXMuYXBwZW5kKHJhbmdlc1tp
XSk7CisgICAgICAgICAgICAgICAgICAgIHBhZ2VSYW5nZXMubGFzdCgpLnN0YXJ0ID0gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcGFnZVJhbmdlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGZv
ciAoaW50IGogPSBwYWdlUmFuZ2VzW2ldLnN0YXJ0OyBqIDw9IHBhZ2VSYW5nZXNbaV0uZW5kOyAr
K2opCisgICAgICAgICAgICAgICAgICAgIHBhZ2VzLmFwcGVuZChqKTsKKyAgICAgICAgICAgICAg
ICB0b3RhbFRvUHJpbnQgKz0gcGFnZVJhbmdlc1tpXS5lbmQgLSBwYWdlUmFuZ2VzW2ldLnN0YXJ0
ICsgMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG90
YWxUb1ByaW50ID0gcHJpbnRPcGVyYXRpb24tPnBhZ2VDb3VudCgpOworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB0b3RhbFRvUHJpbnQ7ICsraSkKKyAgICAgICAgICAgICAgICBw
YWdlcy5hcHBlbmQoaSk7CisgICAgICAgIH0KKworICAgICAgICBwYWdlTnVtYmVyID0gcGFnZXNb
cGFnZVBvc2l0aW9uXTsKKyAgICB9CisKKyAgICB2b2lkIGluY3JlbWVudFBhZ2VTZXF1ZW5jZSgp
CisgICAgeworICAgICAgICBpZiAodG90YWxQcmludGVkID09IC0xKSB7CisgICAgICAgICAgICB0
b3RhbFByaW50ZWQgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgcGFnZVBvc2l0aW9uKys7CisgICAgICAgIGlmIChwYWdlUG9zaXRpb24gPj0gdG90YWxUb1By
aW50KSB7CisgICAgICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHBhZ2VOdW1iZXIgPSBwYWdlc1twYWdlUG9zaXRpb25dOworICAg
ICAgICB0b3RhbFByaW50ZWQrKzsKKyAgICB9CisKKyAgICBSZWZQdHI8V2ViUHJpbnRPcGVyYXRp
b25HdGs+IHByaW50T3BlcmF0aW9uOworCisgICAgaW50IHRvdGFsUHJpbnRlZDsKKyAgICBzaXpl
X3QgdG90YWxUb1ByaW50OworICAgIGludCBwYWdlTnVtYmVyOworICAgIHNpemVfdCBwYWdlUG9z
aXRpb247CisgICAgVmVjdG9yPHNpemVfdD4gcGFnZXM7CisKKyAgICBib29sIGlzRG9uZSA6IDE7
Cit9OworCitQYXNzUmVmUHRyPFdlYlByaW50T3BlcmF0aW9uR3RrPiBXZWJQcmludE9wZXJhdGlv
bkd0azo6Y3JlYXRlKFdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvKQor
eworI2lmZGVmIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdlYlByaW50T3BlcmF0aW9uR3RrVW5peChwYWdlLCBwcmludEluZm8pKTsKKyNlbmRpZgorI2lm
ZGVmIEdfT1NfV0lOMzIKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlByaW50T3BlcmF0aW9u
R3RrV2luMzIocGFnZSwgcHJpbnRJbmZvKSk7CisjZW5kaWYKK30KKworV2ViUHJpbnRPcGVyYXRp
b25HdGs6OldlYlByaW50T3BlcmF0aW9uR3RrKFdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFByaW50SW5m
byYgcHJpbnRJbmZvKQorICAgIDogbV93ZWJQYWdlKHBhZ2UpCisgICAgLCBtX3ByaW50U2V0dGlu
Z3MocHJpbnRJbmZvLnByaW50U2V0dGluZ3MuZ2V0KCkpCisgICAgLCBtX3BhZ2VTZXR1cChwcmlu
dEluZm8ucGFnZVNldHVwLmdldCgpKQorICAgICwgbV9wcmludENvbnRleHQoMCkKKyAgICAsIG1f
Y2FsbGJhY2tJRCgwKQorICAgICwgbV94RFBJKDEpCisgICAgLCBtX3lEUEkoMSkKKyAgICAsIG1f
cHJpbnRQYWdlc0lkbGVJZCgwKQorICAgICwgbV9wcmludFBhZ2VzKEdUS19QUklOVF9QQUdFU19B
TEwpCisgICAgLCBtX3BhZ2VSYW5nZXMoMCkKKyAgICAsIG1fcGFnZVJhbmdlc0NvdW50KDApCisg
ICAgLCBtX2RvUm90YXRlKGZhbHNlKQoreworfQorCitXZWJQcmludE9wZXJhdGlvbkd0azo6fldl
YlByaW50T3BlcmF0aW9uR3RrKCkKK3sKKyAgICBpZiAobV9wcmludFBhZ2VzSWRsZUlkKQorICAg
ICAgICBnX3NvdXJjZV9yZW1vdmUobV9wcmludFBhZ2VzSWRsZUlkKTsKK30KKworaW50IFdlYlBy
aW50T3BlcmF0aW9uR3RrOjpwYWdlQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaW50
Q29udGV4dCA/IG1fcHJpbnRDb250ZXh0LT5wYWdlQ291bnQoKSA6IDA7Cit9CisKK3ZvaWQgV2Vi
UHJpbnRPcGVyYXRpb25HdGs6OnJvdGF0ZVBhZ2UoKQoreworICAgIEd0a1BhcGVyU2l6ZSogcGFw
ZXJTaXplID0gZ3RrX3BhZ2Vfc2V0dXBfZ2V0X3BhcGVyX3NpemUobV9wYWdlU2V0dXAuZ2V0KCkp
OworICAgIGRvdWJsZSB3aWR0aCA9IGd0a19wYXBlcl9zaXplX2dldF93aWR0aChwYXBlclNpemUs
IEdUS19VTklUX0lOQ0gpICogbV94RFBJOworICAgIGRvdWJsZSBoZWlnaHQgPSBndGtfcGFwZXJf
c2l6ZV9nZXRfaGVpZ2h0KHBhcGVyU2l6ZSwgR1RLX1VOSVRfSU5DSCkgKiBtX3lEUEk7CisKKyAg
ICBjYWlyb19tYXRyaXhfdCBtYXRyaXg7CisgICAgc3dpdGNoIChndGtfcGFnZV9zZXR1cF9nZXRf
b3JpZW50YXRpb24obV9wYWdlU2V0dXAuZ2V0KCkpKSB7CisgICAgY2FzZSBHVEtfUEFHRV9PUklF
TlRBVElPTl9MQU5EU0NBUEU6CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShtX2NhaXJvQ29udGV4
dC5nZXQoKSwgMCwgaGVpZ2h0KTsKKyAgICAgICAgY2Fpcm9fbWF0cml4X2luaXQoJm1hdHJpeCwg
MCwgLTEsIDEsIDAsIDAsIDApOworICAgICAgICBjYWlyb190cmFuc2Zvcm0obV9jYWlyb0NvbnRl
eHQuZ2V0KCksICZtYXRyaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdUS19QQUdFX09S
SUVOVEFUSU9OX1JFVkVSU0VfUE9SVFJBSVQ6CisgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShtX2Nh
aXJvQ29udGV4dC5nZXQoKSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGNhaXJvX21hdHJpeF9p
bml0KCZtYXRyaXgsIC0xLCAwLCAwLCAtMSwgMCwgMCk7CisgICAgICAgIGNhaXJvX3RyYW5zZm9y
bShtX2NhaXJvQ29udGV4dC5nZXQoKSwgJm1hdHJpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR1RLX1BBR0VfT1JJRU5UQVRJT05fUkVWRVJTRV9MQU5EU0NBUEU6CisgICAgICAgIGNhaXJv
X3RyYW5zbGF0ZShtX2NhaXJvQ29udGV4dC5nZXQoKSwgd2lkdGgsIDApOworICAgICAgICBjYWly
b19tYXRyaXhfaW5pdCgmbWF0cml4LCAwLCAxLCAtMSwgMCwgMCwgMCk7CisgICAgICAgIGNhaXJv
X3RyYW5zZm9ybShtX2NhaXJvQ29udGV4dC5nZXQoKSwgJm1hdHJpeCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR1RLX1BBR0VfT1JJRU5UQVRJT05fUE9SVFJBSVQ6CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFdlYlByaW50T3BlcmF0aW9uR3RrOjpy
ZW5kZXJQYWdlKGludCBwYWdlTnVtYmVyKQoreworICAgIHN0YXJ0UGFnZShtX2NhaXJvQ29udGV4
dC5nZXQoKSk7CisKKyAgICBpZiAobV9kb1JvdGF0ZSkKKyAgICAgICAgcm90YXRlUGFnZSgpOwor
CisgICAgZG91YmxlIGxlZnQgPSBndGtfcGFnZV9zZXR1cF9nZXRfbGVmdF9tYXJnaW4obV9wYWdl
U2V0dXAuZ2V0KCksIEdUS19VTklUX0lOQ0gpOworICAgIGRvdWJsZSB0b3AgPSBndGtfcGFnZV9z
ZXR1cF9nZXRfdG9wX21hcmdpbihtX3BhZ2VTZXR1cC5nZXQoKSwgR1RLX1VOSVRfSU5DSCk7Cisg
ICAgY2Fpcm9fdHJhbnNsYXRlKG1fY2Fpcm9Db250ZXh0LmdldCgpLCBsZWZ0ICogbV94RFBJLCB0
b3AgKiBtX3lEUEkpOworCisgICAgZG91YmxlIHBhZ2VXaWR0aCA9IGd0a19wYWdlX3NldHVwX2dl
dF9wYWdlX3dpZHRoKG1fcGFnZVNldHVwLmdldCgpLCBHVEtfVU5JVF9JTkNIKSAqIG1feERQSTsK
KyAgICBXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRDYWlybyBwbGF0Zm9ybUNvbnRleHQobV9jYWly
b0NvbnRleHQuZ2V0KCkpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHQoJnBsYXRmb3JtQ29udGV4dCk7CisgICAgbV9wcmludENvbnRleHQtPnNwb29sUGFnZShn
cmFwaGljc0NvbnRleHQsIHBhZ2VOdW1iZXIsIHBhZ2VXaWR0aCk7CisKKyAgICBlbmRQYWdlKG1f
Y2Fpcm9Db250ZXh0LmdldCgpKTsKK30KKworZ2Jvb2xlYW4gV2ViUHJpbnRPcGVyYXRpb25HdGs6
OnByaW50UGFnZXNJZGxlKGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFByaW50UGFnZXNEYXRh
KiBkYXRhID0gc3RhdGljX2Nhc3Q8UHJpbnRQYWdlc0RhdGEqPih1c2VyRGF0YSk7CisKKyAgICBk
YXRhLT5pbmNyZW1lbnRQYWdlU2VxdWVuY2UoKTsKKyAgICBpZiAoZGF0YS0+aXNEb25lKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBkYXRhLT5wcmludE9wZXJhdGlvbi0+cmVuZGVyUGFn
ZShkYXRhLT5wYWdlTnVtYmVyKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwordm9pZCBXZWJQcmlu
dE9wZXJhdGlvbkd0azo6cHJpbnRQYWdlc0lkbGVEb25lKGdwb2ludGVyIHVzZXJEYXRhKQorewor
ICAgIFByaW50UGFnZXNEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8UHJpbnRQYWdlc0RhdGEqPih1
c2VyRGF0YSk7CisKKyAgICBkYXRhLT5wcmludE9wZXJhdGlvbi0+cHJpbnREb25lKCk7CisgICAg
ZGVsZXRlIGRhdGE7Cit9CisKK3ZvaWQgV2ViUHJpbnRPcGVyYXRpb25HdGs6OnByaW50RG9uZSgp
Cit7CisgICAgbV9wcmludFBhZ2VzSWRsZUlkID0gMDsKKworICAgIGVuZFByaW50KCk7CisgICAg
Ly8gSm9iIGlzIG5vdyBzZW50IHRvIHRoZSBwcmludGVyLCB3ZSBjYW4gbm90aWZ5IHRoZSBVSSBw
cm9jZXNzIHRoYXQgd2UgYXJlIGRvbmUuCisgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhtX2NhbGxiYWNrSUQpKTsKKyAgICBtX2NhaXJvQ29u
dGV4dCA9IDA7Cit9CisKK3ZvaWQgV2ViUHJpbnRPcGVyYXRpb25HdGs6OnByaW50KGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSwgZG91YmxlIHhEUEksIGRvdWJsZSB5RFBJKQoreworICAgIEFTU0VS
VChtX3ByaW50Q29udGV4dCk7CisKKyAgICBtX3hEUEkgPSB4RFBJOworICAgIG1feURQSSA9IHlE
UEk7CisgICAgbV9jYWlyb0NvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkp
OworCisgICAgUHJpbnRQYWdlc0RhdGEqIGRhdGEgPSBuZXcgUHJpbnRQYWdlc0RhdGEodGhpcyk7
CisgICAgbV9wcmludFBhZ2VzSWRsZUlkID0gZ2RrX3RocmVhZHNfYWRkX2lkbGVfZnVsbChHX1BS
SU9SSVRZX0RFRkFVTFRfSURMRSArIDEwLCBwcmludFBhZ2VzSWRsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIHByaW50UGFnZXNJZGxl
RG9uZSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mM2IwYmI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5oCkBAIC0wLDAg
KzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJQcmludE9wZXJhdGlvbkd0a19oCisjZGVmaW5lIFdlYlByaW50T3BlcmF0
aW9uR3RrX2gKKworI2luY2x1ZGUgIlByaW50SW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVm
UHRyQ2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit0eXBlZGVm
IHN0cnVjdCBfR3RrUHJpbnRTZXR0aW5ncyBHdGtQcmludFNldHRpbmdzOwordHlwZWRlZiBzdHJ1
Y3QgX0d0a1BhZ2VTZXR1cCBHdGtQYWdlU2V0dXA7Cit0eXBlZGVmIHN0cnVjdCBfR3RrUGFnZVJh
bmdlIEd0a1BhZ2VSYW5nZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgUHJpbnRDb250
ZXh0OworfTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNz
IFdlYlByaW50T3BlcmF0aW9uR3RrIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViUHJpbnRPcGVyYXRp
b25HdGs+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJQcmludE9wZXJhdGlv
bkd0az4gY3JlYXRlKFdlYlBhZ2UqLCBjb25zdCBQcmludEluZm8mKTsKKyAgICB+V2ViUHJpbnRP
cGVyYXRpb25HdGsoKTsKKworICAgIEd0a1ByaW50U2V0dGluZ3MqIHByaW50U2V0dGluZ3MoKSBj
b25zdCB7IHJldHVybiBtX3ByaW50U2V0dGluZ3MuZ2V0KCk7IH0KKyAgICBHdGtQYWdlU2V0dXAq
IHBhZ2VTZXR1cCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVNldHVwLmdldCgpOyB9CisgICAgdW5z
aWduZWQgaW50IHByaW50UGFnZXMoKSBjb25zdCB7IHJldHVybiBtX3ByaW50UGFnZXM7IH0KKyAg
ICBpbnQgcGFnZUNvdW50KCkgY29uc3Q7CisgICAgR3RrUGFnZVJhbmdlKiBwYWdlUmFuZ2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlUmFuZ2VzOyB9CisgICAgc2l6ZV90IHBhZ2VSYW5nZXNDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVJhbmdlc0NvdW50OyB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnRQcmludChXZWJDb3JlOjpQcmludENvbnRleHQqLCB1aW50NjRfdCBjYWxsYmFja0lE
KSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBXZWJQcmludE9wZXJhdGlvbkd0ayhXZWJQYWdlKiwg
Y29uc3QgUHJpbnRJbmZvJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRQYWdlKGNhaXJvX3Qq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuZFBhZ2UoY2Fpcm9fdCopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5kUHJpbnQoKSA9IDA7CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcHJpbnRQYWdl
c0lkbGUoZ3BvaW50ZXIpOworICAgIHN0YXRpYyB2b2lkIHByaW50UGFnZXNJZGxlRG9uZShncG9p
bnRlcik7CisKKyAgICB2b2lkIHByaW50KGNhaXJvX3N1cmZhY2VfdCosIGRvdWJsZSB4RFBJLCBk
b3VibGUgeURQSSk7CisgICAgdm9pZCByZW5kZXJQYWdlKGludCBwYWdlTnVtYmVyKTsKKyAgICB2
b2lkIHJvdGF0ZVBhZ2UoKTsKKyAgICB2b2lkIHByaW50RG9uZSgpOworCisgICAgV2ViUGFnZSog
bV93ZWJQYWdlOworICAgIEdSZWZQdHI8R3RrUHJpbnRTZXR0aW5ncz4gbV9wcmludFNldHRpbmdz
OworICAgIEdSZWZQdHI8R3RrUGFnZVNldHVwPiBtX3BhZ2VTZXR1cDsKKyAgICBXZWJDb3JlOjpQ
cmludENvbnRleHQqIG1fcHJpbnRDb250ZXh0OworICAgIHVpbnQ2NF90IG1fY2FsbGJhY2tJRDsK
KyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jYWlyb0NvbnRleHQ7CisgICAgZG91YmxlIG1feERQSTsK
KyAgICBkb3VibGUgbV95RFBJOworCisgICAgdW5zaWduZWQgaW50IG1fcHJpbnRQYWdlc0lkbGVJ
ZDsKKyAgICB1bnNpZ25lZCBpbnQgbV9wcmludFBhZ2VzOworICAgIEd0a1BhZ2VSYW5nZSogbV9w
YWdlUmFuZ2VzOworICAgIHNpemVfdCBtX3BhZ2VSYW5nZXNDb3VudDsKKyAgICBib29sIG1fZG9S
b3RhdGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBXZWJQcmludE9wZXJhdGlvbkd0a19oCmRpZmYg
LS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggY2YzNzcwNi4uODVhM2Yy
MSAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMTA3MSw2
ICsxMDcxLDE2IEBAIGlmIHRlc3QgIiRlbmFibGVfd2Via2l0MiIgPSAieWVzIjsgdGhlbgogICAg
aWYgdGVzdCAiJEdUS19BUElfVkVSU0lPTiIgPSAiMi4wIjsgdGhlbgogICAgICAgQUNfTVNHX0VS
Uk9SKFtXZWJLaXQyIHJlcXVpcmVzIEdUSysgMy54LCB1c2UgLS13aXRoLWd0az0zLjBdKQogICAg
ZmkKKworICAgIyBDaGVjayBVbml4IHByaW50aW5nCisgICBQS0dfQ0hFQ0tfTU9EVUxFUyhHVEtf
VU5JWF9QUklOVElORywgZ3RrKy11bml4LXByaW50LTMuMCwKKyAgICAgICAgICAgICAgICAgICAg
IFtoYXZlX2d0a191bml4X3ByaW50aW5nPXllc10sCisgICAgICAgICAgICAgICAgICAgICBbaGF2
ZV9ndGtfdW5peF9wcmludGluZz1ub10pCisgICBBQ19TVUJTVChHVEtfVU5JWF9QUklOVElOR19D
RkxBR1MpCisgICBBQ19TVUJTVChHVEtfVU5JWF9QUklOVElOR19MSUJTKQorICAgaWYgdGVzdCAi
JGhhdmVfZ3RrX3VuaXhfcHJpbnRpbmciID0gInllcyI7IHRoZW4KKyAgICAgICBBQ19ERUZJTkUo
W0hBVkVfR1RLX1VOSVhfUFJJTlRJTkddLCBbMV0sIFtEZWZpbmUgaWYgR1RLKyBVTklYIFByaW50
aW5nIGlzIGF2YWlsYWJsZV0pCisgICBmaQogZmkKIAogIyBQbHVnaW4gUHJvY2Vzcwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122911</attachid>
            <date>2012-01-18 06:05:06 -0800</date>
            <delta_ts>2012-02-01 00:17:21 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-webprocess-printing3.diff</filename>
            <type>text/plain</type>
            <size>39496</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4NTZlOTQ5Li45ZTI5Njdl
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQgQEAK
IDIwMTItMDEtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CisgICAgICAgIFtHVEtdIEFkZCBiYXNpYyBwcmludGluZyBzdXBwb3J0IHRvIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTcyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBjb25maWd1cmUu
YWM6IENoZWNrIHdoZXRoZXIgR1RLKyBVTklYIHByaW50aW5nIGlzIGF2YWlsYWJsZS4KKworMjAx
Mi0wMS0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAg
ICAgICAgVW5yZXZpZXdlZC4gRml4IEdUSysgYnVpbGQgYWZ0ZXIgcjEwNTI0NS4KIAogICAgICAg
ICAqIFNvdXJjZS9hdXRvdG9vbHMvc3ltYm9scy5maWx0ZXI6IEZpeCBzeW1ib2wgbmFtZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA5YzBmNWNmLi43NDg5YWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzMgQEAK
KzIwMTItMDEtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIEFkZCBiYXNpYyBwcmludGluZyBzdXBwb3J0IHRvIFdlYktpdDIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2MTcyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBTaGFyZWQvUHJp
bnRJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UHJpbnRJbmZvOjplbmNvZGUpOiBFbmNvZGUg
YWxzbyBHdGtQcmludFNldHRpbmdzIGFuZAorICAgICAgICBHdGtQYWdlU2V0dXAgZm9yIHRoZSBH
VEsrIHBvcnQuCisgICAgICAgIChXZWJLaXQ6OlByaW50SW5mbzo6ZGVjb2RlKTogRGVjb2RlIGFs
c28gR3RrUHJpbnRTZXR0aW5ncyBhbmQKKyAgICAgICAgR3RrUGFnZVNldHVwIGZvciB0aGUgR1RL
KyBwb3J0LgorICAgICAgICAqIFNoYXJlZC9QcmludEluZm8uaDogQWRkIEd0a1ByaW50U2V0dGlu
Z3MgYW5kIEd0a1BhZ2VTZXR1cCBtZW1iZXIKKyAgICAgICAgZm9yIHRoZSBHVEsrIHBvcnQuCisg
ICAgICAgICogU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHA6CisgICAgICAgIChDb3Jl
SVBDOjplbmNvZGVHS2V5RmlsZSk6IEhlbHBlciBmdW5jdGlvbiB0byBlbmNvZGUgYSBHS2V5Rmls
ZSBhcworICAgICAgICBhIERhdGFSZWZlcmVuY2Ugb2JqZWN0LgorICAgICAgICAoQ29yZUlQQzo6
ZGVjb2RlR0tleUZpbGUpOiBIZWxwZXIgZnVuY3Rpb24gdG8gZGVjb2RlIGEgR0tleUZpbGUgdG8K
KyAgICAgICAgYSBEYXRhUmVmZXJlbmNlIG9iamVjdC4KKyAgICAgICAgKENvcmVJUEM6OmVuY29k
ZSk6IEVuY29kZSBHdGtQcmludFNldHRpbmdzIGFuZCBHdGtQYWdlU2V0dXAgdXNpbmcKKyAgICAg
ICAgdGhlIEdLZXlGaWxlIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAoQ29yZUlQQzo6ZGVjb2Rl
KTogRGVjb2RlIEd0a1ByaW50U2V0dGluZ3MgYW5kIEd0a1BhZ2VTZXR1cCB1c2luZworICAgICAg
ICB0aGUgR0tleUZpbGUgcmVwcmVzZW50YXRpb24uCisgICAgICAgICogU2hhcmVkL2d0ay9Bcmd1
bWVudENvZGVyc0d0ay5oOgorICAgICAgICAqIFNoYXJlZC9ndGsvUHJpbnRJbmZvR3RrLmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5jcHAuCisgICAgICAg
IChXZWJLaXQ6OlByaW50SW5mbzo6UHJpbnRJbmZvKTogQWRkIFByaW50SW5mbyBjb25zdHJ1Y3Rv
ciB0aGF0CisgICAgICAgIHRha2VzIEd0a1ByaW50U2V0dGluZ3MgYW5kIEd0a1BhZ2VTZXR1cCBp
bnN0YW5jZXMuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZHJhd1BhZ2VzRm9yUHJpbnRpbmcpOiBTZW5kCisgICAg
ICAgIERyYXdQYWdlc0ZvclByaW50aW5nIG1lc3NhZ2UgdG8gV2ViIHByb2Nlc3MgdG8gc3RhcnQg
cHJpbnRpbmcuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6YmVnaW5QcmludGluZyk6IENyZWF0ZSBhIFdlYlByaW50T3BlcmF0aW9uR3RrLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjplbmRQcmludGluZyk6IERlbGV0ZSB0aGUgV2ViUHJpbnRPcGVy
YXRpb25HdGsKKyAgICAgICAgb2JqZWN0LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3
UGFnZXNGb3JQcmludGluZyk6IFN0YXJ0IHByaW50aW5nIHBhZ2VzLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW46IEFkZCBEcmF3UGFnZXNGb3JQcmludGluZyBtZXNzYWdlLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UHJpbnRQYWdlc0RhdGE6OlByaW50UGFnZXNEYXRhKTog
U3RydWN0IHRvIHN0b3JlIGFsbCBkYXRhCisgICAgICAgIHVzZWQgdG8gcmVuZGVyIHBhZ2VzIGZv
ciBwcmludGluZy4KKyAgICAgICAgKFdlYktpdDo6UHJpbnRQYWdlc0RhdGE6OmluY3JlbWVudFBh
Z2VTZXF1ZW5jZSk6IEhlbHBlciBmdW5jdGlvbgorICAgICAgICB0byBpbmNyZW1lbnQgdGhlIHBh
Z2Ugc2VxdWVuY2UuCisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpjcmVh
dGUpOiBDcmVhdGUgYQorICAgICAgICBXZWJQcmludE9wZXJhdGlvbkd0a1VuaXggb3IgV2ViUHJp
bnRPcGVyYXRpb25HdGtXaW4zMiBkZXBlbmRpbmcgb24KKyAgICAgICAgdGhlIHBsYXRmb3JtLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6V2ViUHJpbnRPcGVyYXRpb25H
dGspOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6fldlYlByaW50T3Bl
cmF0aW9uR3RrKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnBhZ2VD
b3VudCk6IFJldHVybiB0aGUgdG90YWwgcGFnZXMKKyAgICAgICAgb2YgdGhlIGRvY3VtZW50IHRv
IHByaW50LgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cm90YXRlUGFn
ZSk6IEhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICB0cmFuc2Zvcm0gdGhlIGNvbnRleHQgYWNj
b3JkaW5nIHRvIG9yaWVudGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlv
bkd0azo6cmVuZGVyUGFnZSk6IFJlbmRlciB0aGUgZ2l2ZW4gcGFnZQorICAgICAgICBpbnRvIHRo
ZSBwcmludGluZyBjb250ZXh0LgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0
azo6cHJpbnRQYWdlc0lkbGUpOiBJZGxlIGZ1bmN0aW9uIHVzZWQKKyAgICAgICAgdG8gcHJpbnQg
cGFnZXMuCisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpwcmludFBhZ2Vz
SWRsZURvbmUpOiBDYWxsYmFjaworICAgICAgICBjYWxsZWQgd2hlbiBwcmludFBhZ2VzSWRsZSBm
aW5pc2hlcy4KKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnByaW50RG9u
ZSk6IEhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICBmaW5pc2ggdGhlIHByaW50IG9wZXJhdGlv
biwgY2FsbGVkIHdoZW4gYWxsIHBhZ2VzIGhhdmUgYmVlbiByZW5kZXJlZC4KKyAgICAgICAgKFdl
YktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnByaW50KTogU3RhcnQgcHJpbnRpbmcgdGhlIGRv
Y3VtZW50CisgICAgICAgIHVzaW5nIHRoZSBnaXZlbiBjYWlybyBzdXJmYWNlLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpwcmludFNldHRpbmdzKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnBhZ2VTZXR1cCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpwcmludFBhZ2VzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnBhZ2VSYW5nZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cGFnZVJhbmdlc0NvdW50KToKKwogMjAxMi0wMS0xNyAg
SGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbSW50ZXJu
YWxzXSBTaG91bGQgYmUgYWJsZSB0byBhY2Nlc3MgY29ycmVzcG9uZGluZyBEb2N1bWVudCBvYmpl
Y3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGE3NzFiOWQuLjlhOTJjMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtCkBAIC0zMjEsNiArMzIxLDcgQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQ
SV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL1BsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLmggXAorCVNv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUHJpbnRJbmZvR3RrLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9XZWJDb3JlQXJndW1lbnRDb2RlcnNHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL1dlYkV2ZW50RmFjdG9yeS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvV2ViRXZlbnRGYWN0b3J5LmggXApAQCAtODk0LDYgKzg5NSw4IEBAIGxpYndlYmtp
dDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmggXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
SW5zcGVjdG9yR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQYWdlR3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuaCBcCiAJU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0xheWVyVHJlZUhvc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuY3BwIFwKQEAgLTk5OCw2ICsxMDAxLDcgQEAgbGlid2Vi
a2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5P
Ul9WRVJTSU9OQF9sYV9DUFAKIAkkKENPVkVSQUdFX0NGTEFHUykgXAogCSQoR0xJQl9DRkxBR1Mp
IFwKIAkkKEdUS19DRkxBR1MpIFwKKwkkKEdUS19VTklYX1BSSU5USU5HX0NGTEFHUykgXAogCSQo
TElCU09VUF9DRkxBR1MpIFwKIAkkKFVOSUNPREVfQ0ZMQUdTKSBcCiAJJChYVF9DRkxBR1MpCkBA
IC0xMDUxLDYgKzEwNTUsNyBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZF
UlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX0xJQgogCSQoR0xJQl9MSUJT
KSBcCiAJJChHU1RSRUFNRVJfTElCUykgXAogCSQoR1RLX0xJQlMpIFwKKwkkKEdUS19VTklYX1BS
SU5USU5HX0xJQlMpIFwKIAkkKEpQRUdfTElCUykgXAogCSQoTElCU09VUF9MSUJTKSBcCiAJJChM
SUJYTUxfTElCUykgXApAQCAtMTIxNiw2ICsxMjIxLDcgQEAgUHJvZ3JhbXNfV2ViS2l0V2ViUHJv
Y2Vzc19DRkxBR1MgPSBcCiAJJChDQUlST19DRkxBR1MpIFwKIAkkKEdMSUJfQ0ZMQUdTKSBcCiAJ
JChHVEtfQ0ZMQUdTKSBcCisJJChHVEtfVU5JWF9QUklOVElOR19DRkxBR1MpIFwKIAkkKExJQlNP
VVBfQ0ZMQUdTKSBcCiAJJChaTElCX0NGTEFHUykKIApAQCAtMTIyNiw2ICsxMjMyLDcgQEAgUHJv
Z3JhbXNfV2ViS2l0V2ViUHJvY2Vzc19MREFERCA9IFwKIAlsaWJ3ZWJraXQyZ3RrLUBXRUJLSVRH
VEtfQVBJX01BSk9SX1ZFUlNJT05ALkBXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05ALmxhIFwK
IAkkKEdMSUJfTElCUykgXAogCSQoR1RLX0xJQlMpIFwKKwkkKEdUS19VTklYX1BSSU5USU5HX0xJ
QlMpIFwKIAkkKExJQlNPVVBfTElCUykgXAogCSQoWkxJQl9DRkxBR1MpCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QcmludEluZm8uY3BwIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1ByaW50SW5mby5jcHAKaW5kZXggMjNkM2VmOS4uY2UxMTkzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL1ByaW50SW5mby5jcHAKQEAgLTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSAiQXJndW1lbnRF
bmNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAKKyNpZiBQTEFURk9STShHVEspCisj
aW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogUHJpbnRJbmZvOjpQcmludEluZm8oKQpAQCAtNDIsMTEgKzQ2LDI1IEBAIFByaW50SW5m
bzo6UHJpbnRJbmZvKCkKIHZvaWQgUHJpbnRJbmZvOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRF
bmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewogICAgIGVuY29kZXItPmVuY29kZShDb3JlSVBDOjpJ
bihwYWdlU2V0dXBTY2FsZUZhY3RvciwgYXZhaWxhYmxlUGFwZXJXaWR0aCwgYXZhaWxhYmxlUGFw
ZXJIZWlnaHQpKTsKKyNpZiBQTEFURk9STShHVEspCisgICAgQ29yZUlQQzo6ZW5jb2RlKGVuY29k
ZXIsIHByaW50U2V0dGluZ3MuZ2V0KCkpOworICAgIENvcmVJUEM6OmVuY29kZShlbmNvZGVyLCBw
YWdlU2V0dXAuZ2V0KCkpOworI2VuZGlmCiB9CiAKIGJvb2wgUHJpbnRJbmZvOjpkZWNvZGUoQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBQcmludEluZm8mIGluZm8pCiB7Ci0gICAg
cmV0dXJuIGRlY29kZXItPmRlY29kZShDb3JlSVBDOjpPdXQoaW5mby5wYWdlU2V0dXBTY2FsZUZh
Y3RvciwgaW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBpbmZvLmF2YWlsYWJsZVBhcGVySGVpZ2h0
KSk7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoQ29yZUlQQzo6T3V0KGluZm8ucGFnZVNldHVw
U2NhbGVGYWN0b3IsIGluZm8uYXZhaWxhYmxlUGFwZXJXaWR0aCwgaW5mby5hdmFpbGFibGVQYXBl
ckhlaWdodCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBQTEFURk9STShHVEspCisg
ICAgaWYgKCFDb3JlSVBDOjpkZWNvZGUoZGVjb2RlciwgaW5mby5wcmludFNldHRpbmdzKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghQ29yZUlQQzo6ZGVjb2RlKGRlY29kZXIsIGlu
Zm8ucGFnZVNldHVwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50
SW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1ByaW50SW5mby5oCmluZGV4IDUwMmJlOTMu
LmI3M2I3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9QcmludEluZm8uaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvUHJpbnRJbmZvLmgKQEAgLTMwLDYgKzMwLDEwIEBA
CiAKICNpZiBQTEFURk9STShNQUMpCiBPQkpDX0NMQVNTIE5TUHJpbnRJbmZvOworI2VsaWYgUExB
VEZPUk0oR1RLKQordHlwZWRlZiBzdHJ1Y3QgX0d0a1ByaW50U2V0dGluZ3MgR3RrUHJpbnRTZXR0
aW5nczsKK3R5cGVkZWYgc3RydWN0IF9HdGtQYWdlU2V0dXAgR3RrUGFnZVNldHVwOworI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNlbHNlCiAvLyBGSVhNRTogVGhpcyBzaG91bGQg
dXNlIHRoZSB3aW5kb3dzIGVxdWl2YWxlbnQuCiBjbGFzcyBOU1ByaW50SW5mbzsKQEAgLTQ0LDEy
ICs0OCwyMSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IFByaW50SW5mbyB7CiAgICAg
UHJpbnRJbmZvKCk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIGV4cGxpY2l0IFByaW50SW5mbyhH
dGtQcmludFNldHRpbmdzKiwgR3RrUGFnZVNldHVwKik7CisjZWxzZQogICAgIGV4cGxpY2l0IFBy
aW50SW5mbyhOU1ByaW50SW5mbyAqKTsKKyNlbmRpZgogCiAgICAgZmxvYXQgcGFnZVNldHVwU2Nh
bGVGYWN0b3I7CiAgICAgZmxvYXQgYXZhaWxhYmxlUGFwZXJXaWR0aDsKICAgICBmbG9hdCBhdmFp
bGFibGVQYXBlckhlaWdodDsKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHUmVmUHRyPEd0a1By
aW50U2V0dGluZ3M+IHByaW50U2V0dGluZ3M7CisgICAgR1JlZlB0cjxHdGtQYWdlU2V0dXA+IHBh
Z2VTZXR1cDsKKyNlbmRpZgorCiAgICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyKikgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciosIFByaW50SW5mbyYpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9B
cmd1bWVudENvZGVyc0d0ay5jcHAKaW5kZXggMGNmYmQ0ZS4uYWQ5M2M1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc0d0ay5o
IgogCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1h
cC5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvRGF0YU9iamVjdEd0ay5oPgpAQCAtMzMsNiArMzQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJzaW9uaW5nLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9n
b2JqZWN0L0dPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwpAQCAtMjE2LDQgKzIxOCw4MyBAQCBib29sIEFyZ3VtZW50Q29kZXI8RHJh
Z0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBEcmFnRGF0YSYgZHJhZ0Rh
dAogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBlbmNvZGVHS2V5RmlsZShBcmd1
bWVudEVuY29kZXIqIGVuY29kZXIsIEdLZXlGaWxlKiBrZXlGaWxlKQoreworICAgIGdzaXplIGRh
dGFTaXplOworICAgIEdPd25QdHI8Y2hhcj4gZGF0YShnX2tleV9maWxlX3RvX2RhdGEoa2V5Rmls
ZSwgJmRhdGFTaXplLCAwKSk7CisgICAgRGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEuZ2V0KCkpLCBkYXRhU2l6ZSk7CisgICAgZW5jb2Rl
ci0+ZW5jb2RlKGRhdGFSZWZlcmVuY2UpOworfQorCitzdGF0aWMgYm9vbCBkZWNvZGVHS2V5Rmls
ZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdLZXlGaWxlKioga2V5RmlsZSkKK3sKKyAgICBE
YXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoZGF0
YVJlZmVyZW5jZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGF0YVJlZmVy
ZW5jZS5zaXplKCkpIHsKKyAgICAgICAgKmtleUZpbGUgPSAwOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICAqa2V5RmlsZSA9IGdfa2V5X2ZpbGVfbmV3KCk7CisgICAgaWYgKCFn
X2tleV9maWxlX2xvYWRfZnJvbV9kYXRhKCprZXlGaWxlLCByZWludGVycHJldF9jYXN0PGNvbnN0
IGdjaGFyKj4oZGF0YVJlZmVyZW5jZS5kYXRhKCkpLCBkYXRhUmVmZXJlbmNlLnNpemUoKSwgR19L
RVlfRklMRV9OT05FLCAwKSkgeworICAgICAgICBnX2tleV9maWxlX2ZyZWUoKmtleUZpbGUpOwor
ICAgICAgICAqa2V5RmlsZSA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
LCBHdGtQcmludFNldHRpbmdzKiBwcmludFNldHRpbmdzKQoreworICAgIEdLZXlGaWxlKiBrZXlG
aWxlID0gZ19rZXlfZmlsZV9uZXcoKTsKKyAgICBndGtfcHJpbnRfc2V0dGluZ3NfdG9fa2V5X2Zp
bGUocHJpbnRTZXR0aW5ncywga2V5RmlsZSwgIlByaW50IFNldHRpbmdzIik7CisgICAgZW5jb2Rl
R0tleUZpbGUoZW5jb2Rlciwga2V5RmlsZSk7CisgICAgZ19rZXlfZmlsZV9mcmVlKGtleUZpbGUp
OworfQorCitib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEdSZWZQdHI8R3Rr
UHJpbnRTZXR0aW5ncz4mIHByaW50U2V0dGluZ3MpCit7CisgICAgR0tleUZpbGUqIGtleUZpbGU7
CisgICAgaWYgKCFkZWNvZGVHS2V5RmlsZShkZWNvZGVyLCAma2V5RmlsZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHByaW50U2V0dGluZ3MgPSBhZG9wdEdSZWYoZ3RrX3ByaW50X3Nl
dHRpbmdzX25ldygpKTsKKyAgICBpZiAoIWtleUZpbGUpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgaWYgKCFndGtfcHJpbnRfc2V0dGluZ3NfbG9hZF9rZXlfZmlsZShwcmludFNldHRpbmdz
LmdldCgpLCBrZXlGaWxlLCAiUHJpbnQgU2V0dGluZ3MiLCAwKSkKKyAgICAgICAgcHJpbnRTZXR0
aW5ncyA9IDA7CisgICAgZ19rZXlfZmlsZV9mcmVlKGtleUZpbGUpOworCisgICAgcmV0dXJuIHBy
aW50U2V0dGluZ3M7Cit9CisKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rlciwg
R3RrUGFnZVNldHVwKiBwYWdlU2V0dXApCit7CisgICAgR0tleUZpbGUqIGtleUZpbGUgPSBnX2tl
eV9maWxlX25ldygpOworICAgIGd0a19wYWdlX3NldHVwX3RvX2tleV9maWxlKHBhZ2VTZXR1cCwg
a2V5RmlsZSwgIlBhZ2UgU2V0dXAiKTsKKyAgICBlbmNvZGVHS2V5RmlsZShlbmNvZGVyLCBrZXlG
aWxlKTsKKyAgICBnX2tleV9maWxlX2ZyZWUoa2V5RmlsZSk7Cit9CisKK2Jvb2wgZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgR1JlZlB0cjxHdGtQYWdlU2V0dXA+JiBwYWdlU2V0dXAp
Cit7CisgICAgR0tleUZpbGUqIGtleUZpbGU7CisgICAgaWYgKCFkZWNvZGVHS2V5RmlsZShkZWNv
ZGVyLCAma2V5RmlsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBhZ2VTZXR1cCA9
IGFkb3B0R1JlZihndGtfcGFnZV9zZXR1cF9uZXcoKSk7CisgICAgaWYgKCFrZXlGaWxlKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghZ3RrX3BhZ2Vfc2V0dXBfbG9hZF9rZXlfZmls
ZShwYWdlU2V0dXAuZ2V0KCksIGtleUZpbGUsICJQYWdlIFNldHVwIiwgMCkpCisgICAgICAgIHBh
Z2VTZXR1cCA9IDA7CisgICAgZ19rZXlfZmlsZV9mcmVlKGtleUZpbGUpOworCisgICAgcmV0dXJu
IHBhZ2VTZXR1cDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9Bcmd1bWVudENvZGVyc0d0ay5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVu
dENvZGVyc0d0ay5oCmluZGV4IDgyZjQ2ZDIuLjg4ODQyNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKQEAgLTI3LDYgKzI3LDEwIEBACiAjZGVm
aW5lIEFyZ3VtZW50Q29kZXJzR3RrX2gKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisj
aW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBfR3RrUHJp
bnRTZXR0aW5ncyBHdGtQcmludFNldHRpbmdzOwordHlwZWRlZiBzdHJ1Y3QgX0d0a1BhZ2VTZXR1
cCBHdGtQYWdlU2V0dXA7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFPYmplY3RH
dGs7CkBAIC00MCw2ICs0NCwxMiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OkRyYWdEYXRhPiB7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciosIFdlYkNvcmU6OkRyYWdEYXRhJik7CiB9OwogCit2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqLCBHdGtQcmludFNldHRpbmdzKik7Citib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBH
UmVmUHRyPEd0a1ByaW50U2V0dGluZ3M+Jik7CisKK3ZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rl
ciosIEd0a1BhZ2VTZXR1cCopOworYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgR1JlZlB0
cjxHdGtQYWdlU2V0dXA+Jik7CisKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKIAogI2VuZGlmIC8v
IEFyZ3VtZW50Q29kZXJzR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9n
dGsvUHJpbnRJbmZvR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvUHJpbnRJbmZv
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDY2YjIwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9QcmludEluZm9HdGsuY3Bw
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByaW50SW5mby5oIgor
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUHJpbnRJbmZv
OjpQcmludEluZm8oR3RrUHJpbnRTZXR0aW5ncyogc2V0dGluZ3MsIEd0a1BhZ2VTZXR1cCogcGFn
ZVNldHVwKQorICAgIDogcGFnZVNldHVwU2NhbGVGYWN0b3IoZ3RrX3ByaW50X3NldHRpbmdzX2dl
dF9zY2FsZShzZXR0aW5ncykgLyAxMDAuMCkKKyAgICAsIGF2YWlsYWJsZVBhcGVyV2lkdGgoZ3Rr
X3BhZ2Vfc2V0dXBfZ2V0X3BhcGVyX3dpZHRoKHBhZ2VTZXR1cCwgR1RLX1VOSVRfUE9JTlRTKSAt
IGd0a19wYWdlX3NldHVwX2dldF9sZWZ0X21hcmdpbihwYWdlU2V0dXAsIEdUS19VTklUX1BPSU5U
UykgLSBndGtfcGFnZV9zZXR1cF9nZXRfcmlnaHRfbWFyZ2luKHBhZ2VTZXR1cCwgR1RLX1VOSVRf
UE9JTlRTKSkKKyAgICAsIGF2YWlsYWJsZVBhcGVySGVpZ2h0KGd0a19wYWdlX3NldHVwX2dldF9w
YXBlcl9oZWlnaHQocGFnZVNldHVwLCBHVEtfVU5JVF9QT0lOVFMpIC0gZ3RrX3BhZ2Vfc2V0dXBf
Z2V0X3RvcF9tYXJnaW4ocGFnZVNldHVwLCBHVEtfVU5JVF9QT0lOVFMpIC0gZ3RrX3BhZ2Vfc2V0
dXBfZ2V0X2JvdHRvbV9tYXJnaW4ocGFnZVNldHVwLCBHVEtfVU5JVF9QT0lOVFMpKQorICAgICwg
cHJpbnRTZXR0aW5ncyhzZXR0aW5ncykKKyAgICAsIHBhZ2VTZXR1cChwYWdlU2V0dXApCit7Cisg
ICAgQVNTRVJUKHNldHRpbmdzKTsKKyAgICBBU1NFUlQocGFnZVNldHVwKTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBiMjUzZGFhLi43N2U5
Zjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMzQ4
MCw2ICszNDgwLDIwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkcmF3UGFnZXNUb1BERihXZWJGcmFt
ZVByb3h5KiBmcmFtZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluCiAgICAgbV9kYXRhQ2FsbGJh
Y2tzLnNldChjYWxsYmFja0lELCBjYWxsYmFjay5nZXQoKSk7CiAgICAgcHJvY2VzcygpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3UGFnZXNUb1BERihmcmFtZS0+ZnJhbWVJRCgpLCBwcmlu
dEluZm8sIGZpcnN0LCBjb3VudCwgY2FsbGJhY2tJRCksIG1fcGFnZUlELCBtX2lzUGVyZm9ybWlu
Z0RPTVByaW50T3BlcmF0aW9uID8gQ29yZUlQQzo6RGlzcGF0Y2hNZXNzYWdlRXZlbldoZW5XYWl0
aW5nRm9yU3luY1JlcGx5IDogMCk7CiB9CisjZWxpZiBQTEFURk9STShHVEspCit2b2lkIFdlYlBh
Z2VQcm94eTo6ZHJhd1BhZ2VzRm9yUHJpbnRpbmcoV2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0
IFByaW50SW5mbyYgcHJpbnRJbmZvLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gZGlkUHJpbnRD
YWxsYmFjaykKK3sKKyAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBjYWxsYmFjayA9IGRpZFByaW50
Q2FsbGJhY2s7CisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgY2FsbGJhY2stPmludmFs
aWRhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVpbnQ2NF90IGNhbGxiYWNr
SUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOworICAgIG1fdm9pZENhbGxiYWNrcy5zZXQoY2Fs
bGJhY2tJRCwgY2FsbGJhY2suZ2V0KCkpOworICAgIG1faXNJblByaW50aW5nTW9kZSA9IHRydWU7
CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpEcmF3UGFnZXNGb3JQcmlu
dGluZyhmcmFtZS0+ZnJhbWVJRCgpLCBwcmludEluZm8sIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCwg
bV9pc1BlcmZvcm1pbmdET01QcmludE9wZXJhdGlvbiA/IENvcmVJUEM6OkRpc3BhdGNoTWVzc2Fn
ZUV2ZW5XaGVuV2FpdGluZ0ZvclN5bmNSZXBseSA6IDApOworfQogI2VuZGlmCiAKIHZvaWQgV2Vi
UGFnZVByb3h5OjpmbGFzaEJhY2tpbmdTdG9yZVVwZGF0ZXMoY29uc3QgVmVjdG9yPEludFJlY3Q+
JiB1cGRhdGVSZWN0cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRl
eCA5MjY1MDJmLi5hZGM5ZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCkBAIC01NzcsNiArNTc3LDggQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExB
VEZPUk0oV0lOKQogICAgIHZvaWQgZHJhd1JlY3RUb1BERihXZWJGcmFtZVByb3h5KiwgY29uc3Qg
UHJpbnRJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8RGF0YUNhbGxi
YWNrPik7CiAgICAgdm9pZCBkcmF3UGFnZXNUb1BERihXZWJGcmFtZVByb3h5KiwgY29uc3QgUHJp
bnRJbmZvJiwgdWludDMyX3QgZmlyc3QsIHVpbnQzMl90IGNvdW50LCBQYXNzUmVmUHRyPERhdGFD
YWxsYmFjaz4pOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgZHJhd1BhZ2VzRm9yUHJp
bnRpbmcoV2ViRnJhbWVQcm94eSosIGNvbnN0IFByaW50SW5mbyYsIFBhc3NSZWZQdHI8Vm9pZENh
bGxiYWNrPik7CiAjZW5kaWYKIAogICAgIGNvbnN0IFN0cmluZyYgcGVuZGluZ0FQSVJlcXVlc3RV
UkwoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdBUElSZXF1ZXN0VVJMOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggYTFjM2MyYy4uNzEy
Yjk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cApAQCAtMTM0LDcgKzEzNCw5IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgorI2luY2x1ZGUgIldl
YlByaW50T3BlcmF0aW9uR3RrLmgiCiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKQEAgLTI2NDEs
MTAgKzI2NDMsMTggQEAgdm9pZCBXZWJQYWdlOjpiZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvKQogCiAgICAgZmxvYXQgZnVsbFBhZ2VIZWln
aHQ7CiAgICAgbV9wcmludENvbnRleHQtPmNvbXB1dGVQYWdlUmVjdHMoRmxvYXRSZWN0KDAsIDAs
IHByaW50SW5mby5hdmFpbGFibGVQYXBlcldpZHRoLCBwcmludEluZm8uYXZhaWxhYmxlUGFwZXJI
ZWlnaHQpLCAwLCAwLCBwcmludEluZm8ucGFnZVNldHVwU2NhbGVGYWN0b3IsIGZ1bGxQYWdlSGVp
Z2h0LCB0cnVlKTsKKworI2lmIFBMQVRGT1JNKEdUSykKKyAgICBpZiAoIW1fcHJpbnRPcGVyYXRp
b24pCisgICAgICAgIG1fcHJpbnRPcGVyYXRpb24gPSBXZWJQcmludE9wZXJhdGlvbkd0azo6Y3Jl
YXRlKHRoaXMsIHByaW50SW5mbyk7CisjZW5kaWYKIH0KIAogdm9pZCBXZWJQYWdlOjplbmRQcmlu
dGluZygpCiB7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIG1fcHJpbnRPcGVyYXRpb24gPSAwOwor
I2VuZGlmCiAgICAgbV9wcmludENvbnRleHQgPSBudWxscHRyOwogfQogCkBAIC0yODI0LDYgKzI4
MzQsMTcgQEAgdm9pZCBXZWJQYWdlOjpkcmF3UGFnZXNUb1BERih1aW50NjRfdCBmcmFtZUlELCBj
b25zdCBQcmludEluZm8mIHByaW50SW5mbywgdWludDMKIAogICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGF0YUNhbGxiYWNrKENvcmVJUEM6OkRhdGFSZWZlcmVuY2UoQ0ZEYXRhR2V0
Qnl0ZVB0cihwZGZQYWdlRGF0YS5nZXQoKSksIENGRGF0YUdldExlbmd0aChwZGZQYWdlRGF0YS5n
ZXQoKSkpLCBjYWxsYmFja0lEKSk7CiB9CisjZWxpZiBQTEFURk9STShHVEspCit2b2lkIFdlYlBh
Z2U6OmRyYXdQYWdlc0ZvclByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5m
byYgcHJpbnRJbmZvLCB1aW50NjRfdCBjYWxsYmFja0lEKQoreworICAgIGJlZ2luUHJpbnRpbmco
ZnJhbWVJRCwgcHJpbnRJbmZvKTsKKyAgICBpZiAobV9wcmludENvbnRleHQgJiYgbV9wcmludE9w
ZXJhdGlvbikgeworICAgICAgICBtX3ByaW50T3BlcmF0aW9uLT5zdGFydFByaW50KG1fcHJpbnRD
b250ZXh0LmdldCgpLCBjYWxsYmFja0lEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsK
K30KICNlbmRpZgogCiB2b2lkIFdlYlBhZ2U6OnJ1bk1vZGFsKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDQwMDcyY2YuLjc2ZjY5YzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNzAsNiArNzAs
NyBAQAogCiAjaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgi
CisjaW5jbHVkZSAiV2ViUHJpbnRPcGVyYXRpb25HdGsuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKQEAgLTQzNiw2ICs0MzcsOCBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0o
TUFDKSB8fCBQTEFURk9STShXSU4pCiAgICAgdm9pZCBkcmF3UmVjdFRvUERGKHVpbnQ2NF90IGZy
YW1lSUQsIGNvbnN0IFByaW50SW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCB1aW50NjRf
dCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGRyYXdQYWdlc1RvUERGKHVpbnQ2NF90IGZyYW1lSUQs
IGNvbnN0IFByaW50SW5mbyYsIHVpbnQzMl90IGZpcnN0LCB1aW50MzJfdCBjb3VudCwgdWludDY0
X3QgY2FsbGJhY2tJRCk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgdm9pZCBkcmF3UGFnZXNG
b3JQcmludGluZyh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mLCB1aW50NjRfdCBj
YWxsYmFja0lEKTsKICNlbmRpZgogCiAgICAgYm9vbCBtYWluRnJhbWVIYXNDdXN0b21SZXByZXNl
bnRhdGlvbigpIGNvbnN0OwpAQCAtNzE3LDYgKzcyMCw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcj4gbV9ub3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXI7CiAKICAgICBPd25QdHI8V2ViQ29yZTo6UHJpbnRDb250ZXh0
PiBtX3ByaW50Q29udGV4dDsKKyNpZiBQTEFURk9STShHVEspCisgICAgUmVmUHRyPFdlYlByaW50
T3BlcmF0aW9uR3RrPiBtX3ByaW50T3BlcmF0aW9uOworI2VuZGlmCiAKICAgICBTYW5kYm94RXh0
ZW5zaW9uVHJhY2tlciBtX3NhbmRib3hFeHRlbnNpb25UcmFja2VyOwogICAgIHVpbnQ2NF90IG1f
cGFnZUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbgppbmRleCA1YTNiYjQ1Li4wOWY4MmMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAt
MTg3LDYgKzE4Nyw5IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIERyYXdSZWN0VG9QREYo
dWludDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpQcmludEluZm8gcHJpbnRJbmZvLCBXZWJDb3JlOjpJ
bnRSZWN0IHJlY3QsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgRHJhd1BhZ2VzVG9QREYodWlu
dDY0X3QgZnJhbWVJRCwgV2ViS2l0OjpQcmludEluZm8gcHJpbnRJbmZvLCB1aW50MzJfdCBmaXJz
dCwgdWludDMyX3QgY291bnQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAjZW5kaWYKKyNpZiBQTEFU
Rk9STShHVEspCisgICAgRHJhd1BhZ2VzRm9yUHJpbnRpbmcodWludDY0X3QgZnJhbWVJRCwgV2Vi
S2l0OjpQcmludEluZm8gcHJpbnRJbmZvLCB1aW50NjRfdCBjYWxsYmFja0lEKQorI2VuZGlmCiAK
ICAgICBTZXRNZW1vcnlDYWNoZU1lc3NhZ2VzRW5hYmxlZChib29sIG1lbW9yeUNhY2hlTWVzc2Fn
ZXNFbmFibGVkKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmYwMDYzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcApAQCAt
MCwwICsxLDM5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUHJpbnRPcGVyYXRpb25H
dGsuaCIKKworI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJv
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25Q
dHIuaD4KKworI2lmZGVmIEhBVkVfR1RLX1VOSVhfUFJJTlRJTkcKKyNpbmNsdWRlIDxjYWlyby1w
ZGYuaD4KKyNpbmNsdWRlIDxjYWlyby1wcy5oPgorI2luY2x1ZGUgPGd0ay9ndGt1bml4cHJpbnQu
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworI2lmZGVmIEhBVkVfR1RLX1VOSVhf
UFJJTlRJTkcKK2NsYXNzIFdlYlByaW50T3BlcmF0aW9uR3RrVW5peDogcHVibGljIFdlYlByaW50
T3BlcmF0aW9uR3RrIHsKK3B1YmxpYzoKKyAgICBXZWJQcmludE9wZXJhdGlvbkd0a1VuaXgoV2Vi
UGFnZSogcGFnZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8pCisgICAgICAgIDogV2ViUHJp
bnRPcGVyYXRpb25HdGsocGFnZSwgcHJpbnRJbmZvKQorICAgICAgICAsIG1fcHJpbnRKb2IoMCkK
KyAgICB7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFuIGVudW1lcmF0ZVByaW50ZXJzRnVu
Y3Rpb24oR3RrUHJpbnRlciogcHJpbnRlciwgV2ViUHJpbnRPcGVyYXRpb25HdGtVbml4KiBwcmlu
dE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIEd0a1ByaW50ZXIqIHNlbGVjdGVkUHJpbnRlciA9
IDA7CisgICAgICAgIGNvbnN0IGNoYXIqIHByaW50ZXJOYW1lID0gZ3RrX3ByaW50X3NldHRpbmdz
X2dldF9wcmludGVyKHByaW50T3BlcmF0aW9uLT5wcmludFNldHRpbmdzKCkpOworICAgICAgICBp
ZiAocHJpbnRlck5hbWUpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHByaW50ZXJOYW1lLCBn
dGtfcHJpbnRlcl9nZXRfbmFtZShwcmludGVyKSkpCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRQ
cmludGVyID0gcHJpbnRlcjsKKyAgICAgICAgfSBlbHNlIGlmIChndGtfcHJpbnRlcl9pc19kZWZh
dWx0KHByaW50ZXIpKQorICAgICAgICAgICAgc2VsZWN0ZWRQcmludGVyID0gcHJpbnRlcjsKKwor
ICAgICAgICBpZiAoc2VsZWN0ZWRQcmludGVyKSB7CisgICAgICAgICAgICBzdGF0aWMgaW50IGpv
Yk51bWJlciA9IDA7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBhcHBsaWNhdGlvbk5hbWUgPSBn
X2dldF9hcHBsaWNhdGlvbl9uYW1lKCk7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+am9iTmFt
ZShnX3N0cmR1cF9wcmludGYoIiVzIGpvYiAjJWQiLCBhcHBsaWNhdGlvbk5hbWUgPyBhcHBsaWNh
dGlvbk5hbWUgOiAiV2ViS2l0IiwgKytqb2JOdW1iZXIpKTsKKyAgICAgICAgICAgIHByaW50T3Bl
cmF0aW9uLT5tX3ByaW50Sm9iID0gYWRvcHRHUmVmKGd0a19wcmludF9qb2JfbmV3KGpvYk5hbWUu
Z2V0KCksIHNlbGVjdGVkUHJpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50T3BlcmF0aW9uLT5wcmlu
dFNldHRpbmdzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludE9wZXJhdGlvbi0+cGFnZVNldHVwKCkpKTsK
KyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGVudW1lcmF0ZVByaW50ZXJzRmluaXNoZWQo
V2ViUHJpbnRPcGVyYXRpb25HdGtVbml4KiBwcmludE9wZXJhdGlvbikKKyAgICB7CisgICAgICAg
IGlmICghcHJpbnRPcGVyYXRpb24tPm1fcHJpbnRKb2IpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBQcmludGluZyBlcnJvci4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGludCByYW5nZXNDb3VudDsKKyAgICAgICAgcHJpbnRPcGVyYXRpb24tPm1fcGFnZVJhbmdl
cyA9IGd0a19wcmludF9qb2JfZ2V0X3BhZ2VfcmFuZ2VzKHByaW50T3BlcmF0aW9uLT5tX3ByaW50
Sm9iLmdldCgpLCAmcmFuZ2VzQ291bnQpOworICAgICAgICBwcmludE9wZXJhdGlvbi0+bV9wYWdl
UmFuZ2VzQ291bnQgPSByYW5nZXNDb3VudDsKKyAgICAgICAgcHJpbnRPcGVyYXRpb24tPm1fcHJp
bnRQYWdlcyA9IGd0a19wcmludF9qb2JfZ2V0X3BhZ2VzKHByaW50T3BlcmF0aW9uLT5tX3ByaW50
Sm9iLmdldCgpKTsKKyAgICAgICAgcHJpbnRPcGVyYXRpb24tPm1fZG9Sb3RhdGUgPSBndGtfcHJp
bnRfam9iX2dldF9yb3RhdGUocHJpbnRPcGVyYXRpb24tPm1fcHJpbnRKb2IuZ2V0KCkpOworCisg
ICAgICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGd0a19wcmludF9qb2JfZ2V0X3N1cmZh
Y2UocHJpbnRPcGVyYXRpb24tPm1fcHJpbnRKb2IuZ2V0KCksIDApOworICAgICAgICBpZiAoIXN1
cmZhY2UpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBQcmludGluZyBlcnJvci4KKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50T3BlcmF0aW9uLT5wcmludChz
dXJmYWNlLCA3MiwgNzIpOworICAgIH0KKworICAgIHZvaWQgc3RhcnRQcmludChXZWJDb3JlOjpQ
cmludENvbnRleHQqIHByaW50Q29udGV4dCwgdWludDY0X3QgY2FsbGJhY2tJRCkKKyAgICB7Cisg
ICAgICAgIG1fcHJpbnRDb250ZXh0ID0gcHJpbnRDb250ZXh0OworICAgICAgICBtX2NhbGxiYWNr
SUQgPSBjYWxsYmFja0lEOworICAgICAgICBndGtfZW51bWVyYXRlX3ByaW50ZXJzKHJlaW50ZXJw
cmV0X2Nhc3Q8R3RrUHJpbnRlckZ1bmM+KGVudW1lcmF0ZVByaW50ZXJzRnVuY3Rpb24pLCB0aGlz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ry
b3lOb3RpZnk+KGVudW1lcmF0ZVByaW50ZXJzRmluaXNoZWQpLCBGQUxTRSk7CisgICAgfQorCisg
ICAgdm9pZCBzdGFydFBhZ2UoY2Fpcm9fdCogY3IpCisgICAgeworICAgICAgICBHdGtQYXBlclNp
emUqIHBhcGVyU2l6ZSA9IGd0a19wYWdlX3NldHVwX2dldF9wYXBlcl9zaXplKG1fcGFnZVNldHVw
LmdldCgpKTsKKyAgICAgICAgZG91YmxlIHdpZHRoID0gZ3RrX3BhcGVyX3NpemVfZ2V0X3dpZHRo
KHBhcGVyU2l6ZSwgR1RLX1VOSVRfUE9JTlRTKTsKKyAgICAgICAgZG91YmxlIGhlaWdodCA9IGd0
a19wYXBlcl9zaXplX2dldF9oZWlnaHQocGFwZXJTaXplLCBHVEtfVU5JVF9QT0lOVFMpOworCisg
ICAgICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGd0a19wcmludF9qb2JfZ2V0X3N1cmZh
Y2UobV9wcmludEpvYi5nZXQoKSwgMCk7CisgICAgICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1
cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKKyAgICAgICAgaWYg
KHN1cmZhY2VUeXBlID09IENBSVJPX1NVUkZBQ0VfVFlQRV9QUykgeworICAgICAgICAgICAgY2Fp
cm9fcHNfc3VyZmFjZV9zZXRfc2l6ZShzdXJmYWNlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAg
ICAgIGNhaXJvX3BzX3N1cmZhY2VfZHNjX2JlZ2luX3BhZ2Vfc2V0dXAoc3VyZmFjZSk7CisKKyAg
ICAgICAgICAgIHN3aXRjaCAoZ3RrX3BhZ2Vfc2V0dXBfZ2V0X29yaWVudGF0aW9uKG1fcGFnZVNl
dHVwLmdldCgpKSkgeworICAgICAgICAgICAgY2FzZSBHVEtfUEFHRV9PUklFTlRBVElPTl9QT1JU
UkFJVDoKKyAgICAgICAgICAgIGNhc2UgR1RLX1BBR0VfT1JJRU5UQVRJT05fUkVWRVJTRV9QT1JU
UkFJVDoKKyAgICAgICAgICAgICAgICBjYWlyb19wc19zdXJmYWNlX2RzY19jb21tZW50KHN1cmZh
Y2UsICIlJVBhZ2VPcmllbnRhdGlvbjogUG9ydHJhaXQiKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgR1RLX1BBR0VfT1JJRU5UQVRJT05fTEFORFNDQVBFOgorICAg
ICAgICAgICAgY2FzZSBHVEtfUEFHRV9PUklFTlRBVElPTl9SRVZFUlNFX0xBTkRTQ0FQRToKKyAg
ICAgICAgICAgICAgICBjYWlyb19wc19zdXJmYWNlX2RzY19jb21tZW50KHN1cmZhY2UsICIlJVBh
Z2VPcmllbnRhdGlvbjogTGFuZHNjYXBlIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFD
RV9UWVBFX1BERikKKyAgICAgICAgICAgIGNhaXJvX3BkZl9zdXJmYWNlX3NldF9zaXplKHN1cmZh
Y2UsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKworICAgIHZvaWQgZW5kUGFnZShjYWlyb190KiBj
cikKKyAgICB7CisgICAgICAgIGNhaXJvX3Nob3dfcGFnZShjcik7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgcHJpbnRKb2JDb21wbGV0ZShHdGtQcmludEpvYiogcHJpbnRKb2IsIFdlYlByaW50
T3BlcmF0aW9uR3RrVW5peCogcHJpbnRPcGVyYXRpb24sIGNvbnN0IEdFcnJvciopCisgICAgewor
ICAgICAgICBwcmludE9wZXJhdGlvbi0+bV9wcmludEpvYiA9IDA7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgcHJpbnRKb2JGaW5pc2hlZChXZWJQcmludE9wZXJhdGlvbkd0a1VuaXgqIHByaW50
T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgcHJpbnRPcGVyYXRpb24tPmRlcmVmKCk7CisgICAg
fQorCisgICAgdm9pZCBlbmRQcmludCgpCisgICAgeworICAgICAgICBjYWlyb19zdXJmYWNlX2Zp
bmlzaChndGtfcHJpbnRfam9iX2dldF9zdXJmYWNlKG1fcHJpbnRKb2IuZ2V0KCksIDApKTsKKyAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvcGVyYXRpb24gaXMgYWxpdmUgYXVudGlsIHRoZSBqb2Ig
aXMgc2VudC4KKyAgICAgICAgcmVmKCk7CisgICAgICAgIGd0a19wcmludF9qb2Jfc2VuZChtX3By
aW50Sm9iLmdldCgpLCByZWludGVycHJldF9jYXN0PEd0a1ByaW50Sm9iQ29tcGxldGVGdW5jPihw
cmludEpvYkNvbXBsZXRlKSwgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KHByaW50Sm9iRmluaXNoZWQpKTsKKyAgICB9CisK
KyAgICBHUmVmUHRyPEd0a1ByaW50Sm9iPiBtX3ByaW50Sm9iOworfTsKKyNlbmRpZgorCisjaWZk
ZWYgR19PU19XSU4zMgorY2xhc3MgV2ViUHJpbnRPcGVyYXRpb25HdGtXaW4zMjogcHVibGljIFdl
YlByaW50T3BlcmF0aW9uR3RrIHsKK3B1YmxpYzoKKyAgICBXZWJQcmludE9wZXJhdGlvbkd0a1dp
bjMyKFdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvKQorICAgICAgICA6
IFdlYlByaW50T3BlcmF0aW9uR3RrKHBhZ2UsIHByaW50SW5mbykKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBzdGFydFByaW50KFdlYkNvcmU6OlByaW50Q29udGV4dCogcHJpbnRDb250ZXh0LCB1
aW50NjRfdCBjYWxsYmFja0lEKQorICAgIHsKKyAgICAgICAgbV9wcmludENvbnRleHQgPSBwcmlu
dENvbnRleHQ7CisgICAgICAgIG1fY2FsbGJhY2tJRCA9IGNhbGxiYWNrSUQ7CisgICAgICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgdm9pZCBzdGFydFBhZ2UoY2Fpcm9fdCogY3Ip
CisgICAgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIHZvaWQgZW5k
UGFnZShjYWlyb190KiBjcikKKyAgICB7CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
fQorCisgICAgdm9pZCBlbmRQcmludCgpCisgICAgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIH0KK307CisjZW5kaWYKKworc3RydWN0IFByaW50UGFnZXNEYXRhIHsKKyAgICBQcmlu
dFBhZ2VzRGF0YShXZWJQcmludE9wZXJhdGlvbkd0ayogcHJpbnRPcGVyYXRpb24pCisgICAgICAg
IDogcHJpbnRPcGVyYXRpb24ocHJpbnRPcGVyYXRpb24pCisgICAgICAgICwgdG90YWxQcmludGVk
KC0xKQorICAgICAgICAsIHRvdGFsVG9QcmludCgwKQorICAgICAgICAsIHBhZ2VOdW1iZXIoMCkK
KyAgICAgICAgLCBwYWdlUG9zaXRpb24oMCkKKyAgICAgICAgLCBpc0RvbmUoZmFsc2UpCisgICAg
eworICAgICAgICBpZiAocHJpbnRPcGVyYXRpb24tPnByaW50UGFnZXMoKSA9PSBHVEtfUFJJTlRf
UEFHRVNfUkFOR0VTKSB7CisgICAgICAgICAgICBWZWN0b3I8R3RrUGFnZVJhbmdlPiBwYWdlUmFu
Z2VzOworICAgICAgICAgICAgR3RrUGFnZVJhbmdlKiByYW5nZXMgPSBwcmludE9wZXJhdGlvbi0+
cGFnZVJhbmdlcygpOworICAgICAgICAgICAgc2l6ZV90IHJhbmdlc0NvdW50ID0gcHJpbnRPcGVy
YXRpb24tPnBhZ2VSYW5nZXNDb3VudCgpOworICAgICAgICAgICAgaW50IHBhZ2VDb3VudCA9IHBy
aW50T3BlcmF0aW9uLT5wYWdlQ291bnQoKTsKKworICAgICAgICAgICAgcGFnZVJhbmdlcy5yZXNl
cnZlQ2FwYWNpdHkocmFuZ2VzQ291bnQpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCByYW5nZXNDb3VudDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJhbmdlc1tpXS5z
dGFydCA+PSAwICYmIHJhbmdlc1tpXS5zdGFydCA8IHBhZ2VDb3VudCAmJiByYW5nZXNbaV0uZW5k
ID49IDAgJiYgcmFuZ2VzW2ldLmVuZCA8IHBhZ2VDb3VudCkKKyAgICAgICAgICAgICAgICAgICAg
cGFnZVJhbmdlcy5hcHBlbmQocmFuZ2VzW2ldKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChy
YW5nZXNbaV0uc3RhcnQgPj0gMCAmJiByYW5nZXNbaV0uc3RhcnQgPCBwYWdlQ291bnQgJiYgcmFu
Z2VzW2ldLmVuZCA+PSBwYWdlQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFnZVJhbmdl
cy5hcHBlbmQocmFuZ2VzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgcGFnZVJhbmdlcy5sYXN0
KCkuZW5kID0gcGFnZUNvdW50IC0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdl
c1tpXS5lbmQgPj0gMCAmJiByYW5nZXNbaV0uZW5kIDwgcGFnZUNvdW50ICYmIHJhbmdlc1tpXS5z
dGFydCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcGFnZVJhbmdlcy5hcHBlbmQocmFuZ2Vz
W2ldKTsKKyAgICAgICAgICAgICAgICAgICAgcGFnZVJhbmdlcy5sYXN0KCkuc3RhcnQgPSAwOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwYWdlUmFuZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaiA9IHBhZ2VSYW5nZXNbaV0uc3RhcnQ7IGogPD0gcGFnZVJhbmdlc1tpXS5lbmQ7
ICsraikKKyAgICAgICAgICAgICAgICAgICAgcGFnZXMuYXBwZW5kKGopOworICAgICAgICAgICAg
ICAgIHRvdGFsVG9QcmludCArPSBwYWdlUmFuZ2VzW2ldLmVuZCAtIHBhZ2VSYW5nZXNbaV0uc3Rh
cnQgKyAxOworICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0
b3RhbFRvUHJpbnQgPSBwcmludE9wZXJhdGlvbi0+cGFnZUNvdW50KCk7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHRvdGFsVG9QcmludDsgKytpKQorICAgICAgICAgICAgICAg
IHBhZ2VzLmFwcGVuZChpKTsKKyAgICAgICAgfQorCisgICAgICAgIHBhZ2VOdW1iZXIgPSBwYWdl
c1twYWdlUG9zaXRpb25dOworICAgIH0KKworICAgIHZvaWQgaW5jcmVtZW50UGFnZVNlcXVlbmNl
KCkKKyAgICB7CisgICAgICAgIGlmICh0b3RhbFByaW50ZWQgPT0gLTEpIHsKKyAgICAgICAgICAg
IHRvdGFsUHJpbnRlZCA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBwYWdlUG9zaXRpb24rKzsKKyAgICAgICAgaWYgKHBhZ2VQb3NpdGlvbiA+PSB0b3RhbFRv
UHJpbnQpIHsKKyAgICAgICAgICAgIGlzRG9uZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgcGFnZU51bWJlciA9IHBhZ2VzW3BhZ2VQb3NpdGlvbl07Cisg
ICAgICAgIHRvdGFsUHJpbnRlZCsrOworICAgIH0KKworICAgIFJlZlB0cjxXZWJQcmludE9wZXJh
dGlvbkd0az4gcHJpbnRPcGVyYXRpb247CisKKyAgICBpbnQgdG90YWxQcmludGVkOworICAgIHNp
emVfdCB0b3RhbFRvUHJpbnQ7CisgICAgaW50IHBhZ2VOdW1iZXI7CisgICAgc2l6ZV90IHBhZ2VQ
b3NpdGlvbjsKKyAgICBWZWN0b3I8c2l6ZV90PiBwYWdlczsKKworICAgIGJvb2wgaXNEb25lIDog
MTsKK307CisKK1Bhc3NSZWZQdHI8V2ViUHJpbnRPcGVyYXRpb25HdGs+IFdlYlByaW50T3BlcmF0
aW9uR3RrOjpjcmVhdGUoV2ViUGFnZSogcGFnZSwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8p
Cit7CisjaWZkZWYgSEFWRV9HVEtfVU5JWF9QUklOVElORworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViUHJpbnRPcGVyYXRpb25HdGtVbml4KHBhZ2UsIHByaW50SW5mbykpOworI2VuZGlmCisj
aWZkZWYgR19PU19XSU4zMgorICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUHJpbnRPcGVyYXRp
b25HdGtXaW4zMihwYWdlLCBwcmludEluZm8pKTsKKyNlbmRpZgorfQorCitXZWJQcmludE9wZXJh
dGlvbkd0azo6V2ViUHJpbnRPcGVyYXRpb25HdGsoV2ViUGFnZSogcGFnZSwgY29uc3QgUHJpbnRJ
bmZvJiBwcmludEluZm8pCisgICAgOiBtX3dlYlBhZ2UocGFnZSkKKyAgICAsIG1fcHJpbnRTZXR0
aW5ncyhwcmludEluZm8ucHJpbnRTZXR0aW5ncy5nZXQoKSkKKyAgICAsIG1fcGFnZVNldHVwKHBy
aW50SW5mby5wYWdlU2V0dXAuZ2V0KCkpCisgICAgLCBtX3ByaW50Q29udGV4dCgwKQorICAgICwg
bV9jYWxsYmFja0lEKDApCisgICAgLCBtX3hEUEkoMSkKKyAgICAsIG1feURQSSgxKQorICAgICwg
bV9wcmludFBhZ2VzSWRsZUlkKDApCisgICAgLCBtX3ByaW50UGFnZXMoR1RLX1BSSU5UX1BBR0VT
X0FMTCkKKyAgICAsIG1fcGFnZVJhbmdlcygwKQorICAgICwgbV9wYWdlUmFuZ2VzQ291bnQoMCkK
KyAgICAsIG1fZG9Sb3RhdGUoZmFsc2UpCit7Cit9CisKK1dlYlByaW50T3BlcmF0aW9uR3RrOjp+
V2ViUHJpbnRPcGVyYXRpb25HdGsoKQoreworICAgIGlmIChtX3ByaW50UGFnZXNJZGxlSWQpCisg
ICAgICAgIGdfc291cmNlX3JlbW92ZShtX3ByaW50UGFnZXNJZGxlSWQpOworfQorCitpbnQgV2Vi
UHJpbnRPcGVyYXRpb25HdGs6OnBhZ2VDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
bnRDb250ZXh0ID8gbV9wcmludENvbnRleHQtPnBhZ2VDb3VudCgpIDogMDsKK30KKwordm9pZCBX
ZWJQcmludE9wZXJhdGlvbkd0azo6cm90YXRlUGFnZSgpCit7CisgICAgR3RrUGFwZXJTaXplKiBw
YXBlclNpemUgPSBndGtfcGFnZV9zZXR1cF9nZXRfcGFwZXJfc2l6ZShtX3BhZ2VTZXR1cC5nZXQo
KSk7CisgICAgZG91YmxlIHdpZHRoID0gZ3RrX3BhcGVyX3NpemVfZ2V0X3dpZHRoKHBhcGVyU2l6
ZSwgR1RLX1VOSVRfSU5DSCkgKiBtX3hEUEk7CisgICAgZG91YmxlIGhlaWdodCA9IGd0a19wYXBl
cl9zaXplX2dldF9oZWlnaHQocGFwZXJTaXplLCBHVEtfVU5JVF9JTkNIKSAqIG1feURQSTsKKwor
ICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeDsKKyAgICBzd2l0Y2ggKGd0a19wYWdlX3NldHVwX2dl
dF9vcmllbnRhdGlvbihtX3BhZ2VTZXR1cC5nZXQoKSkpIHsKKyAgICBjYXNlIEdUS19QQUdFX09S
SUVOVEFUSU9OX0xBTkRTQ0FQRToKKyAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKG1fY2Fpcm9Db250
ZXh0LmdldCgpLCAwLCBoZWlnaHQpOworICAgICAgICBjYWlyb19tYXRyaXhfaW5pdCgmbWF0cml4
LCAwLCAtMSwgMSwgMCwgMCwgMCk7CisgICAgICAgIGNhaXJvX3RyYW5zZm9ybShtX2NhaXJvQ29u
dGV4dC5nZXQoKSwgJm1hdHJpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1RLX1BBR0Vf
T1JJRU5UQVRJT05fUkVWRVJTRV9QT1JUUkFJVDoKKyAgICAgICAgY2Fpcm9fdHJhbnNsYXRlKG1f
Y2Fpcm9Db250ZXh0LmdldCgpLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgY2Fpcm9fbWF0cml4
X2luaXQoJm1hdHJpeCwgLTEsIDAsIDAsIC0xLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fdHJhbnNm
b3JtKG1fY2Fpcm9Db250ZXh0LmdldCgpLCAmbWF0cml4KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHVEtfUEFHRV9PUklFTlRBVElPTl9SRVZFUlNFX0xBTkRTQ0FQRToKKyAgICAgICAgY2Fp
cm9fdHJhbnNsYXRlKG1fY2Fpcm9Db250ZXh0LmdldCgpLCB3aWR0aCwgMCk7CisgICAgICAgIGNh
aXJvX21hdHJpeF9pbml0KCZtYXRyaXgsIDAsIDEsIC0xLCAwLCAwLCAwKTsKKyAgICAgICAgY2Fp
cm9fdHJhbnNmb3JtKG1fY2Fpcm9Db250ZXh0LmdldCgpLCAmbWF0cml4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHVEtfUEFHRV9PUklFTlRBVElPTl9QT1JUUkFJVDoKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUHJpbnRPcGVyYXRpb25HdGs6
OnJlbmRlclBhZ2UoaW50IHBhZ2VOdW1iZXIpCit7CisgICAgc3RhcnRQYWdlKG1fY2Fpcm9Db250
ZXh0LmdldCgpKTsKKworICAgIGlmIChtX2RvUm90YXRlKQorICAgICAgICByb3RhdGVQYWdlKCk7
CisKKyAgICBkb3VibGUgbGVmdCA9IGd0a19wYWdlX3NldHVwX2dldF9sZWZ0X21hcmdpbihtX3Bh
Z2VTZXR1cC5nZXQoKSwgR1RLX1VOSVRfSU5DSCk7CisgICAgZG91YmxlIHRvcCA9IGd0a19wYWdl
X3NldHVwX2dldF90b3BfbWFyZ2luKG1fcGFnZVNldHVwLmdldCgpLCBHVEtfVU5JVF9JTkNIKTsK
KyAgICBjYWlyb190cmFuc2xhdGUobV9jYWlyb0NvbnRleHQuZ2V0KCksIGxlZnQgKiBtX3hEUEks
IHRvcCAqIG1feURQSSk7CisKKyAgICBkb3VibGUgcGFnZVdpZHRoID0gZ3RrX3BhZ2Vfc2V0dXBf
Z2V0X3BhZ2Vfd2lkdGgobV9wYWdlU2V0dXAuZ2V0KCksIEdUS19VTklUX0lOQ0gpICogbV94RFBJ
OworICAgIFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dENhaXJvIHBsYXRmb3JtQ29udGV4dChtX2Nh
aXJvQ29udGV4dC5nZXQoKSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNz
Q29udGV4dCgmcGxhdGZvcm1Db250ZXh0KTsKKyAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdl
KGdyYXBoaWNzQ29udGV4dCwgcGFnZU51bWJlciwgcGFnZVdpZHRoKTsKKworICAgIGVuZFBhZ2Uo
bV9jYWlyb0NvbnRleHQuZ2V0KCkpOworfQorCitnYm9vbGVhbiBXZWJQcmludE9wZXJhdGlvbkd0
azo6cHJpbnRQYWdlc0lkbGUoZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgUHJpbnRQYWdlc0Rh
dGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxQcmludFBhZ2VzRGF0YSo+KHVzZXJEYXRhKTsKKworICAg
IGRhdGEtPmluY3JlbWVudFBhZ2VTZXF1ZW5jZSgpOworICAgIGlmIChkYXRhLT5pc0RvbmUpCisg
ICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGRhdGEtPnByaW50T3BlcmF0aW9uLT5yZW5kZXJQ
YWdlKGRhdGEtPnBhZ2VOdW1iZXIpOworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIFdlYlBy
aW50T3BlcmF0aW9uR3RrOjpwcmludFBhZ2VzSWRsZURvbmUoZ3BvaW50ZXIgdXNlckRhdGEpCit7
CisgICAgUHJpbnRQYWdlc0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxQcmludFBhZ2VzRGF0YSo+
KHVzZXJEYXRhKTsKKworICAgIGRhdGEtPnByaW50T3BlcmF0aW9uLT5wcmludERvbmUoKTsKKyAg
ICBkZWxldGUgZGF0YTsKK30KKwordm9pZCBXZWJQcmludE9wZXJhdGlvbkd0azo6cHJpbnREb25l
KCkKK3sKKyAgICBtX3ByaW50UGFnZXNJZGxlSWQgPSAwOworCisgICAgZW5kUHJpbnQoKTsKKyAg
ICAvLyBKb2IgaXMgbm93IHNlbnQgdG8gdGhlIHByaW50ZXIsIHdlIGNhbiBub3RpZnkgdGhlIFVJ
IHByb2Nlc3MgdGhhdCB3ZSBhcmUgZG9uZS4KKyAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKG1fY2FsbGJhY2tJRCkpOworICAgIG1fY2Fpcm9D
b250ZXh0ID0gMDsKK30KKwordm9pZCBXZWJQcmludE9wZXJhdGlvbkd0azo6cHJpbnQoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlLCBkb3VibGUgeERQSSwgZG91YmxlIHlEUEkpCit7CisgICAgQVNT
RVJUKG1fcHJpbnRDb250ZXh0KTsKKworICAgIG1feERQSSA9IHhEUEk7CisgICAgbV95RFBJID0g
eURQSTsKKyAgICBtX2NhaXJvQ29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNl
KSk7CisKKyAgICBQcmludFBhZ2VzRGF0YSogZGF0YSA9IG5ldyBQcmludFBhZ2VzRGF0YSh0aGlz
KTsKKyAgICBtX3ByaW50UGFnZXNJZGxlSWQgPSBnZGtfdGhyZWFkc19hZGRfaWRsZV9mdWxsKEdf
UFJJT1JJVFlfREVGQVVMVF9JRExFICsgMTAsIHByaW50UGFnZXNJZGxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgcHJpbnRQYWdlc0lk
bGVEb25lKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmYzYjBiYjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmgKQEAgLTAs
MCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdlYlByaW50T3BlcmF0aW9uR3RrX2gKKyNkZWZpbmUgV2ViUHJpbnRPcGVy
YXRpb25HdGtfaAorCisjaW5jbHVkZSAiUHJpbnRJbmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9S
ZWZQdHJDYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3R5cGVk
ZWYgc3RydWN0IF9HdGtQcmludFNldHRpbmdzIEd0a1ByaW50U2V0dGluZ3M7Cit0eXBlZGVmIHN0
cnVjdCBfR3RrUGFnZVNldHVwIEd0a1BhZ2VTZXR1cDsKK3R5cGVkZWYgc3RydWN0IF9HdGtQYWdl
UmFuZ2UgR3RrUGFnZVJhbmdlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQcmludENv
bnRleHQ7Cit9OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZTsKKworY2xh
c3MgV2ViUHJpbnRPcGVyYXRpb25HdGsgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJQcmludE9wZXJh
dGlvbkd0az4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlByaW50T3BlcmF0
aW9uR3RrPiBjcmVhdGUoV2ViUGFnZSosIGNvbnN0IFByaW50SW5mbyYpOworICAgIH5XZWJQcmlu
dE9wZXJhdGlvbkd0aygpOworCisgICAgR3RrUHJpbnRTZXR0aW5ncyogcHJpbnRTZXR0aW5ncygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRTZXR0aW5ncy5nZXQoKTsgfQorICAgIEd0a1BhZ2VTZXR1
cCogcGFnZVNldHVwKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU2V0dXAuZ2V0KCk7IH0KKyAgICB1
bnNpZ25lZCBpbnQgcHJpbnRQYWdlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRQYWdlczsgfQor
ICAgIGludCBwYWdlQ291bnQoKSBjb25zdDsKKyAgICBHdGtQYWdlUmFuZ2UqIHBhZ2VSYW5nZXMo
KSBjb25zdCB7IHJldHVybiBtX3BhZ2VSYW5nZXM7IH0KKyAgICBzaXplX3QgcGFnZVJhbmdlc0Nv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlUmFuZ2VzQ291bnQ7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBzdGFydFByaW50KFdlYkNvcmU6OlByaW50Q29udGV4dCosIHVpbnQ2NF90IGNhbGxiYWNr
SUQpID0gMDsKKworcHJvdGVjdGVkOgorICAgIFdlYlByaW50T3BlcmF0aW9uR3RrKFdlYlBhZ2Uq
LCBjb25zdCBQcmludEluZm8mKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydFBhZ2UoY2Fpcm9f
dCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kUGFnZShjYWlyb190KikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBlbmRQcmludCgpID0gMDsKKworICAgIHN0YXRpYyBnYm9vbGVhbiBwcmludFBh
Z2VzSWRsZShncG9pbnRlcik7CisgICAgc3RhdGljIHZvaWQgcHJpbnRQYWdlc0lkbGVEb25lKGdw
b2ludGVyKTsKKworICAgIHZvaWQgcHJpbnQoY2Fpcm9fc3VyZmFjZV90KiwgZG91YmxlIHhEUEks
IGRvdWJsZSB5RFBJKTsKKyAgICB2b2lkIHJlbmRlclBhZ2UoaW50IHBhZ2VOdW1iZXIpOworICAg
IHZvaWQgcm90YXRlUGFnZSgpOworICAgIHZvaWQgcHJpbnREb25lKCk7CisKKyAgICBXZWJQYWdl
KiBtX3dlYlBhZ2U7CisgICAgR1JlZlB0cjxHdGtQcmludFNldHRpbmdzPiBtX3ByaW50U2V0dGlu
Z3M7CisgICAgR1JlZlB0cjxHdGtQYWdlU2V0dXA+IG1fcGFnZVNldHVwOworICAgIFdlYkNvcmU6
OlByaW50Q29udGV4dCogbV9wcmludENvbnRleHQ7CisgICAgdWludDY0X3QgbV9jYWxsYmFja0lE
OworICAgIFJlZlB0cjxjYWlyb190PiBtX2NhaXJvQ29udGV4dDsKKyAgICBkb3VibGUgbV94RFBJ
OworICAgIGRvdWJsZSBtX3lEUEk7CisKKyAgICB1bnNpZ25lZCBpbnQgbV9wcmludFBhZ2VzSWRs
ZUlkOworICAgIHVuc2lnbmVkIGludCBtX3ByaW50UGFnZXM7CisgICAgR3RrUGFnZVJhbmdlKiBt
X3BhZ2VSYW5nZXM7CisgICAgc2l6ZV90IG1fcGFnZVJhbmdlc0NvdW50OworICAgIGJvb2wgbV9k
b1JvdGF0ZTsKK307CisKK30KKworI2VuZGlmIC8vIFdlYlByaW50T3BlcmF0aW9uR3RrX2gKZGlm
ZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBjZjM3NzA2Li44NWEz
ZjIxIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0xMDcx
LDYgKzEwNzEsMTYgQEAgaWYgdGVzdCAiJGVuYWJsZV93ZWJraXQyIiA9ICJ5ZXMiOyB0aGVuCiAg
ICBpZiB0ZXN0ICIkR1RLX0FQSV9WRVJTSU9OIiA9ICIyLjAiOyB0aGVuCiAgICAgICBBQ19NU0df
RVJST1IoW1dlYktpdDIgcmVxdWlyZXMgR1RLKyAzLngsIHVzZSAtLXdpdGgtZ3RrPTMuMF0pCiAg
ICBmaQorCisgICAjIENoZWNrIFVuaXggcHJpbnRpbmcKKyAgIFBLR19DSEVDS19NT0RVTEVTKEdU
S19VTklYX1BSSU5USU5HLCBndGsrLXVuaXgtcHJpbnQtMy4wLAorICAgICAgICAgICAgICAgICAg
ICAgW2hhdmVfZ3RrX3VuaXhfcHJpbnRpbmc9eWVzXSwKKyAgICAgICAgICAgICAgICAgICAgIFto
YXZlX2d0a191bml4X3ByaW50aW5nPW5vXSkKKyAgIEFDX1NVQlNUKEdUS19VTklYX1BSSU5USU5H
X0NGTEFHUykKKyAgIEFDX1NVQlNUKEdUS19VTklYX1BSSU5USU5HX0xJQlMpCisgICBpZiB0ZXN0
ICIkaGF2ZV9ndGtfdW5peF9wcmludGluZyIgPSAieWVzIjsgdGhlbgorICAgICAgIEFDX0RFRklO
RShbSEFWRV9HVEtfVU5JWF9QUklOVElOR10sIFsxXSwgW0RlZmluZSBpZiBHVEsrIFVOSVggUHJp
bnRpbmcgaXMgYXZhaWxhYmxlXSkKKyAgIGZpCiBmaQogCiAjIFBsdWdpbiBQcm9jZXNzCg==
</data>
<flag name="review"
          id="123839"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>