<?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>67993</bug_id>
          
          <creation_ts>2011-09-13 02:44:41 -0700</creation_ts>
          <short_desc>Prediction tracking is not precise enough</short_desc>
          <delta_ts>2011-09-14 13:48:52 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>466211</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-13 02:44:41 -0700</bug_when>
    <thetext>The predictions deduced from value profiles are not precise.  For example, we can identify something as being an array, or just as a cell, but we don&apos;t know when something is an object that is not an array.  We also don&apos;t have any way of distinguishing between Top (i.e. &quot;could be anything&quot;) and Undefined/Null.  Prediction tracking should be at least precise enough to be able to identify common kinds of objects like JSFinalObject, JSString, and JSArray, and should be able to distinguish between a type being completely unknown and being, say, &quot;Undefined or Null or Object&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466214</commentid>
    <comment_count>1</comment_count>
      <attachid>107158</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-13 02:52:05 -0700</bug_when>
    <thetext>Created attachment 107158
the patch

I&apos;m going to let this patch simmer for a bit.  I&apos;m not yet completely convinced that it&apos;s neutral or that it actually works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466216</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-13 02:54:34 -0700</bug_when>
    <thetext>Attachment 107158 did not pass style-queue:

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

Source/JavaScriptCore/wtf/BoundsCheckedPointer.h:249:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/bytecode/PredictedType.cpp:126:  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]
Source/JavaScriptCore/bytecode/PredictedType.h:154:  The parameter name &quot;profile&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/PredictedType.h:157:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGPropagator.cpp:191:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Total errors found: 5 in 13 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>466224</commentid>
    <comment_count>3</comment_count>
      <attachid>107158</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-13 03:10:01 -0700</bug_when>
    <thetext>Comment on attachment 107158
the patch

Attachment 107158 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9660072</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466572</commentid>
    <comment_count>4</comment_count>
      <attachid>107236</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-13 14:54:36 -0700</bug_when>
    <thetext>Created attachment 107236
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466727</commentid>
    <comment_count>5</comment_count>
      <attachid>107236</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-13 17:35:44 -0700</bug_when>
    <thetext>Comment on attachment 107236
the patch - fix style

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

