<?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>52343</bug_id>
          
          <creation_ts>2011-01-12 17:53:45 -0800</creation_ts>
          <short_desc>WebKit2: add support for drag and drop</short_desc>
          <delta_ts>2011-01-19 19:23:42 -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>All</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>sam</cc>
    
    <cc>tony</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>333466</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-12 17:53:45 -0800</bug_when>
    <thetext>Need to be able to drag to and from WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333476</commentid>
    <comment_count>1</comment_count>
      <attachid>78767</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-12 18:25:16 -0800</bug_when>
    <thetext>Created attachment 78767
Patch

Initial work to support WebKit as drop target.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333477</commentid>
    <comment_count>2</comment_count>
      <attachid>78768</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-12 18:26:03 -0800</bug_when>
    <thetext>Created attachment 78768
Patch2

Sorry wrong patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333479</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 18:28:13 -0800</bug_when>
    <thetext>Attachment 78767 did not pass style-queue:

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

Source/WebCore/platform/DragData.h:90:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/DragData.h:90:  The parameter name &quot;flags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/DragData.h:91:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/DragData.h:91:  The parameter name &quot;flags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
WebKit2/WebProcess/WebPage/WebPage.cpp:1258:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 5 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333480</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 18:29:09 -0800</bug_when>
    <thetext>Attachment 78768 did not pass style-queue:

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

Source/WebCore/platform/DragData.h:90:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/DragData.h:90:  The parameter name &quot;flags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/DragData.h:91:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/DragData.h:91:  The parameter name &quot;flags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
WebKit2/WebProcess/WebPage/WebPage.cpp:1258:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 5 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333481</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 18:29:23 -0800</bug_when>
    <thetext>Attachment 78768 did not build on chromium:
Build output: http://queues.webkit.org/results/7533003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333482</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 18:30:31 -0800</bug_when>
    <thetext>Attachment 78768 did not build on gtk:
Build output: http://queues.webkit.org/results/7601004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333489</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-12 18:37:16 -0800</bug_when>
    <thetext>Attachment 78768 did not build on qt:
Build output: http://queues.webkit.org/results/7617001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333496</commentid>
    <comment_count>8</comment_count>
      <attachid>78772</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-12 18:47:01 -0800</bug_when>
    <thetext>Created attachment 78772
Patch3

Fixing other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333498</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-12 18:48:08 -0800</bug_when>
    <thetext>Attachment 78772 did not pass style-queue:

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

Source/WebCore/platform/DragData.h:91:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/DragData.h:91:  The parameter name &quot;flags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/DragData.h:92:  The parameter name &quot;operation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/DragData.h:92:  The parameter name &quot;flags&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
WebKit2/WebProcess/WebPage/WebPage.cpp:1258:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 5 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333501</commentid>
    <comment_count>10</comment_count>
      <attachid>78772</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-12 18:52:58 -0800</bug_when>
    <thetext>Comment on attachment 78772
Patch3

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

It looks like the stylebot noted a number of valid issues plus I noticed a few other things below.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:602
&gt; +    m_currentDragOperation = (DragOperation)resultOperation;

Use c++ style cast.

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:1256
&gt; +    DragData dragData(dragStorageName, clientPosition, globalPosition, (DragOperation)draggingSourceOperationMask, (DragApplicationFlags)flags);

Use c++ style casts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333505</commentid>
    <comment_count>11</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-12 18:54:01 -0800</bug_when>
    <thetext>Attachment 78768 did not build on win:
Build output: http://queues.webkit.org/results/7610003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333510</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-12 19:11:42 -0800</bug_when>
    <thetext>Attachment 78772 did not build on qt:
Build output: http://queues.webkit.org/results/7566007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333511</commentid>
    <comment_count>13</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-12 19:15:42 -0800</bug_when>
    <thetext>Attachment 78772 did not build on win:
Build output: http://queues.webkit.org/results/7546005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333556</commentid>
    <comment_count>14</comment_count>
      <attachid>78772</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-01-12 22:28:44 -0800</bug_when>
    <thetext>Comment on attachment 78772
Patch3

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

&gt; Source/WebCore/page/DragController.h:55
&gt; +    enum DragControllerAction {
&gt; +        DragControllerActionEntered = 0,
&gt; +        DragControllerActionUpdated = 1,
&gt; +        DragControllerActionExited = 2,
&gt; +        DragControllerActionPerformDrag = 3
&gt; +    };

Should this enum be in WebKit?  It doesn&apos;t appear to be used in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333744</commentid>
    <comment_count>15</comment_count>
      <attachid>78772</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-13 09:40:12 -0800</bug_when>
    <thetext>Comment on attachment 78772
Patch3

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

Looks good.

Breaks the Qt and Windows builds, so please upload at least one more version of the patch that fixes those issues and some of the comments as well.

&gt;&gt; Source/WebCore/page/DragController.h:55

&gt; 
&gt; Should this enum be in WebKit?  It doesn&apos;t appear to be used in WebCore.

Good point. I think this should be in WebKit2.

&gt; Source/WebCore/page/mac/DragControllerMac.mm:58
&gt; -    if (!m_documentUnderMouse || (![[m_page-&gt;mainFrame()-&gt;view()-&gt;getOuterView() window] attachedSheet] 
&gt; -        &amp;&amp; [dragData-&gt;platformData() draggingSource] != m_page-&gt;mainFrame()-&gt;view()-&gt;getOuterView()))
&gt; +    if (!m_documentUnderMouse || (!(dragData-&gt;flags() &amp; DragApplicationHasAttachedSheet) 
&gt; +                                  &amp;&amp; !(dragData-&gt;flags() &amp; DragApplicationIsSource)))

Indentation here before followed WebKit style. We don&apos;t align things with parentheses since this requires reindenting when we rename things. Putting it all one one line might be OK. If the logic is to confusing like that, then an inline helper function is one way to make it clearer.

&gt; Source/WebCore/platform/DragData.h:77
&gt; +enum DragApplicationFlags {

We need to get our style straight for flags. If you look in RenderLayer.h at the PaintLayerFlag/PaintLayerFlags type you’ll see a style that I thought was our standard, with some benefits, but I see different styles in different parts of the code.

&gt; Source/WebCore/platform/DragData.h:91
&gt; +    DragData(DragDataRef, const IntPoint&amp; clientPosition, const IntPoint&amp; globalPosition, DragOperation operation, DragApplicationFlags flags);

No need for the argument names “operation” and “flags”.

&gt; Source/WebCore/platform/DragData.h:120


I am almost certain this needs to be RetainPtr&lt;NSPasteboard&gt;.

Another way to do it would be to have this be a WebCore::Pasteboard and keep the #ifdefs down a bit, but I suppose on other platforms pasteboard and drag don’t have much to do with each other. Platform #if code mixed into a platform-independent header or class is distasteful and harder to maintain and we should work hard to avoid it.

&gt; Source/WebCore/platform/DragData.h:121
&gt; +    DragApplicationFlags m_applicationFlags;

Seems we could just initialize this to none on platforms that are not passing any flags in. I don’t think this data member needs to be Mac-only.

&gt; WebKit2/UIProcess/WebPageProxy.h:79
&gt; +    class DragData;

Should be sorted alphabetically with other classes. We normally put the classes before the structs.

&gt; WebKit2/UIProcess/WebPageProxy.h:603
&gt; -
&gt; +    

Shouldn’t add this whitespace.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:163
&gt; +NSString *WebArchivePboardType = @&quot;Apple Web Archive pasteboard type&quot;;
&gt; +NSString *WebURLsWithTitlesPboardType = @&quot;WebURLsWithTitlesPboardType&quot;;
&gt; +NSString *WebURLPboardType = @&quot;public.url&quot;;
&gt; +NSString *WebURLNamePboardType = @&quot;public.url-name&quot;;

Since these are used only within this file, they should be marked static so we get internal linkage. Since they are constant they should be const. Like this:

    static NSString * const WebArchivePboardType = @&quot;...&quot;;

&gt; WebKit2/UIProcess/API/mac/WKView.mm:175
&gt; +    static NSArray *types = nil;
&gt; +    if (!types) {
&gt; +        types = [[NSArray alloc] initWithObjects:WebArchivePboardType, NSHTMLPboardType, NSFilenamesPboardType, NSTIFFPboardType, NSPDFPboardType,
&gt; +#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
&gt; +                 NSPICTPboardType,
&gt; +#endif
&gt; +                 NSURLPboardType, NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, NSColorPboardType, kUTTypePNG, nil];
&gt; +        CFRetain(types);
&gt; +    }

Since this is C++ code this can be done without the if statement. A separate method can be used to allocate the array, and called inside the initializer rather than initializing to nil.

We indent by 4, not by lining things up, so we don’t have to reindent if we rename.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:185
&gt; +                                       NSStringPboardType,
&gt; +                                       NSFilenamesPboardType,
&gt; +                                       nil];

Should just be indented by 4, not way in like this. Or could all go on one line.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:1028
&gt; +    return (DragApplicationFlags)flags;

Use a C++-style cast please.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:1035
&gt; +    DragData dragData(draggingInfo, client, global, (DragOperation)[draggingInfo draggingSourceOperationMask], [self applicationFlags:draggingInfo]);

This should also be a C++-style cast, possibly with a local variable if it makes the line too long.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:1045
&gt; +    DragData dragData(draggingInfo, client, global, (DragOperation)[draggingInfo draggingSourceOperationMask], [self applicationFlags:draggingInfo]);

Ditto.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:1054
&gt; +    DragData dragData(draggingInfo, client, global, (DragOperation)[draggingInfo draggingSourceOperationMask], [self applicationFlags:draggingInfo]);

Ditto.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:1068
&gt; +    DragData dragData(draggingInfo, client, global, (DragOperation)[draggingInfo draggingSourceOperationMask], [self applicationFlags:draggingInfo]);

And again.

Also, the code to create a DragData should be refactored into a helper function or helper method rather than being repeated three times.

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:1258
&gt; +    switch (action) {
&gt; +        case WebCore::DragControllerActionEntered:

WebKit coding style puts the case under the switch rather than indented.

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:1280
&gt; +        default:
&gt; +            break;

If possible we should omit the default case. All it does is quiet the warning that tells us to handle all the cases. Best style is to return from the cases, include cases for all values and then ASSERT_NOT_REACHED after the switch.

&gt; WebKit2/WebProcess/WebPage/WebPage.h:301
&gt; +    void performDragControllerAction(uint64_t, WebCore::IntPoint, WebCore::IntPoint, uint64_t, const WTF::String&amp;, uint32_t);

The arguments here need names. The types alone do not make their purpose clear.

&gt; WebKit2/WebProcess/WebPage/WebPage.messages.in:101
&gt;      CountStringMatches(WTF::String string, uint32_t findOptions, unsigned maxMatchCount)
&gt;  
&gt; +    # Drag and drop.
&gt; +    PerformDragControllerAction(uint64_t action, WebCore::IntPoint clientPosition, WebCore::IntPoint globalPosition, uint64_t draggingSourceOperationMask, WTF::String dragStorageName, uint32_t flags)
&gt;      # Popup menu.

Should have a blank line after the new function to match the format of the rest of the file.

&gt; WebKit/mac/WebView/WebView.mm:3780
&gt; +- (DragApplicationFlags)applicationFlags:(id &lt;NSDraggingInfo&gt;)draggingInfo
&gt; +{
&gt; +    uint32_t flags = 0;
&gt; +        flags = DragApplicationIsModal;
&gt; +    if ([[self window] attachedSheet])
&gt; +        flags |= DragApplicationHasAttachedSheet;
&gt; +    if ([draggingInfo draggingSource] == self)
&gt; +        flags |= DragApplicationIsSource;
&gt; +    if ([[NSApp currentEvent] modifierFlags] &amp; NSAlternateKeyMask)
&gt; +        flags |= DragApplicationIsCopyKeyDown;
&gt; +    return (DragApplicationFlags)flags;
&gt; +}

Maybe this function could be in WebCore instead.

&gt; WebKit/mac/WebView/WebView.mm:3787
&gt;      IntPoint client([draggingInfo draggingLocation]);
&gt;      IntPoint global(globalPoint([draggingInfo draggingLocation], [self window]));
&gt; -    DragData dragData(draggingInfo, client, global, (DragOperation)[draggingInfo draggingSourceOperationMask]);
&gt; +    DragData dragData(draggingInfo, client, global, (DragOperation)[draggingInfo draggingSourceOperationMask], [self applicationFlags:draggingInfo]);
&gt;      return core(self)-&gt;dragController()-&gt;dragEntered(&amp;dragData);

I think the same refactoring would be good here that I suggested in WebKit2 code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333878</commentid>
    <comment_count>16</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-13 12:32:40 -0800</bug_when>
    <thetext>I&apos;ve addressed all the comments except for the following.

&gt; &gt; Source/WebCore/platform/DragData.h:77
&gt; &gt; +enum DragApplicationFlags {
&gt; 
&gt; We need to get our style straight for flags. If you look in RenderLayer.h at the PaintLayerFlag/PaintLayerFlags type you’ll see a style that I thought was our standard, with some benefits, but I see different styles in different parts of the code.

I don&apos;t understand the difference between my flags and PaintLayerFlag (other than the plural).
Could you explain, please?
 
 
&gt; Also, the code to create a DragData should be refactored into a helper function or helper method rather than being repeated three times.

I&apos;ll do that when I finish the drag and drop support, this code is still subject to change.

&gt; &gt; WebKit/mac/WebView/WebView.mm:3780
&gt; &gt; +- (DragApplicationFlags)applicationFlags:(id &lt;NSDraggingInfo&gt;)draggingInfo
&gt; &gt; +{
&gt; &gt; +    uint32_t flags = 0;
&gt; &gt; +        flags = DragApplicationIsModal;
&gt; &gt; +    if ([[self window] attachedSheet])
&gt; &gt; +        flags |= DragApplicationHasAttachedSheet;
&gt; &gt; +    if ([draggingInfo draggingSource] == self)
&gt; &gt; +        flags |= DragApplicationIsSource;
&gt; &gt; +    if ([[NSApp currentEvent] modifierFlags] &amp; NSAlternateKeyMask)
&gt; &gt; +        flags |= DragApplicationIsCopyKeyDown;
&gt; &gt; +    return (DragApplicationFlags)flags;
&gt; &gt; +}
&gt; 
&gt; Maybe this function could be in WebCore instead.
&gt;
I don&apos;t want to have new code in WebCore that depends on having access to the application or the view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333890</commentid>
    <comment_count>17</comment_count>
      <attachid>78844</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-13 12:38:17 -0800</bug_when>
    <thetext>Created attachment 78844
Patch4

Addresses comments and build breakage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333898</commentid>
    <comment_count>18</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-13 13:00:51 -0800</bug_when>
    <thetext>Attachment 78844 did not build on win:
Build output: http://queues.webkit.org/results/7519018</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333908</commentid>
    <comment_count>19</comment_count>
      <attachid>78848</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-13 13:23:33 -0800</bug_when>
    <thetext>Created attachment 78848
Patch5

One more attempt to fix build break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333930</commentid>
    <comment_count>20</comment_count>
      <attachid>78848</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-13 14:20:07 -0800</bug_when>
    <thetext>Comment on attachment 78848
Patch5

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

The most serious mistake here is the missing return statement in performDragControllerAction.

&gt; Source/WebCore/page/mac/DragControllerMac.mm:57
&gt; +    if (!m_documentUnderMouse || (!(dragData-&gt;flags() &amp; DragApplicationHasAttachedSheet) &amp;&amp; !(dragData-&gt;flags() &amp; DragApplicationIsSource)))

It occurs to me this could also be written like this:

    if (!m_documentUnderMouse || !(dragData-&gt;flags() &amp; (DragApplicationHasAttachedSheet | DragApplicationIsSource)))

I like that a little better than what you have here.

&gt; Source/WebCore/platform/mac/DragDataMac.mm:48
&gt; +    m_pasteboard = [m_platformDragData draggingPasteboard];

Why not use construction syntax instead of assignment syntax for this?

&gt; Source/WebCore/platform/mac/DragDataMac.mm:51
&gt; +DragData::DragData(const String&amp; dragStorageName,  const IntPoint&amp; clientPosition, const IntPoint&amp; globalPosition,

Extra space here after the first comma.

&gt; Source/WebCore/platform/mac/DragDataMac.mm:59
&gt; +    m_pasteboard = [NSPasteboard pasteboardWithName:dragStorageName];

Why not use construction syntax instead of assignment syntax for this?

&gt; WebKit2/Shared/DragControllerActions.h:2
&gt; + * Copyright (C) 2010 Apple Inc. All rights reserved.

2011

&gt; WebKit2/Shared/DragControllerActions.h:27
&gt; +#ifndef DragControllerActions_h
&gt; +#define DragControllerActions_h

I think normally we name the file after the enum, rather than including an “s”.

&gt; WebKit2/Shared/DragControllerActions.h:35
&gt; +    DragControllerActionEntered = 0,
&gt; +    DragControllerActionUpdated = 1,
&gt; +    DragControllerActionExited = 2,
&gt; +    DragControllerActionPerformDrag = 3

I suggest we let the compiler generate the values rather than specifying them.

&gt; WebKit2/UIProcess/WebPageProxy.cpp:602
&gt; +    m_currentDragOperation = (DragOperation)resultOperation;

Please use a C++-style cast.

&gt; WebKit2/UIProcess/WebPageProxy.h:277
&gt; +    void didPerformDragControllerAction(uint64_t resultOperation);

64-bit seems a bit overkill for 2 bits. Might check with Anders what the best practice is.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:172
&gt; +    NSArray *URLTypes = [NSArray arrayWithObjects: WebURLsWithTitlesPboardType, NSURLPboardType, WebURLPboardType,  WebURLNamePboardType, NSStringPboardType, NSFilenamesPboardType, nil];

Extraneous space after colon here.

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:1260
&gt; +        send(Messages::WebPageProxy::DidPerformDragControllerAction(m_page-&gt;dragController()-&gt;dragEntered(&amp;dragData)));

Why no null check for m_page here?

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:1265
&gt; +        if (!m_page)
&gt; +            send(Messages::WebPageProxy::DidPerformDragControllerAction(DragOperationNone));

Need a return here inside this if statement; otherwise we null-deref on the next line.

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:1277
&gt; +        m_page-&gt;dragController()-&gt;performDrag(&amp;dragData);

Why no null check for m_page here?

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:1281
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

For the record, this is not what I suggested. My suggestion is to leave out the default, end individual cases with return, and put ASSERT_NOT_REACHED() after the switch statement. This gets both a compile time check that all enums are covered because the compiler will warn if an enum is not covered, and a runtime check, outside the switch statement.

But my style would only work if the type of action was the enum type, not an integer type.

&gt; WebKit/mac/WebView/WebView.mm:3779
&gt; +    return (DragApplicationFlags)flags;

C++-style cast please</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334035</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-13 16:54:00 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/75743 might have broken GTK Linux 64-bit Debug
The following tests are not passing:
editing/input/page-up-down-scrolls.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336329</commentid>
    <comment_count>22</comment_count>
      <attachid>79388</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-18 21:26:24 -0800</bug_when>
    <thetext>Created attachment 79388
Patch6

Final drag and drop implementation on the Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336568</commentid>
    <comment_count>23</comment_count>
      <attachid>79432</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-19 09:08:01 -0800</bug_when>
    <thetext>Created attachment 79432
Patch7

Re-posted patch from the root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336577</commentid>
    <comment_count>24</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-19 09:30:32 -0800</bug_when>
    <thetext>Attachment 79432 did not build on qt:
Build output: http://queues.webkit.org/results/7551210</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336582</commentid>
    <comment_count>25</comment_count>
      <attachid>79437</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-19 09:47:54 -0800</bug_when>
    <thetext>Created attachment 79437
Patch8

Fixes qt build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336585</commentid>
    <comment_count>26</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-19 09:52:27 -0800</bug_when>
    <thetext>Attachment 79432 did not build on win:
Build output: http://queues.webkit.org/results/7501199</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336598</commentid>
    <comment_count>27</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-19 10:07:18 -0800</bug_when>
    <thetext>Attachment 79437 did not build on qt:
Build output: http://queues.webkit.org/results/7505186</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336602</commentid>
    <comment_count>28</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-19 10:10:50 -0800</bug_when>
    <thetext>Attachment 79437 did not build on win:
Build output: http://queues.webkit.org/results/7534224</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336660</commentid>
    <comment_count>29</comment_count>
      <attachid>79454</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-19 11:18:55 -0800</bug_when>
    <thetext>Created attachment 79454
Patch9

I found a problem with the previous patch and fixed it.
Also fixed other platforms (hopefully)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336763</commentid>
    <comment_count>30</comment_count>
      <attachid>79454</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-19 13:51:52 -0800</bug_when>
    <thetext>Comment on attachment 79454
Patch9

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

review- because of the memory leak in PageClientImpl::setDragImage.

Otherwise seems all right.

&gt; Source/WebKit2/Shared/mac/PasteboardTypes.h:34
&gt; +extern NSString * const WebArchivePboardType;
&gt; +extern NSString * const WebURLsWithTitlesPboardType;
&gt; +extern NSString * const WebURLPboardType;
&gt; +extern NSString * const WebURLNamePboardType;

I think it would be better to export functions for these, as you have done with the arrays below.

&gt; Source/WebKit2/Shared/mac/PasteboardTypes.h:38
&gt; +public:
&gt; +    

There’s an extra blank line here.

&gt; Source/WebKit2/Shared/mac/PasteboardTypes.h:42
&gt; +    static NSArray* forEditing();
&gt; +    static NSArray* forURL();
&gt; +    static NSArray* forImages();
&gt; +    static NSArray* forImagesWithArchive();

The space goes before the * for Objective-C types like NSArray.

&gt; Source/WebKit2/Shared/mac/PasteboardTypes.mm:2
&gt; + * Copyright (C) 2010 Apple Inc. All rights reserved.

2011

&gt; Source/WebKit2/Shared/mac/PasteboardTypes.mm:42
&gt; +    static RetainPtr&lt;NSArray&gt; types = [NSArray arrayWithObjects:WebArchivePboardType, NSHTMLPboardType, NSFilenamesPboardType, NSTIFFPboardType, NSPDFPboardType,
&gt; +#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
&gt; +        NSPICTPboardType,
&gt; +#endif
&gt; +        NSURLPboardType, NSRTFDPboardType, NSRTFPboardType, NSStringPboardType, NSColorPboardType, kUTTypePNG, nil];

Using a RetainPtr in a global variable like this will create a static destructor that will run at process exit time. There are other idioms that will not do this, and so are preferred. For example, putting something into a RetainPtr but then using leakPtr and a raw pointer for the global. Or using CFRetain on the object, but that will probably require a typecast as well.

&gt; Source/WebKit2/UIProcess/PageClient.h:104
&gt;      virtual void interceptKeyEvent(const NativeWebKeyboardEvent&amp;, Vector&lt;WebCore::KeypressCommand&gt;&amp;, uint32_t, uint32_t, Vector&lt;WebCore::CompositionUnderline&gt;&amp;) = 0;
&gt; +    virtual void setDragImage(const WebCore::IntPoint&amp;, const WebCore::IntSize&amp;, WTF::PassRefPtr&lt;ShareableBitmap&gt;, bool) = 0;
&gt; +    virtual void didEndDrag(const WebCore::IntPoint&amp;) = 0;

No need for WTF:: in WTF::PassRefPtr.

The meanings of these arguments are not clear from the types alone, so the argument names should be included. Same for the interceptKeyEvent function above, although not for the event itself.

&gt; Source/WebKit2/UIProcess/WebPageProxy.cpp:626
&gt; +    m_pageClient-&gt;setDragImage(clientPosition, imageSize, dragImage, isLinkDrag);

Should be dragImage.release().

&gt; Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm:284
&gt; +    NSImage* dragNSImage = [[[NSImage alloc] initWithCGImage:CGBitmapContextCreateImage(dragImage-&gt;createGraphicsContext()-&gt;platformContext()) size:imageSize] autorelease];

This leaks both the CGBitmapContext, and the NSImage. Both need to be adopted into smart pointers so they won’t leak.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:760
&gt; +- (void)_mouseHandler:(NSEvent *)theEvent

You should use the argument name “event” rather than “theEvent” in new code.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1065
&gt; +    // Once the dragging machinery kicks in, we no longer get mouse drags or the up event.
&gt; +    // WebCore expects to get balanced down/up&apos;s, so we must fake up a mouseup.

I’m not sure we need a fake NSEvent in WebKit2. In WebKit1 we did, because the NSEvent was visible to WebCore, but in WebKit2 that is not the case. OK to do this for now, but it’s almost certainly not needed.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1082
&gt; +   _data-&gt;_ignoringMouseDraggedEvents = YES;

This line is not indented correctly.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:2
&gt; + * Copyright (C) 2010 Apple Inc. All rights reserved.

2011

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:42
&gt; +#import &lt;WebKit/WebKitNSStringExtras.h&gt;
&gt; +#import &lt;WebKit/WebNSURLExtras.h&gt;

Do we really need to use these WebKit methods in WebKit2? I think we’d like to avoid that when possible, but I suppose it’s not practical.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm:74
&gt; +    FontPlatformData f(font, [font pointSize]);
&gt; +    currentRenderer = Font(f, ![[NSGraphicsContext currentContext] isDrawingToScreen]);

I assume this code was copied from somewhere else. &quot;f&quot; is a very poor name for this local variable, though. I’m not even sure the local variable is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336769</commentid>
    <comment_count>31</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-19 14:00:14 -0800</bug_when>
    <thetext>Thanks for all the feedback, I will address all the comments and post a new patch.
I was unsure about the need of generating an additional mouseUp.
I will try without it, and if it works correctly, I&apos;ll remove all the unnecessary code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336819</commentid>
    <comment_count>32</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-19 14:40:37 -0800</bug_when>
    <thetext>&gt; Do we really need to use these WebKit methods in WebKit2? I think we’d like to avoid that when possible, but I suppose it’s not practical.

I plan on removing these dependencies in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336930</commentid>
    <comment_count>33</comment_count>
      <attachid>79521</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-19 16:30:26 -0800</bug_when>
    <thetext>Created attachment 79521
Patch10

New patch that addresses memory leaks and all the other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336973</commentid>
    <comment_count>34</comment_count>
      <attachid>79521</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-19 17:31:58 -0800</bug_when>
    <thetext>Comment on attachment 79521
Patch10

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

&gt; Source/WebKit2/Shared/mac/PasteboardTypes.mm:43
&gt; +    CFRetain(types);

This will CFRetain every time the function is called, not just the first time. So it will work, but its performance will be a little slow and there is some small risk of overflow.

You could do something simple like this:

    static inline NSArray *retain(NSArray *array)
    {
        CFRetain(array);
        return array;
    }

    ...

    static NSArray *types = retain([NSArray ...]);

That would work better.

&gt; Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm:285
&gt; +    RetainPtr&lt;NSImage&gt; dragNSImage = [[[NSImage alloc] initWithCGImage:CGBitmapContextCreateImage(graphicsContext-&gt;platformContext()) size:imageSize] autorelease];

Instead of doing autorelease you should do an adopt here.

    RetainPtr&lt;NSImage&gt; dragNSImage(AdoptNS, [[NSImage alloc] initWithCGImage:CGBitmapContextCreateImage(graphicsContext-&gt;platformContext()) size:imageSize]);

The code is already correct, with no leak, but the adopt version is more efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336999</commentid>
    <comment_count>35</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-19 18:00:02 -0800</bug_when>
    <thetext>Made both changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337003</commentid>
    <comment_count>36</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-19 18:03:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76186. The Mac implementation is now complete.
https://bugs.webkit.org/show_bug.cgi?id=52775 now tracks the Windows work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337048</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 19:14:04 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76186 might have broken SnowLeopard Intel Release (Tests)
The following tests are not passing:
fast/forms/input-text-scroll-left-on-blur.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337059</commentid>
    <comment_count>38</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-01-19 19:23:42 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; http://trac.webkit.org/changeset/76186 might have broken SnowLeopard Intel Release (Tests)
&gt; The following tests are not passing:
&gt; fast/forms/input-text-scroll-left-on-blur.html

I don&apos;t see this failing on my machine.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78767</attachid>
            <date>2011-01-12 18:25:16 -0800</date>
            <delta_ts>2011-01-12 18:26:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>drop.txt</filename>
            <type>text/plain</type>
            <size>40858</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDEtMTIgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBBZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJv
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGRy
b3BwaW5nIGNvbnRlbnQKKyAgICAgICAgaW4gV2ViS2l0IG9uIHRoZSBNYWMuIFRoZSBEcmFnRGF0
YSBjbGFzcyBoYXMgYmVlbiBleHRlbmRlZCB0byBwcm92aWRlCisgICAgICAgIGFkZGl0aW9uYWwg
Y29udGV4dCBmcm9tIHRoZSBhcHBsaWNhdGlvbiAoa2V5Ym9hcmQgc3RhdGUsIG1vZGFsIHdpbmRv
d3MsIGV0Yy4pCisgICAgICAgIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gb2YgdGhlIGRyYWcgcGFz
dGVib2FyZCBiZWluZyB1c2VkLgorICAgICAgICBUaGUgc3VwcG9ydCBmb3IgV2ViS2l0IGFzIGRy
YWcgc291cmNlIHdpbGwgYmUgYWRkZWQgd2l0aCBhIHNlcGFyYXRlIHBhdGNoLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZSk6IEFkZGVkIERyYWdE
YXRhIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjp0cnlEb2N1
bWVudERyYWcpOiBNb2RpZmllZCBjYWxsIHRvIGRyYWdJc01vdmUuCisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6IFNhbWUgYXMgYWJvdmUuCisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5oOiBBZGRlZCBwYXJhbWV0ZXIgdG8gaXNDb3B5S2V5
RG93bi4KKyAgICAgICAgKiBwYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbToKKyAgICAgICAg
VGhlIGZvbGxvd2luZyBtZXRob2RzIGhhdmUgYmVlbiBtb2RpZmllZCB0byB1c2UgdGhlIGluZm9y
bWF0aW9uIHN0b3JlZAorICAgICAgICBpbiB0aGUgRHJhZ0RhdGEgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vRHJh
Z0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpmbGFncyk6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6
OkRyYWdEYXRhKTogQWRkZWQgY29uc3RydWN0b3IgdGhhdCByZWNlaXZlcyB0aGUgbmFtZSBvZiB0
aGUgcGFzdGVib2FyZCB0byB1c2UuCisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21h
cnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0ZpbGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYWdEYXRhOjphc0ZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxh
aW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6CisgICAgICAgIEFsbCB0aGUgZm9sbG93aW5n
IGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCB0byBhZGQgdGhlIERyYWdEYXRhCisgICAgICAgIHBh
cmFtZXRlciB0byBpc0NvcHlLZXlEb3duLiBJIHBsYW4gdG8gaW1wcm92ZSB0aGlzIGluIHRoZSBm
dXR1cmUKKyAgICAgICAgYW5kIG1ha2UgaXNDb3B5S2V5RG93biBub3QgcGxhdGZvcm0gc3BlY2lm
aWMuCisgICAgICAgICogcGFnZS9hbmRyb2lkL0RyYWdDb250cm9sbGVyQW5kcm9pZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAg
ICogcGFnZS9icmV3L0RyYWdDb250cm9sbGVyQnJldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9E
cmFnQ29udHJvbGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjppc0NvcHlLZXlEb3duKToKKyAgICAgICAgKiBwYWdlL2VmbC9EcmFnQ29udHJvbGxlckVm
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6
CisgICAgICAgICogcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24pOgorICAgICAgICAqIHBhZ2UvaGFp
a3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJv
bGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9tYWMvRHJhZ0NvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAg
ICAgICogcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToKKyAgICAgICAgKiBwYWdlL3dpbi9EcmFnQ29u
dHJvbGxlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5
S2V5RG93bik6CisgICAgICAgICogcGFnZS93eC9EcmFnQ29udHJvbGxlcld4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToKKwogMjAxMS0wMS0x
MiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFub3RoZXIgYnVpbGQg
Zml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEzMjgsNyArMTMyOCw4
IEBAIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIxMWRyYWdVcGRhdGUKIF9fWk43V2ViQ29y
ZTE0RHJhZ0NvbnRyb2xsZXIxMXBlcmZvcm1EcmFnRVBOU184RHJhZ0RhdGFFCiBfX1pON1dlYkNv
cmUxNERyYWdDb250cm9sbGVyMTRwbGFjZURyYWdDYXJldEVSS05TXzhJbnRQb2ludEUKIF9fWk43
V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXI5ZHJhZ0VuZGVkRXYKLV9fWk43V2ViQ29yZThEcmFnRGF0
YUMxRVAxMW9iamNfb2JqZWN0UktOU184SW50UG9pbnRFUzVfTlNfMTNEcmFnT3BlcmF0aW9uRQor
X19aTjdXZWJDb3JlOERyYWdEYXRhQzFFUDExb2JqY19vYmplY3RSS05TXzhJbnRQb2ludEVTNV9O
U18xM0RyYWdPcGVyYXRpb25FTlNfMjBEcmFnQXBwbGljYXRpb25GbGFnc0UKK19fWk43V2ViQ29y
ZThEcmFnRGF0YUMxRVJLTjNXVEY2U3RyaW5nRVJLTlNfOEludFBvaW50RVM3X05TXzEzRHJhZ09w
ZXJhdGlvbkVOU18yMERyYWdBcHBsaWNhdGlvbkZsYWdzRQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
R0VPTE9DQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDkgKzE0MSw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGRvY3UKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBEcmFnQ29udHJv
bGxlcjo6ZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24pCitib29sIERy
YWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiwg
RHJhZ0RhdGEqIGRyYWdEYXRhKQogewotICAgIHJldHVybiBtX2RvY3VtZW50VW5kZXJNb3VzZSA9
PSBtX2RyYWdJbml0aWF0b3IgJiYgc2VsZWN0aW9uLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFp
c0NvcHlLZXlEb3duKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnRVbmRlck1vdXNlID09IG1fZHJh
Z0luaXRpYXRvciAmJiBzZWxlY3Rpb24tPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIWlzQ29weUtl
eURvd24oZHJhZ0RhdGEpOwogfQogCiAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgcG9vcmx5IG5h
bWVkLiAgV2UncmUganVzdCBjbGVhcmluZyB0aGUgc2VsZWN0aW9uIGZyb20gdGhlIGRvY3VtZW50
IHRoaXMgZHJhZyBpcyBleGl0aW5nLgpAQCAtMzM1LDcgKzMzNSw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmEKICAgICAgICAgfQogCiAgICAgICAgIEZyYW1lKiBp
bm5lckZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICAgICAgb3BlcmF0
aW9uID0gZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5zZWxlY3Rpb24oKSkgPyBEcmFnT3BlcmF0aW9u
TW92ZSA6IERyYWdPcGVyYXRpb25Db3B5OworICAgICAgICBvcGVyYXRpb24gPSBkcmFnSXNNb3Zl
KGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSkgPyBEcmFnT3BlcmF0aW9uTW92ZSA6
IERyYWdPcGVyYXRpb25Db3B5OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8g
SWYgd2UncmUgbm90IG92ZXIgYW4gZWRpdGFibGUgcmVnaW9uLCBtYWtlIHN1cmUgd2UncmUgY2xl
YXJpbmcgYW55IHByaW9yIGRyYWcgY3Vyc29yLgpAQCAtNDQ5LDcgKzQ0OSw3IEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHJhbmdlLT5v
d25lckRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAgICAgY2FjaGVkUmVzb3Vy
Y2VMb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXModHJ1ZSk7Ci0gICAgaWYgKGRyYWdJc01v
dmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpKSB7CisgICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCks
IGRyYWdEYXRhKSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAg
ICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0Rh
dGEsIGlubmVyRnJhbWUsIHJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7CiAgICAgICAgIGlm
ICghZnJhZ21lbnQgfHwgIWlubmVyRnJhbWUtPmVkaXRvcigpLT5zaG91bGRJbnNlcnRGcmFnbWVu
dChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQpKSB7CkBAIC00NTgs
NyArNDU4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAg
ICAgICB9CiAKICAgICAgICAgbV9jbGllbnQtPndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKLSAgICAgICAgaWYgKGRy
YWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChkcmFnSXNN
b3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSkpIHsKICAgICAgICAgICAgIC8v
IE5TVGV4dFZpZXcgYmVoYXZpb3IgaXMgdG8gYWx3YXlzIHNtYXJ0IGRlbGV0ZSBvbiBtb3Zpbmcg
YSBzZWxlY3Rpb24sCiAgICAgICAgICAgICAvLyBidXQgb25seSB0byBzbWFydCBpbnNlcnQgaWYg
dGhlIHNlbGVjdGlvbiBncmFudWxhcml0eSBpcyB3b3JkIGdyYW51bGFyaXR5LgogICAgICAgICAg
ICAgYm9vbCBzbWFydERlbGV0ZSA9IGlubmVyRnJhbWUtPmVkaXRvcigpLT5zbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgUmFuZ2U7CiAgICAgY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKICAgICAKKyAgICBl
bnVtIERyYWdDb250cm9sbGVyQWN0aW9uIHsKKyAgICAgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25F
bnRlcmVkID0gMCwKKyAgICAgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVkID0gMSwKKyAg
ICAgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FeGl0ZWQgPSAyLAorICAgICAgICBEcmFnQ29udHJv
bGxlckFjdGlvblBlcmZvcm1EcmFnID0gMworICAgIH07CisgICAgCiAgICAgY2xhc3MgRHJhZ0Nv
bnRyb2xsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRHJh
Z0NvbnRyb2xsZXIoUGFnZSosIERyYWdDbGllbnQqKTsKQEAgLTk5LDggKzEwNiw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCB0cnlESFRNTERyYWcoRHJhZ0RhdGEqLCBEcmFn
T3BlcmF0aW9uJik7CiAgICAgICAgIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbihEcmFnRGF0
YSopOwogICAgICAgICB2b2lkIGNhbmNlbERyYWcoKTsKLSAgICAgICAgYm9vbCBkcmFnSXNNb3Zl
KFNlbGVjdGlvbkNvbnRyb2xsZXIqKTsKLSAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKCk7Cisg
ICAgICAgIGJvb2wgZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiwgRHJhZ0RhdGEqKTsK
KyAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKERyYWdEYXRhKik7CiAKICAgICAgICAgdm9pZCBt
b3VzZU1vdmVkSW50b0RvY3VtZW50KERvY3VtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3BwCShyZXZp
c2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxl
ckFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCitib29s
IERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJhZ0NvbnRyb2xsZXJC
cmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJhZ0NvbnRy
b2xsZXJCcmV3LmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Jy
ZXcvRHJhZ0NvbnRyb2xsZXJCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiBjb25zdCBmbG9hdCBE
cmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAogCi1ib29sIERyYWdDb250
cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURv
d24oRHJhZ0RhdGEqKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNw
cAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0RyYWdD
b250cm9sbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIERy
YWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXQKICAgICByZXR1cm4gZHJhZ0Rh
dGEtPmNvbnRhaW5zVVJMKDApICYmICFtX2RpZEluaXRpYXRlRHJhZyA/IERyYWdPcGVyYXRpb25D
b3B5IDogRHJhZ09wZXJhdGlvbk5vbmU7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29w
eUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSop
CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBPUyBzcGVjaWZpYy4gIERlbGVn
YXRlIHRvIHRoZSBlbWJlZGRlciBpbnN0ZWFkLgogI2lmIE9TKFdJTkRPV1MpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJFZmwuY3BwCShyZXZpc2lvbiA3
NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0RyYWdDb250cm9sbGVyRWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6
OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VB
bHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKK2Jv
b2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oRHJhZ0RhdGEqKQogewogICAgIHJldHVy
biBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVy
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29udHJv
bGxlckd0ay5jcHAJKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ndGsv
RHJhZ0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGNv
bnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b20KIAogY29uc3QgZmxvYXQgRHJh
Z0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7CiAKLWJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmlzQ29weUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihE
cmFnRGF0YSopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9oYWlrdS9EcmFnQ29udHJvbGxlckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwCShyZXZpc2lvbiA3NTY2
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY29uc3QgaW50IERyYWdDb250cm9sbGVy
OjpEcmFnSWNvbkJvdHRvbQogY29uc3QgZmxvYXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFs
cGhhID0gMC43NWY7CiAKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCiti
b29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICBpZiAo
bW9kaWZpZXJzKCkgJiBCX0NPTU1BTkRfS0VZKQogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxOSArNDIsMjAgQEAgY29uc3QgaW50IERyYWdDb250cm9s
bGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0lt
YWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigp
Citib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKiBkcmFnRGF0YSkK
IHsKLSAgICByZXR1cm4gW1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdICYgTlNB
bHRlcm5hdGVLZXlNYXNrOworICAgIHJldHVybiBkcmFnRGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBs
aWNhdGlvbklzQ29weUtleURvd247CiB9CiAgICAgCiBEcmFnT3BlcmF0aW9uIERyYWdDb250cm9s
bGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKIHsKICAgICBBU1NFUlQoZHJh
Z0RhdGEpOwotICAgIGlmIChbTlNBcHAgbW9kYWxXaW5kb3ddIHx8ICFkcmFnRGF0YS0+Y29udGFp
bnNVUkwobV9wYWdlLT5tYWluRnJhbWUoKSkpCisKKyAgICBpZiAoKGRyYWdEYXRhLT5mbGFncygp
ICYgRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbCkgfHwgIWRyYWdEYXRhLT5jb250YWluc1VSTChtX3Bh
Z2UtPm1haW5GcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwogCi0g
ICAgaWYgKCFtX2RvY3VtZW50VW5kZXJNb3VzZSB8fCAoIVtbbV9wYWdlLT5tYWluRnJhbWUoKS0+
dmlldygpLT5nZXRPdXRlclZpZXcoKSB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdIAotICAgICAgICAm
JiBbZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpIGRyYWdnaW5nU291cmNlXSAhPSBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPmdldE91dGVyVmlldygpKSkKKyAgICBpZiAoIW1fZG9jdW1lbnRV
bmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLT5mbGFncygpICYgRHJhZ0FwcGxpY2F0aW9uSGFzQXR0
YWNoZWRTaGVldCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShkcmFn
RGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzU291cmNlKSkpCiAgICAgICAgIHJldHVy
biBEcmFnT3BlcmF0aW9uQ29weTsKIAogICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRHJhZ0NvbnRyb2xsZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0LmNwcAkocmV2aXNp
b24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0RyYWdDb250cm9sbGVyUXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNvbnN0IGludCBEcmFnQ29udHJvbGxl
cjo6RHJhZ0ljb25Cb3R0b20KIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VB
bHBoYSA9IDAuNzVmOwogCiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oKQor
Ym9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xs
ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0RyYWdDb250
cm9sbGVyV2luLmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dp
bi9EcmFnQ29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAg
RHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdAogICAgIHJldHVybiBkcmFn
RGF0YS0+Y29udGFpbnNVUkwoMCkgJiYgIW1fZGlkSW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlv
bkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXND
b3B5S2V5RG93bigpCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRh
KikKIHsKICAgICByZXR1cm4gOjpHZXRBc3luY0tleVN0YXRlKFZLX0NPTlRST0wpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS93eC9EcmFnQ29udHJvbGxlcld4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0RyYWdDb250cm9sbGVyV3guY3BwCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRHJhZ0NvbnRyb2xsZXJXeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY29uc3QgaW50IERyYWdDb250cm9sbGVy
OjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdl
QWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCiti
b29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0RhdGEuaAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9E
cmFnRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCwxMCBAQAogI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxBcHBLaXQvTlNEcmFnZ2luZy5oPgogdHlw
ZWRlZiBpZCA8TlNEcmFnZ2luZ0luZm8+IERyYWdEYXRhUmVmOworQGNsYXNzIE5TUGFzdGVib2Fy
ZDsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIERyYWdEYXRhUmVmOworY2xhc3MgTlNQYXN0ZWJvYXJk
OwogI2VuZGlmCiAjZWxpZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFDRQpAQCAtNzIs
MTIgKzc0LDI2IEBAIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBLVVJMOwogY2xhc3Mg
UmFuZ2U7CiAKK2VudW0gRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgeworICAgIERyYWdBcHBsaWNhdGlv
bklzTW9kYWwgPSAxLAorICAgIERyYWdBcHBsaWNhdGlvbklzU291cmNlID0gMiwKKyAgICBEcmFn
QXBwbGljYXRpb25IYXNBdHRhY2hlZFNoZWV0ID0gNCwKKyAgICBEcmFnQXBwbGljYXRpb25Jc0Nv
cHlLZXlEb3duID0gOAorfTsKKyAgICAKIGNsYXNzIERyYWdEYXRhIHsKIHB1YmxpYzoKICAgICBl
bnVtIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSB7IERvTm90Q29udmVydEZpbGVuYW1lcywgQ29u
dmVydEZpbGVuYW1lcyB9OwogCiAgICAgLy8gY2xpZW50UG9zaXRpb24gaXMgdGFrZW4gdG8gYmUg
dGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFnIGV2ZW50IHdpdGhpbiB0aGUgdGFyZ2V0IHdpbmRvdywg
d2l0aCAoMCwwKSBhdCB0aGUgdG9wIGxlZnQKKyNpZiBQTEFURk9STShNQUMpCisgICAgRHJhZ0Rh
dGEoRHJhZ0RhdGFSZWYsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiwgRHJhZ0FwcGxp
Y2F0aW9uRmxhZ3MgZmxhZ3MpOworICAgIERyYWdEYXRhKGNvbnN0IFN0cmluZyYgZHJhZ1N0b3Jh
Z2VOYW1lLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBn
bG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24sIERyYWdBcHBsaWNhdGlvbkZs
YWdzIGZsYWdzKTsKKyAgICBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncygpIHsgcmV0dXJuIG1f
YXBwbGljYXRpb25GbGFnczsgfQorI2Vsc2UKICAgICBEcmFnRGF0YShEcmFnRGF0YVJlZiwgY29u
c3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRp
b24sIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uKTsKKyAgICBEcmFnQXBwbGljYXRpb25GbGFncyBm
bGFncygpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogICAgIGNvbnN0IEludFBvaW50JiBjbGllbnRQ
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50UG9zaXRpb247IH0KICAgICBjb25zdCBJ
bnRQb2ludCYgZ2xvYmFsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9u
OyB9CiAgICAgRHJhZ0RhdGFSZWYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0
Zm9ybURyYWdEYXRhOyB9CkBAIC05OSw2ICsxMTUsMTAgQEAgcHJpdmF0ZToKICAgICBJbnRQb2lu
dCBtX2dsb2JhbFBvc2l0aW9uOwogICAgIERyYWdEYXRhUmVmIG1fcGxhdGZvcm1EcmFnRGF0YTsK
ICAgICBEcmFnT3BlcmF0aW9uIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrOworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBOU1Bhc3RlYm9hcmQqIG1fcGFzdGVib2FyZDsKKyAgICBEcmFnQXBw
bGljYXRpb25GbGFncyBtX2FwcGxpY2F0aW9uRmxhZ3M7CisjZW5kaWYKIH07CiAgICAgCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzgsMzQgKzM4LDQ3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IERyYWdEYXRhOjpEcmFnRGF0YShEcmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJbnRQb2ludCYgY2xp
ZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgCi0gICAgRHJhZ09w
ZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrKQorICAgIERyYWdPcGVyYXRpb24gc291cmNlT3Bl
cmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgOiBtX2NsaWVudFBv
c2l0aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3Np
dGlvbikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YShkYXRhKQogICAgICwgbV9kcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKKyAgICAsIG1fYXBwbGljYXRp
b25GbGFncyhmbGFncykKIHsKKyAgICBtX3Bhc3RlYm9hcmQgPSBbbV9wbGF0Zm9ybURyYWdEYXRh
IGRyYWdnaW5nUGFzdGVib2FyZF07Cit9CisKK0RyYWdEYXRhOjpEcmFnRGF0YShjb25zdCBTdHJp
bmcmIGRyYWdTdG9yYWdlTmFtZSwgIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29u
c3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLAorICAgIERyYWdPcGVyYXRpb24gc291cmNlT3Bl
cmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MpCisgICAgOiBtX2NsaWVudFBv
c2l0aW9uKGNsaWVudFBvc2l0aW9uKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3Np
dGlvbikKKyAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YSgwKQorICAgICwgbV9kcmFnZ2luZ1NvdXJj
ZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKKyAgICAsIG1fYXBwbGljYXRpb25G
bGFncyhmbGFncykKK3sKKyAgICBtX3Bhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9h
cmRXaXRoTmFtZTpkcmFnU3RvcmFnZU5hbWVdOwogfQogICAgIAogYm9vbCBEcmFnRGF0YTo6Y2Fu
U21hcnRSZXBsYWNlKCkgY29uc3QKIHsKICAgICAvL05lZWQgdG8gY2FsbCB0aGlzIHNvIHRoYXQg
dGhlIHZhcmlvdXMgUGFzdGVib2FyZCB0eXBlIHN0cmluZ3MgYXJlIGludGlhbGlzZWQKICAgICBQ
YXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpOwotICAgIHJldHVybiBbW1ttX3BsYXRmb3Jt
RHJhZ0RhdGEgZHJhZ2dpbmdQYXN0ZWJvYXJkXSB0eXBlc10gY29udGFpbnNPYmplY3Q6V2ViU21h
cnRQYXN0ZVBib2FyZFR5cGVdOworICAgIHJldHVybiBbW21fcGFzdGVib2FyZCB0eXBlc10gY29u
dGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwogfQogCiBib29sIERyYWdEYXRh
Ojpjb250YWluc0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW1tbbV9wbGF0Zm9ybURyYWdE
YXRhIGRyYWdnaW5nUGFzdGVib2FyZF0gdHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQ29sb3JQYm9h
cmRUeXBlXTsKKyAgICByZXR1cm4gW1ttX3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0
Ok5TQ29sb3JQYm9hcmRUeXBlXTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFtbW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3Rl
Ym9hcmRdIHR5cGVzXSBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdOworICAg
IHJldHVybiBbW21fcGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQ
Ym9hcmRUeXBlXTsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmlu
Zz4mIHJlc3VsdCkgY29uc3QKIHsKLSAgICBOU0FycmF5ICpmaWxlbmFtZXMgPSBbW21fcGxhdGZv
cm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3RlYm9hcmRdIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxl
bmFtZXNQYm9hcmRUeXBlXTsKKyAgICBOU0FycmF5ICpmaWxlbmFtZXMgPSBbbV9wYXN0ZWJvYXJk
IHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXTsKICAgICBOU0VudW1l
cmF0b3IgKmZpbGVFbnVtZXJhdG9yID0gW2ZpbGVuYW1lcyBvYmplY3RFbnVtZXJhdG9yXTsKICAg
ICAKICAgICB3aGlsZSAoTlNTdHJpbmcgKmZpbGVuYW1lID0gW2ZpbGVFbnVtZXJhdG9yIG5leHRP
YmplY3RdKQpAQCAtNzQsMTkgKzg3LDE4IEBAIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZl
Y3RvcjxTdHJpbmcKIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAog
ewotICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFttX3BsYXRmb3JtRHJhZ0RhdGEgZHJh
Z2dpbmdQYXN0ZWJvYXJkXTsKLSAgICBOU0FycmF5ICp0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVz
XTsKKyAgICBOU0FycmF5ICp0eXBlcyA9IFttX3Bhc3RlYm9hcmQgdHlwZXNdOwogICAgIAogICAg
IHJldHVybiBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSAKICAgICAg
ICAgfHwgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdCiAgICAgICAgIHx8
IFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdCiAgICAgICAgIHx8IFt0eXBl
cyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdCi0gICAgICAgIHx8IFtOU1VS
TCBVUkxGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICAgICAgfHwgW05TVVJMIFVSTEZy
b21QYXN0ZWJvYXJkOm1fcGFzdGVib2FyZF07CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFp
blRleHQoRnJhbWUgKmZyYW1lKSBjb25zdAogewotICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChb
bV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0pOworICAgIFBhc3RlYm9hcmQg
cGFzdGVib2FyZChtX3Bhc3RlYm9hcmQpOwogICAgIHJldHVybiBwYXN0ZWJvYXJkLnBsYWluVGV4
dChmcmFtZSk7CiB9CiAKQEAgLTExMyw4ICsxMjUsNyBAQCBzdGF0aWMgTlNBcnJheSAqaW5zZXJ0
YWJsZVBhc3RlYm9hcmRUeXBlCiAgICAgCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGli
bGVDb250ZW50KCkgY29uc3QKIHsKLSAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbbV9w
bGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF07Ci0gICAgTlNNdXRhYmxlU2V0ICp0
eXBlcyA9IFtOU011dGFibGVTZXQgc2V0V2l0aEFycmF5OltwYXN0ZWJvYXJkIHR5cGVzXV07Cisg
ICAgTlNNdXRhYmxlU2V0ICp0eXBlcyA9IFtOU011dGFibGVTZXQgc2V0V2l0aEFycmF5OlttX3Bh
c3RlYm9hcmQgdHlwZXNdXTsKICAgICBbdHlwZXMgaW50ZXJzZWN0U2V0OltOU1NldCBzZXRXaXRo
QXJyYXk6aW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcygpXV07CiAgICAgcmV0dXJuIFt0eXBlcyBj
b3VudF0gIT0gMDsKIH0KQEAgLTEzMywxMyArMTQ0LDEzIEBAIFN0cmluZyBEcmFnRGF0YTo6YXNV
UkwoRnJhbWUqIGZyYW1lLCBGaWwKICAgICAgICAgaWYgKE5TU3RyaW5nICpVUkxUaXRsZVN0cmlu
ZyA9IFtbbV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0gc3RyaW5nRm9yVHlw
ZTpXZWJVUkxOYW1lUGJvYXJkVHlwZV0pCiAgICAgICAgICAgICAqdGl0bGUgPSBVUkxUaXRsZVN0
cmluZzsKICAgICB9Ci0gICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKFttX3BsYXRmb3JtRHJhZ0Rh
dGEgZHJhZ2dpbmdQYXN0ZWJvYXJkXSk7CisgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKG1fcGFz
dGVib2FyZCk7CiAgICAgcmV0dXJuIHBhc3RlYm9hcmQuYXNVUkwoZnJhbWUpOwogfQogCiBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBmcmFt
ZSwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNo
b3NlUGxhaW5UZXh0KSBjb25zdAogewotICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChbbV9wbGF0
Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0pOworICAgIFBhc3RlYm9hcmQgcGFzdGVi
b2FyZChtX3Bhc3RlYm9hcmQpOwogICAgIAogICAgIHJldHVybiBwYXN0ZWJvYXJkLmRvY3VtZW50
RnJhZ21lbnQoZnJhbWUsIHJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOwog
fQpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDc1NjY2KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw0OSBAQAorMjAxMS0wMS0xMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlYktpdDI6IEFkZCBzdXBwb3J0IGZvciBkcmFnIGFuZCBkcm9wCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjM0MworICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzY2MDU1OD4KKyAgICAgICAgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGNvbnRh
aW5zIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgZHJvcHBpbmcgY29udGVudAorICAg
ICAgICBpbiBXZWJLaXQgb24gdGhlIE1hYy4gVGhlIERyYWdEYXRhIGNsYXNzIGhhcyBiZWVuIGV4
dGVuZGVkIHRvIHByb3ZpZGUKKyAgICAgICAgYWRkaXRpb25hbCBjb250ZXh0IGZyb20gdGhlIGFw
cGxpY2F0aW9uIChrZXlib2FyZCBzdGF0ZSwgbW9kYWwgd2luZG93cywgZXRjLikKKyAgICAgICAg
YXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBvZiB0aGUgZHJhZyBwYXN0ZWJvYXJkIGJlaW5nIHVzZWQu
CisgICAgICAgIFRoZSBzdXBwb3J0IGZvciBXZWJLaXQgYXMgZHJhZyBzb3VyY2Ugd2lsbCBiZSBh
ZGRlZCB3aXRoIGEgc2VwYXJhdGUgcGF0Y2guCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW06CisgICAgICAgIEFkZGVkIGltcGxlbWVudGlvbiBvZiB0aGUgbWV0aG9kcyBy
ZXF1aXJlZCB0byBhZGQgc3Vwb3J0IGZvciBhIGRyb3AgdGFyZ2V0LgorICAgICAgICBUbyBtYWlu
dGFpbiBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBXZWJQcm9jZXNzLCB3ZSBh
bHdheXMgcmV0dXJuCisgICAgICAgIHRoZSBwcmV2aW91cyBjYWxjdWxhdGVkIHZhbHVlIGZvciB0
aGUgZHJhZyBvcGVyYXRpb24uCisgICAgICAgICgrW1dLVmlldyBfaW5zZXJ0YWJsZVBhc3RlYm9h
cmRUeXBlc10pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzXSk6Cisg
ICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZyYW1lOmNvbnRleHRSZWY6cGFnZUdyb3VwUmVmOl0p
OgorICAgICAgICAoLVtXS1ZpZXcgYXBwbGljYXRpb25GbGFnczpdKToKKyAgICAgICAgKC1bV0tW
aWV3IGRyYWdnaW5nRW50ZXJlZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nVXBkYXRl
ZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRXhpdGVkOl0pOgorICAgICAgICAoLVtX
S1ZpZXcgcHJlcGFyZUZvckRyYWdPcGVyYXRpb246XSk6CisgICAgICAgICgtW1dLVmlldyBwZXJm
b3JtRHJhZ09wZXJhdGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cmVzZXREcmFnT3BlcmF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OndpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Ns
aWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
Q2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMS0w
MS0xMiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShy
ZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJXZWJQcm90ZWN0aW9uU3Bh
Y2UuaCIKICNpbmNsdWRlICJXZWJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldlYlVSTFJl
cXVlc3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+CkBAIC0xMjQsNiArMTI1LDcgQEAgV2Vi
UGFnZVByb3h5OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVudCogcAogICAgICwgbV9oYXNTcGVsbERv
Y3VtZW50VGFnKGZhbHNlKQogICAgICwgbV9wZW5kaW5nTGVhcm5Pcklnbm9yZVdvcmRNZXNzYWdl
Q291bnQoMCkKICAgICAsIG1fbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24oZmFsc2Up
CisgICAgLCBtX2N1cnJlbnREcmFnT3BlcmF0aW9uKERyYWdPcGVyYXRpb25Ob25lKQogewogI2lm
bmRlZiBOREVCVUcKICAgICB3ZWJQYWdlUHJveHlDb3VudGVyLmluY3JlbWVudCgpOwpAQCAtNTg4
LDYgKzU5MCwxOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWN0dWFsVmlzaWJsZUNvbnRlCiB9
CiAjZW5kaWYKIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bihXZWJDb3JlOjpEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRh
KiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCit7CisgICAgaWYgKCFp
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLT5j
bGllbnRQb3NpdGlvbigpLCBkcmFnRGF0YS0+Z2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEtPmRy
YWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpLCBkcmFnU3RvcmFnZU5hbWUsIGRyYWdEYXRhLT5m
bGFncygpKSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURy
YWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IHJlc3VsdE9wZXJhdGlvbikKK3sKKyAgICBtX2N1
cnJlbnREcmFnT3BlcmF0aW9uID0gKERyYWdPcGVyYXRpb24pcmVzdWx0T3BlcmF0aW9uOworfQor
CiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JiBldmVudCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSAiV2ViUG9wdXBN
ZW51UHJveHkuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJVSUNsaWVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0FjdGlvbnMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0RyYWdDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0QWN0
aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lTG9hZGVyVHlwZXMuaD4KQEAgLTc0LDYgKzc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHN0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiAgICAgc3RydWN0IFZpZXdwb3J0QXJndW1l
bnRzOwogICAgIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKKyAgICBjbGFzcyBEcmFnRGF0YTsKIH0K
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0yNjksNiArMjcyLDEwIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgYmFja0ZvcndhcmRSZW1vdmVkSXRlbSh1aW50NjRfdCBpdGVtSUQpOwogCisgICAgLy8g
RHJhZyBhbmQgZHJvcCBzdXBwb3J0LgorICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSosIGNv
bnN0IFN0cmluZyYpOworICAgIHZvaWQgZGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVp
bnQ2NF90IHJlc3VsdE9wZXJhdGlvbik7CisKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIENv
cmVJUEM6OkFyZ3VtZW50RW5jb2RlciopOwogCkBAIC0yOTQsNiArMzAxLDkgQEAgcHVibGljOgog
ICAgIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlR3JvdXAu
Z2V0KCk7IH0KIAogICAgIGJvb2wgaXNWYWxpZCgpOworICAgIAorICAgIFdlYkNvcmU6OkRyYWdP
cGVyYXRpb24gZHJhZ09wZXJhdGlvbigpIHsgcmV0dXJuIG1fY3VycmVudERyYWdPcGVyYXRpb247
IH0KKyAgICB2b2lkIHJlc2V0RHJhZ09wZXJhdGlvbigpIHsgbV9jdXJyZW50RHJhZ09wZXJhdGlv
biA9IFdlYkNvcmU6OkRyYWdPcGVyYXRpb25Ob25lOyB9CiAKICAgICAvLyBSRU1PVkU6IEZvciBk
ZW1vIHB1cnBvc2VzIG9ubHkuCiAgICAgY29uc3QgU3RyaW5nJiB1cmxBdFByb2Nlc3NFeGl0KCkg
Y29uc3QgeyByZXR1cm4gbV91cmxBdFByb2Nlc3NFeGl0OyB9CkBAIC01OTAsOCArNjAwLDkgQEAg
cHJpdmF0ZToKICAgICBpbnQ2NF90IG1fc3BlbGxEb2N1bWVudFRhZzsKICAgICBib29sIG1faGFz
U3BlbGxEb2N1bWVudFRhZzsKICAgICB1bnNpZ25lZCBtX3BlbmRpbmdMZWFybk9ySWdub3JlV29y
ZE1lc3NhZ2VDb3VudDsKLQorICAgIAogICAgIGJvb2wgbV9tYWluRnJhbWVIYXNDdXN0b21SZXBy
ZXNlbnRhdGlvbjsKKyAgICBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIG1fY3VycmVudERyYWdPcGVy
YXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1NjYyKQorKysgV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODYsNCArMTg2LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBHZXRHdWVzc2Vz
Rm9yV29yZChXVEY6OlN0cmluZyB3b3JkLCBXVEY6OlN0cmluZyBjb250ZXh0KSAtPiAoVmVjdG9y
PFdURjo6U3RyaW5nPiBndWVzc2VzKQogICAgIExlYXJuV29yZChXVEY6OlN0cmluZyB3b3JkKTsK
ICAgICBJZ25vcmVXb3JkKFdURjo6U3RyaW5nIHdvcmQpOworICAgIAorICAgICMgRHJhZyBhbmQg
ZHJvcC4KKyAgICBEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgcmVzdWx0
T3BlcmF0aW9uKQogfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlz
aW9uIDc1NjYyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTUwLDkgKzUwLDEyIEBACiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2Uu
aCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
b2xvck1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9EcmFnRGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBv
cnQgPFdlYkNvcmUvSW50UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAj
aW1wb3J0IDx3dGYvUmVmUHRyLmg+CkBAIC0xNTQsNiArMTU3LDM4IEBAIC0gKGlkKWluaXRXaXRo
RnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXgKICAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhGcmFt
ZTpmcmFtZSBjb250ZXh0UmVmOmNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOm5pbF07CiB9CiAKK05T
U3RyaW5nICpXZWJBcmNoaXZlUGJvYXJkVHlwZSA9IEAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVi
b2FyZCB0eXBlIjsKK05TU3RyaW5nICpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUgPSBAIldl
YlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSI7CitOU1N0cmluZyAqV2ViVVJMUGJvYXJkVHlwZSA9
IEAicHVibGljLnVybCI7CitOU1N0cmluZyAqV2ViVVJMTmFtZVBib2FyZFR5cGUgPSBAInB1Ymxp
Yy51cmwtbmFtZSI7CisKKysgKE5TQXJyYXkgKilfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcwor
eworICAgIHN0YXRpYyBOU0FycmF5ICp0eXBlcyA9IG5pbDsKKyAgICBpZiAoIXR5cGVzKSB7Cisg
ICAgICAgIHR5cGVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6V2ViQXJjaGl2
ZVBib2FyZFR5cGUsIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgTlNU
SUZGUGJvYXJkVHlwZSwgTlNQREZQYm9hcmRUeXBlLAorI2lmIGRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgICAgICAg
TlNQSUNUUGJvYXJkVHlwZSwKKyNlbmRpZgorICAgICAgICAgICAgICAgICBOU1VSTFBib2FyZFR5
cGUsIE5TUlRGRFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBl
LCBOU0NvbG9yUGJvYXJkVHlwZSwga1VUVHlwZVBORywgbmlsXTsKKyAgICAgICAgQ0ZSZXRhaW4o
dHlwZXMpOworICAgIH0KKyAgICByZXR1cm4gdHlwZXM7Cit9CisKKy0gKHZvaWQpX3JlZ2lzdGVy
RHJhZ2dlZFR5cGVzCit7CisgICAgTlNBcnJheSAqZWRpdGFibGVUeXBlcyA9IFtXS1ZpZXcgX2lu
c2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdOworICAgIE5TQXJyYXkgKlVSTFR5cGVzID0gW05TQXJy
YXkgYXJyYXlXaXRoT2JqZWN0czogV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBi
b2FyZFR5cGUsIFdlYlVSTFBib2FyZFR5cGUsICBXZWJVUkxOYW1lUGJvYXJkVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nUGJvYXJkVHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TRmlsZW5hbWVzUGJvYXJkVHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF07CisgICAgTlNN
dXRhYmxlU2V0ICp0eXBlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0V2l0aEFycmF5OmVk
aXRhYmxlVHlwZXNdOworICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OlVSTFR5cGVzXTsK
KyAgICBbc2VsZiByZWdpc3RlckZvckRyYWdnZWRUeXBlczpbdHlwZXMgYWxsT2JqZWN0c11dOwor
ICAgIFt0eXBlcyByZWxlYXNlXTsKK30KKwogLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZy
YW1lIGNvbnRleHRSZWY6KFdLQ29udGV4dFJlZiljb250ZXh0UmVmIHBhZ2VHcm91cFJlZjooV0tQ
YWdlR3JvdXBSZWYpcGFnZUdyb3VwUmVmCiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZy
YW1lOmZyYW1lXTsKQEAgLTE3Niw2ICsyMTEsOCBAQCAtIChpZClpbml0V2l0aEZyYW1lOihOU1Jl
Y3QpZnJhbWUgY29udGV4CiAgICAgX2RhdGEtPl9wYWdlID0gdG9JbXBsKGNvbnRleHRSZWYpLT5j
cmVhdGVXZWJQYWdlKF9kYXRhLT5fcGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cFJl
ZikpOwogICAgIF9kYXRhLT5fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKIAorICAgIFtzZWxm
IF9yZWdpc3RlckRyYWdnZWRUeXBlc107CisKICAgICBXZWJDb250ZXh0OjpzdGF0aXN0aWNzKCku
d2tWaWV3Q291bnQrKzsKIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
QEAgLTk3Nyw2ICsxMDE0LDYyIEBAIC0gKE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5n
ZTooTlMKICAgICByZXR1cm4gcmVzdWx0UmVjdDsKIH0KIAorLSAoRHJhZ0FwcGxpY2F0aW9uRmxh
Z3MpYXBwbGljYXRpb25GbGFnczooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sK
KyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgaWYgKFtOU0FwcCBtb2RhbFdpbmRvd10pCisg
ICAgICAgIGZsYWdzID0gRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbDsKKyAgICBpZiAoW1tzZWxmIHdp
bmRvd10gYXR0YWNoZWRTaGVldF0pCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbkhh
c0F0dGFjaGVkU2hlZXQ7CisgICAgaWYgKFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VdID09
IHNlbGYpCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzU291cmNlOworICAgIGlm
IChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10gJiBOU0FsdGVybmF0ZUtleU1h
c2spCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAg
cmV0dXJuIChEcmFnQXBwbGljYXRpb25GbGFncylmbGFnczsKK30KKworLSAoTlNEcmFnT3BlcmF0
aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sK
KyAgICBJbnRQb2ludCBjbGllbnQoW3NlbGYgY29udmVydFBvaW50OltkcmFnZ2luZ0luZm8gZHJh
Z2dpbmdMb2NhdGlvbl0gZnJvbVZpZXc6bmlsXSk7CisgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2Jh
bFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsK
KyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCAoRHJh
Z09wZXJhdGlvbilbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10sIFtz
ZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7CisgICAgCisgICAgX2RhdGEtPl9w
YWdlLT5wZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRl
cmVkLCAmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0p
OworICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25Db3B5OworfQorCistIChOU0RyYWdPcGVyYXRp
b24pZHJhZ2dpbmdVcGRhdGVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworewor
ICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFn
Z2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsKKyAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFs
UG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwor
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFn
T3BlcmF0aW9uKVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSwgW3Nl
bGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvblVwZGF0ZWQsICZk
cmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CisgICAg
cmV0dXJuIF9kYXRhLT5fcGFnZS0+ZHJhZ09wZXJhdGlvbigpOworfQorCistICh2b2lkKWRyYWdn
aW5nRXhpdGVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIEludFBv
aW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0
aW9uXSBmcm9tVmlldzpuaWxdKTsKKyAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2Ry
YWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOworICAgIERyYWdE
YXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9u
KVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSwgW3NlbGYgYXBwbGlj
YXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EcmFn
Q29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbkV4aXRlZCwgJmRyYWdEYXRhLCBb
W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKKyAgICBfZGF0YS0+X3Bh
Z2UtPnJlc2V0RHJhZ09wZXJhdGlvbigpOworfQorCistIChCT09MKXByZXBhcmVGb3JEcmFnT3Bl
cmF0aW9uOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIHJldHVybiBZ
RVM7Cit9CisKKy0gKEJPT0wpcGVyZm9ybURyYWdPcGVyYXRpb246KGlkIDxOU0RyYWdnaW5nSW5m
bz4pZHJhZ2dpbmdJbmZvCit7CisgICAgSW50UG9pbnQgY2xpZW50KFtzZWxmIGNvbnZlcnRQb2lu
dDpbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dIGZyb21WaWV3Om5pbF0pOworICAgIElu
dFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25d
LCBbc2VsZiB3aW5kb3ddKSk7CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBj
bGllbnQsIGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJj
ZU9wZXJhdGlvbk1hc2tdLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwor
ICAgIF9kYXRhLT5fcGFnZS0+cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9s
bGVyQWN0aW9uUGVyZm9ybURyYWcsICZkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQ
YXN0ZWJvYXJkXSBuYW1lXSk7CisgICAgcmV0dXJuIFlFUzsKK30KKwogLSAodm9pZClfdXBkYXRl
V2luZG93VmlzaWJpbGl0eQogewogICAgIF9kYXRhLT5fcGFnZS0+dXBkYXRlV2luZG93SXNWaXNp
YmxlKCFbW3NlbGYgd2luZG93XSBpc01pbmlhdHVyaXplZF0pOwpJbmRleDogV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkocmV2aXNp
b24gNzU2NjIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI5ICszNCwyNCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFj
dGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFj
dGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCopCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRyYWdD
bGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rpb25Ob25lOworICAgIHJldHVybiBE
cmFnRGVzdGluYXRpb25BY3Rpb25Bbnk7CiB9CiAKIERyYWdTb3VyY2VBY3Rpb24gV2ViRHJhZ0Ns
aWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93
UG9pbnQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRHJhZ1NvdXJjZUFj
dGlvbk5vbmU7CisgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKIHZvaWQgV2Vi
RHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBjb25z
dCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCiBEcmFnSW1hZ2VSZWYgV2ViRHJhZ0NsaWVudDo6Y3JlYXRlRHJhZ0ltYWdl
Rm9yTGluayhLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQpJbmRleDogV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDc1NjYyKQorKysgV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9FdmVudEhhbmRsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KQEAgLTEyNTAsNiArMTI1MSwzNiBAQCBib29s
IFdlYlBhZ2U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50CiB9CiAjZW5kaWYKIAordm9pZCBX
ZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJD
b3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9z
aXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgU3RyaW5n
JiBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzKQoreworICAgIERyYWdEYXRhIGRyYWdE
YXRhKGRyYWdTdG9yYWdlTmFtZSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCAoRHJh
Z09wZXJhdGlvbilkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIChEcmFnQXBwbGljYXRpb25G
bGFncylmbGFncyk7CisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlckFjdGlvbkVudGVyZWQ6CisgICAgICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRy
YWdDb250cm9sbGVyKCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVk
OgorICAgICAgICAgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgICAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ09wZXJh
dGlvbk5vbmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24obV9wYWdlLT5kcmFnQ29u
dHJvbGxlcigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFdlYkNvcmU6OkRyYWdDb250cm9sbGVyQWN0aW9u
RXhpdGVkOgorICAgICAgICAgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdE
YXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXJBY3Rpb25QZXJmb3JtRHJhZzoKKyAgICAgICAgICAgIG1fcGFn
ZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKIFdlYkVkaXRDb21tYW5kKiBXZWJQYWdlOjp3ZWJFZGl0Q29tbWFuZCh1
aW50NjRfdCBjb21tYW5kSUQpCiB7CiAgICAgcmV0dXJuIG1fZWRpdENvbW1hbmRNYXAuZ2V0KGNv
bW1hbmRJRCkuZ2V0KCk7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShy
ZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjk4LDYgKzI5OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAg
dm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCwgV2Vi
Q29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OkludFBvaW50LCB1aW50NjRfdCwgY29uc3QgV1RGOjpT
dHJpbmcmLCB1aW50MzJfdCk7CiAKICAgICBib29sIG1haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2Vu
dGF0aW9uKCkgY29uc3Q7CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzU2NjIpCisrKyBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5
Niw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIEhpZGVGaW5kVUkoKQogICAgIENvdW50
U3RyaW5nTWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90IGZpbmRPcHRpb25zLCB1
bnNpZ25lZCBtYXhNYXRjaENvdW50KQogCisgICAgIyBEcmFnIGFuZCBkcm9wLgorICAgIFBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50
IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0
X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6OlN0cmluZyBkcmFnU3RvcmFnZU5h
bWUsIHVpbnQzMl90IGZsYWdzKQogICAgICMgUG9wdXAgbWVudS4KICAgICBEaWRDaGFuZ2VTZWxl
Y3RlZEluZGV4Rm9yQWN0aXZlUG9wdXBNZW51KGludDMyX3QgbmV3SW5kZXgpOwogICAgIFNldFRl
eHRGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBpbmRleCk7CkluZGV4OiBXZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzU2
NjIpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIz
IEBACisyMDExLTAxLTEyICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0MjogQWRk
IHN1cHBvcnQgZm9yIGRyYWcgYW5kIGRyb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUyMzQzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NjYwNTU4
PgorICAgICAgICAKKyAgICAgICAgVGhlIERyYWdEYXRhIGNsYXNzIGhhcyBiZWVuIGV4dGVuZGVk
IHRvIHByb3ZpZGUKKyAgICAgICAgYWRkaXRpb25hbCBjb250ZXh0IGZyb20gdGhlIGFwcGxpY2F0
aW9uIChrZXlib2FyZCBzdGF0ZSwgbW9kYWwgd2luZG93cywgZXRjLikKKyAgICAgICAgYXMgd2Vs
bCBhcyBpbmZvcm1hdGlvbiBvZiB0aGUgZHJhZyBwYXN0ZWJvYXJkIGJlaW5nIHVzZWQuCisgICAg
ICAgIFRoZXNlIGFyZSB0aGUgY2hhbmdlcyB0byBhbGlnbiB0aGUgYmVoYXZpb3IgZm9yIFdlYktp
dC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBh
cHBsaWNhdGlvbkZsYWdzOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViVmlldyBkcmFnZ2luZ0Vu
dGVyZWQ6XSk6IEFkZGVkIHBhcmFtZXRlciB0byB0aGUgRHJhZ0RhdGEgY29uc3RydWN0b3IuCisg
ICAgICAgICgtW1dlYlZpZXcgZHJhZ2dpbmdVcGRhdGVkOl0pOiBBZGRlZCBwYXJhbWV0ZXIgdG8g
dGhlIERyYWdEYXRhIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtXZWJWaWV3IGRyYWdnaW5nRXhp
dGVkOl0pOiBBZGRlZCBwYXJhbWV0ZXIgdG8gdGhlIERyYWdEYXRhIGNvbnN0cnVjdG9yLgorICAg
ICAgICAoLVtXZWJWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9uOl0pOiBBZGRlZCBwYXJhbWV0ZXIg
dG8gdGhlIERyYWdEYXRhIGNvbnN0cnVjdG9yLgorCiAyMDExLTAxLTEyICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24u
CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNzU2NjIpCisrKyBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzc2NSwxMSArMzc2NSwyNSBA
QCAtIChCT09MKV9zaG91bGRBdXRvc2Nyb2xsRm9yRHJhZ2dpbmdJbmZvCiAgICAgcmV0dXJuIFtk
b2N1bWVudFZpZXcgX3Nob3VsZEF1dG9zY3JvbGxGb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZv
XTsKIH0KIAorLSAoRHJhZ0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGljYXRpb25GbGFnczooaWQgPE5T
RHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sKKyAgICB1aW50MzJfdCBmbGFncyA9IDA7Cisg
ICAgaWYgKFtOU0FwcCBtb2RhbFdpbmRvd10pCisgICAgICAgIGZsYWdzID0gRHJhZ0FwcGxpY2F0
aW9uSXNNb2RhbDsKKyAgICBpZiAoW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVldF0pCisgICAg
ICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbkhhc0F0dGFjaGVkU2hlZXQ7CisgICAgaWYgKFtk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VdID09IHNlbGYpCisgICAgICAgIGZsYWdzIHw9IERy
YWdBcHBsaWNhdGlvbklzU291cmNlOworICAgIGlmIChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9k
aWZpZXJGbGFnc10gJiBOU0FsdGVybmF0ZUtleU1hc2spCisgICAgICAgIGZsYWdzIHw9IERyYWdB
cHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAgcmV0dXJuIChEcmFnQXBwbGljYXRpb25GbGFn
cylmbGFnczsKK30KKwogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPE5T
RHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KIHsKICAgICBJbnRQb2ludCBjbGllbnQoW2RyYWdn
aW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSk7CiAgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBv
aW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKLSAg
ICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCAoRHJhZ09w
ZXJhdGlvbilbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pOworICAg
IERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3Bl
cmF0aW9uKVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSwgW3NlbGYg
YXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKICAgICByZXR1cm4gY29yZShzZWxmKS0+
ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKTsKIH0KIApAQCAtMzc4MSw3
ICszNzk1LDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPAogCiAg
ICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0pOwogICAg
IEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRp
b25dLCBbc2VsZiB3aW5kb3ddKSk7Ci0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZv
LCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2tdKTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8s
IGNsaWVudCwgZ2xvYmFsLCAoRHJhZ09wZXJhdGlvbilbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291
cmNlT3BlcmF0aW9uTWFza10sIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7
CiAgICAgcmV0dXJuIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0
YSk7CiB9CiAKQEAgLTM3OTMsNyArMzgwNyw3IEBAIC0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlk
IDxOU0RyYWdnaW5nSW4KIAogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdn
aW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5n
SW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwotICAgIERyYWdEYXRhIGRy
YWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9uKVtkcmFn
Z2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSk7CisgICAgRHJhZ0RhdGEgZHJh
Z0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdn
aW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdLCBbc2VsZiBhcHBsaWNhdGlvbkZs
YWdzOmRyYWdnaW5nSW5mb10pOwogICAgIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0
ZWQoJmRyYWdEYXRhKTsKIH0KIApAQCAtMzgwNiw3ICszODIwLDcgQEAgLSAoQk9PTClwZXJmb3Jt
RHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwogewogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9p
bnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwotICAg
IERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3Bl
cmF0aW9uKVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSk7CisgICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVy
YXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdLCBbc2VsZiBh
cHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwogICAgIHJldHVybiBjb3JlKHNlbGYpLT5k
cmFnQ29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78768</attachid>
            <date>2011-01-12 18:26:03 -0800</date>
            <delta_ts>2011-01-12 18:47:01 -0800</delta_ts>
            <desc>Patch2</desc>
            <filename>drop.txt</filename>
            <type>text/plain</type>
            <size>40858</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDEtMTIgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBBZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJv
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGRy
b3BwaW5nIGNvbnRlbnQKKyAgICAgICAgaW4gV2ViS2l0IG9uIHRoZSBNYWMuIFRoZSBEcmFnRGF0
YSBjbGFzcyBoYXMgYmVlbiBleHRlbmRlZCB0byBwcm92aWRlCisgICAgICAgIGFkZGl0aW9uYWwg
Y29udGV4dCBmcm9tIHRoZSBhcHBsaWNhdGlvbiAoa2V5Ym9hcmQgc3RhdGUsIG1vZGFsIHdpbmRv
d3MsIGV0Yy4pCisgICAgICAgIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gb2YgdGhlIGRyYWcgcGFz
dGVib2FyZCBiZWluZyB1c2VkLgorICAgICAgICBUaGUgc3VwcG9ydCBmb3IgV2ViS2l0IGFzIGRy
YWcgc291cmNlIHdpbGwgYmUgYWRkZWQgd2l0aCBhIHNlcGFyYXRlIHBhdGNoLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZSk6IEFkZGVkIERyYWdE
YXRhIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjp0cnlEb2N1
bWVudERyYWcpOiBNb2RpZmllZCBjYWxsIHRvIGRyYWdJc01vdmUuCisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6IFNhbWUgYXMgYWJvdmUuCisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5oOiBBZGRlZCBwYXJhbWV0ZXIgdG8gaXNDb3B5S2V5
RG93bi4KKyAgICAgICAgKiBwYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbToKKyAgICAgICAg
VGhlIGZvbGxvd2luZyBtZXRob2RzIGhhdmUgYmVlbiBtb2RpZmllZCB0byB1c2UgdGhlIGluZm9y
bWF0aW9uIHN0b3JlZAorICAgICAgICBpbiB0aGUgRHJhZ0RhdGEgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vRHJh
Z0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpmbGFncyk6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6
OkRyYWdEYXRhKTogQWRkZWQgY29uc3RydWN0b3IgdGhhdCByZWNlaXZlcyB0aGUgbmFtZSBvZiB0
aGUgcGFzdGVib2FyZCB0byB1c2UuCisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21h
cnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0ZpbGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYWdEYXRhOjphc0ZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxh
aW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6CisgICAgICAgIEFsbCB0aGUgZm9sbG93aW5n
IGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCB0byBhZGQgdGhlIERyYWdEYXRhCisgICAgICAgIHBh
cmFtZXRlciB0byBpc0NvcHlLZXlEb3duLiBJIHBsYW4gdG8gaW1wcm92ZSB0aGlzIGluIHRoZSBm
dXR1cmUKKyAgICAgICAgYW5kIG1ha2UgaXNDb3B5S2V5RG93biBub3QgcGxhdGZvcm0gc3BlY2lm
aWMuCisgICAgICAgICogcGFnZS9hbmRyb2lkL0RyYWdDb250cm9sbGVyQW5kcm9pZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAg
ICogcGFnZS9icmV3L0RyYWdDb250cm9sbGVyQnJldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9E
cmFnQ29udHJvbGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjppc0NvcHlLZXlEb3duKToKKyAgICAgICAgKiBwYWdlL2VmbC9EcmFnQ29udHJvbGxlckVm
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6
CisgICAgICAgICogcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24pOgorICAgICAgICAqIHBhZ2UvaGFp
a3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJv
bGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9tYWMvRHJhZ0NvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAg
ICAgICogcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToKKyAgICAgICAgKiBwYWdlL3dpbi9EcmFnQ29u
dHJvbGxlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5
S2V5RG93bik6CisgICAgICAgICogcGFnZS93eC9EcmFnQ29udHJvbGxlcld4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToKKwogMjAxMS0wMS0x
MiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFub3RoZXIgYnVpbGQg
Zml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEzMjgsNyArMTMyOCw4
IEBAIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIxMWRyYWdVcGRhdGUKIF9fWk43V2ViQ29y
ZTE0RHJhZ0NvbnRyb2xsZXIxMXBlcmZvcm1EcmFnRVBOU184RHJhZ0RhdGFFCiBfX1pON1dlYkNv
cmUxNERyYWdDb250cm9sbGVyMTRwbGFjZURyYWdDYXJldEVSS05TXzhJbnRQb2ludEUKIF9fWk43
V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXI5ZHJhZ0VuZGVkRXYKLV9fWk43V2ViQ29yZThEcmFnRGF0
YUMxRVAxMW9iamNfb2JqZWN0UktOU184SW50UG9pbnRFUzVfTlNfMTNEcmFnT3BlcmF0aW9uRQor
X19aTjdXZWJDb3JlOERyYWdEYXRhQzFFUDExb2JqY19vYmplY3RSS05TXzhJbnRQb2ludEVTNV9O
U18xM0RyYWdPcGVyYXRpb25FTlNfMjBEcmFnQXBwbGljYXRpb25GbGFnc0UKK19fWk43V2ViQ29y
ZThEcmFnRGF0YUMxRVJLTjNXVEY2U3RyaW5nRVJLTlNfOEludFBvaW50RVM3X05TXzEzRHJhZ09w
ZXJhdGlvbkVOU18yMERyYWdBcHBsaWNhdGlvbkZsYWdzRQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
R0VPTE9DQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDkgKzE0MSw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGRvY3UKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBEcmFnQ29udHJv
bGxlcjo6ZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24pCitib29sIERy
YWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiwg
RHJhZ0RhdGEqIGRyYWdEYXRhKQogewotICAgIHJldHVybiBtX2RvY3VtZW50VW5kZXJNb3VzZSA9
PSBtX2RyYWdJbml0aWF0b3IgJiYgc2VsZWN0aW9uLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFp
c0NvcHlLZXlEb3duKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnRVbmRlck1vdXNlID09IG1fZHJh
Z0luaXRpYXRvciAmJiBzZWxlY3Rpb24tPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIWlzQ29weUtl
eURvd24oZHJhZ0RhdGEpOwogfQogCiAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgcG9vcmx5IG5h
bWVkLiAgV2UncmUganVzdCBjbGVhcmluZyB0aGUgc2VsZWN0aW9uIGZyb20gdGhlIGRvY3VtZW50
IHRoaXMgZHJhZyBpcyBleGl0aW5nLgpAQCAtMzM1LDcgKzMzNSw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmEKICAgICAgICAgfQogCiAgICAgICAgIEZyYW1lKiBp
bm5lckZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICAgICAgb3BlcmF0
aW9uID0gZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5zZWxlY3Rpb24oKSkgPyBEcmFnT3BlcmF0aW9u
TW92ZSA6IERyYWdPcGVyYXRpb25Db3B5OworICAgICAgICBvcGVyYXRpb24gPSBkcmFnSXNNb3Zl
KGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSkgPyBEcmFnT3BlcmF0aW9uTW92ZSA6
IERyYWdPcGVyYXRpb25Db3B5OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8g
SWYgd2UncmUgbm90IG92ZXIgYW4gZWRpdGFibGUgcmVnaW9uLCBtYWtlIHN1cmUgd2UncmUgY2xl
YXJpbmcgYW55IHByaW9yIGRyYWcgY3Vyc29yLgpAQCAtNDQ5LDcgKzQ0OSw3IEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHJhbmdlLT5v
d25lckRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAgICAgY2FjaGVkUmVzb3Vy
Y2VMb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXModHJ1ZSk7Ci0gICAgaWYgKGRyYWdJc01v
dmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpKSB7CisgICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCks
IGRyYWdEYXRhKSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAg
ICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0Rh
dGEsIGlubmVyRnJhbWUsIHJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7CiAgICAgICAgIGlm
ICghZnJhZ21lbnQgfHwgIWlubmVyRnJhbWUtPmVkaXRvcigpLT5zaG91bGRJbnNlcnRGcmFnbWVu
dChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQpKSB7CkBAIC00NTgs
NyArNDU4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAg
ICAgICB9CiAKICAgICAgICAgbV9jbGllbnQtPndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKLSAgICAgICAgaWYgKGRy
YWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChkcmFnSXNN
b3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSkpIHsKICAgICAgICAgICAgIC8v
IE5TVGV4dFZpZXcgYmVoYXZpb3IgaXMgdG8gYWx3YXlzIHNtYXJ0IGRlbGV0ZSBvbiBtb3Zpbmcg
YSBzZWxlY3Rpb24sCiAgICAgICAgICAgICAvLyBidXQgb25seSB0byBzbWFydCBpbnNlcnQgaWYg
dGhlIHNlbGVjdGlvbiBncmFudWxhcml0eSBpcyB3b3JkIGdyYW51bGFyaXR5LgogICAgICAgICAg
ICAgYm9vbCBzbWFydERlbGV0ZSA9IGlubmVyRnJhbWUtPmVkaXRvcigpLT5zbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgUmFuZ2U7CiAgICAgY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKICAgICAKKyAgICBl
bnVtIERyYWdDb250cm9sbGVyQWN0aW9uIHsKKyAgICAgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25F
bnRlcmVkID0gMCwKKyAgICAgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVkID0gMSwKKyAg
ICAgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FeGl0ZWQgPSAyLAorICAgICAgICBEcmFnQ29udHJv
bGxlckFjdGlvblBlcmZvcm1EcmFnID0gMworICAgIH07CisgICAgCiAgICAgY2xhc3MgRHJhZ0Nv
bnRyb2xsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRHJh
Z0NvbnRyb2xsZXIoUGFnZSosIERyYWdDbGllbnQqKTsKQEAgLTk5LDggKzEwNiw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCB0cnlESFRNTERyYWcoRHJhZ0RhdGEqLCBEcmFn
T3BlcmF0aW9uJik7CiAgICAgICAgIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbihEcmFnRGF0
YSopOwogICAgICAgICB2b2lkIGNhbmNlbERyYWcoKTsKLSAgICAgICAgYm9vbCBkcmFnSXNNb3Zl
KFNlbGVjdGlvbkNvbnRyb2xsZXIqKTsKLSAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKCk7Cisg
ICAgICAgIGJvb2wgZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiwgRHJhZ0RhdGEqKTsK
KyAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKERyYWdEYXRhKik7CiAKICAgICAgICAgdm9pZCBt
b3VzZU1vdmVkSW50b0RvY3VtZW50KERvY3VtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3BwCShyZXZp
c2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxl
ckFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCitib29s
IERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJhZ0NvbnRyb2xsZXJC
cmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJhZ0NvbnRy
b2xsZXJCcmV3LmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Jy
ZXcvRHJhZ0NvbnRyb2xsZXJCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiBjb25zdCBmbG9hdCBE
cmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAogCi1ib29sIERyYWdDb250
cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURv
d24oRHJhZ0RhdGEqKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNw
cAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0RyYWdD
b250cm9sbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIERy
YWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXQKICAgICByZXR1cm4gZHJhZ0Rh
dGEtPmNvbnRhaW5zVVJMKDApICYmICFtX2RpZEluaXRpYXRlRHJhZyA/IERyYWdPcGVyYXRpb25D
b3B5IDogRHJhZ09wZXJhdGlvbk5vbmU7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29w
eUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSop
CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBPUyBzcGVjaWZpYy4gIERlbGVn
YXRlIHRvIHRoZSBlbWJlZGRlciBpbnN0ZWFkLgogI2lmIE9TKFdJTkRPV1MpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJFZmwuY3BwCShyZXZpc2lvbiA3
NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0RyYWdDb250cm9sbGVyRWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6
OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VB
bHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKK2Jv
b2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oRHJhZ0RhdGEqKQogewogICAgIHJldHVy
biBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVy
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29udHJv
bGxlckd0ay5jcHAJKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ndGsv
RHJhZ0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGNv
bnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b20KIAogY29uc3QgZmxvYXQgRHJh
Z0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7CiAKLWJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmlzQ29weUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihE
cmFnRGF0YSopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9oYWlrdS9EcmFnQ29udHJvbGxlckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwCShyZXZpc2lvbiA3NTY2
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY29uc3QgaW50IERyYWdDb250cm9sbGVy
OjpEcmFnSWNvbkJvdHRvbQogY29uc3QgZmxvYXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFs
cGhhID0gMC43NWY7CiAKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCiti
b29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICBpZiAo
bW9kaWZpZXJzKCkgJiBCX0NPTU1BTkRfS0VZKQogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxOSArNDIsMjAgQEAgY29uc3QgaW50IERyYWdDb250cm9s
bGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0lt
YWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigp
Citib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKiBkcmFnRGF0YSkK
IHsKLSAgICByZXR1cm4gW1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdICYgTlNB
bHRlcm5hdGVLZXlNYXNrOworICAgIHJldHVybiBkcmFnRGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBs
aWNhdGlvbklzQ29weUtleURvd247CiB9CiAgICAgCiBEcmFnT3BlcmF0aW9uIERyYWdDb250cm9s
bGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKIHsKICAgICBBU1NFUlQoZHJh
Z0RhdGEpOwotICAgIGlmIChbTlNBcHAgbW9kYWxXaW5kb3ddIHx8ICFkcmFnRGF0YS0+Y29udGFp
bnNVUkwobV9wYWdlLT5tYWluRnJhbWUoKSkpCisKKyAgICBpZiAoKGRyYWdEYXRhLT5mbGFncygp
ICYgRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbCkgfHwgIWRyYWdEYXRhLT5jb250YWluc1VSTChtX3Bh
Z2UtPm1haW5GcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwogCi0g
ICAgaWYgKCFtX2RvY3VtZW50VW5kZXJNb3VzZSB8fCAoIVtbbV9wYWdlLT5tYWluRnJhbWUoKS0+
dmlldygpLT5nZXRPdXRlclZpZXcoKSB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdIAotICAgICAgICAm
JiBbZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpIGRyYWdnaW5nU291cmNlXSAhPSBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPmdldE91dGVyVmlldygpKSkKKyAgICBpZiAoIW1fZG9jdW1lbnRV
bmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLT5mbGFncygpICYgRHJhZ0FwcGxpY2F0aW9uSGFzQXR0
YWNoZWRTaGVldCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShkcmFn
RGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzU291cmNlKSkpCiAgICAgICAgIHJldHVy
biBEcmFnT3BlcmF0aW9uQ29weTsKIAogICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRHJhZ0NvbnRyb2xsZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0LmNwcAkocmV2aXNp
b24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0RyYWdDb250cm9sbGVyUXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNvbnN0IGludCBEcmFnQ29udHJvbGxl
cjo6RHJhZ0ljb25Cb3R0b20KIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VB
bHBoYSA9IDAuNzVmOwogCiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oKQor
Ym9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xs
ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0RyYWdDb250
cm9sbGVyV2luLmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dp
bi9EcmFnQ29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAg
RHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdAogICAgIHJldHVybiBkcmFn
RGF0YS0+Y29udGFpbnNVUkwoMCkgJiYgIW1fZGlkSW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlv
bkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXND
b3B5S2V5RG93bigpCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRh
KikKIHsKICAgICByZXR1cm4gOjpHZXRBc3luY0tleVN0YXRlKFZLX0NPTlRST0wpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS93eC9EcmFnQ29udHJvbGxlcld4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0RyYWdDb250cm9sbGVyV3guY3BwCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRHJhZ0NvbnRyb2xsZXJXeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY29uc3QgaW50IERyYWdDb250cm9sbGVy
OjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdl
QWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCiti
b29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0RhdGEuaAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9E
cmFnRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCwxMCBAQAogI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxBcHBLaXQvTlNEcmFnZ2luZy5oPgogdHlw
ZWRlZiBpZCA8TlNEcmFnZ2luZ0luZm8+IERyYWdEYXRhUmVmOworQGNsYXNzIE5TUGFzdGVib2Fy
ZDsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIERyYWdEYXRhUmVmOworY2xhc3MgTlNQYXN0ZWJvYXJk
OwogI2VuZGlmCiAjZWxpZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFDRQpAQCAtNzIs
MTIgKzc0LDI2IEBAIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBLVVJMOwogY2xhc3Mg
UmFuZ2U7CiAKK2VudW0gRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgeworICAgIERyYWdBcHBsaWNhdGlv
bklzTW9kYWwgPSAxLAorICAgIERyYWdBcHBsaWNhdGlvbklzU291cmNlID0gMiwKKyAgICBEcmFn
QXBwbGljYXRpb25IYXNBdHRhY2hlZFNoZWV0ID0gNCwKKyAgICBEcmFnQXBwbGljYXRpb25Jc0Nv
cHlLZXlEb3duID0gOAorfTsKKyAgICAKIGNsYXNzIERyYWdEYXRhIHsKIHB1YmxpYzoKICAgICBl
bnVtIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSB7IERvTm90Q29udmVydEZpbGVuYW1lcywgQ29u
dmVydEZpbGVuYW1lcyB9OwogCiAgICAgLy8gY2xpZW50UG9zaXRpb24gaXMgdGFrZW4gdG8gYmUg
dGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFnIGV2ZW50IHdpdGhpbiB0aGUgdGFyZ2V0IHdpbmRvdywg
d2l0aCAoMCwwKSBhdCB0aGUgdG9wIGxlZnQKKyNpZiBQTEFURk9STShNQUMpCisgICAgRHJhZ0Rh
dGEoRHJhZ0RhdGFSZWYsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiwgRHJhZ0FwcGxp
Y2F0aW9uRmxhZ3MgZmxhZ3MpOworICAgIERyYWdEYXRhKGNvbnN0IFN0cmluZyYgZHJhZ1N0b3Jh
Z2VOYW1lLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBn
bG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24sIERyYWdBcHBsaWNhdGlvbkZs
YWdzIGZsYWdzKTsKKyAgICBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncygpIHsgcmV0dXJuIG1f
YXBwbGljYXRpb25GbGFnczsgfQorI2Vsc2UKICAgICBEcmFnRGF0YShEcmFnRGF0YVJlZiwgY29u
c3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRp
b24sIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uKTsKKyAgICBEcmFnQXBwbGljYXRpb25GbGFncyBm
bGFncygpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogICAgIGNvbnN0IEludFBvaW50JiBjbGllbnRQ
b3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50UG9zaXRpb247IH0KICAgICBjb25zdCBJ
bnRQb2ludCYgZ2xvYmFsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9u
OyB9CiAgICAgRHJhZ0RhdGFSZWYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0
Zm9ybURyYWdEYXRhOyB9CkBAIC05OSw2ICsxMTUsMTAgQEAgcHJpdmF0ZToKICAgICBJbnRQb2lu
dCBtX2dsb2JhbFBvc2l0aW9uOwogICAgIERyYWdEYXRhUmVmIG1fcGxhdGZvcm1EcmFnRGF0YTsK
ICAgICBEcmFnT3BlcmF0aW9uIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrOworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICBOU1Bhc3RlYm9hcmQqIG1fcGFzdGVib2FyZDsKKyAgICBEcmFnQXBw
bGljYXRpb25GbGFncyBtX2FwcGxpY2F0aW9uRmxhZ3M7CisjZW5kaWYKIH07CiAgICAgCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzgsMzQgKzM4LDQ3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IERyYWdEYXRhOjpEcmFnRGF0YShEcmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJbnRQb2ludCYgY2xp
ZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgCi0gICAgRHJhZ09w
ZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrKQorICAgIERyYWdPcGVyYXRpb24gc291cmNlT3Bl
cmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgOiBtX2NsaWVudFBv
c2l0aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3Np
dGlvbikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YShkYXRhKQogICAgICwgbV9kcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKKyAgICAsIG1fYXBwbGljYXRp
b25GbGFncyhmbGFncykKIHsKKyAgICBtX3Bhc3RlYm9hcmQgPSBbbV9wbGF0Zm9ybURyYWdEYXRh
IGRyYWdnaW5nUGFzdGVib2FyZF07Cit9CisKK0RyYWdEYXRhOjpEcmFnRGF0YShjb25zdCBTdHJp
bmcmIGRyYWdTdG9yYWdlTmFtZSwgIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29u
c3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLAorICAgIERyYWdPcGVyYXRpb24gc291cmNlT3Bl
cmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MpCisgICAgOiBtX2NsaWVudFBv
c2l0aW9uKGNsaWVudFBvc2l0aW9uKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3Np
dGlvbikKKyAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YSgwKQorICAgICwgbV9kcmFnZ2luZ1NvdXJj
ZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKKyAgICAsIG1fYXBwbGljYXRpb25G
bGFncyhmbGFncykKK3sKKyAgICBtX3Bhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9h
cmRXaXRoTmFtZTpkcmFnU3RvcmFnZU5hbWVdOwogfQogICAgIAogYm9vbCBEcmFnRGF0YTo6Y2Fu
U21hcnRSZXBsYWNlKCkgY29uc3QKIHsKICAgICAvL05lZWQgdG8gY2FsbCB0aGlzIHNvIHRoYXQg
dGhlIHZhcmlvdXMgUGFzdGVib2FyZCB0eXBlIHN0cmluZ3MgYXJlIGludGlhbGlzZWQKICAgICBQ
YXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpOwotICAgIHJldHVybiBbW1ttX3BsYXRmb3Jt
RHJhZ0RhdGEgZHJhZ2dpbmdQYXN0ZWJvYXJkXSB0eXBlc10gY29udGFpbnNPYmplY3Q6V2ViU21h
cnRQYXN0ZVBib2FyZFR5cGVdOworICAgIHJldHVybiBbW21fcGFzdGVib2FyZCB0eXBlc10gY29u
dGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwogfQogCiBib29sIERyYWdEYXRh
Ojpjb250YWluc0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW1tbbV9wbGF0Zm9ybURyYWdE
YXRhIGRyYWdnaW5nUGFzdGVib2FyZF0gdHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQ29sb3JQYm9h
cmRUeXBlXTsKKyAgICByZXR1cm4gW1ttX3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0
Ok5TQ29sb3JQYm9hcmRUeXBlXTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFtbW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3Rl
Ym9hcmRdIHR5cGVzXSBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdOworICAg
IHJldHVybiBbW21fcGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQ
Ym9hcmRUeXBlXTsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmlu
Zz4mIHJlc3VsdCkgY29uc3QKIHsKLSAgICBOU0FycmF5ICpmaWxlbmFtZXMgPSBbW21fcGxhdGZv
cm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3RlYm9hcmRdIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxl
bmFtZXNQYm9hcmRUeXBlXTsKKyAgICBOU0FycmF5ICpmaWxlbmFtZXMgPSBbbV9wYXN0ZWJvYXJk
IHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXTsKICAgICBOU0VudW1l
cmF0b3IgKmZpbGVFbnVtZXJhdG9yID0gW2ZpbGVuYW1lcyBvYmplY3RFbnVtZXJhdG9yXTsKICAg
ICAKICAgICB3aGlsZSAoTlNTdHJpbmcgKmZpbGVuYW1lID0gW2ZpbGVFbnVtZXJhdG9yIG5leHRP
YmplY3RdKQpAQCAtNzQsMTkgKzg3LDE4IEBAIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZl
Y3RvcjxTdHJpbmcKIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAog
ewotICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFttX3BsYXRmb3JtRHJhZ0RhdGEgZHJh
Z2dpbmdQYXN0ZWJvYXJkXTsKLSAgICBOU0FycmF5ICp0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVz
XTsKKyAgICBOU0FycmF5ICp0eXBlcyA9IFttX3Bhc3RlYm9hcmQgdHlwZXNdOwogICAgIAogICAg
IHJldHVybiBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSAKICAgICAg
ICAgfHwgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdCiAgICAgICAgIHx8
IFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdCiAgICAgICAgIHx8IFt0eXBl
cyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdCi0gICAgICAgIHx8IFtOU1VS
TCBVUkxGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICAgICAgfHwgW05TVVJMIFVSTEZy
b21QYXN0ZWJvYXJkOm1fcGFzdGVib2FyZF07CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFp
blRleHQoRnJhbWUgKmZyYW1lKSBjb25zdAogewotICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChb
bV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0pOworICAgIFBhc3RlYm9hcmQg
cGFzdGVib2FyZChtX3Bhc3RlYm9hcmQpOwogICAgIHJldHVybiBwYXN0ZWJvYXJkLnBsYWluVGV4
dChmcmFtZSk7CiB9CiAKQEAgLTExMyw4ICsxMjUsNyBAQCBzdGF0aWMgTlNBcnJheSAqaW5zZXJ0
YWJsZVBhc3RlYm9hcmRUeXBlCiAgICAgCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGli
bGVDb250ZW50KCkgY29uc3QKIHsKLSAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbbV9w
bGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF07Ci0gICAgTlNNdXRhYmxlU2V0ICp0
eXBlcyA9IFtOU011dGFibGVTZXQgc2V0V2l0aEFycmF5OltwYXN0ZWJvYXJkIHR5cGVzXV07Cisg
ICAgTlNNdXRhYmxlU2V0ICp0eXBlcyA9IFtOU011dGFibGVTZXQgc2V0V2l0aEFycmF5OlttX3Bh
c3RlYm9hcmQgdHlwZXNdXTsKICAgICBbdHlwZXMgaW50ZXJzZWN0U2V0OltOU1NldCBzZXRXaXRo
QXJyYXk6aW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcygpXV07CiAgICAgcmV0dXJuIFt0eXBlcyBj
b3VudF0gIT0gMDsKIH0KQEAgLTEzMywxMyArMTQ0LDEzIEBAIFN0cmluZyBEcmFnRGF0YTo6YXNV
UkwoRnJhbWUqIGZyYW1lLCBGaWwKICAgICAgICAgaWYgKE5TU3RyaW5nICpVUkxUaXRsZVN0cmlu
ZyA9IFtbbV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0gc3RyaW5nRm9yVHlw
ZTpXZWJVUkxOYW1lUGJvYXJkVHlwZV0pCiAgICAgICAgICAgICAqdGl0bGUgPSBVUkxUaXRsZVN0
cmluZzsKICAgICB9Ci0gICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKFttX3BsYXRmb3JtRHJhZ0Rh
dGEgZHJhZ2dpbmdQYXN0ZWJvYXJkXSk7CisgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKG1fcGFz
dGVib2FyZCk7CiAgICAgcmV0dXJuIHBhc3RlYm9hcmQuYXNVUkwoZnJhbWUpOwogfQogCiBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBmcmFt
ZSwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNo
b3NlUGxhaW5UZXh0KSBjb25zdAogewotICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChbbV9wbGF0
Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0pOworICAgIFBhc3RlYm9hcmQgcGFzdGVi
b2FyZChtX3Bhc3RlYm9hcmQpOwogICAgIAogICAgIHJldHVybiBwYXN0ZWJvYXJkLmRvY3VtZW50
RnJhZ21lbnQoZnJhbWUsIHJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOwog
fQpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDc1NjY2KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSw0OSBAQAorMjAxMS0wMS0xMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlYktpdDI6IEFkZCBzdXBwb3J0IGZvciBkcmFnIGFuZCBkcm9wCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjM0MworICAgICAgICA8cmRhcjovL3By
b2JsZW0vNzY2MDU1OD4KKyAgICAgICAgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGNvbnRh
aW5zIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgZHJvcHBpbmcgY29udGVudAorICAg
ICAgICBpbiBXZWJLaXQgb24gdGhlIE1hYy4gVGhlIERyYWdEYXRhIGNsYXNzIGhhcyBiZWVuIGV4
dGVuZGVkIHRvIHByb3ZpZGUKKyAgICAgICAgYWRkaXRpb25hbCBjb250ZXh0IGZyb20gdGhlIGFw
cGxpY2F0aW9uIChrZXlib2FyZCBzdGF0ZSwgbW9kYWwgd2luZG93cywgZXRjLikKKyAgICAgICAg
YXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBvZiB0aGUgZHJhZyBwYXN0ZWJvYXJkIGJlaW5nIHVzZWQu
CisgICAgICAgIFRoZSBzdXBwb3J0IGZvciBXZWJLaXQgYXMgZHJhZyBzb3VyY2Ugd2lsbCBiZSBh
ZGRlZCB3aXRoIGEgc2VwYXJhdGUgcGF0Y2guCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW06CisgICAgICAgIEFkZGVkIGltcGxlbWVudGlvbiBvZiB0aGUgbWV0aG9kcyBy
ZXF1aXJlZCB0byBhZGQgc3Vwb3J0IGZvciBhIGRyb3AgdGFyZ2V0LgorICAgICAgICBUbyBtYWlu
dGFpbiBhc3luY2hyb25vdXMgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBXZWJQcm9jZXNzLCB3ZSBh
bHdheXMgcmV0dXJuCisgICAgICAgIHRoZSBwcmV2aW91cyBjYWxjdWxhdGVkIHZhbHVlIGZvciB0
aGUgZHJhZyBvcGVyYXRpb24uCisgICAgICAgICgrW1dLVmlldyBfaW5zZXJ0YWJsZVBhc3RlYm9h
cmRUeXBlc10pOgorICAgICAgICAoLVtXS1ZpZXcgX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzXSk6Cisg
ICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZyYW1lOmNvbnRleHRSZWY6cGFnZUdyb3VwUmVmOl0p
OgorICAgICAgICAoLVtXS1ZpZXcgYXBwbGljYXRpb25GbGFnczpdKToKKyAgICAgICAgKC1bV0tW
aWV3IGRyYWdnaW5nRW50ZXJlZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nVXBkYXRl
ZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRXhpdGVkOl0pOgorICAgICAgICAoLVtX
S1ZpZXcgcHJlcGFyZUZvckRyYWdPcGVyYXRpb246XSk6CisgICAgICAgICgtW1dLVmlldyBwZXJm
b3JtRHJhZ09wZXJhdGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cmVzZXREcmFnT3BlcmF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OndpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Ns
aWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
RHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
Q2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KToKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMS0w
MS0xMiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShy
ZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJXZWJQcm90ZWN0aW9uU3Bh
Y2UuaCIKICNpbmNsdWRlICJXZWJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldlYlVSTFJl
cXVlc3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+CkBAIC0xMjQsNiArMTI1LDcgQEAgV2Vi
UGFnZVByb3h5OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVudCogcAogICAgICwgbV9oYXNTcGVsbERv
Y3VtZW50VGFnKGZhbHNlKQogICAgICwgbV9wZW5kaW5nTGVhcm5Pcklnbm9yZVdvcmRNZXNzYWdl
Q291bnQoMCkKICAgICAsIG1fbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24oZmFsc2Up
CisgICAgLCBtX2N1cnJlbnREcmFnT3BlcmF0aW9uKERyYWdPcGVyYXRpb25Ob25lKQogewogI2lm
bmRlZiBOREVCVUcKICAgICB3ZWJQYWdlUHJveHlDb3VudGVyLmluY3JlbWVudCgpOwpAQCAtNTg4
LDYgKzU5MCwxOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWN0dWFsVmlzaWJsZUNvbnRlCiB9
CiAjZW5kaWYKIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bihXZWJDb3JlOjpEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRh
KiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCit7CisgICAgaWYgKCFp
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OlBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLT5j
bGllbnRQb3NpdGlvbigpLCBkcmFnRGF0YS0+Z2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEtPmRy
YWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpLCBkcmFnU3RvcmFnZU5hbWUsIGRyYWdEYXRhLT5m
bGFncygpKSwgbV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURy
YWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IHJlc3VsdE9wZXJhdGlvbikKK3sKKyAgICBtX2N1
cnJlbnREcmFnT3BlcmF0aW9uID0gKERyYWdPcGVyYXRpb24pcmVzdWx0T3BlcmF0aW9uOworfQor
CiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
JiBldmVudCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSAiV2ViUG9wdXBN
ZW51UHJveHkuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJVSUNsaWVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0FjdGlvbnMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0RyYWdDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0QWN0
aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lTG9hZGVyVHlwZXMuaD4KQEAgLTc0LDYgKzc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIHN0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiAgICAgc3RydWN0IFZpZXdwb3J0QXJndW1l
bnRzOwogICAgIHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKKyAgICBjbGFzcyBEcmFnRGF0YTsKIH0K
IAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0yNjksNiArMjcyLDEwIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgYmFja0ZvcndhcmRSZW1vdmVkSXRlbSh1aW50NjRfdCBpdGVtSUQpOwogCisgICAgLy8g
RHJhZyBhbmQgZHJvcCBzdXBwb3J0LgorICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSosIGNv
bnN0IFN0cmluZyYpOworICAgIHZvaWQgZGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVp
bnQ2NF90IHJlc3VsdE9wZXJhdGlvbik7CisKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENv
cmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciopOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIENv
cmVJUEM6OkFyZ3VtZW50RW5jb2RlciopOwogCkBAIC0yOTQsNiArMzAxLDkgQEAgcHVibGljOgog
ICAgIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlR3JvdXAu
Z2V0KCk7IH0KIAogICAgIGJvb2wgaXNWYWxpZCgpOworICAgIAorICAgIFdlYkNvcmU6OkRyYWdP
cGVyYXRpb24gZHJhZ09wZXJhdGlvbigpIHsgcmV0dXJuIG1fY3VycmVudERyYWdPcGVyYXRpb247
IH0KKyAgICB2b2lkIHJlc2V0RHJhZ09wZXJhdGlvbigpIHsgbV9jdXJyZW50RHJhZ09wZXJhdGlv
biA9IFdlYkNvcmU6OkRyYWdPcGVyYXRpb25Ob25lOyB9CiAKICAgICAvLyBSRU1PVkU6IEZvciBk
ZW1vIHB1cnBvc2VzIG9ubHkuCiAgICAgY29uc3QgU3RyaW5nJiB1cmxBdFByb2Nlc3NFeGl0KCkg
Y29uc3QgeyByZXR1cm4gbV91cmxBdFByb2Nlc3NFeGl0OyB9CkBAIC01OTAsOCArNjAwLDkgQEAg
cHJpdmF0ZToKICAgICBpbnQ2NF90IG1fc3BlbGxEb2N1bWVudFRhZzsKICAgICBib29sIG1faGFz
U3BlbGxEb2N1bWVudFRhZzsKICAgICB1bnNpZ25lZCBtX3BlbmRpbmdMZWFybk9ySWdub3JlV29y
ZE1lc3NhZ2VDb3VudDsKLQorICAgIAogICAgIGJvb2wgbV9tYWluRnJhbWVIYXNDdXN0b21SZXBy
ZXNlbnRhdGlvbjsKKyAgICBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIG1fY3VycmVudERyYWdPcGVy
YXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1NjYyKQorKysgV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODYsNCArMTg2LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBHZXRHdWVzc2Vz
Rm9yV29yZChXVEY6OlN0cmluZyB3b3JkLCBXVEY6OlN0cmluZyBjb250ZXh0KSAtPiAoVmVjdG9y
PFdURjo6U3RyaW5nPiBndWVzc2VzKQogICAgIExlYXJuV29yZChXVEY6OlN0cmluZyB3b3JkKTsK
ICAgICBJZ25vcmVXb3JkKFdURjo6U3RyaW5nIHdvcmQpOworICAgIAorICAgICMgRHJhZyBhbmQg
ZHJvcC4KKyAgICBEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgcmVzdWx0
T3BlcmF0aW9uKQogfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlz
aW9uIDc1NjYyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTUwLDkgKzUwLDEyIEBACiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2Uu
aCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
b2xvck1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgorI2ltcG9ydCA8
V2ViQ29yZS9EcmFnRGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBv
cnQgPFdlYkNvcmUvSW50UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAj
aW1wb3J0IDx3dGYvUmVmUHRyLmg+CkBAIC0xNTQsNiArMTU3LDM4IEBAIC0gKGlkKWluaXRXaXRo
RnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXgKICAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhGcmFt
ZTpmcmFtZSBjb250ZXh0UmVmOmNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOm5pbF07CiB9CiAKK05T
U3RyaW5nICpXZWJBcmNoaXZlUGJvYXJkVHlwZSA9IEAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVi
b2FyZCB0eXBlIjsKK05TU3RyaW5nICpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUgPSBAIldl
YlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSI7CitOU1N0cmluZyAqV2ViVVJMUGJvYXJkVHlwZSA9
IEAicHVibGljLnVybCI7CitOU1N0cmluZyAqV2ViVVJMTmFtZVBib2FyZFR5cGUgPSBAInB1Ymxp
Yy51cmwtbmFtZSI7CisKKysgKE5TQXJyYXkgKilfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcwor
eworICAgIHN0YXRpYyBOU0FycmF5ICp0eXBlcyA9IG5pbDsKKyAgICBpZiAoIXR5cGVzKSB7Cisg
ICAgICAgIHR5cGVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6V2ViQXJjaGl2
ZVBib2FyZFR5cGUsIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgTlNU
SUZGUGJvYXJkVHlwZSwgTlNQREZQYm9hcmRUeXBlLAorI2lmIGRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgICAgICAg
TlNQSUNUUGJvYXJkVHlwZSwKKyNlbmRpZgorICAgICAgICAgICAgICAgICBOU1VSTFBib2FyZFR5
cGUsIE5TUlRGRFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBl
LCBOU0NvbG9yUGJvYXJkVHlwZSwga1VUVHlwZVBORywgbmlsXTsKKyAgICAgICAgQ0ZSZXRhaW4o
dHlwZXMpOworICAgIH0KKyAgICByZXR1cm4gdHlwZXM7Cit9CisKKy0gKHZvaWQpX3JlZ2lzdGVy
RHJhZ2dlZFR5cGVzCit7CisgICAgTlNBcnJheSAqZWRpdGFibGVUeXBlcyA9IFtXS1ZpZXcgX2lu
c2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdOworICAgIE5TQXJyYXkgKlVSTFR5cGVzID0gW05TQXJy
YXkgYXJyYXlXaXRoT2JqZWN0czogV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBi
b2FyZFR5cGUsIFdlYlVSTFBib2FyZFR5cGUsICBXZWJVUkxOYW1lUGJvYXJkVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nUGJvYXJkVHlwZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TRmlsZW5hbWVzUGJvYXJkVHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF07CisgICAgTlNN
dXRhYmxlU2V0ICp0eXBlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0V2l0aEFycmF5OmVk
aXRhYmxlVHlwZXNdOworICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OlVSTFR5cGVzXTsK
KyAgICBbc2VsZiByZWdpc3RlckZvckRyYWdnZWRUeXBlczpbdHlwZXMgYWxsT2JqZWN0c11dOwor
ICAgIFt0eXBlcyByZWxlYXNlXTsKK30KKwogLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZy
YW1lIGNvbnRleHRSZWY6KFdLQ29udGV4dFJlZiljb250ZXh0UmVmIHBhZ2VHcm91cFJlZjooV0tQ
YWdlR3JvdXBSZWYpcGFnZUdyb3VwUmVmCiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZy
YW1lOmZyYW1lXTsKQEAgLTE3Niw2ICsyMTEsOCBAQCAtIChpZClpbml0V2l0aEZyYW1lOihOU1Jl
Y3QpZnJhbWUgY29udGV4CiAgICAgX2RhdGEtPl9wYWdlID0gdG9JbXBsKGNvbnRleHRSZWYpLT5j
cmVhdGVXZWJQYWdlKF9kYXRhLT5fcGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cFJl
ZikpOwogICAgIF9kYXRhLT5fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKIAorICAgIFtzZWxm
IF9yZWdpc3RlckRyYWdnZWRUeXBlc107CisKICAgICBXZWJDb250ZXh0OjpzdGF0aXN0aWNzKCku
d2tWaWV3Q291bnQrKzsKIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
QEAgLTk3Nyw2ICsxMDE0LDYyIEBAIC0gKE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5n
ZTooTlMKICAgICByZXR1cm4gcmVzdWx0UmVjdDsKIH0KIAorLSAoRHJhZ0FwcGxpY2F0aW9uRmxh
Z3MpYXBwbGljYXRpb25GbGFnczooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sK
KyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgaWYgKFtOU0FwcCBtb2RhbFdpbmRvd10pCisg
ICAgICAgIGZsYWdzID0gRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbDsKKyAgICBpZiAoW1tzZWxmIHdp
bmRvd10gYXR0YWNoZWRTaGVldF0pCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbkhh
c0F0dGFjaGVkU2hlZXQ7CisgICAgaWYgKFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VdID09
IHNlbGYpCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzU291cmNlOworICAgIGlm
IChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10gJiBOU0FsdGVybmF0ZUtleU1h
c2spCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAg
cmV0dXJuIChEcmFnQXBwbGljYXRpb25GbGFncylmbGFnczsKK30KKworLSAoTlNEcmFnT3BlcmF0
aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sK
KyAgICBJbnRQb2ludCBjbGllbnQoW3NlbGYgY29udmVydFBvaW50OltkcmFnZ2luZ0luZm8gZHJh
Z2dpbmdMb2NhdGlvbl0gZnJvbVZpZXc6bmlsXSk7CisgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2Jh
bFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsK
KyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCAoRHJh
Z09wZXJhdGlvbilbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10sIFtz
ZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7CisgICAgCisgICAgX2RhdGEtPl9w
YWdlLT5wZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRl
cmVkLCAmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0p
OworICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25Db3B5OworfQorCistIChOU0RyYWdPcGVyYXRp
b24pZHJhZ2dpbmdVcGRhdGVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworewor
ICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFn
Z2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsKKyAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFs
UG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwor
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFn
T3BlcmF0aW9uKVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSwgW3Nl
bGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvblVwZGF0ZWQsICZk
cmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CisgICAg
cmV0dXJuIF9kYXRhLT5fcGFnZS0+ZHJhZ09wZXJhdGlvbigpOworfQorCistICh2b2lkKWRyYWdn
aW5nRXhpdGVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIEludFBv
aW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0
aW9uXSBmcm9tVmlldzpuaWxdKTsKKyAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2Ry
YWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOworICAgIERyYWdE
YXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9u
KVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSwgW3NlbGYgYXBwbGlj
YXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EcmFn
Q29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbkV4aXRlZCwgJmRyYWdEYXRhLCBb
W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKKyAgICBfZGF0YS0+X3Bh
Z2UtPnJlc2V0RHJhZ09wZXJhdGlvbigpOworfQorCistIChCT09MKXByZXBhcmVGb3JEcmFnT3Bl
cmF0aW9uOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIHJldHVybiBZ
RVM7Cit9CisKKy0gKEJPT0wpcGVyZm9ybURyYWdPcGVyYXRpb246KGlkIDxOU0RyYWdnaW5nSW5m
bz4pZHJhZ2dpbmdJbmZvCit7CisgICAgSW50UG9pbnQgY2xpZW50KFtzZWxmIGNvbnZlcnRQb2lu
dDpbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dIGZyb21WaWV3Om5pbF0pOworICAgIElu
dFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25d
LCBbc2VsZiB3aW5kb3ddKSk7CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBj
bGllbnQsIGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJj
ZU9wZXJhdGlvbk1hc2tdLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwor
ICAgIF9kYXRhLT5fcGFnZS0+cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9s
bGVyQWN0aW9uUGVyZm9ybURyYWcsICZkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQ
YXN0ZWJvYXJkXSBuYW1lXSk7CisgICAgcmV0dXJuIFlFUzsKK30KKwogLSAodm9pZClfdXBkYXRl
V2luZG93VmlzaWJpbGl0eQogewogICAgIF9kYXRhLT5fcGFnZS0+dXBkYXRlV2luZG93SXNWaXNp
YmxlKCFbW3NlbGYgd2luZG93XSBpc01pbmlhdHVyaXplZF0pOwpJbmRleDogV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkocmV2aXNp
b24gNzU2NjIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI5ICszNCwyNCBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFj
dGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFj
dGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCopCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRyYWdD
bGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rpb25Ob25lOworICAgIHJldHVybiBE
cmFnRGVzdGluYXRpb25BY3Rpb25Bbnk7CiB9CiAKIERyYWdTb3VyY2VBY3Rpb24gV2ViRHJhZ0Ns
aWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93
UG9pbnQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRHJhZ1NvdXJjZUFj
dGlvbk5vbmU7CisgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKIHZvaWQgV2Vi
RHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBjb25z
dCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCiBEcmFnSW1hZ2VSZWYgV2ViRHJhZ0NsaWVudDo6Y3JlYXRlRHJhZ0ltYWdl
Rm9yTGluayhLVVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQpJbmRleDogV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDc1NjYyKQorKysgV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9FdmVudEhhbmRsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KQEAgLTEyNTAsNiArMTI1MSwzNiBAQCBib29s
IFdlYlBhZ2U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50CiB9CiAjZW5kaWYKIAordm9pZCBX
ZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJD
b3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9z
aXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgU3RyaW5n
JiBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzKQoreworICAgIERyYWdEYXRhIGRyYWdE
YXRhKGRyYWdTdG9yYWdlTmFtZSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCAoRHJh
Z09wZXJhdGlvbilkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIChEcmFnQXBwbGljYXRpb25G
bGFncylmbGFncyk7CisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlckFjdGlvbkVudGVyZWQ6CisgICAgICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRy
YWdDb250cm9sbGVyKCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVk
OgorICAgICAgICAgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgICAgICAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ09wZXJh
dGlvbk5vbmUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24obV9wYWdlLT5kcmFnQ29u
dHJvbGxlcigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFdlYkNvcmU6OkRyYWdDb250cm9sbGVyQWN0aW9u
RXhpdGVkOgorICAgICAgICAgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdE
YXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXJBY3Rpb25QZXJmb3JtRHJhZzoKKyAgICAgICAgICAgIG1fcGFn
ZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKIFdlYkVkaXRDb21tYW5kKiBXZWJQYWdlOjp3ZWJFZGl0Q29tbWFuZCh1
aW50NjRfdCBjb21tYW5kSUQpCiB7CiAgICAgcmV0dXJuIG1fZWRpdENvbW1hbmRNYXAuZ2V0KGNv
bW1hbmRJRCkuZ2V0KCk7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShy
ZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjk4LDYgKzI5OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAg
dm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCwgV2Vi
Q29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OkludFBvaW50LCB1aW50NjRfdCwgY29uc3QgV1RGOjpT
dHJpbmcmLCB1aW50MzJfdCk7CiAKICAgICBib29sIG1haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2Vu
dGF0aW9uKCkgY29uc3Q7CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzU2NjIpCisrKyBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5
Niw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIEhpZGVGaW5kVUkoKQogICAgIENvdW50
U3RyaW5nTWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90IGZpbmRPcHRpb25zLCB1
bnNpZ25lZCBtYXhNYXRjaENvdW50KQogCisgICAgIyBEcmFnIGFuZCBkcm9wLgorICAgIFBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50
IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0
X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6OlN0cmluZyBkcmFnU3RvcmFnZU5h
bWUsIHVpbnQzMl90IGZsYWdzKQogICAgICMgUG9wdXAgbWVudS4KICAgICBEaWRDaGFuZ2VTZWxl
Y3RlZEluZGV4Rm9yQWN0aXZlUG9wdXBNZW51KGludDMyX3QgbmV3SW5kZXgpOwogICAgIFNldFRl
eHRGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBpbmRleCk7CkluZGV4OiBXZWJLaXQvbWFjL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzU2
NjIpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIz
IEBACisyMDExLTAxLTEyICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0MjogQWRk
IHN1cHBvcnQgZm9yIGRyYWcgYW5kIGRyb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUyMzQzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NjYwNTU4
PgorICAgICAgICAKKyAgICAgICAgVGhlIERyYWdEYXRhIGNsYXNzIGhhcyBiZWVuIGV4dGVuZGVk
IHRvIHByb3ZpZGUKKyAgICAgICAgYWRkaXRpb25hbCBjb250ZXh0IGZyb20gdGhlIGFwcGxpY2F0
aW9uIChrZXlib2FyZCBzdGF0ZSwgbW9kYWwgd2luZG93cywgZXRjLikKKyAgICAgICAgYXMgd2Vs
bCBhcyBpbmZvcm1hdGlvbiBvZiB0aGUgZHJhZyBwYXN0ZWJvYXJkIGJlaW5nIHVzZWQuCisgICAg
ICAgIFRoZXNlIGFyZSB0aGUgY2hhbmdlcyB0byBhbGlnbiB0aGUgYmVoYXZpb3IgZm9yIFdlYktp
dC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBh
cHBsaWNhdGlvbkZsYWdzOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViVmlldyBkcmFnZ2luZ0Vu
dGVyZWQ6XSk6IEFkZGVkIHBhcmFtZXRlciB0byB0aGUgRHJhZ0RhdGEgY29uc3RydWN0b3IuCisg
ICAgICAgICgtW1dlYlZpZXcgZHJhZ2dpbmdVcGRhdGVkOl0pOiBBZGRlZCBwYXJhbWV0ZXIgdG8g
dGhlIERyYWdEYXRhIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtXZWJWaWV3IGRyYWdnaW5nRXhp
dGVkOl0pOiBBZGRlZCBwYXJhbWV0ZXIgdG8gdGhlIERyYWdEYXRhIGNvbnN0cnVjdG9yLgorICAg
ICAgICAoLVtXZWJWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9uOl0pOiBBZGRlZCBwYXJhbWV0ZXIg
dG8gdGhlIERyYWdEYXRhIGNvbnN0cnVjdG9yLgorCiAyMDExLTAxLTEyICBCZXRoIERha2luICA8
YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24u
CkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNzU2NjIpCisrKyBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzc2NSwxMSArMzc2NSwyNSBA
QCAtIChCT09MKV9zaG91bGRBdXRvc2Nyb2xsRm9yRHJhZ2dpbmdJbmZvCiAgICAgcmV0dXJuIFtk
b2N1bWVudFZpZXcgX3Nob3VsZEF1dG9zY3JvbGxGb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZv
XTsKIH0KIAorLSAoRHJhZ0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGljYXRpb25GbGFnczooaWQgPE5T
RHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sKKyAgICB1aW50MzJfdCBmbGFncyA9IDA7Cisg
ICAgaWYgKFtOU0FwcCBtb2RhbFdpbmRvd10pCisgICAgICAgIGZsYWdzID0gRHJhZ0FwcGxpY2F0
aW9uSXNNb2RhbDsKKyAgICBpZiAoW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVldF0pCisgICAg
ICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbkhhc0F0dGFjaGVkU2hlZXQ7CisgICAgaWYgKFtk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VdID09IHNlbGYpCisgICAgICAgIGZsYWdzIHw9IERy
YWdBcHBsaWNhdGlvbklzU291cmNlOworICAgIGlmIChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9k
aWZpZXJGbGFnc10gJiBOU0FsdGVybmF0ZUtleU1hc2spCisgICAgICAgIGZsYWdzIHw9IERyYWdB
cHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAgcmV0dXJuIChEcmFnQXBwbGljYXRpb25GbGFn
cylmbGFnczsKK30KKwogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPE5T
RHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KIHsKICAgICBJbnRQb2ludCBjbGllbnQoW2RyYWdn
aW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSk7CiAgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBv
aW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKLSAg
ICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCAoRHJhZ09w
ZXJhdGlvbilbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pOworICAg
IERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3Bl
cmF0aW9uKVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSwgW3NlbGYg
YXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKICAgICByZXR1cm4gY29yZShzZWxmKS0+
ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKTsKIH0KIApAQCAtMzc4MSw3
ICszNzk1LDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPAogCiAg
ICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0pOwogICAg
IEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRp
b25dLCBbc2VsZiB3aW5kb3ddKSk7Ci0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZv
LCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2tdKTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8s
IGNsaWVudCwgZ2xvYmFsLCAoRHJhZ09wZXJhdGlvbilbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291
cmNlT3BlcmF0aW9uTWFza10sIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7
CiAgICAgcmV0dXJuIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0
YSk7CiB9CiAKQEAgLTM3OTMsNyArMzgwNyw3IEBAIC0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlk
IDxOU0RyYWdnaW5nSW4KIAogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdn
aW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5n
SW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwotICAgIERyYWdEYXRhIGRy
YWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9uKVtkcmFn
Z2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSk7CisgICAgRHJhZ0RhdGEgZHJh
Z0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdn
aW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdLCBbc2VsZiBhcHBsaWNhdGlvbkZs
YWdzOmRyYWdnaW5nSW5mb10pOwogICAgIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0
ZWQoJmRyYWdEYXRhKTsKIH0KIApAQCAtMzgwNiw3ICszODIwLDcgQEAgLSAoQk9PTClwZXJmb3Jt
RHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwogewogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9p
bnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwotICAg
IERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3Bl
cmF0aW9uKVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSk7CisgICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVy
YXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdLCBbc2VsZiBh
cHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwogICAgIHJldHVybiBjb3JlKHNlbGYpLT5k
cmFnQ29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78772</attachid>
            <date>2011-01-12 18:47:01 -0800</date>
            <delta_ts>2011-01-13 12:38:17 -0800</delta_ts>
            <desc>Patch3</desc>
            <filename>drop.txt</filename>
            <type>text/plain</type>
            <size>40906</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjYgQEAKKzIwMTEtMDEtMTIgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBBZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJv
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGRy
b3BwaW5nIGNvbnRlbnQKKyAgICAgICAgaW4gV2ViS2l0IG9uIHRoZSBNYWMuIFRoZSBEcmFnRGF0
YSBjbGFzcyBoYXMgYmVlbiBleHRlbmRlZCB0byBwcm92aWRlCisgICAgICAgIGFkZGl0aW9uYWwg
Y29udGV4dCBmcm9tIHRoZSBhcHBsaWNhdGlvbiAoa2V5Ym9hcmQgc3RhdGUsIG1vZGFsIHdpbmRv
d3MsIGV0Yy4pCisgICAgICAgIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gb2YgdGhlIGRyYWcgcGFz
dGVib2FyZCBiZWluZyB1c2VkLgorICAgICAgICBUaGUgc3VwcG9ydCBmb3IgV2ViS2l0IGFzIGRy
YWcgc291cmNlIHdpbGwgYmUgYWRkZWQgd2l0aCBhIHNlcGFyYXRlIHBhdGNoLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZSk6IEFkZGVkIERyYWdE
YXRhIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjp0cnlEb2N1
bWVudERyYWcpOiBNb2RpZmllZCBjYWxsIHRvIGRyYWdJc01vdmUuCisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6IFNhbWUgYXMgYWJvdmUuCisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5oOiBBZGRlZCBwYXJhbWV0ZXIgdG8gaXNDb3B5S2V5
RG93bi4KKyAgICAgICAgKiBwYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbToKKyAgICAgICAg
VGhlIGZvbGxvd2luZyBtZXRob2RzIGhhdmUgYmVlbiBtb2RpZmllZCB0byB1c2UgdGhlIGluZm9y
bWF0aW9uIHN0b3JlZAorICAgICAgICBpbiB0aGUgRHJhZ0RhdGEgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vRHJh
Z0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpmbGFncyk6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6
OkRyYWdEYXRhKTogQWRkZWQgY29uc3RydWN0b3IgdGhhdCByZWNlaXZlcyB0aGUgbmFtZSBvZiB0
aGUgcGFzdGVib2FyZCB0byB1c2UuCisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21h
cnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0ZpbGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYWdEYXRhOjphc0ZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6Y29udGFpbnNQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxh
aW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6CisgICAgICAgIEFsbCB0aGUgZm9sbG93aW5n
IGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCB0byBhZGQgdGhlIERyYWdEYXRhCisgICAgICAgIHBh
cmFtZXRlciB0byBpc0NvcHlLZXlEb3duLiBJIHBsYW4gdG8gaW1wcm92ZSB0aGlzIGluIHRoZSBm
dXR1cmUKKyAgICAgICAgYW5kIG1ha2UgaXNDb3B5S2V5RG93biBub3QgcGxhdGZvcm0gc3BlY2lm
aWMuCisgICAgICAgICogcGFnZS9hbmRyb2lkL0RyYWdDb250cm9sbGVyQW5kcm9pZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAg
ICogcGFnZS9icmV3L0RyYWdDb250cm9sbGVyQnJldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
cmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9E
cmFnQ29udHJvbGxlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9s
bGVyOjppc0NvcHlLZXlEb3duKToKKyAgICAgICAgKiBwYWdlL2VmbC9EcmFnQ29udHJvbGxlckVm
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6
CisgICAgICAgICogcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24pOgorICAgICAgICAqIHBhZ2UvaGFp
a3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJv
bGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9tYWMvRHJhZ0NvbnRyb2xsZXJN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAg
ICAgICogcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToKKyAgICAgICAgKiBwYWdlL3dpbi9EcmFnQ29u
dHJvbGxlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5
S2V5RG93bik6CisgICAgICAgICogcGFnZS93eC9EcmFnQ29udHJvbGxlcld4LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToKKwogMjAxMS0wMS0x
MiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFub3RoZXIgYnVpbGQg
Zml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEzMjgsNyArMTMyOCw4
IEBAIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIxMWRyYWdVcGRhdGUKIF9fWk43V2ViQ29y
ZTE0RHJhZ0NvbnRyb2xsZXIxMXBlcmZvcm1EcmFnRVBOU184RHJhZ0RhdGFFCiBfX1pON1dlYkNv
cmUxNERyYWdDb250cm9sbGVyMTRwbGFjZURyYWdDYXJldEVSS05TXzhJbnRQb2ludEUKIF9fWk43
V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXI5ZHJhZ0VuZGVkRXYKLV9fWk43V2ViQ29yZThEcmFnRGF0
YUMxRVAxMW9iamNfb2JqZWN0UktOU184SW50UG9pbnRFUzVfTlNfMTNEcmFnT3BlcmF0aW9uRQor
X19aTjdXZWJDb3JlOERyYWdEYXRhQzFFUDExb2JqY19vYmplY3RSS05TXzhJbnRQb2ludEVTNV9O
U18xM0RyYWdPcGVyYXRpb25FTlNfMjBEcmFnQXBwbGljYXRpb25GbGFnc0UKK19fWk43V2ViQ29y
ZThEcmFnRGF0YUMxRVJLTjNXVEY2U3RyaW5nRVJLTlNfOEludFBvaW50RVM3X05TXzEzRHJhZ09w
ZXJhdGlvbkVOU18yMERyYWdBcHBsaWNhdGlvbkZsYWdzRQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
R0VPTE9DQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDkgKzE0MSw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGRvY3UKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBEcmFnQ29udHJv
bGxlcjo6ZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiBzZWxlY3Rpb24pCitib29sIERy
YWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKFNlbGVjdGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiwg
RHJhZ0RhdGEqIGRyYWdEYXRhKQogewotICAgIHJldHVybiBtX2RvY3VtZW50VW5kZXJNb3VzZSA9
PSBtX2RyYWdJbml0aWF0b3IgJiYgc2VsZWN0aW9uLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFp
c0NvcHlLZXlEb3duKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnRVbmRlck1vdXNlID09IG1fZHJh
Z0luaXRpYXRvciAmJiBzZWxlY3Rpb24tPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIWlzQ29weUtl
eURvd24oZHJhZ0RhdGEpOwogfQogCiAvLyBGSVhNRTogVGhpcyBtZXRob2QgaXMgcG9vcmx5IG5h
bWVkLiAgV2UncmUganVzdCBjbGVhcmluZyB0aGUgc2VsZWN0aW9uIGZyb20gdGhlIGRvY3VtZW50
IHRoaXMgZHJhZyBpcyBleGl0aW5nLgpAQCAtMzM1LDcgKzMzNSw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmEKICAgICAgICAgfQogCiAgICAgICAgIEZyYW1lKiBp
bm5lckZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKLSAgICAgICAgb3BlcmF0
aW9uID0gZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5zZWxlY3Rpb24oKSkgPyBEcmFnT3BlcmF0aW9u
TW92ZSA6IERyYWdPcGVyYXRpb25Db3B5OworICAgICAgICBvcGVyYXRpb24gPSBkcmFnSXNNb3Zl
KGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSkgPyBEcmFnT3BlcmF0aW9uTW92ZSA6
IERyYWdPcGVyYXRpb25Db3B5OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8g
SWYgd2UncmUgbm90IG92ZXIgYW4gZWRpdGFibGUgcmVnaW9uLCBtYWtlIHN1cmUgd2UncmUgY2xl
YXJpbmcgYW55IHByaW9yIGRyYWcgY3Vyc29yLgpAQCAtNDQ5LDcgKzQ0OSw3IEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IHJhbmdlLT5v
d25lckRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAgICAgY2FjaGVkUmVzb3Vy
Y2VMb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJjZXModHJ1ZSk7Ci0gICAgaWYgKGRyYWdJc01v
dmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpKSB7CisgICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCks
IGRyYWdEYXRhKSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAg
ICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0Rh
dGEsIGlubmVyRnJhbWUsIHJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7CiAgICAgICAgIGlm
ICghZnJhZ21lbnQgfHwgIWlubmVyRnJhbWUtPmVkaXRvcigpLT5zaG91bGRJbnNlcnRGcmFnbWVu
dChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQpKSB7CkBAIC00NTgs
NyArNDU4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAg
ICAgICB9CiAKICAgICAgICAgbV9jbGllbnQtPndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKLSAgICAgICAgaWYgKGRy
YWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpKSB7CisgICAgICAgIGlmIChkcmFnSXNN
b3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSkpIHsKICAgICAgICAgICAgIC8v
IE5TVGV4dFZpZXcgYmVoYXZpb3IgaXMgdG8gYWx3YXlzIHNtYXJ0IGRlbGV0ZSBvbiBtb3Zpbmcg
YSBzZWxlY3Rpb24sCiAgICAgICAgICAgICAvLyBidXQgb25seSB0byBzbWFydCBpbnNlcnQgaWYg
dGhlIHNlbGVjdGlvbiBncmFudWxhcml0eSBpcyB3b3JkIGdyYW51bGFyaXR5LgogICAgICAgICAg
ICAgYm9vbCBzbWFydERlbGV0ZSA9IGlubmVyRnJhbWUtPmVkaXRvcigpLT5zbWFydEluc2VydERl
bGV0ZUVuYWJsZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgJKHJl
dmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgUmFuZ2U7CiAgICAgY2xhc3MgU2VsZWN0aW9uQ29udHJvbGxlcjsKICAgICAKKyAgICBl
bnVtIERyYWdDb250cm9sbGVyQWN0aW9uIHsKKyAgICAgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25F
bnRlcmVkID0gMCwKKyAgICAgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVkID0gMSwKKyAg
ICAgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FeGl0ZWQgPSAyLAorICAgICAgICBEcmFnQ29udHJv
bGxlckFjdGlvblBlcmZvcm1EcmFnID0gMworICAgIH07CisgICAgCiAgICAgY2xhc3MgRHJhZ0Nv
bnRyb2xsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKICAgICAgICAgRHJh
Z0NvbnRyb2xsZXIoUGFnZSosIERyYWdDbGllbnQqKTsKQEAgLTk5LDggKzEwNiw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCB0cnlESFRNTERyYWcoRHJhZ0RhdGEqLCBEcmFn
T3BlcmF0aW9uJik7CiAgICAgICAgIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbihEcmFnRGF0
YSopOwogICAgICAgICB2b2lkIGNhbmNlbERyYWcoKTsKLSAgICAgICAgYm9vbCBkcmFnSXNNb3Zl
KFNlbGVjdGlvbkNvbnRyb2xsZXIqKTsKLSAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKCk7Cisg
ICAgICAgIGJvb2wgZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiwgRHJhZ0RhdGEqKTsK
KyAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKERyYWdEYXRhKik7CiAKICAgICAgICAgdm9pZCBt
b3VzZU1vdmVkSW50b0RvY3VtZW50KERvY3VtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3BwCShyZXZp
c2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxl
ckFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCitib29s
IERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJhZ0NvbnRyb2xsZXJC
cmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJhZ0NvbnRy
b2xsZXJCcmV3LmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Jy
ZXcvRHJhZ0NvbnRyb2xsZXJCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiBjb25zdCBmbG9hdCBE
cmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAogCi1ib29sIERyYWdDb250
cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURv
d24oRHJhZ0RhdGEqKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNw
cAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0RyYWdD
b250cm9sbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIERy
YWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXQKICAgICByZXR1cm4gZHJhZ0Rh
dGEtPmNvbnRhaW5zVVJMKDApICYmICFtX2RpZEluaXRpYXRlRHJhZyA/IERyYWdPcGVyYXRpb25D
b3B5IDogRHJhZ09wZXJhdGlvbk5vbmU7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29w
eUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSop
CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBPUyBzcGVjaWZpYy4gIERlbGVn
YXRlIHRvIHRoZSBlbWJlZGRlciBpbnN0ZWFkLgogI2lmIE9TKFdJTkRPV1MpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJFZmwuY3BwCShyZXZpc2lvbiA3
NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0RyYWdDb250cm9sbGVyRWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6
OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VB
bHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKK2Jv
b2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oRHJhZ0RhdGEqKQogewogICAgIHJldHVy
biBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVy
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29udHJv
bGxlckd0ay5jcHAJKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ndGsv
RHJhZ0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGNv
bnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b20KIAogY29uc3QgZmxvYXQgRHJh
Z0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7CiAKLWJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmlzQ29weUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihE
cmFnRGF0YSopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9oYWlrdS9EcmFnQ29udHJvbGxlckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwCShyZXZpc2lvbiA3NTY2
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY29uc3QgaW50IERyYWdDb250cm9sbGVy
OjpEcmFnSWNvbkJvdHRvbQogY29uc3QgZmxvYXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFs
cGhhID0gMC43NWY7CiAKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCiti
b29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICBpZiAo
bW9kaWZpZXJzKCkgJiBCX0NPTU1BTkRfS0VZKQogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxOSArNDIsMjAgQEAgY29uc3QgaW50IERyYWdDb250cm9s
bGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0lt
YWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigp
Citib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKiBkcmFnRGF0YSkK
IHsKLSAgICByZXR1cm4gW1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdICYgTlNB
bHRlcm5hdGVLZXlNYXNrOworICAgIHJldHVybiBkcmFnRGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBs
aWNhdGlvbklzQ29weUtleURvd247CiB9CiAgICAgCiBEcmFnT3BlcmF0aW9uIERyYWdDb250cm9s
bGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKIHsKICAgICBBU1NFUlQoZHJh
Z0RhdGEpOwotICAgIGlmIChbTlNBcHAgbW9kYWxXaW5kb3ddIHx8ICFkcmFnRGF0YS0+Y29udGFp
bnNVUkwobV9wYWdlLT5tYWluRnJhbWUoKSkpCisKKyAgICBpZiAoKGRyYWdEYXRhLT5mbGFncygp
ICYgRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbCkgfHwgIWRyYWdEYXRhLT5jb250YWluc1VSTChtX3Bh
Z2UtPm1haW5GcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwogCi0g
ICAgaWYgKCFtX2RvY3VtZW50VW5kZXJNb3VzZSB8fCAoIVtbbV9wYWdlLT5tYWluRnJhbWUoKS0+
dmlldygpLT5nZXRPdXRlclZpZXcoKSB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdIAotICAgICAgICAm
JiBbZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpIGRyYWdnaW5nU291cmNlXSAhPSBtX3BhZ2UtPm1h
aW5GcmFtZSgpLT52aWV3KCktPmdldE91dGVyVmlldygpKSkKKyAgICBpZiAoIW1fZG9jdW1lbnRV
bmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLT5mbGFncygpICYgRHJhZ0FwcGxpY2F0aW9uSGFzQXR0
YWNoZWRTaGVldCkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIShkcmFn
RGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzU291cmNlKSkpCiAgICAgICAgIHJldHVy
biBEcmFnT3BlcmF0aW9uQ29weTsKIAogICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRHJhZ0NvbnRyb2xsZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0LmNwcAkocmV2aXNp
b24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0RyYWdDb250cm9sbGVyUXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNvbnN0IGludCBEcmFnQ29udHJvbGxl
cjo6RHJhZ0ljb25Cb3R0b20KIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VB
bHBoYSA9IDAuNzVmOwogCiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oKQor
Ym9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xs
ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0RyYWdDb250
cm9sbGVyV2luLmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dp
bi9EcmFnQ29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAg
RHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdAogICAgIHJldHVybiBkcmFn
RGF0YS0+Y29udGFpbnNVUkwoMCkgJiYgIW1fZGlkSW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlv
bkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXND
b3B5S2V5RG93bigpCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRh
KikKIHsKICAgICByZXR1cm4gOjpHZXRBc3luY0tleVN0YXRlKFZLX0NPTlRST0wpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS93eC9EcmFnQ29udHJvbGxlcld4LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0RyYWdDb250cm9sbGVyV3guY3BwCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd3gvRHJhZ0NvbnRyb2xsZXJXeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY29uc3QgaW50IERyYWdDb250cm9sbGVy
OjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdl
QWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCiti
b29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0RhdGEuaAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9E
cmFnRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCwxMCBAQAogI2ltcG9ydCA8Rm91
bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxBcHBLaXQvTlNEcmFnZ2luZy5oPgogdHlw
ZWRlZiBpZCA8TlNEcmFnZ2luZ0luZm8+IERyYWdEYXRhUmVmOworQGNsYXNzIE5TUGFzdGVib2Fy
ZDsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIERyYWdEYXRhUmVmOworY2xhc3MgTlNQYXN0ZWJvYXJk
OwogI2VuZGlmCiAjZWxpZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFDRQpAQCAtNzIs
MTIgKzc0LDI3IEBAIGNsYXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBLVVJMOwogY2xhc3Mg
UmFuZ2U7CiAKK2VudW0gRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgeworICAgIERyYWdBcHBsaWNhdGlv
bk5vbmUgPSAwLAorICAgIERyYWdBcHBsaWNhdGlvbklzTW9kYWwgPSAxLAorICAgIERyYWdBcHBs
aWNhdGlvbklzU291cmNlID0gMiwKKyAgICBEcmFnQXBwbGljYXRpb25IYXNBdHRhY2hlZFNoZWV0
ID0gNCwKKyAgICBEcmFnQXBwbGljYXRpb25Jc0NvcHlLZXlEb3duID0gOAorfTsKKyAgICAKIGNs
YXNzIERyYWdEYXRhIHsKIHB1YmxpYzoKICAgICBlbnVtIEZpbGVuYW1lQ29udmVyc2lvblBvbGlj
eSB7IERvTm90Q29udmVydEZpbGVuYW1lcywgQ29udmVydEZpbGVuYW1lcyB9OwogCiAgICAgLy8g
Y2xpZW50UG9zaXRpb24gaXMgdGFrZW4gdG8gYmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFnIGV2
ZW50IHdpdGhpbiB0aGUgdGFyZ2V0IHdpbmRvdywgd2l0aCAoMCwwKSBhdCB0aGUgdG9wIGxlZnQK
KyNpZiBQTEFURk9STShNQUMpCisgICAgRHJhZ0RhdGEoRHJhZ0RhdGFSZWYsIGNvbnN0IEludFBv
aW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFn
T3BlcmF0aW9uIG9wZXJhdGlvbiwgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MpOworICAgIERy
YWdEYXRhKGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBJbnRQb2ludCYgY2xp
ZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgRHJhZ09wZXJhdGlv
biBvcGVyYXRpb24sIERyYWdBcHBsaWNhdGlvbkZsYWdzIGZsYWdzKTsKKyAgICBEcmFnQXBwbGlj
YXRpb25GbGFncyBmbGFncygpIHsgcmV0dXJuIG1fYXBwbGljYXRpb25GbGFnczsgfQorI2Vsc2UK
ICAgICBEcmFnRGF0YShEcmFnRGF0YVJlZiwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9u
LCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24gb3BlcmF0aW9u
KTsKKyAgICBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncygpIHsgcmV0dXJuIERyYWdBcHBsaWNh
dGlvbk5vbmU7IH0KKyNlbmRpZgogICAgIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50UG9zaXRpb247IH0KICAgICBjb25zdCBJbnRQb2ludCYg
Z2xvYmFsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9uOyB9CiAgICAg
RHJhZ0RhdGFSZWYgcGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybURyYWdE
YXRhOyB9CkBAIC05OSw2ICsxMTYsMTAgQEAgcHJpdmF0ZToKICAgICBJbnRQb2ludCBtX2dsb2Jh
bFBvc2l0aW9uOwogICAgIERyYWdEYXRhUmVmIG1fcGxhdGZvcm1EcmFnRGF0YTsKICAgICBEcmFn
T3BlcmF0aW9uIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrOworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBOU1Bhc3RlYm9hcmQqIG1fcGFzdGVib2FyZDsKKyAgICBEcmFnQXBwbGljYXRpb25G
bGFncyBtX2FwcGxpY2F0aW9uRmxhZ3M7CisjZW5kaWYKIH07CiAgICAgCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCShyZXZpc2lvbiA3NTY2MikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzgsMzQgKzM4LDQ3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERyYWdEYXRh
OjpEcmFnRGF0YShEcmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRp
b24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgCi0gICAgRHJhZ09wZXJhdGlvbiBz
b3VyY2VPcGVyYXRpb25NYXNrKQorICAgIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFz
aywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgOiBtX2NsaWVudFBvc2l0aW9uKGNs
aWVudFBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKICAg
ICAsIG1fcGxhdGZvcm1EcmFnRGF0YShkYXRhKQogICAgICwgbV9kcmFnZ2luZ1NvdXJjZU9wZXJh
dGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKKyAgICAsIG1fYXBwbGljYXRpb25GbGFncyhm
bGFncykKIHsKKyAgICBtX3Bhc3RlYm9hcmQgPSBbbV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5n
UGFzdGVib2FyZF07Cit9CisKK0RyYWdEYXRhOjpEcmFnRGF0YShjb25zdCBTdHJpbmcmIGRyYWdT
dG9yYWdlTmFtZSwgIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9p
bnQmIGdsb2JhbFBvc2l0aW9uLAorICAgIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uTWFz
aywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MpCisgICAgOiBtX2NsaWVudFBvc2l0aW9uKGNs
aWVudFBvc2l0aW9uKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbikKKyAg
ICAsIG1fcGxhdGZvcm1EcmFnRGF0YSgwKQorICAgICwgbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlv
bk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKKyAgICAsIG1fYXBwbGljYXRpb25GbGFncyhmbGFn
cykKK3sKKyAgICBtX3Bhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFt
ZTpkcmFnU3RvcmFnZU5hbWVdOwogfQogICAgIAogYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBs
YWNlKCkgY29uc3QKIHsKICAgICAvL05lZWQgdG8gY2FsbCB0aGlzIHNvIHRoYXQgdGhlIHZhcmlv
dXMgUGFzdGVib2FyZCB0eXBlIHN0cmluZ3MgYXJlIGludGlhbGlzZWQKICAgICBQYXN0ZWJvYXJk
OjpnZW5lcmFsUGFzdGVib2FyZCgpOwotICAgIHJldHVybiBbW1ttX3BsYXRmb3JtRHJhZ0RhdGEg
ZHJhZ2dpbmdQYXN0ZWJvYXJkXSB0eXBlc10gY29udGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBi
b2FyZFR5cGVdOworICAgIHJldHVybiBbW21fcGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmpl
Y3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWlu
c0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW1tbbV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdn
aW5nUGFzdGVib2FyZF0gdHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQ29sb3JQYm9hcmRUeXBlXTsK
KyAgICByZXR1cm4gW1ttX3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TQ29sb3JQ
Ym9hcmRUeXBlXTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxlcygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIFtbW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3RlYm9hcmRdIHR5
cGVzXSBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdOworICAgIHJldHVybiBb
W21fcGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBl
XTsKIH0KIAogdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3Vs
dCkgY29uc3QKIHsKLSAgICBOU0FycmF5ICpmaWxlbmFtZXMgPSBbW21fcGxhdGZvcm1EcmFnRGF0
YSBkcmFnZ2luZ1Bhc3RlYm9hcmRdIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9h
cmRUeXBlXTsKKyAgICBOU0FycmF5ICpmaWxlbmFtZXMgPSBbbV9wYXN0ZWJvYXJkIHByb3BlcnR5
TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXTsKICAgICBOU0VudW1lcmF0b3IgKmZp
bGVFbnVtZXJhdG9yID0gW2ZpbGVuYW1lcyBvYmplY3RFbnVtZXJhdG9yXTsKICAgICAKICAgICB3
aGlsZSAoTlNTdHJpbmcgKmZpbGVuYW1lID0gW2ZpbGVFbnVtZXJhdG9yIG5leHRPYmplY3RdKQpA
QCAtNzQsMTkgKzg3LDE4IEBAIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJp
bmcKIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAogewotICAgIE5T
UGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQYXN0
ZWJvYXJkXTsKLSAgICBOU0FycmF5ICp0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKKyAgICBO
U0FycmF5ICp0eXBlcyA9IFttX3Bhc3RlYm9hcmQgdHlwZXNdOwogICAgIAogICAgIHJldHVybiBb
dHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSAKICAgICAgICAgfHwgW3R5
cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdCiAgICAgICAgIHx8IFt0eXBlcyBj
b250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdCiAgICAgICAgIHx8IFt0eXBlcyBjb250YWlu
c09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdCi0gICAgICAgIHx8IFtOU1VSTCBVUkxGcm9t
UGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICAgICAgfHwgW05TVVJMIFVSTEZyb21QYXN0ZWJv
YXJkOm1fcGFzdGVib2FyZF07CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoRnJh
bWUgKmZyYW1lKSBjb25zdAogewotICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChbbV9wbGF0Zm9y
bURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0pOworICAgIFBhc3RlYm9hcmQgcGFzdGVib2Fy
ZChtX3Bhc3RlYm9hcmQpOwogICAgIHJldHVybiBwYXN0ZWJvYXJkLnBsYWluVGV4dChmcmFtZSk7
CiB9CiAKQEAgLTExMyw4ICsxMjUsNyBAQCBzdGF0aWMgTlNBcnJheSAqaW5zZXJ0YWJsZVBhc3Rl
Ym9hcmRUeXBlCiAgICAgCiBib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50
KCkgY29uc3QKIHsKLSAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbbV9wbGF0Zm9ybURy
YWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF07Ci0gICAgTlNNdXRhYmxlU2V0ICp0eXBlcyA9IFtO
U011dGFibGVTZXQgc2V0V2l0aEFycmF5OltwYXN0ZWJvYXJkIHR5cGVzXV07CisgICAgTlNNdXRh
YmxlU2V0ICp0eXBlcyA9IFtOU011dGFibGVTZXQgc2V0V2l0aEFycmF5OlttX3Bhc3RlYm9hcmQg
dHlwZXNdXTsKICAgICBbdHlwZXMgaW50ZXJzZWN0U2V0OltOU1NldCBzZXRXaXRoQXJyYXk6aW5z
ZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcygpXV07CiAgICAgcmV0dXJuIFt0eXBlcyBjb3VudF0gIT0g
MDsKIH0KQEAgLTEzMywxMyArMTQ0LDEzIEBAIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJhbWUq
IGZyYW1lLCBGaWwKICAgICAgICAgaWYgKE5TU3RyaW5nICpVUkxUaXRsZVN0cmluZyA9IFtbbV9w
bGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0gc3RyaW5nRm9yVHlwZTpXZWJVUkxO
YW1lUGJvYXJkVHlwZV0pCiAgICAgICAgICAgICAqdGl0bGUgPSBVUkxUaXRsZVN0cmluZzsKICAg
ICB9Ci0gICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKFttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dp
bmdQYXN0ZWJvYXJkXSk7CisgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKG1fcGFzdGVib2FyZCk7
CiAgICAgcmV0dXJuIHBhc3RlYm9hcmQuYXNVUkwoZnJhbWUpOwogfQogCiBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1Jl
ZlB0cjxSYW5nZT4gcmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5U
ZXh0KSBjb25zdAogewotICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChbbV9wbGF0Zm9ybURyYWdE
YXRhIGRyYWdnaW5nUGFzdGVib2FyZF0pOworICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChtX3Bh
c3RlYm9hcmQpOwogICAgIAogICAgIHJldHVybiBwYXN0ZWJvYXJkLmRvY3VtZW50RnJhZ21lbnQo
ZnJhbWUsIHJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOwogfQpJbmRleDog
V2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDc1NjY2KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSw0OSBAQAorMjAxMS0wMS0xMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdDI6
IEFkZCBzdXBwb3J0IGZvciBkcmFnIGFuZCBkcm9wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjM0MworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzY2
MDU1OD4KKyAgICAgICAgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGNvbnRhaW5zIHRoZSBj
aGFuZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgZHJvcHBpbmcgY29udGVudAorICAgICAgICBpbiBX
ZWJLaXQgb24gdGhlIE1hYy4gVGhlIERyYWdEYXRhIGNsYXNzIGhhcyBiZWVuIGV4dGVuZGVkIHRv
IHByb3ZpZGUKKyAgICAgICAgYWRkaXRpb25hbCBjb250ZXh0IGZyb20gdGhlIGFwcGxpY2F0aW9u
IChrZXlib2FyZCBzdGF0ZSwgbW9kYWwgd2luZG93cywgZXRjLikKKyAgICAgICAgYXMgd2VsbCBh
cyBpbmZvcm1hdGlvbiBvZiB0aGUgZHJhZyBwYXN0ZWJvYXJkIGJlaW5nIHVzZWQuCisgICAgICAg
IFRoZSBzdXBwb3J0IGZvciBXZWJLaXQgYXMgZHJhZyBzb3VyY2Ugd2lsbCBiZSBhZGRlZCB3aXRo
IGEgc2VwYXJhdGUgcGF0Y2guCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcu
bW06CisgICAgICAgIEFkZGVkIGltcGxlbWVudGlvbiBvZiB0aGUgbWV0aG9kcyByZXF1aXJlZCB0
byBhZGQgc3Vwb3J0IGZvciBhIGRyb3AgdGFyZ2V0LgorICAgICAgICBUbyBtYWludGFpbiBhc3lu
Y2hyb25vdXMgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBXZWJQcm9jZXNzLCB3ZSBhbHdheXMgcmV0
dXJuCisgICAgICAgIHRoZSBwcmV2aW91cyBjYWxjdWxhdGVkIHZhbHVlIGZvciB0aGUgZHJhZyBv
cGVyYXRpb24uCisgICAgICAgICgrW1dLVmlldyBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc10p
OgorICAgICAgICAoLVtXS1ZpZXcgX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzXSk6CisgICAgICAgICgt
W1dLVmlldyBpbml0V2l0aEZyYW1lOmNvbnRleHRSZWY6cGFnZUdyb3VwUmVmOl0pOgorICAgICAg
ICAoLVtXS1ZpZXcgYXBwbGljYXRpb25GbGFnczpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdn
aW5nRW50ZXJlZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nVXBkYXRlZDpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRXhpdGVkOl0pOgorICAgICAgICAoLVtXS1ZpZXcgcHJl
cGFyZUZvckRyYWdPcGVyYXRpb246XSk6CisgICAgICAgICgtW1dLVmlldyBwZXJmb3JtRHJhZ09w
ZXJhdGlvbjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
cmVzZXREcmFnT3BlcmF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6d2ls
bFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVu
dDo6YWN0aW9uTWFza0ZvckRyYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50Ojpk
cmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Ns
aWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMS0wMS0xMiAgQmV0
aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJz
IENhcmxzc29uLgpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA3
NTY2MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJXZWJQcm90ZWN0aW9uU3BhY2UuaCIKICNp
bmNsdWRlICJXZWJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+CkBAIC0xMjQsNiArMTI1LDcgQEAgV2ViUGFnZVByb3h5
OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVudCogcAogICAgICwgbV9oYXNTcGVsbERvY3VtZW50VGFn
KGZhbHNlKQogICAgICwgbV9wZW5kaW5nTGVhcm5Pcklnbm9yZVdvcmRNZXNzYWdlQ291bnQoMCkK
ICAgICAsIG1fbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24oZmFsc2UpCisgICAgLCBt
X2N1cnJlbnREcmFnT3BlcmF0aW9uKERyYWdPcGVyYXRpb25Ob25lKQogewogI2lmbmRlZiBOREVC
VUcKICAgICB3ZWJQYWdlUHJveHlDb3VudGVyLmluY3JlbWVudCgpOwpAQCAtNTg4LDYgKzU5MCwx
OCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWN0dWFsVmlzaWJsZUNvbnRlCiB9CiAjZW5kaWYK
IAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKiBkcmFnRGF0
YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OlBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLT5jbGllbnRQb3Np
dGlvbigpLCBkcmFnRGF0YS0+Z2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEtPmRyYWdnaW5nU291
cmNlT3BlcmF0aW9uTWFzaygpLCBkcmFnU3RvcmFnZU5hbWUsIGRyYWdEYXRhLT5mbGFncygpKSwg
bV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURyYWdDb250cm9s
bGVyQWN0aW9uKHVpbnQ2NF90IHJlc3VsdE9wZXJhdGlvbikKK3sKKyAgICBtX2N1cnJlbnREcmFn
T3BlcmF0aW9uID0gKERyYWdPcGVyYXRpb24pcmVzdWx0T3BlcmF0aW9uOworfQorCiB2b2lkIFdl
YlBhZ2VQcm94eTo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkK
IHsKICAgICBpZiAoIWlzVmFsaWQoKSkKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShy
ZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw4IEBACiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHku
aCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRDbGllbnQuaCIKICNpbmNsdWRlICJXZWJVSUNs
aWVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0FjdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0RyYWdDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0QWN0aW9uLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVy
VHlwZXMuaD4KQEAgLTc0LDYgKzc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVj
dCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiAgICAgc3RydWN0IFZpZXdwb3J0QXJndW1lbnRzOwogICAg
IHN0cnVjdCBXaW5kb3dGZWF0dXJlczsKKyAgICBjbGFzcyBEcmFnRGF0YTsKIH0KIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC0yNjksNiArMjcyLDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYmFj
a0ZvcndhcmRSZW1vdmVkSXRlbSh1aW50NjRfdCBpdGVtSUQpOwogCisgICAgLy8gRHJhZyBhbmQg
ZHJvcCBzdXBwb3J0LgorICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKFdlYkNv
cmU6OkRyYWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmlu
ZyYpOworICAgIHZvaWQgZGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IHJl
c3VsdE9wZXJhdGlvbik7CisKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNv
bm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rlciop
OwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBD
b3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIENvcmVJUEM6OkFy
Z3VtZW50RW5jb2RlciopOwogCkBAIC0yOTQsNiArMzAxLDkgQEAgcHVibGljOgogICAgIFdlYlBh
Z2VHcm91cCogcGFnZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlR3JvdXAuZ2V0KCk7IH0K
IAogICAgIGJvb2wgaXNWYWxpZCgpOworICAgIAorICAgIFdlYkNvcmU6OkRyYWdPcGVyYXRpb24g
ZHJhZ09wZXJhdGlvbigpIHsgcmV0dXJuIG1fY3VycmVudERyYWdPcGVyYXRpb247IH0KKyAgICB2
b2lkIHJlc2V0RHJhZ09wZXJhdGlvbigpIHsgbV9jdXJyZW50RHJhZ09wZXJhdGlvbiA9IFdlYkNv
cmU6OkRyYWdPcGVyYXRpb25Ob25lOyB9CiAKICAgICAvLyBSRU1PVkU6IEZvciBkZW1vIHB1cnBv
c2VzIG9ubHkuCiAgICAgY29uc3QgU3RyaW5nJiB1cmxBdFByb2Nlc3NFeGl0KCkgY29uc3QgeyBy
ZXR1cm4gbV91cmxBdFByb2Nlc3NFeGl0OyB9CkBAIC01OTAsOCArNjAwLDkgQEAgcHJpdmF0ZToK
ICAgICBpbnQ2NF90IG1fc3BlbGxEb2N1bWVudFRhZzsKICAgICBib29sIG1faGFzU3BlbGxEb2N1
bWVudFRhZzsKICAgICB1bnNpZ25lZCBtX3BlbmRpbmdMZWFybk9ySWdub3JlV29yZE1lc3NhZ2VD
b3VudDsKLQorICAgIAogICAgIGJvb2wgbV9tYWluRnJhbWVIYXNDdXN0b21SZXByZXNlbnRhdGlv
bjsKKyAgICBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIG1fY3VycmVudERyYWdPcGVyYXRpb247CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1NjYyKQorKysgV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNCArMTg2
LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBHZXRHdWVzc2VzRm9yV29yZChX
VEY6OlN0cmluZyB3b3JkLCBXVEY6OlN0cmluZyBjb250ZXh0KSAtPiAoVmVjdG9yPFdURjo6U3Ry
aW5nPiBndWVzc2VzKQogICAgIExlYXJuV29yZChXVEY6OlN0cmluZyB3b3JkKTsKICAgICBJZ25v
cmVXb3JkKFdURjo6U3RyaW5nIHdvcmQpOworICAgIAorICAgICMgRHJhZyBhbmQgZHJvcC4KKyAg
ICBEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgcmVzdWx0T3BlcmF0aW9u
KQogfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDc1NjYy
KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTUwLDkgKzUwLDEyIEBACiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBv
cnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9E
cmFnRGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSW50UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9y
bVNjcmVlbi5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDx3
dGYvUmVmUHRyLmg+CkBAIC0xNTQsNiArMTU3LDM4IEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5T
UmVjdClmcmFtZSBjb250ZXgKICAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhGcmFtZTpmcmFtZSBj
b250ZXh0UmVmOmNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOm5pbF07CiB9CiAKK05TU3RyaW5nICpX
ZWJBcmNoaXZlUGJvYXJkVHlwZSA9IEAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVib2FyZCB0eXBl
IjsKK05TU3RyaW5nICpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUgPSBAIldlYlVSTHNXaXRo
VGl0bGVzUGJvYXJkVHlwZSI7CitOU1N0cmluZyAqV2ViVVJMUGJvYXJkVHlwZSA9IEAicHVibGlj
LnVybCI7CitOU1N0cmluZyAqV2ViVVJMTmFtZVBib2FyZFR5cGUgPSBAInB1YmxpYy51cmwtbmFt
ZSI7CisKKysgKE5TQXJyYXkgKilfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcworeworICAgIHN0
YXRpYyBOU0FycmF5ICp0eXBlcyA9IG5pbDsKKyAgICBpZiAoIXR5cGVzKSB7CisgICAgICAgIHR5
cGVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6V2ViQXJjaGl2ZVBib2FyZFR5
cGUsIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgTlNUSUZGUGJvYXJk
VHlwZSwgTlNQREZQYm9hcmRUeXBlLAorI2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8
IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgICAgICAgTlNQSUNUUGJv
YXJkVHlwZSwKKyNlbmRpZgorICAgICAgICAgICAgICAgICBOU1VSTFBib2FyZFR5cGUsIE5TUlRG
RFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBOU0NvbG9y
UGJvYXJkVHlwZSwga1VUVHlwZVBORywgbmlsXTsKKyAgICAgICAgQ0ZSZXRhaW4odHlwZXMpOwor
ICAgIH0KKyAgICByZXR1cm4gdHlwZXM7Cit9CisKKy0gKHZvaWQpX3JlZ2lzdGVyRHJhZ2dlZFR5
cGVzCit7CisgICAgTlNBcnJheSAqZWRpdGFibGVUeXBlcyA9IFtXS1ZpZXcgX2luc2VydGFibGVQ
YXN0ZWJvYXJkVHlwZXNdOworICAgIE5TQXJyYXkgKlVSTFR5cGVzID0gW05TQXJyYXkgYXJyYXlX
aXRoT2JqZWN0czogV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2FyZFR5cGUs
IFdlYlVSTFBib2FyZFR5cGUsICBXZWJVUkxOYW1lUGJvYXJkVHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nUGJvYXJkVHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbF07CisgICAgTlNNdXRhYmxlU2V0
ICp0eXBlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0V2l0aEFycmF5OmVkaXRhYmxlVHlw
ZXNdOworICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OlVSTFR5cGVzXTsKKyAgICBbc2Vs
ZiByZWdpc3RlckZvckRyYWdnZWRUeXBlczpbdHlwZXMgYWxsT2JqZWN0c11dOworICAgIFt0eXBl
cyByZWxlYXNlXTsKK30KKwogLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGNvbnRl
eHRSZWY6KFdLQ29udGV4dFJlZiljb250ZXh0UmVmIHBhZ2VHcm91cFJlZjooV0tQYWdlR3JvdXBS
ZWYpcGFnZUdyb3VwUmVmCiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1l
XTsKQEAgLTE3Niw2ICsyMTEsOCBAQCAtIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUg
Y29udGV4CiAgICAgX2RhdGEtPl9wYWdlID0gdG9JbXBsKGNvbnRleHRSZWYpLT5jcmVhdGVXZWJQ
YWdlKF9kYXRhLT5fcGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cFJlZikpOwogICAg
IF9kYXRhLT5fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKIAorICAgIFtzZWxmIF9yZWdpc3Rl
ckRyYWdnZWRUeXBlc107CisKICAgICBXZWJDb250ZXh0OjpzdGF0aXN0aWNzKCkud2tWaWV3Q291
bnQrKzsKIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKQEAgLTk3Nyw2
ICsxMDE0LDYyIEBAIC0gKE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooTlMKICAg
ICByZXR1cm4gcmVzdWx0UmVjdDsKIH0KIAorLSAoRHJhZ0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGlj
YXRpb25GbGFnczooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sKKyAgICB1aW50
MzJfdCBmbGFncyA9IDA7CisgICAgaWYgKFtOU0FwcCBtb2RhbFdpbmRvd10pCisgICAgICAgIGZs
YWdzID0gRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbDsKKyAgICBpZiAoW1tzZWxmIHdpbmRvd10gYXR0
YWNoZWRTaGVldF0pCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbkhhc0F0dGFjaGVk
U2hlZXQ7CisgICAgaWYgKFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VdID09IHNlbGYpCisg
ICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzU291cmNlOworICAgIGlmIChbW05TQXBw
IGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10gJiBOU0FsdGVybmF0ZUtleU1hc2spCisgICAg
ICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAgcmV0dXJuIChE
cmFnQXBwbGljYXRpb25GbGFncylmbGFnczsKK30KKworLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdn
aW5nRW50ZXJlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sKKyAgICBJbnRQ
b2ludCBjbGllbnQoW3NlbGYgY29udmVydFBvaW50OltkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2Nh
dGlvbl0gZnJvbVZpZXc6bmlsXSk7CisgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKKyAgICBEcmFn
RGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCAoRHJhZ09wZXJhdGlv
bilbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10sIFtzZWxmIGFwcGxp
Y2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7CisgICAgCisgICAgX2RhdGEtPl9wYWdlLT5wZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVkLCAmZHJh
Z0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAgIHJl
dHVybiBOU0RyYWdPcGVyYXRpb25Db3B5OworfQorCistIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dp
bmdVcGRhdGVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIEludFBv
aW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0
aW9uXSBmcm9tVmlldzpuaWxdKTsKKyAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2Ry
YWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOworICAgIERyYWdE
YXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9u
KVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSwgW3NlbGYgYXBwbGlj
YXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EcmFn
Q29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvblVwZGF0ZWQsICZkcmFnRGF0YSwg
W1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CisgICAgcmV0dXJuIF9k
YXRhLT5fcGFnZS0+ZHJhZ09wZXJhdGlvbigpOworfQorCistICh2b2lkKWRyYWdnaW5nRXhpdGVk
OihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIEludFBvaW50IGNsaWVu
dChbc2VsZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9t
VmlldzpuaWxdKTsKKyAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5m
byBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOworICAgIERyYWdEYXRhIGRyYWdE
YXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9uKVtkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSwgW3NlbGYgYXBwbGljYXRpb25GbGFn
czpkcmFnZ2luZ0luZm9dKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EcmFnQ29udHJvbGxl
ckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbkV4aXRlZCwgJmRyYWdEYXRhLCBbW2RyYWdnaW5n
SW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnJlc2V0
RHJhZ09wZXJhdGlvbigpOworfQorCistIChCT09MKXByZXBhcmVGb3JEcmFnT3BlcmF0aW9uOihp
ZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIHJldHVybiBZRVM7Cit9CisK
Ky0gKEJPT0wpcGVyZm9ybURyYWdPcGVyYXRpb246KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dp
bmdJbmZvCit7CisgICAgSW50UG9pbnQgY2xpZW50KFtzZWxmIGNvbnZlcnRQb2ludDpbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dIGZyb21WaWV3Om5pbF0pOworICAgIEludFBvaW50IGds
b2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3
aW5kb3ddKSk7CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGds
b2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlv
bk1hc2tdLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOworICAgIF9kYXRh
LT5fcGFnZS0+cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9u
UGVyZm9ybURyYWcsICZkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJk
XSBuYW1lXSk7CisgICAgcmV0dXJuIFlFUzsKK30KKwogLSAodm9pZClfdXBkYXRlV2luZG93Vmlz
aWJpbGl0eQogewogICAgIF9kYXRhLT5fcGFnZS0+dXBkYXRlV2luZG93SXNWaXNpYmxlKCFbW3Nl
bGYgd2luZG93XSBpc01pbmlhdHVyaXplZF0pOwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkocmV2aXNpb24gNzU2NjIp
CisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDI5ICszNCwyNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
dm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFn
RGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFn
U291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCopCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAogRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmFj
dGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rpb25Ob25lOworICAgIHJldHVybiBEcmFnRGVzdGlu
YXRpb25BY3Rpb25Bbnk7CiB9CiAKIERyYWdTb3VyY2VBY3Rpb24gV2ViRHJhZ0NsaWVudDo6ZHJh
Z1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRHJhZ1NvdXJjZUFjdGlvbk5vbmU7
CisgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKIHZvaWQgV2ViRHJhZ0NsaWVu
dDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2lu
dCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCiBEcmFnSW1hZ2VSZWYgV2ViRHJhZ0NsaWVudDo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayhL
VVJMJiwgY29uc3QgU3RyaW5nJiwgRnJhbWUqKQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDc1NjYyKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3Vt
ZW50TG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FdmVu
dEhhbmRsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWUuaD4KQEAgLTEyNTAsNiArMTI1MSwzNiBAQCBib29sIFdlYlBhZ2U6
OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50CiB9CiAjZW5kaWYKIAordm9pZCBXZWJQYWdlOjpw
ZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQ
b2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVp
bnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzKQoreworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdT
dG9yYWdlTmFtZSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCAoRHJhZ09wZXJhdGlv
bilkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIChEcmFnQXBwbGljYXRpb25GbGFncylmbGFn
cyk7CisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpEcmFnQ29u
dHJvbGxlckFjdGlvbkVudGVyZWQ6CisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9s
bGVyKCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVkOgorICAgICAg
ICAgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ09wZXJhdGlvbk5vbmUp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24obV9wYWdlLT5kcmFnQ29udHJvbGxlcigp
LT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIFdlYkNvcmU6OkRyYWdDb250cm9sbGVyQWN0aW9uRXhpdGVkOgor
ICAgICAgICAgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgV2ViQ29yZTo6RHJh
Z0NvbnRyb2xsZXJBY3Rpb25QZXJmb3JtRHJhZzoKKyAgICAgICAgICAgIG1fcGFnZS0+ZHJhZ0Nv
bnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKIFdlYkVkaXRDb21tYW5kKiBXZWJQYWdlOjp3ZWJFZGl0Q29tbWFuZCh1aW50NjRfdCBj
b21tYW5kSUQpCiB7CiAgICAgcmV0dXJuIG1fZWRpdENvbW1hbmRNYXAuZ2V0KGNvbW1hbmRJRCku
Z2V0KCk7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiA3
NTY2MikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjk4LDYgKzI5OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCByZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCwgV2ViQ29yZTo6SW50
UG9pbnQsIFdlYkNvcmU6OkludFBvaW50LCB1aW50NjRfdCwgY29uc3QgV1RGOjpTdHJpbmcmLCB1
aW50MzJfdCk7CiAKICAgICBib29sIG1haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uKCkg
Y29uc3Q7CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgkocmV2aXNpb24gNzU2NjIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw4IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIEhpZGVGaW5kVUkoKQogICAgIENvdW50U3RyaW5nTWF0
Y2hlcyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90IGZpbmRPcHRpb25zLCB1bnNpZ25lZCBt
YXhNYXRjaENvdW50KQogCisgICAgIyBEcmFnIGFuZCBkcm9wLgorICAgIFBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBv
c2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6OlN0cmluZyBkcmFnU3RvcmFnZU5hbWUsIHVpbnQz
Ml90IGZsYWdzKQogICAgICMgUG9wdXAgbWVudS4KICAgICBEaWRDaGFuZ2VTZWxlY3RlZEluZGV4
Rm9yQWN0aXZlUG9wdXBNZW51KGludDMyX3QgbmV3SW5kZXgpOwogICAgIFNldFRleHRGb3JBY3Rp
dmVQb3B1cE1lbnUoaW50MzJfdCBpbmRleCk7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNzU2NjIpCisrKyBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEx
LTAxLTEyICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0MjogQWRkIHN1cHBvcnQg
Zm9yIGRyYWcgYW5kIGRyb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUyMzQzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NjYwNTU4PgorICAgICAg
ICAKKyAgICAgICAgVGhlIERyYWdEYXRhIGNsYXNzIGhhcyBiZWVuIGV4dGVuZGVkIHRvIHByb3Zp
ZGUKKyAgICAgICAgYWRkaXRpb25hbCBjb250ZXh0IGZyb20gdGhlIGFwcGxpY2F0aW9uIChrZXli
b2FyZCBzdGF0ZSwgbW9kYWwgd2luZG93cywgZXRjLikKKyAgICAgICAgYXMgd2VsbCBhcyBpbmZv
cm1hdGlvbiBvZiB0aGUgZHJhZyBwYXN0ZWJvYXJkIGJlaW5nIHVzZWQuCisgICAgICAgIFRoZXNl
IGFyZSB0aGUgY2hhbmdlcyB0byBhbGlnbiB0aGUgYmVoYXZpb3IgZm9yIFdlYktpdC4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBhcHBsaWNhdGlv
bkZsYWdzOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViVmlldyBkcmFnZ2luZ0VudGVyZWQ6XSk6
IEFkZGVkIHBhcmFtZXRlciB0byB0aGUgRHJhZ0RhdGEgY29uc3RydWN0b3IuCisgICAgICAgICgt
W1dlYlZpZXcgZHJhZ2dpbmdVcGRhdGVkOl0pOiBBZGRlZCBwYXJhbWV0ZXIgdG8gdGhlIERyYWdE
YXRhIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtXZWJWaWV3IGRyYWdnaW5nRXhpdGVkOl0pOiBB
ZGRlZCBwYXJhbWV0ZXIgdG8gdGhlIERyYWdEYXRhIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtX
ZWJWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9uOl0pOiBBZGRlZCBwYXJhbWV0ZXIgdG8gdGhlIERy
YWdEYXRhIGNvbnN0cnVjdG9yLgorCiAyMDExLTAxLTEyICBCZXRoIERha2luICA8YmRha2luQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBX
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNzU2NjIpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzc2NSwxMSArMzc2NSwyNSBAQCAtIChCT09M
KV9zaG91bGRBdXRvc2Nyb2xsRm9yRHJhZ2dpbmdJbmZvCiAgICAgcmV0dXJuIFtkb2N1bWVudFZp
ZXcgX3Nob3VsZEF1dG9zY3JvbGxGb3JEcmFnZ2luZ0luZm86ZHJhZ2dpbmdJbmZvXTsKIH0KIAor
LSAoRHJhZ0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGljYXRpb25GbGFnczooaWQgPE5TRHJhZ2dpbmdJ
bmZvPilkcmFnZ2luZ0luZm8KK3sKKyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgaWYgKFtO
U0FwcCBtb2RhbFdpbmRvd10pCisgICAgICAgIGZsYWdzID0gRHJhZ0FwcGxpY2F0aW9uSXNNb2Rh
bDsKKyAgICBpZiAoW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVldF0pCisgICAgICAgIGZsYWdz
IHw9IERyYWdBcHBsaWNhdGlvbkhhc0F0dGFjaGVkU2hlZXQ7CisgICAgaWYgKFtkcmFnZ2luZ0lu
Zm8gZHJhZ2dpbmdTb3VyY2VdID09IHNlbGYpCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNh
dGlvbklzU291cmNlOworICAgIGlmIChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFn
c10gJiBOU0FsdGVybmF0ZUtleU1hc2spCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlv
bklzQ29weUtleURvd247CisgICAgcmV0dXJuIChEcmFnQXBwbGljYXRpb25GbGFncylmbGFnczsK
K30KKwogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPE5TRHJhZ2dpbmdJ
bmZvPilkcmFnZ2luZ0luZm8KIHsKICAgICBJbnRQb2ludCBjbGllbnQoW2RyYWdnaW5nSW5mbyBk
cmFnZ2luZ0xvY2F0aW9uXSk7CiAgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFn
Z2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKLSAgICBEcmFnRGF0
YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCAoRHJhZ09wZXJhdGlvbilb
ZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pOworICAgIERyYWdEYXRh
IGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9uKVtk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSwgW3NlbGYgYXBwbGljYXRp
b25GbGFnczpkcmFnZ2luZ0luZm9dKTsKICAgICByZXR1cm4gY29yZShzZWxmKS0+ZHJhZ0NvbnRy
b2xsZXIoKS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKTsKIH0KIApAQCAtMzc4MSw3ICszNzk1LDcg
QEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPAogCiAgICAgSW50UG9p
bnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0pOwogICAgIEludFBvaW50
IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2Vs
ZiB3aW5kb3ddKSk7Ci0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQs
IGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJh
dGlvbk1hc2tdKTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwg
Z2xvYmFsLCAoRHJhZ09wZXJhdGlvbilbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0
aW9uTWFza10sIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7CiAgICAgcmV0
dXJuIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7CiB9CiAK
QEAgLTM3OTMsNyArMzgwNyw3IEBAIC0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlkIDxOU0RyYWdn
aW5nSW4KIAogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRp
b25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFn
Z2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwotICAgIERyYWdEYXRhIGRyYWdEYXRhKGRy
YWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9uKVtkcmFnZ2luZ0luZm8g
ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSk7CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJh
Z2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdnaW5nSW5mbyBk
cmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdn
aW5nSW5mb10pOwogICAgIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0ZWQoJmRyYWdE
YXRhKTsKIH0KIApAQCAtMzgwNiw3ICszODIwLDcgQEAgLSAoQk9PTClwZXJmb3JtRHJhZ09wZXJh
dGlvbjooaWQgPE5TRHJhZwogewogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRy
YWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdn
aW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwotICAgIERyYWdEYXRh
IGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9uKVtk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSk7CisgICAgRHJhZ0RhdGEg
ZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2Ry
YWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdLCBbc2VsZiBhcHBsaWNhdGlv
bkZsYWdzOmRyYWdnaW5nSW5mb10pOwogICAgIHJldHVybiBjb3JlKHNlbGYpLT5kcmFnQ29udHJv
bGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOwogfQogCg==
</data>
<flag name="review"
          id="70136"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78844</attachid>
            <date>2011-01-13 12:38:17 -0800</date>
            <delta_ts>2011-01-13 13:23:33 -0800</delta_ts>
            <desc>Patch4</desc>
            <filename>drop.txt</filename>
            <type>text/plain</type>
            <size>46856</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDEtMTIgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBBZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJv
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGRy
b3BwaW5nIGNvbnRlbnQKKyAgICAgICAgaW4gV2ViS2l0IG9uIHRoZSBNYWMuIFRoZSBEcmFnRGF0
YSBjbGFzcyBoYXMgYmVlbiBleHRlbmRlZCB0byBwcm92aWRlCisgICAgICAgIGFkZGl0aW9uYWwg
Y29udGV4dCBmcm9tIHRoZSBhcHBsaWNhdGlvbiAoa2V5Ym9hcmQgc3RhdGUsIG1vZGFsIHdpbmRv
d3MsIGV0Yy4pCisgICAgICAgIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gb2YgdGhlIGRyYWcgcGFz
dGVib2FyZCBiZWluZyB1c2VkLgorICAgICAgICBUaGUgc3VwcG9ydCBmb3IgV2ViS2l0IGFzIGRy
YWcgc291cmNlIHdpbGwgYmUgYWRkZWQgd2l0aCBhIHNlcGFyYXRlIHBhdGNoLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZSk6IEFkZGVkIERyYWdE
YXRhIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjp0cnlEb2N1
bWVudERyYWcpOiBNb2RpZmllZCBjYWxsIHRvIGRyYWdJc01vdmUuCisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6IFNhbWUgYXMgYWJvdmUuCisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5oOiBBZGRlZCBwYXJhbWV0ZXIgdG8gaXNDb3B5S2V5
RG93bi4KKyAgICAgICAgKiBwYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbToKKyAgICAgICAg
VGhlIGZvbGxvd2luZyBtZXRob2RzIGhhdmUgYmVlbiBtb2RpZmllZCB0byB1c2UgdGhlIGluZm9y
bWF0aW9uIHN0b3JlZAorICAgICAgICBpbiB0aGUgRHJhZ0RhdGEgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vRHJh
Z0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpmbGFncyk6CisgICAgICAgICog
cGxhdGZvcm0vRHJhZ0RhdGEuY3BwOiBBZGRlZCBkZWZhdWx0IGZsYWdzIHBhcmFtZXRlciB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OkRyYWdEYXRhKTogQWRkZWQgY29uc3RydWN0b3Ig
dGhhdCByZWNlaXZlcyB0aGUgbmFtZSBvZiB0aGUgcGFzdGVib2FyZCB0byB1c2UuCisgICAgICAg
IChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdEYXRhOjpjb250YWluc0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpj
b250YWluc0ZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6
CisgICAgICAgIEFsbCB0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCB0byBh
ZGQgdGhlIERyYWdEYXRhCisgICAgICAgIHBhcmFtZXRlciB0byBpc0NvcHlLZXlEb3duLiBJIHBs
YW4gdG8gaW1wcm92ZSB0aGlzIGluIHRoZSBmdXR1cmUKKyAgICAgICAgYW5kIG1ha2UgaXNDb3B5
S2V5RG93biBub3QgcGxhdGZvcm0gc3BlY2lmaWMuCisgICAgICAgICogcGFnZS9hbmRyb2lkL0Ry
YWdDb250cm9sbGVyQW5kcm9pZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxl
cjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9icmV3L0RyYWdDb250cm9sbGVyQnJl
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6
CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToKKyAgICAgICAg
KiBwYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFn
Q29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9ndGsvRHJhZ0NvbnRy
b2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtl
eURvd24pOgorICAgICAgICAqIHBhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAg
ICogcGFnZS9tYWMvRHJhZ0NvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpEcmFn
Q29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJv
bGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgICogcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToK
KyAgICAgICAgKiBwYWdlL3dpbi9EcmFnQ29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS93eC9E
cmFnQ29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpp
c0NvcHlLZXlEb3duKToKKwogMjAxMS0wMS0xMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEFub3RoZXIgYnVpbGQgZml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTEzMjgsNyArMTMyOCw4IEBAIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xs
ZXIxMWRyYWdVcGRhdGUKIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIxMXBlcmZvcm1EcmFn
RVBOU184RHJhZ0RhdGFFCiBfX1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVyMTRwbGFjZURyYWdD
YXJldEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXI5ZHJhZ0Vu
ZGVkRXYKLV9fWk43V2ViQ29yZThEcmFnRGF0YUMxRVAxMW9iamNfb2JqZWN0UktOU184SW50UG9p
bnRFUzVfTlNfMTNEcmFnT3BlcmF0aW9uRQorX19aTjdXZWJDb3JlOERyYWdEYXRhQzFFUDExb2Jq
Y19vYmplY3RSS05TXzhJbnRQb2ludEVTNV9OU18xM0RyYWdPcGVyYXRpb25FTlNfMjBEcmFnQXBw
bGljYXRpb25GbGFnc0UKK19fWk43V2ViQ29yZThEcmFnRGF0YUMxRVJLTjNXVEY2U3RyaW5nRVJL
TlNfOEludFBvaW50RVM3X05TXzEzRHJhZ09wZXJhdGlvbkVOU18yMERyYWdBcHBsaWNhdGlvbkZs
YWdzRQogI2VuZGlmCiAKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDkgKzE0
MSw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3UKICAgICByZXR1
cm4gMDsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250
cm9sbGVyKiBzZWxlY3Rpb24pCitib29sIERyYWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKFNlbGVj
dGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiwgRHJhZ0RhdGEqIGRyYWdEYXRhKQogewotICAgIHJl
dHVybiBtX2RvY3VtZW50VW5kZXJNb3VzZSA9PSBtX2RyYWdJbml0aWF0b3IgJiYgc2VsZWN0aW9u
LT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFpc0NvcHlLZXlEb3duKCk7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnRVbmRlck1vdXNlID09IG1fZHJhZ0luaXRpYXRvciAmJiBzZWxlY3Rpb24tPmlzQ29u
dGVudEVkaXRhYmxlKCkgJiYgIWlzQ29weUtleURvd24oZHJhZ0RhdGEpOwogfQogCiAvLyBGSVhN
RTogVGhpcyBtZXRob2QgaXMgcG9vcmx5IG5hbWVkLiAgV2UncmUganVzdCBjbGVhcmluZyB0aGUg
c2VsZWN0aW9uIGZyb20gdGhlIGRvY3VtZW50IHRoaXMgZHJhZyBpcyBleGl0aW5nLgpAQCAtMzM1
LDcgKzMzNSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmEKICAg
ICAgICAgfQogCiAgICAgICAgIEZyYW1lKiBpbm5lckZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKLSAgICAgICAgb3BlcmF0aW9uID0gZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5z
ZWxlY3Rpb24oKSkgPyBEcmFnT3BlcmF0aW9uTW92ZSA6IERyYWdPcGVyYXRpb25Db3B5OworICAg
ICAgICBvcGVyYXRpb24gPSBkcmFnSXNNb3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFn
RGF0YSkgPyBEcmFnT3BlcmF0aW9uTW92ZSA6IERyYWdPcGVyYXRpb25Db3B5OwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSWYgd2UncmUgbm90IG92ZXIgYW4gZWRpdGFibGUg
cmVnaW9uLCBtYWtlIHN1cmUgd2UncmUgY2xlYXJpbmcgYW55IHByaW9yIGRyYWcgY3Vyc29yLgpA
QCAtNDQ5LDcgKzQ0OSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWco
RHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNo
ZWRSZXNvdXJjZUxvYWRlciA9IHJhbmdlLT5vd25lckRvY3VtZW50KCktPmNhY2hlZFJlc291cmNl
TG9hZGVyKCk7CiAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJj
ZXModHJ1ZSk7Ci0gICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpIHx8
IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgaWYgKGRyYWdJc01v
dmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCksIGRyYWdEYXRhKSB8fCBkcmFnQ2FyZXQuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFs
c2U7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50
RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsIGlubmVyRnJhbWUsIHJhbmdlLCB0cnVlLCBj
aG9zZVBsYWluVGV4dCk7CiAgICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWlubmVyRnJhbWUtPmVk
aXRvcigpLT5zaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2Vy
dEFjdGlvbkRyb3BwZWQpKSB7CkBAIC00NTgsNyArNDU4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgICAgICB9CiAKICAgICAgICAgbV9jbGllbnQtPndp
bGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQs
IGRyYWdEYXRhKTsKLSAgICAgICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9u
KCkpKSB7CisgICAgICAgIGlmIChkcmFnSXNNb3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBk
cmFnRGF0YSkpIHsKICAgICAgICAgICAgIC8vIE5TVGV4dFZpZXcgYmVoYXZpb3IgaXMgdG8gYWx3
YXlzIHNtYXJ0IGRlbGV0ZSBvbiBtb3ZpbmcgYSBzZWxlY3Rpb24sCiAgICAgICAgICAgICAvLyBi
dXQgb25seSB0byBzbWFydCBpbnNlcnQgaWYgdGhlIHNlbGVjdGlvbiBncmFudWxhcml0eSBpcyB3
b3JkIGdyYW51bGFyaXR5LgogICAgICAgICAgICAgYm9vbCBzbWFydERlbGV0ZSA9IGlubmVyRnJh
bWUtPmVkaXRvcigpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmgJKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCB0cnlESFRNTERyYWcoRHJhZ0RhdGEq
LCBEcmFnT3BlcmF0aW9uJik7CiAgICAgICAgIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbihE
cmFnRGF0YSopOwogICAgICAgICB2b2lkIGNhbmNlbERyYWcoKTsKLSAgICAgICAgYm9vbCBkcmFn
SXNNb3ZlKFNlbGVjdGlvbkNvbnRyb2xsZXIqKTsKLSAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3du
KCk7CisgICAgICAgIGJvb2wgZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiwgRHJhZ0Rh
dGEqKTsKKyAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKERyYWdEYXRhKik7CiAKICAgICAgICAg
dm9pZCBtb3VzZU1vdmVkSW50b0RvY3VtZW50KERvY3VtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3Bw
CShyZXZpc2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29u
dHJvbGxlckFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigp
Citib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJhZ0NvbnRy
b2xsZXJCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJh
Z0NvbnRyb2xsZXJCcmV3LmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL2JyZXcvRHJhZ0NvbnRyb2xsZXJCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiBjb25zdCBm
bG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAogCi1ib29sIERy
YWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29w
eUtleURvd24oRHJhZ0RhdGEqKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9t
aXVtLmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVt
L0RyYWdDb250cm9sbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXQKICAgICByZXR1cm4g
ZHJhZ0RhdGEtPmNvbnRhaW5zVVJMKDApICYmICFtX2RpZEluaXRpYXRlRHJhZyA/IERyYWdPcGVy
YXRpb25Db3B5IDogRHJhZ09wZXJhdGlvbk5vbmU7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6
OmlzQ29weUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFn
RGF0YSopCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBPUyBzcGVjaWZpYy4g
IERlbGVnYXRlIHRvIHRoZSBlbWJlZGRlciBpbnN0ZWFkLgogI2lmIE9TKFdJTkRPV1MpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJFZmwuY3BwCShyZXZp
c2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0RyYWdDb250cm9sbGVyRWZs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjb25zdCBpbnQgRHJhZ0NvbnRy
b2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFn
SW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3du
KCkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oRHJhZ0RhdGEqKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250
cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFn
Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIGNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b20KIAogY29uc3QgZmxv
YXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7CiAKLWJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OmlzQ29weUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5
RG93bihEcmFnRGF0YSopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9oYWlrdS9EcmFnQ29udHJvbGxlckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlr
dS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY29uc3QgaW50IERyYWdDb250
cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogY29uc3QgZmxvYXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJ
bWFnZUFscGhhID0gMC43NWY7CiAKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93
bigpCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAg
ICBpZiAobW9kaWZpZXJzKCkgJiBCX0NPTU1BTkRfS0VZKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCShy
ZXZpc2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVy
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxOSArNDIsMTkgQEAgY29uc3QgaW50IERyYWdD
b250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6
RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5
RG93bigpCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKiBkcmFn
RGF0YSkKIHsKLSAgICByZXR1cm4gW1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3Nd
ICYgTlNBbHRlcm5hdGVLZXlNYXNrOworICAgIHJldHVybiBkcmFnRGF0YS0+ZmxhZ3MoKSAmIERy
YWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CiB9CiAgICAgCiBEcmFnT3BlcmF0aW9uIERyYWdD
b250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKIHsKICAgICBBU1NF
UlQoZHJhZ0RhdGEpOwotICAgIGlmIChbTlNBcHAgbW9kYWxXaW5kb3ddIHx8ICFkcmFnRGF0YS0+
Y29udGFpbnNVUkwobV9wYWdlLT5tYWluRnJhbWUoKSkpCisKKyAgICBpZiAoKGRyYWdEYXRhLT5m
bGFncygpICYgRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbCkgfHwgIWRyYWdEYXRhLT5jb250YWluc1VS
TChtX3BhZ2UtPm1haW5GcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25l
OwogCi0gICAgaWYgKCFtX2RvY3VtZW50VW5kZXJNb3VzZSB8fCAoIVtbbV9wYWdlLT5tYWluRnJh
bWUoKS0+dmlldygpLT5nZXRPdXRlclZpZXcoKSB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdIAotICAg
ICAgICAmJiBbZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpIGRyYWdnaW5nU291cmNlXSAhPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmdldE91dGVyVmlldygpKSkKKyAgICBpZiAoIW1fZG9j
dW1lbnRVbmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLT5mbGFncygpICYgRHJhZ0FwcGxpY2F0aW9u
SGFzQXR0YWNoZWRTaGVldCkgJiYgIShkcmFnRGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlv
bklzU291cmNlKSkpCiAgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uQ29weTsKIAogICAgIHJl
dHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRHJh
Z0NvbnRyb2xsZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9xdC9E
cmFnQ29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3F0L0RyYWdDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIGNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b20KIGNvbnN0IGZsb2F0
IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCiAKLWJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OmlzQ29weUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5
RG93bihEcmFnRGF0YSopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gNzU2NjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9EcmFnQ29udHJvbGxlcldpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6
ZHJhZ09wZXJhdAogICAgIHJldHVybiBkcmFnRGF0YS0+Y29udGFpbnNVUkwoMCkgJiYgIW1fZGlk
SW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0K
IAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCitib29sIERyYWdDb250cm9s
bGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICByZXR1cm4gOjpHZXRBc3luY0tl
eVN0YXRlKFZLX0NPTlRST0wpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93eC9EcmFn
Q29udHJvbGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0Ry
YWdDb250cm9sbGVyV3guY3BwCShyZXZpc2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvd3gvRHJhZ0NvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcg
QEAgY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9h
dCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29u
dHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlE
b3duKERyYWdEYXRhKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5jcHAJKHJldmlzaW9uIDc1NjYy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwxMSArMzEsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgIVBMQVRGT1JN
KE1BQykKIERyYWdEYXRhOjpEcmFnRGF0YShEcmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJbnRQb2lu
dCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgCi0gICAg
RHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrKQorICAgIERyYWdPcGVyYXRpb24gc291
cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgOiBtX2Ns
aWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9i
YWxQb3NpdGlvbikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YShkYXRhKQogICAgICwgbV9kcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKKyAgICAsIG1fYXBw
bGljYXRpb25GbGFncyhmbGFncykKIHsgIAogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RyYWdEYXRhLmgJKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRHJhZ0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE1IEBACiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KICNpZmRlZiBfX09CSkNfXyAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlv
bi5oPgogI2ltcG9ydCA8QXBwS2l0L05TRHJhZ2dpbmcuaD4KIHR5cGVkZWYgaWQgPE5TRHJhZ2dp
bmdJbmZvPiBEcmFnRGF0YVJlZjsKK0BjbGFzcyBOU1Bhc3RlYm9hcmQ7CiAjZWxzZQogdHlwZWRl
ZiB2b2lkKiBEcmFnRGF0YVJlZjsKK2NsYXNzIE5TUGFzdGVib2FyZDsKICNlbmRpZgogI2VsaWYg
UExBVEZPUk0oUVQpCiBRVF9CRUdJTl9OQU1FU1BBQ0UKQEAgLTcyLDE0ICs3NSwyNiBAQCBjbGFz
cyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgS1VSTDsKIGNsYXNzIFJhbmdlOwogCitlbnVtIERy
YWdBcHBsaWNhdGlvbkZsYWdzIHsKKyAgICBEcmFnQXBwbGljYXRpb25Ob25lID0gMCwKKyAgICBE
cmFnQXBwbGljYXRpb25Jc01vZGFsID0gMSwKKyAgICBEcmFnQXBwbGljYXRpb25Jc1NvdXJjZSA9
IDIsCisgICAgRHJhZ0FwcGxpY2F0aW9uSGFzQXR0YWNoZWRTaGVldCA9IDQsCisgICAgRHJhZ0Fw
cGxpY2F0aW9uSXNDb3B5S2V5RG93biA9IDgKK307CisgICAgCiBjbGFzcyBEcmFnRGF0YSB7CiBw
dWJsaWM6CiAgICAgZW51bSBGaWxlbmFtZUNvbnZlcnNpb25Qb2xpY3kgeyBEb05vdENvbnZlcnRG
aWxlbmFtZXMsIENvbnZlcnRGaWxlbmFtZXMgfTsKIAogICAgIC8vIGNsaWVudFBvc2l0aW9uIGlz
IHRha2VuIHRvIGJlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZHJhZyBldmVudCB3aXRoaW4gdGhlIHRh
cmdldCB3aW5kb3csIHdpdGggKDAsMCkgYXQgdGhlIHRvcCBsZWZ0Ci0gICAgRHJhZ0RhdGEoRHJh
Z0RhdGFSZWYsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQm
IGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbik7CisgICAgRHJhZ0RhdGEo
RHJhZ0RhdGFSZWYsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9p
bnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uLCBEcmFnQXBwbGljYXRpb25GbGFncyA9
IERyYWdBcHBsaWNhdGlvbk5vbmUpOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBEcmFnRGF0YShj
b25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0
aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24sIERyYWdB
cHBsaWNhdGlvbkZsYWdzKTsKKyNlbmRpZgogICAgIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3Np
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50UG9zaXRpb247IH0KICAgICBjb25zdCBJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbFBvc2l0aW9uOyB9
CisgICAgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MoKSB7IHJldHVybiBtX2FwcGxpY2F0aW9u
RmxhZ3M7IH0KICAgICBEcmFnRGF0YVJlZiBwbGF0Zm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBt
X3BsYXRmb3JtRHJhZ0RhdGE7IH0KICAgICBEcmFnT3BlcmF0aW9uIGRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNr
OyB9CiAgICAgYm9vbCBjb250YWluc1VSTChGcmFtZSosIEZpbGVuYW1lQ29udmVyc2lvblBvbGlj
eSBmaWxlbmFtZVBvbGljeSA9IENvbnZlcnRGaWxlbmFtZXMpIGNvbnN0OwpAQCAtOTksNiArMTE0
LDEwIEBAIHByaXZhdGU6CiAgICAgSW50UG9pbnQgbV9nbG9iYWxQb3NpdGlvbjsKICAgICBEcmFn
RGF0YVJlZiBtX3BsYXRmb3JtRHJhZ0RhdGE7CiAgICAgRHJhZ09wZXJhdGlvbiBtX2RyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzazsKKyAgICBEcmFnQXBwbGljYXRpb25GbGFncyBtX2FwcGxpY2F0
aW9uRmxhZ3M7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFJldGFpblB0cjxOU1Bhc3RlYm9hcmQ+
IG1fcGFzdGVib2FyZDsKKyNlbmRpZgogfTsKICAgICAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0JKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
OCwzNCArMzgsNDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRHJhZ0RhdGE6OkRyYWdEYXRh
KERyYWdEYXRhUmVmIGRhdGEsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3Qg
SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCAKLSAgICBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJh
dGlvbk1hc2spCisgICAgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBw
bGljYXRpb25GbGFncyBmbGFncykKICAgICA6IG1fY2xpZW50UG9zaXRpb24oY2xpZW50UG9zaXRp
b24pCiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQogICAgICwgbV9wbGF0
Zm9ybURyYWdEYXRhKGRhdGEpCiAgICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayhz
b3VyY2VPcGVyYXRpb25NYXNrKQorICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdzKQogewor
ICAgIG1fcGFzdGVib2FyZCA9IFttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQYXN0ZWJvYXJk
XTsKK30KKworRHJhZ0RhdGE6OkRyYWdEYXRhKGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1l
LCAgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFs
UG9zaXRpb24sCisgICAgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBEcmFnQXBw
bGljYXRpb25GbGFncyBmbGFncykKKyAgICA6IG1fY2xpZW50UG9zaXRpb24oY2xpZW50UG9zaXRp
b24pCisgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQorICAgICwgbV9wbGF0
Zm9ybURyYWdEYXRhKDApCisgICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayhzb3Vy
Y2VPcGVyYXRpb25NYXNrKQorICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdzKQoreworICAg
IG1fcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOmRyYWdTdG9y
YWdlTmFtZV07CiB9CiAgICAgCiBib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25z
dAogewogICAgIC8vTmVlZCB0byBjYWxsIHRoaXMgc28gdGhhdCB0aGUgdmFyaW91cyBQYXN0ZWJv
YXJkIHR5cGUgc3RyaW5ncyBhcmUgaW50aWFsaXNlZAogICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQ
YXN0ZWJvYXJkKCk7Ci0gICAgcmV0dXJuIFtbW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bh
c3RlYm9hcmRdIHR5cGVzXSBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07
CisgICAgcmV0dXJuIFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXSBjb250YWluc09iamVjdDpX
ZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29s
b3IoKSBjb25zdAogewotICAgIHJldHVybiBbW1ttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQ
YXN0ZWJvYXJkXSB0eXBlc10gY29udGFpbnNPYmplY3Q6TlNDb2xvclBib2FyZFR5cGVdOworICAg
IHJldHVybiBbW21fcGFzdGVib2FyZC5nZXQoKSB0eXBlc10gY29udGFpbnNPYmplY3Q6TlNDb2xv
clBib2FyZFR5cGVdOwogfQogCiBib29sIERyYWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gW1tbbV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0g
dHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV07CisgICAgcmV0dXJu
IFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXSBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bi
b2FyZFR5cGVdOwogfQogCiB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5n
PiYgcmVzdWx0KSBjb25zdAogewotICAgIE5TQXJyYXkgKmZpbGVuYW1lcyA9IFtbbV9wbGF0Zm9y
bURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0gcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVu
YW1lc1Bib2FyZFR5cGVdOworICAgIE5TQXJyYXkgKmZpbGVuYW1lcyA9IFttX3Bhc3RlYm9hcmQu
Z2V0KCkgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdOwogICAgIE5T
RW51bWVyYXRvciAqZmlsZUVudW1lcmF0b3IgPSBbZmlsZW5hbWVzIG9iamVjdEVudW1lcmF0b3Jd
OwogICAgIAogICAgIHdoaWxlIChOU1N0cmluZyAqZmlsZW5hbWUgPSBbZmlsZUVudW1lcmF0b3Ig
bmV4dE9iamVjdF0pCkBAIC03NCwxOSArODcsMTggQEAgdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFt
ZXMoVmVjdG9yPFN0cmluZwogCiBib29sIERyYWdEYXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNv
bnN0CiB7Ci0gICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW21fcGxhdGZvcm1EcmFnRGF0
YSBkcmFnZ2luZ1Bhc3RlYm9hcmRdOwotICAgIE5TQXJyYXkgKnR5cGVzID0gW3Bhc3RlYm9hcmQg
dHlwZXNdOworICAgIE5TQXJyYXkgKnR5cGVzID0gW21fcGFzdGVib2FyZC5nZXQoKSB0eXBlc107
CiAgICAgCiAgICAgcmV0dXJuIFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5
cGVdIAogICAgICAgICB8fCBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0K
ICAgICAgICAgfHwgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0KICAgICAg
ICAgfHwgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV0KLSAgICAg
ICAgfHwgW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworICAgICAgICB8fCBb
TlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6bV9wYXN0ZWJvYXJkLmdldCgpXTsKIH0KIAogU3RyaW5n
IERyYWdEYXRhOjphc1BsYWluVGV4dChGcmFtZSAqZnJhbWUpIGNvbnN0CiB7Ci0gICAgUGFzdGVi
b2FyZCBwYXN0ZWJvYXJkKFttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQYXN0ZWJvYXJkXSk7
CisgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKG1fcGFzdGVib2FyZC5nZXQoKSk7CiAgICAgcmV0
dXJuIHBhc3RlYm9hcmQucGxhaW5UZXh0KGZyYW1lKTsKIH0KIApAQCAtMTEzLDggKzEyNSw3IEBA
IHN0YXRpYyBOU0FycmF5ICppbnNlcnRhYmxlUGFzdGVib2FyZFR5cGUKICAgICAKIGJvb2wgRHJh
Z0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdAogewotICAgIE5TUGFzdGVi
b2FyZCAqcGFzdGVib2FyZCA9IFttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQYXN0ZWJvYXJk
XTsKLSAgICBOU011dGFibGVTZXQgKnR5cGVzID0gW05TTXV0YWJsZVNldCBzZXRXaXRoQXJyYXk6
W3Bhc3RlYm9hcmQgdHlwZXNdXTsKKyAgICBOU011dGFibGVTZXQgKnR5cGVzID0gW05TTXV0YWJs
ZVNldCBzZXRXaXRoQXJyYXk6W21fcGFzdGVib2FyZC5nZXQoKSB0eXBlc11dOwogICAgIFt0eXBl
cyBpbnRlcnNlY3RTZXQ6W05TU2V0IHNldFdpdGhBcnJheTppbnNlcnRhYmxlUGFzdGVib2FyZFR5
cGVzKCldXTsKICAgICByZXR1cm4gW3R5cGVzIGNvdW50XSAhPSAwOwogfQpAQCAtMTMzLDEzICsx
NDQsMTMgQEAgU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSogZnJhbWUsIEZpbAogICAgICAg
ICBpZiAoTlNTdHJpbmcgKlVSTFRpdGxlU3RyaW5nID0gW1ttX3BsYXRmb3JtRHJhZ0RhdGEgZHJh
Z2dpbmdQYXN0ZWJvYXJkXSBzdHJpbmdGb3JUeXBlOldlYlVSTE5hbWVQYm9hcmRUeXBlXSkKICAg
ICAgICAgICAgICp0aXRsZSA9IFVSTFRpdGxlU3RyaW5nOwogICAgIH0KLSAgICBQYXN0ZWJvYXJk
IHBhc3RlYm9hcmQoW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3RlYm9hcmRdKTsKKyAg
ICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkLmdldCgpKTsKICAgICByZXR1cm4g
cGFzdGVib2FyZC5hc1VSTChmcmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBy
YW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpIGNvbnN0CiB7
Ci0gICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKFttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQ
YXN0ZWJvYXJkXSk7CisgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKG1fcGFzdGVib2FyZC5nZXQo
KSk7CiAgICAgCiAgICAgcmV0dXJuIHBhc3RlYm9hcmQuZG9jdW1lbnRGcmFnbWVudChmcmFtZSwg
cmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiB9CkluZGV4OiBXZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzU3
MzEpCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDExLTAxLTEzICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0MjogQWRkIHN1
cHBvcnQgZm9yIGRyYWcgYW5kIGRyb3AKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUyMzQzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83NjYwNTU4Pgor
ICAgICAgICAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggY29udGFpbnMgdGhlIGNoYW5nZXMg
cmVxdWlyZWQgdG8gc3VwcG9ydCBkcm9wcGluZyBjb250ZW50CisgICAgICAgIGluIFdlYktpdCBv
biB0aGUgTWFjLiBUaGUgRHJhZ0RhdGEgY2xhc3MgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gcHJvdmlk
ZQorICAgICAgICBhZGRpdGlvbmFsIGNvbnRleHQgZnJvbSB0aGUgYXBwbGljYXRpb24gKGtleWJv
YXJkIHN0YXRlLCBtb2RhbCB3aW5kb3dzLCBldGMuKQorICAgICAgICBhcyB3ZWxsIGFzIGluZm9y
bWF0aW9uIG9mIHRoZSBkcmFnIHBhc3RlYm9hcmQgYmVpbmcgdXNlZC4KKyAgICAgICAgVGhlIHN1
cHBvcnQgZm9yIFdlYktpdCBhcyBkcmFnIHNvdXJjZSB3aWxsIGJlIGFkZGVkIHdpdGggYSBzZXBh
cmF0ZSBwYXRjaC4KKworICAgICAgICAqIFNoYXJlZC9EcmFnQ29udHJvbGxlckFjdGlvbnMuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICBB
ZGRlZCBpbXBsZW1lbnRpb24gb2YgdGhlIG1ldGhvZHMgcmVxdWlyZWQgdG8gYWRkIHN1cG9ydCBm
b3IgYSBkcm9wIHRhcmdldC4KKyAgICAgICAgVG8gbWFpbnRhaW4gYXN5bmNocm9ub3VzIGNvbW11
bmljYXRpb24gd2l0aCB0aGUgV2ViUHJvY2Vzcywgd2UgYWx3YXlzIHJldHVybgorICAgICAgICB0
aGUgcHJldmlvdXMgY2FsY3VsYXRlZCB2YWx1ZSBmb3IgdGhlIGRyYWcgb3BlcmF0aW9uLgorICAg
ICAgICAoLVtXS1ZpZXcgX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzXSk6CisgICAgICAgICgtW1dLVmll
dyBpbml0V2l0aEZyYW1lOmNvbnRleHRSZWY6cGFnZUdyb3VwUmVmOl0pOgorICAgICAgICAoLVtX
S1ZpZXcgYXBwbGljYXRpb25GbGFnczpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRW50
ZXJlZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nVXBkYXRlZDpdKToKKyAgICAgICAg
KC1bV0tWaWV3IGRyYWdnaW5nRXhpdGVkOl0pOgorICAgICAgICAoLVtXS1ZpZXcgcHJlcGFyZUZv
ckRyYWdPcGVyYXRpb246XSk6CisgICAgICAgICgtW1dLVmlldyBwZXJmb3JtRHJhZ09wZXJhdGlv
bjpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpXZWJQYWdlUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cmVzZXRE
cmFnT3BlcmF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJj
ZUFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JE
cmFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1h
c2tGb3JQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIwMTEtMDEtMTMgIERhbiBCZXJuc3RlaW4gIDxtaXR6
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb2huIFN1bGxpdmFuLgpJbmRleDog
V2ViS2l0Mi9TaGFyZWQvRHJhZ0NvbnRyb2xsZXJBY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9TaGFyZWQvRHJhZ0NvbnRyb2xsZXJBY3Rpb25zLmgJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQyL1NoYXJlZC9EcmFnQ29udHJvbGxlckFjdGlvbnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRHJhZ0NvbnRyb2xsZXJBY3Rpb25zX2gKKyNk
ZWZpbmUgRHJhZ0NvbnRyb2xsZXJBY3Rpb25zX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Vu
dW0gRHJhZ0NvbnRyb2xsZXJBY3Rpb24geworICAgIERyYWdDb250cm9sbGVyQWN0aW9uRW50ZXJl
ZCA9IDAsCisgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVkID0gMSwKKyAgICBEcmFnQ29u
dHJvbGxlckFjdGlvbkV4aXRlZCA9IDIsCisgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25QZXJmb3Jt
RHJhZyA9IDMKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRHJhZ0Nv
bnRyb2xsZXJBY3Rpb25zX2gKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2
aXNpb24gNzU2NjIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCw3IEBACiAjaW5jbHVkZSAiV2ViUHJvdGVjdGlvblNwYWNl
LmgiCiAjaW5jbHVkZSAiV2ViU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXZWJVUkxSZXF1
ZXN0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgpAQCAtMTI0LDYgKzEyNSw3IEBAIFdlYlBh
Z2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQqIHAKICAgICAsIG1faGFzU3BlbGxEb2N1
bWVudFRhZyhmYWxzZSkKICAgICAsIG1fcGVuZGluZ0xlYXJuT3JJZ25vcmVXb3JkTWVzc2FnZUNv
dW50KDApCiAgICAgLCBtX21haW5GcmFtZUhhc0N1c3RvbVJlcHJlc2VudGF0aW9uKGZhbHNlKQor
ICAgICwgbV9jdXJyZW50RHJhZ09wZXJhdGlvbihEcmFnT3BlcmF0aW9uTm9uZSkKIHsKICNpZm5k
ZWYgTkRFQlVHCiAgICAgd2ViUGFnZVByb3h5Q291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTU4OCw2
ICs1OTAsMTggQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEFjdHVhbFZpc2libGVDb250ZQogfQog
I2VuZGlmCiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24o
RHJhZ0NvbnRyb2xsZXJBY3Rpb24gYWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSogZHJhZ0RhdGEs
IGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lKQoreworICAgIGlmICghaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQ
ZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YS0+Y2xpZW50UG9zaXRp
b24oKSwgZHJhZ0RhdGEtPmdsb2JhbFBvc2l0aW9uKCksIGRyYWdEYXRhLT5kcmFnZ2luZ1NvdXJj
ZU9wZXJhdGlvbk1hc2soKSwgZHJhZ1N0b3JhZ2VOYW1lLCBkcmFnRGF0YS0+ZmxhZ3MoKSksIG1f
cGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EcmFnQ29udHJvbGxl
ckFjdGlvbih1aW50NjRfdCByZXN1bHRPcGVyYXRpb24pCit7CisgICAgbV9jdXJyZW50RHJhZ09w
ZXJhdGlvbiA9IChEcmFnT3BlcmF0aW9uKXJlc3VsdE9wZXJhdGlvbjsKK30KKwogdm9pZCBXZWJQ
YWdlUHJveHk6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCiB7
CiAgICAgaWYgKCFpc1ZhbGlkKCkpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2
aXNpb24gNzU2NjIpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5j
bHVkZSAiQ29udGV4dE1lbnVTdGF0ZS5oIgorI2luY2x1ZGUgIkRyYWdDb250cm9sbGVyQWN0aW9u
cy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uU3Rh
dGUuaCIKQEAgLTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eS5oIgog
I2luY2x1ZGUgIldlYlJlc291cmNlTG9hZENsaWVudC5oIgogI2luY2x1ZGUgIldlYlVJQ2xpZW50
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnQWN0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RWRpdEFjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRlclR5cGVzLmg+CkBAIC02OCw2ICs3MCw3IEBAIG5hbWVzcGFjZSBDb3Jl
SVBDIHsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKICAgICBjbGFzcyBDdXJzb3I7CisgICAgY2xhc3MgRHJhZ0RhdGE7CiAgICAgY2xhc3Mg
RmxvYXRSZWN0OwogICAgIGNsYXNzIEludFNpemU7CiAgICAgY2xhc3MgUHJvdGVjdGlvblNwYWNl
OwpAQCAtMjY5LDYgKzI3MiwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGJhY2tGb3J3YXJkUmVt
b3ZlZEl0ZW0odWludDY0X3QgaXRlbUlEKTsKIAorICAgIC8vIERyYWcgYW5kIGRyb3Agc3VwcG9y
dC4KKyAgICB2b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFj
dGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGRpZFBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCByZXN1bHRPcGVyYXRpb24pOworCiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6
TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICAgICB2b2lkIGRpZFJlY2Vp
dmVTeW5jTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBD
b3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKTsKIApA
QCAtMjk0LDYgKzMwMSw5IEBAIHB1YmxpYzoKICAgICBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFnZUdyb3VwLmdldCgpOyB9CiAKICAgICBib29sIGlzVmFsaWQo
KTsKKyAgICAKKyAgICBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24oKSB7IHJl
dHVybiBtX2N1cnJlbnREcmFnT3BlcmF0aW9uOyB9CisgICAgdm9pZCByZXNldERyYWdPcGVyYXRp
b24oKSB7IG1fY3VycmVudERyYWdPcGVyYXRpb24gPSBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uTm9u
ZTsgfQogCiAgICAgLy8gUkVNT1ZFOiBGb3IgZGVtbyBwdXJwb3NlcyBvbmx5LgogICAgIGNvbnN0
IFN0cmluZyYgdXJsQXRQcm9jZXNzRXhpdCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsQXRQcm9jZXNz
RXhpdDsgfQpAQCAtNTkyLDYgKzYwMiw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9wZW5k
aW5nTGVhcm5Pcklnbm9yZVdvcmRNZXNzYWdlQ291bnQ7CiAKICAgICBib29sIG1fbWFpbkZyYW1l
SGFzQ3VzdG9tUmVwcmVzZW50YXRpb247CisgICAgV2ViQ29yZTo6RHJhZ09wZXJhdGlvbiBtX2N1
cnJlbnREcmFnT3BlcmF0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiA3NTY2
MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMTg2LDQgKzE4Niw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAg
ICAgR2V0R3Vlc3Nlc0ZvcldvcmQoV1RGOjpTdHJpbmcgd29yZCwgV1RGOjpTdHJpbmcgY29udGV4
dCkgLT4gKFZlY3RvcjxXVEY6OlN0cmluZz4gZ3Vlc3NlcykKICAgICBMZWFybldvcmQoV1RGOjpT
dHJpbmcgd29yZCk7CiAgICAgSWdub3JlV29yZChXVEY6OlN0cmluZyB3b3JkKTsKKyAgICAKKyAg
ICAjIERyYWcgYW5kIGRyb3AuCisgICAgRGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVp
bnQ2NF90IHJlc3VsdE9wZXJhdGlvbikKIH0KSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9t
YWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3Lm1tCShyZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MCw5ICs1MCwxMiBAQAogI2ltcG9ydCAiV2ViU3lz
dGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvS2V5
Ym9hcmRFdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1TY3JlZW4uaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUlu
dGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgpAQCAtMTU0LDYgKzE1NywyNSBAQCAt
IChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgY29udGV4CiAgICAgcmV0dXJuIFtzZWxm
IGluaXRXaXRoRnJhbWU6ZnJhbWUgY29udGV4dFJlZjpjb250ZXh0UmVmIHBhZ2VHcm91cFJlZjpu
aWxdOwogfQogCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJBcmNoaXZlUGJvYXJkVHlwZSA9
IEAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVib2FyZCB0eXBlIjsKK3N0YXRpYyBOU1N0cmluZyAq
IGNvbnN0IFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSA9IEAiV2ViVVJMc1dpdGhUaXRsZXNQ
Ym9hcmRUeXBlIjsKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYlVSTFBib2FyZFR5cGUgPSBA
InB1YmxpYy51cmwiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViVVJMTmFtZVBib2FyZFR5
cGUgPSBAInB1YmxpYy51cmwtbmFtZSI7CisKKy0gKHZvaWQpX3JlZ2lzdGVyRHJhZ2dlZFR5cGVz
Cit7CisgICAgTlNBcnJheSAqZWRpdGFibGVUeXBlcyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVj
dHM6V2ViQXJjaGl2ZVBib2FyZFR5cGUsIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJv
YXJkVHlwZSwgTlNUSUZGUGJvYXJkVHlwZSwgTlNQREZQYm9hcmRUeXBlLAorI2lmIGRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAg
ICAgTlNQSUNUUGJvYXJkVHlwZSwKKyNlbmRpZgorICAgICAgICBOU1VSTFBib2FyZFR5cGUsIE5T
UlRGRFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBOU0Nv
bG9yUGJvYXJkVHlwZSwga1VUVHlwZVBORywgbmlsXTsKKyAgICBOU0FycmF5ICpVUkxUeXBlcyA9
IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6IFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSwg
TlNVUkxQYm9hcmRUeXBlLCBXZWJVUkxQYm9hcmRUeXBlLCAgV2ViVVJMTmFtZVBib2FyZFR5cGUs
IE5TU3RyaW5nUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9hcmRUeXBlLCBuaWxdOworICAgIE5T
TXV0YWJsZVNldCAqdHlwZXMgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdFdpdGhBcnJheTpl
ZGl0YWJsZVR5cGVzXTsKKyAgICBbdHlwZXMgYWRkT2JqZWN0c0Zyb21BcnJheTpVUkxUeXBlc107
CisgICAgW3NlbGYgcmVnaXN0ZXJGb3JEcmFnZ2VkVHlwZXM6W3R5cGVzIGFsbE9iamVjdHNdXTsK
KyAgICBbdHlwZXMgcmVsZWFzZV07Cit9CisKIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClm
cmFtZSBjb250ZXh0UmVmOihXS0NvbnRleHRSZWYpY29udGV4dFJlZiBwYWdlR3JvdXBSZWY6KFdL
UGFnZUdyb3VwUmVmKXBhZ2VHcm91cFJlZgogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhG
cmFtZTpmcmFtZV07CkBAIC0xNzYsNiArMTk4LDggQEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNS
ZWN0KWZyYW1lIGNvbnRleAogICAgIF9kYXRhLT5fcGFnZSA9IHRvSW1wbChjb250ZXh0UmVmKS0+
Y3JlYXRlV2ViUGFnZShfZGF0YS0+X3BhZ2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXBS
ZWYpKTsKICAgICBfZGF0YS0+X3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7CiAKKyAgICBbc2Vs
ZiBfcmVnaXN0ZXJEcmFnZ2VkVHlwZXNdOworCiAgICAgV2ViQ29udGV4dDo6c3RhdGlzdGljcygp
LndrVmlld0NvdW50Kys7CiAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
CkBAIC05NzcsNiArMTAwMSw2MiBAQCAtIChOU1JlY3QpZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFu
Z2U6KE5TCiAgICAgcmV0dXJuIHJlc3VsdFJlY3Q7CiB9CiAKKy0gKERyYWdBcHBsaWNhdGlvbkZs
YWdzKWFwcGxpY2F0aW9uRmxhZ3M6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCit7
CisgICAgdWludDMyX3QgZmxhZ3MgPSAwOworICAgIGlmIChbTlNBcHAgbW9kYWxXaW5kb3ddKQor
ICAgICAgICBmbGFncyA9IERyYWdBcHBsaWNhdGlvbklzTW9kYWw7CisgICAgaWYgKFtbc2VsZiB3
aW5kb3ddIGF0dGFjaGVkU2hlZXRdKQorICAgICAgICBmbGFncyB8PSBEcmFnQXBwbGljYXRpb25I
YXNBdHRhY2hlZFNoZWV0OworICAgIGlmIChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlXSA9
PSBzZWxmKQorICAgICAgICBmbGFncyB8PSBEcmFnQXBwbGljYXRpb25Jc1NvdXJjZTsKKyAgICBp
ZiAoW1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdICYgTlNBbHRlcm5hdGVLZXlN
YXNrKQorICAgICAgICBmbGFncyB8PSBEcmFnQXBwbGljYXRpb25Jc0NvcHlLZXlEb3duOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEcmFnQXBwbGljYXRpb25GbGFncz4oZmxhZ3MpOworfQorCist
IChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdFbnRlcmVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRy
YWdnaW5nSW5mbworeworICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2Ry
YWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsKKyAgICBJbnRQb2lu
dCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3Nl
bGYgd2luZG93XSkpOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50
LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJ
bmZvXSk7CisgICAgCisgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rp
b24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVkLCAmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZv
IGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25D
b3B5OworfQorCistIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdVcGRhdGVkOihpZCA8TlNEcmFn
Z2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252
ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsK
KyAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xv
Y2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5n
SW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxh
Z3M6ZHJhZ2dpbmdJbmZvXSk7CisgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRHJhZ0NvbnRyb2xs
ZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVkLCAmZHJhZ0RhdGEsIFtbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAgIHJldHVybiBfZGF0YS0+X3Bh
Z2UtPmRyYWdPcGVyYXRpb24oKTsKK30KKworLSAodm9pZClkcmFnZ2luZ0V4aXRlZDooaWQgPE5T
RHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sKKyAgICBJbnRQb2ludCBjbGllbnQoW3NlbGYg
Y29udmVydFBvaW50OltkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0gZnJvbVZpZXc6bmls
XSk7CisgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dp
bmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFn
Z2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihbZHJh
Z2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNhdGlv
bkZsYWdzOmRyYWdnaW5nSW5mb10pOworICAgIF9kYXRhLT5fcGFnZS0+cGVyZm9ybURyYWdDb250
cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uRXhpdGVkLCAmZHJhZ0RhdGEsIFtbZHJh
Z2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAgIF9kYXRhLT5fcGFnZS0+
cmVzZXREcmFnT3BlcmF0aW9uKCk7Cit9CisKKy0gKEJPT0wpcHJlcGFyZUZvckRyYWdPcGVyYXRp
b246KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCit7CisgICAgcmV0dXJuIFlFUzsK
K30KKworLSAoQk9PTClwZXJmb3JtRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZ2dpbmdJbmZvPilk
cmFnZ2luZ0luZm8KK3sKKyAgICBJbnRQb2ludCBjbGllbnQoW3NlbGYgY29udmVydFBvaW50Oltk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0gZnJvbVZpZXc6bmlsXSk7CisgICAgSW50UG9p
bnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtz
ZWxmIHdpbmRvd10pKTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVu
dCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdn
aW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5n
SW5mb10pOworICAgIF9kYXRhLT5fcGFnZS0+cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERy
YWdDb250cm9sbGVyQWN0aW9uUGVyZm9ybURyYWcsICZkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8g
ZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CisgICAgcmV0dXJuIFlFUzsKK30KKwogLSAodm9p
ZClfdXBkYXRlV2luZG93VmlzaWJpbGl0eQogewogICAgIF9kYXRhLT5fcGFnZS0+dXBkYXRlV2lu
ZG93SXNWaXNpYmxlKCFbW3NlbGYgd2luZG93XSBpc01pbmlhdHVyaXplZF0pOwpJbmRleDogV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc1NjYyKQor
KysgV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTY1Nyw2ICs2NTcsNyBAQAogCQlDMEUzQUE3QTEyMDlFODMwMDBBNDlEMDEgLyogTW9k
dWxlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzBFM0FBNDgxMjA5RTQ1MDAwQTQ5RDAxIC8qIE1vZHVsZU1hYy5tbSAqLzsgfTsKIAkJQzBFM0FB
N0IxMjA5RTgzNTAwQTQ5RDAxIC8qIE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEUzQUE0NTEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxl
LmNwcCAqLzsgfTsKIAkJQzBFM0FBN0MxMjA5RTgzQzAwQTQ5RDAxIC8qIE1vZHVsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBFM0FBNDQxMjA5RTJC
QTAwQTQ5RDAxIC8qIE1vZHVsZS5oICovOyB9OworCQlDNTE3Mzg4MTEyREY4RjRGMDBFRTNGNDcg
LyogRHJhZ0NvbnRyb2xsZXJBY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTE3Mzg4MDEyREY4RjRGMDBFRTNGNDcgLyogRHJhZ0NvbnRyb2xs
ZXJBY3Rpb25zLmggKi87IH07CiAJCUM1MjM3RjYwMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0
b3JDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDNTIzN0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRpdG9yQ2xpZW50TWFjLm1tICov
OyB9OwogCQlEM0I5NDg0NjExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQyMTFGRjRC
NjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwICovOyB9OwogCQlEM0I5NDg0NzExRkY0QjY1
MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51
LmggKi87IH07CkBAIC0xNDA5LDYgKzE0MTAsNyBAQAogCQlDMEUzQUE0NDEyMDlFMkJBMDBBNDlE
MDEgLyogTW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMEUzQUE0NTEyMDlFMkJBMDBBNDlEMDEg
LyogTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vZHVs
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwRTNBQTQ4MTIwOUU0NTAwMEE0
OUQwMSAvKiBNb2R1bGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBNb2R1bGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MTczODgw
MTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0NvbnRyb2xsZXJBY3Rpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JD
bGllbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJF
ZGl0b3JDbGllbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQy
MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViUG9wdXBNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQb3B1cE1lbnUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MjQsNiArMTcyNiw3IEBACiAJCQkJMUEyRDk1NkQxMjg0ODU2
NDAwMUVCOTYyIC8qIENoaWxkUHJvY2Vzcy5oICovLAogCQkJCTFBNkY5RjhFMTFFMTNFRkMwMERC
MTM3MSAvKiBDb21tYW5kTGluZS5oICovLAogCQkJCTFBMkMzMDZGMTJENTU1NDUwMDYzREFBMiAv
KiBDb250ZXh0TWVudVN0YXRlLmggKi8sCisJCQkJQzUxNzM4ODAxMkRGOEY0RjAwRUUzRjQ3IC8q
IERyYWdDb250cm9sbGVyQWN0aW9ucy5oICovLAogCQkJCTBGQjY1OTIyMTIwOEI0REIwMDQ0ODE2
QyAvKiBEcmF3aW5nQXJlYUluZm8uaCAqLywKIAkJCQk3NjJCNzQ4MTEyMEJCQTAxMDA4MTkzMzkg
LyogRm9udFNtb290aGluZ0xldmVsLmggKi8sCiAJCQkJQkNDRjZCMjMxMkM5M0U3QTAwOEY5QzM1
IC8qIEltYWdlT3B0aW9ucy5oICovLApAQCAtMzAyOCw2ICszMDMxLDcgQEAKIAkJCQkxQTY0MjM1
MzEyREQxODdDMDBDQUFFMkMgLyogUmVnaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0MjQ1
RTEyREUyOUExMDBDQUFFMkMgLyogVXBkYXRlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2
NDI1NjgxMkRFNDJFQzAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQzUxNzM4ODExMkRGOEY0RjAwRUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RHJhZ0NsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCShyZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMjkgKzM0LDI0IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkRyYWdDbGll
bnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlv
biwgRHJhZ0RhdGEqKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgV2ViRHJh
Z0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNv
bnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
CiBEcmFnRGVzdGluYXRpb25BY3Rpb24gV2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWco
RHJhZ0RhdGEqKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIERyYWdEZXN0
aW5hdGlvbkFjdGlvbk5vbmU7CisgICAgcmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueTsK
IH0KIAogRHJhZ1NvdXJjZUFjdGlvbiBXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFz
a0ZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBEcmFnU291cmNlQWN0aW9uTm9uZTsKKyAgICByZXR1cm4gRHJh
Z1NvdXJjZUFjdGlvbkFueTsKIH0KIAogdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJh
Z0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwg
RnJhbWUqLCBib29sKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIERyYWdJbWFnZVJl
ZiBXZWJEcmFnQ2xpZW50OjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEtVUkwmLCBjb25zdCBTdHJp
bmcmLCBGcmFtZSopCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
cmV2aXNpb24gNzU2NjIpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnRGcmFnbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvY3Vz
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KQEAgLTEyNTAsNiArMTI1
MiwzNiBAQCBib29sIFdlYlBhZ2U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2ZW50CiB9CiAjZW5k
aWYKIAordm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3Qg
YWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9p
bnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywg
Y29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzKQoreworICAgIERy
YWdEYXRhIGRyYWdEYXRhKGRyYWdTdG9yYWdlTmFtZSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBv
c2l0aW9uLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihkcmFnZ2luZ1NvdXJjZU9wZXJhdGlv
bk1hc2spLCBzdGF0aWNfY2FzdDxEcmFnQXBwbGljYXRpb25GbGFncz4oZmxhZ3MpKTsKKyAgICBz
d2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVkOgor
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0
YSkpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIERyYWdDb250cm9sbGVyQWN0aW9uVXBk
YXRlZDoKKyAgICAgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnT3BlcmF0aW9u
Tm9uZSkpOworICAgICAgICAKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24obV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5k
cmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIERyYWdDb250cm9sbGVyQWN0aW9uRXhpdGVkOgorICAgICAgICBpZiAoIW1fcGFnZSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdF
eGl0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgRHJh
Z0NvbnRyb2xsZXJBY3Rpb25QZXJmb3JtRHJhZzoKKyAgICAgICAgbV9wYWdlLT5kcmFnQ29udHJv
bGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
CiBXZWJFZGl0Q29tbWFuZCogV2ViUGFnZTo6d2ViRWRpdENvbW1hbmQodWludDY0X3QgY29tbWFu
ZElEKQogewogICAgIHJldHVybiBtX2VkaXRDb21tYW5kTWFwLmdldChjb21tYW5kSUQpLmdldCgp
OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gNzU2NjIp
CisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5OCw2ICsyOTgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJ
bnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24s
IHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgV1RGOjpTdHJpbmcm
IGRyYWdTdG9yYWdlTmFtZSwgdWludDMyX3QgZmxhZ3MpOwogCiAgICAgYm9vbCBtYWluRnJhbWVI
YXNDdXN0b21SZXByZXNlbnRhdGlvbigpIGNvbnN0OwogCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1NjYyKQorKysg
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBj
b3B5KQpAQCAtOTYsNiArOTYsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICAgICBIaWRlRmlu
ZFVJKCkKICAgICBDb3VudFN0cmluZ01hdGNoZXMoV1RGOjpTdHJpbmcgc3RyaW5nLCB1aW50MzJf
dCBmaW5kT3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkKIAorICAgICMgRHJhZyBhbmQg
ZHJvcC4KKyAgICBQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBX
ZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFs
UG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgV1RGOjpTdHJp
bmcgZHJhZ1N0b3JhZ2VOYW1lLCB1aW50MzJfdCBmbGFncykKKwogICAgICMgUG9wdXAgbWVudS4K
ICAgICBEaWRDaGFuZ2VTZWxlY3RlZEluZGV4Rm9yQWN0aXZlUG9wdXBNZW51KGludDMyX3QgbmV3
SW5kZXgpOwogICAgIFNldFRleHRGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBpbmRleCk7Cklu
ZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwkocmV2aXNpb24gNzU2NjIpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDExLTAxLTEyICBFbnJpY2EgQ2FzdWNjaSAgPGVucmlj
YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViS2l0MjogQWRkIHN1cHBvcnQgZm9yIGRyYWcgYW5kIGRyb3AKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMzQzCisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS83NjYwNTU4PgorICAgICAgICAKKyAgICAgICAgVGhlIERyYWdEYXRhIGNsYXNz
IGhhcyBiZWVuIGV4dGVuZGVkIHRvIHByb3ZpZGUKKyAgICAgICAgYWRkaXRpb25hbCBjb250ZXh0
IGZyb20gdGhlIGFwcGxpY2F0aW9uIChrZXlib2FyZCBzdGF0ZSwgbW9kYWwgd2luZG93cywgZXRj
LikKKyAgICAgICAgYXMgd2VsbCBhcyBpbmZvcm1hdGlvbiBvZiB0aGUgZHJhZyBwYXN0ZWJvYXJk
IGJlaW5nIHVzZWQuCisgICAgICAgIFRoZXNlIGFyZSB0aGUgY2hhbmdlcyB0byBhbGlnbiB0aGUg
YmVoYXZpb3IgZm9yIFdlYktpdC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAg
ICAgICAgKC1bV2ViVmlldyBhcHBsaWNhdGlvbkZsYWdzOl0pOiBBZGRlZC4KKyAgICAgICAgKC1b
V2ViVmlldyBkcmFnZ2luZ0VudGVyZWQ6XSk6IEFkZGVkIHBhcmFtZXRlciB0byB0aGUgRHJhZ0Rh
dGEgY29uc3RydWN0b3IuCisgICAgICAgICgtW1dlYlZpZXcgZHJhZ2dpbmdVcGRhdGVkOl0pOiBB
ZGRlZCBwYXJhbWV0ZXIgdG8gdGhlIERyYWdEYXRhIGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtX
ZWJWaWV3IGRyYWdnaW5nRXhpdGVkOl0pOiBBZGRlZCBwYXJhbWV0ZXIgdG8gdGhlIERyYWdEYXRh
IGNvbnN0cnVjdG9yLgorICAgICAgICAoLVtXZWJWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9uOl0p
OiBBZGRlZCBwYXJhbWV0ZXIgdG8gdGhlIERyYWdEYXRhIGNvbnN0cnVjdG9yLgorCiAyMDExLTAx
LTEyICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNzU2
NjIpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
Mzc2NSwxMSArMzc2NSwyNSBAQCAtIChCT09MKV9zaG91bGRBdXRvc2Nyb2xsRm9yRHJhZ2dpbmdJ
bmZvCiAgICAgcmV0dXJuIFtkb2N1bWVudFZpZXcgX3Nob3VsZEF1dG9zY3JvbGxGb3JEcmFnZ2lu
Z0luZm86ZHJhZ2dpbmdJbmZvXTsKIH0KIAorLSAoRHJhZ0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGlj
YXRpb25GbGFnczooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sKKyAgICB1aW50
MzJfdCBmbGFncyA9IDA7CisgICAgaWYgKFtOU0FwcCBtb2RhbFdpbmRvd10pCisgICAgICAgIGZs
YWdzID0gRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbDsKKyAgICBpZiAoW1tzZWxmIHdpbmRvd10gYXR0
YWNoZWRTaGVldF0pCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbkhhc0F0dGFjaGVk
U2hlZXQ7CisgICAgaWYgKFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VdID09IHNlbGYpCisg
ICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzU291cmNlOworICAgIGlmIChbW05TQXBw
IGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10gJiBOU0FsdGVybmF0ZUtleU1hc2spCisgICAg
ICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAgcmV0dXJuIChE
cmFnQXBwbGljYXRpb25GbGFncylmbGFnczsKK30KKwogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdn
aW5nRW50ZXJlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KIHsKICAgICBJbnRQ
b2ludCBjbGllbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSk7CiAgICAgSW50UG9p
bnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtz
ZWxmIHdpbmRvd10pKTsKLSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVu
dCwgZ2xvYmFsLCAoRHJhZ09wZXJhdGlvbilbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFza10pOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50
LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJ
bmZvXSk7CiAgICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCktPmRyYWdFbnRl
cmVkKCZkcmFnRGF0YSk7CiB9CiAKQEAgLTM3ODEsNyArMzc5NSw3IEBAIC0gKE5TRHJhZ09wZXJh
dGlvbilkcmFnZ2luZ1VwZGF0ZWQ6KGlkIDwKIAogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9p
bnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwotICAg
IERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3Bl
cmF0aW9uKVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSk7CisgICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nh
c3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1h
c2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKICAgICByZXR1cm4g
cGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKTsKIH0KIApAQCAt
Mzc5Myw3ICszODA3LDcgQEAgLSAodm9pZClkcmFnZ2luZ0V4aXRlZDooaWQgPE5TRHJhZ2dpbmdJ
bgogCiAgICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0p
OwogICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5n
TG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7Ci0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dp
bmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVyYXRpb24pW2RyYWdnaW5nSW5mbyBkcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2lu
Z0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNhdGlvbkZs
YWdzOmRyYWdnaW5nSW5mb10pOwogICAgIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFeGl0
ZWQoJmRyYWdEYXRhKTsKIH0KIApAQCAtMzgwNiw3ICszODIwLDcgQEAgLSAoQk9PTClwZXJmb3Jt
RHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwogewogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9p
bnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwotICAg
IERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIChEcmFnT3Bl
cmF0aW9uKVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSk7CisgICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nh
c3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1h
c2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKICAgICByZXR1cm4g
Y29yZShzZWxmKS0+ZHJhZ0NvbnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKIH0K
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78848</attachid>
            <date>2011-01-13 13:23:33 -0800</date>
            <delta_ts>2011-01-13 14:20:06 -0800</delta_ts>
            <desc>Patch5</desc>
            <filename>drop.txt</filename>
            <type>text/plain</type>
            <size>47254</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NjY4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDEtMTIgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBBZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJv
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgICAgICAgICAKKyAgICAg
ICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgY2hhbmdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGRy
b3BwaW5nIGNvbnRlbnQKKyAgICAgICAgaW4gV2ViS2l0IG9uIHRoZSBNYWMuIFRoZSBEcmFnRGF0
YSBjbGFzcyBoYXMgYmVlbiBleHRlbmRlZCB0byBwcm92aWRlCisgICAgICAgIGFkZGl0aW9uYWwg
Y29udGV4dCBmcm9tIHRoZSBhcHBsaWNhdGlvbiAoa2V5Ym9hcmQgc3RhdGUsIG1vZGFsIHdpbmRv
d3MsIGV0Yy4pCisgICAgICAgIGFzIHdlbGwgYXMgaW5mb3JtYXRpb24gb2YgdGhlIGRyYWcgcGFz
dGVib2FyZCBiZWluZyB1c2VkLgorICAgICAgICBUaGUgc3VwcG9ydCBmb3IgV2ViS2l0IGFzIGRy
YWcgc291cmNlIHdpbGwgYmUgYWRkZWQgd2l0aCBhIHNlcGFyYXRlIHBhdGNoLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZSk6IEFkZGVkIERyYWdE
YXRhIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjp0cnlEb2N1
bWVudERyYWcpOiBNb2RpZmllZCBjYWxsIHRvIGRyYWdJc01vdmUuCisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6IFNhbWUgYXMgYWJvdmUuCisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5oOiBBZGRlZCBwYXJhbWV0ZXIgdG8gaXNDb3B5S2V5
RG93bi4KKyAgICAgICAgKiBwYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbToKKyAgICAgICAg
VGhlIGZvbGxvd2luZyBtZXRob2RzIGhhdmUgYmVlbiBtb2RpZmllZCB0byB1c2UgdGhlIGluZm9y
bWF0aW9uIHN0b3JlZAorICAgICAgICBpbiB0aGUgRHJhZ0RhdGEgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vRHJh
Z0RhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpmbGFncyk6CisgICAgICAgICog
cGxhdGZvcm0vRHJhZ0RhdGEuY3BwOiBBZGRlZCBkZWZhdWx0IGZsYWdzIHBhcmFtZXRlciB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgICogcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OkRyYWdEYXRhKTogQWRkZWQgY29uc3RydWN0b3Ig
dGhhdCByZWNlaXZlcyB0aGUgbmFtZSBvZiB0aGUgcGFzdGVib2FyZCB0byB1c2UuCisgICAgICAg
IChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkRyYWdEYXRhOjpjb250YWluc0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjpj
b250YWluc0ZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZpbGVuYW1lcyk6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6YXNGcmFnbWVudCk6
CisgICAgICAgIEFsbCB0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCB0byBh
ZGQgdGhlIERyYWdEYXRhCisgICAgICAgIHBhcmFtZXRlciB0byBpc0NvcHlLZXlEb3duLiBJIHBs
YW4gdG8gaW1wcm92ZSB0aGlzIGluIHRoZSBmdXR1cmUKKyAgICAgICAgYW5kIG1ha2UgaXNDb3B5
S2V5RG93biBub3QgcGxhdGZvcm0gc3BlY2lmaWMuCisgICAgICAgICogcGFnZS9hbmRyb2lkL0Ry
YWdDb250cm9sbGVyQW5kcm9pZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxl
cjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9icmV3L0RyYWdDb250cm9sbGVyQnJl
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6
CisgICAgICAgICogcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToKKyAgICAgICAg
KiBwYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFn
Q29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS9ndGsvRHJhZ0NvbnRy
b2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtl
eURvd24pOgorICAgICAgICAqIHBhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlrdS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAg
ICogcGFnZS9tYWMvRHJhZ0NvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpEcmFn
Q29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJv
bGxlcjo6ZHJhZ09wZXJhdGlvbik6CisgICAgICAgICogcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKToK
KyAgICAgICAgKiBwYWdlL3dpbi9EcmFnQ29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bik6CisgICAgICAgICogcGFnZS93eC9E
cmFnQ29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpp
c0NvcHlLZXlEb3duKToKKwogMjAxMS0wMS0xMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEFub3RoZXIgYnVpbGQgZml4LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4J
KHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTEzMjgsNyArMTMyOCw4IEBAIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xs
ZXIxMWRyYWdVcGRhdGUKIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIxMXBlcmZvcm1EcmFn
RVBOU184RHJhZ0RhdGFFCiBfX1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVyMTRwbGFjZURyYWdD
YXJldEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXI5ZHJhZ0Vu
ZGVkRXYKLV9fWk43V2ViQ29yZThEcmFnRGF0YUMxRVAxMW9iamNfb2JqZWN0UktOU184SW50UG9p
bnRFUzVfTlNfMTNEcmFnT3BlcmF0aW9uRQorX19aTjdXZWJDb3JlOERyYWdEYXRhQzFFUDExb2Jq
Y19vYmplY3RSS05TXzhJbnRQb2ludEVTNV9OU18xM0RyYWdPcGVyYXRpb25FTlNfMjBEcmFnQXBw
bGljYXRpb25GbGFnc0UKK19fWk43V2ViQ29yZThEcmFnRGF0YUMxRVJLTjNXVEY2U3RyaW5nRVJL
TlNfOEludFBvaW50RVM3X05TXzEzRHJhZ09wZXJhdGlvbkVOU18yMERyYWdBcHBsaWNhdGlvbkZs
YWdzRQogI2VuZGlmCiAKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDkgKzE0
MSw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3UKICAgICByZXR1
cm4gMDsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250
cm9sbGVyKiBzZWxlY3Rpb24pCitib29sIERyYWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKFNlbGVj
dGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbiwgRHJhZ0RhdGEqIGRyYWdEYXRhKQogewotICAgIHJl
dHVybiBtX2RvY3VtZW50VW5kZXJNb3VzZSA9PSBtX2RyYWdJbml0aWF0b3IgJiYgc2VsZWN0aW9u
LT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFpc0NvcHlLZXlEb3duKCk7CisgICAgcmV0dXJuIG1f
ZG9jdW1lbnRVbmRlck1vdXNlID09IG1fZHJhZ0luaXRpYXRvciAmJiBzZWxlY3Rpb24tPmlzQ29u
dGVudEVkaXRhYmxlKCkgJiYgIWlzQ29weUtleURvd24oZHJhZ0RhdGEpOwogfQogCiAvLyBGSVhN
RTogVGhpcyBtZXRob2QgaXMgcG9vcmx5IG5hbWVkLiAgV2UncmUganVzdCBjbGVhcmluZyB0aGUg
c2VsZWN0aW9uIGZyb20gdGhlIGRvY3VtZW50IHRoaXMgZHJhZyBpcyBleGl0aW5nLgpAQCAtMzM1
LDcgKzMzNSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmEKICAg
ICAgICAgfQogCiAgICAgICAgIEZyYW1lKiBpbm5lckZyYW1lID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+ZnJhbWUoKTsKLSAgICAgICAgb3BlcmF0aW9uID0gZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5z
ZWxlY3Rpb24oKSkgPyBEcmFnT3BlcmF0aW9uTW92ZSA6IERyYWdPcGVyYXRpb25Db3B5OworICAg
ICAgICBvcGVyYXRpb24gPSBkcmFnSXNNb3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFn
RGF0YSkgPyBEcmFnT3BlcmF0aW9uTW92ZSA6IERyYWdPcGVyYXRpb25Db3B5OwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSWYgd2UncmUgbm90IG92ZXIgYW4gZWRpdGFibGUg
cmVnaW9uLCBtYWtlIHN1cmUgd2UncmUgY2xlYXJpbmcgYW55IHByaW9yIGRyYWcgY3Vyc29yLgpA
QCAtNDQ5LDcgKzQ0OSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWco
RHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNo
ZWRSZXNvdXJjZUxvYWRlciA9IHJhbmdlLT5vd25lckRvY3VtZW50KCktPmNhY2hlZFJlc291cmNl
TG9hZGVyKCk7CiAgICAgY2FjaGVkUmVzb3VyY2VMb2FkZXItPnNldEFsbG93U3RhbGVSZXNvdXJj
ZXModHJ1ZSk7Ci0gICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkpIHx8
IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CisgICAgaWYgKGRyYWdJc01v
dmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCksIGRyYWdEYXRhKSB8fCBkcmFnQ2FyZXQuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFs
c2U7CiAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50
RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsIGlubmVyRnJhbWUsIHJhbmdlLCB0cnVlLCBj
aG9zZVBsYWluVGV4dCk7CiAgICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWlubmVyRnJhbWUtPmVk
aXRvcigpLT5zaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2Vy
dEFjdGlvbkRyb3BwZWQpKSB7CkBAIC00NTgsNyArNDU4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgICAgICB9CiAKICAgICAgICAgbV9jbGllbnQtPndp
bGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQs
IGRyYWdEYXRhKTsKLSAgICAgICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9u
KCkpKSB7CisgICAgICAgIGlmIChkcmFnSXNNb3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBk
cmFnRGF0YSkpIHsKICAgICAgICAgICAgIC8vIE5TVGV4dFZpZXcgYmVoYXZpb3IgaXMgdG8gYWx3
YXlzIHNtYXJ0IGRlbGV0ZSBvbiBtb3ZpbmcgYSBzZWxlY3Rpb24sCiAgICAgICAgICAgICAvLyBi
dXQgb25seSB0byBzbWFydCBpbnNlcnQgaWYgdGhlIHNlbGVjdGlvbiBncmFudWxhcml0eSBpcyB3
b3JkIGdyYW51bGFyaXR5LgogICAgICAgICAgICAgYm9vbCBzbWFydERlbGV0ZSA9IGlubmVyRnJh
bWUtPmVkaXRvcigpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmgJKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCB0cnlESFRNTERyYWcoRHJhZ0RhdGEq
LCBEcmFnT3BlcmF0aW9uJik7CiAgICAgICAgIERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbihE
cmFnRGF0YSopOwogICAgICAgICB2b2lkIGNhbmNlbERyYWcoKTsKLSAgICAgICAgYm9vbCBkcmFn
SXNNb3ZlKFNlbGVjdGlvbkNvbnRyb2xsZXIqKTsKLSAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3du
KCk7CisgICAgICAgIGJvb2wgZHJhZ0lzTW92ZShTZWxlY3Rpb25Db250cm9sbGVyKiwgRHJhZ0Rh
dGEqKTsKKyAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKERyYWdEYXRhKik7CiAKICAgICAgICAg
dm9pZCBtb3VzZU1vdmVkSW50b0RvY3VtZW50KERvY3VtZW50Kik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29udHJvbGxlckFuZHJvaWQuY3Bw
CShyZXZpc2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5kcm9pZC9EcmFnQ29u
dHJvbGxlckFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigp
Citib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJhZ0NvbnRy
b2xsZXJCcmV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2JyZXcvRHJh
Z0NvbnRyb2xsZXJCcmV3LmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL2JyZXcvRHJhZ0NvbnRyb2xsZXJCcmV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiBjb25zdCBm
bG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAogCi1ib29sIERy
YWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29w
eUtleURvd24oRHJhZ0RhdGEqKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRHJhZ0NvbnRyb2xsZXJDaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9EcmFnQ29udHJvbGxlckNocm9t
aXVtLmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9taXVt
L0RyYWdDb250cm9sbGVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3
IEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXQKICAgICByZXR1cm4g
ZHJhZ0RhdGEtPmNvbnRhaW5zVVJMKDApICYmICFtX2RpZEluaXRpYXRlRHJhZyA/IERyYWdPcGVy
YXRpb25Db3B5IDogRHJhZ09wZXJhdGlvbk5vbmU7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6
OmlzQ29weUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFn
RGF0YSopCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBPUyBzcGVjaWZpYy4g
IERlbGVnYXRlIHRvIHRoZSBlbWJlZGRlciBpbnN0ZWFkLgogI2lmIE9TKFdJTkRPV1MpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJFZmwuY3BwCShyZXZp
c2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0RyYWdDb250cm9sbGVyRWZs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjb25zdCBpbnQgRHJhZ0NvbnRy
b2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFn
SW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3du
KCkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oRHJhZ0RhdGEqKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250
cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFn
Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDc1NjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIGNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b20KIAogY29uc3QgZmxv
YXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7CiAKLWJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OmlzQ29weUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5
RG93bihEcmFnRGF0YSopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9oYWlrdS9EcmFnQ29udHJvbGxlckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL2hhaWt1L0RyYWdDb250cm9sbGVySGFpa3UuY3BwCShyZXZpc2lv
biA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaGFpa3UvRHJhZ0NvbnRyb2xsZXJIYWlr
dS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY29uc3QgaW50IERyYWdDb250
cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogY29uc3QgZmxvYXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJ
bWFnZUFscGhhID0gMC43NWY7CiAKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93
bigpCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAg
ICBpZiAobW9kaWZpZXJzKCkgJiBCX0NPTU1BTkRfS0VZKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFjLm1tCShy
ZXZpc2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVy
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxOSArNDIsMTkgQEAgY29uc3QgaW50IERyYWdD
b250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6
RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5
RG93bigpCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKiBkcmFn
RGF0YSkKIHsKLSAgICByZXR1cm4gW1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3Nd
ICYgTlNBbHRlcm5hdGVLZXlNYXNrOworICAgIHJldHVybiBkcmFnRGF0YS0+ZmxhZ3MoKSAmIERy
YWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CiB9CiAgICAgCiBEcmFnT3BlcmF0aW9uIERyYWdD
b250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKIHsKICAgICBBU1NF
UlQoZHJhZ0RhdGEpOwotICAgIGlmIChbTlNBcHAgbW9kYWxXaW5kb3ddIHx8ICFkcmFnRGF0YS0+
Y29udGFpbnNVUkwobV9wYWdlLT5tYWluRnJhbWUoKSkpCisKKyAgICBpZiAoKGRyYWdEYXRhLT5m
bGFncygpICYgRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbCkgfHwgIWRyYWdEYXRhLT5jb250YWluc1VS
TChtX3BhZ2UtPm1haW5GcmFtZSgpKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25l
OwogCi0gICAgaWYgKCFtX2RvY3VtZW50VW5kZXJNb3VzZSB8fCAoIVtbbV9wYWdlLT5tYWluRnJh
bWUoKS0+dmlldygpLT5nZXRPdXRlclZpZXcoKSB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdIAotICAg
ICAgICAmJiBbZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpIGRyYWdnaW5nU291cmNlXSAhPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCktPmdldE91dGVyVmlldygpKSkKKyAgICBpZiAoIW1fZG9j
dW1lbnRVbmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLT5mbGFncygpICYgRHJhZ0FwcGxpY2F0aW9u
SGFzQXR0YWNoZWRTaGVldCkgJiYgIShkcmFnRGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlv
bklzU291cmNlKSkpCiAgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uQ29weTsKIAogICAgIHJl
dHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRHJh
Z0NvbnRyb2xsZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9xdC9E
cmFnQ29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3F0L0RyYWdDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3
IEBAIGNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b20KIGNvbnN0IGZsb2F0
IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCiAKLWJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OmlzQ29weUtleURvd24oKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5
RG93bihEcmFnRGF0YSopCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gNzU2NjIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9EcmFnQ29udHJvbGxlcldpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6
ZHJhZ09wZXJhdAogICAgIHJldHVybiBkcmFnRGF0YS0+Y29udGFpbnNVUkwoMCkgJiYgIW1fZGlk
SW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0K
IAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCitib29sIERyYWdDb250cm9s
bGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKIHsKICAgICByZXR1cm4gOjpHZXRBc3luY0tl
eVN0YXRlKFZLX0NPTlRST0wpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93eC9EcmFn
Q29udHJvbGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3d4L0Ry
YWdDb250cm9sbGVyV3guY3BwCShyZXZpc2lvbiA3NTY2MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvd3gvRHJhZ0NvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcg
QEAgY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9h
dCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29u
dHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlE
b3duKERyYWdEYXRhKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5jcHAJKHJldmlzaW9uIDc1NjYy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwxMyArMzEsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgIVBMQVRGT1JN
KE1BQykKIERyYWdEYXRhOjpEcmFnRGF0YShEcmFnRGF0YVJlZiBkYXRhLCBjb25zdCBJbnRQb2lu
dCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgCi0gICAg
RHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrKQorICAgIERyYWdPcGVyYXRpb24gc291
cmNlT3BlcmF0aW9uTWFzaywgRHJhZ0FwcGxpY2F0aW9uRmxhZ3MgZmxhZ3MpCiAgICAgOiBtX2Ns
aWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9uKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9i
YWxQb3NpdGlvbikKICAgICAsIG1fcGxhdGZvcm1EcmFnRGF0YShkYXRhKQogICAgICwgbV9kcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soc291cmNlT3BlcmF0aW9uTWFzaykKKyAgICAsIG1fYXBw
bGljYXRpb25GbGFncyhmbGFncykKIHsgIAogfQorCitEcmFnRGF0YTo6RHJhZ0RhdGEoY29uc3Qg
U3RyaW5nJiwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYg
Z2xvYmFsUG9zaXRpb24sCisgICAgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb25NYXNrLCBE
cmFnQXBwbGljYXRpb25GbGFncyBmbGFncykKKyAgICA6IG1fY2xpZW50UG9zaXRpb24oY2xpZW50
UG9zaXRpb24pCisgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uKQorICAgICwg
bV9wbGF0Zm9ybURyYWdEYXRhKDApCisgICAgLCBtX2RyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
ayhzb3VyY2VPcGVyYXRpb25NYXNrKQorICAgICwgbV9hcHBsaWNhdGlvbkZsYWdzKGZsYWdzKQor
eworfQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRHJhZ0RhdGEuaAkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9EcmFnRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTUgQEAKICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShNQUMpCisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgogI2lmZGVmIF9fT0JKQ19fIAogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0
aW9uLmg+CiAjaW1wb3J0IDxBcHBLaXQvTlNEcmFnZ2luZy5oPgogdHlwZWRlZiBpZCA8TlNEcmFn
Z2luZ0luZm8+IERyYWdEYXRhUmVmOworQGNsYXNzIE5TUGFzdGVib2FyZDsKICNlbHNlCiB0eXBl
ZGVmIHZvaWQqIERyYWdEYXRhUmVmOworY2xhc3MgTlNQYXN0ZWJvYXJkOwogI2VuZGlmCiAjZWxp
ZiBQTEFURk9STShRVCkKIFFUX0JFR0lOX05BTUVTUEFDRQpAQCAtNzIsMTQgKzc1LDI1IEBAIGNs
YXNzIERvY3VtZW50RnJhZ21lbnQ7CiBjbGFzcyBLVVJMOwogY2xhc3MgUmFuZ2U7CiAKK2VudW0g
RHJhZ0FwcGxpY2F0aW9uRmxhZ3MgeworICAgIERyYWdBcHBsaWNhdGlvbk5vbmUgPSAwLAorICAg
IERyYWdBcHBsaWNhdGlvbklzTW9kYWwgPSAxLAorICAgIERyYWdBcHBsaWNhdGlvbklzU291cmNl
ID0gMiwKKyAgICBEcmFnQXBwbGljYXRpb25IYXNBdHRhY2hlZFNoZWV0ID0gNCwKKyAgICBEcmFn
QXBwbGljYXRpb25Jc0NvcHlLZXlEb3duID0gOAorfTsKKyAgICAKIGNsYXNzIERyYWdEYXRhIHsK
IHB1YmxpYzoKICAgICBlbnVtIEZpbGVuYW1lQ29udmVyc2lvblBvbGljeSB7IERvTm90Q29udmVy
dEZpbGVuYW1lcywgQ29udmVydEZpbGVuYW1lcyB9OwogCiAgICAgLy8gY2xpZW50UG9zaXRpb24g
aXMgdGFrZW4gdG8gYmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkcmFnIGV2ZW50IHdpdGhpbiB0aGUg
dGFyZ2V0IHdpbmRvdywgd2l0aCAoMCwwKSBhdCB0aGUgdG9wIGxlZnQKLSAgICBEcmFnRGF0YShE
cmFnRGF0YVJlZiwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2lu
dCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uKTsKKyAgICBEcmFnRGF0
YShEcmFnRGF0YVJlZiwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIERyYWdPcGVyYXRpb24sIERyYWdBcHBsaWNhdGlvbkZsYWdz
ID0gRHJhZ0FwcGxpY2F0aW9uTm9uZSk7CisgICAgRHJhZ0RhdGEoY29uc3QgU3RyaW5nJiBkcmFn
U3RvcmFnZU5hbWUsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9p
bnQmIGdsb2JhbFBvc2l0aW9uLCBEcmFnT3BlcmF0aW9uLCBEcmFnQXBwbGljYXRpb25GbGFncyA9
IERyYWdBcHBsaWNhdGlvbk5vbmUpOworCiAgICAgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnRQb3NpdGlvbjsgfQogICAgIGNvbnN0IEludFBv
aW50JiBnbG9iYWxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsUG9zaXRpb247IH0K
KyAgICBEcmFnQXBwbGljYXRpb25GbGFncyBmbGFncygpIHsgcmV0dXJuIG1fYXBwbGljYXRpb25G
bGFnczsgfQogICAgIERyYWdEYXRhUmVmIHBsYXRmb3JtRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGxhdGZvcm1EcmFnRGF0YTsgfQogICAgIERyYWdPcGVyYXRpb24gZHJhZ2dpbmdTb3VyY2VPcGVy
YXRpb25NYXNrKCkgY29uc3QgeyByZXR1cm4gbV9kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2s7
IH0KICAgICBib29sIGNvbnRhaW5zVVJMKEZyYW1lKiwgRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5
IGZpbGVuYW1lUG9saWN5ID0gQ29udmVydEZpbGVuYW1lcykgY29uc3Q7CkBAIC05OSw2ICsxMTMs
MTAgQEAgcHJpdmF0ZToKICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwogICAgIERyYWdE
YXRhUmVmIG1fcGxhdGZvcm1EcmFnRGF0YTsKICAgICBEcmFnT3BlcmF0aW9uIG1fZHJhZ2dpbmdT
b3VyY2VPcGVyYXRpb25NYXNrOworICAgIERyYWdBcHBsaWNhdGlvbkZsYWdzIG1fYXBwbGljYXRp
b25GbGFnczsKKyNpZiBQTEFURk9STShNQUMpCisgICAgUmV0YWluUHRyPE5TUGFzdGVib2FyZD4g
bV9wYXN0ZWJvYXJkOworI2VuZGlmCiB9OwogICAgIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkocmV2aXNpb24gNzU2NjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4
LDM0ICszOCw0NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEcmFnRGF0YTo6RHJhZ0RhdGEo
RHJhZ0RhdGFSZWYgZGF0YSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJ
bnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIAotICAgIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0
aW9uTWFzaykKKyAgICBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBs
aWNhdGlvbkZsYWdzIGZsYWdzKQogICAgIDogbV9jbGllbnRQb3NpdGlvbihjbGllbnRQb3NpdGlv
bikKICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCiAgICAgLCBtX3BsYXRm
b3JtRHJhZ0RhdGEoZGF0YSkKICAgICAsIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKHNv
dXJjZU9wZXJhdGlvbk1hc2spCisgICAgLCBtX2FwcGxpY2F0aW9uRmxhZ3MoZmxhZ3MpCiB7Cisg
ICAgbV9wYXN0ZWJvYXJkID0gW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3RlYm9hcmRd
OworfQorCitEcmFnRGF0YTo6RHJhZ0RhdGEoY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUs
ICBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQ
b3NpdGlvbiwKKyAgICBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbk1hc2ssIERyYWdBcHBs
aWNhdGlvbkZsYWdzIGZsYWdzKQorICAgIDogbV9jbGllbnRQb3NpdGlvbihjbGllbnRQb3NpdGlv
bikKKyAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgLCBtX3BsYXRm
b3JtRHJhZ0RhdGEoMCkKKyAgICAsIG1fZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKHNvdXJj
ZU9wZXJhdGlvbk1hc2spCisgICAgLCBtX2FwcGxpY2F0aW9uRmxhZ3MoZmxhZ3MpCit7CisgICAg
bV9wYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6ZHJhZ1N0b3Jh
Z2VOYW1lXTsKIH0KICAgICAKIGJvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSgpIGNvbnN0
CiB7CiAgICAgLy9OZWVkIHRvIGNhbGwgdGhpcyBzbyB0aGF0IHRoZSB2YXJpb3VzIFBhc3RlYm9h
cmQgdHlwZSBzdHJpbmdzIGFyZSBpbnRpYWxpc2VkCiAgICAgUGFzdGVib2FyZDo6Z2VuZXJhbFBh
c3RlYm9hcmQoKTsKLSAgICByZXR1cm4gW1tbbV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFz
dGVib2FyZF0gdHlwZXNdIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsK
KyAgICByZXR1cm4gW1ttX3Bhc3RlYm9hcmQuZ2V0KCkgdHlwZXNdIGNvbnRhaW5zT2JqZWN0Oldl
YlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb2xv
cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFtbW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bh
c3RlYm9hcmRdIHR5cGVzXSBjb250YWluc09iamVjdDpOU0NvbG9yUGJvYXJkVHlwZV07CisgICAg
cmV0dXJuIFtbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXSBjb250YWluc09iamVjdDpOU0NvbG9y
UGJvYXJkVHlwZV07CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAog
ewotICAgIHJldHVybiBbW1ttX3BsYXRmb3JtRHJhZ0RhdGEgZHJhZ2dpbmdQYXN0ZWJvYXJkXSB0
eXBlc10gY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXTsKKyAgICByZXR1cm4g
W1ttX3Bhc3RlYm9hcmQuZ2V0KCkgdHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TRmlsZW5hbWVzUGJv
YXJkVHlwZV07CiB9CiAKIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+
JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgTlNBcnJheSAqZmlsZW5hbWVzID0gW1ttX3BsYXRmb3Jt
RHJhZ0RhdGEgZHJhZ2dpbmdQYXN0ZWJvYXJkXSBwcm9wZXJ0eUxpc3RGb3JUeXBlOk5TRmlsZW5h
bWVzUGJvYXJkVHlwZV07CisgICAgTlNBcnJheSAqZmlsZW5hbWVzID0gW21fcGFzdGVib2FyZC5n
ZXQoKSBwcm9wZXJ0eUxpc3RGb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV07CiAgICAgTlNF
bnVtZXJhdG9yICpmaWxlRW51bWVyYXRvciA9IFtmaWxlbmFtZXMgb2JqZWN0RW51bWVyYXRvcl07
CiAgICAgCiAgICAgd2hpbGUgKE5TU3RyaW5nICpmaWxlbmFtZSA9IFtmaWxlRW51bWVyYXRvciBu
ZXh0T2JqZWN0XSkKQEAgLTc0LDE5ICs4NywxOCBAQCB2b2lkIERyYWdEYXRhOjphc0ZpbGVuYW1l
cyhWZWN0b3I8U3RyaW5nCiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkgY29u
c3QKIHsKLSAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbbV9wbGF0Zm9ybURyYWdEYXRh
IGRyYWdnaW5nUGFzdGVib2FyZF07Ci0gICAgTlNBcnJheSAqdHlwZXMgPSBbcGFzdGVib2FyZCB0
eXBlc107CisgICAgTlNBcnJheSAqdHlwZXMgPSBbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXTsK
ICAgICAKICAgICByZXR1cm4gW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TU3RyaW5nUGJvYXJkVHlw
ZV0gCiAgICAgICAgIHx8IFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXQog
ICAgICAgICB8fCBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXQogICAgICAg
ICB8fCBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXQotICAgICAg
ICB8fCBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisgICAgICAgIHx8IFtO
U1VSTCBVUkxGcm9tUGFzdGVib2FyZDptX3Bhc3RlYm9hcmQuZ2V0KCldOwogfQogCiBTdHJpbmcg
RHJhZ0RhdGE6OmFzUGxhaW5UZXh0KEZyYW1lICpmcmFtZSkgY29uc3QKIHsKLSAgICBQYXN0ZWJv
YXJkIHBhc3RlYm9hcmQoW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3RlYm9hcmRdKTsK
KyAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkLmdldCgpKTsKICAgICByZXR1
cm4gcGFzdGVib2FyZC5wbGFpblRleHQoZnJhbWUpOwogfQogCkBAIC0xMTMsOCArMTI1LDcgQEAg
c3RhdGljIE5TQXJyYXkgKmluc2VydGFibGVQYXN0ZWJvYXJkVHlwZQogICAgIAogYm9vbCBEcmFn
RGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgTlNQYXN0ZWJv
YXJkICpwYXN0ZWJvYXJkID0gW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bhc3RlYm9hcmRd
OwotICAgIE5TTXV0YWJsZVNldCAqdHlwZXMgPSBbTlNNdXRhYmxlU2V0IHNldFdpdGhBcnJheTpb
cGFzdGVib2FyZCB0eXBlc11dOworICAgIE5TTXV0YWJsZVNldCAqdHlwZXMgPSBbTlNNdXRhYmxl
U2V0IHNldFdpdGhBcnJheTpbbV9wYXN0ZWJvYXJkLmdldCgpIHR5cGVzXV07CiAgICAgW3R5cGVz
IGludGVyc2VjdFNldDpbTlNTZXQgc2V0V2l0aEFycmF5Omluc2VydGFibGVQYXN0ZWJvYXJkVHlw
ZXMoKV1dOwogICAgIHJldHVybiBbdHlwZXMgY291bnRdICE9IDA7CiB9CkBAIC0xMzMsMTMgKzE0
NCwxMyBAQCBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiBmcmFtZSwgRmlsCiAgICAgICAg
IGlmIChOU1N0cmluZyAqVVJMVGl0bGVTdHJpbmcgPSBbW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFn
Z2luZ1Bhc3RlYm9hcmRdIHN0cmluZ0ZvclR5cGU6V2ViVVJMTmFtZVBib2FyZFR5cGVdKQogICAg
ICAgICAgICAgKnRpdGxlID0gVVJMVGl0bGVTdHJpbmc7CiAgICAgfQotICAgIFBhc3RlYm9hcmQg
cGFzdGVib2FyZChbbV9wbGF0Zm9ybURyYWdEYXRhIGRyYWdnaW5nUGFzdGVib2FyZF0pOworICAg
IFBhc3RlYm9hcmQgcGFzdGVib2FyZChtX3Bhc3RlYm9hcmQuZ2V0KCkpOwogICAgIHJldHVybiBw
YXN0ZWJvYXJkLmFzVVJMKGZyYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IHJh
bmdlLCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkgY29uc3QKIHsK
LSAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQoW21fcGxhdGZvcm1EcmFnRGF0YSBkcmFnZ2luZ1Bh
c3RlYm9hcmRdKTsKKyAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkLmdldCgp
KTsKICAgICAKICAgICByZXR1cm4gcGFzdGVib2FyZC5kb2N1bWVudEZyYWdtZW50KGZyYW1lLCBy
YW5nZSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKIH0KSW5kZXg6IFdlYktpdDIv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NTcz
MSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAK
KzIwMTEtMDEtMTMgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBBZGQgc3Vw
cG9ydCBmb3IgZHJhZyBhbmQgZHJvcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTIzNDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+Cisg
ICAgICAgICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgY2hhbmdlcyBy
ZXF1aXJlZCB0byBzdXBwb3J0IGRyb3BwaW5nIGNvbnRlbnQKKyAgICAgICAgaW4gV2ViS2l0IG9u
IHRoZSBNYWMuIFRoZSBEcmFnRGF0YSBjbGFzcyBoYXMgYmVlbiBleHRlbmRlZCB0byBwcm92aWRl
CisgICAgICAgIGFkZGl0aW9uYWwgY29udGV4dCBmcm9tIHRoZSBhcHBsaWNhdGlvbiAoa2V5Ym9h
cmQgc3RhdGUsIG1vZGFsIHdpbmRvd3MsIGV0Yy4pCisgICAgICAgIGFzIHdlbGwgYXMgaW5mb3Jt
YXRpb24gb2YgdGhlIGRyYWcgcGFzdGVib2FyZCBiZWluZyB1c2VkLgorICAgICAgICBUaGUgc3Vw
cG9ydCBmb3IgV2ViS2l0IGFzIGRyYWcgc291cmNlIHdpbGwgYmUgYWRkZWQgd2l0aCBhIHNlcGFy
YXRlIHBhdGNoLgorCisgICAgICAgICogU2hhcmVkL0RyYWdDb250cm9sbGVyQWN0aW9ucy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgIEFk
ZGVkIGltcGxlbWVudGlvbiBvZiB0aGUgbWV0aG9kcyByZXF1aXJlZCB0byBhZGQgc3Vwb3J0IGZv
ciBhIGRyb3AgdGFyZ2V0LgorICAgICAgICBUbyBtYWludGFpbiBhc3luY2hyb25vdXMgY29tbXVu
aWNhdGlvbiB3aXRoIHRoZSBXZWJQcm9jZXNzLCB3ZSBhbHdheXMgcmV0dXJuCisgICAgICAgIHRo
ZSBwcmV2aW91cyBjYWxjdWxhdGVkIHZhbHVlIGZvciB0aGUgZHJhZyBvcGVyYXRpb24uCisgICAg
ICAgICgtW1dLVmlldyBfcmVnaXN0ZXJEcmFnZ2VkVHlwZXNdKToKKyAgICAgICAgKC1bV0tWaWV3
IGluaXRXaXRoRnJhbWU6Y29udGV4dFJlZjpwYWdlR3JvdXBSZWY6XSk6CisgICAgICAgICgtW1dL
VmlldyBhcHBsaWNhdGlvbkZsYWdzOl0pOgorICAgICAgICAoLVtXS1ZpZXcgZHJhZ2dpbmdFbnRl
cmVkOl0pOgorICAgICAgICAoLVtXS1ZpZXcgZHJhZ2dpbmdVcGRhdGVkOl0pOgorICAgICAgICAo
LVtXS1ZpZXcgZHJhZ2dpbmdFeGl0ZWQ6XSk6CisgICAgICAgICgtW1dLVmlldyBwcmVwYXJlRm9y
RHJhZ09wZXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9u
Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpkaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkcmFnT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZXNldERy
YWdPcGVyYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW46CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNl
QWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRy
YWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFz
a0ZvclBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMS0wMS0xMyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCkluZGV4OiBX
ZWJLaXQyL1NoYXJlZC9EcmFnQ29udHJvbGxlckFjdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1NoYXJlZC9EcmFnQ29udHJvbGxlckFjdGlvbnMuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dDIvU2hhcmVkL0RyYWdDb250cm9sbGVyQWN0aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEcmFnQ29udHJvbGxlckFjdGlvbnNfaAorI2Rl
ZmluZSBEcmFnQ29udHJvbGxlckFjdGlvbnNfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51
bSBEcmFnQ29udHJvbGxlckFjdGlvbiB7CisgICAgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVk
ID0gMCwKKyAgICBEcmFnQ29udHJvbGxlckFjdGlvblVwZGF0ZWQgPSAxLAorICAgIERyYWdDb250
cm9sbGVyQWN0aW9uRXhpdGVkID0gMiwKKyAgICBEcmFnQ29udHJvbGxlckFjdGlvblBlcmZvcm1E
cmFnID0gMworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBEcmFnQ29u
dHJvbGxlckFjdGlvbnNfaApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZp
c2lvbiA3NTY2MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJXZWJQcm90ZWN0aW9uU3BhY2Uu
aCIKICNpbmNsdWRlICJXZWJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVl
c3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
bG9hdFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1dpbmRvd0ZlYXR1cmVzLmg+CkBAIC0xMjQsNiArMTI1LDcgQEAgV2ViUGFn
ZVByb3h5OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVudCogcAogICAgICwgbV9oYXNTcGVsbERvY3Vt
ZW50VGFnKGZhbHNlKQogICAgICwgbV9wZW5kaW5nTGVhcm5Pcklnbm9yZVdvcmRNZXNzYWdlQ291
bnQoMCkKICAgICAsIG1fbWFpbkZyYW1lSGFzQ3VzdG9tUmVwcmVzZW50YXRpb24oZmFsc2UpCisg
ICAgLCBtX2N1cnJlbnREcmFnT3BlcmF0aW9uKERyYWdPcGVyYXRpb25Ob25lKQogewogI2lmbmRl
ZiBOREVCVUcKICAgICB3ZWJQYWdlUHJveHlDb3VudGVyLmluY3JlbWVudCgpOwpAQCAtNTg4LDYg
KzU5MCwxOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QWN0dWFsVmlzaWJsZUNvbnRlCiB9CiAj
ZW5kaWYKIAordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihE
cmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKiBkcmFnRGF0YSwg
Y29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLT5jbGllbnRQb3NpdGlv
bigpLCBkcmFnRGF0YS0+Z2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNl
T3BlcmF0aW9uTWFzaygpLCBkcmFnU3RvcmFnZU5hbWUsIGRyYWdEYXRhLT5mbGFncygpKSwgbV9w
YWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURyYWdDb250cm9sbGVy
QWN0aW9uKHVpbnQ2NF90IHJlc3VsdE9wZXJhdGlvbikKK3sKKyAgICBtX2N1cnJlbnREcmFnT3Bl
cmF0aW9uID0gKERyYWdPcGVyYXRpb24pcmVzdWx0T3BlcmF0aW9uOworfQorCiB2b2lkIFdlYlBh
Z2VQcm94eTo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKIHsK
ICAgICBpZiAoIWlzVmFsaWQoKSkKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZp
c2lvbiA3NTY2MikKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNs
dWRlICJDb250ZXh0TWVudVN0YXRlLmgiCisjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXJBY3Rpb25z
LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRlICJTZWxlY3Rpb25TdGF0
ZS5oIgpAQCAtNDcsNiArNDgsNyBAQAogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVUlDbGllbnQu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdBY3Rpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9F
ZGl0QWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3IuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KQEAgLTY4LDYgKzcwLDcgQEAgbmFtZXNwYWNlIENvcmVJ
UEMgewogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOwogICAgIGNsYXNzIEN1cnNvcjsKKyAgICBjbGFzcyBEcmFnRGF0YTsKICAgICBjbGFzcyBG
bG9hdFJlY3Q7CiAgICAgY2xhc3MgSW50U2l6ZTsKICAgICBjbGFzcyBQcm90ZWN0aW9uU3BhY2U7
CkBAIC0yNjksNiArMjcyLDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYmFja0ZvcndhcmRSZW1v
dmVkSXRlbSh1aW50NjRfdCBpdGVtSUQpOwogCisgICAgLy8gRHJhZyBhbmQgZHJvcCBzdXBwb3J0
LgorICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0
aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgZGlkUGVy
Zm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IHJlc3VsdE9wZXJhdGlvbik7CisKICAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQgZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopOwogCkBA
IC0yOTQsNiArMzAxLDkgQEAgcHVibGljOgogICAgIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwKCkg
Y29uc3QgeyByZXR1cm4gbV9wYWdlR3JvdXAuZ2V0KCk7IH0KIAogICAgIGJvb2wgaXNWYWxpZCgp
OworICAgIAorICAgIFdlYkNvcmU6OkRyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbigpIHsgcmV0
dXJuIG1fY3VycmVudERyYWdPcGVyYXRpb247IH0KKyAgICB2b2lkIHJlc2V0RHJhZ09wZXJhdGlv
bigpIHsgbV9jdXJyZW50RHJhZ09wZXJhdGlvbiA9IFdlYkNvcmU6OkRyYWdPcGVyYXRpb25Ob25l
OyB9CiAKICAgICAvLyBSRU1PVkU6IEZvciBkZW1vIHB1cnBvc2VzIG9ubHkuCiAgICAgY29uc3Qg
U3RyaW5nJiB1cmxBdFByb2Nlc3NFeGl0KCkgY29uc3QgeyByZXR1cm4gbV91cmxBdFByb2Nlc3NF
eGl0OyB9CkBAIC01OTIsNiArNjAyLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3BlbmRp
bmdMZWFybk9ySWdub3JlV29yZE1lc3NhZ2VDb3VudDsKIAogICAgIGJvb2wgbV9tYWluRnJhbWVI
YXNDdXN0b21SZXByZXNlbnRhdGlvbjsKKyAgICBXZWJDb3JlOjpEcmFnT3BlcmF0aW9uIG1fY3Vy
cmVudERyYWdPcGVyYXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDc1NjYy
KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0xODYsNCArMTg2LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAg
ICBHZXRHdWVzc2VzRm9yV29yZChXVEY6OlN0cmluZyB3b3JkLCBXVEY6OlN0cmluZyBjb250ZXh0
KSAtPiAoVmVjdG9yPFdURjo6U3RyaW5nPiBndWVzc2VzKQogICAgIExlYXJuV29yZChXVEY6OlN0
cmluZyB3b3JkKTsKICAgICBJZ25vcmVXb3JkKFdURjo6U3RyaW5nIHdvcmQpOworICAgIAorICAg
ICMgRHJhZyBhbmQgZHJvcC4KKyAgICBEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWlu
dDY0X3QgcmVzdWx0T3BlcmF0aW9uKQogfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXcubW0JKHJldmlzaW9uIDc1NjYyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDEyIEBACiAjaW1wb3J0ICJXZWJTeXN0
ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Db2xvck1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9EcmFnRGF0YS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXli
b2FyZEV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50
ZXJmYWNlLmg+CiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CkBAIC0xNTQsNiArMTU3LDI1IEBAIC0g
KGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXgKICAgICByZXR1cm4gW3NlbGYg
aW5pdFdpdGhGcmFtZTpmcmFtZSBjb250ZXh0UmVmOmNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOm5p
bF07CiB9CiAKK3N0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYkFyY2hpdmVQYm9hcmRUeXBlID0g
QCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOworc3RhdGljIE5TU3RyaW5nICog
Y29uc3QgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlID0gQCJXZWJVUkxzV2l0aFRpdGxlc1Bi
b2FyZFR5cGUiOworc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViVVJMUGJvYXJkVHlwZSA9IEAi
cHVibGljLnVybCI7CitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJVUkxOYW1lUGJvYXJkVHlw
ZSA9IEAicHVibGljLnVybC1uYW1lIjsKKworLSAodm9pZClfcmVnaXN0ZXJEcmFnZ2VkVHlwZXMK
K3sKKyAgICBOU0FycmF5ICplZGl0YWJsZVR5cGVzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0
czpXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNIVE1MUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9h
cmRUeXBlLCBOU1RJRkZQYm9hcmRUeXBlLCBOU1BERlBib2FyZFR5cGUsCisjaWYgZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAg
ICBOU1BJQ1RQYm9hcmRUeXBlLAorI2VuZGlmCisgICAgICAgIE5TVVJMUGJvYXJkVHlwZSwgTlNS
VEZEUGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TQ29s
b3JQYm9hcmRUeXBlLCBrVVRUeXBlUE5HLCBuaWxdOworICAgIE5TQXJyYXkgKlVSTFR5cGVzID0g
W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czogV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBO
U1VSTFBib2FyZFR5cGUsIFdlYlVSTFBib2FyZFR5cGUsICBXZWJVUkxOYW1lUGJvYXJkVHlwZSwg
TlNTdHJpbmdQYm9hcmRUeXBlLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIG5pbF07CisgICAgTlNN
dXRhYmxlU2V0ICp0eXBlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0V2l0aEFycmF5OmVk
aXRhYmxlVHlwZXNdOworICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OlVSTFR5cGVzXTsK
KyAgICBbc2VsZiByZWdpc3RlckZvckRyYWdnZWRUeXBlczpbdHlwZXMgYWxsT2JqZWN0c11dOwor
ICAgIFt0eXBlcyByZWxlYXNlXTsKK30KKwogLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZy
YW1lIGNvbnRleHRSZWY6KFdLQ29udGV4dFJlZiljb250ZXh0UmVmIHBhZ2VHcm91cFJlZjooV0tQ
YWdlR3JvdXBSZWYpcGFnZUdyb3VwUmVmCiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZy
YW1lOmZyYW1lXTsKQEAgLTE3Niw2ICsxOTgsOCBAQCAtIChpZClpbml0V2l0aEZyYW1lOihOU1Jl
Y3QpZnJhbWUgY29udGV4CiAgICAgX2RhdGEtPl9wYWdlID0gdG9JbXBsKGNvbnRleHRSZWYpLT5j
cmVhdGVXZWJQYWdlKF9kYXRhLT5fcGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cFJl
ZikpOwogICAgIF9kYXRhLT5fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKIAorICAgIFtzZWxm
IF9yZWdpc3RlckRyYWdnZWRUeXBlc107CisKICAgICBXZWJDb250ZXh0OjpzdGF0aXN0aWNzKCku
d2tWaWV3Q291bnQrKzsKIAogI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkK
QEAgLTk3Nyw2ICsxMDAxLDYyIEBAIC0gKE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5n
ZTooTlMKICAgICByZXR1cm4gcmVzdWx0UmVjdDsKIH0KIAorLSAoRHJhZ0FwcGxpY2F0aW9uRmxh
Z3MpYXBwbGljYXRpb25GbGFnczooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sK
KyAgICB1aW50MzJfdCBmbGFncyA9IDA7CisgICAgaWYgKFtOU0FwcCBtb2RhbFdpbmRvd10pCisg
ICAgICAgIGZsYWdzID0gRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbDsKKyAgICBpZiAoW1tzZWxmIHdp
bmRvd10gYXR0YWNoZWRTaGVldF0pCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbkhh
c0F0dGFjaGVkU2hlZXQ7CisgICAgaWYgKFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VdID09
IHNlbGYpCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzU291cmNlOworICAgIGlm
IChbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10gJiBOU0FsdGVybmF0ZUtleU1h
c2spCisgICAgICAgIGZsYWdzIHw9IERyYWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PERyYWdBcHBsaWNhdGlvbkZsYWdzPihmbGFncyk7Cit9CisKKy0g
KE5TRHJhZ09wZXJhdGlvbilkcmFnZ2luZ0VudGVyZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJh
Z2dpbmdJbmZvCit7CisgICAgSW50UG9pbnQgY2xpZW50KFtzZWxmIGNvbnZlcnRQb2ludDpbZHJh
Z2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dIGZyb21WaWV3Om5pbF0pOworICAgIEludFBvaW50
IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2Vs
ZiB3aW5kb3ddKSk7CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQs
IGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2lu
Z1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0lu
Zm9dKTsKKyAgICAKKyAgICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bihEcmFnQ29udHJvbGxlckFjdGlvbkVudGVyZWQsICZkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8g
ZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CisgICAgcmV0dXJuIE5TRHJhZ09wZXJhdGlvbkNv
cHk7Cit9CisKKy0gKE5TRHJhZ09wZXJhdGlvbilkcmFnZ2luZ1VwZGF0ZWQ6KGlkIDxOU0RyYWdn
aW5nSW5mbz4pZHJhZ2dpbmdJbmZvCit7CisgICAgSW50UG9pbnQgY2xpZW50KFtzZWxmIGNvbnZl
cnRQb2ludDpbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dIGZyb21WaWV3Om5pbF0pOwor
ICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9j
YXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJ
bmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5n
SW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFn
czpkcmFnZ2luZ0luZm9dKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EcmFnQ29udHJvbGxl
ckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvblVwZGF0ZWQsICZkcmFnRGF0YSwgW1tkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CisgICAgcmV0dXJuIF9kYXRhLT5fcGFn
ZS0+ZHJhZ09wZXJhdGlvbigpOworfQorCistICh2b2lkKWRyYWdnaW5nRXhpdGVkOihpZCA8TlNE
cmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIEludFBvaW50IGNsaWVudChbc2VsZiBj
b252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxd
KTsKKyAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2lu
Z0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdn
aW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFn
Z2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9u
RmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7CisgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25FeGl0ZWQsICZkcmFnRGF0YSwgW1tkcmFn
Z2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CisgICAgX2RhdGEtPl9wYWdlLT5y
ZXNldERyYWdPcGVyYXRpb24oKTsKK30KKworLSAoQk9PTClwcmVwYXJlRm9yRHJhZ09wZXJhdGlv
bjooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KK3sKKyAgICByZXR1cm4gWUVTOwor
fQorCistIChCT09MKXBlcmZvcm1EcmFnT3BlcmF0aW9uOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRy
YWdnaW5nSW5mbworeworICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2Ry
YWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsKKyAgICBJbnRQb2lu
dCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3Nl
bGYgd2luZG93XSkpOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50
LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJ
bmZvXSk7CisgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJh
Z0NvbnRyb2xsZXJBY3Rpb25QZXJmb3JtRHJhZywgJmRyYWdEYXRhLCBbW2RyYWdnaW5nSW5mbyBk
cmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKKyAgICByZXR1cm4gWUVTOworfQorCiAtICh2b2lk
KV91cGRhdGVXaW5kb3dWaXNpYmlsaXR5CiB7CiAgICAgX2RhdGEtPl9wYWdlLT51cGRhdGVXaW5k
b3dJc1Zpc2libGUoIVtbc2VsZiB3aW5kb3ddIGlzTWluaWF0dXJpemVkXSk7CkluZGV4OiBXZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzU2NjIpCisr
KyBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNjU3LDYgKzY1Nyw3IEBACiAJCUMwRTNBQTdBMTIwOUU4MzAwMEE0OUQwMSAvKiBNb2R1
bGVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MEUzQUE0ODEyMDlFNDUwMDBBNDlEMDEgLyogTW9kdWxlTWFjLm1tICovOyB9OwogCQlDMEUzQUE3
QjEyMDlFODM1MDBBNDlEMDEgLyogTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwRTNBQTQ1MTIwOUUyQkEwMEE0OUQwMSAvKiBNb2R1bGUu
Y3BwICovOyB9OwogCQlDMEUzQUE3QzEyMDlFODNDMDBBNDlEMDEgLyogTW9kdWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEUzQUE0NDEyMDlFMkJB
MDBBNDlEMDEgLyogTW9kdWxlLmggKi87IH07CisJCUM1MTczODgxMTJERjhGNEYwMEVFM0Y0NyAv
KiBEcmFnQ29udHJvbGxlckFjdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1MTczODgwMTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxl
ckFjdGlvbnMuaCAqLzsgfTsKIAkJQzUyMzdGNjAxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRv
ckNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gKi87
IH07CiAJCUQzQjk0ODQ2MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDIxMUZGNEI2
NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgKi87IH07CiAJCUQzQjk0ODQ3MTFGRjRCNjUw
MDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUu
aCAqLzsgfTsKQEAgLTE0MDksNiArMTQxMCw3IEBACiAJCUMwRTNBQTQ0MTIwOUUyQkEwMEE0OUQw
MSAvKiBNb2R1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9kdWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwRTNBQTQ1MTIwOUUyQkEwMEE0OUQwMSAv
KiBNb2R1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9kdWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzBFM0FBNDgxMjA5RTQ1MDAwQTQ5
RDAxIC8qIE1vZHVsZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IE1vZHVsZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzUxNzM4ODAx
MkRGOEY0RjAwRUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEcmFnQ29udHJvbGxlckFjdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzUyMzdGNUYxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRvckNs
aWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVk
aXRvckNsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDIx
MUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBvcHVwTWVudS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTcyNCw2ICsxNzI2LDcgQEAKIAkJCQkxQTJEOTU2RDEyODQ4NTY0
MDAxRUI5NjIgLyogQ2hpbGRQcm9jZXNzLmggKi8sCiAJCQkJMUE2RjlGOEUxMUUxM0VGQzAwREIx
MzcxIC8qIENvbW1hbmRMaW5lLmggKi8sCiAJCQkJMUEyQzMwNkYxMkQ1NTU0NTAwNjNEQUEyIC8q
IENvbnRleHRNZW51U3RhdGUuaCAqLywKKwkJCQlDNTE3Mzg4MDEyREY4RjRGMDBFRTNGNDcgLyog
RHJhZ0NvbnRyb2xsZXJBY3Rpb25zLmggKi8sCiAJCQkJMEZCNjU5MjIxMjA4QjREQjAwNDQ4MTZD
IC8qIERyYXdpbmdBcmVhSW5mby5oICovLAogCQkJCTc2MkI3NDgxMTIwQkJBMDEwMDgxOTMzOSAv
KiBGb250U21vb3RoaW5nTGV2ZWwuaCAqLywKIAkJCQlCQ0NGNkIyMzEyQzkzRTdBMDA4RjlDMzUg
LyogSW1hZ2VPcHRpb25zLmggKi8sCkBAIC0zMDI4LDYgKzMwMzEsNyBAQAogCQkJCTFBNjQyMzUz
MTJERDE4N0MwMENBQUUyQyAvKiBSZWdpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjQyNDVF
MTJERTI5QTEwMENBQUUyQyAvKiBVcGRhdGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY0
MjU2ODEyREU0MkVDMDBDQUFFMkMgLyogQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlDNTE3Mzg4MTEyREY4RjRGMDBFRTNGNDcgLyogRHJhZ0NvbnRyb2xsZXJBY3Rpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJE
cmFnQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAJKHJldmlzaW9uIDc1NjYyKQorKysgV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwyOSArMzQsMjQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViRHJhZ0NsaWVu
dDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
LCBEcmFnRGF0YSopCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJEcmFn
Q2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29u
c3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
IERyYWdEZXN0aW5hdGlvbkFjdGlvbiBXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhE
cmFnRGF0YSopCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uTm9uZTsKKyAgICByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55Owog
fQogCiBEcmFnU291cmNlQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmRyYWdTb3VyY2VBY3Rpb25NYXNr
Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Ob25lOworICAgIHJldHVybiBEcmFn
U291cmNlQWN0aW9uQW55OwogfQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFn
SW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqLCBG
cmFtZSosIGJvb2wpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogRHJhZ0ltYWdlUmVm
IFdlYkRyYWdDbGllbnQ6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmsoS1VSTCYsIGNvbnN0IFN0cmlu
ZyYsIEZyYW1lKikKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShy
ZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudEZyYWdtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9EcmFnQ29udHJvbGxlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXND
b250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgpAQCAtMTI1MCw2ICsxMjUy
LDM2IEBAIGJvb2wgV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQKIH0KICNlbmRp
ZgogCit2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBh
Y3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2lu
dCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBj
b25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgdWludDMyX3QgZmxhZ3MpCit7CisgICAgRHJh
Z0RhdGEgZHJhZ0RhdGEoZHJhZ1N0b3JhZ2VOYW1lLCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9z
aXRpb24sIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KGRyYWdnaW5nU291cmNlT3BlcmF0aW9u
TWFzayksIHN0YXRpY19jYXN0PERyYWdBcHBsaWNhdGlvbkZsYWdzPihmbGFncykpOworICAgIHN3
aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBEcmFnQ29udHJvbGxlckFjdGlvbkVudGVyZWQ6Cisg
ICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9s
bGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRh
KSkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRh
dGVkOgorICAgICAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdPcGVyYXRpb25O
b25lKSk7CisgICAgICAgIAorICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRy
YWdVcGRhdGVkKCZkcmFnRGF0YSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNh
c2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FeGl0ZWQ6CisgICAgICAgIGlmICghbV9wYWdlKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0V4
aXRlZCgmZHJhZ0RhdGEpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBEcmFn
Q29udHJvbGxlckFjdGlvblBlcmZvcm1EcmFnOgorICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9s
bGVyKCktPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
IFdlYkVkaXRDb21tYW5kKiBXZWJQYWdlOjp3ZWJFZGl0Q29tbWFuZCh1aW50NjRfdCBjb21tYW5k
SUQpCiB7CiAgICAgcmV0dXJuIG1fZWRpdENvbW1hbmRNYXAuZ2V0KGNvbW1hbmRJRCkuZ2V0KCk7
CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiA3NTY2MikK
KysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjk4LDYgKzI5OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgdm9pZCByZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6Oklu
dFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwg
dWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBjb25zdCBXVEY6OlN0cmluZyYg
ZHJhZ1N0b3JhZ2VOYW1lLCB1aW50MzJfdCBmbGFncyk7CiAKICAgICBib29sIG1haW5GcmFtZUhh
c0N1c3RvbVJlcHJlc2VudGF0aW9uKCkgY29uc3Q7CiAKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzU2NjIpCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC05Niw2ICs5Niw5IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogICAgIEhpZGVGaW5k
VUkoKQogICAgIENvdW50U3RyaW5nTWF0Y2hlcyhXVEY6OlN0cmluZyBzdHJpbmcsIHVpbnQzMl90
IGZpbmRPcHRpb25zLCB1bnNpZ25lZCBtYXhNYXRjaENvdW50KQogCisgICAgIyBEcmFnIGFuZCBk
cm9wLgorICAgIFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdl
YkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQ
b3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6OlN0cmlu
ZyBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzKQorCiAgICAgIyBQb3B1cCBtZW51Lgog
ICAgIERpZENoYW5nZVNlbGVjdGVkSW5kZXhGb3JBY3RpdmVQb3B1cE1lbnUoaW50MzJfdCBuZXdJ
bmRleCk7CiAgICAgU2V0VGV4dEZvckFjdGl2ZVBvcHVwTWVudShpbnQzMl90IGluZGV4KTsKSW5k
ZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA3NTY2MikKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMDEtMTIgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNh
QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZWJLaXQyOiBBZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJvcAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgIAorICAgICAgICBUaGUgRHJhZ0RhdGEgY2xhc3Mg
aGFzIGJlZW4gZXh0ZW5kZWQgdG8gcHJvdmlkZQorICAgICAgICBhZGRpdGlvbmFsIGNvbnRleHQg
ZnJvbSB0aGUgYXBwbGljYXRpb24gKGtleWJvYXJkIHN0YXRlLCBtb2RhbCB3aW5kb3dzLCBldGMu
KQorICAgICAgICBhcyB3ZWxsIGFzIGluZm9ybWF0aW9uIG9mIHRoZSBkcmFnIHBhc3RlYm9hcmQg
YmVpbmcgdXNlZC4KKyAgICAgICAgVGhlc2UgYXJlIHRoZSBjaGFuZ2VzIHRvIGFsaWduIHRoZSBi
ZWhhdmlvciBmb3IgV2ViS2l0LgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAg
ICAgICAoLVtXZWJWaWV3IGFwcGxpY2F0aW9uRmxhZ3M6XSk6IEFkZGVkLgorICAgICAgICAoLVtX
ZWJWaWV3IGRyYWdnaW5nRW50ZXJlZDpdKTogQWRkZWQgcGFyYW1ldGVyIHRvIHRoZSBEcmFnRGF0
YSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKC1bV2ViVmlldyBkcmFnZ2luZ1VwZGF0ZWQ6XSk6IEFk
ZGVkIHBhcmFtZXRlciB0byB0aGUgRHJhZ0RhdGEgY29uc3RydWN0b3IuCisgICAgICAgICgtW1dl
YlZpZXcgZHJhZ2dpbmdFeGl0ZWQ6XSk6IEFkZGVkIHBhcmFtZXRlciB0byB0aGUgRHJhZ0RhdGEg
Y29uc3RydWN0b3IuCisgICAgICAgICgtW1dlYlZpZXcgcGVyZm9ybURyYWdPcGVyYXRpb246XSk6
IEFkZGVkIHBhcmFtZXRlciB0byB0aGUgRHJhZ0RhdGEgY29uc3RydWN0b3IuCisKIDIwMTEtMDEt
MTIgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA3NTY2
MikKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
NzY1LDExICszNzY1LDI1IEBAIC0gKEJPT0wpX3Nob3VsZEF1dG9zY3JvbGxGb3JEcmFnZ2luZ0lu
Zm8KICAgICByZXR1cm4gW2RvY3VtZW50VmlldyBfc2hvdWxkQXV0b3Njcm9sbEZvckRyYWdnaW5n
SW5mbzpkcmFnZ2luZ0luZm9dOwogfQogCistIChEcmFnQXBwbGljYXRpb25GbGFncylhcHBsaWNh
dGlvbkZsYWdzOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbworeworICAgIHVpbnQz
Ml90IGZsYWdzID0gMDsKKyAgICBpZiAoW05TQXBwIG1vZGFsV2luZG93XSkKKyAgICAgICAgZmxh
Z3MgPSBEcmFnQXBwbGljYXRpb25Jc01vZGFsOworICAgIGlmIChbW3NlbGYgd2luZG93XSBhdHRh
Y2hlZFNoZWV0XSkKKyAgICAgICAgZmxhZ3MgfD0gRHJhZ0FwcGxpY2F0aW9uSGFzQXR0YWNoZWRT
aGVldDsKKyAgICBpZiAoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZV0gPT0gc2VsZikKKyAg
ICAgICAgZmxhZ3MgfD0gRHJhZ0FwcGxpY2F0aW9uSXNTb3VyY2U7CisgICAgaWYgKFtbTlNBcHAg
Y3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXSAmIE5TQWx0ZXJuYXRlS2V5TWFzaykKKyAgICAg
ICAgZmxhZ3MgfD0gRHJhZ0FwcGxpY2F0aW9uSXNDb3B5S2V5RG93bjsKKyAgICByZXR1cm4gKERy
YWdBcHBsaWNhdGlvbkZsYWdzKWZsYWdzOworfQorCiAtIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dp
bmdFbnRlcmVkOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwogewogICAgIEludFBv
aW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2lu
dCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3Nl
bGYgd2luZG93XSkpOwotICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50
LCBnbG9iYWwsIChEcmFnT3BlcmF0aW9uKVtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVy
YXRpb25NYXNrXSk7CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQs
IGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2lu
Z1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0lu
Zm9dKTsKICAgICByZXR1cm4gY29yZShzZWxmKS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VudGVy
ZWQoJmRyYWdEYXRhKTsKIH0KIApAQCAtMzc4MSw3ICszNzk1LDcgQEAgLSAoTlNEcmFnT3BlcmF0
aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPAogCiAgICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0pOwogICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2lu
dChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7Ci0gICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVy
YXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKTsKKyAgICBE
cmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2Fz
dDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
a10pLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwogICAgIHJldHVybiBw
YWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOwogfQogCkBAIC0z
NzkzLDcgKzM4MDcsNyBAQCAtICh2b2lkKWRyYWdnaW5nRXhpdGVkOihpZCA8TlNEcmFnZ2luZ0lu
CiAKICAgICBJbnRQb2ludCBjbGllbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSk7
CiAgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdM
b2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKLSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2lu
Z0luZm8sIGNsaWVudCwgZ2xvYmFsLCAoRHJhZ09wZXJhdGlvbilbZHJhZ2dpbmdJbmZvIGRyYWdn
aW5nU291cmNlT3BlcmF0aW9uTWFza10pOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5n
SW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxh
Z3M6ZHJhZ2dpbmdJbmZvXSk7CiAgICAgcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0V4aXRl
ZCgmZHJhZ0RhdGEpOwogfQogCkBAIC0zODA2LDcgKzM4MjAsNyBAQCAtIChCT09MKXBlcmZvcm1E
cmFnT3BlcmF0aW9uOihpZCA8TlNEcmFnCiB7CiAgICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0pOwogICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2lu
dChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7Ci0gICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgKERyYWdPcGVy
YXRpb24pW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKTsKKyAgICBE
cmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2Fz
dDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
a10pLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwogICAgIHJldHVybiBj
b3JlKHNlbGYpLT5kcmFnQ29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOwogfQog
Cg==
</data>
<flag name="review"
          id="70217"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79388</attachid>
            <date>2011-01-18 21:26:24 -0800</date>
            <delta_ts>2011-01-19 09:08:01 -0800</delta_ts>
            <desc>Patch6</desc>
            <filename>dragsource.txt</filename>
            <type>text/plain</type>
            <size>43945</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTAw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDEt
MTggIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBhZGQgc3VwcG9ydCBmb3Ig
ZHJhZyBhbmQgZHJvcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTIzNDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgIAor
ICAgICAgICBUaGlzIHBhdGNoIGNvbnRhaW5zIHRoZSByZW1haW5pbmcgd29yayB0byBzdXBwb3J0
IGRyYWcgYW5kIGRyb3Agb24gTWFjLgorICAgICAgICBJJ3ZlIGFkZGVkIGEgUGFzdGVib2FyZFR5
cGVzIGNsYXNzIHRvIGVuY2Fwc3VsYXRlIGFsbCB0aGUgcGFzdGVib2FyZCBmb3JtYXRzCisgICAg
ICAgIHN1cHBvcnRlZCBmb3IgZHJhZyBhbmQgZHJvcC4KKyAgICAgICAgSW4gdGhpcyBpbXBsZW1l
bnRhdGlvbiB3ZSBkb24ndCBzdXBwb3J0IHRoZSBwcm9taXNlZCB0eXBlcywgc2luY2UgSSBjb3Vs
ZCBub3QKKyAgICAgICAgZmluZCBhbiBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMgYWNyb3NzIHBy
b2Nlc3Nlcy4KKyAgICAgICAgVGhlIGJ1bGsgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIGluIGNyZWF0
aW5nIGEgc2hhcmVhYmxlIGJpdG1hcCBmb3IgdGhlIGRyYWcgaW1hZ2UsCisgICAgICAgIHBhc3Mg
aXRzIGhhbmRsZSB0byB0aGUgVUkgcHJvY2VzcyBhbmQgY3JlYXRlIGEgbmV3IE5TSW1hZ2UgZnJv
bSBpdCB0byBiZSBnaXZlbiB0bworICAgICAgICBBcHBLaXQgZm9yIGRyYWdnaW5nLgorICAgICAg
ICBJJ3ZlIGFkZGVkIHRoZSBtaXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2RzIGlu
IHRoZSBkcmFnIGNsaWVudCB0byBob29rCisgICAgICAgIHVwIHRoZSBwbGFjZW1lbnQgb2YgdGhl
IGRhdGEgaW4gdGhlIHBhc3RlYm9hcmQuCisgICAgICAgIAorICAgICAgICAqIFNoYXJlZC9tYWMv
UGFzdGVib2FyZFR5cGVzLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvUGFzdGVib2Fy
ZFR5cGVzLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JF
ZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JVUkwpOgorICAg
ICAgICAoV2ViS2l0OjpQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcyk6CisgICAgICAgIChXZWJL
aXQ6OlBhc3RlYm9hcmRUeXBlczo6Zm9ySW1hZ2VzV2l0aEFyY2hpdmUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9tYWMvUGFnZUNsaWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpzZXREcmFnSW1hZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRpZEVuZERyYWcpOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcu
bW06CisgICAgICAgICgtW1dLVmlldyBfcmVnaXN0ZXJEcmFnZ2VkVHlwZXNdKTogUmVmYWN0b3Jl
ZCB0byB1c2UgdGhlIG5ldyBQYXN0ZWJvYXJkVHlwZXMgY2xhc3MuCisgICAgICAgICgtW1dLVmll
dyBpbml0V2l0aEZyYW1lOmNvbnRleHRSZWY6cGFnZUdyb3VwUmVmOl0pOgorICAgICAgICAoLVtX
S1ZpZXcgX3NldE1vdXNlRG93bkV2ZW50Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX21vdXNlSGFu
ZGxlcjpdKToKKyAgICAgICAgKC1bV0tWaWV3IG1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tW
aWV3IG1vdXNlVXA6XSk6CisgICAgICAgICgtW1dLVmlldyBtb3VzZURyYWdnZWQ6XSk6CisgICAg
ICAgICgtW1dLVmlldyBfZGlkRW5kRHJhZzpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnZWRJ
bWFnZTplbmRlZEF0Om9wZXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRW50
ZXJlZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IF9zZXREcmFnSW1hZ2U6YXQ6bGlua0RyYWc6XSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldERyYWdJbWFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZHJhZ0VuZGVkKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpkaWRFbmREcmFnKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoK
KyAgICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6Zm9udEZyb21OU0ZvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
Q2xpZW50OjpzdGFydERyYWcpOiBBZGRlZCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYktp
dDo6V2ViRHJhZ0NsaWVudDo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0Ojp3cml0ZVVSTCk6IFV0aWxpdHkgZnVuY3Rpb24uCisgICAgICAgIChXZWJLaXQ6
OndyaXRlSW1hZ2UpOiBVdGlsaXR5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
Q2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRy
YWdFbmRlZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMS0wMS0x
OCAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA3NjEwMCkKKysrIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjYxLDYgKzY2MSw5IEBACiAJCUMwRTNBQTdDMTIwOUU4M0MwMEE0OUQwMSAvKiBN
b2R1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMw
RTNBQTQ0MTIwOUUyQkEwMEE0OUQwMSAvKiBNb2R1bGUuaCAqLzsgfTsKIAkJQzUxNzM4ODExMkRG
OEY0RjAwRUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTE3Mzg4MDEyREY4RjRGMDBFRTNGNDcgLyog
RHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCAqLzsgfTsKIAkJQzUyMzdGNjAxMjQ0MUNBMzAwNzgwNDcy
IC8qIFdlYkVkaXRvckNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGll
bnRNYWMubW0gKi87IH07CisJCUM1NzRBMzc3MTJFNjA5OUQwMDJERkU5OCAvKiBXZWJEcmFnQ2xp
ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzU1NEZGQTIxMkU0RThFQTAwMkYyMkMwIC8qIFdlYkRyYWdDbGllbnRNYWMubW0gKi87IH07CisJ
CUM1NzRBNTgxMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NzRBNTdGMTJFNjY2ODEwMDJE
RkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCAqLzsgfTsKKwkJQzU3NEE1ODIxMkU2NjY4MTAwMkRG
RTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1NzRBNTgwMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlw
ZXMubW0gKi87IH07CiAJCUQzQjk0ODQ2MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4
NDIxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgKi87IH07CiAJCUQzQjk0ODQ3
MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQ
b3B1cE1lbnUuaCAqLzsgfTsKIAkJRDNCOTQ4NDgxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJj
aFBvcHVwTWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBEM0I5NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCAq
LzsgfTsKQEAgLTE0MjEsNiArMTQyNCw5IEBACiAJCUMwRTNBQTQ4MTIwOUU0NTAwMEE0OUQwMSAv
KiBNb2R1bGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBN
b2R1bGVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1MTczODgwMTJERjhG
NEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEcmFnQ29udHJvbGxlckFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDNTIzN0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRpdG9yQ2xpZW50TWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRWRpdG9yQ2xp
ZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTU0RkZBMjEyRTRFOEVB
MDAyRjIyQzAgLyogV2ViRHJhZ0NsaWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYkRyYWdDbGllbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUM1NzRBNTdGMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1NzRBNTgwMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0
ZWJvYXJkVHlwZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQ
YXN0ZWJvYXJkVHlwZXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQy
MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViUG9wdXBNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQb3B1cE1lbnUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBv
cHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTZWFy
Y2hQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI2Nyw2ICsy
MjczLDcgQEAKIAkJQkMxMTFBREUxMTJGNUI5QTAwMzM3QkFCIC8qIG1hYyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzU1NEZGQTIxMkU0RThFQTAwMkYy
MkMwIC8qIFdlYkRyYWdDbGllbnRNYWMubW0gKi8sCiAJCQkJNTEwMjFFOUIxMkIxNjc4ODAwNUMw
MzNDIC8qIFdlYkNvbnRleHRNZW51Q2xpZW50TWFjLm1tICovLAogCQkJCUY2QTI1RkQ4MTJBREM2
QkQwMERDNDBDQyAvKiBXZWJEYXRhYmFzZU1hbmFnZXJNYWMubW0gKi8sCiAJCQkJQzUyMzdGNUYx
MjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRvckNsaWVudE1hYy5tbSAqLywKQEAgLTIzMjIsNiAr
MjMyOSw4IEBACiAJCUJDMTExQjVBMTEyRjYyODIwMDMzN0JBQiAvKiBtYWMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUM1NzRBNTdGMTJFNjY2ODEwMDJE
RkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCAqLywKKwkJCQlDNTc0QTU4MDEyRTY2NjgxMDAyREZF
OTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovLAogCQkJCTFBNkY5RkI2MTFFMTQwODUwMERCMTM3
MSAvKiBDb21tYW5kTGluZU1hYy5jcHAgKi8sCiAJCQkJQzAyQkZGMUQxMjUxNTAyRTAwOUNDQkVB
IC8qIE5hdGl2ZVdlYktleWJvYXJkRXZlbnRNYWMubW0gKi8sCiAJCQkJQkNGNTA1RTYxMjQzMDQ3
QjAwNTk1NUFFIC8qIFBsYXRmb3JtQ2VydGlmaWNhdGVJbmZvLm1tICovLApAQCAtMzA1OSw2ICsz
MDY4LDcgQEAKIAkJCQkxQTY0MjU2ODEyREU0MkVDMDBDQUFFMkMgLyogQmFja2luZ1N0b3JlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDNTE3Mzg4MTEyREY4RjRGMDBFRTNGNDcgLyogRHJhZ0NvbnRy
b2xsZXJBY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2
NiAvKiBDR1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQzU3NEE1ODExMkU2NjY4MTAw
MkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTIwLDYgKzM1
MzAsOCBAQAogCQkJCTFBNjQyNTY5MTJERTQyRUMwMENBQUUyQyAvKiBCYWNraW5nU3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2NDI5MkQxMkRFNUY5ODAwQ0FBRTJDIC8qIEJhY2tpbmdT
dG9yZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQTJFNTFFMTJFNEMwNUUwMEJDNDk2NiAv
KiBDR1V0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDNTc0QTM3NzEyRTYwOTlEMDAy
REZFOTggLyogV2ViRHJhZ0NsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUM1NzRBNTgy
MTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNoYXJlZC9t
YWMvUGFzdGVib2FyZFR5cGVzLm1tCShyZXZpc2lvbiAwKQorKysgU2hhcmVkL21hYy9QYXN0ZWJv
YXJkVHlwZXMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJQYXN0ZWJvYXJkVHlwZXMuaCIKKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK05TU3RyaW5nICogY29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5
cGUgPSBAIkFwcGxlIFdlYiBBcmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7CitOU1N0cmluZyAqIGNv
bnN0IFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSA9IEAiV2ViVVJMc1dpdGhUaXRsZXNQYm9h
cmRUeXBlIjsKK05TU3RyaW5nICogY29uc3QgV2ViVVJMUGJvYXJkVHlwZSA9IEAicHVibGljLnVy
bCI7CitOU1N0cmluZyAqIGNvbnN0IFdlYlVSTE5hbWVQYm9hcmRUeXBlID0gQCJwdWJsaWMudXJs
LW5hbWUiOworCitOU0FycmF5KiBQYXN0ZWJvYXJkVHlwZXM6OmZvckVkaXRpbmcoKQoreworICAg
IHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gdHlwZXMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmpl
Y3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hUTUxQYm9hcmRUeXBlLCBOU0ZpbGVuYW1lc1Bi
b2FyZFR5cGUsIE5TVElGRlBib2FyZFR5cGUsIE5TUERGUGJvYXJkVHlwZSwKKyNpZiBkZWZpbmVk
KEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAg
ICAgIE5TUElDVFBib2FyZFR5cGUsCisjZW5kaWYKKyAgICAgICAgTlNVUkxQYm9hcmRUeXBlLCBO
U1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwgTlND
b2xvclBib2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07CisgICAgcmV0dXJuIHR5cGVzLmdldCgp
OworfQorCitOU0FycmF5KiBQYXN0ZWJvYXJkVHlwZXM6OmZvclVSTCgpCit7CisgICAgc3RhdGlj
IFJldGFpblB0cjxOU0FycmF5PiB0eXBlcyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6V2Vi
VVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2FyZFR5cGUsIFdlYlVSTFBib2FyZFR5
cGUsICBXZWJVUkxOYW1lUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBOU0ZpbGVuYW1l
c1Bib2FyZFR5cGUsIG5pbF07CisgICAgcmV0dXJuIHR5cGVzLmdldCgpOworfQorCitOU0FycmF5
KiBQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcygpCit7CisgICAgc3RhdGljIFJldGFpblB0cjxO
U0FycmF5PiB0eXBlcyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6TlNUSUZGUGJvYXJkVHlw
ZSwgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2FyZFR5cGUsIFdlYlVSTFBi
b2FyZFR5cGUsIFdlYlVSTE5hbWVQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIG5pbF07
CisgICAgcmV0dXJuIHR5cGVzLmdldCgpOworfQorCitOU0FycmF5KiBQYXN0ZWJvYXJkVHlwZXM6
OmZvckltYWdlc1dpdGhBcmNoaXZlKCkKK3sKKyAgICBzdGF0aWMgUmV0YWluUHRyPE5TQXJyYXk+
IHR5cGVzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpOU1RJRkZQYm9hcmRUeXBlLCBXZWJV
UkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUsIE5TVVJMUGJvYXJkVHlwZSwgV2ViVVJMUGJvYXJkVHlw
ZSwgV2ViVVJMTmFtZVBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwgTlNSVEZEUGJvYXJk
VHlwZSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUsIG5pbF07CisgICAgcmV0dXJuIHR5cGVzLmdldCgp
OworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTaGFyZWQvbWFjL1Bhc3Rl
Ym9hcmRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLmgJ
KHJldmlzaW9uIDApCisrKyBTaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXN0ZWJvYXJkVHlwZXNf
aAorI2RlZmluZSBQYXN0ZWJvYXJkVHlwZXNfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZXh0
ZXJuIE5TU3RyaW5nICogY29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5cGU7CitleHRlcm4gTlNTdHJp
bmcgKiBjb25zdCBXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGU7CitleHRlcm4gTlNTdHJpbmcg
KiBjb25zdCBXZWJVUkxQYm9hcmRUeXBlOworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV2ViVVJM
TmFtZVBib2FyZFR5cGU7CisgICAgCitjbGFzcyBQYXN0ZWJvYXJkVHlwZXMgeworcHVibGljOgor
ICAgIAorICAgIHN0YXRpYyBOU0FycmF5KiBmb3JFZGl0aW5nKCk7CisgICAgc3RhdGljIE5TQXJy
YXkqIGZvclVSTCgpOworICAgIHN0YXRpYyBOU0FycmF5KiBmb3JJbWFnZXMoKTsKKyAgICBzdGF0
aWMgTlNBcnJheSogZm9ySW1hZ2VzV2l0aEFyY2hpdmUoKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gUGFzdGVib2FyZFR5cGVzX2gKSW5kZXg6IFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkocmV2aXNpb24gNzYxMDApCisrKyBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw2ICs1MCw3IEBACiAgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAK
KyNpZiAhUExBVEZPUk0oTUFDKQogdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0lt
YWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJh
bWUqLCBib29sKQogewogfQpAQCAtNTksNiArNjAsNyBAQAogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogdm9pZCBXZWJEcmFnQ2xpZW50OjpkcmFnQ29u
dHJvbGxlckRlc3Ryb3llZCgpCiB7CkluZGV4OiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21h
Yy9XZWJEcmFnQ2xpZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW0JKHJldmlzaW9uIDApCisrKyBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5oIgor
I2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKKyNpbXBvcnQgIldlYkRyYWdDbGllbnQuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNp
bXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0NhY2hlZElt
YWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RPTVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RE9NRWxlbWVudEludGVybmFsLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTGVnYWN5
V2ViQXJjaGl2ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJJbWFnZS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9TdHJpbmdUcnVuY2F0b3IuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbXBvcnQgPFdlYktpdC9XZWJLaXROU1N0cmluZ0V4dHJhcy5oPgorI2ltcG9ydCA8V2ViS2l0
L1dlYk5TVVJMRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY29uc3QgZmxvYXQgRHJhZ0xhYmVsQm9yZGVyWCA9IDQ7CisvL0tlZXAg
Ym9yZGVyX3kgaW4gc3luY2ggd2l0aCBEcmFnQ29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJbnNl
dAorY29uc3QgZmxvYXQgRHJhZ0xhYmVsQm9yZGVyWSA9IDI7Citjb25zdCBmbG9hdCBEcmFnTGFi
ZWxSYWRpdXMgPSA1OworY29uc3QgZmxvYXQgTGFiZWxCb3JkZXJZT2Zmc2V0ID0gMjsKKworY29u
c3QgZmxvYXQgTWluRHJhZ0xhYmVsV2lkdGhCZWZvcmVDbGlwID0gMTIwOworY29uc3QgZmxvYXQg
TWF4RHJhZ0xhYmVsV2lkdGggPSAzMjA7CisKK2NvbnN0IGZsb2F0IERyYWdMaW5rTGFiZWxGb250
c2l6ZSA9IDExOworY29uc3QgZmxvYXQgRHJhZ0xpbmtVcmxGb250U2l6ZSA9IDEwOworCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEZvbnQmIGZvbnRGcm9tTlNGb250KE5TRm9u
dCAqZm9udCkKK3sKKyAgICBzdGF0aWMgTlNGb250ICpjdXJyZW50Rm9udDsKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEZvbnQsIGN1cnJlbnRSZW5kZXJlciwgKCkpOworICAgIAorICAgIGlmIChb
Zm9udCBpc0VxdWFsOmN1cnJlbnRGb250XSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJl
cjsKKyAgICBpZiAoY3VycmVudEZvbnQpCisgICAgICAgIENGUmVsZWFzZShjdXJyZW50Rm9udCk7
CisgICAgY3VycmVudEZvbnQgPSBmb250OworICAgIENGUmV0YWluKGN1cnJlbnRGb250KTsKKyAg
ICBGb250UGxhdGZvcm1EYXRhIGYoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSk7CisgICAgY3VycmVu
dFJlbmRlcmVyID0gRm9udChmLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
aXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAgICByZXR1cm4gY3VycmVudFJlbmRlcmVyOworfQorICAg
IAordm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwg
Y29uc3QgSW50UG9pbnQmIGF0LCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCog
Y2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCit7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChjbGlwYm9hcmQpOworICAgIAorICAgIE5T
SW1hZ2UgKmRyYWdOU0ltYWdlID0gZHJhZ0ltYWdlLmdldCgpOworICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGRyYWdTaGFyZWFibGVJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hh
cmVhYmxlKEludFNpemUoW2RyYWdOU0ltYWdlIHNpemVdKSk7CisgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gZHJhZ1NoYXJlYWJsZUltYWdlLT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoKTsKKworICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0
ZV07CisgICAgTlNHcmFwaGljc0NvbnRleHQqIGJpdG1hcENvbnRleHQgPSBbTlNHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpIGZsaXBwZWQ6WUVTXTsKKyAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0
Q3VycmVudENvbnRleHQ6IGJpdG1hcENvbnRleHRdOworICAgIAorICAgIFtkcmFnTlNJbWFnZSBk
cmF3SW5SZWN0Ok5TTWFrZVJlY3QoMCwgMCwgW2RyYWdOU0ltYWdlIHNpemVdLndpZHRoICwgW2Ry
YWdOU0ltYWdlIHNpemVdLmhlaWdodCkgZnJvbVJlY3Q6TlNaZXJvUmVjdCBvcGVyYXRpb246TlND
b21wb3NpdGVTb3VyY2VPdmVyIGZyYWN0aW9uOjFdOworICAgIFtOU0dyYXBoaWNzQ29udGV4dCBy
ZXN0b3JlR3JhcGhpY3NTdGF0ZV07CisgCisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxl
OworICAgIGlmICghZHJhZ1NoYXJlYWJsZUltYWdlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIEludFBvaW50IGNsaWVudFBvaW50KGF0KTsKKyAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0RHJhZ0ltYWdlKGNsaWVudFBvaW50LCBJ
bnRTaXplKFtkcmFnTlNJbWFnZSBzaXplXSksIGhhbmRsZSwgbGlua0RyYWcpKTsKK30KKworRHJh
Z0ltYWdlUmVmIFdlYkRyYWdDbGllbnQ6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmsoS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBOU1N0cmluZyAqbGFiZWwgPSAwOworICAgIGlmICgh
dGl0bGUuaXNFbXB0eSgpKQorICAgICAgICBsYWJlbCA9IHRpdGxlOworICAgIE5TVVJMICpjb2Nv
YVVSTCA9IHVybDsKKyAgICBOU1N0cmluZyAqdXJsU3RyaW5nID0gW2NvY29hVVJMIF93ZWJfdXNl
clZpc2libGVTdHJpbmddOworICAgIAorICAgIEJPT0wgZHJhd1VSTFN0cmluZyA9IFlFUzsKKyAg
ICBCT09MIGNsaXBVUkxTdHJpbmcgPSBOTzsKKyAgICBCT09MIGNsaXBMYWJlbFN0cmluZyA9IE5P
OworICAgIAorICAgIGlmICghbGFiZWwpIHsKKyAgICAgICAgZHJhd1VSTFN0cmluZyA9IE5POwor
ICAgICAgICBsYWJlbCA9IHVybFN0cmluZzsKKyAgICB9CisgICAgCisgICAgTlNGb250ICpsYWJl
bEZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250OltO
U0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpEcmFnTGlua0xhYmVsRm9udHNpemVdCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSGF2ZVRy
YWl0Ok5TQm9sZEZvbnRNYXNrXTsKKyAgICBOU0ZvbnQgKnVybEZvbnQgPSBbTlNGb250IHN5c3Rl
bUZvbnRPZlNpemU6RHJhZ0xpbmtVcmxGb250U2l6ZV07CisgICAgTlNTaXplIGxhYmVsU2l6ZTsK
KyAgICBsYWJlbFNpemUud2lkdGggPSBbbGFiZWwgX3dlYl93aWR0aFdpdGhGb250OiBsYWJlbEZv
bnRdOworICAgIGxhYmVsU2l6ZS5oZWlnaHQgPSBbbGFiZWxGb250IGFzY2VuZGVyXSAtIFtsYWJl
bEZvbnQgZGVzY2VuZGVyXTsKKyAgICBpZiAobGFiZWxTaXplLndpZHRoID4gTWF4RHJhZ0xhYmVs
V2lkdGgpeworICAgICAgICBsYWJlbFNpemUud2lkdGggPSBNYXhEcmFnTGFiZWxXaWR0aDsKKyAg
ICAgICAgY2xpcExhYmVsU3RyaW5nID0gWUVTOworICAgIH0KKyAgICAKKyAgICBOU1NpemUgaW1h
Z2VTaXplOworICAgIGltYWdlU2l6ZS53aWR0aCA9IGxhYmVsU2l6ZS53aWR0aCArIERyYWdMYWJl
bEJvcmRlclggKiAyOworICAgIGltYWdlU2l6ZS5oZWlnaHQgPSBsYWJlbFNpemUuaGVpZ2h0ICsg
RHJhZ0xhYmVsQm9yZGVyWSAqIDI7CisgICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsKKyAgICAgICAg
TlNTaXplIHVybFN0cmluZ1NpemU7CisgICAgICAgIHVybFN0cmluZ1NpemUud2lkdGggPSBbdXJs
U3RyaW5nIF93ZWJfd2lkdGhXaXRoRm9udDogdXJsRm9udF07CisgICAgICAgIHVybFN0cmluZ1Np
emUuaGVpZ2h0ID0gW3VybEZvbnQgYXNjZW5kZXJdIC0gW3VybEZvbnQgZGVzY2VuZGVyXTsKKyAg
ICAgICAgaW1hZ2VTaXplLmhlaWdodCArPSB1cmxTdHJpbmdTaXplLmhlaWdodDsKKyAgICAgICAg
aWYgKHVybFN0cmluZ1NpemUud2lkdGggPiBNYXhEcmFnTGFiZWxXaWR0aCkgeworICAgICAgICAg
ICAgaW1hZ2VTaXplLndpZHRoID0gbWF4KE1heERyYWdMYWJlbFdpZHRoICsgRHJhZ0xhYmVsQm9y
ZGVyWSAqIDIsIE1pbkRyYWdMYWJlbFdpZHRoQmVmb3JlQ2xpcCk7CisgICAgICAgICAgICBjbGlw
VVJMU3RyaW5nID0gWUVTOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGltYWdlU2l6ZS53
aWR0aCA9IG1heChsYWJlbFNpemUud2lkdGggKyBEcmFnTGFiZWxCb3JkZXJYICogMiwgdXJsU3Ry
aW5nU2l6ZS53aWR0aCArIERyYWdMYWJlbEJvcmRlclggKiAyKTsKKyAgICB9CisgICAgTlNJbWFn
ZSAqZHJhZ0ltYWdlID0gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOiBpbWFnZVNpemVd
IGF1dG9yZWxlYXNlXTsKKyAgICBbZHJhZ0ltYWdlIGxvY2tGb2N1c107CisgICAgCisgICAgW1tO
U0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDogMC43ZiBncmVlbjogMC43ZiBibHVlOiAwLjdmIGFs
cGhhOiAwLjhmXSBzZXRdOworICAgIAorICAgIC8vIERyYWcgYSByZWN0YW5nbGUgd2l0aCByb3Vu
ZGVkIGNvcm5lcnMKKyAgICBOU0JlemllclBhdGggKnBhdGggPSBbTlNCZXppZXJQYXRoIGJlemll
clBhdGhdOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtl
UmVjdCgwLCAwLCBEcmFnTGFiZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyKV07Cisg
ICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAsIGlt
YWdlU2l6ZS5oZWlnaHQgLSBEcmFnTGFiZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAy
LCBEcmFnTGFiZWxSYWRpdXMgKiAyKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhP
dmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJlbFJhZGl1cyAq
IDIsIGltYWdlU2l6ZS5oZWlnaHQgLSBEcmFnTGFiZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRp
dXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0
aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJlbFJh
ZGl1cyAqIDIsIDAsIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIpXTsK
KyAgICAKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3QoRHJh
Z0xhYmVsUmFkaXVzLCAwLCBpbWFnZVNpemUud2lkdGggLSBEcmFnTGFiZWxSYWRpdXMgKiAyLCBp
bWFnZVNpemUuaGVpZ2h0KV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBO
U01ha2VSZWN0KDAsIERyYWdMYWJlbFJhZGl1cywgRHJhZ0xhYmVsUmFkaXVzICsgMTAsIGltYWdl
U2l6ZS5oZWlnaHQgLSAyICogRHJhZ0xhYmVsUmFkaXVzKV07CisgICAgW3BhdGggYXBwZW5kQmV6
aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJlbFJh
ZGl1cyAtIDIwLCBEcmFnTGFiZWxSYWRpdXMsIERyYWdMYWJlbFJhZGl1cyArIDIwLCBpbWFnZVNp
emUuaGVpZ2h0IC0gMiAqIERyYWdMYWJlbFJhZGl1cyldOworICAgIFtwYXRoIGZpbGxdOworICAg
IAorICAgIE5TQ29sb3IgKnRvcENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6
MC4wZiBhbHBoYTowLjc1Zl07CisgICAgTlNDb2xvciAqYm90dG9tQ29sb3IgPSBbTlNDb2xvciBj
b2xvcldpdGhEZXZpY2VXaGl0ZToxLjBmIGFscGhhOjAuNWZdOworICAgIGlmIChkcmF3VVJMU3Ry
aW5nKSB7CisgICAgICAgIGlmIChjbGlwVVJMU3RyaW5nKQorICAgICAgICAgICAgLy91cmxTdHJp
bmcgPSBbV2ViU3RyaW5nVHJ1bmNhdG9yIGNlbnRlclRydW5jYXRlU3RyaW5nOiB1cmxTdHJpbmcg
dG9XaWR0aDppbWFnZVNpemUud2lkdGggLSAoRHJhZ0xhYmVsQm9yZGVyWCAqIDIpIHdpdGhGb250
OnVybEZvbnRdOworICAgICAgICAgICAgdXJsU3RyaW5nID0gU3RyaW5nVHJ1bmNhdG9yOjpjZW50
ZXJUcnVuY2F0ZSh1cmxTdHJpbmcsIGltYWdlU2l6ZS53aWR0aCAtIChEcmFnTGFiZWxCb3JkZXJY
ICogMiksIGZvbnRGcm9tTlNGb250KHVybEZvbnQpKTsgICAgICAgCisgICAgICAgIFt1cmxTdHJp
bmcgX3dlYl9kcmF3RG91YmxlZEF0UG9pbnQ6TlNNYWtlUG9pbnQoRHJhZ0xhYmVsQm9yZGVyWCwg
RHJhZ0xhYmVsQm9yZGVyWSAtIFt1cmxGb250IGRlc2NlbmRlcl0pIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRvbUNv
bG9yIGZvbnQ6dXJsRm9udF07CisgICAgfQorICAgIAorICAgIGlmIChjbGlwTGFiZWxTdHJpbmcp
CisgICAgICAgIC8vbGFiZWwgPSBbV2ViU3RyaW5nVHJ1bmNhdG9yIHJpZ2h0VHJ1bmNhdGVTdHJp
bmc6IGxhYmVsIHRvV2lkdGg6aW1hZ2VTaXplLndpZHRoIC0gKERyYWdMYWJlbEJvcmRlclggKiAy
KSB3aXRoRm9udDpsYWJlbEZvbnRdOworICAgICAgICBsYWJlbCA9IFN0cmluZ1RydW5jYXRvcjo6
cmlnaHRUcnVuY2F0ZShsYWJlbCwgaW1hZ2VTaXplLndpZHRoIC0gKERyYWdMYWJlbEJvcmRlclgg
KiAyKSwgZm9udEZyb21OU0ZvbnQobGFiZWxGb250KSk7CisgICAgW2xhYmVsIF93ZWJfZHJhd0Rv
dWJsZWRBdFBvaW50Ok5TTWFrZVBvaW50IChEcmFnTGFiZWxCb3JkZXJYLCBpbWFnZVNpemUuaGVp
Z2h0IC0gTGFiZWxCb3JkZXJZT2Zmc2V0IC0gW2xhYmVsRm9udCBwb2ludFNpemVdKQorICAgICAg
ICAgICAgICAgICAgICAgIHdpdGhUb3BDb2xvcjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0b21D
b2xvciBmb250OmxhYmVsRm9udF07CisgICAgCisgICAgW2RyYWdJbWFnZSB1bmxvY2tGb2N1c107
CisgICAgCisgICAgcmV0dXJuIGRyYWdJbWFnZTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVVUkwo
TlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBOU1VSTCogVVJMLCBOU1N0cmluZyogdGl0bGUsIE5T
QXJyYXkqIHR5cGVzKQoreworICAgIEFTU0VSVChVUkwpOworICAgIAorICAgIGlmICghW3RpdGxl
IGxlbmd0aF0pIHsKKyAgICAgICAgdGl0bGUgPSBbW1VSTCBwYXRoXSBsYXN0UGF0aENvbXBvbmVu
dF07CisgICAgICAgIGlmICghW3RpdGxlIGxlbmd0aF0pCisgICAgICAgICAgICB0aXRsZSA9IFtV
UkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CisgICAgfQorICAgIAorICAgIGlmIChbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNVUkxQYm9hcmRUeXBlXSkKKyAgICAgICAgW1VSTCB3cml0ZVRvUGFz
dGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlVS
TFBib2FyZFR5cGVdKQorICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W1VSTCBfd2ViX29y
aWdpbmFsRGF0YUFzU3RyaW5nXSBmb3JUeXBlOldlYlVSTFBib2FyZFR5cGVdOworICAgIGlmIChb
dHlwZXMgY29udGFpbnNPYmplY3Q6V2ViVVJMTmFtZVBib2FyZFR5cGVdKQorICAgICAgICBbcGFz
dGVib2FyZCBzZXRTdHJpbmc6dGl0bGUgZm9yVHlwZTpXZWJVUkxOYW1lUGJvYXJkVHlwZV07Cisg
ICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKQorICAgICAg
ICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W1VSTCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXSBmb3JU
eXBlOk5TU3RyaW5nUGJvYXJkVHlwZV07CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpX
ZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdKSB7CisgICAgICAgIE5TQXJyYXkqIFVSTHMgPSBb
TlNBcnJheSBhcnJheVdpdGhPYmplY3Q6VVJMXTsKKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBb
VVJMcyBjb3VudF07CisgICAgICAgIAorICAgICAgICBpZiAoIWNvdW50IHx8IFtwYXN0ZWJvYXJk
IGF2YWlsYWJsZVR5cGVGcm9tQXJyYXk6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OldlYlVSTHNX
aXRoVGl0bGVzUGJvYXJkVHlwZV1dID09IG5pbCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBOU0FycmF5KiB0aXRsZXMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6dGl0bGVdOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNvdW50ICE9IFt0aXRsZXMgY291bnRdKQorICAgICAgICAg
ICAgdGl0bGVzID0gbmlsOworICAgICAgICAKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkqIFVSTFN0
cmluZ3MgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y291bnRdOworICAgICAg
ICBOU011dGFibGVBcnJheSogdGl0bGVzT3JFbXB0eVN0cmluZ3MgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6Y291bnRdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
MDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgeworICAgICAgICAgICAgW1VSTFN0cmluZ3MgYWRk
T2JqZWN0OltbVVJMcyBvYmplY3RBdEluZGV4OmluZGV4XSBfd2ViX29yaWdpbmFsRGF0YUFzU3Ry
aW5nXV07CisgICAgICAgICAgICBbdGl0bGVzT3JFbXB0eVN0cmluZ3MgYWRkT2JqZWN0Oih0aXRs
ZXMgPT0gbmlsKSA/IEAiIiA6IFtbdGl0bGVzIG9iamVjdEF0SW5kZXg6aW5kZXhdIF93ZWJraXRf
c3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2VdXTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0OltOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6
VVJMU3RyaW5ncywgdGl0bGVzT3JFbXB0eVN0cmluZ3MsIG5pbF0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JUeXBlOldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZV07CisgICAgfQor
fQorICAgIAorc3RhdGljIHZvaWQgd3JpdGVJbWFnZShOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQs
IE5TSW1hZ2UgKmltYWdlLCBET01FbGVtZW50KiBlbGVtZW50LCBOU1VSTCogVVJMLCBOU1N0cmlu
ZyogdGl0bGUsIExlZ2FjeVdlYkFyY2hpdmUqIGFyY2hpdmUsIE5TQXJyYXkqIHR5cGVzKQorewor
ICAgIEFTU0VSVChpbWFnZSB8fCBlbGVtZW50KTsKKyAgICBBU1NFUlQoVVJMKTsKKyAgICAKKyAg
ICB3cml0ZVVSTChwYXN0ZWJvYXJkLCBVUkwsIHRpdGxlLCB0eXBlcyk7CisgICAgCisgICAgaWYg
KFt0eXBlcyBjb250YWluc09iamVjdDpOU1RJRkZQYm9hcmRUeXBlXSkgeworICAgICAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIGFkZCBoYW5kbGluZyBvZiBwcm9taXNlZCB0eXBlcy4KKyAgICAgICAg
aWYgKGltYWdlKQorICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpbaW1hZ2UgVElGRlJl
cHJlc2VudGF0aW9uXSBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOworICAgICAgICBlbHNlIGlm
IChlbGVtZW50KQorICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpbZWxlbWVudCBfaW1h
Z2VUSUZGUmVwcmVzZW50YXRpb25dIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07CisgICAgfQor
ICAgIAorICAgIGlmIChhcmNoaXZlICYmIFt0eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNoaXZl
UGJvYXJkVHlwZV0pCisgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6W1soTlNEYXRhICopYXJj
aGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkgcmV0YWluXSBhdXRvcmVsZWFzZV0g
Zm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV07Cit9CisgICAgCit2b2lkIFdlYkRyYWdDbGll
bnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIERP
TUVsZW1lbnQqIGVsZW1lbnQsIE5TVVJMKiBVUkwsIE5TU3RyaW5nKiB0aXRsZSwgV2ViQ29yZTo6
RnJhbWUqKQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBBU1NFUlQocGFzdGVib2FyZCAm
JiBwYXN0ZWJvYXJkID09IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRHJhZ1Bi
b2FyZF0pOworICAgIAorICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBAIiI7CisgICAgaWYgKFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKGVsZW1lbnQpLT5yZW5kZXJlcigpKSB7CisgICAg
ICAgIGlmIChyZW5kZXJlci0+aXNJbWFnZSgpKSB7CisgICAgICAgICAgICBpZiAoQ2FjaGVkSW1h
Z2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlciktPmNhY2hlZEltYWdlKCkpIHsKKyAg
ICAgICAgICAgICAgICBleHRlbnNpb24gPSBpbWFnZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNp
b24oKTsKKyAgICAgICAgICAgICAgICBpZiAoIVtleHRlbnNpb24gbGVuZ3RoXSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2
ZTo6Y3JlYXRlKGNvcmUoZWxlbWVudCkpOworICAgIE5TTXV0YWJsZUFycmF5ICp0eXBlcyA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpOU0ZpbGVzUHJvbWlzZVBib2Fy
ZFR5cGUsIG5pbF07CisgICAgW3R5cGVzIGFkZE9iamVjdHNGcm9tQXJyYXk6KGFyY2hpdmUpID8g
UGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXNXaXRoQXJjaGl2ZSgpIDogUGFzdGVib2FyZFR5cGVz
Ojpmb3JJbWFnZXMoKV07CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVy
Om5pbF07ICAgIAorICAgIHdyaXRlSW1hZ2UocGFzdGVib2FyZCwgbmlsLCBlbGVtZW50LCBVUkws
IHRpdGxlLCBhcmNoaXZlLmdldCgpLCB0eXBlcyk7CisgICAgW3R5cGVzIHJlbGVhc2VdOworICAg
IAorICAgIE5TQXJyYXkgKmV4dGVuc2lvbnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2Jq
ZWN0czpleHRlbnNpb24sIG5pbF07CisgICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0OmV4
dGVuc2lvbnMgZm9yVHlwZTpOU0ZpbGVzUHJvbWlzZVBib2FyZFR5cGVdOworICAgIFtleHRlbnNp
b25zIHJlbGVhc2VdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCShyZXZpc2lvbiA3NjEwMCkKKysrIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw2ICs0OCw5IEBACiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFn
SW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ0ltYWdlT3Jp
Z2luLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdlYkNvcmU6OkNsaXBib2Fy
ZCosIFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKTsKICAgICB2aXJ0dWFs
IFdlYkNvcmU6OkRyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKFdlYkNvcmU6OktV
UkwmLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBXZWJDb3JlOjpGcmFtZSopOwogCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoTlNQYXN0
ZWJvYXJkKiwgRE9NRWxlbWVudCosIE5TVVJMKiwgTlNTdHJpbmcqLCBXZWJDb3JlOjpGcmFtZSop
OworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCk7CiAK
ICAgICBXZWJQYWdlKiBtX3BhZ2U7CkluZGV4OiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNz
YWdlcy5pbgkocmV2aXNpb24gNzYxMDApCisrKyBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBAQAogCiAgICAgIyBEcmFn
IGFuZCBkcm9wLgogICAgIFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rp
b24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBn
bG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6
OlN0cmluZyBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzKQorICAgIERyYWdFbmRlZChX
ZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFs
UG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlvbikKIAogICAgICMgUG9wdXAgbWVudS4KICAgICBE
aWRDaGFuZ2VTZWxlY3RlZEluZGV4Rm9yQWN0aXZlUG9wdXBNZW51KGludDMyX3QgbmV3SW5kZXgp
OwpJbmRleDogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzYxMDApCisrKyBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDcsNiArMTMwNywy
MSBAQAogICAgIH0KIH0KIAordm9pZCBXZWJQYWdlOjpkcmFnRW5kZWQoV2ViQ29yZTo6SW50UG9p
bnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50
NjRfdCBvcGVyYXRpb24pCit7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRDbGllbnRQb3NpdGlvbihj
bGllbnRQb3NpdGlvbi54KCkgKyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdPZmZzZXQo
KS54KCksIGNsaWVudFBvc2l0aW9uLnkoKSArIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJh
Z09mZnNldCgpLnkoKSk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRHbG9iYWxQb3NpdGlvbihnbG9i
YWxQb3NpdGlvbi54KCkgKyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdPZmZzZXQoKS54
KCksIGdsb2JhbFBvc2l0aW9uLnkoKSArIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ09m
ZnNldCgpLnkoKSk7CisgICAgCisgICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW5k
ZWQoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7
CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IFRoZXNlIGFy
ZSBmYWtlIG1vZGlmaWVyIGtleXMgaGVyZSwgYnV0IHRoZXkgc2hvdWxkIGJlIHJlYWwgb25lcyBp
bnN0ZWFkLgorICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudChhZGp1c3RlZENsaWVudFBvc2l0
aW9uLCBhZGp1c3RlZEdsb2JhbFBvc2l0aW9uLCBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50TW92ZWQs
IDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBjdXJyZW50VGltZSgpKTsKKyAgICBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+ZHJhZ1NvdXJjZUVuZGVkQXQoZXZlbnQs
IChEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbik7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRFbmREcmFnKGFkanVzdGVkQ2xpZW50UG9zaXRpb24pKTsKK30KKwogV2ViRWRpdENv
bW1hbmQqIFdlYlBhZ2U6OndlYkVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCkKIHsKICAg
ICByZXR1cm4gbV9lZGl0Q29tbWFuZE1hcC5nZXQoY29tbWFuZElEKS5nZXQoKTsKSW5kZXg6IFdl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gNzYxMDApCisrKyBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiArMzAwLDcgQEAKIAogICAgIHZvaWQgcmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0KFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJD
b3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9z
aXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgV1RGOjpT
dHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgdWludDMyX3QgZmxhZ3MpOworICAgIHZvaWQgZHJhZ0Vu
ZGVkKFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBn
bG9iYWxQb3NpdGlvbiwgdWludDY0X3Qgb3BlcmF0aW9uKTsKIAogICAgIHZvaWQgYmVnaW5Qcmlu
dGluZyh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mKTsKICAgICB2b2lkIGVuZFBy
aW50aW5nKCk7CkluZGV4OiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNzYxMDApCisrKyBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE2LDYgKzYxNiwyNyBAQAog
ICAgIG1fY3VycmVudERyYWdPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihy
ZXN1bHRPcGVyYXRpb24pOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RHJhZ0ltYWdlKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgZHJhZ0ltYWdlSGFuZGxlLCBib29s
IGlzTGlua0RyYWcpCit7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlID0g
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaW1hZ2VTaXplLCBkcmFnSW1hZ2VIYW5kbGUpOworICAg
IGlmICghZHJhZ0ltYWdlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9wYWdlQ2xpZW50
LT5zZXREcmFnSW1hZ2UoY2xpZW50UG9zaXRpb24sIGltYWdlU2l6ZSwgZHJhZ0ltYWdlLCBpc0xp
bmtEcmFnKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmRyYWdFbmRlZChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9i
YWxQb3NpdGlvbiwgdWludDY0X3Qgb3BlcmF0aW9uKQoreworICAgIGlmICghaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpE
cmFnRW5kZWQoY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBvcGVyYXRpb24pLCBtX3Bh
Z2VJRCk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRFbmREcmFnKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBhZGp1c3RlZENsaWVudFBvc2l0aW9uKQoreworICAgIG1fcGFnZUNsaWVudC0+
ZGlkRW5kRHJhZyhhZGp1c3RlZENsaWVudFBvc2l0aW9uKTsKK30KKwogdm9pZCBXZWJQYWdlUHJv
eHk6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAg
aWYgKCFpc1ZhbGlkKCkpCkluZGV4OiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlz
aW9uIDc2MTAwKQorKysgVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNSArNjIsNyBAQAogLSAodm9pZClfZGlkRmluaXNoTG9hZGluZ0RhdGFG
b3JDdXN0b21SZXByZXNlbnRhdGlvbjooY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpZGF0
YVJlZmVyZW5jZTsKIC0gKGRvdWJsZSlfY3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yOwog
LSAodm9pZClfc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yOihkb3VibGUpem9vbUZh
Y3RvcjsKKy0gKHZvaWQpX3NldERyYWdJbWFnZTooTlNJbWFnZSAqKWltYWdlIGF0OihOU1BvaW50
KWNsaWVudFBvaW50IGxpbmtEcmFnOihCT09MKWxpbmtEcmFnOworLSAodm9pZClfZGlkRW5kRHJh
ZzooTlNQb2ludCljbGllbnRQb2ludDsKIAogQGVuZApJbmRleDogVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xp
ZW50SW1wbC5oCShyZXZpc2lvbiA3NjEwMCkKKysrIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAKICAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1h
bmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50IHN0
YXRlKTsKICAgICB2aXJ0dWFsIHZvaWQgaW50ZXJjZXB0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCYgZXZlbnQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBj
b21tYW5kTmFtZSwgdWludDMyX3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQzMl90IHNlbGVjdGlvbkVu
ZCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiYgdW5kZXJsaW5lcyk7Cisg
ICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xp
ZW50UG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGltYWdlU2l6ZSwgV1RGOjpQYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcpOworICAg
IHZpcnR1YWwgdm9pZCBkaWRFbmREcmFnKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhZGp1c3Rl
ZENsaWVudFBvc2l0aW9uKTsKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZl
cnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKTsKSW5kZXg6IFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDc2MTAwKQorKysgVUlQcm9j
ZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAj
aW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQREZWaWV3Q29udHJv
bGxlci5oIgogI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKKyNpbXBvcnQgIlBhc3RlYm9hcmRU
eXBlcy5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1wb3J0ICJSdW5Mb29wLmgiCiAjaW1w
b3J0ICJUZXh0Q2hlY2tlci5oIgpAQCAtMTM1LDYgKzEzNiw4IEBACiAKICAgICBib29sIF9pbkJl
Y29tZUZpcnN0UmVzcG9uZGVyOwogICAgIGJvb2wgX2luUmVzaWduRmlyc3RSZXNwb25kZXI7Cisg
ICAgTlNFdmVudCAqX21vdXNlRG93bkV2ZW50OworICAgIEJPT0wgX2lnbm9yaW5nTW91c2VEcmFn
Z2VkRXZlbnRzOwogfQogQGVuZAogCkBAIC0xOTUsMjEgKzE5OCwxMCBAQAogICAgIHJldHVybiBb
c2VsZiBpbml0V2l0aEZyYW1lOmZyYW1lIGNvbnRleHRSZWY6Y29udGV4dFJlZiBwYWdlR3JvdXBS
ZWY6bmlsXTsKIH0KIAotc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5
cGUgPSBAIkFwcGxlIFdlYiBBcmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7Ci1zdGF0aWMgTlNTdHJp
bmcgKiBjb25zdCBXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUgPSBAIldlYlVSTHNXaXRoVGl0
bGVzUGJvYXJkVHlwZSI7Ci1zdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJVUkxQYm9hcmRUeXBl
ID0gQCJwdWJsaWMudXJsIjsKLXN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYlVSTE5hbWVQYm9h
cmRUeXBlID0gQCJwdWJsaWMudXJsLW5hbWUiOwotCiAtICh2b2lkKV9yZWdpc3RlckRyYWdnZWRU
eXBlcwogewotICAgIE5TQXJyYXkgKmVkaXRhYmxlVHlwZXMgPSBbTlNBcnJheSBhcnJheVdpdGhP
YmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hUTUxQYm9hcmRUeXBlLCBOU0ZpbGVuYW1l
c1Bib2FyZFR5cGUsIE5TVElGRlBib2FyZFR5cGUsIE5TUERGUGJvYXJkVHlwZSwKLSNpZiBkZWZp
bmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0g
ICAgICAgIE5TUElDVFBib2FyZFR5cGUsCi0jZW5kaWYKLSAgICAgICAgTlNVUkxQYm9hcmRUeXBl
LCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwg
TlNDb2xvclBib2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07Ci0gICAgTlNBcnJheSAqVVJMVHlw
ZXMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlw
ZSwgTlNVUkxQYm9hcmRUeXBlLCBXZWJVUkxQYm9hcmRUeXBlLCAgV2ViVVJMTmFtZVBib2FyZFR5
cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9hcmRUeXBlLCBuaWxdOwotICAg
IE5TTXV0YWJsZVNldCAqdHlwZXMgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdFdpdGhBcnJh
eTplZGl0YWJsZVR5cGVzXTsKLSAgICBbdHlwZXMgYWRkT2JqZWN0c0Zyb21BcnJheTpVUkxUeXBl
c107CisgICAgTlNNdXRhYmxlU2V0ICp0eXBlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0
V2l0aEFycmF5OlBhc3RlYm9hcmRUeXBlczo6Zm9yRWRpdGluZygpXTsKKyAgICBbdHlwZXMgYWRk
T2JqZWN0c0Zyb21BcnJheTpQYXN0ZWJvYXJkVHlwZXM6OmZvclVSTCgpXTsKICAgICBbc2VsZiBy
ZWdpc3RlckZvckRyYWdnZWRUeXBlczpbdHlwZXMgYWxsT2JqZWN0c11dOwogICAgIFt0eXBlcyBy
ZWxlYXNlXTsKIH0KQEAgLTIzNSw2ICsyMjcsOCBAQAogICAgIF9kYXRhLT5fcGFnZUNsaWVudCA9
IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUoc2VsZik7CiAgICAgX2RhdGEtPl9wYWdlID0gdG9JbXBs
KGNvbnRleHRSZWYpLT5jcmVhdGVXZWJQYWdlKF9kYXRhLT5fcGFnZUNsaWVudC5nZXQoKSwgdG9J
bXBsKHBhZ2VHcm91cFJlZikpOwogICAgIF9kYXRhLT5fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2Uo
KTsKKyAgICBfZGF0YS0+X21vdXNlRG93bkV2ZW50ID0gbmlsOworICAgIF9kYXRhLT5faWdub3Jp
bmdNb3VzZURyYWdnZWRFdmVudHMgPSBOTzsKIAogICAgIFtzZWxmIF9yZWdpc3RlckRyYWdnZWRU
eXBlc107CiAKQEAgLTcyOSw2ICs3MjMsMTcgQEAKICAgICByZXR1cm4gWUVTOwogfQogCistICh2
b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgQVNTRVJUKCFl
dmVudCB8fCBbZXZlbnQgdHlwZV0gPT0gTlNMZWZ0TW91c2VEb3duIHx8IFtldmVudCB0eXBlXSA9
PSBOU1JpZ2h0TW91c2VEb3duIHx8IFtldmVudCB0eXBlXSA9PSBOU090aGVyTW91c2VEb3duKTsK
KyAgICAKKyAgICBpZiAoZXZlbnQgPT0gX2RhdGEtPl9tb3VzZURvd25FdmVudCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIFtfZGF0YS0+X21vdXNlRG93bkV2ZW50IHJlbGVhc2VdOworICAg
IF9kYXRhLT5fbW91c2VEb3duRXZlbnQgPSBbZXZlbnQgcmV0YWluXTsKK30KKwogI2RlZmluZSBF
VkVOVF9IQU5ETEVSKFNlbGVjdG9yLCBUeXBlKSBcCiAgICAgLSAodm9pZClTZWxlY3RvcjooTlNF
dmVudCAqKXRoZUV2ZW50IFwKICAgICB7IFwKQEAgLTc1MSwyMiArNzU2LDM1IEBACiAKICN1bmRl
ZiBFVkVOVF9IQU5ETEVSCiAKLSNkZWZpbmUgTU9VU0VfRVZFTlRfSEFORExFUihTZWxlY3Rvcikg
XAotICAgIC0gKHZvaWQpU2VsZWN0b3I6KE5TRXZlbnQgKil0aGVFdmVudCBcCi0gICAgeyBcCi0g
ICAgICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5h
Z2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOyBcCi0gICAgICAgIGlmIChbY3VycmVudElucHV0TWFu
YWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhh
bmRsZU1vdXNlRXZlbnQ6dGhlRXZlbnRdKSBcCi0gICAgICAgICAgICByZXR1cm47IFwKLSAgICAg
ICAgV2ViTW91c2VFdmVudCB3ZWJFdmVudCA9IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91
c2VFdmVudCh0aGVFdmVudCwgc2VsZik7IFwKLSAgICAgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVN
b3VzZUV2ZW50KHdlYkV2ZW50KTsgXAotICAgIH0KKy0gKHZvaWQpX21vdXNlSGFuZGxlcjooTlNF
dmVudCAqKXRoZUV2ZW50Cit7CisgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFn
ZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07CisgICAgaWYgKFtjdXJy
ZW50SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1
dE1hbmFnZXIgaGFuZGxlTW91c2VFdmVudDp0aGVFdmVudF0pCisgICAgICAgIHJldHVybjsKKyAg
ICBXZWJNb3VzZUV2ZW50IHdlYkV2ZW50ID0gV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3Vz
ZUV2ZW50KHRoZUV2ZW50LCBzZWxmKTsKKyAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZU1vdXNlRXZl
bnQod2ViRXZlbnQpOworfQogCi1NT1VTRV9FVkVOVF9IQU5ETEVSKG1vdXNlRG93bikKLU1PVVNF
X0VWRU5UX0hBTkRMRVIobW91c2VEcmFnZ2VkKQotTU9VU0VfRVZFTlRfSEFORExFUihtb3VzZVVw
KQorLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIFtzZWxmIF9z
ZXRNb3VzZURvd25FdmVudDp0aGVFdmVudF07CisgICAgX2RhdGEtPl9pZ25vcmluZ01vdXNlRHJh
Z2dlZEV2ZW50cyA9IE5POworICAgIFtzZWxmIF9tb3VzZUhhbmRsZXI6dGhlRXZlbnRdOworfQog
Ci0jdW5kZWYgTU9VU0VfRVZFTlRfSEFORExFUgorLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICop
dGhlRXZlbnQKK3sKKyAgICBbc2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKKyAgICBbc2Vs
ZiBfbW91c2VIYW5kbGVyOnRoZUV2ZW50XTsKK30KIAorLSAodm9pZCltb3VzZURyYWdnZWQ6KE5T
RXZlbnQgKil0aGVFdmVudAoreworICAgIGlmIChfZGF0YS0+X2lnbm9yaW5nTW91c2VEcmFnZ2Vk
RXZlbnRzKQorICAgICAgICByZXR1cm47CisgICAgW3NlbGYgX21vdXNlSGFuZGxlcjp0aGVFdmVu
dF07Cit9CisKIC0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCiB7CiAg
ICAgaWYgKHNlbGVjdG9yICE9IEBzZWxlY3Rvcihub29wOikpCkBAIC0xMDM5LDYgKzEwNTcsMzEg
QEAKICAgICByZXR1cm4gcmVzdWx0UmVjdDsKIH0KIAorLSAodm9pZClfZGlkRW5kRHJhZzooTlNQ
b2ludCljbGllbnRQb2ludAoreworICAgIC8vIE9uY2UgdGhlIGRyYWdnaW5nIG1hY2hpbmVyeSBr
aWNrcyBpbiwgd2Ugbm8gbG9uZ2VyIGdldCBtb3VzZSBkcmFncyBvciB0aGUgdXAgZXZlbnQuCisg
ICAgLy8gV2ViQ29yZSBleHBlY3RzIHRvIGdldCBiYWxhbmNlZCBkb3duL3VwJ3MsIHNvIHdlIG11
c3QgZmFrZSB1cCBhIG1vdXNldXAuCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQg
bW91c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlVXAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246Y2xpZW50UG9pbnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZl
bnRdIG1vZGlmaWVyRmxhZ3NdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbW3Nl
bGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE51bWJlcjowIGNsaWNr
Q291bnQ6MCBwcmVzc3VyZTowXTsKKyAgICBbc2VsZiBtb3VzZVVwOmZha2VFdmVudF07IC8vIFRo
aXMgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgbW91c2VvdmVyIHN0YXRlLgorfQorCistICh2b2lkKWRy
YWdnZWRJbWFnZTooTlNJbWFnZSAqKWFuSW1hZ2UgZW5kZWRBdDooTlNQb2ludClhUG9pbnQgb3Bl
cmF0aW9uOihOU0RyYWdPcGVyYXRpb24pb3BlcmF0aW9uCit7CisgICAgTlNQb2ludCB3aW5kb3dJ
bWFnZUxvYyA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6YVBvaW50XTsKKyAg
ICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gd2luZG93SW1hZ2VMb2M7CisgICAKKyAgICAvLyBQ
cmV2ZW50IHF1ZXVlZCBtb3VzZURyYWdnZWQgZXZlbnRzIGZyb20gY29taW5nIGFmdGVyIHRoZSBk
cmFnIGFuZCBmYWtlIG1vdXNlVXAgZXZlbnQuCisgICBfZGF0YS0+X2lnbm9yaW5nTW91c2VEcmFn
Z2VkRXZlbnRzID0gWUVTOworICAgIAorICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0VuZGVkKEludFBv
aW50KHdpbmRvd01vdXNlTG9jKSwgZ2xvYmFsUG9pbnQod2luZG93TW91c2VMb2MsIFtzZWxmIHdp
bmRvd10pLCBvcGVyYXRpb24pOworfQorCiAtIChEcmFnQXBwbGljYXRpb25GbGFncylhcHBsaWNh
dGlvbkZsYWdzOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwogewogICAgIHVpbnQz
Ml90IGZsYWdzID0gMDsKQEAgLTEwNTgsNyArMTEwMSw4IEBACiAgICAgSW50UG9pbnQgY2xpZW50
KFtzZWxmIGNvbnZlcnRQb2ludDpbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dIGZyb21W
aWV3Om5pbF0pOwogICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZv
IGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7CiAgICAgRHJhZ0RhdGEgZHJhZ0Rh
dGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlv
bj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBw
bGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKLSAgICAKKworICAgIF9kYXRhLT5fcGFnZS0+
cmVzZXREcmFnT3BlcmF0aW9uKCk7CiAgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVkLCAmZHJhZ0RhdGEsIFtbZHJh
Z2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOwogICAgIHJldHVybiBOU0RyYWdP
cGVyYXRpb25Db3B5OwogfQpAQCAtMTc5OSw0ICsxODQzLDE4IEBACiAgICAgX2RhdGEtPl9wZGZW
aWV3Q29udHJvbGxlci0+c2V0Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKIH0KIAorLSAodm9pZClf
c2V0RHJhZ0ltYWdlOihOU0ltYWdlICopaW1hZ2UgYXQ6KE5TUG9pbnQpY2xpZW50UG9pbnQgbGlu
a0RyYWc6KEJPT0wpbGlua0RyYWcKK3sKKyAgICBpZiAoIWxpbmtEcmFnICYmIF9kYXRhLT5fbW91
c2VEb3duRXZlbnQgPT0gbmlsKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW3N1cGVyIGRy
YWdJbWFnZTppbWFnZQorICAgICAgICAgICAgICAgICAgYXQ6Y2xpZW50UG9pbnQKKyAgICAgICAg
ICAgICAgb2Zmc2V0Ok5TWmVyb1NpemUKKyAgICAgICAgICAgICAgIGV2ZW50OihsaW5rRHJhZykg
PyBbTlNBcHAgY3VycmVudEV2ZW50XSA6X2RhdGEtPl9tb3VzZURvd25FdmVudAorICAgICAgICAg
IHBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNEcmFnUGJvYXJk
XQorICAgICAgICAgICAgICBzb3VyY2U6c2VsZgorICAgICAgICAgICBzbGlkZUJhY2s6WUVTXTsK
K30KKwogQGVuZApJbmRleDogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHJldmlzaW9u
IDc2MTAwKQorKysgVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb3VuZGF0aW9uRXh0
cmFzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDx3dGYvUGFzc093blB0ci5oPgogI2ltcG9y
dCA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMjc4LDYgKzI3OSwxOCBAQAogICAgIFttX3drVmll
dyBfZ2V0VGV4dElucHV0U3RhdGU6c2VsZWN0aW9uU3RhcnQgc2VsZWN0aW9uRW5kOnNlbGVjdGlv
bkVuZCB1bmRlcmxpbmVzOnVuZGVybGluZXNdOwogfQogCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
ZXREcmFnSW1hZ2UoY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRTaXpl
JiBpbWFnZVNpemUsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wg
aXNMaW5rRHJhZykKK3sKKyAgICBOU0ltYWdlKiBkcmFnTlNJbWFnZSA9IFtbW05TSW1hZ2UgYWxs
b2NdIGluaXRXaXRoQ0dJbWFnZTpDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShkcmFnSW1hZ2Ut
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSkgc2l6ZTppbWFnZVNp
emVdIGF1dG9yZWxlYXNlXTsKKyAgICBbZHJhZ05TSW1hZ2Ugc2V0RmxpcHBlZDpZRVNdOworICAg
IFttX3drVmlldyBfc2V0RHJhZ0ltYWdlOmRyYWdOU0ltYWdlIGF0OmNsaWVudFBvc2l0aW9uIGxp
bmtEcmFnOmlzTGlua0RyYWddOworfQorICAgIAordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRW5k
RHJhZyhjb25zdCBJbnRQb2ludCYgYWRqdXN0ZWRDbGllbnRQb3NpdGlvbikKK3sKKyAgICBbbV93
a1ZpZXcgX2RpZEVuZERyYWc6YWRqdXN0ZWRDbGllbnRQb3NpdGlvbl07Cit9CisKIEZsb2F0UmVj
dCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewogICAgIHJldHVybiBbbV93a1ZpZXcgX2NvbnZlcnRUb0RldmljZVNwYWNlOnJlY3Rd
OwpJbmRleDogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gNzYxMDApCisrKyBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw2ICsyODAsOSBAQAogICAgIC8vIERyYWcgYW5k
IGRyb3Agc3VwcG9ydC4KICAgICB2b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFn
Q29udHJvbGxlckFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIGRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCByZXN1bHRPcGVy
YXRpb24pOworICAgIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBj
bGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBT
aGFyZWRNZW1vcnk6OkhhbmRsZSYgZHJhZ0ltYWdlSGFuZGxlLCBib29sIGlzTGlua0RyYWcpOwor
ICAgIHZvaWQgZHJhZ0VuZGVkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlv
biwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVy
YXRpb24pOworICAgIHZvaWQgZGlkRW5kRHJhZyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgYWRq
dXN0ZWRDbGllbnRQb3NpdGlvbik7CiAKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rp
b24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIENvcmVJ
UEM6OkFyZ3VtZW50RW5jb2RlciopOwpJbmRleDogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CShyZXZpc2lvbiA3NjEwMCkKKysrIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4J
KHdvcmtpbmcgY29weSkKQEAgLTE4OSw0ICsxODksNiBAQAogICAgIAogICAgICMgRHJhZyBhbmQg
ZHJvcC4KICAgICBEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgcmVzdWx0
T3BlcmF0aW9uKQorICAgIFNldERyYWdJbWFnZShXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3Np
dGlvbiwgV2ViQ29yZTo6SW50U2l6ZSBpbWFnZVNpemUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpI
YW5kbGUgZHJhZ0ltYWdlSGFuZGxlLCBib29sIGxpbmtEcmFnKQorICAgIERpZEVuZERyYWcoV2Vi
Q29yZTo6SW50UG9pbnQgYWRqdXN0ZWRDbGllbnRQb3NpdGlvbikKIH0KSW5kZXg6IFVJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2
aXNpb24gNzYxMDApCisrKyBVSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFBhZ2VDbGllbnRfaAogI2RlZmluZSBQYWdlQ2xpZW50
X2gKIAorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgogI2luY2x1ZGUgIldlYlBvcHVwTWVudVByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KQEAgLTk5LDYgKzEwMCw4IEBACiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwg
dm9pZCBhY2Nlc3NpYmlsaXR5Q2hpbGRUb2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRhdGFS
ZWZlcmVuY2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PiYsIHVpbnQzMl90LCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJs
aW5lPiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdURjo6UGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+LCBib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZERyYWcoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCiAg
ICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlZChib29sKSA9IDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79432</attachid>
            <date>2011-01-19 09:08:01 -0800</date>
            <delta_ts>2011-01-19 09:47:54 -0800</delta_ts>
            <desc>Patch7</desc>
            <filename>dragsource.txt</filename>
            <type>text/plain</type>
            <size>45383</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTI4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDEtMTggIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBhZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJv
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgIAorICAgICAgICBUaGlz
IHBhdGNoIGNvbnRhaW5zIHRoZSByZW1haW5pbmcgd29yayB0byBzdXBwb3J0IGRyYWcgYW5kIGRy
b3Agb24gTWFjLgorICAgICAgICBJJ3ZlIGFkZGVkIGEgUGFzdGVib2FyZFR5cGVzIGNsYXNzIHRv
IGVuY2Fwc3VsYXRlIGFsbCB0aGUgcGFzdGVib2FyZCBmb3JtYXRzCisgICAgICAgIHN1cHBvcnRl
ZCBmb3IgZHJhZyBhbmQgZHJvcC4KKyAgICAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB3ZSBk
b24ndCBzdXBwb3J0IHRoZSBwcm9taXNlZCB0eXBlcywgc2luY2UgSSBjb3VsZCBub3QKKyAgICAg
ICAgZmluZCBhbiBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMgYWNyb3NzIHByb2Nlc3Nlcy4KKyAg
ICAgICAgVGhlIGJ1bGsgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIGluIGNyZWF0aW5nIGEgc2hhcmVh
YmxlIGJpdG1hcCBmb3IgdGhlIGRyYWcgaW1hZ2UsCisgICAgICAgIHBhc3MgaXRzIGhhbmRsZSB0
byB0aGUgVUkgcHJvY2VzcyBhbmQgY3JlYXRlIGEgbmV3IE5TSW1hZ2UgZnJvbSBpdCB0byBiZSBn
aXZlbiB0bworICAgICAgICBBcHBLaXQgZm9yIGRyYWdnaW5nLgorICAgICAgICBJJ3ZlIGFkZGVk
IHRoZSBtaXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2RzIGluIHRoZSBkcmFnIGNs
aWVudCB0byBob29rCisgICAgICAgIHVwIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGRhdGEgaW4gdGhl
IHBhc3RlYm9hcmQuCisgICAgICAgIAorICAgICAgICAqIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5
cGVzLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JFZGl0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JVUkwpOgorICAgICAgICAoV2ViS2l0
OjpQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OlBhc3RlYm9h
cmRUeXBlczo6Zm9ySW1hZ2VzV2l0aEFyY2hpdmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXREcmFnSW1h
Z2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZEVuZERyYWcp
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAg
ICgtW1dLVmlldyBfcmVnaXN0ZXJEcmFnZ2VkVHlwZXNdKTogUmVmYWN0b3JlZCB0byB1c2UgdGhl
IG5ldyBQYXN0ZWJvYXJkVHlwZXMgY2xhc3MuCisgICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZy
YW1lOmNvbnRleHRSZWY6cGFnZUdyb3VwUmVmOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX3NldE1v
dXNlRG93bkV2ZW50Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX21vdXNlSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IG1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tWaWV3IG1vdXNlVXA6
XSk6CisgICAgICAgICgtW1dLVmlldyBtb3VzZURyYWdnZWQ6XSk6CisgICAgICAgICgtW1dLVmll
dyBfZGlkRW5kRHJhZzpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnZWRJbWFnZTplbmRlZEF0
Om9wZXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRW50ZXJlZDpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IF9zZXREcmFnSW1hZ2U6YXQ6bGlua0RyYWc6XSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
UGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldERyYWdJbWFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZHJhZ0VuZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkaWRFbmREcmFnKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBX
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6Zm9udEZyb21OU0ZvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpzdGFy
dERyYWcpOiBBZGRlZCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Ns
aWVudDo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6IERpdHRvLgorICAgICAgICAoV2ViS2l0Ojp3
cml0ZVVSTCk6IFV0aWxpdHkgZnVuY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OndyaXRlSW1hZ2Up
OiBVdGlsaXR5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpkZWNs
YXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRyYWdFbmRlZCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMS0wMS0xOSAgQ3NhYmEgT3N6
dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3ps
byBHb21ib3MgYW5kIFRvciBBcm5lIFZlc3Riw7guCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXN0ZWJvYXJkVHlwZXNfaAorI2RlZmluZSBQYXN0
ZWJvYXJkVHlwZXNfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZXh0ZXJuIE5TU3RyaW5nICog
Y29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5cGU7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJV
UkxzV2l0aFRpdGxlc1Bib2FyZFR5cGU7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJVUkxQ
Ym9hcmRUeXBlOworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV2ViVVJMTmFtZVBib2FyZFR5cGU7
CisgICAgCitjbGFzcyBQYXN0ZWJvYXJkVHlwZXMgeworcHVibGljOgorICAgIAorICAgIHN0YXRp
YyBOU0FycmF5KiBmb3JFZGl0aW5nKCk7CisgICAgc3RhdGljIE5TQXJyYXkqIGZvclVSTCgpOwor
ICAgIHN0YXRpYyBOU0FycmF5KiBmb3JJbWFnZXMoKTsKKyAgICBzdGF0aWMgTlNBcnJheSogZm9y
SW1hZ2VzV2l0aEFyY2hpdmUoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gUGFzdGVib2FyZFR5cGVzX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
UGFzdGVib2FyZFR5cGVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvUGFzdGVib2FyZFR5cGVzLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJQYXN0ZWJvYXJkVHlwZXMuaCIKKyNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK05TU3RyaW5nICogY29uc3QgV2Vi
QXJjaGl2ZVBib2FyZFR5cGUgPSBAIkFwcGxlIFdlYiBBcmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7
CitOU1N0cmluZyAqIGNvbnN0IFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSA9IEAiV2ViVVJM
c1dpdGhUaXRsZXNQYm9hcmRUeXBlIjsKK05TU3RyaW5nICogY29uc3QgV2ViVVJMUGJvYXJkVHlw
ZSA9IEAicHVibGljLnVybCI7CitOU1N0cmluZyAqIGNvbnN0IFdlYlVSTE5hbWVQYm9hcmRUeXBl
ID0gQCJwdWJsaWMudXJsLW5hbWUiOworCitOU0FycmF5KiBQYXN0ZWJvYXJkVHlwZXM6OmZvckVk
aXRpbmcoKQoreworICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gdHlwZXMgPSBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hUTUxQYm9hcmRUeXBl
LCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIE5TVElGRlBib2FyZFR5cGUsIE5TUERGUGJvYXJkVHlw
ZSwKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpCisgICAgICAgIE5TUElDVFBib2FyZFR5cGUsCisjZW5kaWYKKyAgICAgICAgTlNV
UkxQYm9hcmRUeXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5n
UGJvYXJkVHlwZSwgTlNDb2xvclBib2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07CisgICAgcmV0
dXJuIHR5cGVzLmdldCgpOworfQorCitOU0FycmF5KiBQYXN0ZWJvYXJkVHlwZXM6OmZvclVSTCgp
Cit7CisgICAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiB0eXBlcyA9IFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6V2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2FyZFR5cGUs
IFdlYlVSTFBib2FyZFR5cGUsICBXZWJVUkxOYW1lUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRU
eXBlLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIG5pbF07CisgICAgcmV0dXJuIHR5cGVzLmdldCgp
OworfQorCitOU0FycmF5KiBQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcygpCit7CisgICAgc3Rh
dGljIFJldGFpblB0cjxOU0FycmF5PiB0eXBlcyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6
TlNUSUZGUGJvYXJkVHlwZSwgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2Fy
ZFR5cGUsIFdlYlVSTFBib2FyZFR5cGUsIFdlYlVSTE5hbWVQYm9hcmRUeXBlLCBOU1N0cmluZ1Bi
b2FyZFR5cGUsIG5pbF07CisgICAgcmV0dXJuIHR5cGVzLmdldCgpOworfQorCitOU0FycmF5KiBQ
YXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlc1dpdGhBcmNoaXZlKCkKK3sKKyAgICBzdGF0aWMgUmV0
YWluUHRyPE5TQXJyYXk+IHR5cGVzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpOU1RJRkZQ
Ym9hcmRUeXBlLCBXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUsIE5TVVJMUGJvYXJkVHlwZSwg
V2ViVVJMUGJvYXJkVHlwZSwgV2ViVVJMTmFtZVBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlw
ZSwgTlNSVEZEUGJvYXJkVHlwZSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUsIG5pbF07CisgICAgcmV0
dXJuIHR5cGVzLmdldCgpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDc2MTI4KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBQYWdlQ2xpZW50X2gKICNkZWZpbmUgUGFnZUNsaWVudF9oCiAK
KyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CkBAIC05OSw2ICsxMDAsOCBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1
YWwgdm9pZCBhY2Nlc3NpYmlsaXR5Q2hpbGRUb2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21t
YW5kPiYsIHVpbnQzMl90LCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5k
ZXJsaW5lPiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdURjo6UGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+LCBib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZERyYWco
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4p
CiAgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlZChib29sKSA9IDA7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNp
b24gNzYxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjE2LDYgKzYxNiwyNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
UGVyZm9ybURyYWdDb250cm9sCiAgICAgbV9jdXJyZW50RHJhZ09wZXJhdGlvbiA9IHN0YXRpY19j
YXN0PERyYWdPcGVyYXRpb24+KHJlc3VsdE9wZXJhdGlvbik7CiB9CiAKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9u
LCBjb25zdCBJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBk
cmFnSW1hZ2VIYW5kbGUsIGJvb2wgaXNMaW5rRHJhZykKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBkcmFnSW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZVNpemUsIGRy
YWdJbWFnZUhhbmRsZSk7CisgICAgaWYgKCFkcmFnSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBtX3BhZ2VDbGllbnQtPnNldERyYWdJbWFnZShjbGllbnRQb3NpdGlvbiwgaW1hZ2VT
aXplLCBkcmFnSW1hZ2UsIGlzTGlua0RyYWcpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJh
Z0VuZGVkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pCit7Cisg
ICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2U6OkRyYWdFbmRlZChjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRp
b24sIG9wZXJhdGlvbiksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OmRpZEVu
ZERyYWcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFkanVzdGVkQ2xpZW50UG9zaXRpb24pCit7
CisgICAgbV9wYWdlQ2xpZW50LT5kaWRFbmREcmFnKGFkanVzdGVkQ2xpZW50UG9zaXRpb24pOwor
fQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2
ZW50JiBldmVudCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDc2MTI4KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNiArMjgw
LDkgQEAgcHVibGljOgogICAgIC8vIERyYWcgYW5kIGRyb3Agc3VwcG9ydC4KICAgICB2b2lkIHBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbiwgV2ViQ29yZTo6
RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRpZFBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbih1aW50NjRfdCByZXN1bHRPcGVyYXRpb24pOworICAgIHZvaWQgc2V0RHJhZ0lt
YWdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgZHJhZ0lt
YWdlSGFuZGxlLCBib29sIGlzTGlua0RyYWcpOworICAgIHZvaWQgZHJhZ0VuZGVkKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pOworICAgIHZvaWQgZGlkRW5kRHJh
Zyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgYWRqdXN0ZWRDbGllbnRQb3NpdGlvbik7CiAKICAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQgZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciosIENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiA3NjEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE4OSw0ICsxODksNiBAQCBtZXNz
YWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIAogICAgICMgRHJhZyBhbmQgZHJvcC4KICAgICBE
aWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgcmVzdWx0T3BlcmF0aW9uKQor
ICAgIFNldERyYWdJbWFnZShXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29y
ZTo6SW50U2l6ZSBpbWFnZVNpemUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgZHJhZ0lt
YWdlSGFuZGxlLCBib29sIGxpbmtEcmFnKQorICAgIERpZEVuZERyYWcoV2ViQ29yZTo6SW50UG9p
bnQgYWRqdXN0ZWRDbGllbnRQb3NpdGlvbikKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gNzYxMjgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3Rh
dGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSk7
CiAgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFu
ZE5hbWUsIHVpbnQzMl90IHNlbGVjdGlvblN0YXJ0LCB1aW50MzJfdCBzZWxlY3Rpb25FbmQsIFZl
Y3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpOworICAgIHZp
cnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBv
c2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbWFnZVNpemUsIFdURjo6UGFzc1JlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSwgYm9vbCBpc0xpbmtEcmFnKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkRW5kRHJhZyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgYWRqdXN0ZWRDbGll
bnRQb3NpdGlvbik7CiAKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9E
ZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKICAgICB2aXJ0dWFsIFdlYkNv
cmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1w
bC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5tbQkocmV2aXNpb24gNzYxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvdW5kYXRpb25FeHRyYXMuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQu
aD4KICNpbXBvcnQgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CkBAIC0yNzgsNiArMjc5LDE4IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmludGVyY2VwdEtl
eUV2ZW50KGMKICAgICBbbV93a1ZpZXcgX2dldFRleHRJbnB1dFN0YXRlOnNlbGVjdGlvblN0YXJ0
IHNlbGVjdGlvbkVuZDpzZWxlY3Rpb25FbmQgdW5kZXJsaW5lczp1bmRlcmxpbmVzXTsKIH0KIAor
dm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RHJhZ0ltYWdlKGNvbnN0IEludFBvaW50JiBjbGllbnRQ
b3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcpCit7CisgICAgTlNJbWFnZSogZHJhZ05T
SW1hZ2UgPSBbW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6Q0dCaXRtYXBDb250ZXh0
Q3JlYXRlSW1hZ2UoZHJhZ0ltYWdlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKS0+cGxhdGZvcm1D
b250ZXh0KCkpIHNpemU6aW1hZ2VTaXplXSBhdXRvcmVsZWFzZV07CisgICAgW2RyYWdOU0ltYWdl
IHNldEZsaXBwZWQ6WUVTXTsKKyAgICBbbV93a1ZpZXcgX3NldERyYWdJbWFnZTpkcmFnTlNJbWFn
ZSBhdDpjbGllbnRQb3NpdGlvbiBsaW5rRHJhZzppc0xpbmtEcmFnXTsKK30KKyAgICAKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmRpZEVuZERyYWcoY29uc3QgSW50UG9pbnQmIGFkanVzdGVkQ2xpZW50
UG9zaXRpb24pCit7CisgICAgW21fd2tWaWV3IF9kaWRFbmREcmFnOmFkanVzdGVkQ2xpZW50UG9z
aXRpb25dOworfQorCiBGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNw
YWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICByZXR1cm4gW21fd2tWaWV3IF9jb252
ZXJ0VG9EZXZpY2VTcGFjZTpyZWN0XTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDc2MTI4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW1wb3J0ICJQREZWaWV3Q29u
dHJvbGxlci5oIgogI2ltcG9ydCAiUGFnZUNsaWVudEltcGwuaCIKKyNpbXBvcnQgIlBhc3RlYm9h
cmRUeXBlcy5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1wb3J0ICJSdW5Mb29wLmgiCiAj
aW1wb3J0ICJUZXh0Q2hlY2tlci5oIgpAQCAtMTM1LDYgKzEzNiw4IEBAIEBpbnRlcmZhY2UgV0tW
aWV3RGF0YSA6IE5TT2JqZWN0IHsKIAogICAgIGJvb2wgX2luQmVjb21lRmlyc3RSZXNwb25kZXI7
CiAgICAgYm9vbCBfaW5SZXNpZ25GaXJzdFJlc3BvbmRlcjsKKyAgICBOU0V2ZW50ICpfbW91c2VE
b3duRXZlbnQ7CisgICAgQk9PTCBfaWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHM7CiB9CiBAZW5k
CiAKQEAgLTE5NSwyMSArMTk4LDEwIEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFt
ZSBjb250ZXgKICAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhGcmFtZTpmcmFtZSBjb250ZXh0UmVm
OmNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOm5pbF07CiB9CiAKLXN0YXRpYyBOU1N0cmluZyAqIGNv
bnN0IFdlYkFyY2hpdmVQYm9hcmRUeXBlID0gQCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJk
IHR5cGUiOwotc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRU
eXBlID0gQCJXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUiOwotc3RhdGljIE5TU3RyaW5nICog
Y29uc3QgV2ViVVJMUGJvYXJkVHlwZSA9IEAicHVibGljLnVybCI7Ci1zdGF0aWMgTlNTdHJpbmcg
KiBjb25zdCBXZWJVUkxOYW1lUGJvYXJkVHlwZSA9IEAicHVibGljLnVybC1uYW1lIjsKLQogLSAo
dm9pZClfcmVnaXN0ZXJEcmFnZ2VkVHlwZXMKIHsKLSAgICBOU0FycmF5ICplZGl0YWJsZVR5cGVz
ID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNIVE1M
UGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9hcmRUeXBlLCBOU1RJRkZQYm9hcmRUeXBlLCBOU1BE
RlBib2FyZFR5cGUsCi0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICBOU1BJQ1RQYm9hcmRUeXBlLAotI2VuZGlmCi0g
ICAgICAgIE5TVVJMUGJvYXJkVHlwZSwgTlNSVEZEUGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBl
LCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TQ29sb3JQYm9hcmRUeXBlLCBrVVRUeXBlUE5HLCBuaWxd
OwotICAgIE5TQXJyYXkgKlVSTFR5cGVzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpXZWJV
UkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUsIE5TVVJMUGJvYXJkVHlwZSwgV2ViVVJMUGJvYXJkVHlw
ZSwgIFdlYlVSTE5hbWVQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TRmlsZW5hbWVz
UGJvYXJkVHlwZSwgbmlsXTsKLSAgICBOU011dGFibGVTZXQgKnR5cGVzID0gW1tOU011dGFibGVT
ZXQgYWxsb2NdIGluaXRXaXRoQXJyYXk6ZWRpdGFibGVUeXBlc107Ci0gICAgW3R5cGVzIGFkZE9i
amVjdHNGcm9tQXJyYXk6VVJMVHlwZXNdOworICAgIE5TTXV0YWJsZVNldCAqdHlwZXMgPSBbW05T
TXV0YWJsZVNldCBhbGxvY10gaW5pdFdpdGhBcnJheTpQYXN0ZWJvYXJkVHlwZXM6OmZvckVkaXRp
bmcoKV07CisgICAgW3R5cGVzIGFkZE9iamVjdHNGcm9tQXJyYXk6UGFzdGVib2FyZFR5cGVzOjpm
b3JVUkwoKV07CiAgICAgW3NlbGYgcmVnaXN0ZXJGb3JEcmFnZ2VkVHlwZXM6W3R5cGVzIGFsbE9i
amVjdHNdXTsKICAgICBbdHlwZXMgcmVsZWFzZV07CiB9CkBAIC0yMzUsNiArMjI3LDggQEAgLSAo
aWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGNvbnRleAogICAgIF9kYXRhLT5fcGFnZUNs
aWVudCA9IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUoc2VsZik7CiAgICAgX2RhdGEtPl9wYWdlID0g
dG9JbXBsKGNvbnRleHRSZWYpLT5jcmVhdGVXZWJQYWdlKF9kYXRhLT5fcGFnZUNsaWVudC5nZXQo
KSwgdG9JbXBsKHBhZ2VHcm91cFJlZikpOwogICAgIF9kYXRhLT5fcGFnZS0+aW5pdGlhbGl6ZVdl
YlBhZ2UoKTsKKyAgICBfZGF0YS0+X21vdXNlRG93bkV2ZW50ID0gbmlsOworICAgIF9kYXRhLT5f
aWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBOTzsKIAogICAgIFtzZWxmIF9yZWdpc3RlckRy
YWdnZWRUeXBlc107CiAKQEAgLTcyOSw2ICs3MjMsMTcgQEAgLSAoQk9PTClfd2FudHNLZXlEb3du
Rm9yRXZlbnQ6KE5TRXZlbnQgKgogICAgIHJldHVybiBZRVM7CiB9CiAKKy0gKHZvaWQpX3NldE1v
dXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBBU1NFUlQoIWV2ZW50IHx8IFtl
dmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TUmlnaHRN
b3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TT3RoZXJNb3VzZURvd24pOworICAgIAorICAg
IGlmIChldmVudCA9PSBfZGF0YS0+X21vdXNlRG93bkV2ZW50KQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgW19kYXRhLT5fbW91c2VEb3duRXZlbnQgcmVsZWFzZV07CisgICAgX2RhdGEtPl9t
b3VzZURvd25FdmVudCA9IFtldmVudCByZXRhaW5dOworfQorCiAjZGVmaW5lIEVWRU5UX0hBTkRM
RVIoU2VsZWN0b3IsIFR5cGUpIFwKICAgICAtICh2b2lkKVNlbGVjdG9yOihOU0V2ZW50ICopdGhl
RXZlbnQgXAogICAgIHsgXApAQCAtNzUxLDIxICs3NTYsMzQgQEAgRVZFTlRfSEFORExFUihzY3Jv
bGxXaGVlbCwgV2hlZWwpCiAKICN1bmRlZiBFVkVOVF9IQU5ETEVSCiAKLSNkZWZpbmUgTU9VU0Vf
RVZFTlRfSEFORExFUihTZWxlY3RvcikgXAotICAgIC0gKHZvaWQpU2VsZWN0b3I6KE5TRXZlbnQg
Kil0aGVFdmVudCBcCi0gICAgeyBcCi0gICAgICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5w
dXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOyBcCi0gICAg
ICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYm
IFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6dGhlRXZlbnRdKSBcCi0gICAg
ICAgICAgICByZXR1cm47IFwKLSAgICAgICAgV2ViTW91c2VFdmVudCB3ZWJFdmVudCA9IFdlYkV2
ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVudCh0aGVFdmVudCwgc2VsZik7IFwKLSAgICAg
ICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50KHdlYkV2ZW50KTsgXAotICAgIH0KKy0g
KHZvaWQpX21vdXNlSGFuZGxlcjooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgTlNJbnB1dE1h
bmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0
TWFuYWdlcl07CisgICAgaWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3Vz
ZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91c2VFdmVudDp0aGVFdmVu
dF0pCisgICAgICAgIHJldHVybjsKKyAgICBXZWJNb3VzZUV2ZW50IHdlYkV2ZW50ID0gV2ViRXZl
bnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50KHRoZUV2ZW50LCBzZWxmKTsKKyAgICBfZGF0
YS0+X3BhZ2UtPmhhbmRsZU1vdXNlRXZlbnQod2ViRXZlbnQpOworfQorCistICh2b2lkKW1vdXNl
RG93bjooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50
OnRoZUV2ZW50XTsKKyAgICBfZGF0YS0+X2lnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzID0gTk87
CisgICAgW3NlbGYgX21vdXNlSGFuZGxlcjp0aGVFdmVudF07Cit9CiAKLU1PVVNFX0VWRU5UX0hB
TkRMRVIobW91c2VEb3duKQotTU9VU0VfRVZFTlRfSEFORExFUihtb3VzZURyYWdnZWQpCi1NT1VT
RV9FVkVOVF9IQU5ETEVSKG1vdXNlVXApCistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKil0aGVF
dmVudAoreworICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxdOworICAgIFtzZWxmIF9t
b3VzZUhhbmRsZXI6dGhlRXZlbnRdOworfQogCi0jdW5kZWYgTU9VU0VfRVZFTlRfSEFORExFUgor
LSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIGlmIChfZGF0
YS0+X2lnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzKQorICAgICAgICByZXR1cm47CisgICAgW3Nl
bGYgX21vdXNlSGFuZGxlcjp0aGVFdmVudF07Cit9CiAKIC0gKHZvaWQpZG9Db21tYW5kQnlTZWxl
Y3RvcjooU0VMKXNlbGVjdG9yCiB7CkBAIC0xMDM5LDYgKzEwNTcsMzEgQEAgLSAoTlNSZWN0KWZp
cnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOUwogICAgIHJldHVybiByZXN1bHRSZWN0OwogfQog
CistICh2b2lkKV9kaWRFbmREcmFnOihOU1BvaW50KWNsaWVudFBvaW50Cit7CisgICAgLy8gT25j
ZSB0aGUgZHJhZ2dpbmcgbWFjaGluZXJ5IGtpY2tzIGluLCB3ZSBubyBsb25nZXIgZ2V0IG1vdXNl
IGRyYWdzIG9yIHRoZSB1cCBldmVudC4KKyAgICAvLyBXZWJDb3JlIGV4cGVjdHMgdG8gZ2V0IGJh
bGFuY2VkIGRvd24vdXAncywgc28gd2UgbXVzdCBmYWtlIHVwIGEgbW91c2V1cC4KKyAgICBOU0V2
ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VV
cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpj
bGllbnRQb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZp
ZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50
ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBj
dXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAgIFtzZWxm
IG1vdXNlVXA6ZmFrZUV2ZW50XTsgLy8gVGhpcyB3aWxsIGFsc28gdXBkYXRlIHRoZSBtb3VzZW92
ZXIgc3RhdGUuCit9CisKKy0gKHZvaWQpZHJhZ2dlZEltYWdlOihOU0ltYWdlICopYW5JbWFnZSBl
bmRlZEF0OihOU1BvaW50KWFQb2ludCBvcGVyYXRpb246KE5TRHJhZ09wZXJhdGlvbilvcGVyYXRp
b24KK3sKKyAgICBOU1BvaW50IHdpbmRvd0ltYWdlTG9jID0gW1tzZWxmIHdpbmRvd10gY29udmVy
dFNjcmVlblRvQmFzZTphUG9pbnRdOworICAgIE5TUG9pbnQgd2luZG93TW91c2VMb2MgPSB3aW5k
b3dJbWFnZUxvYzsKKyAgIAorICAgIC8vIFByZXZlbnQgcXVldWVkIG1vdXNlRHJhZ2dlZCBldmVu
dHMgZnJvbSBjb21pbmcgYWZ0ZXIgdGhlIGRyYWcgYW5kIGZha2UgbW91c2VVcCBldmVudC4KKyAg
IF9kYXRhLT5faWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBZRVM7CisgICAgCisgICAgX2Rh
dGEtPl9wYWdlLT5kcmFnRW5kZWQoSW50UG9pbnQod2luZG93TW91c2VMb2MpLCBnbG9iYWxQb2lu
dCh3aW5kb3dNb3VzZUxvYywgW3NlbGYgd2luZG93XSksIG9wZXJhdGlvbik7Cit9CisKIC0gKERy
YWdBcHBsaWNhdGlvbkZsYWdzKWFwcGxpY2F0aW9uRmxhZ3M6KGlkIDxOU0RyYWdnaW5nSW5mbz4p
ZHJhZ2dpbmdJbmZvCiB7CiAgICAgdWludDMyX3QgZmxhZ3MgPSAwOwpAQCAtMTA1OCw3ICsxMTAx
LDggQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPAogICAgIEludFBv
aW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0
aW9uXSBmcm9tVmlldzpuaWxdKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2Ry
YWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwogICAgIERyYWdE
YXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERy
YWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSks
IFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgCisKKyAgICBfZGF0
YS0+X3BhZ2UtPnJlc2V0RHJhZ09wZXJhdGlvbigpOwogICAgIF9kYXRhLT5fcGFnZS0+cGVyZm9y
bURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uRW50ZXJlZCwgJmRyYWdE
YXRhLCBbW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKICAgICByZXR1
cm4gTlNEcmFnT3BlcmF0aW9uQ29weTsKIH0KQEAgLTE3OTksNCArMTg0MywxOCBAQCAtICh2b2lk
KV9zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21GYWN0CiAgICAgX2RhdGEtPl9wZGZWaWV3Q29u
dHJvbGxlci0+c2V0Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKIH0KIAorLSAodm9pZClfc2V0RHJh
Z0ltYWdlOihOU0ltYWdlICopaW1hZ2UgYXQ6KE5TUG9pbnQpY2xpZW50UG9pbnQgbGlua0RyYWc6
KEJPT0wpbGlua0RyYWcKK3sKKyAgICBpZiAoIWxpbmtEcmFnICYmIF9kYXRhLT5fbW91c2VEb3du
RXZlbnQgPT0gbmlsKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW3N1cGVyIGRyYWdJbWFn
ZTppbWFnZQorICAgICAgICAgICAgICAgICAgYXQ6Y2xpZW50UG9pbnQKKyAgICAgICAgICAgICAg
b2Zmc2V0Ok5TWmVyb1NpemUKKyAgICAgICAgICAgICAgIGV2ZW50OihsaW5rRHJhZykgPyBbTlNB
cHAgY3VycmVudEV2ZW50XSA6X2RhdGEtPl9tb3VzZURvd25FdmVudAorICAgICAgICAgIHBhc3Rl
Ym9hcmQ6W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNEcmFnUGJvYXJkXQorICAg
ICAgICAgICAgICBzb3VyY2U6c2VsZgorICAgICAgICAgICBzbGlkZUJhY2s6WUVTXTsKK30KKwog
QGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJu
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXdJbnRlcm5hbC5oCShyZXZpc2lvbiA3NjEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDUgKzYyLDcg
QEAgQGludGVyZmFjZSBXS1ZpZXcgKEludGVybmFsKQogLSAodm9pZClfZGlkRmluaXNoTG9hZGlu
Z0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbjooY29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5j
ZSYpZGF0YVJlZmVyZW5jZTsKIC0gKGRvdWJsZSlfY3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFj
dG9yOwogLSAodm9pZClfc2V0Q3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yOihkb3VibGUp
em9vbUZhY3RvcjsKKy0gKHZvaWQpX3NldERyYWdJbWFnZTooTlNJbWFnZSAqKWltYWdlIGF0OihO
U1BvaW50KWNsaWVudFBvaW50IGxpbmtEcmFnOihCT09MKWxpbmtEcmFnOworLSAodm9pZClfZGlk
RW5kRHJhZzooTlNQb2ludCljbGllbnRQb2ludDsKIAogQGVuZApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzYx
MjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTY2MSw2ICs2NjEsOSBAQAogCQlDMEUzQUE3QzEyMDlFODNDMDBB
NDlEMDEgLyogTW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMEUzQUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmggKi87IH07CiAJCUM1
MTczODgxMTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxNzM4ODAxMkRGOEY0RjAw
RUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9uLmggKi87IH07CiAJCUM1MjM3RjYwMTI0NDFD
QTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTIzN0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2Vi
RWRpdG9yQ2xpZW50TWFjLm1tICovOyB9OworCQlDNTc0QTM3NzEyRTYwOTlEMDAyREZFOTggLyog
V2ViRHJhZ0NsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1NTRGRkEyMTJFNEU4RUEwMDJGMjJDMCAvKiBXZWJEcmFnQ2xpZW50TWFjLm1t
ICovOyB9OworCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU3RjEy
RTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi87IH07CisJCUM1NzRBNTgyMTJF
NjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFz
dGVib2FyZFR5cGVzLm1tICovOyB9OwogCQlEM0I5NDg0NjExRkY0QjY1MDAwMzJCMzkgLyogV2Vi
UG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEQzQjk0ODQyMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwICovOyB9Owog
CQlEM0I5NDg0NzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0MzExRkY0QjY1MDAwMzJC
MzkgLyogV2ViUG9wdXBNZW51LmggKi87IH07CiAJCUQzQjk0ODQ4MTFGRjRCNjUwMDAzMkIzOSAv
KiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVw
TWVudS5jcHAgKi87IH07CkBAIC0xNDIxLDYgKzE0MjQsOSBAQAogCQlDMEUzQUE0ODEyMDlFNDUw
MDBBNDlEMDEgLyogTW9kdWxlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gTW9kdWxlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTE3
Mzg4MDEyREY4RjRGMDBFRTNGNDcgLyogRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUyMzdGNUYxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRv
ckNsaWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkVkaXRvckNsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU1NEZG
QTIxMkU0RThFQTAwMkYyMkMwIC8qIFdlYkRyYWdDbGllbnRNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJEcmFnQ2xpZW50TWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2Fy
ZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTc0QTU4MDEyRTY2NjgxMDAyREZF
OTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEM0I5NDg0MjExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBvcHVwTWVudS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1l
bnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUG9wdXBNZW51Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQ0MTFGRjRCNjUwMDAzMkIzOSAvKiBX
ZWJTZWFyY2hQb3B1cE1lbnUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViU2VhcmNoUG9wdXBNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIyNjcsNiArMjI3Myw3IEBACiAJCUJDMTExQURFMTEyRjVCOUEwMDMzN0JBQiAvKiBtYWMgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUM1NTRGRkEyMTJF
NEU4RUEwMDJGMjJDMCAvKiBXZWJEcmFnQ2xpZW50TWFjLm1tICovLAogCQkJCTUxMDIxRTlCMTJC
MTY3ODgwMDVDMDMzQyAvKiBXZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbSAqLywKIAkJCQlGNkEy
NUZEODEyQURDNkJEMDBEQzQwQ0MgLyogV2ViRGF0YWJhc2VNYW5hZ2VyTWFjLm1tICovLAogCQkJ
CUM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gKi8sCkBA
IC0yMzIyLDYgKzIzMjksOCBAQAogCQlCQzExMUI1QTExMkY2MjgyMDAzMzdCQUIgLyogbWFjICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDNTc0QTU3RjEy
RTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi8sCisJCQkJQzU3NEE1ODAxMkU2
NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAqLywKIAkJCQkxQTZGOUZCNjExRTE0
MDg1MDBEQjEzNzEgLyogQ29tbWFuZExpbmVNYWMuY3BwICovLAogCQkJCUMwMkJGRjFEMTI1MTUw
MkUwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tICovLAogCQkJCUJDRjUw
NUU2MTI0MzA0N0IwMDU5NTVBRSAvKiBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5tbSAqLywKQEAg
LTMwNTksNiArMzA2OCw3IEBACiAJCQkJMUE2NDI1NjgxMkRFNDJFQzAwQ0FBRTJDIC8qIEJhY2tp
bmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxNzM4ODExMkRGOEY0RjAwRUUzRjQ3IC8q
IERyYWdDb250cm9sbGVyQWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUEyRTUxRDEyRTRD
MDVFMDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1NzRBNTgx
MTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MzUyMCw2ICszNTMwLDggQEAKIAkJCQkxQTY0MjU2OTEyREU0MkVDMDBDQUFFMkMgLyogQmFja2lu
Z1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNjQyOTJEMTJERTVGOTgwMENBQUUyQyAv
KiBCYWNraW5nU3RvcmVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUEyRTUxRTEyRTRDMDVF
MDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzU3NEEzNzcx
MkU2MDk5RDAwMkRGRTk4IC8qIFdlYkRyYWdDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkRyYWdDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAJKHJldmlzaW9uIDc2MTI4KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBEcmFnU291cmNlQWN0aW9uIFdlYkRyYWdD
bGllbnQ6OmRyYWdTb3VyCiAgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKKyNp
ZiAhUExBVEZPUk0oTUFDKQogdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdl
UmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUq
LCBib29sKQogewogfQpAQCAtNTksNiArNjAsNyBAQCBEcmFnSW1hZ2VSZWYgV2ViRHJhZ0NsaWVu
dDo6Y3JlYXRlRHJhZ0ltCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0K
KyNlbmRpZgogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OmRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkK
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCShyZXZpc2lvbiA3NjEyOCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJh
ZyhXZWJDb3JlOjpEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdl
YkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNl
KTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JM
aW5rKFdlYkNvcmU6OktVUkwmLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBXZWJDb3JlOjpGcmFtZSop
OwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVE
cmFnSW1hZ2UoTlNQYXN0ZWJvYXJkKiwgRE9NRWxlbWVudCosIE5TVVJMKiwgTlNTdHJpbmcqLCBX
ZWJDb3JlOjpGcmFtZSopOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVy
RGVzdHJveWVkKCk7CiAKICAgICBXZWJQYWdlKiBtX3BhZ2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YkRyYWdDbGllbnRNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5o
IgorI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKKyNpbXBvcnQgIldlYkRyYWdDbGllbnQuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIK
KyNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0NhY2hl
ZEltYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RPTVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRE9NRWxlbWVudEludGVybmFsLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTGVn
YWN5V2ViQXJjaGl2ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJJbWFnZS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TdHJpbmdUcnVuY2F0b3IuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXROU1N0cmluZ0V4dHJhcy5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dlYk5TVVJMRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY29uc3QgZmxvYXQgRHJhZ0xhYmVsQm9yZGVyWCA9IDQ7CisvL0tl
ZXAgYm9yZGVyX3kgaW4gc3luY2ggd2l0aCBEcmFnQ29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJ
bnNldAorY29uc3QgZmxvYXQgRHJhZ0xhYmVsQm9yZGVyWSA9IDI7Citjb25zdCBmbG9hdCBEcmFn
TGFiZWxSYWRpdXMgPSA1OworY29uc3QgZmxvYXQgTGFiZWxCb3JkZXJZT2Zmc2V0ID0gMjsKKwor
Y29uc3QgZmxvYXQgTWluRHJhZ0xhYmVsV2lkdGhCZWZvcmVDbGlwID0gMTIwOworY29uc3QgZmxv
YXQgTWF4RHJhZ0xhYmVsV2lkdGggPSAzMjA7CisKK2NvbnN0IGZsb2F0IERyYWdMaW5rTGFiZWxG
b250c2l6ZSA9IDExOworY29uc3QgZmxvYXQgRHJhZ0xpbmtVcmxGb250U2l6ZSA9IDEwOworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEZvbnQmIGZvbnRGcm9tTlNGb250KE5T
Rm9udCAqZm9udCkKK3sKKyAgICBzdGF0aWMgTlNGb250ICpjdXJyZW50Rm9udDsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEZvbnQsIGN1cnJlbnRSZW5kZXJlciwgKCkpOworICAgIAorICAgIGlm
IChbZm9udCBpc0VxdWFsOmN1cnJlbnRGb250XSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRSZW5k
ZXJlcjsKKyAgICBpZiAoY3VycmVudEZvbnQpCisgICAgICAgIENGUmVsZWFzZShjdXJyZW50Rm9u
dCk7CisgICAgY3VycmVudEZvbnQgPSBmb250OworICAgIENGUmV0YWluKGN1cnJlbnRGb250KTsK
KyAgICBGb250UGxhdGZvcm1EYXRhIGYoZm9udCwgW2ZvbnQgcG9pbnRTaXplXSk7CisgICAgY3Vy
cmVudFJlbmRlcmVyID0gRm9udChmLCAhW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAgICByZXR1cm4gY3VycmVudFJlbmRlcmVyOworfQor
ICAgIAordm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFn
ZSwgY29uc3QgSW50UG9pbnQmIGF0LCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2Fy
ZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCit7CisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChjbGlwYm9hcmQpOworICAgIAorICAg
IE5TSW1hZ2UgKmRyYWdOU0ltYWdlID0gZHJhZ0ltYWdlLmdldCgpOworICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGRyYWdTaGFyZWFibGVJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
U2hhcmVhYmxlKEludFNpemUoW2RyYWdOU0ltYWdlIHNpemVdKSk7CisgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gZHJhZ1NoYXJlYWJsZUltYWdlLT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoKTsKKworICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NT
dGF0ZV07CisgICAgTlNHcmFwaGljc0NvbnRleHQqIGJpdG1hcENvbnRleHQgPSBbTlNHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpncmFwaGljc0NvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpIGZsaXBwZWQ6WUVTXTsKKyAgICBbTlNHcmFwaGljc0NvbnRleHQg
c2V0Q3VycmVudENvbnRleHQ6IGJpdG1hcENvbnRleHRdOworICAgIAorICAgIFtkcmFnTlNJbWFn
ZSBkcmF3SW5SZWN0Ok5TTWFrZVJlY3QoMCwgMCwgW2RyYWdOU0ltYWdlIHNpemVdLndpZHRoICwg
W2RyYWdOU0ltYWdlIHNpemVdLmhlaWdodCkgZnJvbVJlY3Q6TlNaZXJvUmVjdCBvcGVyYXRpb246
TlNDb21wb3NpdGVTb3VyY2VPdmVyIGZyYWN0aW9uOjFdOworICAgIFtOU0dyYXBoaWNzQ29udGV4
dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CisgCisgICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFu
ZGxlOworICAgIGlmICghZHJhZ1NoYXJlYWJsZUltYWdlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEludFBvaW50IGNsaWVudFBvaW50KGF0KTsKKyAgICBtX3Bh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0RHJhZ0ltYWdlKGNsaWVudFBvaW50
LCBJbnRTaXplKFtkcmFnTlNJbWFnZSBzaXplXSksIGhhbmRsZSwgbGlua0RyYWcpKTsKK30KKwor
RHJhZ0ltYWdlUmVmIFdlYkRyYWdDbGllbnQ6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmsoS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBOU1N0cmluZyAqbGFiZWwgPSAwOworICAgIGlm
ICghdGl0bGUuaXNFbXB0eSgpKQorICAgICAgICBsYWJlbCA9IHRpdGxlOworICAgIE5TVVJMICpj
b2NvYVVSTCA9IHVybDsKKyAgICBOU1N0cmluZyAqdXJsU3RyaW5nID0gW2NvY29hVVJMIF93ZWJf
dXNlclZpc2libGVTdHJpbmddOworICAgIAorICAgIEJPT0wgZHJhd1VSTFN0cmluZyA9IFlFUzsK
KyAgICBCT09MIGNsaXBVUkxTdHJpbmcgPSBOTzsKKyAgICBCT09MIGNsaXBMYWJlbFN0cmluZyA9
IE5POworICAgIAorICAgIGlmICghbGFiZWwpIHsKKyAgICAgICAgZHJhd1VSTFN0cmluZyA9IE5P
OworICAgICAgICBsYWJlbCA9IHVybFN0cmluZzsKKyAgICB9CisgICAgCisgICAgTlNGb250ICps
YWJlbEZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250
OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpEcmFnTGlua0xhYmVsRm9udHNpemVdCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSGF2
ZVRyYWl0Ok5TQm9sZEZvbnRNYXNrXTsKKyAgICBOU0ZvbnQgKnVybEZvbnQgPSBbTlNGb250IHN5
c3RlbUZvbnRPZlNpemU6RHJhZ0xpbmtVcmxGb250U2l6ZV07CisgICAgTlNTaXplIGxhYmVsU2l6
ZTsKKyAgICBsYWJlbFNpemUud2lkdGggPSBbbGFiZWwgX3dlYl93aWR0aFdpdGhGb250OiBsYWJl
bEZvbnRdOworICAgIGxhYmVsU2l6ZS5oZWlnaHQgPSBbbGFiZWxGb250IGFzY2VuZGVyXSAtIFts
YWJlbEZvbnQgZGVzY2VuZGVyXTsKKyAgICBpZiAobGFiZWxTaXplLndpZHRoID4gTWF4RHJhZ0xh
YmVsV2lkdGgpeworICAgICAgICBsYWJlbFNpemUud2lkdGggPSBNYXhEcmFnTGFiZWxXaWR0aDsK
KyAgICAgICAgY2xpcExhYmVsU3RyaW5nID0gWUVTOworICAgIH0KKyAgICAKKyAgICBOU1NpemUg
aW1hZ2VTaXplOworICAgIGltYWdlU2l6ZS53aWR0aCA9IGxhYmVsU2l6ZS53aWR0aCArIERyYWdM
YWJlbEJvcmRlclggKiAyOworICAgIGltYWdlU2l6ZS5oZWlnaHQgPSBsYWJlbFNpemUuaGVpZ2h0
ICsgRHJhZ0xhYmVsQm9yZGVyWSAqIDI7CisgICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsKKyAgICAg
ICAgTlNTaXplIHVybFN0cmluZ1NpemU7CisgICAgICAgIHVybFN0cmluZ1NpemUud2lkdGggPSBb
dXJsU3RyaW5nIF93ZWJfd2lkdGhXaXRoRm9udDogdXJsRm9udF07CisgICAgICAgIHVybFN0cmlu
Z1NpemUuaGVpZ2h0ID0gW3VybEZvbnQgYXNjZW5kZXJdIC0gW3VybEZvbnQgZGVzY2VuZGVyXTsK
KyAgICAgICAgaW1hZ2VTaXplLmhlaWdodCArPSB1cmxTdHJpbmdTaXplLmhlaWdodDsKKyAgICAg
ICAgaWYgKHVybFN0cmluZ1NpemUud2lkdGggPiBNYXhEcmFnTGFiZWxXaWR0aCkgeworICAgICAg
ICAgICAgaW1hZ2VTaXplLndpZHRoID0gbWF4KE1heERyYWdMYWJlbFdpZHRoICsgRHJhZ0xhYmVs
Qm9yZGVyWSAqIDIsIE1pbkRyYWdMYWJlbFdpZHRoQmVmb3JlQ2xpcCk7CisgICAgICAgICAgICBj
bGlwVVJMU3RyaW5nID0gWUVTOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGltYWdlU2l6
ZS53aWR0aCA9IG1heChsYWJlbFNpemUud2lkdGggKyBEcmFnTGFiZWxCb3JkZXJYICogMiwgdXJs
U3RyaW5nU2l6ZS53aWR0aCArIERyYWdMYWJlbEJvcmRlclggKiAyKTsKKyAgICB9CisgICAgTlNJ
bWFnZSAqZHJhZ0ltYWdlID0gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOiBpbWFnZVNp
emVdIGF1dG9yZWxlYXNlXTsKKyAgICBbZHJhZ0ltYWdlIGxvY2tGb2N1c107CisgICAgCisgICAg
W1tOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDogMC43ZiBncmVlbjogMC43ZiBibHVlOiAwLjdm
IGFscGhhOiAwLjhmXSBzZXRdOworICAgIAorICAgIC8vIERyYWcgYSByZWN0YW5nbGUgd2l0aCBy
b3VuZGVkIGNvcm5lcnMKKyAgICBOU0JlemllclBhdGggKnBhdGggPSBbTlNCZXppZXJQYXRoIGJl
emllclBhdGhdOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNN
YWtlUmVjdCgwLCAwLCBEcmFnTGFiZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyKV07
CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAs
IGltYWdlU2l6ZS5oZWlnaHQgLSBEcmFnTGFiZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMg
KiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdp
dGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJlbFJhZGl1
cyAqIDIsIGltYWdlU2l6ZS5oZWlnaHQgLSBEcmFnTGFiZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxS
YWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVy
UGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJl
bFJhZGl1cyAqIDIsIDAsIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIp
XTsKKyAgICAKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3Qo
RHJhZ0xhYmVsUmFkaXVzLCAwLCBpbWFnZVNpemUud2lkdGggLSBEcmFnTGFiZWxSYWRpdXMgKiAy
LCBpbWFnZVNpemUuaGVpZ2h0KV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0
OiBOU01ha2VSZWN0KDAsIERyYWdMYWJlbFJhZGl1cywgRHJhZ0xhYmVsUmFkaXVzICsgMTAsIGlt
YWdlU2l6ZS5oZWlnaHQgLSAyICogRHJhZ0xhYmVsUmFkaXVzKV07CisgICAgW3BhdGggYXBwZW5k
QmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJl
bFJhZGl1cyAtIDIwLCBEcmFnTGFiZWxSYWRpdXMsIERyYWdMYWJlbFJhZGl1cyArIDIwLCBpbWFn
ZVNpemUuaGVpZ2h0IC0gMiAqIERyYWdMYWJlbFJhZGl1cyldOworICAgIFtwYXRoIGZpbGxdOwor
ICAgIAorICAgIE5TQ29sb3IgKnRvcENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hp
dGU6MC4wZiBhbHBoYTowLjc1Zl07CisgICAgTlNDb2xvciAqYm90dG9tQ29sb3IgPSBbTlNDb2xv
ciBjb2xvcldpdGhEZXZpY2VXaGl0ZToxLjBmIGFscGhhOjAuNWZdOworICAgIGlmIChkcmF3VVJM
U3RyaW5nKSB7CisgICAgICAgIGlmIChjbGlwVVJMU3RyaW5nKQorICAgICAgICAgICAgLy91cmxT
dHJpbmcgPSBbV2ViU3RyaW5nVHJ1bmNhdG9yIGNlbnRlclRydW5jYXRlU3RyaW5nOiB1cmxTdHJp
bmcgdG9XaWR0aDppbWFnZVNpemUud2lkdGggLSAoRHJhZ0xhYmVsQm9yZGVyWCAqIDIpIHdpdGhG
b250OnVybEZvbnRdOworICAgICAgICAgICAgdXJsU3RyaW5nID0gU3RyaW5nVHJ1bmNhdG9yOjpj
ZW50ZXJUcnVuY2F0ZSh1cmxTdHJpbmcsIGltYWdlU2l6ZS53aWR0aCAtIChEcmFnTGFiZWxCb3Jk
ZXJYICogMiksIGZvbnRGcm9tTlNGb250KHVybEZvbnQpKTsgICAgICAgCisgICAgICAgIFt1cmxT
dHJpbmcgX3dlYl9kcmF3RG91YmxlZEF0UG9pbnQ6TlNNYWtlUG9pbnQoRHJhZ0xhYmVsQm9yZGVy
WCwgRHJhZ0xhYmVsQm9yZGVyWSAtIFt1cmxGb250IGRlc2NlbmRlcl0pIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRv
bUNvbG9yIGZvbnQ6dXJsRm9udF07CisgICAgfQorICAgIAorICAgIGlmIChjbGlwTGFiZWxTdHJp
bmcpCisgICAgICAgIC8vbGFiZWwgPSBbV2ViU3RyaW5nVHJ1bmNhdG9yIHJpZ2h0VHJ1bmNhdGVT
dHJpbmc6IGxhYmVsIHRvV2lkdGg6aW1hZ2VTaXplLndpZHRoIC0gKERyYWdMYWJlbEJvcmRlclgg
KiAyKSB3aXRoRm9udDpsYWJlbEZvbnRdOworICAgICAgICBsYWJlbCA9IFN0cmluZ1RydW5jYXRv
cjo6cmlnaHRUcnVuY2F0ZShsYWJlbCwgaW1hZ2VTaXplLndpZHRoIC0gKERyYWdMYWJlbEJvcmRl
clggKiAyKSwgZm9udEZyb21OU0ZvbnQobGFiZWxGb250KSk7CisgICAgW2xhYmVsIF93ZWJfZHJh
d0RvdWJsZWRBdFBvaW50Ok5TTWFrZVBvaW50IChEcmFnTGFiZWxCb3JkZXJYLCBpbWFnZVNpemUu
aGVpZ2h0IC0gTGFiZWxCb3JkZXJZT2Zmc2V0IC0gW2xhYmVsRm9udCBwb2ludFNpemVdKQorICAg
ICAgICAgICAgICAgICAgICAgIHdpdGhUb3BDb2xvcjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0
b21Db2xvciBmb250OmxhYmVsRm9udF07CisgICAgCisgICAgW2RyYWdJbWFnZSB1bmxvY2tGb2N1
c107CisgICAgCisgICAgcmV0dXJuIGRyYWdJbWFnZTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVV
UkwoTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBOU1VSTCogVVJMLCBOU1N0cmluZyogdGl0bGUs
IE5TQXJyYXkqIHR5cGVzKQoreworICAgIEFTU0VSVChVUkwpOworICAgIAorICAgIGlmICghW3Rp
dGxlIGxlbmd0aF0pIHsKKyAgICAgICAgdGl0bGUgPSBbW1VSTCBwYXRoXSBsYXN0UGF0aENvbXBv
bmVudF07CisgICAgICAgIGlmICghW3RpdGxlIGxlbmd0aF0pCisgICAgICAgICAgICB0aXRsZSA9
IFtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CisgICAgfQorICAgIAorICAgIGlmIChbdHlw
ZXMgY29udGFpbnNPYmplY3Q6TlNVUkxQYm9hcmRUeXBlXSkKKyAgICAgICAgW1VSTCB3cml0ZVRv
UGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Oldl
YlVSTFBib2FyZFR5cGVdKQorICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W1VSTCBfd2Vi
X29yaWdpbmFsRGF0YUFzU3RyaW5nXSBmb3JUeXBlOldlYlVSTFBib2FyZFR5cGVdOworICAgIGlm
IChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViVVJMTmFtZVBib2FyZFR5cGVdKQorICAgICAgICBb
cGFzdGVib2FyZCBzZXRTdHJpbmc6dGl0bGUgZm9yVHlwZTpXZWJVUkxOYW1lUGJvYXJkVHlwZV07
CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKQorICAg
ICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W1VSTCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXSBm
b3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV07CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVj
dDpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdKSB7CisgICAgICAgIE5TQXJyYXkqIFVSTHMg
PSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6VVJMXTsKKyAgICAgICAgdW5zaWduZWQgY291bnQg
PSBbVVJMcyBjb3VudF07CisgICAgICAgIAorICAgICAgICBpZiAoIWNvdW50IHx8IFtwYXN0ZWJv
YXJkIGF2YWlsYWJsZVR5cGVGcm9tQXJyYXk6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OldlYlVS
THNXaXRoVGl0bGVzUGJvYXJkVHlwZV1dID09IG5pbCkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBOU0FycmF5KiB0aXRsZXMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6dGl0bGVd
OworICAgICAgICAKKyAgICAgICAgaWYgKGNvdW50ICE9IFt0aXRsZXMgY291bnRdKQorICAgICAg
ICAgICAgdGl0bGVzID0gbmlsOworICAgICAgICAKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkqIFVS
TFN0cmluZ3MgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y291bnRdOworICAg
ICAgICBOU011dGFibGVBcnJheSogdGl0bGVzT3JFbXB0eVN0cmluZ3MgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y291bnRdOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkgeworICAgICAgICAgICAgW1VSTFN0cmluZ3Mg
YWRkT2JqZWN0OltbVVJMcyBvYmplY3RBdEluZGV4OmluZGV4XSBfd2ViX29yaWdpbmFsRGF0YUFz
U3RyaW5nXV07CisgICAgICAgICAgICBbdGl0bGVzT3JFbXB0eVN0cmluZ3MgYWRkT2JqZWN0Oih0
aXRsZXMgPT0gbmlsKSA/IEAiIiA6IFtbdGl0bGVzIG9iamVjdEF0SW5kZXg6aW5kZXhdIF93ZWJr
aXRfc3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2VdXTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0OltOU0FycmF5IGFycmF5V2l0aE9iamVj
dHM6VVJMU3RyaW5ncywgdGl0bGVzT3JFbXB0eVN0cmluZ3MsIG5pbF0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JUeXBlOldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZV07CisgICAg
fQorfQorICAgIAorc3RhdGljIHZvaWQgd3JpdGVJbWFnZShOU1Bhc3RlYm9hcmQqIHBhc3RlYm9h
cmQsIE5TSW1hZ2UgKmltYWdlLCBET01FbGVtZW50KiBlbGVtZW50LCBOU1VSTCogVVJMLCBOU1N0
cmluZyogdGl0bGUsIExlZ2FjeVdlYkFyY2hpdmUqIGFyY2hpdmUsIE5TQXJyYXkqIHR5cGVzKQor
eworICAgIEFTU0VSVChpbWFnZSB8fCBlbGVtZW50KTsKKyAgICBBU1NFUlQoVVJMKTsKKyAgICAK
KyAgICB3cml0ZVVSTChwYXN0ZWJvYXJkLCBVUkwsIHRpdGxlLCB0eXBlcyk7CisgICAgCisgICAg
aWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1RJRkZQYm9hcmRUeXBlXSkgeworICAgICAgICAv
LyBGSVhNRTogd2Ugc2hvdWxkIGFkZCBoYW5kbGluZyBvZiBwcm9taXNlZCB0eXBlcy4KKyAgICAg
ICAgaWYgKGltYWdlKQorICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpbaW1hZ2UgVElG
RlJlcHJlc2VudGF0aW9uXSBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOworICAgICAgICBlbHNl
IGlmIChlbGVtZW50KQorICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpbZWxlbWVudCBf
aW1hZ2VUSUZGUmVwcmVzZW50YXRpb25dIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07CisgICAg
fQorICAgIAorICAgIGlmIChhcmNoaXZlICYmIFt0eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNo
aXZlUGJvYXJkVHlwZV0pCisgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6W1soTlNEYXRhICop
YXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkgcmV0YWluXSBhdXRvcmVsZWFz
ZV0gZm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV07Cit9CisgICAgCit2b2lkIFdlYkRyYWdD
bGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQs
IERPTUVsZW1lbnQqIGVsZW1lbnQsIE5TVVJMKiBVUkwsIE5TU3RyaW5nKiB0aXRsZSwgV2ViQ29y
ZTo6RnJhbWUqKQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBBU1NFUlQocGFzdGVib2Fy
ZCAmJiBwYXN0ZWJvYXJkID09IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRHJh
Z1Bib2FyZF0pOworICAgIAorICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBAIiI7CisgICAgaWYg
KFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3JlKGVsZW1lbnQpLT5yZW5kZXJlcigpKSB7Cisg
ICAgICAgIGlmIChyZW5kZXJlci0+aXNJbWFnZSgpKSB7CisgICAgICAgICAgICBpZiAoQ2FjaGVk
SW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlciktPmNhY2hlZEltYWdlKCkpIHsK
KyAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBpbWFnZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRl
bnNpb24oKTsKKyAgICAgICAgICAgICAgICBpZiAoIVtleHRlbnNpb24gbGVuZ3RoXSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0gTGVnYWN5V2ViQXJj
aGl2ZTo6Y3JlYXRlKGNvcmUoZWxlbWVudCkpOworICAgIE5TTXV0YWJsZUFycmF5ICp0eXBlcyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpOU0ZpbGVzUHJvbWlzZVBi
b2FyZFR5cGUsIG5pbF07CisgICAgW3R5cGVzIGFkZE9iamVjdHNGcm9tQXJyYXk6KGFyY2hpdmUp
ID8gUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXNXaXRoQXJjaGl2ZSgpIDogUGFzdGVib2FyZFR5
cGVzOjpmb3JJbWFnZXMoKV07CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93
bmVyOm5pbF07ICAgIAorICAgIHdyaXRlSW1hZ2UocGFzdGVib2FyZCwgbmlsLCBlbGVtZW50LCBV
UkwsIHRpdGxlLCBhcmNoaXZlLmdldCgpLCB0eXBlcyk7CisgICAgW3R5cGVzIHJlbGVhc2VdOwor
ICAgIAorICAgIE5TQXJyYXkgKmV4dGVuc2lvbnMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRo
T2JqZWN0czpleHRlbnNpb24sIG5pbF07CisgICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0
OmV4dGVuc2lvbnMgZm9yVHlwZTpOU0ZpbGVzUHJvbWlzZVBib2FyZFR5cGVdOworICAgIFtleHRl
bnNpb25zIHJlbGVhc2VdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDc2
MTI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzA3LDYgKzEzMDcsMjEgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3RpbwogICAgIH0KIH0KIAordm9pZCBXZWJQYWdlOjpkcmFnRW5kZWQo
V2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2Jh
bFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pCit7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRD
bGllbnRQb3NpdGlvbihjbGllbnRQb3NpdGlvbi54KCkgKyBtX3BhZ2UtPmRyYWdDb250cm9sbGVy
KCktPmRyYWdPZmZzZXQoKS54KCksIGNsaWVudFBvc2l0aW9uLnkoKSArIG1fcGFnZS0+ZHJhZ0Nv
bnRyb2xsZXIoKS0+ZHJhZ09mZnNldCgpLnkoKSk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRHbG9i
YWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbi54KCkgKyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkt
PmRyYWdPZmZzZXQoKS54KCksIGdsb2JhbFBvc2l0aW9uLnkoKSArIG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS0+ZHJhZ09mZnNldCgpLnkoKSk7CisgICAgCisgICAgbV9wYWdlLT5kcmFnQ29udHJv
bGxlcigpLT5kcmFnRW5kZWQoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5G
cmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47CisgICAgLy8g
RklYTUU6IFRoZXNlIGFyZSBmYWtlIG1vZGlmaWVyIGtleXMgaGVyZSwgYnV0IHRoZXkgc2hvdWxk
IGJlIHJlYWwgb25lcyBpbnN0ZWFkLgorICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudChhZGp1
c3RlZENsaWVudFBvc2l0aW9uLCBhZGp1c3RlZEdsb2JhbFBvc2l0aW9uLCBMZWZ0QnV0dG9uLCBN
b3VzZUV2ZW50TW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBjdXJyZW50VGlt
ZSgpKTsKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+ZHJhZ1NvdXJj
ZUVuZGVkQXQoZXZlbnQsIChEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbik7CisgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRFbmREcmFnKGFkanVzdGVkQ2xpZW50UG9zaXRpb24pKTsK
K30KKwogV2ViRWRpdENvbW1hbmQqIFdlYlBhZ2U6OndlYkVkaXRDb21tYW5kKHVpbnQ2NF90IGNv
bW1hbmRJRCkKIHsKICAgICByZXR1cm4gbV9lZGl0Q29tbWFuZE1hcC5nZXQoY29tbWFuZElEKS5n
ZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAkocmV2aXNpb24gNzYxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiArMzAwLDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBT
dHJpbmcmKTsKICAgICB2b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBh
Y3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2lu
dCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBj
b25zdCBXVEY6OlN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCB1aW50MzJfdCBmbGFncyk7CisgICAg
dm9pZCBkcmFnRW5kZWQoV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6
OkludFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pOwogCiAgICAgdm9p
ZCBiZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYpOwogICAg
IHZvaWQgZW5kUHJpbnRpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiA3NjEyOCkKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogCiAg
ICAgIyBEcmFnIGFuZCBkcm9wLgogICAgIFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50
NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJ
bnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrLCBXVEY6OlN0cmluZyBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzKQorICAgIERy
YWdFbmRlZChXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9p
bnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlvbikKIAogICAgICMgUG9wdXAgbWVu
dS4KICAgICBEaWRDaGFuZ2VTZWxlY3RlZEluZGV4Rm9yQWN0aXZlUG9wdXBNZW51KGludDMyX3Qg
bmV3SW5kZXgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79437</attachid>
            <date>2011-01-19 09:47:54 -0800</date>
            <delta_ts>2011-01-19 11:18:55 -0800</delta_ts>
            <desc>Patch8</desc>
            <filename>dragsource.txt</filename>
            <type>text/plain</type>
            <size>45467</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTI4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDEtMTggIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBhZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJv
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgIAorICAgICAgICBUaGlz
IHBhdGNoIGNvbnRhaW5zIHRoZSByZW1haW5pbmcgd29yayB0byBzdXBwb3J0IGRyYWcgYW5kIGRy
b3Agb24gTWFjLgorICAgICAgICBJJ3ZlIGFkZGVkIGEgUGFzdGVib2FyZFR5cGVzIGNsYXNzIHRv
IGVuY2Fwc3VsYXRlIGFsbCB0aGUgcGFzdGVib2FyZCBmb3JtYXRzCisgICAgICAgIHN1cHBvcnRl
ZCBmb3IgZHJhZyBhbmQgZHJvcC4KKyAgICAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB3ZSBk
b24ndCBzdXBwb3J0IHRoZSBwcm9taXNlZCB0eXBlcywgc2luY2UgSSBjb3VsZCBub3QKKyAgICAg
ICAgZmluZCBhbiBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMgYWNyb3NzIHByb2Nlc3Nlcy4KKyAg
ICAgICAgVGhlIGJ1bGsgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIGluIGNyZWF0aW5nIGEgc2hhcmVh
YmxlIGJpdG1hcCBmb3IgdGhlIGRyYWcgaW1hZ2UsCisgICAgICAgIHBhc3MgaXRzIGhhbmRsZSB0
byB0aGUgVUkgcHJvY2VzcyBhbmQgY3JlYXRlIGEgbmV3IE5TSW1hZ2UgZnJvbSBpdCB0byBiZSBn
aXZlbiB0bworICAgICAgICBBcHBLaXQgZm9yIGRyYWdnaW5nLgorICAgICAgICBJJ3ZlIGFkZGVk
IHRoZSBtaXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2RzIGluIHRoZSBkcmFnIGNs
aWVudCB0byBob29rCisgICAgICAgIHVwIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGRhdGEgaW4gdGhl
IHBhc3RlYm9hcmQuCisgICAgICAgIAorICAgICAgICAqIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5
cGVzLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JFZGl0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JVUkwpOgorICAgICAgICAoV2ViS2l0
OjpQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OlBhc3RlYm9h
cmRUeXBlczo6Zm9ySW1hZ2VzV2l0aEFyY2hpdmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXREcmFnSW1h
Z2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZEVuZERyYWcp
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAg
ICgtW1dLVmlldyBfcmVnaXN0ZXJEcmFnZ2VkVHlwZXNdKTogUmVmYWN0b3JlZCB0byB1c2UgdGhl
IG5ldyBQYXN0ZWJvYXJkVHlwZXMgY2xhc3MuCisgICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZy
YW1lOmNvbnRleHRSZWY6cGFnZUdyb3VwUmVmOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX3NldE1v
dXNlRG93bkV2ZW50Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX21vdXNlSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IG1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tWaWV3IG1vdXNlVXA6
XSk6CisgICAgICAgICgtW1dLVmlldyBtb3VzZURyYWdnZWQ6XSk6CisgICAgICAgICgtW1dLVmll
dyBfZGlkRW5kRHJhZzpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnZWRJbWFnZTplbmRlZEF0
Om9wZXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRW50ZXJlZDpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IF9zZXREcmFnSW1hZ2U6YXQ6bGlua0RyYWc6XSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
UGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldERyYWdJbWFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZHJhZ0VuZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkaWRFbmREcmFnKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBX
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6Zm9udEZyb21OU0ZvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpzdGFy
dERyYWcpOiBBZGRlZCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Ns
aWVudDo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6IERpdHRvLgorICAgICAgICAoV2ViS2l0Ojp3
cml0ZVVSTCk6IFV0aWxpdHkgZnVuY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OndyaXRlSW1hZ2Up
OiBVdGlsaXR5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpkZWNs
YXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRyYWdFbmRlZCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMS0wMS0xOSAgQ3NhYmEgT3N6
dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IExhc3ps
byBHb21ib3MgYW5kIFRvciBBcm5lIFZlc3Riw7guCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYXN0ZWJvYXJkVHlwZXNfaAorI2RlZmluZSBQYXN0
ZWJvYXJkVHlwZXNfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZXh0ZXJuIE5TU3RyaW5nICog
Y29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5cGU7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJV
UkxzV2l0aFRpdGxlc1Bib2FyZFR5cGU7CitleHRlcm4gTlNTdHJpbmcgKiBjb25zdCBXZWJVUkxQ
Ym9hcmRUeXBlOworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV2ViVVJMTmFtZVBib2FyZFR5cGU7
CisgICAgCitjbGFzcyBQYXN0ZWJvYXJkVHlwZXMgeworcHVibGljOgorICAgIAorICAgIHN0YXRp
YyBOU0FycmF5KiBmb3JFZGl0aW5nKCk7CisgICAgc3RhdGljIE5TQXJyYXkqIGZvclVSTCgpOwor
ICAgIHN0YXRpYyBOU0FycmF5KiBmb3JJbWFnZXMoKTsKKyAgICBzdGF0aWMgTlNBcnJheSogZm9y
SW1hZ2VzV2l0aEFyY2hpdmUoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gUGFzdGVib2FyZFR5cGVzX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
UGFzdGVib2FyZFR5cGVzLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvUGFzdGVib2FyZFR5cGVzLm1tCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0ICJQYXN0ZWJvYXJkVHlwZXMuaCIKKyNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK05TU3RyaW5nICogY29uc3QgV2Vi
QXJjaGl2ZVBib2FyZFR5cGUgPSBAIkFwcGxlIFdlYiBBcmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7
CitOU1N0cmluZyAqIGNvbnN0IFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSA9IEAiV2ViVVJM
c1dpdGhUaXRsZXNQYm9hcmRUeXBlIjsKK05TU3RyaW5nICogY29uc3QgV2ViVVJMUGJvYXJkVHlw
ZSA9IEAicHVibGljLnVybCI7CitOU1N0cmluZyAqIGNvbnN0IFdlYlVSTE5hbWVQYm9hcmRUeXBl
ID0gQCJwdWJsaWMudXJsLW5hbWUiOworCitOU0FycmF5KiBQYXN0ZWJvYXJkVHlwZXM6OmZvckVk
aXRpbmcoKQoreworICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4gdHlwZXMgPSBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hUTUxQYm9hcmRUeXBl
LCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIE5TVElGRlBib2FyZFR5cGUsIE5TUERGUGJvYXJkVHlw
ZSwKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpCisgICAgICAgIE5TUElDVFBib2FyZFR5cGUsCisjZW5kaWYKKyAgICAgICAgTlNV
UkxQYm9hcmRUeXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5n
UGJvYXJkVHlwZSwgTlNDb2xvclBib2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07CisgICAgcmV0
dXJuIHR5cGVzLmdldCgpOworfQorCitOU0FycmF5KiBQYXN0ZWJvYXJkVHlwZXM6OmZvclVSTCgp
Cit7CisgICAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiB0eXBlcyA9IFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6V2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2FyZFR5cGUs
IFdlYlVSTFBib2FyZFR5cGUsICBXZWJVUkxOYW1lUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRU
eXBlLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIG5pbF07CisgICAgcmV0dXJuIHR5cGVzLmdldCgp
OworfQorCitOU0FycmF5KiBQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcygpCit7CisgICAgc3Rh
dGljIFJldGFpblB0cjxOU0FycmF5PiB0eXBlcyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6
TlNUSUZGUGJvYXJkVHlwZSwgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2Fy
ZFR5cGUsIFdlYlVSTFBib2FyZFR5cGUsIFdlYlVSTE5hbWVQYm9hcmRUeXBlLCBOU1N0cmluZ1Bi
b2FyZFR5cGUsIG5pbF07CisgICAgcmV0dXJuIHR5cGVzLmdldCgpOworfQorCitOU0FycmF5KiBQ
YXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlc1dpdGhBcmNoaXZlKCkKK3sKKyAgICBzdGF0aWMgUmV0
YWluUHRyPE5TQXJyYXk+IHR5cGVzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpOU1RJRkZQ
Ym9hcmRUeXBlLCBXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUsIE5TVVJMUGJvYXJkVHlwZSwg
V2ViVVJMUGJvYXJkVHlwZSwgV2ViVVJMTmFtZVBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlw
ZSwgTlNSVEZEUGJvYXJkVHlwZSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUsIG5pbF07CisgICAgcmV0
dXJuIHR5cGVzLmdldCgpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDc2MTI4KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2lmbmRlZiBQYWdlQ2xpZW50X2gKICNkZWZpbmUgUGFnZUNsaWVudF9oCiAK
KyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
ICNpbmNsdWRlICJXZWJQb3B1cE1lbnVQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CkBAIC05OSw2ICsxMDAsOCBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1
YWwgdm9pZCBhY2Nlc3NpYmlsaXR5Q2hpbGRUb2tlblJlY2VpdmVkKGNvbnN0IENvcmVJUEM6OkRh
dGFSZWZlcmVuY2UmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtleUV2ZW50KGNv
bnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21t
YW5kPiYsIHVpbnQzMl90LCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5k
ZXJsaW5lPiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdURjo6UGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+LCBib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZEVuZERyYWco
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7CiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4p
CiAgICAgdmlydHVhbCB2b2lkIGNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdlZChib29sKSA9IDA7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNp
b24gNzYxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjE2LDYgKzYxNiwyOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlk
UGVyZm9ybURyYWdDb250cm9sCiAgICAgbV9jdXJyZW50RHJhZ09wZXJhdGlvbiA9IHN0YXRpY19j
YXN0PERyYWdPcGVyYXRpb24+KHJlc3VsdE9wZXJhdGlvbik7CiB9CiAKKyNpZiBQTEFURk9STShN
QUMpCit2b2lkIFdlYlBhZ2VQcm94eTo6c2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBTaGFy
ZWRNZW1vcnk6OkhhbmRsZSYgZHJhZ0ltYWdlSGFuZGxlLCBib29sIGlzTGlua0RyYWcpCit7Cisg
ICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoaW1hZ2VTaXplLCBkcmFnSW1hZ2VIYW5kbGUpOworICAgIGlmICghZHJhZ0ltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9wYWdlQ2xpZW50LT5zZXREcmFnSW1hZ2UoY2xp
ZW50UG9zaXRpb24sIGltYWdlU2l6ZSwgZHJhZ0ltYWdlLCBpc0xpbmtEcmFnKTsKK30KKwordm9p
ZCBXZWJQYWdlUHJveHk6OmRpZEVuZERyYWcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFkanVz
dGVkQ2xpZW50UG9zaXRpb24pCit7CisgICAgbV9wYWdlQ2xpZW50LT5kaWRFbmREcmFnKGFkanVz
dGVkQ2xpZW50UG9zaXRpb24pOworfQorI2VuZGlmCisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmFn
RW5kZWQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlvbikKK3sKKyAg
ICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHByb2Nlc3MoKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RHJhZ0VuZGVkKGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlv
biwgb3BlcmF0aW9uKSwgbV9wYWdlSUQpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxl
TW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKIHsKICAgICBpZiAoIWlzVmFs
aWQoKSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlz
aW9uIDc2MTI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDExIEBAIHB1YmxpYzoKICAgICAvLyBEcmFnIGFu
ZCBkcm9wIHN1cHBvcnQuCiAgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJh
Z0NvbnRyb2xsZXJBY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKiwgY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCBkaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgcmVzdWx0T3Bl
cmF0aW9uKTsKLQorICAgIHZvaWQgZHJhZ0VuZGVkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBj
bGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCB1
aW50NjRfdCBvcGVyYXRpb24pOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIHNldERyYWdJ
bWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGRyYWdJ
bWFnZUhhbmRsZSwgYm9vbCBpc0xpbmtEcmFnKTsKKyAgICB2b2lkIGRpZEVuZERyYWcoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGFkanVzdGVkQ2xpZW50UG9zaXRpb24pOworI2VuZGlmCiAgICAg
dm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVz
c2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICAgICB2b2lkIGRpZFJlY2VpdmVT
eW5jTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3Jl
SVBDOjpBcmd1bWVudERlY29kZXIqLCBDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKTsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiA3NjEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE4OSw0ICsxODksOCBAQCBtZXNz
YWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIAogICAgICMgRHJhZyBhbmQgZHJvcC4KICAgICBE
aWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgcmVzdWx0T3BlcmF0aW9uKQor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICBTZXREcmFnSW1hZ2UoV2ViQ29yZTo6SW50UG9pbnQgY2xp
ZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFNpemUgaW1hZ2VTaXplLCBXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SGFuZGxlIGRyYWdJbWFnZUhhbmRsZSwgYm9vbCBsaW5rRHJhZykKKyAgICBEaWRFbmRE
cmFnKFdlYkNvcmU6OkludFBvaW50IGFkanVzdGVkQ2xpZW50UG9zaXRpb24pCisjZW5kaWYKIH0K
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwuaAkocmV2aXNpb24gNzYxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAgICAgdmly
dHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwg
Ym9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSk7CiAgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtl
eUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8V2ViQ29y
ZTo6S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZE5hbWUsIHVpbnQzMl90IHNlbGVjdGlvblN0YXJ0
LCB1aW50MzJfdCBzZWxlY3Rpb25FbmQsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVy
bGluZT4mIHVuZGVybGluZXMpOworICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBpbWFnZVNpemUsIFdURjo6UGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSwg
Ym9vbCBpc0xpbmtEcmFnKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kRHJhZyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgYWRqdXN0ZWRDbGllbnRQb3NpdGlvbik7CiAKICAgICB2aXJ0dWFsIFdl
YkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9Vc2VyU3Bh
Y2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gNzYxMjgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3Iu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvdW5k
YXRpb25FeHRyYXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPHd0Zi9QYXNzT3duUHRyLmg+
CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0yNzgsNiArMjc5LDE4IEBAIHZvaWQg
UGFnZUNsaWVudEltcGw6OmludGVyY2VwdEtleUV2ZW50KGMKICAgICBbbV93a1ZpZXcgX2dldFRl
eHRJbnB1dFN0YXRlOnNlbGVjdGlvblN0YXJ0IHNlbGVjdGlvbkVuZDpzZWxlY3Rpb25FbmQgdW5k
ZXJsaW5lczp1bmRlcmxpbmVzXTsKIH0KIAordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RHJhZ0lt
YWdlKGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgaW1hZ2VT
aXplLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0Ry
YWcpCit7CisgICAgTlNJbWFnZSogZHJhZ05TSW1hZ2UgPSBbW1tOU0ltYWdlIGFsbG9jXSBpbml0
V2l0aENHSW1hZ2U6Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoZHJhZ0ltYWdlLT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpIHNpemU6aW1hZ2VTaXplXSBhdXRv
cmVsZWFzZV07CisgICAgW2RyYWdOU0ltYWdlIHNldEZsaXBwZWQ6WUVTXTsKKyAgICBbbV93a1Zp
ZXcgX3NldERyYWdJbWFnZTpkcmFnTlNJbWFnZSBhdDpjbGllbnRQb3NpdGlvbiBsaW5rRHJhZzpp
c0xpbmtEcmFnXTsKK30KKyAgICAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZEVuZERyYWcoY29u
c3QgSW50UG9pbnQmIGFkanVzdGVkQ2xpZW50UG9zaXRpb24pCit7CisgICAgW21fd2tWaWV3IF9k
aWRFbmREcmFnOmFkanVzdGVkQ2xpZW50UG9zaXRpb25dOworfQorCiBGbG9hdFJlY3QgUGFnZUNs
aWVudEltcGw6OmNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
ICAgICByZXR1cm4gW21fd2tWaWV3IF9jb252ZXJ0VG9EZXZpY2VTcGFjZTpyZWN0XTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDc2
MTI4KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0ICJOYXRpdmVXZWJLZXlib2FyZEV2
ZW50LmgiCiAjaW1wb3J0ICJQREZWaWV3Q29udHJvbGxlci5oIgogI2ltcG9ydCAiUGFnZUNsaWVu
dEltcGwuaCIKKyNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5oIgogI2ltcG9ydCAiUHJpbnRJbmZv
LmgiCiAjaW1wb3J0ICJSdW5Mb29wLmgiCiAjaW1wb3J0ICJUZXh0Q2hlY2tlci5oIgpAQCAtMTM1
LDYgKzEzNiw4IEBAIEBpbnRlcmZhY2UgV0tWaWV3RGF0YSA6IE5TT2JqZWN0IHsKIAogICAgIGJv
b2wgX2luQmVjb21lRmlyc3RSZXNwb25kZXI7CiAgICAgYm9vbCBfaW5SZXNpZ25GaXJzdFJlc3Bv
bmRlcjsKKyAgICBOU0V2ZW50ICpfbW91c2VEb3duRXZlbnQ7CisgICAgQk9PTCBfaWdub3JpbmdN
b3VzZURyYWdnZWRFdmVudHM7CiB9CiBAZW5kCiAKQEAgLTE5NSwyMSArMTk4LDEwIEBAIC0gKGlk
KWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSBjb250ZXgKICAgICByZXR1cm4gW3NlbGYgaW5p
dFdpdGhGcmFtZTpmcmFtZSBjb250ZXh0UmVmOmNvbnRleHRSZWYgcGFnZUdyb3VwUmVmOm5pbF07
CiB9CiAKLXN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYkFyY2hpdmVQYm9hcmRUeXBlID0gQCJB
cHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOwotc3RhdGljIE5TU3RyaW5nICogY29u
c3QgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlID0gQCJXZWJVUkxzV2l0aFRpdGxlc1Bib2Fy
ZFR5cGUiOwotc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViVVJMUGJvYXJkVHlwZSA9IEAicHVi
bGljLnVybCI7Ci1zdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJVUkxOYW1lUGJvYXJkVHlwZSA9
IEAicHVibGljLnVybC1uYW1lIjsKLQogLSAodm9pZClfcmVnaXN0ZXJEcmFnZ2VkVHlwZXMKIHsK
LSAgICBOU0FycmF5ICplZGl0YWJsZVR5cGVzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpX
ZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNIVE1MUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9hcmRU
eXBlLCBOU1RJRkZQYm9hcmRUeXBlLCBOU1BERlBib2FyZFR5cGUsCi0jaWYgZGVmaW5lZChCVUlM
RElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgICAgICBO
U1BJQ1RQYm9hcmRUeXBlLAotI2VuZGlmCi0gICAgICAgIE5TVVJMUGJvYXJkVHlwZSwgTlNSVEZE
UGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TQ29sb3JQ
Ym9hcmRUeXBlLCBrVVRUeXBlUE5HLCBuaWxdOwotICAgIE5TQXJyYXkgKlVSTFR5cGVzID0gW05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0czpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUsIE5TVVJM
UGJvYXJkVHlwZSwgV2ViVVJMUGJvYXJkVHlwZSwgIFdlYlVSTE5hbWVQYm9hcmRUeXBlLCBOU1N0
cmluZ1Bib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgbmlsXTsKLSAgICBOU011dGFi
bGVTZXQgKnR5cGVzID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRXaXRoQXJyYXk6ZWRpdGFi
bGVUeXBlc107Ci0gICAgW3R5cGVzIGFkZE9iamVjdHNGcm9tQXJyYXk6VVJMVHlwZXNdOworICAg
IE5TTXV0YWJsZVNldCAqdHlwZXMgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdFdpdGhBcnJh
eTpQYXN0ZWJvYXJkVHlwZXM6OmZvckVkaXRpbmcoKV07CisgICAgW3R5cGVzIGFkZE9iamVjdHNG
cm9tQXJyYXk6UGFzdGVib2FyZFR5cGVzOjpmb3JVUkwoKV07CiAgICAgW3NlbGYgcmVnaXN0ZXJG
b3JEcmFnZ2VkVHlwZXM6W3R5cGVzIGFsbE9iamVjdHNdXTsKICAgICBbdHlwZXMgcmVsZWFzZV07
CiB9CkBAIC0yMzUsNiArMjI3LDggQEAgLSAoaWQpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1l
IGNvbnRleAogICAgIF9kYXRhLT5fcGFnZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUo
c2VsZik7CiAgICAgX2RhdGEtPl9wYWdlID0gdG9JbXBsKGNvbnRleHRSZWYpLT5jcmVhdGVXZWJQ
YWdlKF9kYXRhLT5fcGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cFJlZikpOwogICAg
IF9kYXRhLT5fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBfZGF0YS0+X21vdXNlRG93
bkV2ZW50ID0gbmlsOworICAgIF9kYXRhLT5faWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBO
TzsKIAogICAgIFtzZWxmIF9yZWdpc3RlckRyYWdnZWRUeXBlc107CiAKQEAgLTcyOSw2ICs3MjMs
MTcgQEAgLSAoQk9PTClfd2FudHNLZXlEb3duRm9yRXZlbnQ6KE5TRXZlbnQgKgogICAgIHJldHVy
biBZRVM7CiB9CiAKKy0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24g
fHwgW2V2ZW50IHR5cGVdID09IE5TUmlnaHRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5T
T3RoZXJNb3VzZURvd24pOworICAgIAorICAgIGlmIChldmVudCA9PSBfZGF0YS0+X21vdXNlRG93
bkV2ZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW19kYXRhLT5fbW91c2VEb3duRXZl
bnQgcmVsZWFzZV07CisgICAgX2RhdGEtPl9tb3VzZURvd25FdmVudCA9IFtldmVudCByZXRhaW5d
OworfQorCiAjZGVmaW5lIEVWRU5UX0hBTkRMRVIoU2VsZWN0b3IsIFR5cGUpIFwKICAgICAtICh2
b2lkKVNlbGVjdG9yOihOU0V2ZW50ICopdGhlRXZlbnQgXAogICAgIHsgXApAQCAtNzUxLDIxICs3
NTYsMzQgQEAgRVZFTlRfSEFORExFUihzY3JvbGxXaGVlbCwgV2hlZWwpCiAKICN1bmRlZiBFVkVO
VF9IQU5ETEVSCiAKLSNkZWZpbmUgTU9VU0VfRVZFTlRfSEFORExFUihTZWxlY3RvcikgXAotICAg
IC0gKHZvaWQpU2VsZWN0b3I6KE5TRXZlbnQgKil0aGVFdmVudCBcCi0gICAgeyBcCi0gICAgICAg
IE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1
cnJlbnRJbnB1dE1hbmFnZXJdOyBcCi0gICAgICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3
YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1v
dXNlRXZlbnQ6dGhlRXZlbnRdKSBcCi0gICAgICAgICAgICByZXR1cm47IFwKLSAgICAgICAgV2Vi
TW91c2VFdmVudCB3ZWJFdmVudCA9IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VFdmVu
dCh0aGVFdmVudCwgc2VsZik7IFwKLSAgICAgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVNb3VzZUV2
ZW50KHdlYkV2ZW50KTsgXAotICAgIH0KKy0gKHZvaWQpX21vdXNlSGFuZGxlcjooTlNFdmVudCAq
KXRoZUV2ZW50Cit7CisgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBb
TlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07CisgICAgaWYgKFtjdXJyZW50SW5w
dXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFn
ZXIgaGFuZGxlTW91c2VFdmVudDp0aGVFdmVudF0pCisgICAgICAgIHJldHVybjsKKyAgICBXZWJN
b3VzZUV2ZW50IHdlYkV2ZW50ID0gV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50
KHRoZUV2ZW50LCBzZWxmKTsKKyAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZU1vdXNlRXZlbnQod2Vi
RXZlbnQpOworfQorCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKXRoZUV2ZW50Cit7Cisg
ICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50OnRoZUV2ZW50XTsKKyAgICBfZGF0YS0+X2lnbm9y
aW5nTW91c2VEcmFnZ2VkRXZlbnRzID0gTk87CisgICAgW3NlbGYgX21vdXNlSGFuZGxlcjp0aGVF
dmVudF07Cit9CiAKLU1PVVNFX0VWRU5UX0hBTkRMRVIobW91c2VEb3duKQotTU9VU0VfRVZFTlRf
SEFORExFUihtb3VzZURyYWdnZWQpCi1NT1VTRV9FVkVOVF9IQU5ETEVSKG1vdXNlVXApCistICh2
b2lkKW1vdXNlVXA6KE5TRXZlbnQgKil0aGVFdmVudAoreworICAgIFtzZWxmIF9zZXRNb3VzZURv
d25FdmVudDpuaWxdOworICAgIFtzZWxmIF9tb3VzZUhhbmRsZXI6dGhlRXZlbnRdOworfQogCi0j
dW5kZWYgTU9VU0VfRVZFTlRfSEFORExFUgorLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQg
Kil0aGVFdmVudAoreworICAgIGlmIChfZGF0YS0+X2lnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRz
KQorICAgICAgICByZXR1cm47CisgICAgW3NlbGYgX21vdXNlSGFuZGxlcjp0aGVFdmVudF07Cit9
CiAKIC0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCiB7CkBAIC0xMDM5
LDYgKzEwNTcsMzEgQEAgLSAoTlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOUwog
ICAgIHJldHVybiByZXN1bHRSZWN0OwogfQogCistICh2b2lkKV9kaWRFbmREcmFnOihOU1BvaW50
KWNsaWVudFBvaW50Cit7CisgICAgLy8gT25jZSB0aGUgZHJhZ2dpbmcgbWFjaGluZXJ5IGtpY2tz
IGluLCB3ZSBubyBsb25nZXIgZ2V0IG1vdXNlIGRyYWdzIG9yIHRoZSB1cCBldmVudC4KKyAgICAv
LyBXZWJDb3JlIGV4cGVjdHMgdG8gZ2V0IGJhbGFuY2VkIGRvd24vdXAncywgc28gd2UgbXVzdCBm
YWtlIHVwIGEgbW91c2V1cC4KKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3Vz
ZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VVcAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbjpjbGllbnRQb2ludAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0g
bW9kaWZpZXJGbGFnc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3
aW5kb3ddIHdpbmRvd051bWJlcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3Vu
dDowIHByZXNzdXJlOjBdOworICAgIFtzZWxmIG1vdXNlVXA6ZmFrZUV2ZW50XTsgLy8gVGhpcyB3
aWxsIGFsc28gdXBkYXRlIHRoZSBtb3VzZW92ZXIgc3RhdGUuCit9CisKKy0gKHZvaWQpZHJhZ2dl
ZEltYWdlOihOU0ltYWdlICopYW5JbWFnZSBlbmRlZEF0OihOU1BvaW50KWFQb2ludCBvcGVyYXRp
b246KE5TRHJhZ09wZXJhdGlvbilvcGVyYXRpb24KK3sKKyAgICBOU1BvaW50IHdpbmRvd0ltYWdl
TG9jID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTphUG9pbnRdOworICAgIE5T
UG9pbnQgd2luZG93TW91c2VMb2MgPSB3aW5kb3dJbWFnZUxvYzsKKyAgIAorICAgIC8vIFByZXZl
bnQgcXVldWVkIG1vdXNlRHJhZ2dlZCBldmVudHMgZnJvbSBjb21pbmcgYWZ0ZXIgdGhlIGRyYWcg
YW5kIGZha2UgbW91c2VVcCBldmVudC4KKyAgIF9kYXRhLT5faWdub3JpbmdNb3VzZURyYWdnZWRF
dmVudHMgPSBZRVM7CisgICAgCisgICAgX2RhdGEtPl9wYWdlLT5kcmFnRW5kZWQoSW50UG9pbnQo
d2luZG93TW91c2VMb2MpLCBnbG9iYWxQb2ludCh3aW5kb3dNb3VzZUxvYywgW3NlbGYgd2luZG93
XSksIG9wZXJhdGlvbik7Cit9CisKIC0gKERyYWdBcHBsaWNhdGlvbkZsYWdzKWFwcGxpY2F0aW9u
RmxhZ3M6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCiB7CiAgICAgdWludDMyX3Qg
ZmxhZ3MgPSAwOwpAQCAtMTA1OCw3ICsxMTAxLDggQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdn
aW5nRW50ZXJlZDooaWQgPAogICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6
W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsKICAgICBJbnRQ
b2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwg
W3NlbGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xp
ZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJh
Z2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dp
bmdJbmZvXSk7Ci0gICAgCisKKyAgICBfZGF0YS0+X3BhZ2UtPnJlc2V0RHJhZ09wZXJhdGlvbigp
OwogICAgIF9kYXRhLT5fcGFnZS0+cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250
cm9sbGVyQWN0aW9uRW50ZXJlZCwgJmRyYWdEYXRhLCBbW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bh
c3RlYm9hcmRdIG5hbWVdKTsKICAgICByZXR1cm4gTlNEcmFnT3BlcmF0aW9uQ29weTsKIH0KQEAg
LTE3OTksNCArMTg0MywxOCBAQCAtICh2b2lkKV9zZXRDdXN0b21SZXByZXNlbnRhdGlvblpvb21G
YWN0CiAgICAgX2RhdGEtPl9wZGZWaWV3Q29udHJvbGxlci0+c2V0Wm9vbUZhY3Rvcih6b29tRmFj
dG9yKTsKIH0KIAorLSAodm9pZClfc2V0RHJhZ0ltYWdlOihOU0ltYWdlICopaW1hZ2UgYXQ6KE5T
UG9pbnQpY2xpZW50UG9pbnQgbGlua0RyYWc6KEJPT0wpbGlua0RyYWcKK3sKKyAgICBpZiAoIWxp
bmtEcmFnICYmIF9kYXRhLT5fbW91c2VEb3duRXZlbnQgPT0gbmlsKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgW3N1cGVyIGRyYWdJbWFnZTppbWFnZQorICAgICAgICAgICAgICAgICAgYXQ6
Y2xpZW50UG9pbnQKKyAgICAgICAgICAgICAgb2Zmc2V0Ok5TWmVyb1NpemUKKyAgICAgICAgICAg
ICAgIGV2ZW50OihsaW5rRHJhZykgPyBbTlNBcHAgY3VycmVudEV2ZW50XSA6X2RhdGEtPl9tb3Vz
ZURvd25FdmVudAorICAgICAgICAgIHBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJk
V2l0aE5hbWU6TlNEcmFnUGJvYXJkXQorICAgICAgICAgICAgICBzb3VyY2U6c2VsZgorICAgICAg
ICAgICBzbGlkZUJhY2s6WUVTXTsKK30KKwogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiA3NjEyOCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDUgKzYyLDcgQEAgQGludGVyZmFjZSBXS1ZpZXcgKEludGVybmFs
KQogLSAodm9pZClfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21SZXByZXNlbnRhdGlvbjoo
Y29uc3QgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSYpZGF0YVJlZmVyZW5jZTsKIC0gKGRvdWJsZSlf
Y3VzdG9tUmVwcmVzZW50YXRpb25ab29tRmFjdG9yOwogLSAodm9pZClfc2V0Q3VzdG9tUmVwcmVz
ZW50YXRpb25ab29tRmFjdG9yOihkb3VibGUpem9vbUZhY3RvcjsKKy0gKHZvaWQpX3NldERyYWdJ
bWFnZTooTlNJbWFnZSAqKWltYWdlIGF0OihOU1BvaW50KWNsaWVudFBvaW50IGxpbmtEcmFnOihC
T09MKWxpbmtEcmFnOworLSAodm9pZClfZGlkRW5kRHJhZzooTlNQb2ludCljbGllbnRQb2ludDsK
IAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gNzYxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY2MSw2ICs2NjEs
OSBAQAogCQlDMEUzQUE3QzEyMDlFODNDMDBBNDlEMDEgLyogTW9kdWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMEUzQUE0NDEyMDlFMkJBMDBBNDlE
MDEgLyogTW9kdWxlLmggKi87IH07CiAJCUM1MTczODgxMTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFn
Q29udHJvbGxlckFjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzUxNzM4ODAxMkRGOEY0RjAwRUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9u
LmggKi87IH07CiAJCUM1MjM3RjYwMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRN
YWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTIz
N0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRpdG9yQ2xpZW50TWFjLm1tICovOyB9OworCQlD
NTc0QTM3NzEyRTYwOTlEMDAyREZFOTggLyogV2ViRHJhZ0NsaWVudE1hYy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM1NTRGRkEyMTJFNEU4RUEwMDJG
MjJDMCAvKiBXZWJEcmFnQ2xpZW50TWFjLm1tICovOyB9OworCQlDNTc0QTU4MTEyRTY2NjgxMDAy
REZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5
cGVzLmggKi87IH07CisJCUM1NzRBNTgyMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlw
ZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0
QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovOyB9OwogCQlEM0I5
NDg0NjExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQyMTFGRjRCNjUwMDAzMkIzOSAv
KiBXZWJQb3B1cE1lbnUuY3BwICovOyB9OwogCQlEM0I5NDg0NzExRkY0QjY1MDAwMzJCMzkgLyog
V2ViUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBEM0I5NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi87IH07CiAJ
CUQzQjk0ODQ4MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDQxMUZGNEI2
NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgKi87IH07CkBAIC0xNDIxLDYgKzE0
MjQsOSBAQAogCQlDMEUzQUE0ODEyMDlFNDUwMDBBNDlEMDEgLyogTW9kdWxlTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gTW9kdWxlTWFjLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDNTE3Mzg4MDEyREY4RjRGMDBFRTNGNDcgLyogRHJhZ0Nv
bnRyb2xsZXJBY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0Nv
bnRyb2xsZXJBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUyMzdGNUYx
MjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRvckNsaWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVkaXRvckNsaWVudE1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU1NEZGQTIxMkU0RThFQTAwMkYyMkMwIC8qIFdlYkRyYWdD
bGllbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJE
cmFnQ2xpZW50TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTc0QTU3RjEy
RTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0I5NDg0MjExRkY0QjY1MDAwMzJCMzkgLyog
V2ViUG9wdXBNZW51LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlBvcHVwTWVudS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQzMTFG
RjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViUG9wdXBNZW51Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQz
Qjk0ODQ0MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViU2VhcmNoUG9wdXBNZW51LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyNjcsNiArMjI3Myw3IEBACiAJCUJDMTExQURF
MTEyRjVCOUEwMDMzN0JBQiAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUM1NTRGRkEyMTJFNEU4RUEwMDJGMjJDMCAvKiBXZWJEcmFnQ2xpZW50
TWFjLm1tICovLAogCQkJCTUxMDIxRTlCMTJCMTY3ODgwMDVDMDMzQyAvKiBXZWJDb250ZXh0TWVu
dUNsaWVudE1hYy5tbSAqLywKIAkJCQlGNkEyNUZEODEyQURDNkJEMDBEQzQwQ0MgLyogV2ViRGF0
YWJhc2VNYW5hZ2VyTWFjLm1tICovLAogCQkJCUM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBX
ZWJFZGl0b3JDbGllbnRNYWMubW0gKi8sCkBAIC0yMzIyLDYgKzIzMjksOCBAQAogCQlCQzExMUI1
QTExMkY2MjgyMDAzMzdCQUIgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQlDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5
cGVzLmggKi8sCisJCQkJQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBl
cy5tbSAqLywKIAkJCQkxQTZGOUZCNjExRTE0MDg1MDBEQjEzNzEgLyogQ29tbWFuZExpbmVNYWMu
Y3BwICovLAogCQkJCUMwMkJGRjFEMTI1MTUwMkUwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50TWFjLm1tICovLAogCQkJCUJDRjUwNUU2MTI0MzA0N0IwMDU5NTVBRSAvKiBQbGF0Zm9y
bUNlcnRpZmljYXRlSW5mby5tbSAqLywKQEAgLTMwNTksNiArMzA2OCw3IEBACiAJCQkJMUE2NDI1
NjgxMkRFNDJFQzAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzUxNzM4ODExMkRGOEY0RjAwRUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUEyRTUxRDEyRTRDMDVFMDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuaCBp
biBIZWFkZXJzICovLAorCQkJCUM1NzRBNTgxMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJk
VHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzUyMCw2ICszNTMwLDggQEAKIAkJCQkxQTY0MjU2
OTEyREU0MkVDMDBDQUFFMkMgLyogQmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFBNjQyOTJEMTJERTVGOTgwMENBQUUyQyAvKiBCYWNraW5nU3RvcmVNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxQUEyRTUxRTEyRTRDMDVFMDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJQzU3NEEzNzcxMkU2MDk5RDAwMkRGRTk4IC8qIFdlYkRyYWdDbGll
bnRNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyog
UGFzdGVib2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5j
cHAJKHJldmlzaW9uIDc2MTI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBA
QCBEcmFnU291cmNlQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmRyYWdTb3VyCiAgICAgcmV0dXJuIERy
YWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKKyNpZiAhUExBVEZPUk0oTUFDKQogdm9pZCBXZWJEcmFn
Q2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IElu
dFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKQogewogfQpAQCAtNTksNiArNjAsNyBA
QCBEcmFnSW1hZ2VSZWYgV2ViRHJhZ0NsaWVudDo6Y3JlYXRlRHJhZ0ltCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZgogCiB2b2lkIFdlYkRyYWdDbGllbnQ6
OmRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCShyZXZp
c2lvbiA3NjEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw5IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFnSW1hZ2VSZWYgZHJhZ0lt
YWdlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdlYkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6OkZy
YW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdJ
bWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKFdlYkNvcmU6OktVUkwmLCBjb25zdCBTdHJp
bmcmIGxhYmVsLCBXZWJDb3JlOjpGcmFtZSopOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZp
cnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoTlNQYXN0ZWJvYXJkKiwgRE9NRWxl
bWVudCosIE5TVVJMKiwgTlNTdHJpbmcqLCBXZWJDb3JlOjpGcmFtZSopOworI2VuZGlmCiAgICAg
dmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCk7CiAKICAgICBXZWJQYWdlKiBt
X3BhZ2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21h
Yy9XZWJEcmFnQ2xpZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW0JKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFn
Q2xpZW50TWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5oIgorI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgi
CisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbXBvcnQgIldlYkRyYWdDbGll
bnQuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIKKyNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2Vz
LmgiCisjaW1wb3J0IDxXZWJDb3JlL0NhY2hlZEltYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RP
TVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRE9NRWxlbWVudEludGVybmFsLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTGVnYWN5V2ViQXJjaGl2ZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9SZW5kZXJJbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9TdHJpbmdUcnVuY2F0b3IuaD4K
KyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXROU1N0
cmluZ0V4dHJhcy5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYk5TVVJMRXh0cmFzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY29uc3QgZmxvYXQg
RHJhZ0xhYmVsQm9yZGVyWCA9IDQ7CisvL0tlZXAgYm9yZGVyX3kgaW4gc3luY2ggd2l0aCBEcmFn
Q29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJbnNldAorY29uc3QgZmxvYXQgRHJhZ0xhYmVsQm9y
ZGVyWSA9IDI7Citjb25zdCBmbG9hdCBEcmFnTGFiZWxSYWRpdXMgPSA1OworY29uc3QgZmxvYXQg
TGFiZWxCb3JkZXJZT2Zmc2V0ID0gMjsKKworY29uc3QgZmxvYXQgTWluRHJhZ0xhYmVsV2lkdGhC
ZWZvcmVDbGlwID0gMTIwOworY29uc3QgZmxvYXQgTWF4RHJhZ0xhYmVsV2lkdGggPSAzMjA7CisK
K2NvbnN0IGZsb2F0IERyYWdMaW5rTGFiZWxGb250c2l6ZSA9IDExOworY29uc3QgZmxvYXQgRHJh
Z0xpbmtVcmxGb250U2l6ZSA9IDEwOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3Rh
dGljIEZvbnQmIGZvbnRGcm9tTlNGb250KE5TRm9udCAqZm9udCkKK3sKKyAgICBzdGF0aWMgTlNG
b250ICpjdXJyZW50Rm9udDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnQsIGN1cnJlbnRS
ZW5kZXJlciwgKCkpOworICAgIAorICAgIGlmIChbZm9udCBpc0VxdWFsOmN1cnJlbnRGb250XSkK
KyAgICAgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJlcjsKKyAgICBpZiAoY3VycmVudEZvbnQpCisg
ICAgICAgIENGUmVsZWFzZShjdXJyZW50Rm9udCk7CisgICAgY3VycmVudEZvbnQgPSBmb250Owor
ICAgIENGUmV0YWluKGN1cnJlbnRGb250KTsKKyAgICBGb250UGxhdGZvcm1EYXRhIGYoZm9udCwg
W2ZvbnQgcG9pbnRTaXplXSk7CisgICAgY3VycmVudFJlbmRlcmVyID0gRm9udChmLCAhW1tOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dKTsKKyAgICBy
ZXR1cm4gY3VycmVudFJlbmRlcmVyOworfQorICAgIAordm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFy
dERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmIGF0LCBjb25zdCBJ
bnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJv
b2wgbGlua0RyYWcpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFT
U0VSVChjbGlwYm9hcmQpOworICAgIAorICAgIE5TSW1hZ2UgKmRyYWdOU0ltYWdlID0gZHJhZ0lt
YWdlLmdldCgpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdTaGFyZWFibGVJbWFn
ZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKEludFNpemUoW2RyYWdOU0ltYWdl
IHNpemVdKSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0g
ZHJhZ1NoYXJlYWJsZUltYWdlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIFtOU0dy
YXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CisgICAgTlNHcmFwaGljc0NvbnRleHQq
IGJpdG1hcENvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdy
YXBoaWNzUG9ydDpncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIGZsaXBwZWQ6WUVT
XTsKKyAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6IGJpdG1hcENvbnRl
eHRdOworICAgIAorICAgIFtkcmFnTlNJbWFnZSBkcmF3SW5SZWN0Ok5TTWFrZVJlY3QoMCwgMCwg
W2RyYWdOU0ltYWdlIHNpemVdLndpZHRoICwgW2RyYWdOU0ltYWdlIHNpemVdLmhlaWdodCkgZnJv
bVJlY3Q6TlNaZXJvUmVjdCBvcGVyYXRpb246TlNDb21wb3NpdGVTb3VyY2VPdmVyIGZyYWN0aW9u
OjFdOworICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CisgCisg
ICAgU2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOworICAgIGlmICghZHJhZ1NoYXJlYWJsZUlt
YWdlLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworICAgIEludFBvaW50
IGNsaWVudFBvaW50KGF0KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2V0RHJhZ0ltYWdlKGNsaWVudFBvaW50LCBJbnRTaXplKFtkcmFnTlNJbWFnZSBzaXplXSks
IGhhbmRsZSwgbGlua0RyYWcpKTsKK30KKworRHJhZ0ltYWdlUmVmIFdlYkRyYWdDbGllbnQ6OmNy
ZWF0ZURyYWdJbWFnZUZvckxpbmsoS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFt
ZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBO
U1N0cmluZyAqbGFiZWwgPSAwOworICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKQorICAgICAgICBs
YWJlbCA9IHRpdGxlOworICAgIE5TVVJMICpjb2NvYVVSTCA9IHVybDsKKyAgICBOU1N0cmluZyAq
dXJsU3RyaW5nID0gW2NvY29hVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOworICAgIAorICAg
IEJPT0wgZHJhd1VSTFN0cmluZyA9IFlFUzsKKyAgICBCT09MIGNsaXBVUkxTdHJpbmcgPSBOTzsK
KyAgICBCT09MIGNsaXBMYWJlbFN0cmluZyA9IE5POworICAgIAorICAgIGlmICghbGFiZWwpIHsK
KyAgICAgICAgZHJhd1VSTFN0cmluZyA9IE5POworICAgICAgICBsYWJlbCA9IHVybFN0cmluZzsK
KyAgICB9CisgICAgCisgICAgTlNGb250ICpsYWJlbEZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hh
cmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpEcmFn
TGlua0xhYmVsRm9udHNpemVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvSGF2ZVRyYWl0Ok5TQm9sZEZvbnRNYXNrXTsKKyAgICBO
U0ZvbnQgKnVybEZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6RHJhZ0xpbmtVcmxGb250
U2l6ZV07CisgICAgTlNTaXplIGxhYmVsU2l6ZTsKKyAgICBsYWJlbFNpemUud2lkdGggPSBbbGFi
ZWwgX3dlYl93aWR0aFdpdGhGb250OiBsYWJlbEZvbnRdOworICAgIGxhYmVsU2l6ZS5oZWlnaHQg
PSBbbGFiZWxGb250IGFzY2VuZGVyXSAtIFtsYWJlbEZvbnQgZGVzY2VuZGVyXTsKKyAgICBpZiAo
bGFiZWxTaXplLndpZHRoID4gTWF4RHJhZ0xhYmVsV2lkdGgpeworICAgICAgICBsYWJlbFNpemUu
d2lkdGggPSBNYXhEcmFnTGFiZWxXaWR0aDsKKyAgICAgICAgY2xpcExhYmVsU3RyaW5nID0gWUVT
OworICAgIH0KKyAgICAKKyAgICBOU1NpemUgaW1hZ2VTaXplOworICAgIGltYWdlU2l6ZS53aWR0
aCA9IGxhYmVsU2l6ZS53aWR0aCArIERyYWdMYWJlbEJvcmRlclggKiAyOworICAgIGltYWdlU2l6
ZS5oZWlnaHQgPSBsYWJlbFNpemUuaGVpZ2h0ICsgRHJhZ0xhYmVsQm9yZGVyWSAqIDI7CisgICAg
aWYgKGRyYXdVUkxTdHJpbmcpIHsKKyAgICAgICAgTlNTaXplIHVybFN0cmluZ1NpemU7CisgICAg
ICAgIHVybFN0cmluZ1NpemUud2lkdGggPSBbdXJsU3RyaW5nIF93ZWJfd2lkdGhXaXRoRm9udDog
dXJsRm9udF07CisgICAgICAgIHVybFN0cmluZ1NpemUuaGVpZ2h0ID0gW3VybEZvbnQgYXNjZW5k
ZXJdIC0gW3VybEZvbnQgZGVzY2VuZGVyXTsKKyAgICAgICAgaW1hZ2VTaXplLmhlaWdodCArPSB1
cmxTdHJpbmdTaXplLmhlaWdodDsKKyAgICAgICAgaWYgKHVybFN0cmluZ1NpemUud2lkdGggPiBN
YXhEcmFnTGFiZWxXaWR0aCkgeworICAgICAgICAgICAgaW1hZ2VTaXplLndpZHRoID0gbWF4KE1h
eERyYWdMYWJlbFdpZHRoICsgRHJhZ0xhYmVsQm9yZGVyWSAqIDIsIE1pbkRyYWdMYWJlbFdpZHRo
QmVmb3JlQ2xpcCk7CisgICAgICAgICAgICBjbGlwVVJMU3RyaW5nID0gWUVTOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGltYWdlU2l6ZS53aWR0aCA9IG1heChsYWJlbFNpemUud2lkdGgg
KyBEcmFnTGFiZWxCb3JkZXJYICogMiwgdXJsU3RyaW5nU2l6ZS53aWR0aCArIERyYWdMYWJlbEJv
cmRlclggKiAyKTsKKyAgICB9CisgICAgTlNJbWFnZSAqZHJhZ0ltYWdlID0gW1tbTlNJbWFnZSBh
bGxvY10gaW5pdFdpdGhTaXplOiBpbWFnZVNpemVdIGF1dG9yZWxlYXNlXTsKKyAgICBbZHJhZ0lt
YWdlIGxvY2tGb2N1c107CisgICAgCisgICAgW1tOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDog
MC43ZiBncmVlbjogMC43ZiBibHVlOiAwLjdmIGFscGhhOiAwLjhmXSBzZXRdOworICAgIAorICAg
IC8vIERyYWcgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMKKyAgICBOU0JlemllclBh
dGggKnBhdGggPSBbTlNCZXppZXJQYXRoIGJlemllclBhdGhdOworICAgIFtwYXRoIGFwcGVuZEJl
emllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtlUmVjdCgwLCAwLCBEcmFnTGFiZWxSYWRpdXMg
KiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdp
dGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAsIGltYWdlU2l6ZS5oZWlnaHQgLSBEcmFnTGFiZWxS
YWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyKV07Cisg
ICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdl
U2l6ZS53aWR0aCAtIERyYWdMYWJlbFJhZGl1cyAqIDIsIGltYWdlU2l6ZS5oZWlnaHQgLSBEcmFn
TGFiZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAy
KV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0
KGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJlbFJhZGl1cyAqIDIsIDAsIERyYWdMYWJlbFJhZGl1
cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKKyAgICAKKyAgICBbcGF0aCBhcHBlbmRCZXpp
ZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3QoRHJhZ0xhYmVsUmFkaXVzLCAwLCBpbWFnZVNpemUu
d2lkdGggLSBEcmFnTGFiZWxSYWRpdXMgKiAyLCBpbWFnZVNpemUuaGVpZ2h0KV07CisgICAgW3Bh
dGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KDAsIERyYWdMYWJlbFJhZGl1
cywgRHJhZ0xhYmVsUmFkaXVzICsgMTAsIGltYWdlU2l6ZS5oZWlnaHQgLSAyICogRHJhZ0xhYmVs
UmFkaXVzKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0
KGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJlbFJhZGl1cyAtIDIwLCBEcmFnTGFiZWxSYWRpdXMs
IERyYWdMYWJlbFJhZGl1cyArIDIwLCBpbWFnZVNpemUuaGVpZ2h0IC0gMiAqIERyYWdMYWJlbFJh
ZGl1cyldOworICAgIFtwYXRoIGZpbGxdOworICAgIAorICAgIE5TQ29sb3IgKnRvcENvbG9yID0g
W05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6MC4wZiBhbHBoYTowLjc1Zl07CisgICAgTlND
b2xvciAqYm90dG9tQ29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZToxLjBmIGFs
cGhhOjAuNWZdOworICAgIGlmIChkcmF3VVJMU3RyaW5nKSB7CisgICAgICAgIGlmIChjbGlwVVJM
U3RyaW5nKQorICAgICAgICAgICAgLy91cmxTdHJpbmcgPSBbV2ViU3RyaW5nVHJ1bmNhdG9yIGNl
bnRlclRydW5jYXRlU3RyaW5nOiB1cmxTdHJpbmcgdG9XaWR0aDppbWFnZVNpemUud2lkdGggLSAo
RHJhZ0xhYmVsQm9yZGVyWCAqIDIpIHdpdGhGb250OnVybEZvbnRdOworICAgICAgICAgICAgdXJs
U3RyaW5nID0gU3RyaW5nVHJ1bmNhdG9yOjpjZW50ZXJUcnVuY2F0ZSh1cmxTdHJpbmcsIGltYWdl
U2l6ZS53aWR0aCAtIChEcmFnTGFiZWxCb3JkZXJYICogMiksIGZvbnRGcm9tTlNGb250KHVybEZv
bnQpKTsgICAgICAgCisgICAgICAgIFt1cmxTdHJpbmcgX3dlYl9kcmF3RG91YmxlZEF0UG9pbnQ6
TlNNYWtlUG9pbnQoRHJhZ0xhYmVsQm9yZGVyWCwgRHJhZ0xhYmVsQm9yZGVyWSAtIFt1cmxGb250
IGRlc2NlbmRlcl0pIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aFRvcENvbG9y
OnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRvbUNvbG9yIGZvbnQ6dXJsRm9udF07CisgICAgfQor
ICAgIAorICAgIGlmIChjbGlwTGFiZWxTdHJpbmcpCisgICAgICAgIC8vbGFiZWwgPSBbV2ViU3Ry
aW5nVHJ1bmNhdG9yIHJpZ2h0VHJ1bmNhdGVTdHJpbmc6IGxhYmVsIHRvV2lkdGg6aW1hZ2VTaXpl
LndpZHRoIC0gKERyYWdMYWJlbEJvcmRlclggKiAyKSB3aXRoRm9udDpsYWJlbEZvbnRdOworICAg
ICAgICBsYWJlbCA9IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShsYWJlbCwgaW1hZ2VT
aXplLndpZHRoIC0gKERyYWdMYWJlbEJvcmRlclggKiAyKSwgZm9udEZyb21OU0ZvbnQobGFiZWxG
b250KSk7CisgICAgW2xhYmVsIF93ZWJfZHJhd0RvdWJsZWRBdFBvaW50Ok5TTWFrZVBvaW50IChE
cmFnTGFiZWxCb3JkZXJYLCBpbWFnZVNpemUuaGVpZ2h0IC0gTGFiZWxCb3JkZXJZT2Zmc2V0IC0g
W2xhYmVsRm9udCBwb2ludFNpemVdKQorICAgICAgICAgICAgICAgICAgICAgIHdpdGhUb3BDb2xv
cjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0b21Db2xvciBmb250OmxhYmVsRm9udF07CisgICAg
CisgICAgW2RyYWdJbWFnZSB1bmxvY2tGb2N1c107CisgICAgCisgICAgcmV0dXJuIGRyYWdJbWFn
ZTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVVUkwoTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBO
U1VSTCogVVJMLCBOU1N0cmluZyogdGl0bGUsIE5TQXJyYXkqIHR5cGVzKQoreworICAgIEFTU0VS
VChVUkwpOworICAgIAorICAgIGlmICghW3RpdGxlIGxlbmd0aF0pIHsKKyAgICAgICAgdGl0bGUg
PSBbW1VSTCBwYXRoXSBsYXN0UGF0aENvbXBvbmVudF07CisgICAgICAgIGlmICghW3RpdGxlIGxl
bmd0aF0pCisgICAgICAgICAgICB0aXRsZSA9IFtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107
CisgICAgfQorICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNVUkxQYm9hcmRU
eXBlXSkKKyAgICAgICAgW1VSTCB3cml0ZVRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICBp
ZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlVSTFBib2FyZFR5cGVdKQorICAgICAgICBbcGFz
dGVib2FyZCBzZXRTdHJpbmc6W1VSTCBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXSBmb3JUeXBl
OldlYlVSTFBib2FyZFR5cGVdOworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViVVJM
TmFtZVBib2FyZFR5cGVdKQorICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6dGl0bGUgZm9y
VHlwZTpXZWJVUkxOYW1lUGJvYXJkVHlwZV07CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVj
dDpOU1N0cmluZ1Bib2FyZFR5cGVdKQorICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W1VS
TCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXSBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV07Cisg
ICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVd
KSB7CisgICAgICAgIE5TQXJyYXkqIFVSTHMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6VVJM
XTsKKyAgICAgICAgdW5zaWduZWQgY291bnQgPSBbVVJMcyBjb3VudF07CisgICAgICAgIAorICAg
ICAgICBpZiAoIWNvdW50IHx8IFtwYXN0ZWJvYXJkIGF2YWlsYWJsZVR5cGVGcm9tQXJyYXk6W05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0OldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZV1dID09IG5p
bCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBOU0FycmF5KiB0aXRsZXMgPSBbTlNB
cnJheSBhcnJheVdpdGhPYmplY3Q6dGl0bGVdOworICAgICAgICAKKyAgICAgICAgaWYgKGNvdW50
ICE9IFt0aXRsZXMgY291bnRdKQorICAgICAgICAgICAgdGl0bGVzID0gbmlsOworICAgICAgICAK
KyAgICAgICAgTlNNdXRhYmxlQXJyYXkqIFVSTFN0cmluZ3MgPSBbTlNNdXRhYmxlQXJyYXkgYXJy
YXlXaXRoQ2FwYWNpdHk6Y291bnRdOworICAgICAgICBOU011dGFibGVBcnJheSogdGl0bGVzT3JF
bXB0eVN0cmluZ3MgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y291bnRdOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkg
eworICAgICAgICAgICAgW1VSTFN0cmluZ3MgYWRkT2JqZWN0OltbVVJMcyBvYmplY3RBdEluZGV4
OmluZGV4XSBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXV07CisgICAgICAgICAgICBbdGl0bGVz
T3JFbXB0eVN0cmluZ3MgYWRkT2JqZWN0Oih0aXRsZXMgPT0gbmlsKSA/IEAiIiA6IFtbdGl0bGVz
IG9iamVjdEF0SW5kZXg6aW5kZXhdIF93ZWJraXRfc3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2Vd
XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlM
aXN0OltOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6VVJMU3RyaW5ncywgdGl0bGVzT3JFbXB0eVN0
cmluZ3MsIG5pbF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOldlYlVSTHNX
aXRoVGl0bGVzUGJvYXJkVHlwZV07CisgICAgfQorfQorICAgIAorc3RhdGljIHZvaWQgd3JpdGVJ
bWFnZShOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE5TSW1hZ2UgKmltYWdlLCBET01FbGVtZW50
KiBlbGVtZW50LCBOU1VSTCogVVJMLCBOU1N0cmluZyogdGl0bGUsIExlZ2FjeVdlYkFyY2hpdmUq
IGFyY2hpdmUsIE5TQXJyYXkqIHR5cGVzKQoreworICAgIEFTU0VSVChpbWFnZSB8fCBlbGVtZW50
KTsKKyAgICBBU1NFUlQoVVJMKTsKKyAgICAKKyAgICB3cml0ZVVSTChwYXN0ZWJvYXJkLCBVUkws
IHRpdGxlLCB0eXBlcyk7CisgICAgCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1RJ
RkZQYm9hcmRUeXBlXSkgeworICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFkZCBoYW5kbGlu
ZyBvZiBwcm9taXNlZCB0eXBlcy4KKyAgICAgICAgaWYgKGltYWdlKQorICAgICAgICAgICAgW3Bh
c3RlYm9hcmQgc2V0RGF0YTpbaW1hZ2UgVElGRlJlcHJlc2VudGF0aW9uXSBmb3JUeXBlOk5TVElG
RlBib2FyZFR5cGVdOworICAgICAgICBlbHNlIGlmIChlbGVtZW50KQorICAgICAgICAgICAgW3Bh
c3RlYm9hcmQgc2V0RGF0YTpbZWxlbWVudCBfaW1hZ2VUSUZGUmVwcmVzZW50YXRpb25dIGZvclR5
cGU6TlNUSUZGUGJvYXJkVHlwZV07CisgICAgfQorICAgIAorICAgIGlmIChhcmNoaXZlICYmIFt0
eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pCisgICAgICAgIFtwYXN0
ZWJvYXJkIHNldERhdGE6W1soTlNEYXRhICopYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9u
KCkuZ2V0KCkgcmV0YWluXSBhdXRvcmVsZWFzZV0gZm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlw
ZV07Cit9CisgICAgCit2b2lkIFdlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFn
ZShOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIERPTUVsZW1lbnQqIGVsZW1lbnQsIE5TVVJMKiBV
UkwsIE5TU3RyaW5nKiB0aXRsZSwgV2ViQ29yZTo6RnJhbWUqKQoreworICAgIEFTU0VSVChlbGVt
ZW50KTsKKyAgICBBU1NFUlQocGFzdGVib2FyZCAmJiBwYXN0ZWJvYXJkID09IFtOU1Bhc3RlYm9h
cmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRHJhZ1Bib2FyZF0pOworICAgIAorICAgIE5TU3RyaW5n
ICpleHRlbnNpb24gPSBAIiI7CisgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjb3Jl
KGVsZW1lbnQpLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChyZW5kZXJlci0+aXNJbWFnZSgp
KSB7CisgICAgICAgICAgICBpZiAoQ2FjaGVkSW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShy
ZW5kZXJlciktPmNhY2hlZEltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICBleHRlbnNpb24gPSBp
bWFnZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24oKTsKKyAgICAgICAgICAgICAgICBpZiAo
IVtleHRlbnNpb24gbGVuZ3RoXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNo
aXZlPiBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKGNvcmUoZWxlbWVudCkpOwor
ICAgIE5TTXV0YWJsZUFycmF5ICp0eXBlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoT2JqZWN0czpOU0ZpbGVzUHJvbWlzZVBib2FyZFR5cGUsIG5pbF07CisgICAgW3R5cGVzIGFk
ZE9iamVjdHNGcm9tQXJyYXk6KGFyY2hpdmUpID8gUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXNX
aXRoQXJjaGl2ZSgpIDogUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXMoKV07CisgICAgW3Bhc3Rl
Ym9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOm5pbF07ICAgIAorICAgIHdyaXRlSW1hZ2Uo
cGFzdGVib2FyZCwgbmlsLCBlbGVtZW50LCBVUkwsIHRpdGxlLCBhcmNoaXZlLmdldCgpLCB0eXBl
cyk7CisgICAgW3R5cGVzIHJlbGVhc2VdOworICAgIAorICAgIE5TQXJyYXkgKmV4dGVuc2lvbnMg
PSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpleHRlbnNpb24sIG5pbF07CisgICAg
W3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0OmV4dGVuc2lvbnMgZm9yVHlwZTpOU0ZpbGVzUHJv
bWlzZVBib2FyZFR5cGVdOworICAgIFtleHRlbnNpb25zIHJlbGVhc2VdOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDc2MTI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA3LDYgKzEzMDcs
MjEgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3RpbwogICAgIH0KIH0K
IAordm9pZCBXZWJQYWdlOjpkcmFnRW5kZWQoV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRp
b24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24p
Cit7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRDbGllbnRQb3NpdGlvbihjbGllbnRQb3NpdGlvbi54
KCkgKyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdPZmZzZXQoKS54KCksIGNsaWVudFBv
c2l0aW9uLnkoKSArIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ09mZnNldCgpLnkoKSk7
CisgICAgSW50UG9pbnQgYWRqdXN0ZWRHbG9iYWxQb3NpdGlvbihnbG9iYWxQb3NpdGlvbi54KCkg
KyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdPZmZzZXQoKS54KCksIGdsb2JhbFBvc2l0
aW9uLnkoKSArIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ09mZnNldCgpLnkoKSk7Cisg
ICAgCisgICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW5kZWQoKTsKKyAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCk7CisgICAgaWYgKCF2aWV3
KQorICAgICAgICByZXR1cm47CisgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBmYWtlIG1vZGlmaWVy
IGtleXMgaGVyZSwgYnV0IHRoZXkgc2hvdWxkIGJlIHJlYWwgb25lcyBpbnN0ZWFkLgorICAgIFBs
YXRmb3JtTW91c2VFdmVudCBldmVudChhZGp1c3RlZENsaWVudFBvc2l0aW9uLCBhZGp1c3RlZEds
b2JhbFBvc2l0aW9uLCBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50TW92ZWQsIDAsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBjdXJyZW50VGltZSgpKTsKKyAgICBtX3BhZ2UtPm1haW5GcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+ZHJhZ1NvdXJjZUVuZGVkQXQoZXZlbnQsIChEcmFnT3BlcmF0aW9u
KW9wZXJhdGlvbik7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRFbmREcmFn
KGFkanVzdGVkQ2xpZW50UG9zaXRpb24pKTsKK30KKwogV2ViRWRpdENvbW1hbmQqIFdlYlBhZ2U6
OndlYkVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCkKIHsKICAgICByZXR1cm4gbV9lZGl0
Q29tbWFuZE1hcC5nZXQoY29tbWFuZElEKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gNzYxMjgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDAsNiArMzAwLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFRl
eHQoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHBlcmZvcm1EcmFn
Q29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVu
dFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJh
Z2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBjb25zdCBXVEY6OlN0cmluZyYgZHJhZ1N0b3JhZ2VO
YW1lLCB1aW50MzJfdCBmbGFncyk7CisgICAgdm9pZCBkcmFnRW5kZWQoV2ViQ29yZTo6SW50UG9p
bnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50
NjRfdCBvcGVyYXRpb24pOwogCiAgICAgdm9pZCBiZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFByaW50SW5mbyYpOwogICAgIHZvaWQgZW5kUHJpbnRpbmcoKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluCShyZXZpc2lvbiA3NjEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw3IEBA
IG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogCiAgICAgIyBEcmFnIGFuZCBkcm9wLgogICAgIFBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50
IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0
X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6OlN0cmluZyBkcmFnU3RvcmFnZU5h
bWUsIHVpbnQzMl90IGZsYWdzKQorICAgIERyYWdFbmRlZChXZWJDb3JlOjpJbnRQb2ludCBjbGll
bnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9w
ZXJhdGlvbikKIAogICAgICMgUG9wdXAgbWVudS4KICAgICBEaWRDaGFuZ2VTZWxlY3RlZEluZGV4
Rm9yQWN0aXZlUG9wdXBNZW51KGludDMyX3QgbmV3SW5kZXgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79454</attachid>
            <date>2011-01-19 11:18:55 -0800</date>
            <delta_ts>2011-01-19 16:30:26 -0800</delta_ts>
            <desc>Patch9</desc>
            <filename>dragsource.txt</filename>
            <type>text/plain</type>
            <size>45729</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTQxKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDEtMTggIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBhZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJv
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgIAorICAgICAgICBUaGlz
IHBhdGNoIGNvbnRhaW5zIHRoZSByZW1haW5pbmcgd29yayB0byBzdXBwb3J0IGRyYWcgYW5kIGRy
b3Agb24gTWFjLgorICAgICAgICBJJ3ZlIGFkZGVkIGEgUGFzdGVib2FyZFR5cGVzIGNsYXNzIHRv
IGVuY2Fwc3VsYXRlIGFsbCB0aGUgcGFzdGVib2FyZCBmb3JtYXRzCisgICAgICAgIHN1cHBvcnRl
ZCBmb3IgZHJhZyBhbmQgZHJvcC4KKyAgICAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB3ZSBk
b24ndCBzdXBwb3J0IHRoZSBwcm9taXNlZCB0eXBlcywgc2luY2UgSSBjb3VsZCBub3QKKyAgICAg
ICAgZmluZCBhbiBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMgYWNyb3NzIHByb2Nlc3Nlcy4KKyAg
ICAgICAgVGhlIGJ1bGsgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIGluIGNyZWF0aW5nIGEgc2hhcmVh
YmxlIGJpdG1hcCBmb3IgdGhlIGRyYWcgaW1hZ2UsCisgICAgICAgIHBhc3MgaXRzIGhhbmRsZSB0
byB0aGUgVUkgcHJvY2VzcyBhbmQgY3JlYXRlIGEgbmV3IE5TSW1hZ2UgZnJvbSBpdCB0byBiZSBn
aXZlbiB0bworICAgICAgICBBcHBLaXQgZm9yIGRyYWdnaW5nLgorICAgICAgICBJJ3ZlIGFkZGVk
IHRoZSBtaXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2RzIGluIHRoZSBkcmFnIGNs
aWVudCB0byBob29rCisgICAgICAgIHVwIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGRhdGEgaW4gdGhl
IHBhc3RlYm9hcmQuCisgICAgICAgIAorICAgICAgICAqIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5
cGVzLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JFZGl0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JVUkwpOgorICAgICAgICAoV2ViS2l0
OjpQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OlBhc3RlYm9h
cmRUeXBlczo6Zm9ySW1hZ2VzV2l0aEFyY2hpdmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXREcmFnSW1h
Z2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZEVuZERyYWcp
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAg
ICgtW1dLVmlldyBfcmVnaXN0ZXJEcmFnZ2VkVHlwZXNdKTogUmVmYWN0b3JlZCB0byB1c2UgdGhl
IG5ldyBQYXN0ZWJvYXJkVHlwZXMgY2xhc3MuCisgICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZy
YW1lOmNvbnRleHRSZWY6cGFnZUdyb3VwUmVmOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX3NldE1v
dXNlRG93bkV2ZW50Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX21vdXNlSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IG1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tWaWV3IG1vdXNlVXA6
XSk6CisgICAgICAgICgtW1dLVmlldyBtb3VzZURyYWdnZWQ6XSk6CisgICAgICAgICgtW1dLVmll
dyBfZGlkRW5kRHJhZzpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnZWRJbWFnZTplbmRlZEF0
Om9wZXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRW50ZXJlZDpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IF9zZXREcmFnSW1hZ2U6YXQ6bGlua0RyYWc6XSk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
UGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldERyYWdJbWFnZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6ZHJhZ0VuZGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpkaWRFbmREcmFnKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBX
ZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6Zm9udEZyb21OU0ZvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpzdGFy
dERyYWcpOiBBZGRlZCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0Ns
aWVudDo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6IERpdHRvLgorICAgICAgICAoV2ViS2l0Ojp3
cml0ZVVSTCk6IFV0aWxpdHkgZnVuY3Rpb24uCisgICAgICAgIChXZWJLaXQ6OndyaXRlSW1hZ2Up
OiBVdGlsaXR5IGZ1bmN0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpkZWNs
YXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRyYWdFbmRlZCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKwogMjAxMS0wMS0xOSAgQW5kZXJzIENh
cmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEFkbGVyLgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBl
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJk
VHlwZXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUGFzdGVib2FyZFR5cGVzX2gKKyNkZWZpbmUgUGFzdGVib2FyZFR5cGVzX2gKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2V4dGVybiBOU1N0cmluZyAqIGNvbnN0IFdlYkFyY2hpdmVQYm9hcmRU
eXBlOworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBl
OworZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV2ViVVJMUGJvYXJkVHlwZTsKK2V4dGVybiBOU1N0
cmluZyAqIGNvbnN0IFdlYlVSTE5hbWVQYm9hcmRUeXBlOworICAgIAorY2xhc3MgUGFzdGVib2Fy
ZFR5cGVzIHsKK3B1YmxpYzoKKyAgICAKKyAgICBzdGF0aWMgTlNBcnJheSogZm9yRWRpdGluZygp
OworICAgIHN0YXRpYyBOU0FycmF5KiBmb3JVUkwoKTsKKyAgICBzdGF0aWMgTlNBcnJheSogZm9y
SW1hZ2VzKCk7CisgICAgc3RhdGljIE5TQXJyYXkqIGZvckltYWdlc1dpdGhBcmNoaXZlKCk7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBhc3RlYm9hcmRUeXBlc19o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5tbQko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVz
Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
UGFzdGVib2FyZFR5cGVzLmgiCisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitOU1N0cmluZyAqIGNvbnN0IFdlYkFyY2hpdmVQYm9hcmRUeXBlID0gQCJB
cHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOworTlNTdHJpbmcgKiBjb25zdCBXZWJV
UkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUgPSBAIldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSI7
CitOU1N0cmluZyAqIGNvbnN0IFdlYlVSTFBib2FyZFR5cGUgPSBAInB1YmxpYy51cmwiOworTlNT
dHJpbmcgKiBjb25zdCBXZWJVUkxOYW1lUGJvYXJkVHlwZSA9IEAicHVibGljLnVybC1uYW1lIjsK
KworTlNBcnJheSogUGFzdGVib2FyZFR5cGVzOjpmb3JFZGl0aW5nKCkKK3sKKyAgICBzdGF0aWMg
UmV0YWluUHRyPE5TQXJyYXk+IHR5cGVzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpXZWJB
cmNoaXZlUGJvYXJkVHlwZSwgTlNIVE1MUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9hcmRUeXBl
LCBOU1RJRkZQYm9hcmRUeXBlLCBOU1BERlBib2FyZFR5cGUsCisjaWYgZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICBOU1BJ
Q1RQYm9hcmRUeXBlLAorI2VuZGlmCisgICAgICAgIE5TVVJMUGJvYXJkVHlwZSwgTlNSVEZEUGJv
YXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TQ29sb3JQYm9h
cmRUeXBlLCBrVVRUeXBlUE5HLCBuaWxdOworICAgIHJldHVybiB0eXBlcy5nZXQoKTsKK30KKwor
TlNBcnJheSogUGFzdGVib2FyZFR5cGVzOjpmb3JVUkwoKQoreworICAgIHN0YXRpYyBSZXRhaW5Q
dHI8TlNBcnJheT4gdHlwZXMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYlVSTHNXaXRo
VGl0bGVzUGJvYXJkVHlwZSwgTlNVUkxQYm9hcmRUeXBlLCBXZWJVUkxQYm9hcmRUeXBlLCAgV2Vi
VVJMTmFtZVBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9hcmRU
eXBlLCBuaWxdOworICAgIHJldHVybiB0eXBlcy5nZXQoKTsKK30KKworTlNBcnJheSogUGFzdGVi
b2FyZFR5cGVzOjpmb3JJbWFnZXMoKQoreworICAgIHN0YXRpYyBSZXRhaW5QdHI8TlNBcnJheT4g
dHlwZXMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOk5TVElGRlBib2FyZFR5cGUsIFdlYlVS
THNXaXRoVGl0bGVzUGJvYXJkVHlwZSwgTlNVUkxQYm9hcmRUeXBlLCBXZWJVUkxQYm9hcmRUeXBl
LCBXZWJVUkxOYW1lUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBuaWxdOworICAgIHJl
dHVybiB0eXBlcy5nZXQoKTsKK30KKworTlNBcnJheSogUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFn
ZXNXaXRoQXJjaGl2ZSgpCit7CisgICAgc3RhdGljIFJldGFpblB0cjxOU0FycmF5PiB0eXBlcyA9
IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6TlNUSUZGUGJvYXJkVHlwZSwgV2ViVVJMc1dpdGhU
aXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2FyZFR5cGUsIFdlYlVSTFBib2FyZFR5cGUsIFdlYlVS
TE5hbWVQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TUlRGRFBib2FyZFR5cGUsIFdl
YkFyY2hpdmVQYm9hcmRUeXBlLCBuaWxdOworICAgIHJldHVybiB0eXBlcy5nZXQoKTsKK30KKyAg
ICAKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFn
ZUNsaWVudC5oCShyZXZpc2lvbiA3NjE0MSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUGFn
ZUNsaWVudF9oCiAjZGVmaW5lIFBhZ2VDbGllbnRfaAogCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0
bWFwLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51
UHJveHkuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtOTksNiArMTAwLDggQEAgcHVi
bGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzaWJpbGl0eUNo
aWxkVG9rZW5SZWNlaXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVmZXJlbmNlJikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBpbnRlcmNlcHRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50JiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCB1aW50MzJfdCwgdWludDMy
X3QsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBXVEY6OlBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiwgYm9vbCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRFbmREcmFnKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JikgPSAwOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBjb21w
b3NpdGlvblNlbGVjdGlvbkNoYW5nZWQoYm9vbCkgPSAwOwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDc2MTQxKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxNiw2
ICs2MTYsMjkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFBlcmZvcm1EcmFnQ29udHJvbAogICAg
IG1fY3VycmVudERyYWdPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihyZXN1
bHRPcGVyYXRpb24pOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBXZWJQYWdlUHJveHk6
OnNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNv
bnN0IEludFNpemUmIGltYWdlU2l6ZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGRyYWdJ
bWFnZUhhbmRsZSwgYm9vbCBpc0xpbmtEcmFnKQoreworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGRyYWdJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGltYWdlU2l6ZSwgZHJhZ0lt
YWdlSGFuZGxlKTsKKyAgICBpZiAoIWRyYWdJbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIG1fcGFnZUNsaWVudC0+c2V0RHJhZ0ltYWdlKGNsaWVudFBvc2l0aW9uLCBpbWFnZVNpemUs
IGRyYWdJbWFnZSwgaXNMaW5rRHJhZyk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRFbmRE
cmFnKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhZGp1c3RlZENsaWVudFBvc2l0aW9uKQorewor
ICAgIG1fcGFnZUNsaWVudC0+ZGlkRW5kRHJhZyhhZGp1c3RlZENsaWVudFBvc2l0aW9uKTsKK30K
KyNlbmRpZgorCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ0VuZGVkKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBv
c2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYWdF
bmRlZChjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIG9wZXJhdGlvbiksIG1fcGFnZUlE
KTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91
c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA3NjE0MSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjgwLDcg
KzI4MCwxMSBAQCBwdWJsaWM6CiAgICAgLy8gRHJhZyBhbmQgZHJvcCBzdXBwb3J0LgogICAgIHZv
aWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uLCBXZWJD
b3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZGlkUGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IHJlc3VsdE9wZXJhdGlvbik7Ci0KKyAgICB2b2lkIGRy
YWdFbmRlZChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3Qgb3BlcmF0aW9uKTsKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBkcmFnSW1hZ2VIYW5kbGUsIGJvb2wgaXNMaW5r
RHJhZyk7CisgICAgdm9pZCBkaWRFbmREcmFnKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBhZGp1
c3RlZENsaWVudFBvc2l0aW9uKTsKKyNlbmRpZgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
Q29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKik7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwg
Q29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzYxNDEpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODksNCArMTg5LDggQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsK
ICAgICAKICAgICAjIERyYWcgYW5kIGRyb3AuCiAgICAgRGlkUGVyZm9ybURyYWdDb250cm9sbGVy
QWN0aW9uKHVpbnQ2NF90IHJlc3VsdE9wZXJhdGlvbikKKyNpZiBQTEFURk9STShNQUMpCisgICAg
U2V0RHJhZ0ltYWdlKFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJ
bnRTaXplIGltYWdlU2l6ZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBkcmFnSW1hZ2VI
YW5kbGUsIGJvb2wgbGlua0RyYWcpCisgICAgRGlkRW5kRHJhZyhXZWJDb3JlOjpJbnRQb2ludCBh
ZGp1c3RlZENsaWVudFBvc2l0aW9uKQorI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDc2MTQx
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFu
ZFN0YXRlKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQgc3Rh
dGUpOwogICAgIHZpcnR1YWwgdm9pZCBpbnRlcmNlcHRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNv
bW1hbmROYW1lLCB1aW50MzJfdCBzZWxlY3Rpb25TdGFydCwgdWludDMyX3Qgc2VsZWN0aW9uRW5k
LCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRlcmxpbmVzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGll
bnRQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW1hZ2VTaXplLCBXVEY6OlBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wgaXNMaW5rRHJhZyk7CisgICAg
dmlydHVhbCB2b2lkIGRpZEVuZERyYWcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGFkanVzdGVk
Q2xpZW50UG9zaXRpb24pOwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVy
dFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwubW0JKHJldmlzaW9uIDc2MTQxKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb3VuZGF0aW9uRXh0cmFzLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2
ZW50Lmg+CiAjaW1wb3J0IDx3dGYvUGFzc093blB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0
cmluZy5oPgpAQCAtMjc4LDYgKzI3OSwxOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjppbnRlcmNl
cHRLZXlFdmVudChjCiAgICAgW21fd2tWaWV3IF9nZXRUZXh0SW5wdXRTdGF0ZTpzZWxlY3Rpb25T
dGFydCBzZWxlY3Rpb25FbmQ6c2VsZWN0aW9uRW5kIHVuZGVybGluZXM6dW5kZXJsaW5lc107CiB9
CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldERyYWdJbWFnZShjb25zdCBJbnRQb2ludCYgY2xp
ZW50UG9zaXRpb24sIGNvbnN0IEludFNpemUmIGltYWdlU2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGRyYWdJbWFnZSwgYm9vbCBpc0xpbmtEcmFnKQoreworICAgIE5TSW1hZ2UqIGRy
YWdOU0ltYWdlID0gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOkNHQml0bWFwQ29u
dGV4dENyZWF0ZUltYWdlKGRyYWdJbWFnZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpKSBzaXplOmltYWdlU2l6ZV0gYXV0b3JlbGVhc2VdOworICAgIFtkcmFnTlNJ
bWFnZSBzZXRGbGlwcGVkOllFU107CisgICAgW21fd2tWaWV3IF9zZXREcmFnSW1hZ2U6ZHJhZ05T
SW1hZ2UgYXQ6Y2xpZW50UG9zaXRpb24gbGlua0RyYWc6aXNMaW5rRHJhZ107Cit9CisgICAgCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRFbmREcmFnKGNvbnN0IEludFBvaW50JiBhZGp1c3RlZENs
aWVudFBvc2l0aW9uKQoreworICAgIFttX3drVmlldyBfZGlkRW5kRHJhZzphZGp1c3RlZENsaWVu
dFBvc2l0aW9uXTsKK30KKwogRmxvYXRSZWN0IFBhZ2VDbGllbnRJbXBsOjpjb252ZXJ0VG9EZXZp
Y2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIFttX3drVmlldyBf
Y29udmVydFRvRGV2aWNlU3BhY2U6cmVjdF07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiA3NjE0MSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
NyBAQAogI2ltcG9ydCAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2ltcG9ydCAiUERGVmll
d0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsLmgiCisjaW1wb3J0ICJQYXN0
ZWJvYXJkVHlwZXMuaCIKICNpbXBvcnQgIlByaW50SW5mby5oIgogI2ltcG9ydCAiUnVuTG9vcC5o
IgogI2ltcG9ydCAiVGV4dENoZWNrZXIuaCIKQEAgLTEzNSw2ICsxMzYsOSBAQCBAaW50ZXJmYWNl
IFdLVmlld0RhdGEgOiBOU09iamVjdCB7CiAKICAgICBib29sIF9pbkJlY29tZUZpcnN0UmVzcG9u
ZGVyOwogICAgIGJvb2wgX2luUmVzaWduRmlyc3RSZXNwb25kZXI7CisgICAgTlNFdmVudCAqX21v
dXNlRG93bkV2ZW50OworICAgIEJPT0wgX2lnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzOworICAg
IEJPT0wgX2RyYWdIYXNTdGFydGVkOwogfQogQGVuZAogCkBAIC0xOTUsMjEgKzE5OSwxMCBAQCAt
IChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUgY29udGV4CiAgICAgcmV0dXJuIFtzZWxm
IGluaXRXaXRoRnJhbWU6ZnJhbWUgY29udGV4dFJlZjpjb250ZXh0UmVmIHBhZ2VHcm91cFJlZjpu
aWxdOwogfQogCi1zdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJBcmNoaXZlUGJvYXJkVHlwZSA9
IEAiQXBwbGUgV2ViIEFyY2hpdmUgcGFzdGVib2FyZCB0eXBlIjsKLXN0YXRpYyBOU1N0cmluZyAq
IGNvbnN0IFdlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSA9IEAiV2ViVVJMc1dpdGhUaXRsZXNQ
Ym9hcmRUeXBlIjsKLXN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYlVSTFBib2FyZFR5cGUgPSBA
InB1YmxpYy51cmwiOwotc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViVVJMTmFtZVBib2FyZFR5
cGUgPSBAInB1YmxpYy51cmwtbmFtZSI7Ci0KIC0gKHZvaWQpX3JlZ2lzdGVyRHJhZ2dlZFR5cGVz
CiB7Ci0gICAgTlNBcnJheSAqZWRpdGFibGVUeXBlcyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVj
dHM6V2ViQXJjaGl2ZVBib2FyZFR5cGUsIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJv
YXJkVHlwZSwgTlNUSUZGUGJvYXJkVHlwZSwgTlNQREZQYm9hcmRUeXBlLAotI2lmIGRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAg
ICAgTlNQSUNUUGJvYXJkVHlwZSwKLSNlbmRpZgotICAgICAgICBOU1VSTFBib2FyZFR5cGUsIE5T
UlRGRFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBOU0Nv
bG9yUGJvYXJkVHlwZSwga1VUVHlwZVBORywgbmlsXTsKLSAgICBOU0FycmF5ICpVUkxUeXBlcyA9
IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6V2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBO
U1VSTFBib2FyZFR5cGUsIFdlYlVSTFBib2FyZFR5cGUsICBXZWJVUkxOYW1lUGJvYXJkVHlwZSwg
TlNTdHJpbmdQYm9hcmRUeXBlLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIG5pbF07Ci0gICAgTlNN
dXRhYmxlU2V0ICp0eXBlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0V2l0aEFycmF5OmVk
aXRhYmxlVHlwZXNdOwotICAgIFt0eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OlVSTFR5cGVzXTsK
KyAgICBOU011dGFibGVTZXQgKnR5cGVzID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRXaXRo
QXJyYXk6UGFzdGVib2FyZFR5cGVzOjpmb3JFZGl0aW5nKCldOworICAgIFt0eXBlcyBhZGRPYmpl
Y3RzRnJvbUFycmF5OlBhc3RlYm9hcmRUeXBlczo6Zm9yVVJMKCldOwogICAgIFtzZWxmIHJlZ2lz
dGVyRm9yRHJhZ2dlZFR5cGVzOlt0eXBlcyBhbGxPYmplY3RzXV07CiAgICAgW3R5cGVzIHJlbGVh
c2VdOwogfQpAQCAtMjM1LDYgKzIyOCw4IEBAIC0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClm
cmFtZSBjb250ZXgKICAgICBfZGF0YS0+X3BhZ2VDbGllbnQgPSBQYWdlQ2xpZW50SW1wbDo6Y3Jl
YXRlKHNlbGYpOwogICAgIF9kYXRhLT5fcGFnZSA9IHRvSW1wbChjb250ZXh0UmVmKS0+Y3JlYXRl
V2ViUGFnZShfZGF0YS0+X3BhZ2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsK
ICAgICBfZGF0YS0+X3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7CisgICAgX2RhdGEtPl9tb3Vz
ZURvd25FdmVudCA9IG5pbDsKKyAgICBfZGF0YS0+X2lnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRz
ID0gTk87CiAKICAgICBbc2VsZiBfcmVnaXN0ZXJEcmFnZ2VkVHlwZXNdOwogCkBAIC03MjksNiAr
NzI0LDE3IEBAIC0gKEJPT0wpX3dhbnRzS2V5RG93bkZvckV2ZW50OihOU0V2ZW50ICoKICAgICBy
ZXR1cm4gWUVTOwogfQogCistICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAqKWV2
ZW50Cit7CisgICAgQVNTRVJUKCFldmVudCB8fCBbZXZlbnQgdHlwZV0gPT0gTlNMZWZ0TW91c2VE
b3duIHx8IFtldmVudCB0eXBlXSA9PSBOU1JpZ2h0TW91c2VEb3duIHx8IFtldmVudCB0eXBlXSA9
PSBOU090aGVyTW91c2VEb3duKTsKKyAgICAKKyAgICBpZiAoZXZlbnQgPT0gX2RhdGEtPl9tb3Vz
ZURvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFtfZGF0YS0+X21vdXNlRG93
bkV2ZW50IHJlbGVhc2VdOworICAgIF9kYXRhLT5fbW91c2VEb3duRXZlbnQgPSBbZXZlbnQgcmV0
YWluXTsKK30KKwogI2RlZmluZSBFVkVOVF9IQU5ETEVSKFNlbGVjdG9yLCBUeXBlKSBcCiAgICAg
LSAodm9pZClTZWxlY3RvcjooTlNFdmVudCAqKXRoZUV2ZW50IFwKICAgICB7IFwKQEAgLTc1MSwy
MSArNzU3LDM1IEBAIEVWRU5UX0hBTkRMRVIoc2Nyb2xsV2hlZWwsIFdoZWVsKQogCiAjdW5kZWYg
RVZFTlRfSEFORExFUgogCi0jZGVmaW5lIE1PVVNFX0VWRU5UX0hBTkRMRVIoU2VsZWN0b3IpIFwK
LSAgICAtICh2b2lkKVNlbGVjdG9yOihOU0V2ZW50ICopdGhlRXZlbnQgXAotICAgIHsgXAotICAg
ICAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdl
ciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsgXAotICAgICAgICBpZiAoW2N1cnJlbnRJbnB1dE1hbmFn
ZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBoYW5k
bGVNb3VzZUV2ZW50OnRoZUV2ZW50XSkgXAotICAgICAgICAgICAgcmV0dXJuOyBcCi0gICAgICAg
IFdlYk1vdXNlRXZlbnQgd2ViRXZlbnQgPSBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNl
RXZlbnQodGhlRXZlbnQsIHNlbGYpOyBcCi0gICAgICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlTW91
c2VFdmVudCh3ZWJFdmVudCk7IFwKLSAgICB9CistICh2b2lkKV9tb3VzZUhhbmRsZXI6KE5TRXZl
bnQgKil0aGVFdmVudAoreworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2Vy
ID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOworICAgIGlmIChbY3VycmVu
dElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRN
YW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6dGhlRXZlbnRdKQorICAgICAgICByZXR1cm47CisgICAg
V2ViTW91c2VFdmVudCB3ZWJFdmVudCA9IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViTW91c2VF
dmVudCh0aGVFdmVudCwgc2VsZik7CisgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVNb3VzZUV2ZW50
KHdlYkV2ZW50KTsKK30KKworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKil0aGVFdmVudAor
eworICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDp0aGVFdmVudF07CisgICAgX2RhdGEtPl9p
Z25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IE5POworICAgIF9kYXRhLT5fZHJhZ0hhc1N0YXJ0
ZWQgPSBOTzsKKyAgICBbc2VsZiBfbW91c2VIYW5kbGVyOnRoZUV2ZW50XTsKK30KIAotTU9VU0Vf
RVZFTlRfSEFORExFUihtb3VzZURvd24pCi1NT1VTRV9FVkVOVF9IQU5ETEVSKG1vdXNlRHJhZ2dl
ZCkKLU1PVVNFX0VWRU5UX0hBTkRMRVIobW91c2VVcCkKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVu
dCAqKXRoZUV2ZW50Cit7CisgICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50Om5pbF07CisgICAg
W3NlbGYgX21vdXNlSGFuZGxlcjp0aGVFdmVudF07Cit9CiAKLSN1bmRlZiBNT1VTRV9FVkVOVF9I
QU5ETEVSCistICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKXRoZUV2ZW50Cit7CisgICAg
aWYgKF9kYXRhLT5faWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMpCisgICAgICAgIHJldHVybjsK
KyAgICBbc2VsZiBfbW91c2VIYW5kbGVyOnRoZUV2ZW50XTsKK30KIAogLSAodm9pZClkb0NvbW1h
bmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKIHsKQEAgLTEwMzksNiArMTA1OSwzMSBAQCAtIChO
U1JlY3QpZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KE5TCiAgICAgcmV0dXJuIHJlc3VsdFJl
Y3Q7CiB9CiAKKy0gKHZvaWQpX2RpZEVuZERyYWc6KE5TUG9pbnQpY2xpZW50UG9pbnQKK3sKKyAg
ICAvLyBPbmNlIHRoZSBkcmFnZ2luZyBtYWNoaW5lcnkga2lja3MgaW4sIHdlIG5vIGxvbmdlciBn
ZXQgbW91c2UgZHJhZ3Mgb3IgdGhlIHVwIGV2ZW50LgorICAgIC8vIFdlYkNvcmUgZXhwZWN0cyB0
byBnZXQgYmFsYW5jZWQgZG93bi91cCdzLCBzbyB3ZSBtdXN0IGZha2UgdXAgYSBtb3VzZXVwLgor
ICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0xl
ZnRNb3VzZVVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9uOmNsaWVudFBvaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRl
IHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVy
XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDpb
W05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07Cisg
ICAgW3NlbGYgbW91c2VVcDpmYWtlRXZlbnRdOyAvLyBUaGlzIHdpbGwgYWxzbyB1cGRhdGUgdGhl
IG1vdXNlb3ZlciBzdGF0ZS4KK30KKworLSAodm9pZClkcmFnZ2VkSW1hZ2U6KE5TSW1hZ2UgKilh
bkltYWdlIGVuZGVkQXQ6KE5TUG9pbnQpYVBvaW50IG9wZXJhdGlvbjooTlNEcmFnT3BlcmF0aW9u
KW9wZXJhdGlvbgoreworICAgIE5TUG9pbnQgd2luZG93SW1hZ2VMb2MgPSBbW3NlbGYgd2luZG93
XSBjb252ZXJ0U2NyZWVuVG9CYXNlOmFQb2ludF07CisgICAgTlNQb2ludCB3aW5kb3dNb3VzZUxv
YyA9IHdpbmRvd0ltYWdlTG9jOworICAgCisgICAgLy8gUHJldmVudCBxdWV1ZWQgbW91c2VEcmFn
Z2VkIGV2ZW50cyBmcm9tIGNvbWluZyBhZnRlciB0aGUgZHJhZyBhbmQgZmFrZSBtb3VzZVVwIGV2
ZW50LgorICAgX2RhdGEtPl9pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IFlFUzsKKyAgICAK
KyAgICBfZGF0YS0+X3BhZ2UtPmRyYWdFbmRlZChJbnRQb2ludCh3aW5kb3dNb3VzZUxvYyksIGds
b2JhbFBvaW50KHdpbmRvd01vdXNlTG9jLCBbc2VsZiB3aW5kb3ddKSwgb3BlcmF0aW9uKTsKK30K
KwogLSAoRHJhZ0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGljYXRpb25GbGFnczooaWQgPE5TRHJhZ2dp
bmdJbmZvPilkcmFnZ2luZ0luZm8KIHsKICAgICB1aW50MzJfdCBmbGFncyA9IDA7CkBAIC0xMDU4
LDcgKzExMDMsOCBAQCAtIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdFbnRlcmVkOihpZCA8CiAg
ICAgSW50UG9pbnQgY2xpZW50KFtzZWxmIGNvbnZlcnRQb2ludDpbZHJhZ2dpbmdJbmZvIGRyYWdn
aW5nTG9jYXRpb25dIGZyb21WaWV3Om5pbF0pOwogICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQ
b2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7CiAg
ICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGlj
X2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlv
bk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKLSAgICAKKwor
ICAgIF9kYXRhLT5fcGFnZS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7CiAgICAgX2RhdGEtPl9wYWdl
LT5wZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVk
LCAmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOwog
ICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25Db3B5OwogfQpAQCAtMTc5OSw0ICsxODQ1LDIyIEBA
IC0gKHZvaWQpX3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3QKICAgICBfZGF0YS0+X3Bk
ZlZpZXdDb250cm9sbGVyLT5zZXRab29tRmFjdG9yKHpvb21GYWN0b3IpOwogfQogCistICh2b2lk
KV9zZXREcmFnSW1hZ2U6KE5TSW1hZ2UgKilpbWFnZSBhdDooTlNQb2ludCljbGllbnRQb2ludCBs
aW5rRHJhZzooQk9PTClsaW5rRHJhZworeworICAgIC8vIFdlIG5lZWQgdG8gcHJldmVudCByZS1l
bnRlcmluZyB0aGlzIGNhbGwgdG8gYXZvaWQgY3Jhc2hpbmcgaW4gQXBwS2l0LgorICAgIC8vIEdp
dmVuIHRoZSBhc3luY2hyb25vdXMgbmF0dXJlIG9mIFdlYktpdDIgdGhpcyBjYW4gbm93IGhhcHBl
bi4KKyAgICBpZiAoX2RhdGEtPl9kcmFnSGFzU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIF9kYXRhLT5fZHJhZ0hhc1N0YXJ0ZWQgPSBZRVM7CisgICAgW3N1cGVyIGRyYWdJbWFn
ZTppbWFnZQorICAgICAgICAgICAgICAgICAgYXQ6Y2xpZW50UG9pbnQKKyAgICAgICAgICAgICAg
b2Zmc2V0Ok5TWmVyb1NpemUKKyAgICAgICAgICAgICAgIGV2ZW50OihsaW5rRHJhZykgPyBbTlNB
cHAgY3VycmVudEV2ZW50XSA6X2RhdGEtPl9tb3VzZURvd25FdmVudAorICAgICAgICAgIHBhc3Rl
Ym9hcmQ6W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNEcmFnUGJvYXJkXQorICAg
ICAgICAgICAgICBzb3VyY2U6c2VsZgorICAgICAgICAgICBzbGlkZUJhY2s6WUVTXTsKKyAgICBf
ZGF0YS0+X2RyYWdIYXNTdGFydGVkID0gTk87Cit9CisKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24g
NzYxNDEpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw1ICs2Miw3IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJ
bnRlcm5hbCkKIC0gKHZvaWQpX2RpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tUmVwcmVzZW50
YXRpb246KGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKWRhdGFSZWZlcmVuY2U7CiAtIChk
b3VibGUpX2N1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjsKIC0gKHZvaWQpX3NldEN1c3Rv
bVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0b3I7CistICh2b2lkKV9z
ZXREcmFnSW1hZ2U6KE5TSW1hZ2UgKilpbWFnZSBhdDooTlNQb2ludCljbGllbnRQb2ludCBsaW5r
RHJhZzooQk9PTClsaW5rRHJhZzsKKy0gKHZvaWQpX2RpZEVuZERyYWc6KE5TUG9pbnQpY2xpZW50
UG9pbnQ7CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc2MTQxKQorKysgU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjEs
NiArNjYxLDkgQEAKIAkJQzBFM0FBN0MxMjA5RTgzQzAwQTQ5RDAxIC8qIE1vZHVsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBFM0FBNDQxMjA5RTJC
QTAwQTQ5RDAxIC8qIE1vZHVsZS5oICovOyB9OwogCQlDNTE3Mzg4MTEyREY4RjRGMDBFRTNGNDcg
LyogRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM1MTczODgwMTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxl
ckFjdGlvbi5oICovOyB9OwogCQlDNTIzN0Y2MDEyNDQxQ0EzMDA3ODA0NzIgLyogV2ViRWRpdG9y
Q2xpZW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzUyMzdGNUYxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRvckNsaWVudE1hYy5tbSAqLzsg
fTsKKwkJQzU3NEEzNzcxMkU2MDk5RDAwMkRGRTk4IC8qIFdlYkRyYWdDbGllbnRNYWMubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTU0RkZBMjEyRTRF
OEVBMDAyRjIyQzAgLyogV2ViRHJhZ0NsaWVudE1hYy5tbSAqLzsgfTsKKwkJQzU3NEE1ODExMkU2
NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3Rl
Ym9hcmRUeXBlcy5oICovOyB9OworCQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVi
b2FyZFR5cGVzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAqLzsgfTsK
IAkJRDNCOTQ4NDYxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0MjExRkY0QjY1MDAw
MzJCMzkgLyogV2ViUG9wdXBNZW51LmNwcCAqLzsgfTsKIAkJRDNCOTQ4NDcxMUZGNEI2NTAwMDMy
QjM5IC8qIFdlYlBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5oICov
OyB9OwogCQlEM0I5NDg0ODExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQ0
MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwICovOyB9OwpAQCAtMTQy
MSw2ICsxNDI0LDkgQEAKIAkJQzBFM0FBNDgxMjA5RTQ1MDAwQTQ5RDAxIC8qIE1vZHVsZU1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE1vZHVsZU1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUxNzM4ODAxMkRGOEY0RjAwRUUzRjQ3IC8q
IERyYWdDb250cm9sbGVyQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERyYWdDb250cm9sbGVyQWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUM1
MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFZGl0b3JDbGllbnRNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1NTRGRkEyMTJFNEU4RUEwMDJGMjJDMCAvKiBX
ZWJEcmFnQ2xpZW50TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV2ViRHJhZ0NsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU3
NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzU3NEE1ODAxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhc3RlYm9hcmRUeXBl
cy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDIxMUZGNEI2NTAwMDMy
QjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0I5
NDg0MzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlBvcHVwTWVudS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlEM0I5NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlNlYXJjaFBvcHVwTWVudS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjY3LDYgKzIyNzMsNyBAQAogCQlC
QzExMUFERTExMkY1QjlBMDAzMzdCQUIgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDNTU0RkZBMjEyRTRFOEVBMDAyRjIyQzAgLyogV2ViRHJh
Z0NsaWVudE1hYy5tbSAqLywKIAkJCQk1MTAyMUU5QjEyQjE2Nzg4MDA1QzAzM0MgLyogV2ViQ29u
dGV4dE1lbnVDbGllbnRNYWMubW0gKi8sCiAJCQkJRjZBMjVGRDgxMkFEQzZCRDAwREM0MENDIC8q
IFdlYkRhdGFiYXNlTWFuYWdlck1hYy5tbSAqLywKIAkJCQlDNTIzN0Y1RjEyNDQxQ0EzMDA3ODA0
NzIgLyogV2ViRWRpdG9yQ2xpZW50TWFjLm1tICovLApAQCAtMjMyMiw2ICsyMzI5LDggQEAKIAkJ
QkMxMTFCNUExMTJGNjI4MjAwMzM3QkFCIC8qIG1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzU3NEE1N0YxMkU2NjY4MTAwMkRGRTk4IC8qIFBhc3Rl
Ym9hcmRUeXBlcy5oICovLAorCQkJCUM1NzRBNTgwMTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJv
YXJkVHlwZXMubW0gKi8sCiAJCQkJMUE2RjlGQjYxMUUxNDA4NTAwREIxMzcxIC8qIENvbW1hbmRM
aW5lTWFjLmNwcCAqLywKIAkJCQlDMDJCRkYxRDEyNTE1MDJFMDA5Q0NCRUEgLyogTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudE1hYy5tbSAqLywKIAkJCQlCQ0Y1MDVFNjEyNDMwNDdCMDA1OTU1QUUgLyog
UGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8ubW0gKi8sCkBAIC0zMDU5LDYgKzMwNjgsNyBAQAogCQkJ
CTFBNjQyNTY4MTJERTQyRUMwMENBQUUyQyAvKiBCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUM1MTczODgxMTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBMkU1MUQxMkU0QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFz
dGVib2FyZFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM1MjAsNiArMzUzMCw4IEBACiAJCQkJ
MUE2NDI1NjkxMkRFNDJFQzAwQ0FBRTJDIC8qIEJhY2tpbmdTdG9yZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQTY0MjkyRDEyREU1Rjk4MDBDQUFFMkMgLyogQmFja2luZ1N0b3JlTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFBMkU1MUUxMkU0QzA1RTAwQkM0OTY2IC8qIENHVXRpbGl0aWVz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUM1NzRBMzc3MTJFNjA5OUQwMDJERkU5OCAvKiBXZWJE
cmFnQ2xpZW50TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQzU3NEE1ODIxMkU2NjY4MTAwMkRG
RTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdD
bGllbnQuY3BwCShyZXZpc2lvbiA3NjE0MSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDcgQEAgRHJhZ1NvdXJjZUFjdGlvbiBXZWJEcmFnQ2xpZW50OjpkcmFnU291cgogICAgIHJl
dHVybiBEcmFnU291cmNlQWN0aW9uQW55OwogfQogCisjaWYgIVBMQVRGT1JNKE1BQykKIHZvaWQg
V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBj
b25zdCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkKIHsKIH0KQEAgLTU5LDYg
KzYwLDcgQEAgRHJhZ0ltYWdlUmVmIFdlYkRyYWdDbGllbnQ6OmNyZWF0ZURyYWdJbQogICAgIG5v
dEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogdm9pZCBXZWJEcmFn
Q2xpZW50OjpkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQu
aAkocmV2aXNpb24gNzYxNDEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOSBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVm
IGRyYWdJbWFnZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJD
b3JlOjpGcmFtZSosIGJvb2wgbGlua0RyYWcgPSBmYWxzZSk7CiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhXZWJDb3JlOjpLVVJMJiwgY29u
c3QgU3RyaW5nJiBsYWJlbCwgV2ViQ29yZTo6RnJhbWUqKTsKIAorI2lmIFBMQVRGT1JNKE1BQykK
KyAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKE5TUGFzdGVib2FyZCos
IERPTUVsZW1lbnQqLCBOU1VSTCosIE5TU3RyaW5nKiwgV2ViQ29yZTo6RnJhbWUqKTsKKyNlbmRp
ZgogICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOwogCiAgICAgV2Vi
UGFnZSogbV9wYWdlOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMv
V2ViRHJhZ0NsaWVudE1hYy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJQYXN0ZWJvYXJkVHlwZXMuaCIKKyNpbXBvcnQgIlNoYXJlYWJsZUJp
dG1hcC5oIgorI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW1wb3J0ICJXZWJE
cmFnQ2xpZW50LmgiCisjaW1wb3J0ICJXZWJQYWdlLmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHlN
ZXNzYWdlcy5oIgorI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRJbWFnZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9ET01Qcml2YXRlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RPTUVsZW1lbnRJbnRlcm5hbC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmVuZGVySW1hZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU3RyaW5nVHJ1bmNh
dG9yLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJLaXQvV2Vi
S2l0TlNTdHJpbmdFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJOU1VSTEV4dHJhcy5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NvbnN0
IGZsb2F0IERyYWdMYWJlbEJvcmRlclggPSA0OworLy9LZWVwIGJvcmRlcl95IGluIHN5bmNoIHdp
dGggRHJhZ0NvbnRyb2xsZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQKK2NvbnN0IGZsb2F0IERyYWdM
YWJlbEJvcmRlclkgPSAyOworY29uc3QgZmxvYXQgRHJhZ0xhYmVsUmFkaXVzID0gNTsKK2NvbnN0
IGZsb2F0IExhYmVsQm9yZGVyWU9mZnNldCA9IDI7CisKK2NvbnN0IGZsb2F0IE1pbkRyYWdMYWJl
bFdpZHRoQmVmb3JlQ2xpcCA9IDEyMDsKK2NvbnN0IGZsb2F0IE1heERyYWdMYWJlbFdpZHRoID0g
MzIwOworCitjb25zdCBmbG9hdCBEcmFnTGlua0xhYmVsRm9udHNpemUgPSAxMTsKK2NvbnN0IGZs
b2F0IERyYWdMaW5rVXJsRm9udFNpemUgPSAxMDsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK3N0YXRpYyBGb250JiBmb250RnJvbU5TRm9udChOU0ZvbnQgKmZvbnQpCit7CisgICAgc3Rh
dGljIE5TRm9udCAqY3VycmVudEZvbnQ7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250LCBj
dXJyZW50UmVuZGVyZXIsICgpKTsKKyAgICAKKyAgICBpZiAoW2ZvbnQgaXNFcXVhbDpjdXJyZW50
Rm9udF0pCisgICAgICAgIHJldHVybiBjdXJyZW50UmVuZGVyZXI7CisgICAgaWYgKGN1cnJlbnRG
b250KQorICAgICAgICBDRlJlbGVhc2UoY3VycmVudEZvbnQpOworICAgIGN1cnJlbnRGb250ID0g
Zm9udDsKKyAgICBDRlJldGFpbihjdXJyZW50Rm9udCk7CisgICAgRm9udFBsYXRmb3JtRGF0YSBm
KGZvbnQsIFtmb250IHBvaW50U2l6ZV0pOworICAgIGN1cnJlbnRSZW5kZXJlciA9IEZvbnQoZiwg
IVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7
CisgICAgcmV0dXJuIGN1cnJlbnRSZW5kZXJlcjsKK30KKyAgICAKK3ZvaWQgV2ViRHJhZ0NsaWVu
dDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBhdCwg
Y29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZy
YW1lLCBib29sIGxpbmtEcmFnKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoY2xpcGJvYXJkKTsKKyAgICAKKyAgICBOU0ltYWdlICpkcmFnTlNJbWFnZSA9
IGRyYWdJbWFnZS5nZXQoKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnU2hhcmVh
YmxlSW1hZ2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShJbnRTaXplKFtkcmFn
TlNJbWFnZSBzaXplXSkpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29u
dGV4dCA9IGRyYWdTaGFyZWFibGVJbWFnZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAg
ICBbTlNHcmFwaGljc0NvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOworICAgIE5TR3JhcGhpY3ND
b250ZXh0KiBiaXRtYXBDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dFdpdGhHcmFwaGljc1BvcnQ6Z3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSBmbGlw
cGVkOllFU107CisgICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OiBiaXRt
YXBDb250ZXh0XTsKKyAgICAKKyAgICBbZHJhZ05TSW1hZ2UgZHJhd0luUmVjdDpOU01ha2VSZWN0
KDAsIDAsIFtkcmFnTlNJbWFnZSBzaXplXS53aWR0aCAsIFtkcmFnTlNJbWFnZSBzaXplXS5oZWln
aHQpIGZyb21SZWN0Ok5TWmVyb1JlY3Qgb3BlcmF0aW9uOk5TQ29tcG9zaXRlU291cmNlT3ZlciBm
cmFjdGlvbjoxXTsKKyAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVd
OworIAorICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAoIWRyYWdTaGFy
ZWFibGVJbWFnZS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCisgICAgICAgIHJldHVybjsKKyAgICBJ
bnRQb2ludCBjbGllbnRQb2ludChhdCk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlNldERyYWdJbWFnZShjbGllbnRQb2ludCwgSW50U2l6ZShbZHJhZ05TSW1hZ2Ug
c2l6ZV0pLCBoYW5kbGUsIGxpbmtEcmFnKSk7Cit9CisKK0RyYWdJbWFnZVJlZiBXZWJEcmFnQ2xp
ZW50OjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRs
ZSwgRnJhbWUqIGZyYW1lKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgTlNTdHJpbmcgKmxhYmVsID0gMDsKKyAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkKKyAg
ICAgICAgbGFiZWwgPSB0aXRsZTsKKyAgICBOU1VSTCAqY29jb2FVUkwgPSB1cmw7CisgICAgTlNT
dHJpbmcgKnVybFN0cmluZyA9IFtjb2NvYVVSTCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKKyAg
ICAKKyAgICBCT09MIGRyYXdVUkxTdHJpbmcgPSBZRVM7CisgICAgQk9PTCBjbGlwVVJMU3RyaW5n
ID0gTk87CisgICAgQk9PTCBjbGlwTGFiZWxTdHJpbmcgPSBOTzsKKyAgICAKKyAgICBpZiAoIWxh
YmVsKSB7CisgICAgICAgIGRyYXdVUkxTdHJpbmcgPSBOTzsKKyAgICAgICAgbGFiZWwgPSB1cmxT
dHJpbmc7CisgICAgfQorICAgIAorICAgIE5TRm9udCAqbGFiZWxGb250ID0gW1tOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpbTlNGb250IHN5c3RlbUZvbnRPZlNp
emU6RHJhZ0xpbmtMYWJlbEZvbnRzaXplXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0hhdmVUcmFpdDpOU0JvbGRGb250TWFza107
CisgICAgTlNGb250ICp1cmxGb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOkRyYWdMaW5r
VXJsRm9udFNpemVdOworICAgIE5TU2l6ZSBsYWJlbFNpemU7CisgICAgbGFiZWxTaXplLndpZHRo
ID0gW2xhYmVsIF93ZWJfd2lkdGhXaXRoRm9udDogbGFiZWxGb250XTsKKyAgICBsYWJlbFNpemUu
aGVpZ2h0ID0gW2xhYmVsRm9udCBhc2NlbmRlcl0gLSBbbGFiZWxGb250IGRlc2NlbmRlcl07Cisg
ICAgaWYgKGxhYmVsU2l6ZS53aWR0aCA+IE1heERyYWdMYWJlbFdpZHRoKXsKKyAgICAgICAgbGFi
ZWxTaXplLndpZHRoID0gTWF4RHJhZ0xhYmVsV2lkdGg7CisgICAgICAgIGNsaXBMYWJlbFN0cmlu
ZyA9IFlFUzsKKyAgICB9CisgICAgCisgICAgTlNTaXplIGltYWdlU2l6ZTsKKyAgICBpbWFnZVNp
emUud2lkdGggPSBsYWJlbFNpemUud2lkdGggKyBEcmFnTGFiZWxCb3JkZXJYICogMjsKKyAgICBp
bWFnZVNpemUuaGVpZ2h0ID0gbGFiZWxTaXplLmhlaWdodCArIERyYWdMYWJlbEJvcmRlclkgKiAy
OworICAgIGlmIChkcmF3VVJMU3RyaW5nKSB7CisgICAgICAgIE5TU2l6ZSB1cmxTdHJpbmdTaXpl
OworICAgICAgICB1cmxTdHJpbmdTaXplLndpZHRoID0gW3VybFN0cmluZyBfd2ViX3dpZHRoV2l0
aEZvbnQ6IHVybEZvbnRdOworICAgICAgICB1cmxTdHJpbmdTaXplLmhlaWdodCA9IFt1cmxGb250
IGFzY2VuZGVyXSAtIFt1cmxGb250IGRlc2NlbmRlcl07CisgICAgICAgIGltYWdlU2l6ZS5oZWln
aHQgKz0gdXJsU3RyaW5nU2l6ZS5oZWlnaHQ7CisgICAgICAgIGlmICh1cmxTdHJpbmdTaXplLndp
ZHRoID4gTWF4RHJhZ0xhYmVsV2lkdGgpIHsKKyAgICAgICAgICAgIGltYWdlU2l6ZS53aWR0aCA9
IG1heChNYXhEcmFnTGFiZWxXaWR0aCArIERyYWdMYWJlbEJvcmRlclkgKiAyLCBNaW5EcmFnTGFi
ZWxXaWR0aEJlZm9yZUNsaXApOworICAgICAgICAgICAgY2xpcFVSTFN0cmluZyA9IFlFUzsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBtYXgobGFiZWxTaXpl
LndpZHRoICsgRHJhZ0xhYmVsQm9yZGVyWCAqIDIsIHVybFN0cmluZ1NpemUud2lkdGggKyBEcmFn
TGFiZWxCb3JkZXJYICogMik7CisgICAgfQorICAgIE5TSW1hZ2UgKmRyYWdJbWFnZSA9IFtbW05T
SW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTogaW1hZ2VTaXplXSBhdXRvcmVsZWFzZV07CisgICAg
W2RyYWdJbWFnZSBsb2NrRm9jdXNdOworICAgIAorICAgIFtbTlNDb2xvciBjb2xvcldpdGhEZXZp
Y2VSZWQ6IDAuN2YgZ3JlZW46IDAuN2YgYmx1ZTogMC43ZiBhbHBoYTogMC44Zl0gc2V0XTsKKyAg
ICAKKyAgICAvLyBEcmFnIGEgcmVjdGFuZ2xlIHdpdGggcm91bmRlZCBjb3JuZXJzCisgICAgTlNC
ZXppZXJQYXRoICpwYXRoID0gW05TQmV6aWVyUGF0aCBiZXppZXJQYXRoXTsKKyAgICBbcGF0aCBh
cHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoMCwgMCwgRHJhZ0xhYmVs
UmFkaXVzICogMiwgRHJhZ0xhYmVsUmFkaXVzICogMildOworICAgIFtwYXRoIGFwcGVuZEJlemll
clBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtlUmVjdCgwLCBpbWFnZVNpemUuaGVpZ2h0IC0gRHJh
Z0xhYmVsUmFkaXVzICogMiwgRHJhZ0xhYmVsUmFkaXVzICogMiwgRHJhZ0xhYmVsUmFkaXVzICog
MildOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtlUmVj
dChpbWFnZVNpemUud2lkdGggLSBEcmFnTGFiZWxSYWRpdXMgKiAyLCBpbWFnZVNpemUuaGVpZ2h0
IC0gRHJhZ0xhYmVsUmFkaXVzICogMiwgRHJhZ0xhYmVsUmFkaXVzICogMiwgRHJhZ0xhYmVsUmFk
aXVzICogMildOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNN
YWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEcmFnTGFiZWxSYWRpdXMgKiAyLCAwLCBEcmFnTGFi
ZWxSYWRpdXMgKiAyLCBEcmFnTGFiZWxSYWRpdXMgKiAyKV07CisgICAgCisgICAgW3BhdGggYXBw
ZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KERyYWdMYWJlbFJhZGl1cywgMCwgaW1h
Z2VTaXplLndpZHRoIC0gRHJhZ0xhYmVsUmFkaXVzICogMiwgaW1hZ2VTaXplLmhlaWdodCldOwor
ICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdCgwLCBEcmFnTGFi
ZWxSYWRpdXMsIERyYWdMYWJlbFJhZGl1cyArIDEwLCBpbWFnZVNpemUuaGVpZ2h0IC0gMiAqIERy
YWdMYWJlbFJhZGl1cyldOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoUmVjdDogTlNN
YWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEcmFnTGFiZWxSYWRpdXMgLSAyMCwgRHJhZ0xhYmVs
UmFkaXVzLCBEcmFnTGFiZWxSYWRpdXMgKyAyMCwgaW1hZ2VTaXplLmhlaWdodCAtIDIgKiBEcmFn
TGFiZWxSYWRpdXMpXTsKKyAgICBbcGF0aCBmaWxsXTsKKyAgICAKKyAgICBOU0NvbG9yICp0b3BD
b2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjAuMGYgYWxwaGE6MC43NWZdOwor
ICAgIE5TQ29sb3IgKmJvdHRvbUNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6
MS4wZiBhbHBoYTowLjVmXTsKKyAgICBpZiAoZHJhd1VSTFN0cmluZykgeworICAgICAgICBpZiAo
Y2xpcFVSTFN0cmluZykKKyAgICAgICAgICAgIC8vdXJsU3RyaW5nID0gW1dlYlN0cmluZ1RydW5j
YXRvciBjZW50ZXJUcnVuY2F0ZVN0cmluZzogdXJsU3RyaW5nIHRvV2lkdGg6aW1hZ2VTaXplLndp
ZHRoIC0gKERyYWdMYWJlbEJvcmRlclggKiAyKSB3aXRoRm9udDp1cmxGb250XTsKKyAgICAgICAg
ICAgIHVybFN0cmluZyA9IFN0cmluZ1RydW5jYXRvcjo6Y2VudGVyVHJ1bmNhdGUodXJsU3RyaW5n
LCBpbWFnZVNpemUud2lkdGggLSAoRHJhZ0xhYmVsQm9yZGVyWCAqIDIpLCBmb250RnJvbU5TRm9u
dCh1cmxGb250KSk7ICAgICAgIAorICAgICAgICBbdXJsU3RyaW5nIF93ZWJfZHJhd0RvdWJsZWRB
dFBvaW50Ok5TTWFrZVBvaW50KERyYWdMYWJlbEJvcmRlclgsIERyYWdMYWJlbEJvcmRlclkgLSBb
dXJsRm9udCBkZXNjZW5kZXJdKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhU
b3BDb2xvcjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0b21Db2xvciBmb250OnVybEZvbnRdOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoY2xpcExhYmVsU3RyaW5nKQorICAgICAgICAvL2xhYmVsID0g
W1dlYlN0cmluZ1RydW5jYXRvciByaWdodFRydW5jYXRlU3RyaW5nOiBsYWJlbCB0b1dpZHRoOmlt
YWdlU2l6ZS53aWR0aCAtIChEcmFnTGFiZWxCb3JkZXJYICogMikgd2l0aEZvbnQ6bGFiZWxGb250
XTsKKyAgICAgICAgbGFiZWwgPSBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUobGFiZWws
IGltYWdlU2l6ZS53aWR0aCAtIChEcmFnTGFiZWxCb3JkZXJYICogMiksIGZvbnRGcm9tTlNGb250
KGxhYmVsRm9udCkpOworICAgIFtsYWJlbCBfd2ViX2RyYXdEb3VibGVkQXRQb2ludDpOU01ha2VQ
b2ludCAoRHJhZ0xhYmVsQm9yZGVyWCwgaW1hZ2VTaXplLmhlaWdodCAtIExhYmVsQm9yZGVyWU9m
ZnNldCAtIFtsYWJlbEZvbnQgcG9pbnRTaXplXSkKKyAgICAgICAgICAgICAgICAgICAgICB3aXRo
VG9wQ29sb3I6dG9wQ29sb3IgYm90dG9tQ29sb3I6Ym90dG9tQ29sb3IgZm9udDpsYWJlbEZvbnRd
OworICAgIAorICAgIFtkcmFnSW1hZ2UgdW5sb2NrRm9jdXNdOworICAgIAorICAgIHJldHVybiBk
cmFnSW1hZ2U7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlVVJMKE5TUGFzdGVib2FyZCogcGFzdGVi
b2FyZCwgTlNVUkwqIFVSTCwgTlNTdHJpbmcqIHRpdGxlLCBOU0FycmF5KiB0eXBlcykKK3sKKyAg
ICBBU1NFUlQoVVJMKTsKKyAgICAKKyAgICBpZiAoIVt0aXRsZSBsZW5ndGhdKSB7CisgICAgICAg
IHRpdGxlID0gW1tVUkwgcGF0aF0gbGFzdFBhdGhDb21wb25lbnRdOworICAgICAgICBpZiAoIVt0
aXRsZSBsZW5ndGhdKQorICAgICAgICAgICAgdGl0bGUgPSBbVVJMIF93ZWJfdXNlclZpc2libGVT
dHJpbmddOworICAgIH0KKyAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TVVJM
UGJvYXJkVHlwZV0pCisgICAgICAgIFtVUkwgd3JpdGVUb1Bhc3RlYm9hcmQ6cGFzdGVib2FyZF07
CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJVUkxQYm9hcmRUeXBlXSkKKyAgICAg
ICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOltVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ10g
Zm9yVHlwZTpXZWJVUkxQYm9hcmRUeXBlXTsKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
OldlYlVSTE5hbWVQYm9hcmRUeXBlXSkKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOnRp
dGxlIGZvclR5cGU6V2ViVVJMTmFtZVBib2FyZFR5cGVdOworICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3Ry
aW5nOltVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ10gZm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5
cGVdOworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViVVJMc1dpdGhUaXRsZXNQYm9h
cmRUeXBlXSkgeworICAgICAgICBOU0FycmF5KiBVUkxzID0gW05TQXJyYXkgYXJyYXlXaXRoT2Jq
ZWN0OlVSTF07CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gW1VSTHMgY291bnRdOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFjb3VudCB8fCBbcGFzdGVib2FyZCBhdmFpbGFibGVUeXBlRnJvbUFy
cmF5OltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVd
XSA9PSBuaWwpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgTlNBcnJheSogdGl0bGVz
ID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OnRpdGxlXTsKKyAgICAgICAgCisgICAgICAgIGlm
IChjb3VudCAhPSBbdGl0bGVzIGNvdW50XSkKKyAgICAgICAgICAgIHRpdGxlcyA9IG5pbDsKKyAg
ICAgICAgCisgICAgICAgIE5TTXV0YWJsZUFycmF5KiBVUkxTdHJpbmdzID0gW05TTXV0YWJsZUFy
cmF5IGFycmF5V2l0aENhcGFjaXR5OmNvdW50XTsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkqIHRp
dGxlc09yRW1wdHlTdHJpbmdzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNv
dW50XTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgIFtVUkxTdHJpbmdzIGFkZE9iamVjdDpbW1VSTHMgb2JqZWN0
QXRJbmRleDppbmRleF0gX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ11dOworICAgICAgICAgICAg
W3RpdGxlc09yRW1wdHlTdHJpbmdzIGFkZE9iamVjdDoodGl0bGVzID09IG5pbCkgPyBAIiIgOiBb
W3RpdGxlcyBvYmplY3RBdEluZGV4OmluZGV4XSBfd2Via2l0X3N0cmluZ0J5VHJpbW1pbmdXaGl0
ZXNwYWNlXV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtwYXN0ZWJvYXJkIHNldFBy
b3BlcnR5TGlzdDpbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOlVSTFN0cmluZ3MsIHRpdGxlc09y
RW1wdHlTdHJpbmdzLCBuaWxdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpX
ZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdOworICAgIH0KK30KKyAgICAKK3N0YXRpYyB2b2lk
IHdyaXRlSW1hZ2UoTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBOU0ltYWdlICppbWFnZSwgRE9N
RWxlbWVudCogZWxlbWVudCwgTlNVUkwqIFVSTCwgTlNTdHJpbmcqIHRpdGxlLCBMZWdhY3lXZWJB
cmNoaXZlKiBhcmNoaXZlLCBOU0FycmF5KiB0eXBlcykKK3sKKyAgICBBU1NFUlQoaW1hZ2UgfHwg
ZWxlbWVudCk7CisgICAgQVNTRVJUKFVSTCk7CisgICAgCisgICAgd3JpdGVVUkwocGFzdGVib2Fy
ZCwgVVJMLCB0aXRsZSwgdHlwZXMpOworICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNUSUZGUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBhZGQg
aGFuZGxpbmcgb2YgcHJvbWlzZWQgdHlwZXMuCisgICAgICAgIGlmIChpbWFnZSkKKyAgICAgICAg
ICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6W2ltYWdlIFRJRkZSZXByZXNlbnRhdGlvbl0gZm9yVHlw
ZTpOU1RJRkZQYm9hcmRUeXBlXTsKKyAgICAgICAgZWxzZSBpZiAoZWxlbWVudCkKKyAgICAgICAg
ICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6W2VsZW1lbnQgX2ltYWdlVElGRlJlcHJlc2VudGF0aW9u
XSBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOworICAgIH0KKyAgICAKKyAgICBpZiAoYXJjaGl2
ZSAmJiBbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKQorICAgICAg
ICBbcGFzdGVib2FyZCBzZXREYXRhOltbKE5TRGF0YSAqKWFyY2hpdmUtPnJhd0RhdGFSZXByZXNl
bnRhdGlvbigpLmdldCgpIHJldGFpbl0gYXV0b3JlbGVhc2VdIGZvclR5cGU6V2ViQXJjaGl2ZVBi
b2FyZFR5cGVdOworfQorICAgIAordm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVE
cmFnSW1hZ2UoTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBET01FbGVtZW50KiBlbGVtZW50LCBO
U1VSTCogVVJMLCBOU1N0cmluZyogdGl0bGUsIFdlYkNvcmU6OkZyYW1lKikKK3sKKyAgICBBU1NF
UlQoZWxlbWVudCk7CisgICAgQVNTRVJUKHBhc3RlYm9hcmQgJiYgcGFzdGVib2FyZCA9PSBbTlNQ
YXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpOU0RyYWdQYm9hcmRdKTsKKyAgICAKKyAgICBO
U1N0cmluZyAqZXh0ZW5zaW9uID0gQCIiOworICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gY29yZShlbGVtZW50KS0+cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAocmVuZGVyZXItPmlz
SW1hZ2UoKSkgeworICAgICAgICAgICAgaWYgKENhY2hlZEltYWdlKiBpbWFnZSA9IHRvUmVuZGVy
SW1hZ2UocmVuZGVyZXIpLT5jYWNoZWRJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgZXh0ZW5z
aW9uID0gaW1hZ2UtPmltYWdlKCktPmZpbGVuYW1lRXh0ZW5zaW9uKCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFbZXh0ZW5zaW9uIGxlbmd0aF0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBSZWZQdHI8TGVnYWN5
V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb3JlKGVsZW1l
bnQpKTsKKyAgICBOU011dGFibGVBcnJheSAqdHlwZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9j
XSBpbml0V2l0aE9iamVjdHM6TlNGaWxlc1Byb21pc2VQYm9hcmRUeXBlLCBuaWxdOworICAgIFt0
eXBlcyBhZGRPYmplY3RzRnJvbUFycmF5OihhcmNoaXZlKSA/IFBhc3RlYm9hcmRUeXBlczo6Zm9y
SW1hZ2VzV2l0aEFyY2hpdmUoKSA6IFBhc3RlYm9hcmRUeXBlczo6Zm9ySW1hZ2VzKCldOworICAg
IFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpuaWxdOyAgICAKKyAgICB3cml0
ZUltYWdlKHBhc3RlYm9hcmQsIG5pbCwgZWxlbWVudCwgVVJMLCB0aXRsZSwgYXJjaGl2ZS5nZXQo
KSwgdHlwZXMpOworICAgIFt0eXBlcyByZWxlYXNlXTsKKyAgICAKKyAgICBOU0FycmF5ICpleHRl
bnNpb25zID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6ZXh0ZW5zaW9uLCBuaWxd
OworICAgIFtwYXN0ZWJvYXJkIHNldFByb3BlcnR5TGlzdDpleHRlbnNpb25zIGZvclR5cGU6TlNG
aWxlc1Byb21pc2VQYm9hcmRUeXBlXTsKKyAgICBbZXh0ZW5zaW9ucyByZWxlYXNlXTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA3NjE0MSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwOSw2
ICsxMzA5LDIzIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW8KICAg
ICB9CiB9CiAKK3ZvaWQgV2ViUGFnZTo6ZHJhZ0VuZGVkKFdlYkNvcmU6OkludFBvaW50IGNsaWVu
dFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3Qgb3Bl
cmF0aW9uKQoreworICAgIEludFBvaW50IGFkanVzdGVkQ2xpZW50UG9zaXRpb24oY2xpZW50UG9z
aXRpb24ueCgpICsgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnT2Zmc2V0KCkueCgpLCBj
bGllbnRQb3NpdGlvbi55KCkgKyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdPZmZzZXQo
KS55KCkpOworICAgIEludFBvaW50IGFkanVzdGVkR2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9zaXRp
b24ueCgpICsgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnT2Zmc2V0KCkueCgpLCBnbG9i
YWxQb3NpdGlvbi55KCkgKyBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdPZmZzZXQoKS55
KCkpOworICAgIAorICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VuZGVkKCk7Cisg
ICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZmFrZSBt
b2RpZmllciBrZXlzIGhlcmUsIGJ1dCB0aGV5IHNob3VsZCBiZSByZWFsIG9uZXMgaW5zdGVhZC4K
KyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoYWRqdXN0ZWRDbGllbnRQb3NpdGlvbiwgYWRq
dXN0ZWRHbG9iYWxQb3NpdGlvbiwgTGVmdEJ1dHRvbiwgTW91c2VFdmVudE1vdmVkLCAwLCBmYWxz
ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgY3VycmVudFRpbWUoKSk7CisgICAgbV9wYWdlLT5tYWlu
RnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmRyYWdTb3VyY2VFbmRlZEF0KGV2ZW50LCAoRHJhZ09w
ZXJhdGlvbilvcGVyYXRpb24pOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZEVuZERyYWcoYWRqdXN0ZWRDbGllbnRQb3NpdGlvbikpOworI2Vu
ZGlmCit9CisKIFdlYkVkaXRDb21tYW5kKiBXZWJQYWdlOjp3ZWJFZGl0Q29tbWFuZCh1aW50NjRf
dCBjb21tYW5kSUQpCiB7CiAgICAgcmV0dXJuIG1fZWRpdENvbW1hbmRNYXAuZ2V0KGNvbW1hbmRJ
RCkuZ2V0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgJKHJldmlzaW9uIDc2MTQxKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDYgKzMwMCw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KFdlYkNvcmU6OkZyYW1lKiwgY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0
X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50
UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
aywgY29uc3QgV1RGOjpTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgdWludDMyX3QgZmxhZ3MpOwor
ICAgIHZvaWQgZHJhZ0VuZGVkKFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJD
b3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3Qgb3BlcmF0aW9uKTsKIAogICAg
IHZvaWQgYmVnaW5QcmludGluZyh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mKTsK
ICAgICB2b2lkIGVuZFByaW50aW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNzYxNDEp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5p
bgkod29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsK
IAogICAgICMgRHJhZyBhbmQgZHJvcC4KICAgICBQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24o
dWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29y
ZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0
aW9uTWFzaywgV1RGOjpTdHJpbmcgZHJhZ1N0b3JhZ2VOYW1lLCB1aW50MzJfdCBmbGFncykKKyAg
ICBEcmFnRW5kZWQoV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6Oklu
dFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pCiAKICAgICAjIFBvcHVw
IG1lbnUuCiAgICAgRGlkQ2hhbmdlU2VsZWN0ZWRJbmRleEZvckFjdGl2ZVBvcHVwTWVudShpbnQz
Ml90IG5ld0luZGV4KTsK
</data>
<flag name="review"
          id="70866"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79521</attachid>
            <date>2011-01-19 16:30:26 -0800</date>
            <delta_ts>2011-01-19 17:31:58 -0800</delta_ts>
            <desc>Patch10</desc>
            <filename>dragsource.txt</filename>
            <type>text/plain</type>
            <size>44714</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTc2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMTEtMDEtMTkgIEVucmljYSBD
YXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBhZGQgc3VwcG9ydCBmb3IgZHJhZyBhbmQgZHJv
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIzNDMK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1NTg+CisgICAgICAgIAorICAgICAgICBUaGlz
IHBhdGNoIGNvbnRhaW5zIHRoZSByZW1haW5pbmcgd29yayB0byBzdXBwb3J0IGRyYWcgYW5kIGRy
b3Agb24gTWFjLgorICAgICAgICBJJ3ZlIGFkZGVkIGEgUGFzdGVib2FyZFR5cGVzIGNsYXNzIHRv
IGVuY2Fwc3VsYXRlIGFsbCB0aGUgcGFzdGVib2FyZCBmb3JtYXRzCisgICAgICAgIHN1cHBvcnRl
ZCBmb3IgZHJhZyBhbmQgZHJvcC4KKyAgICAgICAgSW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB3ZSBk
b24ndCBzdXBwb3J0IHRoZSBwcm9taXNlZCB0eXBlcywgc2luY2UgSSBjb3VsZCBub3QKKyAgICAg
ICAgZmluZCBhbiBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMgYWNyb3NzIHByb2Nlc3Nlcy4KKyAg
ICAgICAgVGhlIGJ1bGsgb2YgdGhlIHBhdGNoIGNvbnNpc3RzIGluIGNyZWF0aW5nIGEgc2hhcmVh
YmxlIGJpdG1hcCBmb3IgdGhlIGRyYWcgaW1hZ2UsCisgICAgICAgIHBhc3MgaXRzIGhhbmRsZSB0
byB0aGUgVUkgcHJvY2VzcyBhbmQgY3JlYXRlIGEgbmV3IE5TSW1hZ2UgZnJvbSBpdCB0byBiZSBn
aXZlbiB0bworICAgICAgICBBcHBLaXQgZm9yIGRyYWdnaW5nLgorICAgICAgICBJJ3ZlIGFkZGVk
IHRoZSBtaXNzaW5nIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZXRob2RzIGluIHRoZSBkcmFnIGNs
aWVudCB0byBob29rCisgICAgICAgIHVwIHRoZSBwbGFjZW1lbnQgb2YgdGhlIGRhdGEgaW4gdGhl
IHBhc3RlYm9hcmQuCisgICAgICAgIAorICAgICAgICAqIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5
cGVzLmg6IEFkZGVkLgorICAgICAgICAqIFNoYXJlZC9tYWMvUGFzdGVib2FyZFR5cGVzLm1tOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JFZGl0aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6UGFzdGVib2FyZFR5cGVzOjpmb3JVUkwpOgorICAgICAgICAoV2ViS2l0
OjpQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OlBhc3RlYm9h
cmRUeXBlczo6Zm9ySW1hZ2VzV2l0aEFyY2hpdmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
bWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXREcmFnSW1h
Z2UpOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAg
ICAgICgtW1dLVmlldyBfcmVnaXN0ZXJEcmFnZ2VkVHlwZXNdKTogUmVmYWN0b3JlZCB0byB1c2Ug
dGhlIG5ldyBQYXN0ZWJvYXJkVHlwZXMgY2xhc3MuCisgICAgICAgICgtW1dLVmlldyBpbml0V2l0
aEZyYW1lOmNvbnRleHRSZWY6cGFnZUdyb3VwUmVmOl0pOgorICAgICAgICAoLVtXS1ZpZXcgX3Nl
dE1vdXNlRG93bkV2ZW50Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgX21vdXNlSGFuZGxlcjpdKToK
KyAgICAgICAgKC1bV0tWaWV3IG1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tWaWV3IG1vdXNl
VXA6XSk6CisgICAgICAgICgtW1dLVmlldyBtb3VzZURyYWdnZWQ6XSk6CisgICAgICAgICgtW1dL
VmlldyBkcmFnZ2VkSW1hZ2U6ZW5kZWRBdDpvcGVyYXRpb246XSk6CisgICAgICAgICgtW1dLVmll
dyBkcmFnZ2luZ0VudGVyZWQ6XSk6CisgICAgICAgICgtW1dLVmlldyBfc2V0RHJhZ0ltYWdlOmF0
OmxpbmtEcmFnOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFs
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRE
cmFnSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRyYWdFbmRlZCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFn
Q2xpZW50Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJh
Z0NsaWVudE1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmZvbnRGcm9tTlNGb250KToK
KyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKTogQWRkZWQgaW1wbGVt
ZW50YXRpb24uCisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OmNyZWF0ZURyYWdJbWFn
ZUZvckxpbmspOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6d3JpdGVVUkwpOiBIZWxwZXIgZnVu
Y3Rpb24uCisgICAgICAgIChXZWJLaXQ6OndyaXRlSW1hZ2UpOiBIZWxwZXIgZnVuY3Rpb24uCisg
ICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6
IEFkZGVkIGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhZ0VuZGVkKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDExLTAxLTE5ICBBbGV4ZXkgUHJvc2t1cnlh
a292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBlcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFzdGVi
b2FyZFR5cGVzX2gKKyNkZWZpbmUgUGFzdGVib2FyZFR5cGVzX2gKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFBhc3RlYm9hcmRUeXBlcyB7CitwdWJsaWM6CisgICAgc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5cGU7CisgICAgc3RhdGljIE5TU3RyaW5nICog
Y29uc3QgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlOworICAgIHN0YXRpYyBOU1N0cmluZyAq
IGNvbnN0IFdlYlVSTFBib2FyZFR5cGU7CisgICAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2Vi
VVJMTmFtZVBib2FyZFR5cGU7CisgICAgCisgICAgc3RhdGljIE5TQXJyYXkgKmZvckVkaXRpbmco
KTsKKyAgICBzdGF0aWMgTlNBcnJheSAqZm9yVVJMKCk7CisgICAgc3RhdGljIE5TQXJyYXkgKmZv
ckltYWdlcygpOworICAgIHN0YXRpYyBOU0FycmF5ICpmb3JJbWFnZXNXaXRoQXJjaGl2ZSgpOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYXN0ZWJvYXJkVHlwZXNf
aApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9QYXN0ZWJvYXJkVHlwZXMubW0J
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Bhc3RlYm9hcmRUeXBl
cy5tbQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQg
IlBhc3RlYm9hcmRUeXBlcy5oIgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworTlNTdHJpbmcgKiBjb25zdCBQYXN0ZWJvYXJkVHlwZXM6OldlYkFyY2hp
dmVQYm9hcmRUeXBlID0gQCJBcHBsZSBXZWIgQXJjaGl2ZSBwYXN0ZWJvYXJkIHR5cGUiOworTlNT
dHJpbmcgKiBjb25zdCBQYXN0ZWJvYXJkVHlwZXM6OldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlw
ZSA9IEAiV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlIjsKK05TU3RyaW5nICogY29uc3QgUGFz
dGVib2FyZFR5cGVzOjpXZWJVUkxQYm9hcmRUeXBlID0gQCJwdWJsaWMudXJsIjsKK05TU3RyaW5n
ICogY29uc3QgUGFzdGVib2FyZFR5cGVzOjpXZWJVUkxOYW1lUGJvYXJkVHlwZSA9IEAicHVibGlj
LnVybC1uYW1lIjsKKworTlNBcnJheSogUGFzdGVib2FyZFR5cGVzOjpmb3JFZGl0aW5nKCkKK3sK
KyAgICBzdGF0aWMgTlNBcnJheSAqdHlwZXMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldl
YkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hUTUxQYm9hcmRUeXBlLCBOU0ZpbGVuYW1lc1Bib2FyZFR5
cGUsIE5TVElGRlBib2FyZFR5cGUsIE5TUERGUGJvYXJkVHlwZSwKKyNpZiBkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgICAgIE5T
UElDVFBib2FyZFR5cGUsCisjZW5kaWYKKyAgICAgICAgTlNVUkxQYm9hcmRUeXBlLCBOU1JURkRQ
Ym9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwgTlNDb2xvclBi
b2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07CisgICAgQ0ZSZXRhaW4odHlwZXMpOworICAgIHJl
dHVybiB0eXBlczsKK30KKworTlNBcnJheSogUGFzdGVib2FyZFR5cGVzOjpmb3JVUkwoKQorewor
ICAgIHN0YXRpYyBOU0FycmF5ICp0eXBlcyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6V2Vi
VVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2FyZFR5cGUsIFdlYlVSTFBib2FyZFR5
cGUsICBXZWJVUkxOYW1lUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBOU0ZpbGVuYW1l
c1Bib2FyZFR5cGUsIG5pbF07CisgICAgQ0ZSZXRhaW4odHlwZXMpOworICAgIHJldHVybiB0eXBl
czsKK30KKworTlNBcnJheSogUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXMoKQoreworICAgIHN0
YXRpYyBOU0FycmF5ICp0eXBlcyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6TlNUSUZGUGJv
YXJkVHlwZSwgV2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlLCBOU1VSTFBib2FyZFR5cGUsIFdl
YlVSTFBib2FyZFR5cGUsIFdlYlVSTE5hbWVQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUs
IG5pbF07CisgICAgQ0ZSZXRhaW4odHlwZXMpOworICAgIHJldHVybiB0eXBlczsKK30KKworTlNB
cnJheSogUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXNXaXRoQXJjaGl2ZSgpCit7CisgICAgc3Rh
dGljIE5TQXJyYXkgKnR5cGVzID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpOU1RJRkZQYm9h
cmRUeXBlLCBXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUsIE5TVVJMUGJvYXJkVHlwZSwgV2Vi
VVJMUGJvYXJkVHlwZSwgV2ViVVJMTmFtZVBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwg
TlNSVEZEUGJvYXJkVHlwZSwgV2ViQXJjaGl2ZVBib2FyZFR5cGUsIG5pbF07CisgICAgQ0ZSZXRh
aW4odHlwZXMpOworICAgIHJldHVybiB0eXBlczsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA3
NjE3NikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUGFnZUNsaWVudF9oCiAjZGVmaW5lIFBh
Z2VDbGllbnRfaAogCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2Vi
UGFnZVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUG9wdXBNZW51UHJveHkuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgpAQCAtOTgsNyArOTksOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0Vu
YWJsZWQsIGludCBzdGF0ZSkgPSAwOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZv
aWQgYWNjZXNzaWJpbGl0eUNoaWxkVG9rZW5SZWNlaXZlZChjb25zdCBDb3JlSVBDOjpEYXRhUmVm
ZXJlbmNlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBpbnRlcmNlcHRLZXlFdmVudChjb25zdCBO
YXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4m
LCB1aW50MzJfdCwgdWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGlu
ZT4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGludGVyY2VwdEtleUV2ZW50KGNvbnN0IE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29t
bWFuZE5hbWUsIHVpbnQzMl90IHNlbGVjdGlvblN0YXJ0LCB1aW50MzJfdCBzZWxlY3Rpb25FbmQs
IFZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBj
bGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW1hZ2VTaXplLCBQYXNzUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcpID0gMDsKICNl
bmRpZgogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRpb25TZWxl
Y3Rpb25DaGFuZ2VkKGJvb2wpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiA3NjE3NikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTcsNiArNjE3LDI0IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpkaWRQZXJmb3JtRHJhZ0NvbnRyb2wKICAgICBtX2N1cnJlbnRE
cmFnT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4ocmVzdWx0T3BlcmF0aW9u
KTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXREcmFnSW1h
Z2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBkcmFnSW1hZ2VIYW5kbGUs
IGJvb2wgaXNMaW5rRHJhZykKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1h
Z2UgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShpbWFnZVNpemUsIGRyYWdJbWFnZUhhbmRsZSk7
CisgICAgaWYgKCFkcmFnSW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3BhZ2VD
bGllbnQtPnNldERyYWdJbWFnZShjbGllbnRQb3NpdGlvbiwgaW1hZ2VTaXplLCBkcmFnSW1hZ2Uu
cmVsZWFzZSgpLCBpc0xpbmtEcmFnKTsKK30KKyNlbmRpZgorCit2b2lkIFdlYlBhZ2VQcm94eTo6
ZHJhZ0VuZGVkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pCit7
CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwcm9jZXNzKCktPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRyYWdFbmRlZChjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9z
aXRpb24sIG9wZXJhdGlvbiksIG1fcGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6Omhh
bmRsZU1vdXNlRXZlbnQoY29uc3QgV2ViTW91c2VFdmVudCYgZXZlbnQpCiB7CiAgICAgaWYgKCFp
c1ZhbGlkKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShy
ZXZpc2lvbiA3NjE3NikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4NiwxMCBAQCBwdWJsaWM6CiAgICAgLy8gRHJh
ZyBhbmQgZHJvcCBzdXBwb3J0LgogICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9u
KERyYWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmluZyYp
OwogICAgIHZvaWQgZGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IHJlc3Vs
dE9wZXJhdGlvbik7Ci0KKyAgICB2b2lkIGRyYWdFbmRlZChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlv
biwgdWludDY0X3Qgb3BlcmF0aW9uKTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBzZXRE
cmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBpbWFnZVNpemUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBk
cmFnSW1hZ2VIYW5kbGUsIGJvb2wgaXNMaW5rRHJhZyk7CisjZW5kaWYKICAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3Vt
ZW50RGVjb2RlciosIENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlz
aW9uIDc2MTc2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNz
YWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTg5LDQgKzE4OSw3IEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2VQcm94eSB7CiAgICAgCiAgICAgIyBEcmFnIGFuZCBkcm9wLgogICAgIERpZFBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCByZXN1bHRPcGVyYXRpb24pCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIFNldERyYWdJbWFnZShXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlv
biwgV2ViQ29yZTo6SW50U2l6ZSBpbWFnZVNpemUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5k
bGUgZHJhZ0ltYWdlSGFuZGxlLCBib29sIGxpbmtEcmFnKQorI2VuZGlmCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJl
dmlzaW9uIDc2MTc2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRFZGl0Q29tbWFuZFN0YXRlKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFi
bGVkLCBpbnQgc3RhdGUpOwogICAgIHZpcnR1YWwgdm9pZCBpbnRlcmNlcHRLZXlFdmVudChjb25z
dCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNz
Q29tbWFuZD4mIGNvbW1hbmROYW1lLCB1aW50MzJfdCBzZWxlY3Rpb25TdGFydCwgdWludDMyX3Qg
c2VsZWN0aW9uRW5kLCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+JiB1bmRl
cmxpbmVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW1hZ2VTaXpl
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcp
OwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3BhY2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJl
Y3QgY29udmVydFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwu
bW0JKHJldmlzaW9uIDc2MTc2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMv
UGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBv
cnQgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9Gb3VuZGF0aW9uRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0
IDx3dGYvUGFzc093blB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMjc4
LDYgKzI3OSwxNCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjppbnRlcmNlcHRLZXlFdmVudChjCiAg
ICAgW21fd2tWaWV3IF9nZXRUZXh0SW5wdXRTdGF0ZTpzZWxlY3Rpb25TdGFydCBzZWxlY3Rpb25F
bmQ6c2VsZWN0aW9uRW5kIHVuZGVybGluZXM6dW5kZXJsaW5lc107CiB9CiAKK3ZvaWQgUGFnZUNs
aWVudEltcGw6OnNldERyYWdJbWFnZShjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNv
bnN0IEludFNpemUmIGltYWdlU2l6ZSwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJ
bWFnZSwgYm9vbCBpc0xpbmtEcmFnKQoreworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdy
YXBoaWNzQ29udGV4dCA9IGRyYWdJbWFnZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAg
UmV0YWluUHRyPE5TSW1hZ2U+IGRyYWdOU0ltYWdlID0gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdp
dGhDR0ltYWdlOkNHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGdyYXBoaWNzQ29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCkpIHNpemU6aW1hZ2VTaXplXSBhdXRvcmVsZWFzZV07CisgICAgW2RyYWdO
U0ltYWdlLmdldCgpIHNldEZsaXBwZWQ6WUVTXTsKKyAgICBbbV93a1ZpZXcgX3NldERyYWdJbWFn
ZTpkcmFnTlNJbWFnZS5nZXQoKSBhdDpjbGllbnRQb3NpdGlvbiBsaW5rRHJhZzppc0xpbmtEcmFn
XTsKK30KKyAgICAKIEZsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6Y29udmVydFRvRGV2aWNlU3Bh
Y2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIHJldHVybiBbbV93a1ZpZXcgX2NvbnZl
cnRUb0RldmljZVNwYWNlOnJlY3RdOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gNzYxNzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAK
ICNpbXBvcnQgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbXBvcnQgIlBERlZpZXdDb250
cm9sbGVyLmgiCiAjaW1wb3J0ICJQYWdlQ2xpZW50SW1wbC5oIgorI2ltcG9ydCAiUGFzdGVib2Fy
ZFR5cGVzLmgiCiAjaW1wb3J0ICJQcmludEluZm8uaCIKICNpbXBvcnQgIlJ1bkxvb3AuaCIKICNp
bXBvcnQgIlRleHRDaGVja2VyLmgiCkBAIC0xMzgsNiArMTM5LDkgQEAgQGludGVyZmFjZSBXS1Zp
ZXdEYXRhIDogTlNPYmplY3QgewogCiAgICAgYm9vbCBfaW5CZWNvbWVGaXJzdFJlc3BvbmRlcjsK
ICAgICBib29sIF9pblJlc2lnbkZpcnN0UmVzcG9uZGVyOworICAgIE5TRXZlbnQgKl9tb3VzZURv
d25FdmVudDsKKyAgICBCT09MIF9pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50czsKKyAgICBCT09M
IF9kcmFnSGFzU3RhcnRlZDsKIH0KIEBlbmQKIApAQCAtMTk4LDIxICsyMDIsMTAgQEAgLSAoaWQp
aW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGNvbnRleAogICAgIHJldHVybiBbc2VsZiBpbml0
V2l0aEZyYW1lOmZyYW1lIGNvbnRleHRSZWY6Y29udGV4dFJlZiBwYWdlR3JvdXBSZWY6bmlsXTsK
IH0KIAotc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViQXJjaGl2ZVBib2FyZFR5cGUgPSBAIkFw
cGxlIFdlYiBBcmNoaXZlIHBhc3RlYm9hcmQgdHlwZSI7Ci1zdGF0aWMgTlNTdHJpbmcgKiBjb25z
dCBXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGUgPSBAIldlYlVSTHNXaXRoVGl0bGVzUGJvYXJk
VHlwZSI7Ci1zdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJVUkxQYm9hcmRUeXBlID0gQCJwdWJs
aWMudXJsIjsKLXN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYlVSTE5hbWVQYm9hcmRUeXBlID0g
QCJwdWJsaWMudXJsLW5hbWUiOwotCiAtICh2b2lkKV9yZWdpc3RlckRyYWdnZWRUeXBlcwogewot
ICAgIE5TQXJyYXkgKmVkaXRhYmxlVHlwZXMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldl
YkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hUTUxQYm9hcmRUeXBlLCBOU0ZpbGVuYW1lc1Bib2FyZFR5
cGUsIE5TVElGRlBib2FyZFR5cGUsIE5TUERGUGJvYXJkVHlwZSwKLSNpZiBkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgICAgIE5T
UElDVFBib2FyZFR5cGUsCi0jZW5kaWYKLSAgICAgICAgTlNVUkxQYm9hcmRUeXBlLCBOU1JURkRQ
Ym9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwgTlNDb2xvclBi
b2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07Ci0gICAgTlNBcnJheSAqVVJMVHlwZXMgPSBbTlNB
cnJheSBhcnJheVdpdGhPYmplY3RzOldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZSwgTlNVUkxQ
Ym9hcmRUeXBlLCBXZWJVUkxQYm9hcmRUeXBlLCAgV2ViVVJMTmFtZVBib2FyZFR5cGUsIE5TU3Ry
aW5nUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9hcmRUeXBlLCBuaWxdOwotICAgIE5TTXV0YWJs
ZVNldCAqdHlwZXMgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdFdpdGhBcnJheTplZGl0YWJs
ZVR5cGVzXTsKLSAgICBbdHlwZXMgYWRkT2JqZWN0c0Zyb21BcnJheTpVUkxUeXBlc107CisgICAg
TlNNdXRhYmxlU2V0ICp0eXBlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0V2l0aEFycmF5
OlBhc3RlYm9hcmRUeXBlczo6Zm9yRWRpdGluZygpXTsKKyAgICBbdHlwZXMgYWRkT2JqZWN0c0Zy
b21BcnJheTpQYXN0ZWJvYXJkVHlwZXM6OmZvclVSTCgpXTsKICAgICBbc2VsZiByZWdpc3RlckZv
ckRyYWdnZWRUeXBlczpbdHlwZXMgYWxsT2JqZWN0c11dOwogICAgIFt0eXBlcyByZWxlYXNlXTsK
IH0KQEAgLTIzOCw2ICsyMzEsOCBAQCAtIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUg
Y29udGV4CiAgICAgX2RhdGEtPl9wYWdlQ2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZShz
ZWxmKTsKICAgICBfZGF0YS0+X3BhZ2UgPSB0b0ltcGwoY29udGV4dFJlZiktPmNyZWF0ZVdlYlBh
Z2UoX2RhdGEtPl9wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CiAgICAg
X2RhdGEtPl9wYWdlLT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIF9kYXRhLT5fbW91c2VEb3du
RXZlbnQgPSBuaWw7CisgICAgX2RhdGEtPl9pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IE5P
OwogCiAgICAgW3NlbGYgX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzXTsKIApAQCAtNzMyLDYgKzcyNywx
NyBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAqCiAgICAgcmV0dXJu
IFlFUzsKIH0KIAorLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudAor
eworICAgIEFTU0VSVCghZXZlbnQgfHwgW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93biB8
fCBbZXZlbnQgdHlwZV0gPT0gTlNSaWdodE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNP
dGhlck1vdXNlRG93bik7CisgICAgCisgICAgaWYgKGV2ZW50ID09IF9kYXRhLT5fbW91c2VEb3du
RXZlbnQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBbX2RhdGEtPl9tb3VzZURvd25FdmVu
dCByZWxlYXNlXTsKKyAgICBfZGF0YS0+X21vdXNlRG93bkV2ZW50ID0gW2V2ZW50IHJldGFpbl07
Cit9CisKICNkZWZpbmUgRVZFTlRfSEFORExFUihTZWxlY3RvciwgVHlwZSkgXAogICAgIC0gKHZv
aWQpU2VsZWN0b3I6KE5TRXZlbnQgKil0aGVFdmVudCBcCiAgICAgeyBcCkBAIC03NTQsMjEgKzc2
MCwzNSBAQCBFVkVOVF9IQU5ETEVSKHNjcm9sbFdoZWVsLCBXaGVlbCkKIAogI3VuZGVmIEVWRU5U
X0hBTkRMRVIKIAotI2RlZmluZSBNT1VTRV9FVkVOVF9IQU5ETEVSKFNlbGVjdG9yKSBcCi0gICAg
LSAodm9pZClTZWxlY3RvcjooTlNFdmVudCAqKXRoZUV2ZW50IFwKLSAgICB7IFwKLSAgICAgICAg
TlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3Vy
cmVudElucHV0TWFuYWdlcl07IFwKLSAgICAgICAgaWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdh
bnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91
c2VFdmVudDp0aGVFdmVudF0pIFwKLSAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICBXZWJN
b3VzZUV2ZW50IHdlYkV2ZW50ID0gV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJNb3VzZUV2ZW50
KHRoZUV2ZW50LCBzZWxmKTsgXAotICAgICAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZU1vdXNlRXZl
bnQod2ViRXZlbnQpOyBcCi0gICAgfQorLSAodm9pZClfbW91c2VIYW5kbGVyOihOU0V2ZW50ICop
ZXZlbnQKK3sKKyAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lu
cHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKKyAgICBpZiAoW2N1cnJlbnRJbnB1dE1h
bmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBo
YW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYk1vdXNlRXZl
bnQgd2ViRXZlbnQgPSBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYk1vdXNlRXZlbnQoZXZlbnQs
IHNlbGYpOworICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlTW91c2VFdmVudCh3ZWJFdmVudCk7Cit9
CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBbc2VsZiBfc2V0
TW91c2VEb3duRXZlbnQ6ZXZlbnRdOworICAgIF9kYXRhLT5faWdub3JpbmdNb3VzZURyYWdnZWRF
dmVudHMgPSBOTzsKKyAgICBfZGF0YS0+X2RyYWdIYXNTdGFydGVkID0gTk87CisgICAgW3NlbGYg
X21vdXNlSGFuZGxlcjpldmVudF07Cit9CiAKLU1PVVNFX0VWRU5UX0hBTkRMRVIobW91c2VEb3du
KQotTU9VU0VfRVZFTlRfSEFORExFUihtb3VzZURyYWdnZWQpCi1NT1VTRV9FVkVOVF9IQU5ETEVS
KG1vdXNlVXApCistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAgIFtzZWxm
IF9zZXRNb3VzZURvd25FdmVudDpuaWxdOworICAgIFtzZWxmIF9tb3VzZUhhbmRsZXI6ZXZlbnRd
OworfQogCi0jdW5kZWYgTU9VU0VfRVZFTlRfSEFORExFUgorLSAodm9pZCltb3VzZURyYWdnZWQ6
KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChfZGF0YS0+X2lnbm9yaW5nTW91c2VEcmFnZ2Vk
RXZlbnRzKQorICAgICAgICByZXR1cm47CisgICAgW3NlbGYgX21vdXNlSGFuZGxlcjpldmVudF07
Cit9CiAKIC0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCiB7CkBAIC0x
MDQyLDYgKzEwNjIsMTcgQEAgLSAoTlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihO
UwogICAgIHJldHVybiByZXN1bHRSZWN0OwogfQogCistICh2b2lkKWRyYWdnZWRJbWFnZTooTlNJ
bWFnZSAqKWFuSW1hZ2UgZW5kZWRBdDooTlNQb2ludClhUG9pbnQgb3BlcmF0aW9uOihOU0RyYWdP
cGVyYXRpb24pb3BlcmF0aW9uCit7CisgICAgTlNQb2ludCB3aW5kb3dJbWFnZUxvYyA9IFtbc2Vs
ZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6YVBvaW50XTsKKyAgICBOU1BvaW50IHdpbmRv
d01vdXNlTG9jID0gd2luZG93SW1hZ2VMb2M7CisgICAKKyAgICAvLyBQcmV2ZW50IHF1ZXVlZCBt
b3VzZURyYWdnZWQgZXZlbnRzIGZyb20gY29taW5nIGFmdGVyIHRoZSBkcmFnIGFuZCBmYWtlIG1v
dXNlVXAgZXZlbnQuCisgICAgX2RhdGEtPl9pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IFlF
UzsKKyAgICAKKyAgICBfZGF0YS0+X3BhZ2UtPmRyYWdFbmRlZChJbnRQb2ludCh3aW5kb3dNb3Vz
ZUxvYyksIGdsb2JhbFBvaW50KHdpbmRvd01vdXNlTG9jLCBbc2VsZiB3aW5kb3ddKSwgb3BlcmF0
aW9uKTsKK30KKwogLSAoRHJhZ0FwcGxpY2F0aW9uRmxhZ3MpYXBwbGljYXRpb25GbGFnczooaWQg
PE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KIHsKICAgICB1aW50MzJfdCBmbGFncyA9IDA7
CkBAIC0xMDYxLDcgKzEwOTIsOCBAQCAtIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdFbnRlcmVk
OihpZCA8CiAgICAgSW50UG9pbnQgY2xpZW50KFtzZWxmIGNvbnZlcnRQb2ludDpbZHJhZ2dpbmdJ
bmZvIGRyYWdnaW5nTG9jYXRpb25dIGZyb21WaWV3Om5pbF0pOwogICAgIEludFBvaW50IGdsb2Jh
bChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5k
b3ddKSk7CiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2Jh
bCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJj
ZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsK
LSAgICAKKworICAgIF9kYXRhLT5fcGFnZS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7CiAgICAgX2Rh
dGEtPl9wYWdlLT5wZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rp
b25FbnRlcmVkLCAmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0g
bmFtZV0pOwogICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25Db3B5OwogfQpAQCAtMTg3MCw0ICsx
OTAyLDIyIEBAIC0gKHZvaWQpX3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3QKICAgICBf
ZGF0YS0+X3BkZlZpZXdDb250cm9sbGVyLT5zZXRab29tRmFjdG9yKHpvb21GYWN0b3IpOwogfQog
CistICh2b2lkKV9zZXREcmFnSW1hZ2U6KE5TSW1hZ2UgKilpbWFnZSBhdDooTlNQb2ludCljbGll
bnRQb2ludCBsaW5rRHJhZzooQk9PTClsaW5rRHJhZworeworICAgIC8vIFdlIG5lZWQgdG8gcHJl
dmVudCByZS1lbnRlcmluZyB0aGlzIGNhbGwgdG8gYXZvaWQgY3Jhc2hpbmcgaW4gQXBwS2l0Lgor
ICAgIC8vIEdpdmVuIHRoZSBhc3luY2hyb25vdXMgbmF0dXJlIG9mIFdlYktpdDIgdGhpcyBjYW4g
bm93IGhhcHBlbi4KKyAgICBpZiAoX2RhdGEtPl9kcmFnSGFzU3RhcnRlZCkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIF9kYXRhLT5fZHJhZ0hhc1N0YXJ0ZWQgPSBZRVM7CisgICAgW3N1cGVy
IGRyYWdJbWFnZTppbWFnZQorICAgICAgICAgICAgICAgICAgYXQ6Y2xpZW50UG9pbnQKKyAgICAg
ICAgICAgICAgb2Zmc2V0Ok5TWmVyb1NpemUKKyAgICAgICAgICAgICAgIGV2ZW50OihsaW5rRHJh
ZykgPyBbTlNBcHAgY3VycmVudEV2ZW50XSA6X2RhdGEtPl9tb3VzZURvd25FdmVudAorICAgICAg
ICAgIHBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNEcmFnUGJv
YXJkXQorICAgICAgICAgICAgICBzb3VyY2U6c2VsZgorICAgICAgICAgICBzbGlkZUJhY2s6WUVT
XTsKKyAgICBfZGF0YS0+X2RyYWdIYXNTdGFydGVkID0gTk87Cit9CisKIEBlbmQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAko
cmV2aXNpb24gNzYxNzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw1ICs2Miw2IEBAIEBpbnRlcmZhY2Ug
V0tWaWV3IChJbnRlcm5hbCkKIC0gKHZvaWQpX2RpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9t
UmVwcmVzZW50YXRpb246KGNvbnN0IENvcmVJUEM6OkRhdGFSZWZlcmVuY2UmKWRhdGFSZWZlcmVu
Y2U7CiAtIChkb3VibGUpX2N1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjsKIC0gKHZvaWQp
X3NldEN1c3RvbVJlcHJlc2VudGF0aW9uWm9vbUZhY3RvcjooZG91YmxlKXpvb21GYWN0b3I7Cist
ICh2b2lkKV9zZXREcmFnSW1hZ2U6KE5TSW1hZ2UgKilpbWFnZSBhdDooTlNQb2ludCljbGllbnRQ
b2ludCBsaW5rRHJhZzooQk9PTClsaW5rRHJhZzsKIAogQGVuZApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzYx
NzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTY2MSw2ICs2NjEsOSBAQAogCQlDMEUzQUE3QzEyMDlFODNDMDBB
NDlEMDEgLyogTW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMEUzQUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmggKi87IH07CiAJCUM1
MTczODgxMTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzUxNzM4ODAxMkRGOEY0RjAw
RUUzRjQ3IC8qIERyYWdDb250cm9sbGVyQWN0aW9uLmggKi87IH07CiAJCUM1MjM3RjYwMTI0NDFD
QTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTIzN0Y1RjEyNDQxQ0EzMDA3ODA0NzIgLyogV2Vi
RWRpdG9yQ2xpZW50TWFjLm1tICovOyB9OworCQlDNTc0QTM3NzEyRTYwOTlEMDAyREZFOTggLyog
V2ViRHJhZ0NsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM1NTRGRkEyMTJFNEU4RUEwMDJGMjJDMCAvKiBXZWJEcmFnQ2xpZW50TWFjLm1t
ICovOyB9OworCQlDNTc0QTU4MTEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU3RjEy
RTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi87IH07CisJCUM1NzRBNTgyMTJF
NjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNTc0QTU4MDEyRTY2NjgxMDAyREZFOTggLyogUGFz
dGVib2FyZFR5cGVzLm1tICovOyB9OwogCQlEM0I5NDg0NjExRkY0QjY1MDAwMzJCMzkgLyogV2Vi
UG9wdXBNZW51LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEQzQjk0ODQyMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwICovOyB9Owog
CQlEM0I5NDg0NzExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0MzExRkY0QjY1MDAwMzJC
MzkgLyogV2ViUG9wdXBNZW51LmggKi87IH07CiAJCUQzQjk0ODQ4MTFGRjRCNjUwMDAzMkIzOSAv
KiBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVw
TWVudS5jcHAgKi87IH07CkBAIC0xNDIxLDYgKzE0MjQsOSBAQAogCQlDMEUzQUE0ODEyMDlFNDUw
MDBBNDlEMDEgLyogTW9kdWxlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gTW9kdWxlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDNTE3
Mzg4MDEyREY4RjRGMDBFRTNGNDcgLyogRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0NvbnRyb2xsZXJBY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzUyMzdGNUYxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRv
ckNsaWVudE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkVkaXRvckNsaWVudE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzU1NEZG
QTIxMkU0RThFQTAwMkYyMkMwIC8qIFdlYkRyYWdDbGllbnRNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJEcmFnQ2xpZW50TWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDNTc0QTU3RjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2Fy
ZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRUeXBl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNTc0QTU4MDEyRTY2NjgxMDAyREZF
OTggLyogUGFzdGVib2FyZFR5cGVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUGFzdGVib2FyZFR5cGVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEM0I5NDg0MjExRkY0QjY1MDAwMzJCMzkgLyogV2ViUG9wdXBNZW51LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBvcHVwTWVudS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1l
bnUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUG9wdXBNZW51Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQjk0ODQ0MTFGRjRCNjUwMDAzMkIzOSAvKiBX
ZWJTZWFyY2hQb3B1cE1lbnUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViU2VhcmNoUG9wdXBNZW51LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIyNjcsNiArMjI3Myw3IEBACiAJCUJDMTExQURFMTEyRjVCOUEwMDMzN0JBQiAvKiBtYWMgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUM1NTRGRkEyMTJF
NEU4RUEwMDJGMjJDMCAvKiBXZWJEcmFnQ2xpZW50TWFjLm1tICovLAogCQkJCTUxMDIxRTlCMTJC
MTY3ODgwMDVDMDMzQyAvKiBXZWJDb250ZXh0TWVudUNsaWVudE1hYy5tbSAqLywKIAkJCQlGNkEy
NUZEODEyQURDNkJEMDBEQzQwQ0MgLyogV2ViRGF0YWJhc2VNYW5hZ2VyTWFjLm1tICovLAogCQkJ
CUM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gKi8sCkBA
IC0yMzIyLDYgKzIzMjksOCBAQAogCQlCQzExMUI1QTExMkY2MjgyMDAzMzdCQUIgLyogbWFjICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlDNTc0QTU3RjEy
RTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLmggKi8sCisJCQkJQzU3NEE1ODAxMkU2
NjY4MTAwMkRGRTk4IC8qIFBhc3RlYm9hcmRUeXBlcy5tbSAqLywKIAkJCQkxQTZGOUZCNjExRTE0
MDg1MDBEQjEzNzEgLyogQ29tbWFuZExpbmVNYWMuY3BwICovLAogCQkJCUMwMkJGRjFEMTI1MTUw
MkUwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tICovLAogCQkJCUJDRjUw
NUU2MTI0MzA0N0IwMDU5NTVBRSAvKiBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mby5tbSAqLywKQEAg
LTMwNTksNiArMzA2OCw3IEBACiAJCQkJMUE2NDI1NjgxMkRFNDJFQzAwQ0FBRTJDIC8qIEJhY2tp
bmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzUxNzM4ODExMkRGOEY0RjAwRUUzRjQ3IC8q
IERyYWdDb250cm9sbGVyQWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUEyRTUxRDEyRTRD
MDVFMDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUM1NzRBNTgx
MTJFNjY2ODEwMDJERkU5OCAvKiBQYXN0ZWJvYXJkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAt
MzUyMCw2ICszNTMwLDggQEAKIAkJCQkxQTY0MjU2OTEyREU0MkVDMDBDQUFFMkMgLyogQmFja2lu
Z1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNjQyOTJEMTJERTVGOTgwMENBQUUyQyAv
KiBCYWNraW5nU3RvcmVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUEyRTUxRTEyRTRDMDVF
MDBCQzQ5NjYgLyogQ0dVdGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQzU3NEEzNzcx
MkU2MDk5RDAwMkRGRTk4IC8qIFdlYkRyYWdDbGllbnRNYWMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlDNTc0QTU4MjEyRTY2NjgxMDAyREZFOTggLyogUGFzdGVib2FyZFR5cGVzLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkRyYWdDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAJKHJldmlzaW9uIDc2MTc2KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBEcmFnU291cmNlQWN0aW9uIFdlYkRyYWdD
bGllbnQ6OmRyYWdTb3VyCiAgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKKyNp
ZiAhUExBVEZPUk0oTUFDKQogdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdl
UmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUq
LCBib29sKQogewogfQpAQCAtNTksNiArNjAsNyBAQCBEcmFnSW1hZ2VSZWYgV2ViRHJhZ0NsaWVu
dDo6Y3JlYXRlRHJhZ0ltCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0K
KyNlbmRpZgogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OmRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkK
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCShyZXZpc2lvbiA3NjE3NikKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw2ICs0OCw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJh
ZyhXZWJDb3JlOjpEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdl
YkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNl
KTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JM
aW5rKFdlYkNvcmU6OktVUkwmLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBXZWJDb3JlOjpGcmFtZSop
OwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVE
cmFnSW1hZ2UoTlNQYXN0ZWJvYXJkKiwgRE9NRWxlbWVudCosIE5TVVJMKiwgTlNTdHJpbmcqLCBX
ZWJDb3JlOjpGcmFtZSopOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVy
RGVzdHJveWVkKCk7CiAKICAgICBXZWJQYWdlKiBtX3BhZ2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YkRyYWdDbGllbnRNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIlBhc3RlYm9hcmRUeXBlcy5o
IgorI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW1wb3J0ICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKKyNpbXBvcnQgIldlYkRyYWdDbGllbnQuaCIKKyNpbXBvcnQgIldlYlBhZ2UuaCIK
KyNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0IDxXZWJDb3JlL0NhY2hl
ZEltYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RPTVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvRE9NRWxlbWVudEludGVybmFsLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTGVn
YWN5V2ViQXJjaGl2ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJJbWFnZS5oPgorI2ltcG9y
dCA8V2ViQ29yZS9TdHJpbmdUcnVuY2F0b3IuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXROU1N0cmluZ0V4dHJhcy5oPgorI2ltcG9ydCA8V2Vi
S2l0L1dlYk5TVVJMRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY29uc3QgZmxvYXQgRHJhZ0xhYmVsQm9yZGVyWCA9IDQ7CisvL0tl
ZXAgYm9yZGVyX3kgaW4gc3luY2ggd2l0aCBEcmFnQ29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJ
bnNldAorY29uc3QgZmxvYXQgRHJhZ0xhYmVsQm9yZGVyWSA9IDI7Citjb25zdCBmbG9hdCBEcmFn
TGFiZWxSYWRpdXMgPSA1OworY29uc3QgZmxvYXQgTGFiZWxCb3JkZXJZT2Zmc2V0ID0gMjsKKwor
Y29uc3QgZmxvYXQgTWluRHJhZ0xhYmVsV2lkdGhCZWZvcmVDbGlwID0gMTIwOworY29uc3QgZmxv
YXQgTWF4RHJhZ0xhYmVsV2lkdGggPSAzMjA7CisKK2NvbnN0IGZsb2F0IERyYWdMaW5rTGFiZWxG
b250c2l6ZSA9IDExOworY29uc3QgZmxvYXQgRHJhZ0xpbmtVcmxGb250U2l6ZSA9IDEwOworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIEZvbnQmIGZvbnRGcm9tTlNGb250KE5T
Rm9udCAqZm9udCkKK3sKKyAgICBzdGF0aWMgTlNGb250ICpjdXJyZW50Rm9udDsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKEZvbnQsIGN1cnJlbnRSZW5kZXJlciwgKCkpOworICAgIAorICAgIGlm
IChbZm9udCBpc0VxdWFsOmN1cnJlbnRGb250XSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRSZW5k
ZXJlcjsKKyAgICBpZiAoY3VycmVudEZvbnQpCisgICAgICAgIENGUmVsZWFzZShjdXJyZW50Rm9u
dCk7CisgICAgY3VycmVudEZvbnQgPSBmb250OworICAgIENGUmV0YWluKGN1cnJlbnRGb250KTsK
KyAgICBjdXJyZW50UmVuZGVyZXIgPSBGb250KEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgW2ZvbnQg
cG9pbnRTaXplXSksICFbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdp
bmdUb1NjcmVlbl0pOworICAgIHJldHVybiBjdXJyZW50UmVuZGVyZXI7Cit9CisgICAgCit2b2lk
IFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJ
bnRQb2ludCYgYXQsIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkKiBjbGlwYm9h
cmQsIEZyYW1lKiBmcmFtZSwgYm9vbCBsaW5rRHJhZykKK3sKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKGNsaXBib2FyZCk7CisgICAgCisgICAgTlNJbWFnZSAq
ZHJhZ05TSW1hZ2UgPSBkcmFnSW1hZ2UuZ2V0KCk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1h
cD4gZHJhZ1NoYXJlYWJsZUltYWdlID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUo
SW50U2l6ZShbZHJhZ05TSW1hZ2Ugc2l6ZV0pKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0
PiBncmFwaGljc0NvbnRleHQgPSBkcmFnU2hhcmVhYmxlSW1hZ2UtPmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dCgpOworCisgICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKKyAg
ICBOU0dyYXBoaWNzQ29udGV4dCogYml0bWFwQ29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBn
cmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCkgZmxpcHBlZDpZRVNdOworICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50
Q29udGV4dDogYml0bWFwQ29udGV4dF07CisgICAgCisgICAgW2RyYWdOU0ltYWdlIGRyYXdJblJl
Y3Q6TlNNYWtlUmVjdCgwLCAwLCBbZHJhZ05TSW1hZ2Ugc2l6ZV0ud2lkdGggLCBbZHJhZ05TSW1h
Z2Ugc2l6ZV0uaGVpZ2h0KSBmcm9tUmVjdDpOU1plcm9SZWN0IG9wZXJhdGlvbjpOU0NvbXBvc2l0
ZVNvdXJjZU92ZXIgZnJhY3Rpb246MV07CisgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVH
cmFwaGljc1N0YXRlXTsKKyAKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CisgICAg
aWYgKCFkcmFnU2hhcmVhYmxlSW1hZ2UtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQorICAgICAgICBy
ZXR1cm47CisgICAgSW50UG9pbnQgY2xpZW50UG9pbnQoYXQpOworICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXREcmFnSW1hZ2UoY2xpZW50UG9pbnQsIEludFNpemUo
W2RyYWdOU0ltYWdlIHNpemVdKSwgaGFuZGxlLCBsaW5rRHJhZykpOworfQorCitEcmFnSW1hZ2VS
ZWYgV2ViRHJhZ0NsaWVudDo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayhLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgdGl0bGUsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIE5TU3RyaW5nICpsYWJlbCA9IDA7CisgICAgaWYgKCF0aXRsZS5p
c0VtcHR5KCkpCisgICAgICAgIGxhYmVsID0gdGl0bGU7CisgICAgTlNVUkwgKmNvY29hVVJMID0g
dXJsOworICAgIE5TU3RyaW5nICp1cmxTdHJpbmcgPSBbY29jb2FVUkwgX3dlYl91c2VyVmlzaWJs
ZVN0cmluZ107CisgICAgCisgICAgQk9PTCBkcmF3VVJMU3RyaW5nID0gWUVTOworICAgIEJPT0wg
Y2xpcFVSTFN0cmluZyA9IE5POworICAgIEJPT0wgY2xpcExhYmVsU3RyaW5nID0gTk87CisgICAg
CisgICAgaWYgKCFsYWJlbCkgeworICAgICAgICBkcmF3VVJMU3RyaW5nID0gTk87CisgICAgICAg
IGxhYmVsID0gdXJsU3RyaW5nOworICAgIH0KKyAgICAKKyAgICBOU0ZvbnQgKmxhYmVsRm9udCA9
IFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6W05TRm9udCBz
eXN0ZW1Gb250T2ZTaXplOkRyYWdMaW5rTGFiZWxGb250c2l6ZV0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9IYXZlVHJhaXQ6TlNC
b2xkRm9udE1hc2tdOworICAgIE5TRm9udCAqdXJsRm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9m
U2l6ZTpEcmFnTGlua1VybEZvbnRTaXplXTsKKyAgICBOU1NpemUgbGFiZWxTaXplOworICAgIGxh
YmVsU2l6ZS53aWR0aCA9IFtsYWJlbCBfd2ViX3dpZHRoV2l0aEZvbnQ6IGxhYmVsRm9udF07Cisg
ICAgbGFiZWxTaXplLmhlaWdodCA9IFtsYWJlbEZvbnQgYXNjZW5kZXJdIC0gW2xhYmVsRm9udCBk
ZXNjZW5kZXJdOworICAgIGlmIChsYWJlbFNpemUud2lkdGggPiBNYXhEcmFnTGFiZWxXaWR0aCl7
CisgICAgICAgIGxhYmVsU2l6ZS53aWR0aCA9IE1heERyYWdMYWJlbFdpZHRoOworICAgICAgICBj
bGlwTGFiZWxTdHJpbmcgPSBZRVM7CisgICAgfQorICAgIAorICAgIE5TU2l6ZSBpbWFnZVNpemU7
CisgICAgaW1hZ2VTaXplLndpZHRoID0gbGFiZWxTaXplLndpZHRoICsgRHJhZ0xhYmVsQm9yZGVy
WCAqIDI7CisgICAgaW1hZ2VTaXplLmhlaWdodCA9IGxhYmVsU2l6ZS5oZWlnaHQgKyBEcmFnTGFi
ZWxCb3JkZXJZICogMjsKKyAgICBpZiAoZHJhd1VSTFN0cmluZykgeworICAgICAgICBOU1NpemUg
dXJsU3RyaW5nU2l6ZTsKKyAgICAgICAgdXJsU3RyaW5nU2l6ZS53aWR0aCA9IFt1cmxTdHJpbmcg
X3dlYl93aWR0aFdpdGhGb250OiB1cmxGb250XTsKKyAgICAgICAgdXJsU3RyaW5nU2l6ZS5oZWln
aHQgPSBbdXJsRm9udCBhc2NlbmRlcl0gLSBbdXJsRm9udCBkZXNjZW5kZXJdOworICAgICAgICBp
bWFnZVNpemUuaGVpZ2h0ICs9IHVybFN0cmluZ1NpemUuaGVpZ2h0OworICAgICAgICBpZiAodXJs
U3RyaW5nU2l6ZS53aWR0aCA+IE1heERyYWdMYWJlbFdpZHRoKSB7CisgICAgICAgICAgICBpbWFn
ZVNpemUud2lkdGggPSBtYXgoTWF4RHJhZ0xhYmVsV2lkdGggKyBEcmFnTGFiZWxCb3JkZXJZICog
MiwgTWluRHJhZ0xhYmVsV2lkdGhCZWZvcmVDbGlwKTsKKyAgICAgICAgICAgIGNsaXBVUkxTdHJp
bmcgPSBZRVM7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW1hZ2VTaXplLndpZHRoID0g
bWF4KGxhYmVsU2l6ZS53aWR0aCArIERyYWdMYWJlbEJvcmRlclggKiAyLCB1cmxTdHJpbmdTaXpl
LndpZHRoICsgRHJhZ0xhYmVsQm9yZGVyWCAqIDIpOworICAgIH0KKyAgICBOU0ltYWdlICpkcmFn
SW1hZ2UgPSBbW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6IGltYWdlU2l6ZV0gYXV0b3Jl
bGVhc2VdOworICAgIFtkcmFnSW1hZ2UgbG9ja0ZvY3VzXTsKKyAgICAKKyAgICBbW05TQ29sb3Ig
Y29sb3JXaXRoRGV2aWNlUmVkOiAwLjdmIGdyZWVuOiAwLjdmIGJsdWU6IDAuN2YgYWxwaGE6IDAu
OGZdIHNldF07CisgICAgCisgICAgLy8gRHJhZyBhIHJlY3RhbmdsZSB3aXRoIHJvdW5kZWQgY29y
bmVycworICAgIE5TQmV6aWVyUGF0aCAqcGF0aCA9IFtOU0JlemllclBhdGggYmV6aWVyUGF0aF07
CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAs
IDAsIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKKyAgICBbcGF0
aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoMCwgaW1hZ2VTaXpl
LmhlaWdodCAtIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdM
YWJlbFJhZGl1cyAqIDIpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJl
Y3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRHJhZ0xhYmVsUmFkaXVzICogMiwgaW1h
Z2VTaXplLmhlaWdodCAtIERyYWdMYWJlbFJhZGl1cyAqIDIsIERyYWdMYWJlbFJhZGl1cyAqIDIs
IERyYWdMYWJlbFJhZGl1cyAqIDIpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92
YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRHJhZ0xhYmVsUmFkaXVzICog
MiwgMCwgRHJhZ0xhYmVsUmFkaXVzICogMiwgRHJhZ0xhYmVsUmFkaXVzICogMildOworICAgIAor
ICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdChEcmFnTGFiZWxS
YWRpdXMsIDAsIGltYWdlU2l6ZS53aWR0aCAtIERyYWdMYWJlbFJhZGl1cyAqIDIsIGltYWdlU2l6
ZS5oZWlnaHQpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJl
Y3QoMCwgRHJhZ0xhYmVsUmFkaXVzLCBEcmFnTGFiZWxSYWRpdXMgKyAxMCwgaW1hZ2VTaXplLmhl
aWdodCAtIDIgKiBEcmFnTGFiZWxSYWRpdXMpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRo
V2l0aFJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRHJhZ0xhYmVsUmFkaXVzIC0g
MjAsIERyYWdMYWJlbFJhZGl1cywgRHJhZ0xhYmVsUmFkaXVzICsgMjAsIGltYWdlU2l6ZS5oZWln
aHQgLSAyICogRHJhZ0xhYmVsUmFkaXVzKV07CisgICAgW3BhdGggZmlsbF07CisgICAgCisgICAg
TlNDb2xvciAqdG9wQ29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZTowLjBmIGFs
cGhhOjAuNzVmXTsKKyAgICBOU0NvbG9yICpib3R0b21Db2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0
aERldmljZVdoaXRlOjEuMGYgYWxwaGE6MC41Zl07CisgICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsK
KyAgICAgICAgaWYgKGNsaXBVUkxTdHJpbmcpCisgICAgICAgICAgICAvL3VybFN0cmluZyA9IFtX
ZWJTdHJpbmdUcnVuY2F0b3IgY2VudGVyVHJ1bmNhdGVTdHJpbmc6IHVybFN0cmluZyB0b1dpZHRo
OmltYWdlU2l6ZS53aWR0aCAtIChEcmFnTGFiZWxCb3JkZXJYICogMikgd2l0aEZvbnQ6dXJsRm9u
dF07CisgICAgICAgICAgICB1cmxTdHJpbmcgPSBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5j
YXRlKHVybFN0cmluZywgaW1hZ2VTaXplLndpZHRoIC0gKERyYWdMYWJlbEJvcmRlclggKiAyKSwg
Zm9udEZyb21OU0ZvbnQodXJsRm9udCkpOyAgICAgICAKKyAgICAgICAgW3VybFN0cmluZyBfd2Vi
X2RyYXdEb3VibGVkQXRQb2ludDpOU01ha2VQb2ludChEcmFnTGFiZWxCb3JkZXJYLCBEcmFnTGFi
ZWxCb3JkZXJZIC0gW3VybEZvbnQgZGVzY2VuZGVyXSkgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aXRoVG9wQ29sb3I6dG9wQ29sb3IgYm90dG9tQ29sb3I6Ym90dG9tQ29sb3IgZm9u
dDp1cmxGb250XTsKKyAgICB9CisgICAgCisgICAgaWYgKGNsaXBMYWJlbFN0cmluZykKKyAgICAg
ICAgLy9sYWJlbCA9IFtXZWJTdHJpbmdUcnVuY2F0b3IgcmlnaHRUcnVuY2F0ZVN0cmluZzogbGFi
ZWwgdG9XaWR0aDppbWFnZVNpemUud2lkdGggLSAoRHJhZ0xhYmVsQm9yZGVyWCAqIDIpIHdpdGhG
b250OmxhYmVsRm9udF07CisgICAgICAgIGxhYmVsID0gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRy
dW5jYXRlKGxhYmVsLCBpbWFnZVNpemUud2lkdGggLSAoRHJhZ0xhYmVsQm9yZGVyWCAqIDIpLCBm
b250RnJvbU5TRm9udChsYWJlbEZvbnQpKTsKKyAgICBbbGFiZWwgX3dlYl9kcmF3RG91YmxlZEF0
UG9pbnQ6TlNNYWtlUG9pbnQgKERyYWdMYWJlbEJvcmRlclgsIGltYWdlU2l6ZS5oZWlnaHQgLSBM
YWJlbEJvcmRlcllPZmZzZXQgLSBbbGFiZWxGb250IHBvaW50U2l6ZV0pCisgICAgICAgICAgICAg
ICAgICAgICAgd2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRvbUNvbG9yIGZv
bnQ6bGFiZWxGb250XTsKKyAgICAKKyAgICBbZHJhZ0ltYWdlIHVubG9ja0ZvY3VzXTsKKyAgICAK
KyAgICByZXR1cm4gZHJhZ0ltYWdlOworfQorCitzdGF0aWMgdm9pZCB3cml0ZVVSTChOU1Bhc3Rl
Ym9hcmQqIHBhc3RlYm9hcmQsIE5TVVJMKiBVUkwsIE5TU3RyaW5nKiB0aXRsZSwgTlNBcnJheSog
dHlwZXMpCit7CisgICAgQVNTRVJUKFVSTCk7CisgICAgCisgICAgaWYgKCFbdGl0bGUgbGVuZ3Ro
XSkgeworICAgICAgICB0aXRsZSA9IFtbVVJMIHBhdGhdIGxhc3RQYXRoQ29tcG9uZW50XTsKKyAg
ICAgICAgaWYgKCFbdGl0bGUgbGVuZ3RoXSkKKyAgICAgICAgICAgIHRpdGxlID0gW1VSTCBfd2Vi
X3VzZXJWaXNpYmxlU3RyaW5nXTsKKyAgICB9CisgICAgCisgICAgaWYgKFt0eXBlcyBjb250YWlu
c09iamVjdDpOU1VSTFBib2FyZFR5cGVdKQorICAgICAgICBbVVJMIHdyaXRlVG9QYXN0ZWJvYXJk
OnBhc3RlYm9hcmRdOworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6UGFzdGVib2FyZFR5
cGVzOjpXZWJVUkxQYm9hcmRUeXBlXSkKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOltV
UkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ10gZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6Oldl
YlVSTFBib2FyZFR5cGVdOworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6UGFzdGVib2Fy
ZFR5cGVzOjpXZWJVUkxOYW1lUGJvYXJkVHlwZV0pCisgICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0
cmluZzp0aXRsZSBmb3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6V2ViVVJMTmFtZVBib2FyZFR5cGVd
OworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkKKyAg
ICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOltVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ10g
Zm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdOworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdKSB7CisgICAg
ICAgIE5TQXJyYXkqIFVSTHMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6VVJMXTsKKyAgICAg
ICAgdW5zaWduZWQgY291bnQgPSBbVVJMcyBjb3VudF07CisgICAgICAgIAorICAgICAgICBpZiAo
IWNvdW50IHx8IFtwYXN0ZWJvYXJkIGF2YWlsYWJsZVR5cGVGcm9tQXJyYXk6W05TQXJyYXkgYXJy
YXlXaXRoT2JqZWN0OlBhc3RlYm9hcmRUeXBlczo6V2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBl
XV0gPT0gbmlsKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE5TQXJyYXkqIHRpdGxl
cyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDp0aXRsZV07CisgICAgICAgIAorICAgICAgICBp
ZiAoY291bnQgIT0gW3RpdGxlcyBjb3VudF0pCisgICAgICAgICAgICB0aXRsZXMgPSBuaWw7Cisg
ICAgICAgIAorICAgICAgICBOU011dGFibGVBcnJheSogVVJMU3RyaW5ncyA9IFtOU011dGFibGVB
cnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb3VudF07CisgICAgICAgIE5TTXV0YWJsZUFycmF5KiB0
aXRsZXNPckVtcHR5U3RyaW5ncyA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpj
b3VudF07CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyAr
K2luZGV4KSB7CisgICAgICAgICAgICBbVVJMU3RyaW5ncyBhZGRPYmplY3Q6W1tVUkxzIG9iamVj
dEF0SW5kZXg6aW5kZXhdIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddXTsKKyAgICAgICAgICAg
IFt0aXRsZXNPckVtcHR5U3RyaW5ncyBhZGRPYmplY3Q6KHRpdGxlcyA9PSBuaWwpID8gQCIiIDog
W1t0aXRsZXMgb2JqZWN0QXRJbmRleDppbmRleF0gX3dlYmtpdF9zdHJpbmdCeVRyaW1taW5nV2hp
dGVzcGFjZV1dOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbcGFzdGVib2FyZCBzZXRQ
cm9wZXJ0eUxpc3Q6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpVUkxTdHJpbmdzLCB0aXRsZXNP
ckVtcHR5U3RyaW5ncywgbmlsXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6
UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdOworICAgIH0KK30K
KyAgICAKK3N0YXRpYyB2b2lkIHdyaXRlSW1hZ2UoTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBO
U0ltYWdlICppbWFnZSwgRE9NRWxlbWVudCogZWxlbWVudCwgTlNVUkwqIFVSTCwgTlNTdHJpbmcq
IHRpdGxlLCBMZWdhY3lXZWJBcmNoaXZlKiBhcmNoaXZlLCBOU0FycmF5KiB0eXBlcykKK3sKKyAg
ICBBU1NFUlQoaW1hZ2UgfHwgZWxlbWVudCk7CisgICAgQVNTRVJUKFVSTCk7CisgICAgCisgICAg
d3JpdGVVUkwocGFzdGVib2FyZCwgVVJMLCB0aXRsZSwgdHlwZXMpOworICAgIAorICAgIGlmIChb
dHlwZXMgY29udGFpbnNPYmplY3Q6TlNUSUZGUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgLy8gRklY
TUU6IHdlIHNob3VsZCBhZGQgaGFuZGxpbmcgb2YgcHJvbWlzZWQgdHlwZXMuCisgICAgICAgIGlm
IChpbWFnZSkKKyAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6W2ltYWdlIFRJRkZSZXBy
ZXNlbnRhdGlvbl0gZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXTsKKyAgICAgICAgZWxzZSBpZiAo
ZWxlbWVudCkKKyAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6W2VsZW1lbnQgX2ltYWdl
VElGRlJlcHJlc2VudGF0aW9uXSBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOworICAgIH0KKyAg
ICAKKyAgICBpZiAoYXJjaGl2ZSAmJiBbdHlwZXMgY29udGFpbnNPYmplY3Q6UGFzdGVib2FyZFR5
cGVzOjpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pCisgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6
W1soTlNEYXRhICopYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkgcmV0YWlu
XSBhdXRvcmVsZWFzZV0gZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6OldlYkFyY2hpdmVQYm9hcmRU
eXBlXTsKK30KKyAgICAKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlKE5TUGFzdGVib2FyZCogcGFzdGVib2FyZCwgRE9NRWxlbWVudCogZWxlbWVudCwgTlNVUkwq
IFVSTCwgTlNTdHJpbmcqIHRpdGxlLCBXZWJDb3JlOjpGcmFtZSopCit7CisgICAgQVNTRVJUKGVs
ZW1lbnQpOworICAgIEFTU0VSVChwYXN0ZWJvYXJkICYmIHBhc3RlYm9hcmQgPT0gW05TUGFzdGVi
b2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNEcmFnUGJvYXJkXSk7CisgICAgCisgICAgTlNTdHJp
bmcgKmV4dGVuc2lvbiA9IEAiIjsKKyAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNv
cmUoZWxlbWVudCktPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0ltYWdl
KCkpIHsKKyAgICAgICAgICAgIGlmIChDYWNoZWRJbWFnZSogaW1hZ2UgPSB0b1JlbmRlckltYWdl
KHJlbmRlcmVyKS0+Y2FjaGVkSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgIGV4dGVuc2lvbiA9
IGltYWdlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVuc2lvbigpOworICAgICAgICAgICAgICAgIGlm
ICghW2V4dGVuc2lvbiBsZW5ndGhdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgUmVmUHRyPExlZ2FjeVdlYkFy
Y2hpdmU+IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoY29yZShlbGVtZW50KSk7
CisgICAgTlNNdXRhYmxlQXJyYXkgKnR5cGVzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5p
dFdpdGhPYmplY3RzOk5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZSwgbmlsXTsKKyAgICBbdHlwZXMg
YWRkT2JqZWN0c0Zyb21BcnJheTooYXJjaGl2ZSkgPyBQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdl
c1dpdGhBcmNoaXZlKCkgOiBQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcygpXTsKKyAgICBbcGFz
dGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6bmlsXTsgICAgCisgICAgd3JpdGVJbWFn
ZShwYXN0ZWJvYXJkLCBuaWwsIGVsZW1lbnQsIFVSTCwgdGl0bGUsIGFyY2hpdmUuZ2V0KCksIHR5
cGVzKTsKKyAgICBbdHlwZXMgcmVsZWFzZV07CisgICAgCisgICAgTlNBcnJheSAqZXh0ZW5zaW9u
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOmV4dGVuc2lvbiwgbmlsXTsKKyAg
ICBbcGFzdGVib2FyZCBzZXRQcm9wZXJ0eUxpc3Q6ZXh0ZW5zaW9ucyBmb3JUeXBlOk5TRmlsZXNQ
cm9taXNlUGJvYXJkVHlwZV07CisgICAgW2V4dGVuc2lvbnMgcmVsZWFzZV07Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNzYxNzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDksNiArMTMw
OSwyMCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvCiAgICAgfQog
fQogCit2b2lkIFdlYlBhZ2U6OmRyYWdFbmRlZChXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3Np
dGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlv
bikKK3sKKyAgICBJbnRQb2ludCBhZGp1c3RlZENsaWVudFBvc2l0aW9uKGNsaWVudFBvc2l0aW9u
LngoKSArIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ09mZnNldCgpLngoKSwgY2xpZW50
UG9zaXRpb24ueSgpICsgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnT2Zmc2V0KCkueSgp
KTsKKyAgICBJbnRQb2ludCBhZGp1c3RlZEdsb2JhbFBvc2l0aW9uKGdsb2JhbFBvc2l0aW9uLngo
KSArIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ09mZnNldCgpLngoKSwgZ2xvYmFsUG9z
aXRpb24ueSgpICsgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnT2Zmc2V0KCkueSgpKTsK
KyAgICAKKyAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdFbmRlZCgpOworICAgIEZy
YW1lVmlldyogdmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCktPnZpZXcoKTsKKyAgICBpZiAoIXZp
ZXcpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGZha2UgbW9kaWZp
ZXIga2V5cyBoZXJlLCBidXQgdGhleSBzaG91bGQgYmUgcmVhbCBvbmVzIGluc3RlYWQuCisgICAg
UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGFkanVzdGVkQ2xpZW50UG9zaXRpb24sIGFkanVzdGVk
R2xvYmFsUG9zaXRpb24sIExlZnRCdXR0b24sIE1vdXNlRXZlbnRNb3ZlZCwgMCwgZmFsc2UsIGZh
bHNlLCBmYWxzZSwgZmFsc2UsIGN1cnJlbnRUaW1lKCkpOworICAgIG1fcGFnZS0+bWFpbkZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT5kcmFnU291cmNlRW5kZWRBdChldmVudCwgKERyYWdPcGVyYXRp
b24pb3BlcmF0aW9uKTsKK30KKwogV2ViRWRpdENvbW1hbmQqIFdlYlBhZ2U6OndlYkVkaXRDb21t
YW5kKHVpbnQ2NF90IGNvbW1hbmRJRCkKIHsKICAgICByZXR1cm4gbV9lZGl0Q29tbWFuZE1hcC5n
ZXQoY29tbWFuZElEKS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gNzYxNzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNiArMzAwLDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoV2ViQ29yZTo6
RnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFj
dGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBX
ZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VP
cGVyYXRpb25NYXNrLCBjb25zdCBXVEY6OlN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCB1aW50MzJf
dCBmbGFncyk7CisgICAgdm9pZCBkcmFnRW5kZWQoV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9z
aXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRp
b24pOwogCiAgICAgdm9pZCBiZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFBy
aW50SW5mbyYpOwogICAgIHZvaWQgZW5kUHJpbnRpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZp
c2lvbiA3NjE3NikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw3IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2UgewogCiAgICAgIyBEcmFnIGFuZCBkcm9wLgogICAgIFBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0
aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdT
b3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6OlN0cmluZyBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90
IGZsYWdzKQorICAgIERyYWdFbmRlZChXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwg
V2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlvbikKIAog
ICAgICMgUG9wdXAgbWVudS4KICAgICBEaWRDaGFuZ2VTZWxlY3RlZEluZGV4Rm9yQWN0aXZlUG9w
dXBNZW51KGludDMyX3QgbmV3SW5kZXgpOwo=
</data>
<flag name="review"
          id="70931"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>