<?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>136802</bug_id>
          
          <creation_ts>2014-09-13 05:45:28 -0700</creation_ts>
          <short_desc>[GTK] Fix layering violations in PasteboardGtk</short_desc>
          <delta_ts>2014-09-17 00:06:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>21354</blocked>
    
    <blocked>136819</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1035059</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-13 05:45:28 -0700</bug_when>
    <thetext>Fix layering violations in PasteboardGtk and friends</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035060</commentid>
    <comment_count>1</comment_count>
      <attachid>238082</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-13 05:51:48 -0700</bug_when>
    <thetext>Created attachment 238082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035107</commentid>
    <comment_count>2</comment_count>
      <attachid>238082</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-14 12:27:55 -0700</bug_when>
    <thetext>Comment on attachment 238082
Patch

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

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:47
&gt; +static PassRefPtr&lt;DocumentFragment&gt; createFragmentFromPasteBoardData(Pasteboard&amp; pasteboard, Frame&amp; frame, Range&amp; range, bool allowPlainText, bool&amp; chosePlainText)

Pasteboard is one word, not two.

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:57
&gt; +        RefPtr&lt;DocumentFragment&gt; fragment = createFragmentFromMarkup(*frame.document(), dataObject-&gt;markup(), emptyString(), DisallowScriptingAndPluginContent);
&gt; +        if (fragment)

Could bundle that definition into the if statement.

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:67
&gt; +        RefPtr&lt;DocumentFragment&gt; fragment = createFragmentFromText(range, dataObject-&gt;text());
&gt; +        if (fragment)

Could bundle that definition into the if statement.

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:86
&gt; +static bool getImageAndURLForElement(Element&amp; element, RefPtr&lt;Image&gt;&amp; image, URL&amp; url)

This seems like platform independent code. I am surprised to find it in a platform-specific file. Is there some other file with this code that we could share with?

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:92
&gt; +    CachedImage* cachedImage = toRenderImage(renderer)-&gt;cachedImage();

Since we know the renderer is non-null, could use * on it explicitly. The compiler is probably smart enough to optimize out the nil check, but this idiom guarantees there won’t be one:

    toRenderImage(*renderer).cachedImage()

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:100
&gt; +    AtomicString urlString;

Could use const AtomicString* here and avoid copying the attributes and churning the reference count.

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:102
&gt; +        urlString = element.getAttribute(HTMLNames::srcAttr);

fastGetAttribute

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:103
&gt; +    else if (element.hasTagName(SVGNames::imageTag))

Could use isSVGImageElement here.

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:104
&gt; +        urlString = element.getAttribute(XLinkNames::hrefAttr);

fastGetAttribute

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:105
&gt; +    else if (element.hasTagName(HTMLNames::embedTag) || isHTMLObjectElement(element))

Could use isHTMLEmbedElement here.

&gt; Source/WebCore/editing/gtk/EditorGtk.cpp:108
&gt; +    url = urlString.isEmpty() ? URL() : element.document().completeURL(stripLeadingAndTrailingHTMLSpaces(urlString));

Not sure it’s exactly right to special-case empty URLs before stripping the string. Maybe we should check for emptiness after stripping the leading and trailing spaces?

&gt; Source/WebCore/platform/Pasteboard.h:85
&gt; +    GClosure* callback;

I think this may create a problem in the future. It makes PasteboardWebContent not copyable on GTK. Is there a smart pointer we can use here?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:196
&gt; +    PasteboardWebContent pasteboardContent;
&gt; +    pasteboardContent.canSmartCopyOrDelete = false;
&gt; +    pasteboardContent.text = range-&gt;text();
&gt; +    pasteboardContent.markup = createMarkup(*range, nullptr, AnnotateForInterchange, false, ResolveNonLocalURLs);
&gt; +    pasteboardContent.callback = callback;
&gt; +    Pasteboard::createForGlobalSelection()-&gt;write(pasteboardContent);

I’m a little worried by this code. Building a PasteboardWebContent directly seems like a job for a function in the platform directory. Maybe we can find a different good place for this code, and just call it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035204</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-15 03:45:00 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 238082 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238082&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:47
&gt; &gt; +static PassRefPtr&lt;DocumentFragment&gt; createFragmentFromPasteBoardData(Pasteboard&amp; pasteboard, Frame&amp; frame, Range&amp; range, bool allowPlainText, bool&amp; chosePlainText)
&gt; 
&gt; Pasteboard is one word, not two.

Oops

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:57
&gt; &gt; +        RefPtr&lt;DocumentFragment&gt; fragment = createFragmentFromMarkup(*frame.document(), dataObject-&gt;markup(), emptyString(), DisallowScriptingAndPluginContent);
&gt; &gt; +        if (fragment)
&gt; 
&gt; Could bundle that definition into the if statement.

Sure.

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:67
&gt; &gt; +        RefPtr&lt;DocumentFragment&gt; fragment = createFragmentFromText(range, dataObject-&gt;text());
&gt; &gt; +        if (fragment)
&gt; 
&gt; Could bundle that definition into the if statement.

Sure.

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:86
&gt; &gt; +static bool getImageAndURLForElement(Element&amp; element, RefPtr&lt;Image&gt;&amp; image, URL&amp; url)
&gt; 
&gt; This seems like platform independent code. I am surprised to find it in a platform-specific file. Is there some other file with this code that we could share with?

Yes, there&apos;s similar method in EditorMac.mm, getImage() but it only gets the image not the URL. I don&apos;t know exactly why we are not using the given URL instead, like mac, I think it&apos;s because one of the callers use the document URL. I&apos;ve split the methods anyway, so that we can share the getImage(), but I&apos;m not sure where to move the code, since it&apos;s a static function in both cases and doesn&apos;t seem to fit as members of Editor, no?

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:92
&gt; &gt; +    CachedImage* cachedImage = toRenderImage(renderer)-&gt;cachedImage();
&gt; 
&gt; Since we know the renderer is non-null, could use * on it explicitly. The compiler is probably smart enough to optimize out the nil check, but this idiom guarantees there won’t be one:
&gt; 
&gt;     toRenderImage(*renderer).cachedImage()

Ok.

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:100
&gt; &gt; +    AtomicString urlString;
&gt; 
&gt; Could use const AtomicString* here and avoid copying the attributes and churning the reference count.

I moved this to a new helper function that returns a const AtomicString&amp;

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:102
&gt; &gt; +        urlString = element.getAttribute(HTMLNames::srcAttr);
&gt; 
&gt; fastGetAttribute

Ok.

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:103
&gt; &gt; +    else if (element.hasTagName(SVGNames::imageTag))
&gt; 
&gt; Could use isSVGImageElement here.

Ok.

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:104
&gt; &gt; +        urlString = element.getAttribute(XLinkNames::hrefAttr);
&gt; 
&gt; fastGetAttribute

Ok.

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:105
&gt; &gt; +    else if (element.hasTagName(HTMLNames::embedTag) || isHTMLObjectElement(element))
&gt; 
&gt; Could use isHTMLEmbedElement here.

Ok.

&gt; &gt; Source/WebCore/editing/gtk/EditorGtk.cpp:108
&gt; &gt; +    url = urlString.isEmpty() ? URL() : element.document().completeURL(stripLeadingAndTrailingHTMLSpaces(urlString));
&gt; 
&gt; Not sure it’s exactly right to special-case empty URLs before stripping the string. Maybe we should check for emptiness after stripping the leading and trailing spaces?

Actually we don&apos;t even need to check if the string is empty, stripLeadingAndTrailingHTMLSpaces returns a null string when the given string is null and completeURL returns a null URL when the given string is null.

&gt; &gt; Source/WebCore/platform/Pasteboard.h:85
&gt; &gt; +    GClosure* callback;
&gt; 
&gt; I think this may create a problem in the future. It makes PasteboardWebContent not copyable on GTK. Is there a smart pointer we can use here?

Indeed, and I&apos;ve noticed we are indeed leaking the closure in some cases. I&apos;ll use GRefPtr to fix both issues.

&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebEditorClientGtk.cpp:196
&gt; &gt; +    PasteboardWebContent pasteboardContent;
&gt; &gt; +    pasteboardContent.canSmartCopyOrDelete = false;
&gt; &gt; +    pasteboardContent.text = range-&gt;text();
&gt; &gt; +    pasteboardContent.markup = createMarkup(*range, nullptr, AnnotateForInterchange, false, ResolveNonLocalURLs);
&gt; &gt; +    pasteboardContent.callback = callback;
&gt; &gt; +    Pasteboard::createForGlobalSelection()-&gt;write(pasteboardContent);
&gt; 
&gt; I’m a little worried by this code. Building a PasteboardWebContent directly seems like a job for a function in the platform directory. Maybe we can find a different good place for this code, and just call it here.

Current methods building a PasteboardWebContent are not actually in platform, but in port-specific files in WebCore, Editor files mainly I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035215</commentid>
    <comment_count>4</comment_count>
      <attachid>238115</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-15 05:00:02 -0700</bug_when>
    <thetext>Created attachment 238115
Patch for landing

Addressed review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035218</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-15 05:09:01 -0700</bug_when>
    <thetext>Attachment 238115 did not pass style-queue:


ERROR: Source/WebCore/editing/gtk/EditorGtk.cpp:85:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035221</commentid>
    <comment_count>6</comment_count>
      <attachid>238118</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-15 05:15:18 -0700</bug_when>
    <thetext>Created attachment 238118
Fixed coding style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035681</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-09-17 00:06:01 -0700</bug_when>
    <thetext>Committed r173687: &lt;http://trac.webkit.org/changeset/173687&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238082</attachid>
            <date>2014-09-13 05:51:48 -0700</date>
            <delta_ts>2014-09-15 05:00:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkcore-pasteboard-layering-violations.diff</filename>
            <type>text/plain</type>
            <size>30718</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzZTVmZmI2Li44MzJmZGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYg
QEAKKzIwMTQtMDktMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEZpeCBsYXllcmluZyB2aW9sYXRpb25zIGluIFBhc3RlYm9hcmRH
dGsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjgw
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFj
dG9yIHRoZSBQYXN0ZWJvYXJkIGNvZGUgbW92aW5nIHRoZSBXZWJDb3JlIHBhcnRzIHRvIHRoZSBF
ZGl0b3IuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogQWRkIG5ldyBmaWxlIHRvIGNv
bXBpbGF0aW9uLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmNvcHlJbWFnZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0
aW5nL2d0ay9FZGl0b3JHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZy
YWdtZW50RnJvbVBhc3RlQm9hcmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFz
dGVXaXRoUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZUFuZFVSTEZvckVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJk
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQp
OgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6CisgICAgICAgICogcGFnZS9ndGsvRHJhZ0NvbnRy
b2xsZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVB
bmRXcml0ZURyYWdJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcDogUmVtb3ZlIHJhbmdlIG1lbWJl
ciwgdGhlIGNhbGxlcgorICAgICAgICBzaG91bGQgY2FsbCBzZXRUZXh0KCkgKyBzZXRNYXJrdXAo
KSBpbnRlYWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpzZXRUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnNldE1hcmt1cCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhT2JqZWN0R3RrOjpjbGVhclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9i
amVjdEd0azo6Y2xlYXJNYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6
Y2xlYXJBbGxFeGNlcHRGaWxlbmFtZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EYXRhT2Jq
ZWN0R3RrLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc01hcmt1cCk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhT2JqZWN0R3RrOjpjbGVhckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFP
YmplY3RHdGs6OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6bWFya3Vw
KToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnNldFJhbmdlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkSW1hZ2U6OlBhc3RlYm9hcmRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkSW1hZ2U6On5QYXN0ZWJvYXJkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VVJMRm9ySW1hZ2VFbGVtZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZGlzcGxheUZyb21GcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkSGVscGVyOjpnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oOgorCiAyMDE0LTA4
LTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBEcmFnRGF0YSBzaG91bGQgbm90IGRlcGVuZCBvbiBDbGlwYm9hcmQsIERvY3VtZW50RnJhZ21l
bnQsIGFuZCBEb2N1bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA4NTRjNDljLi45
YThiYjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTc5LDYgKzE3OSw3IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCiAgICAgYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCiAKICAgICBlZGl0aW5nL2F0ay9GcmFt
ZVNlbGVjdGlvbkF0ay5jcHAKKyAgICBlZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCiAKICAgICBw
YWdlL2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAKICAgICBwYWdlL2d0ay9FdmVudEhhbmRsZXJH
dGsuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggZjQxMDY1Yi4uMTc0ZTIwOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNTYyLDcgKzU2Miw3IEBAIFN0cmluZyBF
ZGl0b3I6OnBsYWluVGV4dEZyb21QYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmRQbGFpblRleHQm
IHRleHQpCiAKICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oRUZM
KQorI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKEVGTCkgJiYgIVBMQVRGT1JNKEdU
SykKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9h
cmQsIGJvb2wgYWxsb3dQbGFpblRleHQsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2Nr
cXVvdGVIYW5kbGluZykKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5n
ZSgpOwpAQCAtMTMyNCwxMyArMTMyNCwxMyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29w
eShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgaW1hZ2VFbGVtZW50
ID0gaW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAKICAgICAgICAg
aWYgKGltYWdlRWxlbWVudCkgewotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwp
CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQog
ICAgICAgICAgICAgd3JpdGVJbWFnZVRvUGFzdGVib2FyZCgqUGFzdGVib2FyZDo6Y3JlYXRlRm9y
Q29weUFuZFBhc3RlKCksICppbWFnZUVsZW1lbnQsIGRvY3VtZW50KCkudXJsKCksIGRvY3VtZW50
KCkudGl0bGUoKSk7CiAjZWxzZQogICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29w
eUFuZFBhc3RlKCktPndyaXRlSW1hZ2UoKmltYWdlRWxlbWVudCwgZG9jdW1lbnQoKS51cmwoKSwg
ZG9jdW1lbnQoKS50aXRsZSgpKTsKICNlbmRpZgogICAgICAgICB9IGVsc2UgewotI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRG
T1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25Ub1Bh
c3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNlCiAg
ICAgICAgICAgICAvLyBGSVhNRTogQ29udmVydCBhbGwgb3RoZXIgcGxhdGZvcm1zIHRvIG1hdGNo
IE1hYyBhbmQgZGVsZXRlIHRoaXMuCkBAIC0xNDM2LDcgKzE0MzYsNyBAQCB2b2lkIEVkaXRvcjo6
Y29weUltYWdlKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKICAgICBpZiAodXJsLmlzRW1w
dHkoKSkKICAgICAgICAgdXJsID0gcmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKTsKIAotI2lmIFBM
QVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBM
QVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQo
KlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLCAqZWxlbWVudCwgdXJsLCByZXN1
bHQuYWx0RGlzcGxheVN0cmluZygpKTsKICNlbHNlCiAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9y
Q29weUFuZFBhc3RlKCktPndyaXRlSW1hZ2UoKmVsZW1lbnQsIHVybCwgcmVzdWx0LmFsdERpc3Bs
YXlTdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCAyODAxNjNlLi40YjcxOTVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTQ0Myw3ICs0NDMsNyBAQCBwdWJsaWM6CiAj
ZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8
IFBMQVRGT1JNKEVGTCkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQ
TEFURk9STShHVEspCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3cml0ZUltYWdl
VG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBFbGVtZW50JiBpbWFnZUVsZW1lbnQsIGNvbnN0IFVS
TCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9n
dGsvRWRpdG9yR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGM3
NWE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9y
R3RrLmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorCisjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRGcmFnbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxl
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiUGFzdGVib2Fy
ZC5oIgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgor
I2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgorI2luY2x1ZGUg
Im1hcmt1cC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlQm9hcmREYXRhKFBhc3RlYm9h
cmQmIHBhc3RlYm9hcmQsIEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGFsbG93UGxh
aW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK3sKKyAgICBjaG9zZVBsYWluVGV4dCA9IGZh
bHNlOworCisgICAgaWYgKCFwYXN0ZWJvYXJkLmhhc0RhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCA9IHBhc3RlYm9h
cmQuZGF0YU9iamVjdCgpOworICAgIGlmIChkYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSAmJiBmcmFt
ZS5kb2N1bWVudCgpKSB7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgZGF0YU9iamVj
dC0+bWFya3VwKCksIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29u
dGVudCk7CisgICAgICAgIGlmIChmcmFnbWVudCkKKyAgICAgICAgICAgIHJldHVybiBmcmFnbWVu
dC5yZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CisgICAg
ICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChyYW5nZSwgZGF0YU9iamVjdC0+
dGV4dCgpKTsKKyAgICAgICAgaWYgKGZyYWdtZW50KQorICAgICAgICAgICAgcmV0dXJuIGZyYWdt
ZW50LnJlbGVhc2UoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBF
ZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgYm9vbCBh
bGxvd1BsYWluVGV4dCwgTWFpbEJsb2NrcXVvdGVIYW5kbGluZyBtYWlsQmxvY2txdW90ZUhhbmRs
aW5nKQoreworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3RlZFJhbmdlKCk7CisgICAg
aWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsK
KyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZy
b21QYXN0ZUJvYXJkRGF0YSgqcGFzdGVib2FyZCwgbV9mcmFtZSwgKnJhbmdlLCBhbGxvd1BsYWlu
VGV4dCwgY2hvc2VQbGFpblRleHQpOworICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRG
cmFnbWVudChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpCisgICAg
ICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudCwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9h
cmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCwgbWFpbEJsb2NrcXVvdGVIYW5kbGluZyk7
Cit9CisKK3N0YXRpYyBib29sIGdldEltYWdlQW5kVVJMRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50LCBSZWZQdHI8SW1hZ2U+JiBpbWFnZSwgVVJMJiB1cmwpCit7CisgICAgYXV0byByZW5kZXJl
ciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+
aXNSZW5kZXJJbWFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDYWNoZWRJbWFn
ZSogY2FjaGVkSW1hZ2UgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKS0+Y2FjaGVkSW1hZ2UoKTsK
KyAgICBpZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGltYWdlID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9y
UmVuZGVyZXIocmVuZGVyZXIpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEF0b21pY1N0cmluZyB1cmxTdHJpbmc7CisgICAgaWYgKGlzSFRNTEltYWdlRWxl
bWVudChlbGVtZW50KSB8fCBpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIHVy
bFN0cmluZyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7CisgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRhZykpCisgICAgICAg
IHVybFN0cmluZyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsK
KyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykgfHwg
aXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVu
dC5pbWFnZVNvdXJjZVVSTCgpOworCisgICAgdXJsID0gdXJsU3RyaW5nLmlzRW1wdHkoKSA/IFVS
TCgpIDogZWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWls
aW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBF
ZGl0b3I6OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgRWxl
bWVudCYgaW1hZ2VFbGVtZW50LCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKQorewor
ICAgIFBhc3RlYm9hcmRJbWFnZSBwYXN0ZWJvYXJkSW1hZ2U7CisKKyAgICBpZiAoIWdldEltYWdl
QW5kVVJMRm9yRWxlbWVudChpbWFnZUVsZW1lbnQsIHBhc3RlYm9hcmRJbWFnZS5pbWFnZSwgcGFz
dGVib2FyZEltYWdlLnVybC51cmwpKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHBhc3Rl
Ym9hcmRJbWFnZS5pbWFnZSk7CisKKyAgICBwYXN0ZWJvYXJkSW1hZ2UudXJsLnRpdGxlID0gdGl0
bGU7CisgICAgcGFzdGVib2FyZEltYWdlLnVybC5tYXJrdXAgPSBjcmVhdGVNYXJrdXAoaW1hZ2VF
bGVtZW50LCBJbmNsdWRlTm9kZSwgbnVsbHB0ciwgUmVzb2x2ZUFsbFVSTHMpOworICAgIHBhc3Rl
Ym9hcmQud3JpdGUocGFzdGVib2FyZEltYWdlKTsKK30KKwordm9pZCBFZGl0b3I6OndyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCit7CisgICAgUGFzdGVi
b2FyZFdlYkNvbnRlbnQgcGFzdGVib2FyZENvbnRlbnQ7CisgICAgcGFzdGVib2FyZENvbnRlbnQu
Y2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOworICAgIHBhc3Rl
Ym9hcmRDb250ZW50LnRleHQgPSBzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKTsKKyAgICBw
YXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBjcmVhdGVNYXJrdXAoKnNlbGVjdGVkUmFuZ2UoKSwg
bnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVS
THMpOworICAgIHBhc3RlYm9hcmRDb250ZW50LmNhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBwYXN0
ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRDb250ZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA0ZTc3NzM0Li4y
NDA0MzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNzc0LDcg
Kzc3NCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25z
dCBEcmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0aW9uCiAgICAgICAgICAgICBpZiAoZW5jbG9z
aW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkK
ICAgICAgICAgICAgICAgICBkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLndyaXRlUGxhaW5UZXh0
KHNyYy5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgUGFzdGVib2FyZDo6
Q2Fubm90U21hcnRSZXBsYWNlKTsKICAgICAgICAgICAgIGVsc2UgewotI2lmIFBMQVRGT1JNKENP
Q09BKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEVG
TCkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53cml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICNlbHNlCiAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnQgYWxsIG90aGVyIHBsYXRmb3JtcyB0byBt
YXRjaCBNYWMgYW5kIGRlbGV0ZSB0aGlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJh
Z0NvbnRyb2xsZXJHdGsuY3BwCmluZGV4IDE3MmM1ZDQuLjZlZmM2N2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJEcmFnRGF0YS5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVsZW1l
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNzUs
NyArNzYsOSBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1EcmFnKCkK
IAogdm9pZCBEcmFnQ29udHJvbGxlcjo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKERhdGFUcmFu
c2ZlciYgZGF0YVRyYW5zZmVyLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBsYWJlbCkKIHsKLSAgICBkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLndyaXRl
SW1hZ2UoZWxlbWVudCwgdXJsLCBsYWJlbCk7CisgICAgRnJhbWUqIGZyYW1lID0gZWxlbWVudC5k
b2N1bWVudCgpLmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBmcmFtZS0+ZWRpdG9y
KCkud3JpdGVJbWFnZVRvUGFzdGVib2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLCBlbGVt
ZW50LCB1cmwsIGxhYmVsKTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFn
Q29udHJvbGxlcjo6Y3JlYXRlRnJhZ21lbnRGcm9tRHJhZ0RhdGEoRHJhZ0RhdGEmIGRyYWdEYXRh
LCBGcmFtZSYgZnJhbWUsIFJhbmdlJiwgYm9vbCAvKmFsbG93UGxhaW5UZXh0Ki8sIGJvb2wmIC8q
Y2hvc2VQbGFpblRleHQqLykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bh
c3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRleCBm
ZGVmZjViLi5jMWZhYTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0
ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCkBAIC03
OCw2ICs3OCwxMiBAQCBzdHJ1Y3QgUGFzdGVib2FyZFdlYkNvbnRlbnQgewogICAgIFZlY3RvcjxT
dHJpbmc+IGNsaWVudFR5cGVzOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkQnVmZmVyPj4gY2xp
ZW50RGF0YTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBib29sIGNhblNtYXJ0Q29w
eU9yRGVsZXRlOworICAgIFN0cmluZyB0ZXh0OworICAgIFN0cmluZyBtYXJrdXA7CisgICAgR0Ns
b3N1cmUqIGNhbGxiYWNrOworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgUGFzdGVib2FyZFVSTCB7CkBA
IC04NiwxNCArOTIsMTkgQEAgc3RydWN0IFBhc3RlYm9hcmRVUkwgewogI2lmIFBMQVRGT1JNKE1B
QykKICAgICBTdHJpbmcgdXNlclZpc2libGVGb3JtOwogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RL
KQorICAgIFN0cmluZyBtYXJrdXA7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBQYXN0ZWJvYXJkSW1h
Z2UgewogICAgIFdFQkNPUkVfRVhQT1JUIFBhc3RlYm9hcmRJbWFnZSgpOwogICAgIFdFQkNPUkVf
RVhQT1JUIH5QYXN0ZWJvYXJkSW1hZ2UoKTsKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlOwotI2lm
ICEoUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikpCisjaWYg
IShQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJTikpCiAgICAgUGFzdGVib2FyZFVSTCB1cmw7
CisjZW5kaWYKKyNpZiAhKFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9S
TShXSU4pKQogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc291cmNlRGF0YTsKICAgICBTdHJp
bmcgcmVzb3VyY2VNSU1FVHlwZTsKICNlbmRpZgpAQCAtMTYyLDcgKzE3Myw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldERyYWdJbWFnZShEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiBob3RT
cG90KTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCisjaWYg
UExBVEZPUk0oV0lOKQogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRG
cmFnbWVudChGcmFtZSYsIFJhbmdlJiwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQ
bGFpblRleHQpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgogICAgIHZvaWQgd3JpdGVJ
bWFnZShFbGVtZW50JiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7IC8vIEZJWE1F
OiBMYXllcmluZyB2aW9sYXRpb24uCiAgICAgdm9pZCB3cml0ZVNlbGVjdGlvbihSYW5nZSYsIGJv
b2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lJiwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRU
ZXh0Rm9yRGF0YVRyYW5zZmVyID0gRGVmYXVsdFNlbGVjdGVkVGV4dFR5cGUpOyAvLyBGSVhNRTog
TGF5ZXJpbmcgdmlvbGF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0RhdGFPYmplY3RHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFP
YmplY3RHdGsuY3BwCmluZGV4IGJjMzNiYjkuLmY2MDAxNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKQEAgLTE5LDkgKzE5LDkgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCiAKLSNpbmNsdWRlICJt
YXJrdXAuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Vu
aXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMzLDIzICsz
Myw2IEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VOb25CcmVha2luZ1NwYWNlV2l0aFNwYWNlKFN0cmlu
ZyYgc3RyKQogICAgIHN0ci5yZXBsYWNlKE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIsIFNwYWNl
Q2hhcmFjdGVyKTsKIH0KIAotU3RyaW5nIERhdGFPYmplY3RHdGs6OnRleHQoKSBjb25zdAotewot
ICAgIGlmIChtX3JhbmdlKSB7Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0gbV9yYW5nZS0+dGV4dCgp
OwotICAgICAgICByZXBsYWNlTm9uQnJlYWtpbmdTcGFjZVdpdGhTcGFjZSh0ZXh0KTsKLSAgICAg
ICAgcmV0dXJuIHRleHQ7Ci0gICAgfQotICAgIHJldHVybiBtX3RleHQ7Ci19Ci0KLVN0cmluZyBE
YXRhT2JqZWN0R3RrOjptYXJrdXAoKSBjb25zdAotewotICAgIGlmIChtX3JhbmdlKQotICAgICAg
ICByZXR1cm4gY3JlYXRlTWFya3VwKCptX3JhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdl
LCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7Ci0gICAgcmV0dXJuIG1fbWFya3VwOwotfQot
CiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBEYXRhT2JqZWN0R3RrOjp1bmtub3duVHlwZXMoKSBj
b25zdAogewogICAgIHJldHVybiBtX3Vua25vd25UeXBlRGF0YTsKQEAgLTU3LDE0ICs0MCwxMiBA
QCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBEYXRhT2JqZWN0R3RrOjp1bmtub3duVHlwZXMoKSBj
b25zdAogCiB2b2lkIERhdGFPYmplY3RHdGs6OnNldFRleHQoY29uc3QgU3RyaW5nJiBuZXdUZXh0
KQogewotICAgIG1fcmFuZ2UgPSAwOwogICAgIG1fdGV4dCA9IG5ld1RleHQ7CiAgICAgcmVwbGFj
ZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UobV90ZXh0KTsKIH0KIAogdm9pZCBEYXRhT2JqZWN0
R3RrOjpzZXRNYXJrdXAoY29uc3QgU3RyaW5nJiBuZXdNYXJrdXApCiB7Ci0gICAgbV9yYW5nZSA9
IDA7CiAgICAgbV9tYXJrdXAgPSBuZXdNYXJrdXA7CiB9CiAKQEAgLTEzMSwxNCArMTEyLDEyIEBA
IHZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IGxhYmVsKQogCiB2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyVGV4dCgpCiB7Ci0gICAgbV9yYW5n
ZSA9IDA7Ci0gICAgbV90ZXh0ID0gIiI7CisgICAgbV90ZXh0ID0gZW1wdHlTdHJpbmcoKTsKIH0K
IAogdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhck1hcmt1cCgpCiB7Ci0gICAgbV9yYW5nZSA9IDA7
Ci0gICAgbV9tYXJrdXAgPSAiIjsKKyAgICBtX21hcmt1cCA9IGVtcHR5U3RyaW5nKCk7CiB9CiAK
IFN0cmluZyBEYXRhT2JqZWN0R3RrOjp1cmxMYWJlbCgpIGNvbnN0CkBAIC0xNTQsMTIgKzEzMywx
MSBAQCBTdHJpbmcgRGF0YU9iamVjdEd0azo6dXJsTGFiZWwoKSBjb25zdAogCiB2b2lkIERhdGFP
YmplY3RHdGs6OmNsZWFyQWxsRXhjZXB0RmlsZW5hbWVzKCkKIHsKLSAgICBtX3RleHQgPSAiIjsK
LSAgICBtX21hcmt1cCA9ICIiOwotICAgIG1fdXJpTGlzdCA9ICIiOworICAgIG1fdGV4dCA9IGVt
cHR5U3RyaW5nKCk7CisgICAgbV9tYXJrdXAgPSBlbXB0eVN0cmluZygpOworICAgIG1fdXJpTGlz
dCA9IGVtcHR5U3RyaW5nKCk7CiAgICAgbV91cmwgPSBVUkwoKTsKLSAgICBtX2ltYWdlID0gMDsK
LSAgICBtX3JhbmdlID0gMDsKKyAgICBtX2ltYWdlID0gbnVsbHB0cjsKICAgICBtX3Vua25vd25U
eXBlRGF0YS5jbGVhcigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFP
YmplY3RHdGsuaAppbmRleCBmZjE0MjQ5Li44NTBkMjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKQEAgLTIxLDEwICsyMSw4IEBACiAKICNpbmNsdWRl
ICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIlVSTC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMjIgKzM4LDIxIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBTdHJpbmcmIHVyaUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3VyaUxpc3Q7
IH0KICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4g
bV9maWxlbmFtZXM7IH0KICAgICBHZGtQaXhidWYqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UmFuZ2UoUGFzc1JlZlB0cjxSYW5nZT4gbmV3UmFu
Z2UpIHsgbV9yYW5nZSA9IG5ld1JhbmdlOyB9CiAgICAgdm9pZCBzZXRJbWFnZShHZGtQaXhidWYq
IG5ld0ltYWdlKSB7IG1faW1hZ2UgPSBuZXdJbWFnZTsgfQogICAgIHZvaWQgc2V0VVJMKGNvbnN0
IFVSTCYsIGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgaGFzVW5rbm93blR5cGVEYXRhKCkgY29u
c3QgeyByZXR1cm4gIW1fdW5rbm93blR5cGVEYXRhLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFz
VGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UgfHwgIW1fdGV4dC5pc0VtcHR5KCk7IH0KLSAg
ICBib29sIGhhc01hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UgfHwgIW1fbWFya3VwLmlz
RW1wdHkoKTsgfQorICAgIGJvb2wgaGFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuICFtX3RleHQuaXNF
bXB0eSgpOyB9CisgICAgYm9vbCBoYXNNYXJrdXAoKSBjb25zdCB7IHJldHVybiAhbV9tYXJrdXAu
aXNFbXB0eSgpOyB9CiAgICAgYm9vbCBoYXNVUklMaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fdXJp
TGlzdC5pc0VtcHR5KCk7IH0KICAgICBib29sIGhhc1VSTCgpIGNvbnN0IHsgcmV0dXJuICFtX3Vy
bC5pc0VtcHR5KCkgJiYgbV91cmwuaXNWYWxpZCgpOyB9CiAgICAgYm9vbCBoYXNGaWxlbmFtZXMo
KSBjb25zdCB7IHJldHVybiAhbV9maWxlbmFtZXMuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBoYXNJ
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KICAgICB2b2lkIGNsZWFyVVJJTGlzdCgp
IHsgbV91cmlMaXN0ID0gIiI7IH0KICAgICB2b2lkIGNsZWFyVVJMKCkgeyBtX3VybCA9IFVSTCgp
OyB9Ci0gICAgdm9pZCBjbGVhckltYWdlKCkgeyBtX2ltYWdlID0gMDsgfQorICAgIHZvaWQgY2xl
YXJJbWFnZSgpIHsgbV9pbWFnZSA9IG51bGxwdHI7IH0KIAotICAgIFN0cmluZyB0ZXh0KCkgY29u
c3Q7Ci0gICAgU3RyaW5nIG1hcmt1cCgpIGNvbnN0OworICAgIFN0cmluZyB0ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV90ZXh0OyB9CisgICAgU3RyaW5nIG1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFya3VwOyB9CiAgICAgU3RyaW5nIHVua25vd25UeXBlRGF0YShjb25zdCBTdHJpbmcmIHR5cGUp
IGNvbnN0IHsgcmV0dXJuIG1fdW5rbm93blR5cGVEYXRhLmdldCh0eXBlKTsgfQogICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IHVua25vd25UeXBlcygpIGNvbnN0OwogICAgIHZvaWQgc2V0VGV4
dChjb25zdCBTdHJpbmcmKTsKQEAgLTc4LDcgKzc1LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV91cmlMaXN0OwogICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOwogICAgIEdSZWZQdHI8
R2RrUGl4YnVmPiBtX2ltYWdlOwotICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsKICAgICBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBtX3Vua25vd25UeXBlRGF0YTsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgKaW5kZXggNTI5
ZTk5OC4uYThjNmYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a0RyYWdBbmREcm9wSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a0RyYWdBbmREcm9wSGVscGVyLmgKQEAgLTI3LDYgKzI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0OwogY2xhc3MgRHJhZ0RhdGE7CitjbGFzcyBJbnRQ
b2ludDsKIAogdHlwZWRlZiB2b2lkICgqRHJhZ0V4aXRlZENhbGxiYWNrKShHdGtXaWRnZXQqLCBE
cmFnRGF0YSYsIGJvb2wgZHJvcEhhcHBlbmVkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCmluZGV4IDViMTY1YTguLjdhOTZmOGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKQEAgLTIwLDI2ICsy
MCwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKIAot
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5oIgotI2lu
Y2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJEcmFnRGF0YS5oIgotI2luY2x1
ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxl
bWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIK
ICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCi0jaW5jbHVk
ZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKLSNpbmNsdWRlICJYTGlua05hbWVzLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCiAj
aW5jbHVkZSA8Z3RrL2d0ay5oPgotCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OSw2ICs3NiwxNSBAQCBQYXNzT3duUHRyPFBhc3RlYm9h
cmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKGNvbnN0IERyYWdEYXRhJiBkcmFn
RGF0YQogfQogI2VuZGlmCiAKKy8vIE1ha2luZyB0aGlzIG5vbi1pbmxpbmUgc28gdGhhdCBXZWJL
aXQgMidzIGRlY29kaW5nIGRvZXNuJ3QgaGF2ZSB0byBpbmNsdWRlIEltYWdlLmguCitQYXN0ZWJv
YXJkSW1hZ2U6OlBhc3RlYm9hcmRJbWFnZSgpCit7Cit9CisKK1Bhc3RlYm9hcmRJbWFnZTo6flBh
c3RlYm9hcmRJbWFnZSgpCit7Cit9CisKIFBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQoUGFzc1JlZlB0
cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0KQogICAgIDogbV9kYXRhT2JqZWN0KGRhdGFPYmpl
Y3QpCiAgICAgLCBtX2d0a0NsaXBib2FyZCgwKQpAQCAtMTU2LDE2ICsxNTIsNiBAQCB2b2lkIFBh
c3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBk
YXRhKQogICAgIH0KIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSYg
c2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUmIGZyYW1lLCBT
aG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgc2hvdWxkU2VyaWFsaXpl
U2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKQotewotICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJB
bGwoKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldFRleHQoc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRU
ZXh0Rm9yRGF0YVRyYW5zZmVyID09IEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIg
PyBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSA6IGZyYW1lLmVk
aXRvcigpLnNlbGVjdGVkVGV4dCgpKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVh
dGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2Us
IFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKLQotICAgIGlmIChtX2d0a0NsaXBib2FyZCkKLSAgICAg
ICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlw
Ym9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCwgY2FuU21hcnRDb3B5T3JEZWxldGUgPyBQYXN0
ZWJvYXJkSGVscGVyOjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRvTm90
SW5jbHVkZVNtYXJ0UGFzdGUpOwotfQotCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9wdGlv
bikKIHsKICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CkBAIC0xODYsNDggKzE3MiwzMiBA
QCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRVUkwmIHBhc3RlYm9hcmRV
UkwpCiAgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCkt
PndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQpOwogfQogCi1zdGF0aWMgVVJM
IGdldFVSTEZvckltYWdlRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIC8vIEZJWE1F
OiBMYXRlciB0aGlzIGNvZGUgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIENocm9taXVtIHNvbWVob3cu
IENoYW5jZXMgYXJlIGFsbCBwbGF0Zm9ybXMgd2FudCBpdC4KLSAgICBBdG9taWNTdHJpbmcgdXJs
U3RyaW5nOwotICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgfHwgaXNIVE1MSW5w
dXRFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICB1cmxTdHJpbmcgPSBlbGVtZW50LmdldEF0dHJp
YnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpOwotICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFt
ZShTVkdOYW1lczo6aW1hZ2VUYWcpKQotICAgICAgICB1cmxTdHJpbmcgPSBlbGVtZW50LmdldEF0
dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpIHx8IGlzSFRNTE9iamVjdEVsZW1lbnQoZWxlbWVu
dCkpCi0gICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQuaW1hZ2VTb3VyY2VVUkwoKTsKLQotICAg
IHJldHVybiB1cmxTdHJpbmcuaXNFbXB0eSgpID8gVVJMKCkgOiBlbGVtZW50LmRvY3VtZW50KCku
Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVybFN0cmluZykp
OwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29u
c3QgUGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJkSW1hZ2UpCiB7Ci0gICAgaWYgKCEoZWxlbWVu
dC5yZW5kZXJlcigpICYmIGVsZW1lbnQucmVuZGVyZXIoKS0+aXNSZW5kZXJJbWFnZSgpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFn
ZShlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJl
bmRlcmVyLT5jYWNoZWRJbWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1h
Z2UtPmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEltYWdlKiBpbWFnZSA9
IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICBBU1NFUlQoaW1h
Z2UpOwotCiAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOwotCi0gICAgVVJMIHVybCA9IGdl
dFVSTEZvckltYWdlRWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRsZSk7Ci0KLSAgICAgICAgbV9k
YXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKGVsZW1lbnQsIEluY2x1ZGVOb2RlLCAw
LCBSZXNvbHZlQWxsVVJMcykpOworICAgIGlmICghcGFzdGVib2FyZEltYWdlLnVybC51cmwuaXNF
bXB0eSgpKSB7CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHBhc3RlYm9hcmRJbWFnZS51
cmwudXJsLCBwYXN0ZWJvYXJkSW1hZ2UudXJsLnRpdGxlKTsKKyAgICAgICAgbV9kYXRhT2JqZWN0
LT5zZXRNYXJrdXAocGFzdGVib2FyZEltYWdlLnVybC5tYXJrdXApOwogICAgIH0KIAotICAgIEdS
ZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1Zigp
KTsKLSAgICBtX2RhdGFPYmplY3QtPnNldEltYWdlKHBpeGJ1Zi5nZXQoKSk7CisgICAgR1JlZlB0
cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UtPmdl
dEdka1BpeGJ1ZigpKTsKKyAgICBpZiAocGl4YnVmKQorICAgICAgICBtX2RhdGFPYmplY3QtPnNl
dEltYWdlKHBpeGJ1Zi5nZXQoKSk7CiAKICAgICBpZiAobV9ndGtDbGlwYm9hcmQpCiAgICAgICAg
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJv
YXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQpOwogfQogCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRl
KGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBwYXN0ZWJvYXJkQ29udGVudCkKK3sKKyAgICBt
X2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHBhc3Rl
Ym9hcmRDb250ZW50LnRleHQpOworICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKHBhc3RlYm9h
cmRDb250ZW50Lm1hcmt1cCk7CisKKyAgICBpZiAobV9ndGtDbGlwYm9hcmQpCisgICAgICAgIFBh
c3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJk
Q29udGVudHMobV9ndGtDbGlwYm9hcmQsIHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9y
RGVsZXRlID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJk
SGVscGVyOjpEb05vdEluY2x1ZGVTbWFydFBhc3RlLCBwYXN0ZWJvYXJkQ29udGVudC5jYWxsYmFj
ayk7Cit9CisKIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9h
cmQmIHNvdXJjZVBhc3RlYm9hcmQpCiB7CiAgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IHNvdXJj
ZURhdGFPYmplY3QgPSBzb3VyY2VQYXN0ZWJvYXJkLmRhdGFPYmplY3QoKTsKQEAgLTMwMiwzNCAr
MjcyLDYgQEAgdm9pZCBQYXN0ZWJvYXJkOjpzZXREcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmLCBjb25z
dCBJbnRQb2ludCYpCiB9CiAjZW5kaWYKIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQ
YXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lJiBmcmFtZSwgUmFuZ2UmIGNvbnRleHQs
IGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQotewotICAgIGlmICht
X2d0a0NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9h
cmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQpOwotCi0gICAg
Y2hvc2VQbGFpblRleHQgPSBmYWxzZTsKLQotICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc01hcmt1
cCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
KmZyYW1lLmRvY3VtZW50KCksIG1fZGF0YU9iamVjdC0+bWFya3VwKCksIGVtcHR5U3RyaW5nKCks
IERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7Ci0gICAgICAgICAgICBpZiAoZnJh
Z21lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmICghYWxsb3dQbGFpblRleHQpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7Ci0gICAgICAgIGNob3NlUGxh
aW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBtX2RhdGFPYmplY3QtPnRleHQoKSk7
Ci0gICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgUGFzdGVib2FyZDo6cmVh
ZChQYXN0ZWJvYXJkUGxhaW5UZXh0JiB0ZXh0KQogewogICAgIGlmIChtX2d0a0NsaXBib2FyZCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcApp
bmRleCBjMDkyMjI3Li42ZjNhMTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCkBAIC0yMywxNiArMjMsMTQgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCiAKLSNpbmNsdWRlICJDaHJv
bWUuaCIKICNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJHUmVmUHRyR3RrLmgiCiAjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291
cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTk1LDIwICs5Myw2IEBAIFBhc3RlYm9hcmRIZWxwZXI6On5QYXN0
ZWJvYXJkSGVscGVyKCkKICAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYobV90YXJnZXRMaXN0KTsK
IH0KIAotc3RhdGljIGlubGluZSBHZGtEaXNwbGF5KiBkaXNwbGF5RnJvbUZyYW1lKEZyYW1lKiBm
cmFtZSkKLXsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFn
ZSgpOwotICAgIEFTU0VSVChwYWdlKTsKLSAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgY2xpZW50ID0g
cGFnZS0+Y2hyb21lKCkucGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0gICAgcmV0dXJuIGNsaWVudCA/
IGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkoY2xpZW50KSA6IGdka19kaXNwbGF5X2dldF9kZWZhdWx0
KCk7Ci19Ci0KLUd0a0NsaXBib2FyZCogUGFzdGVib2FyZEhlbHBlcjo6Z2V0UHJpbWFyeVNlbGVj
dGlvbkNsaXBib2FyZChGcmFtZSogZnJhbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGd0a19jbGlw
Ym9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGRpc3BsYXlGcm9tRnJhbWUoZnJhbWUpLCBHREtfU0VMRUNU
SU9OX1BSSU1BUlkpOwotfQotCiBHdGtUYXJnZXRMaXN0KiBQYXN0ZWJvYXJkSGVscGVyOjp0YXJn
ZXRMaXN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV90YXJnZXRMaXN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKaW5kZXggNWViNjY5ZS4uMGQw
M2QxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRI
ZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBl
ci5oCkBAIC0yNSw4ICsyNSw4IEBACiAjaWZuZGVmIFBhc3RlYm9hcmRIZWxwZXJfaAogI2RlZmlu
ZSBQYXN0ZWJvYXJkSGVscGVyX2gKIAotI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDAsNyArNDAsNiBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFNtYXJ0UGFzdGVJbmNs
dXNpb24geyBJbmNsdWRlU21hcnRQYXN0ZSwgRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSB9OwogCi0g
ICAgR3RrQ2xpcGJvYXJkKiBnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKEZyYW1lKikgY29u
c3Q7CiAgICAgR3RrVGFyZ2V0TGlzdCogdGFyZ2V0TGlzdCgpIGNvbnN0OwogICAgIEd0a1Rhcmdl
dExpc3QqIHRhcmdldExpc3RGb3JEYXRhT2JqZWN0KERhdGFPYmplY3RHdGsqLCBTbWFydFBhc3Rl
SW5jbHVzaW9uID0gRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7CiAgICAgdm9pZCBmaWxsU2VsZWN0
aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCBlYjk5OTBhLi45MjdjZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTQtMDktMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdIEZpeCBsYXllcmluZyB2aW9sYXRpb25zIGluIFBhc3RlYm9hcmRHdGsKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjgwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVHbG9iYWxTZWxlY3Rpb24pOiBVc2UgbmV3IEFQ
SSB0bworICAgICAgICB1cGRhdGUgdGhlIGdsb2JhbCBzZWxlY3Rpb24uCisKIDIwMTQtMDgtMjcg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIERy
YWdEYXRhIHNob3VsZCBub3QgZGVwZW5kIG9uIENsaXBib2FyZCwgRG9jdW1lbnRGcmFnbWVudCwg
YW5kIERvY3VtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCA0
NjlkOTU2Li4zNGMyMTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAK
QEAgLTIwLDE3ICsyMCwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkVk
aXRvckNsaWVudC5oIgogCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZURlc3Ry
dWN0aW9uT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNp
bmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2Fy
ZEhlbHBlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2FyZC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvV2luZG93c0tleWJvYXJkQ29kZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL21hcmt1cC5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTc1LDE1ICsxNzYsOSBAQCBzdGF0
aWMgdm9pZCBjb2xsYXBzZVNlbGVjdGlvbihHdGtDbGlwYm9hcmQqLCBGcmFtZSogZnJhbWUpCiB2
b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlR2xvYmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkK
IHsKICNpZiBQTEFURk9STShYMTEpCi0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRQcmltYXJ5U2VsZWN0
aW9uQ2xpcGJvYXJkKGZyYW1lKTsKLSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0
YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7Ci0KICAgICBpZiAoIWZyYW1lLT5z
ZWxlY3Rpb24oKS5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRhdGFPYmplY3Qt
PmNsZWFyQWxsKCk7Ci0gICAgZGF0YU9iamVjdC0+c2V0UmFuZ2UoZnJhbWUtPnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpOwotCiAgICAgZnJhbWVTZXR0aW5nQ2xpcGJvYXJkID0gZnJh
bWU7CiAgICAgR0Nsb3N1cmUqIGNhbGxiYWNrID0gZ19jY2xvc3VyZV9uZXcoR19DQUxMQkFDSyhj
b2xsYXBzZVNlbGVjdGlvbiksIGZyYW1lLCAwKTsKICAgICAvLyBUaGlzIG9ic2VydmVyIHdpbGwg
YmUgc2VsZi1kZXN0cm95ZWQgb24gY2xvc3VyZSBmaW5hbGl6YXRpb24sCkBAIC0xOTEsNyArMTg2
LDE0IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVHbG9iYWxTZWxlY3Rpb24oRnJhbWUq
IGZyYW1lKQogICAgIC8vIGNsb3N1cmUgaW52YWxpZGF0aW9uLgogICAgIG5ldyBFZGl0b3JDbGll
bnRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIoZnJhbWUsIGNhbGxiYWNrKTsKICAgICBnX2Nsb3N1
cmVfc2V0X21hcnNoYWwoY2FsbGJhY2ssIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lEKTsK
LSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNs
aXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCwgUGFzdGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRl
U21hcnRQYXN0ZSwgY2FsbGJhY2spOworCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1l
LT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFBhc3RlYm9hcmRXZWJDb250
ZW50IHBhc3RlYm9hcmRDb250ZW50OworICAgIHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29w
eU9yRGVsZXRlID0gZmFsc2U7CisgICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHJhbmdlLT50
ZXh0KCk7CisgICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gY3JlYXRlTWFya3VwKCpyYW5n
ZSwgbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2Nh
bFVSTHMpOworICAgIHBhc3RlYm9hcmRDb250ZW50LmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAg
UGFzdGVib2FyZDo6Y3JlYXRlRm9yR2xvYmFsU2VsZWN0aW9uKCktPndyaXRlKHBhc3RlYm9hcmRD
b250ZW50KTsKICAgICBmcmFtZVNldHRpbmdDbGlwYm9hcmQgPSAwOwogI2VuZGlmCiB9Cg==
</data>
<flag name="review"
          id="262843"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238115</attachid>
            <date>2014-09-15 05:00:02 -0700</date>
            <delta_ts>2014-09-15 05:15:18 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wcore-pasteboard-violations.diff</filename>
            <type>text/plain</type>
            <size>32914</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1NmU5YmZjLi5mYTRmNGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTgg
QEAKIDIwMTQtMDktMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEZpeCBsYXllcmluZyB2aW9sYXRpb25zIGluIFBhc3RlYm9hcmRH
dGsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjgw
MgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9y
IHRoZSBQYXN0ZWJvYXJkIGNvZGUgbW92aW5nIHRoZSBXZWJDb3JlIHBhcnRzIHRvIHRoZSBFZGl0
b3IuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogQWRkIG5ldyBmaWxlIHRvIGNvbXBp
bGF0aW9uLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNv
cHlJbWFnZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5n
L2d0ay9FZGl0b3JHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdt
ZW50RnJvbVBhc3RlQm9hcmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZUFuZFVSTEZvckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOgor
ICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJh
Z0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6CisgICAgICAgICogcGFnZS9ndGsvRHJhZ0NvbnRyb2xs
ZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcDogUmVtb3ZlIHJhbmdlIG1lbWJlciwg
dGhlIGNhbGxlcgorICAgICAgICBzaG91bGQgY2FsbCBzZXRUZXh0KCkgKyBzZXRNYXJrdXAoKSBp
bnRlYWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpzZXRUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnNldE1hcmt1cCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhT2JqZWN0R3RrOjpjbGVhclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVj
dEd0azo6Y2xlYXJNYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6Y2xl
YXJBbGxFeGNlcHRGaWxlbmFtZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EYXRhT2JqZWN0
R3RrLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc01hcmt1cCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhT2JqZWN0R3RrOjpjbGVhckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmpl
Y3RHdGs6OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6bWFya3VwKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnNldFJhbmdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkSW1hZ2U6OlBhc3RlYm9hcmRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
SW1hZ2U6On5QYXN0ZWJvYXJkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VVJMRm9ySW1hZ2VFbGVtZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZGlzcGxheUZyb21GcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkSGVscGVyOjpnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oOgorCisyMDE0LTA5LTE1
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBE
cmFnRGF0YSBzaG91bGQgbm90IGRlcGVuZCBvbiBDbGlwYm9hcmQsIERvY3VtZW50RnJhZ21lbnQs
IGFuZCBEb2N1bWVudAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEzNTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA4NTRjNDljLi45YThi
YjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTc5LDYgKzE3OSw3IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCiAgICAgYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCiAKICAgICBlZGl0aW5nL2F0ay9GcmFtZVNl
bGVjdGlvbkF0ay5jcHAKKyAgICBlZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCiAKICAgICBwYWdl
L2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAKICAgICBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggOGM4ZGFkYy4uZDMxOGYzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNTYyLDcgKzU2Miw3IEBAIFN0cmluZyBFZGl0
b3I6OnBsYWluVGV4dEZyb21QYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmRQbGFpblRleHQmIHRl
eHQpCiAKICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oRUZMKQor
I2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKEVGTCkgJiYgIVBMQVRGT1JNKEdUSykK
IHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQs
IGJvb2wgYWxsb3dQbGFpblRleHQsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVv
dGVIYW5kbGluZykKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OwpAQCAtMTMyNCwxMyArMTMyNCwxMyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgaW1hZ2VFbGVtZW50ID0g
aW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAKICAgICAgICAgaWYg
KGltYWdlRWxlbWVudCkgewotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpCisj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogICAg
ICAgICAgICAgd3JpdGVJbWFnZVRvUGFzdGVib2FyZCgqUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29w
eUFuZFBhc3RlKCksICppbWFnZUVsZW1lbnQsIGRvY3VtZW50KCkudXJsKCksIGRvY3VtZW50KCku
dGl0bGUoKSk7CiAjZWxzZQogICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCktPndyaXRlSW1hZ2UoKmltYWdlRWxlbWVudCwgZG9jdW1lbnQoKS51cmwoKSwgZG9j
dW1lbnQoKS50aXRsZSgpKTsKICNlbmRpZgogICAgICAgICB9IGVsc2UgewotI2lmIFBMQVRGT1JN
KENPQ09BKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JN
KEVGTCkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNlCiAgICAg
ICAgICAgICAvLyBGSVhNRTogQ29udmVydCBhbGwgb3RoZXIgcGxhdGZvcm1zIHRvIG1hdGNoIE1h
YyBhbmQgZGVsZXRlIHRoaXMuCkBAIC0xNDM2LDcgKzE0MzYsNyBAQCB2b2lkIEVkaXRvcjo6Y29w
eUltYWdlKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKICAgICBpZiAodXJsLmlzRW1wdHko
KSkKICAgICAgICAgdXJsID0gcmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKTsKIAotI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRG
T1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoKlBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLCAqZWxlbWVudCwgdXJsLCByZXN1bHQu
YWx0RGlzcGxheVN0cmluZygpKTsKICNlbHNlCiAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29w
eUFuZFBhc3RlKCktPndyaXRlSW1hZ2UoKmVsZW1lbnQsIHVybCwgcmVzdWx0LmFsdERpc3BsYXlT
dHJpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCAyODAxNjNlLi40YjcxOTVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTQ0Myw3ICs0NDMsNyBAQCBwdWJsaWM6CiAjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBM
QVRGT1JNKEVGTCkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFU
Rk9STShHVEspCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3cml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChQYXN0ZWJvYXJkJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3cml0ZUltYWdlVG9Q
YXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBFbGVtZW50JiBpbWFnZUVsZW1lbnQsIGNvbnN0IFVSTCYs
IGNvbnN0IFN0cmluZyYgdGl0bGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsv
RWRpdG9yR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDkxMmVh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3Rr
LmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorCisjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKKyNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5o
IgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlhMaW5rTmFtZXMuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJh
bWUsIFJhbmdlJiByYW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRl
eHQpCit7CisgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKKworICAgIGlmICghcGFzdGVib2Fy
ZC5oYXNEYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPERhdGFP
YmplY3RHdGs+IGRhdGFPYmplY3QgPSBwYXN0ZWJvYXJkLmRhdGFPYmplY3QoKTsKKyAgICBpZiAo
ZGF0YU9iamVjdC0+aGFzTWFya3VwKCkgJiYgZnJhbWUuZG9jdW1lbnQoKSkgeworICAgICAgICBp
ZiAoUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBkYXRhT2JqZWN0LT5tYXJrdXAoKSwgZW1wdHlTdHJp
bmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KSkKKyAgICAgICAgICAgIHJl
dHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKCFhbGxvd1BsYWluVGV4
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4
dCgpKSB7CisgICAgICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQocmFu
Z2UsIGRhdGFPYmplY3QtPnRleHQoKSkpCisgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVs
ZWFzZSgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEVkaXRvcjo6
cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxh
aW5UZXh0LCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCit7
CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGNob3NlUGxhaW5UZXh0OworICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmREYXRhKCpwYXN0ZWJvYXJkLCBtX2ZyYW1lLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBj
aG9zZVBsYWluVGV4dCk7CisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50
KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKKyAgICAgICAgcGFz
dGVBc0ZyYWdtZW50KGZyYWdtZW50LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFz
dGVib2FyZCksIGNob3NlUGxhaW5UZXh0LCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKK30KKwor
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudFVSTChFbGVtZW50JiBlbGVtZW50KQor
eworICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgfHwgaXNIVE1MSW5wdXRFbGVt
ZW50KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6c3JjQXR0cik7CisgICAgZWxzZSBpZiAoaXNTVkdJbWFnZUVsZW1lbnQoZWxlbWVu
dCkpCisgICAgICAgIHJldHVybiBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6
aHJlZkF0dHIpOworICAgIGVsc2UgaWYgKGlzSFRNTEVtYmVkRWxlbWVudChlbGVtZW50KSB8fCBp
c0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZWxlbWVudC5pbWFn
ZVNvdXJjZVVSTCgpOworICAgIHJldHVybiBudWxsQXRvbTsKK30KKworc3RhdGljIGJvb2wgZ2V0
SW1hZ2VGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIFJlZlB0cjxJbWFnZT4mIGltYWdlKQor
eworICAgIGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5k
ZXJlciB8fCAhcmVuZGVyZXItPmlzUmVuZGVySW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gdG9SZW5kZXJJbWFnZSgqcmVuZGVy
ZXIpLmNhY2hlZEltYWdlKCk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJbWFnZS0+
ZXJyb3JPY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbWFnZSA9IGNh
Y2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKHJlbmRlcmVyKTsKKyAgICByZXR1cm4gaW1hZ2U7
Cit9CisKK3ZvaWQgRWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBh
c3RlYm9hcmQsIEVsZW1lbnQmIGltYWdlRWxlbWVudCwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5n
JiB0aXRsZSkKK3sKKyAgICBQYXN0ZWJvYXJkSW1hZ2UgcGFzdGVib2FyZEltYWdlOworCisgICAg
aWYgKCFnZXRJbWFnZUZvckVsZW1lbnQoaW1hZ2VFbGVtZW50LCBwYXN0ZWJvYXJkSW1hZ2UuaW1h
Z2UpKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKHBhc3RlYm9hcmRJbWFnZS5pbWFnZSk7
CisKKyAgICBwYXN0ZWJvYXJkSW1hZ2UudXJsLnVybCA9IGltYWdlRWxlbWVudC5kb2N1bWVudCgp
LmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhlbGVtZW50VVJM
KGltYWdlRWxlbWVudCkpKTsKKyAgICBwYXN0ZWJvYXJkSW1hZ2UudXJsLnRpdGxlID0gdGl0bGU7
CisgICAgcGFzdGVib2FyZEltYWdlLnVybC5tYXJrdXAgPSBjcmVhdGVNYXJrdXAoaW1hZ2VFbGVt
ZW50LCBJbmNsdWRlTm9kZSwgbnVsbHB0ciwgUmVzb2x2ZUFsbFVSTHMpOworICAgIHBhc3RlYm9h
cmQud3JpdGUocGFzdGVib2FyZEltYWdlKTsKK30KKwordm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCit7CisgICAgUGFzdGVib2Fy
ZFdlYkNvbnRlbnQgcGFzdGVib2FyZENvbnRlbnQ7CisgICAgcGFzdGVib2FyZENvbnRlbnQuY2Fu
U21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOworICAgIHBhc3RlYm9h
cmRDb250ZW50LnRleHQgPSBzZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKTsKKyAgICBwYXN0
ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBjcmVhdGVNYXJrdXAoKnNlbGVjdGVkUmFuZ2UoKSwgbnVs
bHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMp
OworICAgIHBhc3RlYm9hcmRDb250ZW50LmNhbGxiYWNrID0gbnVsbHB0cjsKKyAgICBwYXN0ZWJv
YXJkLndyaXRlKHBhc3RlYm9hcmRDb250ZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA0ZTc3NzM0Li4yNDA0
MzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNzc0LDcgKzc3
NCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBE
cmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0aW9uCiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5n
VGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKICAg
ICAgICAgICAgICAgICBkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLndyaXRlUGxhaW5UZXh0KHNy
Yy5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIoKSwgUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICAgICAgICAgIGVsc2UgewotI2lmIFBMQVRGT1JNKENPQ09B
KSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEVGTCkg
fHwgUExBVEZPUk0oR1RLKQogICAgICAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICNlbHNlCiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnQgYWxsIG90aGVyIHBsYXRmb3JtcyB0byBtYXRj
aCBNYWMgYW5kIGRlbGV0ZSB0aGlzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9n
dGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJhZ0Nv
bnRyb2xsZXJHdGsuY3BwCmluZGV4IDE3MmM1ZDQuLjZlZmM2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNs
dWRlICJEcmFnRGF0YS5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVsZW1lbnQu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNzUsNyAr
NzYsOSBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1EcmFnKCkKIAog
dm9pZCBEcmFnQ29udHJvbGxlcjo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKERhdGFUcmFuc2Zl
ciYgZGF0YVRyYW5zZmVyLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBsYWJlbCkKIHsKLSAgICBkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLndyaXRlSW1h
Z2UoZWxlbWVudCwgdXJsLCBsYWJlbCk7CisgICAgRnJhbWUqIGZyYW1lID0gZWxlbWVudC5kb2N1
bWVudCgpLmZyYW1lKCk7CisgICAgQVNTRVJUKGZyYW1lKTsKKyAgICBmcmFtZS0+ZWRpdG9yKCku
d3JpdGVJbWFnZVRvUGFzdGVib2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLCBlbGVtZW50
LCB1cmwsIGxhYmVsKTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnQ29u
dHJvbGxlcjo6Y3JlYXRlRnJhZ21lbnRGcm9tRHJhZ0RhdGEoRHJhZ0RhdGEmIGRyYWdEYXRhLCBG
cmFtZSYgZnJhbWUsIFJhbmdlJiwgYm9vbCAvKmFsbG93UGxhaW5UZXh0Ki8sIGJvb2wmIC8qY2hv
c2VQbGFpblRleHQqLykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3Rl
Ym9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRleCBmZGVm
ZjViLi40YWFhN2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJv
YXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCkBAIC0zNCw2
ICszNCw3IEBACiAKICNpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBfR3RrQ2xpcGJv
YXJkIEd0a0NsaXBib2FyZDsKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKElPUykKQEAgLTc4LDYgKzc5LDEyIEBAIHN0cnVjdCBQYXN0ZWJv
YXJkV2ViQ29udGVudCB7CiAgICAgVmVjdG9yPFN0cmluZz4gY2xpZW50VHlwZXM7CiAgICAgVmVj
dG9yPFJlZlB0cjxTaGFyZWRCdWZmZXI+PiBjbGllbnREYXRhOwogI2VuZGlmCisjaWYgUExBVEZP
Uk0oR1RLKQorICAgIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGU7CisgICAgU3RyaW5nIHRleHQ7
CisgICAgU3RyaW5nIG1hcmt1cDsKKyAgICBHUmVmUHRyPEdDbG9zdXJlPiBjYWxsYmFjazsKKyNl
bmRpZgogfTsKIAogc3RydWN0IFBhc3RlYm9hcmRVUkwgewpAQCAtODYsMTQgKzkzLDE5IEBAIHN0
cnVjdCBQYXN0ZWJvYXJkVVJMIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgU3RyaW5nIHVzZXJW
aXNpYmxlRm9ybTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBTdHJpbmcgbWFya3Vw
OworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgUGFzdGVib2FyZEltYWdlIHsKICAgICBXRUJDT1JFX0VY
UE9SVCBQYXN0ZWJvYXJkSW1hZ2UoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+UGFzdGVib2FyZElt
YWdlKCk7CiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZTsKLSNpZiAhKFBMQVRGT1JNKEVGTCkgfHwg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKQorI2lmICEoUExBVEZPUk0oRUZMKSB8fCBQ
TEFURk9STShXSU4pKQogICAgIFBhc3RlYm9hcmRVUkwgdXJsOworI2VuZGlmCisjaWYgIShQTEFU
Rk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKSkKICAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiByZXNvdXJjZURhdGE7CiAgICAgU3RyaW5nIHJlc291cmNlTUlNRVR5cGU7
CiAjZW5kaWYKQEAgLTE2Miw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREcmFnSW1h
Z2UoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYgaG90U3BvdCk7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQorI2lmIFBMQVRGT1JNKFdJTikKICAgICBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnQoRnJhbWUmLCBSYW5n
ZSYsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KTsgLy8gRklYTUU6
IExheWVyaW5nIHZpb2xhdGlvbi4KICAgICB2b2lkIHdyaXRlSW1hZ2UoRWxlbWVudCYsIGNvbnN0
IFVSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9u
LgogICAgIHZvaWQgd3JpdGVTZWxlY3Rpb24oUmFuZ2UmLCBib29sIGNhblNtYXJ0Q29weU9yRGVs
ZXRlLCBGcmFtZSYsIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlciA9
IERlZmF1bHRTZWxlY3RlZFRleHRUeXBlKTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCBi
YzMzYmI5Li5mNjAwMTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RGF0YU9iamVjdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFP
YmplY3RHdGsuY3BwCkBAIC0xOSw5ICsxOSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiRGF0YU9iamVjdEd0ay5oIgogCi0jaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8
Z3RrL2d0ay5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMywyMyArMzMsNiBAQCBzdGF0aWMgdm9pZCBy
ZXBsYWNlTm9uQnJlYWtpbmdTcGFjZVdpdGhTcGFjZShTdHJpbmcmIHN0cikKICAgICBzdHIucmVw
bGFjZShOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyLCBTcGFjZUNoYXJhY3Rlcik7CiB9CiAKLVN0
cmluZyBEYXRhT2JqZWN0R3RrOjp0ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9yYW5nZSkgewot
ICAgICAgICBTdHJpbmcgdGV4dCA9IG1fcmFuZ2UtPnRleHQoKTsKLSAgICAgICAgcmVwbGFjZU5v
bkJyZWFraW5nU3BhY2VXaXRoU3BhY2UodGV4dCk7Ci0gICAgICAgIHJldHVybiB0ZXh0OwotICAg
IH0KLSAgICByZXR1cm4gbV90ZXh0OwotfQotCi1TdHJpbmcgRGF0YU9iamVjdEd0azo6bWFya3Vw
KCkgY29uc3QKLXsKLSAgICBpZiAobV9yYW5nZSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1
cCgqbV9yYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25M
b2NhbFVSTHMpOwotICAgIHJldHVybiBtX21hcmt1cDsKLX0KLQogSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gRGF0YU9iamVjdEd0azo6dW5rbm93blR5cGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV91bmtub3duVHlwZURhdGE7CkBAIC01NywxNCArNDAsMTIgQEAgSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4gRGF0YU9iamVjdEd0azo6dW5rbm93blR5cGVzKCkgY29uc3QKIAogdm9pZCBEYXRhT2Jq
ZWN0R3RrOjpzZXRUZXh0KGNvbnN0IFN0cmluZyYgbmV3VGV4dCkKIHsKLSAgICBtX3JhbmdlID0g
MDsKICAgICBtX3RleHQgPSBuZXdUZXh0OwogICAgIHJlcGxhY2VOb25CcmVha2luZ1NwYWNlV2l0
aFNwYWNlKG1fdGV4dCk7CiB9CiAKIHZvaWQgRGF0YU9iamVjdEd0azo6c2V0TWFya3VwKGNvbnN0
IFN0cmluZyYgbmV3TWFya3VwKQogewotICAgIG1fcmFuZ2UgPSAwOwogICAgIG1fbWFya3VwID0g
bmV3TWFya3VwOwogfQogCkBAIC0xMzEsMTQgKzExMiwxMiBAQCB2b2lkIERhdGFPYmplY3RHdGs6
OnNldFVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKIAogdm9pZCBEYXRh
T2JqZWN0R3RrOjpjbGVhclRleHQoKQogewotICAgIG1fcmFuZ2UgPSAwOwotICAgIG1fdGV4dCA9
ICIiOworICAgIG1fdGV4dCA9IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHZvaWQgRGF0YU9iamVjdEd0
azo6Y2xlYXJNYXJrdXAoKQogewotICAgIG1fcmFuZ2UgPSAwOwotICAgIG1fbWFya3VwID0gIiI7
CisgICAgbV9tYXJrdXAgPSBlbXB0eVN0cmluZygpOwogfQogCiBTdHJpbmcgRGF0YU9iamVjdEd0
azo6dXJsTGFiZWwoKSBjb25zdApAQCAtMTU0LDEyICsxMzMsMTEgQEAgU3RyaW5nIERhdGFPYmpl
Y3RHdGs6OnVybExhYmVsKCkgY29uc3QKIAogdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhckFsbEV4
Y2VwdEZpbGVuYW1lcygpCiB7Ci0gICAgbV90ZXh0ID0gIiI7Ci0gICAgbV9tYXJrdXAgPSAiIjsK
LSAgICBtX3VyaUxpc3QgPSAiIjsKKyAgICBtX3RleHQgPSBlbXB0eVN0cmluZygpOworICAgIG1f
bWFya3VwID0gZW1wdHlTdHJpbmcoKTsKKyAgICBtX3VyaUxpc3QgPSBlbXB0eVN0cmluZygpOwog
ICAgIG1fdXJsID0gVVJMKCk7Ci0gICAgbV9pbWFnZSA9IDA7Ci0gICAgbV9yYW5nZSA9IDA7Cisg
ICAgbV9pbWFnZSA9IG51bGxwdHI7CiAgICAgbV91bmtub3duVHlwZURhdGEuY2xlYXIoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKaW5kZXggZmYx
NDI0OS4uODUwZDI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Rh
dGFPYmplY3RHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVj
dEd0ay5oCkBAIC0yMSwxMCArMjEsOCBAQAogCiAjaW5jbHVkZSAiRmlsZUxpc3QuaCIKICNpbmNs
dWRlICJVUkwuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQwLDIyICszOCwyMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5n
JiB1cmlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV91cmlMaXN0OyB9CiAgICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9CiAgICAg
R2RrUGl4YnVmKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KLSAgICB2
b2lkIHNldFJhbmdlKFBhc3NSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlKSB7IG1fcmFuZ2UgPSBuZXdS
YW5nZTsgfQogICAgIHZvaWQgc2V0SW1hZ2UoR2RrUGl4YnVmKiBuZXdJbWFnZSkgeyBtX2ltYWdl
ID0gbmV3SW1hZ2U7IH0KICAgICB2b2lkIHNldFVSTChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcm
KTsKICAgICBib29sIGhhc1Vua25vd25UeXBlRGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX3Vua25v
d25UeXBlRGF0YS5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc1RleHQoKSBjb25zdCB7IHJldHVy
biBtX3JhbmdlIHx8ICFtX3RleHQuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNNYXJrdXAoKSBj
b25zdCB7IHJldHVybiBtX3JhbmdlIHx8ICFtX21hcmt1cC5pc0VtcHR5KCk7IH0KKyAgICBib29s
IGhhc1RleHQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
aGFzTWFya3VwKCkgY29uc3QgeyByZXR1cm4gIW1fbWFya3VwLmlzRW1wdHkoKTsgfQogICAgIGJv
b2wgaGFzVVJJTGlzdCgpIGNvbnN0IHsgcmV0dXJuICFtX3VyaUxpc3QuaXNFbXB0eSgpOyB9CiAg
ICAgYm9vbCBoYXNVUkwoKSBjb25zdCB7IHJldHVybiAhbV91cmwuaXNFbXB0eSgpICYmIG1fdXJs
LmlzVmFsaWQoKTsgfQogICAgIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gIW1f
ZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQogICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVy
biBtX2ltYWdlOyB9CiAgICAgdm9pZCBjbGVhclVSSUxpc3QoKSB7IG1fdXJpTGlzdCA9ICIiOyB9
CiAgICAgdm9pZCBjbGVhclVSTCgpIHsgbV91cmwgPSBVUkwoKTsgfQotICAgIHZvaWQgY2xlYXJJ
bWFnZSgpIHsgbV9pbWFnZSA9IDA7IH0KKyAgICB2b2lkIGNsZWFySW1hZ2UoKSB7IG1faW1hZ2Ug
PSBudWxscHRyOyB9CiAKLSAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OwotICAgIFN0cmluZyBtYXJr
dXAoKSBjb25zdDsKKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQor
ICAgIFN0cmluZyBtYXJrdXAoKSBjb25zdCB7IHJldHVybiBtX21hcmt1cDsgfQogICAgIFN0cmlu
ZyB1bmtub3duVHlwZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdCB7IHJldHVybiBtX3Vu
a25vd25UeXBlRGF0YS5nZXQodHlwZSk7IH0KICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiB1
bmtub3duVHlwZXMoKSBjb25zdDsKICAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7CkBA
IC03OCw3ICs3NSw2IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXJpTGlzdDsKICAgICBWZWN0
b3I8U3RyaW5nPiBtX2ZpbGVuYW1lczsKICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gbV9pbWFnZTsK
LSAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4g
bV91bmtub3duVHlwZURhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCmluZGV4IDUyOWU5OTguLmE4YzZmMjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5o
CkBAIC0yNyw2ICsyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IERyb3BwaW5n
Q29udGV4dDsKIGNsYXNzIERyYWdEYXRhOworY2xhc3MgSW50UG9pbnQ7CiAKIHR5cGVkZWYgdm9p
ZCAoKkRyYWdFeGl0ZWRDYWxsYmFjaykoR3RrV2lkZ2V0KiwgRHJhZ0RhdGEmLCBib29sIGRyb3BI
YXBwZW5lZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3Rr
LmNwcAppbmRleCA1YjE2NWE4Li4wYWFkZDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCkBAIC0yMCwyNiArMjAsMTMgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAKLSNpbmNsdWRlICJDYWNoZWRJbWFn
ZS5oIgogI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLSNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MSW5wdXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRN
TFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAj
aW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgotI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0j
aW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAi
WExpbmtOYW1lcy5oIgotI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LQorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtODksNiArNzYsMTUgQEAgUGFzc093blB0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVh
dGVGb3JEcmFnQW5kRHJvcChjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEKIH0KICNlbmRpZgogCisv
LyBNYWtpbmcgdGhpcyBub24taW5saW5lIHNvIHRoYXQgV2ViS2l0IDIncyBkZWNvZGluZyBkb2Vz
bid0IGhhdmUgdG8gaW5jbHVkZSBJbWFnZS5oLgorUGFzdGVib2FyZEltYWdlOjpQYXN0ZWJvYXJk
SW1hZ2UoKQoreworfQorCitQYXN0ZWJvYXJkSW1hZ2U6On5QYXN0ZWJvYXJkSW1hZ2UoKQorewor
fQorCiBQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0
YU9iamVjdCkKICAgICA6IG1fZGF0YU9iamVjdChkYXRhT2JqZWN0KQogICAgICwgbV9ndGtDbGlw
Ym9hcmQoMCkKQEAgLTE1NiwxNiArMTUyLDYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICB9CiB9CiAKLXZv
aWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UmIHNlbGVjdGVkUmFuZ2UsIGJvb2wg
Y2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lJiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0
ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckRhdGFU
cmFuc2ZlcikKLXsKLSAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7Ci0gICAgbV9kYXRhT2Jq
ZWN0LT5zZXRUZXh0KHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlciA9
PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyID8gZnJhbWUuZWRpdG9yKCkuc2Vs
ZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKCkgOiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFRleHQo
KSk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFu
Z2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxz
KSk7Ci0KLSAgICBpZiAobV9ndGtDbGlwYm9hcmQpCi0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6
OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtD
bGlwYm9hcmQsIGNhblNtYXJ0Q29weU9yRGVsZXRlID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVk
ZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVyOjpEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsK
LX0KLQogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQs
IFNtYXJ0UmVwbGFjZU9wdGlvbiBzbWFydFJlcGxhY2VPcHRpb24pCiB7CiAgICAgbV9kYXRhT2Jq
ZWN0LT5jbGVhckFsbCgpOwpAQCAtMTg2LDQ4ICsxNzIsMzIgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZShjb25zdCBQYXN0ZWJvYXJkVVJMJiBwYXN0ZWJvYXJkVVJMKQogICAgICAgICBQYXN0ZWJv
YXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRl
bnRzKG1fZ3RrQ2xpcGJvYXJkKTsKIH0KIAotc3RhdGljIFVSTCBnZXRVUkxGb3JJbWFnZUVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICAvLyBGSVhNRTogTGF0ZXIgdGhpcyBjb2RlIHNo
b3VsZCBiZSBzaGFyZWQgd2l0aCBDaHJvbWl1bSBzb21laG93LiBDaGFuY2VzIGFyZSBhbGwgcGxh
dGZvcm1zIHdhbnQgaXQuCi0gICAgQXRvbWljU3RyaW5nIHVybFN0cmluZzsKLSAgICBpZiAoaXNI
VE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTElucHV0RWxlbWVudChlbGVtZW50KSkK
LSAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNB
dHRyKTsKLSAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmltYWdlVGFn
KSkKLSAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6
aHJlZkF0dHIpOwotICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmVt
YmVkVGFnKSB8fCBpc0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICB1cmxTdHJp
bmcgPSBlbGVtZW50LmltYWdlU291cmNlVVJMKCk7Ci0KLSAgICByZXR1cm4gdXJsU3RyaW5nLmlz
RW1wdHkoKSA/IFVSTCgpIDogZWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVh
ZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcpKTsKLX0KLQotdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZUltYWdlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRJbWFnZSYg
cGFzdGVib2FyZEltYWdlKQogewotICAgIGlmICghKGVsZW1lbnQucmVuZGVyZXIoKSAmJiBlbGVt
ZW50LnJlbmRlcmVyKCktPmlzUmVuZGVySW1hZ2UoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2UoZWxlbWVudC5yZW5kZXJlcigp
KTsKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVkSW1hZ2Uo
KTsKLSAgICBpZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZS0+aW1hZ2VG
b3JSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgQVNTRVJUKGltYWdlKTsKLQogICAgIG1fZGF0YU9i
amVjdC0+Y2xlYXJBbGwoKTsKLQotICAgIFVSTCB1cmwgPSBnZXRVUkxGb3JJbWFnZUVsZW1lbnQo
ZWxlbWVudCk7Ci0gICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fZGF0YU9iamVj
dC0+c2V0VVJMKHVybCwgdGl0bGUpOwotCi0gICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3Vw
KGNyZWF0ZU1hcmt1cChlbGVtZW50LCBJbmNsdWRlTm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsK
KyAgICBpZiAoIXBhc3RlYm9hcmRJbWFnZS51cmwudXJsLmlzRW1wdHkoKSkgeworICAgICAgICBt
X2RhdGFPYmplY3QtPnNldFVSTChwYXN0ZWJvYXJkSW1hZ2UudXJsLnVybCwgcGFzdGVib2FyZElt
YWdlLnVybC50aXRsZSk7CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKHBhc3RlYm9h
cmRJbWFnZS51cmwubWFya3VwKTsKICAgICB9CiAKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4
YnVmID0gYWRvcHRHUmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7Ci0gICAgbV9kYXRhT2JqZWN0
LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkpOworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYg
PSBhZG9wdEdSZWYocGFzdGVib2FyZEltYWdlLmltYWdlLT5nZXRHZGtQaXhidWYoKSk7CisgICAg
aWYgKHBpeGJ1ZikKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRJbWFnZShwaXhidWYuZ2V0KCkp
OwogCiAgICAgaWYgKG1fZ3RrQ2xpcGJvYXJkKQogICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xp
cGJvYXJkKTsKIH0KIAordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2Vi
Q29udGVudCYgcGFzdGVib2FyZENvbnRlbnQpCit7CisgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFs
bCgpOworICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChwYXN0ZWJvYXJkQ29udGVudC50ZXh0KTsK
KyAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChwYXN0ZWJvYXJkQ29udGVudC5tYXJrdXApOwor
CisgICAgaWYgKG1fZ3RrQ2xpcGJvYXJkKQorICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZh
dWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJv
YXJkLCBwYXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA/IFBhc3RlYm9hcmRI
ZWxwZXI6OkluY2x1ZGVTbWFydFBhc3RlIDogUGFzdGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRl
U21hcnRQYXN0ZSwgcGFzdGVib2FyZENvbnRlbnQuY2FsbGJhY2suZ2V0KCkpOworfQorCiB2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlUGFzdGVib2FyZChjb25zdCBQYXN0ZWJvYXJkJiBzb3VyY2VQYXN0
ZWJvYXJkKQogewogICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBzb3VyY2VEYXRhT2JqZWN0ID0g
c291cmNlUGFzdGVib2FyZC5kYXRhT2JqZWN0KCk7CkBAIC0zMDIsMzQgKzI3Miw2IEBAIHZvaWQg
UGFzdGVib2FyZDo6c2V0RHJhZ0ltYWdlKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmKQog
fQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9j
dW1lbnRGcmFnbWVudChGcmFtZSYgZnJhbWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxh
aW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKLXsKLSAgICBpZiAobV9ndGtDbGlwYm9hcmQp
Ci0gICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdl
dENsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkKTsKLQotICAgIGNob3NlUGxhaW5UZXh0
ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkgewotICAgICAg
ICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkgewotICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVu
dCgpLCBtX2RhdGFPYmplY3QtPm1hcmt1cCgpLCBlbXB0eVN0cmluZygpLCBEaXNhbGxvd1Njcmlw
dGluZ0FuZFBsdWdpbkNvbnRlbnQpOwotICAgICAgICAgICAgaWYgKGZyYWdtZW50KQotICAgICAg
ICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICht
X2RhdGFPYmplY3QtPmhhc1RleHQoKSkgewotICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7
Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoY29udGV4dCwgbV9kYXRhT2JqZWN0LT50ZXh0KCkpOwotICAgICAgICBpZiAo
ZnJhZ21lbnQpCi0gICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwotICAgIH0K
LQotICAgIHJldHVybiAwOwotfQotCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFBs
YWluVGV4dCYgdGV4dCkKIHsKICAgICBpZiAobV9ndGtDbGlwYm9hcmQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5jcHAKaW5kZXggYzA5MjIyNy4u
Mjg2OWQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJk
SGVscGVyLmNwcApAQCAtMjMsMTYgKzIzLDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgogCi0jaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVk
ZSAiRGF0YU9iamVjdEd0ay5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR1JlZlB0
ckd0ay5oIgogI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIK
ICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC05NSwyMCArOTMsNiBAQCBQYXN0ZWJvYXJkSGVscGVyOjp+UGFzdGVib2FyZEhlbHBlcigp
CiAgICAgZ3RrX3RhcmdldF9saXN0X3VucmVmKG1fdGFyZ2V0TGlzdCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgR2RrRGlzcGxheSogZGlzcGxheUZyb21GcmFtZShGcmFtZSogZnJhbWUpCi17Ci0gICAg
QVNTRVJUKGZyYW1lKTsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBBU1NF
UlQocGFnZSk7Ci0gICAgUGxhdGZvcm1QYWdlQ2xpZW50IGNsaWVudCA9IHBhZ2UtPmNocm9tZSgp
LnBsYXRmb3JtUGFnZUNsaWVudCgpOwotICAgIHJldHVybiBjbGllbnQgPyBndGtfd2lkZ2V0X2dl
dF9kaXNwbGF5KGNsaWVudCkgOiBnZGtfZGlzcGxheV9nZXRfZGVmYXVsdCgpOwotfQotCi1HdGtD
bGlwYm9hcmQqIFBhc3RlYm9hcmRIZWxwZXI6OmdldFByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQo
RnJhbWUqIGZyYW1lKSBjb25zdAotewotICAgIHJldHVybiBndGtfY2xpcGJvYXJkX2dldF9mb3Jf
ZGlzcGxheShkaXNwbGF5RnJvbUZyYW1lKGZyYW1lKSwgR0RLX1NFTEVDVElPTl9QUklNQVJZKTsK
LX0KLQogR3RrVGFyZ2V0TGlzdCogUGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlzdCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fdGFyZ2V0TGlzdDsKQEAgLTMwOSwxMiArMjkzLDExIEBAIHN0YXRp
YyB2b2lkIGNsZWFyQ2xpcGJvYXJkQ29udGVudHNDYWxsYmFjayhHdGtDbGlwYm9hcmQqIGNsaXBi
b2FyZCwgZ3BvaW50ZXIgZGF0CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBHQ2xvc3VyZSogY2FsbGJhY2sgPSBzdGF0aWNfY2FzdDxHQ2xvc3VyZSo+KGRhdGEpOworICAg
IEdSZWZQdHI8R0Nsb3N1cmU+IGNhbGxiYWNrID0gYWRvcHRHUmVmKHN0YXRpY19jYXN0PEdDbG9z
dXJlKj4oZGF0YSkpOwogICAgIEdWYWx1ZSBmaXJzdEFyZ3VtZW50ID0gezAsIHt7MH19fTsKICAg
ICBnX3ZhbHVlX2luaXQoJmZpcnN0QXJndW1lbnQsIEdfVFlQRV9QT0lOVEVSKTsKICAgICBnX3Zh
bHVlX3NldF9wb2ludGVyKCZmaXJzdEFyZ3VtZW50LCBjbGlwYm9hcmQpOwotICAgIGdfY2xvc3Vy
ZV9pbnZva2UoY2FsbGJhY2ssIDAsIDEsICZmaXJzdEFyZ3VtZW50LCAwKTsKLSAgICBnX2Nsb3N1
cmVfdW5yZWYoY2FsbGJhY2spOworICAgIGdfY2xvc3VyZV9pbnZva2UoY2FsbGJhY2suZ2V0KCks
IG51bGxwdHIsIDEsICZmaXJzdEFyZ3VtZW50LCAwKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkSGVs
cGVyOjp3cml0ZUNsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBTbWFy
dFBhc3RlSW5jbHVzaW9uIGluY2x1ZGVTbWFydFBhc3RlLCBHQ2xvc3VyZSogY2FsbGJhY2spCkBA
IC0zMjgsMTEgKzMxMSwxNCBAQCB2b2lkIFBhc3RlYm9hcmRIZWxwZXI6OndyaXRlQ2xpcGJvYXJk
Q29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIFNtYXJ0UGFzdAogICAgIGlmIChudW1i
ZXJPZlRhcmdldHMgPiAwICYmIHRhYmxlKSB7CiAgICAgICAgIHNldHRpbmdDbGlwYm9hcmREYXRh
T2JqZWN0ID0gZGF0YU9iamVjdDsKIAotICAgICAgICBndGtfY2xpcGJvYXJkX3NldF93aXRoX2Rh
dGEoY2xpcGJvYXJkLCB0YWJsZSwgbnVtYmVyT2ZUYXJnZXRzLAotICAgICAgICAgICAgZ2V0Q2xp
cGJvYXJkQ29udGVudHNDYWxsYmFjaywgY2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBj
YWxsYmFjayk7Ci0gICAgICAgIGd0a19jbGlwYm9hcmRfc2V0X2Nhbl9zdG9yZShjbGlwYm9hcmQs
IDAsIDApOworICAgICAgICBpZiAoZ3RrX2NsaXBib2FyZF9zZXRfd2l0aF9kYXRhKGNsaXBib2Fy
ZCwgdGFibGUsIG51bWJlck9mVGFyZ2V0cywgZ2V0Q2xpcGJvYXJkQ29udGVudHNDYWxsYmFjaywg
Y2xlYXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBnX2Nsb3N1cmVfcmVmKGNhbGxiYWNrKSkp
CisgICAgICAgICAgICBndGtfY2xpcGJvYXJkX3NldF9jYW5fc3RvcmUoY2xpcGJvYXJkLCBudWxs
cHRyLCAwKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBXaGVuIGd0a19jbGlwYm9h
cmRfc2V0X3dpdGhfZGF0YSBmYWlscyB0aGUgY2FsbGJhY2tzIGFyZSBpZ25vcmVkLCBzbyB3ZSBu
ZWVkIHRvIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSB3ZSB3ZXJlIHBhc3NpbmcgdG8gY2xlYXJDbGlw
Ym9hcmRDb250ZW50c0NhbGxiYWNrLgorICAgICAgICAgICAgZ19jbG9zdXJlX3VucmVmKGNhbGxi
YWNrKTsKKyAgICAgICAgfQogCi0gICAgICAgIHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0ID0g
MDsKKyAgICAgICAgc2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSBudWxscHRyOwogCiAgICAg
fSBlbHNlCiAgICAgICAgIGd0a19jbGlwYm9hcmRfY2xlYXIoY2xpcGJvYXJkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCmluZGV4IDVlYjY2OWUu
LjBkMDNkMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJv
YXJkSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRI
ZWxwZXIuaApAQCAtMjUsOCArMjUsOCBAQAogI2lmbmRlZiBQYXN0ZWJvYXJkSGVscGVyX2gKICNk
ZWZpbmUgUGFzdGVib2FyZEhlbHBlcl9oCiAKLSNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQwLDcgKzQwLDYgQEAgcHVibGljOgogCiAgICAgZW51bSBTbWFydFBhc3Rl
SW5jbHVzaW9uIHsgSW5jbHVkZVNtYXJ0UGFzdGUsIERvTm90SW5jbHVkZVNtYXJ0UGFzdGUgfTsK
IAotICAgIEd0a0NsaXBib2FyZCogZ2V0UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChGcmFtZSop
IGNvbnN0OwogICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3QoKSBjb25zdDsKICAgICBHdGtU
YXJnZXRMaXN0KiB0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2JqZWN0R3RrKiwgU21hcnRQ
YXN0ZUluY2x1c2lvbiA9IERvTm90SW5jbHVkZVNtYXJ0UGFzdGUpOwogICAgIHZvaWQgZmlsbFNl
bGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50LCBEYXRhT2JqZWN0R3RrKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggMTYzMzkwZi4uZjQ5NDE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2IEBA
CiAyMDE0LTA5LTE1ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
IAorICAgICAgICBbR1RLXSBGaXggbGF5ZXJpbmcgdmlvbGF0aW9ucyBpbiBQYXN0ZWJvYXJkR3Rr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4MDIK
KworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dXBkYXRlR2xvYmFsU2VsZWN0aW9uKTogVXNlIG5ldyBB
UEkgdG8KKyAgICAgICAgdXBkYXRlIHRoZSBnbG9iYWwgc2VsZWN0aW9uLgorCisyMDE0LTA5LTE1
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBE
cmFnRGF0YSBzaG91bGQgbm90IGRlcGVuZCBvbiBDbGlwYm9hcmQsIERvY3VtZW50RnJhZ21lbnQs
IGFuZCBEb2N1bWVudAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEzNTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKaW5kZXgg
NDY5ZDk1Ni4uYmNhODNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3Bw
CkBAIC0yMCwxNyArMjAsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJF
ZGl0b3JDbGllbnQuaCIKIAotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVEZXN0
cnVjdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRGF0YU9iamVjdEd0ay5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1l
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9h
cmRIZWxwZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Bhc3RlYm9hcmQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1dpbmRvd3NLZXlib2FyZENvZGVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9tYXJrdXAu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCkBAIC0xNzUsMjQgKzE3NywyNSBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZVNlbGVj
dGlvbihHdGtDbGlwYm9hcmQqLCBGcmFtZSogZnJhbWUpCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6
dXBkYXRlR2xvYmFsU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKIHsKICNpZiBQTEFURk9STShYMTEp
Ci0gICAgR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT5nZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKGZyYW1lKTsK
LSAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJv
YXJkKGNsaXBib2FyZCk7Ci0KICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5pc1JhbmdlKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGRhdGFPYmplY3QtPmNsZWFyQWxsKCk7Ci0gICAgZGF0
YU9iamVjdC0+c2V0UmFuZ2UoZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
OwotCiAgICAgZnJhbWVTZXR0aW5nQ2xpcGJvYXJkID0gZnJhbWU7Ci0gICAgR0Nsb3N1cmUqIGNh
bGxiYWNrID0gZ19jY2xvc3VyZV9uZXcoR19DQUxMQkFDSyhjb2xsYXBzZVNlbGVjdGlvbiksIGZy
YW1lLCAwKTsKKyAgICBHUmVmUHRyPEdDbG9zdXJlPiBjYWxsYmFjayA9IGFkb3B0R1JlZihnX2Nj
bG9zdXJlX25ldyhHX0NBTExCQUNLKGNvbGxhcHNlU2VsZWN0aW9uKSwgZnJhbWUsIG51bGxwdHIp
KTsKICAgICAvLyBUaGlzIG9ic2VydmVyIHdpbGwgYmUgc2VsZi1kZXN0cm95ZWQgb24gY2xvc3Vy
ZSBmaW5hbGl6YXRpb24sCiAgICAgLy8gdGhhdCB3aWxsIGhhcHBlbiBlaXRoZXIgYWZ0ZXIgY2xv
c3VyZSBleGVjdXRpb24gb3IgYWZ0ZXIKICAgICAvLyBjbG9zdXJlIGludmFsaWRhdGlvbi4KLSAg
ICBuZXcgRWRpdG9yQ2xpZW50RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyKGZyYW1lLCBjYWxsYmFj
ayk7Ci0gICAgZ19jbG9zdXJlX3NldF9tYXJzaGFsKGNhbGxiYWNrLCBnX2NjbG9zdXJlX21hcnNo
YWxfVk9JRF9fVk9JRCk7Ci0gICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRI
ZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhjbGlwYm9hcmQsIFBhc3RlYm9hcmRIZWxw
ZXI6OkRvTm90SW5jbHVkZVNtYXJ0UGFzdGUsIGNhbGxiYWNrKTsKLSAgICBmcmFtZVNldHRpbmdD
bGlwYm9hcmQgPSAwOworICAgIG5ldyBFZGl0b3JDbGllbnRGcmFtZURlc3RydWN0aW9uT2JzZXJ2
ZXIoZnJhbWUsIGNhbGxiYWNrLmdldCgpKTsKKyAgICBnX2Nsb3N1cmVfc2V0X21hcnNoYWwoY2Fs
bGJhY2suZ2V0KCksIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lEKTsKKworICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBwYXN0ZWJvYXJkQ29udGVudDsKKyAgICBwYXN0ZWJv
YXJkQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGZhbHNlOworICAgIHBhc3RlYm9hcmRD
b250ZW50LnRleHQgPSByYW5nZS0+dGV4dCgpOworICAgIHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1
cCA9IGNyZWF0ZU1hcmt1cCgqcmFuZ2UsIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2Us
IGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKTsKKyAgICBwYXN0ZWJvYXJkQ29udGVudC5jYWxs
YmFjayA9IGNhbGxiYWNrOworICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckdsb2JhbFNlbGVjdGlv
bigpLT53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CisgICAgZnJhbWVTZXR0aW5nQ2xpcGJvYXJk
ID0gbnVsbHB0cjsKICNlbmRpZgogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238118</attachid>
            <date>2014-09-15 05:15:18 -0700</date>
            <delta_ts>2014-09-15 05:15:18 -0700</delta_ts>
            <desc>Fixed coding style issues</desc>
            <filename>wcore-pasteboard-violations.diff</filename>
            <type>text/plain</type>
            <size>32904</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1NmU5YmZjLi5mYTRmNGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTgg
QEAKIDIwMTQtMDktMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEZpeCBsYXllcmluZyB2aW9sYXRpb25zIGluIFBhc3RlYm9hcmRH
dGsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjgw
MgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFJlZmFjdG9y
IHRoZSBQYXN0ZWJvYXJkIGNvZGUgbW92aW5nIHRoZSBXZWJDb3JlIHBhcnRzIHRvIHRoZSBFZGl0
b3IuCisKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogQWRkIG5ldyBmaWxlIHRvIGNvbXBp
bGF0aW9uLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNv
cHlJbWFnZSk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuaDoKKyAgICAgICAgKiBlZGl0aW5n
L2d0ay9FZGl0b3JHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdt
ZW50RnJvbVBhc3RlQm9hcmREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6cGFzdGVX
aXRoUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRJbWFnZUFuZFVSTEZvckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOgor
ICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJh
Z0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6CisgICAgICAgICogcGFnZS9ndGsvRHJhZ0NvbnRyb2xs
ZXJHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcDogUmVtb3ZlIHJhbmdlIG1lbWJlciwg
dGhlIGNhbGxlcgorICAgICAgICBzaG91bGQgY2FsbCBzZXRUZXh0KCkgKyBzZXRNYXJrdXAoKSBp
bnRlYWQuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpzZXRUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnNldE1hcmt1cCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhT2JqZWN0R3RrOjpjbGVhclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVj
dEd0azo6Y2xlYXJNYXJrdXApOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6Y2xl
YXJBbGxFeGNlcHRGaWxlbmFtZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9EYXRhT2JqZWN0
R3RrLmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc01hcmt1cCk6CisgICAgICAgIChXZWJDb3Jl
OjpEYXRhT2JqZWN0R3RrOjpjbGVhckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmpl
Y3RHdGs6OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6bWFya3VwKToK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnNldFJhbmdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkSW1hZ2U6OlBhc3RlYm9hcmRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
SW1hZ2U6On5QYXN0ZWJvYXJkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0VVJMRm9ySW1hZ2VFbGVtZW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZGlzcGxheUZyb21GcmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkSGVscGVyOjpnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oOgorCisyMDE0LTA5LTE1
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAgICBE
cmFnRGF0YSBzaG91bGQgbm90IGRlcGVuZCBvbiBDbGlwYm9hcmQsIERvY3VtZW50RnJhZ21lbnQs
IGFuZCBEb2N1bWVudAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEzNTgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA4NTRjNDljLi45YThi
YjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTc5LDYgKzE3OSw3IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCiAgICAgYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCiAKICAgICBlZGl0aW5nL2F0ay9GcmFtZVNl
bGVjdGlvbkF0ay5jcHAKKyAgICBlZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCiAKICAgICBwYWdl
L2d0ay9EcmFnQ29udHJvbGxlckd0ay5jcHAKICAgICBwYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggOGM4ZGFkYy4uZDMxOGYzMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNTYyLDcgKzU2Miw3IEBAIFN0cmluZyBFZGl0
b3I6OnBsYWluVGV4dEZyb21QYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmRQbGFpblRleHQmIHRl
eHQpCiAKICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAhUExBVEZPUk0oRUZMKQor
I2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKEVGTCkgJiYgIVBMQVRGT1JNKEdUSykK
IHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQs
IGJvb2wgYWxsb3dQbGFpblRleHQsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgbWFpbEJsb2NrcXVv
dGVIYW5kbGluZykKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgp
OwpAQCAtMTMyNCwxMyArMTMyNCwxMyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weShF
ZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgaW1hZ2VFbGVtZW50ID0g
aW1hZ2VFbGVtZW50RnJvbUltYWdlRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAKICAgICAgICAgaWYg
KGltYWdlRWxlbWVudCkgewotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpCisj
aWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogICAg
ICAgICAgICAgd3JpdGVJbWFnZVRvUGFzdGVib2FyZCgqUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29w
eUFuZFBhc3RlKCksICppbWFnZUVsZW1lbnQsIGRvY3VtZW50KCkudXJsKCksIGRvY3VtZW50KCku
dGl0bGUoKSk7CiAjZWxzZQogICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCktPndyaXRlSW1hZ2UoKmltYWdlRWxlbWVudCwgZG9jdW1lbnQoKS51cmwoKSwgZG9j
dW1lbnQoKS50aXRsZSgpKTsKICNlbmRpZgogICAgICAgICB9IGVsc2UgewotI2lmIFBMQVRGT1JN
KENPQ09BKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JN
KEVGTCkgfHwgUExBVEZPUk0oR1RLKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNlCiAgICAg
ICAgICAgICAvLyBGSVhNRTogQ29udmVydCBhbGwgb3RoZXIgcGxhdGZvcm1zIHRvIG1hdGNoIE1h
YyBhbmQgZGVsZXRlIHRoaXMuCkBAIC0xNDM2LDcgKzE0MzYsNyBAQCB2b2lkIEVkaXRvcjo6Y29w
eUltYWdlKGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKICAgICBpZiAodXJsLmlzRW1wdHko
KSkKICAgICAgICAgdXJsID0gcmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKTsKIAotI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBQTEFURk9STShFRkwpCisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRG
T1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoKlBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLCAqZWxlbWVudCwgdXJsLCByZXN1bHQu
YWx0RGlzcGxheVN0cmluZygpKTsKICNlbHNlCiAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29w
eUFuZFBhc3RlKCktPndyaXRlSW1hZ2UoKmVsZW1lbnQsIHVybCwgcmVzdWx0LmFsdERpc3BsYXlT
dHJpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCAyODAxNjNlLi40YjcxOTVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTQ0Myw3ICs0NDMsNyBAQCBwdWJsaWM6CiAjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBM
QVRGT1JNKEVGTCkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFU
Rk9STShHVEspCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3cml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChQYXN0ZWJvYXJkJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB3cml0ZUltYWdlVG9Q
YXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBFbGVtZW50JiBpbWFnZUVsZW1lbnQsIGNvbnN0IFVSTCYs
IGNvbnN0IFN0cmluZyYgdGl0bGUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsv
RWRpdG9yR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzcyZWM2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3Rr
LmNwcApAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorCisjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKKyNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5o
IgorI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlhMaW5rTmFtZXMuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJh
bWUsIFJhbmdlJiByYW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRl
eHQpCit7CisgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKKworICAgIGlmICghcGFzdGVib2Fy
ZC5oYXNEYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPERhdGFP
YmplY3RHdGs+IGRhdGFPYmplY3QgPSBwYXN0ZWJvYXJkLmRhdGFPYmplY3QoKTsKKyAgICBpZiAo
ZGF0YU9iamVjdC0+aGFzTWFya3VwKCkgJiYgZnJhbWUuZG9jdW1lbnQoKSkgeworICAgICAgICBp
ZiAoUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBkYXRhT2JqZWN0LT5tYXJrdXAoKSwgZW1wdHlTdHJp
bmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KSkKKyAgICAgICAgICAgIHJl
dHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CisgICAgfQorCisgICAgaWYgKCFhbGxvd1BsYWluVGV4
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoZGF0YU9iamVjdC0+aGFzVGV4
dCgpKSB7CisgICAgICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKKyAgICAgICAgaWYgKFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQocmFu
Z2UsIGRhdGFPYmplY3QtPnRleHQoKSkpCisgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVs
ZWFzZSgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEVkaXRvcjo6
cGFzdGVXaXRoUGFzdGVib2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBib29sIGFsbG93UGxh
aW5UZXh0LCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nIG1haWxCbG9ja3F1b3RlSGFuZGxpbmcpCit7
CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGNob3NlUGxhaW5UZXh0OworICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmREYXRhKCpwYXN0ZWJvYXJkLCBtX2ZyYW1lLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBj
aG9zZVBsYWluVGV4dCk7CisgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50
KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKKyAgICAgICAgcGFz
dGVBc0ZyYWdtZW50KGZyYWdtZW50LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFz
dGVib2FyZCksIGNob3NlUGxhaW5UZXh0LCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKK30KKwor
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudFVSTChFbGVtZW50JiBlbGVtZW50KQor
eworICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgfHwgaXNIVE1MSW5wdXRFbGVt
ZW50KGVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhU
TUxOYW1lczo6c3JjQXR0cik7CisgICAgaWYgKGlzU1ZHSW1hZ2VFbGVtZW50KGVsZW1lbnQpKQor
ICAgICAgICByZXR1cm4gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZB
dHRyKTsKKyAgICBpZiAoaXNIVE1MRW1iZWRFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTE9iamVj
dEVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIHJldHVybiBlbGVtZW50LmltYWdlU291cmNlVVJM
KCk7CisgICAgcmV0dXJuIG51bGxBdG9tOworfQorCitzdGF0aWMgYm9vbCBnZXRJbWFnZUZvckVs
ZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVmUHRyPEltYWdlPiYgaW1hZ2UpCit7CisgICAgYXV0
byByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyIHx8ICFy
ZW5kZXJlci0+aXNSZW5kZXJJbWFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBD
YWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSB0b1JlbmRlckltYWdlKCpyZW5kZXJlcikuY2FjaGVk
SW1hZ2UoKTsKKyAgICBpZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3Vy
cmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGltYWdlID0gY2FjaGVkSW1hZ2Ut
PmltYWdlRm9yUmVuZGVyZXIocmVuZGVyZXIpOworICAgIHJldHVybiBpbWFnZTsKK30KKwordm9p
ZCBFZGl0b3I6OndyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwg
RWxlbWVudCYgaW1hZ2VFbGVtZW50LCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKQor
eworICAgIFBhc3RlYm9hcmRJbWFnZSBwYXN0ZWJvYXJkSW1hZ2U7CisKKyAgICBpZiAoIWdldElt
YWdlRm9yRWxlbWVudChpbWFnZUVsZW1lbnQsIHBhc3RlYm9hcmRJbWFnZS5pbWFnZSkpCisgICAg
ICAgIHJldHVybjsKKyAgICBBU1NFUlQocGFzdGVib2FyZEltYWdlLmltYWdlKTsKKworICAgIHBh
c3RlYm9hcmRJbWFnZS51cmwudXJsID0gaW1hZ2VFbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVV
Ukwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGVsZW1lbnRVUkwoaW1hZ2VFbGVt
ZW50KSkpOworICAgIHBhc3RlYm9hcmRJbWFnZS51cmwudGl0bGUgPSB0aXRsZTsKKyAgICBwYXN0
ZWJvYXJkSW1hZ2UudXJsLm1hcmt1cCA9IGNyZWF0ZU1hcmt1cChpbWFnZUVsZW1lbnQsIEluY2x1
ZGVOb2RlLCBudWxscHRyLCBSZXNvbHZlQWxsVVJMcyk7CisgICAgcGFzdGVib2FyZC53cml0ZShw
YXN0ZWJvYXJkSW1hZ2UpOworfQorCit2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKK3sKKyAgICBQYXN0ZWJvYXJkV2ViQ29udGVu
dCBwYXN0ZWJvYXJkQ29udGVudDsKKyAgICBwYXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENvcHlP
ckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CisgICAgcGFzdGVib2FyZENvbnRlbnQu
dGV4dCA9IHNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpOworICAgIHBhc3RlYm9hcmRDb250
ZW50Lm1hcmt1cCA9IGNyZWF0ZU1hcmt1cCgqc2VsZWN0ZWRSYW5nZSgpLCBudWxscHRyLCBBbm5v
dGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7CisgICAgcGFz
dGVib2FyZENvbnRlbnQuY2FsbGJhY2sgPSBudWxscHRyOworICAgIHBhc3RlYm9hcmQud3JpdGUo
cGFzdGVib2FyZENvbnRlbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDRlNzc3MzQuLjI0MDQzOGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC03NzQsNyArNzc0LDcgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYg
c3RhdGUsIERyYWdPcGVyYXRpb24KICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNv
bnRyb2woc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpKQogICAgICAgICAgICAg
ICAgIGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkud3JpdGVQbGFpblRleHQoc3JjLmVkaXRvcigp
LnNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcigpLCBQYXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJl
cGxhY2UpOwogICAgICAgICAgICAgZWxzZSB7Ci0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRG
T1JNKEVGTCkKKyNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShHVEspCiAgICAgICAgICAgICAgICAgc3JjLmVkaXRvcigpLndyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogI2Vsc2UKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogQ29udmVydCBhbGwgb3RoZXIgcGxhdGZvcm1zIHRvIG1hdGNoIE1hYyBhbmQg
ZGVsZXRlIHRoaXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29u
dHJvbGxlckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29udHJvbGxlckd0
ay5jcHAKaW5kZXggMTcyYzVkNC4uNmVmYzY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Z3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRyYWdE
YXRhLmgiCisjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC03NSw3ICs3Niw5IEBAIHZv
aWQgRHJhZ0NvbnRyb2xsZXI6OmNsZWFudXBBZnRlclN5c3RlbURyYWcoKQogCiB2b2lkIERyYWdD
b250cm9sbGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRGF0YVRyYW5zZmVyJiBkYXRhVHJh
bnNmZXIsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxh
YmVsKQogewotICAgIGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkud3JpdGVJbWFnZShlbGVtZW50
LCB1cmwsIGxhYmVsKTsKKyAgICBGcmFtZSogZnJhbWUgPSBlbGVtZW50LmRvY3VtZW50KCkuZnJh
bWUoKTsKKyAgICBBU1NFUlQoZnJhbWUpOworICAgIGZyYW1lLT5lZGl0b3IoKS53cml0ZUltYWdl
VG9QYXN0ZWJvYXJkKGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCksIGVsZW1lbnQsIHVybCwgbGFi
ZWwpOwogfQogCiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdDb250cm9sbGVyOjpj
cmVhdGVGcmFnbWVudEZyb21EcmFnRGF0YShEcmFnRGF0YSYgZHJhZ0RhdGEsIEZyYW1lJiBmcmFt
ZSwgUmFuZ2UmLCBib29sIC8qYWxsb3dQbGFpblRleHQqLywgYm9vbCYgLypjaG9zZVBsYWluVGV4
dCovKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCmluZGV4IGZkZWZmNWIuLjRhYWE3
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKQEAgLTM0LDYgKzM0LDcgQEAK
IAogI2lmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3RydWN0IF9HdGtDbGlwYm9hcmQgR3RrQ2xp
cGJvYXJkOworI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KICNlbmRpZgogCiAjaWYg
UExBVEZPUk0oSU9TKQpAQCAtNzgsNiArNzksMTIgQEAgc3RydWN0IFBhc3RlYm9hcmRXZWJDb250
ZW50IHsKICAgICBWZWN0b3I8U3RyaW5nPiBjbGllbnRUeXBlczsKICAgICBWZWN0b3I8UmVmUHRy
PFNoYXJlZEJ1ZmZlcj4+IGNsaWVudERhdGE7CiAjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisg
ICAgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZTsKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBTdHJp
bmcgbWFya3VwOworICAgIEdSZWZQdHI8R0Nsb3N1cmU+IGNhbGxiYWNrOworI2VuZGlmCiB9Owog
CiBzdHJ1Y3QgUGFzdGVib2FyZFVSTCB7CkBAIC04NiwxNCArOTMsMTkgQEAgc3RydWN0IFBhc3Rl
Ym9hcmRVUkwgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICBTdHJpbmcgdXNlclZpc2libGVGb3Jt
OwogI2VuZGlmCisjaWYgUExBVEZPUk0oR1RLKQorICAgIFN0cmluZyBtYXJrdXA7CisjZW5kaWYK
IH07CiAKIHN0cnVjdCBQYXN0ZWJvYXJkSW1hZ2UgewogICAgIFdFQkNPUkVfRVhQT1JUIFBhc3Rl
Ym9hcmRJbWFnZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5QYXN0ZWJvYXJkSW1hZ2UoKTsKICAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlOwotI2lmICEoUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKFdJTikpCisjaWYgIShQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKFdJ
TikpCiAgICAgUGFzdGVib2FyZFVSTCB1cmw7CisjZW5kaWYKKyNpZiAhKFBMQVRGT1JNKEVGTCkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pKQogICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IHJlc291cmNlRGF0YTsKICAgICBTdHJpbmcgcmVzb3VyY2VNSU1FVHlwZTsKICNlbmRpZgpA
QCAtMTYyLDcgKzE3NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERyYWdJbWFnZShEcmFnSW1h
Z2VSZWYsIGNvbnN0IEludFBvaW50JiBob3RTcG90KTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0o
R1RLKSB8fCBQTEFURk9STShXSU4pCisjaWYgUExBVEZPUk0oV0lOKQogICAgIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudChGcmFtZSYsIFJhbmdlJiwgYm9vbCBh
bGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOyAvLyBGSVhNRTogTGF5ZXJpbmcg
dmlvbGF0aW9uLgogICAgIHZvaWQgd3JpdGVJbWFnZShFbGVtZW50JiwgY29uc3QgVVJMJiwgY29u
c3QgU3RyaW5nJiB0aXRsZSk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCiAgICAgdm9p
ZCB3cml0ZVNlbGVjdGlvbihSYW5nZSYsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1l
JiwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyID0gRGVmYXVsdFNl
bGVjdGVkVGV4dFR5cGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCmluZGV4IGJjMzNiYjkuLmY2
MDAxNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5j
cHAKQEAgLTE5LDkgKzE5LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEYXRh
T2JqZWN0R3RrLmgiCiAKLSNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+
CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTMzLDIzICszMyw2IEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VOb25C
cmVha2luZ1NwYWNlV2l0aFNwYWNlKFN0cmluZyYgc3RyKQogICAgIHN0ci5yZXBsYWNlKE5vbkJy
ZWFraW5nU3BhY2VDaGFyYWN0ZXIsIFNwYWNlQ2hhcmFjdGVyKTsKIH0KIAotU3RyaW5nIERhdGFP
YmplY3RHdGs6OnRleHQoKSBjb25zdAotewotICAgIGlmIChtX3JhbmdlKSB7Ci0gICAgICAgIFN0
cmluZyB0ZXh0ID0gbV9yYW5nZS0+dGV4dCgpOwotICAgICAgICByZXBsYWNlTm9uQnJlYWtpbmdT
cGFjZVdpdGhTcGFjZSh0ZXh0KTsKLSAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgfQotICAgIHJl
dHVybiBtX3RleHQ7Ci19Ci0KLVN0cmluZyBEYXRhT2JqZWN0R3RrOjptYXJrdXAoKSBjb25zdAot
ewotICAgIGlmIChtX3JhbmdlKQotICAgICAgICByZXR1cm4gY3JlYXRlTWFya3VwKCptX3Jhbmdl
LCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7
Ci0gICAgcmV0dXJuIG1fbWFya3VwOwotfQotCiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBEYXRh
T2JqZWN0R3RrOjp1bmtub3duVHlwZXMoKSBjb25zdAogewogICAgIHJldHVybiBtX3Vua25vd25U
eXBlRGF0YTsKQEAgLTU3LDE0ICs0MCwxMiBAQCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBEYXRh
T2JqZWN0R3RrOjp1bmtub3duVHlwZXMoKSBjb25zdAogCiB2b2lkIERhdGFPYmplY3RHdGs6OnNl
dFRleHQoY29uc3QgU3RyaW5nJiBuZXdUZXh0KQogewotICAgIG1fcmFuZ2UgPSAwOwogICAgIG1f
dGV4dCA9IG5ld1RleHQ7CiAgICAgcmVwbGFjZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UobV90
ZXh0KTsKIH0KIAogdm9pZCBEYXRhT2JqZWN0R3RrOjpzZXRNYXJrdXAoY29uc3QgU3RyaW5nJiBu
ZXdNYXJrdXApCiB7Ci0gICAgbV9yYW5nZSA9IDA7CiAgICAgbV9tYXJrdXAgPSBuZXdNYXJrdXA7
CiB9CiAKQEAgLTEzMSwxNCArMTEyLDEyIEBAIHZvaWQgRGF0YU9iamVjdEd0azo6c2V0VVJMKGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogCiB2b2lkIERhdGFPYmplY3RHdGs6
OmNsZWFyVGV4dCgpCiB7Ci0gICAgbV9yYW5nZSA9IDA7Ci0gICAgbV90ZXh0ID0gIiI7CisgICAg
bV90ZXh0ID0gZW1wdHlTdHJpbmcoKTsKIH0KIAogdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhck1h
cmt1cCgpCiB7Ci0gICAgbV9yYW5nZSA9IDA7Ci0gICAgbV9tYXJrdXAgPSAiIjsKKyAgICBtX21h
cmt1cCA9IGVtcHR5U3RyaW5nKCk7CiB9CiAKIFN0cmluZyBEYXRhT2JqZWN0R3RrOjp1cmxMYWJl
bCgpIGNvbnN0CkBAIC0xNTQsMTIgKzEzMywxMSBAQCBTdHJpbmcgRGF0YU9iamVjdEd0azo6dXJs
TGFiZWwoKSBjb25zdAogCiB2b2lkIERhdGFPYmplY3RHdGs6OmNsZWFyQWxsRXhjZXB0RmlsZW5h
bWVzKCkKIHsKLSAgICBtX3RleHQgPSAiIjsKLSAgICBtX21hcmt1cCA9ICIiOwotICAgIG1fdXJp
TGlzdCA9ICIiOworICAgIG1fdGV4dCA9IGVtcHR5U3RyaW5nKCk7CisgICAgbV9tYXJrdXAgPSBl
bXB0eVN0cmluZygpOworICAgIG1fdXJpTGlzdCA9IGVtcHR5U3RyaW5nKCk7CiAgICAgbV91cmwg
PSBVUkwoKTsKLSAgICBtX2ltYWdlID0gMDsKLSAgICBtX3JhbmdlID0gMDsKKyAgICBtX2ltYWdl
ID0gbnVsbHB0cjsKICAgICBtX3Vua25vd25UeXBlRGF0YS5jbGVhcigpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaAppbmRleCBmZjE0MjQ5Li44NTBk
MjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKQEAg
LTIxLDEwICsyMSw4IEBACiAKICNpbmNsdWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIlVSTC5o
IgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDAsMjIgKzM4LDIxIEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHVyaUxpc3Qo
KSBjb25zdCB7IHJldHVybiBtX3VyaUxpc3Q7IH0KICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
ZmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFtZXM7IH0KICAgICBHZGtQaXhidWYq
IGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0UmFu
Z2UoUGFzc1JlZlB0cjxSYW5nZT4gbmV3UmFuZ2UpIHsgbV9yYW5nZSA9IG5ld1JhbmdlOyB9CiAg
ICAgdm9pZCBzZXRJbWFnZShHZGtQaXhidWYqIG5ld0ltYWdlKSB7IG1faW1hZ2UgPSBuZXdJbWFn
ZTsgfQogICAgIHZvaWQgc2V0VVJMKGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpOwogICAgIGJv
b2wgaGFzVW5rbm93blR5cGVEYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fdW5rbm93blR5cGVEYXRh
LmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2Ug
fHwgIW1fdGV4dC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc01hcmt1cCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFuZ2UgfHwgIW1fbWFya3VwLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzVGV4dCgp
IGNvbnN0IHsgcmV0dXJuICFtX3RleHQuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNNYXJrdXAo
KSBjb25zdCB7IHJldHVybiAhbV9tYXJrdXAuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBoYXNVUklM
aXN0KCkgY29uc3QgeyByZXR1cm4gIW1fdXJpTGlzdC5pc0VtcHR5KCk7IH0KICAgICBib29sIGhh
c1VSTCgpIGNvbnN0IHsgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkgJiYgbV91cmwuaXNWYWxpZCgp
OyB9CiAgICAgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiAhbV9maWxlbmFtZXMu
aXNFbXB0eSgpOyB9CiAgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7
IH0KICAgICB2b2lkIGNsZWFyVVJJTGlzdCgpIHsgbV91cmlMaXN0ID0gIiI7IH0KICAgICB2b2lk
IGNsZWFyVVJMKCkgeyBtX3VybCA9IFVSTCgpOyB9Ci0gICAgdm9pZCBjbGVhckltYWdlKCkgeyBt
X2ltYWdlID0gMDsgfQorICAgIHZvaWQgY2xlYXJJbWFnZSgpIHsgbV9pbWFnZSA9IG51bGxwdHI7
IH0KIAotICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7Ci0gICAgU3RyaW5nIG1hcmt1cCgpIGNvbnN0
OworICAgIFN0cmluZyB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CisgICAgU3RyaW5n
IG1hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFya3VwOyB9CiAgICAgU3RyaW5nIHVua25vd25U
eXBlRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpIGNvbnN0IHsgcmV0dXJuIG1fdW5rbm93blR5cGVE
YXRhLmdldCh0eXBlKTsgfQogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHVua25vd25UeXBl
cygpIGNvbnN0OwogICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmKTsKQEAgLTc4LDcgKzc1
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV91cmlMaXN0OwogICAgIFZlY3RvcjxTdHJpbmc+
IG1fZmlsZW5hbWVzOwogICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBtX2ltYWdlOwotICAgIFJlZlB0
cjxSYW5nZT4gbV9yYW5nZTsKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3Vua25vd25U
eXBlRGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9H
dGtEcmFnQW5kRHJvcEhlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0Ry
YWdBbmREcm9wSGVscGVyLmgKaW5kZXggNTI5ZTk5OC4uYThjNmYyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgKQEAgLTI3LDYg
KzI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0Owog
Y2xhc3MgRHJhZ0RhdGE7CitjbGFzcyBJbnRQb2ludDsKIAogdHlwZWRlZiB2b2lkICgqRHJhZ0V4
aXRlZENhbGxiYWNrKShHdGtXaWRnZXQqLCBEcmFnRGF0YSYsIGJvb2wgZHJvcEhhcHBlbmVkKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCmluZGV4
IDViMTY1YTguLjBhYWRkNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QYXN0ZWJvYXJkR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAKQEAgLTIwLDI2ICsyMCwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKIAotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5j
bHVkZSAiRGF0YU9iamVjdEd0ay5oIgotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNp
bmNsdWRlICJEcmFnRGF0YS5oIgotI2luY2x1ZGUgIkVkaXRvci5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VySWRp
b21zLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJQ
YXN0ZWJvYXJkSGVscGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKLSNpbmNsdWRlICJT
VkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJYTGlua05hbWVz
LmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgotCisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OSw2ICs3
NiwxNSBAQCBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdB
bmREcm9wKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YQogfQogI2VuZGlmCiAKKy8vIE1ha2luZyB0
aGlzIG5vbi1pbmxpbmUgc28gdGhhdCBXZWJLaXQgMidzIGRlY29kaW5nIGRvZXNuJ3QgaGF2ZSB0
byBpbmNsdWRlIEltYWdlLmguCitQYXN0ZWJvYXJkSW1hZ2U6OlBhc3RlYm9hcmRJbWFnZSgpCit7
Cit9CisKK1Bhc3RlYm9hcmRJbWFnZTo6flBhc3RlYm9hcmRJbWFnZSgpCit7Cit9CisKIFBhc3Rl
Ym9hcmQ6OlBhc3RlYm9hcmQoUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0KQog
ICAgIDogbV9kYXRhT2JqZWN0KGRhdGFPYmplY3QpCiAgICAgLCBtX2d0a0NsaXBib2FyZCgwKQpA
QCAtMTU2LDE2ICsxNTIsNiBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0
cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIH0KIH0KIAotdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSYgc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENv
cHlPckRlbGV0ZSwgRnJhbWUmIGZyYW1lLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JE
YXRhVHJhbnNmZXIgc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyKQot
ewotICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldFRl
eHQoc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyID09IEluY2x1ZGVJ
bWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIgPyBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFRleHRG
b3JEYXRhVHJhbnNmZXIoKSA6IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpKTsKLSAgICBt
X2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKLQotICAg
IGlmIChtX2d0a0NsaXBib2FyZCkKLSAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBh
c3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCwg
Y2FuU21hcnRDb3B5T3JEZWxldGUgPyBQYXN0ZWJvYXJkSGVscGVyOjpJbmNsdWRlU21hcnRQYXN0
ZSA6IFBhc3RlYm9hcmRIZWxwZXI6OkRvTm90SW5jbHVkZVNtYXJ0UGFzdGUpOwotfQotCiB2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBs
YWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9wdGlvbikKIHsKICAgICBtX2RhdGFPYmplY3QtPmNsZWFy
QWxsKCk7CkBAIC0xODYsNDggKzE3MiwzMiBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0
IFBhc3RlYm9hcmRVUkwmIHBhc3RlYm9hcmRVUkwpCiAgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6
OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtD
bGlwYm9hcmQpOwogfQogCi1zdGF0aWMgVVJMIGdldFVSTEZvckltYWdlRWxlbWVudChFbGVtZW50
JiBlbGVtZW50KQotewotICAgIC8vIEZJWE1FOiBMYXRlciB0aGlzIGNvZGUgc2hvdWxkIGJlIHNo
YXJlZCB3aXRoIENocm9taXVtIHNvbWVob3cuIENoYW5jZXMgYXJlIGFsbCBwbGF0Zm9ybXMgd2Fu
dCBpdC4KLSAgICBBdG9taWNTdHJpbmcgdXJsU3RyaW5nOwotICAgIGlmIChpc0hUTUxJbWFnZUVs
ZW1lbnQoZWxlbWVudCkgfHwgaXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICB1
cmxTdHJpbmcgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpOwotICAg
IGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpKQotICAgICAg
ICB1cmxTdHJpbmcgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7
Ci0gICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpIHx8
IGlzSFRNTE9iamVjdEVsZW1lbnQoZWxlbWVudCkpCi0gICAgICAgIHVybFN0cmluZyA9IGVsZW1l
bnQuaW1hZ2VTb3VyY2VVUkwoKTsKLQotICAgIHJldHVybiB1cmxTdHJpbmcuaXNFbXB0eSgpID8g
VVJMKCkgOiBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJh
aWxpbmdIVE1MU3BhY2VzKHVybFN0cmluZykpOwotfQotCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRl
SW1hZ2UoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSkK
K3ZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZEltYWdlJiBwYXN0ZWJvYXJk
SW1hZ2UpCiB7Ci0gICAgaWYgKCEoZWxlbWVudC5yZW5kZXJlcigpICYmIGVsZW1lbnQucmVuZGVy
ZXIoKS0+aXNSZW5kZXJJbWFnZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVySW1h
Z2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50LnJlbmRlcmVyKCkpOwotICAgIENh
Y2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwotICAgIGlm
ICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVy
KHJlbmRlcmVyKTsKLSAgICBBU1NFUlQoaW1hZ2UpOwotCiAgICAgbV9kYXRhT2JqZWN0LT5jbGVh
ckFsbCgpOwotCi0gICAgVVJMIHVybCA9IGdldFVSTEZvckltYWdlRWxlbWVudChlbGVtZW50KTsK
LSAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwo
dXJsLCB0aXRsZSk7Ci0KLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFy
a3VwKGVsZW1lbnQsIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOworICAgIGlmICgh
cGFzdGVib2FyZEltYWdlLnVybC51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fZGF0YU9iamVj
dC0+c2V0VVJMKHBhc3RlYm9hcmRJbWFnZS51cmwudXJsLCBwYXN0ZWJvYXJkSW1hZ2UudXJsLnRp
dGxlKTsKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAocGFzdGVib2FyZEltYWdlLnVy
bC5tYXJrdXApOwogICAgIH0KIAotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9w
dEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1ZigpKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldEltYWdl
KHBpeGJ1Zi5nZXQoKSk7CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1Jl
ZihwYXN0ZWJvYXJkSW1hZ2UuaW1hZ2UtPmdldEdka1BpeGJ1ZigpKTsKKyAgICBpZiAocGl4YnVm
KQorICAgICAgICBtX2RhdGFPYmplY3QtPnNldEltYWdlKHBpeGJ1Zi5nZXQoKSk7CiAKICAgICBp
ZiAobV9ndGtDbGlwYm9hcmQpCiAgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0
ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQpOwog
fQogCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBw
YXN0ZWJvYXJkQ29udGVudCkKK3sKKyAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CisgICAg
bV9kYXRhT2JqZWN0LT5zZXRUZXh0KHBhc3RlYm9hcmRDb250ZW50LnRleHQpOworICAgIG1fZGF0
YU9iamVjdC0+c2V0TWFya3VwKHBhc3RlYm9hcmRDb250ZW50Lm1hcmt1cCk7CisKKyAgICBpZiAo
bV9ndGtDbGlwYm9hcmQpCisgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJv
YXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQsIHBhc3Rl
Ym9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID8gUGFzdGVib2FyZEhlbHBlcjo6SW5j
bHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVyOjpEb05vdEluY2x1ZGVTbWFydFBhc3Rl
LCBwYXN0ZWJvYXJkQ29udGVudC5jYWxsYmFjay5nZXQoKSk7Cit9CisKIHZvaWQgUGFzdGVib2Fy
ZDo6d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmQmIHNvdXJjZVBhc3RlYm9hcmQpCiB7
CiAgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IHNvdXJjZURhdGFPYmplY3QgPSBzb3VyY2VQYXN0
ZWJvYXJkLmRhdGFPYmplY3QoKTsKQEAgLTMwMiwzNCArMjcyLDYgQEAgdm9pZCBQYXN0ZWJvYXJk
OjpzZXREcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYpCiB9CiAjZW5kaWYK
IAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdt
ZW50KEZyYW1lJiBmcmFtZSwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJv
b2wmIGNob3NlUGxhaW5UZXh0KQotewotICAgIGlmIChtX2d0a0NsaXBib2FyZCkKLSAgICAgICAg
UGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJk
Q29udGVudHMobV9ndGtDbGlwYm9hcmQpOwotCi0gICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsK
LQotICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc01hcmt1cCgpKSB7Ci0gICAgICAgIGlmIChmcmFt
ZS5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50KCksIG1fZGF0
YU9iamVjdC0+bWFya3VwKCksIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1
Z2luQ29udGVudCk7Ci0gICAgICAgICAgICBpZiAoZnJhZ21lbnQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
YWxsb3dQbGFpblRleHQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fZGF0YU9iamVj
dC0+aGFzVGV4dCgpKSB7Ci0gICAgICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChjb250ZXh0LCBtX2RhdGFPYmplY3QtPnRleHQoKSk7Ci0gICAgICAgIGlmIChmcmFnbWVudCkK
LSAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkUGxhaW5UZXh0JiB0
ZXh0KQogewogICAgIGlmIChtX2d0a0NsaXBib2FyZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAppbmRleCBjMDkyMjI3Li4yODY5ZDI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3Bw
CkBAIC0yMywxNiArMjMsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQYXN0
ZWJvYXJkSGVscGVyLmgiCiAKLSNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJEYXRhT2Jq
ZWN0R3RrLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCiAj
aW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUg
PGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk1LDIw
ICs5Myw2IEBAIFBhc3RlYm9hcmRIZWxwZXI6On5QYXN0ZWJvYXJkSGVscGVyKCkKICAgICBndGtf
dGFyZ2V0X2xpc3RfdW5yZWYobV90YXJnZXRMaXN0KTsKIH0KIAotc3RhdGljIGlubGluZSBHZGtE
aXNwbGF5KiBkaXNwbGF5RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoZnJh
bWUpOwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIEFTU0VSVChwYWdlKTsK
LSAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgY2xpZW50ID0gcGFnZS0+Y2hyb21lKCkucGxhdGZvcm1Q
YWdlQ2xpZW50KCk7Ci0gICAgcmV0dXJuIGNsaWVudCA/IGd0a193aWRnZXRfZ2V0X2Rpc3BsYXko
Y2xpZW50KSA6IGdka19kaXNwbGF5X2dldF9kZWZhdWx0KCk7Ci19Ci0KLUd0a0NsaXBib2FyZCog
UGFzdGVib2FyZEhlbHBlcjo6Z2V0UHJpbWFyeVNlbGVjdGlvbkNsaXBib2FyZChGcmFtZSogZnJh
bWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGd0a19jbGlwYm9hcmRfZ2V0X2Zvcl9kaXNwbGF5KGRp
c3BsYXlGcm9tRnJhbWUoZnJhbWUpLCBHREtfU0VMRUNUSU9OX1BSSU1BUlkpOwotfQotCiBHdGtU
YXJnZXRMaXN0KiBQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV90YXJnZXRMaXN0OwpAQCAtMzA5LDEyICsyOTMsMTEgQEAgc3RhdGljIHZvaWQgY2xl
YXJDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkLCBncG9p
bnRlciBkYXQKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdDbG9zdXJl
KiBjYWxsYmFjayA9IHN0YXRpY19jYXN0PEdDbG9zdXJlKj4oZGF0YSk7CisgICAgR1JlZlB0cjxH
Q2xvc3VyZT4gY2FsbGJhY2sgPSBhZG9wdEdSZWYoc3RhdGljX2Nhc3Q8R0Nsb3N1cmUqPihkYXRh
KSk7CiAgICAgR1ZhbHVlIGZpcnN0QXJndW1lbnQgPSB7MCwge3swfX19OwogICAgIGdfdmFsdWVf
aW5pdCgmZmlyc3RBcmd1bWVudCwgR19UWVBFX1BPSU5URVIpOwogICAgIGdfdmFsdWVfc2V0X3Bv
aW50ZXIoJmZpcnN0QXJndW1lbnQsIGNsaXBib2FyZCk7Ci0gICAgZ19jbG9zdXJlX2ludm9rZShj
YWxsYmFjaywgMCwgMSwgJmZpcnN0QXJndW1lbnQsIDApOwotICAgIGdfY2xvc3VyZV91bnJlZihj
YWxsYmFjayk7CisgICAgZ19jbG9zdXJlX2ludm9rZShjYWxsYmFjay5nZXQoKSwgbnVsbHB0ciwg
MSwgJmZpcnN0QXJndW1lbnQsIDApOwogfQogCiB2b2lkIFBhc3RlYm9hcmRIZWxwZXI6OndyaXRl
Q2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIFNtYXJ0UGFzdGVJbmNs
dXNpb24gaW5jbHVkZVNtYXJ0UGFzdGUsIEdDbG9zdXJlKiBjYWxsYmFjaykKQEAgLTMyOCwxMSAr
MzExLDE0IEBAIHZvaWQgUGFzdGVib2FyZEhlbHBlcjo6d3JpdGVDbGlwYm9hcmRDb250ZW50cyhH
dGtDbGlwYm9hcmQqIGNsaXBib2FyZCwgU21hcnRQYXN0CiAgICAgaWYgKG51bWJlck9mVGFyZ2V0
cyA+IDAgJiYgdGFibGUpIHsKICAgICAgICAgc2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSBk
YXRhT2JqZWN0OwogCi0gICAgICAgIGd0a19jbGlwYm9hcmRfc2V0X3dpdGhfZGF0YShjbGlwYm9h
cmQsIHRhYmxlLCBudW1iZXJPZlRhcmdldHMsCi0gICAgICAgICAgICBnZXRDbGlwYm9hcmRDb250
ZW50c0NhbGxiYWNrLCBjbGVhckNsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2ssIGNhbGxiYWNrKTsK
LSAgICAgICAgZ3RrX2NsaXBib2FyZF9zZXRfY2FuX3N0b3JlKGNsaXBib2FyZCwgMCwgMCk7Cisg
ICAgICAgIGlmIChndGtfY2xpcGJvYXJkX3NldF93aXRoX2RhdGEoY2xpcGJvYXJkLCB0YWJsZSwg
bnVtYmVyT2ZUYXJnZXRzLCBnZXRDbGlwYm9hcmRDb250ZW50c0NhbGxiYWNrLCBjbGVhckNsaXBi
b2FyZENvbnRlbnRzQ2FsbGJhY2ssIGdfY2xvc3VyZV9yZWYoY2FsbGJhY2spKSkKKyAgICAgICAg
ICAgIGd0a19jbGlwYm9hcmRfc2V0X2Nhbl9zdG9yZShjbGlwYm9hcmQsIG51bGxwdHIsIDApOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4gZ3RrX2NsaXBib2FyZF9zZXRfd2l0
aF9kYXRhIGZhaWxzIHRoZSBjYWxsYmFja3MgYXJlIGlnbm9yZWQsIHNvIHdlIG5lZWQgdG8gcmVs
ZWFzZSB0aGUgcmVmZXJlbmNlIHdlIHdlcmUgcGFzc2luZyB0byBjbGVhckNsaXBib2FyZENvbnRl
bnRzQ2FsbGJhY2suCisgICAgICAgICAgICBnX2Nsb3N1cmVfdW5yZWYoY2FsbGJhY2spOworICAg
ICAgICB9CiAKLSAgICAgICAgc2V0dGluZ0NsaXBib2FyZERhdGFPYmplY3QgPSAwOworICAgICAg
ICBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9IG51bGxwdHI7CiAKICAgICB9IGVsc2UKICAg
ICAgICAgZ3RrX2NsaXBib2FyZF9jbGVhcihjbGlwYm9hcmQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKaW5kZXggNWViNjY5ZS4uMGQwM2QxMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCkBA
IC0yNSw4ICsyNSw4IEBACiAjaWZuZGVmIFBhc3RlYm9hcmRIZWxwZXJfaAogI2RlZmluZSBQYXN0
ZWJvYXJkSGVscGVyX2gKIAotI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDAsNyArNDAsNiBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFNtYXJ0UGFzdGVJbmNsdXNpb24g
eyBJbmNsdWRlU21hcnRQYXN0ZSwgRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSB9OwogCi0gICAgR3Rr
Q2xpcGJvYXJkKiBnZXRQcmltYXJ5U2VsZWN0aW9uQ2xpcGJvYXJkKEZyYW1lKikgY29uc3Q7CiAg
ICAgR3RrVGFyZ2V0TGlzdCogdGFyZ2V0TGlzdCgpIGNvbnN0OwogICAgIEd0a1RhcmdldExpc3Qq
IHRhcmdldExpc3RGb3JEYXRhT2JqZWN0KERhdGFPYmplY3RHdGsqLCBTbWFydFBhc3RlSW5jbHVz
aW9uID0gRG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7CiAgICAgdm9pZCBmaWxsU2VsZWN0aW9uRGF0
YShHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCAxNjMzOTBmLi5mNDk0MTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTYgQEAKIDIwMTQtMDkt
MTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCisgICAgICAg
IFtHVEtdIEZpeCBsYXllcmluZyB2aW9sYXRpb25zIGluIFBhc3RlYm9hcmRHdGsKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjgwMgorCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50Ojp1cGRhdGVHbG9iYWxTZWxlY3Rpb24pOiBVc2UgbmV3IEFQSSB0bworICAg
ICAgICB1cGRhdGUgdGhlIGdsb2JhbCBzZWxlY3Rpb24uCisKKzIwMTQtMDktMTUgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIERyYWdEYXRhIHNo
b3VsZCBub3QgZGVwZW5kIG9uIENsaXBib2FyZCwgRG9jdW1lbnRGcmFnbWVudCwgYW5kIERvY3Vt
ZW50CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM1
OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCA0NjlkOTU2Li5i
Y2E4M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKQEAgLTIwLDE3
ICsyMCwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkVkaXRvckNsaWVu
dC5oIgogCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZURlc3RydWN0aW9uT2Jz
ZXJ2ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJX
ZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EYXRhT2JqZWN0R3RrLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0ZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvS2V5Ym9hcmRFdmVudC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2FyZEhlbHBlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUGFzdGVib2FyZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvV2lu
ZG93c0tleWJvYXJkQ29kZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL21hcmt1cC5oPgorI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
QEAgLTE3NSwyNCArMTc3LDI1IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlU2VsZWN0aW9uKEd0a0Ns
aXBib2FyZCosIEZyYW1lKiBmcmFtZSkKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVHbG9i
YWxTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogewogI2lmIFBMQVRGT1JNKFgxMSkKLSAgICBHdGtD
bGlwYm9hcmQqIGNsaXBib2FyZCA9IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJk
SGVscGVyKCktPmdldFByaW1hcnlTZWxlY3Rpb25DbGlwYm9hcmQoZnJhbWUpOwotICAgIERhdGFP
YmplY3RHdGsqIGRhdGFPYmplY3QgPSBEYXRhT2JqZWN0R3RrOjpmb3JDbGlwYm9hcmQoY2xpcGJv
YXJkKTsKLQogICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKLSAgICBkYXRhT2JqZWN0LT5z
ZXRSYW5nZShmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7Ci0KICAgICBm
cmFtZVNldHRpbmdDbGlwYm9hcmQgPSBmcmFtZTsKLSAgICBHQ2xvc3VyZSogY2FsbGJhY2sgPSBn
X2NjbG9zdXJlX25ldyhHX0NBTExCQUNLKGNvbGxhcHNlU2VsZWN0aW9uKSwgZnJhbWUsIDApOwor
ICAgIEdSZWZQdHI8R0Nsb3N1cmU+IGNhbGxiYWNrID0gYWRvcHRHUmVmKGdfY2Nsb3N1cmVfbmV3
KEdfQ0FMTEJBQ0soY29sbGFwc2VTZWxlY3Rpb24pLCBmcmFtZSwgbnVsbHB0cikpOwogICAgIC8v
IFRoaXMgb2JzZXJ2ZXIgd2lsbCBiZSBzZWxmLWRlc3Ryb3llZCBvbiBjbG9zdXJlIGZpbmFsaXph
dGlvbiwKICAgICAvLyB0aGF0IHdpbGwgaGFwcGVuIGVpdGhlciBhZnRlciBjbG9zdXJlIGV4ZWN1
dGlvbiBvciBhZnRlcgogICAgIC8vIGNsb3N1cmUgaW52YWxpZGF0aW9uLgotICAgIG5ldyBFZGl0
b3JDbGllbnRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIoZnJhbWUsIGNhbGxiYWNrKTsKLSAgICBn
X2Nsb3N1cmVfc2V0X21hcnNoYWwoY2FsbGJhY2ssIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19W
T0lEKTsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53
cml0ZUNsaXBib2FyZENvbnRlbnRzKGNsaXBib2FyZCwgUGFzdGVib2FyZEhlbHBlcjo6RG9Ob3RJ
bmNsdWRlU21hcnRQYXN0ZSwgY2FsbGJhY2spOwotICAgIGZyYW1lU2V0dGluZ0NsaXBib2FyZCA9
IDA7CisgICAgbmV3IEVkaXRvckNsaWVudEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcihmcmFtZSwg
Y2FsbGJhY2suZ2V0KCkpOworICAgIGdfY2xvc3VyZV9zZXRfbWFyc2hhbChjYWxsYmFjay5nZXQo
KSwgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQpOworCisgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIFBhc3Rl
Ym9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRDb250ZW50OworICAgIHBhc3RlYm9hcmRDb250ZW50
LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gZmFsc2U7CisgICAgcGFzdGVib2FyZENvbnRlbnQudGV4
dCA9IHJhbmdlLT50ZXh0KCk7CisgICAgcGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gY3JlYXRl
TWFya3VwKCpyYW5nZSwgbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJl
c29sdmVOb25Mb2NhbFVSTHMpOworICAgIHBhc3RlYm9hcmRDb250ZW50LmNhbGxiYWNrID0gY2Fs
bGJhY2s7CisgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yR2xvYmFsU2VsZWN0aW9uKCktPndyaXRl
KHBhc3RlYm9hcmRDb250ZW50KTsKKyAgICBmcmFtZVNldHRpbmdDbGlwYm9hcmQgPSBudWxscHRy
OwogI2VuZGlmCiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>