<?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>71780</bug_id>
          
          <creation_ts>2011-11-08 01:02:46 -0800</creation_ts>
          <short_desc>Introduce SVGLengthContext, to allow to resolve relative units to arbitary viewports</short_desc>
          <delta_ts>2011-11-11 02:49:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>10403</blocked>
    
    <blocked>71731</blocked>
    
    <blocked>72009</blocked>
    
    <blocked>72011</blocked>
    
    <blocked>72012</blocked>
    
    <blocked>72105</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497830</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-08 01:02:46 -0800</bug_when>
    <thetext>Currently SVGLength::value(const SVGElement* context) is used all over WebCore to resolve SVGLengths to floats.
While working on bug 10403 I discovered following problem with feImage, explained by this snippet:

&lt;svg width=&quot;800&quot; height=&quot;800&quot;&gt;
&lt;defs&gt;
    &lt;circle cx=&quot;50%&quot; cy=&quot;50%&quot; r=&quot;10%&quot; fill=&quot;green&quot; id=&quot;circle&quot;/&gt;
&lt;/defs&gt;

&lt;filter x=&quot;0%&quot; y=&quot;0%&quot; width=&quot;100%&quot; height=&quot;100%&quot; primitiveUnits=&quot;objectBoundingBox&quot; id=&quot;filter&quot;&gt;
     &lt;feImage xlink;href=&quot;#circle&quot;/&gt;
&lt;/filter&gt;

