<?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>37116</bug_id>
          
          <creation_ts>2010-04-05 15:21:39 -0700</creation_ts>
          <short_desc>[chromium] Rename graphics layer specific classes from *Skia to *Chromium</short_desc>
          <delta_ts>2010-04-06 16:47:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vangelis Kokkevis">vangelis</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>208734</commentid>
    <comment_count>0</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-04-05 15:21:39 -0700</bug_when>
    <thetext>The renaming of classes is done in preparation for moving the code from platform/graphics/skia to platform/graphics/chromium as the layer compositor code will be very similar across all platforms, whether we&apos;re using Skia or CG.

The classes affected are:
LayerSkia -&gt; LayerChromium
LayerRendererSkia -&gt; LayerRendererChromium
GraphicsLayerSkia -&gt; GraphicsLayerChromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208818</commentid>
    <comment_count>1</comment_count>
      <attachid>52591</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-04-05 17:47:21 -0700</bug_when>
    <thetext>Created attachment 52591
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208819</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-05 17:52:37 -0700</bug_when>
    <thetext>Attachment 52591 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/skia/LayerRendererSkia.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/graphics/skia/LayerSkia.h:72:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/skia/LayerSkia.h:125:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 11 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>208828</commentid>
    <comment_count>3</comment_count>
      <attachid>52593</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-04-05 18:21:54 -0700</bug_when>
    <thetext>Created attachment 52593
Fixing first webkit style issue. 

I&apos;ve been previously told that the &quot;More than one command on the same line&quot; warnings are a result of a bug in the style checker so I&apos;m not modifying those lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208830</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-05 18:26:14 -0700</bug_when>
    <thetext>Attachment 52593 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/skia/LayerSkia.h:72:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/graphics/skia/LayerSkia.h:125:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2 in 11 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>209062</commentid>
    <comment_count>5</comment_count>
      <attachid>52593</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-06 08:40:56 -0700</bug_when>
    <thetext>Comment on attachment 52593
Fixing first webkit style issue. 

looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209314</commentid>
    <comment_count>6</comment_count>
      <attachid>52593</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-06 16:17:08 -0700</bug_when>
    <thetext>Comment on attachment 52593
Fixing first webkit style issue. 

Clearing flags on attachment: 52593