&gt; Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:813
&gt; +		0FD82E82141F3FC900179C94 /* BoundsCheckedPointer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoundsCheckedPointer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; +		0FD82E84141F3FDA00179C94 /* PredictedType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PredictedType.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };

You&apos;ll need to add these guys to the other project files (JavaScriptCore.vcproj, etc.).

&gt; Source/JavaScriptCore/bytecode/PredictedType.h:42
&gt; +static const PredictedType PredictObjectOther   = 0x0010; // It&apos;s definitely an object but not JSFinalObject or JSArray.
&gt; +static const PredictedType PredictSomeObject    = 0x0020; // It&apos;s some unknown subclass of JSObject.
&gt; +static const PredictedType PredictObject        = 0x003f; // It&apos;s definitely a subclass of JSObject.

The distinction between these three object prediction terms is super confusing to me. Can you clarify somehow?

&gt; Source/JavaScriptCore/bytecode/PredictedType.h:60
&gt;  enum PredictionSource { WeakPrediction, StrongPrediction };
&gt;  
&gt;  inline bool isCellPrediction(PredictedType value)
&gt;  {
&gt; -    return (value &amp; PredictCell) == PredictCell &amp;&amp; !(value &amp; ~(PredictArray | PredictionTagMask));
&gt; +    return !!(value &amp; PredictCell) &amp;&amp; !(value &amp; ~(PredictCell | PredictionTagMask));
&gt; +}

Seems like this could all become an object with member functions, wrapping a uint16_t. Not necessary in this patch, though.

&gt; Source/JavaScriptCore/wtf/BoundsCheckedPointer.h:7
&gt; + *  This library is free software; you can redistribute it and/or
&gt; + *  modify it under the terms of the GNU Library General Public
&gt; + *  License as published by the Free Software Foundation; either
&gt; + *  version 2 of the License, or (at your option) any later version.

Is this newly authored code or LGPL2 code from somewhere else? If newly authored, BSD license, please.

&gt; Source/JavaScriptCore/wtf/BoundsCheckedPointer.h:38
&gt; +class BoundsCheckedPointer {

Probably overkill to do in this patch, but it seems like this class could become an iterator for FixedArray&lt;typename, size_t&gt;. That would simplify the use case a bit, and guarantee that the data and the bounds checked pointer were in agreement about the data&apos;s size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466751</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-13 18:13:36 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 107236 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107236&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:813
&gt; &gt; +		0FD82E82141F3FC900179C94 /* BoundsCheckedPointer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoundsCheckedPointer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; &gt; +		0FD82E84141F3FDA00179C94 /* PredictedType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PredictedType.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
&gt; 
&gt; You&apos;ll need to add these guys to the other project files (JavaScriptCore.vcproj, etc.).

Will do!

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PredictedType.h:42
&gt; &gt; +static const PredictedType PredictObjectOther   = 0x0010; // It&apos;s definitely an object but not JSFinalObject or JSArray.
&gt; &gt; +static const PredictedType PredictSomeObject    = 0x0020; // It&apos;s some unknown subclass of JSObject.
&gt; &gt; +static const PredictedType PredictObject        = 0x003f; // It&apos;s definitely a subclass of JSObject.
&gt; 
&gt; The distinction between these three object prediction terms is super confusing to me. Can you clarify somehow?

PredictObjectOther = I definitely saw something that was neither JSFinalObject nor JSArray, but whatever it was, it was definitely a subclass of JSObject.

PredictSomeObject = I saw some objects but I was too lazy to figure out what kinds of objects they were.

PredictObject = This is not meant to be a value that we set PredictedType&apos;s to; it&apos;s a bit pattern we use to test if it would be OK to speculate that a value is a subtype of JSObject.  If we did set a variable to PredictObject, it would mean that we know for sure that this variable will point to every kind of object.

The interesting thing is what happens when you merge them:

PredictSomeObject + PredictFinalObject = PredictFinalObject.  PredictSomeObject means &quot;I was too lazy to look beyond it being an object&quot;, so PredictFinalObject prevails.  Similarly for PredictSomeObject + &lt;any other object prediction&gt;.

PredictFinalObject + PredictOtherObject = PredictFinalObject|PredictOtherObject.  Note that this is not equal to PredictObject, but it is interpreted in a similar way.  It means: we know it&apos;s an object but we know that it would be unwise to speculate what kind of object it is.  But in this case the bitpattern still tells us something interesting: it tells us that we never saw arrays.

PredictFinalObject + PredictObject = PredictObject.  PredictObject means somebody definitely saw all kinds of objects, while PredictFinalObject means someone just saw JSFinalObjects.  So we take the union of the two, which is PredictObject.

At a thousand foot view, PredictSomeObject and PredictObject sort of mean the same thing: they both mean that it&apos;s safe to assume, based on current profiling information, that the value is an object.  The difference is that:

1) If one guy says PredictSomeObject and another guy gives a different object prediction, then the latter guy wins.  If one guy says PredictObject, then he always trumps everything else.

2) We never explicitly set PredictObject as a prediction.  We only use it as a bitmask to see if we saw any kinds of objects.  The only way that a value prediction would become exactly PredictObject is if we have evidence that suggests that we saw all of the following: JSFinalObject, JSArray, and some object that is neither JSFinalObject nor JSArray.

PredictOtherObject is used to distinguish seeing &quot;some kind of object&quot; (which is what PredictObject and PredictSomeObject do) and seeing an object that we definitely can&apos;t optimize for.  We can optimize for JSFinalObject (because it&apos;s easy to check that an object is JSFinalObject, so it&apos;s a shortcut for speculating on object).  We can, and do, optimize for JSArray.  But we don&apos;t want to emit JSFinalObject speculation if we know for sure that the value may be, for instance, JSDateInstance.  Since we don&apos;t want to have a bit for every possible subclass of JSObject in PredictedType, we use PredictOtherObject as a placeholder.

Note that it would be unwise to replace PredictOtherObject with PredictObject, since PredictObject means that we&apos;ve definitely seen JSFinalObject and JSArray.  If PredictOtherObject was just set to PredictObject then we wouldn&apos;t be able to detect if an object is never a JSFinalObject, since anytime the value profiler notices, say, a JSFunction, then it would set the bit that corresponds to JSFinalObject (since PredictObject has all object bits set).

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PredictedType.h:60
&gt; &gt;  enum PredictionSource { WeakPrediction, StrongPrediction };
&gt; &gt;  
&gt; &gt;  inline bool isCellPrediction(PredictedType value)
&gt; &gt;  {
&gt; &gt; -    return (value &amp; PredictCell) == PredictCell &amp;&amp; !(value &amp; ~(PredictArray | PredictionTagMask));
&gt; &gt; +    return !!(value &amp; PredictCell) &amp;&amp; !(value &amp; ~(PredictCell | PredictionTagMask));
&gt; &gt; +}
&gt; 
&gt; Seems like this could all become an object with member functions, wrapping a uint16_t. Not necessary in this patch, though.

Yeah, we&apos;re definitely heading in that direction!

&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/BoundsCheckedPointer.h:7
&gt; &gt; + *  This library is free software; you can redistribute it and/or
&gt; &gt; + *  modify it under the terms of the GNU Library General Public
&gt; &gt; + *  License as published by the Free Software Foundation; either
&gt; &gt; + *  version 2 of the License, or (at your option) any later version.
&gt; 
&gt; Is this newly authored code or LGPL2 code from somewhere else? If newly authored, BSD license, please.

New code.  I copy pasted the wrong license header, I guess!  I&apos;ll pull in a BSD license header.

&gt; 
&gt; &gt; Source/JavaScriptCore/wtf/BoundsCheckedPointer.h:38
&gt; &gt; +class BoundsCheckedPointer {
&gt; 
&gt; Probably overkill to do in this patch, but it seems like this class could become an iterator for FixedArray&lt;typename, size_t&gt;. That would simplify the use case a bit, and guarantee that the data and the bounds checked pointer were in agreement about the data&apos;s size.

Yup!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466772</commentid>
    <comment_count>7</comment_count>
      <attachid>107272</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-13 18:51:47 -0700</bug_when>
    <thetext>Created attachment 107272
the patch - fix license, add build stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467085</commentid>
    <comment_count>8</comment_count>
      <attachid>107272</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-14 09:47:09 -0700</bug_when>
    <thetext>Comment on attachment 107272
the patch - fix license, add build stuff

What happens if we see &quot;o.a&quot; and o varies between an array and an ordinary object?  do we get strong-object or weak-array?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467149</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-14 11:02:45 -0700</bug_when>
    <thetext>Based on your explanation, I think something like this would help:

+static const PredictedType PredictObjectMask        = 0x003f; // Bitmask used for testing for any kind of object prediction.
+static const PredictedType PredictFinalObject   = 0x0001; // It&apos;s definitely a JSFinalObject.
+static const PredictedType PredictArray         = 0x0002; // It&apos;s definitely a JSArray.
+static const PredictedType PredictObjectOther   = 0x0010; // It&apos;s definitely an object other than JSFinalObject or JSArray.
+static const PredictedType PredictObjectUnknown    = 0x0020; // It&apos;s definitely an object, but we didn&apos;t record enough information to know more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467197</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 11:56:21 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 107272 [details])
&gt; What happens if we see &quot;o.a&quot; and o varies between an array and an ordinary object?  do we get strong-object or weak-array?

If by &quot;ordinary object&quot; you mean JSFinalObject then we get Strong|PredictArray|PredictFinalObject.  If by &quot;ordinary object&quot; you mean some subclass of JSObject other than JSFinalObject then we get Strong|PredictArray|PredictObjectOther.  If by &quot;ordinary object&quot; you mean that we inferred that by seeing that there were GetById/GetByVal&apos;s executed on the object, or that it came out of some op that&apos;s known to return objects but we don&apos;t know anything else about it, then we just get Strong|PredictArray.  If by &quot;ordinary object&quot; you mean that we saw a JSFinalObjects and other subclasses of JSObject then we get Strong|PredictArray|PredictFinalObject|PredictObjectOther.  Note that there are bits left behind for other kinds of objects in the future (functions, typed arrays, etc), so this is still different from PredictObject.  Currently we won&apos;t ever get PredictObject in any PredictedType variable because of those missing bits, and because nothing in the analysis every returns PredictObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467203</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 12:03:01 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Based on your explanation, I think something like this would help:
&gt; 
&gt; +static const PredictedType PredictObjectMask        = 0x003f; // Bitmask used for testing for any kind of object prediction.
&gt; +static const PredictedType PredictFinalObject   = 0x0001; // It&apos;s definitely a JSFinalObject.
&gt; +static const PredictedType PredictArray         = 0x0002; // It&apos;s definitely a JSArray.
&gt; +static const PredictedType PredictObjectOther   = 0x0010; // It&apos;s definitely an object other than JSFinalObject or JSArray.
&gt; +static const PredictedType PredictObjectUnknown    = 0x0020; // It&apos;s definitely an object, but we didn&apos;t record enough information to know more.

Yeah, that&apos;s better.  I&apos;ll make that change and then land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467208</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 12:06:27 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 107272 [details] [details])
&gt; &gt; What happens if we see &quot;o.a&quot; and o varies between an array and an ordinary object?  do we get strong-object or weak-array?
&gt; 
&gt; If by &quot;ordinary object&quot; you mean JSFinalObject then we get Strong|PredictArray|PredictFinalObject.  If by &quot;ordinary object&quot; you mean some subclass of JSObject other than JSFinalObject then we get Strong|PredictArray|PredictObjectOther.  If by &quot;ordinary object&quot; you mean that we inferred that by seeing that there were GetById/GetByVal&apos;s executed on the object, or that it came out of some op that&apos;s known to return objects but we don&apos;t know anything else about it, then we just get Strong|PredictArray.  If by &quot;ordinary object&quot; you mean that we saw a JSFinalObjects and other subclasses of JSObject then we get Strong|PredictArray|PredictFinalObject|PredictObjectOther.  Note that there are bits left behind for other kinds of objects in the future (functions, typed arrays, etc), so this is still different from PredictObject.  Currently we won&apos;t ever get PredictObject in any PredictedType variable because of those missing bits, and because nothing in the analysis every returns PredictObject.

Ah sorry, I missed the part where &quot;o&quot; is the base of &quot;o.a&quot;.  There are two cases:

1) Value profiling tells us that o is always an array.  Then we just get Strong|PredictArray, because: (a) o.a backward propagates Strong|PredictSomeObject, (b) o&apos;s value source forward propagates Strong|PredictArray, and (c) when they meet, mergePredictions(Strong | PredictSomeObject, Strong | PredictArray) = Strong | PredictArray.  The intuition behind PredictSomeObject is that it&apos;s a prediction that&apos;s only meant to hold if no other prediction is made, or if all of the other predictions say that it isn&apos;t an object (which it clearly might be if they user wrote that code).

2) Value profiling tells us that o is sometimes an array and sometimes some other object.  Then my previous comment holds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467295</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 13:38:30 -0700</bug_when>
    <thetext>Landed in r95115.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467302</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-09-14 13:42:29 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Landed in r95115.

Heyyy, it broke everything. :S</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467307</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-14 13:48:52 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Landed in r95115.
&gt; 
&gt; Heyyy, it broke everything. :S

Yes, yes it did.  Build fix committed in r95116.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107158</attachid>
            <date>2011-09-13 02:52:05 -0700</date>
            <delta_ts>2011-09-13 14:54:36 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cleanerpredict_patch_1.diff</filename>
            <type>text/plain</type>
            <size>44022</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUwMjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODcgQEAK
KzIwMTEtMDktMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBQ
cmVkaWN0aW9uIHRyYWNraW5nIGlzIG5vdCBwcmVjaXNlIGVub3VnaAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5OTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgcmljaGVyIHNl
dCBvZiB0eXBlIHByZWRpY3Rpb25zLCBpbmNsdWRpbmcgSlNGaW5hbE9iamVjdCwgSlNTdHJpbmcs
CisgICAgICAgIG9iamVjdCB0aGF0IGlzIG5vdCBhIEpTRmluYWxPYmplY3Qgb3IgSlNBcnJheSAo
T2JqZWN0T3RoZXIpLCBzb21lIG9iamVjdAorICAgICAgICBidXQgd2UgZG9uJ3Qgb3IgY2FyZSBr
bm93IHdoYXQga2luZCAoU29tZU9iamVjdCksIGRlZmluaXRlbHkgYW4gb2JqZWN0LAorICAgICAg
ICBjZWxsIHRoYXQgaXMgbm90IGFuIG9iamVjdCBvciBKU1N0cmluZywgYW4gdmFsdWUgdGhhdCBp
cyBub25lIG9mIHRoZSBhYm92ZQorICAgICAgICAoc28gZWl0aGVyIFVuZGVmaW5lZCBvciBOdWxs
KS4gTWFkZSB0aGUgcHJvcGFnYXRvciBhbmQgdmFsdWUgcHJvZmlsZXIgd29yaworICAgICAgICB3
aXRoIHRoZSBuZXcgdHlwZXMuCisgICAgICAgIAorICAgICAgICBQZXJmb3JtYW5jZSBpcyBuZXV0
cmFsLCBiZWNhdXNlIHRoZSBERkcgSklUIGRvZXMgbm90IHRha2UgYWR2YW50YWdlIG9mIHRoaXMK
KyAgICAgICAgbmV3IGtub3dsZWRnZSB5ZXQuCisgICAgICAgIAorICAgICAgICBJbiB0aGUgcHJv
Y2VzcyBvZiB3cml0aW5nIHByZWRpY3Rpb25Ub1N0cmluZygpICh3aGljaCBpcyBub3cgY29uc2lk
ZXJhYmx5CisgICAgICAgIG1vcmUgY29tcGxleCkgSSBkZWNpZGVkIHRvIGZpbmFsbHkgYWRkIGEg
Qm91bmRzQ2hlY2tlZFBvaW50ZXIsIHdoaWNoCisgICAgICAgIHNob3VsZCBjb21lIGluIGhhbmR5
IGluIG90aGVyIHBsYWNlcywgbGlrZSBhdCBsZWFzdCB0aGUgT1NSIHNjcmF0Y2ggYnVmZmVyCisg
ICAgICAgIGFuZCB0aGUgQ29tcGFjdEpJVENvZGVNYXAuIEl0J3MgZ3JlYXQgZm9yIGNhc2VzIHdo
ZXJlIHlvdSB3YW50IHRvCisgICAgICAgIGRvIHBvaW50ZXIgYXJpdGhtZXRpYywgeW91IHdhbnQg
dG8gaGF2ZSBhc3NlcnRpb25zIGFib3V0IHRoZQorICAgICAgICBwb2ludGVyIG5vdCBnb2luZyBv
dXQgb2YgYm91bmRzLCBidXQgeW91IGRvbid0IHdhbnQgdG8gd3JpdGUgdGhvc2UKKyAgICAgICAg
YXNzZXJ0aW9ucyB5b3Vyc2VsZi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyByZXF1aXJl
ZCByZWZhY3RvcmluZyBpbmhlcml0cygpLCBzaW5jZSB0aGUgVmFsdWVQcm9maWxlciBtYXkKKyAg
ICAgICAgd2FudCB0byBkbyB0aGUgZXF1aXZhbGVudCBvZiBpbmhlcml0cygpIGJ1dCBnaXZlbiB0
d28gQ2xhc3NJbmZvJ3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6cHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bWFr
ZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9uRnJvbVZhbHVlKToKKyAgICAg
ICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAgICAgIChKU0M6OmlzQ2VsbFByZWRp
Y3Rpb24pOgorICAgICAgICAoSlNDOjppc09iamVjdFByZWRpY3Rpb24pOgorICAgICAgICAoSlND
Ojppc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OmlzU3RyaW5nUHJlZGlj
dGlvbik6CisgICAgICAgIChKU0M6Om1lcmdlUHJlZGljdGlvbnMpOgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9m
T2JqZWN0cyk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZGaW5hbE9iamVj
dHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mU3RyaW5ncyk6CisgICAg
ICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6cHJvYmFiaWxpdHlPZk9iamVjdCk6CisgICAgICAgIChK
U0M6OlZhbHVlUHJvZmlsZTo6cHJvYmFiaWxpdHlPZkZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6VmFsdWVQcm9maWxlOjpwcm9iYWJpbGl0eU9mU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VmFs
dWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpTdGF0aXN0aWNz
OjpTdGF0aXN0aWNzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjb21wdXRlU3RhdGlz
dGljcyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQcmVkaWN0KToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAgICog
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBy
b3BhZ2F0ZU5vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgIChK
U0M6OkNsYXNzSW5mbzo6aXNTdWJDbGFzc09mKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5oZXJpdHMpOgorICAgICAgICAqIHd0Zi9Cb3Vu
ZHNDaGVja2VkUG9pbnRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBv
aW50ZXI6OkJvdW5kc0NoZWNrZWRQb2ludGVyKToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tl
ZFBvaW50ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVy
OjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJh
dG9yLT0pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6b3BlcmF0b3IrKToK
KyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yLSk6CisgICAgICAg
IChXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVyOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6
Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yLS0pOgorICAgICAgICAoV1RGOjpCb3VuZHND
aGVja2VkUG9pbnRlcjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBv
aW50ZXI6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6
b3BlcmF0b3I+KToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9y
Pj0pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVyOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkJv
dW5kc0NoZWNrZWRQb2ludGVyOjpnZXQpOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9p
bnRlcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9w
ZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6c3RyY2F0KToK
KyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6OnZhbGlkYXRlKToKKwogMjAxMS0w
OS0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEphdmFTY3Jp
cHRDb3JlIGRvZXMgbm90IGhhdmUgYmFzZWxpbmUtPnNwZWN1bGF0aXZlIE9TUgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk1MDIyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAKIAkJMEZEODJFNTUxNDFEQUVFRTAwMTc5Qzk0IC8q
IFByZWRpY3Rpb25UcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MkU1MDE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGlvblRyYWNrZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4
MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmNwcCAqLzsgfTsKIAkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERG
R09TUkVudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkU4NTE0MUYzRkUzMDAx
NzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTgyMTQxRjNGQzkwMDE3OUM5NCAvKiBCb3VuZHND
aGVja2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTg0MTQx
RjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLzsgfTsKIAkJMTQwMDA2NzcxMkE2
Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUw
MDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElW
YWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODA3LDYgKzgwOSw4IEBACiAJCTBGRDgyRTUwMTQx
REFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcmVkaWN0aW9uVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnkuY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkVudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJF
NTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR09TUkVudHJ5Lmg7IHBhdGggPSBkZmcvREZHT1NSRW50cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEODJFODIxNDFGM0ZDOTAwMTc5Qzk0IC8qIEJv
dW5kc0NoZWNrZWRQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJv
dW5kc0NoZWNrZWRQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxv
Y2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE3ODIsNiArMTc4Niw3IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRTgyMTQx
RjNGQzkwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5oICovLAogCQkJCTBGOTYzQjJF
MTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8sCiAJCQkJMEY5NjNC
MkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGOTYzQjJB
MTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggKi8sCkBAIC0yMzA4LDYgKzIzMTMs
NyBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3
OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkwRkQ4MkU0RjE0MURBRUExMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5oICovLAogCQkJCTBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAv
KiBQcmVkaWN0aW9uVHJhY2tlci5oICovLAogCQkJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAv
KiBWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTI0MDksNiArMjQxNSw3IEBACiAJCQkJQkMyNTdERTgw
RTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0Iy
QzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkQ4MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JF
bnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTUxNDFEQUVFRTAwMTc5Qzk0IC8qIFBy
ZWRpY3Rpb25UcmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NDE0MURBRUVFMDAx
NzlDOTQgLyogUHJlZGljdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDgzLDYgKzMwOTAs
NyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ByZWRpY3RlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKworI2luY2x1ZGUg
PHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmbmRl
ZiBOREVCVUcKK2NvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRUeXBlIHZh
bHVlKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgc2l6ZSA9IDk2OworICAgIHN0YXRpYyBjaGFy
IGRlc2NyaXB0aW9uW3NpemVdOworICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyPGNoYXI+IHB0cihk
ZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgCisgICAgaWYgKCEodmFsdWUgJiBTdHJvbmdQcmVkaWN0
aW9uVGFnKSkKKyAgICAgICAgcHRyLnN0cmNhdCgiV2VhayIpOworICAgIAorICAgIGlmICh2YWx1
ZSAmIFByZWRpY3RTb21lT2JqZWN0KSB7CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgKFByZWRp
Y3RPYmplY3QgJiB+UHJlZGljdFNvbWVPYmplY3QpKSk7CisgICAgICAgIHB0ci5zdHJjYXQoIk9i
amVjdCIpOworICAgIH0KKworICAgIGlmICh2YWx1ZSAmIFByZWRpY3RDZWxsT3RoZXIpCisgICAg
ICAgIHB0ci5zdHJjYXQoIk90aGVyY2VsbCIpOworICAgIAorICAgIGlmICh2YWx1ZSAmIFByZWRp
Y3RPYmplY3RPdGhlcikKKyAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJvYmoiKTsKKyAgICAKKyAg
ICBpZiAodmFsdWUgJiBQcmVkaWN0RmluYWxPYmplY3QpCisgICAgICAgIHB0ci5zdHJjYXQoIkZp
bmFsIik7CisKKyAgICBpZiAodmFsdWUgJiBQcmVkaWN0QXJyYXkpCisgICAgICAgIHB0ci5zdHJj
YXQoIkFycmF5Iik7CisgICAgCisgICAgaWYgKHZhbHVlICYgUHJlZGljdFN0cmluZykKKyAgICAg
ICAgcHRyLnN0cmNhdCgiU3RyIik7CisgICAgCisgICAgaWYgKHZhbHVlICYgUHJlZGljdEludDMy
KQorICAgICAgICBwdHIuc3RyY2F0KCJJbnQiKTsKKyAgICAKKyAgICBpZiAodmFsdWUgJiBQcmVk
aWN0RG91YmxlKQorICAgICAgICBwdHIuc3RyY2F0KCJEb3VibGUiKTsKKyAgICAKKyAgICBpZiAo
dmFsdWUgJiBQcmVkaWN0Qm9vbGVhbikKKyAgICAgICAgcHRyLnN0cmNhdCgiQm9vbCIpOworICAg
IAorICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPdGhlcikKKyAgICAgICAgcHRyLnN0cmNhdCgiT3Ro
ZXIiKTsKKyAgICAKKyAgICAqcHRyKysgPSAwOworICAgIAorICAgIHJldHVybiBkZXNjcmlwdGlv
bjsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorUHJlZGljdGVkVHlw
ZSBtYWtlUHJlZGljdGlvbihjb25zdCBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUpCit7CisgICAgVmFs
dWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3M7CisgICAgcHJvZmlsZS5jb21wdXRlU3Rh
dGlzdGljcyhzdGF0aXN0aWNzKTsKKyAgICAKKyAgICBpZiAoIXN0YXRpc3RpY3Muc2FtcGxlcykK
KyAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmlu
dDMycyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0
aW9uVGFnIHwgUHJlZGljdEludDMyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMg
PT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3REb3VibGU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzICsgc3Rh
dGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0
cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0TnVtYmVyOworICAgIAorICAgIGlmIChzdGF0aXN0
aWNzLmFycmF5cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQ
cmVkaWN0aW9uVGFnIHwgUHJlZGljdEFycmF5OworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmZp
bmFsT2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQ
cmVkaWN0aW9uVGFnIHwgUHJlZGljdEZpbmFsT2JqZWN0OworICAgIAorICAgIGlmIChzdGF0aXN0
aWNzLnN0cmluZ3MgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25n
UHJlZGljdGlvblRhZyB8IFByZWRpY3RTdHJpbmc7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3Mu
b2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVk
aWN0aW9uVGFnIHwgUHJlZGljdE9iamVjdE90aGVyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNz
LmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRp
Y3Rpb25UYWcgfCBQcmVkaWN0Q2VsbE90aGVyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmJv
b2xlYW5zID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRp
Y3Rpb25UYWcgfCBQcmVkaWN0Qm9vbGVhbjsKKyAgICAKKyAgICByZXR1cm4gU3Ryb25nUHJlZGlj
dGlvblRhZyB8IFByZWRpY3RPdGhlcjsKK30KKyNlbmRpZgorCitQcmVkaWN0ZWRUeXBlIHByZWRp
Y3Rpb25Gcm9tVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQorICAgICAgICByZXR1cm4gUHJlZGljdEludDMyOworICAgIGVsc2UgaWYgKHZhbHVlLmlzRG91
YmxlKCkpCisgICAgICAgIHJldHVybiBQcmVkaWN0RG91YmxlOworICAgIGVsc2UgaWYgKHZhbHVl
LmlzQ2VsbCgpKSB7CisgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0gdmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChjbGFzc0luZm8gPT0gJkpTRmluYWxPYmplY3Q6OnNfaW5mbykKKyAgICAgICAgICAgIHJldHVy
biBQcmVkaWN0RmluYWxPYmplY3Q7CisgICAgICAgIAorICAgICAgICBpZiAoY2xhc3NJbmZvID09
ICZKU0FycmF5OjpzX2luZm8pCisgICAgICAgICAgICByZXR1cm4gUHJlZGljdEFycmF5OworICAg
ICAgICAKKyAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNTdHJpbmc6OnNfaW5mbykKKyAgICAg
ICAgICAgIHJldHVybiBQcmVkaWN0U3RyaW5nOworICAgICAgICAKKyAgICAgICAgaWYgKGNsYXNz
SW5mby0+aXNTdWJDbGFzc09mKCZKU09iamVjdDo6c19pbmZvKSkKKyAgICAgICAgICAgIHJldHVy
biBQcmVkaWN0T2JqZWN0T3RoZXI7CisgICAgICAgIAorICAgICAgICByZXR1cm4gUHJlZGljdENl
bGxPdGhlcjsKKyAgICB9IGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQorICAgICAgICByZXR1
cm4gUHJlZGljdEJvb2xlYW47CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUHJlZGljdE90aGVy
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDIzICszMyw0NSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdHlwZWRlZiB1aW50OF90
IFByZWRpY3RlZFR5cGU7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Tm9uZSAg
ID0gMDsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RDZWxsICAgPSAweDAxOwot
c3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5ICA9IDB4MDM7Ci1zdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0SW50MzIgID0gMHgwNDsKLXN0YXRpYyBjb25zdCBQ
cmVkaWN0ZWRUeXBlIFByZWRpY3REb3VibGUgPSAweDA4Owotc3RhdGljIGNvbnN0IFByZWRpY3Rl
ZFR5cGUgUHJlZGljdE51bWJlciA9IDB4MGM7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQ
cmVkaWN0Qm9vbGVhbiA9IDB4MTA7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0
VG9wICAgID0gMHgxZjsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rp
b25UYWcgPSAweDgwOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01h
c2sgICAgPSAweDgwOwordHlwZWRlZiB1aW50MTZfdCBQcmVkaWN0ZWRUeXBlOworc3RhdGljIGNv
bnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE5vbmUgICAgICAgICAgPSAweDAwMDA7IC8vIFdlIGRv
bid0IGtub3cgYW55dGhpbmcgeWV0Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGlj
dEZpbmFsT2JqZWN0ICAgPSAweDAwMDE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTRmluYWxPYmpl
Y3QuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgICAgICAgICA9IDB4
MDAwMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KK3N0YXRpYyBjb25zdCBQcmVkaWN0
ZWRUeXBlIFByZWRpY3RPYmplY3RPdGhlciAgID0gMHgwMDEwOyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCBvciBKU0FycmF5Lgorc3RhdGljIGNvbnN0
IFByZWRpY3RlZFR5cGUgUHJlZGljdFNvbWVPYmplY3QgICAgPSAweDAwMjA7IC8vIEl0J3Mgc29t
ZSB1bmtub3duIHN1YmNsYXNzIG9mIEpTT2JqZWN0Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5
cGUgUHJlZGljdE9iamVjdCAgICAgICAgPSAweDAwM2Y7IC8vIEl0J3MgZGVmaW5pdGVseSBhIHN1
YmNsYXNzIG9mIEpTT2JqZWN0Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdFN0
cmluZyAgICAgICAgPSAweDAwNDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLgorc3Rh
dGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdENlbGxPdGhlciAgICAgPSAweDAwODA7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbCBidXQgbm90IGEgc3ViY2xhc3Mgb2YgSlNPYmplY3Qg
YW5kIGRlZmluaXRlbHkgbm90IGEgSlNTdHJpbmcuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlw
ZSBQcmVkaWN0Q2VsbCAgICAgICAgICA9IDB4MDBmZjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlND
ZWxsLgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEludDMyICAgICAgICAgPSAw
eDAxMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMi4KK3N0YXRpYyBjb25zdCBQcmVkaWN0
ZWRUeXBlIFByZWRpY3REb3VibGUgICAgICAgID0gMHgwMjAwOyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBEb3VibGUuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0TnVtYmVyICAgICAg
ICA9IDB4MDMwMDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGUuCitzdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Qm9vbGVhbiAgICAgICA9IDB4MDQwMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgQm9vbGVhbi4KK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRp
Y3RPdGhlciAgICAgICAgID0gMHg0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgbm9uZSBvZiB0aGUg
YWJvdmUuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9wICAgICAgICAgICA9
IDB4N2ZmZjsgLy8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUuCitzdGF0aWMgY29uc3QgUHJl
ZGljdGVkVHlwZSBTdHJvbmdQcmVkaWN0aW9uVGFnICA9IDB4ODAwMDsgLy8gSXQncyBhIHN0cm9u
ZyBwcmVkaWN0aW9uIChhbGwgc3Ryb25nIHByZWRpY3Rpb25zIHRydW1wIGFsbCB3ZWFrIG9uZXMp
Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAgPSAweDgw
MDA7CiAKIGVudW0gUHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBTdHJvbmdQcmVk
aWN0aW9uIH07CiAKIGlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxs
ICYmICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNrKSk7CisgICAg
cmV0dXJuICEhKHZhbHVlICYgUHJlZGljdENlbGwpICYmICEodmFsdWUgJiB+KFByZWRpY3RDZWxs
IHwgUHJlZGljdGlvblRhZ01hc2spKTsKK30KKworaW5saW5lIGJvb2wgaXNPYmplY3RQcmVkaWN0
aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGlj
dE9iamVjdCkgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE9iamVjdCB8IFByZWRpY3Rpb25UYWdNYXNr
KSk7Cit9CisKK2lubGluZSBib29sIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKFByZWRpY3RlZFR5
cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0g
UHJlZGljdEZpbmFsT2JqZWN0OworfQorCitpbmxpbmUgYm9vbCBpc1N0cmluZ1ByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25U
YWdNYXNrKSA9PSBQcmVkaWN0U3RyaW5nOwogfQogCiBpbmxpbmUgYm9vbCBpc0FycmF5UHJlZGlj
dGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtODQsNTMgKzEwNiwyMyBAQCBpbmxpbmUgYm9v
bCBpc1N0cm9uZ1ByZWRpY3Rpb24oUHJlZGljdGVkCiB9CiAKICNpZm5kZWYgTkRFQlVHCi1pbmxp
bmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpCi17
Ci0gICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbih2YWx1ZSkpIHsKLSAgICAgICAgc3dpdGNoICh2
YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgewotICAgICAgICBjYXNlIFByZWRpY3ROb25lOgot
ICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1ib3R0b20iOwotICAgICAgICBjYXNlIFByZWRp
Y3RDZWxsOgotICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1jZWxsIjsKLSAgICAgICAgY2Fz
ZSBQcmVkaWN0QXJyYXk6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWFycmF5IjsKLSAg
ICAgICAgY2FzZSBQcmVkaWN0SW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWlu
dDMyIjsKLSAgICAgICAgY2FzZSBQcmVkaWN0RG91YmxlOgotICAgICAgICAgICAgcmV0dXJuICJw
LXN0cm9uZy1kb3VibGUiOwotICAgICAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgICAg
ICByZXR1cm4gInAtc3Ryb25nLW51bWJlciI7Ci0gICAgICAgIGNhc2UgUHJlZGljdEJvb2xlYW46
Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJvb2xlYW4iOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy10b3AiOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIFByZWRpY3ROb25lOgotICAgICAgICByZXR1
cm4gInAtd2Vhay1ib3R0b20iOwotICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAgIHJldHVy
biAicC13ZWFrLWNlbGwiOwotICAgIGNhc2UgUHJlZGljdEFycmF5OgotICAgICAgICByZXR1cm4g
InAtd2Vhay1hcnJheSI7Ci0gICAgY2FzZSBQcmVkaWN0SW50MzI6Ci0gICAgICAgIHJldHVybiAi
cC13ZWFrLWludDMyIjsKLSAgICBjYXNlIFByZWRpY3REb3VibGU6Ci0gICAgICAgIHJldHVybiAi
cC13ZWFrLWRvdWJsZSI7Ci0gICAgY2FzZSBQcmVkaWN0TnVtYmVyOgotICAgICAgICByZXR1cm4g
InAtd2Vhay1udW1iZXIiOwotICAgIGNhc2UgUHJlZGljdEJvb2xlYW46Ci0gICAgICAgIHJldHVy
biAicC13ZWFrLWJvb2xlYW4iOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAicC13ZWFr
LXRvcCI7Ci0gICAgfQotfQorY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3Rl
ZFR5cGUgdmFsdWUpOwogI2VuZGlmCiAKIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1lcmdlUHJlZGlj
dGlvbnMoUHJlZGljdGVkVHlwZSBsZWZ0LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0KQogewotICAgIGlm
IChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgPT0gaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkK
KyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpID09IGlzU3Ryb25nUHJlZGljdGlvbihy
aWdodCkpIHsKKyAgICAgICAgaWYgKGxlZnQgJiBQcmVkaWN0U29tZU9iamVjdCkgeworICAgICAg
ICAgICAgQVNTRVJUKCEobGVmdCAmIChQcmVkaWN0T2JqZWN0ICYgflByZWRpY3RTb21lT2JqZWN0
KSkpOworICAgICAgICAgICAgaWYgKHJpZ2h0ICYgUHJlZGljdE9iamVjdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKGxlZnQgJiB+UHJlZGljdFNvbWVPYmplY3QpIHwgcmlnaHQ7CisgICAgICAg
IH0gZWxzZSBpZiAocmlnaHQgJiBQcmVkaWN0U29tZU9iamVjdCkgeworICAgICAgICAgICAgQVNT
RVJUKCEocmlnaHQgJiAoUHJlZGljdE9iamVjdCAmIH5QcmVkaWN0U29tZU9iamVjdCkpKTsKKyAg
ICAgICAgICAgIGlmIChsZWZ0ICYgUHJlZGljdE9iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gKHJpZ2h0ICYgflByZWRpY3RTb21lT2JqZWN0KSB8IGxlZnQ7CisgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIGxlZnQgfCByaWdodDsKKyAgICB9CiAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlv
bihsZWZ0KSkgewogICAgICAgICBBU1NFUlQoIWlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkpOwog
ICAgICAgICByZXR1cm4gbGVmdDsKQEAgLTE1OSwzNiArMTUxLDExIEBAIGlubGluZSBQcmVkaWN0
ZWRUeXBlIG1ha2VQcmVkaWN0aW9uKFByZWQKIH0KIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxF
UikKLWlubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgY29uc3QgVmFsdWVQcm9maWxlJiBwcm9maWxlKQotewotICAgIFZhbHVlUHJvZmls
ZTo6U3RhdGlzdGljcyBzdGF0aXN0aWNzOwotICAgIHByb2ZpbGUuY29tcHV0ZVN0YXRpc3RpY3Mo
Z2xvYmFsRGF0YSwgc3RhdGlzdGljcyk7Ci0gICAgCi0gICAgaWYgKCFzdGF0aXN0aWNzLnNhbXBs
ZXMpCi0gICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGlj
cy5pbnQzMnMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJl
ZGljdGlvblRhZyB8IFByZWRpY3RJbnQzMjsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5kb3Vi
bGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rp
b25UYWcgfCBQcmVkaWN0RG91YmxlOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmludDMycyAr
IHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVy
biBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdE51bWJlcjsKLSAgICAKLSAgICBpZiAoc3Rh
dGlzdGljcy5hcnJheXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ry
b25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RBcnJheTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGlj
cy5jZWxscyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVk
aWN0aW9uVGFnIHwgUHJlZGljdENlbGw7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuYm9vbGVh
bnMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlv
blRhZyB8IFByZWRpY3RCb29sZWFuOwotICAgIAotICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9u
VGFnIHwgUHJlZGljdFRvcDsKLX0KK1ByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oY29uc3Qg
VmFsdWVQcm9maWxlJiBwcm9maWxlKTsKICNlbmRpZgogCitQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b25Gcm9tVmFsdWUoSlNWYWx1ZSB2YWx1ZSk7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gUHJlZGljdGVkVHlwZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYg
KzEwOCwzNyBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZPYmplY3RzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgeworICAgICAgICAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBjaSA9IGNsYXNzSW5mbyhpKTsKKyAgICAgICAgICAgIGlmICghIWNpICYmIGNpLT5pc1N1
YkNsYXNzT2YoJkpTT2JqZWN0OjpzX2luZm8pKQorICAgICAgICAgICAgICAgIHJlc3VsdCsrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIG51bWJlck9mRmluYWxPYmplY3RzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1
Y2tldHM7ICsraSkgeworICAgICAgICAgICAgaWYgKGNsYXNzSW5mbyhpKSA9PSAmSlNGaW5hbE9i
amVjdDo6c19pbmZvKQorICAgICAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mU3Ry
aW5ncygpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChjbGFzc0luZm8oaSkgPT0gJkpTU3RyaW5nOjpzX2luZm8pCisgICAgICAgICAg
ICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBcnJheXMoKSBjb25zdAogICAgIHsKICAgICAg
ICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKQEAgLTE0OCwxMSArMTc5LDI2IEBAIHN0cnVjdCBWYWx1
ZVByb2ZpbGUgewogICAgICAgICByZXR1cm4gY29tcHV0ZVByb2JhYmlsaXR5KG51bWJlck9mQ2Vs
bHMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkpOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBwcm9i
YWJpbGl0eU9mT2JqZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlUHJv
YmFiaWxpdHkobnVtYmVyT2ZPYmplY3RzKCksIG51bWJlck9mU2FtcGxlcygpKTsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZkZpbmFsT2JqZWN0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZGaW5hbE9iamVjdHMo
KSwgbnVtYmVyT2ZTYW1wbGVzKCkpOworICAgIH0KKyAgICAKICAgICB1bnNpZ25lZCBwcm9iYWJp
bGl0eU9mQXJyYXkoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVQcm9iYWJp
bGl0eShudW1iZXJPZkFycmF5cygpLCBudW1iZXJPZlNhbXBsZXMoKSk7CiAgICAgfQogICAgIAor
ICAgIHVuc2lnbmVkIHByb2JhYmlsaXR5T2ZTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbXB1dGVQcm9iYWJpbGl0eShudW1iZXJPZlN0cmluZ3MoKSwgbnVtYmVyT2ZTYW1w
bGVzKCkpOworICAgIH0KKyAgICAKICAgICB1bnNpZ25lZCBwcm9iYWJpbGl0eU9mQm9vbGVhbigp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gY29tcHV0ZVByb2JhYmlsaXR5KG51bWJlck9m
Qm9vbGVhbnMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkpOwpAQCAtMTYyLDEyICsyMDgsMTUgQEAgc3Ry
dWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkKICAgICB7CiAgICAg
ICAgIGZwcmludGYob3V0LAotICAgICAgICAgICAgICAgICJzYW1wbGVzID0gJXUsIGludDMyID0g
JXUgKCV1KSwgZG91YmxlID0gJXUgKCV1KSwgY2VsbCA9ICV1ICgldSksIGFycmF5ID0gJXUgKCV1
KSwgYm9vbGVhbiA9ICV1ICgldSkiLAorICAgICAgICAgICAgICAgICJzYW1wbGVzID0gJXUsIGlu
dDMyID0gJXUgKCV1KSwgZG91YmxlID0gJXUgKCV1KSwgY2VsbCA9ICV1ICgldSksIG9iamVjdCA9
ICV1ICgldSksIGZpbmFsIG9iamVjdCA9ICV1ICgldSksIGFycmF5ID0gJXUgKCV1KSwgc3RyaW5n
ID0gJXUgKCV1KSwgYm9vbGVhbiA9ICV1ICgldSkiLAogICAgICAgICAgICAgICAgIG51bWJlck9m
U2FtcGxlcygpLAogICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZJbnQzMigpLCBudW1iZXJP
ZkludDMycygpLAogICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZEb3VibGUoKSwgbnVtYmVy
T2ZEb3VibGVzKCksCiAgICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkNlbGwoKSwgbnVtYmVy
T2ZDZWxscygpLAorICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZPYmplY3QoKSwgbnVtYmVy
T2ZPYmplY3RzKCksCisgICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkZpbmFsT2JqZWN0KCks
IG51bWJlck9mRmluYWxPYmplY3RzKCksCiAgICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkFy
cmF5KCksIG51bWJlck9mQXJyYXlzKCksCisgICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZlN0
cmluZygpLCBudW1iZXJPZlN0cmluZ3MoKSwKICAgICAgICAgICAgICAgICBwcm9iYWJpbGl0eU9m
Qm9vbGVhbigpLCBudW1iZXJPZkJvb2xlYW5zKCkpOwogICAgICAgICBib29sIGZpcnN0ID0gdHJ1
ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytp
KSB7CkBAIC0xOTMsNTQgKzI0Miw3MiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAgICAg
dW5zaWduZWQgaW50MzJzOwogICAgICAgICB1bnNpZ25lZCBkb3VibGVzOwogICAgICAgICB1bnNp
Z25lZCBjZWxsczsKKyAgICAgICAgdW5zaWduZWQgb2JqZWN0czsKKyAgICAgICAgdW5zaWduZWQg
ZmluYWxPYmplY3RzOwogICAgICAgICB1bnNpZ25lZCBhcnJheXM7CisgICAgICAgIHVuc2lnbmVk
IHN0cmluZ3M7CiAgICAgICAgIHVuc2lnbmVkIGJvb2xlYW5zOworICAgICAgICAKKyAgICAgICAg
U3RhdGlzdGljcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJ6ZXJvKHRoaXMsIHNpemVvZihT
dGF0aXN0aWNzKSk7CisgICAgICAgIH0KICAgICB9OworICAgIAorICAgIC8vIE1ldGhvZCBmb3Ig
aW5jcmVtZW50aW5nIGFsbCByZWxldmFudCBzdGF0aXN0aWNzIGZvciBhIENsYXNzSW5mbywgZXhj
ZXB0IGZvcgorICAgIC8vIGluY3JlbWVudGluZyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMsIHdoaWNo
IHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgICAgLy8gZG9pbmcuCisgICAgc3RhdGlj
IHZvaWQgY29tcHV0ZVN0YXRpc3RpY3MoY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8sIFN0YXRp
c3RpY3MmIHN0YXRpc3RpY3MpCisgICAgeworICAgICAgICBzdGF0aXN0aWNzLmNlbGxzKys7Cisg
ICAgICAgIAorICAgICAgICBpZiAoY2xhc3NJbmZvID09ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8p
IHsKKyAgICAgICAgICAgIHN0YXRpc3RpY3MuZmluYWxPYmplY3RzKys7CisgICAgICAgICAgICBz
dGF0aXN0aWNzLm9iamVjdHMrKzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNBcnJheTo6c19pbmZvKSB7CisgICAg
ICAgICAgICBzdGF0aXN0aWNzLmFycmF5cysrOworICAgICAgICAgICAgc3RhdGlzdGljcy5vYmpl
Y3RzKys7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChjbGFzc0luZm8gPT0gJkpTU3RyaW5nOjpzX2luZm8pIHsKKyAgICAgICAgICAgIHN0YXRp
c3RpY3Muc3RyaW5ncysrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpTT2JqZWN0OjpzX2luZm8p
KQorICAgICAgICAgICAgc3RhdGlzdGljcy5vYmplY3RzKys7CisgICAgfQogCiAgICAgLy8gT3B0
aW1pemVkIG1ldGhvZCBmb3IgZ2V0dGluZyBhbGwgY291bnRzIGF0IG9uY2UuCi0gICAgdm9pZCBj
b21wdXRlU3RhdGlzdGljcyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0YXRpc3RpY3MmIHN0
YXRpc3RpY3MpIGNvbnN0CisgICAgdm9pZCBjb21wdXRlU3RhdGlzdGljcyhTdGF0aXN0aWNzJiBz
dGF0aXN0aWNzKSBjb25zdAogICAgIHsKLSAgICAgICAgdW5zaWduZWQgc2FtcGxlcyAgPSAwOwot
ICAgICAgICB1bnNpZ25lZCBpbnQzMnMgICA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGRvdWJsZXMg
ID0gMDsKLSAgICAgICAgdW5zaWduZWQgY2VsbHMgICAgPSAwOwotICAgICAgICB1bnNpZ25lZCBh
cnJheXMgICA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGJvb2xlYW5zID0gMDsKLSAgICAgICAgCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgewog
ICAgICAgICAgICAgaWYgKCFidWNrZXRzW2ldKSB7CiAgICAgICAgICAgICAgICAgV2Vha0J1Y2tl
dCB3ZWFrQnVja2V0ID0gd2Vha0J1Y2tldHNbaV07CiAgICAgICAgICAgICAgICAgaWYgKCEhd2Vh
a0J1Y2tldCkgewotICAgICAgICAgICAgICAgICAgICBzYW1wbGVzKys7Ci0gICAgICAgICAgICAg
ICAgICAgIGNlbGxzKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3ZWFrQnVja2V0LmdldENs
YXNzSW5mbygpID09ICZKU0FycmF5OjpzX2luZm8pCi0gICAgICAgICAgICAgICAgICAgICAgICBh
cnJheXMrKzsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcy5zYW1wbGVzKys7CisgICAg
ICAgICAgICAgICAgICAgIGNvbXB1dGVTdGF0aXN0aWNzKHdlYWtCdWNrZXQuZ2V0Q2xhc3NJbmZv
KCksIHN0YXRpc3RpY3MpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgc2FtcGxlcysrOworICAgICAgICAgICAgc3RhdGlzdGljcy5zYW1wbGVzKys7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
YnVja2V0c1tpXSk7CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICAg
ICAgICAgIGludDMycysrOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuaW50MzJzKys7CiAg
ICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdWJsZSgpKQotICAgICAgICAgICAgICAgIGRv
dWJsZXMrKzsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAg
ICAgICAgICAgY2VsbHMrKzsKLSAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZnbG9iYWxE
YXRhLCB2YWx1ZS5hc0NlbGwoKSkpCi0gICAgICAgICAgICAgICAgICAgIGFycmF5cysrOwotICAg
ICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAgICBi
b29sZWFucysrOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MuZG91YmxlcysrOworICAgICAg
ICAgICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICAgICAgY29tcHV0ZVN0
YXRpc3RpY3ModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSwgc3RhdGlz
dGljcyk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKKyAgICAgICAg
ICAgICAgICBzdGF0aXN0aWNzLmJvb2xlYW5zKys7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHN0YXRpc3RpY3Muc2FtcGxlcyAgPSBzYW1wbGVzOwotICAgICAgICBzdGF0aXN0aWNzLmlu
dDMycyAgID0gaW50MzJzOwotICAgICAgICBzdGF0aXN0aWNzLmRvdWJsZXMgID0gZG91YmxlczsK
LSAgICAgICAgc3RhdGlzdGljcy5jZWxscyAgICA9IGNlbGxzOwotICAgICAgICBzdGF0aXN0aWNz
LmFycmF5cyAgID0gYXJyYXlzOwotICAgICAgICBzdGF0aXN0aWNzLmJvb2xlYW5zID0gYm9vbGVh
bnM7CiAgICAgfQogICAgIAogICAgIGludCBieXRlY29kZU9mZnNldDsgLy8gLTEgZm9yIHByb2xv
Z3VlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkocmV2aXNpb24gOTUwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDcgKzQ4NCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHByb2ZpbGUtPmR1bXAoc3Rkb3V0KTsKICAgICAgICAgcHJpbnRmKCJc
biIpOwogI2VuZGlmCi0gICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0KG1ha2VQcmVk
aWN0aW9uKCptX2dsb2JhbERhdGEsICpwcm9maWxlKSwgU3Ryb25nUHJlZGljdGlvbik7CisgICAg
ICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5wcmVkaWN0KG1ha2VQcmVkaWN0aW9uKCpwcm9maWxlKSAm
IH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CiAjaWYgRU5BQkxFKERGR19E
RUJVR19WRVJCT1NFKQogICAgICAgICBwcmludGYoIiAgICBQcmVkaWN0aW9uOiAlc1xuIiwgcHJl
ZGljdGlvblRvU3RyaW5nKG1fZ3JhcGhbbm9kZUluZGV4XS5nZXRQcmVkaWN0aW9uKCkpKTsKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDk1MDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzOSwxMyArMTM5LDE1IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4
IG5vZGVJbmRleCwgQ28KICAgICAodm9pZCloYXNQcmludGVkOwogICAgIAogICAgIHByaW50Zigi
KSIpOwotICAgIAotICAgIGlmIChub2RlLmhhc0xvY2FsKCkpCi0gICAgICAgIHByaW50ZigiICBw
cmVkaWN0aW5nICVzIiwgcHJlZGljdGlvblRvU3RyaW5nKGdldFByZWRpY3Rpb24obm9kZS5sb2Nh
bCgpKSkpOwotICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigpKQotICAgICAgICBwcmludGYoIiAg
cHJlZGljdGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhnZXRHbG9iYWxWYXJQcmVkaWN0aW9u
KG5vZGUudmFyTnVtYmVyKCkpKSk7Ci0gICAgaWYgKG5vZGUuaGFzUHJlZGljdGlvbigpKQotICAg
ICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhub2RlLmdl
dFByZWRpY3Rpb24oKSkpOworCisgICAgaWYgKCFza2lwcGVkKSB7CisgICAgICAgIGlmIChub2Rl
Lmhhc0xvY2FsKCkpCisgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIsIHByZWRp
Y3Rpb25Ub1N0cmluZyhnZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpKTsKKyAgICAgICAgaWYg
KG5vZGUuaGFzVmFyTnVtYmVyKCkpCisgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAl
cyIsIHByZWRpY3Rpb25Ub1N0cmluZyhnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVt
YmVyKCkpKSk7CisgICAgICAgIGlmIChub2RlLmhhc1ByZWRpY3Rpb24oKSkKKyAgICAgICAgICAg
IHByaW50ZigiICBwcmVkaWN0aW5nICVzIiwgcHJlZGljdGlvblRvU3RyaW5nKG5vZGUuZ2V0UHJl
ZGljdGlvbigpKSk7CisgICAgfQogICAgIAogICAgIHByaW50ZigiXG4iKTsKIH0KQEAgLTIwOSw3
ICsyMTEsNiBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhCiAgICAg
QVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUpOwog
Ci0gICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAg
IENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7
CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzID49IDEpOwogICAgIGZvciAo
c2l6ZV90IGFyZyA9IDE7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMpOyArK2FyZykgewpAQCAtMjIzLDcgKzIyNCw3IEBAIHZvaWQgR3JhcGg6OnBy
ZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGEKICAgICAgICAgcHJpbnRmKCJcbiIpOwogI2VuZGlm
CiAgICAgICAgIAotICAgICAgICBtX3ByZWRpY3Rpb25zLnByZWRpY3RBcmd1bWVudChhcmcsIG1h
a2VQcmVkaWN0aW9uKGdsb2JhbERhdGEsICpwcm9maWxlKSAmIH5QcmVkaWN0aW9uVGFnTWFzaywg
U3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgIG1fcHJlZGljdGlvbnMucHJlZGljdEFyZ3VtZW50
KGFyZywgbWFrZVByZWRpY3Rpb24oKnByb2ZpbGUpICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJv
bmdQcmVkaWN0aW9uKTsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQog
ICAgICAgICBwcmludGYoIiAgICBQcmVkaWN0aW9uOiAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5n
KG1fcHJlZGljdGlvbnMuZ2V0QXJndW1lbnRQcmVkaWN0aW9uKGFyZykpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzQsMTAgKzQ3NCw3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChzb3VyY2UgPT0gU3Ry
b25nUHJlZGljdGlvbik7CiAgICAgICAgIAotICAgICAgICBQcmVkaWN0ZWRUeXBlIG5ld1ByZWRp
Y3Rpb24gPSBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgcHJlZGljdGlvbiB8IG1fb3BJbmZvMjsKLSAg
ICAgICAgYm9vbCByZXN1bHQgPSBtX29wSW5mbzIgIT0gbmV3UHJlZGljdGlvbjsKLSAgICAgICAg
bV9vcEluZm8yID0gbmV3UHJlZGljdGlvbjsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX29wSW5mbzIsIG1ha2VQcmVkaWN0aW9uKHByZWRp
Y3Rpb24sIHNvdXJjZSkpOwogICAgIH0KICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdh
dG9yLmNwcAkocmV2aXNpb24gOTUwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMjEgKzEyOCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgSlNDb25z
dGFudDogewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5vZGUudmFsdWVPZkpTQ29uc3Rh
bnQobV9jb2RlQmxvY2spOwotICAgICAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGlj
dEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5p
c0RvdWJsZSgpKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtl
UHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7Ci0gICAgICAgICAg
ICBlbHNlIGlmICh2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIEpTQ2VsbCogY2Vs
bCA9IHZhbHVlLmFzQ2VsbCgpOwotICAgICAgICAgICAgICAgIGlmIChpc0pTQXJyYXkoJm1fZ2xv
YmFsRGF0YSwgY2VsbCkpCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0QXJyYXksIFN0cm9uZ1ByZWRpY3Rpb24pKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJl
ZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwgU3Ryb25nUHJlZGljdGlvbikpOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKLSAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEJvb2xlYW4s
IFN0cm9uZ1ByZWRpY3Rpb24pKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ryb25n
UHJlZGljdGlvbikpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQ
cmVkaWN0aW9uKHByZWRpY3Rpb25Gcm9tVmFsdWUobm9kZS52YWx1ZU9mSlNDb25zdGFudChtX2Nv
ZGVCbG9jaykpLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0xOTgsOCArMTg0LDEyIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
bWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0VG9wLCBTdHJvbmdQcmVkaWN0aW9uKSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKGxlZnQgJiBQcmVkaWN0TnVtYmVyKSB8fCAhKHJp
Z2h0ICYgUHJlZGljdE51bWJlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gbGVmdCBvciBy
aWdodCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbnVtYmVyLgorICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQ
cmVkaWN0U3RyaW5nLCBTdHJvbmdQcmVkaWN0aW9uKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFN0cmluZyB8IFByZWRpY3RJbnQzMiB8IFBy
ZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMzksMTYgKzIyOSwxNiBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNhc2UgR2V0TWV0aG9kOgogICAgICAgICBjYXNl
IEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG5vZGUuY2hpbGQx
KCksIFByZWRpY3RDZWxsIHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IG1lcmdlVXNlKG5vZGUuY2hpbGQxKCksIFByZWRpY3RTb21lT2JqZWN0IHwgU3Ryb25n
UHJlZGljdGlvblRhZyk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUucHJlZGljdChtX3Vz
ZXNbbV9jb21waWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9u
KTsKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9u
KCkpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihub2RlLmdldFBy
ZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAg
CisKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDogewotICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5m
aXJzdENoaWxkKCldLCBQcmVkaWN0Q2VsbCB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS5m
aXJzdENoaWxkKCldLCBQcmVkaWN0U29tZU9iamVjdCB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOwog
ICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLnByZWRpY3QobV91c2VzW21fY29tcGlsZUluZGV4
XSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CiAgICAgICAgICAgICBp
ZiAoaXNTdHJvbmdQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKSkKICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpOwpAQCAt
MjU2LDcgKzI0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIENvbnZlcnRUaGlzOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rp
b24obWFrZVByZWRpY3Rpb24oUHJlZGljdENlbGwsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0U29t
ZU9iamVjdCwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApAQCAtMjc3LDkgKzI2NywxMCBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFB1dEJ5VmFsOgogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgIGNhc2Ug
UHV0QnlJZDoKLSAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgotICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBQcmVkaWN0Q2VsbCB8IFN0cm9uZ1ByZWRpY3Rp
b25UYWcpOworICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VVc2Uobm9kZS5jaGlsZDEoKSwgUHJlZGljdFNvbWVPYmplY3QgfCBTdHJvbmdQ
cmVkaWN0aW9uVGFnKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCBy
ZXR1cm4gYW55dGhpbmcuCkBAIC0zMDYsNyArMjk3LDggQEAgcHJpdmF0ZToKICAgICAgICAgfQog
CiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoImV4cGVjdCgl
cykgdXNlKCVzKSAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fcHJlZGljdGlvbnNbbV9jb21w
aWxlSW5kZXhdKSwgcHJlZGljdGlvblRvU3RyaW5nKG1fdXNlc1ttX2NvbXBpbGVJbmRleF0pLCBj
aGFuZ2VkID8gIkNIQU5HRUQiIDogIiIpOworICAgICAgICBwcmludGYoImV4cGVjdCglcykgIiwg
cHJlZGljdGlvblRvU3RyaW5nKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdKSk7CisgICAg
ICAgIHByaW50ZigidXNlKCVzKSAlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fdXNlc1ttX2Nv
bXBpbGVJbmRleF0pLCBjaGFuZ2VkID8gIkNIQU5HRUQiIDogIiIpOwogI2VuZGlmCiAgICAgICAg
IAogICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1
MSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NQcm9w
SGFzaFRhYmxlR2V0dGVyRnVuY3Rpb24oZXhlYyk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGlj
UHJvcEhhc2hUYWJsZTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBpc1N1YkNs
YXNzT2YoY29uc3QgQ2xhc3NJbmZvKiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChjb25zdCBDbGFzc0luZm8qIGNpID0gdGhpczsgY2k7IGNpID0gY2ktPnBhcmVudENs
YXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKGNpID09IG90aGVyKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogc3RhdGljUHJvcEhhc2hU
YWJsZTsKICAgICAgICAgdHlwZWRlZiBjb25zdCBIYXNoVGFibGUqICgqQ2xhc3NQcm9wSGFzaFRh
YmxlR2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5OSwxMSArNDk5
LDcgQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1VzaW5nSW5saW5lU3RvcgogCiBpbmxpbmUg
Ym9vbCBKU0NlbGw6OmluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyogaW5mbykgY29uc3QKIHsKLSAg
ICBmb3IgKGNvbnN0IENsYXNzSW5mbyogY2kgPSBjbGFzc0luZm8oKTsgY2k7IGNpID0gY2ktPnBh
cmVudENsYXNzKSB7Ci0gICAgICAgIGlmIChjaSA9PSBpbmZvKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2xhc3NJbmZvKCkt
PmlzU3ViQ2xhc3NPZihpbmZvKTsKIH0KIAogLy8gdGhpcyBtZXRob2QgaXMgaGVyZSB0byBiZSBh
ZnRlciB0aGUgaW5saW5lIGRlY2xhcmF0aW9uIG9mIEpTQ2VsbDo6aW5oZXJpdHMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JvdW5kc0NoZWNrZWRQb2lu
dGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIFdURl9Cb3VuZHNDaGVja2VkUG9pbnRlcl9oCisjZGVmaW5lIFdURl9Cb3VuZHNDaGVj
a2VkUG9pbnRlcl9oCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiVW51c2Vk
UGFyYW0uaCIKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFVzZWZ1bCBmb3Igd2hlbiB5b3UnZCBs
aWtlIHRvIGRvIHBvaW50ZXIgYXJpdGhtZXRpYyBvbiBhIGJ1ZmZlciwgYnV0CisvLyB5b3UnZCBh
bHNvIGxpa2UgdG8gZ2V0IHNvbWUgQVNTRVJUKCkncyB0aGF0IHByZXZlbnQgeW91IGZyb20gb3Zl
cmZsb3dpbmcuCisvLyBUaGlzIHNob3VsZCBiZSBwZXJmb3JtYW5jZS1uZXV0cmFsIGluIHJlbGVh
c2UgYnVpbGRzLCB3aGlsZSBwcm92aWRpbmcKKy8vIHlvdSB3aXRoIHN0cm9uZyBhc3NlcnRpb25z
IGluIGRlYnVnIGJ1aWxkcy4gTm90ZSB0aGF0IGFsbCBvZiB0aGUKKy8vIGFzc2VydGluZyBoYXBw
ZW5zIHdoZW4geW91IGFjdHVhbGx5IGFjY2VzcyB0aGUgcG9pbnRlci4gWW91IGFyZSBhbGxvd2Vk
CisvLyB0byBvdmVyZmxvdyBvciB1bmRlcmZsb3cgd2l0aCBhcml0aG1ldGljIHNvIGxvbmcgYXMg
bm8gYWNjZXNzZXMgYXJlCisvLyBwZXJmb3JtZWQuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citj
bGFzcyBCb3VuZHNDaGVja2VkUG9pbnRlciB7CitwdWJsaWM6CisgICAgQm91bmRzQ2hlY2tlZFBv
aW50ZXIoKQorICAgICAgICA6IG1fcG9pbnRlcigwKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICAgICAgLCBtX2JlZ2luKDApCisgICAgICAgICwgbV9lbmQoMCkKKyNlbmRpZgorICAgIHsKKyAg
ICB9CisKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlcihUKiBwb2ludGVyLCBzaXplX3QgbnVtRWxl
bWVudHMpCisgICAgICAgIDogbV9wb2ludGVyKHBvaW50ZXIpCisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgICAgICAsIG1fYmVnaW4ocG9pbnRlcikKKyAgICAgICAgLCBtX2VuZChwb2ludGVyICsg
bnVtRWxlbWVudHMpCisjZW5kaWYKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShudW1FbGVt
ZW50cyk7CisgICAgfQorICAgIAorICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyKFQqIHBvaW50ZXIs
IFQqIGVuZCkKKyAgICAgICAgOiBtX3BvaW50ZXIocG9pbnRlcikKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgICAgICwgbV9iZWdpbihwb2ludGVyKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyNl
bmRpZgorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgfQorCisgICAgQm91
bmRzQ2hlY2tlZFBvaW50ZXIoVCogcG9pbnRlciwgVCogYmVnaW4sIHNpemVfdCBudW1FbGVtZW50
cykKKyAgICAgICAgOiBtX3BvaW50ZXIocG9pbnRlcikKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgICAgICwgbV9iZWdpbihiZWdpbikKKyAgICAgICAgLCBtX2VuZChiZWdpbiArIG51bUVsZW1l
bnRzKQorI2VuZGlmCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oYmVnaW4pOworICAgICAg
ICBVTlVTRURfUEFSQU0obnVtRWxlbWVudHMpOworICAgIH0KKyAgICAKKyAgICBCb3VuZHNDaGVj
a2VkUG9pbnRlcihUKiBwb2ludGVyLCBUKiBiZWdpbiwgVCogZW5kKQorICAgICAgICA6IG1fcG9p
bnRlcihwb2ludGVyKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBtX2JlZ2luKGJl
Z2luKQorICAgICAgICAsIG1fZW5kKGVuZCkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKGJlZ2luKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGVuZCk7CisgICAgfQorICAgIAor
ICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyJiBvcGVyYXRvcj0oVCogdmFsdWUpCisgICAgeworICAg
ICAgICBtX3BvaW50ZXIgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAg
ICAKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlciYgb3BlcmF0b3IrPShwdHJkaWZmX3QgYW1vdW50
KQorICAgIHsKKyAgICAgICAgbV9wb2ludGVyICs9IGFtb3VudDsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKworICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyJiBvcGVyYXRvci09KHB0cmRp
ZmZfdCBhbW91bnQpCisgICAgeworICAgICAgICBtX3BvaW50ZXIgLT0gYW1vdW50OworICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyIG9w
ZXJhdG9yKyhwdHJkaWZmX3QgYW1vdW50KSBjb25zdAorICAgIHsKKyAgICAgICAgQm91bmRzQ2hl
Y2tlZFBvaW50ZXIgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIHJlc3VsdC5tX3BvaW50ZXIgKz0g
YW1vdW50OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJvdW5kc0NoZWNr
ZWRQb2ludGVyIG9wZXJhdG9yLShwdHJkaWZmX3QgYW1vdW50KSBjb25zdAorICAgIHsKKyAgICAg
ICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIHJlc3VsdC5t
X3BvaW50ZXIgLT0gYW1vdW50OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBCb3VuZHNDaGVja2VkUG9pbnRlciBvcGVyYXRvcisrKCkgLy8gcHJlZml4CisgICAgewor
ICAgICAgICBtX3BvaW50ZXIrKzsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAg
IEJvdW5kc0NoZWNrZWRQb2ludGVyIG9wZXJhdG9yLS0oKSAvLyBwcmVmaXgKKyAgICB7CisgICAg
ICAgIG1fcG9pbnRlci0tOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgQm91
bmRzQ2hlY2tlZFBvaW50ZXIgb3BlcmF0b3IrKyhpbnQpIC8vIHBvc3RmaXgKKyAgICB7CisgICAg
ICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyIHJlc3VsdCA9ICp0aGlzOworICAgICAgICBtX3BvaW50
ZXIrKzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBCb3VuZHNDaGVja2Vk
UG9pbnRlciBvcGVyYXRvci0tKGludCkgLy8gcG9zdGZpeAorICAgIHsKKyAgICAgICAgQm91bmRz
Q2hlY2tlZFBvaW50ZXIgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIG1fcG9pbnRlci0tOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChUKiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BvaW50ZXIgPCBvdGhlcjsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPD0oVCogb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9wb2ludGVyIDw9IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+
KFQqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRlciA+IG90aGVy
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+PShUKiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3BvaW50ZXIgPj0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KFQqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRlciA9
PSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oVCogb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9wb2ludGVyICE9IG90aGVyOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I8KEJvdW5kc0NoZWNrZWRQb2ludGVyIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcG9pbnRlciA8IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPD0oQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9wb2ludGVyIDw9IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPihCb3VuZHNDaGVja2VkUG9pbnRlciBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3BvaW50ZXIgPiBvdGhlci5tX3BvaW50ZXI7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj49KEJvdW5kc0NoZWNrZWRQb2ludGVyIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRlciA+PSBvdGhlci5tX3BvaW50ZXI7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvcj09KEJvdW5kc0NoZWNrZWRQb2ludGVyIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRlciA9PSBvdGhlci5tX3BvaW50ZXI7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvciE9KEJvdW5kc0NoZWNrZWRQb2ludGVyIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRlciAhPSBvdGhlci5tX3BvaW50ZXI7Cisg
ICAgfQorCisgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3BlcmF0b3IhKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAhbV9wb2ludGVyOworICAgIH0KKyAgICAKKyAgICBUKiBnZXQoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fcG9pbnRlcjsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmF0b3Iq
KCkKKyAgICB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAgIHJldHVybiAqbV9wb2ludGVy
OworICAgIH0KKworICAgIGNvbnN0IFQmIG9wZXJhdG9yKigpIGNvbnN0CisgICAgeworICAgICAg
ICB2YWxpZGF0ZSgpOworICAgICAgICByZXR1cm4gKm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBU
JiBvcGVyYXRvcltdKHB0cmRpZmZfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHZhbGlkYXRlKG1f
cG9pbnRlciArIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRlcltpbmRleF07CisgICAg
fQorCisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShwdHJkaWZmX3QgaW5kZXgpIGNvbnN0CisgICAg
eworICAgICAgICB2YWxpZGF0ZShtX3BvaW50ZXIgKyBpbmRleCk7CisgICAgICAgIHJldHVybiBt
X3BvaW50ZXJbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICAvLyBUaGUgb25seSB0aGluZyB0aGlz
IGhhcyBpbiBjb21tb24gd2l0aCBzdHJjYXQoKSBpcyB0aGF0IGl0CisgICAgLy8ga2VlcHMgYXBw
ZW5kaW5nIGZyb20gdGhlIGdpdmVuIHBvaW50ZXIgdW50aWwgcmVhY2hpbmcgMC4KKyAgICBCb3Vu
ZHNDaGVja2VkUG9pbnRlciYgc3RyY2F0KGNvbnN0IFQqIHNvdXJjZSkKKyAgICB7CisgICAgICAg
IHdoaWxlICgqc291cmNlKSB7CisgICAgICAgICAgICAqKCp0aGlzKSsrID0gKnNvdXJjZSsrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
dm9pZCB2YWxpZGF0ZShUKiBwb2ludGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChwb2ludGVyLCBwb2ludGVyID49IG1fYmVnaW4pOworICAgICAgICAKKyAgICAgICAgLy8g
VGhpcyBndWFyZCBpcyBkZXNpZ25lZCB0byBwcm90ZWN0IGFnYWluc3QgdGhlIG1pc2FsaWduZWQg
Y2FzZS4KKyAgICAgICAgLy8gQSBzaW1wbGUgcG9pbnRlciA8IG1fZW5kIHdvdWxkIG1pc3MgdGhl
IGNhc2UgaWYsIGZvciBleGFtcGxlLAorICAgICAgICAvLyBUID0gaW50MTZfdCBhbmQgcG9pbnRl
ciBpcyAxIGJ5dGUgbGVzcyB0aGFuIG1fZW5kLgorICAgICAgICBBU1NFUlRfVU5VU0VEKHBvaW50
ZXIsIHBvaW50ZXIgKyAxIDw9IG1fZW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0
ZSgpIGNvbnN0CisgICAgeworICAgICAgICB2YWxpZGF0ZShtX3BvaW50ZXIpOworICAgIH0KKyAg
ICAKKyAgICBUKiBtX3BvaW50ZXI7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIFQqIG1fYmVn
aW47CisgICAgVCogbV9lbmQ7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVyOworCisjZW5kaWYgLy8gV1RGX0JvdW5kc0No
ZWNrZWRQb2ludGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJl
dmlzaW9uIDk1MDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NjUsNyArOTY1LDcgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQo
RU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTikKLSNkZWZpbmUgRU5BQkxFX1RJRVJFRF9DT01QSUxB
VElPTiAwCisjZGVmaW5lIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04gMQogI2VuZGlmCiAKIC8q
IEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBKU1ZBTFVFNjQsIG9ubHkgdGVzdGVkIG9u
IFBMQVRGT1JNKE1BQykgKi8K
</data>
<flag name="commit-queue"
          id="103792"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107236</attachid>
            <date>2011-09-13 14:54:36 -0700</date>
            <delta_ts>2011-09-13 18:51:47 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>cleanerpredict_patch_2.diff</filename>
            <type>text/plain</type>
            <size>43471</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUwMjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODcgQEAK
KzIwMTEtMDktMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBQ
cmVkaWN0aW9uIHRyYWNraW5nIGlzIG5vdCBwcmVjaXNlIGVub3VnaAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5OTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgcmljaGVyIHNl
dCBvZiB0eXBlIHByZWRpY3Rpb25zLCBpbmNsdWRpbmcgSlNGaW5hbE9iamVjdCwgSlNTdHJpbmcs
CisgICAgICAgIG9iamVjdCB0aGF0IGlzIG5vdCBhIEpTRmluYWxPYmplY3Qgb3IgSlNBcnJheSAo
T2JqZWN0T3RoZXIpLCBzb21lIG9iamVjdAorICAgICAgICBidXQgd2UgZG9uJ3Qgb3IgY2FyZSBr
bm93IHdoYXQga2luZCAoU29tZU9iamVjdCksIGRlZmluaXRlbHkgYW4gb2JqZWN0LAorICAgICAg
ICBjZWxsIHRoYXQgaXMgbm90IGFuIG9iamVjdCBvciBKU1N0cmluZywgYW4gdmFsdWUgdGhhdCBp
cyBub25lIG9mIHRoZSBhYm92ZQorICAgICAgICAoc28gZWl0aGVyIFVuZGVmaW5lZCBvciBOdWxs
KS4gTWFkZSB0aGUgcHJvcGFnYXRvciBhbmQgdmFsdWUgcHJvZmlsZXIgd29yaworICAgICAgICB3
aXRoIHRoZSBuZXcgdHlwZXMuCisgICAgICAgIAorICAgICAgICBQZXJmb3JtYW5jZSBpcyBuZXV0
cmFsLCBiZWNhdXNlIHRoZSBERkcgSklUIGRvZXMgbm90IHRha2UgYWR2YW50YWdlIG9mIHRoaXMK
KyAgICAgICAgbmV3IGtub3dsZWRnZSB5ZXQuCisgICAgICAgIAorICAgICAgICBJbiB0aGUgcHJv
Y2VzcyBvZiB3cml0aW5nIHByZWRpY3Rpb25Ub1N0cmluZygpICh3aGljaCBpcyBub3cgY29uc2lk
ZXJhYmx5CisgICAgICAgIG1vcmUgY29tcGxleCkgSSBkZWNpZGVkIHRvIGZpbmFsbHkgYWRkIGEg
Qm91bmRzQ2hlY2tlZFBvaW50ZXIsIHdoaWNoCisgICAgICAgIHNob3VsZCBjb21lIGluIGhhbmR5
IGluIG90aGVyIHBsYWNlcywgbGlrZSBhdCBsZWFzdCB0aGUgT1NSIHNjcmF0Y2ggYnVmZmVyCisg
ICAgICAgIGFuZCB0aGUgQ29tcGFjdEpJVENvZGVNYXAuIEl0J3MgZ3JlYXQgZm9yIGNhc2VzIHdo
ZXJlIHlvdSB3YW50IHRvCisgICAgICAgIGRvIHBvaW50ZXIgYXJpdGhtZXRpYywgeW91IHdhbnQg
dG8gaGF2ZSBhc3NlcnRpb25zIGFib3V0IHRoZQorICAgICAgICBwb2ludGVyIG5vdCBnb2luZyBv
dXQgb2YgYm91bmRzLCBidXQgeW91IGRvbid0IHdhbnQgdG8gd3JpdGUgdGhvc2UKKyAgICAgICAg
YXNzZXJ0aW9ucyB5b3Vyc2VsZi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyByZXF1aXJl
ZCByZWZhY3RvcmluZyBpbmhlcml0cygpLCBzaW5jZSB0aGUgVmFsdWVQcm9maWxlciBtYXkKKyAg
ICAgICAgd2FudCB0byBkbyB0aGUgZXF1aXZhbGVudCBvZiBpbmhlcml0cygpIGJ1dCBnaXZlbiB0
d28gQ2xhc3NJbmZvJ3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6cHJlZGljdGlvblRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bWFr
ZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9uRnJvbVZhbHVlKToKKyAgICAg
ICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAgICAgIChKU0M6OmlzQ2VsbFByZWRp
Y3Rpb24pOgorICAgICAgICAoSlNDOjppc09iamVjdFByZWRpY3Rpb24pOgorICAgICAgICAoSlND
Ojppc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OmlzU3RyaW5nUHJlZGlj
dGlvbik6CisgICAgICAgIChKU0M6Om1lcmdlUHJlZGljdGlvbnMpOgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9m
T2JqZWN0cyk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZGaW5hbE9iamVj
dHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mU3RyaW5ncyk6CisgICAg
ICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6cHJvYmFiaWxpdHlPZk9iamVjdCk6CisgICAgICAgIChK
U0M6OlZhbHVlUHJvZmlsZTo6cHJvYmFiaWxpdHlPZkZpbmFsT2JqZWN0KToKKyAgICAgICAgKEpT
Qzo6VmFsdWVQcm9maWxlOjpwcm9iYWJpbGl0eU9mU3RyaW5nKToKKyAgICAgICAgKEpTQzo6VmFs
dWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpTdGF0aXN0aWNz
OjpTdGF0aXN0aWNzKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpjb21wdXRlU3RhdGlz
dGljcyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQcmVkaWN0KToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6cHJlZGljdCk6CisgICAgICAgICog
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBy
b3BhZ2F0ZU5vZGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgIChK
U0M6OkNsYXNzSW5mbzo6aXNTdWJDbGFzc09mKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
Lmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5oZXJpdHMpOgorICAgICAgICAqIHd0Zi9Cb3Vu
ZHNDaGVja2VkUG9pbnRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBv
aW50ZXI6OkJvdW5kc0NoZWNrZWRQb2ludGVyKToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tl
ZFBvaW50ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVy
OjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJh
dG9yLT0pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6b3BlcmF0b3IrKToK
KyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yLSk6CisgICAgICAg
IChXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVyOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6
Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yLS0pOgorICAgICAgICAoV1RGOjpCb3VuZHND
aGVja2VkUG9pbnRlcjo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBv
aW50ZXI6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6
b3BlcmF0b3I+KToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9y
Pj0pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVyOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yISk6CisgICAgICAgIChXVEY6OkJv
dW5kc0NoZWNrZWRQb2ludGVyOjpnZXQpOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9p
bnRlcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9w
ZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6c3RyY2F0KToK
KyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6OnZhbGlkYXRlKToKKwogMjAxMS0w
OS0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEphdmFTY3Jp
cHRDb3JlIGRvZXMgbm90IGhhdmUgYmFzZWxpbmUtPnNwZWN1bGF0aXZlIE9TUgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk1MDIyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAKIAkJMEZEODJFNTUxNDFEQUVFRTAwMTc5Qzk0IC8q
IFByZWRpY3Rpb25UcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MkU1MDE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGlvblRyYWNrZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ4
MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmNwcCAqLzsgfTsKIAkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERG
R09TUkVudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkU4NTE0MUYzRkUzMDAx
NzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTgyMTQxRjNGQzkwMDE3OUM5NCAvKiBCb3VuZHND
aGVja2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTg0MTQx
RjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLzsgfTsKIAkJMTQwMDA2NzcxMkE2
Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUw
MDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElW
YWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODA3LDYgKzgwOSw4IEBACiAJCTBGRDgyRTUwMTQx
REFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcmVkaWN0aW9uVHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnkuY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkVudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJF
NTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR09TUkVudHJ5Lmg7IHBhdGggPSBkZmcvREZHT1NSRW50cnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEODJFODIxNDFGM0ZDOTAwMTc5Qzk0IC8qIEJv
dW5kc0NoZWNrZWRQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJv
dW5kc0NoZWNrZWRQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxv
Y2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE3ODIsNiArMTc4Niw3IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRTgyMTQx
RjNGQzkwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5oICovLAogCQkJCTBGOTYzQjJF
MTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8sCiAJCQkJMEY5NjNC
MkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAogCQkJCTBGOTYzQjJB
MTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggKi8sCkBAIC0yMzA4LDYgKzIzMTMs
NyBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3
OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkwRkQ4MkU0RjE0MURBRUExMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5oICovLAogCQkJCTBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAv
KiBQcmVkaWN0aW9uVHJhY2tlci5oICovLAogCQkJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAv
KiBWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTI0MDksNiArMjQxNSw3IEBACiAJCQkJQkMyNTdERTgw
RTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0Iy
QzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkQ4MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JF
bnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTUxNDFEQUVFRTAwMTc5Qzk0IC8qIFBy
ZWRpY3Rpb25UcmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NDE0MURBRUVFMDAx
NzlDOTQgLyogUHJlZGljdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDgzLDYgKzMwOTAs
NyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ByZWRpY3RlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKworI2luY2x1ZGUg
PHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmbmRl
ZiBOREVCVUcKK2NvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0ZWRUeXBlIHZh
bHVlKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgc2l6ZSA9IDk2OworICAgIHN0YXRpYyBjaGFy
IGRlc2NyaXB0aW9uW3NpemVdOworICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyPGNoYXI+IHB0cihk
ZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgCisgICAgaWYgKCEodmFsdWUgJiBTdHJvbmdQcmVkaWN0
aW9uVGFnKSkKKyAgICAgICAgcHRyLnN0cmNhdCgiV2VhayIpOworICAgIAorICAgIGlmICh2YWx1
ZSAmIFByZWRpY3RTb21lT2JqZWN0KSB7CisgICAgICAgIEFTU0VSVCghKHZhbHVlICYgKFByZWRp
Y3RPYmplY3QgJiB+UHJlZGljdFNvbWVPYmplY3QpKSk7CisgICAgICAgIHB0ci5zdHJjYXQoIk9i
amVjdCIpOworICAgIH0KKworICAgIGlmICh2YWx1ZSAmIFByZWRpY3RDZWxsT3RoZXIpCisgICAg
ICAgIHB0ci5zdHJjYXQoIk90aGVyY2VsbCIpOworICAgIAorICAgIGlmICh2YWx1ZSAmIFByZWRp
Y3RPYmplY3RPdGhlcikKKyAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJvYmoiKTsKKyAgICAKKyAg
ICBpZiAodmFsdWUgJiBQcmVkaWN0RmluYWxPYmplY3QpCisgICAgICAgIHB0ci5zdHJjYXQoIkZp
bmFsIik7CisKKyAgICBpZiAodmFsdWUgJiBQcmVkaWN0QXJyYXkpCisgICAgICAgIHB0ci5zdHJj
YXQoIkFycmF5Iik7CisgICAgCisgICAgaWYgKHZhbHVlICYgUHJlZGljdFN0cmluZykKKyAgICAg
ICAgcHRyLnN0cmNhdCgiU3RyIik7CisgICAgCisgICAgaWYgKHZhbHVlICYgUHJlZGljdEludDMy
KQorICAgICAgICBwdHIuc3RyY2F0KCJJbnQiKTsKKyAgICAKKyAgICBpZiAodmFsdWUgJiBQcmVk
aWN0RG91YmxlKQorICAgICAgICBwdHIuc3RyY2F0KCJEb3VibGUiKTsKKyAgICAKKyAgICBpZiAo
dmFsdWUgJiBQcmVkaWN0Qm9vbGVhbikKKyAgICAgICAgcHRyLnN0cmNhdCgiQm9vbCIpOworICAg
IAorICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPdGhlcikKKyAgICAgICAgcHRyLnN0cmNhdCgiT3Ro
ZXIiKTsKKyAgICAKKyAgICAqcHRyKysgPSAwOworICAgIAorICAgIHJldHVybiBkZXNjcmlwdGlv
bjsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorUHJlZGljdGVkVHlw
ZSBtYWtlUHJlZGljdGlvbihjb25zdCBWYWx1ZVByb2ZpbGUmIHByb2ZpbGUpCit7CisgICAgVmFs
dWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3M7CisgICAgcHJvZmlsZS5jb21wdXRlU3Rh
dGlzdGljcyhzdGF0aXN0aWNzKTsKKyAgICAKKyAgICBpZiAoIXN0YXRpc3RpY3Muc2FtcGxlcykK
KyAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmlu
dDMycyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0
aW9uVGFnIHwgUHJlZGljdEludDMyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMg
PT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3REb3VibGU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzICsgc3Rh
dGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0
cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0TnVtYmVyOworICAgIAorICAgIGlmIChzdGF0aXN0
aWNzLmFycmF5cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQ
cmVkaWN0aW9uVGFnIHwgUHJlZGljdEFycmF5OworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmZp
bmFsT2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQ
cmVkaWN0aW9uVGFnIHwgUHJlZGljdEZpbmFsT2JqZWN0OworICAgIAorICAgIGlmIChzdGF0aXN0
aWNzLnN0cmluZ3MgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25n
UHJlZGljdGlvblRhZyB8IFByZWRpY3RTdHJpbmc7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3Mu
b2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVk
aWN0aW9uVGFnIHwgUHJlZGljdE9iamVjdE90aGVyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNz
LmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRp
Y3Rpb25UYWcgfCBQcmVkaWN0Q2VsbE90aGVyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmJv
b2xlYW5zID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRp
Y3Rpb25UYWcgfCBQcmVkaWN0Qm9vbGVhbjsKKyAgICAKKyAgICByZXR1cm4gU3Ryb25nUHJlZGlj
dGlvblRhZyB8IFByZWRpY3RPdGhlcjsKK30KKyNlbmRpZgorCitQcmVkaWN0ZWRUeXBlIHByZWRp
Y3Rpb25Gcm9tVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNJbnQzMigp
KQorICAgICAgICByZXR1cm4gUHJlZGljdEludDMyOworICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgp
KQorICAgICAgICByZXR1cm4gUHJlZGljdERvdWJsZTsKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkp
IHsKKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB2YWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCktPmNsYXNzSW5mbygpOworICAgICAgICAKKyAgICAgICAgaWYgKGNsYXNzSW5m
byA9PSAmSlNGaW5hbE9iamVjdDo6c19pbmZvKQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3RG
aW5hbE9iamVjdDsKKyAgICAgICAgCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gJkpTQXJyYXk6
OnNfaW5mbykKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0QXJyYXk7CisgICAgICAgIAorICAg
ICAgICBpZiAoY2xhc3NJbmZvID09ICZKU1N0cmluZzo6c19pbmZvKQorICAgICAgICAgICAgcmV0
dXJuIFByZWRpY3RTdHJpbmc7CisgICAgICAgIAorICAgICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1
YkNsYXNzT2YoJkpTT2JqZWN0OjpzX2luZm8pKQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3RP
YmplY3RPdGhlcjsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBQcmVkaWN0Q2VsbE90aGVyOwor
ICAgIH0KKyAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgIHJldHVybiBQcmVkaWN0
Qm9vbGVhbjsKKyAgICByZXR1cm4gUHJlZGljdE90aGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVk
VHlwZS5oCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QcmVkaWN0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDIzICszMyw0NSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotdHlwZWRlZiB1aW50OF90IFByZWRpY3RlZFR5cGU7Ci1zdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Tm9uZSAgID0gMDsKLXN0YXRpYyBjb25zdCBQcmVk
aWN0ZWRUeXBlIFByZWRpY3RDZWxsICAgPSAweDAxOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5
cGUgUHJlZGljdEFycmF5ICA9IDB4MDM7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0SW50MzIgID0gMHgwNDsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3REb3Vi
bGUgPSAweDA4Owotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE51bWJlciA9IDB4
MGM7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Qm9vbGVhbiA9IDB4MTA7Ci1z
dGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9wICAgID0gMHgxZjsKLXN0YXRpYyBj
b25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rpb25UYWcgPSAweDgwOwotc3RhdGljIGNv
bnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAgPSAweDgwOwordHlwZWRlZiB1
aW50MTZfdCBQcmVkaWN0ZWRUeXBlOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGlj
dE5vbmUgICAgICAgICAgPSAweDAwMDA7IC8vIFdlIGRvbid0IGtub3cgYW55dGhpbmcgeWV0Lgor
c3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEZpbmFsT2JqZWN0ICAgPSAweDAwMDE7
IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTRmluYWxPYmplY3QuCitzdGF0aWMgY29uc3QgUHJlZGlj
dGVkVHlwZSBQcmVkaWN0QXJyYXkgICAgICAgICA9IDB4MDAwMjsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgSlNBcnJheS4KK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RPYmplY3RPdGhl
ciAgID0gMHgwMDEwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5h
bE9iamVjdCBvciBKU0FycmF5Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdFNv
bWVPYmplY3QgICAgPSAweDAwMjA7IC8vIEl0J3Mgc29tZSB1bmtub3duIHN1YmNsYXNzIG9mIEpT
T2JqZWN0Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE9iamVjdCAgICAgICAg
PSAweDAwM2Y7IC8vIEl0J3MgZGVmaW5pdGVseSBhIHN1YmNsYXNzIG9mIEpTT2JqZWN0Lgorc3Rh
dGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdFN0cmluZyAgICAgICAgPSAweDAwNDA7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUg
UHJlZGljdENlbGxPdGhlciAgICAgPSAweDAwODA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2Vs
bCBidXQgbm90IGEgc3ViY2xhc3Mgb2YgSlNPYmplY3QgYW5kIGRlZmluaXRlbHkgbm90IGEgSlNT
dHJpbmcuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Q2VsbCAgICAgICAgICA9
IDB4MDBmZjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsLgorc3RhdGljIGNvbnN0IFByZWRp
Y3RlZFR5cGUgUHJlZGljdEludDMyICAgICAgICAgPSAweDAxMDA7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBJbnQzMi4KK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3REb3VibGUgICAg
ICAgID0gMHgwMjAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEb3VibGUuCitzdGF0aWMgY29uc3Qg
UHJlZGljdGVkVHlwZSBQcmVkaWN0TnVtYmVyICAgICAgICA9IDB4MDMwMDsgLy8gSXQncyBlaXRo
ZXIgYW4gSW50MzIgb3IgYSBEb3VibGUuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0Qm9vbGVhbiAgICAgICA9IDB4MDQwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgQm9vbGVhbi4K
K3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RPdGhlciAgICAgICAgID0gMHg0MDAw
OyAvLyBJdCdzIGRlZmluaXRlbHkgbm9uZSBvZiB0aGUgYWJvdmUuCitzdGF0aWMgY29uc3QgUHJl
ZGljdGVkVHlwZSBQcmVkaWN0VG9wICAgICAgICAgICA9IDB4N2ZmZjsgLy8gSXQgY2FuIGJlIGFu
eSBvZiB0aGUgYWJvdmUuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBTdHJvbmdQcmVkaWN0
aW9uVGFnICA9IDB4ODAwMDsgLy8gSXQncyBhIHN0cm9uZyBwcmVkaWN0aW9uIChhbGwgc3Ryb25n
IHByZWRpY3Rpb25zIHRydW1wIGFsbCB3ZWFrIG9uZXMpLgorc3RhdGljIGNvbnN0IFByZWRpY3Rl
ZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAgPSAweDgwMDA7CiAKIGVudW0gUHJlZGljdGlvblNv
dXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBTdHJvbmdQcmVkaWN0aW9uIH07CiAKIGlubGluZSBib29s
IGlzQ2VsbFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKHZh
bHVlICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxsICYmICEodmFsdWUgJiB+KFByZWRpY3RB
cnJheSB8IFByZWRpY3Rpb25UYWdNYXNrKSk7CisgICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGlj
dENlbGwpICYmICEodmFsdWUgJiB+KFByZWRpY3RDZWxsIHwgUHJlZGljdGlvblRhZ01hc2spKTsK
K30KKworaW5saW5lIGJvb2wgaXNPYmplY3RQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUp
Cit7CisgICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE9iamVjdCkgJiYgISh2YWx1ZSAmIH4o
UHJlZGljdE9iamVjdCB8IFByZWRpY3Rpb25UYWdNYXNrKSk7Cit9CisKK2lubGluZSBib29sIGlz
RmluYWxPYmplY3RQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJu
ICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGljdEZpbmFsT2JqZWN0OworfQor
CitpbmxpbmUgYm9vbCBpc1N0cmluZ1ByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0U3RyaW5n
OwogfQogCiBpbmxpbmUgYm9vbCBpc0FycmF5UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVl
KQpAQCAtODQsNTMgKzEwNiwyMyBAQCBpbmxpbmUgYm9vbCBpc1N0cm9uZ1ByZWRpY3Rpb24oUHJl
ZGljdGVkCiB9CiAKICNpZm5kZWYgTkRFQlVHCi1pbmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlv
blRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpCi17Ci0gICAgaWYgKGlzU3Ryb25nUHJlZGlj
dGlvbih2YWx1ZSkpIHsKLSAgICAgICAgc3dpdGNoICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFz
aykgewotICAgICAgICBjYXNlIFByZWRpY3ROb25lOgotICAgICAgICAgICAgcmV0dXJuICJwLXN0
cm9uZy1ib3R0b20iOwotICAgICAgICBjYXNlIFByZWRpY3RDZWxsOgotICAgICAgICAgICAgcmV0
dXJuICJwLXN0cm9uZy1jZWxsIjsKLSAgICAgICAgY2FzZSBQcmVkaWN0QXJyYXk6Ci0gICAgICAg
ICAgICByZXR1cm4gInAtc3Ryb25nLWFycmF5IjsKLSAgICAgICAgY2FzZSBQcmVkaWN0SW50MzI6
Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWludDMyIjsKLSAgICAgICAgY2FzZSBQcmVk
aWN0RG91YmxlOgotICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1kb3VibGUiOwotICAgICAg
ICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLW51bWJl
ciI7Ci0gICAgICAgIGNhc2UgUHJlZGljdEJvb2xlYW46Ci0gICAgICAgICAgICByZXR1cm4gInAt
c3Ryb25nLWJvb2xlYW4iOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuICJw
LXN0cm9uZy10b3AiOwotICAgICAgICB9Ci0gICAgfQotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAg
ICBjYXNlIFByZWRpY3ROb25lOgotICAgICAgICByZXR1cm4gInAtd2Vhay1ib3R0b20iOwotICAg
IGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWNlbGwiOwotICAgIGNh
c2UgUHJlZGljdEFycmF5OgotICAgICAgICByZXR1cm4gInAtd2Vhay1hcnJheSI7Ci0gICAgY2Fz
ZSBQcmVkaWN0SW50MzI6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWludDMyIjsKLSAgICBjYXNl
IFByZWRpY3REb3VibGU6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWRvdWJsZSI7Ci0gICAgY2Fz
ZSBQcmVkaWN0TnVtYmVyOgotICAgICAgICByZXR1cm4gInAtd2Vhay1udW1iZXIiOwotICAgIGNh
c2UgUHJlZGljdEJvb2xlYW46Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWJvb2xlYW4iOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLXRvcCI7Ci0gICAgfQotfQorY29uc3Qg
Y2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpOwogI2VuZGlmCiAK
IGlubGluZSBQcmVkaWN0ZWRUeXBlIG1lcmdlUHJlZGljdGlvbnMoUHJlZGljdGVkVHlwZSBsZWZ0
LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0KQogewotICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVm
dCkgPT0gaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0
aW9uKGxlZnQpID09IGlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkpIHsKKyAgICAgICAgaWYgKGxl
ZnQgJiBQcmVkaWN0U29tZU9iamVjdCkgeworICAgICAgICAgICAgQVNTRVJUKCEobGVmdCAmIChQ
cmVkaWN0T2JqZWN0ICYgflByZWRpY3RTb21lT2JqZWN0KSkpOworICAgICAgICAgICAgaWYgKHJp
Z2h0ICYgUHJlZGljdE9iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGxlZnQgJiB+UHJl
ZGljdFNvbWVPYmplY3QpIHwgcmlnaHQ7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiBQcmVk
aWN0U29tZU9iamVjdCkgeworICAgICAgICAgICAgQVNTRVJUKCEocmlnaHQgJiAoUHJlZGljdE9i
amVjdCAmIH5QcmVkaWN0U29tZU9iamVjdCkpKTsKKyAgICAgICAgICAgIGlmIChsZWZ0ICYgUHJl
ZGljdE9iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKHJpZ2h0ICYgflByZWRpY3RTb21l
T2JqZWN0KSB8IGxlZnQ7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGxlZnQgfCByaWdodDsK
KyAgICB9CiAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSkgewogICAgICAgICBBU1NF
UlQoIWlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkpOwogICAgICAgICByZXR1cm4gbGVmdDsKQEAg
LTE1OSwzNiArMTUxLDExIEBAIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9uKFBy
ZWQKIH0KIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLWlubGluZSBQcmVkaWN0ZWRUeXBl
IG1ha2VQcmVkaWN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVmFsdWVQcm9m
aWxlJiBwcm9maWxlKQotewotICAgIFZhbHVlUHJvZmlsZTo6U3RhdGlzdGljcyBzdGF0aXN0aWNz
OwotICAgIHByb2ZpbGUuY29tcHV0ZVN0YXRpc3RpY3MoZ2xvYmFsRGF0YSwgc3RhdGlzdGljcyk7
Ci0gICAgCi0gICAgaWYgKCFzdGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBQcmVk
aWN0Tm9uZTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5pbnQzMnMgPT0gc3RhdGlzdGljcy5z
YW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RJbnQz
MjsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxl
cykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0RG91YmxlOwot
ICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmludDMycyArIHN0YXRpc3RpY3MuZG91YmxlcyA9PSBz
dGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwg
UHJlZGljdE51bWJlcjsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5hcnJheXMgPT0gc3RhdGlz
dGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRp
Y3RBcnJheTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5jZWxscyA9PSBzdGF0aXN0aWNzLnNh
bXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdENlbGw7
Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuYm9vbGVhbnMgPT0gc3RhdGlzdGljcy5zYW1wbGVz
KQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RCb29sZWFuOwot
ICAgIAotICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdFRvcDsKLX0KK1By
ZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oY29uc3QgVmFsdWVQcm9maWxlJik7CiAjZW5kaWYK
IAorUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVZhbHVlKEpTVmFsdWUpOworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFByZWRpY3RlZFR5cGVfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gOTUwMjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOCw2ICsxMDgsMzcgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mT2Jq
ZWN0cygpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAg
ICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2kgPSBjbGFzc0luZm8oaSk7CisgICAgICAgICAgICBp
ZiAoISFjaSAmJiBjaS0+aXNTdWJDbGFzc09mKCZKU09iamVjdDo6c19pbmZvKSkKKyAgICAgICAg
ICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkZpbmFsT2JqZWN0cygpIGNvbnN0CisgICAg
eworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChjbGFzc0lu
Zm8oaSkgPT0gJkpTRmluYWxPYmplY3Q6OnNfaW5mbykKKyAgICAgICAgICAgICAgICByZXN1bHQr
KzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBudW1iZXJPZlN0cmluZ3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
cmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mQnVj
a2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoY2xhc3NJbmZvKGkpID09ICZKU1N0cmluZzo6
c19pbmZvKQorICAgICAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIHVuc2lnbmVkIG51bWJlck9mQXJyYXlzKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IDA7CkBAIC0xNDgsMTEgKzE3
OSwyNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVQcm9i
YWJpbGl0eShudW1iZXJPZkNlbGxzKCksIG51bWJlck9mU2FtcGxlcygpKTsKICAgICB9CiAgICAg
CisgICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZk9iamVjdCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gY29tcHV0ZVByb2JhYmlsaXR5KG51bWJlck9mT2JqZWN0cygpLCBudW1iZXJPZlNh
bXBsZXMoKSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHByb2JhYmlsaXR5T2ZGaW5hbE9i
amVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZVByb2JhYmlsaXR5KG51
bWJlck9mRmluYWxPYmplY3RzKCksIG51bWJlck9mU2FtcGxlcygpKTsKKyAgICB9CisgICAgCiAg
ICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZkFycmF5KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZBcnJheXMoKSwgbnVtYmVyT2ZTYW1wbGVz
KCkpOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBwcm9iYWJpbGl0eU9mU3RyaW5nKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZTdHJp
bmdzKCksIG51bWJlck9mU2FtcGxlcygpKTsKKyAgICB9CisgICAgCiAgICAgdW5zaWduZWQgcHJv
YmFiaWxpdHlPZkJvb2xlYW4oKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVQ
cm9iYWJpbGl0eShudW1iZXJPZkJvb2xlYW5zKCksIG51bWJlck9mU2FtcGxlcygpKTsKQEAgLTE2
MiwxMiArMjA4LDE1IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUgewogICAgIHZvaWQgZHVtcChGSUxF
KiBvdXQpCiAgICAgewogICAgICAgICBmcHJpbnRmKG91dCwKLSAgICAgICAgICAgICAgICAic2Ft
cGxlcyA9ICV1LCBpbnQzMiA9ICV1ICgldSksIGRvdWJsZSA9ICV1ICgldSksIGNlbGwgPSAldSAo
JXUpLCBhcnJheSA9ICV1ICgldSksIGJvb2xlYW4gPSAldSAoJXUpIiwKKyAgICAgICAgICAgICAg
ICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1ICgldSksIGRvdWJsZSA9ICV1ICgldSksIGNlbGwg
PSAldSAoJXUpLCBvYmplY3QgPSAldSAoJXUpLCBmaW5hbCBvYmplY3QgPSAldSAoJXUpLCBhcnJh
eSA9ICV1ICgldSksIHN0cmluZyA9ICV1ICgldSksIGJvb2xlYW4gPSAldSAoJXUpIiwKICAgICAg
ICAgICAgICAgICBudW1iZXJPZlNhbXBsZXMoKSwKICAgICAgICAgICAgICAgICBwcm9iYWJpbGl0
eU9mSW50MzIoKSwgbnVtYmVyT2ZJbnQzMnMoKSwKICAgICAgICAgICAgICAgICBwcm9iYWJpbGl0
eU9mRG91YmxlKCksIG51bWJlck9mRG91YmxlcygpLAogICAgICAgICAgICAgICAgIHByb2JhYmls
aXR5T2ZDZWxsKCksIG51bWJlck9mQ2VsbHMoKSwKKyAgICAgICAgICAgICAgICBwcm9iYWJpbGl0
eU9mT2JqZWN0KCksIG51bWJlck9mT2JqZWN0cygpLAorICAgICAgICAgICAgICAgIHByb2JhYmls
aXR5T2ZGaW5hbE9iamVjdCgpLCBudW1iZXJPZkZpbmFsT2JqZWN0cygpLAogICAgICAgICAgICAg
ICAgIHByb2JhYmlsaXR5T2ZBcnJheSgpLCBudW1iZXJPZkFycmF5cygpLAorICAgICAgICAgICAg
ICAgIHByb2JhYmlsaXR5T2ZTdHJpbmcoKSwgbnVtYmVyT2ZTdHJpbmdzKCksCiAgICAgICAgICAg
ICAgICAgcHJvYmFiaWxpdHlPZkJvb2xlYW4oKSwgbnVtYmVyT2ZCb29sZWFucygpKTsKICAgICAg
ICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZkJ1Y2tldHM7ICsraSkgewpAQCAtMTkzLDU0ICsyNDIsNzIgQEAgc3RydWN0IFZhbHVl
UHJvZmlsZSB7CiAgICAgICAgIHVuc2lnbmVkIGludDMyczsKICAgICAgICAgdW5zaWduZWQgZG91
YmxlczsKICAgICAgICAgdW5zaWduZWQgY2VsbHM7CisgICAgICAgIHVuc2lnbmVkIG9iamVjdHM7
CisgICAgICAgIHVuc2lnbmVkIGZpbmFsT2JqZWN0czsKICAgICAgICAgdW5zaWduZWQgYXJyYXlz
OworICAgICAgICB1bnNpZ25lZCBzdHJpbmdzOwogICAgICAgICB1bnNpZ25lZCBib29sZWFuczsK
KyAgICAgICAgCisgICAgICAgIFN0YXRpc3RpY3MoKQorICAgICAgICB7CisgICAgICAgICAgICBi
emVybyh0aGlzLCBzaXplb2YoU3RhdGlzdGljcykpOworICAgICAgICB9CiAgICAgfTsKKyAgICAK
KyAgICAvLyBNZXRob2QgZm9yIGluY3JlbWVudGluZyBhbGwgcmVsZXZhbnQgc3RhdGlzdGljcyBm
b3IgYSBDbGFzc0luZm8sIGV4Y2VwdCBmb3IKKyAgICAvLyBpbmNyZW1lbnRpbmcgdGhlIG51bWJl
ciBvZiBzYW1wbGVzLCB3aGljaCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorICAgIC8v
IGRvaW5nLgorICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVTdGF0aXN0aWNzKGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvLCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKQorICAgIHsKKyAgICAgICAgc3Rh
dGlzdGljcy5jZWxscysrOworICAgICAgICAKKyAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNG
aW5hbE9iamVjdDo6c19pbmZvKSB7CisgICAgICAgICAgICBzdGF0aXN0aWNzLmZpbmFsT2JqZWN0
cysrOworICAgICAgICAgICAgc3RhdGlzdGljcy5vYmplY3RzKys7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjbGFzc0luZm8gPT0gJkpTQXJy
YXk6OnNfaW5mbykgeworICAgICAgICAgICAgc3RhdGlzdGljcy5hcnJheXMrKzsKKyAgICAgICAg
ICAgIHN0YXRpc3RpY3Mub2JqZWN0cysrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoY2xhc3NJbmZvID09ICZKU1N0cmluZzo6c19pbmZvKSB7
CisgICAgICAgICAgICBzdGF0aXN0aWNzLnN0cmluZ3MrKzsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09m
KCZKU09iamVjdDo6c19pbmZvKSkKKyAgICAgICAgICAgIHN0YXRpc3RpY3Mub2JqZWN0cysrOwor
ICAgIH0KIAogICAgIC8vIE9wdGltaXplZCBtZXRob2QgZm9yIGdldHRpbmcgYWxsIGNvdW50cyBh
dCBvbmNlLgotICAgIHZvaWQgY29tcHV0ZVN0YXRpc3RpY3MoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25zdAorICAgIHZvaWQgY29tcHV0ZVN0YXRp
c3RpY3MoU3RhdGlzdGljcyYgc3RhdGlzdGljcykgY29uc3QKICAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIHNhbXBsZXMgID0gMDsKLSAgICAgICAgdW5zaWduZWQgaW50MzJzICAgPSAwOwotICAgICAg
ICB1bnNpZ25lZCBkb3VibGVzICA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGNlbGxzICAgID0gMDsK
LSAgICAgICAgdW5zaWduZWQgYXJyYXlzICAgPSAwOwotICAgICAgICB1bnNpZ25lZCBib29sZWFu
cyA9IDA7Ci0gICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVy
T2ZCdWNrZXRzOyArK2kpIHsKICAgICAgICAgICAgIGlmICghYnVja2V0c1tpXSkgewogICAgICAg
ICAgICAgICAgIFdlYWtCdWNrZXQgd2Vha0J1Y2tldCA9IHdlYWtCdWNrZXRzW2ldOwogICAgICAg
ICAgICAgICAgIGlmICghIXdlYWtCdWNrZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgc2FtcGxl
cysrOwotICAgICAgICAgICAgICAgICAgICBjZWxscysrOwotICAgICAgICAgICAgICAgICAgICBp
ZiAod2Vha0J1Y2tldC5nZXRDbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYXJyYXlzKys7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpc3Rp
Y3Muc2FtcGxlcysrOworICAgICAgICAgICAgICAgICAgICBjb21wdXRlU3RhdGlzdGljcyh3ZWFr
QnVja2V0LmdldENsYXNzSW5mbygpLCBzdGF0aXN0aWNzKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNhbXBsZXMrKzsKKyAgICAgICAgICAgIHN0YXRp
c3RpY3Muc2FtcGxlcysrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pOwogICAgICAgICAgICAgaWYgKHZhbHVlLmlz
SW50MzIoKSkKLSAgICAgICAgICAgICAgICBpbnQzMnMrKzsKKyAgICAgICAgICAgICAgICBzdGF0
aXN0aWNzLmludDMycysrOwogICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUoKSkK
LSAgICAgICAgICAgICAgICBkb3VibGVzKys7Ci0gICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5p
c0NlbGwoKSkgewotICAgICAgICAgICAgICAgIGNlbGxzKys7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzSlNBcnJheSgmZ2xvYmFsRGF0YSwgdmFsdWUuYXNDZWxsKCkpKQotICAgICAgICAgICAgICAg
ICAgICBhcnJheXMrKzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkp
Ci0gICAgICAgICAgICAgICAgYm9vbGVhbnMrKzsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNz
LmRvdWJsZXMrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICAgICAgICAgIGNvbXB1dGVTdGF0aXN0aWNzKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
Y2xhc3NJbmZvKCksIHN0YXRpc3RpY3MpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNC
b29sZWFuKCkpCisgICAgICAgICAgICAgICAgc3RhdGlzdGljcy5ib29sZWFucysrOwogICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aXN0aWNzLnNhbXBsZXMgID0gc2FtcGxlczsKLSAg
ICAgICAgc3RhdGlzdGljcy5pbnQzMnMgICA9IGludDMyczsKLSAgICAgICAgc3RhdGlzdGljcy5k
b3VibGVzICA9IGRvdWJsZXM7Ci0gICAgICAgIHN0YXRpc3RpY3MuY2VsbHMgICAgPSBjZWxsczsK
LSAgICAgICAgc3RhdGlzdGljcy5hcnJheXMgICA9IGFycmF5czsKLSAgICAgICAgc3RhdGlzdGlj
cy5ib29sZWFucyA9IGJvb2xlYW5zOwogICAgIH0KICAgICAKICAgICBpbnQgYnl0ZWNvZGVPZmZz
ZXQ7IC8vIC0xIGZvciBwcm9sb2d1ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk1MDIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4NCw3ICs0ODQsNyBAQCBwcml2YXRlOgogICAgICAgICBwcm9maWxlLT5kdW1wKHN0ZG91dCk7
CiAgICAgICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgotICAgICAgICBtX2dyYXBoW25vZGVJbmRl
eF0ucHJlZGljdChtYWtlUHJlZGljdGlvbigqbV9nbG9iYWxEYXRhLCAqcHJvZmlsZSksIFN0cm9u
Z1ByZWRpY3Rpb24pOworICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ucHJlZGljdChtYWtlUHJl
ZGljdGlvbigqcHJvZmlsZSkgJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24p
OwogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCIgICAgUHJl
ZGljdGlvbjogJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2dyYXBoW25vZGVJbmRleF0uZ2V0
UHJlZGljdGlvbigpKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksMTMgKzEzOSwxNSBAQCB2b2lkIEdy
YXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgKHZvaWQpaGFzUHJpbnRlZDsK
ICAgICAKICAgICBwcmludGYoIikiKTsKLSAgICAKLSAgICBpZiAobm9kZS5oYXNMb2NhbCgpKQot
ICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhnZXRQ
cmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpKTsKLSAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkK
LSAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcoZ2V0
R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKSkpOwotICAgIGlmIChub2RlLmhh
c1ByZWRpY3Rpb24oKSkKLSAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0
aW9uVG9TdHJpbmcobm9kZS5nZXRQcmVkaWN0aW9uKCkpKTsKKworICAgIGlmICghc2tpcHBlZCkg
eworICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKQorICAgICAgICAgICAgcHJpbnRmKCIgIHBy
ZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcoZ2V0UHJlZGljdGlvbihub2RlLmxvY2Fs
KCkpKSk7CisgICAgICAgIGlmIChub2RlLmhhc1Zhck51bWJlcigpKQorICAgICAgICAgICAgcHJp
bnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcoZ2V0R2xvYmFsVmFyUHJl
ZGljdGlvbihub2RlLnZhck51bWJlcigpKSkpOworICAgICAgICBpZiAobm9kZS5oYXNQcmVkaWN0
aW9uKCkpCisgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIsIHByZWRpY3Rpb25U
b1N0cmluZyhub2RlLmdldFByZWRpY3Rpb24oKSkpOworICAgIH0KICAgICAKICAgICBwcmludGYo
IlxuIik7CiB9CkBAIC0yMDksNyArMjExLDYgQEAgdm9pZCBHcmFwaDo6cHJlZGljdEFyZ3VtZW50
VHlwZXMoRXhlY1N0YQogICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKTsKIAotICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMt
Pmdsb2JhbERhdGEoKTsKICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrID0gY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cyA+PSAxKTsKICAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKTsgKythcmcpIHsKQEAgLTIyMyw3ICsyMjQs
NyBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBlcyhFeGVjU3RhCiAgICAgICAgIHBy
aW50ZigiXG4iKTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgbV9wcmVkaWN0aW9ucy5wcmVk
aWN0QXJndW1lbnQoYXJnLCBtYWtlUHJlZGljdGlvbihnbG9iYWxEYXRhLCAqcHJvZmlsZSkgJiB+
UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICBtX3ByZWRpY3Rp
b25zLnByZWRpY3RBcmd1bWVudChhcmcsIG1ha2VQcmVkaWN0aW9uKCpwcm9maWxlKSAmIH5QcmVk
aWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CiAgICAgICAgIAogI2lmIEVOQUJMRShE
RkdfREVCVUdfVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjogJXNcbiIs
IHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rpb25zLmdldEFyZ3VtZW50UHJlZGljdGlvbihh
cmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTUw
MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDc0LDEwICs0NzQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIAogICAgICAgICBB
U1NFUlQoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24pOwogICAgICAgICAKLSAgICAgICAgUHJl
ZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gU3Ryb25nUHJlZGljdGlvblRhZyB8IHByZWRpY3Rp
b24gfCBtX29wSW5mbzI7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gbV9vcEluZm8yICE9IG5ld1By
ZWRpY3Rpb247Ci0gICAgICAgIG1fb3BJbmZvMiA9IG5ld1ByZWRpY3Rpb247Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9vcEluZm8yLCBt
YWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKICAgICB9CiAgICAgCiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk1MDIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4
LDIxICsxMjgsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewog
ICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6IHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBu
b2RlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICAgICAgICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOwotICAgICAgICAg
ICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUoKSkKLSAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGlj
dGlvbikpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAg
ICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaXNKU0FycmF5KCZtX2dsb2JhbERhdGEsIGNlbGwpKQotICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEFycmF5LCBTdHJv
bmdQcmVkaWN0aW9uKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdENlbGwsIFN0
cm9uZ1ByZWRpY3Rpb24pKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaXNCb29sZWFu
KCkpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0
aW9uKFByZWRpY3RCb29sZWFuLCBTdHJvbmdQcmVkaWN0aW9uKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RUb3AsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0g
c2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uRnJvbVZhbHVlKG5vZGUudmFs
dWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKSwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTk4LDggKzE4NCwxMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCEobGVmdCAmIFByZWRpY3RO
dW1iZXIpIHx8ICEocmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBsZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBu
dW1iZXIuCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1h
a2VQcmVkaWN0aW9uKFByZWRpY3RTdHJpbmcsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ryb25nUHJlZGljdGlvbikpOworICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMyIHwgUHJlZGljdERvdWJsZSwgU3Ryb25nUHJl
ZGljdGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTIzOSwxNiArMjI4LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAg
ICAgICAgY2FzZSBHZXRNZXRob2Q6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uobm9kZS5jaGlsZDEoKSwgUHJlZGljdENlbGwgfCBTdHJv
bmdQcmVkaWN0aW9uVGFnKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uobm9kZS5j
aGlsZDEoKSwgUHJlZGljdFNvbWVPYmplY3QgfCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbm9kZS5wcmVkaWN0KG1fdXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+
UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOwogICAgICAgICAgICAgaWYgKGlz
U3Ryb25nUHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSkpCiAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBjYXNlIENhbGw6
CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
VXNlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV0sIFByZWRpY3RD
ZWxsIHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
VXNlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZpcnN0Q2hpbGQoKV0sIFByZWRpY3RT
b21lT2JqZWN0IHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUucHJlZGljdChtX3VzZXNbbV9jb21waWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdNYXNr
LCBTdHJvbmdQcmVkaWN0aW9uKTsKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24o
bm9kZS5nZXRQcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJl
ZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSk7CkBAIC0yNTYsNyArMjQ1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ29udmVydFRoaXM6IHsK
LSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVk
aWN0Q2VsbCwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RTb21lT2JqZWN0LCBTdHJvbmdQcmVkaWN0
aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0y
NzcsOSArMjY2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBQdXRCeUlkOgotICAgICAgICBjYXNl
IFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG5vZGUuY2hp
bGQxKCksIFByZWRpY3RDZWxsIHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CisgICAgICAgIGNhc2Ug
UHV0QnlJZERpcmVjdDogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNo
aWxkMSgpLCBQcmVkaWN0U29tZU9iamVjdCB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogI2lmbmRlZiBOREVCVUcKICAgICAgICAgLy8gVGhl
c2UgZ2V0IGlnbm9yZWQgYmVjYXVzZSB0aGV5IGRvbid0IHJldHVybiBhbnl0aGluZy4KQEAgLTMw
Niw3ICsyOTYsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBFTkFCTEUoREZHX0RFQlVH
X1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiZXhwZWN0KCVzKSB1c2UoJXMpICVzXG4iLCBwcmVk
aWN0aW9uVG9TdHJpbmcobV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0pLCBwcmVkaWN0aW9u
VG9TdHJpbmcobV91c2VzW21fY29tcGlsZUluZGV4XSksIGNoYW5nZWQgPyAiQ0hBTkdFRCIgOiAi
Iik7CisgICAgICAgIHByaW50ZigiZXhwZWN0KCVzKSAiLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9w
cmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0pKTsKKyAgICAgICAgcHJpbnRmKCJ1c2UoJXMpICVz
XG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV91c2VzW21fY29tcGlsZUluZGV4XSksIGNoYW5nZWQg
PyAiQ0hBTkdFRCIgOiAiIik7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCB8
PSBjaGFuZ2VkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZv
LmgJKHJldmlzaW9uIDk1MDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDE1IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc1Byb3BIYXNoVGFibGVHZXR0ZXJGdW5jdGlv
bihleGVjKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNQcm9wSGFzaFRhYmxlOwogICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBib29sIGlzU3ViQ2xhc3NPZihjb25zdCBDbGFzc0luZm8q
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IENsYXNzSW5m
byogY2kgPSB0aGlzOyBjaTsgY2kgPSBjaS0+cGFyZW50Q2xhc3MpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2kgPT0gb3RoZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKICAgICAg
ICAgY29uc3QgSGFzaFRhYmxlKiBzdGF0aWNQcm9wSGFzaFRhYmxlOwogICAgICAgICB0eXBlZGVm
IGNvbnN0IEhhc2hUYWJsZSogKCpDbGFzc1Byb3BIYXNoVGFibGVHZXR0ZXJGdW5jdGlvbikoRXhl
Y1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDk1MDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDk5LDExICs0OTksNyBAQCBpbmxpbmUgYm9vbCBTdHJ1
Y3R1cmU6OmlzVXNpbmdJbmxpbmVTdG9yCiAKIGlubGluZSBib29sIEpTQ2VsbDo6aW5oZXJpdHMo
Y29uc3QgQ2xhc3NJbmZvKiBpbmZvKSBjb25zdAogewotICAgIGZvciAoY29uc3QgQ2xhc3NJbmZv
KiBjaSA9IGNsYXNzSW5mbygpOyBjaTsgY2kgPSBjaS0+cGFyZW50Q2xhc3MpIHsKLSAgICAgICAg
aWYgKGNpID09IGluZm8pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBjbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKGluZm8pOwog
fQogCiAvLyB0aGlzIG1ldGhvZCBpcyBoZXJlIHRvIGJlIGFmdGVyIHRoZSBpbmxpbmUgZGVjbGFy
YXRpb24gb2YgSlNDZWxsOjppbmhlcml0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNzkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV1RGX0JvdW5kc0NoZWNr
ZWRQb2ludGVyX2gKKyNkZWZpbmUgV1RGX0JvdW5kc0NoZWNrZWRQb2ludGVyX2gKKworI2luY2x1
ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJVbnVzZWRQYXJhbS5oIgorCituYW1lc3BhY2Ug
V1RGIHsKKworLy8gVXNlZnVsIGZvciB3aGVuIHlvdSdkIGxpa2UgdG8gZG8gcG9pbnRlciBhcml0
aG1ldGljIG9uIGEgYnVmZmVyLCBidXQKKy8vIHlvdSdkIGFsc28gbGlrZSB0byBnZXQgc29tZSBB
U1NFUlQoKSdzIHRoYXQgcHJldmVudCB5b3UgZnJvbSBvdmVyZmxvd2luZy4KKy8vIFRoaXMgc2hv
dWxkIGJlIHBlcmZvcm1hbmNlLW5ldXRyYWwgaW4gcmVsZWFzZSBidWlsZHMsIHdoaWxlIHByb3Zp
ZGluZworLy8geW91IHdpdGggc3Ryb25nIGFzc2VydGlvbnMgaW4gZGVidWcgYnVpbGRzLiBOb3Rl
IHRoYXQgYWxsIG9mIHRoZQorLy8gYXNzZXJ0aW5nIGhhcHBlbnMgd2hlbiB5b3UgYWN0dWFsbHkg
YWNjZXNzIHRoZSBwb2ludGVyLiBZb3UgYXJlIGFsbG93ZWQKKy8vIHRvIG92ZXJmbG93IG9yIHVu
ZGVyZmxvdyB3aXRoIGFyaXRobWV0aWMgc28gbG9uZyBhcyBubyBhY2Nlc3NlcyBhcmUKKy8vIHBl
cmZvcm1lZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEJvdW5kc0NoZWNrZWRQb2lu
dGVyIHsKK3B1YmxpYzoKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlcigpCisgICAgICAgIDogbV9w
b2ludGVyKDApCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAsIG1fYmVnaW4oMCkKKyAg
ICAgICAgLCBtX2VuZCgwKQorI2VuZGlmCisgICAgeworICAgIH0KKworICAgIEJvdW5kc0NoZWNr
ZWRQb2ludGVyKFQqIHBvaW50ZXIsIHNpemVfdCBudW1FbGVtZW50cykKKyAgICAgICAgOiBtX3Bv
aW50ZXIocG9pbnRlcikKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgICwgbV9iZWdpbihw
b2ludGVyKQorICAgICAgICAsIG1fZW5kKHBvaW50ZXIgKyBudW1FbGVtZW50cykKKyNlbmRpZgor
ICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG51bUVsZW1lbnRzKTsKKyAgICB9CisgICAgCisg
ICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIoVCogcG9pbnRlciwgVCogZW5kKQorICAgICAgICA6IG1f
cG9pbnRlcihwb2ludGVyKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBtX2JlZ2lu
KHBvaW50ZXIpCisgICAgICAgICwgbV9lbmQoZW5kKQorI2VuZGlmCisgICAgeworICAgICAgICBV
TlVTRURfUEFSQU0oZW5kKTsKKyAgICB9CisKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlcihUKiBw
b2ludGVyLCBUKiBiZWdpbiwgc2l6ZV90IG51bUVsZW1lbnRzKQorICAgICAgICA6IG1fcG9pbnRl
cihwb2ludGVyKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBtX2JlZ2luKGJlZ2lu
KQorICAgICAgICAsIG1fZW5kKGJlZ2luICsgbnVtRWxlbWVudHMpCisjZW5kaWYKKyAgICB7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShiZWdpbik7CisgICAgICAgIFVOVVNFRF9QQVJBTShudW1FbGVt
ZW50cyk7CisgICAgfQorICAgIAorICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyKFQqIHBvaW50ZXIs
IFQqIGJlZ2luLCBUKiBlbmQpCisgICAgICAgIDogbV9wb2ludGVyKHBvaW50ZXIpCisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgICAgICAsIG1fYmVnaW4oYmVnaW4pCisgICAgICAgICwgbV9lbmQo
ZW5kKQorI2VuZGlmCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oYmVnaW4pOworICAgICAg
ICBVTlVTRURfUEFSQU0oZW5kKTsKKyAgICB9CisgICAgCisgICAgQm91bmRzQ2hlY2tlZFBvaW50
ZXImIG9wZXJhdG9yPShUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fcG9pbnRlciA9IHZhbHVl
OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIEJvdW5kc0NoZWNrZWRQ
b2ludGVyJiBvcGVyYXRvcis9KHB0cmRpZmZfdCBhbW91bnQpCisgICAgeworICAgICAgICBtX3Bv
aW50ZXIgKz0gYW1vdW50OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgQm91
bmRzQ2hlY2tlZFBvaW50ZXImIG9wZXJhdG9yLT0ocHRyZGlmZl90IGFtb3VudCkKKyAgICB7Cisg
ICAgICAgIG1fcG9pbnRlciAtPSBhbW91bnQ7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CisgICAgCisgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3BlcmF0b3IrKHB0cmRpZmZfdCBhbW91
bnQpIGNvbnN0CisgICAgeworICAgICAgICBCb3VuZHNDaGVja2VkUG9pbnRlciByZXN1bHQgPSAq
dGhpczsKKyAgICAgICAgcmVzdWx0Lm1fcG9pbnRlciArPSBhbW91bnQ7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3BlcmF0b3ItKHB0
cmRpZmZfdCBhbW91bnQpIGNvbnN0CisgICAgeworICAgICAgICBCb3VuZHNDaGVja2VkUG9pbnRl
ciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgcmVzdWx0Lm1fcG9pbnRlciAtPSBhbW91bnQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEJvdW5kc0NoZWNrZWRQb2lu
dGVyIG9wZXJhdG9yKysoKSAvLyBwcmVmaXgKKyAgICB7CisgICAgICAgIG1fcG9pbnRlcisrOwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIg
b3BlcmF0b3ItLSgpIC8vIHByZWZpeAorICAgIHsKKyAgICAgICAgbV9wb2ludGVyLS07CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlciBvcGVy
YXRvcisrKGludCkgLy8gcG9zdGZpeAorICAgIHsKKyAgICAgICAgQm91bmRzQ2hlY2tlZFBvaW50
ZXIgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIG1fcG9pbnRlcisrOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyIG9wZXJhdG9yLS0oaW50
KSAvLyBwb3N0Zml4CisgICAgeworICAgICAgICBCb3VuZHNDaGVja2VkUG9pbnRlciByZXN1bHQg
PSAqdGhpczsKKyAgICAgICAgbV9wb2ludGVyLS07CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KFQqIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcG9pbnRlciA8IG90aGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I8PShUKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BvaW50ZXIgPD0g
b3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oVCogb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9wb2ludGVyID4gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj49KFQqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRl
ciA+PSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oVCogb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9wb2ludGVyID09IG90aGVyOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShUKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3BvaW50ZXIgIT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoQm91bmRzQ2hl
Y2tlZFBvaW50ZXIgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wb2ludGVy
IDwgb3RoZXIubV9wb2ludGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShCb3VuZHND
aGVja2VkUG9pbnRlciBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BvaW50
ZXIgPD0gb3RoZXIubV9wb2ludGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+KEJvdW5k
c0NoZWNrZWRQb2ludGVyIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9p
bnRlciA+IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPj0oQm91
bmRzQ2hlY2tlZFBvaW50ZXIgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9w
b2ludGVyID49IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Qm91bmRzQ2hlY2tlZFBvaW50ZXIgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9wb2ludGVyID09IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9wb2ludGVyICE9IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBCb3VuZHNDaGVj
a2VkUG9pbnRlciBvcGVyYXRvciEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3BvaW50ZXI7
CisgICAgfQorICAgIAorICAgIFQqIGdldCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wb2lu
dGVyOworICAgIH0KKyAgICAKKyAgICBUJiBvcGVyYXRvciooKQorICAgIHsKKyAgICAgICAgdmFs
aWRhdGUoKTsKKyAgICAgICAgcmV0dXJuICptX3BvaW50ZXI7CisgICAgfQorCisgICAgY29uc3Qg
VCYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHZhbGlkYXRlKCk7CisgICAgICAg
IHJldHVybiAqbV9wb2ludGVyOworICAgIH0KKworICAgIFQmIG9wZXJhdG9yW10ocHRyZGlmZl90
IGluZGV4KQorICAgIHsKKyAgICAgICAgdmFsaWRhdGUobV9wb2ludGVyICsgaW5kZXgpOworICAg
ICAgICByZXR1cm4gbV9wb2ludGVyW2luZGV4XTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBvcGVy
YXRvcltdKHB0cmRpZmZfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHZhbGlkYXRlKG1f
cG9pbnRlciArIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRlcltpbmRleF07CisgICAg
fQorICAgIAorICAgIC8vIFRoZSBvbmx5IHRoaW5nIHRoaXMgaGFzIGluIGNvbW1vbiB3aXRoIHN0
cmNhdCgpIGlzIHRoYXQgaXQKKyAgICAvLyBrZWVwcyBhcHBlbmRpbmcgZnJvbSB0aGUgZ2l2ZW4g
cG9pbnRlciB1bnRpbCByZWFjaGluZyAwLgorICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyJiBzdHJj
YXQoY29uc3QgVCogc291cmNlKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCpzb3VyY2UpCisgICAg
ICAgICAgICAqKCp0aGlzKSsrID0gKnNvdXJjZSsrOworICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmFsaWRhdGUoVCogcG9pbnRlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocG9pbnRlciwgcG9pbnRlciA+PSBtX2JlZ2luKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZ3VhcmQgaXMgZGVzaWduZWQgdG8gcHJvdGVjdCBh
Z2FpbnN0IHRoZSBtaXNhbGlnbmVkIGNhc2UuCisgICAgICAgIC8vIEEgc2ltcGxlIHBvaW50ZXIg
PCBtX2VuZCB3b3VsZCBtaXNzIHRoZSBjYXNlIGlmLCBmb3IgZXhhbXBsZSwKKyAgICAgICAgLy8g
VCA9IGludDE2X3QgYW5kIHBvaW50ZXIgaXMgMSBieXRlIGxlc3MgdGhhbiBtX2VuZC4KKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChwb2ludGVyLCBwb2ludGVyICsgMSA8PSBtX2VuZCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdmFsaWRhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgdmFsaWRhdGUo
bV9wb2ludGVyKTsKKyAgICB9CisgICAgCisgICAgVCogbV9wb2ludGVyOworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICBUKiBtX2JlZ2luOworICAgIFQqIG1fZW5kOworI2VuZGlmCit9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjsKKwor
I2VuZGlmIC8vIFdURl9Cb3VuZHNDaGVja2VkUG9pbnRlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107272</attachid>
            <date>2011-09-13 18:51:47 -0700</date>
            <delta_ts>2011-09-14 09:47:09 -0700</delta_ts>
            <desc>the patch - fix license, add build stuff</desc>
            <filename>cleanerpredict_patch_3.diff</filename>
            <type>text/plain</type>
            <size>45821</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUwNjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAK
KzIwMTEtMDktMTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBQ
cmVkaWN0aW9uIHRyYWNraW5nIGlzIG5vdCBwcmVjaXNlIGVub3VnaAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc5OTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIGEgcmljaGVyIHNl
dCBvZiB0eXBlIHByZWRpY3Rpb25zLCBpbmNsdWRpbmcgSlNGaW5hbE9iamVjdCwgSlNTdHJpbmcs
CisgICAgICAgIG9iamVjdCB0aGF0IGlzIG5vdCBhIEpTRmluYWxPYmplY3Qgb3IgSlNBcnJheSAo
T2JqZWN0T3RoZXIpLCBzb21lIG9iamVjdAorICAgICAgICBidXQgd2UgZG9uJ3Qgb3IgY2FyZSBr
bm93IHdoYXQga2luZCAoU29tZU9iamVjdCksIGRlZmluaXRlbHkgYW4gb2JqZWN0LAorICAgICAg
ICBjZWxsIHRoYXQgaXMgbm90IGFuIG9iamVjdCBvciBKU1N0cmluZywgYW4gdmFsdWUgdGhhdCBp
cyBub25lIG9mIHRoZSBhYm92ZQorICAgICAgICAoc28gZWl0aGVyIFVuZGVmaW5lZCBvciBOdWxs
KS4gTWFkZSB0aGUgcHJvcGFnYXRvciBhbmQgdmFsdWUgcHJvZmlsZXIgd29yaworICAgICAgICB3
aXRoIHRoZSBuZXcgdHlwZXMuCisgICAgICAgIAorICAgICAgICBQZXJmb3JtYW5jZSBpcyBuZXV0
cmFsLCBiZWNhdXNlIHRoZSBERkcgSklUIGRvZXMgbm90IHRha2UgYWR2YW50YWdlIG9mIHRoaXMK
KyAgICAgICAgbmV3IGtub3dsZWRnZSB5ZXQuCisgICAgICAgIAorICAgICAgICBJbiB0aGUgcHJv
Y2VzcyBvZiB3cml0aW5nIHByZWRpY3Rpb25Ub1N0cmluZygpICh3aGljaCBpcyBub3cgY29uc2lk
ZXJhYmx5CisgICAgICAgIG1vcmUgY29tcGxleCkgSSBkZWNpZGVkIHRvIGZpbmFsbHkgYWRkIGEg
Qm91bmRzQ2hlY2tlZFBvaW50ZXIsIHdoaWNoCisgICAgICAgIHNob3VsZCBjb21lIGluIGhhbmR5
IGluIG90aGVyIHBsYWNlcywgbGlrZSBhdCBsZWFzdCB0aGUgT1NSIHNjcmF0Y2ggYnVmZmVyCisg
ICAgICAgIGFuZCB0aGUgQ29tcGFjdEpJVENvZGVNYXAuIEl0J3MgZ3JlYXQgZm9yIGNhc2VzIHdo
ZXJlIHlvdSB3YW50IHRvCisgICAgICAgIGRvIHBvaW50ZXIgYXJpdGhtZXRpYywgeW91IHdhbnQg
dG8gaGF2ZSBhc3NlcnRpb25zIGFib3V0IHRoZQorICAgICAgICBwb2ludGVyIG5vdCBnb2luZyBv
dXQgb2YgYm91bmRzLCBidXQgeW91IGRvbid0IHdhbnQgdG8gd3JpdGUgdGhvc2UKKyAgICAgICAg
YXNzZXJ0aW9ucyB5b3Vyc2VsZi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyByZXF1aXJl
ZCByZWZhY3RvcmluZyBpbmhlcml0cygpLCBzaW5jZSB0aGUgVmFsdWVQcm9maWxlciBtYXkKKyAg
ICAgICAgd2FudCB0byBkbyB0aGUgZXF1aXZhbGVudCBvZiBpbmhlcml0cygpIGJ1dCBnaXZlbiB0
d28gQ2xhc3NJbmZvJ3MuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2Rl
L1ByZWRpY3RlZFR5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6cHJlZGljdGlvblRvU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6bWFrZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpwcmVk
aWN0aW9uRnJvbVZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6Cisg
ICAgICAgIChKU0M6OmlzQ2VsbFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjppc09iamVjdFBy
ZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjppc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik6CisgICAg
ICAgIChKU0M6OmlzU3RyaW5nUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6Om1lcmdlUHJlZGlj
dGlvbnMpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoSlND
OjpWYWx1ZVByb2ZpbGU6Om51bWJlck9mT2JqZWN0cyk6CisgICAgICAgIChKU0M6OlZhbHVlUHJv
ZmlsZTo6bnVtYmVyT2ZGaW5hbE9iamVjdHMpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGU6
Om51bWJlck9mU3RyaW5ncyk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6cHJvYmFiaWxp
dHlPZk9iamVjdCk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZTo6cHJvYmFiaWxpdHlPZkZp
bmFsT2JqZWN0KToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpwcm9iYWJpbGl0eU9mU3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
VmFsdWVQcm9maWxlOjpTdGF0aXN0aWNzOjpTdGF0aXN0aWNzKToKKyAgICAgICAgKEpTQzo6VmFs
dWVQcm9maWxlOjpjb21wdXRlU3RhdGlzdGljcyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c3Ryb25nbHlQ
cmVkaWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cHJlZGljdEFyZ3VtZW50
VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6cHJlZGljdCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAqIHJ1bnRpbWUv
Q2xhc3NJbmZvLmg6CisgICAgICAgIChKU0M6OkNsYXNzSW5mbzo6aXNTdWJDbGFzc09mKToKKyAg
ICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTQ2VsbDo6aW5oZXJp
dHMpOgorICAgICAgICAqIHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6OkJvdW5kc0NoZWNrZWRQb2ludGVyKToKKyAg
ICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgIChX
VEY6OkJvdW5kc0NoZWNrZWRQb2ludGVyOjpvcGVyYXRvcis9KToKKyAgICAgICAgKFdURjo6Qm91
bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yLT0pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVj
a2VkUG9pbnRlcjo6b3BlcmF0b3IrKToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50
ZXI6Om9wZXJhdG9yLSk6CisgICAgICAgIChXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVyOjpvcGVy
YXRvcisrKToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yLS0p
OgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6b3BlcmF0b3I8KToKKyAgICAg
ICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yPD0pOgorICAgICAgICAoV1RG
OjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6b3BlcmF0b3I+KToKKyAgICAgICAgKFdURjo6Qm91bmRz
Q2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yPj0pOgorICAgICAgICAoV1RGOjpCb3VuZHNDaGVja2Vk
UG9pbnRlcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVy
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJh
dG9yISk6CisgICAgICAgIChXVEY6OkJvdW5kc0NoZWNrZWRQb2ludGVyOjpnZXQpOgorICAgICAg
ICAoV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRlcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6
Qm91bmRzQ2hlY2tlZFBvaW50ZXI6Om9wZXJhdG9yW10pOgorICAgICAgICAoV1RGOjpCb3VuZHND
aGVja2VkUG9pbnRlcjo6c3RyY2F0KToKKyAgICAgICAgKFdURjo6Qm91bmRzQ2hlY2tlZFBvaW50
ZXI6OnZhbGlkYXRlKToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisKIDIwMTEtMDkt
MTMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBTcGVjdWxhdGl2
ZUpJVDo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlSW5kZXgsIE5vZGVJbmRleCkgc2hvdWxk
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNp
b24gOTUwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQko
d29ya2luZyBjb3B5KQpAQCAtNDU3LDYgKzQ1Nyw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0bWFwLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvQmxvY2tTdGFjay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0Jsb29tRmlsdGVyLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQm91bmRzQ2hlY2tl
ZFBvaW50ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CdW1wUG9pbnRlckFsbG9j
YXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0J5dGVBcnJheS5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQnl0ZUFycmF5LmggXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYu
dmNwcm9qCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTYyOSw2ICs2
MjksMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwu
Llx3dGZcQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQog
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCIKIAkJCT4K
IAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk1
MDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAKIAkJMEZEODJF
NTUxNDFEQUVFRTAwMTc5Qzk0IC8qIFByZWRpY3Rpb25UcmFja2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1MDE0MURBRUExMDAxNzlDOTQg
LyogUHJlZGljdGlvblRyYWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkQ4MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
NTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAqLzsgfTsKIAkJMEZEODJFNTcx
NDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NS
RW50cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRkQ4MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTgyMTQxRjNG
QzkwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAv
KiBQcmVkaWN0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAq
LzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODA3LDYgKzgw
OSw4IEBACiAJCTBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVkaWN0aW9uVHJhY2tlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyog
REZHT1NSRW50cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
T1NSRW50cnkuY3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5Lmg7IHBhdGggPSBk
ZmcvREZHT1NSRW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEODJFODIx
NDFGM0ZDOTAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQb2ludGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJvdW5kc0NoZWNrZWRQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQx
MjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NB
bGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlF
MTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3ODIsNiArMTc4Niw3IEBACiAJCTY1MTYyRUYxMDhFNkEy
MUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGRDgyRTgyMTQxRjNGQzkwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRl
ci5oICovLAogCQkJCTBGOTYzQjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFu
ZGxlLmggKi8sCiAJCQkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3Iu
Y3BwICovLAogCQkJCTBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmgg
Ki8sCkBAIC0yMzA4LDYgKzIzMTMsNyBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyog
Ynl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkw
RkQ4MkU0RjE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLAogCQkJCTBGRDgy
RTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovLAogCQkJCTBGOTYz
QjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKQEAgLTI0MDksNiArMjQx
NSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNz
ZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyog
Qm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFG
MTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTUx
NDFEQUVFRTAwMTc5Qzk0IC8qIFByZWRpY3Rpb25UcmFja2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkQ4MkU1NDE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMDgzLDYgKzMwOTAsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7
CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEZE
ODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBh
YmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByZWRpY3Rl
ZFR5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworI2lmbmRlZiBOREVCVUcKK2NvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0
cmluZyhQcmVkaWN0ZWRUeXBlIHZhbHVlKQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgc2l6ZSA9
IDk2OworICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOworICAgIEJvdW5kc0NoZWNr
ZWRQb2ludGVyPGNoYXI+IHB0cihkZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgCisgICAgaWYgKCEo
dmFsdWUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKSkKKyAgICAgICAgcHRyLnN0cmNhdCgiV2VhayIp
OworICAgIAorICAgIGlmICh2YWx1ZSAmIFByZWRpY3RTb21lT2JqZWN0KSB7CisgICAgICAgIEFT
U0VSVCghKHZhbHVlICYgKFByZWRpY3RPYmplY3QgJiB+UHJlZGljdFNvbWVPYmplY3QpKSk7Cisg
ICAgICAgIHB0ci5zdHJjYXQoIk9iamVjdCIpOworICAgIH0KKworICAgIGlmICh2YWx1ZSAmIFBy
ZWRpY3RDZWxsT3RoZXIpCisgICAgICAgIHB0ci5zdHJjYXQoIk90aGVyY2VsbCIpOworICAgIAor
ICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPYmplY3RPdGhlcikKKyAgICAgICAgcHRyLnN0cmNhdCgi
T3RoZXJvYmoiKTsKKyAgICAKKyAgICBpZiAodmFsdWUgJiBQcmVkaWN0RmluYWxPYmplY3QpCisg
ICAgICAgIHB0ci5zdHJjYXQoIkZpbmFsIik7CisKKyAgICBpZiAodmFsdWUgJiBQcmVkaWN0QXJy
YXkpCisgICAgICAgIHB0ci5zdHJjYXQoIkFycmF5Iik7CisgICAgCisgICAgaWYgKHZhbHVlICYg
UHJlZGljdFN0cmluZykKKyAgICAgICAgcHRyLnN0cmNhdCgiU3RyIik7CisgICAgCisgICAgaWYg
KHZhbHVlICYgUHJlZGljdEludDMyKQorICAgICAgICBwdHIuc3RyY2F0KCJJbnQiKTsKKyAgICAK
KyAgICBpZiAodmFsdWUgJiBQcmVkaWN0RG91YmxlKQorICAgICAgICBwdHIuc3RyY2F0KCJEb3Vi
bGUiKTsKKyAgICAKKyAgICBpZiAodmFsdWUgJiBQcmVkaWN0Qm9vbGVhbikKKyAgICAgICAgcHRy
LnN0cmNhdCgiQm9vbCIpOworICAgIAorICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPdGhlcikKKyAg
ICAgICAgcHRyLnN0cmNhdCgiT3RoZXIiKTsKKyAgICAKKyAgICAqcHRyKysgPSAwOworICAgIAor
ICAgIHJldHVybiBkZXNjcmlwdGlvbjsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQorUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihjb25zdCBWYWx1ZVByb2ZpbGUm
IHByb2ZpbGUpCit7CisgICAgVmFsdWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3M7Cisg
ICAgcHJvZmlsZS5jb21wdXRlU3RhdGlzdGljcyhzdGF0aXN0aWNzKTsKKyAgICAKKyAgICBpZiAo
IXN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgIAor
ICAgIGlmIChzdGF0aXN0aWNzLmludDMycyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAg
IHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEludDMyOworICAgIAorICAgIGlm
IChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1
cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3REb3VibGU7CisgICAgCisgICAgaWYgKHN0
YXRpc3RpY3MuaW50MzJzICsgc3RhdGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxl
cykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0TnVtYmVyOwor
ICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmFycmF5cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisg
ICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEFycmF5OworICAgIAor
ICAgIGlmIChzdGF0aXN0aWNzLmZpbmFsT2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisg
ICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEZpbmFsT2JqZWN0Owor
ICAgIAorICAgIGlmIChzdGF0aXN0aWNzLnN0cmluZ3MgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQor
ICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RTdHJpbmc7CisgICAg
CisgICAgaWYgKHN0YXRpc3RpY3Mub2JqZWN0cyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAg
ICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdE9iamVjdE90aGVyOworICAg
IAorICAgIGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAg
ICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Q2VsbE90aGVyOworICAgIAor
ICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAg
ICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9vbGVhbjsKKyAgICAKKyAg
ICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RPdGhlcjsKK30KKyNlbmRpZgor
CitQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gUHJlZGljdEludDMyOworICAg
IGlmICh2YWx1ZS5pc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4gUHJlZGljdERvdWJsZTsKKyAg
ICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8gPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpOworICAgICAgICAK
KyAgICAgICAgaWYgKGNsYXNzSW5mbyA9PSAmSlNGaW5hbE9iamVjdDo6c19pbmZvKQorICAgICAg
ICAgICAgcmV0dXJuIFByZWRpY3RGaW5hbE9iamVjdDsKKyAgICAgICAgCisgICAgICAgIGlmIChj
bGFzc0luZm8gPT0gJkpTQXJyYXk6OnNfaW5mbykKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0
QXJyYXk7CisgICAgICAgIAorICAgICAgICBpZiAoY2xhc3NJbmZvID09ICZKU1N0cmluZzo6c19p
bmZvKQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3RTdHJpbmc7CisgICAgICAgIAorICAgICAg
ICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoJkpTT2JqZWN0OjpzX2luZm8pKQorICAgICAg
ICAgICAgcmV0dXJuIFByZWRpY3RPYmplY3RPdGhlcjsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBQcmVkaWN0Q2VsbE90aGVyOworICAgIH0KKyAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisg
ICAgICAgIHJldHVybiBQcmVkaWN0Qm9vbGVhbjsKKyAgICByZXR1cm4gUHJlZGljdE90aGVyOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDIzICszMyw0NSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdHlwZWRlZiB1aW50OF90IFBy
ZWRpY3RlZFR5cGU7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Tm9uZSAgID0g
MDsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RDZWxsICAgPSAweDAxOwotc3Rh
dGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5ICA9IDB4MDM7Ci1zdGF0aWMgY29u
c3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0SW50MzIgID0gMHgwNDsKLXN0YXRpYyBjb25zdCBQcmVk
aWN0ZWRUeXBlIFByZWRpY3REb3VibGUgPSAweDA4Owotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5
cGUgUHJlZGljdE51bWJlciA9IDB4MGM7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0Qm9vbGVhbiA9IDB4MTA7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9w
ICAgID0gMHgxZjsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rpb25U
YWcgPSAweDgwOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sg
ICAgPSAweDgwOwordHlwZWRlZiB1aW50MTZfdCBQcmVkaWN0ZWRUeXBlOworc3RhdGljIGNvbnN0
IFByZWRpY3RlZFR5cGUgUHJlZGljdE5vbmUgICAgICAgICAgPSAweDAwMDA7IC8vIFdlIGRvbid0
IGtub3cgYW55dGhpbmcgeWV0Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEZp
bmFsT2JqZWN0ICAgPSAweDAwMDE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTRmluYWxPYmplY3Qu
CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgICAgICAgICA9IDB4MDAw
MjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRU
eXBlIFByZWRpY3RPYmplY3RPdGhlciAgID0gMHgwMDEwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4g
b2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCBvciBKU0FycmF5Lgorc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdFNvbWVPYmplY3QgICAgPSAweDAwMjA7IC8vIEl0J3Mgc29tZSB1
bmtub3duIHN1YmNsYXNzIG9mIEpTT2JqZWN0Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUg
UHJlZGljdE9iamVjdCAgICAgICAgPSAweDAwM2Y7IC8vIEl0J3MgZGVmaW5pdGVseSBhIHN1YmNs
YXNzIG9mIEpTT2JqZWN0Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdFN0cmlu
ZyAgICAgICAgPSAweDAwNDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLgorc3RhdGlj
IGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdENlbGxPdGhlciAgICAgPSAweDAwODA7IC8vIEl0
J3MgZGVmaW5pdGVseSBhIEpTQ2VsbCBidXQgbm90IGEgc3ViY2xhc3Mgb2YgSlNPYmplY3QgYW5k
IGRlZmluaXRlbHkgbm90IGEgSlNTdHJpbmcuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQ
cmVkaWN0Q2VsbCAgICAgICAgICA9IDB4MDBmZjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxs
Lgorc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEludDMyICAgICAgICAgPSAweDAx
MDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMi4KK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRU
eXBlIFByZWRpY3REb3VibGUgICAgICAgID0gMHgwMjAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBE
b3VibGUuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0TnVtYmVyICAgICAgICA9
IDB4MDMwMDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGUuCitzdGF0aWMgY29u
c3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Qm9vbGVhbiAgICAgICA9IDB4MDQwMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgQm9vbGVhbi4KK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RP
dGhlciAgICAgICAgID0gMHg0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgbm9uZSBvZiB0aGUgYWJv
dmUuCitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9wICAgICAgICAgICA9IDB4
N2ZmZjsgLy8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUuCitzdGF0aWMgY29uc3QgUHJlZGlj
dGVkVHlwZSBTdHJvbmdQcmVkaWN0aW9uVGFnICA9IDB4ODAwMDsgLy8gSXQncyBhIHN0cm9uZyBw
cmVkaWN0aW9uIChhbGwgc3Ryb25nIHByZWRpY3Rpb25zIHRydW1wIGFsbCB3ZWFrIG9uZXMpLgor
c3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01hc2sgICAgPSAweDgwMDA7
CiAKIGVudW0gUHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBTdHJvbmdQcmVkaWN0
aW9uIH07CiAKIGlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1
ZSkKIHsKLSAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxsICYm
ICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNrKSk7CisgICAgcmV0
dXJuICEhKHZhbHVlICYgUHJlZGljdENlbGwpICYmICEodmFsdWUgJiB+KFByZWRpY3RDZWxsIHwg
UHJlZGljdGlvblRhZ01hc2spKTsKK30KKworaW5saW5lIGJvb2wgaXNPYmplY3RQcmVkaWN0aW9u
KFByZWRpY3RlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE9i
amVjdCkgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE9iamVjdCB8IFByZWRpY3Rpb25UYWdNYXNrKSk7
Cit9CisKK2lubGluZSBib29sIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUg
dmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJl
ZGljdEZpbmFsT2JqZWN0OworfQorCitpbmxpbmUgYm9vbCBpc1N0cmluZ1ByZWRpY3Rpb24oUHJl
ZGljdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdN
YXNrKSA9PSBQcmVkaWN0U3RyaW5nOwogfQogCiBpbmxpbmUgYm9vbCBpc0FycmF5UHJlZGljdGlv
bihQcmVkaWN0ZWRUeXBlIHZhbHVlKQpAQCAtODQsNTMgKzEwNiwyMyBAQCBpbmxpbmUgYm9vbCBp
c1N0cm9uZ1ByZWRpY3Rpb24oUHJlZGljdGVkCiB9CiAKICNpZm5kZWYgTkRFQlVHCi1pbmxpbmUg
Y29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpCi17Ci0g
ICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbih2YWx1ZSkpIHsKLSAgICAgICAgc3dpdGNoICh2YWx1
ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgewotICAgICAgICBjYXNlIFByZWRpY3ROb25lOgotICAg
ICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1ib3R0b20iOwotICAgICAgICBjYXNlIFByZWRpY3RD
ZWxsOgotICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1jZWxsIjsKLSAgICAgICAgY2FzZSBQ
cmVkaWN0QXJyYXk6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWFycmF5IjsKLSAgICAg
ICAgY2FzZSBQcmVkaWN0SW50MzI6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWludDMy
IjsKLSAgICAgICAgY2FzZSBQcmVkaWN0RG91YmxlOgotICAgICAgICAgICAgcmV0dXJuICJwLXN0
cm9uZy1kb3VibGUiOwotICAgICAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgICAgICBy
ZXR1cm4gInAtc3Ryb25nLW51bWJlciI7Ci0gICAgICAgIGNhc2UgUHJlZGljdEJvb2xlYW46Ci0g
ICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJvb2xlYW4iOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy10b3AiOwotICAgICAgICB9Ci0gICAgfQotICAg
IHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNlIFByZWRpY3ROb25lOgotICAgICAgICByZXR1cm4g
InAtd2Vhay1ib3R0b20iOwotICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAgIHJldHVybiAi
cC13ZWFrLWNlbGwiOwotICAgIGNhc2UgUHJlZGljdEFycmF5OgotICAgICAgICByZXR1cm4gInAt
d2Vhay1hcnJheSI7Ci0gICAgY2FzZSBQcmVkaWN0SW50MzI6Ci0gICAgICAgIHJldHVybiAicC13
ZWFrLWludDMyIjsKLSAgICBjYXNlIFByZWRpY3REb3VibGU6Ci0gICAgICAgIHJldHVybiAicC13
ZWFrLWRvdWJsZSI7Ci0gICAgY2FzZSBQcmVkaWN0TnVtYmVyOgotICAgICAgICByZXR1cm4gInAt
d2Vhay1udW1iZXIiOwotICAgIGNhc2UgUHJlZGljdEJvb2xlYW46Ci0gICAgICAgIHJldHVybiAi
cC13ZWFrLWJvb2xlYW4iOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLXRv
cCI7Ci0gICAgfQotfQorY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5
cGUgdmFsdWUpOwogI2VuZGlmCiAKIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1lcmdlUHJlZGljdGlv
bnMoUHJlZGljdGVkVHlwZSBsZWZ0LCBQcmVkaWN0ZWRUeXBlIHJpZ2h0KQogewotICAgIGlmIChp
c1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgPT0gaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkKKyAg
ICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpID09IGlzU3Ryb25nUHJlZGljdGlvbihyaWdo
dCkpIHsKKyAgICAgICAgaWYgKGxlZnQgJiBQcmVkaWN0U29tZU9iamVjdCkgeworICAgICAgICAg
ICAgQVNTRVJUKCEobGVmdCAmIChQcmVkaWN0T2JqZWN0ICYgflByZWRpY3RTb21lT2JqZWN0KSkp
OworICAgICAgICAgICAgaWYgKHJpZ2h0ICYgUHJlZGljdE9iamVjdCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKGxlZnQgJiB+UHJlZGljdFNvbWVPYmplY3QpIHwgcmlnaHQ7CisgICAgICAgIH0g
ZWxzZSBpZiAocmlnaHQgJiBQcmVkaWN0U29tZU9iamVjdCkgeworICAgICAgICAgICAgQVNTRVJU
KCEocmlnaHQgJiAoUHJlZGljdE9iamVjdCAmIH5QcmVkaWN0U29tZU9iamVjdCkpKTsKKyAgICAg
ICAgICAgIGlmIChsZWZ0ICYgUHJlZGljdE9iamVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
KHJpZ2h0ICYgflByZWRpY3RTb21lT2JqZWN0KSB8IGxlZnQ7CisgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIGxlZnQgfCByaWdodDsKKyAgICB9CiAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihs
ZWZ0KSkgewogICAgICAgICBBU1NFUlQoIWlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkpOwogICAg
ICAgICByZXR1cm4gbGVmdDsKQEAgLTE1OSwzNiArMTUxLDExIEBAIGlubGluZSBQcmVkaWN0ZWRU
eXBlIG1ha2VQcmVkaWN0aW9uKFByZWQKIH0KIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
LWlubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgY29uc3QgVmFsdWVQcm9maWxlJiBwcm9maWxlKQotewotICAgIFZhbHVlUHJvZmlsZTo6
U3RhdGlzdGljcyBzdGF0aXN0aWNzOwotICAgIHByb2ZpbGUuY29tcHV0ZVN0YXRpc3RpY3MoZ2xv
YmFsRGF0YSwgc3RhdGlzdGljcyk7Ci0gICAgCi0gICAgaWYgKCFzdGF0aXN0aWNzLnNhbXBsZXMp
Ci0gICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5p
bnQzMnMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGlj
dGlvblRhZyB8IFByZWRpY3RJbnQzMjsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5kb3VibGVz
ID09IHN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25U
YWcgfCBQcmVkaWN0RG91YmxlOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmludDMycyArIHN0
YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBT
dHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdE51bWJlcjsKLSAgICAKLSAgICBpZiAoc3RhdGlz
dGljcy5hcnJheXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25n
UHJlZGljdGlvblRhZyB8IFByZWRpY3RBcnJheTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5j
ZWxscyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0
aW9uVGFnIHwgUHJlZGljdENlbGw7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuYm9vbGVhbnMg
PT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3RCb29sZWFuOwotICAgIAotICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFn
IHwgUHJlZGljdFRvcDsKLX0KK1ByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oY29uc3QgVmFs
dWVQcm9maWxlJik7CiAjZW5kaWYKIAorUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVZhbHVl
KEpTVmFsdWUpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFByZWRpY3RlZFR5
cGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2Zp
bGUuaAkocmV2aXNpb24gOTUwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw2ICsxMDgsMzcgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAg
IHVuc2lnbmVkIG51bWJlck9mT2JqZWN0cygpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZC
dWNrZXRzOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IENsYXNzSW5mbyogY2kgPSBjbGFzc0lu
Zm8oaSk7CisgICAgICAgICAgICBpZiAoISFjaSAmJiBjaS0+aXNTdWJDbGFzc09mKCZKU09iamVj
dDo6c19pbmZvKSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZkZpbmFs
T2JqZWN0cygpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChjbGFzc0luZm8oaSkgPT0gJkpTRmluYWxPYmplY3Q6OnNfaW5mbykKKyAg
ICAgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlN0cmluZ3MoKSBjb25zdAorICAg
IHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mQnVja2V0czsgKytpKSB7CisgICAgICAgICAgICBpZiAoY2xhc3NJ
bmZvKGkpID09ICZKU1N0cmluZzo6c19pbmZvKQorICAgICAgICAgICAgICAgIHJlc3VsdCsrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIHVuc2ln
bmVkIG51bWJlck9mQXJyYXlzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHJlc3Vs
dCA9IDA7CkBAIC0xNDgsMTEgKzE3OSwyNiBAQCBzdHJ1Y3QgVmFsdWVQcm9maWxlIHsKICAgICAg
ICAgcmV0dXJuIGNvbXB1dGVQcm9iYWJpbGl0eShudW1iZXJPZkNlbGxzKCksIG51bWJlck9mU2Ft
cGxlcygpKTsKICAgICB9CiAgICAgCisgICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZk9iamVjdCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZVByb2JhYmlsaXR5KG51bWJlck9m
T2JqZWN0cygpLCBudW1iZXJPZlNhbXBsZXMoKSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IHByb2JhYmlsaXR5T2ZGaW5hbE9iamVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Y29tcHV0ZVByb2JhYmlsaXR5KG51bWJlck9mRmluYWxPYmplY3RzKCksIG51bWJlck9mU2FtcGxl
cygpKTsKKyAgICB9CisgICAgCiAgICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZkFycmF5KCkgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBjb21wdXRlUHJvYmFiaWxpdHkobnVtYmVyT2ZBcnJh
eXMoKSwgbnVtYmVyT2ZTYW1wbGVzKCkpOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBwcm9i
YWJpbGl0eU9mU3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlUHJv
YmFiaWxpdHkobnVtYmVyT2ZTdHJpbmdzKCksIG51bWJlck9mU2FtcGxlcygpKTsKKyAgICB9Cisg
ICAgCiAgICAgdW5zaWduZWQgcHJvYmFiaWxpdHlPZkJvb2xlYW4oKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIGNvbXB1dGVQcm9iYWJpbGl0eShudW1iZXJPZkJvb2xlYW5zKCksIG51bWJl
ck9mU2FtcGxlcygpKTsKQEAgLTE2MiwxMiArMjA4LDE1IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGUg
ewogICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCiAgICAgewogICAgICAgICBmcHJpbnRmKG91dCwK
LSAgICAgICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1ICgldSksIGRvdWJsZSA9
ICV1ICgldSksIGNlbGwgPSAldSAoJXUpLCBhcnJheSA9ICV1ICgldSksIGJvb2xlYW4gPSAldSAo
JXUpIiwKKyAgICAgICAgICAgICAgICAic2FtcGxlcyA9ICV1LCBpbnQzMiA9ICV1ICgldSksIGRv
dWJsZSA9ICV1ICgldSksIGNlbGwgPSAldSAoJXUpLCBvYmplY3QgPSAldSAoJXUpLCBmaW5hbCBv
YmplY3QgPSAldSAoJXUpLCBhcnJheSA9ICV1ICgldSksIHN0cmluZyA9ICV1ICgldSksIGJvb2xl
YW4gPSAldSAoJXUpIiwKICAgICAgICAgICAgICAgICBudW1iZXJPZlNhbXBsZXMoKSwKICAgICAg
ICAgICAgICAgICBwcm9iYWJpbGl0eU9mSW50MzIoKSwgbnVtYmVyT2ZJbnQzMnMoKSwKICAgICAg
ICAgICAgICAgICBwcm9iYWJpbGl0eU9mRG91YmxlKCksIG51bWJlck9mRG91YmxlcygpLAogICAg
ICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZDZWxsKCksIG51bWJlck9mQ2VsbHMoKSwKKyAgICAg
ICAgICAgICAgICBwcm9iYWJpbGl0eU9mT2JqZWN0KCksIG51bWJlck9mT2JqZWN0cygpLAorICAg
ICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZGaW5hbE9iamVjdCgpLCBudW1iZXJPZkZpbmFsT2Jq
ZWN0cygpLAogICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZBcnJheSgpLCBudW1iZXJPZkFy
cmF5cygpLAorICAgICAgICAgICAgICAgIHByb2JhYmlsaXR5T2ZTdHJpbmcoKSwgbnVtYmVyT2ZT
dHJpbmdzKCksCiAgICAgICAgICAgICAgICAgcHJvYmFiaWxpdHlPZkJvb2xlYW4oKSwgbnVtYmVy
T2ZCb29sZWFucygpKTsKICAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1Y2tldHM7ICsraSkgewpAQCAtMTkzLDU0ICsy
NDIsNzIgQEAgc3RydWN0IFZhbHVlUHJvZmlsZSB7CiAgICAgICAgIHVuc2lnbmVkIGludDMyczsK
ICAgICAgICAgdW5zaWduZWQgZG91YmxlczsKICAgICAgICAgdW5zaWduZWQgY2VsbHM7CisgICAg
ICAgIHVuc2lnbmVkIG9iamVjdHM7CisgICAgICAgIHVuc2lnbmVkIGZpbmFsT2JqZWN0czsKICAg
ICAgICAgdW5zaWduZWQgYXJyYXlzOworICAgICAgICB1bnNpZ25lZCBzdHJpbmdzOwogICAgICAg
ICB1bnNpZ25lZCBib29sZWFuczsKKyAgICAgICAgCisgICAgICAgIFN0YXRpc3RpY3MoKQorICAg
ICAgICB7CisgICAgICAgICAgICBiemVybyh0aGlzLCBzaXplb2YoU3RhdGlzdGljcykpOworICAg
ICAgICB9CiAgICAgfTsKKyAgICAKKyAgICAvLyBNZXRob2QgZm9yIGluY3JlbWVudGluZyBhbGwg
cmVsZXZhbnQgc3RhdGlzdGljcyBmb3IgYSBDbGFzc0luZm8sIGV4Y2VwdCBmb3IKKyAgICAvLyBp
bmNyZW1lbnRpbmcgdGhlIG51bWJlciBvZiBzYW1wbGVzLCB3aGljaCB0aGUgY2FsbGVyIGlzIHJl
c3BvbnNpYmxlIGZvcgorICAgIC8vIGRvaW5nLgorICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVTdGF0
aXN0aWNzKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvLCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNz
KQorICAgIHsKKyAgICAgICAgc3RhdGlzdGljcy5jZWxscysrOworICAgICAgICAKKyAgICAgICAg
aWYgKGNsYXNzSW5mbyA9PSAmSlNGaW5hbE9iamVjdDo6c19pbmZvKSB7CisgICAgICAgICAgICBz
dGF0aXN0aWNzLmZpbmFsT2JqZWN0cysrOworICAgICAgICAgICAgc3RhdGlzdGljcy5vYmplY3Rz
Kys7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChjbGFzc0luZm8gPT0gJkpTQXJyYXk6OnNfaW5mbykgeworICAgICAgICAgICAgc3RhdGlzdGlj
cy5hcnJheXMrKzsKKyAgICAgICAgICAgIHN0YXRpc3RpY3Mub2JqZWN0cysrOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoY2xhc3NJbmZvID09
ICZKU1N0cmluZzo6c19pbmZvKSB7CisgICAgICAgICAgICBzdGF0aXN0aWNzLnN0cmluZ3MrKzsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNs
YXNzSW5mby0+aXNTdWJDbGFzc09mKCZKU09iamVjdDo6c19pbmZvKSkKKyAgICAgICAgICAgIHN0
YXRpc3RpY3Mub2JqZWN0cysrOworICAgIH0KIAogICAgIC8vIE9wdGltaXplZCBtZXRob2QgZm9y
IGdldHRpbmcgYWxsIGNvdW50cyBhdCBvbmNlLgotICAgIHZvaWQgY29tcHV0ZVN0YXRpc3RpY3Mo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKSBjb25zdAor
ICAgIHZvaWQgY29tcHV0ZVN0YXRpc3RpY3MoU3RhdGlzdGljcyYgc3RhdGlzdGljcykgY29uc3QK
ICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHNhbXBsZXMgID0gMDsKLSAgICAgICAgdW5zaWduZWQg
aW50MzJzICAgPSAwOwotICAgICAgICB1bnNpZ25lZCBkb3VibGVzICA9IDA7Ci0gICAgICAgIHVu
c2lnbmVkIGNlbGxzICAgID0gMDsKLSAgICAgICAgdW5zaWduZWQgYXJyYXlzICAgPSAwOwotICAg
ICAgICB1bnNpZ25lZCBib29sZWFucyA9IDA7Ci0gICAgICAgIAogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKICAgICAgICAgICAgIGlmICgh
YnVja2V0c1tpXSkgewogICAgICAgICAgICAgICAgIFdlYWtCdWNrZXQgd2Vha0J1Y2tldCA9IHdl
YWtCdWNrZXRzW2ldOwogICAgICAgICAgICAgICAgIGlmICghIXdlYWtCdWNrZXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc2FtcGxlcysrOwotICAgICAgICAgICAgICAgICAgICBjZWxscysrOwot
ICAgICAgICAgICAgICAgICAgICBpZiAod2Vha0J1Y2tldC5nZXRDbGFzc0luZm8oKSA9PSAmSlNB
cnJheTo6c19pbmZvKQotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlzKys7CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcysrOworICAgICAgICAgICAgICAgICAgICBj
b21wdXRlU3RhdGlzdGljcyh3ZWFrQnVja2V0LmdldENsYXNzSW5mbygpLCBzdGF0aXN0aWNzKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNhbXBsZXMr
KzsKKyAgICAgICAgICAgIHN0YXRpc3RpY3Muc2FtcGxlcysrOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJ1Y2tldHNbaV0pOwogICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgICAgICAgICBpbnQzMnMrKzsK
KyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmludDMycysrOwogICAgICAgICAgICAgZWxzZSBp
ZiAodmFsdWUuaXNEb3VibGUoKSkKLSAgICAgICAgICAgICAgICBkb3VibGVzKys7Ci0gICAgICAg
ICAgICBlbHNlIGlmICh2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICAgICAgICAgIGNlbGxzKys7
Ci0gICAgICAgICAgICAgICAgaWYgKGlzSlNBcnJheSgmZ2xvYmFsRGF0YSwgdmFsdWUuYXNDZWxs
KCkpKQotICAgICAgICAgICAgICAgICAgICBhcnJheXMrKzsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgYm9vbGVhbnMrKzsKKyAgICAg
ICAgICAgICAgICBzdGF0aXN0aWNzLmRvdWJsZXMrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZh
bHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgICAgIGNvbXB1dGVTdGF0aXN0aWNzKHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCksIHN0YXRpc3RpY3MpOworICAgICAgICAg
ICAgZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpCisgICAgICAgICAgICAgICAgc3RhdGlzdGlj
cy5ib29sZWFucysrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGF0aXN0aWNzLnNh
bXBsZXMgID0gc2FtcGxlczsKLSAgICAgICAgc3RhdGlzdGljcy5pbnQzMnMgICA9IGludDMyczsK
LSAgICAgICAgc3RhdGlzdGljcy5kb3VibGVzICA9IGRvdWJsZXM7Ci0gICAgICAgIHN0YXRpc3Rp
Y3MuY2VsbHMgICAgPSBjZWxsczsKLSAgICAgICAgc3RhdGlzdGljcy5hcnJheXMgICA9IGFycmF5
czsKLSAgICAgICAgc3RhdGlzdGljcy5ib29sZWFucyA9IGJvb2xlYW5zOwogICAgIH0KICAgICAK
ICAgICBpbnQgYnl0ZWNvZGVPZmZzZXQ7IC8vIC0xIGZvciBwcm9sb2d1ZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDk1MDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCw3ICs0ODQsNyBAQCBwcml2YXRlOgogICAgICAgICBw
cm9maWxlLT5kdW1wKHN0ZG91dCk7CiAgICAgICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgotICAg
ICAgICBtX2dyYXBoW25vZGVJbmRleF0ucHJlZGljdChtYWtlUHJlZGljdGlvbigqbV9nbG9iYWxE
YXRhLCAqcHJvZmlsZSksIFN0cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICBtX2dyYXBoW25vZGVJ
bmRleF0ucHJlZGljdChtYWtlUHJlZGljdGlvbigqcHJvZmlsZSkgJiB+UHJlZGljdGlvblRhZ01h
c2ssIFN0cm9uZ1ByZWRpY3Rpb24pOwogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKICAg
ICAgICAgcHJpbnRmKCIgICAgUHJlZGljdGlvbjogJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyht
X2dyYXBoW25vZGVJbmRleF0uZ2V0UHJlZGljdGlvbigpKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NTAyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzks
MTMgKzEzOSwxNSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAg
ICAgKHZvaWQpaGFzUHJpbnRlZDsKICAgICAKICAgICBwcmludGYoIikiKTsKLSAgICAKLSAgICBp
ZiAobm9kZS5oYXNMb2NhbCgpKQotICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIsIHBy
ZWRpY3Rpb25Ub1N0cmluZyhnZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSkpKTsKLSAgICBpZiAo
bm9kZS5oYXNWYXJOdW1iZXIoKSkKLSAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBw
cmVkaWN0aW9uVG9TdHJpbmcoZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigp
KSkpOwotICAgIGlmIChub2RlLmhhc1ByZWRpY3Rpb24oKSkKLSAgICAgICAgcHJpbnRmKCIgIHBy
ZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcobm9kZS5nZXRQcmVkaWN0aW9uKCkpKTsK
KworICAgIGlmICghc2tpcHBlZCkgeworICAgICAgICBpZiAobm9kZS5oYXNMb2NhbCgpKQorICAg
ICAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcoZ2V0
UHJlZGljdGlvbihub2RlLmxvY2FsKCkpKSk7CisgICAgICAgIGlmIChub2RlLmhhc1Zhck51bWJl
cigpKQorICAgICAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgJXMiLCBwcmVkaWN0aW9uVG9T
dHJpbmcoZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKSkpOworICAgICAg
ICBpZiAobm9kZS5oYXNQcmVkaWN0aW9uKCkpCisgICAgICAgICAgICBwcmludGYoIiAgcHJlZGlj
dGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0cmluZyhub2RlLmdldFByZWRpY3Rpb24oKSkpOworICAg
IH0KICAgICAKICAgICBwcmludGYoIlxuIik7CiB9CkBAIC0yMDksNyArMjExLDYgQEAgdm9pZCBH
cmFwaDo6cHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YQogICAgIEFTU0VSVChjb2RlQmxvY2sp
OwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKTsKIAotICAgIEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBDb2RlQmxvY2sqIHByb2Zp
bGVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOwogICAgIEFTU0VSVChjb2Rl
QmxvY2stPm1fbnVtUGFyYW1ldGVycyA+PSAxKTsKICAgICBmb3IgKHNpemVfdCBhcmcgPSAxOyBh
cmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKTsgKyth
cmcpIHsKQEAgLTIyMyw3ICsyMjQsNyBAQCB2b2lkIEdyYXBoOjpwcmVkaWN0QXJndW1lbnRUeXBl
cyhFeGVjU3RhCiAgICAgICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgogICAgICAgICAKLSAgICAg
ICAgbV9wcmVkaWN0aW9ucy5wcmVkaWN0QXJndW1lbnQoYXJnLCBtYWtlUHJlZGljdGlvbihnbG9i
YWxEYXRhLCAqcHJvZmlsZSkgJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24p
OworICAgICAgICBtX3ByZWRpY3Rpb25zLnByZWRpY3RBcmd1bWVudChhcmcsIG1ha2VQcmVkaWN0
aW9uKCpwcm9maWxlKSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CiAg
ICAgICAgIAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCIg
ICAgUHJlZGljdGlvbjogJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rpb25zLmdl
dEFyZ3VtZW50UHJlZGljdGlvbihhcmcpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gOTUwMjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDc0LDEwICs0NzQsNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24pOwog
ICAgICAgICAKLSAgICAgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gU3Ryb25nUHJl
ZGljdGlvblRhZyB8IHByZWRpY3Rpb24gfCBtX29wSW5mbzI7Ci0gICAgICAgIGJvb2wgcmVzdWx0
ID0gbV9vcEluZm8yICE9IG5ld1ByZWRpY3Rpb247Ci0gICAgICAgIG1fb3BJbmZvMiA9IG5ld1By
ZWRpY3Rpb247Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBtZXJnZVBy
ZWRpY3Rpb24obV9vcEluZm8yLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsK
ICAgICB9CiAgICAgCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9u
IDk1MDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI4LDIxICsxMjgsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6IHsKLSAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBub2RlLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJl
ZGljdGlvbikpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNEb3VibGUoKSkKLSAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGlj
dERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUu
aXNDZWxsKCkpIHsKLSAgICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwo
KTsKLSAgICAgICAgICAgICAgICBpZiAoaXNKU0FycmF5KCZtX2dsb2JhbERhdGEsIGNlbGwpKQot
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rp
b24oUHJlZGljdEFycmF5LCBTdHJvbmdQcmVkaWN0aW9uKSk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdENlbGwsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RCb29sZWFuLCBTdHJvbmdQcmVkaWN0aW9u
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RUb3AsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAg
ICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihwcmVkaWN0
aW9uRnJvbVZhbHVlKG5vZGUudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKSwgU3Ryb25n
UHJlZGljdGlvbikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAg
IApAQCAtMTk4LDggKzE4NCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBT
dHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFBy
ZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCEobGVmdCAmIFByZWRpY3ROdW1iZXIpIHx8ICEocmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBsZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRlbHkgc29t
ZXRoaW5nIG90aGVyIHRoYW4gYSBudW1iZXIuCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RTdHJpbmcsIFN0cm9uZ1By
ZWRpY3Rpb24pKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFRvcCwgU3Ry
b25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJl
ZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMyIHwgUHJl
ZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIzOSwxNiArMjI4LDE2IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRNZXRob2Q6CiAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uobm9kZS5jaGlsZDEo
KSwgUHJlZGljdENlbGwgfCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VVc2Uobm9kZS5jaGlsZDEoKSwgUHJlZGljdFNvbWVPYmplY3QgfCBTdHJvbmdQ
cmVkaWN0aW9uVGFnKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS5wcmVkaWN0KG1fdXNl
c1ttX2NvbXBpbGVJbmRleF0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24p
OwogICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24o
KSkpCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG5vZGUuZ2V0UHJl
ZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAK
KwogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OiB7Ci0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZp
cnN0Q2hpbGQoKV0sIFByZWRpY3RDZWxsIHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CisgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltub2RlLmZp
cnN0Q2hpbGQoKV0sIFByZWRpY3RTb21lT2JqZWN0IHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CiAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUucHJlZGljdChtX3VzZXNbbV9jb21waWxlSW5kZXhd
ICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKICAgICAgICAgICAgIGlm
IChpc1N0cm9uZ1ByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpKQogICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSk7CkBAIC0y
NTYsNyArMjQ1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQ29udmVydFRoaXM6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihtYWtlUHJlZGljdGlvbihQcmVkaWN0Q2VsbCwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RTb21l
T2JqZWN0LCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0yNzcsOSArMjY2LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBQ
dXRCeUlkOgotICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlVXNlKG5vZGUuY2hpbGQxKCksIFByZWRpY3RDZWxsIHwgU3Ryb25nUHJlZGljdGlv
blRhZyk7CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDogeworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBQcmVkaWN0U29tZU9iamVjdCB8IFN0cm9uZ1By
ZWRpY3Rpb25UYWcpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogI2lmbmRlZiBO
REVCVUcKICAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVzZSB0aGV5IGRvbid0IHJl
dHVybiBhbnl0aGluZy4KQEAgLTMwNiw3ICsyOTYsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAK
ICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiZXhwZWN0KCVz
KSB1c2UoJXMpICVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9wcmVkaWN0aW9uc1ttX2NvbXBp
bGVJbmRleF0pLCBwcmVkaWN0aW9uVG9TdHJpbmcobV91c2VzW21fY29tcGlsZUluZGV4XSksIGNo
YW5nZWQgPyAiQ0hBTkdFRCIgOiAiIik7CisgICAgICAgIHByaW50ZigiZXhwZWN0KCVzKSAiLCBw
cmVkaWN0aW9uVG9TdHJpbmcobV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0pKTsKKyAgICAg
ICAgcHJpbnRmKCJ1c2UoJXMpICVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV91c2VzW21fY29t
cGlsZUluZGV4XSksIGNoYW5nZWQgPyAiQ0hBTkdFRCIgOiAiIik7CiAjZW5kaWYKICAgICAgICAg
CiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDk1MDIyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUx
LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHJldHVybiBjbGFzc1Byb3BI
YXNoVGFibGVHZXR0ZXJGdW5jdGlvbihleGVjKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNQ
cm9wSGFzaFRhYmxlOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGlzU3ViQ2xh
c3NPZihjb25zdCBDbGFzc0luZm8qIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKGNvbnN0IENsYXNzSW5mbyogY2kgPSB0aGlzOyBjaTsgY2kgPSBjaS0+cGFyZW50Q2xh
c3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2kgPT0gb3RoZXIpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBzdGF0aWNQcm9wSGFzaFRh
YmxlOwogICAgICAgICB0eXBlZGVmIGNvbnN0IEhhc2hUYWJsZSogKCpDbGFzc1Byb3BIYXNoVGFi
bGVHZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDk1MDIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDk5LDExICs0OTks
NyBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OmlzVXNpbmdJbmxpbmVTdG9yCiAKIGlubGluZSBi
b29sIEpTQ2VsbDo6aW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKiBpbmZvKSBjb25zdAogewotICAg
IGZvciAoY29uc3QgQ2xhc3NJbmZvKiBjaSA9IGNsYXNzSW5mbygpOyBjaTsgY2kgPSBjaS0+cGFy
ZW50Q2xhc3MpIHsKLSAgICAgICAgaWYgKGNpID09IGluZm8pCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjbGFzc0luZm8oKS0+
aXNTdWJDbGFzc09mKGluZm8pOwogfQogCiAvLyB0aGlzIG1ldGhvZCBpcyBoZXJlIHRvIGJlIGFm
dGVyIHRoZSBpbmxpbmUgZGVjbGFyYXRpb24gb2YgSlNDZWxsOjppbmhlcml0cwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQm91bmRzQ2hlY2tlZFBvaW50
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX0JvdW5k
c0NoZWNrZWRQb2ludGVyX2gKKyNkZWZpbmUgV1RGX0JvdW5kc0NoZWNrZWRQb2ludGVyX2gKKwor
I2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJVbnVzZWRQYXJhbS5oIgorCituYW1l
c3BhY2UgV1RGIHsKKworLy8gVXNlZnVsIGZvciB3aGVuIHlvdSdkIGxpa2UgdG8gZG8gcG9pbnRl
ciBhcml0aG1ldGljIG9uIGEgYnVmZmVyLCBidXQKKy8vIHlvdSdkIGFsc28gbGlrZSB0byBnZXQg
c29tZSBBU1NFUlQoKSdzIHRoYXQgcHJldmVudCB5b3UgZnJvbSBvdmVyZmxvd2luZy4KKy8vIFRo
aXMgc2hvdWxkIGJlIHBlcmZvcm1hbmNlLW5ldXRyYWwgaW4gcmVsZWFzZSBidWlsZHMsIHdoaWxl
IHByb3ZpZGluZworLy8geW91IHdpdGggc3Ryb25nIGFzc2VydGlvbnMgaW4gZGVidWcgYnVpbGRz
LiBOb3RlIHRoYXQgYWxsIG9mIHRoZQorLy8gYXNzZXJ0aW5nIGhhcHBlbnMgd2hlbiB5b3UgYWN0
dWFsbHkgYWNjZXNzIHRoZSBwb2ludGVyLiBZb3UgYXJlIGFsbG93ZWQKKy8vIHRvIG92ZXJmbG93
IG9yIHVuZGVyZmxvdyB3aXRoIGFyaXRobWV0aWMgc28gbG9uZyBhcyBubyBhY2Nlc3NlcyBhcmUK
Ky8vIHBlcmZvcm1lZC4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEJvdW5kc0NoZWNr
ZWRQb2ludGVyIHsKK3B1YmxpYzoKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlcigpCisgICAgICAg
IDogbV9wb2ludGVyKDApCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAsIG1fYmVnaW4o
MCkKKyAgICAgICAgLCBtX2VuZCgwKQorI2VuZGlmCisgICAgeworICAgIH0KKworICAgIEJvdW5k
c0NoZWNrZWRQb2ludGVyKFQqIHBvaW50ZXIsIHNpemVfdCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBtX3BvaW50ZXIocG9pbnRlcikKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgICwgbV9i
ZWdpbihwb2ludGVyKQorICAgICAgICAsIG1fZW5kKHBvaW50ZXIgKyBudW1FbGVtZW50cykKKyNl
bmRpZgorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG51bUVsZW1lbnRzKTsKKyAgICB9Cisg
ICAgCisgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIoVCogcG9pbnRlciwgVCogZW5kKQorICAgICAg
ICA6IG1fcG9pbnRlcihwb2ludGVyKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBt
X2JlZ2luKHBvaW50ZXIpCisgICAgICAgICwgbV9lbmQoZW5kKQorI2VuZGlmCisgICAgeworICAg
ICAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyAgICB9CisKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRl
cihUKiBwb2ludGVyLCBUKiBiZWdpbiwgc2l6ZV90IG51bUVsZW1lbnRzKQorICAgICAgICA6IG1f
cG9pbnRlcihwb2ludGVyKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBtX2JlZ2lu
KGJlZ2luKQorICAgICAgICAsIG1fZW5kKGJlZ2luICsgbnVtRWxlbWVudHMpCisjZW5kaWYKKyAg
ICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShiZWdpbik7CisgICAgICAgIFVOVVNFRF9QQVJBTShu
dW1FbGVtZW50cyk7CisgICAgfQorICAgIAorICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyKFQqIHBv
aW50ZXIsIFQqIGJlZ2luLCBUKiBlbmQpCisgICAgICAgIDogbV9wb2ludGVyKHBvaW50ZXIpCisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAsIG1fYmVnaW4oYmVnaW4pCisgICAgICAgICwg
bV9lbmQoZW5kKQorI2VuZGlmCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oYmVnaW4pOwor
ICAgICAgICBVTlVTRURfUEFSQU0oZW5kKTsKKyAgICB9CisgICAgCisgICAgQm91bmRzQ2hlY2tl
ZFBvaW50ZXImIG9wZXJhdG9yPShUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fcG9pbnRlciA9
IHZhbHVlOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIEJvdW5kc0No
ZWNrZWRQb2ludGVyJiBvcGVyYXRvcis9KHB0cmRpZmZfdCBhbW91bnQpCisgICAgeworICAgICAg
ICBtX3BvaW50ZXIgKz0gYW1vdW50OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisg
ICAgQm91bmRzQ2hlY2tlZFBvaW50ZXImIG9wZXJhdG9yLT0ocHRyZGlmZl90IGFtb3VudCkKKyAg
ICB7CisgICAgICAgIG1fcG9pbnRlciAtPSBhbW91bnQ7CisgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICB9CisgICAgCisgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3BlcmF0b3IrKHB0cmRpZmZf
dCBhbW91bnQpIGNvbnN0CisgICAgeworICAgICAgICBCb3VuZHNDaGVja2VkUG9pbnRlciByZXN1
bHQgPSAqdGhpczsKKyAgICAgICAgcmVzdWx0Lm1fcG9pbnRlciArPSBhbW91bnQ7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3BlcmF0
b3ItKHB0cmRpZmZfdCBhbW91bnQpIGNvbnN0CisgICAgeworICAgICAgICBCb3VuZHNDaGVja2Vk
UG9pbnRlciByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgcmVzdWx0Lm1fcG9pbnRlciAtPSBhbW91
bnQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEJvdW5kc0NoZWNr
ZWRQb2ludGVyIG9wZXJhdG9yKysoKSAvLyBwcmVmaXgKKyAgICB7CisgICAgICAgIG1fcG9pbnRl
cisrOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgQm91bmRzQ2hlY2tlZFBv
aW50ZXIgb3BlcmF0b3ItLSgpIC8vIHByZWZpeAorICAgIHsKKyAgICAgICAgbV9wb2ludGVyLS07
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRl
ciBvcGVyYXRvcisrKGludCkgLy8gcG9zdGZpeAorICAgIHsKKyAgICAgICAgQm91bmRzQ2hlY2tl
ZFBvaW50ZXIgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIG1fcG9pbnRlcisrOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyIG9wZXJhdG9y
LS0oaW50KSAvLyBwb3N0Zml4CisgICAgeworICAgICAgICBCb3VuZHNDaGVja2VkUG9pbnRlciBy
ZXN1bHQgPSAqdGhpczsKKyAgICAgICAgbV9wb2ludGVyLS07CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KFQqIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRlciA8IG90aGVyOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I8PShUKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BvaW50
ZXIgPD0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj4oVCogb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9wb2ludGVyID4gb3RoZXI7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvcj49KFQqIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
cG9pbnRlciA+PSBvdGhlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oVCogb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wb2ludGVyID09IG90aGVyOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShUKiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3BvaW50ZXIgIT0gb3RoZXI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoQm91
bmRzQ2hlY2tlZFBvaW50ZXIgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9w
b2ludGVyIDwgb3RoZXIubV9wb2ludGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I8PShC
b3VuZHNDaGVja2VkUG9pbnRlciBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3BvaW50ZXIgPD0gb3RoZXIubV9wb2ludGVyOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I+
KEJvdW5kc0NoZWNrZWRQb2ludGVyIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fcG9pbnRlciA+IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
Pj0oQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9wb2ludGVyID49IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9wb2ludGVyID09IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yIT0oQm91bmRzQ2hlY2tlZFBvaW50ZXIgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9wb2ludGVyICE9IG90aGVyLm1fcG9pbnRlcjsKKyAgICB9CisKKyAgICBCb3Vu
ZHNDaGVja2VkUG9pbnRlciBvcGVyYXRvciEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3Bv
aW50ZXI7CisgICAgfQorICAgIAorICAgIFQqIGdldCgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9wb2ludGVyOworICAgIH0KKyAgICAKKyAgICBUJiBvcGVyYXRvciooKQorICAgIHsKKyAgICAg
ICAgdmFsaWRhdGUoKTsKKyAgICAgICAgcmV0dXJuICptX3BvaW50ZXI7CisgICAgfQorCisgICAg
Y29uc3QgVCYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHZhbGlkYXRlKCk7Cisg
ICAgICAgIHJldHVybiAqbV9wb2ludGVyOworICAgIH0KKworICAgIFQmIG9wZXJhdG9yW10ocHRy
ZGlmZl90IGluZGV4KQorICAgIHsKKyAgICAgICAgdmFsaWRhdGUobV9wb2ludGVyICsgaW5kZXgp
OworICAgICAgICByZXR1cm4gbV9wb2ludGVyW2luZGV4XTsKKyAgICB9CisKKyAgICBjb25zdCBU
JiBvcGVyYXRvcltdKHB0cmRpZmZfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHZhbGlk
YXRlKG1fcG9pbnRlciArIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fcG9pbnRlcltpbmRleF07
CisgICAgfQorICAgIAorICAgIC8vIFRoZSBvbmx5IHRoaW5nIHRoaXMgaGFzIGluIGNvbW1vbiB3
aXRoIHN0cmNhdCgpIGlzIHRoYXQgaXQKKyAgICAvLyBrZWVwcyBhcHBlbmRpbmcgZnJvbSB0aGUg
Z2l2ZW4gcG9pbnRlciB1bnRpbCByZWFjaGluZyAwLgorICAgIEJvdW5kc0NoZWNrZWRQb2ludGVy
JiBzdHJjYXQoY29uc3QgVCogc291cmNlKQorICAgIHsKKyAgICAgICAgd2hpbGUgKCpzb3VyY2Up
CisgICAgICAgICAgICAqKCp0aGlzKSsrID0gKnNvdXJjZSsrOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmFsaWRhdGUoVCogcG9pbnRlcikgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocG9pbnRlciwgcG9pbnRlciA+PSBtX2Jl
Z2luKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZ3VhcmQgaXMgZGVzaWduZWQgdG8gcHJv
dGVjdCBhZ2FpbnN0IHRoZSBtaXNhbGlnbmVkIGNhc2UuCisgICAgICAgIC8vIEEgc2ltcGxlIHBv
aW50ZXIgPCBtX2VuZCB3b3VsZCBtaXNzIHRoZSBjYXNlIGlmLCBmb3IgZXhhbXBsZSwKKyAgICAg
ICAgLy8gVCA9IGludDE2X3QgYW5kIHBvaW50ZXIgaXMgMSBieXRlIGxlc3MgdGhhbiBtX2VuZC4K
KyAgICAgICAgQVNTRVJUX1VOVVNFRChwb2ludGVyLCBwb2ludGVyICsgMSA8PSBtX2VuZCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgdmFs
aWRhdGUobV9wb2ludGVyKTsKKyAgICB9CisgICAgCisgICAgVCogbV9wb2ludGVyOworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICBUKiBtX2JlZ2luOworICAgIFQqIG1fZW5kOworI2VuZGlmCit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpCb3VuZHNDaGVja2VkUG9pbnRl
cjsKKworI2VuZGlmIC8vIFdURl9Cb3VuZHNDaGVja2VkUG9pbnRlcl9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1MDIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
Niw2ICs2LDcgQEAgU0VUKFdURl9IRUFERVJTCiAgICAgQXNzZXJ0aW9ucy5oCiAgICAgQXRvbWlj
cy5oCiAgICAgQml0bWFwLmgKKyAgICBCb3VuZHNDaGVja2VkUG9pbnRlci5oCiAgICAgQnVtcFBv
aW50ZXJBbGxvY2F0b3IuaAogICAgIEJ5dGVBcnJheS5oCiAgICAgQ29tcGlsZXIuaAo=
</data>
<flag name="review"
          id="103924"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>