&lt;rect width=&quot;400&quot; height=&quot;300&quot; filter=&quot;url(#filter&quot;)&gt;
&lt;/svg&gt;

A filter is constructed where primitiveUnits are objectBoundingBox, unlike the default userSpaceOnUse.
This implies that any relative value used in the feImage filter effect, should be resolved against the &quot;filter subregion bounding box&quot; of the effect.
As I specified x=&quot;0%&quot; y=&quot;0%&quot; width=&quot;100%&quot; height=&quot;100%&quot; on the filter, which overrides the default of x/y=&quot;-10%&quot; width/height=&quot;120%&quot;, the &quot;filter subregion bounding box&quot; is equivalent to 0x0-400x300, as that is the objectBoundingBox of the &lt;rect&gt; element where the &lt;filter&gt; applies to.

So what do we expect?
feImage should create an ImageBuffer with the size of the boundingBox of the &lt;circle&gt; resolved against the &quot;filter subregion bounding box&quot;, aka. bbox rect x=150 y=100 w=100 h=100.
That implies the rendering should be the same when using userSpaceOnUse but &lt;circle cx=&quot;200&quot; cy=&quot;150&quot; r=&quot;50&quot;&gt;.

What happens currently?
FEImage asks for the objectBoundingBox of the renderer of the &lt;circle&gt;, which will return the bbox rect x=360 y=360 w=80 h=80.
That implies the rendering looks like as if we used userSpaceOnUse but &lt;circle cx=&quot;400&quot; cy=&quot;400&quot; r=&quot;40&quot;&gt;.

Obviously the percentage values were resolved against the viewport of the outermost &lt;svg&gt; renderer.
That&apos;s our default behaviour and correct in most cases, but we have no way to override this, that means it&apos;s very hard to get feImage right at the moment, without having the ability to get a Path out of the SVGCircleElement that&apos;s resolved against a custom viewport.

In the following patch I&apos;m introducing SVGLengthContext, which is passed to SVGLength instead &quot;const SVGElement* context&quot;. It holds an additional FloatRect for the custom viewport.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497897</commentid>
    <comment_count>1</comment_count>
      <attachid>114027</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-08 03:16:04 -0800</bug_when>
    <thetext>Created attachment 114027
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497898</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-08 03:17:33 -0800</bug_when>
    <thetext>Attachment 114027 did not pass style-queue:

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

Source/WebCore/svg/SVGLengthContext.h:73:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/svg/SVGLengthContext.h:74:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/svg/SVGLength.h:57:  The parameter name &quot;mode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/svg/SVGLength.h:57:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 26 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>497928</commentid>
    <comment_count>3</comment_count>
      <attachid>114035</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-08 04:01:24 -0800</bug_when>
    <thetext>Created attachment 114035
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497948</commentid>
    <comment_count>4</comment_count>
      <attachid>114035</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-11-08 04:44:35 -0800</bug_when>
    <thetext>Comment on attachment 114035
Patch v2

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498001</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-11-08 06:15:41 -0800</bug_when>
    <thetext>Thanks, landed in r99561.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114027</attachid>
            <date>2011-11-08 03:16:04 -0800</date>
            <delta_ts>2011-11-08 04:01:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Introduce-SVGLengthContext-v1.diff</filename>
            <type>text/plain</type>
            <size>70463</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTQwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTYgQEAKKzIwMTEtMTEtMDggIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIFNW
R0xlbmd0aENvbnRleHQsIHRvIGFsbG93IHRvIHJlc29sdmUgcmVsYXRpdmUgdW5pdHMgdG8gYXJi
aXRhcnkgdmlld3BvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTc4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEludHJvZHVjZSBTVkdMZW5ndGhDb250ZXh0IHRvIGNsZWFudXAgU1ZHTGVuZ3RoLCBi
eSBtb3ZpbmcgYWxsIGNvbnZlcnNpb24gb2YgcmVsYXRpdmUgdW5pdHMgdGhhdCBkZXBlbmQgb24g
c3R5bGUgb3Igdmlld3BvcnQKKyAgICAgICAgb3V0IG9mIFNWR0xlbmd0aCwgaW50byBTVkdMZW5n
dGhDb250ZXh0LiBQYXNzIFNWR0xlbmd0aENvbnRleHQmIHRvIFNWR0xlbmd0aDo6dmFsdWUvc2V0
VmFsdWUvLi4uIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGEgcHVyZQorICAgICAgICAiY29uc3QgU1ZH
RWxlbWVudCogY29udGV4dCIsIHdoaWNoIHdhcyBwcmV2aW91c2x5IHVzZWQgdG8gZGV0ZXJtaW5l
IHRoZSB2aWV3cG9ydCB3aGVuIHJlc29sdmluZyBwZXJjZW50YWdlIHVuaXRzLgorICAgICAgICBT
VkdMZW5ndGhDb250ZXh0IGNhcnJpZXMgYW4gYWRkaXRpb25hbCBGbG9hdFJlY3Qgb2YgdGhlIGN1
c3RvbSB2aWV3cG9ydCwgdG8gd2hpY2ggcGVyY2VudGFnZXMgYXJlIHJlc29sdmVkLCBpZiBzcGVj
aWZpZWQuCisKKyAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8ga2lsbCBzZXZlcmFsIGR1cGxpY2F0
ZXMgb2YgdGhlIHNhbWUgY29kZSwgd2hpY2ggaGFuZGxlcyBvYmplY3RCb3VuZGluZ0JveCBtb2Rl
IGZvciBncmFkaWVudHMvcGF0dGVybnMvbWFza3MvZXRjLi4KKyAgICAgICAgQSBmb2xsb3ctdXAg
cGF0Y2ggd2lsbCBjb252ZXJ0IGZpbHRlcnMgdG8gdXNlIHRoZSBuZXcgU1ZHTGVuZ3RoQ29udGV4
dDo6cmVzb2x2ZVJlY3RhbmdsZSBjb2RlIGFzIHdlbGwuCisKKyAgICAgICAgVGhpcyBpcyBhIHBy
ZXBhcmF0aW9uIGZvciBidWcgMTA0MzAsIHRvIGZpeCBmZUltYWdlICsgb2JqZWN0Qm91bmRpbmdC
b3ggc3VwcG9ydCB3aGVuIHJlbmRlcmluZyByZWZlcmVuY2VkIGVsZW1lbnRzLCBpbnN0ZWFkIG9m
IGZpbGVzLgorCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFueSB0ZXN0cyB5ZXQuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudDo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUxpbmVhckdyYWRpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUxpbmVhckdyYWRpZW50OjpncmFkaWVudFVuaXRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
Y3VsYXRlUGF0dGVybkJvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjpidWlsZFRpbGVJbWFnZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpncmFkaWVudFVuaXRz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6d3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL0dyYWRp
ZW50QXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1dGVzOjpH
cmFkaWVudEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1dGVz
OjpncmFkaWVudFVuaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50QXR0cmlidXRlczo6
c2V0R3JhZGllbnRVbml0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEF0dHJpYnV0ZXM6
Omhhc0dyYWRpZW50VW5pdHMpOgorICAgICAgICAqIHN2Zy9QYXR0ZXJuQXR0cmlidXRlcy5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0dGVybkF0dHJpYnV0ZXM6OlBhdHRlcm5BdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm5BdHRyaWJ1dGVzOjpwYXR0ZXJuVW5pdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UGF0dGVybkF0dHJpYnV0ZXM6OnBhdHRlcm5Db250ZW50VW5pdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0dGVybkF0dHJpYnV0ZXM6OnNldFBhdHRlcm5Vbml0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuQXR0cmlidXRlczo6c2V0UGF0dGVybkNvbnRlbnRVbml0
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuQXR0cmlidXRlczo6aGFzUGF0dGVyblVuaXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm5BdHRyaWJ1dGVzOjpoYXNQYXR0ZXJuQ29udGVu
dFVuaXRzKToKKyAgICAgICAgKiBzdmcvU1ZHQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHN2Zy9T
VkdFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpvcGVyYXRvciBTVkdM
ZW5ndGhDb250ZXh0KToKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJCb3VuZGluZ0JveCk6CisgICAg
ICAgICogc3ZnL1NWR0xlbmd0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGg6OlNW
R0xlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGg6OnVuaXRNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0xlbmd0aDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVu
Z3RoOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGg6OmNvbnZlcnRUb1Nw
ZWNpZmllZFVuaXRzKToKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoLmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMZW5ndGg6OmJsZW5kKToKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4dDo6U1ZHTGVuZ3Ro
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVj
dGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlTGVuZ3RoKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZVRvVXNlclVu
aXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZy
b21Vc2VyVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVy
dFZhbHVlRnJvbVVzZXJVbml0c1RvUGVyY2VudGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdM
ZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tUGVyY2VudGFnZVRvVXNlclVuaXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5p
dHNUb0VNUyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFs
dWVGcm9tRU1TVG9Vc2VyVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4
dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRVhTKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21FWFNUb1VzZXJVbml0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0OjpkZXRlcm1pbmVWaWV3cG9ydCk6CisgICAgICAg
ICogc3ZnL1NWR0xlbmd0aENvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdM
ZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlKToKKyAgICAgICAgKiBzdmcvU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50
RWxlbWVudDo6Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKToKKyAgICAg
ICAgKiBzdmcvU1ZHTWFza0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0Vs
ZW1lbnQ6Om1hc2tCb3VuZGluZ0JveCk6CisgICAgICAgICogc3ZnL1NWR1BhdHRlcm5FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50Ojpjb2xsZWN0UGF0dGVy
bkF0dHJpYnV0ZXMpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3Jh
ZGllbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxl
bWVudDo6Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMpOgorCiAyMDExLTExLTA4
ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIFN3
aXRjaCBTVkdJbWFnZSBjYWNoZSB0byBzdG9yZSBJbWFnZUJ1ZmZlcnMgaW5zdGVhZCBvZiB3aG9s
ZSBTVkdJbWFnZXMsIGluY2x1ZGluZyBhIERPTS9SZW5kZXIgdHJlZQpJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3MzgsNiArMTczOCw3IEBAIElGIChFTkFCTEVfU1ZHKQog
ICAgICAgICBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwCiAgICAgICAgIHN2Zy9TVkdMYW5nU3BhY2Uu
Y3BwCiAgICAgICAgIHN2Zy9TVkdMZW5ndGguY3BwCisgICAgICAgIHN2Zy9TVkdMZW5ndGhDb250
ZXh0LmNwcAogICAgICAgICBzdmcvU1ZHTGVuZ3RoTGlzdC5jcHAKICAgICAgICAgc3ZnL1NWR0xp
bmVFbGVtZW50LmNwcAogICAgICAgICBzdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcApJ
bmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5OTUyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTM3NDMs
NiArMzc0Myw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xhbmdTcGFjZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoQ29udGV4dC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0xlbmd0aExpc3QuaCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiA5OTUyNSkKKysr
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTI1OTUsNiArMjU5
NSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHN2Zy9TVkdJbWFnZUxvYWRlci5oIFwKICAgICBzdmcv
U1ZHTGFuZ1NwYWNlLmggXAogICAgIHN2Zy9TVkdMZW5ndGguaCBcCisgICAgc3ZnL1NWR0xlbmd0
aENvbnRleHQuaCBcCiAgICAgc3ZnL1NWR0xlbmd0aExpc3QuaCBcCiAgICAgc3ZnL1NWR0xpbmVh
ckdyYWRpZW50RWxlbWVudC5oIFwKICAgICBzdmcvU1ZHTGluZUVsZW1lbnQuaCBcCkBAIC0zNDYz
LDYgKzM0NjQsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAg
ICAgICAgc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAgXAogICAgICAgICAgICAgICBzdmcvU1ZHTGFu
Z1NwYWNlLmNwcCBcCiAgICAgICAgICAgICAgIHN2Zy9TVkdMZW5ndGguY3BwIFwKKyAgICAgICAg
ICAgICAgc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwIFwKICAgICAgICAgICAgICAgc3ZnL1NWR0xl
bmd0aExpc3QuY3BwIFwKICAgICAgICAgICAgICAgc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVu
dC5jcHAgXAogICAgICAgICAgICAgICBzdmcvU1ZHTGluZUVsZW1lbnQuY3BwIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xMDk2LDYgKzEwOTYsNyBAQAogICAgICAgICAgICAgJ3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaCcsCiAgICAgICAgICAgICAnc3ZnL1NWR0VsZW1lbnQu
aCcsCiAgICAgICAgICAgICAnc3ZnL1NWR0xlbmd0aC5oJywKKyAgICAgICAgICAgICdzdmcvU1ZH
TGVuZ3RoQ29udGV4dC5oJywKICAgICAgICAgICAgICdzdmcvU1ZHTGVuZ3RoTGlzdC5oJywKICAg
ICAgICAgICAgICdzdmcvU1ZHTG9jYXRhYmxlLmgnLAogICAgICAgICAgICAgJ3N2Zy9TVkdNYXRy
aXguaCcsCkBAIC02MDYyLDYgKzYwNjMsNyBAQAogICAgICAgICAgICAgJ3N2Zy9TVkdMYW5nU3Bh
Y2UuY3BwJywKICAgICAgICAgICAgICdzdmcvU1ZHTGFuZ1NwYWNlLmgnLAogICAgICAgICAgICAg
J3N2Zy9TVkdMZW5ndGguY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHTGVuZ3RoQ29udGV4dC5j
cHAnLAogICAgICAgICAgICAgJ3N2Zy9TVkdMZW5ndGhMaXN0LmNwcCcsCiAgICAgICAgICAgICAn
c3ZnL1NWR0xpbmVFbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR0xpbmVFbGVtZW50
LmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oJKHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTY2NTM0LDYgKzY2NTM0LDEwIEBACiAJCQkJ
PgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN2Z1xTVkdMZW5n
dGhDb250ZXh0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN2Z1xTVkdMZW5ndGhMaXN0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3MTMsNiArMTcxMyw4IEBACiAJCTZFQkYwRTc3
MTJBOTg2ODgwMERCMTcwOSAvKiBKU09FU1RleHR1cmVGbG9hdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVCRjBFNzUxMkE5ODY4ODAwREIxNzA5IC8q
IEpTT0VTVGV4dHVyZUZsb2F0LmggKi87IH07CiAJCTZFRThBNzcyMTBGODAzRjMwMDVBNEEyNCAv
KiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xD
b250ZXh0QXR0cmlidXRlcy5jcHAgKi87IH07CiAJCTZFRThBNzczMTBGODAzRjMwMDVBNEEyNCAv
KiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFRThBNzcxMTBGODAzRjMwMDVBNEEyNCAvKiBKU1dlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMuaCAqLzsgfTsKKwkJNzEzNDQ5NkQxNDY5NDFCMzAwNzIwMzEyIC8qIFNW
R0xlbmd0aENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzEzNDQ5NkIxNDY5NDFCMzAwNzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQuY3Bw
ICovOyB9OworCQk3MTM0NDk2RTE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzEzNDQ5NkMx
NDY5NDFCMzAwNzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUNDQjQ5QzE0NDgyNEFDMDBDNjc2RDYg
LyogSW1hZ2VCeVNpemVDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MUNDQjQ5QTE0NDgyNEFDMDBDNjc2RDYgLyogSW1hZ2VCeVNpemVDYWNo
ZS5jcHAgKi87IH07CiAJCTcxQ0NCNDlEMTQ0ODI0QUMwMEM2NzZENiAvKiBJbWFnZUJ5U2l6ZUNh
Y2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUND
QjQ5QjE0NDgyNEFDMDBDNjc2RDYgLyogSW1hZ2VCeVNpemVDYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRkI5NjdCMTM4M0Q2NDYwMEFD
OEE0QyAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUZCOTY3QTEzODNENjQ2MDBB
QzhBNEMgLyogU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04OTE0LDYgKzg5MTYs
OCBAQAogCQk2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MDkgLyogSlNPRVNUZXh0dXJlRmxvYXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPRVNUZXh0dXJlRmxvYXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVFOEE3NzAxMEY4MDNGMzAwNUE0QTI0IC8qIEpT
V2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENvbnRleHRBdHRy
aWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xDb250ZXh0
QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MTM0NDk2QjE0Njk0
MUIzMDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdMZW5ndGhDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzEzNDQ5NkMxNDY5NDFCMzAwNzIwMzEyIC8qIFNWR0xlbmd0aENvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTGVuZ3RoQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUNDQjQ5QTE0NDgyNEFDMDBDNjc2RDYgLyog
SW1hZ2VCeVNpemVDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ5U2l6ZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFD
Q0I0OUIxNDQ4MjRBQzAwQzY3NkQ2IC8qIEltYWdlQnlTaXplQ2FjaGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCeVNpemVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MUZCOTY3QTEzODNENjQ2MDBBQzhBNEMgLyogU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvblByb3BlcnR5VGVhck9mZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xODc3MSw2ICsxODc3NSw4IEBACiAJCQkJQjIyMjc4OUMwRDAwQkYy
MDAwNzFCNzgyIC8qIFNWR0xlbmd0aC5jcHAgKi8sCiAJCQkJQjIyMjc4OUQwRDAwQkYyMDAwNzFC
NzgyIC8qIFNWR0xlbmd0aC5oICovLAogCQkJCUIyMjI3ODlFMEQwMEJGMjAwMDcxQjc4MiAvKiBT
VkdMZW5ndGguaWRsICovLAorCQkJCTcxMzQ0OTZCMTQ2OTQxQjMwMDcyMDMxMiAvKiBTVkdMZW5n
dGhDb250ZXh0LmNwcCAqLywKKwkJCQk3MTM0NDk2QzE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVu
Z3RoQ29udGV4dC5oICovLAogCQkJCUIyMjI3ODlGMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdMZW5n
dGhMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhBMDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHTGVuZ3Ro
TGlzdC5oICovLAogCQkJCUIyMjI3OEExMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdMZW5ndGhMaXN0
LmlkbCAqLywKQEAgLTI0NjI3LDYgKzI0NjMzLDcgQEAKIAkJCQkzMTY5Mzc5QzE0NjA5QzZDMDBD
MDEzNjIgLyogRHJhZ1Nlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlGOTEwMTQ2NDQx
RjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NzZGMzZFQjE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJpdHlDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MTM0NDk2RTE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkBAIC0yNzQ4NSw2ICsyNzQ5Miw3IEBACiAJCQkJQ0RFQTc2MzQxNDYwQjU2
RjAwOEIzMUYxIC8qIENsb2NrR2VuZXJpYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREVBNzYz
NTE0NjBCNzFBMDA4QjMxRjEgLyogQ2xvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RjM2
RUExNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk3MTM0NDk2RDE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29udGV4dC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkocmV2aXNpb24gOTk1MjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50OjphcHBseVJlcwogICAgIC8vIFNwZWM6IFdoZW4gdGhlIGdlb21ldHJ5IG9m
IHRoZSBhcHBsaWNhYmxlIGVsZW1lbnQgaGFzIG5vIHdpZHRoIG9yIGhlaWdodCBhbmQgb2JqZWN0
Qm91bmRpbmdCb3ggaXMgc3BlY2lmaWVkLAogICAgIC8vIHRoZW4gdGhlIGdpdmVuIGVmZmVjdCAo
ZS5nLiBhIGdyYWRpZW50IG9yIGEgZmlsdGVyKSB3aWxsIGJlIGlnbm9yZWQuCiAgICAgRmxvYXRS
ZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0JveCgpOwotICAg
IGlmIChib3VuZGluZ0JveE1vZGUoKSAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCisg
ICAgaWYgKGdyYWRpZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fZ3JhZGllbnQuY29udGFpbnMob2JqZWN0KSkKQEAg
LTE4MSw5ICsxODEsOSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFwcGx5UmVz
CiAgICAgICAgIC8vIHJlc291cmNlLCBzbyBkb24ndCBhcHBseSBpdCBoZXJlLiBGb3Igbm9uLUNH
IHBsYXRmb3Jtcywgd2Ugd2FudCB0aGUgdGV4dCBib3VuZGluZwogICAgICAgICAvLyBib3ggYXBw
bGllZCB0byB0aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3JtIG5vdywgc28gdGhlIGdyYWRpZW50
IHNoYWRlciBjYW4gdXNlIGl0LgogI2lmIFVTRShDRykKLSAgICAgICAgaWYgKGJvdW5kaW5nQm94
TW9kZSgpICYmICFvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkgJiYgIWlzUGFpbnRpbmdUZXh0
KSB7CisgICAgICAgIGlmIChncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5J
VF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmICFvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkg
JiYgIWlzUGFpbnRpbmdUZXh0KSB7CiAjZWxzZQotICAgICAgICBpZiAoYm91bmRpbmdCb3hNb2Rl
KCkgJiYgIW9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoZ3JhZGll
bnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WCAmJiAhb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKSB7CiAjZW5kaWYKICAgICAgICAgICAg
IGdyYWRpZW50RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmplY3RCb3VuZGlu
Z0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CiAgICAgICAgICAgICBncmFkaWVudERh
dGEtPnVzZXJzcGFjZVRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91bmRpbmdCb3gu
d2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwpAQCAtMjUwLDcgKzI1MCw3IEBA
IHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGwKICAgICAgICAgICAgIGNh
bGN1bGF0ZUdyYWRpZW50VHJhbnNmb3JtKGdyYWRpZW50VHJhbnNmb3JtKTsKIAogICAgICAgICAg
ICAgRmxvYXRSZWN0IHRhcmdldFJlY3Q7Ci0gICAgICAgICAgICBncmFkaWVudERhdGEtPmdyYWRp
ZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNsaXBUb1RleHRNYXNrKGNvbnRleHQsIG1f
aW1hZ2VCdWZmZXIsIHRhcmdldFJlY3QsIG9iamVjdCwgYm91bmRpbmdCb3hNb2RlKCksIGdyYWRp
ZW50VHJhbnNmb3JtKSk7CisgICAgICAgICAgICBncmFkaWVudERhdGEtPmdyYWRpZW50LT5zZXRH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKGNsaXBUb1RleHRNYXNrKGNvbnRleHQsIG1faW1hZ2VCdWZm
ZXIsIHRhcmdldFJlY3QsIG9iamVjdCwgZ3JhZGllbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCwgZ3JhZGllbnRUcmFuc2Zvcm0pKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudERhdGEtPmdyYWRpZW50
KTsKIAogICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodGFyZ2V0UmVjdCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuaAkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhZGRTdG9wcyhHcmFkaWVu
dERhdGEqLCBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBT
VkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIGdyYWRpZW50VW5pdHMoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGNhbGN1bGF0ZUdyYWRpZW50VHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhTVkdHcmFk
aWVudEVsZW1lbnQqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJ1aWxkR3JhZGllbnQoR3JhZGll
bnREYXRhKiwgU1ZHR3JhZGllbnRFbGVtZW50KikgY29uc3QgPSAwOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUxpbmVhckdyYWRpZW50LmgJKHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3Vy
Y2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CiAg
ICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKIAotICAgIHZp
cnR1YWwgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMu
Ym91bmRpbmdCb3hNb2RlKCk7IH0KKyAgICB2aXJ0dWFsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5
cGUgZ3JhZGllbnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5ncmFkaWVudFVu
aXRzKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsgdHJhbnNmb3JtID0gbV9hdHRyaWJ1dGVzLmdyYWRp
ZW50VHJhbnNmb3JtKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY29sbGVjdEdyYWRpZW50QXR0cmli
dXRlcyhTVkdHcmFkaWVudEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVu
dChHcmFkaWVudERhdGEqLCBTVkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHAJKHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3
ICs5Niw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc28KICAgICAv
LyBTcGVjOiBXaGVuIHRoZSBnZW9tZXRyeSBvZiB0aGUgYXBwbGljYWJsZSBlbGVtZW50IGhhcyBu
byB3aWR0aCBvciBoZWlnaHQgYW5kIG9iamVjdEJvdW5kaW5nQm94IGlzIHNwZWNpZmllZCwKICAg
ICAvLyB0aGVuIHRoZSBnaXZlbiBlZmZlY3QgKGUuZy4gYSBncmFkaWVudCBvciBhIGZpbHRlcikg
d2lsbCBiZSBpZ25vcmVkLgogICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCA9IG9iamVj
dC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmJvdW5kaW5nQm94
TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICBpZiAobV9hdHRyaWJ1
dGVzLnBhdHRlcm5Vbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RC
T1VORElOR0JPWCAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIGlmICghbV9wYXR0ZXJuLmNvbnRhaW5zKG9iamVjdCkpCkBAIC0yMDgs
MTcgKzIwOCw3IEBAIHN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IGNhbGN1bGF0ZVBhdHRlcm4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNW
R1BhdHRlcm5FbGVtZW50KiBwYXR0ZXJuRWxlbWVudCkKIHsKICAgICBBU1NFUlQocGF0dGVybkVs
ZW1lbnQpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoYXR0cmlidXRlcy54KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9i
amVjdEJvdW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy55KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9i
amVjdEJvdW5kaW5nQm94LmhlaWdodCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMud2lkdGgoKS52YWx1ZUFzUGVyY2VudGFnZSgp
ICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGVzLmhlaWdodCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0Jv
eC5oZWlnaHQoKSk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KGF0dHJpYnV0ZXMueCgpLnZhbHVl
KHBhdHRlcm5FbGVtZW50KSwKLSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMueSgpLnZh
bHVlKHBhdHRlcm5FbGVtZW50KSwKLSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMud2lk
dGgoKS52YWx1ZShwYXR0ZXJuRWxlbWVudCksCi0gICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVzLmhlaWdodCgpLnZhbHVlKHBhdHRlcm5FbGVtZW50KSk7CisgICAgcmV0dXJuIFNWR0xlbmd0
aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGUocGF0dGVybkVsZW1lbnQsIGF0dHJpYnV0ZXMucGF0
dGVyblVuaXRzKCksIG9iamVjdEJvdW5kaW5nQm94LCBhdHRyaWJ1dGVzLngoKSwgYXR0cmlidXRl
cy55KCksIGF0dHJpYnV0ZXMud2lkdGgoKSwgYXR0cmlidXRlcy5oZWlnaHQoKSk7CiB9CiAKIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFRpbGVJbWFnZVRyYW5zZm9ybShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLApAQCAtMjQwLDcgKzIzMCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjpidWlsZFRpbGUKICAgICAvLyBBcHBseSB2aWV3Qm94L29iamVjdEJvdW5k
aW5nQm94IHRyYW5zZm9ybWF0aW9ucy4KICAgICBpZiAoIXZpZXdCb3hDVE0uaXNJZGVudGl0eSgp
KQogICAgICAgICB0aWxlSW1hZ2VUcmFuc2Zvcm0gPSB2aWV3Qm94Q1RNOwotICAgIGVsc2UgaWYg
KGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlQ29udGVudCgpKQorICAgIGVsc2UgaWYgKGF0dHJp
YnV0ZXMucGF0dGVybkNvbnRlbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQ
RV9PQkpFQ1RCT1VORElOR0JPWCkKICAgICAgICAgdGlsZUltYWdlVHJhbnNmb3JtLnNjYWxlKG9i
amVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpKTsKIAog
ICAgIHJldHVybiB0cnVlOwpAQCAtMjcxLDcgKzI2MSw3IEBAIFBhc3NPd25QdHI8SW1hZ2VCdWZm
ZXI+IFJlbmRlclNWR1Jlc291cmMKICAgICAgICAgdGlsZUltYWdlQ29udGV4dC0+Y29uY2F0Q1RN
KHRpbGVJbWFnZVRyYW5zZm9ybSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGVudFRyYW5z
Zm9ybWF0aW9uOwotICAgIGlmIChhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZUNvbnRlbnQoKSkK
KyAgICBpZiAoYXR0cmlidXRlcy5wYXR0ZXJuQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVz
OjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQogICAgICAgICBjb250ZW50VHJhbnNm
b3JtYXRpb24gPSB0aWxlSW1hZ2VUcmFuc2Zvcm07CiAKICAgICAvLyBEcmF3IHRoZSBjb250ZW50
IGludG8gdGhlIEltYWdlQnVmZmVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgJ
KHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CiAgICAgc3RhdGljIFJlbmRlclNW
R1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKIAotICAgIHZpcnR1YWwgYm9vbCBib3VuZGlu
Z0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCk7
IH0KKyAgICB2aXJ0dWFsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgZ3JhZGllbnRVbml0cygp
IGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5ncmFkaWVudFVuaXRzKCk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pIHsgdHJhbnNmb3JtID0gbV9hdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCk7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgY29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhTVkdHcmFkaWVudEVs
ZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChHcmFkaWVudERhdGEqLCBT
VkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gOTk1MjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OTUsMTQgKzQ5NSw5IEBAIHN0YXRpYyB2b2lkIHdyaXRlQ2hp
bGRyZW4oVGV4dFN0cmVhbSYgdHMKICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsg
MSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU3RyaW5nIGJvdW5kaW5nQm94TW9kZVN0cmluZyhib29s
IGJvdW5kaW5nQm94TW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZUNvbW1vbkdyYWRpZW50
UHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgU1ZHU3ByZWFkTWV0aG9kVHlwZSBzcHJlYWRNZXRo
b2QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRUcmFuc2Zvcm0sIFNWR1VuaXRUeXBl
czo6U1ZHVW5pdFR5cGUgZ3JhZGllbnRVbml0cykKIHsKLSAgICByZXR1cm4gYm91bmRpbmdCb3hN
b2RlID8gIm9iamVjdEJvdW5kaW5nQm94IiA6ICJ1c2VyU3BhY2VPblVzZSI7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgdm9pZCB3cml0ZUNvbW1vbkdyYWRpZW50UHJvcGVydGllcyhUZXh0U3RyZWFtJiB0
cywgU1ZHU3ByZWFkTWV0aG9kVHlwZSBzcHJlYWRNZXRob2QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgZ3JhZGllbnRUcmFuc2Zvcm0sIGJvb2wgYm91bmRpbmdCb3hNb2RlKQotewotICAgIHdyaXRl
TmFtZVZhbHVlUGFpcih0cywgImdyYWRpZW50VW5pdHMiLCBib3VuZGluZ0JveE1vZGVTdHJpbmco
Ym91bmRpbmdCb3hNb2RlKSk7CisgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAiZ3JhZGllbnRV
bml0cyIsIGdyYWRpZW50VW5pdHMpOwogCiAgICAgaWYgKHNwcmVhZE1ldGhvZCAhPSBTVkdTcHJl
YWRNZXRob2RQYWQpCiAgICAgICAgIHRzIDw8ICIgW3NwcmVhZE1ldGhvZD0iIDw8IHNwcmVhZE1l
dGhvZCA8PCAiXSI7CkBAIC01NjIsOCArNTU3LDggQEAgdm9pZCB3cml0ZVNWR1Jlc291cmNlQ29u
dGFpbmVyKFRleHRTdHJlYQogICAgICAgICBQYXR0ZXJuQXR0cmlidXRlcyBhdHRyaWJ1dGVzOwog
ICAgICAgICBzdGF0aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KHBhdHRlcm4tPm5vZGUoKSkt
PmNvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKIAotICAgICAgICB3cml0ZU5h
bWVWYWx1ZVBhaXIodHMsICJwYXR0ZXJuVW5pdHMiLCBib3VuZGluZ0JveE1vZGVTdHJpbmcoYXR0
cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSkpOwotICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIo
dHMsICJwYXR0ZXJuQ29udGVudFVuaXRzIiwgYm91bmRpbmdCb3hNb2RlU3RyaW5nKGF0dHJpYnV0
ZXMuYm91bmRpbmdCb3hNb2RlQ29udGVudCgpKSk7CisgICAgICAgIHdyaXRlTmFtZVZhbHVlUGFp
cih0cywgInBhdHRlcm5Vbml0cyIsIGF0dHJpYnV0ZXMucGF0dGVyblVuaXRzKCkpOworICAgICAg
ICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwYXR0ZXJuQ29udGVudFVuaXRzIiwgYXR0cmlidXRl
cy5wYXR0ZXJuQ29udGVudFVuaXRzKCkpOwogCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBhdHRyaWJ1dGVzLnBhdHRlcm5UcmFuc2Zvcm0oKTsKICAgICAgICAgaWYgKCF0cmFu
c2Zvcm0uaXNJZGVudGl0eSgpKQpAQCAtNTc4LDcgKzU3Myw3IEBAIHZvaWQgd3JpdGVTVkdSZXNv
dXJjZUNvbnRhaW5lcihUZXh0U3RyZWEKIAogICAgICAgICBMaW5lYXJHcmFkaWVudEF0dHJpYnV0
ZXMgYXR0cmlidXRlczsKICAgICAgICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5jb2xsZWN0R3Jh
ZGllbnRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICB3cml0ZUNvbW1vbkdyYWRpZW50
UHJvcGVydGllcyh0cywgYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSwgYXR0cmlidXRlcy5ncmFk
aWVudFRyYW5zZm9ybSgpLCBhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsKKyAgICAgICAg
d3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRpZXModHMsIGF0dHJpYnV0ZXMuc3ByZWFkTWV0aG9k
KCksIGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKSwgYXR0cmlidXRlcy5ncmFkaWVudFVu
aXRzKCkpOwogCiAgICAgICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludDsKICAgICAgICAgRmxvYXRQ
b2ludCBlbmRQb2ludDsKQEAgLTU5NCw3ICs1ODksNyBAQCB2b2lkIHdyaXRlU1ZHUmVzb3VyY2VD
b250YWluZXIoVGV4dFN0cmVhCiAKICAgICAgICAgUmFkaWFsR3JhZGllbnRBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXM7CiAgICAgICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+Y29sbGVjdEdyYWRpZW50
QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgd3JpdGVDb21tb25HcmFkaWVudFByb3Bl
cnRpZXModHMsIGF0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCksIGF0dHJpYnV0ZXMuZ3JhZGllbnRU
cmFuc2Zvcm0oKSwgYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7CisgICAgICAgIHdyaXRl
Q29tbW9uR3JhZGllbnRQcm9wZXJ0aWVzKHRzLCBhdHRyaWJ1dGVzLnNwcmVhZE1ldGhvZCgpLCBh
dHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCksIGF0dHJpYnV0ZXMuZ3JhZGllbnRVbml0cygp
KTsKIAogICAgICAgICBGbG9hdFBvaW50IGZvY2FsUG9pbnQ7CiAgICAgICAgIEZsb2F0UG9pbnQg
Y2VudGVyUG9pbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvR3JhZGllbnRBdHRyaWJ1dGVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL0dyYWRpZW50QXR0cmlidXRlcy5o
CShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9HcmFkaWVudEF0dHJpYnV0
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTYgKzI5LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIHN0cnVjdCBHcmFkaWVudEF0dHJpYnV0ZXMgewogICAgIEdyYWRpZW50QXR0cmlidXRlcygp
CiAgICAgICAgIDogbV9zcHJlYWRNZXRob2QoU1ZHU3ByZWFkTWV0aG9kUGFkKQotICAgICAgICAs
IG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCisgICAgICAgICwgbV9ncmFkaWVudFVuaXRzKFNWR1Vu
aXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkKICAgICAgICAgLCBtX3Nw
cmVhZE1ldGhvZFNldChmYWxzZSkKLSAgICAgICAgLCBtX2JvdW5kaW5nQm94TW9kZVNldChmYWxz
ZSkKKyAgICAgICAgLCBtX2dyYWRpZW50VW5pdHNTZXQoZmFsc2UpCiAgICAgICAgICwgbV9ncmFk
aWVudFRyYW5zZm9ybVNldChmYWxzZSkKICAgICAgICAgLCBtX3N0b3BzU2V0KGZhbHNlKQogICAg
IHsKICAgICB9CiAKICAgICBTVkdTcHJlYWRNZXRob2RUeXBlIHNwcmVhZE1ldGhvZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9Ci0gICAgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBj
b25zdCB7IHJldHVybiBtX2JvdW5kaW5nQm94TW9kZTsgfQorICAgIFNWR1VuaXRUeXBlczo6U1ZH
VW5pdFR5cGUgZ3JhZGllbnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnRVbml0czsg
fQogICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fZ3JhZGllbnRUcmFuc2Zvcm07IH0KICAgICBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9y
U3RvcD4mIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQogCkBAIC00OCwxMCArNDgs
MTAgQEAgc3RydWN0IEdyYWRpZW50QXR0cmlidXRlcyB7CiAgICAgICAgIG1fc3ByZWFkTWV0aG9k
U2V0ID0gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIHNldEJvdW5kaW5nQm94TW9kZShib29sIHZh
bHVlKQorICAgIHZvaWQgc2V0R3JhZGllbnRVbml0cyhTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBl
IHVuaXRUeXBlKQogICAgIHsKLSAgICAgICAgbV9ib3VuZGluZ0JveE1vZGUgPSB2YWx1ZTsKLSAg
ICAgICAgbV9ib3VuZGluZ0JveE1vZGVTZXQgPSB0cnVlOworICAgICAgICBtX2dyYWRpZW50VW5p
dHMgPSB1bml0VHlwZTsKKyAgICAgICAgbV9ncmFkaWVudFVuaXRzU2V0ID0gdHJ1ZTsKICAgICB9
CiAKICAgICB2b2lkIHNldEdyYWRpZW50VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dmFsdWUpCkBAIC02NywyMCArNjcsMjAgQEAgc3RydWN0IEdyYWRpZW50QXR0cmlidXRlcyB7CiAg
ICAgfSAKIAogICAgIGJvb2wgaGFzU3ByZWFkTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9zcHJl
YWRNZXRob2RTZXQ7IH0KLSAgICBib29sIGhhc0JvdW5kaW5nQm94TW9kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYm91bmRpbmdCb3hNb2RlU2V0OyB9CisgICAgYm9vbCBoYXNHcmFkaWVudFVuaXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9ncmFkaWVudFVuaXRzU2V0OyB9CiAgICAgYm9vbCBoYXNHcmFkaWVu
dFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnRUcmFuc2Zvcm1TZXQ7IH0KICAg
ICBib29sIGhhc1N0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wc1NldDsgfQogCiBwcml2YXRl
OgogICAgIC8vIFByb3BlcnRpZXMKICAgICBTVkdTcHJlYWRNZXRob2RUeXBlIG1fc3ByZWFkTWV0
aG9kOwotICAgIGJvb2wgbV9ib3VuZGluZ0JveE1vZGU7CisgICAgU1ZHVW5pdFR5cGVzOjpTVkdV
bml0VHlwZSBtX2dyYWRpZW50VW5pdHM7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fZ3JhZGllbnRU
cmFuc2Zvcm07CiAgICAgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+IG1fc3RvcHM7CiAKICAg
ICAvLyBQcm9wZXJ0eSBzdGF0ZXMKICAgICBib29sIG1fc3ByZWFkTWV0aG9kU2V0IDogMTsKLSAg
ICBib29sIG1fYm91bmRpbmdCb3hNb2RlU2V0IDogMTsKKyAgICBib29sIG1fZ3JhZGllbnRVbml0
c1NldCA6IDE7CiAgICAgYm9vbCBtX2dyYWRpZW50VHJhbnNmb3JtU2V0IDogMTsKICAgICBib29s
IG1fc3RvcHNTZXQgOiAxOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9QYXR0ZXJuQXR0
cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9QYXR0ZXJuQXR0cmli
dXRlcy5oCShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9QYXR0ZXJuQXR0
cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIHN0cnVjdCBQYXR0ZXJu
QXR0cmlidXRlcyB7CiAgICAgICAgICwgbV9oZWlnaHQoKQogICAgICAgICAsIG1fdmlld0JveCgp
CiAgICAgICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkKLSAgICAgICAgLCBtX2JvdW5kaW5n
Qm94TW9kZSh0cnVlKQotICAgICAgICAsIG1fYm91bmRpbmdCb3hNb2RlQ29udGVudChmYWxzZSkK
KyAgICAgICAgLCBtX3BhdHRlcm5Vbml0cyhTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1gpCisgICAgICAgICwgbV9wYXR0ZXJuQ29udGVudFVuaXRzKFNWR1VuaXRU
eXBlczo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSkKICAgICAgICAgLCBtX3BhdHRlcm5D
b250ZW50RWxlbWVudCgwKQogICAgICAgICAsIG1feFNldChmYWxzZSkKICAgICAgICAgLCBtX3lT
ZXQoZmFsc2UpCkBAIC00NSw4ICs0NSw4IEBAIHN0cnVjdCBQYXR0ZXJuQXR0cmlidXRlcyB7CiAg
ICAgICAgICwgbV9oZWlnaHRTZXQoZmFsc2UpCiAgICAgICAgICwgbV92aWV3Qm94U2V0KGZhbHNl
KQogICAgICAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpb1NldChmYWxzZSkKLSAgICAgICAgLCBt
X2JvdW5kaW5nQm94TW9kZVNldChmYWxzZSkKLSAgICAgICAgLCBtX2JvdW5kaW5nQm94TW9kZUNv
bnRlbnRTZXQoZmFsc2UpCisgICAgICAgICwgbV9wYXR0ZXJuVW5pdHNTZXQoZmFsc2UpCisgICAg
ICAgICwgbV9wYXR0ZXJuQ29udGVudFVuaXRzU2V0KGZhbHNlKQogICAgICAgICAsIG1fcGF0dGVy
blRyYW5zZm9ybVNldChmYWxzZSkKICAgICAgICAgLCBtX3BhdHRlcm5Db250ZW50RWxlbWVudFNl
dChmYWxzZSkKICAgICB7CkBAIC01OCw4ICs1OCw4IEBAIHN0cnVjdCBQYXR0ZXJuQXR0cmlidXRl
cyB7CiAgICAgU1ZHTGVuZ3RoIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9CiAg
ICAgRmxvYXRSZWN0IHZpZXdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdCb3g7IH0KICAgICBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIHByZXNlcnZlQXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVy
biBtX3ByZXNlcnZlQXNwZWN0UmF0aW87IH0KLSAgICBib29sIGJvdW5kaW5nQm94TW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYm91bmRpbmdCb3hNb2RlOyB9Ci0gICAgYm9vbCBib3VuZGluZ0JveE1v
ZGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveE1vZGVDb250ZW50OyB9Cisg
ICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwYXR0ZXJuVW5pdHMoKSBjb25zdCB7IHJldHVy
biBtX3BhdHRlcm5Vbml0czsgfQorICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgcGF0dGVy
bkNvbnRlbnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybkNvbnRlbnRVbml0czsgfQog
ICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9w
YXR0ZXJuVHJhbnNmb3JtOyB9CiAgICAgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHBhdHRlcm5D
b250ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybkNvbnRlbnRFbGVtZW50OyB9
CiAKQEAgLTk5LDE2ICs5OSwxNiBAQCBzdHJ1Y3QgUGF0dGVybkF0dHJpYnV0ZXMgewogICAgICAg
ICBtX3ByZXNlcnZlQXNwZWN0UmF0aW9TZXQgPSB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgc2V0
Qm91bmRpbmdCb3hNb2RlKGJvb2wgdmFsdWUpCisgICAgdm9pZCBzZXRQYXR0ZXJuVW5pdHMoU1ZH
VW5pdFR5cGVzOjpTVkdVbml0VHlwZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fYm91bmRpbmdC
b3hNb2RlID0gdmFsdWU7Ci0gICAgICAgIG1fYm91bmRpbmdCb3hNb2RlU2V0ID0gdHJ1ZTsKKyAg
ICAgICAgbV9wYXR0ZXJuVW5pdHMgPSB2YWx1ZTsKKyAgICAgICAgbV9wYXR0ZXJuVW5pdHNTZXQg
PSB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgc2V0Qm91bmRpbmdCb3hNb2RlQ29udGVudChib29s
IHZhbHVlKQorICAgIHZvaWQgc2V0UGF0dGVybkNvbnRlbnRVbml0cyhTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9ib3VuZGluZ0JveE1vZGVDb250ZW50
ID0gdmFsdWU7Ci0gICAgICAgIG1fYm91bmRpbmdCb3hNb2RlQ29udGVudFNldCA9IHRydWU7Cisg
ICAgICAgIG1fcGF0dGVybkNvbnRlbnRVbml0cyA9IHZhbHVlOworICAgICAgICBtX3BhdHRlcm5D
b250ZW50VW5pdHNTZXQgPSB0cnVlOwogICAgIH0KIAogICAgIHZvaWQgc2V0UGF0dGVyblRyYW5z
Zm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHZhbHVlKQpAQCAtMTI5LDggKzEyOSw4IEBAIHN0
cnVjdCBQYXR0ZXJuQXR0cmlidXRlcyB7CiAgICAgYm9vbCBoYXNIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2hlaWdodFNldDsgfQogICAgIGJvb2wgaGFzVmlld0JveCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlld0JveFNldDsgfQogICAgIGJvb2wgaGFzUHJlc2VydmVBc3BlY3RSYXRpbygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJlc2VydmVBc3BlY3RSYXRpb1NldDsgfQotICAgIGJvb2wgaGFzQm91bmRp
bmdCb3hNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveE1vZGVTZXQ7IH0KLSAgICBi
b29sIGhhc0JvdW5kaW5nQm94TW9kZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5n
Qm94TW9kZUNvbnRlbnRTZXQ7IH0KKyAgICBib29sIGhhc1BhdHRlcm5Vbml0cygpIGNvbnN0IHsg
cmV0dXJuIG1fcGF0dGVyblVuaXRzU2V0OyB9CisgICAgYm9vbCBoYXNQYXR0ZXJuQ29udGVudFVu
aXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuQ29udGVudFVuaXRzU2V0OyB9CiAgICAgYm9v
bCBoYXNQYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3Jt
U2V0OyB9CiAgICAgYm9vbCBoYXNQYXR0ZXJuQ29udGVudEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX3BhdHRlcm5Db250ZW50RWxlbWVudFNldDsgfQogCkBAIC0xNDIsOCArMTQyLDggQEAgcHJp
dmF0ZToKICAgICBTVkdMZW5ndGggbV9oZWlnaHQ7CiAgICAgRmxvYXRSZWN0IG1fdmlld0JveDsK
ICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKLSAgICBi
b29sIG1fYm91bmRpbmdCb3hNb2RlOwotICAgIGJvb2wgbV9ib3VuZGluZ0JveE1vZGVDb250ZW50
OworICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wYXR0ZXJuVW5pdHM7CisgICAgU1ZH
VW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3BhdHRlcm5Db250ZW50VW5pdHM7CiAgICAgQWZmaW5l
VHJhbnNmb3JtIG1fcGF0dGVyblRyYW5zZm9ybTsKICAgICBjb25zdCBTVkdQYXR0ZXJuRWxlbWVu
dCogbV9wYXR0ZXJuQ29udGVudEVsZW1lbnQ7CiAKQEAgLTE1NCw4ICsxNTQsOCBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9oZWlnaHRTZXQgOiAxOwogICAgIGJvb2wgbV92aWV3Qm94U2V0IDogMTsK
ICAgICBib29sIG1fcHJlc2VydmVBc3BlY3RSYXRpb1NldCA6IDE7Ci0gICAgYm9vbCBtX2JvdW5k
aW5nQm94TW9kZVNldCA6IDE7Ci0gICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZUNvbnRlbnRTZXQg
OiAxOworICAgIGJvb2wgbV9wYXR0ZXJuVW5pdHNTZXQgOiAxOworICAgIGJvb2wgbV9wYXR0ZXJu
Q29udGVudFVuaXRzU2V0IDogMTsKICAgICBib29sIG1fcGF0dGVyblRyYW5zZm9ybVNldCA6IDE7
CiAgICAgYm9vbCBtX3BhdHRlcm5Db250ZW50RWxlbWVudFNldCA6IDE7CiB9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBA
QAogI2luY2x1ZGUgIlNWR0ltYWdlTG9hZGVyLmNwcCIKICNpbmNsdWRlICJTVkdMYW5nU3BhY2Uu
Y3BwIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5jcHAiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4
dC5jcHAiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5jcHAiCiAjaW5jbHVkZSAiU1ZHTGluZUVs
ZW1lbnQuY3BwIgogI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2Rl
ZmluZSBTVkdFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHTGVuZ3Ro
Q29udGV4dC5oIgogI2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgogI2luY2x1ZGUgIlNWR1BhcnNp
bmdFcnJvci5oIgogI2luY2x1ZGUgIlNWR1Byb3BlcnR5SW5mby5oIgpAQCAtNjIsNiArNjMsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0dyYWRpZW50U3RvcCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVGV4dENvbnRlbnQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgY29uc3Ry
dWN0IHRvIGFpZCByZWR1Y2luZyB0aGUgaW1wYWN0IG9mIGludHJvZHVjaW5nIFNWR0xlbmd0aENv
bnRleHQuCisgICAgLy8gSXQgd2lsbCBiZSByZW1vdmVkIG9uY2UgYWxsIGNvZGUgdGhhdCB1c2Vz
IHgoKS52YWx1ZSh0aGlzKSBpcyBnb25lLgorICAgIG9wZXJhdG9yIFNWR0xlbmd0aENvbnRleHQo
KSBjb25zdCB7IHJldHVybiBTVkdMZW5ndGhDb250ZXh0KHRoaXMpOyB9CisKICAgICAvLyBGb3Ig
U1ZHVGVzdHMKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAkocmV2aXNp
b24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsNyBAQCB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OmNo
aWxkcmVuQ2hhbmdlZChiCiAKIEZsb2F0UmVjdCBTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJCb3Vu
ZGluZ0JveChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KSBjb25zdAogeworICAg
IC8vIEZJWE1FOiBBIGZvbGxvdy11cCBwYXRjaCB3aWxsIG1ha2UgZmlsdGVycyB1c2UgU1ZHTGVu
Z3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZS4KICAgICBGbG9hdFJlY3QgZmlsdGVyQkJveDsK
ICAgICBpZiAoZmlsdGVyVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1gpCiAgICAgICAgIGZpbHRlckJCb3ggPSBGbG9hdFJlY3QoeCgpLnZhbHVl
QXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpICsgb2JqZWN0Qm91bmRp
bmdCb3gueCgpLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAJKHJldmlzaW9uIDk5NTI1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDE2ICsyNSwxMCBAQAogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiAjaW5jbHVkZSAiQ1NT
SGVscGVyLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJGbG9h
dENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgotI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCi0j
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR0V4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiU1ZHU1ZHRWxlbWVudC5oIgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTEzMyw3ICsxMjcsNyBAQCBTVkdMZW5ndGg6
OlNWR0xlbmd0aChTVkdMZW5ndGhNb2RlIG1vZGUsCiAgICAgc2V0VmFsdWVBc1N0cmluZyh2YWx1
ZUFzU3RyaW5nLCBlYyk7CiB9CiAKLVNWR0xlbmd0aDo6U1ZHTGVuZ3RoKGNvbnN0IFNWR0VsZW1l
bnQqIGNvbnRleHQsIGZsb2F0IHZhbHVlLCBTVkdMZW5ndGhNb2RlIG1vZGUsIFNWR0xlbmd0aFR5
cGUgdW5pdFR5cGUpCitTVkdMZW5ndGg6OlNWR0xlbmd0aChjb25zdCBTVkdMZW5ndGhDb250ZXh0
JiBjb250ZXh0LCBmbG9hdCB2YWx1ZSwgU1ZHTGVuZ3RoTW9kZSBtb2RlLCBTVkdMZW5ndGhUeXBl
IHVuaXRUeXBlKQogICAgIDogbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMoMCkKICAgICAsIG1fdW5p
dChzdG9yZVVuaXQobW9kZSwgdW5pdFR5cGUpKQogewpAQCAtMTg2LDk2ICsxODAsMzggQEAgU1ZH
TGVuZ3RoVHlwZSBTVkdMZW5ndGg6OnVuaXRUeXBlKCkgY29ucwogICAgIHJldHVybiBleHRyYWN0
VHlwZShtX3VuaXQpOwogfQogCi1mbG9hdCBTVkdMZW5ndGg6OnZhbHVlKGNvbnN0IFNWR0VsZW1l
bnQqIGNvbnRleHQpIGNvbnN0CitTVkdMZW5ndGhNb2RlIFNWR0xlbmd0aDo6dW5pdE1vZGUoKSBj
b25zdAoreworICAgIHJldHVybiBleHRyYWN0TW9kZShtX3VuaXQpOworfQorCitmbG9hdCBTVkdM
ZW5ndGg6OnZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgcmV0dXJuIHZhbHVlKGNvbnRleHQsIGVjKTsK
IH0KIAotZmxvYXQgU1ZHTGVuZ3RoOjp2YWx1ZShjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlJiBlYykgY29uc3QKK2Zsb2F0IFNWR0xlbmd0aDo6dmFsdWUoY29uc3QgU1ZH
TGVuZ3RoQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGNvbnZlcnRWYWx1ZVRvVXNlclVuaXRzKG1fdmFsdWVJblNwZWNpZmllZFVuaXRzLCBl
eHRyYWN0VHlwZShtX3VuaXQpLCBjb250ZXh0LCBlYyk7CisgICAgcmV0dXJuIGNvbnRleHQuY29u
dmVydFZhbHVlVG9Vc2VyVW5pdHMobV92YWx1ZUluU3BlY2lmaWVkVW5pdHMsIGV4dHJhY3RNb2Rl
KG1fdW5pdCksIGV4dHJhY3RUeXBlKG1fdW5pdCksIGVjKTsKIH0KIAotdm9pZCBTVkdMZW5ndGg6
OnNldFZhbHVlKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIGZsb2F0IHZhbHVlLCBTVkdMZW5n
dGhNb2RlIG1vZGUsIFNWR0xlbmd0aFR5cGUgdW5pdFR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
dm9pZCBTVkdMZW5ndGg6OnNldFZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmIGNvbnRleHQs
IGZsb2F0IHZhbHVlLCBTVkdMZW5ndGhNb2RlIG1vZGUsIFNWR0xlbmd0aFR5cGUgdW5pdFR5cGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1fdW5pdCA9IHN0b3JlVW5pdChtb2RlLCB1bml0
VHlwZSk7CiAgICAgc2V0VmFsdWUodmFsdWUsIGNvbnRleHQsIGVjKTsKIH0KIAotdm9pZCBTVkdM
ZW5ndGg6OnNldFZhbHVlKGZsb2F0IHZhbHVlLCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgU1ZHTGVuZ3RoOjpzZXRWYWx1ZShmbG9hdCB2YWx1ZSwg
Y29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAg
ICAgLy8gMTAwJSA9IDEwMC4wIGluc3RlYWQgb2YgMS4wIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMs
IHRoaXMgY291bGQgZXZlbnR1YWxseSBiZSBjaGFuZ2VkCiAgICAgaWYgKGV4dHJhY3RUeXBlKG1f
dW5pdCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2UpCiAgICAgICAgIHZhbHVlID0gdmFsdWUgLyAx
MDA7CiAKLSAgICBmbG9hdCBjb252ZXJ0ZWRWYWx1ZSA9IGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5p
dHModmFsdWUsIGV4dHJhY3RUeXBlKG1fdW5pdCksIGNvbnRleHQsIGVjKTsKKyAgICBmbG9hdCBj
b252ZXJ0ZWRWYWx1ZSA9IGNvbnRleHQuY29udmVydFZhbHVlRnJvbVVzZXJVbml0cyh2YWx1ZSwg
ZXh0cmFjdE1vZGUobV91bml0KSwgZXh0cmFjdFR5cGUobV91bml0KSwgZWMpOwogICAgIGlmICgh
ZWMpCiAgICAgICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gY29udmVydGVkVmFsdWU7CiB9
Ci0KLWZsb2F0IFNWR0xlbmd0aDo6Y29udmVydFZhbHVlVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUs
IFNWR0xlbmd0aFR5cGUgZnJvbVVuaXQsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIHN3aXRjaCAoZnJvbVVuaXQpIHsKLSAgICBjYXNl
IExlbmd0aFR5cGVVbmtub3duOgotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICBjYXNlIExlbmd0aFR5cGVOdW1iZXI6Ci0gICAgICAgIHJldHVy
biB2YWx1ZTsKLSAgICBjYXNlIExlbmd0aFR5cGVQWDoKLSAgICAgICAgcmV0dXJuIHZhbHVlOwot
ICAgIGNhc2UgTGVuZ3RoVHlwZVBlcmNlbnRhZ2U6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VmFs
dWVGcm9tUGVyY2VudGFnZVRvVXNlclVuaXRzKHZhbHVlIC8gMTAwLCBjb250ZXh0LCBlYyk7Ci0g
ICAgY2FzZSBMZW5ndGhUeXBlRU1TOgotICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbUVN
U1RvVXNlclVuaXRzKHZhbHVlLCBjb250ZXh0LCBlYyk7Ci0gICAgY2FzZSBMZW5ndGhUeXBlRVhT
OgotICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVuaXRzKHZhbHVlLCBj
b250ZXh0LCBlYyk7Ci0gICAgY2FzZSBMZW5ndGhUeXBlQ006Ci0gICAgICAgIHJldHVybiB2YWx1
ZSAqIGNzc1BpeGVsc1BlckluY2ggLyAyLjU0ZjsKLSAgICBjYXNlIExlbmd0aFR5cGVNTToKLSAg
ICAgICAgcmV0dXJuIHZhbHVlICogY3NzUGl4ZWxzUGVySW5jaCAvIDI1LjRmOwotICAgIGNhc2Ug
TGVuZ3RoVHlwZUlOOgotICAgICAgICByZXR1cm4gdmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoOwot
ICAgIGNhc2UgTGVuZ3RoVHlwZVBUOgotICAgICAgICByZXR1cm4gdmFsdWUgKiBjc3NQaXhlbHNQ
ZXJJbmNoIC8gNzI7Ci0gICAgY2FzZSBMZW5ndGhUeXBlUEM6Ci0gICAgICAgIHJldHVybiB2YWx1
ZSAqIGNzc1BpeGVsc1BlckluY2ggLyA2OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gMDsKLX0KLQotZmxvYXQgU1ZHTGVuZ3RoOjpjb252ZXJ0VmFsdWVGcm9t
VXNlclVuaXRzKGZsb2F0IHZhbHVlLCBTVkdMZW5ndGhUeXBlIHRvVW5pdCwgY29uc3QgU1ZHRWxl
bWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgc3dpdGNoICh0
b1VuaXQpIHsKLSAgICBjYXNlIExlbmd0aFR5cGVVbmtub3duOgotICAgICAgICBlYyA9IE5PVF9T
VVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIExlbmd0aFR5cGVOdW1i
ZXI6Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBjYXNlIExlbmd0aFR5cGVQZXJjZW50YWdl
OgotICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvUGVyY2VudGFnZSh2
YWx1ZSAqIDEwMCwgY29udGV4dCwgZWMpOwotICAgIGNhc2UgTGVuZ3RoVHlwZUVNUzoKLSAgICAg
ICAgcmV0dXJuIGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VNUyh2YWx1ZSwgY29udGV4dCwg
ZWMpOwotICAgIGNhc2UgTGVuZ3RoVHlwZUVYUzoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRWYWx1
ZUZyb21Vc2VyVW5pdHNUb0VYUyh2YWx1ZSwgY29udGV4dCwgZWMpOwotICAgIGNhc2UgTGVuZ3Ro
VHlwZVBYOgotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgY2FzZSBMZW5ndGhUeXBlQ006Ci0g
ICAgICAgIHJldHVybiB2YWx1ZSAqIDIuNTRmIC8gY3NzUGl4ZWxzUGVySW5jaDsKLSAgICBjYXNl
IExlbmd0aFR5cGVNTToKLSAgICAgICAgcmV0dXJuIHZhbHVlICogMjUuNGYgLyBjc3NQaXhlbHNQ
ZXJJbmNoOwotICAgIGNhc2UgTGVuZ3RoVHlwZUlOOgotICAgICAgICByZXR1cm4gdmFsdWUgLyBj
c3NQaXhlbHNQZXJJbmNoOwotICAgIGNhc2UgTGVuZ3RoVHlwZVBUOgotICAgICAgICByZXR1cm4g
dmFsdWUgKiA3MiAvIGNzc1BpeGVsc1BlckluY2g7Ci0gICAgY2FzZSBMZW5ndGhUeXBlUEM6Ci0g
ICAgICAgIHJldHVybiB2YWx1ZSAqIDYgLyBjc3NQaXhlbHNQZXJJbmNoOwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQogZmxvYXQgU1ZHTGVuZ3Ro
Ojp2YWx1ZUFzUGVyY2VudGFnZSgpIGNvbnN0CiB7CiAgICAgLy8gMTAwJSA9IDEwMC4wIGluc3Rl
YWQgb2YgMS4wIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoaXMgY291bGQgZXZlbnR1YWxseSBi
ZSBjaGFuZ2VkCkBAIC0zMjYsNyArMjYyLDcgQEAgdm9pZCBTVkdMZW5ndGg6Om5ld1ZhbHVlU3Bl
Y2lmaWVkVW5pdHModQogICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gdmFsdWU7CiB9CiAK
LXZvaWQgU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB0
eXBlLCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQg
U1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCB0eXBlLCBj
b25zdCBTVkdMZW5ndGhDb250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBpZiAodHlwZSA9PSBMZW5ndGhUeXBlVW5rbm93biB8fCB0eXBlID4gTGVuZ3RoVHlwZVBDKSB7
CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CkBAIC0zNDcsMTc3ICsyODMsNiBAQCB2
b2lkIFNWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMoCiAgICAgbV91bml0ID0gb3Jp
Z2luYWxVbml0QW5kVHlwZTsKIH0KIAotYm9vbCBTVkdMZW5ndGg6OmRldGVybWluZVZpZXdwb3J0
KGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIGZsb2F0JiB3aWR0aCwgZmxvYXQmIGhlaWdodCkg
Y29uc3QKLXsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIFRha2Ugc2l6ZSBmcm9tIG91dGVybW9zdCA8c3ZnPiBlbGVtZW50LgotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGNvbnRleHQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3VtZW50LT5kb2N1
bWVudEVsZW1lbnQoKSA9PSBjb250ZXh0KSB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5pc1NWRygp
KSB7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBjb250ZXh0LT5kb2N1bWVudCgpID8gY29u
dGV4dC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA6IDA7Ci0gICAgICAgICAgICBpZiAoIWZyYW1lKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gU1ZHcyBlbWJl
ZGRlZCB0aHJvdWdoIDxvYmplY3Q+IHJlc29sdmUgcGVyY2VudGFnZSB2YWx1ZXMgYWdhaW5zdCB0
aGUgb3duZXIgcmVuZGVyZXIgaW4gdGhlIGhvc3QgZG9jdW1lbnQuCi0gICAgICAgICAgICBpZiAo
UmVuZGVyUGFydCogb3duZXJSZW5kZXJlciA9IGZyYW1lLT5vd25lclJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgICAgICB3aWR0aCA9IG93bmVyUmVuZGVyZXItPndpZHRoKCk7Ci0gICAgICAgICAg
ICAgICAgaGVpZ2h0ID0gb3duZXJSZW5kZXJlci0+aGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KGRvY3VtZW50LT5yZW5kZXJlcigpKTsKLSAgICAgICAg
aWYgKCF2aWV3KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIEFsd2F5
cyByZXNvbHZlIHBlcmNlbnRhZ2VzIGFnYWluc3QgdGhlIHVuc2NhbGVkIHZpZXdwb3J0LCBhcyBh
Z3JlZWQgYWNyb3NzIGJyb3dzZXJzLgotICAgICAgICBmbG9hdCB6b29tID0gdmlldy0+c3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICB3aWR0aCA9IHZpZXctPnZpZXdXaWR0aCgpOwot
ICAgICAgICBoZWlnaHQgPSB2aWV3LT52aWV3SGVpZ2h0KCk7Ci0gICAgICAgIGlmICh6b29tICE9
IDEpIHsKLSAgICAgICAgICAgIHdpZHRoIC89IHpvb207Ci0gICAgICAgICAgICBoZWlnaHQgLz0g
em9vbTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBU
YWtlIHNpemUgZnJvbSBuZWFyZXN0IHZpZXdwb3J0IGVsZW1lbnQgKGNvbW1vbiBjYXNlOiBpbm5l
ciA8c3ZnPiBlbGVtZW50cykKLSAgICBTVkdFbGVtZW50KiB2aWV3cG9ydEVsZW1lbnQgPSBjb250
ZXh0LT52aWV3cG9ydEVsZW1lbnQoKTsKLSAgICBpZiAodmlld3BvcnRFbGVtZW50ICYmIHZpZXdw
b3J0RWxlbWVudC0+aXNTVkcoKSkgewotICAgICAgICBjb25zdCBTVkdTVkdFbGVtZW50KiBzdmcg
PSBzdGF0aWNfY2FzdDxjb25zdCBTVkdTVkdFbGVtZW50Kj4odmlld3BvcnRFbGVtZW50KTsKLSAg
ICAgICAgRmxvYXRSZWN0IHZpZXdCb3ggPSBzdmctPmN1cnJlbnRWaWV3Qm94UmVjdCgpOwotICAg
ICAgICBpZiAodmlld0JveC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHdpZHRoID0gc3ZnLT53
aWR0aCgpLnZhbHVlKHN2Zyk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBzdmctPmhlaWdodCgpLnZh
bHVlKHN2Zyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3aWR0aCA9IHZpZXdCb3gu
d2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHZpZXdCb3guaGVpZ2h0KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVGFrZSBzaXpl
IGZyb20gZW5jbG9zaW5nIG5vbi1TVkcgUmVuZGVyQm94IChjb21tb24gY2FzZTogaW5saW5lIFNW
RykKLSAgICBpZiAoIWNvbnRleHQtPnBhcmVudE5vZGUoKSB8fCBjb250ZXh0LT5wYXJlbnROb2Rl
KCktPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gY29udGV4dC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVy
IHx8ICFyZW5kZXJlci0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVu
ZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChyZW5kZXJlcik7Ci0gICAgd2lkdGggPSBib3gtPndp
ZHRoKCk7Ci0gICAgaGVpZ2h0ID0gYm94LT5oZWlnaHQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotZmxvYXQgU1ZHTGVuZ3RoOjpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9QZXJjZW50YWdl
KGZsb2F0IHZhbHVlLCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKLXsKLSAgICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgZmxvYXQgaGVpZ2h0ID0gMDsK
LSAgICBpZiAoIWRldGVybWluZVZpZXdwb3J0KGNvbnRleHQsIHdpZHRoLCBoZWlnaHQpKSB7Ci0g
ICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIHN3aXRjaCAoZXh0cmFjdE1vZGUobV91bml0KSkgewotICAgIGNhc2UgTGVuZ3RoTW9k
ZVdpZHRoOgotICAgICAgICByZXR1cm4gdmFsdWUgLyB3aWR0aCAqIDEwMDsKLSAgICBjYXNlIExl
bmd0aE1vZGVIZWlnaHQ6Ci0gICAgICAgIHJldHVybiB2YWx1ZSAvIGhlaWdodCAqIDEwMDsKLSAg
ICBjYXNlIExlbmd0aE1vZGVPdGhlcjoKLSAgICAgICAgcmV0dXJuIHZhbHVlIC8gKHNxcnRmKCh3
aWR0aCAqIHdpZHRoICsgaGVpZ2h0ICogaGVpZ2h0KSAvIDIpKSAqIDEwMDsKLSAgICB9OwotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWZsb2F0IFNWR0xl
bmd0aDo6Y29udmVydFZhbHVlRnJvbVBlcmNlbnRhZ2VUb1VzZXJVbml0cyhmbG9hdCB2YWx1ZSwg
Y29uc3QgU1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0g
ICAgZmxvYXQgd2lkdGggPSAwOwotICAgIGZsb2F0IGhlaWdodCA9IDA7Ci0gICAgaWYgKCFkZXRl
cm1pbmVWaWV3cG9ydChjb250ZXh0LCB3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBlYyA9IE5P
VF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBzd2l0Y2gg
KGV4dHJhY3RNb2RlKG1fdW5pdCkpIHsKLSAgICBjYXNlIExlbmd0aE1vZGVXaWR0aDoKLSAgICAg
ICAgcmV0dXJuIHZhbHVlICogd2lkdGg7Ci0gICAgY2FzZSBMZW5ndGhNb2RlSGVpZ2h0OgotICAg
ICAgICByZXR1cm4gdmFsdWUgKiBoZWlnaHQ7Ci0gICAgY2FzZSBMZW5ndGhNb2RlT3RoZXI6Ci0g
ICAgICAgIHJldHVybiB2YWx1ZSAqIHNxcnRmKCh3aWR0aCAqIHdpZHRoICsgaGVpZ2h0ICogaGVp
Z2h0KSAvIDIpOwotICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotZmxvYXQgU1ZHTGVuZ3RoOjpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9F
TVMoZmxvYXQgdmFsdWUsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUm
IGVjKSBjb25zdAotewotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+cmVuZGVyZXIoKSB8
fCAhY29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKSkgewotICAgICAgICBlYyA9IE5PVF9TVVBQ
T1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSBjb250ZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpOwotICAgIGZsb2F0IGZvbnRTaXpl
ID0gc3R5bGUtPmZvbnRTaXplKCk7Ci0gICAgaWYgKCFmb250U2l6ZSkgewotICAgICAgICBlYyA9
IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdmFsdWUgLyBmb250U2l6ZTsKLX0KLQotZmxvYXQgU1ZHTGVuZ3RoOjpjb252ZXJ0VmFsdWVG
cm9tRU1TVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4
dC0+cmVuZGVyZXIoKSB8fCAhY29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKSkgewotICAgICAg
ICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSBjb250ZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpOwotICAg
IHJldHVybiB2YWx1ZSAqIHN0eWxlLT5mb250U2l6ZSgpOwotfQotCi1mbG9hdCBTVkdMZW5ndGg6
OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VYUyhmbG9hdCB2YWx1ZSwgY29uc3QgU1ZHRWxl
bWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKCFjb250
ZXh0IHx8ICFjb250ZXh0LT5yZW5kZXJlcigpIHx8ICFjb250ZXh0LT5yZW5kZXJlcigpLT5zdHls
ZSgpKSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGNvbnRleHQtPnJlbmRlcmVyKCkt
PnN0eWxlKCk7Ci0KLSAgICAvLyBVc2Ugb2YgY2VpbCBhbGxvd3MgYSBwaXhlbCBtYXRjaCB0byB0
aGUgVzNDcyBleHBlY3RlZCBvdXRwdXQgb2YgY29vcmRzLXVuaXRzLTAzLWIuc3ZnCi0gICAgLy8g
aWYgdGhpcyBjYXVzZXMgcHJvYmxlbXMgaW4gcmVhbCB3b3JsZCBjYXNlcyBtYXliZSBpdCB3b3Vs
ZCBiZSBiZXN0IHRvIHJlbW92ZSB0aGlzCi0gICAgZmxvYXQgeEhlaWdodCA9IGNlaWxmKHN0eWxl
LT5mb250TWV0cmljcygpLnhIZWlnaHQoKSk7Ci0gICAgaWYgKCF4SGVpZ2h0KSB7Ci0gICAgICAg
IGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IHJldHVybiB2YWx1ZSAvIHhIZWlnaHQ7Ci19Ci0KLWZsb2F0IFNWR0xlbmd0aDo6Y29udmVydFZh
bHVlRnJvbUVYU1RvVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBjb25zdCBTVkdFbGVtZW50KiBjb250
ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAoIWNvbnRleHQgfHwgIWNv
bnRleHQtPnJlbmRlcmVyKCkgfHwgIWNvbnRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCkpIHsKLSAg
ICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gY29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKTsK
LSAgICAvLyBVc2Ugb2YgY2VpbCBhbGxvd3MgYSBwaXhlbCBtYXRjaCB0byB0aGUgVzNDcyBleHBl
Y3RlZCBvdXRwdXQgb2YgY29vcmRzLXVuaXRzLTAzLWIuc3ZnCi0gICAgLy8gaWYgdGhpcyBjYXVz
ZXMgcHJvYmxlbXMgaW4gcmVhbCB3b3JsZCBjYXNlcyBtYXliZSBpdCB3b3VsZCBiZSBiZXN0IHRv
IHJlbW92ZSB0aGlzCi0gICAgcmV0dXJuIHZhbHVlICogY2VpbGYoc3R5bGUtPmZvbnRNZXRyaWNz
KCkueEhlaWdodCgpKTsKLX0KLQogU1ZHTGVuZ3RoIFNWR0xlbmd0aDo6ZnJvbUNTU1ByaW1pdGl2
ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGguaAkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDQyICsyMiwyMCBAQAog
I2RlZmluZSBTVkdMZW5ndGhfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR1Bh
cnNpbmdFcnJvci5oIgogI2luY2x1ZGUgIlNWR1Byb3BlcnR5VHJhaXRzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7Ci0KLWVudW0gU1ZHTGVuZ3Ro
VHlwZSB7Ci0gICAgTGVuZ3RoVHlwZVVua25vd24gPSAwLAotICAgIExlbmd0aFR5cGVOdW1iZXIg
PSAxLAotICAgIExlbmd0aFR5cGVQZXJjZW50YWdlID0gMiwKLSAgICBMZW5ndGhUeXBlRU1TID0g
MywKLSAgICBMZW5ndGhUeXBlRVhTID0gNCwKLSAgICBMZW5ndGhUeXBlUFggPSA1LAotICAgIExl
bmd0aFR5cGVDTSA9IDYsCi0gICAgTGVuZ3RoVHlwZU1NID0gNywKLSAgICBMZW5ndGhUeXBlSU4g
PSA4LAotICAgIExlbmd0aFR5cGVQVCA9IDksCi0gICAgTGVuZ3RoVHlwZVBDID0gMTAKLX07Ci0K
LWVudW0gU1ZHTGVuZ3RoTW9kZSB7Ci0gICAgTGVuZ3RoTW9kZVdpZHRoID0gMCwKLSAgICBMZW5n
dGhNb2RlSGVpZ2h0LAotICAgIExlbmd0aE1vZGVPdGhlcgotfTsKK2NsYXNzIFF1YWxpZmllZE5h
bWU7CiAKIGVudW0gU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlIHsKICAgICBBbGxvd05lZ2F0
aXZlTGVuZ3RocywKICAgICBGb3JiaWROZWdhdGl2ZUxlbmd0aHMKIH07CiAKLWNsYXNzIFF1YWxp
ZmllZE5hbWU7Ci1jbGFzcyBTVkdFbGVtZW50OwotCiBjbGFzcyBTVkdMZW5ndGggewogcHVibGlj
OgogICAgIC8vIEZvcndhcmQgZGVjbGFyZSB0aGVzZSBlbnVtcyBpbiB0aGUgdzNjIG5hbWluZyBz
Y2hlbWUsIGZvciBJREwgZ2VuZXJhdGlvbgpAQCAtNzYsMjAgKzU0LDIxIEBAIHB1YmxpYzoKICAg
ICB9OwogCiAgICAgU1ZHTGVuZ3RoKFNWR0xlbmd0aE1vZGUgbW9kZSA9IExlbmd0aE1vZGVPdGhl
ciwgY29uc3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nID0gU3RyaW5nKCkpOwotICAgIFNWR0xlbmd0
aChjb25zdCBTVkdFbGVtZW50KiwgZmxvYXQsIFNWR0xlbmd0aE1vZGUgbW9kZSA9IExlbmd0aE1v
ZGVPdGhlciwgU1ZHTGVuZ3RoVHlwZSB0eXBlID0gTGVuZ3RoVHlwZU51bWJlcik7CisgICAgU1ZH
TGVuZ3RoKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBmbG9hdCwgU1ZHTGVuZ3RoTW9kZSBtb2Rl
ID0gTGVuZ3RoTW9kZU90aGVyLCBTVkdMZW5ndGhUeXBlIHR5cGUgPSBMZW5ndGhUeXBlTnVtYmVy
KTsKICAgICBTVkdMZW5ndGgoY29uc3QgU1ZHTGVuZ3RoJik7CiAKICAgICBTVkdMZW5ndGhUeXBl
IHVuaXRUeXBlKCkgY29uc3Q7CisgICAgU1ZHTGVuZ3RoTW9kZSB1bml0TW9kZSgpIGNvbnN0Owog
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNWR0xlbmd0aCYpIGNvbnN0OwogICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBTVkdMZW5ndGgmKSBjb25zdDsKIAogICAgIHN0YXRpYyBTVkdMZW5n
dGggY29uc3RydWN0KFNWR0xlbmd0aE1vZGUsIGNvbnN0IFN0cmluZyYsIFNWR1BhcnNpbmdFcnJv
ciYsIFNWR0xlbmd0aE5lZ2F0aXZlVmFsdWVzTW9kZSA9IEFsbG93TmVnYXRpdmVMZW5ndGhzKTsK
IAotICAgIGZsb2F0IHZhbHVlKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQpIGNvbnN0OwotICAg
IGZsb2F0IHZhbHVlKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmKSBj
b25zdDsKLSAgICB2b2lkIHNldFZhbHVlKGZsb2F0LCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTVkdFbGVtZW50KiBj
b250ZXh0LCBmbG9hdCwgU1ZHTGVuZ3RoTW9kZSwgU1ZHTGVuZ3RoVHlwZSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIGZsb2F0IHZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmKSBjb25zdDsKKyAg
ICBmbG9hdCB2YWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0JiwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OworICAgIHZvaWQgc2V0VmFsdWUoZmxvYXQsIGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTVkdMZW5ndGhDb250ZXh0
JiwgZmxvYXQsIFNWR0xlbmd0aE1vZGUsIFNWR0xlbmd0aFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsK
IAogICAgIGZsb2F0IHZhbHVlSW5TcGVjaWZpZWRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVJblNwZWNpZmllZFVuaXRzOyB9CiAgICAgdm9pZCBzZXRWYWx1ZUluU3BlY2lmaWVkVW5pdHMo
ZmxvYXQgdmFsdWUpIHsgbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMgPSB2YWx1ZTsgfQpAQCAtMTAx
LDcgKzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmFsdWVBc1N0cmluZyhjb25zdCBTdHJp
bmcmLCBTVkdMZW5ndGhNb2RlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgCiAgICAgdm9pZCBuZXdW
YWx1ZVNwZWNpZmllZFVuaXRzKHVuc2lnbmVkIHNob3J0LCBmbG9hdCB2YWx1ZUluU3BlY2lmaWVk
VW5pdHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGNvbnZlcnRUb1NwZWNpZmllZFVuaXRz
KHVuc2lnbmVkIHNob3J0LCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCwgY29u
c3QgU1ZHTGVuZ3RoQ29udGV4dCYsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIC8vIEhlbHBlciBm
dW5jdGlvbnMKICAgICBpbmxpbmUgYm9vbCBpc1JlbGF0aXZlKCkgY29uc3QKQEAgLTEyMyw3ICsx
MDIsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBTVkdMZW5ndGhUeXBlIHRvVHlwZSA9IHVu
aXRUeXBlKCk7CiAgICAgICAgIFNWR0xlbmd0aFR5cGUgZnJvbVR5cGUgPSBmcm9tLnVuaXRUeXBl
KCk7Ci0KICAgICAgICAgaWYgKChmcm9tLmlzWmVybygpICYmIGlzWmVybygpKQogICAgICAgICAg
ICAgfHwgZnJvbVR5cGUgPT0gTGVuZ3RoVHlwZVVua25vd24KICAgICAgICAgICAgIHx8IHRvVHlw
ZSA9PSBMZW5ndGhUeXBlVW5rbm93bgpAQCAtMTU4LDExICsxMzYsMTMgQEAgcHVibGljOgogCiAg
ICAgICAgIEFTU0VSVCghaXNSZWxhdGl2ZSgpKTsKICAgICAgICAgQVNTRVJUKCFmcm9tLmlzUmVs
YXRpdmUoKSk7Ci0gICAgICAgIGZsb2F0IGZyb21WYWx1ZUluVXNlclVuaXRzID0gY29udmVydFZh
bHVlVG9Vc2VyVW5pdHMoZnJvbS52YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSwgZnJvbVR5cGUsIDAs
IGVjKTsKKworICAgICAgICBTVkdMZW5ndGhDb250ZXh0IG5vblJlbGF0aXZlTGVuZ3RoQ29udGV4
dCgwKTsKKyAgICAgICAgZmxvYXQgZnJvbVZhbHVlSW5Vc2VyVW5pdHMgPSBub25SZWxhdGl2ZUxl
bmd0aENvbnRleHQuY29udmVydFZhbHVlVG9Vc2VyVW5pdHMoZnJvbS52YWx1ZUluU3BlY2lmaWVk
VW5pdHMoKSwgZnJvbS51bml0TW9kZSgpLCBmcm9tVHlwZSwgZWMpOwogICAgICAgICBpZiAoZWMp
CiAgICAgICAgICAgICByZXR1cm4gU1ZHTGVuZ3RoKCk7CiAKLSAgICAgICAgZmxvYXQgZnJvbVZh
bHVlID0gY29udmVydFZhbHVlRnJvbVVzZXJVbml0cyhmcm9tVmFsdWVJblVzZXJVbml0cywgdG9U
eXBlLCAwLCBlYyk7CisgICAgICAgIGZsb2F0IGZyb21WYWx1ZSA9IG5vblJlbGF0aXZlTGVuZ3Ro
Q29udGV4dC5jb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzKGZyb21WYWx1ZUluVXNlclVuaXRzLCB1
bml0TW9kZSgpLCB0b1R5cGUsIGVjKTsKICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0
dXJuIFNWR0xlbmd0aCgpOwogCkBAIC0xNzUsMjEgKzE1NSw2IEBAIHB1YmxpYzoKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBkZXRlcm1pbmVWaWV3cG9ydChjb25zdCBTVkdFbGVtZW50KiBj
b250ZXh0LCBmbG9hdCYgd2lkdGgsIGZsb2F0JiBoZWlnaHQpIGNvbnN0OwotCi0gICAgZmxvYXQg
Y29udmVydFZhbHVlVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIFNWR0xlbmd0aFR5cGUgZnJvbVVu
aXQsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAg
ICBmbG9hdCBjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBTVkdMZW5ndGhU
eXBlIHRvVW5pdCwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwotCi0gICAgZmxvYXQgY29udmVydFZhbHVlRnJvbVBlcmNlbnRhZ2VUb1VzZXJVbml0cyhm
bG9hdCB2YWx1ZSwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYpIGNv
bnN0OwotICAgIGZsb2F0IGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb1BlcmNlbnRhZ2UoZmxv
YXQgdmFsdWUsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKLQotICAgIGZsb2F0IGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VNUyhmbG9hdCB2YWx1
ZSwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAg
IGZsb2F0IGNvbnZlcnRWYWx1ZUZyb21FTVNUb1VzZXJVbml0cyhmbG9hdCB2YWx1ZSwgY29uc3Qg
U1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi0gICAgZmxvYXQg
Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRVhTKGZsb2F0IHZhbHVlLCBjb25zdCBTVkdFbGVt
ZW50KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgZmxvYXQgY29udmVydFZh
bHVlRnJvbUVYU1RvVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBjb25zdCBTVkdFbGVtZW50KiBjb250
ZXh0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0KLXByaXZhdGU6CiAgICAgZmxvYXQgbV92YWx1
ZUluU3BlY2lmaWVkVW5pdHM7CiAgICAgdW5zaWduZWQgaW50IG1fdW5pdDsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
UmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdMZW5ndGhD
b250ZXh0LmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU1ZHTGVuZ3RoQ29udGV4dDo6U1ZHTGVuZ3RoQ29udGV4dChjb25zdCBTVkdF
bGVtZW50KiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCit7Cit9CisKK1NWR0xl
bmd0aENvbnRleHQ6OlNWR0xlbmd0aENvbnRleHQoY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiB2aWV3cG9ydCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAg
ICwgbV9vdmVycmlkZW5WaWV3cG9ydCh2aWV3cG9ydCkKK3sKK30KKworRmxvYXRSZWN0IFNWR0xl
bmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGUoY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCwg
U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0
LCBjb25zdCBTVkdMZW5ndGgmIHgsIGNvbnN0IFNWR0xlbmd0aCYgeSwgY29uc3QgU1ZHTGVuZ3Ro
JiB3aWR0aCwgY29uc3QgU1ZHTGVuZ3RoJiBoZWlnaHQpCit7CisgICAgQVNTRVJUKHR5cGUgIT0g
U1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VOS05PV04pOworICAgIGlmICh0eXBlID09IFNW
R1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSkgeworICAgICAgICBTVkdM
ZW5ndGhDb250ZXh0IGxlbmd0aENvbnRleHQoY29udGV4dCk7CisgICAgICAgIHJldHVybiBGbG9h
dFJlY3QoeC52YWx1ZShsZW5ndGhDb250ZXh0KSwgeS52YWx1ZShsZW5ndGhDb250ZXh0KSwgd2lk
dGgudmFsdWUobGVuZ3RoQ29udGV4dCksIGhlaWdodC52YWx1ZShsZW5ndGhDb250ZXh0KSk7Cisg
ICAgfQorCisgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KGNvbnRleHQsIHZpZXdw
b3J0KTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KHgudmFsdWUobGVuZ3RoQ29udGV4dCkgKyB2aWV3
cG9ydC54KCksCisgICAgICAgICAgICAgICAgICAgICB5LnZhbHVlKGxlbmd0aENvbnRleHQpICsg
dmlld3BvcnQueSgpLAorICAgICAgICAgICAgICAgICAgICAgd2lkdGgudmFsdWUobGVuZ3RoQ29u
dGV4dCksCisgICAgICAgICAgICAgICAgICAgICBoZWlnaHQudmFsdWUobGVuZ3RoQ29udGV4dCkp
OworfQorCitGbG9hdFBvaW50IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVQb2ludChjb25zdCBT
VkdFbGVtZW50KiBjb250ZXh0LCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIHR5cGUsIGNvbnN0
IFNWR0xlbmd0aCYgeCwgY29uc3QgU1ZHTGVuZ3RoJiB5KQoreworICAgIEFTU0VSVCh0eXBlICE9
IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VTktOT1dOKTsKKyAgICBpZiAodHlwZSA9PSBT
VkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpIHsKKyAgICAgICAgU1ZH
TGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KGNvbnRleHQpOworICAgICAgICByZXR1cm4gRmxv
YXRQb2ludCh4LnZhbHVlKGxlbmd0aENvbnRleHQpLCB5LnZhbHVlKGxlbmd0aENvbnRleHQpKTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogdmFsdWVBc1BlcmNlbnRhZ2UoKSB3b24ndCBiZSBjb3Jy
ZWN0IGZvciBlZy4gY20gdW5pdHMuIFRoZXkgbmVlZCB0byBiZSByZXNvbHZlZCBpbiB1c2VyIHNw
YWNlIGFuZCB0aGVuIGJlIGNvbnNpZGVyZWQgaW4gb2JqZWN0Qm91bmRpbmdCb3ggc3BhY2UuCisg
ICAgcmV0dXJuIEZsb2F0UG9pbnQoeC52YWx1ZUFzUGVyY2VudGFnZSgpLCB5LnZhbHVlQXNQZXJj
ZW50YWdlKCkpOworfQorCitmbG9hdCBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlTGVuZ3RoKGNv
bnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgdHlwZSwg
Y29uc3QgU1ZHTGVuZ3RoJiB4KQoreworICAgIEFTU0VSVCh0eXBlICE9IFNWR1VuaXRUeXBlczo6
U1ZHX1VOSVRfVFlQRV9VTktOT1dOKTsKKyAgICBpZiAodHlwZSA9PSBTVkdVbml0VHlwZXM6OlNW
R19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpIHsKKyAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBs
ZW5ndGhDb250ZXh0KGNvbnRleHQpOworICAgICAgICByZXR1cm4geC52YWx1ZShsZW5ndGhDb250
ZXh0KTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogdmFsdWVBc1BlcmNlbnRhZ2UoKSB3b24ndCBi
ZSBjb3JyZWN0IGZvciBlZy4gY20gdW5pdHMuIFRoZXkgbmVlZCB0byBiZSByZXNvbHZlZCBpbiB1
c2VyIHNwYWNlIGFuZCB0aGVuIGJlIGNvbnNpZGVyZWQgaW4gb2JqZWN0Qm91bmRpbmdCb3ggc3Bh
Y2UuCisgICAgcmV0dXJuIHgudmFsdWVBc1BlcmNlbnRhZ2UoKTsKK30KKworZmxvYXQgU1ZHTGVu
Z3RoQ29udGV4dDo6Y29udmVydFZhbHVlVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIFNWR0xlbmd0
aE1vZGUgbW9kZSwgU1ZHTGVuZ3RoVHlwZSBmcm9tVW5pdCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0Cit7CisgICAgLy8gSWYgdGhlIFNWR0xlbmd0aENvbnRleHQgY2FycmllcyBhIGN1c3RvbSB2
aWV3cG9ydCwgZm9yY2UgcmVzb2x2aW5nIGFnYWluc3QgaXQuCisgICAgaWYgKCFtX292ZXJyaWRl
blZpZXdwb3J0LmlzRW1wdHkoKSkgeworICAgICAgICAvLyAxMDAlID0gMTAwLjAgaW5zdGVhZCBv
ZiAxLjAgZm9yIGhpc3RvcmljYWwgcmVhc29ucywgdGhpcyBjb3VsZCBldmVudHVhbGx5IGJlIGNo
YW5nZWQKKyAgICAgICAgaWYgKGZyb21Vbml0ID09IExlbmd0aFR5cGVQZXJjZW50YWdlKQorICAg
ICAgICAgICAgdmFsdWUgLz0gMTAwOworICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbVBl
cmNlbnRhZ2VUb1VzZXJVbml0cyh2YWx1ZSwgbW9kZSwgZWMpOworICAgIH0KKworICAgIHN3aXRj
aCAoZnJvbVVuaXQpIHsKKyAgICBjYXNlIExlbmd0aFR5cGVVbmtub3duOgorICAgICAgICBlYyA9
IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIExlbmd0aFR5
cGVOdW1iZXI6CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBjYXNlIExlbmd0aFR5cGVQWDoK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIGNhc2UgTGVuZ3RoVHlwZVBlcmNlbnRhZ2U6Cisg
ICAgICAgIHJldHVybiBjb252ZXJ0VmFsdWVGcm9tUGVyY2VudGFnZVRvVXNlclVuaXRzKHZhbHVl
IC8gMTAwLCBtb2RlLCBlYyk7CisgICAgY2FzZSBMZW5ndGhUeXBlRU1TOgorICAgICAgICByZXR1
cm4gY29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVuaXRzKHZhbHVlLCBlYyk7CisgICAgY2FzZSBM
ZW5ndGhUeXBlRVhTOgorICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVu
aXRzKHZhbHVlLCBlYyk7CisgICAgY2FzZSBMZW5ndGhUeXBlQ006CisgICAgICAgIHJldHVybiB2
YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyAyLjU0ZjsKKyAgICBjYXNlIExlbmd0aFR5cGVNTToK
KyAgICAgICAgcmV0dXJuIHZhbHVlICogY3NzUGl4ZWxzUGVySW5jaCAvIDI1LjRmOworICAgIGNh
c2UgTGVuZ3RoVHlwZUlOOgorICAgICAgICByZXR1cm4gdmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNo
OworICAgIGNhc2UgTGVuZ3RoVHlwZVBUOgorICAgICAgICByZXR1cm4gdmFsdWUgKiBjc3NQaXhl
bHNQZXJJbmNoIC8gNzI7CisgICAgY2FzZSBMZW5ndGhUeXBlUEM6CisgICAgICAgIHJldHVybiB2
YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyA2OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCitmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252
ZXJ0VmFsdWVGcm9tVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBTVkdMZW5ndGhNb2RlIG1vZGUsIFNW
R0xlbmd0aFR5cGUgdG9Vbml0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKHRvVW5pdCkgeworICAgIGNhc2UgTGVuZ3RoVHlwZVVua25vd246CisgICAgICAgIGVjID0g
Tk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgTGVuZ3RoVHlw
ZU51bWJlcjoKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIGNhc2UgTGVuZ3RoVHlwZVBlcmNl
bnRhZ2U6CisgICAgICAgIHJldHVybiBjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9QZXJjZW50
YWdlKHZhbHVlICogMTAwLCBtb2RlLCBlYyk7CisgICAgY2FzZSBMZW5ndGhUeXBlRU1TOgorICAg
ICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRU1TKHZhbHVlLCBlYyk7Cisg
ICAgY2FzZSBMZW5ndGhUeXBlRVhTOgorICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbVVz
ZXJVbml0c1RvRVhTKHZhbHVlLCBlYyk7CisgICAgY2FzZSBMZW5ndGhUeXBlUFg6CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICBjYXNlIExlbmd0aFR5cGVDTToKKyAgICAgICAgcmV0dXJuIHZh
bHVlICogMi41NGYgLyBjc3NQaXhlbHNQZXJJbmNoOworICAgIGNhc2UgTGVuZ3RoVHlwZU1NOgor
ICAgICAgICByZXR1cm4gdmFsdWUgKiAyNS40ZiAvIGNzc1BpeGVsc1BlckluY2g7CisgICAgY2Fz
ZSBMZW5ndGhUeXBlSU46CisgICAgICAgIHJldHVybiB2YWx1ZSAvIGNzc1BpeGVsc1BlckluY2g7
CisgICAgY2FzZSBMZW5ndGhUeXBlUFQ6CisgICAgICAgIHJldHVybiB2YWx1ZSAqIDcyIC8gY3Nz
UGl4ZWxzUGVySW5jaDsKKyAgICBjYXNlIExlbmd0aFR5cGVQQzoKKyAgICAgICAgcmV0dXJuIHZh
bHVlICogNiAvIGNzc1BpeGVsc1BlckluY2g7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Zsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZl
cnRWYWx1ZUZyb21Vc2VyVW5pdHNUb1BlcmNlbnRhZ2UoZmxvYXQgdmFsdWUsIFNWR0xlbmd0aE1v
ZGUgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgZmxvYXQgd2lkdGggPSAw
OworICAgIGZsb2F0IGhlaWdodCA9IDA7CisgICAgaWYgKCFkZXRlcm1pbmVWaWV3cG9ydCh3aWR0
aCwgaGVpZ2h0KSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIExlbmd0aE1v
ZGVXaWR0aDoKKyAgICAgICAgcmV0dXJuIHZhbHVlIC8gd2lkdGggKiAxMDA7CisgICAgY2FzZSBM
ZW5ndGhNb2RlSGVpZ2h0OgorICAgICAgICByZXR1cm4gdmFsdWUgLyBoZWlnaHQgKiAxMDA7Cisg
ICAgY2FzZSBMZW5ndGhNb2RlT3RoZXI6CisgICAgICAgIHJldHVybiB2YWx1ZSAvIChzcXJ0Zigo
d2lkdGggKiB3aWR0aCArIGhlaWdodCAqIGhlaWdodCkgLyAyKSkgKiAxMDA7CisgICAgfTsKKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitmbG9hdCBTVkdM
ZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tUGVyY2VudGFnZVRvVXNlclVuaXRzKGZsb2F0
IHZhbHVlLCBTVkdMZW5ndGhNb2RlIG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAorewor
ICAgIGZsb2F0IHdpZHRoID0gMDsKKyAgICBmbG9hdCBoZWlnaHQgPSAwOworICAgIGlmICghZGV0
ZXJtaW5lVmlld3BvcnQod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9S
VEVEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBMZW5ndGhNb2RlV2lkdGg6CisgICAgICAgIHJldHVybiB2YWx1ZSAqIHdpZHRo
OworICAgIGNhc2UgTGVuZ3RoTW9kZUhlaWdodDoKKyAgICAgICAgcmV0dXJuIHZhbHVlICogaGVp
Z2h0OworICAgIGNhc2UgTGVuZ3RoTW9kZU90aGVyOgorICAgICAgICByZXR1cm4gdmFsdWUgKiBz
cXJ0Zigod2lkdGggKiB3aWR0aCArIGhlaWdodCAqIGhlaWdodCkgLyAyKTsKKyAgICB9OworCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Zsb2F0IFNWR0xl
bmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VNUyhmbG9hdCB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIW1fY29u
dGV4dC0+cmVuZGVyZXIoKSB8fCAhbV9jb250ZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpKSB7Cisg
ICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fY29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUo
KTsKKyAgICBmbG9hdCBmb250U2l6ZSA9IHN0eWxlLT5mb250U2l6ZSgpOworICAgIGlmICghZm9u
dFNpemUpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlIC8gZm9udFNpemU7Cit9CisKK2Zsb2F0IFNW
R0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21FTVNUb1VzZXJVbml0cyhmbG9hdCB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRleHQgfHwgIW1f
Y29udGV4dC0+cmVuZGVyZXIoKSB8fCAhbV9jb250ZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpKSB7
CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fY29udGV4dC0+cmVuZGVyZXIoKS0+c3R5
bGUoKTsKKyAgICByZXR1cm4gdmFsdWUgKiBzdHlsZS0+Zm9udFNpemUoKTsKK30KKworZmxvYXQg
U1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRVhTKGZsb2F0IHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udGV4dCB8fCAh
bV9jb250ZXh0LT5yZW5kZXJlcigpIHx8ICFtX2NvbnRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCkp
IHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9jb250ZXh0LT5yZW5kZXJlcigpLT5z
dHlsZSgpOworCisgICAgLy8gVXNlIG9mIGNlaWwgYWxsb3dzIGEgcGl4ZWwgbWF0Y2ggdG8gdGhl
IFczQ3MgZXhwZWN0ZWQgb3V0cHV0IG9mIGNvb3Jkcy11bml0cy0wMy1iLnN2ZworICAgIC8vIGlm
IHRoaXMgY2F1c2VzIHByb2JsZW1zIGluIHJlYWwgd29ybGQgY2FzZXMgbWF5YmUgaXQgd291bGQg
YmUgYmVzdCB0byByZW1vdmUgdGhpcworICAgIGZsb2F0IHhIZWlnaHQgPSBjZWlsZihzdHlsZS0+
Zm9udE1ldHJpY3MoKS54SGVpZ2h0KCkpOworICAgIGlmICgheEhlaWdodCkgeworICAgICAgICBl
YyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdmFsdWUgLyB4SGVpZ2h0OworfQorCitmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252
ZXJ0VmFsdWVGcm9tRVhTVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAoreworICAgIGlmICghbV9jb250ZXh0IHx8ICFtX2NvbnRleHQtPnJlbmRlcmVyKCkg
fHwgIW1fY29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKSkgeworICAgICAgICBlYyA9IE5PVF9T
VVBQT1JURURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBtX2NvbnRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgLy8gVXNlIG9m
IGNlaWwgYWxsb3dzIGEgcGl4ZWwgbWF0Y2ggdG8gdGhlIFczQ3MgZXhwZWN0ZWQgb3V0cHV0IG9m
IGNvb3Jkcy11bml0cy0wMy1iLnN2ZworICAgIC8vIGlmIHRoaXMgY2F1c2VzIHByb2JsZW1zIGlu
IHJlYWwgd29ybGQgY2FzZXMgbWF5YmUgaXQgd291bGQgYmUgYmVzdCB0byByZW1vdmUgdGhpcwor
ICAgIHJldHVybiB2YWx1ZSAqIGNlaWxmKHN0eWxlLT5mb250TWV0cmljcygpLnhIZWlnaHQoKSk7
Cit9CisKK2Jvb2wgU1ZHTGVuZ3RoQ29udGV4dDo6ZGV0ZXJtaW5lVmlld3BvcnQoZmxvYXQmIHdp
ZHRoLCBmbG9hdCYgaGVpZ2h0KSBjb25zdAoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZiBhbiBvdmVycmlkZW4gdmlld3BvcnQgaXMgZ2l2
ZW4sIGl0IGhhcyBwcmVjZWRlbmNlLgorICAgIGlmICghbV9vdmVycmlkZW5WaWV3cG9ydC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgd2lkdGggPSBtX292ZXJyaWRlblZpZXdwb3J0LndpZHRoKCk7Cisg
ICAgICAgIGhlaWdodCA9IG1fb3ZlcnJpZGVuVmlld3BvcnQuaGVpZ2h0KCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFRha2Ugc2l6ZSBmcm9tIG91dGVybW9zdCA8c3Zn
PiBlbGVtZW50LgorICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fY29udGV4dC0+ZG9jdW1lbnQo
KTsKKyAgICBpZiAoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpID09IG1fY29udGV4dCkgewor
ICAgICAgICBpZiAobV9jb250ZXh0LT5pc1NWRygpKSB7CisgICAgICAgICAgICBGcmFtZSogZnJh
bWUgPSBtX2NvbnRleHQtPmRvY3VtZW50KCkgPyBtX2NvbnRleHQtPmRvY3VtZW50KCktPmZyYW1l
KCkgOiAwOworICAgICAgICAgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChSZW5kZXJQYXJ0KiBvd25lclJlbmRlcmVyID0gZnJh
bWUtPm93bmVyUmVuZGVyZXIoKSkgeworICAgICAgICAgICAgICAgIHdpZHRoID0gb3duZXJSZW5k
ZXJlci0+d2lkdGgoKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBvd25lclJlbmRlcmVyLT5o
ZWlnaHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIFJlbmRlclZpZXcqIHZpZXcgPSB0b1JlbmRlclZpZXcoZG9jdW1l
bnQtPnJlbmRlcmVyKCkpOworICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgd2lkdGggPSB2aWV3LT52aWV3V2lkdGgoKTsKKyAgICAgICAgaGVp
Z2h0ID0gdmlldy0+dmlld0hlaWdodCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICAvLyBUYWtlIHNpemUgZnJvbSBuZWFyZXN0IHZpZXdwb3J0IGVsZW1lbnQgKGNvbW1vbiBj
YXNlOiBpbm5lciA8c3ZnPiBlbGVtZW50cykKKyAgICBTVkdFbGVtZW50KiB2aWV3cG9ydEVsZW1l
bnQgPSBtX2NvbnRleHQtPnZpZXdwb3J0RWxlbWVudCgpOworICAgIGlmICh2aWV3cG9ydEVsZW1l
bnQgJiYgdmlld3BvcnRFbGVtZW50LT5pc1NWRygpKSB7CisgICAgICAgIGNvbnN0IFNWR1NWR0Vs
ZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1NWR0VsZW1lbnQqPih2aWV3cG9ydEVs
ZW1lbnQpOworICAgICAgICBpZiAoc3ZnLT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZpZXdCb3hB
dHRyKSkgeworICAgICAgICAgICAgd2lkdGggPSBzdmctPnZpZXdCb3goKS53aWR0aCgpOworICAg
ICAgICAgICAgaGVpZ2h0ID0gc3ZnLT52aWV3Qm94KCkuaGVpZ2h0KCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB3aWR0aCA9IHN2Zy0+d2lkdGgoKS52YWx1ZShzdmcpOworICAgICAg
ICAgICAgaGVpZ2h0ID0gc3ZnLT5oZWlnaHQoKS52YWx1ZShzdmcpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFRha2Ugc2l6ZSBmcm9tIGVu
Y2xvc2luZyBub24tU1ZHIFJlbmRlckJveCAoY29tbW9uIGNhc2U6IGlubGluZSBTVkcpCisgICAg
aWYgKCFtX2NvbnRleHQtPnBhcmVudE5vZGUoKSB8fCBtX2NvbnRleHQtPnBhcmVudE5vZGUoKS0+
aXNTVkdFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBtX2NvbnRleHQtPnJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlbmRl
ckJveCogYm94ID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpOworICAgIHdpZHRoID0gYm94LT53aWR0
aCgpOworICAgIGhlaWdodCA9IGJveC0+aGVpZ2h0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoQ29udGV4dC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNWR0xl
bmd0aENvbnRleHRfaAorI2RlZmluZSBTVkdMZW5ndGhDb250ZXh0X2gKKworI2lmIEVOQUJMRShT
VkcpCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIlNWR1VuaXRUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNWR0VsZW1lbnQ7CitjbGFzcyBTVkdMZW5ndGg7CisKK2VudW0gU1ZHTGVuZ3RoVHlwZSB7Cisg
ICAgTGVuZ3RoVHlwZVVua25vd24gPSAwLAorICAgIExlbmd0aFR5cGVOdW1iZXIsCisgICAgTGVu
Z3RoVHlwZVBlcmNlbnRhZ2UsCisgICAgTGVuZ3RoVHlwZUVNUywKKyAgICBMZW5ndGhUeXBlRVhT
LAorICAgIExlbmd0aFR5cGVQWCwKKyAgICBMZW5ndGhUeXBlQ00sCisgICAgTGVuZ3RoVHlwZU1N
LAorICAgIExlbmd0aFR5cGVJTiwKKyAgICBMZW5ndGhUeXBlUFQsCisgICAgTGVuZ3RoVHlwZVBD
Cit9OworCitlbnVtIFNWR0xlbmd0aE1vZGUgeworICAgIExlbmd0aE1vZGVXaWR0aCA9IDAsCisg
ICAgTGVuZ3RoTW9kZUhlaWdodCwKKyAgICBMZW5ndGhNb2RlT3RoZXIKK307CisKK2NsYXNzIFNW
R0xlbmd0aENvbnRleHQgeworcHVibGljOgorICAgIFNWR0xlbmd0aENvbnRleHQoY29uc3QgU1ZH
RWxlbWVudCopOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgRmxvYXRS
ZWN0IHJlc29sdmVSZWN0YW5nbGUoY29uc3QgVCogY29udGV4dCwgU1ZHVW5pdFR5cGVzOjpTVkdV
bml0VHlwZSB0eXBlLCBjb25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGUoY29udGV4dCwgdHlwZSwg
dmlld3BvcnQsIGNvbnRleHQtPngoKSwgY29udGV4dC0+eSgpLCBjb250ZXh0LT53aWR0aCgpLCBj
b250ZXh0LT5oZWlnaHQoKSk7CisgICAgfQorCisgICAgc3RhdGljIEZsb2F0UmVjdCByZXNvbHZl
UmVjdGFuZ2xlKGNvbnN0IFNWR0VsZW1lbnQqLCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlLCBj
b25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0LCBjb25zdCBTVkdMZW5ndGgmIHgsIGNvbnN0IFNWR0xl
bmd0aCYgeSwgY29uc3QgU1ZHTGVuZ3RoJiB3aWR0aCwgY29uc3QgU1ZHTGVuZ3RoJiBoZWlnaHQp
OworICAgIHN0YXRpYyBGbG9hdFBvaW50IHJlc29sdmVQb2ludChjb25zdCBTVkdFbGVtZW50Kiwg
U1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSwgY29uc3QgU1ZHTGVuZ3RoJiB4LCBjb25zdCBTVkdM
ZW5ndGgmIHkpOworICAgIHN0YXRpYyBmbG9hdCByZXNvbHZlTGVuZ3RoKGNvbnN0IFNWR0VsZW1l
bnQqLCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlLCBjb25zdCBTVkdMZW5ndGgmKTsKKworICAg
IGZsb2F0IGNvbnZlcnRWYWx1ZVRvVXNlclVuaXRzKGZsb2F0LCBTVkdMZW5ndGhNb2RlLCBTVkdM
ZW5ndGhUeXBlIGZyb21Vbml0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgZmxvYXQgY29u
dmVydFZhbHVlRnJvbVVzZXJVbml0cyhmbG9hdCwgU1ZHTGVuZ3RoTW9kZSwgU1ZHTGVuZ3RoVHlw
ZSB0b1VuaXQsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBTVkdMZW5n
dGhDb250ZXh0KGNvbnN0IFNWR0VsZW1lbnQqLCBjb25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0KTsK
KworICAgIGZsb2F0IGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb1BlcmNlbnRhZ2UoZmxvYXQg
dmFsdWUsIFNWR0xlbmd0aE1vZGUgbW9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIGZs
b2F0IGNvbnZlcnRWYWx1ZUZyb21QZXJjZW50YWdlVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIFNW
R0xlbmd0aE1vZGUgbW9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgZmxvYXQgY29u
dmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRU1TKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJikg
Y29uc3Q7CisgICAgZmxvYXQgY29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVuaXRzKGZsb2F0IHZh
bHVlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisKKyAgICBmbG9hdCBjb252ZXJ0VmFsdWVGcm9t
VXNlclVuaXRzVG9FWFMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBm
bG9hdCBjb252ZXJ0VmFsdWVGcm9tRVhTVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKKworICAgIGJvb2wgZGV0ZXJtaW5lVmlld3BvcnQoZmxvYXQmIHdpZHRo
LCBmbG9hdCYgaGVpZ2h0KSBjb25zdDsKKworICAgIGNvbnN0IFNWR0VsZW1lbnQqIG1fY29udGV4
dDsKKyAgICBGbG9hdFJlY3QgbV9vdmVycmlkZW5WaWV3cG9ydDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gU1ZHTGVuZ3Ro
Q29udGV4dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmNwcAkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDggKzEzNyw4
IEBAIGJvb2wgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3IKICAgICAgICAgaWYg
KCFhdHRyaWJ1dGVzLmhhc1NwcmVhZE1ldGhvZCgpICYmIGN1cnJlbnQtPmhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldFNw
cmVhZE1ldGhvZChjdXJyZW50LT5zcHJlYWRNZXRob2QoKSk7CiAKLSAgICAgICAgaWYgKCFhdHRy
aWJ1dGVzLmhhc0JvdW5kaW5nQm94TW9kZSgpICYmIGN1cnJlbnQtPmhhc0F0dHJpYnV0ZShTVkdO
YW1lczo6Z3JhZGllbnRVbml0c0F0dHIpKQotICAgICAgICAgICAgYXR0cmlidXRlcy5zZXRCb3Vu
ZGluZ0JveE1vZGUoY3VycmVudC0+Z3JhZGllbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZH
X1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgIGlmICghYXR0cmlidXRlcy5o
YXNHcmFkaWVudFVuaXRzKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpncmFk
aWVudFVuaXRzQXR0cikpCisgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldEdyYWRpZW50VW5pdHMo
Y3VycmVudC0+Z3JhZGllbnRVbml0cygpKTsKIAogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMuaGFz
R3JhZGllbnRUcmFuc2Zvcm0oKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6Omdy
YWRpZW50VHJhbnNmb3JtQXR0cikpIHsKICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm07CkBAIC0xOTEsMTQgKzE5MSw4IEBAIGJvb2wgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
Ojpjb2xsZWN0R3IKIAogdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNhbGN1bGF0ZVN0
YXJ0RW5kUG9pbnRzKGNvbnN0IExpbmVhckdyYWRpZW50QXR0cmlidXRlcyYgYXR0cmlidXRlcywg
RmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRmxvYXRQb2ludCYgZW5kUG9pbnQpCiB7Ci0gICAgLy8g
RGV0ZXJtaW5lIGdyYWRpZW50IHN0YXJ0L2VuZCBwb2ludHMKLSAgICBpZiAoYXR0cmlidXRlcy5i
b3VuZGluZ0JveE1vZGUoKSkgewotICAgICAgICBzdGFydFBvaW50ID0gRmxvYXRQb2ludChhdHRy
aWJ1dGVzLngxKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSwgYXR0cmlidXRlcy55MSgpLnZhbHVlQXNQ
ZXJjZW50YWdlKCkpOwotICAgICAgICBlbmRQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy54
MigpLnZhbHVlQXNQZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMueTIoKS52YWx1ZUFzUGVyY2VudGFn
ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGFydFBvaW50ID0gRmxvYXRQb2ludChhdHRy
aWJ1dGVzLngxKCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMueTEoKS52YWx1ZSh0aGlzKSk7Ci0g
ICAgICAgIGVuZFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngyKCkudmFsdWUodGhpcyks
IGF0dHJpYnV0ZXMueTIoKS52YWx1ZSh0aGlzKSk7Ci0gICAgfQorICAgIHN0YXJ0UG9pbnQgPSBT
VkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUG9pbnQodGhpcywgYXR0cmlidXRlcy5ncmFkaWVudFVu
aXRzKCksIGF0dHJpYnV0ZXMueDEoKSwgYXR0cmlidXRlcy55MSgpKTsKKyAgICBlbmRQb2ludCA9
IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVQb2ludCh0aGlzLCBhdHRyaWJ1dGVzLmdyYWRpZW50
VW5pdHMoKSwgYXR0cmlidXRlcy54MigpLCBhdHRyaWJ1dGVzLnkyKCkpOwogfQogCiBib29sIFNW
R0xpbmVhckdyYWRpZW50RWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDk5NTI1KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU5LDE5ICsxNTksNyBAQCB2b2lkIFNWR01hc2tFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQo
Ym9vCiAKIEZsb2F0UmVjdCBTVkdNYXNrRWxlbWVudDo6bWFza0JvdW5kaW5nQm94KGNvbnN0IEZs
b2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IG1hc2tC
Qm94OwotICAgIGlmIChtYXNrVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1gpCi0gICAgICAgIG1hc2tCQm94ID0gRmxvYXRSZWN0KHgoKS52YWx1
ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSArIG9iamVjdEJvdW5k
aW5nQm94LngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSgpLnZhbHVlQXNQZXJj
ZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSArIG9iamVjdEJvdW5kaW5nQm94
LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFzUGVyY2Vu
dGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5kaW5nQm94
LmhlaWdodCgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1hc2tCQm94ID0gRmxvYXRSZWN0KHgoKS52
YWx1ZSh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSgpLnZhbHVlKHRoaXMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVlKHRoaXMpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZSh0aGlzKSk7Ci0KLSAgICBy
ZXR1cm4gbWFza0JCb3g7CisgICAgcmV0dXJuIFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0
YW5nbGU8U1ZHTWFza0VsZW1lbnQ+KHRoaXMsIG1hc2tVbml0cygpLCBvYmplY3RCb3VuZGluZ0Jv
eCk7CiB9CiAKIFJlbmRlck9iamVjdCogU1ZHTWFza0VsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0dGVybkVsZW1lbnQuY3BwCShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSwxMSArMjEx
LDExIEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmNvbGxlY3RQYXR0ZXJuQXQKICAgICAgICAg
aWYgKCFhdHRyaWJ1dGVzLmhhc1ByZXNlcnZlQXNwZWN0UmF0aW8oKSAmJiBjdXJyZW50LT5oYXNB
dHRyaWJ1dGUoU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSkKICAgICAgICAgICAg
IGF0dHJpYnV0ZXMuc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhjdXJyZW50LT5wcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkpOwogCi0gICAgICAgIGlmICghYXR0cmlidXRlcy5oYXNCb3VuZGluZ0JveE1vZGUo
KSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRlcm5Vbml0c0F0dHIpKQot
ICAgICAgICAgICAgYXR0cmlidXRlcy5zZXRCb3VuZGluZ0JveE1vZGUoY3VycmVudC0+cGF0dGVy
blVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9Y
KTsKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc1BhdHRlcm5Vbml0cygpICYmIGN1cnJlbnQt
Pmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikpCisgICAgICAgICAgICBh
dHRyaWJ1dGVzLnNldFBhdHRlcm5Vbml0cyhjdXJyZW50LT5wYXR0ZXJuVW5pdHMoKSk7CiAKLSAg
ICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc0JvdW5kaW5nQm94TW9kZUNvbnRlbnQoKSAmJiBjdXJy
ZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKSkKLSAg
ICAgICAgICAgIGF0dHJpYnV0ZXMuc2V0Qm91bmRpbmdCb3hNb2RlQ29udGVudChjdXJyZW50LT5w
YXR0ZXJuQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVD
VEJPVU5ESU5HQk9YKTsKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc1BhdHRlcm5Db250ZW50
VW5pdHMoKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRlcm5Db250ZW50
VW5pdHNBdHRyKSkKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuc2V0UGF0dGVybkNvbnRlbnRVbml0
cyhjdXJyZW50LT5wYXR0ZXJuQ29udGVudFVuaXRzKCkpOwogCiAgICAgICAgIGlmICghYXR0cmli
dXRlcy5oYXNQYXR0ZXJuVHJhbnNmb3JtKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRlKFNWR05h
bWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cikpIHsKICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDggKzE0
Myw4IEBAIGJvb2wgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3IKICAgICAgICAg
aWYgKCFhdHRyaWJ1dGVzLmhhc1NwcmVhZE1ldGhvZCgpICYmIGN1cnJlbnQtPmhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikpCiAgICAgICAgICAgICBhdHRyaWJ1dGVzLnNl
dFNwcmVhZE1ldGhvZChjdXJyZW50LT5zcHJlYWRNZXRob2QoKSk7CiAKLSAgICAgICAgaWYgKCFh
dHRyaWJ1dGVzLmhhc0JvdW5kaW5nQm94TW9kZSgpICYmIGN1cnJlbnQtPmhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpKQotICAgICAgICAgICAgYXR0cmlidXRlcy5zZXRC
b3VuZGluZ0JveE1vZGUoY3VycmVudC0+Z3JhZGllbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgIGlmICghYXR0cmlidXRl
cy5oYXNHcmFkaWVudFVuaXRzKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjpn
cmFkaWVudFVuaXRzQXR0cikpCisgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldEdyYWRpZW50VW5p
dHMoY3VycmVudC0+Z3JhZGllbnRVbml0cygpKTsKIAogICAgICAgICBpZiAoIWF0dHJpYnV0ZXMu
aGFzR3JhZGllbnRUcmFuc2Zvcm0oKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmdyYWRpZW50VHJhbnNmb3JtQXR0cikpIHsKICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0
cmFuc2Zvcm07CkBAIC0yMDgsMTUgKzIwOCw5IEBAIGJvb2wgU1ZHUmFkaWFsR3JhZGllbnRFbGVt
ZW50Ojpjb2xsZWN0R3IKIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpjYWxjdWxhdGVG
b2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyhjb25zdCBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMm
IGF0dHJpYnV0ZXMsIEZsb2F0UG9pbnQmIGZvY2FsUG9pbnQsIEZsb2F0UG9pbnQmIGNlbnRlclBv
aW50LCBmbG9hdCYgcmFkaXVzKQogewogICAgIC8vIERldGVybWluZSBncmFkaWVudCBmb2NhbC9j
ZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKLSAgICBpZiAoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1v
ZGUoKSkgewotICAgICAgICBmb2NhbFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLmZ4KCku
dmFsdWVBc1BlcmNlbnRhZ2UoKSwgYXR0cmlidXRlcy5meSgpLnZhbHVlQXNQZXJjZW50YWdlKCkp
OwotICAgICAgICBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5jeCgpLnZhbHVl
QXNQZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMuY3koKS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKLSAg
ICAgICAgcmFkaXVzID0gYXR0cmlidXRlcy5yKCkudmFsdWVBc1BlcmNlbnRhZ2UoKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBmb2NhbFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLmZ4KCku
dmFsdWUodGhpcyksIGF0dHJpYnV0ZXMuZnkoKS52YWx1ZSh0aGlzKSk7Ci0gICAgICAgIGNlbnRl
clBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLmN4KCkudmFsdWUodGhpcyksIGF0dHJpYnV0
ZXMuY3koKS52YWx1ZSh0aGlzKSk7Ci0gICAgICAgIHJhZGl1cyA9IGF0dHJpYnV0ZXMucigpLnZh
bHVlKHRoaXMpOwotICAgIH0KKyAgICBmb2NhbFBvaW50ID0gU1ZHTGVuZ3RoQ29udGV4dDo6cmVz
b2x2ZVBvaW50KHRoaXMsIGF0dHJpYnV0ZXMuZ3JhZGllbnRVbml0cygpLCBhdHRyaWJ1dGVzLmZ4
KCksIGF0dHJpYnV0ZXMuZnkoKSk7CisgICAgY2VudGVyUG9pbnQgPSBTVkdMZW5ndGhDb250ZXh0
OjpyZXNvbHZlUG9pbnQodGhpcywgYXR0cmlidXRlcy5ncmFkaWVudFVuaXRzKCksIGF0dHJpYnV0
ZXMuY3goKSwgYXR0cmlidXRlcy5jeSgpKTsKKyAgICByYWRpdXMgPSBTVkdMZW5ndGhDb250ZXh0
OjpyZXNvbHZlTGVuZ3RoKHRoaXMsIGF0dHJpYnV0ZXMuZ3JhZGllbnRVbml0cygpLCBhdHRyaWJ1
dGVzLnIoKSk7CiAKICAgICAvLyBFdmVudHVhbGx5IGFkanVzdCBmb2NhbCBwb2ludHMsIGFzIGRl
c2NyaWJlZCBiZWxvdwogICAgIGZsb2F0IGRlbHRhWCA9IGZvY2FsUG9pbnQueCgpIC0gY2VudGVy
UG9pbnQueCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114035</attachid>
            <date>2011-11-08 04:01:24 -0800</date>
            <delta_ts>2011-11-08 04:44:35 -0800</delta_ts>
            <desc>Patch v2</desc>
            <filename>Introduce-SVGLengthContext-v2.diff</filename>
            <type>text/plain</type>
            <size>71780</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTYgQEAKKzIwMTEtMTEtMDggIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIFNW
R0xlbmd0aENvbnRleHQsIHRvIGFsbG93IHRvIHJlc29sdmUgcmVsYXRpdmUgdW5pdHMgdG8gYXJi
aXRhcnkgdmlld3BvcnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTc4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEludHJvZHVjZSBTVkdMZW5ndGhDb250ZXh0IHRvIGNsZWFudXAgU1ZHTGVuZ3RoLCBi
eSBtb3ZpbmcgYWxsIGNvbnZlcnNpb24gb2YgcmVsYXRpdmUgdW5pdHMgdGhhdCBkZXBlbmQgb24g
c3R5bGUgb3Igdmlld3BvcnQKKyAgICAgICAgb3V0IG9mIFNWR0xlbmd0aCwgaW50byBTVkdMZW5n
dGhDb250ZXh0LiBQYXNzIFNWR0xlbmd0aENvbnRleHQmIHRvIFNWR0xlbmd0aDo6dmFsdWUvc2V0
VmFsdWUvLi4uIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGEgcHVyZQorICAgICAgICAiY29uc3QgU1ZH
RWxlbWVudCogY29udGV4dCIsIHdoaWNoIHdhcyBwcmV2aW91c2x5IHVzZWQgdG8gZGV0ZXJtaW5l
IHRoZSB2aWV3cG9ydCB3aGVuIHJlc29sdmluZyBwZXJjZW50YWdlIHVuaXRzLgorICAgICAgICBT
VkdMZW5ndGhDb250ZXh0IGNhcnJpZXMgYW4gYWRkaXRpb25hbCBGbG9hdFJlY3Qgb2YgdGhlIGN1
c3RvbSB2aWV3cG9ydCwgdG8gd2hpY2ggcGVyY2VudGFnZXMgYXJlIHJlc29sdmVkLCBpZiBzcGVj
aWZpZWQuCisKKyAgICAgICAgVGhpcyBhbGxvd3MgdXMgdG8ga2lsbCBzZXZlcmFsIGR1cGxpY2F0
ZXMgb2YgdGhlIHNhbWUgY29kZSwgd2hpY2ggaGFuZGxlcyBvYmplY3RCb3VuZGluZ0JveCBtb2Rl
IGZvciBncmFkaWVudHMvcGF0dGVybnMvbWFza3MvZXRjLi4KKyAgICAgICAgQSBmb2xsb3ctdXAg
cGF0Y2ggd2lsbCBjb252ZXJ0IGZpbHRlcnMgdG8gdXNlIHRoZSBuZXcgU1ZHTGVuZ3RoQ29udGV4
dDo6cmVzb2x2ZVJlY3RhbmdsZSBjb2RlIGFzIHdlbGwuCisKKyAgICAgICAgVGhpcyBpcyBhIHBy
ZXBhcmF0aW9uIGZvciBidWcgMTA0MzAsIHRvIGZpeCBmZUltYWdlICsgb2JqZWN0Qm91bmRpbmdC
b3ggc3VwcG9ydCB3aGVuIHJlbmRlcmluZyByZWZlcmVuY2VkIGVsZW1lbnRzLCBpbnN0ZWFkIG9m
IGZpbGVzLgorCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFueSB0ZXN0cyB5ZXQuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VHcmFk
aWVudDo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUdyYWRpZW50Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUxpbmVhckdyYWRpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJj
ZUxpbmVhckdyYWRpZW50OjpncmFkaWVudFVuaXRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fs
Y3VsYXRlUGF0dGVybkJvdW5kYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVz
b3VyY2VQYXR0ZXJuOjpidWlsZFRpbGVJbWFnZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50OjpncmFkaWVudFVuaXRz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6d3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVTVkdSZXNvdXJjZUNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL0dyYWRp
ZW50QXR0cmlidXRlcy5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1dGVzOjpH
cmFkaWVudEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnRBdHRyaWJ1dGVz
OjpncmFkaWVudFVuaXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50QXR0cmlidXRlczo6
c2V0R3JhZGllbnRVbml0cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudEF0dHJpYnV0ZXM6
Omhhc0dyYWRpZW50VW5pdHMpOgorICAgICAgICAqIHN2Zy9QYXR0ZXJuQXR0cmlidXRlcy5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0dGVybkF0dHJpYnV0ZXM6OlBhdHRlcm5BdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm5BdHRyaWJ1dGVzOjpwYXR0ZXJuVW5pdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UGF0dGVybkF0dHJpYnV0ZXM6OnBhdHRlcm5Db250ZW50VW5pdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0dGVybkF0dHJpYnV0ZXM6OnNldFBhdHRlcm5Vbml0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuQXR0cmlidXRlczo6c2V0UGF0dGVybkNvbnRlbnRVbml0
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXR0ZXJuQXR0cmlidXRlczo6aGFzUGF0dGVyblVuaXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm5BdHRyaWJ1dGVzOjpoYXNQYXR0ZXJuQ29udGVu
dFVuaXRzKToKKyAgICAgICAgKiBzdmcvU1ZHQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHN2Zy9T
VkdFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpvcGVyYXRvciBTVkdM
ZW5ndGhDb250ZXh0KToKKyAgICAgICAgKiBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJCb3VuZGluZ0JveCk6CisgICAg
ICAgICogc3ZnL1NWR0xlbmd0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGg6OlNW
R0xlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGg6OnVuaXRNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0xlbmd0aDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVu
Z3RoOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGg6OmNvbnZlcnRUb1Nw
ZWNpZmllZFVuaXRzKToKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoLmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdMZW5ndGg6OmJsZW5kKToKKyAgICAgICAgKiBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4dDo6U1ZHTGVuZ3Ro
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVj
dGFuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVQb2lu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlTGVuZ3RoKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZVRvVXNlclVu
aXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZy
b21Vc2VyVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVy
dFZhbHVlRnJvbVVzZXJVbml0c1RvUGVyY2VudGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdM
ZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tUGVyY2VudGFnZVRvVXNlclVuaXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5p
dHNUb0VNUyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFs
dWVGcm9tRU1TVG9Vc2VyVW5pdHMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGVuZ3RoQ29udGV4
dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRVhTKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21FWFNUb1VzZXJVbml0cyk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdMZW5ndGhDb250ZXh0OjpkZXRlcm1pbmVWaWV3cG9ydCk6CisgICAgICAg
ICogc3ZnL1NWR0xlbmd0aENvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdM
ZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlKToKKyAgICAgICAgKiBzdmcvU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0xpbmVhckdyYWRpZW50
RWxlbWVudDo6Y29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNhbGN1bGF0ZVN0YXJ0RW5kUG9pbnRzKToKKyAgICAg
ICAgKiBzdmcvU1ZHTWFza0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0Vs
ZW1lbnQ6Om1hc2tCb3VuZGluZ0JveCk6CisgICAgICAgICogc3ZnL1NWR1BhdHRlcm5FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50Ojpjb2xsZWN0UGF0dGVy
bkF0dHJpYnV0ZXMpOgorICAgICAgICAqIHN2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3Jh
ZGllbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxl
bWVudDo6Y2FsY3VsYXRlRm9jYWxDZW50ZXJQb2ludHNBbmRSYWRpdXMpOgorCiAyMDExLTExLTA4
ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIE5v
dCByZXZpZXdlZC4gRml4IGJ1aWxkLCBieSByZW1vdmluZyBhbiB1bnVzZWQgdmFyaWFibGUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTczOCw2ICsxNzM4LDcgQEAgSUYg
KEVOQUJMRV9TVkcpCiAgICAgICAgIHN2Zy9TVkdJbWFnZUxvYWRlci5jcHAKICAgICAgICAgc3Zn
L1NWR0xhbmdTcGFjZS5jcHAKICAgICAgICAgc3ZnL1NWR0xlbmd0aC5jcHAKKyAgICAgICAgc3Zn
L1NWR0xlbmd0aENvbnRleHQuY3BwCiAgICAgICAgIHN2Zy9TVkdMZW5ndGhMaXN0LmNwcAogICAg
ICAgICBzdmcvU1ZHTGluZUVsZW1lbnQuY3BwCiAgICAgICAgIHN2Zy9TVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9u
IDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtMzc0Myw2ICszNzQzLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHTGFuZ1NwYWNlLmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5n
dGguY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmggXAorCVNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xl
bmd0aENvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aExpc3QuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoTGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlz
aW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtMjU5NSw2ICsyNTk1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgc3ZnL1NWR0ltYWdlTG9hZGVy
LmggXAogICAgIHN2Zy9TVkdMYW5nU3BhY2UuaCBcCiAgICAgc3ZnL1NWR0xlbmd0aC5oIFwKKyAg
ICBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5oIFwKICAgICBzdmcvU1ZHTGVuZ3RoTGlzdC5oIFwKICAg
ICBzdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmggXAogICAgIHN2Zy9TVkdMaW5lRWxlbWVu
dC5oIFwKQEAgLTM0NjMsNiArMzQ2NCw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9
MSkgewogICAgICAgICAgICAgICBzdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcCBcCiAgICAgICAgICAg
ICAgIHN2Zy9TVkdMYW5nU3BhY2UuY3BwIFwKICAgICAgICAgICAgICAgc3ZnL1NWR0xlbmd0aC5j
cHAgXAorICAgICAgICAgICAgICBzdmcvU1ZHTGVuZ3RoQ29udGV4dC5jcHAgXAogICAgICAgICAg
ICAgICBzdmcvU1ZHTGVuZ3RoTGlzdC5jcHAgXAogICAgICAgICAgICAgICBzdmcvU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50LmNwcCBcCiAgICAgICAgICAgICAgIHN2Zy9TVkdMaW5lRWxlbWVudC5j
cHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTEwOTYsNiArMTA5Niw3IEBACiAg
ICAgICAgICAgICAnc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oJywKICAgICAgICAgICAgICdz
dmcvU1ZHRWxlbWVudC5oJywKICAgICAgICAgICAgICdzdmcvU1ZHTGVuZ3RoLmgnLAorICAgICAg
ICAgICAgJ3N2Zy9TVkdMZW5ndGhDb250ZXh0LmgnLAogICAgICAgICAgICAgJ3N2Zy9TVkdMZW5n
dGhMaXN0LmgnLAogICAgICAgICAgICAgJ3N2Zy9TVkdMb2NhdGFibGUuaCcsCiAgICAgICAgICAg
ICAnc3ZnL1NWR01hdHJpeC5oJywKQEAgLTYwNjIsNiArNjA2Myw3IEBACiAgICAgICAgICAgICAn
c3ZnL1NWR0xhbmdTcGFjZS5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9TVkdMYW5nU3BhY2UuaCcs
CiAgICAgICAgICAgICAnc3ZnL1NWR0xlbmd0aC5jcHAnLAorICAgICAgICAgICAgJ3N2Zy9TVkdM
ZW5ndGhDb250ZXh0LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR0xlbmd0aExpc3QuY3BwJywK
ICAgICAgICAgICAgICdzdmcvU1ZHTGluZUVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdzdmcv
U1ZHTGluZUVsZW1lbnQuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNjY1MzQsNiArNjY1
MzQsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cc3ZnXFNWR0xlbmd0aENvbnRleHQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR0xlbmd0aExpc3QuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTcxMyw2ICsxNzEzLDgg
QEAKIAkJNkVCRjBFNzcxMkE5ODY4ODAwREIxNzA5IC8qIEpTT0VTVGV4dHVyZUZsb2F0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUJGMEU3NTEyQTk4
Njg4MDBEQjE3MDkgLyogSlNPRVNUZXh0dXJlRmxvYXQuaCAqLzsgfTsKIAkJNkVFOEE3NzIxMEY4
MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUU4QTc3MDEwRjgwM0YzMDA1QTRB
MjQgLyogSlNXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmNwcCAqLzsgfTsKIAkJNkVFOEE3NzMxMEY4
MDNGMzAwNUE0QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVFOEE3NzExMEY4MDNGMzAwNUE0QTI0
IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oICovOyB9OworCQk3MTM0NDk2RDE0Njk0MUIz
MDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MTM0NDk2QjE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVu
Z3RoQ29udGV4dC5jcHAgKi87IH07CisJCTcxMzQ0OTZFMTQ2OTQxQjMwMDcyMDMxMiAvKiBTVkdM
ZW5ndGhDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MTM0NDk2QzE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29udGV4dC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxQ0NCNDlDMTQ0
ODI0QUMwMEM2NzZENiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxQ0NCNDlBMTQ0ODI0QUMwMEM2NzZENiAvKiBJ
bWFnZUJ5U2l6ZUNhY2hlLmNwcCAqLzsgfTsKIAkJNzFDQ0I0OUQxNDQ4MjRBQzAwQzY3NkQ2IC8q
IEltYWdlQnlTaXplQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcxQ0NCNDlCMTQ0ODI0QUMwMEM2NzZENiAvKiBJbWFnZUJ5U2l6ZUNhY2hlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFGQjk2
N0IxMzgzRDY0NjAwQUM4QTRDIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb25Qcm9wZXJ0eVRlYXJP
ZmYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRkI5
NjdBMTM4M0Q2NDYwMEFDOEE0QyAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFy
T2ZmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTQzODYsNyArNDM4OCw3IEBACiAJCUIyMjI3QUUyMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUUmVm
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjIyMjc5NEMwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1RSZWZFbGVtZW50LmggKi87IH07CiAJCUIy
MjI3QUU0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUU3BhbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjc5NEUwRDAwQkYyMTAwNzFC
NzgyIC8qIFNWR1RTcGFuRWxlbWVudC5jcHAgKi87IH07CiAJCUIyMjI3QUU1MEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdUU3BhbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIyMjI3OTRGMEQwMEJGMjEwMDcxQjc4MiAvKiBTVkdUU3BhbkVsZW1l
bnQuaCAqLzsgfTsKLQkJQjIyMjdBRTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1VuaXRUeXBlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIyMjc5NTEw
RDAwQkYyMTAwNzFCNzgyIC8qIFNWR1VuaXRUeXBlcy5oICovOyB9OworCQlCMjIyN0FFNzBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHVW5pdFR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzk1MTBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVW5pdFR5
cGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QjIyMjdBRTkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1VSSVJlZmVyZW5jZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzk1MzBEMDBCRjIxMDA3
MUI3ODIgLyogU1ZHVVJJUmVmZXJlbmNlLmNwcCAqLzsgfTsKIAkJQjIyMjdBRUEwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR1VSSVJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjIyMjc5NTQwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1VSSVJlZmVy
ZW5jZS5oICovOyB9OwogCQlCMjIyN0FFQzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHVXNlRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIy
Nzk1NjBEMDBCRjIxMDA3MUI3ODIgLyogU1ZHVXNlRWxlbWVudC5jcHAgKi87IH07CkBAIC04OTE0
LDYgKzg5MTYsOCBAQAogCQk2RUJGMEU3NTEyQTk4Njg4MDBEQjE3MDkgLyogSlNPRVNUZXh0dXJl
RmxvYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPRVNUZXh0dXJlRmxv
YXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkVFOEE3NzAxMEY4MDNGMzAwNUE0
QTI0IC8qIEpTV2ViR0xDb250ZXh0QXR0cmlidXRlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RUU4QTc3MTEwRjgwM0YzMDA1QTRBMjQgLyogSlNXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2Vi
R0xDb250ZXh0QXR0cmlidXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MTM0
NDk2QjE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29udGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdMZW5ndGhDb250ZXh0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzEzNDQ5NkMxNDY5NDFCMzAwNzIwMzEyIC8qIFNWR0xlbmd0
aENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTGVuZ3RoQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUNDQjQ5QTE0NDgyNEFDMDBD
Njc2RDYgLyogSW1hZ2VCeVNpemVDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZUJ5U2l6ZUNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzFDQ0I0OUIxNDQ4MjRBQzAwQzY3NkQ2IC8qIEltYWdlQnlTaXplQ2FjaGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCeVNpemVDYWNoZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZCOTY3QTEzODNENjQ2MDBBQzhBNEMgLyogU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvblByb3BlcnR5VGVhck9mZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdBbmltYXRlZEVudW1lcmF0aW9uUHJvcGVydHlUZWFyT2ZmLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODc3MSw2ICsxODc3NSw4IEBACiAJCQkJQjIyMjc4
OUMwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aC5jcHAgKi8sCiAJCQkJQjIyMjc4OUQwRDAw
QkYyMDAwNzFCNzgyIC8qIFNWR0xlbmd0aC5oICovLAogCQkJCUIyMjI3ODlFMEQwMEJGMjAwMDcx
Qjc4MiAvKiBTVkdMZW5ndGguaWRsICovLAorCQkJCTcxMzQ0OTZCMTQ2OTQxQjMwMDcyMDMxMiAv
KiBTVkdMZW5ndGhDb250ZXh0LmNwcCAqLywKKwkJCQk3MTM0NDk2QzE0Njk0MUIzMDA3MjAzMTIg
LyogU1ZHTGVuZ3RoQ29udGV4dC5oICovLAogCQkJCUIyMjI3ODlGMEQwMEJGMjAwMDcxQjc4MiAv
KiBTVkdMZW5ndGhMaXN0LmNwcCAqLywKIAkJCQlCMjIyNzhBMDBEMDBCRjIwMDA3MUI3ODIgLyog
U1ZHTGVuZ3RoTGlzdC5oICovLAogCQkJCUIyMjI3OEExMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdM
ZW5ndGhMaXN0LmlkbCAqLywKQEAgLTI0NjI3LDYgKzI0NjMzLDcgQEAKIAkJCQkzMTY5Mzc5QzE0
NjA5QzZDMDBDMDEzNjIgLyogRHJhZ1Nlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlG
OTEwMTQ2NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzZGMzZFQjE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJpdHlDb250ZXh0LmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MTM0NDk2RTE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNzQ4NSw2ICsyNzQ5Miw3IEBACiAJCQkJQ0RFQTc2
MzQxNDYwQjU2RjAwOEIzMUYxIC8qIENsb2NrR2VuZXJpYy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDREVBNzYzNTE0NjBCNzFBMDA4QjMxRjEgLyogQ2xvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTc2RjM2RUExNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3MTM0NDk2RDE0Njk0MUIzMDA3MjAzMTIgLyogU1ZHTGVuZ3RoQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkocmV2aXNpb24g
OTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
R3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphcHBseVJlcwogICAgIC8vIFNwZWM6IFdoZW4gdGhlIGdl
b21ldHJ5IG9mIHRoZSBhcHBsaWNhYmxlIGVsZW1lbnQgaGFzIG5vIHdpZHRoIG9yIGhlaWdodCBh
bmQgb2JqZWN0Qm91bmRpbmdCb3ggaXMgc3BlY2lmaWVkLAogICAgIC8vIHRoZW4gdGhlIGdpdmVu
IGVmZmVjdCAoZS5nLiBhIGdyYWRpZW50IG9yIGEgZmlsdGVyKSB3aWxsIGJlIGlnbm9yZWQuCiAg
ICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94ID0gb2JqZWN0LT5vYmplY3RCb3VuZGluZ0Jv
eCgpOwotICAgIGlmIChib3VuZGluZ0JveE1vZGUoKSAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0Vt
cHR5KCkpCisgICAgaWYgKGdyYWRpZW50VW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1ggJiYgb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIW1fZ3JhZGllbnQuY29udGFpbnMob2Jq
ZWN0KSkKQEAgLTE4MSw5ICsxODEsOSBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlR3JhZGllbnQ6
OmFwcGx5UmVzCiAgICAgICAgIC8vIHJlc291cmNlLCBzbyBkb24ndCBhcHBseSBpdCBoZXJlLiBG
b3Igbm9uLUNHIHBsYXRmb3Jtcywgd2Ugd2FudCB0aGUgdGV4dCBib3VuZGluZwogICAgICAgICAv
LyBib3ggYXBwbGllZCB0byB0aGUgZ3JhZGllbnQgc3BhY2UgdHJhbnNmb3JtIG5vdywgc28gdGhl
IGdyYWRpZW50IHNoYWRlciBjYW4gdXNlIGl0LgogI2lmIFVTRShDRykKLSAgICAgICAgaWYgKGJv
dW5kaW5nQm94TW9kZSgpICYmICFvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkgJiYgIWlzUGFp
bnRpbmdUZXh0KSB7CisgICAgICAgIGlmIChncmFkaWVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVz
OjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YICYmICFvYmplY3RCb3VuZGluZ0JveC5p
c0VtcHR5KCkgJiYgIWlzUGFpbnRpbmdUZXh0KSB7CiAjZWxzZQotICAgICAgICBpZiAoYm91bmRp
bmdCb3hNb2RlKCkgJiYgIW9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkgeworICAgICAgICBp
ZiAoZ3JhZGllbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RC
T1VORElOR0JPWCAmJiAhb2JqZWN0Qm91bmRpbmdCb3guaXNFbXB0eSgpKSB7CiAjZW5kaWYKICAg
ICAgICAgICAgIGdyYWRpZW50RGF0YS0+dXNlcnNwYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZShvYmpl
Y3RCb3VuZGluZ0JveC54KCksIG9iamVjdEJvdW5kaW5nQm94LnkoKSk7CiAgICAgICAgICAgICBn
cmFkaWVudERhdGEtPnVzZXJzcGFjZVRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0ob2JqZWN0Qm91
bmRpbmdCb3gud2lkdGgoKSwgb2JqZWN0Qm91bmRpbmdCb3guaGVpZ2h0KCkpOwpAQCAtMjUwLDcg
KzI1MCw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cG9zdEFwcGwKICAgICAg
ICAgICAgIGNhbGN1bGF0ZUdyYWRpZW50VHJhbnNmb3JtKGdyYWRpZW50VHJhbnNmb3JtKTsKIAog
ICAgICAgICAgICAgRmxvYXRSZWN0IHRhcmdldFJlY3Q7Ci0gICAgICAgICAgICBncmFkaWVudERh
dGEtPmdyYWRpZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNsaXBUb1RleHRNYXNrKGNv
bnRleHQsIG1faW1hZ2VCdWZmZXIsIHRhcmdldFJlY3QsIG9iamVjdCwgYm91bmRpbmdCb3hNb2Rl
KCksIGdyYWRpZW50VHJhbnNmb3JtKSk7CisgICAgICAgICAgICBncmFkaWVudERhdGEtPmdyYWRp
ZW50LT5zZXRHcmFkaWVudFNwYWNlVHJhbnNmb3JtKGNsaXBUb1RleHRNYXNrKGNvbnRleHQsIG1f
aW1hZ2VCdWZmZXIsIHRhcmdldFJlY3QsIG9iamVjdCwgZ3JhZGllbnRVbml0cygpID09IFNWR1Vu
aXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCwgZ3JhZGllbnRUcmFuc2Zv
cm0pKTsKICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChncmFkaWVudERhdGEt
PmdyYWRpZW50KTsKIAogICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodGFyZ2V0UmVjdCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3Jh
ZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlR3JhZGllbnQuaAkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhZGRTdG9w
cyhHcmFkaWVudERhdGEqLCBjb25zdCBWZWN0b3I8R3JhZGllbnQ6OkNvbG9yU3RvcD4mKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBTVkdVbml0VHlwZXM6OlNWR1VuaXRUeXBlIGdyYWRpZW50VW5pdHMoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUdyYWRpZW50VHJhbnNmb3JtKEFmZmluZVRy
YW5zZm9ybSYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29sbGVjdEdyYWRpZW50QXR0cmlidXRl
cyhTVkdHcmFkaWVudEVsZW1lbnQqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGJ1aWxkR3JhZGll
bnQoR3JhZGllbnREYXRhKiwgU1ZHR3JhZGllbnRFbGVtZW50KikgY29uc3QgPSAwOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgJKHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVuZGVy
U1ZHUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VU
eXBlOyB9CiAgICAgc3RhdGljIFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsK
IAotICAgIHZpcnR1YWwgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2F0
dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCk7IH0KKyAgICB2aXJ0dWFsIFNWR1VuaXRUeXBlczo6
U1ZHVW5pdFR5cGUgZ3JhZGllbnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5n
cmFkaWVudFVuaXRzKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFu
c2Zvcm0oQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pIHsgdHJhbnNmb3JtID0gbV9hdHRyaWJ1
dGVzLmdyYWRpZW50VHJhbnNmb3JtKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY29sbGVjdEdyYWRp
ZW50QXR0cmlidXRlcyhTVkdHcmFkaWVudEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgYnVp
bGRHcmFkaWVudChHcmFkaWVudERhdGEqLCBTVkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAJKHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05Niw3ICs5Niw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJl
c28KICAgICAvLyBTcGVjOiBXaGVuIHRoZSBnZW9tZXRyeSBvZiB0aGUgYXBwbGljYWJsZSBlbGVt
ZW50IGhhcyBubyB3aWR0aCBvciBoZWlnaHQgYW5kIG9iamVjdEJvdW5kaW5nQm94IGlzIHNwZWNp
ZmllZCwKICAgICAvLyB0aGVuIHRoZSBnaXZlbiBlZmZlY3QgKGUuZy4gYSBncmFkaWVudCBvciBh
IGZpbHRlcikgd2lsbCBiZSBpZ25vcmVkLgogICAgIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0Jv
eCA9IG9iamVjdC0+b2JqZWN0Qm91bmRpbmdCb3goKTsKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmJv
dW5kaW5nQm94TW9kZSgpICYmIG9iamVjdEJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICBpZiAo
bV9hdHRyaWJ1dGVzLnBhdHRlcm5Vbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQ
RV9PQkpFQ1RCT1VORElOR0JPWCAmJiBvYmplY3RCb3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghbV9wYXR0ZXJuLmNvbnRhaW5zKG9iamVjdCkp
CkBAIC0yMDgsMTcgKzIwOCw3IEBAIHN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IGNhbGN1bGF0ZVBh
dHRlcm4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiBwYXR0ZXJuRWxlbWVudCkKIHsKICAgICBBU1NFUlQo
cGF0dGVybkVsZW1lbnQpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlKCkp
Ci0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoYXR0cmlidXRlcy54KCkudmFsdWVBc1BlcmNlbnRh
Z2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCkgKyBvYmplY3RCb3VuZGluZ0JveC54KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcy55KCkudmFsdWVBc1BlcmNlbnRh
Z2UoKSAqIG9iamVjdEJvdW5kaW5nQm94LmhlaWdodCgpICsgb2JqZWN0Qm91bmRpbmdCb3gueSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMud2lkdGgoKS52YWx1ZUFzUGVy
Y2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGVzLmhlaWdodCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RC
b3VuZGluZ0JveC5oZWlnaHQoKSk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KGF0dHJpYnV0ZXMu
eCgpLnZhbHVlKHBhdHRlcm5FbGVtZW50KSwKLSAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZXMueSgpLnZhbHVlKHBhdHRlcm5FbGVtZW50KSwKLSAgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMud2lkdGgoKS52YWx1ZShwYXR0ZXJuRWxlbWVudCksCi0gICAgICAgICAgICAgICAgICAg
ICBhdHRyaWJ1dGVzLmhlaWdodCgpLnZhbHVlKHBhdHRlcm5FbGVtZW50KSk7CisgICAgcmV0dXJu
IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVSZWN0YW5nbGUocGF0dGVybkVsZW1lbnQsIGF0dHJp
YnV0ZXMucGF0dGVyblVuaXRzKCksIG9iamVjdEJvdW5kaW5nQm94LCBhdHRyaWJ1dGVzLngoKSwg
YXR0cmlidXRlcy55KCksIGF0dHJpYnV0ZXMud2lkdGgoKSwgYXR0cmlidXRlcy5oZWlnaHQoKSk7
CiB9CiAKIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFRpbGVJbWFnZVRyYW5z
Zm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLApAQCAtMjQwLDcgKzIzMCw3IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuOjpidWlsZFRpbGUKICAgICAvLyBBcHBseSB2aWV3Qm94L29i
amVjdEJvdW5kaW5nQm94IHRyYW5zZm9ybWF0aW9ucy4KICAgICBpZiAoIXZpZXdCb3hDVE0uaXNJ
ZGVudGl0eSgpKQogICAgICAgICB0aWxlSW1hZ2VUcmFuc2Zvcm0gPSB2aWV3Qm94Q1RNOwotICAg
IGVsc2UgaWYgKGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlQ29udGVudCgpKQorICAgIGVsc2Ug
aWYgKGF0dHJpYnV0ZXMucGF0dGVybkNvbnRlbnRVbml0cygpID09IFNWR1VuaXRUeXBlczo6U1ZH
X1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkKICAgICAgICAgdGlsZUltYWdlVHJhbnNmb3Jt
LnNjYWxlKG9iamVjdEJvdW5kaW5nQm94LndpZHRoKCksIG9iamVjdEJvdW5kaW5nQm94LmhlaWdo
dCgpKTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjcxLDcgKzI2MSw3IEBAIFBhc3NPd25QdHI8
SW1hZ2VCdWZmZXI+IFJlbmRlclNWR1Jlc291cmMKICAgICAgICAgdGlsZUltYWdlQ29udGV4dC0+
Y29uY2F0Q1RNKHRpbGVJbWFnZVRyYW5zZm9ybSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gY29u
dGVudFRyYW5zZm9ybWF0aW9uOwotICAgIGlmIChhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZUNv
bnRlbnQoKSkKKyAgICBpZiAoYXR0cmlidXRlcy5wYXR0ZXJuQ29udGVudFVuaXRzKCkgPT0gU1ZH
VW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQogICAgICAgICBjb250
ZW50VHJhbnNmb3JtYXRpb24gPSB0aWxlSW1hZ2VUcmFuc2Zvcm07CiAKICAgICAvLyBEcmF3IHRo
ZSBjb250ZW50IGludG8gdGhlIEltYWdlQnVmZmVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdy
YWRpZW50LmgJKHJldmlzaW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVuZGVyU1ZHUmVzb3VyY2VUeXBlIHJl
c291cmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHNfcmVzb3VyY2VUeXBlOyB9CiAgICAgc3RhdGlj
IFJlbmRlclNWR1Jlc291cmNlVHlwZSBzX3Jlc291cmNlVHlwZTsKIAotICAgIHZpcnR1YWwgYm9v
bCBib3VuZGluZ0JveE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuYm91bmRpbmdC
b3hNb2RlKCk7IH0KKyAgICB2aXJ0dWFsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgZ3JhZGll
bnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5ncmFkaWVudFVuaXRzKCk7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlR3JhZGllbnRUcmFuc2Zvcm0oQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pIHsgdHJhbnNmb3JtID0gbV9hdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNm
b3JtKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgY29sbGVjdEdyYWRpZW50QXR0cmlidXRlcyhTVkdH
cmFkaWVudEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChHcmFkaWVu
dERhdGEqLCBTVkdHcmFkaWVudEVsZW1lbnQqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNp
b24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVB
c1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsMTQgKzQ5NSw5IEBAIHN0YXRpYyB2b2lk
IHdyaXRlQ2hpbGRyZW4oVGV4dFN0cmVhbSYgdHMKICAgICAgICAgd3JpdGUodHMsICpjaGlsZCwg
aW5kZW50ICsgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU3RyaW5nIGJvdW5kaW5nQm94TW9kZVN0
cmluZyhib29sIGJvdW5kaW5nQm94TW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZUNvbW1v
bkdyYWRpZW50UHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgU1ZHU3ByZWFkTWV0aG9kVHlwZSBz
cHJlYWRNZXRob2QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZ3JhZGllbnRUcmFuc2Zvcm0sIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgZ3JhZGllbnRVbml0cykKIHsKLSAgICByZXR1cm4gYm91
bmRpbmdCb3hNb2RlID8gIm9iamVjdEJvdW5kaW5nQm94IiA6ICJ1c2VyU3BhY2VPblVzZSI7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZUNvbW1vbkdyYWRpZW50UHJvcGVydGllcyhUZXh0
U3RyZWFtJiB0cywgU1ZHU3ByZWFkTWV0aG9kVHlwZSBzcHJlYWRNZXRob2QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgZ3JhZGllbnRUcmFuc2Zvcm0sIGJvb2wgYm91bmRpbmdCb3hNb2RlKQotewot
ICAgIHdyaXRlTmFtZVZhbHVlUGFpcih0cywgImdyYWRpZW50VW5pdHMiLCBib3VuZGluZ0JveE1v
ZGVTdHJpbmcoYm91bmRpbmdCb3hNb2RlKSk7CisgICAgd3JpdGVOYW1lVmFsdWVQYWlyKHRzLCAi
Z3JhZGllbnRVbml0cyIsIGdyYWRpZW50VW5pdHMpOwogCiAgICAgaWYgKHNwcmVhZE1ldGhvZCAh
PSBTVkdTcHJlYWRNZXRob2RQYWQpCiAgICAgICAgIHRzIDw8ICIgW3NwcmVhZE1ldGhvZD0iIDw8
IHNwcmVhZE1ldGhvZCA8PCAiXSI7CkBAIC01NjIsOCArNTU3LDggQEAgdm9pZCB3cml0ZVNWR1Jl
c291cmNlQ29udGFpbmVyKFRleHRTdHJlYQogICAgICAgICBQYXR0ZXJuQXR0cmlidXRlcyBhdHRy
aWJ1dGVzOwogICAgICAgICBzdGF0aWNfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KHBhdHRlcm4t
Pm5vZGUoKSktPmNvbGxlY3RQYXR0ZXJuQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKIAotICAgICAg
ICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwYXR0ZXJuVW5pdHMiLCBib3VuZGluZ0JveE1vZGVT
dHJpbmcoYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSkpOwotICAgICAgICB3cml0ZU5hbWVW
YWx1ZVBhaXIodHMsICJwYXR0ZXJuQ29udGVudFVuaXRzIiwgYm91bmRpbmdCb3hNb2RlU3RyaW5n
KGF0dHJpYnV0ZXMuYm91bmRpbmdCb3hNb2RlQ29udGVudCgpKSk7CisgICAgICAgIHdyaXRlTmFt
ZVZhbHVlUGFpcih0cywgInBhdHRlcm5Vbml0cyIsIGF0dHJpYnV0ZXMucGF0dGVyblVuaXRzKCkp
OworICAgICAgICB3cml0ZU5hbWVWYWx1ZVBhaXIodHMsICJwYXR0ZXJuQ29udGVudFVuaXRzIiwg
YXR0cmlidXRlcy5wYXR0ZXJuQ29udGVudFVuaXRzKCkpOwogCiAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBhdHRyaWJ1dGVzLnBhdHRlcm5UcmFuc2Zvcm0oKTsKICAgICAgICAg
aWYgKCF0cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQpAQCAtNTc4LDcgKzU3Myw3IEBAIHZvaWQgd3Jp
dGVTVkdSZXNvdXJjZUNvbnRhaW5lcihUZXh0U3RyZWEKIAogICAgICAgICBMaW5lYXJHcmFkaWVu
dEF0dHJpYnV0ZXMgYXR0cmlidXRlczsKICAgICAgICAgbGluZWFyR3JhZGllbnRFbGVtZW50LT5j
b2xsZWN0R3JhZGllbnRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwotICAgICAgICB3cml0ZUNvbW1v
bkdyYWRpZW50UHJvcGVydGllcyh0cywgYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSwgYXR0cmli
dXRlcy5ncmFkaWVudFRyYW5zZm9ybSgpLCBhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9kZSgpKTsK
KyAgICAgICAgd3JpdGVDb21tb25HcmFkaWVudFByb3BlcnRpZXModHMsIGF0dHJpYnV0ZXMuc3By
ZWFkTWV0aG9kKCksIGF0dHJpYnV0ZXMuZ3JhZGllbnRUcmFuc2Zvcm0oKSwgYXR0cmlidXRlcy5n
cmFkaWVudFVuaXRzKCkpOwogCiAgICAgICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludDsKICAgICAg
ICAgRmxvYXRQb2ludCBlbmRQb2ludDsKQEAgLTU5NCw3ICs1ODksNyBAQCB2b2lkIHdyaXRlU1ZH
UmVzb3VyY2VDb250YWluZXIoVGV4dFN0cmVhCiAKICAgICAgICAgUmFkaWFsR3JhZGllbnRBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXM7CiAgICAgICAgIHJhZGlhbEdyYWRpZW50RWxlbWVudC0+Y29sbGVj
dEdyYWRpZW50QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLSAgICAgICAgd3JpdGVDb21tb25HcmFk
aWVudFByb3BlcnRpZXModHMsIGF0dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCksIGF0dHJpYnV0ZXMu
Z3JhZGllbnRUcmFuc2Zvcm0oKSwgYXR0cmlidXRlcy5ib3VuZGluZ0JveE1vZGUoKSk7CisgICAg
ICAgIHdyaXRlQ29tbW9uR3JhZGllbnRQcm9wZXJ0aWVzKHRzLCBhdHRyaWJ1dGVzLnNwcmVhZE1l
dGhvZCgpLCBhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCksIGF0dHJpYnV0ZXMuZ3JhZGll
bnRVbml0cygpKTsKIAogICAgICAgICBGbG9hdFBvaW50IGZvY2FsUG9pbnQ7CiAgICAgICAgIEZs
b2F0UG9pbnQgY2VudGVyUG9pbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvR3JhZGllbnRB
dHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL0dyYWRpZW50QXR0
cmlidXRlcy5oCShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9HcmFkaWVu
dEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTYgKzI5LDE2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHN0cnVjdCBHcmFkaWVudEF0dHJpYnV0ZXMgewogICAgIEdyYWRpZW50QXR0
cmlidXRlcygpCiAgICAgICAgIDogbV9zcHJlYWRNZXRob2QoU1ZHU3ByZWFkTWV0aG9kUGFkKQot
ICAgICAgICAsIG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCisgICAgICAgICwgbV9ncmFkaWVudFVu
aXRzKFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkKICAgICAg
ICAgLCBtX3NwcmVhZE1ldGhvZFNldChmYWxzZSkKLSAgICAgICAgLCBtX2JvdW5kaW5nQm94TW9k
ZVNldChmYWxzZSkKKyAgICAgICAgLCBtX2dyYWRpZW50VW5pdHNTZXQoZmFsc2UpCiAgICAgICAg
ICwgbV9ncmFkaWVudFRyYW5zZm9ybVNldChmYWxzZSkKICAgICAgICAgLCBtX3N0b3BzU2V0KGZh
bHNlKQogICAgIHsKICAgICB9CiAKICAgICBTVkdTcHJlYWRNZXRob2RUeXBlIHNwcmVhZE1ldGhv
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9Ci0gICAgYm9vbCBib3VuZGluZ0Jv
eE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kaW5nQm94TW9kZTsgfQorICAgIFNWR1VuaXRU
eXBlczo6U1ZHVW5pdFR5cGUgZ3JhZGllbnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGll
bnRVbml0czsgfQogICAgIEFmZmluZVRyYW5zZm9ybSBncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fZ3JhZGllbnRUcmFuc2Zvcm07IH0KICAgICBjb25zdCBWZWN0b3I8R3JhZGll
bnQ6OkNvbG9yU3RvcD4mIHN0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQogCkBAIC00
OCwxMCArNDgsMTAgQEAgc3RydWN0IEdyYWRpZW50QXR0cmlidXRlcyB7CiAgICAgICAgIG1fc3By
ZWFkTWV0aG9kU2V0ID0gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIHNldEJvdW5kaW5nQm94TW9k
ZShib29sIHZhbHVlKQorICAgIHZvaWQgc2V0R3JhZGllbnRVbml0cyhTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIHVuaXRUeXBlKQogICAgIHsKLSAgICAgICAgbV9ib3VuZGluZ0JveE1vZGUgPSB2
YWx1ZTsKLSAgICAgICAgbV9ib3VuZGluZ0JveE1vZGVTZXQgPSB0cnVlOworICAgICAgICBtX2dy
YWRpZW50VW5pdHMgPSB1bml0VHlwZTsKKyAgICAgICAgbV9ncmFkaWVudFVuaXRzU2V0ID0gdHJ1
ZTsKICAgICB9CiAKICAgICB2b2lkIHNldEdyYWRpZW50VHJhbnNmb3JtKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdmFsdWUpCkBAIC02NywyMCArNjcsMjAgQEAgc3RydWN0IEdyYWRpZW50QXR0cmli
dXRlcyB7CiAgICAgfSAKIAogICAgIGJvb2wgaGFzU3ByZWFkTWV0aG9kKCkgY29uc3QgeyByZXR1
cm4gbV9zcHJlYWRNZXRob2RTZXQ7IH0KLSAgICBib29sIGhhc0JvdW5kaW5nQm94TW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYm91bmRpbmdCb3hNb2RlU2V0OyB9CisgICAgYm9vbCBoYXNHcmFkaWVu
dFVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVudFVuaXRzU2V0OyB9CiAgICAgYm9vbCBo
YXNHcmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnRUcmFuc2Zvcm1T
ZXQ7IH0KICAgICBib29sIGhhc1N0b3BzKCkgY29uc3QgeyByZXR1cm4gbV9zdG9wc1NldDsgfQog
CiBwcml2YXRlOgogICAgIC8vIFByb3BlcnRpZXMKICAgICBTVkdTcHJlYWRNZXRob2RUeXBlIG1f
c3ByZWFkTWV0aG9kOwotICAgIGJvb2wgbV9ib3VuZGluZ0JveE1vZGU7CisgICAgU1ZHVW5pdFR5
cGVzOjpTVkdVbml0VHlwZSBtX2dyYWRpZW50VW5pdHM7CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1f
Z3JhZGllbnRUcmFuc2Zvcm07CiAgICAgVmVjdG9yPEdyYWRpZW50OjpDb2xvclN0b3A+IG1fc3Rv
cHM7CiAKICAgICAvLyBQcm9wZXJ0eSBzdGF0ZXMKICAgICBib29sIG1fc3ByZWFkTWV0aG9kU2V0
IDogMTsKLSAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlU2V0IDogMTsKKyAgICBib29sIG1fZ3Jh
ZGllbnRVbml0c1NldCA6IDE7CiAgICAgYm9vbCBtX2dyYWRpZW50VHJhbnNmb3JtU2V0IDogMTsK
ICAgICBib29sIG1fc3RvcHNTZXQgOiAxOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9Q
YXR0ZXJuQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9QYXR0
ZXJuQXR0cmlidXRlcy5oCShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9Q
YXR0ZXJuQXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIHN0cnVj
dCBQYXR0ZXJuQXR0cmlidXRlcyB7CiAgICAgICAgICwgbV9oZWlnaHQoKQogICAgICAgICAsIG1f
dmlld0JveCgpCiAgICAgICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkKLSAgICAgICAgLCBt
X2JvdW5kaW5nQm94TW9kZSh0cnVlKQotICAgICAgICAsIG1fYm91bmRpbmdCb3hNb2RlQ29udGVu
dChmYWxzZSkKKyAgICAgICAgLCBtX3BhdHRlcm5Vbml0cyhTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgICAgICwgbV9wYXR0ZXJuQ29udGVudFVuaXRz
KFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSkKICAgICAgICAgLCBt
X3BhdHRlcm5Db250ZW50RWxlbWVudCgwKQogICAgICAgICAsIG1feFNldChmYWxzZSkKICAgICAg
ICAgLCBtX3lTZXQoZmFsc2UpCkBAIC00NSw4ICs0NSw4IEBAIHN0cnVjdCBQYXR0ZXJuQXR0cmli
dXRlcyB7CiAgICAgICAgICwgbV9oZWlnaHRTZXQoZmFsc2UpCiAgICAgICAgICwgbV92aWV3Qm94
U2V0KGZhbHNlKQogICAgICAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpb1NldChmYWxzZSkKLSAg
ICAgICAgLCBtX2JvdW5kaW5nQm94TW9kZVNldChmYWxzZSkKLSAgICAgICAgLCBtX2JvdW5kaW5n
Qm94TW9kZUNvbnRlbnRTZXQoZmFsc2UpCisgICAgICAgICwgbV9wYXR0ZXJuVW5pdHNTZXQoZmFs
c2UpCisgICAgICAgICwgbV9wYXR0ZXJuQ29udGVudFVuaXRzU2V0KGZhbHNlKQogICAgICAgICAs
IG1fcGF0dGVyblRyYW5zZm9ybVNldChmYWxzZSkKICAgICAgICAgLCBtX3BhdHRlcm5Db250ZW50
RWxlbWVudFNldChmYWxzZSkKICAgICB7CkBAIC01OCw4ICs1OCw4IEBAIHN0cnVjdCBQYXR0ZXJu
QXR0cmlidXRlcyB7CiAgICAgU1ZHTGVuZ3RoIGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGVp
Z2h0OyB9CiAgICAgRmxvYXRSZWN0IHZpZXdCb3goKSBjb25zdCB7IHJldHVybiBtX3ZpZXdCb3g7
IH0KICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIHByZXNlcnZlQXNwZWN0UmF0aW8oKSBjb25z
dCB7IHJldHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87IH0KLSAgICBib29sIGJvdW5kaW5nQm94
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRpbmdCb3hNb2RlOyB9Ci0gICAgYm9vbCBib3Vu
ZGluZ0JveE1vZGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveE1vZGVDb250
ZW50OyB9CisgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBwYXR0ZXJuVW5pdHMoKSBjb25z
dCB7IHJldHVybiBtX3BhdHRlcm5Vbml0czsgfQorICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5
cGUgcGF0dGVybkNvbnRlbnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybkNvbnRlbnRV
bml0czsgfQogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXR0ZXJuVHJhbnNmb3JtOyB9CiAgICAgY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQq
IHBhdHRlcm5Db250ZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybkNvbnRlbnRF
bGVtZW50OyB9CiAKQEAgLTk5LDE2ICs5OSwxNiBAQCBzdHJ1Y3QgUGF0dGVybkF0dHJpYnV0ZXMg
ewogICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW9TZXQgPSB0cnVlOwogICAgIH0KIAotICAg
IHZvaWQgc2V0Qm91bmRpbmdCb3hNb2RlKGJvb2wgdmFsdWUpCisgICAgdm9pZCBzZXRQYXR0ZXJu
VW5pdHMoU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1f
Ym91bmRpbmdCb3hNb2RlID0gdmFsdWU7Ci0gICAgICAgIG1fYm91bmRpbmdCb3hNb2RlU2V0ID0g
dHJ1ZTsKKyAgICAgICAgbV9wYXR0ZXJuVW5pdHMgPSB2YWx1ZTsKKyAgICAgICAgbV9wYXR0ZXJu
VW5pdHNTZXQgPSB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgc2V0Qm91bmRpbmdCb3hNb2RlQ29u
dGVudChib29sIHZhbHVlKQorICAgIHZvaWQgc2V0UGF0dGVybkNvbnRlbnRVbml0cyhTVkdVbml0
VHlwZXM6OlNWR1VuaXRUeXBlIHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9ib3VuZGluZ0JveE1v
ZGVDb250ZW50ID0gdmFsdWU7Ci0gICAgICAgIG1fYm91bmRpbmdCb3hNb2RlQ29udGVudFNldCA9
IHRydWU7CisgICAgICAgIG1fcGF0dGVybkNvbnRlbnRVbml0cyA9IHZhbHVlOworICAgICAgICBt
X3BhdHRlcm5Db250ZW50VW5pdHNTZXQgPSB0cnVlOwogICAgIH0KIAogICAgIHZvaWQgc2V0UGF0
dGVyblRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHZhbHVlKQpAQCAtMTI5LDggKzEy
OSw4IEBAIHN0cnVjdCBQYXR0ZXJuQXR0cmlidXRlcyB7CiAgICAgYm9vbCBoYXNIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2hlaWdodFNldDsgfQogICAgIGJvb2wgaGFzVmlld0JveCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlld0JveFNldDsgfQogICAgIGJvb2wgaGFzUHJlc2VydmVBc3BlY3RSYXRp
bygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc2VydmVBc3BlY3RSYXRpb1NldDsgfQotICAgIGJvb2wg
aGFzQm91bmRpbmdCb3hNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveE1vZGVTZXQ7
IH0KLSAgICBib29sIGhhc0JvdW5kaW5nQm94TW9kZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBt
X2JvdW5kaW5nQm94TW9kZUNvbnRlbnRTZXQ7IH0KKyAgICBib29sIGhhc1BhdHRlcm5Vbml0cygp
IGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVyblVuaXRzU2V0OyB9CisgICAgYm9vbCBoYXNQYXR0ZXJu
Q29udGVudFVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJuQ29udGVudFVuaXRzU2V0OyB9
CiAgICAgYm9vbCBoYXNQYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0ZXJu
VHJhbnNmb3JtU2V0OyB9CiAgICAgYm9vbCBoYXNQYXR0ZXJuQ29udGVudEVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX3BhdHRlcm5Db250ZW50RWxlbWVudFNldDsgfQogCkBAIC0xNDIsOCArMTQy
LDggQEAgcHJpdmF0ZToKICAgICBTVkdMZW5ndGggbV9oZWlnaHQ7CiAgICAgRmxvYXRSZWN0IG1f
dmlld0JveDsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvIG1fcHJlc2VydmVBc3BlY3RSYXRp
bzsKLSAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwotICAgIGJvb2wgbV9ib3VuZGluZ0JveE1v
ZGVDb250ZW50OworICAgIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgbV9wYXR0ZXJuVW5pdHM7
CisgICAgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSBtX3BhdHRlcm5Db250ZW50VW5pdHM7CiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1fcGF0dGVyblRyYW5zZm9ybTsKICAgICBjb25zdCBTVkdQYXR0
ZXJuRWxlbWVudCogbV9wYXR0ZXJuQ29udGVudEVsZW1lbnQ7CiAKQEAgLTE1NCw4ICsxNTQsOCBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9oZWlnaHRTZXQgOiAxOwogICAgIGJvb2wgbV92aWV3Qm94
U2V0IDogMTsKICAgICBib29sIG1fcHJlc2VydmVBc3BlY3RSYXRpb1NldCA6IDE7Ci0gICAgYm9v
bCBtX2JvdW5kaW5nQm94TW9kZVNldCA6IDE7Ci0gICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZUNv
bnRlbnRTZXQgOiAxOworICAgIGJvb2wgbV9wYXR0ZXJuVW5pdHNTZXQgOiAxOworICAgIGJvb2wg
bV9wYXR0ZXJuQ29udGVudFVuaXRzU2V0IDogMTsKICAgICBib29sIG1fcGF0dGVyblRyYW5zZm9y
bVNldCA6IDE7CiAgICAgYm9vbCBtX3BhdHRlcm5Db250ZW50RWxlbWVudFNldCA6IDE7CiB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA5OTUyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2
ICsxMTIsNyBAQAogI2luY2x1ZGUgIlNWR0ltYWdlTG9hZGVyLmNwcCIKICNpbmNsdWRlICJTVkdM
YW5nU3BhY2UuY3BwIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5jcHAiCisjaW5jbHVkZSAiU1ZHTGVu
Z3RoQ29udGV4dC5jcHAiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5jcHAiCiAjaW5jbHVkZSAi
U1ZHTGluZUVsZW1lbnQuY3BwIgogI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5j
cHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDk5NTI1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMs
NyBAQAogI2RlZmluZSBTVkdFbGVtZW50X2gKIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAi
U1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1ZGUgIlNWR0xvY2F0YWJsZS5oIgogI2luY2x1ZGUg
IlNWR1BhcnNpbmdFcnJvci5oIgogI2luY2x1ZGUgIlNWR1Byb3BlcnR5SW5mby5oIgpAQCAtNjIs
NiArNjMsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0dyYWRpZW50U3RvcCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVGV4dENvbnRlbnQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogCisgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3Jh
cnkgY29uc3RydWN0IHRvIGFpZCByZWR1Y2luZyB0aGUgaW1wYWN0IG9mIGludHJvZHVjaW5nIFNW
R0xlbmd0aENvbnRleHQuCisgICAgLy8gSXQgd2lsbCBiZSByZW1vdmVkIG9uY2UgYWxsIGNvZGUg
dGhhdCB1c2VzIHgoKS52YWx1ZSh0aGlzKSBpcyBnb25lLgorICAgIG9wZXJhdG9yIFNWR0xlbmd0
aENvbnRleHQoKSBjb25zdCB7IHJldHVybiBTVkdMZW5ndGhDb250ZXh0KHRoaXMpOyB9CisKICAg
ICAvLyBGb3IgU1ZHVGVzdHMKICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZpbHRlckVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNw
cAkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw2ICsxOTAsNyBAQCB2b2lkIFNWR0ZpbHRlckVs
ZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChiCiAKIEZsb2F0UmVjdCBTVkdGaWx0ZXJFbGVtZW50Ojpm
aWx0ZXJCb3VuZGluZ0JveChjb25zdCBGbG9hdFJlY3QmIG9iamVjdEJvdW5kaW5nQm94KSBjb25z
dAogeworICAgIC8vIEZJWE1FOiBBIGZvbGxvdy11cCBwYXRjaCB3aWxsIG1ha2UgZmlsdGVycyB1
c2UgU1ZHTGVuZ3RoQ29udGV4dDo6cmVzb2x2ZVJlY3RhbmdsZS4KICAgICBGbG9hdFJlY3QgZmls
dGVyQkJveDsKICAgICBpZiAoZmlsdGVyVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCiAgICAgICAgIGZpbHRlckJCb3ggPSBGbG9hdFJlY3Qo
eCgpLnZhbHVlQXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC53aWR0aCgpICsgb2Jq
ZWN0Qm91bmRpbmdCb3gueCgpLApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAJKHJldmlz
aW9uIDk5NTI1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDE2ICsyNSwxMCBAQAogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiAjaW5j
bHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgotI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdS
b290LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR0V4Y2VwdGlvbi5o
IgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTEzMyw3ICsxMjcsNyBAQCBT
VkdMZW5ndGg6OlNWR0xlbmd0aChTVkdMZW5ndGhNb2RlIG1vZGUsCiAgICAgc2V0VmFsdWVBc1N0
cmluZyh2YWx1ZUFzU3RyaW5nLCBlYyk7CiB9CiAKLVNWR0xlbmd0aDo6U1ZHTGVuZ3RoKGNvbnN0
IFNWR0VsZW1lbnQqIGNvbnRleHQsIGZsb2F0IHZhbHVlLCBTVkdMZW5ndGhNb2RlIG1vZGUsIFNW
R0xlbmd0aFR5cGUgdW5pdFR5cGUpCitTVkdMZW5ndGg6OlNWR0xlbmd0aChjb25zdCBTVkdMZW5n
dGhDb250ZXh0JiBjb250ZXh0LCBmbG9hdCB2YWx1ZSwgU1ZHTGVuZ3RoTW9kZSBtb2RlLCBTVkdM
ZW5ndGhUeXBlIHVuaXRUeXBlKQogICAgIDogbV92YWx1ZUluU3BlY2lmaWVkVW5pdHMoMCkKICAg
ICAsIG1fdW5pdChzdG9yZVVuaXQobW9kZSwgdW5pdFR5cGUpKQogewpAQCAtMTg2LDk2ICsxODAs
MzggQEAgU1ZHTGVuZ3RoVHlwZSBTVkdMZW5ndGg6OnVuaXRUeXBlKCkgY29ucwogICAgIHJldHVy
biBleHRyYWN0VHlwZShtX3VuaXQpOwogfQogCi1mbG9hdCBTVkdMZW5ndGg6OnZhbHVlKGNvbnN0
IFNWR0VsZW1lbnQqIGNvbnRleHQpIGNvbnN0CitTVkdMZW5ndGhNb2RlIFNWR0xlbmd0aDo6dW5p
dE1vZGUoKSBjb25zdAoreworICAgIHJldHVybiBleHRyYWN0TW9kZShtX3VuaXQpOworfQorCitm
bG9hdCBTVkdMZW5ndGg6OnZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgcmV0dXJuIHZhbHVlKGNvbnRl
eHQsIGVjKTsKIH0KIAotZmxvYXQgU1ZHTGVuZ3RoOjp2YWx1ZShjb25zdCBTVkdFbGVtZW50KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKK2Zsb2F0IFNWR0xlbmd0aDo6dmFsdWUo
Y29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvVXNlclVuaXRzKG1fdmFsdWVJblNwZWNpZmll
ZFVuaXRzLCBleHRyYWN0VHlwZShtX3VuaXQpLCBjb250ZXh0LCBlYyk7CisgICAgcmV0dXJuIGNv
bnRleHQuY29udmVydFZhbHVlVG9Vc2VyVW5pdHMobV92YWx1ZUluU3BlY2lmaWVkVW5pdHMsIGV4
dHJhY3RNb2RlKG1fdW5pdCksIGV4dHJhY3RUeXBlKG1fdW5pdCksIGVjKTsKIH0KIAotdm9pZCBT
VkdMZW5ndGg6OnNldFZhbHVlKGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIGZsb2F0IHZhbHVl
LCBTVkdMZW5ndGhNb2RlIG1vZGUsIFNWR0xlbmd0aFR5cGUgdW5pdFR5cGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBTVkdMZW5ndGg6OnNldFZhbHVlKGNvbnN0IFNWR0xlbmd0aENvbnRleHQm
IGNvbnRleHQsIGZsb2F0IHZhbHVlLCBTVkdMZW5ndGhNb2RlIG1vZGUsIFNWR0xlbmd0aFR5cGUg
dW5pdFR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1fdW5pdCA9IHN0b3JlVW5pdCht
b2RlLCB1bml0VHlwZSk7CiAgICAgc2V0VmFsdWUodmFsdWUsIGNvbnRleHQsIGVjKTsKIH0KIAot
dm9pZCBTVkdMZW5ndGg6OnNldFZhbHVlKGZsb2F0IHZhbHVlLCBjb25zdCBTVkdFbGVtZW50KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgU1ZHTGVuZ3RoOjpzZXRWYWx1ZShmbG9h
dCB2YWx1ZSwgY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgLy8gMTAwJSA9IDEwMC4wIGluc3RlYWQgb2YgMS4wIGZvciBoaXN0b3JpY2Fs
IHJlYXNvbnMsIHRoaXMgY291bGQgZXZlbnR1YWxseSBiZSBjaGFuZ2VkCiAgICAgaWYgKGV4dHJh
Y3RUeXBlKG1fdW5pdCkgPT0gTGVuZ3RoVHlwZVBlcmNlbnRhZ2UpCiAgICAgICAgIHZhbHVlID0g
dmFsdWUgLyAxMDA7CiAKLSAgICBmbG9hdCBjb252ZXJ0ZWRWYWx1ZSA9IGNvbnZlcnRWYWx1ZUZy
b21Vc2VyVW5pdHModmFsdWUsIGV4dHJhY3RUeXBlKG1fdW5pdCksIGNvbnRleHQsIGVjKTsKKyAg
ICBmbG9hdCBjb252ZXJ0ZWRWYWx1ZSA9IGNvbnRleHQuY29udmVydFZhbHVlRnJvbVVzZXJVbml0
cyh2YWx1ZSwgZXh0cmFjdE1vZGUobV91bml0KSwgZXh0cmFjdFR5cGUobV91bml0KSwgZWMpOwog
ICAgIGlmICghZWMpCiAgICAgICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gY29udmVydGVk
VmFsdWU7CiB9Ci0KLWZsb2F0IFNWR0xlbmd0aDo6Y29udmVydFZhbHVlVG9Vc2VyVW5pdHMoZmxv
YXQgdmFsdWUsIFNWR0xlbmd0aFR5cGUgZnJvbVVuaXQsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRl
eHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIHN3aXRjaCAoZnJvbVVuaXQpIHsK
LSAgICBjYXNlIExlbmd0aFR5cGVVbmtub3duOgotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURf
RVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIExlbmd0aFR5cGVOdW1iZXI6Ci0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICBjYXNlIExlbmd0aFR5cGVQWDoKLSAgICAgICAgcmV0dXJu
IHZhbHVlOwotICAgIGNhc2UgTGVuZ3RoVHlwZVBlcmNlbnRhZ2U6Ci0gICAgICAgIHJldHVybiBj
b252ZXJ0VmFsdWVGcm9tUGVyY2VudGFnZVRvVXNlclVuaXRzKHZhbHVlIC8gMTAwLCBjb250ZXh0
LCBlYyk7Ci0gICAgY2FzZSBMZW5ndGhUeXBlRU1TOgotICAgICAgICByZXR1cm4gY29udmVydFZh
bHVlRnJvbUVNU1RvVXNlclVuaXRzKHZhbHVlLCBjb250ZXh0LCBlYyk7Ci0gICAgY2FzZSBMZW5n
dGhUeXBlRVhTOgotICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVuaXRz
KHZhbHVlLCBjb250ZXh0LCBlYyk7Ci0gICAgY2FzZSBMZW5ndGhUeXBlQ006Ci0gICAgICAgIHJl
dHVybiB2YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyAyLjU0ZjsKLSAgICBjYXNlIExlbmd0aFR5
cGVNTToKLSAgICAgICAgcmV0dXJuIHZhbHVlICogY3NzUGl4ZWxzUGVySW5jaCAvIDI1LjRmOwot
ICAgIGNhc2UgTGVuZ3RoVHlwZUlOOgotICAgICAgICByZXR1cm4gdmFsdWUgKiBjc3NQaXhlbHNQ
ZXJJbmNoOwotICAgIGNhc2UgTGVuZ3RoVHlwZVBUOgotICAgICAgICByZXR1cm4gdmFsdWUgKiBj
c3NQaXhlbHNQZXJJbmNoIC8gNzI7Ci0gICAgY2FzZSBMZW5ndGhUeXBlUEM6Ci0gICAgICAgIHJl
dHVybiB2YWx1ZSAqIGNzc1BpeGVsc1BlckluY2ggLyA2OwotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotZmxvYXQgU1ZHTGVuZ3RoOjpjb252ZXJ0
VmFsdWVGcm9tVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBTVkdMZW5ndGhUeXBlIHRvVW5pdCwgY29u
c3QgU1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAg
c3dpdGNoICh0b1VuaXQpIHsKLSAgICBjYXNlIExlbmd0aFR5cGVVbmtub3duOgotICAgICAgICBl
YyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIExlbmd0
aFR5cGVOdW1iZXI6Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBjYXNlIExlbmd0aFR5cGVQ
ZXJjZW50YWdlOgotICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvUGVy
Y2VudGFnZSh2YWx1ZSAqIDEwMCwgY29udGV4dCwgZWMpOwotICAgIGNhc2UgTGVuZ3RoVHlwZUVN
UzoKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VNUyh2YWx1ZSwg
Y29udGV4dCwgZWMpOwotICAgIGNhc2UgTGVuZ3RoVHlwZUVYUzoKLSAgICAgICAgcmV0dXJuIGNv
bnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VYUyh2YWx1ZSwgY29udGV4dCwgZWMpOwotICAgIGNh
c2UgTGVuZ3RoVHlwZVBYOgotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgY2FzZSBMZW5ndGhU
eXBlQ006Ci0gICAgICAgIHJldHVybiB2YWx1ZSAqIDIuNTRmIC8gY3NzUGl4ZWxzUGVySW5jaDsK
LSAgICBjYXNlIExlbmd0aFR5cGVNTToKLSAgICAgICAgcmV0dXJuIHZhbHVlICogMjUuNGYgLyBj
c3NQaXhlbHNQZXJJbmNoOwotICAgIGNhc2UgTGVuZ3RoVHlwZUlOOgotICAgICAgICByZXR1cm4g
dmFsdWUgLyBjc3NQaXhlbHNQZXJJbmNoOwotICAgIGNhc2UgTGVuZ3RoVHlwZVBUOgotICAgICAg
ICByZXR1cm4gdmFsdWUgKiA3MiAvIGNzc1BpeGVsc1BlckluY2g7Ci0gICAgY2FzZSBMZW5ndGhU
eXBlUEM6Ci0gICAgICAgIHJldHVybiB2YWx1ZSAqIDYgLyBjc3NQaXhlbHNQZXJJbmNoOwotICAg
IH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQogZmxvYXQg
U1ZHTGVuZ3RoOjp2YWx1ZUFzUGVyY2VudGFnZSgpIGNvbnN0CiB7CiAgICAgLy8gMTAwJSA9IDEw
MC4wIGluc3RlYWQgb2YgMS4wIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoaXMgY291bGQgZXZl
bnR1YWxseSBiZSBjaGFuZ2VkCkBAIC0zMjYsNyArMjYyLDcgQEAgdm9pZCBTVkdMZW5ndGg6Om5l
d1ZhbHVlU3BlY2lmaWVkVW5pdHModQogICAgIG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0gdmFs
dWU7CiB9CiAKLXZvaWQgU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1bnNpZ25l
ZCBzaG9ydCB0eXBlLCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykKK3ZvaWQgU1ZHTGVuZ3RoOjpjb252ZXJ0VG9TcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9y
dCB0eXBlLCBjb25zdCBTVkdMZW5ndGhDb250ZXh0JiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBpZiAodHlwZSA9PSBMZW5ndGhUeXBlVW5rbm93biB8fCB0eXBlID4gTGVuZ3Ro
VHlwZVBDKSB7CiAgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CkBAIC0zNDcsMTc3ICsy
ODMsNiBAQCB2b2lkIFNWR0xlbmd0aDo6Y29udmVydFRvU3BlY2lmaWVkVW5pdHMoCiAgICAgbV91
bml0ID0gb3JpZ2luYWxVbml0QW5kVHlwZTsKIH0KIAotYm9vbCBTVkdMZW5ndGg6OmRldGVybWlu
ZVZpZXdwb3J0KGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIGZsb2F0JiB3aWR0aCwgZmxvYXQm
IGhlaWdodCkgY29uc3QKLXsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIFRha2Ugc2l6ZSBmcm9tIG91dGVybW9zdCA8c3ZnPiBlbGVtZW50LgotICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRleHQtPmRvY3VtZW50KCk7Ci0gICAgaWYgKGRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKSA9PSBjb250ZXh0KSB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5pc1NWRygpKSB7Ci0gICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBjb250ZXh0LT5kb2N1bWVu
dCgpID8gY29udGV4dC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSA6IDA7Ci0gICAgICAgICAgICBpZiAo
IWZyYW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8g
U1ZHcyBlbWJlZGRlZCB0aHJvdWdoIDxvYmplY3Q+IHJlc29sdmUgcGVyY2VudGFnZSB2YWx1ZXMg
YWdhaW5zdCB0aGUgb3duZXIgcmVuZGVyZXIgaW4gdGhlIGhvc3QgZG9jdW1lbnQuCi0gICAgICAg
ICAgICBpZiAoUmVuZGVyUGFydCogb3duZXJSZW5kZXJlciA9IGZyYW1lLT5vd25lclJlbmRlcmVy
KCkpIHsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IG93bmVyUmVuZGVyZXItPndpZHRoKCk7Ci0g
ICAgICAgICAgICAgICAgaGVpZ2h0ID0gb3duZXJSZW5kZXJlci0+aGVpZ2h0KCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBSZW5kZXJWaWV3KiB2aWV3ID0gdG9SZW5kZXJWaWV3KGRvY3VtZW50LT5yZW5kZXJlcigpKTsK
LSAgICAgICAgaWYgKCF2aWV3KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IC8vIEFsd2F5cyByZXNvbHZlIHBlcmNlbnRhZ2VzIGFnYWluc3QgdGhlIHVuc2NhbGVkIHZpZXdw
b3J0LCBhcyBhZ3JlZWQgYWNyb3NzIGJyb3dzZXJzLgotICAgICAgICBmbG9hdCB6b29tID0gdmll
dy0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICB3aWR0aCA9IHZpZXctPnZpZXdX
aWR0aCgpOwotICAgICAgICBoZWlnaHQgPSB2aWV3LT52aWV3SGVpZ2h0KCk7Ci0gICAgICAgIGlm
ICh6b29tICE9IDEpIHsKLSAgICAgICAgICAgIHdpZHRoIC89IHpvb207Ci0gICAgICAgICAgICBo
ZWlnaHQgLz0gem9vbTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICAvLyBUYWtlIHNpemUgZnJvbSBuZWFyZXN0IHZpZXdwb3J0IGVsZW1lbnQgKGNvbW1vbiBj
YXNlOiBpbm5lciA8c3ZnPiBlbGVtZW50cykKLSAgICBTVkdFbGVtZW50KiB2aWV3cG9ydEVsZW1l
bnQgPSBjb250ZXh0LT52aWV3cG9ydEVsZW1lbnQoKTsKLSAgICBpZiAodmlld3BvcnRFbGVtZW50
ICYmIHZpZXdwb3J0RWxlbWVudC0+aXNTVkcoKSkgewotICAgICAgICBjb25zdCBTVkdTVkdFbGVt
ZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdTVkdFbGVtZW50Kj4odmlld3BvcnRFbGVt
ZW50KTsKLSAgICAgICAgRmxvYXRSZWN0IHZpZXdCb3ggPSBzdmctPmN1cnJlbnRWaWV3Qm94UmVj
dCgpOwotICAgICAgICBpZiAodmlld0JveC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHdpZHRo
ID0gc3ZnLT53aWR0aCgpLnZhbHVlKHN2Zyk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBzdmctPmhl
aWdodCgpLnZhbHVlKHN2Zyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3aWR0aCA9
IHZpZXdCb3gud2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHZpZXdCb3guaGVpZ2h0KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLy8g
VGFrZSBzaXplIGZyb20gZW5jbG9zaW5nIG5vbi1TVkcgUmVuZGVyQm94IChjb21tb24gY2FzZTog
aW5saW5lIFNWRykKLSAgICBpZiAoIWNvbnRleHQtPnBhcmVudE5vZGUoKSB8fCBjb250ZXh0LT5w
YXJlbnROb2RlKCktPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29udGV4dC0+cmVuZGVyZXIoKTsKLSAgICBpZiAo
IXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgUmVuZGVyQm94KiBib3ggPSB0b1JlbmRlckJveChyZW5kZXJlcik7Ci0gICAgd2lkdGgg
PSBib3gtPndpZHRoKCk7Ci0gICAgaGVpZ2h0ID0gYm94LT5oZWlnaHQoKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotZmxvYXQgU1ZHTGVuZ3RoOjpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9Q
ZXJjZW50YWdlKGZsb2F0IHZhbHVlLCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBFeGNlcHRp
b25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBmbG9hdCB3aWR0aCA9IDA7Ci0gICAgZmxvYXQgaGVp
Z2h0ID0gMDsKLSAgICBpZiAoIWRldGVybWluZVZpZXdwb3J0KGNvbnRleHQsIHdpZHRoLCBoZWln
aHQpKSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIHN3aXRjaCAoZXh0cmFjdE1vZGUobV91bml0KSkgewotICAgIGNhc2Ug
TGVuZ3RoTW9kZVdpZHRoOgotICAgICAgICByZXR1cm4gdmFsdWUgLyB3aWR0aCAqIDEwMDsKLSAg
ICBjYXNlIExlbmd0aE1vZGVIZWlnaHQ6Ci0gICAgICAgIHJldHVybiB2YWx1ZSAvIGhlaWdodCAq
IDEwMDsKLSAgICBjYXNlIExlbmd0aE1vZGVPdGhlcjoKLSAgICAgICAgcmV0dXJuIHZhbHVlIC8g
KHNxcnRmKCh3aWR0aCAqIHdpZHRoICsgaGVpZ2h0ICogaGVpZ2h0KSAvIDIpKSAqIDEwMDsKLSAg
ICB9OwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWZs
b2F0IFNWR0xlbmd0aDo6Y29udmVydFZhbHVlRnJvbVBlcmNlbnRhZ2VUb1VzZXJVbml0cyhmbG9h
dCB2YWx1ZSwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0Ci17Ci0gICAgZmxvYXQgd2lkdGggPSAwOwotICAgIGZsb2F0IGhlaWdodCA9IDA7Ci0gICAg
aWYgKCFkZXRlcm1pbmVWaWV3cG9ydChjb250ZXh0LCB3aWR0aCwgaGVpZ2h0KSkgewotICAgICAg
ICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBzd2l0Y2ggKGV4dHJhY3RNb2RlKG1fdW5pdCkpIHsKLSAgICBjYXNlIExlbmd0aE1vZGVXaWR0
aDoKLSAgICAgICAgcmV0dXJuIHZhbHVlICogd2lkdGg7Ci0gICAgY2FzZSBMZW5ndGhNb2RlSGVp
Z2h0OgotICAgICAgICByZXR1cm4gdmFsdWUgKiBoZWlnaHQ7Ci0gICAgY2FzZSBMZW5ndGhNb2Rl
T3RoZXI6Ci0gICAgICAgIHJldHVybiB2YWx1ZSAqIHNxcnRmKCh3aWR0aCAqIHdpZHRoICsgaGVp
Z2h0ICogaGVpZ2h0KSAvIDIpOwotICAgIH07Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotZmxvYXQgU1ZHTGVuZ3RoOjpjb252ZXJ0VmFsdWVGcm9tVXNl
clVuaXRzVG9FTVMoZmxvYXQgdmFsdWUsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+cmVu
ZGVyZXIoKSB8fCAhY29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKSkgewotICAgICAgICBlYyA9
IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZW5k
ZXJTdHlsZSogc3R5bGUgPSBjb250ZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgpOwotICAgIGZsb2F0
IGZvbnRTaXplID0gc3R5bGUtPmZvbnRTaXplKCk7Ci0gICAgaWYgKCFmb250U2l6ZSkgewotICAg
ICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdmFsdWUgLyBmb250U2l6ZTsKLX0KLQotZmxvYXQgU1ZHTGVuZ3RoOjpjb252
ZXJ0VmFsdWVGcm9tRU1TVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIGNvbnN0IFNWR0VsZW1lbnQq
IGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAotewotICAgIGlmICghY29udGV4dCB8
fCAhY29udGV4dC0+cmVuZGVyZXIoKSB8fCAhY29udGV4dC0+cmVuZGVyZXIoKS0+c3R5bGUoKSkg
ewotICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBjb250ZXh0LT5yZW5kZXJlcigpLT5zdHls
ZSgpOwotICAgIHJldHVybiB2YWx1ZSAqIHN0eWxlLT5mb250U2l6ZSgpOwotfQotCi1mbG9hdCBT
VkdMZW5ndGg6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VYUyhmbG9hdCB2YWx1ZSwgY29u
c3QgU1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAg
aWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5yZW5kZXJlcigpIHx8ICFjb250ZXh0LT5yZW5kZXJl
cigpLT5zdHlsZSgpKSB7Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLQotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGNvbnRleHQtPnJl
bmRlcmVyKCktPnN0eWxlKCk7Ci0KLSAgICAvLyBVc2Ugb2YgY2VpbCBhbGxvd3MgYSBwaXhlbCBt
YXRjaCB0byB0aGUgVzNDcyBleHBlY3RlZCBvdXRwdXQgb2YgY29vcmRzLXVuaXRzLTAzLWIuc3Zn
Ci0gICAgLy8gaWYgdGhpcyBjYXVzZXMgcHJvYmxlbXMgaW4gcmVhbCB3b3JsZCBjYXNlcyBtYXli
ZSBpdCB3b3VsZCBiZSBiZXN0IHRvIHJlbW92ZSB0aGlzCi0gICAgZmxvYXQgeEhlaWdodCA9IGNl
aWxmKHN0eWxlLT5mb250TWV0cmljcygpLnhIZWlnaHQoKSk7Ci0gICAgaWYgKCF4SGVpZ2h0KSB7
Ci0gICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIHJldHVybiB2YWx1ZSAvIHhIZWlnaHQ7Ci19Ci0KLWZsb2F0IFNWR0xlbmd0aDo6
Y29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBjb25zdCBTVkdFbGVt
ZW50KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKLXsKLSAgICBpZiAoIWNvbnRl
eHQgfHwgIWNvbnRleHQtPnJlbmRlcmVyKCkgfHwgIWNvbnRleHQtPnJlbmRlcmVyKCktPnN0eWxl
KCkpIHsKLSAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gY29udGV4dC0+cmVuZGVyZXIoKS0+
c3R5bGUoKTsKLSAgICAvLyBVc2Ugb2YgY2VpbCBhbGxvd3MgYSBwaXhlbCBtYXRjaCB0byB0aGUg
VzNDcyBleHBlY3RlZCBvdXRwdXQgb2YgY29vcmRzLXVuaXRzLTAzLWIuc3ZnCi0gICAgLy8gaWYg
dGhpcyBjYXVzZXMgcHJvYmxlbXMgaW4gcmVhbCB3b3JsZCBjYXNlcyBtYXliZSBpdCB3b3VsZCBi
ZSBiZXN0IHRvIHJlbW92ZSB0aGlzCi0gICAgcmV0dXJuIHZhbHVlICogY2VpbGYoc3R5bGUtPmZv
bnRNZXRyaWNzKCkueEhlaWdodCgpKTsKLX0KLQogU1ZHTGVuZ3RoIFNWR0xlbmd0aDo6ZnJvbUNT
U1ByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlQo
dmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGguaAkocmV2aXNpb24gOTk1MjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyLDQyICsy
MiwyMCBAQAogI2RlZmluZSBTVkdMZW5ndGhfaAogCiAjaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgogI2luY2x1
ZGUgIlNWR1BhcnNpbmdFcnJvci5oIgogI2luY2x1ZGUgIlNWR1Byb3BlcnR5VHJhaXRzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7Ci0KLWVudW0g
U1ZHTGVuZ3RoVHlwZSB7Ci0gICAgTGVuZ3RoVHlwZVVua25vd24gPSAwLAotICAgIExlbmd0aFR5
cGVOdW1iZXIgPSAxLAotICAgIExlbmd0aFR5cGVQZXJjZW50YWdlID0gMiwKLSAgICBMZW5ndGhU
eXBlRU1TID0gMywKLSAgICBMZW5ndGhUeXBlRVhTID0gNCwKLSAgICBMZW5ndGhUeXBlUFggPSA1
LAotICAgIExlbmd0aFR5cGVDTSA9IDYsCi0gICAgTGVuZ3RoVHlwZU1NID0gNywKLSAgICBMZW5n
dGhUeXBlSU4gPSA4LAotICAgIExlbmd0aFR5cGVQVCA9IDksCi0gICAgTGVuZ3RoVHlwZVBDID0g
MTAKLX07Ci0KLWVudW0gU1ZHTGVuZ3RoTW9kZSB7Ci0gICAgTGVuZ3RoTW9kZVdpZHRoID0gMCwK
LSAgICBMZW5ndGhNb2RlSGVpZ2h0LAotICAgIExlbmd0aE1vZGVPdGhlcgotfTsKK2NsYXNzIFF1
YWxpZmllZE5hbWU7CiAKIGVudW0gU1ZHTGVuZ3RoTmVnYXRpdmVWYWx1ZXNNb2RlIHsKICAgICBB
bGxvd05lZ2F0aXZlTGVuZ3RocywKICAgICBGb3JiaWROZWdhdGl2ZUxlbmd0aHMKIH07CiAKLWNs
YXNzIFF1YWxpZmllZE5hbWU7Ci1jbGFzcyBTVkdFbGVtZW50OwotCiBjbGFzcyBTVkdMZW5ndGgg
ewogcHVibGljOgogICAgIC8vIEZvcndhcmQgZGVjbGFyZSB0aGVzZSBlbnVtcyBpbiB0aGUgdzNj
IG5hbWluZyBzY2hlbWUsIGZvciBJREwgZ2VuZXJhdGlvbgpAQCAtNzUsMjEgKzUzLDIyIEBAIHB1
YmxpYzoKICAgICAgICAgU1ZHX0xFTkdUSFRZUEVfUEMgPSBMZW5ndGhUeXBlUEMKICAgICB9Owog
Ci0gICAgU1ZHTGVuZ3RoKFNWR0xlbmd0aE1vZGUgbW9kZSA9IExlbmd0aE1vZGVPdGhlciwgY29u
c3QgU3RyaW5nJiB2YWx1ZUFzU3RyaW5nID0gU3RyaW5nKCkpOwotICAgIFNWR0xlbmd0aChjb25z
dCBTVkdFbGVtZW50KiwgZmxvYXQsIFNWR0xlbmd0aE1vZGUgbW9kZSA9IExlbmd0aE1vZGVPdGhl
ciwgU1ZHTGVuZ3RoVHlwZSB0eXBlID0gTGVuZ3RoVHlwZU51bWJlcik7CisgICAgU1ZHTGVuZ3Ro
KFNWR0xlbmd0aE1vZGUgPSBMZW5ndGhNb2RlT3RoZXIsIGNvbnN0IFN0cmluZyYgdmFsdWVBc1N0
cmluZyA9IFN0cmluZygpKTsKKyAgICBTVkdMZW5ndGgoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYs
IGZsb2F0LCBTVkdMZW5ndGhNb2RlID0gTGVuZ3RoTW9kZU90aGVyLCBTVkdMZW5ndGhUeXBlID0g
TGVuZ3RoVHlwZU51bWJlcik7CiAgICAgU1ZHTGVuZ3RoKGNvbnN0IFNWR0xlbmd0aCYpOwogCiAg
ICAgU1ZHTGVuZ3RoVHlwZSB1bml0VHlwZSgpIGNvbnN0OworICAgIFNWR0xlbmd0aE1vZGUgdW5p
dE1vZGUoKSBjb25zdDsKIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTVkdMZW5ndGgmKSBj
b25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU1ZHTGVuZ3RoJikgY29uc3Q7CiAKICAg
ICBzdGF0aWMgU1ZHTGVuZ3RoIGNvbnN0cnVjdChTVkdMZW5ndGhNb2RlLCBjb25zdCBTdHJpbmcm
LCBTVkdQYXJzaW5nRXJyb3ImLCBTVkdMZW5ndGhOZWdhdGl2ZVZhbHVlc01vZGUgPSBBbGxvd05l
Z2F0aXZlTGVuZ3Rocyk7CiAKLSAgICBmbG9hdCB2YWx1ZShjb25zdCBTVkdFbGVtZW50KiBjb250
ZXh0KSBjb25zdDsKLSAgICBmbG9hdCB2YWx1ZShjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRWYWx1ZShmbG9hdCwgY29uc3QgU1ZH
RWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2V0VmFsdWUoY29u
c3QgU1ZHRWxlbWVudCogY29udGV4dCwgZmxvYXQsIFNWR0xlbmd0aE1vZGUsIFNWR0xlbmd0aFR5
cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBmbG9hdCB2YWx1ZShjb25zdCBTVkdMZW5ndGhDb250
ZXh0JikgY29uc3Q7CisgICAgZmxvYXQgdmFsdWUoY29uc3QgU1ZHTGVuZ3RoQ29udGV4dCYsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlKGZsb2F0LCBjb25zdCBTVkdM
ZW5ndGhDb250ZXh0JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0VmFsdWUoY29uc3Qg
U1ZHTGVuZ3RoQ29udGV4dCYsIGZsb2F0LCBTVkdMZW5ndGhNb2RlLCBTVkdMZW5ndGhUeXBlLCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBmbG9hdCB2YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlSW5TcGVjaWZpZWRVbml0czsgfQogICAgIHZvaWQgc2V0VmFsdWVJ
blNwZWNpZmllZFVuaXRzKGZsb2F0IHZhbHVlKSB7IG1fdmFsdWVJblNwZWNpZmllZFVuaXRzID0g
dmFsdWU7IH0KQEAgLTEwMSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZhbHVlQXNT
dHJpbmcoY29uc3QgU3RyaW5nJiwgU1ZHTGVuZ3RoTW9kZSwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IAogICAgIHZvaWQgbmV3VmFsdWVTcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCwgZmxvYXQg
dmFsdWVJblNwZWNpZmllZFVuaXRzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBjb252ZXJ0
VG9TcGVjaWZpZWRVbml0cyh1bnNpZ25lZCBzaG9ydCwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4
dCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgY29udmVydFRvU3BlY2lmaWVkVW5pdHModW5z
aWduZWQgc2hvcnQsIGNvbnN0IFNWR0xlbmd0aENvbnRleHQmLCBFeGNlcHRpb25Db2RlJik7CiAK
ICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zCiAgICAgaW5saW5lIGJvb2wgaXNSZWxhdGl2ZSgpIGNv
bnN0CkBAIC0xMjMsNyArMTAyLDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgU1ZHTGVuZ3Ro
VHlwZSB0b1R5cGUgPSB1bml0VHlwZSgpOwogICAgICAgICBTVkdMZW5ndGhUeXBlIGZyb21UeXBl
ID0gZnJvbS51bml0VHlwZSgpOwotCiAgICAgICAgIGlmICgoZnJvbS5pc1plcm8oKSAmJiBpc1pl
cm8oKSkKICAgICAgICAgICAgIHx8IGZyb21UeXBlID09IExlbmd0aFR5cGVVbmtub3duCiAgICAg
ICAgICAgICB8fCB0b1R5cGUgPT0gTGVuZ3RoVHlwZVVua25vd24KQEAgLTE1OCwxMSArMTM2LDEz
IEBAIHB1YmxpYzoKIAogICAgICAgICBBU1NFUlQoIWlzUmVsYXRpdmUoKSk7CiAgICAgICAgIEFT
U0VSVCghZnJvbS5pc1JlbGF0aXZlKCkpOwotICAgICAgICBmbG9hdCBmcm9tVmFsdWVJblVzZXJV
bml0cyA9IGNvbnZlcnRWYWx1ZVRvVXNlclVuaXRzKGZyb20udmFsdWVJblNwZWNpZmllZFVuaXRz
KCksIGZyb21UeXBlLCAwLCBlYyk7CisKKyAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBub25SZWxh
dGl2ZUxlbmd0aENvbnRleHQoMCk7CisgICAgICAgIGZsb2F0IGZyb21WYWx1ZUluVXNlclVuaXRz
ID0gbm9uUmVsYXRpdmVMZW5ndGhDb250ZXh0LmNvbnZlcnRWYWx1ZVRvVXNlclVuaXRzKGZyb20u
dmFsdWVJblNwZWNpZmllZFVuaXRzKCksIGZyb20udW5pdE1vZGUoKSwgZnJvbVR5cGUsIGVjKTsK
ICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgcmV0dXJuIFNWR0xlbmd0aCgpOwogCi0gICAg
ICAgIGZsb2F0IGZyb21WYWx1ZSA9IGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHMoZnJvbVZhbHVl
SW5Vc2VyVW5pdHMsIHRvVHlwZSwgMCwgZWMpOworICAgICAgICBmbG9hdCBmcm9tVmFsdWUgPSBu
b25SZWxhdGl2ZUxlbmd0aENvbnRleHQuY29udmVydFZhbHVlRnJvbVVzZXJVbml0cyhmcm9tVmFs
dWVJblVzZXJVbml0cywgdW5pdE1vZGUoKSwgdG9UeXBlLCBlYyk7CiAgICAgICAgIGlmIChlYykK
ICAgICAgICAgICAgIHJldHVybiBTVkdMZW5ndGgoKTsKIApAQCAtMTc1LDIxICsxNTUsNiBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgZGV0ZXJtaW5lVmlld3BvcnQoY29u
c3QgU1ZHRWxlbWVudCogY29udGV4dCwgZmxvYXQmIHdpZHRoLCBmbG9hdCYgaGVpZ2h0KSBjb25z
dDsKLQotICAgIGZsb2F0IGNvbnZlcnRWYWx1ZVRvVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBTVkdM
ZW5ndGhUeXBlIGZyb21Vbml0LCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7Ci0gICAgZmxvYXQgY29udmVydFZhbHVlRnJvbVVzZXJVbml0cyhmbG9hdCB2
YWx1ZSwgU1ZHTGVuZ3RoVHlwZSB0b1VuaXQsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKLQotICAgIGZsb2F0IGNvbnZlcnRWYWx1ZUZyb21QZXJjZW50
YWdlVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBmbG9hdCBjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRz
VG9QZXJjZW50YWdlKGZsb2F0IHZhbHVlLCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJikgY29uc3Q7Ci0KLSAgICBmbG9hdCBjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRz
VG9FTVMoZmxvYXQgdmFsdWUsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4Y2VwdGlvbkNv
ZGUmKSBjb25zdDsKLSAgICBmbG9hdCBjb252ZXJ0VmFsdWVGcm9tRU1TVG9Vc2VyVW5pdHMoZmxv
YXQgdmFsdWUsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmKSBjb25z
dDsKLQotICAgIGZsb2F0IGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VYUyhmbG9hdCB2YWx1
ZSwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotICAg
IGZsb2F0IGNvbnZlcnRWYWx1ZUZyb21FWFNUb1VzZXJVbml0cyhmbG9hdCB2YWx1ZSwgY29uc3Qg
U1ZHRWxlbWVudCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwotCi1wcml2YXRlOgog
ICAgIGZsb2F0IG1fdmFsdWVJblNwZWNpZmllZFVuaXRzOwogICAgIHVuc2lnbmVkIGludCBtX3Vu
aXQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0aENvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdMZW5ndGhDb250ZXh0LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5j
bHVkZSAiU1ZHTGVuZ3RoQ29udGV4dC5oIgorCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCisjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NWR0xlbmd0aENvbnRleHQ6OlNWR0xlbmd0aENv
bnRleHQoY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0
KQoreworfQorCitTVkdMZW5ndGhDb250ZXh0OjpTVkdMZW5ndGhDb250ZXh0KGNvbnN0IFNWR0Vs
ZW1lbnQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdmlld3BvcnQpCisgICAgOiBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICAsIG1fb3ZlcnJpZGVuVmlld3BvcnQodmlld3BvcnQpCit7Cit9CisK
K0Zsb2F0UmVjdCBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlKGNvbnN0IFNWR0Vs
ZW1lbnQqIGNvbnRleHQsIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgdHlwZSwgY29uc3QgRmxv
YXRSZWN0JiB2aWV3cG9ydCwgY29uc3QgU1ZHTGVuZ3RoJiB4LCBjb25zdCBTVkdMZW5ndGgmIHks
IGNvbnN0IFNWR0xlbmd0aCYgd2lkdGgsIGNvbnN0IFNWR0xlbmd0aCYgaGVpZ2h0KQoreworICAg
IEFTU0VSVCh0eXBlICE9IFNWR1VuaXRUeXBlczo6U1ZHX1VOSVRfVFlQRV9VTktOT1dOKTsKKyAg
ICBpZiAodHlwZSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0Up
IHsKKyAgICAgICAgU1ZHTGVuZ3RoQ29udGV4dCBsZW5ndGhDb250ZXh0KGNvbnRleHQpOworICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KHgudmFsdWUobGVuZ3RoQ29udGV4dCksIHkudmFsdWUobGVu
Z3RoQ29udGV4dCksIHdpZHRoLnZhbHVlKGxlbmd0aENvbnRleHQpLCBoZWlnaHQudmFsdWUobGVu
Z3RoQ29udGV4dCkpOworICAgIH0KKworICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4
dChjb250ZXh0LCB2aWV3cG9ydCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdCh4LnZhbHVlKGxlbmd0
aENvbnRleHQpICsgdmlld3BvcnQueCgpLAorICAgICAgICAgICAgICAgICAgICAgeS52YWx1ZShs
ZW5ndGhDb250ZXh0KSArIHZpZXdwb3J0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgIHdpZHRo
LnZhbHVlKGxlbmd0aENvbnRleHQpLAorICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LnZhbHVl
KGxlbmd0aENvbnRleHQpKTsKK30KKworRmxvYXRQb2ludCBTVkdMZW5ndGhDb250ZXh0OjpyZXNv
bHZlUG9pbnQoY29uc3QgU1ZHRWxlbWVudCogY29udGV4dCwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0
VHlwZSB0eXBlLCBjb25zdCBTVkdMZW5ndGgmIHgsIGNvbnN0IFNWR0xlbmd0aCYgeSkKK3sKKyAg
ICBBU1NFUlQodHlwZSAhPSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVU5LTk9XTik7Cisg
ICAgaWYgKHR5cGUgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNF
KSB7CisgICAgICAgIFNWR0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChjb250ZXh0KTsKKyAg
ICAgICAgcmV0dXJuIEZsb2F0UG9pbnQoeC52YWx1ZShsZW5ndGhDb250ZXh0KSwgeS52YWx1ZShs
ZW5ndGhDb250ZXh0KSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IHZhbHVlQXNQZXJjZW50YWdl
KCkgd29uJ3QgYmUgY29ycmVjdCBmb3IgZWcuIGNtIHVuaXRzLiBUaGV5IG5lZWQgdG8gYmUgcmVz
b2x2ZWQgaW4gdXNlciBzcGFjZSBhbmQgdGhlbiBiZSBjb25zaWRlcmVkIGluIG9iamVjdEJvdW5k
aW5nQm94IHNwYWNlLgorICAgIHJldHVybiBGbG9hdFBvaW50KHgudmFsdWVBc1BlcmNlbnRhZ2Uo
KSwgeS52YWx1ZUFzUGVyY2VudGFnZSgpKTsKK30KKworZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6
cmVzb2x2ZUxlbmd0aChjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0LCBTVkdVbml0VHlwZXM6OlNW
R1VuaXRUeXBlIHR5cGUsIGNvbnN0IFNWR0xlbmd0aCYgeCkKK3sKKyAgICBBU1NFUlQodHlwZSAh
PSBTVkdVbml0VHlwZXM6OlNWR19VTklUX1RZUEVfVU5LTk9XTik7CisgICAgaWYgKHR5cGUgPT0g
U1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKSB7CisgICAgICAgIFNW
R0xlbmd0aENvbnRleHQgbGVuZ3RoQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIHgu
dmFsdWUobGVuZ3RoQ29udGV4dCk7CisgICAgfQorCisgICAgLy8gRklYTUU6IHZhbHVlQXNQZXJj
ZW50YWdlKCkgd29uJ3QgYmUgY29ycmVjdCBmb3IgZWcuIGNtIHVuaXRzLiBUaGV5IG5lZWQgdG8g
YmUgcmVzb2x2ZWQgaW4gdXNlciBzcGFjZSBhbmQgdGhlbiBiZSBjb25zaWRlcmVkIGluIG9iamVj
dEJvdW5kaW5nQm94IHNwYWNlLgorICAgIHJldHVybiB4LnZhbHVlQXNQZXJjZW50YWdlKCk7Cit9
CisKK2Zsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZVRvVXNlclVuaXRzKGZsb2F0
IHZhbHVlLCBTVkdMZW5ndGhNb2RlIG1vZGUsIFNWR0xlbmd0aFR5cGUgZnJvbVVuaXQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIC8vIElmIHRoZSBTVkdMZW5ndGhDb250ZXh0IGNh
cnJpZXMgYSBjdXN0b20gdmlld3BvcnQsIGZvcmNlIHJlc29sdmluZyBhZ2FpbnN0IGl0LgorICAg
IGlmICghbV9vdmVycmlkZW5WaWV3cG9ydC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gMTAwJSA9
IDEwMC4wIGluc3RlYWQgb2YgMS4wIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoaXMgY291bGQg
ZXZlbnR1YWxseSBiZSBjaGFuZ2VkCisgICAgICAgIGlmIChmcm9tVW5pdCA9PSBMZW5ndGhUeXBl
UGVyY2VudGFnZSkKKyAgICAgICAgICAgIHZhbHVlIC89IDEwMDsKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRWYWx1ZUZyb21QZXJjZW50YWdlVG9Vc2VyVW5pdHModmFsdWUsIG1vZGUsIGVjKTsKKyAg
ICB9CisKKyAgICBzd2l0Y2ggKGZyb21Vbml0KSB7CisgICAgY2FzZSBMZW5ndGhUeXBlVW5rbm93
bjoKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgY2FzZSBMZW5ndGhUeXBlTnVtYmVyOgorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgY2Fz
ZSBMZW5ndGhUeXBlUFg6CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBjYXNlIExlbmd0aFR5
cGVQZXJjZW50YWdlOgorICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbVBlcmNlbnRhZ2VU
b1VzZXJVbml0cyh2YWx1ZSAvIDEwMCwgbW9kZSwgZWMpOworICAgIGNhc2UgTGVuZ3RoVHlwZUVN
UzoKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZUZyb21FTVNUb1VzZXJVbml0cyh2YWx1ZSwg
ZWMpOworICAgIGNhc2UgTGVuZ3RoVHlwZUVYUzoKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRWYWx1
ZUZyb21FWFNUb1VzZXJVbml0cyh2YWx1ZSwgZWMpOworICAgIGNhc2UgTGVuZ3RoVHlwZUNNOgor
ICAgICAgICByZXR1cm4gdmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoIC8gMi41NGY7CisgICAgY2Fz
ZSBMZW5ndGhUeXBlTU06CisgICAgICAgIHJldHVybiB2YWx1ZSAqIGNzc1BpeGVsc1BlckluY2gg
LyAyNS40ZjsKKyAgICBjYXNlIExlbmd0aFR5cGVJTjoKKyAgICAgICAgcmV0dXJuIHZhbHVlICog
Y3NzUGl4ZWxzUGVySW5jaDsKKyAgICBjYXNlIExlbmd0aFR5cGVQVDoKKyAgICAgICAgcmV0dXJu
IHZhbHVlICogY3NzUGl4ZWxzUGVySW5jaCAvIDcyOworICAgIGNhc2UgTGVuZ3RoVHlwZVBDOgor
ICAgICAgICByZXR1cm4gdmFsdWUgKiBjc3NQaXhlbHNQZXJJbmNoIC8gNjsKKyAgICB9CisKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworZmxvYXQgU1ZHTGVu
Z3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVVzZXJVbml0cyhmbG9hdCB2YWx1ZSwgU1ZHTGVu
Z3RoTW9kZSBtb2RlLCBTVkdMZW5ndGhUeXBlIHRvVW5pdCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0Cit7CisgICAgc3dpdGNoICh0b1VuaXQpIHsKKyAgICBjYXNlIExlbmd0aFR5cGVVbmtub3du
OgorICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICBjYXNlIExlbmd0aFR5cGVOdW1iZXI6CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICBjYXNl
IExlbmd0aFR5cGVQZXJjZW50YWdlOgorICAgICAgICByZXR1cm4gY29udmVydFZhbHVlRnJvbVVz
ZXJVbml0c1RvUGVyY2VudGFnZSh2YWx1ZSAqIDEwMCwgbW9kZSwgZWMpOworICAgIGNhc2UgTGVu
Z3RoVHlwZUVNUzoKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VN
Uyh2YWx1ZSwgZWMpOworICAgIGNhc2UgTGVuZ3RoVHlwZUVYUzoKKyAgICAgICAgcmV0dXJuIGNv
bnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHNUb0VYUyh2YWx1ZSwgZWMpOworICAgIGNhc2UgTGVuZ3Ro
VHlwZVBYOgorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgY2FzZSBMZW5ndGhUeXBlQ006Cisg
ICAgICAgIHJldHVybiB2YWx1ZSAqIDIuNTRmIC8gY3NzUGl4ZWxzUGVySW5jaDsKKyAgICBjYXNl
IExlbmd0aFR5cGVNTToKKyAgICAgICAgcmV0dXJuIHZhbHVlICogMjUuNGYgLyBjc3NQaXhlbHNQ
ZXJJbmNoOworICAgIGNhc2UgTGVuZ3RoVHlwZUlOOgorICAgICAgICByZXR1cm4gdmFsdWUgLyBj
c3NQaXhlbHNQZXJJbmNoOworICAgIGNhc2UgTGVuZ3RoVHlwZVBUOgorICAgICAgICByZXR1cm4g
dmFsdWUgKiA3MiAvIGNzc1BpeGVsc1BlckluY2g7CisgICAgY2FzZSBMZW5ndGhUeXBlUEM6Cisg
ICAgICAgIHJldHVybiB2YWx1ZSAqIDYgLyBjc3NQaXhlbHNQZXJJbmNoOworICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitmbG9hdCBTVkdMZW5n
dGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9QZXJjZW50YWdlKGZsb2F0IHZh
bHVlLCBTVkdMZW5ndGhNb2RlIG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAg
IGZsb2F0IHdpZHRoID0gMDsKKyAgICBmbG9hdCBoZWlnaHQgPSAwOworICAgIGlmICghZGV0ZXJt
aW5lVmlld3BvcnQod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVE
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3dpdGNoIChtb2RlKSB7Cisg
ICAgY2FzZSBMZW5ndGhNb2RlV2lkdGg6CisgICAgICAgIHJldHVybiB2YWx1ZSAvIHdpZHRoICog
MTAwOworICAgIGNhc2UgTGVuZ3RoTW9kZUhlaWdodDoKKyAgICAgICAgcmV0dXJuIHZhbHVlIC8g
aGVpZ2h0ICogMTAwOworICAgIGNhc2UgTGVuZ3RoTW9kZU90aGVyOgorICAgICAgICByZXR1cm4g
dmFsdWUgLyAoc3FydGYoKHdpZHRoICogd2lkdGggKyBoZWlnaHQgKiBoZWlnaHQpIC8gMikpICog
MTAwOworICAgIH07CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworZmxvYXQgU1ZHTGVuZ3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbVBlcmNlbnRhZ2VU
b1VzZXJVbml0cyhmbG9hdCB2YWx1ZSwgU1ZHTGVuZ3RoTW9kZSBtb2RlLCBFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKK3sKKyAgICBmbG9hdCB3aWR0aCA9IDA7CisgICAgZmxvYXQgaGVpZ2h0ID0g
MDsKKyAgICBpZiAoIWRldGVybWluZVZpZXdwb3J0KHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAg
IGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgTGVuZ3RoTW9kZVdpZHRoOgorICAgICAgICByZXR1
cm4gdmFsdWUgKiB3aWR0aDsKKyAgICBjYXNlIExlbmd0aE1vZGVIZWlnaHQ6CisgICAgICAgIHJl
dHVybiB2YWx1ZSAqIGhlaWdodDsKKyAgICBjYXNlIExlbmd0aE1vZGVPdGhlcjoKKyAgICAgICAg
cmV0dXJuIHZhbHVlICogc3FydGYoKHdpZHRoICogd2lkdGggKyBoZWlnaHQgKiBoZWlnaHQpIC8g
Mik7CisgICAgfTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCitmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9F
TVMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlmICghbV9j
b250ZXh0IHx8ICFtX2NvbnRleHQtPnJlbmRlcmVyKCkgfHwgIW1fY29udGV4dC0+cmVuZGVyZXIo
KS0+c3R5bGUoKSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX2NvbnRleHQtPnJl
bmRlcmVyKCktPnN0eWxlKCk7CisgICAgZmxvYXQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUo
KTsKKyAgICBpZiAoIWZvbnRTaXplKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiB2YWx1ZSAvIGZvbnRTaXpl
OworfQorCitmbG9hdCBTVkdMZW5ndGhDb250ZXh0Ojpjb252ZXJ0VmFsdWVGcm9tRU1TVG9Vc2Vy
VW5pdHMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAoreworICAgIGlmICgh
bV9jb250ZXh0IHx8ICFtX2NvbnRleHQtPnJlbmRlcmVyKCkgfHwgIW1fY29udGV4dC0+cmVuZGVy
ZXIoKS0+c3R5bGUoKSkgeworICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX2NvbnRleHQt
PnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgcmV0dXJuIHZhbHVlICogc3R5bGUtPmZvbnRTaXpl
KCk7Cit9CisKK2Zsb2F0IFNWR0xlbmd0aENvbnRleHQ6OmNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5p
dHNUb0VYUyhmbG9hdCB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgaWYg
KCFtX2NvbnRleHQgfHwgIW1fY29udGV4dC0+cmVuZGVyZXIoKSB8fCAhbV9jb250ZXh0LT5yZW5k
ZXJlcigpLT5zdHlsZSgpKSB7CisgICAgICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fY29udGV4
dC0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKKworICAgIC8vIFVzZSBvZiBjZWlsIGFsbG93cyBhIHBp
eGVsIG1hdGNoIHRvIHRoZSBXM0NzIGV4cGVjdGVkIG91dHB1dCBvZiBjb29yZHMtdW5pdHMtMDMt
Yi5zdmcKKyAgICAvLyBpZiB0aGlzIGNhdXNlcyBwcm9ibGVtcyBpbiByZWFsIHdvcmxkIGNhc2Vz
IG1heWJlIGl0IHdvdWxkIGJlIGJlc3QgdG8gcmVtb3ZlIHRoaXMKKyAgICBmbG9hdCB4SGVpZ2h0
ID0gY2VpbGYoc3R5bGUtPmZvbnRNZXRyaWNzKCkueEhlaWdodCgpKTsKKyAgICBpZiAoIXhIZWln
aHQpIHsKKyAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgcmV0dXJuIHZhbHVlIC8geEhlaWdodDsKK30KKworZmxvYXQgU1ZHTGVu
Z3RoQ29udGV4dDo6Y29udmVydFZhbHVlRnJvbUVYU1RvVXNlclVuaXRzKGZsb2F0IHZhbHVlLCBF
eGNlcHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udGV4dCB8fCAhbV9jb250
ZXh0LT5yZW5kZXJlcigpIHx8ICFtX2NvbnRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCkpIHsKKyAg
ICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9jb250ZXh0LT5yZW5kZXJlcigpLT5zdHlsZSgp
OworICAgIC8vIFVzZSBvZiBjZWlsIGFsbG93cyBhIHBpeGVsIG1hdGNoIHRvIHRoZSBXM0NzIGV4
cGVjdGVkIG91dHB1dCBvZiBjb29yZHMtdW5pdHMtMDMtYi5zdmcKKyAgICAvLyBpZiB0aGlzIGNh
dXNlcyBwcm9ibGVtcyBpbiByZWFsIHdvcmxkIGNhc2VzIG1heWJlIGl0IHdvdWxkIGJlIGJlc3Qg
dG8gcmVtb3ZlIHRoaXMKKyAgICByZXR1cm4gdmFsdWUgKiBjZWlsZihzdHlsZS0+Zm9udE1ldHJp
Y3MoKS54SGVpZ2h0KCkpOworfQorCitib29sIFNWR0xlbmd0aENvbnRleHQ6OmRldGVybWluZVZp
ZXdwb3J0KGZsb2F0JiB3aWR0aCwgZmxvYXQmIGhlaWdodCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gSWYgYW4gb3ZlcnJpZGVu
IHZpZXdwb3J0IGlzIGdpdmVuLCBpdCBoYXMgcHJlY2VkZW5jZS4KKyAgICBpZiAoIW1fb3ZlcnJp
ZGVuVmlld3BvcnQuaXNFbXB0eSgpKSB7CisgICAgICAgIHdpZHRoID0gbV9vdmVycmlkZW5WaWV3
cG9ydC53aWR0aCgpOworICAgICAgICBoZWlnaHQgPSBtX292ZXJyaWRlblZpZXdwb3J0LmhlaWdo
dCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBUYWtlIHNpemUgZnJv
bSBvdXRlcm1vc3QgPHN2Zz4gZWxlbWVudC4KKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2Nv
bnRleHQtPmRvY3VtZW50KCk7CisgICAgaWYgKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSA9
PSBtX2NvbnRleHQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+aXNTVkcoKSkgeworICAgICAg
ICAgICAgRnJhbWUqIGZyYW1lID0gbV9jb250ZXh0LT5kb2N1bWVudCgpID8gbV9jb250ZXh0LT5k
b2N1bWVudCgpLT5mcmFtZSgpIDogMDsKKyAgICAgICAgICAgIGlmICghZnJhbWUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoUmVuZGVyUGFydCogb3du
ZXJSZW5kZXJlciA9IGZyYW1lLT5vd25lclJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICB3
aWR0aCA9IG93bmVyUmVuZGVyZXItPndpZHRoKCk7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0g
b3duZXJSZW5kZXJlci0+aGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdG9S
ZW5kZXJWaWV3KGRvY3VtZW50LT5yZW5kZXJlcigpKTsKKyAgICAgICAgaWYgKCF2aWV3KQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHdpZHRoID0gdmlldy0+dmlld1dpZHRo
KCk7CisgICAgICAgIGhlaWdodCA9IHZpZXctPnZpZXdIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgLy8gVGFrZSBzaXplIGZyb20gbmVhcmVzdCB2aWV3cG9ydCBl
bGVtZW50IChjb21tb24gY2FzZTogaW5uZXIgPHN2Zz4gZWxlbWVudHMpCisgICAgU1ZHRWxlbWVu
dCogdmlld3BvcnRFbGVtZW50ID0gbV9jb250ZXh0LT52aWV3cG9ydEVsZW1lbnQoKTsKKyAgICBp
ZiAodmlld3BvcnRFbGVtZW50ICYmIHZpZXdwb3J0RWxlbWVudC0+aXNTVkcoKSkgeworICAgICAg
ICBjb25zdCBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdTVkdFbGVt
ZW50Kj4odmlld3BvcnRFbGVtZW50KTsKKyAgICAgICAgaWYgKHN2Zy0+aGFzQXR0cmlidXRlKFNW
R05hbWVzOjp2aWV3Qm94QXR0cikpIHsKKyAgICAgICAgICAgIHdpZHRoID0gc3ZnLT52aWV3Qm94
KCkud2lkdGgoKTsKKyAgICAgICAgICAgIGhlaWdodCA9IHN2Zy0+dmlld0JveCgpLmhlaWdodCgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2lkdGggPSBzdmctPndpZHRoKCkudmFs
dWUoc3ZnKTsKKyAgICAgICAgICAgIGhlaWdodCA9IHN2Zy0+aGVpZ2h0KCkudmFsdWUoc3ZnKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBU
YWtlIHNpemUgZnJvbSBlbmNsb3Npbmcgbm9uLVNWRyBSZW5kZXJCb3ggKGNvbW1vbiBjYXNlOiBp
bmxpbmUgU1ZHKQorICAgIGlmICghbV9jb250ZXh0LT5wYXJlbnROb2RlKCkgfHwgbV9jb250ZXh0
LT5wYXJlbnROb2RlKCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9jb250ZXh0LT5yZW5kZXJlcigpOworICAg
IGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KHJlbmRlcmVyKTsKKyAgICB3
aWR0aCA9IGJveC0+d2lkdGgoKTsKKyAgICBoZWlnaHQgPSBib3gtPmhlaWdodCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0xlbmd0aENvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGVu
Z3RoQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0xlbmd0
aENvbnRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBTVkdMZW5ndGhDb250ZXh0X2gKKyNkZWZpbmUgU1ZHTGVuZ3RoQ29udGV4dF9o
CisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJTVkdVbml0VHlwZXMuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTVkdFbGVtZW50OworY2xhc3MgU1ZHTGVuZ3RoOworCitlbnVtIFNW
R0xlbmd0aFR5cGUgeworICAgIExlbmd0aFR5cGVVbmtub3duID0gMCwKKyAgICBMZW5ndGhUeXBl
TnVtYmVyLAorICAgIExlbmd0aFR5cGVQZXJjZW50YWdlLAorICAgIExlbmd0aFR5cGVFTVMsCisg
ICAgTGVuZ3RoVHlwZUVYUywKKyAgICBMZW5ndGhUeXBlUFgsCisgICAgTGVuZ3RoVHlwZUNNLAor
ICAgIExlbmd0aFR5cGVNTSwKKyAgICBMZW5ndGhUeXBlSU4sCisgICAgTGVuZ3RoVHlwZVBULAor
ICAgIExlbmd0aFR5cGVQQworfTsKKworZW51bSBTVkdMZW5ndGhNb2RlIHsKKyAgICBMZW5ndGhN
b2RlV2lkdGggPSAwLAorICAgIExlbmd0aE1vZGVIZWlnaHQsCisgICAgTGVuZ3RoTW9kZU90aGVy
Cit9OworCitjbGFzcyBTVkdMZW5ndGhDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBTVkdMZW5ndGhD
b250ZXh0KGNvbnN0IFNWR0VsZW1lbnQqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgc3RhdGljIEZsb2F0UmVjdCByZXNvbHZlUmVjdGFuZ2xlKGNvbnN0IFQqIGNvbnRleHQsIFNW
R1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUgdHlwZSwgY29uc3QgRmxvYXRSZWN0JiB2aWV3cG9ydCkK
KyAgICB7CisgICAgICAgIHJldHVybiBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xl
KGNvbnRleHQsIHR5cGUsIHZpZXdwb3J0LCBjb250ZXh0LT54KCksIGNvbnRleHQtPnkoKSwgY29u
dGV4dC0+d2lkdGgoKSwgY29udGV4dC0+aGVpZ2h0KCkpOworICAgIH0KKworICAgIHN0YXRpYyBG
bG9hdFJlY3QgcmVzb2x2ZVJlY3RhbmdsZShjb25zdCBTVkdFbGVtZW50KiwgU1ZHVW5pdFR5cGVz
OjpTVkdVbml0VHlwZSwgY29uc3QgRmxvYXRSZWN0JiB2aWV3cG9ydCwgY29uc3QgU1ZHTGVuZ3Ro
JiB4LCBjb25zdCBTVkdMZW5ndGgmIHksIGNvbnN0IFNWR0xlbmd0aCYgd2lkdGgsIGNvbnN0IFNW
R0xlbmd0aCYgaGVpZ2h0KTsKKyAgICBzdGF0aWMgRmxvYXRQb2ludCByZXNvbHZlUG9pbnQoY29u
c3QgU1ZHRWxlbWVudCosIFNWR1VuaXRUeXBlczo6U1ZHVW5pdFR5cGUsIGNvbnN0IFNWR0xlbmd0
aCYgeCwgY29uc3QgU1ZHTGVuZ3RoJiB5KTsKKyAgICBzdGF0aWMgZmxvYXQgcmVzb2x2ZUxlbmd0
aChjb25zdCBTVkdFbGVtZW50KiwgU1ZHVW5pdFR5cGVzOjpTVkdVbml0VHlwZSwgY29uc3QgU1ZH
TGVuZ3RoJik7CisKKyAgICBmbG9hdCBjb252ZXJ0VmFsdWVUb1VzZXJVbml0cyhmbG9hdCwgU1ZH
TGVuZ3RoTW9kZSwgU1ZHTGVuZ3RoVHlwZSBmcm9tVW5pdCwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0
OworICAgIGZsb2F0IGNvbnZlcnRWYWx1ZUZyb21Vc2VyVW5pdHMoZmxvYXQsIFNWR0xlbmd0aE1v
ZGUsIFNWR0xlbmd0aFR5cGUgdG9Vbml0LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgU1ZHTGVuZ3RoQ29udGV4dChjb25zdCBTVkdFbGVtZW50KiwgY29uc3QgRmxvYXRS
ZWN0JiB2aWV3cG9ydCk7CisKKyAgICBmbG9hdCBjb252ZXJ0VmFsdWVGcm9tVXNlclVuaXRzVG9Q
ZXJjZW50YWdlKGZsb2F0IHZhbHVlLCBTVkdMZW5ndGhNb2RlLCBFeGNlcHRpb25Db2RlJikgY29u
c3Q7CisgICAgZmxvYXQgY29udmVydFZhbHVlRnJvbVBlcmNlbnRhZ2VUb1VzZXJVbml0cyhmbG9h
dCB2YWx1ZSwgU1ZHTGVuZ3RoTW9kZSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCisgICAgZmxv
YXQgY29udmVydFZhbHVlRnJvbVVzZXJVbml0c1RvRU1TKGZsb2F0IHZhbHVlLCBFeGNlcHRpb25D
b2RlJikgY29uc3Q7CisgICAgZmxvYXQgY29udmVydFZhbHVlRnJvbUVNU1RvVXNlclVuaXRzKGZs
b2F0IHZhbHVlLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisKKyAgICBmbG9hdCBjb252ZXJ0VmFs
dWVGcm9tVXNlclVuaXRzVG9FWFMoZmxvYXQgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsK
KyAgICBmbG9hdCBjb252ZXJ0VmFsdWVGcm9tRVhTVG9Vc2VyVW5pdHMoZmxvYXQgdmFsdWUsIEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKKworICAgIGJvb2wgZGV0ZXJtaW5lVmlld3BvcnQoZmxvYXQm
IHdpZHRoLCBmbG9hdCYgaGVpZ2h0KSBjb25zdDsKKworICAgIGNvbnN0IFNWR0VsZW1lbnQqIG1f
Y29udGV4dDsKKyAgICBGbG9hdFJlY3QgbV9vdmVycmlkZW5WaWV3cG9ydDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCisjZW5kaWYgLy8gU1ZH
TGVuZ3RoQ29udGV4dF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDgg
KzEzNyw4IEBAIGJvb2wgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3IKICAgICAg
ICAgaWYgKCFhdHRyaWJ1dGVzLmhhc1NwcmVhZE1ldGhvZCgpICYmIGN1cnJlbnQtPmhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikpCiAgICAgICAgICAgICBhdHRyaWJ1dGVz
LnNldFNwcmVhZE1ldGhvZChjdXJyZW50LT5zcHJlYWRNZXRob2QoKSk7CiAKLSAgICAgICAgaWYg
KCFhdHRyaWJ1dGVzLmhhc0JvdW5kaW5nQm94TW9kZSgpICYmIGN1cnJlbnQtPmhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpKQotICAgICAgICAgICAgYXR0cmlidXRlcy5z
ZXRCb3VuZGluZ0JveE1vZGUoY3VycmVudC0+Z3JhZGllbnRVbml0cygpID09IFNWR1VuaXRUeXBl
czo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgIGlmICghYXR0cmli
dXRlcy5oYXNHcmFkaWVudFVuaXRzKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRlKFNWR05hbWVz
OjpncmFkaWVudFVuaXRzQXR0cikpCisgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldEdyYWRpZW50
VW5pdHMoY3VycmVudC0+Z3JhZGllbnRVbml0cygpKTsKIAogICAgICAgICBpZiAoIWF0dHJpYnV0
ZXMuaGFzR3JhZGllbnRUcmFuc2Zvcm0oKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikpIHsKICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm07CkBAIC0xOTEsMTQgKzE5MSw4IEBAIGJvb2wgU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50Ojpjb2xsZWN0R3IKIAogdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNhbGN1
bGF0ZVN0YXJ0RW5kUG9pbnRzKGNvbnN0IExpbmVhckdyYWRpZW50QXR0cmlidXRlcyYgYXR0cmli
dXRlcywgRmxvYXRQb2ludCYgc3RhcnRQb2ludCwgRmxvYXRQb2ludCYgZW5kUG9pbnQpCiB7Ci0g
ICAgLy8gRGV0ZXJtaW5lIGdyYWRpZW50IHN0YXJ0L2VuZCBwb2ludHMKLSAgICBpZiAoYXR0cmli
dXRlcy5ib3VuZGluZ0JveE1vZGUoKSkgewotICAgICAgICBzdGFydFBvaW50ID0gRmxvYXRQb2lu
dChhdHRyaWJ1dGVzLngxKCkudmFsdWVBc1BlcmNlbnRhZ2UoKSwgYXR0cmlidXRlcy55MSgpLnZh
bHVlQXNQZXJjZW50YWdlKCkpOwotICAgICAgICBlbmRQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmli
dXRlcy54MigpLnZhbHVlQXNQZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMueTIoKS52YWx1ZUFzUGVy
Y2VudGFnZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGFydFBvaW50ID0gRmxvYXRQb2lu
dChhdHRyaWJ1dGVzLngxKCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMueTEoKS52YWx1ZSh0aGlz
KSk7Ci0gICAgICAgIGVuZFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLngyKCkudmFsdWUo
dGhpcyksIGF0dHJpYnV0ZXMueTIoKS52YWx1ZSh0aGlzKSk7Ci0gICAgfQorICAgIHN0YXJ0UG9p
bnQgPSBTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUG9pbnQodGhpcywgYXR0cmlidXRlcy5ncmFk
aWVudFVuaXRzKCksIGF0dHJpYnV0ZXMueDEoKSwgYXR0cmlidXRlcy55MSgpKTsKKyAgICBlbmRQ
b2ludCA9IFNWR0xlbmd0aENvbnRleHQ6OnJlc29sdmVQb2ludCh0aGlzLCBhdHRyaWJ1dGVzLmdy
YWRpZW50VW5pdHMoKSwgYXR0cmlidXRlcy54MigpLCBhdHRyaWJ1dGVzLnkyKCkpOwogfQogCiBi
b29sIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6c2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDk5
NTI1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU5LDE5ICsxNTksNyBAQCB2b2lkIFNWR01hc2tFbGVtZW50OjpjaGlsZHJlbkNo
YW5nZWQoYm9vCiAKIEZsb2F0UmVjdCBTVkdNYXNrRWxlbWVudDo6bWFza0JvdW5kaW5nQm94KGNv
bnN0IEZsb2F0UmVjdCYgb2JqZWN0Qm91bmRpbmdCb3gpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0
IG1hc2tCQm94OwotICAgIGlmIChtYXNrVW5pdHMoKSA9PSBTVkdVbml0VHlwZXM6OlNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCi0gICAgICAgIG1hc2tCQm94ID0gRmxvYXRSZWN0KHgo
KS52YWx1ZUFzUGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSArIG9iamVj
dEJvdW5kaW5nQm94LngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSgpLnZhbHVl
QXNQZXJjZW50YWdlKCkgKiBvYmplY3RCb3VuZGluZ0JveC5oZWlnaHQoKSArIG9iamVjdEJvdW5k
aW5nQm94LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKS52YWx1ZUFz
UGVyY2VudGFnZSgpICogb2JqZWN0Qm91bmRpbmdCb3gud2lkdGgoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSAqIG9iamVjdEJvdW5k
aW5nQm94LmhlaWdodCgpKTsKLSAgICBlbHNlCi0gICAgICAgIG1hc2tCQm94ID0gRmxvYXRSZWN0
KHgoKS52YWx1ZSh0aGlzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSgpLnZhbHVl
KHRoaXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpLnZhbHVlKHRoaXMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKS52YWx1ZSh0aGlzKSk7Ci0K
LSAgICByZXR1cm4gbWFza0JCb3g7CisgICAgcmV0dXJuIFNWR0xlbmd0aENvbnRleHQ6OnJlc29s
dmVSZWN0YW5nbGU8U1ZHTWFza0VsZW1lbnQ+KHRoaXMsIG1hc2tVbml0cygpLCBvYmplY3RCb3Vu
ZGluZ0JveCk7CiB9CiAKIFJlbmRlck9iamVjdCogU1ZHTWFza0VsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqKQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShyZXZpc2lvbiA5OTUyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMSwx
MSArMjExLDExIEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmNvbGxlY3RQYXR0ZXJuQXQKICAg
ICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc1ByZXNlcnZlQXNwZWN0UmF0aW8oKSAmJiBjdXJyZW50
LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSkKICAgICAg
ICAgICAgIGF0dHJpYnV0ZXMuc2V0UHJlc2VydmVBc3BlY3RSYXRpbyhjdXJyZW50LT5wcmVzZXJ2
ZUFzcGVjdFJhdGlvKCkpOwogCi0gICAgICAgIGlmICghYXR0cmlidXRlcy5oYXNCb3VuZGluZ0Jv
eE1vZGUoKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRlcm5Vbml0c0F0
dHIpKQotICAgICAgICAgICAgYXR0cmlidXRlcy5zZXRCb3VuZGluZ0JveE1vZGUoY3VycmVudC0+
cGF0dGVyblVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YKTsKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc1BhdHRlcm5Vbml0cygpICYmIGN1
cnJlbnQtPmhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikpCisgICAgICAg
ICAgICBhdHRyaWJ1dGVzLnNldFBhdHRlcm5Vbml0cyhjdXJyZW50LT5wYXR0ZXJuVW5pdHMoKSk7
CiAKLSAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc0JvdW5kaW5nQm94TW9kZUNvbnRlbnQoKSAm
JiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRy
KSkKLSAgICAgICAgICAgIGF0dHJpYnV0ZXMuc2V0Qm91bmRpbmdCb3hNb2RlQ29udGVudChjdXJy
ZW50LT5wYXR0ZXJuQ29udGVudFVuaXRzKCkgPT0gU1ZHVW5pdFR5cGVzOjpTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc1BhdHRlcm5D
b250ZW50VW5pdHMoKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRlcm5D
b250ZW50VW5pdHNBdHRyKSkKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuc2V0UGF0dGVybkNvbnRl
bnRVbml0cyhjdXJyZW50LT5wYXR0ZXJuQ29udGVudFVuaXRzKCkpOwogCiAgICAgICAgIGlmICgh
YXR0cmlidXRlcy5oYXNQYXR0ZXJuVHJhbnNmb3JtKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRl
KFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cikpIHsKICAgICAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gOTk1MjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQz
LDggKzE0Myw4IEBAIGJvb2wgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0R3IKICAg
ICAgICAgaWYgKCFhdHRyaWJ1dGVzLmhhc1NwcmVhZE1ldGhvZCgpICYmIGN1cnJlbnQtPmhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikpCiAgICAgICAgICAgICBhdHRyaWJ1
dGVzLnNldFNwcmVhZE1ldGhvZChjdXJyZW50LT5zcHJlYWRNZXRob2QoKSk7CiAKLSAgICAgICAg
aWYgKCFhdHRyaWJ1dGVzLmhhc0JvdW5kaW5nQm94TW9kZSgpICYmIGN1cnJlbnQtPmhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpKQotICAgICAgICAgICAgYXR0cmlidXRl
cy5zZXRCb3VuZGluZ0JveE1vZGUoY3VycmVudC0+Z3JhZGllbnRVbml0cygpID09IFNWR1VuaXRU
eXBlczo6U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgIGlmICghYXR0
cmlidXRlcy5oYXNHcmFkaWVudFVuaXRzKCkgJiYgY3VycmVudC0+aGFzQXR0cmlidXRlKFNWR05h
bWVzOjpncmFkaWVudFVuaXRzQXR0cikpCisgICAgICAgICAgICBhdHRyaWJ1dGVzLnNldEdyYWRp
ZW50VW5pdHMoY3VycmVudC0+Z3JhZGllbnRVbml0cygpKTsKIAogICAgICAgICBpZiAoIWF0dHJp
YnV0ZXMuaGFzR3JhZGllbnRUcmFuc2Zvcm0oKSAmJiBjdXJyZW50LT5oYXNBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikpIHsKICAgICAgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm07CkBAIC0yMDgsMTUgKzIwOCw5IEBAIGJvb2wgU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50Ojpjb2xsZWN0R3IKIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpjYWxj
dWxhdGVGb2NhbENlbnRlclBvaW50c0FuZFJhZGl1cyhjb25zdCBSYWRpYWxHcmFkaWVudEF0dHJp
YnV0ZXMmIGF0dHJpYnV0ZXMsIEZsb2F0UG9pbnQmIGZvY2FsUG9pbnQsIEZsb2F0UG9pbnQmIGNl
bnRlclBvaW50LCBmbG9hdCYgcmFkaXVzKQogewogICAgIC8vIERldGVybWluZSBncmFkaWVudCBm
b2NhbC9jZW50ZXIgcG9pbnRzIGFuZCByYWRpdXMKLSAgICBpZiAoYXR0cmlidXRlcy5ib3VuZGlu
Z0JveE1vZGUoKSkgewotICAgICAgICBmb2NhbFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVz
LmZ4KCkudmFsdWVBc1BlcmNlbnRhZ2UoKSwgYXR0cmlidXRlcy5meSgpLnZhbHVlQXNQZXJjZW50
YWdlKCkpOwotICAgICAgICBjZW50ZXJQb2ludCA9IEZsb2F0UG9pbnQoYXR0cmlidXRlcy5jeCgp
LnZhbHVlQXNQZXJjZW50YWdlKCksIGF0dHJpYnV0ZXMuY3koKS52YWx1ZUFzUGVyY2VudGFnZSgp
KTsKLSAgICAgICAgcmFkaXVzID0gYXR0cmlidXRlcy5yKCkudmFsdWVBc1BlcmNlbnRhZ2UoKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBmb2NhbFBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVz
LmZ4KCkudmFsdWUodGhpcyksIGF0dHJpYnV0ZXMuZnkoKS52YWx1ZSh0aGlzKSk7Ci0gICAgICAg
IGNlbnRlclBvaW50ID0gRmxvYXRQb2ludChhdHRyaWJ1dGVzLmN4KCkudmFsdWUodGhpcyksIGF0
dHJpYnV0ZXMuY3koKS52YWx1ZSh0aGlzKSk7Ci0gICAgICAgIHJhZGl1cyA9IGF0dHJpYnV0ZXMu
cigpLnZhbHVlKHRoaXMpOwotICAgIH0KKyAgICBmb2NhbFBvaW50ID0gU1ZHTGVuZ3RoQ29udGV4
dDo6cmVzb2x2ZVBvaW50KHRoaXMsIGF0dHJpYnV0ZXMuZ3JhZGllbnRVbml0cygpLCBhdHRyaWJ1
dGVzLmZ4KCksIGF0dHJpYnV0ZXMuZnkoKSk7CisgICAgY2VudGVyUG9pbnQgPSBTVkdMZW5ndGhD
b250ZXh0OjpyZXNvbHZlUG9pbnQodGhpcywgYXR0cmlidXRlcy5ncmFkaWVudFVuaXRzKCksIGF0
dHJpYnV0ZXMuY3goKSwgYXR0cmlidXRlcy5jeSgpKTsKKyAgICByYWRpdXMgPSBTVkdMZW5ndGhD
b250ZXh0OjpyZXNvbHZlTGVuZ3RoKHRoaXMsIGF0dHJpYnV0ZXMuZ3JhZGllbnRVbml0cygpLCBh
dHRyaWJ1dGVzLnIoKSk7CiAKICAgICAvLyBFdmVudHVhbGx5IGFkanVzdCBmb2NhbCBwb2ludHMs
IGFzIGRlc2NyaWJlZCBiZWxvdwogICAgIGZsb2F0IGRlbHRhWCA9IGZvY2FsUG9pbnQueCgpIC0g
Y2VudGVyUG9pbnQueCgpOwo=
</data>
<flag name="review"
          id="112578"
          type_id="1"
          status="+"
          setter="zherczeg"
    />
          </attachment>
      

    </bug>

</bugzilla>