Committed r57176: &lt;http://trac.webkit.org/changeset/57176&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209315</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-06 16:17:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209334</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-06 16:47:11 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57176 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52591</attachid>
            <date>2010-04-05 17:47:21 -0700</date>
            <delta_ts>2010-04-05 18:21:54 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>skiaRename_patch.txt</filename>
            <type>text/plain</type>
            <size>51807</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzEwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDEwLTA0LTA1ICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlz
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW5hbWluZyBHcmFwaGljcyBMYXllciByZWxhdGVkIGNsYXNzZXMgdXNlZCBieSBD
aHJvbWl1bSBmcm9tICpTa2lhIHRvICpDaHJvbWl1bSBhbmQgcmVwbGFjaW5nIHdoZXJldmVyIHBv
c3NpYmxlIFNraWEtc3BlY2lmaWMKKyAgICAgICAgZGF0YSB0eXBlcyB3aXRoIFdlYkNvcmUgZXF1
aXZhbGVudHMuIFRoZSBzb3VyY2UgZmlsZXMgd2lsbCBiZSByZW5hbWVkIGFjY29yZGluZ2x5IGFu
ZCBtb3ZlZCBvdXQgb2YgcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYQorICAgICAgICBpbiBhIHN1YnNl
cXVlbnQgQ0wuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNzExNgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNvIG5vIG5ldyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNldExheWVyQm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJC
b3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRMYXllckJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06On5HcmFwaGljc0xheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bmF0aXZlTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQ2hpbGRBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkQWJvdmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0UG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRBbmNob3JQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlblRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFByZXNlcnZlczNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TWFza3NUb0JvdW5k
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERyYXdzQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEJhY2tn
cm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmNs
ZWFyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb1ZpZGVv
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0R2VvbWV0cnlP
cmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06Omhv
c3RMYXllckZvclN1YmxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hy
b21pdW06OmxheWVyRm9yU3VwZXJsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXREZWJ1Z0JhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQm9yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlU3VibGF5ZXJMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUFuY2hvclBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q2hpbGRyZW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclByZXNlcnZlczNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJEcmF3
c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRh
dGVMYXllckJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c1ZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlR2VvbWV0cnlPcmllbnRhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldHVwQ29udGVudHNM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZU9w
YWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNz
TGF5ZXJTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnBy
aW1hcnlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmNv
bnRlbnRzTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJSZW5k
ZXJlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJl
bmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp+TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbkNhbnZhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllckluQ2FudmFzUmVjdXJzaXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50
c1JlY3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRl
cmVyU2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRS
b290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyb290
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06On5MYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnVwZGF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkcmF3RGVidWdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkU3VibGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aW5zZXJ0U3VibGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlU3VibGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aW5kZXhPZlN1YmxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEJhY2tpbmdTdG9yZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnNldEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJv
b3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZW1vdmVBbGxTdWJs
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0U3VibGF5ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldFN1cGVybGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c3VwZXJsYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTGF5ZXJTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphbmNo
b3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3JkZXJXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6elBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmdldFN1YmxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRTdWJsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzdWJsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6dHJhbnNmb3JtKToKKwogMjAxMC0wNC0wNSAgWXV0YSBLaXRhbXVyYSAgPHl1
dGFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiA1
NzA4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw4ICs2NSw4IEBAIHR5cGVkZWYgUUdyYXBoaWNzSXRlbSBQbGF0Zm9y
bUxheWVyOwogdHlwZWRlZiBRR3JhcGhpY3NJdGVtKiBOYXRpdmVMYXllcjsKICNlbGlmIFBMQVRG
T1JNKENIUk9NSVVNKQogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTGF5ZXJTa2lhOwotdHlw
ZWRlZiBMYXllclNraWEgUGxhdGZvcm1MYXllcjsKK2NsYXNzIExheWVyQ2hyb21pdW07Cit0eXBl
ZGVmIExheWVyQ2hyb21pdW0gUGxhdGZvcm1MYXllcjsKIHR5cGVkZWYgdm9pZCogTmF0aXZlTGF5
ZXI7CiB9CiAjZWxzZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBo
aWNzTGF5ZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NMYXllclNraWEuY3BwCShyZXZpc2lvbiA1NzA4OCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0xheWVyU2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDIyICs1OSwyMiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIHNldExheWVyQm9yZGVyQ29sb3IoTGF5ZXJTa2lhJiBs
YXllciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0TGF5ZXJCb3JkZXJDb2xv
cihMYXllckNocm9taXVtJiBsYXllciwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGxheWVy
LnNldEJvcmRlckNvbG9yKGNvbG9yKTsKIH0KIAotc3RhdGljIHZvaWQgY2xlYXJCb3JkZXJDb2xv
cihMYXllclNraWEmIGxheWVyKQorc3RhdGljIHZvaWQgY2xlYXJCb3JkZXJDb2xvcihMYXllckNo
cm9taXVtJiBsYXllcikKIHsKICAgICBsYXllci5zZXRCb3JkZXJDb2xvcigwKTsKIH0KIAotc3Rh
dGljIHZvaWQgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoTGF5ZXJTa2lhJiBsYXllciwgY29uc3Qg
Q29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoTGF5ZXJD
aHJvbWl1bSYgbGF5ZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBsYXllci5zZXRCYWNr
Z3JvdW5kQ29sb3IoY29sb3IpOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhckxheWVyQmFja2dyb3Vu
ZENvbG9yKExheWVyU2tpYSYgbGF5ZXIpCitzdGF0aWMgdm9pZCBjbGVhckxheWVyQmFja2dyb3Vu
ZENvbG9yKExheWVyQ2hyb21pdW0mIGxheWVyKQogewogICAgIGxheWVyLnNldEJhY2tncm91bmRD
b2xvcigwKTsKIH0KQEAgLTg2LDIwICs4NiwyMCBAQCBHcmFwaGljc0xheWVyOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdGVzT3JpCiAKIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gbmV3
IEdyYXBoaWNzTGF5ZXJTa2lhKGNsaWVudCk7CisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0xheWVy
Q2hyb21pdW0oY2xpZW50KTsKIH0KIAotR3JhcGhpY3NMYXllclNraWE6OkdyYXBoaWNzTGF5ZXJT
a2lhKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK0dyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
R3JhcGhpY3NMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6
IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9jb250ZW50c0xheWVyUHVycG9zZShOb0Nv
bnRlbnRzTGF5ZXIpCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJIYXNCYWNrZ3JvdW5kQ29sb3IoZmFs
c2UpCiB7Ci0gICAgbV9sYXllciA9IExheWVyU2tpYTo6Y3JlYXRlKExheWVyU2tpYTo6TGF5ZXIs
IHRoaXMpOworICAgIG1fbGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoTGF5ZXJDaHJvbWl1
bTo6TGF5ZXIsIHRoaXMpOwogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CiAKLUdy
YXBoaWNzTGF5ZXJTa2lhOjp+R3JhcGhpY3NMYXllclNraWEoKQorR3JhcGhpY3NMYXllckNocm9t
aXVtOjp+R3JhcGhpY3NMYXllckNocm9taXVtKCkKIHsKICAgICAvLyBDbGVhbiB1cCB0aGUgU2tp
YSBsYXllci4KICAgICBpZiAobV9sYXllcikKQEAgLTEwOSwxOCArMTA5LDE4IEBAIEdyYXBoaWNz
TGF5ZXJTa2lhOjp+R3JhcGhpY3NMYXllclNraWEoKQogICAgICAgICBtX3RyYW5zZm9ybUxheWVy
LT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpz
ZXROYW1lKGNvbnN0IFN0cmluZyYgaW5OYW1lKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldE5hbWUoY29uc3QgU3RyaW5nJiBpbk5hbWUpCiB7Ci0gICAgU3RyaW5nIG5hbWUgPSBTdHJp
bmc6OmZvcm1hdCgiR3JhcGhpY3NMYXllclNraWEoJXApIEdyYXBoaWNzTGF5ZXIoJXApICIsIG1f
bGF5ZXIuZ2V0KCksIHRoaXMpICsgaW5OYW1lOworICAgIFN0cmluZyBuYW1lID0gU3RyaW5nOjpm
b3JtYXQoIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSglcCkgR3JhcGhpY3NMYXllciglcCkgIiwgbV9s
YXllci5nZXQoKSwgdGhpcykgKyBpbk5hbWU7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0TmFtZShu
YW1lKTsKIH0KIAotTmF0aXZlTGF5ZXIgR3JhcGhpY3NMYXllclNraWE6Om5hdGl2ZUxheWVyKCkg
Y29uc3QKK05hdGl2ZUxheWVyIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bmF0aXZlTGF5ZXIoKSBj
b25zdAogewogICAgIHJldHVybiBtX2xheWVyLmdldCgpOwogfQogCi1ib29sIEdyYXBoaWNzTGF5
ZXJTa2lhOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJl
bikKK2Jvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8
R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9
IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKICAgICAvLyBGSVhNRTogR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4gY2FsbHMgYWRkQ2hpbGQoKSBmb3IgZWFjaCBzdWJsYXll
ciwgd2hpY2gKQEAgLTEzMSwzMSArMTMxLDMxIEBAIGJvb2wgR3JhcGhpY3NMYXllclNraWE6OnNl
dENoaWxkcmVuKGNvbnMKICAgICByZXR1cm4gY2hpbGRyZW5DaGFuZ2VkOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyKQordm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5
ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7CiAgICAgdXBk
YXRlU3VibGF5ZXJMaXN0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OmFkZENoaWxk
QXRJbmRleChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBpbnQgaW5kZXgpCit2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5
ZXIsIGludCBpbmRleCkKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoY2hp
bGRMYXllciwgaW5kZXgpOwogICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIs
IEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRk
Q2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJs
aW5nKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3coY2hpbGRMYXllciwgc2li
bGluZyk7CiAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXll
clNraWE6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NM
YXllciAqc2libGluZykKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRDaGlsZEFib3Zl
KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIgKnNpYmxpbmcpCiB7CiAg
ICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShjaGlsZExheWVyLCBzaWJsaW5nKTsKICAg
ICB1cGRhdGVTdWJsYXllckxpc3QoKTsKIH0KIAotYm9vbCBHcmFwaGljc0xheWVyU2tpYTo6cmVw
bGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGls
ZCkKK2Jvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXll
ciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQogewogICAgIGlmIChHcmFwaGlj
c0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKSkgewogICAgICAgICB1cGRh
dGVTdWJsYXllckxpc3QoKTsKQEAgLTE2NCwxOSArMTY0LDE5IEBAIGJvb2wgR3JhcGhpY3NMYXll
clNraWE6OnJlcGxhY2VDaGlsZChHcmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NMYXllclNraWE6OnJlbW92ZUZyb21QYXJlbnQoKQordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnJlbW92ZUZyb21QYXJlbnQoKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKTsKICAgICBsYXllckZvclN1cGVybGF5ZXIoKS0+cmVtb3ZlRnJvbVN1cGVybGF5
ZXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0UG9zaXRpb24oY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRp
b24ocG9pbnQpOwogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0xheWVyU2tpYTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwb2ludCkKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50
M0QmIHBvaW50KQogewogICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQogICAgICAgICBy
ZXR1cm47CkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0QW5j
aG9yUG9pbnQoYwogICAgIHVwZGF0ZUFuY2hvclBvaW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NM
YXllclNraWE6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChz
aXplID09IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllclNraWE6OnNldFNpemUoY29uc3QgRmwKICAgICB1cGRhdGVMYXllclNpemUo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7CiAg
ICAgaWYgKHRyYW5zZm9ybSA9PSBtX3RyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAz
LDcgKzIwMyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldFRyYW5zZm9ybShjb24KICAg
ICB1cGRhdGVUcmFuc2Zvcm0oKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIGlmICh0cmFuc2Zvcm0gPT0gbV9j
aGlsZHJlblRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjEyLDcgKzIxMiw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclNraWE6OnNldENoaWxkcmVuVHJhbnMKICAgICB1cGRhdGVDaGlsZHJl
blRyYW5zZm9ybSgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRQcmVzZXJ2ZXMz
RChib29sIHByZXNlcnZlczNEKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFByZXNl
cnZlczNEKGJvb2wgcHJlc2VydmVzM0QpCiB7CiAgICAgaWYgKHByZXNlcnZlczNEID09IG1fcHJl
c2VydmVzM0QpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJTa2lhOjpzZXRQcmVzZXJ2ZXMzRChiCiAgICAgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMz
RCgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wg
bWFza3NUb0JvdW5kcykKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRNYXNrc1RvQm91
bmRzKGJvb2wgbWFza3NUb0JvdW5kcykKIHsKICAgICBpZiAobWFza3NUb0JvdW5kcyA9PSBtX21h
c2tzVG9Cb3VuZHMpCiAgICAgICAgIHJldHVybjsKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjpzZXRNYXNrc1RvQm91bmRzCiAgICAgdXBkYXRlTWFza3NUb0JvdW5k
cygpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBk
cmF3c0NvbnRlbnQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd3NDb250ZW50
KGJvb2wgZHJhd3NDb250ZW50KQogewogICAgIGlmIChkcmF3c0NvbnRlbnQgPT0gbV9kcmF3c0Nv
bnRlbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJTa2lhOjpzZXREcmF3c0NvbnRlbnQoCiAgICAgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChtX2JhY2tncm91bmRDb2xvclNl
dCAmJiBtX2JhY2tncm91bmRDb2xvciA9PSBjb2xvcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjUw
LDcgKzI1MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldEJhY2tncm91bmRDb2wKICAg
ICB1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJT
a2lhOjpjbGVhckJhY2tncm91bmRDb2xvcigpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKQogewogICAgIGlmICghbV9iYWNrZ3JvdW5kQ29sb3JTZXQp
CiAgICAgICAgIHJldHVybjsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJT
a2lhOjpjbGVhckJhY2tncm91bmRDCiAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9j
b250ZW50c0xheWVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0Q29udGVudHNP
cGFxdWUoYm9vbCBvcGFxdWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVu
dHNPcGFxdWUoYm9vbCBvcGFxdWUpCiB7CiAgICAgaWYgKG1fY29udGVudHNPcGFxdWUgPT0gb3Bh
cXVlKQogICAgICAgICByZXR1cm47CkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyU2tpYTo6c2V0Q29udGVudHNPcGFxdQogICAgIHVwZGF0ZUNvbnRlbnRzT3BhcXVlKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZp
c2libGUpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5
KGJvb2wgdmlzaWJsZSkKIHsKICAgICBpZiAobV9iYWNrZmFjZVZpc2liaWxpdHkgPT0gdmlzaWJs
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjc3LDcgKzI3Nyw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
clNraWE6OnNldEJhY2tmYWNlVmlzaWIKICAgICB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKIHsK
ICAgICBmbG9hdCBjbGFtcGVkT3BhY2l0eSA9IG1heChtaW4ob3BhY2l0eSwgMS4wZiksIDAuMGYp
OwogCkBAIC0yODgsMTkgKzI4OCwxOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRPcGFj
aXR5KGZsb2F0CiAgICAgcHJpbWFyeUxheWVyKCktPnNldE9wYWNpdHkob3BhY2l0eSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldE5lZWRzRGlzcGxheSgpCit2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICBpZiAoZHJhd3NDb250ZW50
KCkpCiAgICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lkIEdyYXBo
aWNzTGF5ZXJTa2lhOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQogICAgICAgICBt
X2xheWVyLT5zZXROZWVkc0Rpc3BsYXkocmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNr
aWE6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAg
IGlmIChyZWN0ID09IG1fY29udGVudHNSZWN0KQogICAgICAgICByZXR1cm47CkBAIC0zMDksMTcg
KzMwOSwxNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRDb250ZW50c1JlY3QoCiAgICAg
dXBkYXRlQ29udGVudHNSZWN0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldENv
bnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldENvbnRlbnRzVG9WaWRlbyhQbGF0
Zm9ybUxheWVyKiB2aWRlb0xheWVyKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENv
bnRlbnRzVG9WaWRlbyhQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0R2VvbWV0cnlPcmll
bnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0R2VvbWV0cnlPcmllbnRhdGlvbihDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAgICAgaWYgKG9yaWVu
dGF0aW9uID09IG1fZ2VvbWV0cnlPcmllbnRhdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtMzI4
LDIyICszMjgsMjIgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0R2VvbWV0cnlPcmllbgog
ICAgIHVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24oKTsKIH0KIAotUGxhdGZvcm1MYXllciogR3Jh
cGhpY3NMYXllclNraWE6Omhvc3RMYXllckZvclN1YmxheWVycygpIGNvbnN0CitQbGF0Zm9ybUxh
eWVyKiBHcmFwaGljc0xheWVyQ2hyb21pdW06Omhvc3RMYXllckZvclN1YmxheWVycygpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIgPyBtX3RyYW5zZm9ybUxheWVyLmdldCgp
IDogbV9sYXllci5nZXQoKTsKIH0KIAotUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllclNraWE6
OmxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0CitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVy
Q2hyb21pdW06OmxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdHJh
bnNmb3JtTGF5ZXIgPyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsKIH0K
IAotUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllclNraWE6OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAorUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllckNocm9taXVtOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gcHJpbWFyeUxheWVyKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NM
YXllclNraWE6OnNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JhY2tncm91bmRDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgc2V0TGF5
ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIsIGNvbG9yKTsKQEAgLTM1MSw3ICszNTEsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXREZWJ1Z0JhY2tncm91CiAgICAgICAgIGNsZWFyTGF5
ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lh
OjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IGJvcmRlcldpZHRoKQor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBj
b2xvciwgZmxvYXQgYm9yZGVyV2lkdGgpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewog
ICAgICAgICBzZXRMYXllckJvcmRlckNvbG9yKCptX2xheWVyLCBjb2xvcik7CkBAIC0zNjIsOSAr
MzYyLDkgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0RGVidWdCb3JkZXIoYwogICAgIH0K
IH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlU3VibGF5ZXJMaXN0KCkKK3ZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVTdWJsYXllckxpc3QoKQogewotICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJTa2lhPiA+IG5ld1N1YmxheWVyczsKKyAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gbmV3U3VibGF5ZXJzOwogCiAgICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIp
IHsKICAgICAgICAgLy8gQWRkIHRoZSBwcmltYXJ5IGxheWVyIGZpcnN0LiBFdmVuIGlmIHdlIGhh
dmUgbmVnYXRpdmUgei1vcmRlciBjaGlsZHJlbiwgdGhlIHByaW1hcnkgbGF5ZXIgYWx3YXlzIGNv
bWVzIGJlaGluZC4KQEAgLTM3OSw5ICszNzksOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1
cGRhdGVTdWJsYXllckxpCiAgICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRM
YXllcnMgPSBjaGlsZHJlbigpOwogICAgIHNpemVfdCBudW1DaGlsZHJlbiA9IGNoaWxkTGF5ZXJz
LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsK
LSAgICAgICAgR3JhcGhpY3NMYXllclNraWEqIGN1ckNoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhp
Y3NMYXllclNraWEqPihjaGlsZExheWVyc1tpXSk7CisgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogY3VyQ2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihjaGls
ZExheWVyc1tpXSk7CiAKLSAgICAgICAgTGF5ZXJTa2lhKiBjaGlsZExheWVyID0gY3VyQ2hpbGQt
PmxheWVyRm9yU3VwZXJsYXllcigpOworICAgICAgICBMYXllckNocm9taXVtKiBjaGlsZExheWVy
ID0gY3VyQ2hpbGQtPmxheWVyRm9yU3VwZXJsYXllcigpOwogICAgICAgICBuZXdTdWJsYXllcnMu
YXBwZW5kKGNoaWxkTGF5ZXIpOwogICAgIH0KIApAQCAtNDAxLDI5ICs0MDEsMjYgQEAgdm9pZCBH
cmFwaGljc0xheWVyU2tpYTo6dXBkYXRlU3VibGF5ZXJMaQogICAgICAgICBtX2xheWVyLT5zZXRT
dWJsYXllcnMobmV3U3VibGF5ZXJzKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBk
YXRlTGF5ZXJQb3NpdGlvbigpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5
ZXJQb3NpdGlvbigpCiB7CiAgICAgLy8gUG9zaXRpb24gaXMgb2Zmc2V0IG9uIHRoZSBsYXllciBi
eSB0aGUgbGF5ZXIgYW5jaG9yIHBvaW50LgotICAgIFNrUG9pbnQgbGF5ZXJQb3NpdGlvbjsKLSAg
ICBsYXllclBvc2l0aW9uLnNldChtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICog
bV9zaXplLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgbV9wb3NpdGlvbi55KCkgKyBt
X2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgRmxvYXRQb2ludCBsYXll
clBvc2l0aW9uKG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lk
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wb3NpdGlvbi55KCkgKyBtX2Fu
Y2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7CiAKICAgICBwcmltYXJ5TGF5ZXIoKS0+
c2V0UG9zaXRpb24obGF5ZXJQb3NpdGlvbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6
OnVwZGF0ZUxheWVyU2l6ZSgpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5
ZXJTaXplKCkKIHsKLSAgICBTa0lSZWN0IHJlY3Q7Ci0gICAgcmVjdC5zZXQoMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBsYXllclNpemUobV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIpIHsK
LSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0Qm91bmRzKHJlY3QpOworICAgICAgICBtX3Ry
YW5zZm9ybUxheWVyLT5zZXRCb3VuZHMobGF5ZXJTaXplKTsKICAgICAgICAgLy8gVGhlIGFuY2hv
ciBvZiB0aGUgY29udGVudHMgbGF5ZXIgaXMgYWx3YXlzIGF0IDAuNSwgMC41LCBzbyB0aGUgcG9z
aXRpb24gaXMgY2VudGVyLXJlbGF0aXZlLgotICAgICAgICBTa1BvaW50IGNlbnRlclBvaW50Owot
ICAgICAgICBjZW50ZXJQb2ludC5zZXQobV9zaXplLndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVp
Z2h0KCkgLyAyLjBmKTsKKyAgICAgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludChtX3NpemUud2lk
dGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOwogICAgICAgICBtX2xheWVyLT5zZXRQb3Np
dGlvbihjZW50ZXJQb2ludCk7CiAgICAgfQogCi0gICAgbV9sYXllci0+c2V0Qm91bmRzKHJlY3Qp
OworICAgIG1fbGF5ZXItPnNldEJvdW5kcyhsYXllclNpemUpOwogCiAgICAgLy8gTm90ZSB0aGF0
IHdlIGRvbid0IHJlc2l6ZSBtX2NvbnRlbnRzTGF5ZXIuIEl0J3MgdXAgdGhlIGNhbGxlciB0byBk
byB0aGF0LgogCkBAIC00MzIsNDcgKzQyOSw0NSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1
cGRhdGVMYXllclNpemUoCiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVBbmNob3JQb2ludCgpCit2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQW5jaG9yUG9pbnQoKQogewotICAgIFNrUG9pbnQgYW5jaG9yUG9pbnQ7
Ci0gICAgYW5jaG9yUG9pbnQuc2V0KG1fYW5jaG9yUG9pbnQueCgpLCBtX2FuY2hvclBvaW50Lnko
KSk7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KTsKKyAg
ICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludChtX2FuY2hvclBvaW50
LngoKSwgbV9hbmNob3JQb2ludC55KCkpKTsKICAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9y
UG9pbnRaKG1fYW5jaG9yUG9pbnQueigpKTsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0ZVRyYW5zZm9ybSgpCit2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVHJhbnNmb3JtKCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIo
KS0+c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNmb3JtKCkpOworICAgIHBy
aW1hcnlMYXllcigpLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwogfQogCi12b2lkIEdyYXBo
aWNzTGF5ZXJTa2lhOjp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSgpCit2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKQogewogICAgIHByaW1hcnlMYXll
cigpLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCit2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCiB7CiAgICAgbV9sYXllci0+c2V0
TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3VuZHMpOwogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9y
cygpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVDb250ZW50c09wYXF1ZSgp
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNPcGFxdWUoKQogewog
ICAgIG1fbGF5ZXItPnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0xheWVyU2tpYTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKK3ZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKQogewogICAgIG1fbGF5ZXIt
PnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0xheWVyU2tpYTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCit2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCiB7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudAogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVMYXllckRyYXdzQ29udGVu
dCgpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQo
KQogewogICAgIGlmIChtX2RyYXdzQ29udGVudCkKICAgICAgICAgbV9sYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CkBAIC00ODAsNyArNDc1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBk
YXRlTGF5ZXJEcmF3cwogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigpCit2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKQogewogICAgIGlm
ICghbV9jb250ZW50c0xheWVyKQogICAgICAgICByZXR1cm47CkBAIC00OTIsMzEgKzQ4NywyNiBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVMYXllckJhY2tnCiAgICAgICAgIGNsZWFy
TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fY29udGVudHNMYXllcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NMYXllclNraWE6OnVwZGF0ZUNvbnRlbnRzSW1hZ2UoKQordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbnRlbnRzSW1hZ2UoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
IH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlQ29udGVudHNWaWRlbygpCit2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNWaWRlbygpCiB7CiAgICAgLy8g
RklYTUU6IEltcGxlbWVudAogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVDb250
ZW50c1JlY3QoKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzUmVj
dCgpCiB7CiAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFNrUG9pbnQgcG9pbnQ7Ci0gICAgcG9pbnQuc2V0KG1fY29udGVudHNSZWN0LngoKSwgbV9jb250
ZW50c1JlY3QueSgpKTsKLSAgICBTa0lSZWN0IHJlY3Q7Ci0gICAgcmVjdC5zZXQoMCwgMCwgbV9j
b250ZW50c1JlY3Qud2lkdGgoKSwgbV9jb250ZW50c1JlY3QuaGVpZ2h0KCkpOwotCi0gICAgbV9j
b250ZW50c0xheWVyLT5zZXRQb3NpdGlvbihwb2ludCk7Ci0gICAgbV9jb250ZW50c0xheWVyLT5z
ZXRCb3VuZHMocmVjdCk7CisgICAgbV9jb250ZW50c0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KG1fY29udGVudHNSZWN0LngoKSwgbV9jb250ZW50c1JlY3QueSgpKSk7CisgICAgbV9jb250
ZW50c0xheWVyLT5zZXRCb3VuZHMoSW50U2l6ZShtX2NvbnRlbnRzUmVjdC53aWR0aCgpLCBtX2Nv
bnRlbnRzUmVjdC5oZWlnaHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRh
dGVHZW9tZXRyeU9yaWVudGF0aW9uKCkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRh
dGVHZW9tZXRyeU9yaWVudGF0aW9uKCkKIHsKICAgICBzd2l0Y2ggKGdlb21ldHJ5T3JpZW50YXRp
b24oKSkgewogICAgIGNhc2UgQ29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd246CkBAIC01MzEs
NyArNTIxLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlR2VvbWV0cnlPcgogICAg
IC8vIHNvIGlzIGhhbmRsZWQgdmlhIHNldEdlb21ldHJ5T3JpZW50YXRpb24oKS4KIH0KIAotdm9p
ZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0dXBDb250ZW50c0xheWVyKExheWVyU2tpYSogY29udGVu
dHNMYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXR1cENvbnRlbnRzTGF5ZXIo
TGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcikKIHsKICAgICBpZiAoY29udGVudHNMYXllciA9
PSBtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTU0NCw5ICs1MzQsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXR1cENvbnRlbnRzTGF5CiAgICAgaWYgKGNvbnRlbnRz
TGF5ZXIpIHsKICAgICAgICAgbV9jb250ZW50c0xheWVyID0gY29udGVudHNMYXllcjsKIAotICAg
ICAgICBTa1BvaW50IGFuY2hvclBvaW50OwotICAgICAgICBhbmNob3JQb2ludC5zZXQoMC4wZiwg
MC4wZik7Ci0gICAgICAgIG1fY29udGVudHNMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9p
bnQpOworICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQo
MCwgMCkpOwogCiAgICAgICAgIC8vIEluc2VydCB0aGUgY29udGVudCBsYXllciBmaXJzdC4gVmlk
ZW8gZWxlbWVudHMgcmVxdWlyZSB0aGlzLCBiZWNhdXNlIHRoZXkgaGF2ZQogICAgICAgICAvLyBz
aGFkb3cgY29udGVudCB0aGF0IG11c3QgZGlzcGxheSBpbiBmcm9udCBvZiB0aGUgdmlkZW8uCkBA
IC01NTYsMTQgKzU0NCwxNCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXR1cENvbnRlbnRz
TGF5CiAKICAgICAgICAgaWYgKHNob3dEZWJ1Z0JvcmRlcnMoKSkgewogICAgICAgICAgICAgc2V0
TGF5ZXJCb3JkZXJDb2xvcigqbV9jb250ZW50c0xheWVyLCBDb2xvcigwLCAwLCAxMjgsIDE4MCkp
OwotICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3JkZXJXaWR0aCgxLjBmKTsKKyAg
ICAgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0Qm9yZGVyV2lkdGgoMSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rp
b24gc2ltcGx5IG1pbWljcyB0aGUgb3BlcmF0aW9uIG9mIEdyYXBoaWNzTGF5ZXJDQQotdm9pZCBH
cmFwaGljc0xheWVyU2tpYTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnVwZGF0ZU9wYWNpdHlPbkxheWVyKCkKIHsKICAgICBwcmltYXJ5TGF5ZXIo
KS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmgJKHJldmlzaW9uIDU3MDg4KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDEyICszOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIExheWVyU2tpYTsKK2NsYXNzIExheWVyQ2hyb21pdW07CiAKLWNsYXNzIEdyYXBoaWNz
TGF5ZXJTa2lhIDogcHVibGljIEdyYXBoaWNzTGF5ZXIgeworY2xhc3MgR3JhcGhpY3NMYXllckNo
cm9taXVtIDogcHVibGljIEdyYXBoaWNzTGF5ZXIgewogcHVibGljOgotICAgIEdyYXBoaWNzTGF5
ZXJTa2lhKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVy
U2tpYSgpOworICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2xpZW50Kik7
CisgICAgdmlydHVhbCB+R3JhcGhpY3NMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKIApAQCAtMTAzLDkgKzEwMyw5IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVPcGFjaXR5T25MYXllcigpOwogCi0gICAgTGF5ZXJT
a2lhKiBwcmltYXJ5TGF5ZXIoKSBjb25zdCAgeyByZXR1cm4gbV90cmFuc2Zvcm1MYXllci5nZXQo
KSA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgpOyB9Ci0gICAgTGF5ZXJT
a2lhKiBob3N0TGF5ZXJGb3JTdWJsYXllcnMoKSBjb25zdDsKLSAgICBMYXllclNraWEqIGxheWVy
Rm9yU3VwZXJsYXllcigpIGNvbnN0OworICAgIExheWVyQ2hyb21pdW0qIHByaW1hcnlMYXllcigp
IGNvbnN0ICB7IHJldHVybiBtX3RyYW5zZm9ybUxheWVyLmdldCgpID8gbV90cmFuc2Zvcm1MYXll
ci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KKyAgICBMYXllckNocm9taXVtKiBob3N0TGF5ZXJG
b3JTdWJsYXllcnMoKSBjb25zdDsKKyAgICBMYXllckNocm9taXVtKiBsYXllckZvclN1cGVybGF5
ZXIoKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiAgICAgdm9pZCB1
cGRhdGVMYXllclBvc2l0aW9uKCk7CkBAIC0xMjUsMTIgKzEyNSwxMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgdm9pZCB1cGRhdGVHZW9tZXRyeU9yaWVu
dGF0aW9uKCk7CiAKLSAgICB2b2lkIHNldHVwQ29udGVudHNMYXllcihMYXllclNraWEqKTsKLSAg
ICBMYXllclNraWEqIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5
ZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldHVwQ29udGVudHNMYXllcihMYXllckNocm9taXVtKik7
CisgICAgTGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudHNMYXllci5nZXQoKTsgfQogCi0gICAgUmVmUHRyPExheWVyU2tpYT4gbV9sYXllcjsKLSAg
ICBSZWZQdHI8TGF5ZXJTa2lhPiBtX3RyYW5zZm9ybUxheWVyOwotICAgIFJlZlB0cjxMYXllclNr
aWE+IG1fY29udGVudHNMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zvcm1MYXllcjsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVyOwogCiAgICAgZW51bSBDb250ZW50c0xheWVy
UHVycG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJSZW5kZXJlclNraWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5jcHAJKHJl
dmlzaW9uIDU3MDg4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVu
ZGVyZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjggKzQwLDM1IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxMYXllclJlbmRlcmVyU2tpYT4gTGF5ZXJSZW5k
ZXJlclNraWE6OmNyZWF0ZSgpCitQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoKQogewotICAgIHJldHVybiBuZXcgTGF5ZXJSZW5k
ZXJlclNraWEoKTsKKyAgICByZXR1cm4gbmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogfQog
Ci1MYXllclJlbmRlcmVyU2tpYTo6TGF5ZXJSZW5kZXJlclNraWEoKQorTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oKQogICAgIDogbV9yb290TGF5ZXIoMCkKICAg
ICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogewogfQogCi1MYXllclJlbmRlcmVyU2tpYTo6fkxh
eWVyUmVuZGVyZXJTa2lhKCkKK0xheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJD
aHJvbWl1bSgpCiB7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlclNraWE6OmRyYXdMYXllcnNJbkNh
bnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzLCBTa1JlY3QgY2xpcFJlY3QpCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50cygpCit7CisgICAgaWYg
KG1fcm9vdExheWVyKQorICAgICAgICB1cGRhdGVMYXllckNvbnRlbnRzUmVjdXJzaXZlKG1fcm9v
dExheWVyLmdldCgpKTsKK30KKworI2lmIFBMQVRGT1JNKFNLSUEpCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0luQ2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52
YXMsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIGlmICghbV9yb290TGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhbnZhcy0+c2F2ZSgpOwotICAgIGNhbnZhcy0+Y2xpcFJl
Y3QoY2xpcFJlY3QpOworICAgIGNhbnZhcy0+Y2xpcFJlY3QoU2tSZWN0KGNsaXBSZWN0KSk7CiAK
ICAgICAvLyBGaXJzdCBjb21wb3NpdGUgdGhlIHJvb3QgbGF5ZXIgaW50byB0aGUgY2FudmFzLgog
ICAgIGNhbnZhcy0+ZHJhd0JpdG1hcChtX3Jvb3RMYXllci0+cGxhdGZvcm1DYW52YXMoKS0+Z2V0
RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSksIDAsIDAsIDApOwpAQCAtNzEsNyArNzgsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJTa2lhOjpkcmF3TGF5ZXJzSW5DYW52CiAgICAgY2FudmFzLT50
cmFuc2xhdGUoLW1fc2Nyb2xsRnJhbWUuZkxlZnQsIC1tX3Njcm9sbEZyYW1lLmZUb3ApOwogCiAg
ICAgZmxvYXQgb3BhY2l0eSA9IDEuMGY7Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclNr
aWE+ID4mIHN1YmxheWVycyA9IG1fcm9vdExheWVyLT5nZXRTdWJsYXllcnMoKTsKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9vdExheWVy
LT5nZXRTdWJsYXllcnMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5z
aXplKCk7IGkrKykKICAgICAgICAgZHJhd0xheWVySW5DYW52YXNSZWN1cnNpdmUoY2FudmFzLCBz
dWJsYXllcnNbaV0uZ2V0KCksIG9wYWNpdHkpOwogCkBAIC04MCwyNiArODcsMjAgQEAgdm9pZCBM
YXllclJlbmRlcmVyU2tpYTo6ZHJhd0xheWVyc0luQ2FudgogICAgIG1fbmVlZHNEaXNwbGF5ID0g
ZmFsc2U7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlclNraWE6OnVwZGF0ZUxheWVyQ29udGVudHMo
KQotewotICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgdXBkYXRlTGF5ZXJDb250ZW50c1Jl
Y3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlclNraWE6
OmRyYXdMYXllckluQ2FudmFzUmVjdXJzaXZlKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMs
IExheWVyU2tpYSogbGF5ZXIsIGZsb2F0IG9wYWNpdHkpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVySW5DYW52YXNSZWN1cnNpdmUoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNh
bnZhcywgTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgLy8gR3Vh
cmFudGVlcyB0aGF0IHRoZSBjYW52YXMgaXMgcmVzdG9yZWQgdG8gYSBrbm93biBzdGF0ZSBvbiBk
ZXN0cnVjdGlvbi4KICAgICBTa0F1dG9DYW52YXNSZXN0b3JlIGF1dG9SZXN0b3JlQ2FudmFzKGNh
bnZhcywgdHJ1ZSk7CiAKLSAgICBTa1BvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7
Ci0gICAgU2tQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAgIFNr
TWF0cml4IHRyYW5zZm9ybSA9IGxheWVyLT50cmFuc2Zvcm0oKTsKLSAgICBTa0lSZWN0IGJvdW5k
cyA9IGxheWVyLT5ib3VuZHMoKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBv
c2l0aW9uKCk7CisgICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2lu
dCgpOworICAgIFNrTWF0cml4IHRyYW5zZm9ybSA9IGxheWVyLT50cmFuc2Zvcm0oKS50b0FmZmlu
ZVRyYW5zZm9ybSgpOworICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwogCi0g
ICAgY2FudmFzLT50cmFuc2xhdGUocG9zaXRpb24uZlgsIHBvc2l0aW9uLmZZKTsKKyAgICBjYW52
YXMtPnRyYW5zbGF0ZShwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSk7CiAKLSAgICBTa1NjYWxh
ciB0eCA9IFNrU2NhbGFyTXVsKGFuY2hvclBvaW50LmZYLCBib3VuZHMud2lkdGgoKSk7Ci0gICAg
U2tTY2FsYXIgdHkgPSBTa1NjYWxhck11bChhbmNob3JQb2ludC5mWSwgYm91bmRzLmhlaWdodCgp
KTsKKyAgICBTa1NjYWxhciB0eCA9IFNrU2NhbGFyTXVsKGFuY2hvclBvaW50LngoKSwgYm91bmRz
LndpZHRoKCkpOworICAgIFNrU2NhbGFyIHR5ID0gU2tTY2FsYXJNdWwoYW5jaG9yUG9pbnQueSgp
LCBib3VuZHMuaGVpZ2h0KCkpOwogICAgIGNhbnZhcy0+dHJhbnNsYXRlKHR4LCB0eSk7CiAgICAg
Y2FudmFzLT5jb25jYXQodHJhbnNmb3JtKTsKICAgICBjYW52YXMtPnRyYW5zbGF0ZSgtdHgsIC10
eSk7CkBAIC0xMTcsMTYgKzExOCwxNyBAQCB2b2lkIExheWVyUmVuZGVyZXJTa2lhOjpkcmF3TGF5
ZXJJbkNhbnZhCiAKICAgICBjYW52YXMtPmRyYXdCaXRtYXAobGF5ZXItPnBsYXRmb3JtQ2FudmFz
KCktPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpLCAwLCAwLCAmb3BhY2l0eVBhaW50
KTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJTa2lhPiA+JiBzdWJsYXllcnMgPSBs
YXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllcklu
Q2FudmFzUmVjdXJzaXZlKGNhbnZhcywgc3VibGF5ZXJzW2ldLmdldCgpLCBvcGFjaXR5KTsKIH0K
KyNlbmRpZiAvLyBQTEFURk9STShTS0lBKQogCi12b2lkIExheWVyUmVuZGVyZXJTa2lhOjp1cGRh
dGVMYXllckNvbnRlbnRzUmVjdXJzaXZlKExheWVyU2tpYSogbGF5ZXIpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50c1JlY3Vyc2l2ZShMYXllckNocm9taXVt
KiBsYXllcikKIHsKICAgICBsYXllci0+dXBkYXRlQ29udGVudHMoKTsKIAotICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJTa2lhPiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJz
KCk7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMg
PSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJs
YXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIHVwZGF0ZUxheWVyQ29udGVudHNSZWN1cnNpdmUo
c3VibGF5ZXJzW2ldLmdldCgpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9MYXllclJlbmRlcmVyU2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5oCShyZXZpc2lvbiA1NzA4OCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogCiAjaW5jbHVkZSAiTGF5ZXJTa2lhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNDUsMjkgKzQ2LDMyIEBAIGNsYXNzIFBsYXRmb3JtQ2Fu
dmFzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIExheWVyUmVuZGVyZXJTa2lhIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSA6IHB1Ymxp
YyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8TGF5ZXJSZW5k
ZXJlclNraWE+IGNyZWF0ZSgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJD
aHJvbWl1bT4gY3JlYXRlKCk7CiAKLSAgICBMYXllclJlbmRlcmVyU2tpYSgpOwotICAgIH5MYXll
clJlbmRlcmVyU2tpYSgpOwotCi0gICAgdm9pZCBkcmF3TGF5ZXJzSW5DYW52YXMoc2tpYTo6UGxh
dGZvcm1DYW52YXMqLCBTa1JlY3QgY2xpcFJlY3QpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1
bSgpOworICAgIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIAorI2lmIFBMQVRGT1JNKFNLSUEp
CisgICAgdm9pZCBkcmF3TGF5ZXJzSW5DYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqLCBjb25z
dCBJbnRSZWN0JiBjbGlwUmVjdCk7CisjZW5kaWYKICAgICB2b2lkIHVwZGF0ZUxheWVyQ29udGVu
dHMoKTsKIAotICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8TGF5ZXJTa2lhPiBsYXll
cikgeyBtX3Jvb3RMYXllciA9IGxheWVyOyB9Ci0gICAgTGF5ZXJTa2lhKiByb290TGF5ZXIoKSB7
IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXIpIHsgbV9yb290TGF5ZXIgPSBsYXllcjsgfQorICAg
IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9
CiAKICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpIHsgbV9uZWVkc0Rpc3BsYXkgPSB0cnVlOyB9
CiAKICAgICB2b2lkIHNldFNjcm9sbEZyYW1lKFNrSVJlY3QmIHNjcm9sbEZyYW1lKSB7IG1fc2Ny
b2xsRnJhbWUgPSBzY3JvbGxGcmFtZTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgZHJhd0xheWVy
SW5DYW52YXNSZWN1cnNpdmUoc2tpYTo6UGxhdGZvcm1DYW52YXMqLCBMYXllclNraWEqLCBmbG9h
dCBvcGFjaXR5KTsKLSAgICB2b2lkIHVwZGF0ZUxheWVyQ29udGVudHNSZWN1cnNpdmUoTGF5ZXJT
a2lhKik7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICB2b2lkIGRyYXdMYXllckluQ2FudmFzUmVj
dXJzaXZlKHNraWE6OlBsYXRmb3JtQ2FudmFzKiwgTGF5ZXJDaHJvbWl1bSosIGZsb2F0IG9wYWNp
dHkpOworI2VuZGlmCisgICAgdm9pZCB1cGRhdGVMYXllckNvbnRlbnRzUmVjdXJzaXZlKExheWVy
Q2hyb21pdW0qKTsKIAotICAgIFJlZlB0cjxMYXllclNraWE+IG1fcm9vdExheWVyOworICAgIFJl
ZlB0cjxMYXllckNocm9taXVtPiBtX3Jvb3RMYXllcjsKIAogICAgIGJvb2wgbV9uZWVkc0Rpc3Bs
YXk7CiAgICAgU2tJUmVjdCBtX3Njcm9sbEZyYW1lOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0xheWVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0xheWVyU2tpYS5jcHAJKHJldmlzaW9uIDU3MDg4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDEyICs0MiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKLVBhc3NSZWZQdHI8TGF5ZXJTa2lhPiBMYXllclNraWE6OmNyZWF0ZShMYXllclR5cGUg
dHlwZSwgR3JhcGhpY3NMYXllclNraWEqIG93bmVyKQorUGFzc1JlZlB0cjxMYXllckNocm9taXVt
PiBMYXllckNocm9taXVtOjpjcmVhdGUoTGF5ZXJUeXBlIHR5cGUsIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMYXllclNraWEodHlwZSwg
b3duZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW0odHlwZSwgb3du
ZXIpKTsKIH0KIAotTGF5ZXJTa2lhOjpMYXllclNraWEoTGF5ZXJUeXBlIHR5cGUsIEdyYXBoaWNz
TGF5ZXJTa2lhKiBvd25lcikKK0xheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oTGF5ZXJUeXBl
IHR5cGUsIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBtX25lZWRzRGlzcGxh
eU9uQm91bmRzQ2hhbmdlKGZhbHNlKQogICAgICwgbV9vd25lcihvd25lcikKICAgICAsIG1fbGF5
ZXJUeXBlKHR5cGUpCkBAIC03MCwyOCArNzAsMjEgQEAgTGF5ZXJTa2lhOjpMYXllclNraWEoTGF5
ZXJUeXBlIHR5cGUsIEdyYQogICAgICwgbV9ncmFwaGljc0NvbnRleHQoMCkKICAgICAsIG1fZ2Vv
bWV0cnlGbGlwcGVkKGZhbHNlKQogewotICAgIG1fYm91bmRzLnNldEVtcHR5KCk7Ci0gICAgbV9i
YWNraW5nU3RvcmVSZWN0LnNldEVtcHR5KCk7Ci0gICAgbV9mcmFtZS5zZXRFbXB0eSgpOwotICAg
IG1fcG9zaXRpb24uc2V0KDAsIDApOwotICAgIG1fYW5jaG9yUG9pbnQuc2V0KDAsIDApOwotICAg
IG1fdHJhbnNmb3JtLnJlc2V0KCk7Ci0gICAgbV9zdWJsYXllclRyYW5zZm9ybS5yZXNldCgpOwot
CiAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KG1fYmFja2luZ1N0b3JlUmVjdCk7CiB9CiAKLUxh
eWVyU2tpYTo6fkxheWVyU2tpYSgpCitMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiB7
CiAgICAgLy8gT3VyIHN1cGVybGF5ZXIgc2hvdWxkIGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8g
dXMsIHNvIHRoZXJlIHNob3VsZCBiZSBubyB3YXkgZm9yIHVzIHRvIGJlIGRlc3Ryb3llZCB3aGls
ZSB3ZSBzdGlsbCBoYXZlIGEgc3VwZXJsYXllci4KICAgICBBU1NFUlQoIXN1cGVybGF5ZXIoKSk7
CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjp1cGRhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgU2tJUmVj
dCYgcmVjdCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6dXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0
IEludFNpemUmIHNpemUpCiB7CisjaWYgUExBVEZPUk0oU0tJQSkKICAgICAvLyBDcmVhdGUgbmV3
IGNhbnZhcyBhbmQgY29udGV4dC4gT3duUHRyIHRha2VzIGNhcmUgb2YgZnJlZWluZyB1cAogICAg
IC8vIHRoZSBvbGQgb25lcy4KLSAgICBtX2NhbnZhcyA9IG5ldyBza2lhOjpQbGF0Zm9ybUNhbnZh
cyhyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCksIGZhbHNlKTsKKyAgICBtX2NhbnZhcyA9IG5l
dyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNl
KTsKICAgICBtX3NraWFDb250ZXh0ID0gbmV3IFBsYXRmb3JtQ29udGV4dFNraWEobV9jYW52YXMu
Z2V0KCkpOwogCiAgICAgLy8gVGhpcyBpcyBuZWVkZWQgdG8gZ2V0IHRleHQgdG8gc2hvdyB1cCBj
b3JyZWN0bHkuIFdpdGhvdXQgaXQsCkBAIC0xMDAsMTQgKzkzLDE2IEBAIHZvaWQgTGF5ZXJTa2lh
Ojp1cGRhdGVHcmFwaGljc0NvbnRleHQoY28KICAgICBtX3NraWFDb250ZXh0LT5zZXREcmF3aW5n
VG9JbWFnZUJ1ZmZlcih0cnVlKTsKIAogICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbmV3IEdyYXBo
aWNzQ29udGV4dChyZWludGVycHJldF9jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4obV9z
a2lhQ29udGV4dC5nZXQoKSkpOwotCisjZWxzZQorI2Vycm9yICJOZWVkIHRvIGltcGxlbWVudCBm
b3IgeW91ciBwbGF0Zm9ybS4iCisjZW5kaWYKICAgICAvLyBUaGUgYmFja2luZyBzdG9yZSBhbGxv
Y2F0ZWQgZm9yIGEgbGF5ZXIgY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIncyBib3VuZHMu
CiAgICAgLy8gVGhpcyBpcyBtb3N0bHkgdHJ1ZSBmb3IgdGhlIHJvb3QgbGF5ZXIgd2hvc2UgYmFj
a2luZyBzdG9yZSBpcyBzaXplZCBiYXNlZCBvbiB0aGUgdmlzaWJsZQogICAgIC8vIHBvcnRpb24g
b2YgdGhlIGxheWVyIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgcGFnZSBzaXplLgotICAgIG1fYmFj
a2luZ1N0b3JlUmVjdCA9IHJlY3Q7CisgICAgbV9iYWNraW5nU3RvcmVSZWN0ID0gc2l6ZTsKIH0K
IAotdm9pZCBMYXllclNraWE6OnVwZGF0ZUNvbnRlbnRzKCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29udGVudHMoKQogewogICAgIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZyA9IHN0
YXRpY19jYXN0PFJlbmRlckxheWVyQmFja2luZyo+KG1fb3duZXItPmNsaWVudCgpKTsKIApAQCAt
MTE1LDcgKzExMCw3IEBAIHZvaWQgTGF5ZXJTa2lhOjp1cGRhdGVDb250ZW50cygpCiAgICAgICAg
IG1fb3duZXItPnBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCptX2dyYXBoaWNzQ29udGV4dCwg
SW50UmVjdCgwLCAwLCBtX2JvdW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQog
Ci12b2lkIExheWVyU2tpYTo6ZHJhd0RlYnVnQm9yZGVyKCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6
ZHJhd0RlYnVnQm9yZGVyKCkKIHsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IobV9ib3JkZXJDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CiAgICAgbV9ncmFwaGljc0NvbnRl
eHQtPnNldFN0cm9rZVRoaWNrbmVzcyhtX2JvcmRlcldpZHRoKTsKQEAgLTEyNSw3ICsxMjAsNyBA
QCB2b2lkIExheWVyU2tpYTo6ZHJhd0RlYnVnQm9yZGVyKCkKICAgICBtX2dyYXBoaWNzQ29udGV4
dC0+ZHJhd0xpbmUoSW50UG9pbnQoMCwgbV9ib3VuZHMuaGVpZ2h0KCkpLCBJbnRQb2ludChtX2Jv
dW5kcy53aWR0aCgpLCBtX2JvdW5kcy5oZWlnaHQoKSkpOwogfQogCi12b2lkIExheWVyU2tpYTo6
c2V0TmVlZHNDb21taXQoKQordm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0NvbW1pdCgpCiB7
CiAgICAgLy8gQ2FsbCBub3RpZnlTeW5jUmVxdWlyZWQoKSwgd2hpY2ggaW4gdGhpcyBpbXBsZW1l
bnRhdGlvbiBwbHVtYnMgdGhyb3VnaCB0bwogICAgIC8vIGNhbGwgc2V0Um9vdExheWVyTmVlZHNE
aXNwbGF5KCkgb24gdGhlIFdlYlZpZXcsIHdoaWNoIHdpbGwgY2F1c2UgTGF5ZXJSZW5kZXJlclNr
aWEKQEAgLTEzNCwxMiArMTI5LDEyIEBAIHZvaWQgTGF5ZXJTa2lhOjpzZXROZWVkc0NvbW1pdCgp
CiAgICAgICAgIG1fb3duZXItPm5vdGlmeVN5bmNSZXF1aXJlZCgpOwogfQogCi12b2lkIExheWVy
U2tpYTo6YWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllclNraWE+IHN1YmxheWVyKQordm9pZCBM
YXllckNocm9taXVtOjphZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IHN1Ymxh
eWVyKQogewogICAgIGluc2VydFN1YmxheWVyKHN1YmxheWVyLCBudW1TdWJsYXllcnMoKSk7CiB9
CiAKLXZvaWQgTGF5ZXJTa2lhOjppbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyU2tpYT4g
c3VibGF5ZXIsIHNpemVfdCBpbmRleCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6aW5zZXJ0U3VibGF5
ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBzdWJsYXllciwgc2l6ZV90IGluZGV4KQogewog
ICAgIGluZGV4ID0gbWluKGluZGV4LCBtX3N1YmxheWVycy5zaXplKCkpOwogICAgIG1fc3VibGF5
ZXJzLmluc2VydChpbmRleCwgc3VibGF5ZXIpOwpAQCAtMTQ3LDE2ICsxNDIsMTYgQEAgdm9pZCBM
YXllclNraWE6Omluc2VydFN1YmxheWVyKFBhc3NSZWZQdAogICAgIHNldE5lZWRzQ29tbWl0KCk7
CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpyZW1vdmVGcm9tU3VwZXJsYXllcigpCit2b2lkIExheWVy
Q2hyb21pdW06OnJlbW92ZUZyb21TdXBlcmxheWVyKCkKIHsKLSAgICBMYXllclNraWEqIHN1cGVy
bGF5ZXIgPSB0aGlzLT5zdXBlcmxheWVyKCk7CisgICAgTGF5ZXJDaHJvbWl1bSogc3VwZXJsYXll
ciA9IHRoaXMtPnN1cGVybGF5ZXIoKTsKICAgICBpZiAoIXN1cGVybGF5ZXIpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHN1cGVybGF5ZXItPnJlbW92ZVN1YmxheWVyKHRoaXMpOwogfQogCi12b2lk
IExheWVyU2tpYTo6cmVtb3ZlU3VibGF5ZXIoTGF5ZXJTa2lhKiBzdWJsYXllcikKK3ZvaWQgTGF5
ZXJDaHJvbWl1bTo6cmVtb3ZlU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bSogc3VibGF5ZXIpCiB7CiAg
ICAgaW50IGZvdW5kSW5kZXggPSBpbmRleE9mU3VibGF5ZXIoc3VibGF5ZXIpOwogICAgIGlmIChm
b3VuZEluZGV4ID09IC0xKQpAQCAtMTY3LDcgKzE2Miw3IEBAIHZvaWQgTGF5ZXJTa2lhOjpyZW1v
dmVTdWJsYXllcihMYXllclNraWEKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi1pbnQgTGF5
ZXJTa2lhOjppbmRleE9mU3VibGF5ZXIoY29uc3QgTGF5ZXJTa2lhKiByZWZlcmVuY2UpCitpbnQg
TGF5ZXJDaHJvbWl1bTo6aW5kZXhPZlN1YmxheWVyKGNvbnN0IExheWVyQ2hyb21pdW0qIHJlZmVy
ZW5jZSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3VibGF5ZXJzLnNpemUoKTsg
aSsrKSB7CiAgICAgICAgIGlmIChtX3N1YmxheWVyc1tpXSA9PSByZWZlcmVuY2UpCkBAIC0xNzYs
NyArMTcxLDcgQEAgaW50IExheWVyU2tpYTo6aW5kZXhPZlN1YmxheWVyKGNvbnN0IExheQogICAg
IHJldHVybiAtMTsKIH0KIAotdm9pZCBMYXllclNraWE6OnNldEJhY2tpbmdTdG9yZVJlY3QoY29u
c3QgU2tJUmVjdCYgcmVjdCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0QmFja2luZ1N0b3JlUmVj
dChjb25zdCBJbnRTaXplJiByZWN0KQogewogICAgIGlmIChtX2JhY2tpbmdTdG9yZVJlY3QgPT0g
cmVjdCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTg0LDcgKzE3OSw3IEBAIHZvaWQgTGF5ZXJTa2lh
OjpzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnMKICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQocmVj
dCk7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpzZXRCb3VuZHMoY29uc3QgU2tJUmVjdCYgcmVjdCkK
K3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Qm91bmRzKGNvbnN0IEludFNpemUmIHJlY3QpCiB7CiAg
ICAgaWYgKHJlY3QgPT0gbV9ib3VuZHMpCiAgICAgICAgIHJldHVybjsKQEAgLTIwMSw3ICsxOTYs
NyBAQCB2b2lkIExheWVyU2tpYTo6c2V0Qm91bmRzKGNvbnN0IFNrSVJlY3QmCiAgICAgc2V0TmVl
ZHNDb21taXQoKTsKIH0KIAotdm9pZCBMYXllclNraWE6OnNldEZyYW1lKGNvbnN0IFNrUmVjdCYg
cmVjdCkKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewogICAgIGlmIChyZWN0ID09IG1fZnJhbWUpCiAgICAgICByZXR1cm47CkBAIC0yMTAsMzUg
KzIwNSwzNSBAQCB2b2lkIExheWVyU2tpYTo6c2V0RnJhbWUoY29uc3QgU2tSZWN0JiByCiAgICAg
c2V0TmVlZHNDb21taXQoKTsKIH0KIAotY29uc3QgTGF5ZXJTa2lhKiBMYXllclNraWE6OnJvb3RM
YXllcigpIGNvbnN0Citjb25zdCBMYXllckNocm9taXVtKiBMYXllckNocm9taXVtOjpyb290TGF5
ZXIoKSBjb25zdAogewotICAgIGNvbnN0IExheWVyU2tpYSogbGF5ZXIgPSB0aGlzOwotICAgIGZv
ciAoTGF5ZXJTa2lhKiBzdXBlcmxheWVyID0gbGF5ZXItPnN1cGVybGF5ZXIoKTsgc3VwZXJsYXll
cjsgbGF5ZXIgPSBzdXBlcmxheWVyLCBzdXBlcmxheWVyID0gc3VwZXJsYXllci0+c3VwZXJsYXll
cigpKSB7IH0KKyAgICBjb25zdCBMYXllckNocm9taXVtKiBsYXllciA9IHRoaXM7CisgICAgZm9y
IChMYXllckNocm9taXVtKiBzdXBlcmxheWVyID0gbGF5ZXItPnN1cGVybGF5ZXIoKTsgc3VwZXJs
YXllcjsgbGF5ZXIgPSBzdXBlcmxheWVyLCBzdXBlcmxheWVyID0gc3VwZXJsYXllci0+c3VwZXJs
YXllcigpKSB7IH0KICAgICByZXR1cm4gbGF5ZXI7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpyZW1v
dmVBbGxTdWJsYXllcnMoKQordm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVBbGxTdWJsYXllcnMo
KQogewogICAgIG1fc3VibGF5ZXJzLmNsZWFyKCk7CiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0K
IAotdm9pZCBMYXllclNraWE6OnNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
U2tpYT4gPiYgc3VibGF5ZXJzKQordm9pZCBMYXllckNocm9taXVtOjpzZXRTdWJsYXllcnMoY29u
c3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMpCiB7CiAgICAgbV9z
dWJsYXllcnMgPSBzdWJsYXllcnM7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpzZXRTdXBlcmxheWVy
KExheWVyU2tpYSogc3VwZXJsYXllcikKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0U3VwZXJsYXll
cihMYXllckNocm9taXVtKiBzdXBlcmxheWVyKQogewogICAgIG1fc3VwZXJsYXllciA9IHN1cGVy
bGF5ZXI7CiB9CiAKLUxheWVyU2tpYSogTGF5ZXJTa2lhOjpzdXBlcmxheWVyKCkgY29uc3QKK0xh
eWVyQ2hyb21pdW0qIExheWVyQ2hyb21pdW06OnN1cGVybGF5ZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBtX3N1cGVybGF5ZXI7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpzZXROZWVkc0Rpc3BsYXko
Y29uc3QgU2tSZWN0JiBkaXJ0eVJlY3QpCit2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlz
cGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKIHsKICAgICAvLyBSZWRyYXcgdGhlIGNv
bnRlbnRzIG9mIHRoZSBsYXllci4KICAgICB1cGRhdGVDb250ZW50cygpOwpAQCAtMjQ2LDcgKzI0
MSw3IEBAIHZvaWQgTGF5ZXJTa2lhOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgU2sKICAgICBzZXRO
ZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIExheWVyU2tpYTo6c2V0TmVlZHNEaXNwbGF5KCkKK3Zv
aWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICAvLyBGSVhNRTogaW1w
bGVtZW50CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJTa2lh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyU2tp
YS5oCShyZXZpc2lvbiA1NzA4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9M
YXllclNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDEwIEBACiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLQorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyU2tpYS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2tDb2xvci5oIgotI2lu
Y2x1ZGUgIlNrUG9pbnQuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC01NCwyNSAr
NTIsMjUgQEAgY2xhc3MgUGxhdGZvcm1DYW52YXM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgTGF5ZXJTa2lhIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJTa2lhPiB7CitjbGFzcyBM
YXllckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJDaHJvbWl1bT4gewogcHVibGlj
OgogICAgIGVudW0gTGF5ZXJUeXBlIHsgTGF5ZXIsIFRyYW5zZm9ybUxheWVyIH07CiAgICAgZW51
bSBGaWx0ZXJUeXBlIHsgTGluZWFyLCBOZWFyZXN0LCBUcmlsaW5lYXIsIExhbmN6b3MgfTsKICAg
ICBlbnVtIENvbnRlbnRzR3Jhdml0eVR5cGUgeyBDZW50ZXIsIFRvcCwgQm90dG9tLCBMZWZ0LCBS
aWdodCwgVG9wTGVmdCwgVG9wUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Qm90dG9tTGVmdCwgQm90dG9tUmlnaHQsIFJlc2l6ZSwgUmVzaXplQXNwZWN0LCBSZXNpemVBc3Bl
Y3RGaWxsIH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclNraWE+IGNyZWF0ZShMYXll
clR5cGUsIEdyYXBoaWNzTGF5ZXJTa2lhKiBvd25lciA9IDApOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPExheWVyQ2hyb21pdW0+IGNyZWF0ZShMYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJDaHJvbWl1
bSogb3duZXIgPSAwKTsKIAotICAgIH5MYXllclNraWEoKTsKKyAgICB+TGF5ZXJDaHJvbWl1bSgp
OwogCiAgICAgdm9pZCBkaXNwbGF5KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7CiAKLSAgICB2
b2lkIGFkZFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJTa2lhPik7Ci0gICAgdm9pZCBpbnNlcnRT
dWJsYXllcihQYXNzUmVmUHRyPExheWVyU2tpYT4sIHNpemVfdCBpbmRleCk7CisgICAgdm9pZCBh
ZGRTdWJsYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+KTsKKyAgICB2b2lkIGluc2VydFN1
YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4sIHNpemVfdCBpbmRleCk7CiAgICAgdm9p
ZCByZW1vdmVGcm9tU3VwZXJsYXllcigpOwogCi0gICAgdm9pZCBzZXRBbmNob3JQb2ludChjb25z
dCBTa1BvaW50JiBhbmNob3JQb2ludCkgeyBtX2FuY2hvclBvaW50ID0gYW5jaG9yUG9pbnQ7IHNl
dE5lZWRzQ29tbWl0KCk7IH0KLSAgICBTa1BvaW50IGFuY2hvclBvaW50KCkgY29uc3QgeyByZXR1
cm4gbV9hbmNob3JQb2ludDsgfQorICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgYW5jaG9yUG9pbnQpIHsgbV9hbmNob3JQb2ludCA9IGFuY2hvclBvaW50OyBzZXROZWVk
c0NvbW1pdCgpOyB9CisgICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJu
IG1fYW5jaG9yUG9pbnQ7IH0KIAogICAgIHZvaWQgc2V0QW5jaG9yUG9pbnRaKGZsb2F0IGFuY2hv
clBvaW50WikgeyBtX2FuY2hvclBvaW50WiA9IGFuY2hvclBvaW50Wjsgc2V0TmVlZHNDb21taXQo
KTsgfQogICAgIGZsb2F0IGFuY2hvclBvaW50WigpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yUG9p
bnRaOyB9CkBAIC04NCwxMCArODIsMTAgQEAgcHVibGljOgogICAgIENvbG9yIGJvcmRlckNvbG9y
KCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJDb2xvcjsgfQogCiAgICAgdm9pZCBzZXRCb3JkZXJX
aWR0aChmbG9hdCB3aWR0aCkgeyBtX2JvcmRlcldpZHRoID0gd2lkdGg7IHNldE5lZWRzQ29tbWl0
KCk7IH0KLSAgICBTa1NjYWxhciBib3JkZXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVy
V2lkdGg7IH0KKyAgICBmbG9hdCBib3JkZXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVy
V2lkdGg7IH0KIAotICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IFNrSVJlY3QmKTsKLSAgICBTa0lS
ZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CisgICAgdm9pZCBzZXRCb3Vu
ZHMoY29uc3QgSW50U2l6ZSYpOworICAgIEludFNpemUgYm91bmRzKCkgY29uc3QgeyByZXR1cm4g
bV9ib3VuZHM7IH0KIAogICAgIHZvaWQgc2V0Q2xlYXJzQ29udGV4dChib29sIGNsZWFycykgeyBt
X2NsZWFyc0NvbnRleHQgPSBjbGVhcnM7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGNs
ZWFyc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NsZWFyc0NvbnRleHQ7IH0KQEAgLTEwMSw4
ICs5OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrKHVpbnQz
Ml90IG1hc2spIHsgbV9lZGdlQW50aWFsaWFzaW5nTWFzayA9IG1hc2s7IHNldE5lZWRzQ29tbWl0
KCk7IH0KICAgICB1aW50MzJfdCBlZGdlQW50aWFsaWFzaW5nTWFzaygpIGNvbnN0IHsgcmV0dXJu
IG1fZWRnZUFudGlhbGlhc2luZ01hc2s7IH0KIAotICAgIHZvaWQgc2V0RnJhbWUoY29uc3QgU2tS
ZWN0Jik7Ci0gICAgU2tSZWN0IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQorICAg
IHZvaWQgc2V0RnJhbWUoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgRmxvYXRSZWN0IGZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogCiAgICAgdm9pZCBzZXRIaWRkZW4oYm9vbCBoaWRk
ZW4pIHsgbV9oaWRkZW4gPSBoaWRkZW47IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBib29sIGlz
SGlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW47IH0KQEAgLTExMyw3ICsxMTEsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkgeyBtX25hbWUgPSBu
YW1lOyB9CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAotICAg
IHZvaWQgc2V0TmVlZHNEaXNwbGF5KGNvbnN0IFNrUmVjdCYgZGlydHlSZWN0KTsKKyAgICB2b2lk
IHNldE5lZWRzRGlzcGxheShjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCk7CiAgICAgdm9pZCBz
ZXROZWVkc0Rpc3BsYXkoKTsKIAogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFu
Z2UoYm9vbCBuZWVkc0Rpc3BsYXkpIHsgbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZSA9IG5l
ZWRzRGlzcGxheTsgfQpAQCAtMTI0LDMwICsxMjIsMzAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
T3BhcXVlKGJvb2wgb3BhcXVlKSB7IG1fb3BhcXVlID0gb3BhcXVlOyBzZXROZWVkc0NvbW1pdCgp
OyB9CiAgICAgYm9vbCBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQogCi0gICAg
dm9pZCBzZXRQb3NpdGlvbihjb25zdCBTa1BvaW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0g
cG9zaXRpb247ICBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgdm9pZCBzZXRQb3NpdGlvbihjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvbikgeyBtX3Bvc2l0aW9uID0gcG9zaXRpb247ICBzZXROZWVk
c0NvbW1pdCgpOyB9CiAKLSAgICBTa1BvaW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9w
b3NpdGlvbjsgfQorICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uOyB9CiAKICAgICB2b2lkIHNldFpQb3NpdGlvbihmbG9hdCB6UG9zaXRpb24pIHsgbV96
UG9zaXRpb24gPSB6UG9zaXRpb247IHNldE5lZWRzQ29tbWl0KCk7IH0KLSAgICBTa1NjYWxhciB6
UG9zaXRpb24oKSBjb25zdCB7ICByZXR1cm4gbV96UG9zaXRpb247IH0KKyAgICBmbG9hdCB6UG9z
aXRpb24oKSBjb25zdCB7ICByZXR1cm4gbV96UG9zaXRpb247IH0KIAotICAgIGNvbnN0IExheWVy
U2tpYSogcm9vdExheWVyKCkgY29uc3Q7CisgICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyKCkgY29uc3Q7CiAKICAgICB2b2lkIHJlbW92ZUFsbFN1YmxheWVycygpOwogCi0gICAgdm9p
ZCBzZXRTdWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclNraWE+ID4mKTsKKyAgICB2
b2lkIHNldFN1YmxheWVycyhjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mKTsK
IAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJTa2lhPiA+JiBnZXRTdWJsYXllcnMoKSBj
b25zdCB7IHJldHVybiBtX3N1YmxheWVyczsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gPiYgZ2V0U3VibGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXllcnM7
IH0KIAotICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgU2tNYXRyaXgmIHRyYW5z
Zm9ybSkgeyBtX3N1YmxheWVyVHJhbnNmb3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgp
OyB9Ci0gICAgY29uc3QgU2tNYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9zdWJsYXllclRyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgeyBtX3N1YmxheWVyVHJhbnNm
b3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXll
clRyYW5zZm9ybTsgfQogCi0gICAgdm9pZCBzZXRTdXBlcmxheWVyKExheWVyU2tpYSogc3VwZXJs
YXllcik7Ci0gICAgTGF5ZXJTa2lhKiBzdXBlcmxheWVyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRT
dXBlcmxheWVyKExheWVyQ2hyb21pdW0qIHN1cGVybGF5ZXIpOworICAgIExheWVyQ2hyb21pdW0q
IHN1cGVybGF5ZXIoKSBjb25zdDsKIAogCi0gICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgU2tN
YXRyaXgmIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgc2V0TmVlZHNDb21t
aXQoKTsgfQotICAgIGNvbnN0IFNrTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29t
bWl0KCk7IH0KKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KIAogICAgIHZvaWQgc2V0R2VvbWV0cnlGbGlwcGVk
KGJvb2wgZmxpcHBlZCkgeyBtX2dlb21ldHJ5RmxpcHBlZCA9IGZsaXBwZWQ7IHNldE5lZWRzQ29t
bWl0KCk7IH0KICAgICBib29sIGdlb21ldHJ5RmxpcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2Vv
bWV0cnlGbGlwcGVkOyB9CkBAIC0xNTcsMTIgKzE1NSwxMiBAQCBwdWJsaWM6CiAgICAgc2tpYTo6
UGxhdGZvcm1DYW52YXMqIHBsYXRmb3JtQ2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXMuZ2V0KCk7
IH0KICAgICBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCgpIHsgcmV0dXJuIG1fZ3Jh
cGhpY3NDb250ZXh0LmdldCgpOyB9CiAKLSAgICB2b2lkIHNldEJhY2tpbmdTdG9yZVJlY3QoY29u
c3QgU2tJUmVjdCYpOworICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBJbnRTaXpl
Jik7CiAKICAgICB2b2lkIGRyYXdEZWJ1Z0JvcmRlcigpOwogCiBwcml2YXRlOgotICAgIExheWVy
U2tpYShMYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJTa2lhKiBvd25lcik7CisgICAgTGF5ZXJDaHJv
bWl1bShMYXllclR5cGUsIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOwogCiAgICAgdm9p
ZCBzZXROZWVkc0NvbW1pdCgpOwogCkBAIC0xNzQsMzUgKzE3MiwzNSBAQCBwcml2YXRlOgogICAg
IH0KIAogICAgIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBzdWJsYXllciBvciAtMSBpZiBu
b3QgZm91bmQuCi0gICAgaW50IGluZGV4T2ZTdWJsYXllcihjb25zdCBMYXllclNraWEqKTsKKyAg
ICBpbnQgaW5kZXhPZlN1YmxheWVyKGNvbnN0IExheWVyQ2hyb21pdW0qKTsKIAogICAgIC8vIFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gcmVtb3ZlRnJvbVN1cGVybGF5ZXIuCi0gICAg
dm9pZCByZW1vdmVTdWJsYXllcihMYXllclNraWEqKTsKKyAgICB2b2lkIHJlbW92ZVN1YmxheWVy
KExheWVyQ2hyb21pdW0qKTsKIAogICAgIC8vIFJlLWNyZWF0ZSB0aGUgY2FudmFzIGFuZCBncmFw
aGljcyBjb250ZXh0LiBUaGlzIG1ldGhvZAogICAgIC8vIG11c3QgYmUgY2FsbGVkIGV2ZXJ5IHRp
bWUgdGhlIGxheWVyIGlzIHJlc2l6ZWQuCi0gICAgdm9pZCB1cGRhdGVHcmFwaGljc0NvbnRleHQo
Y29uc3QgU2tJUmVjdCYpOworICAgIHZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IElu
dFNpemUmKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJTa2lhPiA+IG1fc3VibGF5ZXJzOwot
ICAgIExheWVyU2tpYSogbV9zdXBlcmxheWVyOworICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiBtX3N1YmxheWVyczsKKyAgICBMYXllckNocm9taXVtKiBtX3N1cGVybGF5ZXI7CiAK
LSAgICBHcmFwaGljc0xheWVyU2tpYSogbV9vd25lcjsKKyAgICBHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG1fb3duZXI7CiAgICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX2NhbnZhczsK
ICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gbV9za2lhQ29udGV4dDsKICAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBtX2dyYXBoaWNzQ29udGV4dDsKIAogICAgIExheWVyVHlwZSBt
X2xheWVyVHlwZTsKIAotICAgIFNrSVJlY3QgbV9ib3VuZHM7Ci0gICAgU2tJUmVjdCBtX2JhY2tp
bmdTdG9yZVJlY3Q7Ci0gICAgU2tQb2ludCBtX3Bvc2l0aW9uOwotICAgIFNrUG9pbnQgbV9hbmNo
b3JQb2ludDsKKyAgICBJbnRTaXplIG1fYm91bmRzOworICAgIEludFNpemUgbV9iYWNraW5nU3Rv
cmVSZWN0OworICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKKyAgICBGbG9hdFBvaW50IG1fYW5j
aG9yUG9pbnQ7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CiAgICAgQ29sb3IgbV9ib3Jk
ZXJDb2xvcjsKIAotICAgIFNrUmVjdCBtX2ZyYW1lOwotICAgIFNrTWF0cml4IG1fdHJhbnNmb3Jt
OwotICAgIFNrTWF0cml4IG1fc3VibGF5ZXJUcmFuc2Zvcm07CisgICAgRmxvYXRSZWN0IG1fZnJh
bWU7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKIAogICAgIHVpbnQzMl90IG1fZWRnZUFu
dGlhbGlhc2luZ01hc2s7CiAgICAgZmxvYXQgbV9vcGFjaXR5OwpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA1NzEwNikKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNC0wNSAgVmFuZ2VsaXMgS29ra2V2aXMgIDx2YW5n
ZWxpc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hhbmdpbmcgcmVmZXJlbmNlcyB0byBHcmFwaGljcyBMYXllciByZWxhdGVk
IGNsYXNzZXMgZnJvbSAqU2tpYSB0byAqQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzExNgorCisgICAgICAgICogc3JjL1dlYlZpZXdJ
bXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnBhaW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6dXBkYXRlUm9vdExheWVyQ29udGVudHMpOgorICAgICAg
ICAqIHNyYy9XZWJWaWV3SW1wbC5oOgorCiAyMDEwLTA0LTA1ICBBbGV4ZXkgUHJvc2t1cnlha292
ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDU3MDg4KQorKysgV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0MSwx
MSArOTQxLDExIEBAIHZvaWQgV2ViVmlld0ltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmEKICAg
ICAgICAgdXBkYXRlUm9vdExheWVyQ29udGVudHMocmVjdCk7CiAKICAgICAgICAgLy8gQ29tcG9z
aXRlIGV2ZXJ5dGhpbmcgaW50byB0aGUgY2FudmFzIHRoYXQncyBwYXNzZWQgdG8gdXMuCi0gICAg
ICAgIFNrSVJlY3QgY2FudmFzSVJlY3Q7Ci0gICAgICAgIGNhbnZhc0lSZWN0LnNldChyZWN0Lngs
IHJlY3QueSwgcmVjdC54ICsgcmVjdC53aWR0aCwgcmVjdC55ICsgcmVjdC5oZWlnaHQpOwotICAg
ICAgICBTa1JlY3QgY2FudmFzUmVjdDsKLSAgICAgICAgY2FudmFzUmVjdC5zZXQoY2FudmFzSVJl
Y3QpOwotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnNJbkNhbnZhcyhzdGF0aWNf
Y2FzdDxza2lhOjpQbGF0Zm9ybUNhbnZhcyo+KGNhbnZhcyksIGNhbnZhc1JlY3QpOworI2lmIFBM
QVRGT1JNKFNLSUEpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVyc0luQ2FudmFz
KHN0YXRpY19jYXN0PHNraWE6OlBsYXRmb3JtQ2FudmFzKj4oY2FudmFzKSwgSW50UmVjdChyZWN0
KSk7CisjZWxpZiBQTEFURk9STShDRykKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgQ0cgdmVy
c2lvbiIKKyNlbmRpZgogICAgIH0KICNlbmRpZgogfQpAQCAtMjA0MCw3ICsyMDQwLDcgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6c2V0QWNjZWxlcmF0ZWRDb21wb3NpdAogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoYWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJS
ZW5kZXJlclNraWE6OmNyZWF0ZSgpOworICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKQog
ICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcgPSB0cnVlOwogICAgIH0gZWxz
ZSB7CkBAIC0yMDY1LDE3ICsyMDY1LDE1IEBAIHZvaWQgV2ViVmlld0ltcGw6OnVwZGF0ZVJvb3RM
YXllckNvbnRlbnQKICAgICBTa0lSZWN0IHNjcm9sbEZyYW1lOwogICAgIHNjcm9sbEZyYW1lLnNl
dCh2aWV3LT5zY3JvbGxYKCksIHZpZXctPnNjcm9sbFkoKSwgdmlldy0+bGF5b3V0V2lkdGgoKSAr
IHZpZXctPnNjcm9sbFgoKSwgdmlldy0+bGF5b3V0SGVpZ2h0KCkgKyB2aWV3LT5zY3JvbGxZKCkp
OwogICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0U2Nyb2xsRnJhbWUoc2Nyb2xsRnJhbWUpOwotICAg
IExheWVyU2tpYSogcm9vdExheWVyID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKTsKKyAg
ICBMYXllckNocm9taXVtKiByb290TGF5ZXIgPSBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigp
OwogICAgIGlmIChyb290TGF5ZXIpIHsKLSAgICAgICAgU2tJUmVjdCByb290TGF5ZXJCb3VuZHM7
CiAgICAgICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3Qo
dHJ1ZSk7CiAKICAgICAgICAgLy8gU2V0IHRoZSBiYWNraW5nIHN0b3JlIHNpemUgdXNlZCBieSB0
aGUgcm9vdCBsYXllciB0byBiZSB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZQogICAgICAgICAvLyBh
cmVhLiBOb3RlIHRoYXQgdGhlIHJvb3QgbGF5ZXIgYm91bmRzIGNvdWxkIGJlIGxhcmdlciB0aGFu
IHRoZSBiYWNraW5nIHN0b3JlIHNpemUsCiAgICAgICAgIC8vIGJ1dCB0aGVyZSdzIG5vIHJlYXNv
biB0byB3YXN0ZSBtZW1vcnkgYnkgYWxsb2NhdGluZyBiYWNraW5nIHN0b3JlIGxhcmdlciB0aGFu
IHRoZQogICAgICAgICAvLyB2aXNpYmxlIHBvcnRpb24uCi0gICAgICAgIHJvb3RMYXllckJvdW5k
cy5zZXQoMCwgMCwgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpOwot
ICAgICAgICByb290TGF5ZXItPnNldEJhY2tpbmdTdG9yZVJlY3Qocm9vdExheWVyQm91bmRzKTsK
KyAgICAgICAgcm9vdExheWVyLT5zZXRCYWNraW5nU3RvcmVSZWN0KEludFNpemUodmlzaWJsZVJl
Y3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkpKTsKICAgICAgICAgR3JhcGhpY3NDb250
ZXh0KiByb290TGF5ZXJDb250ZXh0ID0gcm9vdExheWVyLT5ncmFwaGljc0NvbnRleHQoKTsKICAg
ICAgICAgcm9vdExheWVyQ29udGV4dC0+c2F2ZSgpOwogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCShyZXZpc2lvbiA1NzA4OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDcgKzQ4OSw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2hhdmVNb3VzZUNhcHR1cmU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgT3duUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXJTa2lhPiBtX2xheWVyUmVuZGVy
ZXI7CisgICAgT3duUHRyPFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJl
bmRlcmVyOwogICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CiAjZW5kaWYKICAg
ICBzdGF0aWMgY29uc3QgV2ViSW5wdXRFdmVudCogbV9jdXJyZW50SW5wdXRFdmVudDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52593</attachid>
            <date>2010-04-05 18:21:54 -0700</date>
            <delta_ts>2010-04-06 16:17:08 -0700</delta_ts>
            <desc>Fixing first webkit style issue. </desc>
            <filename>skiaRename2_patch.txt</filename>
            <type>text/plain</type>
            <size>51784</size>
            <attacher name="Vangelis Kokkevis">vangelis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzEwNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDEwLTA0LTA1ICBWYW5nZWxpcyBLb2trZXZpcyAgPHZhbmdlbGlz
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW5hbWluZyBHcmFwaGljcyBMYXllciByZWxhdGVkIGNsYXNzZXMgdXNlZCBieSBD
aHJvbWl1bSBmcm9tICpTa2lhIHRvICpDaHJvbWl1bSBhbmQgcmVwbGFjaW5nIHdoZXJldmVyIHBv
c3NpYmxlIFNraWEtc3BlY2lmaWMKKyAgICAgICAgZGF0YSB0eXBlcyB3aXRoIFdlYkNvcmUgZXF1
aXZhbGVudHMuIFRoZSBzb3VyY2UgZmlsZXMgd2lsbCBiZSByZW5hbWVkIGFjY29yZGluZ2x5IGFu
ZCBtb3ZlZCBvdXQgb2YgcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYQorICAgICAgICBpbiBhIHN1YnNl
cXVlbnQgQ0wuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNzExNgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNvIG5vIG5ldyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNldExheWVyQm9yZGVyQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJC
b3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpzZXRMYXllckJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpjbGVhckxheWVyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0xheWVyQ2hyb21pdW06OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06On5HcmFwaGljc0xheWVyQ2hyb21pdW0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXROYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bmF0aXZlTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQ2hpbGRBdEluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRkQ2hpbGRCZWxvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkQWJvdmUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0UG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRBbmNob3JQb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlblRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFByZXNlcnZlczNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TWFza3NUb0JvdW5k
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERyYXdzQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldEJhY2tn
cm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmNs
ZWFyQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJv
bWl1bTo6c2V0Q29udGVudHNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNocm9taXVtOjpzZXRCYWNrZmFjZVZpc2liaWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNocm9taXVtOjpzZXRPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb0ltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVudHNUb1ZpZGVv
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0R2VvbWV0cnlP
cmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06Omhv
c3RMYXllckZvclN1YmxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hy
b21pdW06OmxheWVyRm9yU3VwZXJsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnBsYXRmb3JtTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNocm9taXVtOjpzZXREZWJ1Z0JhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQm9yZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlU3VibGF5ZXJMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUxheWVyU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUFuY2hvclBv
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVHJh
bnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q2hpbGRyZW5UcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVNYXNrc1RvQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNPcGFxdWUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVMYXllclByZXNlcnZlczNEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJEcmF3
c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRh
dGVMYXllckJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50c1ZpZGVvKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlR2VvbWV0cnlPcmllbnRhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldHVwQ29udGVudHNM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZU9w
YWNpdHlPbkxheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNz
TGF5ZXJTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OnBy
aW1hcnlMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2hyb21pdW06OmNv
bnRlbnRzTGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJSZW5k
ZXJlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJl
bmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp+TGF5ZXJSZW5kZXJlckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbkNhbnZhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllckluQ2FudmFzUmVjdXJzaXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50
c1JlY3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRl
cmVyU2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRS
b290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyb290
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyQ2hyb21pdW06On5MYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06OnVwZGF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpkcmF3RGVidWdCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0
TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6YWRkU3VibGF5
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aW5zZXJ0U3VibGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlRnJvbVN1cGVybGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlU3VibGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aW5kZXhPZlN1YmxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyQ2hyb21pdW06OnNldEJhY2tpbmdTdG9yZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Qm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnNldEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnJv
b3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpyZW1vdmVBbGxTdWJs
YXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0U3VibGF5ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldFN1cGVybGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c3VwZXJsYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3NraWEvTGF5ZXJTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVt
OjpzZXRBbmNob3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjphbmNo
b3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3JkZXJXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpib3VuZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bTo6ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJv
bWl1bTo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6elBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmdldFN1YmxheWVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRTdWJsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzdWJsYXllclRyYW5zZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllckNocm9taXVtOjpzZXRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6dHJhbnNmb3JtKToKKwogMjAxMC0wNC0wNSAgWXV0YSBLaXRhbXVyYSAgPHl1
dGFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCShyZXZpc2lvbiA1
NzA4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw4ICs2NSw4IEBAIHR5cGVkZWYgUUdyYXBoaWNzSXRlbSBQbGF0Zm9y
bUxheWVyOwogdHlwZWRlZiBRR3JhcGhpY3NJdGVtKiBOYXRpdmVMYXllcjsKICNlbGlmIFBMQVRG
T1JNKENIUk9NSVVNKQogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTGF5ZXJTa2lhOwotdHlw
ZWRlZiBMYXllclNraWEgUGxhdGZvcm1MYXllcjsKK2NsYXNzIExheWVyQ2hyb21pdW07Cit0eXBl
ZGVmIExheWVyQ2hyb21pdW0gUGxhdGZvcm1MYXllcjsKIHR5cGVkZWYgdm9pZCogTmF0aXZlTGF5
ZXI7CiB9CiAjZWxzZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBo
aWNzTGF5ZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NMYXllclNraWEuY3BwCShyZXZpc2lvbiA1NzA4OCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0xheWVyU2tpYS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDIyICs1OSwyMiBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyB2b2lkIHNldExheWVyQm9yZGVyQ29sb3IoTGF5ZXJTa2lhJiBs
YXllciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0TGF5ZXJCb3JkZXJDb2xv
cihMYXllckNocm9taXVtJiBsYXllciwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGxheWVy
LnNldEJvcmRlckNvbG9yKGNvbG9yKTsKIH0KIAotc3RhdGljIHZvaWQgY2xlYXJCb3JkZXJDb2xv
cihMYXllclNraWEmIGxheWVyKQorc3RhdGljIHZvaWQgY2xlYXJCb3JkZXJDb2xvcihMYXllckNo
cm9taXVtJiBsYXllcikKIHsKICAgICBsYXllci5zZXRCb3JkZXJDb2xvcigwKTsKIH0KIAotc3Rh
dGljIHZvaWQgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoTGF5ZXJTa2lhJiBsYXllciwgY29uc3Qg
Q29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoTGF5ZXJD
aHJvbWl1bSYgbGF5ZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBsYXllci5zZXRCYWNr
Z3JvdW5kQ29sb3IoY29sb3IpOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhckxheWVyQmFja2dyb3Vu
ZENvbG9yKExheWVyU2tpYSYgbGF5ZXIpCitzdGF0aWMgdm9pZCBjbGVhckxheWVyQmFja2dyb3Vu
ZENvbG9yKExheWVyQ2hyb21pdW0mIGxheWVyKQogewogICAgIGxheWVyLnNldEJhY2tncm91bmRD
b2xvcigwKTsKIH0KQEAgLTg2LDIwICs4NiwyMCBAQCBHcmFwaGljc0xheWVyOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdGVzT3JpCiAKIFBhc3NPd25QdHI8R3JhcGhpY3NMYXllcj4gR3JhcGhpY3NMYXll
cjo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gbmV3
IEdyYXBoaWNzTGF5ZXJTa2lhKGNsaWVudCk7CisgICAgcmV0dXJuIG5ldyBHcmFwaGljc0xheWVy
Q2hyb21pdW0oY2xpZW50KTsKIH0KIAotR3JhcGhpY3NMYXllclNraWE6OkdyYXBoaWNzTGF5ZXJT
a2lhKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKK0dyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
R3JhcGhpY3NMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNsaWVudCkKICAgICA6
IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQogICAgICwgbV9jb250ZW50c0xheWVyUHVycG9zZShOb0Nv
bnRlbnRzTGF5ZXIpCiAgICAgLCBtX2NvbnRlbnRzTGF5ZXJIYXNCYWNrZ3JvdW5kQ29sb3IoZmFs
c2UpCiB7Ci0gICAgbV9sYXllciA9IExheWVyU2tpYTo6Y3JlYXRlKExheWVyU2tpYTo6TGF5ZXIs
IHRoaXMpOworICAgIG1fbGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoTGF5ZXJDaHJvbWl1
bTo6TGF5ZXIsIHRoaXMpOwogCiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CiAKLUdy
YXBoaWNzTGF5ZXJTa2lhOjp+R3JhcGhpY3NMYXllclNraWEoKQorR3JhcGhpY3NMYXllckNocm9t
aXVtOjp+R3JhcGhpY3NMYXllckNocm9taXVtKCkKIHsKICAgICAvLyBDbGVhbiB1cCB0aGUgU2tp
YSBsYXllci4KICAgICBpZiAobV9sYXllcikKQEAgLTEwOSwxOCArMTA5LDE4IEBAIEdyYXBoaWNz
TGF5ZXJTa2lhOjp+R3JhcGhpY3NMYXllclNraWEoKQogICAgICAgICBtX3RyYW5zZm9ybUxheWVy
LT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpz
ZXROYW1lKGNvbnN0IFN0cmluZyYgaW5OYW1lKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnNldE5hbWUoY29uc3QgU3RyaW5nJiBpbk5hbWUpCiB7Ci0gICAgU3RyaW5nIG5hbWUgPSBTdHJp
bmc6OmZvcm1hdCgiR3JhcGhpY3NMYXllclNraWEoJXApIEdyYXBoaWNzTGF5ZXIoJXApICIsIG1f
bGF5ZXIuZ2V0KCksIHRoaXMpICsgaW5OYW1lOworICAgIFN0cmluZyBuYW1lID0gU3RyaW5nOjpm
b3JtYXQoIkdyYXBoaWNzTGF5ZXJDaHJvbWl1bSglcCkgR3JhcGhpY3NMYXllciglcCkgIiwgbV9s
YXllci5nZXQoKSwgdGhpcykgKyBpbk5hbWU7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0TmFtZShu
YW1lKTsKIH0KIAotTmF0aXZlTGF5ZXIgR3JhcGhpY3NMYXllclNraWE6Om5hdGl2ZUxheWVyKCkg
Y29uc3QKK05hdGl2ZUxheWVyIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6bmF0aXZlTGF5ZXIoKSBj
b25zdAogewogICAgIHJldHVybiBtX2xheWVyLmdldCgpOwogfQogCi1ib29sIEdyYXBoaWNzTGF5
ZXJTa2lhOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJl
bikKK2Jvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8
R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKIHsKICAgICBib29sIGNoaWxkcmVuQ2hhbmdlZCA9
IEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKICAgICAvLyBGSVhNRTogR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4gY2FsbHMgYWRkQ2hpbGQoKSBmb3IgZWFjaCBzdWJsYXll
ciwgd2hpY2gKQEAgLTEzMSwzMSArMTMxLDMxIEBAIGJvb2wgR3JhcGhpY3NMYXllclNraWE6OnNl
dENoaWxkcmVuKGNvbnMKICAgICByZXR1cm4gY2hpbGRyZW5DaGFuZ2VkOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyKQordm9p
ZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5
ZXIpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoY2hpbGRMYXllcik7CiAgICAgdXBk
YXRlU3VibGF5ZXJMaXN0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OmFkZENoaWxk
QXRJbmRleChHcmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBpbnQgaW5kZXgpCit2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6YWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5
ZXIsIGludCBpbmRleCkKIHsKICAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoY2hp
bGRMYXllciwgaW5kZXgpOwogICAgIHVwZGF0ZVN1YmxheWVyTGlzdCgpOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIs
IEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6YWRk
Q2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBjaGlsZExheWVyLCBHcmFwaGljc0xheWVyKiBzaWJs
aW5nKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3coY2hpbGRMYXllciwgc2li
bGluZyk7CiAgICAgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXll
clNraWE6OmFkZENoaWxkQWJvdmUoR3JhcGhpY3NMYXllciogY2hpbGRMYXllciwgR3JhcGhpY3NM
YXllciAqc2libGluZykKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjphZGRDaGlsZEFib3Zl
KEdyYXBoaWNzTGF5ZXIqIGNoaWxkTGF5ZXIsIEdyYXBoaWNzTGF5ZXIgKnNpYmxpbmcpCiB7CiAg
ICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShjaGlsZExheWVyLCBzaWJsaW5nKTsKICAg
ICB1cGRhdGVTdWJsYXllckxpc3QoKTsKIH0KIAotYm9vbCBHcmFwaGljc0xheWVyU2tpYTo6cmVw
bGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGls
ZCkKK2Jvb2wgR3JhcGhpY3NMYXllckNocm9taXVtOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXll
ciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQogewogICAgIGlmIChHcmFwaGlj
c0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKSkgewogICAgICAgICB1cGRh
dGVTdWJsYXllckxpc3QoKTsKQEAgLTE2NCwxOSArMTY0LDE5IEBAIGJvb2wgR3JhcGhpY3NMYXll
clNraWE6OnJlcGxhY2VDaGlsZChHcmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NMYXllclNraWE6OnJlbW92ZUZyb21QYXJlbnQoKQordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnJlbW92ZUZyb21QYXJlbnQoKQogewogICAgIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKTsKICAgICBsYXllckZvclN1cGVybGF5ZXIoKS0+cmVtb3ZlRnJvbVN1cGVybGF5
ZXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0UG9zaXRpb24oY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRp
b24ocG9pbnQpOwogICAgIHVwZGF0ZUxheWVyUG9zaXRpb24oKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0xheWVyU2tpYTo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwb2ludCkKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50
M0QmIHBvaW50KQogewogICAgIGlmIChwb2ludCA9PSBtX2FuY2hvclBvaW50KQogICAgICAgICBy
ZXR1cm47CkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0QW5j
aG9yUG9pbnQoYwogICAgIHVwZGF0ZUFuY2hvclBvaW50KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NM
YXllclNraWE6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChz
aXplID09IG1fc2l6ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQg
R3JhcGhpY3NMYXllclNraWE6OnNldFNpemUoY29uc3QgRmwKICAgICB1cGRhdGVMYXllclNpemUo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7CiAg
ICAgaWYgKHRyYW5zZm9ybSA9PSBtX3RyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAz
LDcgKzIwMyw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldFRyYW5zZm9ybShjb24KICAg
ICB1cGRhdGVUcmFuc2Zvcm0oKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQogewogICAgIGlmICh0cmFuc2Zvcm0gPT0gbV9j
aGlsZHJlblRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjEyLDcgKzIxMiw3IEBAIHZv
aWQgR3JhcGhpY3NMYXllclNraWE6OnNldENoaWxkcmVuVHJhbnMKICAgICB1cGRhdGVDaGlsZHJl
blRyYW5zZm9ybSgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRQcmVzZXJ2ZXMz
RChib29sIHByZXNlcnZlczNEKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldFByZXNl
cnZlczNEKGJvb2wgcHJlc2VydmVzM0QpCiB7CiAgICAgaWYgKHByZXNlcnZlczNEID09IG1fcHJl
c2VydmVzM0QpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lkIEdyYXBo
aWNzTGF5ZXJTa2lhOjpzZXRQcmVzZXJ2ZXMzRChiCiAgICAgdXBkYXRlTGF5ZXJQcmVzZXJ2ZXMz
RCgpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wg
bWFza3NUb0JvdW5kcykKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRNYXNrc1RvQm91
bmRzKGJvb2wgbWFza3NUb0JvdW5kcykKIHsKICAgICBpZiAobWFza3NUb0JvdW5kcyA9PSBtX21h
c2tzVG9Cb3VuZHMpCiAgICAgICAgIHJldHVybjsKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjpzZXRNYXNrc1RvQm91bmRzCiAgICAgdXBkYXRlTWFza3NUb0JvdW5k
cygpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBk
cmF3c0NvbnRlbnQpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0RHJhd3NDb250ZW50
KGJvb2wgZHJhd3NDb250ZW50KQogewogICAgIGlmIChkcmF3c0NvbnRlbnQgPT0gbV9kcmF3c0Nv
bnRlbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIEdyYXBoaWNz
TGF5ZXJTa2lhOjpzZXREcmF3c0NvbnRlbnQoCiAgICAgdXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQo
KTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXRCYWNrZ3JvdW5k
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIGlmIChtX2JhY2tncm91bmRDb2xvclNl
dCAmJiBtX2JhY2tncm91bmRDb2xvciA9PSBjb2xvcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjUw
LDcgKzI1MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldEJhY2tncm91bmRDb2wKICAg
ICB1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJT
a2lhOjpjbGVhckJhY2tncm91bmRDb2xvcigpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
Y2xlYXJCYWNrZ3JvdW5kQ29sb3IoKQogewogICAgIGlmICghbV9iYWNrZ3JvdW5kQ29sb3JTZXQp
CiAgICAgICAgIHJldHVybjsKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJT
a2lhOjpjbGVhckJhY2tncm91bmRDCiAgICAgY2xlYXJMYXllckJhY2tncm91bmRDb2xvcigqbV9j
b250ZW50c0xheWVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0Q29udGVudHNP
cGFxdWUoYm9vbCBvcGFxdWUpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0Q29udGVu
dHNPcGFxdWUoYm9vbCBvcGFxdWUpCiB7CiAgICAgaWYgKG1fY29udGVudHNPcGFxdWUgPT0gb3Bh
cXVlKQogICAgICAgICByZXR1cm47CkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0xh
eWVyU2tpYTo6c2V0Q29udGVudHNPcGFxdQogICAgIHVwZGF0ZUNvbnRlbnRzT3BhcXVlKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIHZp
c2libGUpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5
KGJvb2wgdmlzaWJsZSkKIHsKICAgICBpZiAobV9iYWNrZmFjZVZpc2liaWxpdHkgPT0gdmlzaWJs
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjc3LDcgKzI3Nyw3IEBAIHZvaWQgR3JhcGhpY3NMYXll
clNraWE6OnNldEJhY2tmYWNlVmlzaWIKICAgICB1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKIHsK
ICAgICBmbG9hdCBjbGFtcGVkT3BhY2l0eSA9IG1heChtaW4ob3BhY2l0eSwgMS4wZiksIDAuMGYp
OwogCkBAIC0yODgsMTkgKzI4OCwxOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRPcGFj
aXR5KGZsb2F0CiAgICAgcHJpbWFyeUxheWVyKCktPnNldE9wYWNpdHkob3BhY2l0eSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldE5lZWRzRGlzcGxheSgpCit2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICBpZiAoZHJhd3NDb250ZW50
KCkpCiAgICAgICAgIG1fbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogfQogCi12b2lkIEdyYXBo
aWNzTGF5ZXJTa2lhOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKGRyYXdzQ29udGVudCgpKQogICAgICAgICBt
X2xheWVyLT5zZXROZWVkc0Rpc3BsYXkocmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNr
aWE6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAg
IGlmIChyZWN0ID09IG1fY29udGVudHNSZWN0KQogICAgICAgICByZXR1cm47CkBAIC0zMDksMTcg
KzMwOSwxNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXRDb250ZW50c1JlY3QoCiAgICAg
dXBkYXRlQ29udGVudHNSZWN0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldENv
bnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6
c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnNldENvbnRlbnRzVG9WaWRlbyhQbGF0
Zm9ybUxheWVyKiB2aWRlb0xheWVyKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldENv
bnRlbnRzVG9WaWRlbyhQbGF0Zm9ybUxheWVyKiB2aWRlb0xheWVyKQogewogICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0R2VvbWV0cnlPcmll
bnRhdGlvbihDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24pCit2
b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6c2V0R2VvbWV0cnlPcmllbnRhdGlvbihDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CiAgICAgaWYgKG9yaWVu
dGF0aW9uID09IG1fZ2VvbWV0cnlPcmllbnRhdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtMzI4
LDIyICszMjgsMjIgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0R2VvbWV0cnlPcmllbgog
ICAgIHVwZGF0ZUdlb21ldHJ5T3JpZW50YXRpb24oKTsKIH0KIAotUGxhdGZvcm1MYXllciogR3Jh
cGhpY3NMYXllclNraWE6Omhvc3RMYXllckZvclN1YmxheWVycygpIGNvbnN0CitQbGF0Zm9ybUxh
eWVyKiBHcmFwaGljc0xheWVyQ2hyb21pdW06Omhvc3RMYXllckZvclN1YmxheWVycygpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fdHJhbnNmb3JtTGF5ZXIgPyBtX3RyYW5zZm9ybUxheWVyLmdldCgp
IDogbV9sYXllci5nZXQoKTsKIH0KIAotUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllclNraWE6
OmxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0CitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0xheWVy
Q2hyb21pdW06OmxheWVyRm9yU3VwZXJsYXllcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fdHJh
bnNmb3JtTGF5ZXIgPyBtX3RyYW5zZm9ybUxheWVyLmdldCgpIDogbV9sYXllci5nZXQoKTsKIH0K
IAotUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllclNraWE6OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAorUGxhdGZvcm1MYXllciogR3JhcGhpY3NMYXllckNocm9taXVtOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gcHJpbWFyeUxheWVyKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NM
YXllclNraWE6OnNldERlYnVnQmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXREZWJ1Z0JhY2tncm91bmRDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgc2V0TGF5
ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIsIGNvbG9yKTsKQEAgLTM1MSw3ICszNTEsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXREZWJ1Z0JhY2tncm91CiAgICAgICAgIGNsZWFyTGF5
ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fbGF5ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lh
OjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IGJvcmRlcldpZHRoKQor
dm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBj
b2xvciwgZmxvYXQgYm9yZGVyV2lkdGgpCiB7CiAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewog
ICAgICAgICBzZXRMYXllckJvcmRlckNvbG9yKCptX2xheWVyLCBjb2xvcik7CkBAIC0zNjIsOSAr
MzYyLDkgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0RGVidWdCb3JkZXIoYwogICAgIH0K
IH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlU3VibGF5ZXJMaXN0KCkKK3ZvaWQg
R3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRhdGVTdWJsYXllckxpc3QoKQogewotICAgIFZlY3Rv
cjxSZWZQdHI8TGF5ZXJTa2lhPiA+IG5ld1N1YmxheWVyczsKKyAgICBWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID4gbmV3U3VibGF5ZXJzOwogCiAgICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIp
IHsKICAgICAgICAgLy8gQWRkIHRoZSBwcmltYXJ5IGxheWVyIGZpcnN0LiBFdmVuIGlmIHdlIGhh
dmUgbmVnYXRpdmUgei1vcmRlciBjaGlsZHJlbiwgdGhlIHByaW1hcnkgbGF5ZXIgYWx3YXlzIGNv
bWVzIGJlaGluZC4KQEAgLTM3OSw5ICszNzksOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1
cGRhdGVTdWJsYXllckxpCiAgICAgY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRM
YXllcnMgPSBjaGlsZHJlbigpOwogICAgIHNpemVfdCBudW1DaGlsZHJlbiA9IGNoaWxkTGF5ZXJz
LnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUNoaWxkcmVuOyArK2kpIHsK
LSAgICAgICAgR3JhcGhpY3NMYXllclNraWEqIGN1ckNoaWxkID0gc3RhdGljX2Nhc3Q8R3JhcGhp
Y3NMYXllclNraWEqPihjaGlsZExheWVyc1tpXSk7CisgICAgICAgIEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogY3VyQ2hpbGQgPSBzdGF0aWNfY2FzdDxHcmFwaGljc0xheWVyQ2hyb21pdW0qPihjaGls
ZExheWVyc1tpXSk7CiAKLSAgICAgICAgTGF5ZXJTa2lhKiBjaGlsZExheWVyID0gY3VyQ2hpbGQt
PmxheWVyRm9yU3VwZXJsYXllcigpOworICAgICAgICBMYXllckNocm9taXVtKiBjaGlsZExheWVy
ID0gY3VyQ2hpbGQtPmxheWVyRm9yU3VwZXJsYXllcigpOwogICAgICAgICBuZXdTdWJsYXllcnMu
YXBwZW5kKGNoaWxkTGF5ZXIpOwogICAgIH0KIApAQCAtNDAxLDI5ICs0MDEsMjYgQEAgdm9pZCBH
cmFwaGljc0xheWVyU2tpYTo6dXBkYXRlU3VibGF5ZXJMaQogICAgICAgICBtX2xheWVyLT5zZXRT
dWJsYXllcnMobmV3U3VibGF5ZXJzKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBk
YXRlTGF5ZXJQb3NpdGlvbigpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5
ZXJQb3NpdGlvbigpCiB7CiAgICAgLy8gUG9zaXRpb24gaXMgb2Zmc2V0IG9uIHRoZSBsYXllciBi
eSB0aGUgbGF5ZXIgYW5jaG9yIHBvaW50LgotICAgIFNrUG9pbnQgbGF5ZXJQb3NpdGlvbjsKLSAg
ICBsYXllclBvc2l0aW9uLnNldChtX3Bvc2l0aW9uLngoKSArIG1fYW5jaG9yUG9pbnQueCgpICog
bV9zaXplLndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgbV9wb3NpdGlvbi55KCkgKyBt
X2FuY2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgRmxvYXRQb2ludCBsYXll
clBvc2l0aW9uKG1fcG9zaXRpb24ueCgpICsgbV9hbmNob3JQb2ludC54KCkgKiBtX3NpemUud2lk
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wb3NpdGlvbi55KCkgKyBtX2Fu
Y2hvclBvaW50LnkoKSAqIG1fc2l6ZS5oZWlnaHQoKSk7CiAKICAgICBwcmltYXJ5TGF5ZXIoKS0+
c2V0UG9zaXRpb24obGF5ZXJQb3NpdGlvbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6
OnVwZGF0ZUxheWVyU2l6ZSgpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5
ZXJTaXplKCkKIHsKLSAgICBTa0lSZWN0IHJlY3Q7Ci0gICAgcmVjdC5zZXQoMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgSW50U2l6ZSBsYXllclNpemUobV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgaWYgKG1fdHJhbnNmb3JtTGF5ZXIpIHsK
LSAgICAgICAgbV90cmFuc2Zvcm1MYXllci0+c2V0Qm91bmRzKHJlY3QpOworICAgICAgICBtX3Ry
YW5zZm9ybUxheWVyLT5zZXRCb3VuZHMobGF5ZXJTaXplKTsKICAgICAgICAgLy8gVGhlIGFuY2hv
ciBvZiB0aGUgY29udGVudHMgbGF5ZXIgaXMgYWx3YXlzIGF0IDAuNSwgMC41LCBzbyB0aGUgcG9z
aXRpb24gaXMgY2VudGVyLXJlbGF0aXZlLgotICAgICAgICBTa1BvaW50IGNlbnRlclBvaW50Owot
ICAgICAgICBjZW50ZXJQb2ludC5zZXQobV9zaXplLndpZHRoKCkgLyAyLjBmLCBtX3NpemUuaGVp
Z2h0KCkgLyAyLjBmKTsKKyAgICAgICAgRmxvYXRQb2ludCBjZW50ZXJQb2ludChtX3NpemUud2lk
dGgoKSAvIDIsIG1fc2l6ZS5oZWlnaHQoKSAvIDIpOwogICAgICAgICBtX2xheWVyLT5zZXRQb3Np
dGlvbihjZW50ZXJQb2ludCk7CiAgICAgfQogCi0gICAgbV9sYXllci0+c2V0Qm91bmRzKHJlY3Qp
OworICAgIG1fbGF5ZXItPnNldEJvdW5kcyhsYXllclNpemUpOwogCiAgICAgLy8gTm90ZSB0aGF0
IHdlIGRvbid0IHJlc2l6ZSBtX2NvbnRlbnRzTGF5ZXIuIEl0J3MgdXAgdGhlIGNhbGxlciB0byBk
byB0aGF0LgogCkBAIC00MzIsNDcgKzQyOSw0NSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1
cGRhdGVMYXllclNpemUoCiAgICAgdXBkYXRlTGF5ZXJQb3NpdGlvbigpOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVBbmNob3JQb2ludCgpCit2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQW5jaG9yUG9pbnQoKQogewotICAgIFNrUG9pbnQgYW5jaG9yUG9pbnQ7
Ci0gICAgYW5jaG9yUG9pbnQuc2V0KG1fYW5jaG9yUG9pbnQueCgpLCBtX2FuY2hvclBvaW50Lnko
KSk7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldEFuY2hvclBvaW50KGFuY2hvclBvaW50KTsKKyAg
ICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludChtX2FuY2hvclBvaW50
LngoKSwgbV9hbmNob3JQb2ludC55KCkpKTsKICAgICBwcmltYXJ5TGF5ZXIoKS0+c2V0QW5jaG9y
UG9pbnRaKG1fYW5jaG9yUG9pbnQueigpKTsKICAgICB1cGRhdGVMYXllclBvc2l0aW9uKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NMYXllclNraWE6OnVwZGF0ZVRyYW5zZm9ybSgpCit2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlVHJhbnNmb3JtKCkKIHsKLSAgICBwcmltYXJ5TGF5ZXIo
KS0+c2V0VHJhbnNmb3JtKG1fdHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNmb3JtKCkpOworICAgIHBy
aW1hcnlMYXllcigpLT5zZXRUcmFuc2Zvcm0obV90cmFuc2Zvcm0pOwogfQogCi12b2lkIEdyYXBo
aWNzTGF5ZXJTa2lhOjp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSgpCit2b2lkIEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ2hpbGRyZW5UcmFuc2Zvcm0oKQogewogICAgIHByaW1hcnlMYXll
cigpLT5zZXRTdWJsYXllclRyYW5zZm9ybShtX2NoaWxkcmVuVHJhbnNmb3JtKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCit2b2lkIEdyYXBoaWNz
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlTWFza3NUb0JvdW5kcygpCiB7CiAgICAgbV9sYXllci0+c2V0
TWFza3NUb0JvdW5kcyhtX21hc2tzVG9Cb3VuZHMpOwogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9y
cygpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVDb250ZW50c09wYXF1ZSgp
Cit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNPcGFxdWUoKQogewog
ICAgIG1fbGF5ZXItPnNldE9wYXF1ZShtX2NvbnRlbnRzT3BhcXVlKTsKIH0KIAotdm9pZCBHcmFw
aGljc0xheWVyU2tpYTo6dXBkYXRlQmFja2ZhY2VWaXNpYmlsaXR5KCkKK3ZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjp1cGRhdGVCYWNrZmFjZVZpc2liaWxpdHkoKQogewogICAgIG1fbGF5ZXIt
PnNldERvdWJsZVNpZGVkKG1fYmFja2ZhY2VWaXNpYmlsaXR5KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0xheWVyU2tpYTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCit2b2lkIEdyYXBoaWNzTGF5ZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJQcmVzZXJ2ZXMzRCgpCiB7CiAgICAgLy8gRklYTUU6IGltcGxl
bWVudAogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVMYXllckRyYXdzQ29udGVu
dCgpCit2b2lkIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJEcmF3c0NvbnRlbnQo
KQogewogICAgIGlmIChtX2RyYXdzQ29udGVudCkKICAgICAgICAgbV9sYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CkBAIC00ODAsNyArNDc1LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBk
YXRlTGF5ZXJEcmF3cwogICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwogfQogCi12b2lkIEdy
YXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVMYXllckJhY2tncm91bmRDb2xvcigpCit2b2lkIEdyYXBo
aWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKQogewogICAgIGlm
ICghbV9jb250ZW50c0xheWVyKQogICAgICAgICByZXR1cm47CkBAIC00OTIsMzEgKzQ4NywyNiBA
QCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVMYXllckJhY2tnCiAgICAgICAgIGNsZWFy
TGF5ZXJCYWNrZ3JvdW5kQ29sb3IoKm1fY29udGVudHNMYXllcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NMYXllclNraWE6OnVwZGF0ZUNvbnRlbnRzSW1hZ2UoKQordm9pZCBHcmFwaGljc0xheWVyQ2hy
b21pdW06OnVwZGF0ZUNvbnRlbnRzSW1hZ2UoKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
IH0KIAotdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlQ29udGVudHNWaWRlbygpCit2b2lk
IEdyYXBoaWNzTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHNWaWRlbygpCiB7CiAgICAgLy8g
RklYTUU6IEltcGxlbWVudAogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRhdGVDb250
ZW50c1JlY3QoKQordm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzUmVj
dCgpCiB7CiAgICAgaWYgKCFtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFNrUG9pbnQgcG9pbnQ7Ci0gICAgcG9pbnQuc2V0KG1fY29udGVudHNSZWN0LngoKSwgbV9jb250
ZW50c1JlY3QueSgpKTsKLSAgICBTa0lSZWN0IHJlY3Q7Ci0gICAgcmVjdC5zZXQoMCwgMCwgbV9j
b250ZW50c1JlY3Qud2lkdGgoKSwgbV9jb250ZW50c1JlY3QuaGVpZ2h0KCkpOwotCi0gICAgbV9j
b250ZW50c0xheWVyLT5zZXRQb3NpdGlvbihwb2ludCk7Ci0gICAgbV9jb250ZW50c0xheWVyLT5z
ZXRCb3VuZHMocmVjdCk7CisgICAgbV9jb250ZW50c0xheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBv
aW50KG1fY29udGVudHNSZWN0LngoKSwgbV9jb250ZW50c1JlY3QueSgpKSk7CisgICAgbV9jb250
ZW50c0xheWVyLT5zZXRCb3VuZHMoSW50U2l6ZShtX2NvbnRlbnRzUmVjdC53aWR0aCgpLCBtX2Nv
bnRlbnRzUmVjdC5oZWlnaHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjp1cGRh
dGVHZW9tZXRyeU9yaWVudGF0aW9uKCkKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjp1cGRh
dGVHZW9tZXRyeU9yaWVudGF0aW9uKCkKIHsKICAgICBzd2l0Y2ggKGdlb21ldHJ5T3JpZW50YXRp
b24oKSkgewogICAgIGNhc2UgQ29tcG9zaXRpbmdDb29yZGluYXRlc1RvcERvd246CkBAIC01MzEs
NyArNTIxLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyU2tpYTo6dXBkYXRlR2VvbWV0cnlPcgogICAg
IC8vIHNvIGlzIGhhbmRsZWQgdmlhIHNldEdlb21ldHJ5T3JpZW50YXRpb24oKS4KIH0KIAotdm9p
ZCBHcmFwaGljc0xheWVyU2tpYTo6c2V0dXBDb250ZW50c0xheWVyKExheWVyU2tpYSogY29udGVu
dHNMYXllcikKK3ZvaWQgR3JhcGhpY3NMYXllckNocm9taXVtOjpzZXR1cENvbnRlbnRzTGF5ZXIo
TGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcikKIHsKICAgICBpZiAoY29udGVudHNMYXllciA9
PSBtX2NvbnRlbnRzTGF5ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTU0NCw5ICs1MzQsNyBAQCB2
b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXR1cENvbnRlbnRzTGF5CiAgICAgaWYgKGNvbnRlbnRz
TGF5ZXIpIHsKICAgICAgICAgbV9jb250ZW50c0xheWVyID0gY29udGVudHNMYXllcjsKIAotICAg
ICAgICBTa1BvaW50IGFuY2hvclBvaW50OwotICAgICAgICBhbmNob3JQb2ludC5zZXQoMC4wZiwg
MC4wZik7Ci0gICAgICAgIG1fY29udGVudHNMYXllci0+c2V0QW5jaG9yUG9pbnQoYW5jaG9yUG9p
bnQpOworICAgICAgICBtX2NvbnRlbnRzTGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQo
MCwgMCkpOwogCiAgICAgICAgIC8vIEluc2VydCB0aGUgY29udGVudCBsYXllciBmaXJzdC4gVmlk
ZW8gZWxlbWVudHMgcmVxdWlyZSB0aGlzLCBiZWNhdXNlIHRoZXkgaGF2ZQogICAgICAgICAvLyBz
aGFkb3cgY29udGVudCB0aGF0IG11c3QgZGlzcGxheSBpbiBmcm9udCBvZiB0aGUgdmlkZW8uCkBA
IC01NTYsMTQgKzU0NCwxNCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJTa2lhOjpzZXR1cENvbnRlbnRz
TGF5CiAKICAgICAgICAgaWYgKHNob3dEZWJ1Z0JvcmRlcnMoKSkgewogICAgICAgICAgICAgc2V0
TGF5ZXJCb3JkZXJDb2xvcigqbV9jb250ZW50c0xheWVyLCBDb2xvcigwLCAwLCAxMjgsIDE4MCkp
OwotICAgICAgICAgICAgbV9jb250ZW50c0xheWVyLT5zZXRCb3JkZXJXaWR0aCgxLjBmKTsKKyAg
ICAgICAgICAgIG1fY29udGVudHNMYXllci0+c2V0Qm9yZGVyV2lkdGgoMSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7CiB9CiAKIC8vIFRoaXMgZnVuY3Rp
b24gc2ltcGx5IG1pbWljcyB0aGUgb3BlcmF0aW9uIG9mIEdyYXBoaWNzTGF5ZXJDQQotdm9pZCBH
cmFwaGljc0xheWVyU2tpYTo6dXBkYXRlT3BhY2l0eU9uTGF5ZXIoKQordm9pZCBHcmFwaGljc0xh
eWVyQ2hyb21pdW06OnVwZGF0ZU9wYWNpdHlPbkxheWVyKCkKIHsKICAgICBwcmltYXJ5TGF5ZXIo
KS0+c2V0T3BhY2l0eShtX29wYWNpdHkpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmgJKHJldmlzaW9uIDU3MDg4KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzTGF5ZXJTa2lhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDEyICszOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIExheWVyU2tpYTsKK2NsYXNzIExheWVyQ2hyb21pdW07CiAKLWNsYXNzIEdyYXBoaWNz
TGF5ZXJTa2lhIDogcHVibGljIEdyYXBoaWNzTGF5ZXIgeworY2xhc3MgR3JhcGhpY3NMYXllckNo
cm9taXVtIDogcHVibGljIEdyYXBoaWNzTGF5ZXIgewogcHVibGljOgotICAgIEdyYXBoaWNzTGF5
ZXJTa2lhKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0xheWVy
U2tpYSgpOworICAgIEdyYXBoaWNzTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2xpZW50Kik7
CisgICAgdmlydHVhbCB+R3JhcGhpY3NMYXllckNocm9taXVtKCk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgc2V0TmFtZShjb25zdCBTdHJpbmcmKTsKIApAQCAtMTAzLDkgKzEwMyw5IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVPcGFjaXR5T25MYXllcigpOwogCi0gICAgTGF5ZXJT
a2lhKiBwcmltYXJ5TGF5ZXIoKSBjb25zdCAgeyByZXR1cm4gbV90cmFuc2Zvcm1MYXllci5nZXQo
KSA/IG1fdHJhbnNmb3JtTGF5ZXIuZ2V0KCkgOiBtX2xheWVyLmdldCgpOyB9Ci0gICAgTGF5ZXJT
a2lhKiBob3N0TGF5ZXJGb3JTdWJsYXllcnMoKSBjb25zdDsKLSAgICBMYXllclNraWEqIGxheWVy
Rm9yU3VwZXJsYXllcigpIGNvbnN0OworICAgIExheWVyQ2hyb21pdW0qIHByaW1hcnlMYXllcigp
IGNvbnN0ICB7IHJldHVybiBtX3RyYW5zZm9ybUxheWVyLmdldCgpID8gbV90cmFuc2Zvcm1MYXll
ci5nZXQoKSA6IG1fbGF5ZXIuZ2V0KCk7IH0KKyAgICBMYXllckNocm9taXVtKiBob3N0TGF5ZXJG
b3JTdWJsYXllcnMoKSBjb25zdDsKKyAgICBMYXllckNocm9taXVtKiBsYXllckZvclN1cGVybGF5
ZXIoKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRlU3VibGF5ZXJMaXN0KCk7CiAgICAgdm9pZCB1
cGRhdGVMYXllclBvc2l0aW9uKCk7CkBAIC0xMjUsMTIgKzEyNSwxMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgdXBkYXRlQ29udGVudHNSZWN0KCk7CiAgICAgdm9pZCB1cGRhdGVHZW9tZXRyeU9yaWVu
dGF0aW9uKCk7CiAKLSAgICB2b2lkIHNldHVwQ29udGVudHNMYXllcihMYXllclNraWEqKTsKLSAg
ICBMYXllclNraWEqIGNvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzTGF5
ZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldHVwQ29udGVudHNMYXllcihMYXllckNocm9taXVtKik7
CisgICAgTGF5ZXJDaHJvbWl1bSogY29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGVudHNMYXllci5nZXQoKTsgfQogCi0gICAgUmVmUHRyPExheWVyU2tpYT4gbV9sYXllcjsKLSAg
ICBSZWZQdHI8TGF5ZXJTa2lhPiBtX3RyYW5zZm9ybUxheWVyOwotICAgIFJlZlB0cjxMYXllclNr
aWE+IG1fY29udGVudHNMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9sYXllcjsK
KyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV90cmFuc2Zvcm1MYXllcjsKKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gbV9jb250ZW50c0xheWVyOwogCiAgICAgZW51bSBDb250ZW50c0xheWVy
UHVycG9zZSB7CiAgICAgICAgIE5vQ29udGVudHNMYXllciA9IDAsCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJSZW5kZXJlclNraWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5jcHAJKHJl
dmlzaW9uIDU3MDg4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyUmVu
ZGVyZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjggKzQwLDM1IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxMYXllclJlbmRlcmVyU2tpYT4gTGF5ZXJSZW5k
ZXJlclNraWE6OmNyZWF0ZSgpCitQYXNzT3duUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoKQogewotICAgIHJldHVybiBuZXcgTGF5ZXJSZW5k
ZXJlclNraWEoKTsKKyAgICByZXR1cm4gbmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogfQog
Ci1MYXllclJlbmRlcmVyU2tpYTo6TGF5ZXJSZW5kZXJlclNraWEoKQorTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oKQogICAgIDogbV9yb290TGF5ZXIoMCkKICAg
ICAsIG1fbmVlZHNEaXNwbGF5KGZhbHNlKQogewogfQogCi1MYXllclJlbmRlcmVyU2tpYTo6fkxh
eWVyUmVuZGVyZXJTa2lhKCkKK0xheWVyUmVuZGVyZXJDaHJvbWl1bTo6fkxheWVyUmVuZGVyZXJD
aHJvbWl1bSgpCiB7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlclNraWE6OmRyYXdMYXllcnNJbkNh
bnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzLCBTa1JlY3QgY2xpcFJlY3QpCit2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50cygpCit7CisgICAgaWYg
KG1fcm9vdExheWVyKQorICAgICAgICB1cGRhdGVMYXllckNvbnRlbnRzUmVjdXJzaXZlKG1fcm9v
dExheWVyLmdldCgpKTsKK30KKworI2lmIFBMQVRGT1JNKFNLSUEpCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0luQ2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52
YXMsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIGlmICghbV9yb290TGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNhbnZhcy0+c2F2ZSgpOwotICAgIGNhbnZhcy0+Y2xpcFJl
Y3QoY2xpcFJlY3QpOworICAgIGNhbnZhcy0+Y2xpcFJlY3QoU2tSZWN0KGNsaXBSZWN0KSk7CiAK
ICAgICAvLyBGaXJzdCBjb21wb3NpdGUgdGhlIHJvb3QgbGF5ZXIgaW50byB0aGUgY2FudmFzLgog
ICAgIGNhbnZhcy0+ZHJhd0JpdG1hcChtX3Jvb3RMYXllci0+cGxhdGZvcm1DYW52YXMoKS0+Z2V0
RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSksIDAsIDAsIDApOwpAQCAtNzEsNyArNzgsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJTa2lhOjpkcmF3TGF5ZXJzSW5DYW52CiAgICAgY2FudmFzLT50
cmFuc2xhdGUoLW1fc2Nyb2xsRnJhbWUuZkxlZnQsIC1tX3Njcm9sbEZyYW1lLmZUb3ApOwogCiAg
ICAgZmxvYXQgb3BhY2l0eSA9IDEuMGY7Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclNr
aWE+ID4mIHN1YmxheWVycyA9IG1fcm9vdExheWVyLT5nZXRTdWJsYXllcnMoKTsKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fcm9vdExheWVy
LT5nZXRTdWJsYXllcnMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5z
aXplKCk7IGkrKykKICAgICAgICAgZHJhd0xheWVySW5DYW52YXNSZWN1cnNpdmUoY2FudmFzLCBz
dWJsYXllcnNbaV0uZ2V0KCksIG9wYWNpdHkpOwogCkBAIC04MCwyNiArODcsMjAgQEAgdm9pZCBM
YXllclJlbmRlcmVyU2tpYTo6ZHJhd0xheWVyc0luQ2FudgogICAgIG1fbmVlZHNEaXNwbGF5ID0g
ZmFsc2U7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlclNraWE6OnVwZGF0ZUxheWVyQ29udGVudHMo
KQotewotICAgIGlmIChtX3Jvb3RMYXllcikKLSAgICAgICAgdXBkYXRlTGF5ZXJDb250ZW50c1Jl
Y3Vyc2l2ZShtX3Jvb3RMYXllci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlclNraWE6
OmRyYXdMYXllckluQ2FudmFzUmVjdXJzaXZlKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMs
IExheWVyU2tpYSogbGF5ZXIsIGZsb2F0IG9wYWNpdHkpCit2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0xheWVySW5DYW52YXNSZWN1cnNpdmUoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNh
bnZhcywgTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGZsb2F0IG9wYWNpdHkpCiB7CiAgICAgLy8gR3Vh
cmFudGVlcyB0aGF0IHRoZSBjYW52YXMgaXMgcmVzdG9yZWQgdG8gYSBrbm93biBzdGF0ZSBvbiBk
ZXN0cnVjdGlvbi4KICAgICBTa0F1dG9DYW52YXNSZXN0b3JlIGF1dG9SZXN0b3JlQ2FudmFzKGNh
bnZhcywgdHJ1ZSk7CiAKLSAgICBTa1BvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7
Ci0gICAgU2tQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwotICAgIFNr
TWF0cml4IHRyYW5zZm9ybSA9IGxheWVyLT50cmFuc2Zvcm0oKTsKLSAgICBTa0lSZWN0IGJvdW5k
cyA9IGxheWVyLT5ib3VuZHMoKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBv
c2l0aW9uKCk7CisgICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2lu
dCgpOworICAgIFNrTWF0cml4IHRyYW5zZm9ybSA9IGxheWVyLT50cmFuc2Zvcm0oKS50b0FmZmlu
ZVRyYW5zZm9ybSgpOworICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwogCi0g
ICAgY2FudmFzLT50cmFuc2xhdGUocG9zaXRpb24uZlgsIHBvc2l0aW9uLmZZKTsKKyAgICBjYW52
YXMtPnRyYW5zbGF0ZShwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSk7CiAKLSAgICBTa1NjYWxh
ciB0eCA9IFNrU2NhbGFyTXVsKGFuY2hvclBvaW50LmZYLCBib3VuZHMud2lkdGgoKSk7Ci0gICAg
U2tTY2FsYXIgdHkgPSBTa1NjYWxhck11bChhbmNob3JQb2ludC5mWSwgYm91bmRzLmhlaWdodCgp
KTsKKyAgICBTa1NjYWxhciB0eCA9IFNrU2NhbGFyTXVsKGFuY2hvclBvaW50LngoKSwgYm91bmRz
LndpZHRoKCkpOworICAgIFNrU2NhbGFyIHR5ID0gU2tTY2FsYXJNdWwoYW5jaG9yUG9pbnQueSgp
LCBib3VuZHMuaGVpZ2h0KCkpOwogICAgIGNhbnZhcy0+dHJhbnNsYXRlKHR4LCB0eSk7CiAgICAg
Y2FudmFzLT5jb25jYXQodHJhbnNmb3JtKTsKICAgICBjYW52YXMtPnRyYW5zbGF0ZSgtdHgsIC10
eSk7CkBAIC0xMTcsMTYgKzExOCwxNyBAQCB2b2lkIExheWVyUmVuZGVyZXJTa2lhOjpkcmF3TGF5
ZXJJbkNhbnZhCiAKICAgICBjYW52YXMtPmRyYXdCaXRtYXAobGF5ZXItPnBsYXRmb3JtQ2FudmFz
KCktPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpLCAwLCAwLCAmb3BhY2l0eVBhaW50
KTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJTa2lhPiA+JiBzdWJsYXllcnMgPSBs
YXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9t
aXVtPiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIGRyYXdMYXllcklu
Q2FudmFzUmVjdXJzaXZlKGNhbnZhcywgc3VibGF5ZXJzW2ldLmdldCgpLCBvcGFjaXR5KTsKIH0K
KyNlbmRpZiAvLyBQTEFURk9STShTS0lBKQogCi12b2lkIExheWVyUmVuZGVyZXJTa2lhOjp1cGRh
dGVMYXllckNvbnRlbnRzUmVjdXJzaXZlKExheWVyU2tpYSogbGF5ZXIpCit2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJDb250ZW50c1JlY3Vyc2l2ZShMYXllckNocm9taXVt
KiBsYXllcikKIHsKICAgICBsYXllci0+dXBkYXRlQ29udGVudHMoKTsKIAotICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJTa2lhPiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJz
KCk7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMg
PSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJs
YXllcnMuc2l6ZSgpOyBpKyspCiAgICAgICAgIHVwZGF0ZUxheWVyQ29udGVudHNSZWN1cnNpdmUo
c3VibGF5ZXJzW2ldLmdldCgpKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9MYXllclJlbmRlcmVyU2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5oCShyZXZpc2lvbiA1NzA4OCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclJlbmRlcmVyU2tpYS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJTa2lhLmgiCiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAg
LTQ1LDI5ICs0NiwzMiBAQCBjbGFzcyBQbGF0Zm9ybUNhbnZhczsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBMYXllclJlbmRlcmVyU2tpYSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Citj
bGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzT3duUHRyPExheWVyUmVuZGVyZXJTa2lhPiBjcmVhdGUoKTsKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZSgpOwogCi0g
ICAgTGF5ZXJSZW5kZXJlclNraWEoKTsKLSAgICB+TGF5ZXJSZW5kZXJlclNraWEoKTsKLQotICAg
IHZvaWQgZHJhd0xheWVyc0luQ2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiwgU2tSZWN0IGNs
aXBSZWN0KTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKKyAgICB+TGF5ZXJSZW5kZXJl
ckNocm9taXVtKCk7CiAKKyNpZiBQTEFURk9STShTS0lBKQorICAgIHZvaWQgZHJhd0xheWVyc0lu
Q2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOwor
I2VuZGlmCiAgICAgdm9pZCB1cGRhdGVMYXllckNvbnRlbnRzKCk7CiAKLSAgICB2b2lkIHNldFJv
b3RMYXllcihQYXNzUmVmUHRyPExheWVyU2tpYT4gbGF5ZXIpIHsgbV9yb290TGF5ZXIgPSBsYXll
cjsgfQotICAgIExheWVyU2tpYSogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IGxh
eWVyKSB7IG1fcm9vdExheWVyID0gbGF5ZXI7IH0KKyAgICBMYXllckNocm9taXVtKiByb290TGF5
ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQogCiAgICAgdm9pZCBzZXROZWVkc0Rp
c3BsYXkoKSB7IG1fbmVlZHNEaXNwbGF5ID0gdHJ1ZTsgfQogCiAgICAgdm9pZCBzZXRTY3JvbGxG
cmFtZShTa0lSZWN0JiBzY3JvbGxGcmFtZSkgeyBtX3Njcm9sbEZyYW1lID0gc2Nyb2xsRnJhbWU7
IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGRyYXdMYXllckluQ2FudmFzUmVjdXJzaXZlKHNraWE6
OlBsYXRmb3JtQ2FudmFzKiwgTGF5ZXJTa2lhKiwgZmxvYXQgb3BhY2l0eSk7Ci0gICAgdm9pZCB1
cGRhdGVMYXllckNvbnRlbnRzUmVjdXJzaXZlKExheWVyU2tpYSopOworI2lmIFBMQVRGT1JNKFNL
SUEpCisgICAgdm9pZCBkcmF3TGF5ZXJJbkNhbnZhc1JlY3Vyc2l2ZShza2lhOjpQbGF0Zm9ybUNh
bnZhcyosIExheWVyQ2hyb21pdW0qLCBmbG9hdCBvcGFjaXR5KTsKKyNlbmRpZgorICAgIHZvaWQg
dXBkYXRlTGF5ZXJDb250ZW50c1JlY3Vyc2l2ZShMYXllckNocm9taXVtKik7CiAKLSAgICBSZWZQ
dHI8TGF5ZXJTa2lhPiBtX3Jvb3RMYXllcjsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbV9y
b290TGF5ZXI7CiAKICAgICBib29sIG1fbmVlZHNEaXNwbGF5OwogICAgIFNrSVJlY3QgbV9zY3Jv
bGxGcmFtZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclNraWEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclNr
aWEuY3BwCShyZXZpc2lvbiA1NzA4OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9MYXllclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMiArNDIsMTIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCi1QYXNzUmVmUHRyPExheWVy
U2tpYT4gTGF5ZXJTa2lhOjpjcmVhdGUoTGF5ZXJUeXBlIHR5cGUsIEdyYXBoaWNzTGF5ZXJTa2lh
KiBvd25lcikKK1Bhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTGF5ZXJTa2lhKHR5cGUsIG93bmVyKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBMYXllckNocm9taXVtKHR5cGUsIG93bmVyKSk7CiB9CiAKLUxheWVyU2tpYTo6
TGF5ZXJTa2lhKExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyU2tpYSogb3duZXIpCitMYXll
ckNocm9taXVtOjpMYXllckNocm9taXVtKExheWVyVHlwZSB0eXBlLCBHcmFwaGljc0xheWVyQ2hy
b21pdW0qIG93bmVyKQogICAgIDogbV9uZWVkc0Rpc3BsYXlPbkJvdW5kc0NoYW5nZShmYWxzZSkK
ICAgICAsIG1fb3duZXIob3duZXIpCiAgICAgLCBtX2xheWVyVHlwZSh0eXBlKQpAQCAtNzAsMjgg
KzcwLDIxIEBAIExheWVyU2tpYTo6TGF5ZXJTa2lhKExheWVyVHlwZSB0eXBlLCBHcmEKICAgICAs
IG1fZ3JhcGhpY3NDb250ZXh0KDApCiAgICAgLCBtX2dlb21ldHJ5RmxpcHBlZChmYWxzZSkKIHsK
LSAgICBtX2JvdW5kcy5zZXRFbXB0eSgpOwotICAgIG1fYmFja2luZ1N0b3JlUmVjdC5zZXRFbXB0
eSgpOwotICAgIG1fZnJhbWUuc2V0RW1wdHkoKTsKLSAgICBtX3Bvc2l0aW9uLnNldCgwLCAwKTsK
LSAgICBtX2FuY2hvclBvaW50LnNldCgwLCAwKTsKLSAgICBtX3RyYW5zZm9ybS5yZXNldCgpOwot
ICAgIG1fc3VibGF5ZXJUcmFuc2Zvcm0ucmVzZXQoKTsKLQogICAgIHVwZGF0ZUdyYXBoaWNzQ29u
dGV4dChtX2JhY2tpbmdTdG9yZVJlY3QpOwogfQogCi1MYXllclNraWE6On5MYXllclNraWEoKQor
TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogewogICAgIC8vIE91ciBzdXBlcmxheWVy
IHNob3VsZCBiZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHVzLCBzbyB0aGVyZSBzaG91bGQgYmUg
bm8gd2F5IGZvciB1cyB0byBiZSBkZXN0cm95ZWQgd2hpbGUgd2Ugc3RpbGwgaGF2ZSBhIHN1cGVy
bGF5ZXIuCiAgICAgQVNTRVJUKCFzdXBlcmxheWVyKCkpOwogfQogCi12b2lkIExheWVyU2tpYTo6
dXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IFNrSVJlY3QmIHJlY3QpCit2b2lkIExheWVyQ2hy
b21pdW06OnVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBJbnRTaXplJiBzaXplKQogeworI2lm
IFBMQVRGT1JNKFNLSUEpCiAgICAgLy8gQ3JlYXRlIG5ldyBjYW52YXMgYW5kIGNvbnRleHQuIE93
blB0ciB0YWtlcyBjYXJlIG9mIGZyZWVpbmcgdXAKICAgICAvLyB0aGUgb2xkIG9uZXMuCi0gICAg
bV9jYW52YXMgPSBuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMocmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpLCBmYWxzZSk7CisgICAgbV9jYW52YXMgPSBuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMo
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7CiAgICAgbV9za2lhQ29udGV4dCA9
IG5ldyBQbGF0Zm9ybUNvbnRleHRTa2lhKG1fY2FudmFzLmdldCgpKTsKIAogICAgIC8vIFRoaXMg
aXMgbmVlZGVkIHRvIGdldCB0ZXh0IHRvIHNob3cgdXAgY29ycmVjdGx5LiBXaXRob3V0IGl0LApA
QCAtMTAwLDE0ICs5MywxNiBAQCB2b2lkIExheWVyU2tpYTo6dXBkYXRlR3JhcGhpY3NDb250ZXh0
KGNvCiAgICAgbV9za2lhQ29udGV4dC0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIodHJ1ZSk7CiAK
ICAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG5ldyBHcmFwaGljc0NvbnRleHQocmVpbnRlcnByZXRf
Y2FzdDxQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCo+KG1fc2tpYUNvbnRleHQuZ2V0KCkpKTsKLQor
I2Vsc2UKKyNlcnJvciAiTmVlZCB0byBpbXBsZW1lbnQgZm9yIHlvdXIgcGxhdGZvcm0uIgorI2Vu
ZGlmCiAgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgYWxsb2NhdGVkIGZvciBhIGxheWVyIGNhbiBi
ZSBzbWFsbGVyIHRoYW4gdGhlIGxheWVyJ3MgYm91bmRzLgogICAgIC8vIFRoaXMgaXMgbW9zdGx5
IHRydWUgZm9yIHRoZSByb290IGxheWVyIHdob3NlIGJhY2tpbmcgc3RvcmUgaXMgc2l6ZWQgYmFz
ZWQgb24gdGhlIHZpc2libGUKICAgICAvLyBwb3J0aW9uIG9mIHRoZSBsYXllciByYXRoZXIgdGhh
biB0aGUgYWN0dWFsIHBhZ2Ugc2l6ZS4KLSAgICBtX2JhY2tpbmdTdG9yZVJlY3QgPSByZWN0Owor
ICAgIG1fYmFja2luZ1N0b3JlUmVjdCA9IHNpemU7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjp1cGRh
dGVDb250ZW50cygpCit2b2lkIExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKIHsKICAg
ICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSBzdGF0aWNfY2FzdDxSZW5kZXJMYXllckJh
Y2tpbmcqPihtX293bmVyLT5jbGllbnQoKSk7CiAKQEAgLTExNSw3ICsxMTAsNyBAQCB2b2lkIExh
eWVyU2tpYTo6dXBkYXRlQ29udGVudHMoKQogICAgICAgICBtX293bmVyLT5wYWludEdyYXBoaWNz
TGF5ZXJDb250ZW50cygqbV9ncmFwaGljc0NvbnRleHQsIEludFJlY3QoMCwgMCwgbV9ib3VuZHMu
d2lkdGgoKSwgbV9ib3VuZHMuaGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBMYXllclNraWE6OmRyYXdE
ZWJ1Z0JvcmRlcigpCit2b2lkIExheWVyQ2hyb21pdW06OmRyYXdEZWJ1Z0JvcmRlcigpCiB7CiAg
ICAgbV9ncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fYm9yZGVyQ29sb3IsIERldmlj
ZUNvbG9yU3BhY2UpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3Mo
bV9ib3JkZXJXaWR0aCk7CkBAIC0xMjUsNyArMTIwLDcgQEAgdm9pZCBMYXllclNraWE6OmRyYXdE
ZWJ1Z0JvcmRlcigpCiAgICAgbV9ncmFwaGljc0NvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KDAs
IG1fYm91bmRzLmhlaWdodCgpKSwgSW50UG9pbnQobV9ib3VuZHMud2lkdGgoKSwgbV9ib3VuZHMu
aGVpZ2h0KCkpKTsKIH0KIAotdm9pZCBMYXllclNraWE6OnNldE5lZWRzQ29tbWl0KCkKK3ZvaWQg
TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNDb21taXQoKQogewogICAgIC8vIENhbGwgbm90aWZ5U3lu
Y1JlcXVpcmVkKCksIHdoaWNoIGluIHRoaXMgaW1wbGVtZW50YXRpb24gcGx1bWJzIHRocm91Z2gg
dG8KICAgICAvLyBjYWxsIHNldFJvb3RMYXllck5lZWRzRGlzcGxheSgpIG9uIHRoZSBXZWJWaWV3
LCB3aGljaCB3aWxsIGNhdXNlIExheWVyUmVuZGVyZXJTa2lhCkBAIC0xMzQsMTIgKzEyOSwxMiBA
QCB2b2lkIExheWVyU2tpYTo6c2V0TmVlZHNDb21taXQoKQogICAgICAgICBtX293bmVyLT5ub3Rp
ZnlTeW5jUmVxdWlyZWQoKTsKIH0KIAotdm9pZCBMYXllclNraWE6OmFkZFN1YmxheWVyKFBhc3NS
ZWZQdHI8TGF5ZXJTa2lhPiBzdWJsYXllcikKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6YWRkU3VibGF5
ZXIoUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBzdWJsYXllcikKIHsKICAgICBpbnNlcnRTdWJs
YXllcihzdWJsYXllciwgbnVtU3VibGF5ZXJzKCkpOwogfQogCi12b2lkIExheWVyU2tpYTo6aW5z
ZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxMYXllclNraWE+IHN1YmxheWVyLCBzaXplX3QgaW5kZXgp
Cit2b2lkIExheWVyQ2hyb21pdW06Omluc2VydFN1YmxheWVyKFBhc3NSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gc3VibGF5ZXIsIHNpemVfdCBpbmRleCkKIHsKICAgICBpbmRleCA9IG1pbihpbmRleCwg
bV9zdWJsYXllcnMuc2l6ZSgpKTsKICAgICBtX3N1YmxheWVycy5pbnNlcnQoaW5kZXgsIHN1Ymxh
eWVyKTsKQEAgLTE0NywxNiArMTQyLDE2IEBAIHZvaWQgTGF5ZXJTa2lhOjppbnNlcnRTdWJsYXll
cihQYXNzUmVmUHQKICAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCi12b2lkIExheWVyU2tpYTo6
cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKQordm9pZCBMYXllckNocm9taXVtOjpyZW1vdmVGcm9tU3Vw
ZXJsYXllcigpCiB7Ci0gICAgTGF5ZXJTa2lhKiBzdXBlcmxheWVyID0gdGhpcy0+c3VwZXJsYXll
cigpOworICAgIExheWVyQ2hyb21pdW0qIHN1cGVybGF5ZXIgPSB0aGlzLT5zdXBlcmxheWVyKCk7
CiAgICAgaWYgKCFzdXBlcmxheWVyKQogICAgICAgICByZXR1cm47CiAKICAgICBzdXBlcmxheWVy
LT5yZW1vdmVTdWJsYXllcih0aGlzKTsKIH0KIAotdm9pZCBMYXllclNraWE6OnJlbW92ZVN1Ymxh
eWVyKExheWVyU2tpYSogc3VibGF5ZXIpCit2b2lkIExheWVyQ2hyb21pdW06OnJlbW92ZVN1Ymxh
eWVyKExheWVyQ2hyb21pdW0qIHN1YmxheWVyKQogewogICAgIGludCBmb3VuZEluZGV4ID0gaW5k
ZXhPZlN1YmxheWVyKHN1YmxheWVyKTsKICAgICBpZiAoZm91bmRJbmRleCA9PSAtMSkKQEAgLTE2
Nyw3ICsxNjIsNyBAQCB2b2lkIExheWVyU2tpYTo6cmVtb3ZlU3VibGF5ZXIoTGF5ZXJTa2lhCiAg
ICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotaW50IExheWVyU2tpYTo6aW5kZXhPZlN1YmxheWVy
KGNvbnN0IExheWVyU2tpYSogcmVmZXJlbmNlKQoraW50IExheWVyQ2hyb21pdW06OmluZGV4T2ZT
dWJsYXllcihjb25zdCBMYXllckNocm9taXVtKiByZWZlcmVuY2UpCiB7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3N1YmxheWVycy5zaXplKCk7IGkrKykgewogICAgICAgICBpZiAobV9z
dWJsYXllcnNbaV0gPT0gcmVmZXJlbmNlKQpAQCAtMTc2LDcgKzE3MSw3IEBAIGludCBMYXllclNr
aWE6OmluZGV4T2ZTdWJsYXllcihjb25zdCBMYXkKICAgICByZXR1cm4gLTE7CiB9CiAKLXZvaWQg
TGF5ZXJTa2lhOjpzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnN0IFNrSVJlY3QmIHJlY3QpCit2b2lk
IExheWVyQ2hyb21pdW06OnNldEJhY2tpbmdTdG9yZVJlY3QoY29uc3QgSW50U2l6ZSYgcmVjdCkK
IHsKICAgICBpZiAobV9iYWNraW5nU3RvcmVSZWN0ID09IHJlY3QpCiAgICAgICAgIHJldHVybjsK
QEAgLTE4NCw3ICsxNzksNyBAQCB2b2lkIExheWVyU2tpYTo6c2V0QmFja2luZ1N0b3JlUmVjdChj
b25zCiAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOwogfQogCi12b2lkIExheWVyU2tp
YTo6c2V0Qm91bmRzKGNvbnN0IFNrSVJlY3QmIHJlY3QpCit2b2lkIExheWVyQ2hyb21pdW06OnNl
dEJvdW5kcyhjb25zdCBJbnRTaXplJiByZWN0KQogewogICAgIGlmIChyZWN0ID09IG1fYm91bmRz
KQogICAgICAgICByZXR1cm47CkBAIC0yMDEsNyArMTk2LDcgQEAgdm9pZCBMYXllclNraWE6OnNl
dEJvdW5kcyhjb25zdCBTa0lSZWN0JgogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLXZvaWQg
TGF5ZXJTa2lhOjpzZXRGcmFtZShjb25zdCBTa1JlY3QmIHJlY3QpCit2b2lkIExheWVyQ2hyb21p
dW06OnNldEZyYW1lKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocmVjdCA9PSBt
X2ZyYW1lKQogICAgICAgcmV0dXJuOwpAQCAtMjEwLDM1ICsyMDUsMzUgQEAgdm9pZCBMYXllclNr
aWE6OnNldEZyYW1lKGNvbnN0IFNrUmVjdCYgcgogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAK
LWNvbnN0IExheWVyU2tpYSogTGF5ZXJTa2lhOjpyb290TGF5ZXIoKSBjb25zdAorY29uc3QgTGF5
ZXJDaHJvbWl1bSogTGF5ZXJDaHJvbWl1bTo6cm9vdExheWVyKCkgY29uc3QKIHsKLSAgICBjb25z
dCBMYXllclNraWEqIGxheWVyID0gdGhpczsKLSAgICBmb3IgKExheWVyU2tpYSogc3VwZXJsYXll
ciA9IGxheWVyLT5zdXBlcmxheWVyKCk7IHN1cGVybGF5ZXI7IGxheWVyID0gc3VwZXJsYXllciwg
c3VwZXJsYXllciA9IHN1cGVybGF5ZXItPnN1cGVybGF5ZXIoKSkgeyB9CisgICAgY29uc3QgTGF5
ZXJDaHJvbWl1bSogbGF5ZXIgPSB0aGlzOworICAgIGZvciAoTGF5ZXJDaHJvbWl1bSogc3VwZXJs
YXllciA9IGxheWVyLT5zdXBlcmxheWVyKCk7IHN1cGVybGF5ZXI7IGxheWVyID0gc3VwZXJsYXll
ciwgc3VwZXJsYXllciA9IHN1cGVybGF5ZXItPnN1cGVybGF5ZXIoKSkgeyB9CiAgICAgcmV0dXJu
IGxheWVyOwogfQogCi12b2lkIExheWVyU2tpYTo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKK3ZvaWQg
TGF5ZXJDaHJvbWl1bTo6cmVtb3ZlQWxsU3VibGF5ZXJzKCkKIHsKICAgICBtX3N1YmxheWVycy5j
bGVhcigpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLXZvaWQgTGF5ZXJTa2lhOjpzZXRT
dWJsYXllcnMoY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllclNraWE+ID4mIHN1YmxheWVycykKK3Zv
aWQgTGF5ZXJDaHJvbWl1bTo6c2V0U3VibGF5ZXJzKGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiYgc3VibGF5ZXJzKQogewogICAgIG1fc3VibGF5ZXJzID0gc3VibGF5ZXJzOwog
fQogCi12b2lkIExheWVyU2tpYTo6c2V0U3VwZXJsYXllcihMYXllclNraWEqIHN1cGVybGF5ZXIp
Cit2b2lkIExheWVyQ2hyb21pdW06OnNldFN1cGVybGF5ZXIoTGF5ZXJDaHJvbWl1bSogc3VwZXJs
YXllcikKIHsKICAgICBtX3N1cGVybGF5ZXIgPSBzdXBlcmxheWVyOwogfQogCi1MYXllclNraWEq
IExheWVyU2tpYTo6c3VwZXJsYXllcigpIGNvbnN0CitMYXllckNocm9taXVtKiBMYXllckNocm9t
aXVtOjpzdXBlcmxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdXBlcmxheWVyOwogfQog
Ci12b2lkIExheWVyU2tpYTo6c2V0TmVlZHNEaXNwbGF5KGNvbnN0IFNrUmVjdCYgZGlydHlSZWN0
KQordm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3BsYXkoY29uc3QgRmxvYXRSZWN0JiBk
aXJ0eVJlY3QpCiB7CiAgICAgLy8gUmVkcmF3IHRoZSBjb250ZW50cyBvZiB0aGUgbGF5ZXIuCiAg
ICAgdXBkYXRlQ29udGVudHMoKTsKQEAgLTI0Niw3ICsyNDEsNyBAQCB2b2lkIExheWVyU2tpYTo6
c2V0TmVlZHNEaXNwbGF5KGNvbnN0IFNrCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9p
ZCBMYXllclNraWE6OnNldE5lZWRzRGlzcGxheSgpCit2b2lkIExheWVyQ2hyb21pdW06OnNldE5l
ZWRzRGlzcGxheSgpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0xheWVyU2tpYS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9MYXllclNraWEuaAkocmV2aXNpb24gNTcwODgpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTGF5ZXJTa2lhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDEyICszNCwxMCBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogCi0KKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllclNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgotI2luY2x1ZGUgIlNrQ29sb3IuaCIKLSNpbmNsdWRlICJTa1BvaW50LmgiCiAjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAtNTQsMjUgKzUyLDI1IEBAIGNsYXNzIFBsYXRmb3Jt
Q2FudmFzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIExheWVyU2tpYSA6IHB1Ymxp
YyBSZWZDb3VudGVkPExheWVyU2tpYT4geworY2xhc3MgTGF5ZXJDaHJvbWl1bSA6IHB1YmxpYyBS
ZWZDb3VudGVkPExheWVyQ2hyb21pdW0+IHsKIHB1YmxpYzoKICAgICBlbnVtIExheWVyVHlwZSB7
IExheWVyLCBUcmFuc2Zvcm1MYXllciB9OwogICAgIGVudW0gRmlsdGVyVHlwZSB7IExpbmVhciwg
TmVhcmVzdCwgVHJpbGluZWFyLCBMYW5jem9zIH07CiAgICAgZW51bSBDb250ZW50c0dyYXZpdHlU
eXBlIHsgQ2VudGVyLCBUb3AsIEJvdHRvbSwgTGVmdCwgUmlnaHQsIFRvcExlZnQsIFRvcFJpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvdHRvbUxlZnQsIEJvdHRvbVJpZ2h0
LCBSZXNpemUsIFJlc2l6ZUFzcGVjdCwgUmVzaXplQXNwZWN0RmlsbCB9OwogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8TGF5ZXJTa2lhPiBjcmVhdGUoTGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyU2tp
YSogb3duZXIgPSAwKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBjcmVh
dGUoTGF5ZXJUeXBlLCBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CiAKLSAgICB+
TGF5ZXJTa2lhKCk7CisgICAgfkxheWVyQ2hyb21pdW0oKTsKIAogICAgIHZvaWQgZGlzcGxheShQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwogCi0gICAgdm9pZCBhZGRTdWJsYXllcihQYXNzUmVm
UHRyPExheWVyU2tpYT4pOwotICAgIHZvaWQgaW5zZXJ0U3VibGF5ZXIoUGFzc1JlZlB0cjxMYXll
clNraWE+LCBzaXplX3QgaW5kZXgpOworICAgIHZvaWQgYWRkU3VibGF5ZXIoUGFzc1JlZlB0cjxM
YXllckNocm9taXVtPik7CisgICAgdm9pZCBpbnNlcnRTdWJsYXllcihQYXNzUmVmUHRyPExheWVy
Q2hyb21pdW0+LCBzaXplX3QgaW5kZXgpOwogICAgIHZvaWQgcmVtb3ZlRnJvbVN1cGVybGF5ZXIo
KTsKIAotICAgIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgU2tQb2ludCYgYW5jaG9yUG9pbnQp
IHsgbV9hbmNob3JQb2ludCA9IGFuY2hvclBvaW50OyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAg
U2tQb2ludCBhbmNob3JQb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5jaG9yUG9pbnQ7IH0KKyAg
ICB2b2lkIHNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSB7IG1f
YW5jaG9yUG9pbnQgPSBhbmNob3JQb2ludDsgc2V0TmVlZHNDb21taXQoKTsgfQorICAgIEZsb2F0
UG9pbnQgYW5jaG9yUG9pbnQoKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50OyB9CiAKICAg
ICB2b2lkIHNldEFuY2hvclBvaW50WihmbG9hdCBhbmNob3JQb2ludFopIHsgbV9hbmNob3JQb2lu
dFogPSBhbmNob3JQb2ludFo7IHNldE5lZWRzQ29tbWl0KCk7IH0KICAgICBmbG9hdCBhbmNob3JQ
b2ludFooKSBjb25zdCB7IHJldHVybiBtX2FuY2hvclBvaW50WjsgfQpAQCAtODQsMTAgKzgyLDEw
IEBAIHB1YmxpYzoKICAgICBDb2xvciBib3JkZXJDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYm9y
ZGVyQ29sb3I7IH0KIAogICAgIHZvaWQgc2V0Qm9yZGVyV2lkdGgoZmxvYXQgd2lkdGgpIHsgbV9i
b3JkZXJXaWR0aCA9IHdpZHRoOyBzZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgU2tTY2FsYXIgYm9y
ZGVyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlcldpZHRoOyB9CisgICAgZmxvYXQgYm9y
ZGVyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlcldpZHRoOyB9CiAKLSAgICB2b2lkIHNl
dEJvdW5kcyhjb25zdCBTa0lSZWN0Jik7Ci0gICAgU2tJUmVjdCBib3VuZHMoKSBjb25zdCB7IHJl
dHVybiBtX2JvdW5kczsgfQorICAgIHZvaWQgc2V0Qm91bmRzKGNvbnN0IEludFNpemUmKTsKKyAg
ICBJbnRTaXplIGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fYm91bmRzOyB9CiAKICAgICB2b2lk
IHNldENsZWFyc0NvbnRleHQoYm9vbCBjbGVhcnMpIHsgbV9jbGVhcnNDb250ZXh0ID0gY2xlYXJz
OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBjbGVhcnNDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGVhcnNDb250ZXh0OyB9CkBAIC0xMDEsOCArOTksOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1aW50MzJfdCBtYXNrKSB7IG1fZWRnZUFudGlh
bGlhc2luZ01hc2sgPSBtYXNrOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgdWludDMyX3QgZWRn
ZUFudGlhbGlhc2luZ01hc2soKSBjb25zdCB7IHJldHVybiBtX2VkZ2VBbnRpYWxpYXNpbmdNYXNr
OyB9CiAKLSAgICB2b2lkIHNldEZyYW1lKGNvbnN0IFNrUmVjdCYpOwotICAgIFNrUmVjdCBmcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7IH0KKyAgICB2b2lkIHNldEZyYW1lKGNvbnN0IEZs
b2F0UmVjdCYpOworICAgIEZsb2F0UmVjdCBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7
IH0KIAogICAgIHZvaWQgc2V0SGlkZGVuKGJvb2wgaGlkZGVuKSB7IG1faGlkZGVuID0gaGlkZGVu
OyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBpc0hpZGRlbigpIGNvbnN0IHsgcmV0dXJu
IG1faGlkZGVuOyB9CkBAIC0xMTMsNyArMTExLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmFt
ZShjb25zdCBTdHJpbmcmIG5hbWUpIHsgbV9uYW1lID0gbmFtZTsgfQogICAgIFN0cmluZyBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKLSAgICB2b2lkIHNldE5lZWRzRGlzcGxheShj
b25zdCBTa1JlY3QmIGRpcnR5UmVjdCk7CisgICAgdm9pZCBzZXROZWVkc0Rpc3BsYXkoY29uc3Qg
RmxvYXRSZWN0JiBkaXJ0eVJlY3QpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKICAg
ICB2b2lkIHNldE5lZWRzRGlzcGxheU9uQm91bmRzQ2hhbmdlKGJvb2wgbmVlZHNEaXNwbGF5KSB7
IG1fbmVlZHNEaXNwbGF5T25Cb3VuZHNDaGFuZ2UgPSBuZWVkc0Rpc3BsYXk7IH0KQEAgLTEyNCwz
MCArMTIyLDMwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wYXF1ZShib29sIG9wYXF1ZSkgeyBt
X29wYXF1ZSA9IG9wYXF1ZTsgc2V0TmVlZHNDb21taXQoKTsgfQogICAgIGJvb2wgb3BhcXVlKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KIAotICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3Qg
U2tQb2ludCYgcG9zaXRpb24pIHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyAgc2V0TmVlZHNDb21t
aXQoKTsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24p
IHsgbV9wb3NpdGlvbiA9IHBvc2l0aW9uOyAgc2V0TmVlZHNDb21taXQoKTsgfQogCi0gICAgU2tQ
b2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0KKyAgICBGbG9hdFBv
aW50IHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogCiAgICAgdm9pZCBz
ZXRaUG9zaXRpb24oZmxvYXQgelBvc2l0aW9uKSB7IG1felBvc2l0aW9uID0gelBvc2l0aW9uOyBz
ZXROZWVkc0NvbW1pdCgpOyB9Ci0gICAgU2tTY2FsYXIgelBvc2l0aW9uKCkgY29uc3QgeyAgcmV0
dXJuIG1felBvc2l0aW9uOyB9CisgICAgZmxvYXQgelBvc2l0aW9uKCkgY29uc3QgeyAgcmV0dXJu
IG1felBvc2l0aW9uOyB9CiAKLSAgICBjb25zdCBMYXllclNraWEqIHJvb3RMYXllcigpIGNvbnN0
OworICAgIGNvbnN0IExheWVyQ2hyb21pdW0qIHJvb3RMYXllcigpIGNvbnN0OwogCiAgICAgdm9p
ZCByZW1vdmVBbGxTdWJsYXllcnMoKTsKIAotICAgIHZvaWQgc2V0U3VibGF5ZXJzKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJTa2lhPiA+Jik7CisgICAgdm9pZCBzZXRTdWJsYXllcnMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+Jik7CiAKLSAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPExheWVyU2tpYT4gPiYgZ2V0U3VibGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zdWJsYXll
cnM7IH0KKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGdldFN1Ymxh
eWVycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJzOyB9CiAKLSAgICB2b2lkIHNldFN1Ymxh
eWVyVHJhbnNmb3JtKGNvbnN0IFNrTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV9zdWJsYXllclRyYW5z
Zm9ybSA9IHRyYW5zZm9ybTsgc2V0TmVlZHNDb21taXQoKTsgfQotICAgIGNvbnN0IFNrTWF0cml4
JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07
IH0KKyAgICB2b2lkIHNldFN1YmxheWVyVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0pIHsgbV9zdWJsYXllclRyYW5zZm9ybSA9IHRyYW5zZm9ybTsgc2V0TmVl
ZHNDb21taXQoKTsgfQorICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIAotICAgIHZv
aWQgc2V0U3VwZXJsYXllcihMYXllclNraWEqIHN1cGVybGF5ZXIpOwotICAgIExheWVyU2tpYSog
c3VwZXJsYXllcigpIGNvbnN0OworICAgIHZvaWQgc2V0U3VwZXJsYXllcihMYXllckNocm9taXVt
KiBzdXBlcmxheWVyKTsKKyAgICBMYXllckNocm9taXVtKiBzdXBlcmxheWVyKCkgY29uc3Q7CiAK
IAotICAgIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFNrTWF0cml4JiB0cmFuc2Zvcm0pIHsgbV90
cmFuc2Zvcm0gPSB0cmFuc2Zvcm07IHNldE5lZWRzQ29tbWl0KCk7IH0KLSAgICBjb25zdCBTa01h
dHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2Zvcm07IH0KKyAgICB2b2lk
IHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSB7IG1f
dHJhbnNmb3JtID0gdHJhbnNmb3JtOyBzZXROZWVkc0NvbW1pdCgpOyB9CisgICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3Jt
OyB9CiAKICAgICB2b2lkIHNldEdlb21ldHJ5RmxpcHBlZChib29sIGZsaXBwZWQpIHsgbV9nZW9t
ZXRyeUZsaXBwZWQgPSBmbGlwcGVkOyBzZXROZWVkc0NvbW1pdCgpOyB9CiAgICAgYm9vbCBnZW9t
ZXRyeUZsaXBwZWQoKSBjb25zdCB7IHJldHVybiBtX2dlb21ldHJ5RmxpcHBlZDsgfQpAQCAtMTU3
LDEyICsxNTUsMTIgQEAgcHVibGljOgogICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBwbGF0Zm9y
bUNhbnZhcygpIHsgcmV0dXJuIG1fY2FudmFzLmdldCgpOyB9CiAgICAgR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQoKSB7IHJldHVybiBtX2dyYXBoaWNzQ29udGV4dC5nZXQoKTsgfQog
Ci0gICAgdm9pZCBzZXRCYWNraW5nU3RvcmVSZWN0KGNvbnN0IFNrSVJlY3QmKTsKKyAgICB2b2lk
IHNldEJhY2tpbmdTdG9yZVJlY3QoY29uc3QgSW50U2l6ZSYpOwogCiAgICAgdm9pZCBkcmF3RGVi
dWdCb3JkZXIoKTsKIAogcHJpdmF0ZToKLSAgICBMYXllclNraWEoTGF5ZXJUeXBlLCBHcmFwaGlj
c0xheWVyU2tpYSogb3duZXIpOworICAgIExheWVyQ2hyb21pdW0oTGF5ZXJUeXBlLCBHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKTsKIAogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKIApA
QCAtMTc0LDM1ICsxNzIsMzUgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBSZXR1cm5zIHRo
ZSBpbmRleCBvZiB0aGUgc3VibGF5ZXIgb3IgLTEgaWYgbm90IGZvdW5kLgotICAgIGludCBpbmRl
eE9mU3VibGF5ZXIoY29uc3QgTGF5ZXJTa2lhKik7CisgICAgaW50IGluZGV4T2ZTdWJsYXllcihj
b25zdCBMYXllckNocm9taXVtKik7CiAKICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBmcm9tIHJlbW92ZUZyb21TdXBlcmxheWVyLgotICAgIHZvaWQgcmVtb3ZlU3VibGF5ZXIoTGF5
ZXJTa2lhKik7CisgICAgdm9pZCByZW1vdmVTdWJsYXllcihMYXllckNocm9taXVtKik7CiAKICAg
ICAvLyBSZS1jcmVhdGUgdGhlIGNhbnZhcyBhbmQgZ3JhcGhpY3MgY29udGV4dC4gVGhpcyBtZXRo
b2QKICAgICAvLyBtdXN0IGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBsYXllciBpcyByZXNpemVk
LgotICAgIHZvaWQgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IFNrSVJlY3QmKTsKKyAgICB2
b2lkIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChjb25zdCBJbnRTaXplJik7CiAKLSAgICBWZWN0b3I8
UmVmUHRyPExheWVyU2tpYT4gPiBtX3N1YmxheWVyczsKLSAgICBMYXllclNraWEqIG1fc3VwZXJs
YXllcjsKKyAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbV9zdWJsYXllcnM7Cisg
ICAgTGF5ZXJDaHJvbWl1bSogbV9zdXBlcmxheWVyOwogCi0gICAgR3JhcGhpY3NMYXllclNraWEq
IG1fb3duZXI7CisgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBtX293bmVyOwogICAgIE93blB0
cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9jYW52YXM7CiAgICAgT3duUHRyPFBsYXRmb3JtQ29u
dGV4dFNraWE+IG1fc2tpYUNvbnRleHQ7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9n
cmFwaGljc0NvbnRleHQ7CiAKICAgICBMYXllclR5cGUgbV9sYXllclR5cGU7CiAKLSAgICBTa0lS
ZWN0IG1fYm91bmRzOwotICAgIFNrSVJlY3QgbV9iYWNraW5nU3RvcmVSZWN0OwotICAgIFNrUG9p
bnQgbV9wb3NpdGlvbjsKLSAgICBTa1BvaW50IG1fYW5jaG9yUG9pbnQ7CisgICAgSW50U2l6ZSBt
X2JvdW5kczsKKyAgICBJbnRTaXplIG1fYmFja2luZ1N0b3JlUmVjdDsKKyAgICBGbG9hdFBvaW50
IG1fcG9zaXRpb247CisgICAgRmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwogICAgIENvbG9yIG1f
YmFja2dyb3VuZENvbG9yOwogICAgIENvbG9yIG1fYm9yZGVyQ29sb3I7CiAKLSAgICBTa1JlY3Qg
bV9mcmFtZTsKLSAgICBTa01hdHJpeCBtX3RyYW5zZm9ybTsKLSAgICBTa01hdHJpeCBtX3N1Ymxh
eWVyVHJhbnNmb3JtOworICAgIEZsb2F0UmVjdCBtX2ZyYW1lOworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IG1fdHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc3VibGF5ZXJU
cmFuc2Zvcm07CiAKICAgICB1aW50MzJfdCBtX2VkZ2VBbnRpYWxpYXNpbmdNYXNrOwogICAgIGZs
b2F0IG1fb3BhY2l0eTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTcxMDYpCisrKyBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTAtMDQtMDUgIFZhbmdlbGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5naW5nIHJl
ZmVyZW5jZXMgdG8gR3JhcGhpY3MgTGF5ZXIgcmVsYXRlZCBjbGFzc2VzIGZyb20gKlNraWEgdG8g
KkNocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzcxMTYKKworICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpwYWludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpz
ZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OnVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoK
KwogMjAxMC0wNC0wNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCShyZXZpc2lvbiA1NzA4OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDEsMTEgKzk0MSwxMSBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhCiAgICAgICAgIHVwZGF0ZVJvb3RMYXllckNv
bnRlbnRzKHJlY3QpOwogCiAgICAgICAgIC8vIENvbXBvc2l0ZSBldmVyeXRoaW5nIGludG8gdGhl
IGNhbnZhcyB0aGF0J3MgcGFzc2VkIHRvIHVzLgotICAgICAgICBTa0lSZWN0IGNhbnZhc0lSZWN0
OwotICAgICAgICBjYW52YXNJUmVjdC5zZXQocmVjdC54LCByZWN0LnksIHJlY3QueCArIHJlY3Qu
d2lkdGgsIHJlY3QueSArIHJlY3QuaGVpZ2h0KTsKLSAgICAgICAgU2tSZWN0IGNhbnZhc1JlY3Q7
Ci0gICAgICAgIGNhbnZhc1JlY3Quc2V0KGNhbnZhc0lSZWN0KTsKLSAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzSW5DYW52YXMoc3RhdGljX2Nhc3Q8c2tpYTo6UGxhdGZvcm1DYW52
YXMqPihjYW52YXMpLCBjYW52YXNSZWN0KTsKKyNpZiBQTEFURk9STShTS0lBKQorICAgICAgICBt
X2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnNJbkNhbnZhcyhzdGF0aWNfY2FzdDxza2lhOjpQbGF0
Zm9ybUNhbnZhcyo+KGNhbnZhcyksIEludFJlY3QocmVjdCkpOworI2VsaWYgUExBVEZPUk0oQ0cp
CisjZXJyb3IgIk5lZWQgdG8gaW1wbGVtZW50IENHIHZlcnNpb24iCisjZW5kaWYKICAgICB9CiAj
ZW5kaWYKIH0KQEAgLTIwNDAsNyArMjA0MCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXQKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGFjY2VsZXJhdGVkKSB7
Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJTa2lhOjpjcmVhdGUoKTsK
KyAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
KTsKICAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgICAgIG1faXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nID0gdHJ1ZTsKICAgICB9IGVsc2UgewpAQCAtMjA2NSwxNyArMjA2NSwx
NSBAQCB2b2lkIFdlYlZpZXdJbXBsOjp1cGRhdGVSb290TGF5ZXJDb250ZW50CiAgICAgU2tJUmVj
dCBzY3JvbGxGcmFtZTsKICAgICBzY3JvbGxGcmFtZS5zZXQodmlldy0+c2Nyb2xsWCgpLCB2aWV3
LT5zY3JvbGxZKCksIHZpZXctPmxheW91dFdpZHRoKCkgKyB2aWV3LT5zY3JvbGxYKCksIHZpZXct
PmxheW91dEhlaWdodCgpICsgdmlldy0+c2Nyb2xsWSgpKTsKICAgICBtX2xheWVyUmVuZGVyZXIt
PnNldFNjcm9sbEZyYW1lKHNjcm9sbEZyYW1lKTsKLSAgICBMYXllclNraWEqIHJvb3RMYXllciA9
IG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCk7CisgICAgTGF5ZXJDaHJvbWl1bSogcm9vdExh
eWVyID0gbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKTsKICAgICBpZiAocm9vdExheWVyKSB7
Ci0gICAgICAgIFNrSVJlY3Qgcm9vdExheWVyQm91bmRzOwogICAgICAgICBJbnRSZWN0IHZpc2li
bGVSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KHRydWUpOwogCiAgICAgICAgIC8vIFNl
dCB0aGUgYmFja2luZyBzdG9yZSBzaXplIHVzZWQgYnkgdGhlIHJvb3QgbGF5ZXIgdG8gYmUgdGhl
IHNpemUgb2YgdGhlIHZpc2libGUKICAgICAgICAgLy8gYXJlYS4gTm90ZSB0aGF0IHRoZSByb290
IGxheWVyIGJvdW5kcyBjb3VsZCBiZSBsYXJnZXIgdGhhbiB0aGUgYmFja2luZyBzdG9yZSBzaXpl
LAogICAgICAgICAvLyBidXQgdGhlcmUncyBubyByZWFzb24gdG8gd2FzdGUgbWVtb3J5IGJ5IGFs
bG9jYXRpbmcgYmFja2luZyBzdG9yZSBsYXJnZXIgdGhhbiB0aGUKICAgICAgICAgLy8gdmlzaWJs
ZSBwb3J0aW9uLgotICAgICAgICByb290TGF5ZXJCb3VuZHMuc2V0KDAsIDAsIHZpc2libGVSZWN0
LndpZHRoKCksIHZpc2libGVSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgcm9vdExheWVyLT5zZXRC
YWNraW5nU3RvcmVSZWN0KHJvb3RMYXllckJvdW5kcyk7CisgICAgICAgIHJvb3RMYXllci0+c2V0
QmFja2luZ1N0b3JlUmVjdChJbnRTaXplKHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0
LmhlaWdodCgpKSk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogcm9vdExheWVyQ29udGV4dCA9
IHJvb3RMYXllci0+Z3JhcGhpY3NDb250ZXh0KCk7CiAgICAgICAgIHJvb3RMYXllckNvbnRleHQt
PnNhdmUoKTsKIApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gNTcw
ODgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4OSw3ICs0ODksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9oYXZlTW91c2VDYXB0dXJl
OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIE93blB0cjxXZWJDb3Jl
OjpMYXllclJlbmRlcmVyU2tpYT4gbV9sYXllclJlbmRlcmVyOworICAgIE93blB0cjxXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKICAgICBib29sIG1faXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nOwogI2VuZGlmCiAgICAgc3RhdGljIGNvbnN0IFdlYklucHV0
RXZlbnQqIG1fY3VycmVudElucHV0RXZlbnQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>