<?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>61949</bug_id>
          
          <creation_ts>2011-06-02 11:41:27 -0700</creation_ts>
          <short_desc>Rename IntPoint/IntRect/FloatPoint/FloatRect::move to moveBy</short_desc>
          <delta_ts>2011-06-08 13:31:09 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>
          <dependson>61891</dependson>
          <blocked>61893</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>414312</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-02 11:41:27 -0700</bug_when>
    <thetext>From comment on bug 61893:

Bleh.  I&apos;m liking generic move(IntPoint) less and less.  it&apos;s not clear if it sets or moves.
I think we should consider renaming the move() calls to moveBy() or something to make it clear what move(Point) is doing.  (I know rect and IntPoint use the same naming, so maybe that should be a separate change?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414486</commentid>
    <comment_count>1</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-02 15:04:00 -0700</bug_when>
    <thetext>Follows up on the work started by levi in bug 61891.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414491</commentid>
    <comment_count>2</comment_count>
      <attachid>95820</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-02 15:11:52 -0700</bug_when>
    <thetext>Created attachment 95820
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414492</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-06-02 15:12:36 -0700</bug_when>
    <thetext>Upload early to get feedback on whether this is a good idea or not. I suspect there are other platform specific files that needs to be updated as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>414504</commentid>
    <comment_count>4</comment_count>
      <attachid>95820</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-02 15:30:13 -0700</bug_when>
    <thetext>Comment on attachment 95820
Patch

Attachment 95820 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8756833</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95820</attachid>
            <date>2011-06-02 15:11:52 -0700</date>
            <delta_ts>2011-06-06 10:55:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-61949-20110602151151.patch</filename>
            <type>text/plain</type>
            <size>150761</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3OTU5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjg1IEBACisyMDExLTA2LTAyICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgSW50UG9pbnQvSW50UmVjdC9GbG9hdFBvaW50L0Zs
b2F0UmVjdDo6bW92ZSB0byBtb3ZlQnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYxOTQ5CisKKyAgICAgICAgTmFtZSBvbmx5IGNoYW5nZSwgY292ZXJl
ZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpnZXRMb3dlclJpZ2h0Q29ybmVyKToKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRD
bGllbnRSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRCb3VuZGluZ0NsaWVu
dFJlY3QpOgorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGp1
c3RGbG9hdFF1YWRzRm9yU2Nyb2xsQW5kQWJzb2x1dGVab29tQW5kUGFnZVNjYWxlKToKKyAgICAg
ICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcmV0
QmFzZTo6dXBkYXRlQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhcmV0QmFzZTo6cGFp
bnRDYXJldCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlkRHJh
dyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL0RPTU5vZGVIaWdobGlnaHRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01Ob2RlSGlnaGxpZ2h0ZXI6OkRyYXdOb2RlSGlnaGxpZ2h0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZENsaWVudExvY2FsOjptb3ZlV2luZG93Qnkp
OgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdp
bmRvdzo6bW92ZUJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6bW92ZVRvKToKKyAg
ICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OmludmFsaWRhdGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6c2Nyb2xsQ29u
dGVudHNGYXN0UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29udmVydEZyb21S
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmNvbnZlcnRUb1JlbmRlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
KToKKyAgICAgICAgKiBwYWdlL1NwYXRpYWxOYXZpZ2F0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnJlY3RUb0Fic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6bm9kZVJl
Y3RJbkFic29sdXRlQ29vcmRpbmF0ZXMpOgorICAgICAgICAqIHBhZ2Uvd2luL0ZyYW1lQ0dXaW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1JlY3RJbnRvQ29udGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp3
aW5kb3dUb0NvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRz
VG9XaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
Vmlldzo6Y29udmVydENoaWxkVG9TZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OmNvbnZlcnRTZWxmVG9DaGlsZCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVD
b21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6
OmhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6Omlu
dmFsaWRhdGVQYXJ0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHRTaGFkb3c6OmNhbGN1bGF0ZUxheWVyQm91
bmRpbmdSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdFBvaW50Ojptb3ZlQnkpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3IrPSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvci09KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
UG9pbnQzRDo6bW92ZUJ5KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yICs9KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yIC09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFF1YWQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UXVhZDo6bW92ZUJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yKz0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3ItPSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpGbG9hdFJlY3Q6Om1vdmVCeSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0JpZGlUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6Om1vdmVCeSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcis9KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yLT0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6Om1vdmVC
eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGhUcmF2ZXJzYWxTdGF0ZTo6cHJvY2Vzc1NlZ21lbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRJbnRSZWN0Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSb3VuZGVkSW50UmVjdDo6bW92ZUJ5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmNhbGN1
bGF0ZUxheWVyQm91bmRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRy
YXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
ZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6YXBwbHkpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVPZmZz
ZXQ6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zm
c2V0OjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJF
ZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdp
b25PZklucHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGls
aW5nRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxpbmdEYXRhOjppbnRlcnNlY3REcmF3
UXVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVz
dEdseXBoc0FuZEFkdmFuY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVk
aWFQbGF5ZXJQcml2YXRlUVRLaXQubW06CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVRVEtpdDo6cGFpbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvQWZmaW5lVHJhbnNmb3JtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9y
bTo6bWFwUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om1hcFF1YWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25N
YXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFF1YWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL21hYy9XaWRnZXRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpX
aWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjphZGRS
ZXBsYWNlZENoaWxkT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6
Y29tcHV0ZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6Om5vZGVB
dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBhaW50KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
OjphcHBseVNoYWRvd1RvR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50
RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxs
aW5nT3JHcmFtbWFyTWFya2VyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6cGFpbnRDb2x1bW5Db250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2lj
YWxSZWN0VG9QaHlzaWNhbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNl
bGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmlubGluZVNlbGVj
dGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29sdW1ucyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Ym9yZGVyRml0QWRqdXN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWJz
b2x1dGVDb250ZW50Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b3V0bGluZUJv
dW5kc0ZvclJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWZsZWN0aW9u
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6b2Zmc2V0RnJvbUNvbnRhaW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjphZGRPdmVyZmxvd0Zyb21DaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmxheW91dE92ZXJmbG93UmVjdEZvclByb3BhZ2F0aW9uKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6Om1vdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRGaWxsTGF5ZXJF
eHRlbmRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3Vs
YXRlQmFja2dyb3VuZEltYWdlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6YXJlYUNhc3Rp
bmdTaGFkb3dJbkhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50Qm94U2hhZG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29tYmluZVRleHQ6OmFkanVzdFRleHRPcmln
aW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckRldGFpbHNNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21ldHJ5KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmll
bGRzZXQ6OnBhaW50TWFzayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbmxpbmU6OmN1bGxlZElubGluZVZpc3VhbE92ZXJmbG93Qm91bmRpbmdCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmNvbXB1dGVSZWN0Rm9yUmVw
YWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1
bHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklucHV0U3BlZWNoLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlcklucHV0U3BlZWNoOjpwYWludElucHV0RmllbGRTcGVlY2hCdXR0b24pOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5k
Q2xpcFJlY3RGb3JEZXNjZW5kYW50c0FuZFJlZmxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJh
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aW52YWxpZGF0ZVNjcm9sbGJhclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50U2Nyb2xsQ29ybmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpwYWludFJlc2l6ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2x1bW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0Q2hpbGRMYXllckNvbHVtbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJhY2tncm91bmRDbGlwUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnJlcGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpzZXRCYWNraW5nTmVlZHNSZXBhaW50SW5SZWN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
QmFja2luZzo6dXBkYXRlQ29tcG9zaXRlZEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTGF5ZXJHZW9tZXRyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmNvbnRlbnRzQm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0Q29udGVudHNOZWVkRGlzcGxheUluUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwYWludFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21w
b3NpdG9yOjpjYWxjdWxhdGVDb21wb3NpdGVkQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJXaWxsQmVSZW1vdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OnBhaW50U2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9z
aXRvcjo6cGFpbnRDb250ZW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6Y29udHJvbENsaXBSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0SXRlbTo6cG9zaXRpb25MaXN0TWFy
a2VyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYWlu
dE1lZGlhU2xpZGVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlcGFpbnRSZWN0YW5nbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFj
ZWQ6OmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpzdWJ0cmFjdENhcHRpb25SZWN0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlQ2VsbDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb21wdXRlUmVjdEZvclJlcGFpbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjb250cm9sQ2xpcFJlY3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y29udmVydFRvUGFpbnRpbmdSZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnRpbmdSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGhlbWVXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVdpbkNF
OjpwYWludE1lZGlhUGxheUJ1dHRvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZUFzVGV4dDo6d3JpdGVSZW5k
ZXJPYmplY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6dmlkZW9Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVmlkZW86OnBhaW50UmVwbGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlcGFpbnRWaWV3UmVjdGFuZ2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNvbXB1dGVSZWN0Rm9yUmVwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpsaW5lU2VsZWN0aW9uR2Fw
KToKKyAgICAgICAgKiByZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHJhbnNmb3JtU3RhdGU6Om1vdmUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9T
aGFkb3dEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0RhdGE6OmFkanVzdFJlY3RG
b3JTaGFkb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBv
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFn
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRp
b25XaXRoU3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVy
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9m
Q2hhcmFjdGVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Y2FsY3VsYXRlR2x5cGhCb3Vu
ZGFyaWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpk
cmF3VGV4dFVzaW5nU1ZHRm9udCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkRmxvYXRQb2lu
dCk6CisgICAgICAgICogc3ZnL1NWR1BhdGhQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aFBhcnNlcjo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1ZlcnRpY2FsU2VnbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlcjo6cGFyc2VDdXJ2ZVRvUXVhZHJh
dGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZl
VG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJz
ZXI6OmRlY29tcG9zZUFyY1RvQ3ViaWMpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6YXBwbHkpOgorCiAy
MDExLTA2LTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzQsMTEgKzg3NCwxMSBAQCBib29sIENvbnRhaW5l
ck5vZGU6OmdldFVwcGVyTGVmdENvcm5lcihGCiAgICAgICAgIH0gZWxzZSBpZiAoKG8tPmlzVGV4
dCgpICYmICFvLT5pc0JSKCkpIHx8IG8tPmlzUmVwbGFjZWQoKSkgewogICAgICAgICAgICAgcG9p
bnQgPSBGbG9hdFBvaW50KCk7CiAgICAgICAgICAgICBpZiAoby0+aXNUZXh0KCkgJiYgdG9SZW5k
ZXJUZXh0KG8pLT5maXJzdFRleHRCb3goKSkgewotICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUo
dG9SZW5kZXJUZXh0KG8pLT5saW5lc0JvdW5kaW5nQm94KCkueCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9SZW5kZXJUZXh0KG8pLT5maXJzdFRleHRCb3goKS0+cm9vdCgpLT5saW5l
VG9wKCkpOworICAgICAgICAgICAgICAgIHBvaW50Lm1vdmVCeSh0b1JlbmRlclRleHQobyktPmxp
bmVzQm91bmRpbmdCb3goKS54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvUmVu
ZGVyVGV4dChvKS0+Zmlyc3RUZXh0Qm94KCktPnJvb3QoKS0+bGluZVRvcCgpKTsKICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoby0+aXNCb3goKSkgewogICAgICAgICAgICAgICAgIFJlbmRlckJveCog
Ym94ID0gdG9SZW5kZXJCb3gobyk7Ci0gICAgICAgICAgICAgICAgcG9pbnQubW92ZShib3gtPngo
KSwgYm94LT55KCkpOworICAgICAgICAgICAgICAgIHBvaW50Lm1vdmVCeShib3gtPngoKSwgYm94
LT55KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcG9pbnQgPSBvLT5jb250YWluZXIo
KS0+bG9jYWxUb0Fic29sdXRlKHBvaW50LCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTkwNCw3ICs5MDQsNyBAQCBib29sIENvbnRhaW5lck5vZGU6OmdldExvd2Vy
UmlnaHRDb3JuZXIoCiAgICAgaWYgKCFvLT5pc0lubGluZSgpIHx8IG8tPmlzUmVwbGFjZWQoKSkg
ewogICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOwogICAgICAgICBwb2lu
dCA9IG8tPmxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIGZhbHNlLCB0cnVlKTsKLSAgICAg
ICAgcG9pbnQubW92ZShib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgICAgICBwb2lu
dC5tb3ZlQnkoYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCkBAIC05MzIsMTAgKzkzMiwxMCBAQCBib29sIENvbnRhaW5lck5vZGU6Omdl
dExvd2VyUmlnaHRDb3JuZXIoCiAgICAgICAgICAgICAgICAgSW50UmVjdCBsaW5lc0JveCA9IHRl
eHQtPmxpbmVzQm91bmRpbmdCb3goKTsKICAgICAgICAgICAgICAgICBpZiAoIWxpbmVzQm94Lngo
KSAmJiAhbGluZXNCb3gud2lkdGgoKSAmJiAhbGluZXNCb3gueSgpICYmICFsaW5lc0JveC5oZWln
aHQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgcG9p
bnQubW92ZShsaW5lc0JveC54KCkgKyBsaW5lc0JveC53aWR0aCgpLCBsaW5lc0JveC55KCkgKyBs
aW5lc0JveC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcG9pbnQubW92ZUJ5KGxpbmVzQm94
LngoKSArIGxpbmVzQm94LndpZHRoKCksIGxpbmVzQm94LnkoKSArIGxpbmVzQm94LmhlaWdodCgp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyQm94KiBib3gg
PSB0b1JlbmRlckJveChvKTsKLSAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKGJveC0+eCgpICsg
Ym94LT53aWR0aCgpLCBib3gtPnkoKSArIGJveC0+aGVpZ2h0KCkpOworICAgICAgICAgICAgICAg
IHBvaW50Lm1vdmVCeShib3gtPngoKSArIGJveC0+d2lkdGgoKSwgYm94LT55KCkgKyBib3gtPmhl
aWdodCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBvaW50ID0gby0+Y29udGFpbmVy
KCktPmxvY2FsVG9BYnNvbHV0ZShwb2ludCwgZmFsc2UsIHRydWUpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA4NzkzMikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTczLDcg
KzU3Myw3IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IEVsZW1lbnQ6OmdldEMKICAgICBp
ZiAoRnJhbWVWaWV3KiB2aWV3ID0gZG9jdW1lbnQoKS0+dmlldygpKSB7CiAgICAgICAgIEludFJl
Y3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIHF1YWRzW2ldLm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVu
dFJlY3QueSgpKTsKKyAgICAgICAgICAgIHF1YWRzW2ldLm1vdmVCeSgtdmlzaWJsZUNvbnRlbnRS
ZWN0LngoKSwgLXZpc2libGVDb250ZW50UmVjdC55KCkpOwogICAgICAgICAgICAgYWRqdXN0Rmxv
YXRRdWFkRm9yQWJzb2x1dGVab29tKHF1YWRzW2ldLCByZW5kZXJCb3hNb2RlbE9iamVjdCk7CiAg
ICAgICAgICAgICBpZiAocGFnZVNjYWxlICE9IDEpCiAgICAgICAgICAgICAgICAgYWRqdXN0Rmxv
YXRRdWFkRm9yUGFnZVNjYWxlKHF1YWRzW2ldLCBwYWdlU2NhbGUpOwpAQCAtNjEyLDcgKzYxMiw3
IEBAIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gRWxlbWVudDo6Z2V0Qm91bmQKIAogICAgIGlmIChG
cmFtZVZpZXcqIHZpZXcgPSBkb2N1bWVudCgpLT52aWV3KCkpIHsKICAgICAgICAgSW50UmVjdCB2
aXNpYmxlQ29udGVudFJlY3QgPSB2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKTsKLSAgICAgICAg
cmVzdWx0Lm1vdmUoLXZpc2libGVDb250ZW50UmVjdC54KCksIC12aXNpYmxlQ29udGVudFJlY3Qu
eSgpKTsKKyAgICAgICAgcmVzdWx0Lm1vdmVCeSgtdmlzaWJsZUNvbnRlbnRSZWN0LngoKSwgLXZp
c2libGVDb250ZW50UmVjdC55KCkpOwogICAgIH0KIAogICAgIGFkanVzdEZsb2F0UmVjdEZvckFi
c29sdXRlWm9vbShyZXN1bHQsIHJlbmRlcmVyKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShy
ZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MzksNyArMTkzOSw3IEBAIHN0YXRpYyB2b2lkIGFkanVzdEZsb2F0UXVhZHNG
b3JTY3JvbGxBbmQKIAogICAgIEludFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gdmlldy0+dmlz
aWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWFkcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBxdWFkc1tpXS5tb3ZlKC12aXNpYmxlQ29udGVudFJlY3QueCgp
LCAtdmlzaWJsZUNvbnRlbnRSZWN0LnkoKSk7CisgICAgICAgIHF1YWRzW2ldLm1vdmVCeSgtdmlz
aWJsZUNvbnRlbnRSZWN0LngoKSwgLXZpc2libGVDb250ZW50UmVjdC55KCkpOwogICAgICAgICBh
ZGp1c3RGbG9hdFF1YWRGb3JBYnNvbHV0ZVpvb20ocXVhZHNbaV0sIHJlbmRlcmVyKTsKICAgICAg
ICAgaWYgKHBhZ2VTY2FsZSAhPSAxKQogICAgICAgICAgICAgYWRqdXN0RmxvYXRRdWFkRm9yUGFn
ZVNjYWxlKHF1YWRzW2ldLCBwYWdlU2NhbGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTcsNyArMTA5
Nyw3IEBAIGJvb2wgQ2FyZXRCYXNlOjp1cGRhdGVDYXJldFJlY3QoRG9jdW1lbnQKICAgICAgICAg
ICAgIHVucm9vdGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGxvY2FsUmVjdC5tb3ZlKHJlbmRlcmVyLT5vZmZzZXRGcm9tQ29udGFpbmVyKGNvbnRhaW5l
ck9iamVjdCwgbG9jYWxSZWN0LmxvY2F0aW9uKCkpKTsKKyAgICAgICAgbG9jYWxSZWN0Lm1vdmVC
eShyZW5kZXJlci0+b2Zmc2V0RnJvbUNvbnRhaW5lcihjb250YWluZXJPYmplY3QsIGxvY2FsUmVj
dC5sb2NhdGlvbigpKSk7CiAgICAgICAgIHJlbmRlcmVyID0gY29udGFpbmVyT2JqZWN0OwogICAg
IH0KIApAQCAtMTI3NSw3ICsxMjc1LDcgQEAgdm9pZCBDYXJldEJhc2U6OnBhaW50Q2FyZXQoTm9k
ZSogbm9kZSwgRwogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjYXJldFJlbmRlcmVyKG5v
ZGUpOwogICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNCb3goKSkKICAgICAgICAgdG9S
ZW5kZXJCb3gocmVuZGVyZXIpLT5mbGlwRm9yV3JpdGluZ01vZGUoZHJhd2luZ1JlY3QpOwotICAg
IGRyYXdpbmdSZWN0Lm1vdmUodHgsIHR5KTsKKyAgICBkcmF3aW5nUmVjdC5tb3ZlQnkodHgsIHR5
KTsKICAgICBJbnRSZWN0IGNhcmV0ID0gaW50ZXJzZWN0aW9uKGRyYXdpbmdSZWN0LCBjbGlwUmVj
dCk7CiAgICAgaWYgKGNhcmV0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MjYsNyAr
MTYyNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGMKICAgICBp
ZiAob3B0aW9ucyAmIENhbnZhc0RpZERyYXdBcHBseVNoYWRvdyAmJiBhbHBoYUNoYW5uZWwoc3Rh
dGUoKS5tX3NoYWRvd0NvbG9yKSkgewogICAgICAgICAvLyBUaGUgc2hhZG93IGdldHMgYXBwbGll
ZCBhZnRlciB0cmFuc2Zvcm1hdGlvbgogICAgICAgICBGbG9hdFJlY3Qgc2hhZG93UmVjdChkaXJ0
eVJlY3QpOwotICAgICAgICBzaGFkb3dSZWN0Lm1vdmUoc3RhdGUoKS5tX3NoYWRvd09mZnNldCk7
CisgICAgICAgIHNoYWRvd1JlY3QubW92ZUJ5KHN0YXRlKCkubV9zaGFkb3dPZmZzZXQpOwogICAg
ICAgICBzaGFkb3dSZWN0LmluZmxhdGUoc3RhdGUoKS5tX3NoYWRvd0JsdXIpOwogICAgICAgICBk
aXJ0eVJlY3QudW5pdGUoc2hhZG93UmVjdCk7CiAgICAgfQpAQCAtMTc3OSwxMiArMTc3OSwxMiBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VECiAgICAgY2xpcFJlY3Qu
aW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS0+d2lkdGgoKSwgZGF0YS0+aGVpZ2h0KCkpKTsK
ICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCksIHN0YXRpY19jYXN0
PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlw
UmVjdCk7Ci0gICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsKKyAgICBkZXN0UmVjdC5tb3Zl
QnkoZGVzdE9mZnNldCk7CiAgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgYnVmZmVyLT5zaXplKCkpKTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0KGRlc3RSZWN0KTsKLSAgICBzb3VyY2VS
ZWN0Lm1vdmUoLWRlc3RPZmZzZXQpOworICAgIHNvdXJjZVJlY3QubW92ZUJ5KC1kZXN0T2Zmc2V0
KTsKIAogICAgIGJ1ZmZlci0+cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGRhdGEtPmRhdGEoKS0+
ZGF0YSgpLCBJbnRTaXplKGRhdGEtPndpZHRoKCksIGRhdGEtPmhlaWdodCgpKSwgc291cmNlUmVj
dCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwogICAgIGRpZERyYXcoZGVzdFJlY3QsIENhbnZhc0Rp
ZERyYXdBcHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3Bw
CShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01Ob2RlSGln
aGxpZ2h0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBkcmF3
RWxlbWVudFRpdGxlKEdyYXBoaWNzQ29udGV4dCYgYwogCiAgICAgVGV4dFJ1biBub2RlVGl0bGVS
dW4obm9kZVRpdGxlKTsKICAgICBJbnRQb2ludCB0aXRsZUJhc2VQb2ludCA9IEludFBvaW50KGFu
Y2hvckJveC54KCksIGFuY2hvckJveC5tYXhZKCkgLSAxKTsKLSAgICB0aXRsZUJhc2VQb2ludC5t
b3ZlKHJlY3RJbmZsYXRlUHgsIHJlY3RJbmZsYXRlUHgpOworICAgIHRpdGxlQmFzZVBvaW50Lm1v
dmVCeShyZWN0SW5mbGF0ZVB4LCByZWN0SW5mbGF0ZVB4KTsKICAgICBJbnRSZWN0IHRpdGxlUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChub2RlVGl0bGVS
dW4sIHRpdGxlQmFzZVBvaW50LCBmb250SGVpZ2h0UHgpKTsKICAgICB0aXRsZVJlY3QuaW5mbGF0
ZShyZWN0SW5mbGF0ZVB4KTsKIApAQCAtMjA4LDcgKzIwOCw3IEBAIHZvaWQgZHJhd0VsZW1lbnRU
aXRsZShHcmFwaGljc0NvbnRleHQmIGMKICAgICBpZiAodGl0bGVSZWN0LnkoKSArIGR5IDwgb3Zl
cmxheVJlY3QueSgpKQogICAgICAgICBkeSA9IG92ZXJsYXlSZWN0LnkoKSAtIHRpdGxlUmVjdC55
KCkgKyBib3JkZXJXaWR0aFB4OwogCi0gICAgdGl0bGVSZWN0Lm1vdmUoZHgsIGR5KTsKKyAgICB0
aXRsZVJlY3QubW92ZUJ5KGR4LCBkeSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih0b29s
dGlwQm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwogICAgIGNvbnRleHQuc2V0U3Ry
b2tlVGhpY2tuZXNzKGJvcmRlcldpZHRoUHgpOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHRv
b2x0aXBCYWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpOwpAQCAtMjMzLDcgKzIz
Myw3IEBAIHZvaWQgRHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0JiAKICAgICBJbnRT
aXplIG1haW5GcmFtZU9mZnNldCA9IGZyYW1lVG9NYWluRnJhbWVPZmZzZXQoY29udGFpbmluZ0Zy
YW1lKTsKICAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0gcmVuZGVyZXItPmFic29sdXRlQm91bmRp
bmdCb3hSZWN0KHRydWUpOwogCi0gICAgYm91bmRpbmdCb3gubW92ZShtYWluRnJhbWVPZmZzZXQp
OworICAgIGJvdW5kaW5nQm94Lm1vdmVCeShtYWluRnJhbWVPZmZzZXQpOwogCiAgICAgSW50UmVj
dCB0aXRsZUFuY2hvckJveCA9IGJvdW5kaW5nQm94OwogCkBAIC0yNzEsMTAgKzI3MSwxMCBAQCB2
b2lkIERyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYgCiAgICAgICAgIEZsb2F0UXVh
ZCBhYnNCb3JkZXJRdWFkID0gcmVuZGVyQm94LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dChib3JkZXJCb3gpKTsKICAgICAgICAgRmxvYXRRdWFkIGFic01hcmdpblF1YWQgPSByZW5kZXJC
b3gtPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmdpbkJveCkpOwogCi0gICAgICAg
IGFic0NvbnRlbnRRdWFkLm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKLSAgICAgICAgYWJzUGFkZGlu
Z1F1YWQubW92ZShtYWluRnJhbWVPZmZzZXQpOwotICAgICAgICBhYnNCb3JkZXJRdWFkLm1vdmUo
bWFpbkZyYW1lT2Zmc2V0KTsKLSAgICAgICAgYWJzTWFyZ2luUXVhZC5tb3ZlKG1haW5GcmFtZU9m
ZnNldCk7CisgICAgICAgIGFic0NvbnRlbnRRdWFkLm1vdmVCeShtYWluRnJhbWVPZmZzZXQpOwor
ICAgICAgICBhYnNQYWRkaW5nUXVhZC5tb3ZlQnkobWFpbkZyYW1lT2Zmc2V0KTsKKyAgICAgICAg
YWJzQm9yZGVyUXVhZC5tb3ZlQnkobWFpbkZyYW1lT2Zmc2V0KTsKKyAgICAgICAgYWJzTWFyZ2lu
UXVhZC5tb3ZlQnkobWFpbkZyYW1lT2Zmc2V0KTsKIAogICAgICAgICB0aXRsZUFuY2hvckJveCA9
IGFic01hcmdpblF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENsaWVudExv
Y2FsLmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsx
MjcsNyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6OmNoYW5nCiB2b2lkIElu
c3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWw6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5
KQogewogICAgIEZsb2F0UmVjdCBmcmFtZVJlY3QgPSBtX2Zyb250ZW5kUGFnZS0+Y2hyb21lKCkt
PndpbmRvd1JlY3QoKTsKLSAgICBmcmFtZVJlY3QubW92ZSh4LCB5KTsKKyAgICBmcmFtZVJlY3Qu
bW92ZUJ5KHgsIHkpOwogICAgIG1fZnJvbnRlbmRQYWdlLT5jaHJvbWUoKS0+c2V0V2luZG93UmVj
dChmcmFtZVJlY3QpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCShyZXZp
c2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQwMSw3ICsxNDAxLDcgQEAgdm9pZCBET01XaW5kb3c6Om1vdmVCeShmbG9h
dCB4LCBmbG9hdCB5KQogCiAgICAgRmxvYXRSZWN0IGZyID0gcGFnZS0+Y2hyb21lKCktPndpbmRv
d1JlY3QoKTsKICAgICBGbG9hdFJlY3QgdXBkYXRlID0gZnI7Ci0gICAgdXBkYXRlLm1vdmUoeCwg
eSk7CisgICAgdXBkYXRlLm1vdmVCeSh4LCB5KTsKICAgICAvLyBTZWN1cml0eSBjaGVjayAodGhl
IHNwZWMgdGFsa3MgYWJvdXQgVW5pdmVyc2FsQnJvd3NlcldyaXRlIHRvIGRpc2FibGUgdGhpcyBj
aGVjay4uLikKICAgICBhZGp1c3RXaW5kb3dSZWN0KHNjcmVlbkF2YWlsYWJsZVJlY3QocGFnZS0+
bWFpbkZyYW1lKCktPnZpZXcoKSksIGZyLCB1cGRhdGUpOwogICAgIHBhZ2UtPmNocm9tZSgpLT5z
ZXRXaW5kb3dSZWN0KGZyKTsKQEAgLTE0MjMsNyArMTQyMyw3IEBAIHZvaWQgRE9NV2luZG93Ojpt
b3ZlVG8oZmxvYXQgeCwgZmxvYXQgeSkKICAgICBGbG9hdFJlY3Qgc3IgPSBzY3JlZW5BdmFpbGFi
bGVSZWN0KHBhZ2UtPm1haW5GcmFtZSgpLT52aWV3KCkpOwogICAgIGZyLnNldExvY2F0aW9uKHNy
LmxvY2F0aW9uKCkpOwogICAgIEZsb2F0UmVjdCB1cGRhdGUgPSBmcjsKLSAgICB1cGRhdGUubW92
ZSh4LCB5KTsgICAgIAorICAgIHVwZGF0ZS5tb3ZlQnkoeCwgeSk7ICAgICAKICAgICAvLyBTZWN1
cml0eSBjaGVjayAodGhlIHNwZWMgdGFsa3MgYWJvdXQgVW5pdmVyc2FsQnJvd3NlcldyaXRlIHRv
IGRpc2FibGUgdGhpcyBjaGVjay4uLikKICAgICBhZGp1c3RXaW5kb3dSZWN0KHNyLCBmciwgdXBk
YXRlKTsKICAgICBwYWdlLT5jaHJvbWUoKS0+c2V0V2luZG93UmVjdChmcik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDggKzM3NSw4IEBAIHZv
aWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnQKICAgICAgICAgcmV0dXJuOwog
CiAgICAgSW50UmVjdCByZXBhaW50UmVjdCA9IHJlY3Q7Ci0gICAgcmVwYWludFJlY3QubW92ZShy
ZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCi0gICAgICAg
ICAgICAgICAgICAgICByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+cGFkZGluZ1Rv
cCgpKTsKKyAgICByZXBhaW50UmVjdC5tb3ZlQnkocmVuZGVyZXItPmJvcmRlckxlZnQoKSArIHJl
bmRlcmVyLT5wYWRkaW5nTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci0+
Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+cGFkZGluZ1RvcCgpKTsKICAgICByZW5kZXJlci0+cmVw
YWludFJlY3RhbmdsZShyZXBhaW50UmVjdCk7CiB9CiAKQEAgLTEzMDUsNyArMTMwNSw3IEBAIGJv
b2wgRnJhbWVWaWV3OjpzY3JvbGxDb250ZW50c0Zhc3RQYXRoKGMKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaXhPYmplY3RzQ291bnQ7ICsraSkgewogICAgICAgICAgICAgSW50UmVj
dCB1cGRhdGVSZWN0ID0gc3ViUmVjdFRvVXBkYXRlW2ldOwogICAgICAgICAgICAgSW50UmVjdCBz
Y3JvbGxlZFJlY3QgPSB1cGRhdGVSZWN0OwotICAgICAgICAgICAgc2Nyb2xsZWRSZWN0Lm1vdmUo
c2Nyb2xsRGVsdGEpOworICAgICAgICAgICAgc2Nyb2xsZWRSZWN0Lm1vdmVCeShzY3JvbGxEZWx0
YSk7CiAgICAgICAgICAgICB1cGRhdGVSZWN0LnVuaXRlKHNjcm9sbGVkUmVjdCk7CiAgICAgICAg
ICAgICBpZiAoY2xpcHNSZXBhaW50cygpKQogICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QuaW50
ZXJzZWN0KHJlY3RUb1Njcm9sbCk7CkBAIC0yMTYzLDcgKzIxNjMsNyBAQCB2b2lkIEZyYW1lVmll
dzo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoCiB7CiAgICAgLy8gQWRkIGluIG91ciBvZmZzZXQg
d2l0aGluIHRoZSBGcmFtZVZpZXcuCiAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByZWN0OwotICAg
IGRpcnR5UmVjdC5tb3ZlKHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAgZGlydHlSZWN0Lm1v
dmVCeShzY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIGludmFsaWRhdGVSZWN0KGRpcnR5UmVj
dCk7CiB9CiAKQEAgLTI2MjcsNyArMjYyNyw3IEBAIEludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0
RnJvbVJlbmRlcmVyKGMKICAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlci0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QocmVuZGVyZXJSZWN0KSkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
IAogICAgIC8vIENvbnZlcnQgZnJvbSBwYWdlICgiYWJzb2x1dGUiKSB0byBGcmFtZVZpZXcgY29v
cmRpbmF0ZXMuCi0gICAgcmVjdC5tb3ZlKC1zY3JvbGxQb3NpdGlvbigpKTsKKyAgICByZWN0Lm1v
dmVCeSgtc2Nyb2xsUG9zaXRpb24oKSk7CiAKICAgICByZXR1cm4gcmVjdDsKIH0KQEAgLTI2Mzcs
NyArMjYzNyw3IEBAIEludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9SZW5kZXJlcihjb24KICAg
ICBJbnRSZWN0IHJlY3QgPSB2aWV3UmVjdDsKICAgICAKICAgICAvLyBDb252ZXJ0IGZyb20gRnJh
bWVWaWV3IGNvb3JkcyBpbnRvIHBhZ2UgKCJhYnNvbHV0ZSIpIGNvb3JkaW5hdGVzLgotICAgIHJl
Y3QubW92ZShzY3JvbGxQb3NpdGlvbigpKTsKKyAgICByZWN0Lm1vdmVCeShzY3JvbGxQb3NpdGlv
bigpKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBkb24ndCBoYXZlIGEgd2F5IHRvIG1hcCBhbiBhYnNv
bHV0ZSByZWN0IGRvd24gdG8gYSBsb2NhbCBxdWFkLCBzbyBqdXN0CiAgICAgLy8gbW92ZSB0aGUg
cmVjdCBmb3Igbm93LgpAQCAtMjY1MCw3ICsyNjUwLDcgQEAgSW50UG9pbnQgRnJhbWVWaWV3Ojpj
b252ZXJ0RnJvbVJlbmRlcmVyKAogICAgIEludFBvaW50IHBvaW50ID0gcm91bmRlZEludFBvaW50
KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocmVuZGVyZXJQb2ludCwgZmFsc2UsIHRydWUgLyog
dXNlIHRyYW5zZm9ybXMgKi8pKTsKIAogICAgIC8vIENvbnZlcnQgZnJvbSBwYWdlICgiYWJzb2x1
dGUiKSB0byBGcmFtZVZpZXcgY29vcmRpbmF0ZXMuCi0gICAgcG9pbnQubW92ZSgtc2Nyb2xsUG9z
aXRpb24oKSk7CisgICAgcG9pbnQubW92ZUJ5KC1zY3JvbGxQb3NpdGlvbigpKTsKICAgICByZXR1
cm4gcG9pbnQ7CiB9CiAKQEAgLTI2NzYsOCArMjY3Niw4IEBAIEludFJlY3QgRnJhbWVWaWV3Ojpj
b252ZXJ0VG9Db250YWluaW5nVmkKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIEludFJl
Y3QgcmVjdChsb2NhbFJlY3QpOwogICAgICAgICAgICAgLy8gQWRkIGJvcmRlcnMgYW5kIHBhZGRp
bmc/PwotICAgICAgICAgICAgcmVjdC5tb3ZlKHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci0+Ym9y
ZGVyVG9wKCkgKyByZW5kZXJlci0+cGFkZGluZ1RvcCgpKTsKKyAgICAgICAgICAgIHJlY3QubW92
ZUJ5KHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5w
YWRkaW5nVG9wKCkpOwogICAgICAgICAgICAgcmV0dXJuIHBhcmVudFZpZXctPmNvbnZlcnRGcm9t
UmVuZGVyZXIocmVuZGVyZXIsIHJlY3QpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjcwMCw4
ICsyNzAwLDggQEAgSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZwogCiAg
ICAgICAgICAgICBJbnRSZWN0IHJlY3QgPSBwYXJlbnRWaWV3LT5jb252ZXJ0VG9SZW5kZXJlcihy
ZW5kZXJlciwgcGFyZW50UmVjdCk7CiAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBib3JkZXJzIGFu
ZCBwYWRkaW5nCi0gICAgICAgICAgICByZWN0Lm1vdmUoLXJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkg
LSByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAtcmVuZGVy
ZXItPmJvcmRlclRvcCgpIC0gcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CisgICAgICAgICAgICBy
ZWN0Lm1vdmVCeSgtcmVuZGVyZXItPmJvcmRlckxlZnQoKSAtIHJlbmRlcmVyLT5wYWRkaW5nTGVm
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgLXJlbmRlcmVyLT5ib3JkZXJUb3AoKSAtIHJl
bmRlcmVyLT5wYWRkaW5nVG9wKCkpOwogICAgICAgICAgICAgcmV0dXJuIHJlY3Q7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC0yNzI1LDggKzI3MjUsOCBAQCBJbnRQb2ludCBGcmFtZVZpZXc6OmNv
bnZlcnRUb0NvbnRhaW5pbmdWCiAgICAgICAgICAgICBJbnRQb2ludCBwb2ludChsb2NhbFBvaW50
KTsKIAogICAgICAgICAgICAgLy8gQWRkIGJvcmRlcnMgYW5kIHBhZGRpbmcKLSAgICAgICAgICAg
IHBvaW50Lm1vdmUocmVuZGVyZXItPmJvcmRlckxlZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVm
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5k
ZXJlci0+cGFkZGluZ1RvcCgpKTsKKyAgICAgICAgICAgIHBvaW50Lm1vdmVCeShyZW5kZXJlci0+
Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7
CiAgICAgICAgICAgICByZXR1cm4gcGFyZW50Vmlldy0+Y29udmVydEZyb21SZW5kZXJlcihyZW5k
ZXJlciwgcG9pbnQpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjc0OSw4ICsyNzQ5LDggQEAg
SW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbgogCiAgICAgICAgICAgICBJ
bnRQb2ludCBwb2ludCA9IHBhcmVudFZpZXctPmNvbnZlcnRUb1JlbmRlcmVyKHJlbmRlcmVyLCBw
YXJlbnRQb2ludCk7CiAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBib3JkZXJzIGFuZCBwYWRkaW5n
Ci0gICAgICAgICAgICBwb2ludC5tb3ZlKC1yZW5kZXJlci0+Ym9yZGVyTGVmdCgpIC0gcmVuZGVy
ZXItPnBhZGRpbmdMZWZ0KCksCi0gICAgICAgICAgICAgICAgICAgICAgIC1yZW5kZXJlci0+Ym9y
ZGVyVG9wKCkgLSByZW5kZXJlci0+cGFkZGluZ1RvcCgpKTsKKyAgICAgICAgICAgIHBvaW50Lm1v
dmVCeSgtcmVuZGVyZXItPmJvcmRlckxlZnQoKSAtIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIC1yZW5kZXJlci0+Ym9yZGVyVG9wKCkgLSByZW5kZXJl
ci0+cGFkZGluZ1RvcCgpKTsKICAgICAgICAgICAgIHJldHVybiBwb2ludDsKICAgICAgICAgfQog
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3Bw
CShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3BhdGlhbE5hdmlnYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDgsOSArNTA4LDkgQEAgc3RhdGljIEludFJlY3Qg
cmVjdFRvQWJzb2x1dGVDb29yZGluYXRlcwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gaW5pdGlh
bEZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgewogICAgICAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmcmFtZS0+b3du
ZXJFbGVtZW50KCkpKSB7CiAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgcmVjdC5t
b3ZlKGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVudC0+b2Zmc2V0VG9wKCkpOworICAgICAg
ICAgICAgICAgIHJlY3QubW92ZUJ5KGVsZW1lbnQtPm9mZnNldExlZnQoKSwgZWxlbWVudC0+b2Zm
c2V0VG9wKCkpOwogICAgICAgICAgICAgfSB3aGlsZSAoKGVsZW1lbnQgPSBlbGVtZW50LT5vZmZz
ZXRQYXJlbnQoKSkpOwotICAgICAgICAgICAgcmVjdC5tb3ZlKCgtZnJhbWUtPnZpZXcoKS0+c2Ny
b2xsT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHJlY3QubW92ZUJ5KCgtZnJhbWUtPnZpZXcoKS0+
c2Nyb2xsT2Zmc2V0KCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmVjdDsKQEAg
LTUyNyw3ICs1MjcsNyBAQCBJbnRSZWN0IG5vZGVSZWN0SW5BYnNvbHV0ZUNvb3JkaW5hdGVzKE5v
CiAgICAgLy8gRm9yIGF1dGhvcnMgdGhhdCB1c2UgYm9yZGVyIGluc3RlYWQgb2Ygb3V0bGluZSBp
biB0aGVpciBDU1MsIHdlIGNvbXBlbnNhdGUgYnkgaWdub3JpbmcgdGhlIGJvcmRlciB3aGVuIGNh
bGN1bGF0aW5nCiAgICAgLy8gdGhlIHJlY3Qgb2YgdGhlIGZvY3VzZWQgZWxlbWVudC4KICAgICBp
ZiAoaWdub3JlQm9yZGVyKSB7Ci0gICAgICAgIHJlY3QubW92ZShub2RlLT5yZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwgbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9y
ZGVyVG9wV2lkdGgoKSk7CisgICAgICAgIHJlY3QubW92ZUJ5KG5vZGUtPnJlbmRlcmVyKCktPnN0
eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpLCBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3Jk
ZXJUb3BXaWR0aCgpKTsKICAgICAgICAgcmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkgLSBub2Rl
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSAtIG5vZGUtPnJlbmRlcmVy
KCktPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSk7CiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0
KHJlY3QuaGVpZ2h0KCkgLSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5ib3JkZXJUb3BXaWR0
aCgpIC0gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAJKHJldmlzaW9u
IDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHZv
aWQgZHJhd1JlY3RJbnRvQ29udGV4dChJbnRSZWN0IHJlY3QsIEZyYW1lVmlldyogdmlldywgR3Jh
cGhpY3NDb250ZXh0KiBnYykKIHsKICAgICBJbnRTaXplIG9mZnNldCA9IHZpZXctPnNjcm9sbE9m
ZnNldCgpOwotICAgIHJlY3QubW92ZSgtb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkp
OworICAgIHJlY3QubW92ZUJ5KC1vZmZzZXQud2lkdGgoKSwgLW9mZnNldC5oZWlnaHQoKSk7CiAg
ICAgcmVjdCA9IHZpZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVjdCk7CiAKICAgICBn
Yy0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSgtcmVjdC54KCksIC1yZWN0
LnkoKSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlz
aW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5MCwxNCArNjkwLDE0IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmNv
bnRlbnRzVG9XaW5kb3coY28KIEludFJlY3QgU2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyhj
b25zdCBJbnRSZWN0JiB3aW5kb3dSZWN0KSBjb25zdAogewogICAgIEludFJlY3Qgdmlld1JlY3Qg
PSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2luZG93UmVjdCk7Ci0gICAgdmlld1JlY3Qu
bW92ZShzY3JvbGxPZmZzZXQoKSk7CisgICAgdmlld1JlY3QubW92ZUJ5KHNjcm9sbE9mZnNldCgp
KTsKICAgICByZXR1cm4gdmlld1JlY3Q7CiB9CiAKIEludFJlY3QgU2Nyb2xsVmlldzo6Y29udGVu
dHNUb1dpbmRvdyhjb25zdCBJbnRSZWN0JiBjb250ZW50c1JlY3QpIGNvbnN0CiB7CiAgICAgSW50
UmVjdCB2aWV3UmVjdCA9IGNvbnRlbnRzUmVjdDsKLSAgICB2aWV3UmVjdC5tb3ZlKC1zY3JvbGxP
ZmZzZXQoKSk7CisgICAgdmlld1JlY3QubW92ZUJ5KC1zY3JvbGxPZmZzZXQoKSk7CiAgICAgcmV0
dXJuIGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3codmlld1JlY3QpOwogfQogCkBAIC0xMDA4LDEx
ICsxMDA4LDExIEBAIHZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiAKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKIAog
ICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOwotICAgICAgICBkb2N1bWVudERp
cnR5UmVjdC5tb3ZlKC1sb2NhdGlvbigpKTsKKyAgICAgICAgZG9jdW1lbnREaXJ0eVJlY3QubW92
ZUJ5KC1sb2NhdGlvbigpKTsKIAogICAgICAgICBpZiAoIXBhaW50c0VudGlyZUNvbnRlbnRzKCkp
IHsKICAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtc2Nyb2xsWCgpLCAtc2Nyb2xsWSgp
KTsKLSAgICAgICAgICAgIGRvY3VtZW50RGlydHlSZWN0Lm1vdmUoc2Nyb2xsUG9zaXRpb24oKSk7
CisgICAgICAgICAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24oKSk7
CiAKICAgICAgICAgICAgIGNvbnRleHQtPmNsaXAodmlzaWJsZUNvbnRlbnRSZWN0KCkpOwogICAg
ICAgICB9CkBAIC0xMDMzLDcgKzEwMzMsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogCiAgICAgICAgIEludFJlY3Qgc2Nyb2xsVmlld0RpcnR5UmVjdCA9IHJlY3Q7
CiAgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lUmVjdCgpKTsKICAg
ICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKLSAgICAgICAgc2Nyb2xsVmlld0Rp
cnR5UmVjdC5tb3ZlKC1sb2NhdGlvbigpKTsKKyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5t
b3ZlQnkoLWxvY2F0aW9uKCkpOwogCiAgICAgICAgIHBhaW50U2Nyb2xsYmFycyhjb250ZXh0LCBz
Y3JvbGxWaWV3RGlydHlSZWN0KTsKICAgICB9CkBAIC0xMTI3LDcgKzExMjcsNyBAQCBJbnRSZWN0
IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyCiB7CiAgICAgLy8gU2Nyb2xsYmFycyB3
b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMKICAgICBJbnRSZWN0IG5ld1JlY3QgPSBsb2Nh
bFJlY3Q7Ci0gICAgbmV3UmVjdC5tb3ZlKHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAgbmV3
UmVjdC5tb3ZlQnkoc2Nyb2xsYmFyLT5sb2NhdGlvbigpKTsKICAgICByZXR1cm4gbmV3UmVjdDsK
IH0KIApAQCAtMTEzNSw3ICsxMTM1LDcgQEAgSW50UmVjdCBTY3JvbGxWaWV3Ojpjb252ZXJ0RnJv
bUNvbnRhaW5pbgogewogICAgIEludFJlY3QgbmV3UmVjdCA9IHBhcmVudFJlY3Q7CiAgICAgLy8g
U2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMKLSAgICBuZXdSZWN0Lm1v
dmUoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAgbmV3UmVjdC5tb3ZlQnkoLXNjcm9sbGJh
ci0+bG9jYXRpb24oKSk7CiAgICAgcmV0dXJuIG5ld1JlY3Q7CiB9CiAKQEAgLTExNDQsNyArMTE0
NCw3IEBAIEludFBvaW50IFNjcm9sbFZpZXc6OmNvbnZlcnRGcm9tU2Nyb2xsYmEKIHsKICAgICAv
LyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cwogICAgIEludFBvaW50
IG5ld1BvaW50ID0gbG9jYWxQb2ludDsKLSAgICBuZXdQb2ludC5tb3ZlKHNjcm9sbGJhci0+bG9j
YXRpb24oKSk7CisgICAgbmV3UG9pbnQubW92ZUJ5KHNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAg
ICAgcmV0dXJuIG5ld1BvaW50OwogfQogCkBAIC0xMTUyLDcgKzExNTIsNyBAQCBJbnRQb2ludCBT
Y3JvbGxWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pCiB7CiAgICAgSW50UG9pbnQgbmV3UG9pbnQg
PSBwYXJlbnRQb2ludDsKICAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdp
dGhpbiB1cwotICAgIG5ld1BvaW50Lm1vdmUoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7CisgICAg
bmV3UG9pbnQubW92ZUJ5KC1zY3JvbGxiYXItPmxvY2F0aW9uKCkpOwogICAgIHJldHVybiBuZXdQ
b2ludDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNp
b24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0Miw3ICsyNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIEludFBvaW50IG5l
d1BvaW50ID0gcG9pbnQ7CiAgICAgICAgIGlmICghaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKGNoaWxk
KSkKICAgICAgICAgICAgIG5ld1BvaW50ID0gcG9pbnQgLSBzY3JvbGxPZmZzZXQoKTsKLSAgICAg
ICAgbmV3UG9pbnQubW92ZShjaGlsZC0+bG9jYXRpb24oKSk7CisgICAgICAgIG5ld1BvaW50Lm1v
dmVCeShjaGlsZC0+bG9jYXRpb24oKSk7CiAgICAgICAgIHJldHVybiBuZXdQb2ludDsKICAgICB9
CiAKQEAgLTI1MSw3ICsyNTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIEludFBvaW50IG5ld1BvaW50
ID0gcG9pbnQ7CiAgICAgICAgIGlmICghaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKGNoaWxkKSkKICAg
ICAgICAgICAgIG5ld1BvaW50ID0gcG9pbnQgKyBzY3JvbGxPZmZzZXQoKTsKLSAgICAgICAgbmV3
UG9pbnQubW92ZSgtY2hpbGQtPmxvY2F0aW9uKCkpOworICAgICAgICBuZXdQb2ludC5tb3ZlQnko
LWNoaWxkLT5sb2NhdGlvbigpKTsKICAgICAgICAgcmV0dXJuIG5ld1BvaW50OwogICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29t
cG9zaXRlLmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYs
NyBAQCBTY3JvbGxiYXJQYXJ0IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpoCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAKICAgICBJbnRQb2ludCBtb3VzZVBvc2l0aW9uID0gc2Nyb2xsYmFyLT5j
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKTsKLSAgICBtb3VzZVBvc2l0aW9u
Lm1vdmUoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpKTsKKyAgICBtb3VzZVBvc2l0aW9u
Lm1vdmVCeShzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkpOwogICAgIAogICAgIGlmICgh
c2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKICAgICAgICAg
cmV0dXJuIE5vUGFydDsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ29t
cG9zaXRlOjppbnZhbGlkYXRlCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGh1bWJSZWN0Owog
ICAgICAgICB9CiAgICAgfQotICAgIHJlc3VsdC5tb3ZlKC1zY3JvbGxiYXItPmxvY2F0aW9uKCkp
OworICAgIHJlc3VsdC5tb3ZlQnkoLXNjcm9sbGJhci0+bG9jYXRpb24oKSk7CiAgICAgc2Nyb2xs
YmFyLT5pbnZhbGlkYXRlUmVjdChyZXN1bHQpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcAkocmV2aXNpb24gODc5
MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE5LDcgKzIxOSw3IEBAIEludFJlY3QgQ29udGV4dFNoYWRv
dzo6Y2FsY3VsYXRlTGF5ZXJCb3UKICAgICAgICAgbGF5ZXJGbG9hdFJlY3QgPSB0cmFuc2Zvcm0u
aW52ZXJzZSgpLm1hcFF1YWQodHJhbnNmb3JtZWRQb2x5Z29uKS5ib3VuZGluZ0JveCgpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGxheWVyRmxvYXRSZWN0ID0gbGF5ZXJBcmVhOwotICAgICAgICBs
YXllckZsb2F0UmVjdC5tb3ZlKG1fb2Zmc2V0KTsKKyAgICAgICAgbGF5ZXJGbG9hdFJlY3QubW92
ZUJ5KG1fb2Zmc2V0KTsKICAgICB9CiAKICAgICAvLyBXZSBleHBhbmQgdGhlIGFyZWEgYnkgdGhl
IGJsdXIgcmFkaXVzIHRvIGdpdmUgZXh0cmEgc3BhY2UgZm9yIHRoZSBibHVyIHRyYW5zaXRpb24u
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
M0QuaAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6
CiAgICAgICAgIG1feSA9IHk7CiAgICAgICAgIG1feiA9IHo7CiAgICAgfQotICAgIHZvaWQgbW92
ZShmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR6KQorICAgIHZvaWQgbW92ZUJ5KGZsb2F0IGR4
LCBmbG9hdCBkeSwgZmxvYXQgZHopCiAgICAgewogICAgICAgICBtX3ggKz0gZHg7CiAgICAgICAg
IG1feSArPSBkeTsKQEAgLTEzMSwxMyArMTMxLDEzIEBAIHByaXZhdGU6CiAKIGlubGluZSBGbG9h
dFBvaW50M0QmIG9wZXJhdG9yICs9KEZsb2F0UG9pbnQzRCYgYSwgY29uc3QgRmxvYXRQb2ludDNE
JiBiKQogewotICAgIGEubW92ZShiLngoKSwgYi55KCksIGIueigpKTsKKyAgICBhLm1vdmVCeShi
LngoKSwgYi55KCksIGIueigpKTsKICAgICByZXR1cm4gYTsKIH0KIAogaW5saW5lIEZsb2F0UG9p
bnQzRCYgb3BlcmF0b3IgLT0oRmxvYXRQb2ludDNEJiBhLCBjb25zdCBGbG9hdFBvaW50M0QmIGIp
CiB7Ci0gICAgYS5tb3ZlKC1iLngoKSwgLWIueSgpLCAtYi56KCkpOworICAgIGEubW92ZUJ5KC1i
LngoKSwgLWIueSgpLCAtYi56KCkpOwogICAgIHJldHVybiBhOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5oCShyZXZpc2lvbiA4Nzkz
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1feCA9IHg7CiAg
ICAgICAgIG1feSA9IHk7CiAgICAgfQotICAgIHZvaWQgbW92ZShmbG9hdCBkeCwgZmxvYXQgZHkp
CisgICAgdm9pZCBtb3ZlQnkoZmxvYXQgZHgsIGZsb2F0IGR5KQogICAgIHsKICAgICAgICAgbV94
ICs9IGR4OwogICAgICAgICBtX3kgKz0gZHk7CkBAIC0xNDYsMTkgKzE0NiwxOSBAQCBwcml2YXRl
OgogCiBpbmxpbmUgRmxvYXRQb2ludCYgb3BlcmF0b3IrPShGbG9hdFBvaW50JiBhLCBjb25zdCBG
bG9hdFNpemUmIGIpCiB7Ci0gICAgYS5tb3ZlKGIud2lkdGgoKSwgYi5oZWlnaHQoKSk7CisgICAg
YS5tb3ZlQnkoYi53aWR0aCgpLCBiLmhlaWdodCgpKTsKICAgICByZXR1cm4gYTsKIH0KIAogaW5s
aW5lIEZsb2F0UG9pbnQmIG9wZXJhdG9yKz0oRmxvYXRQb2ludCYgYSwgY29uc3QgRmxvYXRQb2lu
dCYgYikKIHsKLSAgICBhLm1vdmUoYi54KCksIGIueSgpKTsKKyAgICBhLm1vdmVCeShiLngoKSwg
Yi55KCkpOwogICAgIHJldHVybiBhOwogfQogCiBpbmxpbmUgRmxvYXRQb2ludCYgb3BlcmF0b3It
PShGbG9hdFBvaW50JiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCiB7Ci0gICAgYS5tb3ZlKC1iLndp
ZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICBhLm1vdmVCeSgtYi53aWR0aCgpLCAtYi5oZWlnaHQo
KSk7CiAgICAgcmV0dXJuIGE7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UXVhZC5oCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdC
b3goKSk7CiAgICAgfQogCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQor
ICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQogICAgIHsKICAgICAgICAg
bV9wMSArPSBvZmZzZXQ7CiAgICAgICAgIG1fcDIgKz0gb2Zmc2V0OwpAQCAtMTAyLDEyICsxMDIs
MTIgQEAgcHVibGljOgogICAgICAgICBtX3A0ICs9IG9mZnNldDsKICAgICB9CiAKLSAgICB2b2lk
IG1vdmUoZmxvYXQgZHgsIGZsb2F0IGR5KQorICAgIHZvaWQgbW92ZUJ5KGZsb2F0IGR4LCBmbG9h
dCBkeSkKICAgICB7Ci0gICAgICAgIG1fcDEubW92ZShkeCwgZHkpOwotICAgICAgICBtX3AyLm1v
dmUoZHgsIGR5KTsKLSAgICAgICAgbV9wMy5tb3ZlKGR4LCBkeSk7Ci0gICAgICAgIG1fcDQubW92
ZShkeCwgZHkpOworICAgICAgICBtX3AxLm1vdmVCeShkeCwgZHkpOworICAgICAgICBtX3AyLm1v
dmVCeShkeCwgZHkpOworICAgICAgICBtX3AzLm1vdmVCeShkeCwgZHkpOworICAgICAgICBtX3A0
Lm1vdmVCeShkeCwgZHkpOwogICAgIH0KIAogICAgIHZvaWQgc2NhbGUoZmxvYXQgZHgsIGZsb2F0
IGR5KQpAQCAtMTI3LDEzICsxMjcsMTMgQEAgcHJpdmF0ZToKIAogaW5saW5lIEZsb2F0UXVhZCYg
b3BlcmF0b3IrPShGbG9hdFF1YWQmIGEsIGNvbnN0IEZsb2F0U2l6ZSYgYikKIHsKLSAgICBhLm1v
dmUoYik7CisgICAgYS5tb3ZlQnkoYik7CiAgICAgcmV0dXJuIGE7CiB9CiAKIGlubGluZSBGbG9h
dFF1YWQmIG9wZXJhdG9yLT0oRmxvYXRRdWFkJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCiB7Ci0g
ICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICBhLm1vdmVCeSgtYi53aWR0
aCgpLCAtYi5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGE7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShyZXZpc2lvbiA4NzkzMikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDQsOCArMTA0LDggQEAgcHVibGljOgogCiAgICAgRmxvYXRQb2ludCBjZW50ZXIo
KSBjb25zdCB7IHJldHVybiBGbG9hdFBvaW50KHgoKSArIHdpZHRoKCkgLyAyLCB5KCkgKyBoZWln
aHQoKSAvIDIpOyB9CiAKLSAgICB2b2lkIG1vdmUoY29uc3QgRmxvYXRTaXplJiBkZWx0YSkgeyBt
X2xvY2F0aW9uICs9IGRlbHRhOyB9IAotICAgIHZvaWQgbW92ZShmbG9hdCBkeCwgZmxvYXQgZHkp
IHsgbV9sb2NhdGlvbi5tb3ZlKGR4LCBkeSk7IH0gCisgICAgdm9pZCBtb3ZlQnkoY29uc3QgRmxv
YXRTaXplJiBkZWx0YSkgeyBtX2xvY2F0aW9uICs9IGRlbHRhOyB9IAorICAgIHZvaWQgbW92ZUJ5
KGZsb2F0IGR4LCBmbG9hdCBkeSkgeyBtX2xvY2F0aW9uLm1vdmVCeShkeCwgZHkpOyB9IAogCiAg
ICAgYm9vbCBpbnRlcnNlY3RzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDg3
OTMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIzLDcgKzQyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QKICAgICAgICAgYmlkaVJ1biA9IGJpZGlSdW4tPm5leHQo
KTsKICAgICAgICAgLy8gRklYTUU6IEhhdmUgRm9udDo6ZHJhd1RleHQgcmV0dXJuIHRoZSB3aWR0
aCBvZiB3aGF0IGl0IGRyZXcgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJlLW1lYXN1cmUgaGVy
ZS4KICAgICAgICAgaWYgKGJpZGlSdW4pCi0gICAgICAgICAgICBjdXJyUG9pbnQubW92ZShmb250
LndpZHRoKHN1YnJ1biksIDApOworICAgICAgICAgICAgY3VyclBvaW50Lm1vdmVCeShmb250Lndp
ZHRoKHN1YnJ1biksIDApOwogICAgIH0KIAogICAgIGJpZGlSdW5zLmRlbGV0ZVJ1bnMoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBvaW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAkocmV2aXNp
b24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05MCw5ICs5MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFgo
aW50IHgpIHsgbV94ID0geDsgfQogICAgIHZvaWQgc2V0WShpbnQgeSkgeyBtX3kgPSB5OyB9CiAK
LSAgICB2b2lkIG1vdmUoY29uc3QgSW50U2l6ZSYgcykgeyBtb3ZlKHMud2lkdGgoKSwgcy5oZWln
aHQoKSk7IH0gCi0gICAgdm9pZCBtb3ZlKGNvbnN0IEludFBvaW50JiBvZmZzZXQpIHsgbW92ZShv
ZmZzZXQueCgpLCBvZmZzZXQueSgpKTsgfQotICAgIHZvaWQgbW92ZShpbnQgZHgsIGludCBkeSkg
eyBtX3ggKz0gZHg7IG1feSArPSBkeTsgfQorICAgIHZvaWQgbW92ZUJ5KGNvbnN0IEludFNpemUm
IHMpIHsgbW92ZUJ5KHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7IH0gCisgICAgdm9pZCBtb3ZlQnko
Y29uc3QgSW50UG9pbnQmIG9mZnNldCkgeyBtb3ZlQnkob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSk7
IH0KKyAgICB2b2lkIG1vdmVCeShpbnQgZHgsIGludCBkeSkgeyBtX3ggKz0gZHg7IG1feSArPSBk
eTsgfQogICAgIHZvaWQgc2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQogICAgIHsKICAgICAgICAg
bV94ID0gbHJvdW5kZihzdGF0aWNfY2FzdDxmbG9hdD4obV94ICogc3gpKTsKQEAgLTE3MiwxMyAr
MTcyLDEzIEBAIHByaXZhdGU6CiAKIGlubGluZSBJbnRQb2ludCYgb3BlcmF0b3IrPShJbnRQb2lu
dCYgYSwgY29uc3QgSW50U2l6ZSYgYikKIHsKLSAgICBhLm1vdmUoYi53aWR0aCgpLCBiLmhlaWdo
dCgpKTsKKyAgICBhLm1vdmVCeShiLndpZHRoKCksIGIuaGVpZ2h0KCkpOwogICAgIHJldHVybiBh
OwogfQogCiBpbmxpbmUgSW50UG9pbnQmIG9wZXJhdG9yLT0oSW50UG9pbnQmIGEsIGNvbnN0IElu
dFNpemUmIGIpCiB7Ci0gICAgYS5tb3ZlKC1iLndpZHRoKCksIC1iLmhlaWdodCgpKTsKKyAgICBh
Lm1vdmVCeSgtYi53aWR0aCgpLCAtYi5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGE7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmgJKHJldmlzaW9u
IDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDcsOSArMTA3LDkgQEAgcHVibGljOgogICAgIC8vIGNlbnRlciBw
b2ludC4KICAgICBJbnRQb2ludCBjZW50ZXIoKSBjb25zdCB7IHJldHVybiBJbnRQb2ludCh4KCkg
KyB3aWR0aCgpIC8gMiwgeSgpICsgaGVpZ2h0KCkgLyAyKTsgfQogCi0gICAgdm9pZCBtb3ZlKGNv
bnN0IEludFNpemUmIHNpemUpIHsgbV9sb2NhdGlvbiArPSBzaXplOyB9IAotICAgIHZvaWQgbW92
ZShjb25zdCBJbnRQb2ludCYgb2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZShvZmZzZXQueCgpLCBv
ZmZzZXQueSgpKTsgfQotICAgIHZvaWQgbW92ZShpbnQgZHgsIGludCBkeSkgeyBtX2xvY2F0aW9u
Lm1vdmUoZHgsIGR5KTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBJbnRTaXplJiBzaXplKSB7
IG1fbG9jYXRpb24gKz0gc2l6ZTsgfSAKKyAgICB2b2lkIG1vdmVCeShjb25zdCBJbnRQb2ludCYg
b2Zmc2V0KSB7IG1fbG9jYXRpb24ubW92ZUJ5KG9mZnNldC54KCksIG9mZnNldC55KCkpOyB9Cisg
ICAgdm9pZCBtb3ZlQnkoaW50IGR4LCBpbnQgZHkpIHsgbV9sb2NhdGlvbi5tb3ZlQnkoZHgsIGR5
KTsgfSAKIAogICAgIHZvaWQgZXhwYW5kKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9sb2NhdGlv
biArPSBzaXplOyB9CiAgICAgdm9pZCBleHBhbmQoaW50IGR3LCBpbnQgZGgpIHsgbV9zaXplLmV4
cGFuZChkdywgZGgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
YXRoVHJhdmVyc2FsU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFRyYXZlcnNhbFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjEzLDcgKzIxMyw3IEBAIHZvaWQgUGF0aFRyYXZlcnNhbFN0YXRl
Ojpwcm9jZXNzU2VnbWVudCgKICAgICAgICAgZmxvYXQgc2xvcGUgPSBhdGFuMmYoY2hhbmdlLmhl
aWdodCgpLCBjaGFuZ2Uud2lkdGgoKSk7CiAgICAgICAgIGlmIChtX2FjdGlvbiA9PSBUcmF2ZXJz
YWxQb2ludEF0TGVuZ3RoKSB7CiAgICAgICAgICAgICBmbG9hdCBvZmZzZXQgPSBtX2Rlc2lyZWRM
ZW5ndGggLSBtX3RvdGFsTGVuZ3RoOwotICAgICAgICAgICAgbV9jdXJyZW50Lm1vdmUob2Zmc2V0
ICogY29zZihzbG9wZSksIG9mZnNldCAqIHNpbmYoc2xvcGUpKTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudC5tb3ZlQnkob2Zmc2V0ICogY29zZihzbG9wZSksIG9mZnNldCAqIHNpbmYoc2xvcGUpKTsK
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX25vcm1hbEFuZ2xlID0gcmFkMmRlZyhzbG9w
ZSk7CiAgICAgICAgIG1fc3VjY2VzcyA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Sb3VuZGVkSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRJbnRSZWN0LmgJKHJldmlzaW9uIDg3OTMyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZEludFJlY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpIHsgbV9yZWN0ID0gcmVjdDsgfQogICAgIHZvaWQgc2V0UmFkaWko
Y29uc3QgUmFkaWkmIHJhZGlpKSB7IG1fcmFkaWkgPSByYWRpaTsgfQogCi0gICAgdm9pZCBtb3Zl
KGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9yZWN0Lm1vdmUoc2l6ZSk7IH0KKyAgICB2b2lkIG1v
dmVCeShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fcmVjdC5tb3ZlQnkoc2l6ZSk7IH0KICAgICB2
b2lkIGluZmxhdGUoaW50IHNpemUpIHsgbV9yZWN0LmluZmxhdGUoc2l6ZSk7ICB9CiAgICAgdm9p
ZCBpbmZsYXRlV2l0aFJhZGlpKGludCBzaXplKTsKICAgICB2b2lkIGV4cGFuZFJhZGlpKGludCBz
aXplKSB7IG1fcmFkaWkuZXhwYW5kKHNpemUpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzc1LDExICszNzUsMTEgQEAgSW50UmVjdCBTaGFkb3dCbHVyOjpjYWxjdWxhdGVM
YXllckJvdW5kaQogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBjb250ZXh0
LT5nZXRDVE0oKTsKICAgICBpZiAobV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyAmJiAhdHJhbnNm
b3JtLmlzSWRlbnRpdHkoKSkgewogICAgICAgICBGbG9hdFF1YWQgdHJhbnNmb3JtZWRQb2x5Z29u
ID0gdHJhbnNmb3JtLm1hcFF1YWQoRmxvYXRRdWFkKHNoYWRvd2VkUmVjdCkpOwotICAgICAgICB0
cmFuc2Zvcm1lZFBvbHlnb24ubW92ZShtX29mZnNldCk7CisgICAgICAgIHRyYW5zZm9ybWVkUG9s
eWdvbi5tb3ZlQnkobV9vZmZzZXQpOwogICAgICAgICBsYXllclJlY3QgPSB0cmFuc2Zvcm0uaW52
ZXJzZSgpLm1hcFF1YWQodHJhbnNmb3JtZWRQb2x5Z29uKS5ib3VuZGluZ0JveCgpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGxheWVyUmVjdCA9IHNoYWRvd2VkUmVjdDsKLSAgICAgICAgbGF5ZXJS
ZWN0Lm1vdmUobV9vZmZzZXQpOworICAgICAgICBsYXllclJlY3QubW92ZUJ5KG1fb2Zmc2V0KTsK
ICAgICB9CiAKICAgICAvLyBXZSBleHBhbmQgdGhlIGFyZWEgYnkgdGhlIGJsdXIgcmFkaXVzIHRv
IGdpdmUgZXh0cmEgc3BhY2UgZm9yIHRoZSBibHVyIHRyYW5zaXRpb24uCkBAIC01MzMsNyArNTMz
LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaQogICAgICAgICBy
ZXR1cm47CiAKICAgICBGbG9hdFJlY3QgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QgPSBzaGFk
b3dlZFJlY3Q7Ci0gICAgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QubW92ZShtX2xheWVyQ29u
dGV4dFRyYW5zbGF0aW9uKTsKKyAgICBidWZmZXJSZWxhdGl2ZVNoYWRvd2VkUmVjdC5tb3ZlQnko
bV9sYXllckNvbnRleHRUcmFuc2xhdGlvbik7CiAgICAgaWYgKCFTY3JhdGNoQnVmZmVyOjpzaGFy
ZWQoKS5tYXRjaGVzTGFzdFNoYWRvdyhtX2JsdXJSYWRpdXMsIENvbG9yOjpibGFjaywgQ29sb3JT
cGFjZURldmljZVJHQiwgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QsIHJhZGlpKSkgewogICAg
ICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRl
eHQoKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpzaGFk
b3dDb250ZXh0KTsKQEAgLTU2NywxMCArNTY3LDEwIEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0lu
c2V0U2hhZG93V2l0aG91dFQKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRSZWN0IGJ1ZmZl
clJlbGF0aXZlUmVjdCA9IHJlY3Q7Ci0gICAgYnVmZmVyUmVsYXRpdmVSZWN0Lm1vdmUobV9sYXll
ckNvbnRleHRUcmFuc2xhdGlvbik7CisgICAgYnVmZmVyUmVsYXRpdmVSZWN0Lm1vdmVCeShtX2xh
eWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKIAogICAgIEZsb2F0UmVjdCBidWZmZXJSZWxhdGl2ZUhv
bGVSZWN0ID0gaG9sZVJlY3Q7Ci0gICAgYnVmZmVyUmVsYXRpdmVIb2xlUmVjdC5tb3ZlKG1fbGF5
ZXJDb250ZXh0VHJhbnNsYXRpb24pOworICAgIGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QubW92ZUJ5
KG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwogCiAgICAgaWYgKCFTY3JhdGNoQnVmZmVyOjpz
aGFyZWQoKS5tYXRjaGVzTGFzdEluc2V0U2hhZG93KG1fYmx1clJhZGl1cywgQ29sb3I6OmJsYWNr
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZmZXJSZWxhdGl2ZVJlY3QsIGJ1ZmZlclJlbGF0aXZl
SG9sZVJlY3QsIGhvbGVSYWRpaSkpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dD
b250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7CkBAIC02NjksMTAgKzY2OSwxMCBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpCiAgICAgfQogCiAgICAgRmxv
YXRSZWN0IGJvdW5kaW5nUmVjdCA9IHJlY3Q7Ci0gICAgYm91bmRpbmdSZWN0Lm1vdmUobV9vZmZz
ZXQpOworICAgIGJvdW5kaW5nUmVjdC5tb3ZlQnkobV9vZmZzZXQpOwogCiAgICAgRmxvYXRSZWN0
IGRlc3RIb2xlUmVjdCA9IGhvbGVSZWN0OwotICAgIGRlc3RIb2xlUmVjdC5tb3ZlKG1fb2Zmc2V0
KTsKKyAgICBkZXN0SG9sZVJlY3QubW92ZUJ5KG1fb2Zmc2V0KTsKICAgICBGbG9hdFJlY3QgZGVz
dEhvbGVCb3VuZHMgPSBkZXN0SG9sZVJlY3Q7CiAgICAgZGVzdEhvbGVCb3VuZHMuaW5mbGF0ZVgo
ZWRnZVNpemUud2lkdGgoKSk7CiAgICAgZGVzdEhvbGVCb3VuZHMuaW5mbGF0ZVkoZWRnZVNpemUu
aGVpZ2h0KCkpOwpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RT
aGFkb3dXaXRoVGlsaW4KICAgICB9CiAKICAgICBGbG9hdFJlY3Qgc2hhZG93Qm91bmRzID0gc2hh
ZG93ZWRSZWN0OwotICAgIHNoYWRvd0JvdW5kcy5tb3ZlKG1fb2Zmc2V0LndpZHRoKCksIG1fb2Zm
c2V0LmhlaWdodCgpKTsKKyAgICBzaGFkb3dCb3VuZHMubW92ZUJ5KG1fb2Zmc2V0LndpZHRoKCks
IG1fb2Zmc2V0LmhlaWdodCgpKTsKICAgICBzaGFkb3dCb3VuZHMuaW5mbGF0ZVgoZWRnZVNpemUu
d2lkdGgoKSk7CiAgICAgc2hhZG93Qm91bmRzLmluZmxhdGVZKGVkZ2VTaXplLmhlaWdodCgpKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwMiwyMyArMjAyLDIzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZShjb25zdCBJbnQKICAgICAvLyB1cyBhIHBlcmZlY3QgcG9zaXRpb24sIGJ1dCBhbiBvZGQgd2lk
dGggZ2F2ZSB1cyBhIHBvc2l0aW9uIHRoYXQgaXMgb2ZmIGJ5IGV4YWN0bHkgMC41LgogICAgIGlm
IChzdHJva2VTdHlsZSgpID09IERvdHRlZFN0cm9rZSB8fCBzdHJva2VTdHlsZSgpID09IERhc2hl
ZFN0cm9rZSkgewogICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgICAgIHAx
Lm1vdmUoMCwgd2lkdGgpOwotICAgICAgICAgICAgcDIubW92ZSgwLCAtd2lkdGgpOworICAgICAg
ICAgICAgcDEubW92ZUJ5KDAsIHdpZHRoKTsKKyAgICAgICAgICAgIHAyLm1vdmVCeSgwLCAtd2lk
dGgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcDEubW92ZSh3aWR0aCwgMCk7Ci0g
ICAgICAgICAgICBwMi5tb3ZlKC13aWR0aCwgMCk7CisgICAgICAgICAgICBwMS5tb3ZlQnkod2lk
dGgsIDApOworICAgICAgICAgICAgcDIubW92ZUJ5KC13aWR0aCwgMCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCiAgICAgaWYgKCgoaW50KXdpZHRoKSAlIDIpIHsKICAgICAgICAgaWYgKGlzVmVy
dGljYWxMaW5lKSB7CiAgICAgICAgICAgICAvLyBXZSdyZSBhIHZlcnRpY2FsIGxpbmUuICBBZGp1
c3Qgb3VyIHguCi0gICAgICAgICAgICBwMS5tb3ZlKDAuNWYsIDAuMGYpOwotICAgICAgICAgICAg
cDIubW92ZSgwLjVmLCAwLjBmKTsKKyAgICAgICAgICAgIHAxLm1vdmVCeSgwLjVmLCAwLjBmKTsK
KyAgICAgICAgICAgIHAyLm1vdmVCeSgwLjVmLCAwLjBmKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIC8vIFdlJ3JlIGEgaG9yaXpvbnRhbCBsaW5lLiBBZGp1c3Qgb3VyIHkuCi0gICAg
ICAgICAgICBwMS5tb3ZlKDAuMGYsIDAuNWYpOwotICAgICAgICAgICAgcDIubW92ZSgwLjBmLCAw
LjVmKTsKKyAgICAgICAgICAgIHAxLm1vdmVCeSgwLjBmLCAwLjVmKTsKKyAgICAgICAgICAgIHAy
Lm1vdmVCeSgwLjBmLCAwLjVmKTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lv
biA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsOCArMjIyLDggQEAgdm9pZCBCaXRtYXBJbWFnZTo6
ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICAgICAgZmxvYXQgbGVmdFBhZGRpbmcgPSBz
cmNSZWN0LngoKSAtIGZsb29yZihzcmNSZWN0LngoKSk7CiAgICAgICAgICAgICBmbG9hdCB0b3BQ
YWRkaW5nID0gc3JjUmVjdC55KCkgLSBmbG9vcmYoc3JjUmVjdC55KCkpOwogCi0gICAgICAgICAg
ICBzdWJpbWFnZVJlY3QubW92ZSgtbGVmdFBhZGRpbmcsIC10b3BQYWRkaW5nKTsKLSAgICAgICAg
ICAgIGFkanVzdGVkRGVzdFJlY3QubW92ZSgtbGVmdFBhZGRpbmcgLyB4U2NhbGUsIC10b3BQYWRk
aW5nIC8geVNjYWxlKTsKKyAgICAgICAgICAgIHN1YmltYWdlUmVjdC5tb3ZlQnkoLWxlZnRQYWRk
aW5nLCAtdG9wUGFkZGluZyk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0Lm1vdmVCeSgt
bGVmdFBhZGRpbmcgLyB4U2NhbGUsIC10b3BQYWRkaW5nIC8geVNjYWxlKTsKIAogICAgICAgICAg
ICAgc3ViaW1hZ2VSZWN0LnNldFdpZHRoKGNlaWxmKHN1YmltYWdlUmVjdC53aWR0aCgpICsgbGVm
dFBhZGRpbmcpKTsKICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0V2lkdGgoc3ViaW1h
Z2VSZWN0LndpZHRoKCkgLyB4U2NhbGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAkocmV2aXNp
b24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBGRURy
b3BTaGFkb3c6OmRldGVybWluZUFic29sdXRlUGFpbgogCiAgICAgRmxvYXRSZWN0IGFic29sdXRl
UGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgRmxv
YXRSZWN0IGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KGFic29sdXRlUGFpbnRSZWN0KTsKLSAgICBh
YnNvbHV0ZU9mZnNldFBhaW50UmVjdC5tb3ZlKGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2NhbGUo
bV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fZHkpKTsKKyAgICBhYnNvbHV0ZU9m
ZnNldFBhaW50UmVjdC5tb3ZlQnkoZmlsdGVyLT5hcHBseUhvcml6b250YWxTY2FsZShtX2R4KSwg
ZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9keSkpOwogICAgIGFic29sdXRlUGFpbnRSZWN0
LnVuaXRlKGFic29sdXRlT2Zmc2V0UGFpbnRSZWN0KTsKICAgICBhYnNvbHV0ZVBhaW50UmVjdC5p
bnRlcnNlY3QobWF4RWZmZWN0UmVjdCgpKTsKICAgICAKQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBG
RURyb3BTaGFkb3c6OmFwcGx5KCkKIAogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgRmxv
YXRSZWN0IGRyYXdpbmdSZWdpb25XaXRoT2Zmc2V0KGRyYXdpbmdSZWdpb24pOwotICAgIGRyYXdp
bmdSZWdpb25XaXRoT2Zmc2V0Lm1vdmUob2Zmc2V0KTsKKyAgICBkcmF3aW5nUmVnaW9uV2l0aE9m
ZnNldC5tb3ZlQnkob2Zmc2V0KTsKIAogICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGlu
LT5hc0ltYWdlQnVmZmVyKCk7CiAgICAgQVNTRVJUKHNvdXJjZUltYWdlKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQu
Y3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZv
aWQgRkVPZmZzZXQ6OmRldGVybWluZUFic29sdXRlUGFpbnRSZWMKIHsKICAgICBGbG9hdFJlY3Qg
cGFpbnRSZWN0ID0gaW5wdXRFZmZlY3QoMCktPmFic29sdXRlUGFpbnRSZWN0KCk7CiAgICAgRmls
dGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBwYWludFJlY3QubW92ZShmaWx0ZXIt
PmFwcGx5SG9yaXpvbnRhbFNjYWxlKG1fZHgpLCBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZSht
X2R5KSk7CisgICAgcGFpbnRSZWN0Lm1vdmVCeShmaWx0ZXItPmFwcGx5SG9yaXpvbnRhbFNjYWxl
KG1fZHgpLCBmaWx0ZXItPmFwcGx5VmVydGljYWxTY2FsZShtX2R5KSk7CiAgICAgcGFpbnRSZWN0
LmludGVyc2VjdChtYXhFZmZlY3RSZWN0KCkpOwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVu
Y2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgRkVP
ZmZzZXQ6OmFwcGx5KCkKIAogICAgIEZsb2F0UmVjdCBkcmF3aW5nUmVnaW9uID0gZHJhd2luZ1Jl
Z2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CiAgICAgRmlsdGVyKiBm
aWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKLSAgICBkcmF3aW5nUmVnaW9uLm1vdmUoZmlsdGVyLT5h
cHBseUhvcml6b250YWxTY2FsZShtX2R4KSwgZmlsdGVyLT5hcHBseVZlcnRpY2FsU2NhbGUobV9k
eSkpOworICAgIGRyYXdpbmdSZWdpb24ubW92ZUJ5KGZpbHRlci0+YXBwbHlIb3Jpem9udGFsU2Nh
bGUobV9keCksIGZpbHRlci0+YXBwbHlWZXJ0aWNhbFNjYWxlKG1fZHkpKTsKICAgICByZXN1bHRJ
bWFnZS0+Y29udGV4dCgpLT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZmZXIoKSwgQ29s
b3JTcGFjZURldmljZVJHQiwgZHJhd2luZ1JlZ2lvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3
IEBAIEludFJlY3QgRmlsdGVyRWZmZWN0OjpyZXF1ZXN0ZWRSZWdpb25PZkkKIHsKICAgICBBU1NF
UlQoaGFzUmVzdWx0KCkpOwogICAgIEludFBvaW50IGxvY2F0aW9uID0gbV9hYnNvbHV0ZVBhaW50
UmVjdC5sb2NhdGlvbigpOwotICAgIGxvY2F0aW9uLm1vdmUoLWVmZmVjdFJlY3QubG9jYXRpb24o
KSk7CisgICAgbG9jYXRpb24ubW92ZUJ5KC1lZmZlY3RSZWN0LmxvY2F0aW9uKCkpOwogICAgIHJl
dHVybiBJbnRSZWN0KGxvY2F0aW9uLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGls
aW5nRGF0YS5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1RpbGluZ0RhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5
LDcgQEAgdm9pZCBUaWxpbmdEYXRhOjppbnRlcnNlY3REcmF3UXVhZChjb25zdAogICAgIGZsb2F0
IHNyY1JlY3RJbnRlcnNlY3RlZE5vcm1IID0gc3JjUmVjdEludGVyc2VjdGVkLmhlaWdodCgpIC8g
c3JjUmVjdC5oZWlnaHQoKTsKIAogICAgICpuZXdTcmMgPSBzcmNSZWN0SW50ZXJzZWN0ZWQ7Ci0g
ICAgbmV3U3JjLT5tb3ZlKAorICAgIG5ld1NyYy0+bW92ZUJ5KAogICAgICAgICAtdGlsZUJvdW5k
cy54KCkgKyAoKHRpbGVYSW5kZXgodGlsZSkgPiAwKSA/IG1fYm9yZGVyVGV4ZWxzIDogMCksCiAg
ICAgICAgIC10aWxlQm91bmRzLnkoKSArICgodGlsZVlJbmRleCh0aWxlKSA+IDApID8gbV9ib3Jk
ZXJUZXhlbHMgOiAwKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTMsNyArNTEzLDcgQEAg
dm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAgbV9h
ZGp1c3RlZEdseXBocy5hcHBlbmQoZ2x5cGgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBG
bG9hdFJlY3QgZ2x5cGhCb3VuZHMgPSBmb250RGF0YS0+Ym91bmRzRm9yR2x5cGgoZ2x5cGgpOwot
ICAgICAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShnbHlwaE9yaWdpbi54LCBnbHlwaE9yaWdpbi55
KTsKKyAgICAgICAgICAgIGdseXBoQm91bmRzLm1vdmVCeShnbHlwaE9yaWdpbi54LCBnbHlwaE9y
aWdpbi55KTsKICAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFggPSBtaW4obV9taW5H
bHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMueCgpKTsKICAgICAgICAgICAgIG1fbWF4R2x5
cGhCb3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMu
bWF4WCgpKTsKICAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFkgPSBtaW4obV9taW5H
bHlwaEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMueSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9NZWRpYVBsYXllclByaXZhdGVRVEtpdC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvTWVkaWFQbGF5ZXJQ
cml2YXRlUVRLaXQubW0JKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL01lZGlhUGxheWVyUHJpdmF0ZVFUS2l0Lm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzc2LDcgKzEzNzYsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZVFUS2l0OjpwYWlu
dChHcmFwCiAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhlIFFUTW92
aWVWaWV3IGluIGFueSBzcGVjaWZpYyBsb2NhdGlvbiBzbyBsZXQncyBqdXN0IGdldCBpdCBvdXQg
b2YgdGhlIHdheQogICAgICAgICAgICAgICAgIC8vIHdoZXJlIGl0IHdvbid0IGludGVyY2VwdCBl
dmVudHMgb3IgdHJ5IHRvIGJyaW5nIHVwIHRoZSBjb250ZXh0IG1lbnUuCiAgICAgICAgICAgICAg
ICAgSW50UmVjdCBmYXJBd2F5QnV0Q29ycmVjdFNpemUobV9yZWN0KTsKLSAgICAgICAgICAgICAg
ICBmYXJBd2F5QnV0Q29ycmVjdFNpemUubW92ZSgtMTAwMDAwMCwgLTEwMDAwMDApOworICAgICAg
ICAgICAgICAgIGZhckF3YXlCdXRDb3JyZWN0U2l6ZS5tb3ZlQnkoLTEwMDAwMDAsIC0xMDAwMDAw
KTsKICAgICAgICAgICAgICAgICBbdmlldyBzZXRGcmFtZTpmYXJBd2F5QnV0Q29ycmVjdFNpemVd
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90cmFuc2Zvcm1zL0FmZmluZVRyYW5zZm9ybS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BZmZpbmVUcmFuc2Zv
cm0uY3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvQWZmaW5lVHJhbnNmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEw
LDcgKzMxMCw3IEBAIEZsb2F0UmVjdCBBZmZpbmVUcmFuc2Zvcm06Om1hcFJlY3QoY29uc3QKIHsK
ICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewogICAgICAgICBGbG9hdFJlY3Qg
bWFwcGVkUmVjdChyZWN0KTsKLSAgICAgICAgbWFwcGVkUmVjdC5tb3ZlKG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQobV90cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdHJhbnNm
b3JtWzVdKSk7CisgICAgICAgIG1hcHBlZFJlY3QubW92ZUJ5KG5hcnJvd1ByZWNpc2lvblRvRmxv
YXQobV90cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdHJhbnNmb3JtWzVd
KSk7CiAgICAgICAgIHJldHVybiBtYXBwZWRSZWN0OwogICAgIH0KIApAQCAtMzI2LDcgKzMyNiw3
IEBAIEZsb2F0UXVhZCBBZmZpbmVUcmFuc2Zvcm06Om1hcFF1YWQoY29uc3QKIHsKICAgICBpZiAo
aXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewogICAgICAgICBGbG9hdFF1YWQgbWFwcGVkUXVh
ZChxKTsKLSAgICAgICAgbWFwcGVkUXVhZC5tb3ZlKG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV90
cmFuc2Zvcm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdHJhbnNmb3JtWzVdKSk7Cisg
ICAgICAgIG1hcHBlZFF1YWQubW92ZUJ5KG5hcnJvd1ByZWNpc2lvblRvRmxvYXQobV90cmFuc2Zv
cm1bNF0pLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KG1fdHJhbnNmb3JtWzVdKSk7CiAgICAgICAg
IHJldHVybiBtYXBwZWRRdWFkOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zv
cm1hdGlvbk1hdHJpeC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwMCw3ICs2MDAsNyBAQCBGbG9hdFJlY3QgVHJhbnNmb3JtYXRpb25NYXRy
aXg6Om1hcFJlY3QoCiB7CiAgICAgaWYgKGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpIHsKICAg
ICAgICAgRmxvYXRSZWN0IG1hcHBlZFJlY3Qocik7Ci0gICAgICAgIG1hcHBlZFJlY3QubW92ZShz
dGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9t
YXRyaXhbM11bMV0pKTsKKyAgICAgICAgbWFwcGVkUmVjdC5tb3ZlQnkoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fbWF0cml4WzNdWzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fbWF0cml4WzNdWzFdKSk7
CiAgICAgICAgIHJldHVybiBtYXBwZWRSZWN0OwogICAgIH0KIApAQCAtNjEyLDcgKzYxMiw3IEBA
IEZsb2F0UXVhZCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUXVhZCgKIHsKICAgICBpZiAoaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewogICAgICAgICBGbG9hdFF1YWQgbWFwcGVkUXVhZChx
KTsKLSAgICAgICAgbWFwcGVkUXVhZC5tb3ZlKHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFsz
XVswXSksIHN0YXRpY19jYXN0PGZsb2F0PihtX21hdHJpeFszXVsxXSkpOworICAgICAgICBtYXBw
ZWRRdWFkLm1vdmVCeShzdGF0aWNfY2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMF0pLCBzdGF0aWNf
Y2FzdDxmbG9hdD4obV9tYXRyaXhbM11bMV0pKTsKICAgICAgICAgcmV0dXJuIG1hcHBlZFF1YWQ7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0J
KHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgV2lkZ2V0OjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIHAsIGMKICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNv
bnRleHQsIC10cmFuc2Zvcm1PcmlnaW4ueCgpLCAtdHJhbnNmb3JtT3JpZ2luLnkoKSk7CiAKICAg
ICAgICAgSW50UmVjdCBkaXJ0eVJlY3QgPSByOwotICAgICAgICBkaXJ0eVJlY3QubW92ZSgtdHJh
bnNmb3JtT3JpZ2luKTsKKyAgICAgICAgZGlydHlSZWN0Lm1vdmVCeSgtdHJhbnNmb3JtT3JpZ2lu
KTsKICAgICAgICAgaWYgKCFbdmlldyBpc0ZsaXBwZWRdKQogICAgICAgICAgICAgZGlydHlSZWN0
LnNldFkoW3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodCAtIGRpcnR5UmVjdC5tYXhZKCkpOwogCkBA
IC0yOTIsNyArMjkyLDcgQEAgdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwg
YwogICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEsIC0xKTsKIAogICAgICAg
ICBJbnRSZWN0IGRpcnR5UmVjdCA9IHI7Ci0gICAgICAgIGRpcnR5UmVjdC5tb3ZlKC10cmFuc2Zv
cm1PcmlnaW4pOworICAgICAgICBkaXJ0eVJlY3QubW92ZUJ5KC10cmFuc2Zvcm1PcmlnaW4pOwog
ICAgICAgICBpZiAoIVt2aWV3IGlzRmxpcHBlZF0pCiAgICAgICAgICAgICBkaXJ0eVJlY3Quc2V0
WShbdmlldyBib3VuZHNdLnNpemUuaGVpZ2h0IC0gZGlydHlSZWN0Lm1heFkoKSk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24gODc5MzIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnQKICAgICBpZiAobV9tYXJrdXBCb3gpIHsKICAgICAgICAgLy8gUGFpbnQgdGhlIG1hcmt1
cCBib3gKICAgICAgICAgSW50UG9pbnQgYWRqdXN0ZWRQYWludE9mZnNldCA9IHBhaW50T2Zmc2V0
OwotICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0Lm1vdmUobV94ICsgbV9sb2dpY2FsV2lkdGgg
LSBtX21hcmt1cEJveC0+eCgpLAorICAgICAgICBhZGp1c3RlZFBhaW50T2Zmc2V0Lm1vdmVCeSht
X3ggKyBtX2xvZ2ljYWxXaWR0aCAtIG1fbWFya3VwQm94LT54KCksCiAgICAgICAgICAgICBtX3kg
KyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIChtX21hcmt1cEJveC0+eSgpICsgbV9t
YXJrdXBCb3gtPnJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udE1ldHJpY3MoKS5h
c2NlbnQoKSkpOwogICAgICAgICBtX21hcmt1cEJveC0+cGFpbnQocGFpbnRJbmZvLCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0LCBsaW5lVG9wLCBsaW5lQm90dG9tKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA4NzkzMikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODExLDcgKzgxMSw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFJlcGxh
Y2VkQ2gKICAgICAvLyBmb3Igd3JpdGluZy1tb2RlIGRpZmZlcmVuY2VzLgogICAgIGlmICghYm94
LT5oYXNTZWxmUGFpbnRpbmdMYXllcigpKSB7CiAgICAgICAgIEludFJlY3QgY2hpbGRMb2dpY2Fs
VmlzdWFsT3ZlcmZsb3cgPSBib3gtPmxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdh
dGlvbihyZW5kZXJlcigpLT5zdHlsZSgpKTsKLSAgICAgICAgY2hpbGRMb2dpY2FsVmlzdWFsT3Zl
cmZsb3cubW92ZShpbmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCksIGlubGluZUJveC0+bG9naWNhbFRv
cCgpKTsKKyAgICAgICAgY2hpbGRMb2dpY2FsVmlzdWFsT3ZlcmZsb3cubW92ZUJ5KGlubGluZUJv
eC0+bG9naWNhbExlZnQoKSwgaW5saW5lQm94LT5sb2dpY2FsVG9wKCkpOwogICAgICAgICBsb2dp
Y2FsVmlzdWFsT3ZlcmZsb3cudW5pdGUoY2hpbGRMb2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwogICAg
IH0KIApAQCAtODE5LDcgKzgxOSw3IEBAIGlubGluZSB2b2lkIElubGluZUZsb3dCb3g6OmFkZFJl
cGxhY2VkQ2gKICAgICAvLyBPdGhlcndpc2UgdGhlIGNoaWxkIGJvcmRlciBib3ggcHJvcGFnYXRl
cyBhcyBsYXlvdXQgb3ZlcmZsb3cuICBUaGlzIHJlY3RhbmdsZSBtdXN0IGluY2x1ZGUgdHJhbnNm
b3JtcyBhbmQgcmVsYXRpdmUgcG9zaXRpb25pbmcKICAgICAvLyBhbmQgYmUgYWRqdXN0ZWQgZm9y
IHdyaXRpbmctbW9kZSBkaWZmZXJlbmNlcy4KICAgICBJbnRSZWN0IGNoaWxkTG9naWNhbExheW91
dE92ZXJmbG93ID0gYm94LT5sb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24o
cmVuZGVyZXIoKS0+c3R5bGUoKSk7Ci0gICAgY2hpbGRMb2dpY2FsTGF5b3V0T3ZlcmZsb3cubW92
ZShpbmxpbmVCb3gtPmxvZ2ljYWxMZWZ0KCksIGlubGluZUJveC0+bG9naWNhbFRvcCgpKTsKKyAg
ICBjaGlsZExvZ2ljYWxMYXlvdXRPdmVyZmxvdy5tb3ZlQnkoaW5saW5lQm94LT5sb2dpY2FsTGVm
dCgpLCBpbmxpbmVCb3gtPmxvZ2ljYWxUb3AoKSk7CiAgICAgbG9naWNhbExheW91dE92ZXJmbG93
LnVuaXRlKGNoaWxkTG9naWNhbExheW91dE92ZXJmbG93KTsKIH0KIApAQCAtODU2LDcgKzg1Niw3
IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJmbG93KGludCAKICAgICAgICAgICAg
IGlmICghZmxvdy0+Ym94TW9kZWxPYmplY3QoKS0+aGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKICAg
ICAgICAgICAgICAgICBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cudW5pdGUoZmxvdy0+bG9naWNhbFZp
c3VhbE92ZXJmbG93UmVjdChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CiAgICAgICAgICAgICBJbnRS
ZWN0IGNoaWxkTGF5b3V0T3ZlcmZsb3cgPSBmbG93LT5sb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0
KGxpbmVUb3AsIGxpbmVCb3R0b20pOwotICAgICAgICAgICAgY2hpbGRMYXlvdXRPdmVyZmxvdy5t
b3ZlKGZsb3ctPmJveE1vZGVsT2JqZWN0KCktPnJlbGF0aXZlUG9zaXRpb25Mb2dpY2FsT2Zmc2V0
KCkpOworICAgICAgICAgICAgY2hpbGRMYXlvdXRPdmVyZmxvdy5tb3ZlQnkoZmxvdy0+Ym94TW9k
ZWxPYmplY3QoKS0+cmVsYXRpdmVQb3NpdGlvbkxvZ2ljYWxPZmZzZXQoKSk7CiAgICAgICAgICAg
ICBsb2dpY2FsTGF5b3V0T3ZlcmZsb3cudW5pdGUoY2hpbGRMYXlvdXRPdmVyZmxvdyk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgYWRkUmVwbGFjZWRDaGlsZE92ZXJmbG93KGN1cnIsIGxv
Z2ljYWxMYXlvdXRPdmVyZmxvdywgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsKQEAgLTkwMiw3ICs5
MDIsNyBAQCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiB7CiAgICAg
SW50UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0
b20pKTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICBvdmVyZmxv
d1JlY3QubW92ZSh0eCwgdHkpOworICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkodHgsIHR5KTsKICAg
ICBpZiAoIW92ZXJmbG93UmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJ
bkNvbnRhaW5lcikpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTkzNSw3ICs5MzUsNyBA
QCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAgICAgLy8gTW92ZSB4
L3kgdG8gb3VyIGNvb3JkaW5hdGVzLgogICAgIEludFJlY3QgcmVjdChtaW5YLCBtaW5ZLCB3aWR0
aCwgaGVpZ2h0KTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUocmVjdCk7Ci0gICAgcmVjdC5tb3Zl
KHR4LCB0eSk7CisgICAgcmVjdC5tb3ZlQnkodHgsIHR5KTsKIAogICAgIGlmICh2aXNpYmxlVG9I
aXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJ
bkNvbnRhaW5lcikpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRhaW5lciAtIEludFNpemUodHgs
IHR5KSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBp
biB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgpAQCAtOTUxLDcgKzk1MSw3IEBAIHZvaWQg
SW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICBJbnRSZWN0IG92ZXJmbG93
UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwgbGluZUJvdHRvbSkpOwogICAgIG92ZXJm
bG93UmVjdC5pbmZsYXRlKHJlbmRlcmVyKCktPm1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8u
cGhhc2UpKTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKLSAgICBvdmVy
Zmxvd1JlY3QubW92ZShwYWludE9mZnNldCk7CisgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShwYWlu
dE9mZnNldCk7CiAgICAgCiAgICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRlcnNlY3RzKG92ZXJm
bG93UmVjdCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyArMzQ4
LDcgQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdFBvaW50IGJveE9yaWdpbiA9IGxvY2F0aW9uSW5jbHVk
aW5nRmxpcHBpbmcoKTsKLSAgICBib3hPcmlnaW4ubW92ZSh0eCwgdHkpOworICAgIGJveE9yaWdp
bi5tb3ZlQnkodHgsIHR5KTsKICAgICBGbG9hdFJlY3QgcmVjdChib3hPcmlnaW4sIEludFNpemUo
d2lkdGgoKSwgaGVpZ2h0KCkpKTsKICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNGdWxsVHJ1bmNh
dGlvbiAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgcmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5y
ZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVw
ZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUocG9pbnRJbkNvbnRh
aW5lciAtIEludFNpemUodHgsIHR5KSkpOwpAQCAtMzczLDcgKzM3Myw3IEBAIEZsb2F0U2l6ZSBJ
bmxpbmVUZXh0Qm94OjphcHBseVNoYWRvd1RvR3IKICAgICBpZiAoc2hhZG93LT5uZXh0KCkgfHwg
c3Ryb2tlZCB8fCAhb3BhcXVlKSB7CiAgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KHRleHRS
ZWN0KTsKICAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHNoYWRvd0JsdXIpOwotICAgICAgICBz
aGFkb3dSZWN0Lm1vdmUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgc2hhZG93UmVjdC5tb3ZlQnko
c2hhZG93T2Zmc2V0KTsKICAgICAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgICAgICBjb250ZXh0
LT5jbGlwKHNoYWRvd1JlY3QpOwogCkBAIC01MDYsNyArNTA2LDcgQEAgdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAgICAgICAgaW50IHdpZHRoT2ZIaWRkZW5U
ZXh0ID0gbV9sb2dpY2FsV2lkdGggLSB3aWR0aE9mVmlzaWJsZVRleHQ7CiAgICAgICAgICAgICAv
LyBGSVhNRTogVGhlIGhpdCB0ZXN0aW5nIGxvZ2ljIGFsc28gbmVlZHMgdG8gdGFrZSB0aGlzIHRy
YW5zbGF0aW9uIGludCBhY2NvdW50LgogICAgICAgICAgICAgSW50U2l6ZSB0cnVuY2F0aW9uT2Zm
c2V0KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHdpZHRoT2ZIaWRkZW5UZXh0IDogLXdpZHRo
T2ZIaWRkZW5UZXh0LCAwKTsKLSAgICAgICAgICAgIGFkanVzdGVkUGFpbnRPZmZzZXQubW92ZShp
c0hvcml6b250YWwoKSA/IHRydW5jYXRpb25PZmZzZXQgOiB0cnVuY2F0aW9uT2Zmc2V0LnRyYW5z
cG9zZWRTaXplKCkpOworICAgICAgICAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5tb3ZlQnkoaXNI
b3Jpem9udGFsKCkgPyB0cnVuY2F0aW9uT2Zmc2V0IDogdHJ1bmNhdGlvbk9mZnNldC50cmFuc3Bv
c2VkU2l6ZSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTE0LDEwICs1MTQsMTAgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogCiAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSByZW5kZXJlcigpLT5zdHlsZShtX2ZpcnN0TGluZSk7CiAgICAgCi0gICAg
YWRqdXN0ZWRQYWludE9mZnNldC5tb3ZlKDAsIHN0eWxlVG9Vc2UtPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyAwIDogLWxvZ2ljYWxIZWlnaHQoKSk7CisgICAgYWRqdXN0ZWRQYWludE9mZnNl
dC5tb3ZlQnkoMCwgc3R5bGVUb1VzZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IDAgOiAt
bG9naWNhbEhlaWdodCgpKTsKIAogICAgIEZsb2F0UG9pbnQgYm94T3JpZ2luID0gbG9jYXRpb25J
bmNsdWRpbmdGbGlwcGluZygpOwotICAgIGJveE9yaWdpbi5tb3ZlKGFkanVzdGVkUGFpbnRPZmZz
ZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSk7CisgICAgYm94T3JpZ2luLm1vdmVCeShh
ZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpOwogICAgIEZs
b2F0UmVjdCBib3hSZWN0KGJveE9yaWdpbiwgSW50U2l6ZShsb2dpY2FsV2lkdGgoKSwgbG9naWNh
bEhlaWdodCgpKSk7CiAKICAgICBSZW5kZXJDb21iaW5lVGV4dCogY29tYmluZWRUZXh0ID0gc3R5
bGVUb1VzZS0+aGFzVGV4dENvbWJpbmUoKSAmJiB0ZXh0UmVuZGVyZXIoKS0+aXNDb21iaW5lVGV4
dCgpICYmIHRvUmVuZGVyQ29tYmluZVRleHQodGV4dFJlbmRlcmVyKCkpLT5pc0NvbWJpbmVkKCkg
PyB0b1JlbmRlckNvbWJpbmVUZXh0KHRleHRSZW5kZXJlcigpKSA6IDA7CkBAIC04NzksNyArODc5
LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcAogICAgIGlmICht
X3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewogICAgICAgICB3aWR0aCA9IHRvUmVuZGVy
VGV4dChyZW5kZXJlcigpKS0+d2lkdGgobV9zdGFydCwgbV90cnVuY2F0aW9uLCB0ZXh0UG9zKCks
IG1fZmlyc3RMaW5lKTsKICAgICAgICAgaWYgKCFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0g
ICAgICAgICAgICBsb2NhbE9yaWdpbi5tb3ZlKG1fbG9naWNhbFdpZHRoIC0gd2lkdGgsIDApOwor
ICAgICAgICAgICAgbG9jYWxPcmlnaW4ubW92ZUJ5KG1fbG9naWNhbFdpZHRoIC0gd2lkdGgsIDAp
OwogICAgIH0KICAgICAKICAgICAvLyBHZXQgdGhlIHRleHQgZGVjb3JhdGlvbiBjb2xvcnMuCkBA
IC05MDQsMTQgKzkwNCwxNCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihH
cmFwCiAgICAgICAgICAgICBzaGFkb3dSZWN0LmluZmxhdGUocy0+Ymx1cigpKTsKICAgICAgICAg
ICAgIGludCBzaGFkb3dYID0gaXNIb3Jpem9udGFsKCkgPyBzLT54KCkgOiBzLT55KCk7CiAgICAg
ICAgICAgICBpbnQgc2hhZG93WSA9IGlzSG9yaXpvbnRhbCgpID8gcy0+eSgpIDogLXMtPngoKTsK
LSAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzaGFkb3dYLCBzaGFkb3dZKTsKKyAgICAgICAg
ICAgIHNoYWRvd1JlY3QubW92ZUJ5KHNoYWRvd1gsIHNoYWRvd1kpOwogICAgICAgICAgICAgY2xp
cFJlY3QudW5pdGUoc2hhZG93UmVjdCk7CiAgICAgICAgICAgICBleHRyYU9mZnNldCA9IG1heChl
eHRyYU9mZnNldCwgbWF4KDAsIHNoYWRvd1kpICsgcy0+Ymx1cigpKTsKICAgICAgICAgfQogICAg
ICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIGNvbnRleHQtPmNsaXAoY2xpcFJlY3QpOwog
ICAgICAgICBleHRyYU9mZnNldCArPSBiYXNlbGluZSArIDI7Ci0gICAgICAgIGxvY2FsT3JpZ2lu
Lm1vdmUoMCwgZXh0cmFPZmZzZXQpOworICAgICAgICBsb2NhbE9yaWdpbi5tb3ZlQnkoMCwgZXh0
cmFPZmZzZXQpOwogICAgICAgICBzZXRDbGlwID0gdHJ1ZTsKICAgICB9CiAKQEAgLTkyMiw3ICs5
MjIsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAgICAgICAg
IGlmIChzaGFkb3cpIHsKICAgICAgICAgICAgIGlmICghc2hhZG93LT5uZXh0KCkpIHsKICAgICAg
ICAgICAgICAgICAvLyBUaGUgbGFzdCBzZXQgb2YgbGluZXMgcGFpbnRzIG5vcm1hbGx5IGluc2lk
ZSB0aGUgY2xpcC4KLSAgICAgICAgICAgICAgICBsb2NhbE9yaWdpbi5tb3ZlKDAsIC1leHRyYU9m
ZnNldCk7CisgICAgICAgICAgICAgICAgbG9jYWxPcmlnaW4ubW92ZUJ5KDAsIC1leHRyYU9mZnNl
dCk7CiAgICAgICAgICAgICAgICAgZXh0cmFPZmZzZXQgPSAwOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaW50IHNoYWRvd1ggPSBpc0hvcml6b250YWwoKSA/IHNoYWRvdy0+eCgpIDogc2hh
ZG93LT55KCk7CkBAIC0xMDEzLDcgKzEwMTMsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50
U3BlbGxpbmdPckdyYW1tCiAgICAgICAgIC8vIFN0b3JlIHJlbmRlcmVkIHJlY3RzIGZvciBiYWQg
Z3JhbW1hciBtYXJrZXJzLCBzbyB3ZSBjYW4gaGl0LXRlc3QgYWdhaW5zdCBpdCBlbHNld2hlcmUg
aW4gb3JkZXIgdG8KICAgICAgICAgLy8gZGlzcGxheSBhIHRvb2xUaXAuIFdlIGRvbid0IGRvIHRo
aXMgZm9yIG1pc3NwZWxsaW5nIG1hcmtlcnMuCiAgICAgICAgIGlmIChncmFtbWFyKSB7Ci0gICAg
ICAgICAgICBtYXJrZXJSZWN0Lm1vdmUoLWJveE9yaWdpbi54KCksIC1ib3hPcmlnaW4ueSgpKTsK
KyAgICAgICAgICAgIG1hcmtlclJlY3QubW92ZUJ5KC1ib3hPcmlnaW4ueCgpLCAtYm94T3JpZ2lu
LnkoKSk7CiAgICAgICAgICAgICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiAg
ICAgICAgICAgICB0b1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIobWFya2VyKS0+c2V0UmVuZGVyZWRS
ZWN0KG1hcmtlclJlY3QpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxMSw3ICsxMzExLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICAKICAg
ICAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpKSB7CiAgICAgICAgICAgICAvLyBBZGp1c3QgcmVw
YWludCByZWN0IGZvciBzY3JvbGwgb2Zmc2V0Ci0gICAgICAgICAgICByZXBhaW50UmVjdC5tb3Zl
KC1sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKSk7CisgICAgICAgICAgICByZXBhaW50
UmVjdC5tb3ZlQnkoLWxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKIAogICAgICAg
ICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyByZWN0IHRvIHNwaWxsIG91dCBvZiBvdXIgb3ZlcmZs
b3cgYm94LgogICAgICAgICAgICAgcmVwYWludFJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwg
d2lkdGgoKSwgaGVpZ2h0KCkpKTsKQEAgLTIyNTQsNyArMjI1NCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9
IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZs
b3dCb3gpOwogICAgICAgICBvdmVyZmxvd0JveC5pbmZsYXRlKG1heGltYWxPdXRsaW5lU2l6ZShw
YWludEluZm8ucGhhc2UpKTsKLSAgICAgICAgb3ZlcmZsb3dCb3gubW92ZSh0eCwgdHkpOworICAg
ICAgICBvdmVyZmxvd0JveC5tb3ZlQnkodHgsIHR5KTsKICAgICAgICAgaWYgKCFvdmVyZmxvd0Jv
eC5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0yMzM4LDcgKzIzMzgsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENvbHVtbkNvbnRl
bnRzKFBhCiAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShjb2xSZWN0KTsKICAgICAgICAgaW50
IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb2xSZWN0
LngoKSA6IGNvbFJlY3QueSgpKSAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwogICAg
ICAgICBJbnRTaXplIG9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBJbnRTaXpl
KGxvZ2ljYWxMZWZ0T2Zmc2V0LCBjdXJyTG9naWNhbFRvcE9mZnNldCkgOiBJbnRTaXplKGN1cnJM
b2dpY2FsVG9wT2Zmc2V0LCBsb2dpY2FsTGVmdE9mZnNldCk7Ci0gICAgICAgIGNvbFJlY3QubW92
ZSh0eCwgdHkpOworICAgICAgICBjb2xSZWN0Lm1vdmVCeSh0eCwgdHkpOwogICAgICAgICBQYWlu
dEluZm8gaW5mbyhwYWludEluZm8pOwogICAgICAgICBpbmZvLnJlY3QuaW50ZXJzZWN0KGNvbFJl
Y3QpOwogICAgICAgICAKQEAgLTI3NTUsMTIgKzI3NTUsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cGFpbnRTZWxlY3Rpb24oUGFpbnRJbgogICAgICAgICBJbnRSZWN0IGdhcFJlY3RzQm91bmRzID0g
c2VsZWN0aW9uR2Fwcyh0aGlzLCBJbnRQb2ludCh0eCwgdHkpLCBJbnRTaXplKCksIGxhc3RUb3As
IGxhc3RMZWZ0LCBsYXN0UmlnaHQsICZwYWludEluZm8pOwogICAgICAgICBpZiAoIWdhcFJlY3Rz
Qm91bmRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9
IGVuY2xvc2luZ0xheWVyKCkpIHsKLSAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3Zl
KEludFNpemUoLXR4LCAtdHkpKTsKKyAgICAgICAgICAgICAgICBnYXBSZWN0c0JvdW5kcy5tb3Zl
QnkoSW50U2l6ZSgtdHgsIC10eSkpOwogICAgICAgICAgICAgICAgIGlmICghaGFzTGF5ZXIoKSkg
ewogICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IGxvY2FsQm91bmRzKGdhcFJlY3RzQm91bmRz
KTsKICAgICAgICAgICAgICAgICAgICAgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2FsQm91bmRzKTsK
ICAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMgPSBsb2NhbFRvQ29udGFpbmVyUXVh
ZChGbG9hdFJlY3QobG9jYWxCb3VuZHMpLCBsYXllci0+cmVuZGVyZXIoKSkuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKLSAgICAgICAgICAgICAgICAgICAgZ2FwUmVjdHNCb3VuZHMubW92ZShsYXll
ci0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBnYXBSZWN0
c0JvdW5kcy5tb3ZlQnkobGF5ZXItPnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGF5ZXItPmFkZEJsb2NrU2VsZWN0aW9uR2Fwc0Jv
dW5kcyhnYXBSZWN0c0JvdW5kcyk7CiAgICAgICAgICAgICB9CkBAIC0yNzk4LDcgKzI3OTgsNyBA
QCBJbnRSZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmVjdFRvUGh5c2ljCiAgICAgZWxzZQogICAg
ICAgICByZXN1bHQgPSBJbnRSZWN0KGxvZ2ljYWxSZWN0LnkoKSwgbG9naWNhbFJlY3QueCgpLCBs
b2dpY2FsUmVjdC5oZWlnaHQoKSwgbG9naWNhbFJlY3Qud2lkdGgoKSk7CiAgICAgZmxpcEZvcldy
aXRpbmdNb2RlKHJlc3VsdCk7Ci0gICAgcmVzdWx0Lm1vdmUocm9vdEJsb2NrUGh5c2ljYWxQb3Np
dGlvbik7CisgICAgcmVzdWx0Lm1vdmVCeShyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yODExLDcgKzI4MTEsNyBAQCBHYXBSZWN0cyBSZW5k
ZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kCiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24n
dCBjbGlwIG91dCBvdmVyZmxvdyBmb3IgcG9zaXRpb25lZCBvYmplY3RzLiAgV2UganVzdCBzdGlj
ayB0byB0aGUgYm9yZGVyIGJveC4KICAgICAgICAgSW50UmVjdCBmbGlwcGVkQmxvY2tSZWN0ID0g
SW50UmVjdChvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCksIG9mZnNldEZyb21Sb290QmxvY2su
aGVpZ2h0KCksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgcm9vdEJsb2NrLT5mbGlwRm9y
V3JpdGluZ01vZGUoZmxpcHBlZEJsb2NrUmVjdCk7Ci0gICAgICAgIGZsaXBwZWRCbG9ja1JlY3Qu
bW92ZShyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uKTsKKyAgICAgICAgZmxpcHBlZEJsb2NrUmVj
dC5tb3ZlQnkocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbik7CiAgICAgICAgIGNsaXBPdXRQb3Np
dGlvbmVkT2JqZWN0cyhwYWludEluZm8sIGZsaXBwZWRCbG9ja1JlY3QubG9jYXRpb24oKSwgbV9w
b3NpdGlvbmVkT2JqZWN0cy5nZXQoKSk7CiAgICAgICAgIGlmIChpc0JvZHkoKSB8fCBpc1Jvb3Qo
KSkgLy8gVGhlIDxib2R5PiBtdXN0IG1ha2Ugc3VyZSB0byBleGFtaW5lIGl0cyBjb250YWluaW5n
QmxvY2sncyBwb3NpdGlvbmVkIG9iamVjdHMuCiAgICAgICAgICAgICBmb3IgKFJlbmRlckJsb2Nr
KiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOyBjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpOyBjYiA9
IGNiLT5jb250YWluaW5nQmxvY2soKSkKQEAgLTI4MjUsNyArMjgyNSw3IEBAIEdhcFJlY3RzIFJl
bmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzKFJlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgeVBvc2l0aW9u
Rm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ociksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgci0+bV9yZW5kZXJlci0+d2lkdGgoKSwgci0+bV9yZW5kZXJlci0+aGVp
Z2h0KCkpOwogICAgICAgICAgICAgICAgIHJvb3RCbG9jay0+ZmxpcEZvcldyaXRpbmdNb2RlKGZs
b2F0Qm94KTsKLSAgICAgICAgICAgICAgICBmbG9hdEJveC5tb3ZlKHJvb3RCbG9ja1BoeXNpY2Fs
UG9zaXRpb24ueCgpLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLnkoKSk7CisgICAgICAgICAg
ICAgICAgZmxvYXRCb3gubW92ZUJ5KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24ueCgpLCByb290
QmxvY2tQaHlzaWNhbFBvc2l0aW9uLnkoKSk7CiAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLT5j
b250ZXh0LT5jbGlwT3V0KGZsb2F0Qm94KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
Mjg5MCw3ICsyODkwLDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmlubGluZVNlbGVjdGlvbkdh
cAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbFRv
cCwgcGFpbnRJbmZvKSk7CiAgICAgICAgIAogICAgICAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0KGN1
cnItPmxvZ2ljYWxMZWZ0KCksIHNlbFRvcCwgY3Vyci0+bG9naWNhbFdpZHRoKCksIHNlbFRvcCAr
IHNlbEhlaWdodCk7Ci0gICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBJbnRTaXplKG9mZnNldEZyb21Sb290Qmxv
Y2suaGVpZ2h0KCksIG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSkpOworICAgICAgICBsb2dp
Y2FsUmVjdC5tb3ZlQnkoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290
QmxvY2sgOiBJbnRTaXplKG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCksIG9mZnNldEZyb21S
b290QmxvY2sud2lkdGgoKSkpOwogICAgICAgICBJbnRSZWN0IHBoeXNpY2FsUmVjdCA9IHJvb3RC
bG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9u
LCBsb2dpY2FsUmVjdCk7CiAgICAgICAgIGlmICghcGFpbnRJbmZvIHx8IChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC55KCkgPCBwYWludEluZm8tPnJlY3QubWF4WSgp
ICYmIHBoeXNpY2FsUmVjdC5tYXhZKCkgPiBwYWludEluZm8tPnJlY3QueSgpKQogICAgICAgICAg
ICAgfHwgKCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpICYmIHBoeXNpY2FsUmVjdC54KCkgPCBw
YWludEluZm8tPnJlY3QubWF4WCgpICYmIHBoeXNpY2FsUmVjdC5tYXhYKCkgPiBwYWludEluZm8t
PnJlY3QueCgpKSkKQEAgLTM5MTAsNyArMzkxMCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVB
dFBvaW50KGNvbnN0IEhpdFQKICAgICBpZiAoIWlzUmVuZGVyVmlldygpKSB7CiAgICAgICAgIC8v
IENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgogICAgICAgICBJbnRSZWN0
IG92ZXJmbG93Qm94ID0gdmlzdWFsT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgIG92ZXJmbG93Qm94
Lm1vdmUobG9jYWxPZmZzZXQpOworICAgICAgICBvdmVyZmxvd0JveC5tb3ZlQnkobG9jYWxPZmZz
ZXQpOwogICAgICAgICBpZiAoIW92ZXJmbG93Qm94LmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQ
b2ludChwb2ludEluQ29udGFpbmVyKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQpAQCAtNDAxOCw3ICs0MDE4LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdENvbHVtbnMo
Y29uc3QgSAogICAgICAgICAgICAgY3VyckxvZ2ljYWxUb3BPZmZzZXQgLT0gYmxvY2tEZWx0YTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgY3VyckxvZ2ljYWxUb3BPZmZzZXQgKz0gYmxvY2tE
ZWx0YTsKLSAgICAgICAgY29sUmVjdC5tb3ZlKHR4LCB0eSk7CisgICAgICAgIGNvbFJlY3QubW92
ZUJ5KHR4LCB0eSk7CiAgICAgICAgIAogICAgICAgICBpZiAoY29sUmVjdC5pbnRlcnNlY3RzKHJl
c3VsdC5yZWN0Rm9yUG9pbnQocG9pbnRJbkNvbnRhaW5lcikpKSB7CiAgICAgICAgICAgICAvLyBU
aGUgcG9pbnQgaXMgaW5zaWRlIHRoaXMgY29sdW1uLgpAQCAtNDQyMCwxMSArNDQyMCwxMSBAQCB2
b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQb2ludFRvQ29sdW1uQ29uCiAgICAgICAgICAgICAgICAg
Ly8gbm8gbmV4dCBjb2x1bW4sIHRoaXMgc3RpbGwgbWFwcyB0byBqdXN0IGFmdGVyIHRoaXMgY29s
dW1uLgogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBvaW50LnkoKSA+PSBnYXBBbmRDb2x1bW5S
ZWN0Lm1heFkoKSkgewogICAgICAgICAgICAgICAgICAgICBwb2ludCA9IGdhcEFuZENvbHVtblJl
Y3QubG9jYXRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcG9pbnQubW92ZSgwLCBnYXBBbmRD
b2x1bW5SZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcG9pbnQubW92ZUJ5KDAs
IGdhcEFuZENvbHVtblJlY3QuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIC8vIFdlJ3JlIGluc2lkZSB0aGUgY29sdW1uLiAgVHJhbnNsYXRlIHRoZSB4IGFu
ZCB5IGludG8gb3VyIGNvbHVtbiBjb29yZGluYXRlIHNwYWNlLgotICAgICAgICAgICAgICAgIHBv
aW50Lm1vdmUoY29sdW1uUG9pbnQueCgpIC0gY29sUmVjdC54KCksIGxvZ2ljYWxPZmZzZXQpOwor
ICAgICAgICAgICAgICAgIHBvaW50Lm1vdmVCeShjb2x1bW5Qb2ludC54KCkgLSBjb2xSZWN0Lngo
KSwgbG9naWNhbE9mZnNldCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC00NDQyLDExICs0NDQyLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgICAgICAgICAvLyBubyBuZXh0IGNvbHVt
biwgdGhpcyBzdGlsbCBtYXBzIHRvIGp1c3QgYWZ0ZXIgdGhpcyBjb2x1bW4uCiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAocG9pbnQueCgpID49IGdhcEFuZENvbHVtblJlY3QubWF4WCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHBvaW50ID0gZ2FwQW5kQ29sdW1uUmVjdC5sb2NhdGlvbigpOwot
ICAgICAgICAgICAgICAgICAgICBwb2ludC5tb3ZlKGdhcEFuZENvbHVtblJlY3Qud2lkdGgoKSwg
MCk7CisgICAgICAgICAgICAgICAgICAgIHBvaW50Lm1vdmVCeShnYXBBbmRDb2x1bW5SZWN0Lndp
ZHRoKCksIDApOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIFdlJ3Jl
IGluc2lkZSB0aGUgY29sdW1uLiAgVHJhbnNsYXRlIHRoZSB4IGFuZCB5IGludG8gb3VyIGNvbHVt
biBjb29yZGluYXRlIHNwYWNlLgotICAgICAgICAgICAgICAgIHBvaW50Lm1vdmUobG9naWNhbE9m
ZnNldCwgY29sdW1uUG9pbnQueSgpIC0gY29sUmVjdC55KCkpOworICAgICAgICAgICAgICAgIHBv
aW50Lm1vdmVCeShsb2dpY2FsT2Zmc2V0LCBjb2x1bW5Qb2ludC55KCkgLSBjb2xSZWN0LnkoKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC00NDgwLDExICs0NDgwLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JDb2x1
bW5zKEkKICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCA9IHI7CiAgICAgICAgIGlmIChpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAgICBpbnQgY3VyclhPZmZzZXQgPSBj
b2xSZWN0LngoKSAtIGxvZ2ljYWxMZWZ0OwotICAgICAgICAgICAgcmVwYWludFJlY3QubW92ZShj
dXJyWE9mZnNldCwgY3VyckxvZ2ljYWxPZmZzZXQpOworICAgICAgICAgICAgcmVwYWludFJlY3Qu
bW92ZUJ5KGN1cnJYT2Zmc2V0LCBjdXJyTG9naWNhbE9mZnNldCk7CiAgICAgICAgICAgICBjdXJy
TG9naWNhbE9mZnNldCAtPSBjb2xSZWN0LmhlaWdodCgpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaW50IGN1cnJZT2Zmc2V0ID0gY29sUmVjdC55KCkgLSBsb2dpY2FsTGVmdDsKLSAg
ICAgICAgICAgIHJlcGFpbnRSZWN0Lm1vdmUoY3VyckxvZ2ljYWxPZmZzZXQsIGN1cnJZT2Zmc2V0
KTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0Lm1vdmVCeShjdXJyTG9naWNhbE9mZnNldCwgY3Vy
cllPZmZzZXQpOwogICAgICAgICAgICAgY3VyckxvZ2ljYWxPZmZzZXQgLT0gY29sUmVjdC53aWR0
aCgpOwogICAgICAgICB9CiAgICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChjb2xSZWN0KTsK
QEAgLTU2MTAsNyArNTYxMCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJvcmRlckZpdEFkanVzdChJ
bnRSZWMKICAgICBpZiAobGVmdCAhPSBJTlRfTUFYKSB7CiAgICAgICAgIGxlZnQgLT0gKGJvcmRl
ckxlZnQoKSArIHBhZGRpbmdMZWZ0KCkpOwogICAgICAgICBpZiAobGVmdCA+IDApIHsKLSAgICAg
ICAgICAgIHJlY3QubW92ZShsZWZ0LCAwKTsKKyAgICAgICAgICAgIHJlY3QubW92ZUJ5KGxlZnQs
IDApOwogICAgICAgICAgICAgcmVjdC5leHBhbmQoLWxlZnQsIDApOwogICAgICAgICB9CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDg3
OTMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3Niw3ICs0NzYsNyBAQCBJbnRSZWN0IFJlbmRlckJveDo6YWJzb2x1dGVDb250
ZW50Qm94KCkgCiB7CiAgICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveFJlY3QoKTsKICAgICBG
bG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOwotICAgIHJl
Y3QubW92ZShhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsKKyAgICByZWN0Lm1vdmVCeShhYnNQb3Mu
eCgpLCBhYnNQb3MueSgpKTsKICAgICByZXR1cm4gcmVjdDsKIH0KIApAQCAtNDkzLDcgKzQ5Myw3
IEBAIEludFJlY3QgUmVuZGVyQm94OjpvdXRsaW5lQm91bmRzRm9yUmVwYWkKIAogICAgIEZsb2F0
UXVhZCBjb250YWluZXJSZWxhdGl2ZVF1YWQgPSBGbG9hdFJlY3QoYm94KTsKICAgICBpZiAoY2Fj
aGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKQotICAgICAgICBjb250YWluZXJSZWxhdGl2ZVF1
YWQubW92ZShjYWNoZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXItPngoKSwgY2FjaGVkT2Zmc2V0
VG9SZXBhaW50Q29udGFpbmVyLT55KCkpOworICAgICAgICBjb250YWluZXJSZWxhdGl2ZVF1YWQu
bW92ZUJ5KGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lci0+eCgpLCBjYWNoZWRPZmZzZXRU
b1JlcGFpbnRDb250YWluZXItPnkoKSk7CiAgICAgZWxzZQogICAgICAgICBjb250YWluZXJSZWxh
dGl2ZVF1YWQgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChjb250YWluZXJSZWxhdGl2ZVF1YWQsIHJl
cGFpbnRDb250YWluZXIpOwogCkBAIC01MDEsNyArNTAxLDcgQEAgSW50UmVjdCBSZW5kZXJCb3g6
Om91dGxpbmVCb3VuZHNGb3JSZXBhaQogCiAgICAgLy8gRklYTUU6IGxheW91dERlbHRhIG5lZWRz
IHRvIGJlIGFwcGxpZWQgaW4gcGFydHMgYmVmb3JlL2FmdGVyIHRyYW5zZm9ybXMgYW5kCiAgICAg
Ly8gcmVwYWludCBjb250YWluZXJzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjMzMDgKLSAgICBib3gubW92ZSh2aWV3KCktPmxheW91dERlbHRhKCkpOworICAgIGJv
eC5tb3ZlQnkodmlldygpLT5sYXlvdXREZWx0YSgpKTsKIAogICAgIHJldHVybiBib3g7CiB9CkBA
IC01MjEsMTYgKzUyMSwxNiBAQCBJbnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGlvbkJveCgpIGNv
bnN0CiAgICAgcmVzdWx0ID0gYm94OwogICAgIHN3aXRjaCAoc3R5bGUoKS0+Ym94UmVmbGVjdCgp
LT5kaXJlY3Rpb24oKSkgewogICAgICAgICBjYXNlIFJlZmxlY3Rpb25CZWxvdzoKLSAgICAgICAg
ICAgIHJlc3VsdC5tb3ZlKDAsIGJveC5oZWlnaHQoKSArIHJlZmxlY3Rpb25PZmZzZXQoKSk7Cisg
ICAgICAgICAgICByZXN1bHQubW92ZUJ5KDAsIGJveC5oZWlnaHQoKSArIHJlZmxlY3Rpb25PZmZz
ZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uQWJvdmU6
Ci0gICAgICAgICAgICByZXN1bHQubW92ZSgwLCAtYm94LmhlaWdodCgpIC0gcmVmbGVjdGlvbk9m
ZnNldCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5tb3ZlQnkoMCwgLWJveC5oZWlnaHQoKSAtIHJl
ZmxlY3Rpb25PZmZzZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWZs
ZWN0aW9uTGVmdDoKLSAgICAgICAgICAgIHJlc3VsdC5tb3ZlKC1ib3gud2lkdGgoKSAtIHJlZmxl
Y3Rpb25PZmZzZXQoKSwgMCk7CisgICAgICAgICAgICByZXN1bHQubW92ZUJ5KC1ib3gud2lkdGgo
KSAtIHJlZmxlY3Rpb25PZmZzZXQoKSwgMCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZWZsZWN0aW9uUmlnaHQ6Ci0gICAgICAgICAgICByZXN1bHQubW92ZShib3gud2lkdGgo
KSArIHJlZmxlY3Rpb25PZmZzZXQoKSwgMCk7CisgICAgICAgICAgICByZXN1bHQubW92ZUJ5KGJv
eC53aWR0aCgpICsgcmVmbGVjdGlvbk9mZnNldCgpLCAwKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTMwOCw3ICsxMzA4LDcgQEAgSW50U2l6ZSBS
ZW5kZXJCb3g6Om9mZnNldEZyb21Db250YWluZXIoUgogICAgICAgICAgICAgICAgIEludFJlY3Qg
Y29sdW1uUmVjdChmcmFtZVJlY3QoKSk7CiAgICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhv
KS0+ZmxpcEZvcldyaXRpbmdNb2RlSW5jbHVkaW5nQ29sdW1ucyhjb2x1bW5SZWN0KTsKICAgICAg
ICAgICAgICAgICBvZmZzZXQgKz0gSW50U2l6ZShjb2x1bW5SZWN0LmxvY2F0aW9uKCkueCgpLCBj
b2x1bW5SZWN0LmxvY2F0aW9uKCkueSgpKTsKLSAgICAgICAgICAgICAgICBjb2x1bW5SZWN0Lm1v
dmUocG9pbnQpOworICAgICAgICAgICAgICAgIGNvbHVtblJlY3QubW92ZUJ5KHBvaW50KTsKICAg
ICAgICAgICAgICAgICBvLT5hZGp1c3RGb3JDb2x1bW5zKG9mZnNldCwgY29sdW1uUmVjdC5sb2Nh
dGlvbigpKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG9mZnNldCArPSBs
b2NhdGlvbk9mZnNldEluY2x1ZGluZ0ZsaXBwaW5nKCk7CkBAIC0xMzkzLDcgKzEzOTMsNyBAQCBJ
bnRSZWN0IFJlbmRlckJveDo6Y2xpcHBlZE92ZXJmbG93UmVjdEZvCiAgICAgaWYgKHYpIHsKICAg
ICAgICAgLy8gRklYTUU6IGxheW91dERlbHRhIG5lZWRzIHRvIGJlIGFwcGxpZWQgaW4gcGFydHMg
YmVmb3JlL2FmdGVyIHRyYW5zZm9ybXMgYW5kCiAgICAgICAgIC8vIHJlcGFpbnQgY29udGFpbmVy
cy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMzA4Ci0gICAgICAg
IHIubW92ZSh2LT5sYXlvdXREZWx0YSgpKTsKKyAgICAgICAgci5tb3ZlQnkodi0+bGF5b3V0RGVs
dGEoKSk7CiAgICAgfQogICAgIAogICAgIGlmIChzdHlsZSgpKSB7CkBAIC0xNDMyLDEwICsxNDMy
LDEwIEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQoUmUKICAgICAgICAg
ICAgICAgICByZWN0ID0gbGF5ZXIoKS0+dHJhbnNmb3JtKCktPm1hcFJlY3QocmVjdCk7CiAKICAg
ICAgICAgICAgIGlmIChzdHlsZSgpLT5wb3NpdGlvbigpID09IFJlbGF0aXZlUG9zaXRpb24gJiYg
bGF5ZXIoKSkKLSAgICAgICAgICAgICAgICByZWN0Lm1vdmUobGF5ZXIoKS0+cmVsYXRpdmVQb3Np
dGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmVCeShsYXllcigpLT5yZWxh
dGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwogCi0gICAgICAgICAgICByZWN0Lm1vdmUobG9jYXRpb24o
KSk7Ci0gICAgICAgICAgICByZWN0Lm1vdmUobGF5b3V0U3RhdGUtPm1fcGFpbnRPZmZzZXQpOwor
ICAgICAgICAgICAgcmVjdC5tb3ZlQnkobG9jYXRpb24oKSk7CisgICAgICAgICAgICByZWN0Lm1v
dmVCeShsYXlvdXRTdGF0ZS0+bV9wYWludE9mZnNldCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0
U3RhdGUtPm1fY2xpcHBlZCkKICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChsYXlvdXRT
dGF0ZS0+bV9jbGlwUmVjdCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDU5LDcgKzE0NTks
NyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KFJlCiAgICAgaWYgKGlz
V3JpdGluZ01vZGVSb290KCkgJiYgIWlzUG9zaXRpb25lZCgpKQogICAgICAgICBmbGlwRm9yV3Jp
dGluZ01vZGUocmVjdCk7CiAgICAgSW50UG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsK
LSAgICB0b3BMZWZ0Lm1vdmUoeCgpLCB5KCkpOworICAgIHRvcExlZnQubW92ZUJ5KHgoKSwgeSgp
KTsKIAogICAgIEVQb3NpdGlvbiBwb3NpdGlvbiA9IHN0eWxlKCktPnBvc2l0aW9uKCk7CiAKQEAg
LTE0NjksNyArMTQ2OSw3IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUmVjdEZvclJlcGFpbnQo
UmUKICAgICAgICAgZml4ZWQgPSBwb3NpdGlvbiA9PSBGaXhlZFBvc2l0aW9uOwogICAgICAgICBy
ZWN0ID0gbGF5ZXIoKS0+dHJhbnNmb3JtKCktPm1hcFJlY3QocmVjdCk7CiAgICAgICAgIHRvcExl
ZnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgIHRvcExlZnQubW92ZSh4KCksIHkoKSk7Cisg
ICAgICAgIHRvcExlZnQubW92ZUJ5KHgoKSwgeSgpKTsKICAgICB9IGVsc2UgaWYgKHBvc2l0aW9u
ID09IEZpeGVkUG9zaXRpb24pCiAgICAgICAgIGZpeGVkID0gdHJ1ZTsKIApAQCAtMTUxNCw3ICsx
NTE0LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwYWludChSZQogICAgIGlm
IChjb250YWluZXJTa2lwcGVkKSB7CiAgICAgICAgIC8vIElmIHRoZSByZXBhaW50Q29udGFpbmVy
IGlzIGJlbG93IG8sIHRoZW4gd2UgbmVlZCB0byBtYXAgdGhlIHJlY3QgaW50byByZXBhaW50Q29u
dGFpbmVyJ3MgY29vcmRpbmF0ZXMuCiAgICAgICAgIEludFNpemUgY29udGFpbmVyT2Zmc2V0ID0g
cmVwYWludENvbnRhaW5lci0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKG8pOwotICAgICAg
ICByZWN0Lm1vdmUoLWNvbnRhaW5lck9mZnNldCk7CisgICAgICAgIHJlY3QubW92ZUJ5KC1jb250
YWluZXJPZmZzZXQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMDc0LDcgKzMwNzQs
NyBAQCBJbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3QoSW5saW5lCiAgICAgYm9vbCBs
dHIgPSBib3ggPyBib3gtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA6IHN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsKIAogICAgIGlmICgoIWNhcmV0T2Zmc2V0KSBeIGx0cikKLSAg
ICAgICAgcmVjdC5tb3ZlKEludFNpemUod2lkdGgoKSAtIGNhcmV0V2lkdGgsIDApKTsKKyAgICAg
ICAgcmVjdC5tb3ZlQnkoSW50U2l6ZSh3aWR0aCgpIC0gY2FyZXRXaWR0aCwgMCkpOwogCiAgICAg
aWYgKGJveCkgewogICAgICAgICBSb290SW5saW5lQm94KiByb290Qm94ID0gYm94LT5yb290KCk7
CkBAIC0zMDk5LDcgKzMwOTksNyBAQCBJbnRSZWN0IFJlbmRlckJveDo6bG9jYWxDYXJldFJlY3Qo
SW5saW5lCiAgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSB4KCkgKyB3aWR0aCgpIC0g
cmVjdC5tYXhYKCk7CiAKICAgICAvLyBNb3ZlIHRvIGxvY2FsIGNvb3JkcwotICAgIHJlY3QubW92
ZSgtbG9jYXRpb24oKSk7CisgICAgcmVjdC5tb3ZlQnkoLWxvY2F0aW9uKCkpOwogICAgIHJldHVy
biByZWN0OwogfQogCkBAIC0zMjI5LDcgKzMyMjksNyBAQCB2b2lkIFJlbmRlckJveDo6YWRkT3Zl
cmZsb3dGcm9tQ2hpbGQoUmVuCiAgICAgLy8gaXRzIG92ZXJmbG93IGlzIGludGVybmFsIHRvIGl0
LCBhbmQgd2UgZG9uJ3QgY2FyZSBhYm91dCBpdC4gIGxheW91dE92ZXJmbG93UmVjdEZvclByb3Bh
Z2F0aW9uIHRha2VzIGNhcmUgb2YgdGhpcwogICAgIC8vIGFuZCBqdXN0IHByb3BhZ2F0ZXMgdGhl
IGJvcmRlciBib3ggcmVjdCBpbnN0ZWFkLgogICAgIEludFJlY3QgY2hpbGRMYXlvdXRPdmVyZmxv
d1JlY3QgPSBjaGlsZC0+bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yUHJvcGFnYXRpb24oc3R5bGUoKSk7
Ci0gICAgY2hpbGRMYXlvdXRPdmVyZmxvd1JlY3QubW92ZShkZWx0YSk7CisgICAgY2hpbGRMYXlv
dXRPdmVyZmxvd1JlY3QubW92ZUJ5KGRlbHRhKTsKICAgICBhZGRMYXlvdXRPdmVyZmxvdyhjaGls
ZExheW91dE92ZXJmbG93UmVjdCk7CiAgICAgICAgICAgICAKICAgICAvLyBBZGQgaW4gdmlzdWFs
IG92ZXJmbG93IGZyb20gdGhlIGNoaWxkLiAgRXZlbiBpZiB0aGUgY2hpbGQgY2xpcHMgaXRzIG92
ZXJmbG93LCBpdCBtYXkgc3RpbGwKQEAgLTMyMzgsNyArMzIzOCw3IEBAIHZvaWQgUmVuZGVyQm94
OjphZGRPdmVyZmxvd0Zyb21DaGlsZChSZW4KICAgICBpZiAoY2hpbGQtPmhhc1NlbGZQYWludGlu
Z0xheWVyKCkgfHwgaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRS
ZWN0IGNoaWxkVmlzdWFsT3ZlcmZsb3dSZWN0ID0gY2hpbGQtPnZpc3VhbE92ZXJmbG93UmVjdEZv
clByb3BhZ2F0aW9uKHN0eWxlKCkpOwotICAgIGNoaWxkVmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmUo
ZGVsdGEpOworICAgIGNoaWxkVmlzdWFsT3ZlcmZsb3dSZWN0Lm1vdmVCeShkZWx0YSk7CiAgICAg
YWRkVmlzdWFsT3ZlcmZsb3coY2hpbGRWaXN1YWxPdmVyZmxvd1JlY3QpOwogfQogCkBAIC0zMzg2
LDcgKzMzODYsNyBAQCBJbnRSZWN0IFJlbmRlckJveDo6bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yCiAg
ICAgICAgICAgICByZWN0ID0gbGF5ZXIoKS0+Y3VycmVudFRyYW5zZm9ybSgpLm1hcFJlY3QocmVj
dCk7CiAKICAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgcmVjdC5t
b3ZlKHJlbGF0aXZlUG9zaXRpb25PZmZzZXRYKCksIHJlbGF0aXZlUG9zaXRpb25PZmZzZXRZKCkp
OworICAgICAgICAgICAgcmVjdC5tb3ZlQnkocmVsYXRpdmVQb3NpdGlvbk9mZnNldFgoKSwgcmVs
YXRpdmVQb3NpdGlvbk9mZnNldFkoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBOb3cgd2UgbmVl
ZCB0byBmbGlwIGJhY2suCiAgICAgICAgIGZsaXBGb3JXcml0aW5nTW9kZShyZWN0KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDg3OTMyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEs
NyArMTExLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TG9jYXRpb24oY29uc3QgSW50UG9pbnQm
IGxvY2F0aW9uKSB7IG1fZnJhbWVSZWN0LnNldExvY2F0aW9uKGxvY2F0aW9uKTsgfQogICAgIAog
ICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fZnJhbWVSZWN0LnNldFNp
emUoc2l6ZSk7IH0KLSAgICB2b2lkIG1vdmUoaW50IGR4LCBpbnQgZHkpIHsgbV9mcmFtZVJlY3Qu
bW92ZShkeCwgZHkpOyB9CisgICAgdm9pZCBtb3ZlKGludCBkeCwgaW50IGR5KSB7IG1fZnJhbWVS
ZWN0Lm1vdmVCeShkeCwgZHkpOyB9CiAKICAgICBJbnRSZWN0IGZyYW1lUmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWVSZWN0OyB9CiAgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVj
dCYgcmVjdCkgeyBtX2ZyYW1lUmVjdCA9IHJlY3Q7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gODc5MzIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NTksNyArNjU5LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnRGaWxsTGF5ZQogICAgICAgICAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBwYWludCBy
ZWN0IHRvIHJlZmxlY3QgYSBzY3JvbGxlZCBjb250ZW50IGJveCB3aXRoIGJvcmRlcnMgYXQgdGhl
IGVuZHMuCiAgICAgICAgIEludFNpemUgb2Zmc2V0ID0gbGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50
T2Zmc2V0KCk7Ci0gICAgICAgIHNjcm9sbGVkUGFpbnRSZWN0Lm1vdmUoLW9mZnNldCk7CisgICAg
ICAgIHNjcm9sbGVkUGFpbnRSZWN0Lm1vdmVCeSgtb2Zmc2V0KTsKICAgICAgICAgc2Nyb2xsZWRQ
YWludFJlY3Quc2V0V2lkdGgoYkxlZnQgKyBsYXllcigpLT5zY3JvbGxXaWR0aCgpICsgYlJpZ2h0
KTsKICAgICAgICAgc2Nyb2xsZWRQYWludFJlY3Quc2V0SGVpZ2h0KGJvcmRlclRvcCgpICsgbGF5
ZXIoKS0+c2Nyb2xsSGVpZ2h0KCkgKyBib3JkZXJCb3R0b20oKSk7CiAgICAgfQpAQCAtOTAxLDcg
KzkwMSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNhbGN1bGF0ZUJhY2sKICAgICBp
ZiAoYmFja2dyb3VuZFJlcGVhdFggPT0gUmVwZWF0RmlsbCkKICAgICAgICAgcGhhc2Uuc2V0WCh0
aWxlU2l6ZS53aWR0aCgpID8gdGlsZVNpemUud2lkdGgoKSAtICh4UG9zaXRpb24gKyBsZWZ0KSAl
IHRpbGVTaXplLndpZHRoKCkgOiAwKTsKICAgICBlbHNlIHsKLSAgICAgICAgZGVzdFJlY3QubW92
ZShtYXgoeFBvc2l0aW9uICsgbGVmdCwgMCksIDApOworICAgICAgICBkZXN0UmVjdC5tb3ZlQnko
bWF4KHhQb3NpdGlvbiArIGxlZnQsIDApLCAwKTsKICAgICAgICAgcGhhc2Uuc2V0WCgtbWluKHhQ
b3NpdGlvbiArIGxlZnQsIDApKTsKICAgICAgICAgZGVzdFJlY3Quc2V0V2lkdGgodGlsZVNpemUu
d2lkdGgoKSArIG1pbih4UG9zaXRpb24gKyBsZWZ0LCAwKSk7CiAgICAgfQpAQCAtOTEwLDEzICs5
MTAsMTMgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2FsY3VsYXRlQmFjawogICAgIGlm
IChiYWNrZ3JvdW5kUmVwZWF0WSA9PSBSZXBlYXRGaWxsKQogICAgICAgICBwaGFzZS5zZXRZKHRp
bGVTaXplLmhlaWdodCgpID8gdGlsZVNpemUuaGVpZ2h0KCkgLSAoeVBvc2l0aW9uICsgdG9wKSAl
IHRpbGVTaXplLmhlaWdodCgpIDogMCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGRlc3RSZWN0Lm1v
dmUoMCwgbWF4KHlQb3NpdGlvbiArIHRvcCwgMCkpOworICAgICAgICBkZXN0UmVjdC5tb3ZlQnko
MCwgbWF4KHlQb3NpdGlvbiArIHRvcCwgMCkpOwogICAgICAgICBwaGFzZS5zZXRZKC1taW4oeVBv
c2l0aW9uICsgdG9wLCAwKSk7CiAgICAgICAgIGRlc3RSZWN0LnNldEhlaWdodCh0aWxlU2l6ZS5o
ZWlnaHQoKSArIG1pbih5UG9zaXRpb24gKyB0b3AsIDApKTsKICAgICB9CiAKICAgICBpZiAoZml4
ZWRBdHRhY2htZW50KQotICAgICAgICBwaGFzZS5tb3ZlKG1heChwYWludFJlY3QueCgpIC0gZGVz
dFJlY3QueCgpLCAwKSwgbWF4KHBhaW50UmVjdC55KCkgLSBkZXN0UmVjdC55KCksIDApKTsKKyAg
ICAgICAgcGhhc2UubW92ZUJ5KG1heChwYWludFJlY3QueCgpIC0gZGVzdFJlY3QueCgpLCAwKSwg
bWF4KHBhaW50UmVjdC55KCkgLSBkZXN0UmVjdC55KCksIDApKTsKIAogICAgIGRlc3RSZWN0Lmlu
dGVyc2VjdChwYWludFJlY3QpOwogfQpAQCAtMjA4MCw3ICsyMDgwLDcgQEAgc3RhdGljIGlubGlu
ZSBJbnRSZWN0IGFyZWFDYXN0aW5nU2hhZG93SQogICAgICAgICBib3VuZHMuaW5mbGF0ZSgtc2hh
ZG93U3ByZWFkKTsKICAgICAKICAgICBJbnRSZWN0IG9mZnNldEJvdW5kcyA9IGJvdW5kczsKLSAg
ICBvZmZzZXRCb3VuZHMubW92ZSgtc2hhZG93T2Zmc2V0KTsKKyAgICBvZmZzZXRCb3VuZHMubW92
ZUJ5KC1zaGFkb3dPZmZzZXQpOwogICAgIHJldHVybiB1bmlvblJlY3QoYm91bmRzLCBvZmZzZXRC
b3VuZHMpOwogfQogCkBAIC0yMTE5LDcgKzIxMTksNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2Jq
ZWN0OjpwYWludEJveFNoYWRvCiAKICAgICAgICAgICAgIEludFJlY3Qgc2hhZG93UmVjdChib3Jk
ZXIucmVjdCgpKTsKICAgICAgICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShzaGFkb3dCbHVyICsg
c2hhZG93U3ByZWFkKTsKLSAgICAgICAgICAgIHNoYWRvd1JlY3QubW92ZShzaGFkb3dPZmZzZXQp
OworICAgICAgICAgICAgc2hhZG93UmVjdC5tb3ZlQnkoc2hhZG93T2Zmc2V0KTsKIAogICAgICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0KTsKICAg
ICAgICAgICAgIGNvbnRleHQtPmNsaXAoc2hhZG93UmVjdCk7CkBAIC0yMTI4LDcgKzIxMjgsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvCiAgICAgICAgICAgICAv
LyBibGVlZCBpbiAoZHVlIHRvIGFudGlhbGlhc2luZykgaWYgdGhlIGNvbnRleHQgaXMgdHJhbnNm
b3JtZWQuCiAgICAgICAgICAgICBJbnRTaXplIGV4dHJhT2Zmc2V0KHBhaW50UmVjdC53aWR0aCgp
ICsgbWF4KDAsIHNoYWRvd09mZnNldC53aWR0aCgpKSArIHNoYWRvd0JsdXIgKyAyICogc2hhZG93
U3ByZWFkICsgMSwgMCk7CiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7
Ci0gICAgICAgICAgICBmaWxsUmVjdC5tb3ZlKGV4dHJhT2Zmc2V0KTsKKyAgICAgICAgICAgIGZp
bGxSZWN0Lm1vdmVCeShleHRyYU9mZnNldCk7CiAKICAgICAgICAgICAgIGlmIChzaGFkb3ctPmlz
V2Via2l0Qm94U2hhZG93KCkpCiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0TGVnYWN5U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IsIHMtPmNvbG9yU3BhY2Uo
KSk7CkBAIC0yMTgzLDEwICsyMTgzLDEwIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50Qm94U2hhZG8KIAogICAgICAgICAgICAgaWYgKCFpbmNsdWRlTG9naWNhbExlZnRFZGdlKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewotICAgICAgICAgICAgICAgICAg
ICBob2xlUmVjdC5tb3ZlKC1tYXgoc2hhZG93T2Zmc2V0LndpZHRoKCksIDApIC0gc2hhZG93Qmx1
ciwgMCk7CisgICAgICAgICAgICAgICAgICAgIGhvbGVSZWN0Lm1vdmVCeSgtbWF4KHNoYWRvd09m
ZnNldC53aWR0aCgpLCAwKSAtIHNoYWRvd0JsdXIsIDApOwogICAgICAgICAgICAgICAgICAgICBo
b2xlUmVjdC5zZXRXaWR0aChob2xlUmVjdC53aWR0aCgpICsgbWF4KHNoYWRvd09mZnNldC53aWR0
aCgpLCAwKSArIHNoYWRvd0JsdXIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGhvbGVSZWN0Lm1vdmUoMCwgLW1heChzaGFkb3dPZmZzZXQuaGVpZ2h0KCks
IDApIC0gc2hhZG93Qmx1cik7CisgICAgICAgICAgICAgICAgICAgIGhvbGVSZWN0Lm1vdmVCeSgw
LCAtbWF4KHNoYWRvd09mZnNldC5oZWlnaHQoKSwgMCkgLSBzaGFkb3dCbHVyKTsKICAgICAgICAg
ICAgICAgICAgICAgaG9sZVJlY3Quc2V0SGVpZ2h0KGhvbGVSZWN0LmhlaWdodCgpICsgbWF4KHNo
YWRvd09mZnNldC5oZWlnaHQoKSwgMCkgKyBzaGFkb3dCbHVyKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29t
YmluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb21iaW5lVGV4dC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
NyBAQCBmbG9hdCBSZW5kZXJDb21iaW5lVGV4dDo6d2lkdGgodW5zaWduZWQgCiB2b2lkIFJlbmRl
ckNvbWJpbmVUZXh0OjphZGp1c3RUZXh0T3JpZ2luKEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNv
bnN0IEZsb2F0UmVjdCYgYm94UmVjdCkgY29uc3QKIHsKICAgICBpZiAobV9pc0NvbWJpbmVkKQot
ICAgICAgICB0ZXh0T3JpZ2luLm1vdmUoYm94UmVjdC5oZWlnaHQoKSAvIDIgLSBjZWlsZihtX2Nv
bWJpbmVkVGV4dFdpZHRoKSAvIDIsIHN0eWxlKCktPmZvbnQoKS5waXhlbFNpemUoKSk7CisgICAg
ICAgIHRleHRPcmlnaW4ubW92ZUJ5KGJveFJlY3QuaGVpZ2h0KCkgLyAyIC0gY2VpbGYobV9jb21i
aW5lZFRleHRXaWR0aCkgLyAyLCBzdHlsZSgpLT5mb250KCkucGl4ZWxTaXplKCkpOwogfQogCiB2
b2lkIFJlbmRlckNvbWJpbmVUZXh0OjpjaGFyYWN0ZXJzVG9SZW5kZXIoaW50IHN0YXJ0LCBjb25z
dCBVQ2hhciomIGNoYXJhY3RlcnMsIGludCYgbGVuZ3RoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRldGFpbHNNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzTWFya2VyLmNwcAkocmV2aXNpb24g
ODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlsc01hcmtlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFJlbmRlckRldGFpbHNN
YXJrZXI6OnBhaW50KFBhaW50SW5mCiAKICAgICBJbnRQb2ludCBib3hPcmlnaW4odHggKyB4KCks
IHR5ICsgeSgpKTsKICAgICBJbnRSZWN0IG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3Qo
KSk7Ci0gICAgb3ZlcmZsb3dSZWN0Lm1vdmUoYm94T3JpZ2luKTsKKyAgICBvdmVyZmxvd1JlY3Qu
bW92ZUJ5KGJveE9yaWdpbik7CiAgICAgb3ZlcmZsb3dSZWN0LmluZmxhdGUobWF4aW1hbE91dGxp
bmVTaXplKHBhaW50SW5mby5waGFzZSkpOwogCiAgICAgaWYgKCFwYWludEluZm8ucmVjdC5pbnRl
cnNlY3RzKG92ZXJmbG93UmVjdCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVw
bGFjZWQKIGJvb2wgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OmdldFJlcGxhY2VtZW50VGV4dEdlb21l
dHJ5KGludCB0eCwgaW50IHR5LCBGbG9hdFJlY3QmIGNvbnRlbnRSZWN0LCBQYXRoJiBwYXRoLCBG
bG9hdFJlY3QmIHJlcGxhY2VtZW50VGV4dFJlY3QsIEZvbnQmIGZvbnQsIFRleHRSdW4mIHJ1biwg
ZmxvYXQmIHRleHRXaWR0aCkKIHsKICAgICBjb250ZW50UmVjdCA9IGNvbnRlbnRCb3hSZWN0KCk7
Ci0gICAgY29udGVudFJlY3QubW92ZSh0eCwgdHkpOworICAgIGNvbnRlbnRSZWN0Lm1vdmVCeSh0
eCwgdHkpOwogICAgIAogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247CiAgICAg
UmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5zeXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0U21h
bGxDb250cm9sLCBmb250RGVzY3JpcHRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZpZWxkc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nywx
MSArMTg3LDExIEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50TWFzayhQYWludEluZm8KICAg
ICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewogICAgICAgICBpbnQg
eU9mZiA9IChsZWdlbmQtPnkoKSA+IDApID8gMCA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVy
VG9wKCkpIC8gMjsKICAgICAgICAgcGFpbnRSZWN0LmV4cGFuZCgwLCAteU9mZik7Ci0gICAgICAg
IHBhaW50UmVjdC5tb3ZlKDAsIHlPZmYpOworICAgICAgICBwYWludFJlY3QubW92ZUJ5KDAsIHlP
ZmYpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGludCB4T2ZmID0gKGxlZ2VuZC0+eCgpID4gMCkg
PyAwIDogKGxlZ2VuZC0+d2lkdGgoKSAtIGJvcmRlckxlZnQoKSkgLyAyOwogICAgICAgICBwYWlu
dFJlY3QuZXhwYW5kKC14T2ZmLCAwKTsKLSAgICAgICAgcGFpbnRSZWN0Lm1vdmUoeE9mZiwgMCk7
CisgICAgICAgIHBhaW50UmVjdC5tb3ZlQnkoeE9mZiwgMCk7CiAgICAgfQogCiAgICAgcGFpbnRN
YXNrSW1hZ2VzKHBhaW50SW5mbywgcGFpbnRSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgUmVuZGVySFRNTENhbnZhczo6cmVxdWlyZXNMYXllcigp
IGMKIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50
SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgSW50UmVjdCByZWN0ID0gY29udGVudEJveFJl
Y3QoKTsKLSAgICByZWN0Lm1vdmUodHgsIHR5KTsKKyAgICByZWN0Lm1vdmVCeSh0eCwgdHkpOwog
ICAgIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlID0gc3R5bGUoKS0+aW1hZ2VSZW5kZXJpbmcoKSA9
PSBJbWFnZVJlbmRlcmluZ09wdGltaXplQ29udHJhc3Q7CiAgICAgc3RhdGljX2Nhc3Q8SFRNTENh
bnZhc0VsZW1lbnQqPihub2RlKCkpLT5wYWludChwYWludEluZm8uY29udGV4dCwgcmVjdCwgdXNl
TG93UXVhbGl0eVNjYWxlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTksMTAgKzg5OSwxMCBAQCBJ
bnRSZWN0IFJlbmRlcklubGluZTo6Y3VsbGVkSW5saW5lVmlzdWFsCiAgICAgICAgICAgICBpZiAo
IWN1cnJCb3gtPmhhc1NlbGZQYWludGluZ0xheWVyKCkgJiYgY3VyckJveC0+aW5saW5lQm94V3Jh
cHBlcigpKSB7CiAgICAgICAgICAgICAgICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGN1cnJCb3gt
PmxvZ2ljYWxWaXN1YWxPdmVyZmxvd1JlY3RGb3JQcm9wYWdhdGlvbihzdHlsZSgpKTsKICAgICAg
ICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2lj
YWxSZWN0Lm1vdmUoY3VyckJveC0+bG9jYXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGxv
Z2ljYWxSZWN0Lm1vdmVCeShjdXJyQm94LT5sb2NhdGlvbigpKTsKICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKGxvZ2ljYWxSZWN0KTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlKGN1cnJCb3gtPmxv
Y2F0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlQnkoY3VyckJv
eC0+bG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUlmTm9uWmVy
byhsb2dpY2FsUmVjdC50cmFuc3Bvc2VkUmVjdCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC05ODcsNyArOTg3LDcgQEAgSW50UmVjdCBSZW5kZXJJbmxpbmU6OmNsaXBw
ZWRPdmVyZmxvd1JlYwogICAgICAgICAvLyBsYXllcidzIHNpemUgaW5zdGVhZC4gIEV2ZW4gaWYg
dGhlIGxheWVyJ3Mgc2l6ZSBpcyB3cm9uZywgdGhlIGxheWVyIGl0c2VsZiB3aWxsIHJlcGFpbnQK
ICAgICAgICAgLy8gYW55d2F5IGlmIGl0cyBzaXplIGRvZXMgY2hhbmdlLgogICAgICAgICBJbnRS
ZWN0IHJlcGFpbnRSZWN0KHIpOwotICAgICAgICByZXBhaW50UmVjdC5tb3ZlKC1jYi0+bGF5ZXIo
KS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOyAvLyBGb3Igb3ZlcmZsb3c6YXV0by9zY3JvbGwv
aGlkZGVuLgorICAgICAgICByZXBhaW50UmVjdC5tb3ZlQnkoLWNiLT5sYXllcigpLT5zY3JvbGxl
ZENvbnRlbnRPZmZzZXQoKSk7IC8vIEZvciBvdmVyZmxvdzphdXRvL3Njcm9sbC9oaWRkZW4uCiAK
ICAgICAgICAgSW50UmVjdCBib3hSZWN0KEludFBvaW50KCksIGNiLT5sYXllcigpLT5zaXplKCkp
OwogICAgICAgICByID0gaW50ZXJzZWN0aW9uKHJlcGFpbnRSZWN0LCBib3hSZWN0KTsKQEAgLTEw
MzIsOCArMTAzMiw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpjb21wdXRlUmVjdEZvclJlcGFpbnQK
ICAgICAgICAgaWYgKHYtPmxheW91dFN0YXRlRW5hYmxlZCgpICYmICFyZXBhaW50Q29udGFpbmVy
KSB7CiAgICAgICAgICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2LT5sYXlvdXRTdGF0
ZSgpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gUmVsYXRpdmVQb3Np
dGlvbiAmJiBsYXllcigpKQotICAgICAgICAgICAgICAgIHJlY3QubW92ZShsYXllcigpLT5yZWxh
dGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOwotICAgICAgICAgICAgcmVjdC5tb3ZlKGxheW91dFN0YXRl
LT5tX3BhaW50T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICByZWN0Lm1vdmVCeShsYXllcigpLT5y
ZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCkpOworICAgICAgICAgICAgcmVjdC5tb3ZlQnkobGF5b3V0
U3RhdGUtPm1fcGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLT5tX2Ns
aXBwZWQpCiAgICAgICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3QobGF5b3V0U3RhdGUtPm1fY2xp
cFJlY3QpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTA4OSw3ICsxMDg5LDcgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OmNvbXB1dGVSZWN0Rm9yUmVwYWludAogICAgIGlmIChjb250YWluZXJTa2lw
cGVkKSB7CiAgICAgICAgIC8vIElmIHRoZSByZXBhaW50Q29udGFpbmVyIGlzIGJlbG93IG8sIHRo
ZW4gd2UgbmVlZCB0byBtYXAgdGhlIHJlY3QgaW50byByZXBhaW50Q29udGFpbmVyJ3MgY29vcmRp
bmF0ZXMuCiAgICAgICAgIEludFNpemUgY29udGFpbmVyT2Zmc2V0ID0gcmVwYWludENvbnRhaW5l
ci0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKG8pOwotICAgICAgICByZWN0Lm1vdmUoLWNv
bnRhaW5lck9mZnNldCk7CisgICAgICAgIHJlY3QubW92ZUJ5KC1jb250YWluZXJPZmZzZXQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTIxMyw3ICsxMjEzLDcgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBHZXQgb3VyIGNvbnRhaW5pbmcgYmxvY2suCiAgICAgICAgICAgICBSZW5kZXJCb3gq
IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmUo
YmxvY2stPngoKSAtIGZpcnN0QmxvY2stPngoKSwgYmxvY2stPnkoKSAtIGZpcnN0QmxvY2stPnko
KSk7CisgICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmVCeShibG9jay0+eCgpIC0gZmlyc3RCbG9j
ay0+eCgpLCBibG9jay0+eSgpIC0gZmlyc3RCbG9jay0+eSgpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIHJlc3VsdC5zZXRJbm5lck5vZGUobik7CkBAIC0xMzUzLDcgKzEzNTMsNyBAQCB2b2lkIFJl
bmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjCiAgICAgICAgICAgICBpZiAoY3Vyci0+
aGFzTGF5ZXIoKSkgCiAgICAgICAgICAgICAgICAgcG9zID0gY3Vyci0+bG9jYWxUb0Fic29sdXRl
KCk7CiAgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5pc0JveCgpKQotICAgICAgICAgICAgICAg
IHBvcy5tb3ZlKHRvUmVuZGVyQm94KGN1cnIpLT54KCksIHRvUmVuZGVyQm94KGN1cnIpLT55KCkp
OworICAgICAgICAgICAgICAgIHBvcy5tb3ZlQnkodG9SZW5kZXJCb3goY3VyciktPngoKSwgdG9S
ZW5kZXJCb3goY3VyciktPnkoKSk7CiAgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0
cyhyZWN0cywgZmxvb3JlZEludFBvaW50KHBvcykpOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklucHV0U3BlZWNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5wdXRTcGVlY2guY3BwCShyZXZp
c2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbnB1dFNwZWVj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDkgKzgwLDkgQEAgYm9vbCBSZW5kZXJJbnB1dFNw
ZWVjaDo6cGFpbnRJbnB1dEZpZWxkUwogICAgIC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJldHdlZW4g
dGhlIHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBpbnB1dCByZW5kZXJlci4KICAgICBJbnRTaXplIG9m
ZnNldEZyb21JbnB1dFJlbmRlcmVyID0gLShvYmplY3QtPm9mZnNldEZyb21BbmNlc3RvckNvbnRh
aW5lcihpbnB1dFJlbmRlckJveCkpOwogICAgIC8vIE1vdmUgdGhlIHJlY3QgaW50byBwYXJ0UmVu
ZGVyZXIncyBjb29yZHMuCi0gICAgYnV0dG9uUmVjdC5tb3ZlKG9mZnNldEZyb21JbnB1dFJlbmRl
cmVyKTsKKyAgICBidXR0b25SZWN0Lm1vdmVCeShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CiAg
ICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zmc2V0LgotICAgIGJ1dHRvblJl
Y3QubW92ZShyZWN0LmxvY2F0aW9uKCkpOworICAgIGJ1dHRvblJlY3QubW92ZUJ5KHJlY3QubG9j
YXRpb24oKSk7CiAKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFnZT4sIGltYWdl
U3RhdGVOb3JtYWwsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImlucHV0U3BlZWNoIikp
KTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJlZlB0cjxJbWFnZT4sIGltYWdlU3RhdGVSZWNv
cmRpbmcsIChJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoImlucHV0U3BlZWNoUmVjb3JkaW5n
IikpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2
aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsNyArMjczLDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBk
YXRlTGF5ZXJQb3NpdGlvbnMoVQogICAgICAgICAgICAgLy8gd2UganVzdCB1cGRhdGUgdGhlIGNh
Y2hlIHVzaW5nIG91ciBvZmZzZXQgdG8gb3VyIHBhcmVudCAod2hpY2ggaXMgbV90b3BMZWZ0KS4g
T3RoZXJ3aXNlLCByZWdlbmVyYXRlZCBjYWNoZWQKICAgICAgICAgICAgIC8vIG9mZnNldHMgdG8g
dGhlIHJvb3QgZnJvbSB0aGUgcmVuZGVyIHRyZWUuCiAgICAgICAgICAgICBpZiAoIW1fcGFyZW50
IHx8IG1fcGFyZW50LT5yZW5kZXJlcigpID09IHJlbmRlcmVyKCktPmNvbnRhaW5pbmdCbG9jaygp
KQotICAgICAgICAgICAgICAgIGNhY2hlZE9mZnNldC0+bW92ZShtX3RvcExlZnQueCgpLCBtX3Rv
cExlZnQueSgpKTsgLy8gRmFzdCBjYXNlCisgICAgICAgICAgICAgICAgY2FjaGVkT2Zmc2V0LT5t
b3ZlQnkobV90b3BMZWZ0LngoKSwgbV90b3BMZWZ0LnkoKSk7IC8vIEZhc3QgY2FzZQogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgSW50UG9pbnQgb2Zmc2V0OwogICAgICAgICAg
ICAgICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3QoKSwgb2Zmc2V0KTsKQEAgLTcwMiw3ICs3
MDIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKICAgICAgICAg
CiAgICAgaWYgKHJlbmRlcmVyKCktPmlzUmVsUG9zaXRpb25lZCgpKSB7CiAgICAgICAgIG1fcmVs
YXRpdmVPZmZzZXQgPSByZW5kZXJlcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KCk7Ci0gICAg
ICAgIGxvY2FsUG9pbnQubW92ZShtX3JlbGF0aXZlT2Zmc2V0KTsKKyAgICAgICAgbG9jYWxQb2lu
dC5tb3ZlQnkobV9yZWxhdGl2ZU9mZnNldCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9yZWxh
dGl2ZU9mZnNldCA9IEludFNpemUoKTsKICAgICB9CkBAIC04OTgsOSArODk4LDkgQEAgc3RhdGlj
IHZvaWQgZXhwYW5kQ2xpcFJlY3RGb3JEZXNjZW5kYW50cwogICAgIGlmIChsLT5yZW5kZXJlcigp
LT5oYXNSZWZsZWN0aW9uKCkpIHsKICAgICAgICAgSW50UG9pbnQgZGVsdGE7CiAgICAgICAgIGwt
PmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGEpOwotICAgICAgICBjbGlwUmVj
dC5tb3ZlKC1kZWx0YS54KCksIC1kZWx0YS55KCkpOworICAgICAgICBjbGlwUmVjdC5tb3ZlQnko
LWRlbHRhLngoKSwgLWRlbHRhLnkoKSk7CiAgICAgICAgIGNsaXBSZWN0LnVuaXRlKGwtPnJlbmRl
ckJveCgpLT5yZWZsZWN0ZWRSZWN0KGNsaXBSZWN0KSk7Ci0gICAgICAgIGNsaXBSZWN0Lm1vdmUo
ZGVsdGEpOworICAgICAgICBjbGlwUmVjdC5tb3ZlQnkoZGVsdGEpOwogICAgIH0KIH0KIApAQCAt
MTE5Nyw3ICsxMTk3LDcgQEAgUmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0xheWVyQ29vcmRzKGNvbnN0
IAogewogICAgIEludFBvaW50IGRlbHRhOwogICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2Vz
dG9yTGF5ZXIsIGRlbHRhKTsKLSAgICByZWN0Lm1vdmUoLWRlbHRhLngoKSwgLWRlbHRhLnkoKSk7
CisgICAgcmVjdC5tb3ZlQnkoLWRlbHRhLngoKSwgLWRlbHRhLnkoKSk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgaW50IGFkanVzdGVkU2Nyb2xsRGVsdGEoaW50IGJlZ2lubmluZ0RlbHRhKSB7CkBAIC0x
NDAyLDcgKzE0MDIsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxSZWN0VG9WaXNpYmxlKGNv
CiAgICAgICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgICAgIEFTU0VSVChi
b3gpOwogICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGJveC0+bG9jYWxUb0Fic29sdXRlKCk7
Ci0gICAgICAgIGFic1Bvcy5tb3ZlKGJveC0+Ym9yZGVyTGVmdCgpLCBib3gtPmJvcmRlclRvcCgp
KTsKKyAgICAgICAgYWJzUG9zLm1vdmVCeShib3gtPmJvcmRlckxlZnQoKSwgYm94LT5ib3JkZXJU
b3AoKSk7CiAKICAgICAgICAgSW50UmVjdCBsYXllckJvdW5kcyA9IEludFJlY3QoYWJzUG9zLngo
KSArIHNjcm9sbFhPZmZzZXQoKSwgYWJzUG9zLnkoKSArIHNjcm9sbFlPZmZzZXQoKSwgYm94LT5j
bGllbnRXaWR0aCgpLCBib3gtPmNsaWVudEhlaWdodCgpKTsKICAgICAgICAgSW50UmVjdCBleHBv
c2VSZWN0ID0gSW50UmVjdChyZWN0LngoKSArIHNjcm9sbFhPZmZzZXQoKSwgcmVjdC55KCkgKyBz
Y3JvbGxZT2Zmc2V0KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CkBAIC0xNzU2LDcg
KzE3NTYsNyBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhCiAgICAg
ICAgIHJldHVybiBzY3JvbGxiYXJSZWN0OwogCiAgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFy
UmVjdDsKLSAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJl
Y3QubW92ZUJ5KHNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKIAogICAgIHJldHVybiB2aWV3
LT5mcmFtZVZpZXcoKS0+Y29udmVydEZyb21SZW5kZXJlcihyZW5kZXJlcigpLCByZWN0KTsKIH0K
QEAgLTE3NjgsNyArMTc2OCw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29u
dGFpbmkKICAgICAgICAgcmV0dXJuIHBhcmVudFJlY3Q7CiAKICAgICBJbnRSZWN0IHJlY3QgPSB2
aWV3LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVyZXIoKSwgcGFyZW50UmVj
dCk7Ci0gICAgcmVjdC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmVj
dC5tb3ZlQnkoLXNjcm9sbGJhck9mZnNldChzY3JvbGxiYXIpKTsKICAgICByZXR1cm4gcmVjdDsK
IH0KIApAQCAtMTc3OSw3ICsxNzc5LDcgQEAgSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRG
cm9tU2Nyb2xsYgogICAgICAgICByZXR1cm4gc2Nyb2xsYmFyUG9pbnQ7CiAKICAgICBJbnRQb2lu
dCBwb2ludCA9IHNjcm9sbGJhclBvaW50OwotICAgIHBvaW50Lm1vdmUoc2Nyb2xsYmFyT2Zmc2V0
KHNjcm9sbGJhcikpOworICAgIHBvaW50Lm1vdmVCeShzY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFy
KSk7CiAgICAgcmV0dXJuIHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHJl
bmRlcmVyKCksIHBvaW50KTsKIH0KIApAQCAtMTc5MSw3ICsxNzkxLDcgQEAgSW50UG9pbnQgUmVu
ZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbgogCiAgICAgSW50UG9pbnQgcG9pbnQgPSB2aWV3
LT5mcmFtZVZpZXcoKS0+Y29udmVydFRvUmVuZGVyZXIocmVuZGVyZXIoKSwgcGFyZW50UG9pbnQp
OwogCi0gICAgcG9pbnQubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHBv
aW50Lm1vdmVCeSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOwogICAgIHJldHVybiBwb2lu
dDsKIH0KIApAQCAtMTg1Niw5ICsxODU2LDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6aW52YWxpZGF0
ZVNjcm9sbGJhclJlYwogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgQVNT
RVJUKGJveCk7CiAgICAgaWYgKHNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCi0gICAgICAgIHNj
cm9sbFJlY3QubW92ZShib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBzY3JvbGxi
YXItPndpZHRoKCksIGJveC0+Ym9yZGVyVG9wKCkpOworICAgICAgICBzY3JvbGxSZWN0Lm1vdmVC
eShib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCks
IGJveC0+Ym9yZGVyVG9wKCkpOwogICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlKGJv
eC0+Ym9yZGVyTGVmdCgpLCBib3gtPmhlaWdodCgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIHNj
cm9sbGJhci0+aGVpZ2h0KCkpOworICAgICAgICBzY3JvbGxSZWN0Lm1vdmVCeShib3gtPmJvcmRl
ckxlZnQoKSwgYm94LT5oZWlnaHQoKSAtIGJveC0+Ym9yZGVyQm90dG9tKCkgLSBzY3JvbGxiYXIt
PmhlaWdodCgpKTsKICAgICByZW5kZXJlcigpLT5yZXBhaW50UmVjdGFuZ2xlKHNjcm9sbFJlY3Qp
OwogfQogCkBAIC0yMzI1LDcgKzIzMjUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludFNjcm9s
bENvcm5lcihHcmFwCiAgICAgQVNTRVJUKGJveCk7CiAKICAgICBJbnRSZWN0IGFic1JlY3QgPSBz
Y3JvbGxDb3JuZXJSZWN0KCk7Ci0gICAgYWJzUmVjdC5tb3ZlKHBhaW50T2Zmc2V0KTsKKyAgICBh
YnNSZWN0Lm1vdmVCeShwYWludE9mZnNldCk7CiAgICAgaWYgKCFhYnNSZWN0LmludGVyc2VjdHMo
ZGFtYWdlUmVjdCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjM1NCw3ICsyMzU0LDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6cGFpbnRSZXNpemVyKEdyYXBoaWNzQwogICAgIEFTU0VSVChib3gpOwog
CiAgICAgSW50UmVjdCBhYnNSZWN0ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYm94LT5ib3Jk
ZXJCb3hSZWN0KCkpOwotICAgIGFic1JlY3QubW92ZShwYWludE9mZnNldCk7CisgICAgYWJzUmVj
dC5tb3ZlQnkocGFpbnRPZmZzZXQpOwogICAgIGlmICghYWJzUmVjdC5pbnRlcnNlY3RzKGRhbWFn
ZVJlY3QpKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3NzIsNyArMjc3Miw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXI6OnBhaW50Q2hpbGRMYXllckludG9Db2wKICAgICAgICAgaW50IGxvZ2ljYWxMZWZ0
T2Zmc2V0ID0gKGlzSG9yaXpvbnRhbCA/IGNvbFJlY3QueCgpIDogY29sUmVjdC55KCkpIC0gY29s
dW1uQmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOwogICAgICAgICBJbnRTaXpl
IG9mZnNldCA9IGlzSG9yaXpvbnRhbCA/IEludFNpemUobG9naWNhbExlZnRPZmZzZXQsIGN1cnJM
b2dpY2FsVG9wT2Zmc2V0KSA6IEludFNpemUoY3VyckxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2ljYWxM
ZWZ0T2Zmc2V0KTsKIAotICAgICAgICBjb2xSZWN0Lm1vdmUobGF5ZXJPZmZzZXQpOworICAgICAg
ICBjb2xSZWN0Lm1vdmVCeShsYXllck9mZnNldCk7CiAKICAgICAgICAgSW50UmVjdCBsb2NhbERp
cnR5UmVjdChwYWludERpcnR5UmVjdCk7CiAgICAgICAgIGxvY2FsRGlydHlSZWN0LmludGVyc2Vj
dChjb2xSZWN0KTsKQEAgLTMyNTYsNyArMzI1Niw3IEBAIFJlbmRlckxheWVyKiBSZW5kZXJMYXll
cjo6aGl0VGVzdENoaWxkTGEKICAgICAgICAgICAgIGN1cnJMb2dpY2FsVG9wT2Zmc2V0IC09IGJs
b2NrRGVsdGE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGN1cnJMb2dpY2FsVG9wT2Zmc2V0
ICs9IGJsb2NrRGVsdGE7Ci0gICAgICAgIGNvbFJlY3QubW92ZShsYXllck9mZnNldCk7CisgICAg
ICAgIGNvbFJlY3QubW92ZUJ5KGxheWVyT2Zmc2V0KTsKIAogICAgICAgICBJbnRSZWN0IGxvY2Fs
Q2xpcFJlY3QoaGl0VGVzdFJlY3QpOwogICAgICAgICBsb2NhbENsaXBSZWN0LmludGVyc2VjdChj
b2xSZWN0KTsKQEAgLTM0MTIsNyArMzQxMiw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJhY2tn
cm91bmRDbGlwUmVjdCgKICAgICAgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZp
ZXcoKTsKICAgICAgICAgQVNTRVJUKHZpZXcpOwogICAgICAgICBpZiAodmlldyAmJiBwYXJlbnRS
ZWN0cy5maXhlZCgpICYmIHJvb3RMYXllci0+cmVuZGVyZXIoKSA9PSB2aWV3KQotICAgICAgICAg
ICAgYmFja2dyb3VuZFJlY3QubW92ZSh2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWEZvckZpeGVk
UG9zaXRpb24oKSwgdmlldy0+ZnJhbWVWaWV3KCktPnNjcm9sbFlGb3JGaXhlZFBvc2l0aW9uKCkp
OworICAgICAgICAgICAgYmFja2dyb3VuZFJlY3QubW92ZUJ5KHZpZXctPmZyYW1lVmlldygpLT5z
Y3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpLCB2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWUZvckZp
eGVkUG9zaXRpb24oKSk7CiAgICAgfQogICAgIHJldHVybiBiYWNrZ3JvdW5kUmVjdDsKIH0KQEAg
LTM0NTYsNyArMzQ1Niw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZVJlY3RzKGNvbnN0
IFIKICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICBpZiAoYm94U2hhZG93LT5zdHls
ZSgpID09IE5vcm1hbCkgewogICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHNoYWRvd1JlY3Qg
PSBsYXllckJvdW5kczsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UmVjdC5tb3ZlKGJveFNo
YWRvdy0+eCgpLCBib3hTaGFkb3ctPnkoKSk7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Jl
Y3QubW92ZUJ5KGJveFNoYWRvdy0+eCgpLCBib3hTaGFkb3ctPnkoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1JlY3QuaW5mbGF0ZShib3hTaGFkb3ctPmJsdXIoKSArIGJveFNoYWRvdy0+
c3ByZWFkKCkpOwogICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy51bml0ZShzaGFkb3dSZWN0
KTsKICAgICAgICAgICAgICAgICB9CkBAIC0zNTA4LDcgKzM1MDgsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpyZXBhaW50QmxvY2tTZWxlY3Rpb25HCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJl
Y3QgcmVjdCA9IG1fYmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzOwotICAgIHJlY3QubW92ZSgtc2Ny
b2xsZWRDb250ZW50T2Zmc2V0KCkpOworICAgIHJlY3QubW92ZUJ5KC1zY3JvbGxlZENvbnRlbnRP
ZmZzZXQoKSk7CiAgICAgaWYgKHJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAg
ICByZWN0LmludGVyc2VjdCh0b1JlbmRlckJveChyZW5kZXJlcigpKS0+b3ZlcmZsb3dDbGlwUmVj
dCgwLCAwKSk7CiAgICAgaWYgKHJlbmRlcmVyKCktPmhhc0NsaXAoKSkKQEAgLTM1OTcsNyArMzU5
Nyw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNvbnN0IFIKICAgICAgICAg
cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCktPmZsaXBGb3JXcml0aW5nTW9kZShyZXN1bHQp
OwogICAgIEludFBvaW50IGRlbHRhOwogICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKGFuY2VzdG9y
TGF5ZXIsIGRlbHRhKTsKLSAgICByZXN1bHQubW92ZShkZWx0YSk7CisgICAgcmVzdWx0Lm1vdmVC
eShkZWx0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzkzNCw3ICszOTM0LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6c2V0QmFja2luZ05lZWRzUmVwYWludAogICAgICAgICBJbnRSZWN0
IGFic1JlY3Qocik7CiAgICAgICAgIEludFBvaW50IGRlbHRhOwogICAgICAgICBjb252ZXJ0VG9M
YXllckNvb3Jkcyhyb290KCksIGRlbHRhKTsKLSAgICAgICAgYWJzUmVjdC5tb3ZlKGRlbHRhKTsK
KyAgICAgICAgYWJzUmVjdC5tb3ZlQnkoZGVsdGEpOwogCiAgICAgICAgIFJlbmRlclZpZXcqIHZp
ZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CiAgICAgICAgIGlmICh2aWV3KQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9u
IDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6dXBkYXRlQ29tcG9zaXRlCiAKICAgICAgICAgSW50UG9pbnQgZGVsdGE7CiAgICAgICAg
IG1fb3duaW5nTGF5ZXItPmNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3RMYXllciwgZGVsdGEpOwot
ICAgICAgICBjbGlwcGluZ0JvdW5kcy5tb3ZlKC1kZWx0YS54KCksIC1kZWx0YS55KCkpOworICAg
ICAgICBjbGlwcGluZ0JvdW5kcy5tb3ZlQnkoLWRlbHRhLngoKSwgLWRlbHRhLnkoKSk7CiAKICAg
ICAgICAgbGF5ZXJCb3VuZHMuaW50ZXJzZWN0KGNsaXBwaW5nQm91bmRzKTsKICAgICB9CkBAIC0z
NTcsNyArMzU3LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdyYXBoaWNzTAog
ICAgIEludFJlY3QgcmVsYXRpdmVDb21wb3NpdGluZ0JvdW5kcyhsb2NhbENvbXBvc2l0aW5nQm91
bmRzKTsKICAgICBJbnRQb2ludCBkZWx0YTsKICAgICBtX293bmluZ0xheWVyLT5jb252ZXJ0VG9M
YXllckNvb3Jkcyhjb21wQW5jZXN0b3IsIGRlbHRhKTsKLSAgICByZWxhdGl2ZUNvbXBvc2l0aW5n
Qm91bmRzLm1vdmUoZGVsdGEpOworICAgIHJlbGF0aXZlQ29tcG9zaXRpbmdCb3VuZHMubW92ZUJ5
KGRlbHRhKTsKIAogICAgIEludFBvaW50IGdyYXBoaWNzTGF5ZXJQYXJlbnRMb2NhdGlvbjsKICAg
ICBpZiAoY29tcEFuY2VzdG9yICYmIGNvbXBBbmNlc3Rvci0+YmFja2luZygpLT5oYXNDbGlwcGlu
Z0xheWVyKCkpIHsKQEAgLTEwMjEsNyArMTAyMSw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpjb250ZW50c0JveCgKICAgICAgICAgY29udGVudHNSZWN0ID0gdG9SZW5kZXJCb3gocmVu
ZGVyZXIoKSktPmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICBJbnRTaXplIGNvbnRlbnRPZmZzZXQg
PSBjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKTsKLSAgICBjb250ZW50c1JlY3QubW92
ZShjb250ZW50T2Zmc2V0KTsKKyAgICBjb250ZW50c1JlY3QubW92ZUJ5KGNvbnRlbnRPZmZzZXQp
OwogICAgIHJldHVybiBjb250ZW50c1JlY3Q7CiB9CiAKQEAgLTEwNTAsMTkgKzEwNTAsMTkgQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnNldENvbnRlbnRzTmVlZAogewogICAgIGlmIChtX2dy
YXBoaWNzTGF5ZXIgJiYgbV9ncmFwaGljc0xheWVyLT5kcmF3c0NvbnRlbnQoKSkgewogICAgICAg
ICBJbnRSZWN0IGxheWVyRGlydHlSZWN0ID0gcjsKLSAgICAgICAgbGF5ZXJEaXJ0eVJlY3QubW92
ZSgtbV9ncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7CisgICAgICAgIGxheWVy
RGlydHlSZWN0Lm1vdmVCeSgtbV9ncmFwaGljc0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7
CiAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGxheWVyRGly
dHlSZWN0KTsKICAgICB9CiAKICAgICBpZiAobV9mb3JlZ3JvdW5kTGF5ZXIgJiYgbV9mb3JlZ3Jv
dW5kTGF5ZXItPmRyYXdzQ29udGVudCgpKSB7CiAgICAgICAgIEludFJlY3QgbGF5ZXJEaXJ0eVJl
Y3QgPSByOwotICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlKC1tX2ZvcmVncm91bmRMYXllci0+
b2Zmc2V0RnJvbVJlbmRlcmVyKCkpOworICAgICAgICBsYXllckRpcnR5UmVjdC5tb3ZlQnkoLW1f
Zm9yZWdyb3VuZExheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7CiAgICAgICAgIG1fZm9yZWdy
b3VuZExheWVyLT5zZXROZWVkc0Rpc3BsYXlJblJlY3QobGF5ZXJEaXJ0eVJlY3QpOwogICAgIH0K
IAogICAgIGlmIChtX21hc2tMYXllciAmJiBtX21hc2tMYXllci0+ZHJhd3NDb250ZW50KCkpIHsK
ICAgICAgICAgSW50UmVjdCBsYXllckRpcnR5UmVjdCA9IHI7Ci0gICAgICAgIGxheWVyRGlydHlS
ZWN0Lm1vdmUoLW1fbWFza0xheWVyLT5vZmZzZXRGcm9tUmVuZGVyZXIoKSk7CisgICAgICAgIGxh
eWVyRGlydHlSZWN0Lm1vdmVCeSgtbV9tYXNrTGF5ZXItPm9mZnNldEZyb21SZW5kZXJlcigpKTsK
ICAgICAgICAgbV9tYXNrTGF5ZXItPnNldE5lZWRzRGlzcGxheUluUmVjdChsYXllckRpcnR5UmVj
dCk7CiAgICAgfQogfQpAQCAtMTE5Nyw3ICsxMTk3LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTY3Jv
bGxiYXIoU2Nyb2xsYmFyKiBzYwogICAgIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QgPSBz
Y3JvbGxiYXItPmZyYW1lUmVjdCgpOwogICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxiYXJS
ZWN0LngoKSwgLXNjcm9sbGJhclJlY3QueSgpKTsKICAgICBJbnRSZWN0IHRyYW5zZm9ybWVkQ2xp
cCA9IGNsaXA7Ci0gICAgdHJhbnNmb3JtZWRDbGlwLm1vdmUoc2Nyb2xsYmFyUmVjdC5sb2NhdGlv
bigpKTsKKyAgICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5KHNjcm9sbGJhclJlY3QubG9jYXRpb24o
KSk7CiAgICAgc2Nyb2xsYmFyLT5wYWludCgmY29udGV4dCwgdHJhbnNmb3JtZWRDbGlwKTsKICAg
ICBjb250ZXh0LnJlc3RvcmUoKTsKIH0KQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjpwYWludENvbnRlbnRzKGMKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
LW9mZnNldCk7CiAKICAgICAgICAgSW50UmVjdCBjbGlwUmVjdChjbGlwKTsKLSAgICAgICAgY2xp
cFJlY3QubW92ZShvZmZzZXQpOworICAgICAgICBjbGlwUmVjdC5tb3ZlQnkob2Zmc2V0KTsKIAog
ICAgICAgICAvLyBUaGUgZGlydHlSZWN0IGlzIGluIHRoZSBjb29yZHMgb2YgdGhlIHBhaW50aW5n
IHJvb3QuCiAgICAgICAgIEludFJlY3QgZGlydHlSZWN0ID0gY29tcG9zaXRlZEJvdW5kcygpOwpA
QCAtMTIzMSw3ICsxMjMxLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50Q29udGVu
dHMoYwogICAgICAgICBjb250ZXh0LnNhdmUoKTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
LXNjcm9sbENvcm5lckFuZFJlc2l6ZXIueCgpLCAtc2Nyb2xsQ29ybmVyQW5kUmVzaXplci55KCkp
OwogICAgICAgICBJbnRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7Ci0gICAgICAgIHRyYW5z
Zm9ybWVkQ2xpcC5tb3ZlKHNjcm9sbENvcm5lckFuZFJlc2l6ZXIubG9jYXRpb24oKSk7CisgICAg
ICAgIHRyYW5zZm9ybWVkQ2xpcC5tb3ZlQnkoc2Nyb2xsQ29ybmVyQW5kUmVzaXplci5sb2NhdGlv
bigpKTsKICAgICAgICAgbV9vd25pbmdMYXllci0+cGFpbnRTY3JvbGxDb3JuZXIoJmNvbnRleHQs
IEludFBvaW50KCksIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAgICAgIG1fb3duaW5nTGF5ZXItPnBh
aW50UmVzaXplcigmY29udGV4dCwgSW50UG9pbnQoKSwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICAg
ICAgY29udGV4dC5yZXN0b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUxLDcgKzQ1MSw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpj
YWxjdWxhdGUKICAgICBpZiAobGF5ZXItPnJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8
IGxheWVyLT5yZW5kZXJlcigpLT5oYXNNYXNrKCkpIHsKICAgICAgICAgSW50UG9pbnQgYW5jZXN0
b3JSZWxPZmZzZXQ7CiAgICAgICAgIGxheWVyLT5jb252ZXJ0VG9MYXllckNvb3JkcyhhbmNlc3Rv
ckxheWVyLCBhbmNlc3RvclJlbE9mZnNldCk7Ci0gICAgICAgIGJvdW5kaW5nQm94UmVjdC5tb3Zl
KGFuY2VzdG9yUmVsT2Zmc2V0KTsKKyAgICAgICAgYm91bmRpbmdCb3hSZWN0Lm1vdmVCeShhbmNl
c3RvclJlbE9mZnNldCk7CiAgICAgICAgIHJldHVybiBib3VuZGluZ0JveFJlY3Q7CiAgICAgfQog
CkBAIC01MDUsNyArNTA1LDcgQEAgSW50UmVjdCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNhbGN1
bGF0ZQogCiAgICAgSW50UG9pbnQgYW5jZXN0b3JSZWxPZmZzZXQ7CiAgICAgbGF5ZXItPmNvbnZl
cnRUb0xheWVyQ29vcmRzKGFuY2VzdG9yTGF5ZXIsIGFuY2VzdG9yUmVsT2Zmc2V0KTsKLSAgICB1
bmlvbkJvdW5kcy5tb3ZlKGFuY2VzdG9yUmVsT2Zmc2V0KTsKKyAgICB1bmlvbkJvdW5kcy5tb3Zl
QnkoYW5jZXN0b3JSZWxPZmZzZXQpOwogCiAgICAgcmV0dXJuIHVuaW9uQm91bmRzOwogfQpAQCAt
NTI5LDcgKzUyOSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpsYXllcldpbGxCZVIK
IAogICAgICAgICBJbnRQb2ludCBvZmZzZXQ7CiAgICAgICAgIGNoaWxkLT5jb252ZXJ0VG9MYXll
ckNvb3Jkcyhjb21wTGF5ZXIsIG9mZnNldCk7Ci0gICAgICAgIGNvbXBCb3VuZHMubW92ZShvZmZz
ZXQpOworICAgICAgICBjb21wQm91bmRzLm1vdmVCeShvZmZzZXQpOwogCiAgICAgICAgIGNvbXBM
YXllci0+c2V0QmFja2luZ05lZWRzUmVwYWludEluUmVjdChjb21wQm91bmRzKTsKIApAQCAtMTQz
Niw3ICsxNDM2LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXIoU2Nyb2xsYmFyKiBzYwog
ICAgIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QgPSBzY3JvbGxiYXItPmZyYW1lUmVjdCgp
OwogICAgIGNvbnRleHQudHJhbnNsYXRlKC1zY3JvbGxiYXJSZWN0LngoKSwgLXNjcm9sbGJhclJl
Y3QueSgpKTsKICAgICBJbnRSZWN0IHRyYW5zZm9ybWVkQ2xpcCA9IGNsaXA7Ci0gICAgdHJhbnNm
b3JtZWRDbGlwLm1vdmUoc2Nyb2xsYmFyUmVjdC5sb2NhdGlvbigpKTsKKyAgICB0cmFuc2Zvcm1l
ZENsaXAubW92ZUJ5KHNjcm9sbGJhclJlY3QubG9jYXRpb24oKSk7CiAgICAgc2Nyb2xsYmFyLT5w
YWludCgmY29udGV4dCwgdHJhbnNmb3JtZWRDbGlwKTsKICAgICBjb250ZXh0LnJlc3RvcmUoKTsK
IH0KQEAgLTE0NTIsNyArMTQ1Miw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpwYWlu
dENvbnRlbnQKICAgICAgICAgY29udGV4dC5zYXZlKCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNs
YXRlKC1zY3JvbGxDb3JuZXIueCgpLCAtc2Nyb2xsQ29ybmVyLnkoKSk7CiAgICAgICAgIEludFJl
Y3QgdHJhbnNmb3JtZWRDbGlwID0gY2xpcDsKLSAgICAgICAgdHJhbnNmb3JtZWRDbGlwLm1vdmUo
c2Nyb2xsQ29ybmVyLmxvY2F0aW9uKCkpOworICAgICAgICB0cmFuc2Zvcm1lZENsaXAubW92ZUJ5
KHNjcm9sbENvcm5lci5sb2NhdGlvbigpKTsKICAgICAgICAgbV9yZW5kZXJWaWV3LT5mcmFtZVZp
ZXcoKS0+cGFpbnRTY3JvbGxDb3JuZXIoJmNvbnRleHQsIHRyYW5zZm9ybWVkQ2xpcCk7CiAgICAg
ICAgIGNvbnRleHQucmVzdG9yZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTMsNyAr
MzkzLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKAogICAgIFRl
eHRSdW4gdGV4dFJ1bihzdHJpbmcsIGxlbmd0aCwgZmFsc2UsIDAsIDAsIFRleHRSdW46OkFsbG93
VHJhaWxpbmdFeHBhbnNpb24sIGl0ZW1TdHlsZS0+ZGlyZWN0aW9uKCksIGl0ZW1TdHlsZS0+dW5p
Y29kZUJpZGkoKSA9PSBPdmVycmlkZSk7CiAgICAgRm9udCBpdGVtRm9udCA9IHN0eWxlKCktPmZv
bnQoKTsKICAgICBJbnRSZWN0IHIgPSBpdGVtQm91bmRpbmdCb3hSZWN0KEludFBvaW50KHR4LCB0
eSksIGxpc3RJbmRleCk7Ci0gICAgci5tb3ZlKGl0ZW1PZmZzZXRGb3JBbGlnbm1lbnQodGV4dFJ1
biwgaXRlbVN0eWxlLCBpdGVtRm9udCwgcikpOworICAgIHIubW92ZUJ5KGl0ZW1PZmZzZXRGb3JB
bGlnbm1lbnQodGV4dFJ1biwgaXRlbVN0eWxlLCBpdGVtRm9udCwgcikpOwogCiAgICAgaWYgKGlz
T3B0aW9uR3JvdXBFbGVtZW50KGVsZW1lbnQpKSB7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBk
ID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CkBAIC00OTIsNyArNDkyLDcgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpwYW5TY3JvbGwoY29uc3QgSW50UAogCiAgICAgaWYgKHlEZWx0YSA+IDAp
CiAgICAgICAgIC8vb2Zmc2V0WSA9IHZpZXcoKS0+dmlld0hlaWdodCgpOwotICAgICAgICBhYnNP
ZmZzZXQubW92ZSgwLCBsaXN0SGVpZ2h0KCkpOworICAgICAgICBhYnNPZmZzZXQubW92ZUJ5KDAs
IGxpc3RIZWlnaHQoKSk7CiAgICAgZWxzZSBpZiAoeURlbHRhIDwgMCkKICAgICAgICAgeURlbHRh
LS07CiAKQEAgLTY5MCw3ICs2OTAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpCiBJbnRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnRyb2xDbGlwUmVjdChjb25zdCBJ
bnRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKIHsKICAgICBJbnRSZWN0IGNsaXBSZWN0
ID0gY29udGVudEJveFJlY3QoKTsKLSAgICBjbGlwUmVjdC5tb3ZlKGFkZGl0aW9uYWxPZmZzZXQp
OworICAgIGNsaXBSZWN0Lm1vdmVCeShhZGRpdGlvbmFsT2Zmc2V0KTsKICAgICByZXR1cm4gY2xp
cFJlY3Q7CiB9CiAKQEAgLTcwMyw3ICs3MDMsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzQWN0
aXZlKCkgY29uc3QKIHZvaWQgUmVuZGVyTGlzdEJveDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3Qo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgSW50UmVj
dCBzY3JvbGxSZWN0ID0gcmVjdDsKLSAgICBzY3JvbGxSZWN0Lm1vdmUod2lkdGgoKSAtIGJvcmRl
clJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCksIGJvcmRlclRvcCgpKTsKKyAgICBzY3JvbGxS
ZWN0Lm1vdmVCeSh3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKSwg
Ym9yZGVyVG9wKCkpOwogICAgIHJlcGFpbnRSZWN0YW5nbGUoc2Nyb2xsUmVjdCk7CiB9CiAKQEAg
LTcxNyw3ICs3MTcsNyBAQCBJbnRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tU2Nyb2xs
CiAKICAgICBpbnQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Ny
b2xsYmFyLT53aWR0aCgpOwogICAgIGludCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKLSAg
ICByZWN0Lm1vdmUoc2Nyb2xsYmFyTGVmdCwgc2Nyb2xsYmFyVG9wKTsKKyAgICByZWN0Lm1vdmVC
eShzY3JvbGxiYXJMZWZ0LCBzY3JvbGxiYXJUb3ApOwogCiAgICAgcmV0dXJuIHZpZXctPmZyYW1l
VmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHRoaXMsIHJlY3QpOwogfQpAQCAtNzMyLDcgKzcz
Miw3IEBAIEludFJlY3QgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250YWkKIAogICAgIGlu
dCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndp
ZHRoKCk7CiAgICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOwotICAgIHJlY3QubW92
ZSgtc2Nyb2xsYmFyTGVmdCwgLXNjcm9sbGJhclRvcCk7CisgICAgcmVjdC5tb3ZlQnkoLXNjcm9s
bGJhckxlZnQsIC1zY3JvbGxiYXJUb3ApOwogICAgIHJldHVybiByZWN0OwogfQogCkBAIC03NDYs
NyArNzQ2LDcgQEAgSW50UG9pbnQgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21TY3JvbAogCiAg
ICAgaW50IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJh
ci0+d2lkdGgoKTsKICAgICBpbnQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7Ci0gICAgcG9p
bnQubW92ZShzY3JvbGxiYXJMZWZ0LCBzY3JvbGxiYXJUb3ApOworICAgIHBvaW50Lm1vdmVCeShz
Y3JvbGxiYXJMZWZ0LCBzY3JvbGxiYXJUb3ApOwogCiAgICAgcmV0dXJuIHZpZXctPmZyYW1lVmll
dygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHRoaXMsIHBvaW50KTsKIH0KQEAgLTc2MSw3ICs3NjEs
NyBAQCBJbnRQb2ludCBSZW5kZXJMaXN0Qm94Ojpjb252ZXJ0RnJvbUNvbnRhCiAKICAgICBpbnQg
c2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0
aCgpOwogICAgIGludCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKLSAgICBwb2ludC5tb3Zl
KC1zY3JvbGxiYXJMZWZ0LCAtc2Nyb2xsYmFyVG9wKTsKKyAgICBwb2ludC5tb3ZlQnkoLXNjcm9s
bGJhckxlZnQsIC1zY3JvbGxiYXJUb3ApOwogICAgIHJldHVybiBwb2ludDsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCShyZXZpc2lvbiA4
NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzOCw3ICszMzgsNyBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjpwb3Np
dGlvbkxpc3RNYXJrZXIoCiAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUxheW91dE92ZXJm
bG93ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKG8tPmhhc1NlbGZQYWludGluZ0xheWVy
KCkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVZpc3VhbE92ZXJmbG93ID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgbWFya2VyUmVjdC5tb3ZlKC1vLT5sb2NhdGlvbigpKTsKKyAgICAg
ICAgICAgICAgICBtYXJrZXJSZWN0Lm1vdmVCeSgtby0+bG9jYXRpb24oKSk7CiAgICAgICAgICAg
ICB9IHdoaWxlIChvICE9IHRoaXMgJiYgcHJvcGFnYXRlVmlzdWFsT3ZlcmZsb3cgJiYgcHJvcGFn
YXRlTGF5b3V0T3ZlcmZsb3cpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gODc5MzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMTEsNyArMTExMSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQo
UGFpbnRJbmZvJiAKIAogICAgIEludFBvaW50IGJveE9yaWdpbih0eCArIHgoKSwgdHkgKyB5KCkp
OwogICAgIEludFJlY3Qgb3ZlcmZsb3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdCgpKTsKLSAgICBv
dmVyZmxvd1JlY3QubW92ZShib3hPcmlnaW4pOworICAgIG92ZXJmbG93UmVjdC5tb3ZlQnkoYm94
T3JpZ2luKTsKICAgICBvdmVyZmxvd1JlY3QuaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUocGFp
bnRJbmZvLnBoYXNlKSk7CiAKICAgICBpZiAoIXBhaW50SW5mby5yZWN0LmludGVyc2VjdHMob3Zl
cmZsb3dSZWN0KSkKQEAgLTExMjAsNyArMTEyMCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6
cGFpbnQoUGFpbnRJbmZvJiAKICAgICBJbnRSZWN0IGJveChib3hPcmlnaW4sIEludFNpemUod2lk
dGgoKSwgaGVpZ2h0KCkpKTsKICAgICAKICAgICBJbnRSZWN0IG1hcmtlciA9IGdldFJlbGF0aXZl
TWFya2VyUmVjdCgpOwotICAgIG1hcmtlci5tb3ZlKGJveE9yaWdpbik7CisgICAgbWFya2VyLm1v
dmVCeShib3hPcmlnaW4pOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJ
bmZvLmNvbnRleHQ7CiAKQEAgLTExMzIsNyArMTEzMiw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtl
cjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faW1hZ2Ut
PmltYWdlKHRoaXMsIG1hcmtlci5zaXplKCkpLmdldCgpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCks
IG1hcmtlcik7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUp
IHsKICAgICAgICAgICAgIEludFJlY3Qgc2VsUmVjdCA9IGxvY2FsU2VsZWN0aW9uUmVjdCgpOwot
ICAgICAgICAgICAgc2VsUmVjdC5tb3ZlKGJveE9yaWdpbik7CisgICAgICAgICAgICBzZWxSZWN0
Lm1vdmVCeShib3hPcmlnaW4pOwogICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qoc2VsUmVj
dCwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgdm9pZCBSZW5k
ZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRl
KCkgIT0gU2VsZWN0aW9uTm9uZSkgewogICAgICAgICBJbnRSZWN0IHNlbFJlY3QgPSBsb2NhbFNl
bGVjdGlvblJlY3QoKTsKLSAgICAgICAgc2VsUmVjdC5tb3ZlKGJveE9yaWdpbik7CisgICAgICAg
IHNlbFJlY3QubW92ZUJ5KGJveE9yaWdpbik7CiAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHNl
bFJlY3QsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkp
OwogICAgIH0KIApAQCAtMTI1Nyw5ICsxMjU3LDkgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpw
YWludChQYWludEluZm8mIAogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKCpjb250ZXh0LCBmYWxzZSk7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKSB7Ci0gICAgICAgIG1hcmtlci5tb3ZlKC1ib3hPcmlnaW4pOworICAgICAgICBt
YXJrZXIubW92ZUJ5KC1ib3hPcmlnaW4pOwogICAgICAgICBtYXJrZXIgPSBtYXJrZXIudHJhbnNw
b3NlZFJlY3QoKTsKLSAgICAgICAgbWFya2VyLm1vdmUoYm94LngoKSwgYm94LnkoKSAtIGxvZ2lj
YWxIZWlnaHQoKSk7CisgICAgICAgIG1hcmtlci5tb3ZlQnkoYm94LngoKSwgYm94LnkoKSAtIGxv
Z2ljYWxIZWlnaHQoKSk7CiAgICAgICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwogICAgICAgICBjb250
ZXh0LT50cmFuc2xhdGUobWFya2VyLngoKSwgbWFya2VyLm1heFkoKSk7CiAgICAgICAgIGNvbnRl
eHQtPnJvdGF0ZShzdGF0aWNfY2FzdDxmbG9hdD4oZGVnMnJhZCg5MC4pKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9sc0No
cm9taXVtLmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVkaWFDb250cm9sc0Nocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcg
KzE0OCw3IEBAIHN0YXRpYyBib29sIHBhaW50TWVkaWFTbGlkZXIoUmVuZGVyT2JqZWMKICAgICBp
ZiAoIWJ1ZmZlcmVkUmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgSW50UG9pbnQgc2xpZGVyVG9w
TGVmdCA9IGJ1ZmZlcmVkUmVjdC5sb2NhdGlvbigpOwogICAgICAgICBJbnRQb2ludCBzbGlkZXJU
b3BSaWdodCA9IHNsaWRlclRvcExlZnQ7Ci0gICAgICAgIHNsaWRlclRvcFJpZ2h0Lm1vdmUoMCwg
YnVmZmVyZWRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgc2xpZGVyVG9wUmlnaHQubW92ZUJ5KDAs
IGJ1ZmZlcmVkUmVjdC5oZWlnaHQoKSk7CiAKICAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBncmFk
aWVudCA9IEdyYWRpZW50OjpjcmVhdGUoc2xpZGVyVG9wTGVmdCwgc2xpZGVyVG9wUmlnaHQpOwog
ICAgICAgICBDb2xvciBzdGFydENvbG9yID0gb2JqZWN0LT5zdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyMyw3ICsxMTIz
LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlRm9jdXNSaW5nUXVhZAogICAgIHNpemVf
dCBjb3VudCA9IHJlY3RzLnNpemUoKTsgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CiAgICAgICAgIEludFJlY3QgcmVjdCA9IHJlY3RzW2ldOwotICAgICAgICByZWN0
Lm1vdmUoLWFic29sdXRlUG9pbnQueCgpLCAtYWJzb2x1dGVQb2ludC55KCkpOworICAgICAgICBy
ZWN0Lm1vdmVCeSgtYWJzb2x1dGVQb2ludC54KCksIC1hYnNvbHV0ZVBvaW50LnkoKSk7CiAgICAg
ICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UXVhZChyZWN0KSkpOwog
ICAgIH0KIH0KQEAgLTEyMjIsNyArMTIyMiw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZXBhaW50
UmVjdGFuZ2xlKGNvbnMKIAogICAgIC8vIEZJWE1FOiBsYXlvdXREZWx0YSBuZWVkcyB0byBiZSBh
cHBsaWVkIGluIHBhcnRzIGJlZm9yZS9hZnRlciB0cmFuc2Zvcm1zIGFuZAogICAgIC8vIHJlcGFp
bnQgY29udGFpbmVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
MzA4Ci0gICAgZGlydHlSZWN0Lm1vdmUodmlldy0+bGF5b3V0RGVsdGEoKSk7CisgICAgZGlydHlS
ZWN0Lm1vdmVCeSh2aWV3LT5sYXlvdXREZWx0YSgpKTsKIAogICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiByZXBhaW50Q29udGFpbmVyID0gY29udGFpbmVyRm9yUmVwYWludCgpOwogICAgIGNvbXB1
dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCBkaXJ0eVJlY3QpOwpAQCAtMTM4NSw3
ICsxMzg1LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmNvbXB1dGVSZWN0Rm9yUmVwYWludAogICAg
ICAgICAgICAgUmVuZGVyQm94KiBib3hQYXJlbnQgPSB0b1JlbmRlckJveChvKTsKIAogICAgICAg
ICAgICAgSW50UmVjdCByZXBhaW50UmVjdChyZWN0KTsKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0
Lm1vdmUoLWJveFBhcmVudC0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCkpOyAvLyBG
b3Igb3ZlcmZsb3c6YXV0by9zY3JvbGwvaGlkZGVuLgorICAgICAgICAgICAgcmVwYWludFJlY3Qu
bW92ZUJ5KC1ib3hQYXJlbnQtPmxheWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsgLy8g
Rm9yIG92ZXJmbG93OmF1dG8vc2Nyb2xsL2hpZGRlbi4KIAogICAgICAgICAgICAgSW50UmVjdCBi
b3hSZWN0KEludFBvaW50KCksIGJveFBhcmVudC0+bGF5ZXIoKS0+c2l6ZSgpKTsKICAgICAgICAg
ICAgIHJlY3QgPSBpbnRlcnNlY3Rpb24ocmVwYWludFJlY3QsIGJveFJlY3QpOwpAQCAtMTk1MCw3
ICsxOTUwLDcgQEAgSW50U2l6ZSBSZW5kZXJPYmplY3Q6Om9mZnNldEZyb21BbmNlc3RvcgogICAg
ICAgICBBU1NFUlQoIWN1cnJDb250YWluZXItPmhhc1RyYW5zZm9ybSgpKTsKICAgICAgICAgSW50
U2l6ZSBjdXJyZW50T2Zmc2V0ID0gY3VyckNvbnRhaW5lci0+b2Zmc2V0RnJvbUNvbnRhaW5lcihu
ZXh0Q29udGFpbmVyLCByZWZlcmVuY2VQb2ludCk7CiAgICAgICAgIG9mZnNldCArPSBjdXJyZW50
T2Zmc2V0OwotICAgICAgICByZWZlcmVuY2VQb2ludC5tb3ZlKGN1cnJlbnRPZmZzZXQpOworICAg
ICAgICByZWZlcmVuY2VQb2ludC5tb3ZlQnkoY3VycmVudE9mZnNldCk7CiAgICAgICAgIGN1cnJD
b250YWluZXIgPSBuZXh0Q29udGFpbmVyOwogICAgIH0gd2hpbGUgKGN1cnJDb250YWluZXIgIT0g
Y29udGFpbmVyKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuY3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lk
IFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBhCiAgICAgLy8gc3Vycm91bmRpbmcg
Y29udGVudC4KICAgICBpZiAoZHJhd1NlbGVjdGlvblRpbnQpIHsKICAgICAgICAgSW50UmVjdCBz
ZWxlY3Rpb25QYWludGluZ1JlY3QgPSBsb2NhbFNlbGVjdGlvblJlY3QoKTsKLSAgICAgICAgc2Vs
ZWN0aW9uUGFpbnRpbmdSZWN0Lm1vdmUodHgsIHR5KTsKKyAgICAgICAgc2VsZWN0aW9uUGFpbnRp
bmdSZWN0Lm1vdmVCeSh0eCwgdHkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZmlsbFJl
Y3Qoc2VsZWN0aW9uUGFpbnRpbmdSZWN0LCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSwgc3R5
bGUoKS0+Y29sb3JTcGFjZSgpKTsKICAgICB9CiB9CkBAIC0zODEsNyArMzgxLDcgQEAgSW50UmVj
dCBSZW5kZXJSZXBsYWNlZDo6Y2xpcHBlZE92ZXJmbG93UgogICAgIGlmICh2KSB7CiAgICAgICAg
IC8vIEZJWE1FOiBsYXlvdXREZWx0YSBuZWVkcyB0byBiZSBhcHBsaWVkIGluIHBhcnRzIGJlZm9y
ZS9hZnRlciB0cmFuc2Zvcm1zIGFuZAogICAgICAgICAvLyByZXBhaW50IGNvbnRhaW5lcnMuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzMwOAotICAgICAgICByLm1v
dmUodi0+bGF5b3V0RGVsdGEoKSk7CisgICAgICAgIHIubW92ZUJ5KHYtPmxheW91dERlbHRhKCkp
OwogICAgIH0KIAogICAgIGlmIChzdHlsZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYyLDcgKzQ2Miw3
IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICAgICAgSW50
UmVjdCBvdmVyZmxvd0JveCA9IHZpc3VhbE92ZXJmbG93UmVjdCgpOwogICAgICAgICBmbGlwRm9y
V3JpdGluZ01vZGUob3ZlcmZsb3dCb3gpOwogICAgICAgICBvdmVyZmxvd0JveC5pbmZsYXRlKG1h
eGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpKTsKLSAgICAgICAgb3ZlcmZsb3dCb3gu
bW92ZSh0eCwgdHkpOworICAgICAgICBvdmVyZmxvd0JveC5tb3ZlQnkodHgsIHR5KTsKICAgICAg
ICAgaWYgKCFvdmVyZmxvd0JveC5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC01NDIsMTEgKzU0MiwxMSBAQCB2b2lkIFJlbmRlclRhYmxl
OjpzdWJ0cmFjdENhcHRpb25SZWN0KEluCiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpIHsKICAgICAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIGNh
cHRpb25Mb2dpY2FsSGVpZ2h0KTsKICAgICAgICAgaWYgKGNhcHRpb25Jc0JlZm9yZSkKLSAgICAg
ICAgICAgIHJlY3QubW92ZSgwLCBjYXB0aW9uTG9naWNhbEhlaWdodCk7CisgICAgICAgICAgICBy
ZWN0Lm1vdmVCeSgwLCBjYXB0aW9uTG9naWNhbEhlaWdodCk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgcmVjdC5zZXRXaWR0aChyZWN0LndpZHRoKCkgLSBjYXB0aW9uTG9naWNhbEhlaWdodCk7CiAg
ICAgICAgIGlmIChjYXB0aW9uSXNCZWZvcmUpCi0gICAgICAgICAgICByZWN0Lm1vdmUoY2FwdGlv
bkxvZ2ljYWxIZWlnaHQsIDApOworICAgICAgICAgICAgcmVjdC5tb3ZlQnkoY2FwdGlvbkxvZ2lj
YWxIZWlnaHQsIDApOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3
ICsyODEsNyBAQCBJbnRSZWN0IFJlbmRlclRhYmxlQ2VsbDo6Y2xpcHBlZE92ZXJmbG93CiAgICAg
aWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpIHsKICAgICAgICAgLy8gRklYTUU6IGxheW91dERl
bHRhIG5lZWRzIHRvIGJlIGFwcGxpZWQgaW4gcGFydHMgYmVmb3JlL2FmdGVyIHRyYW5zZm9ybXMg
YW5kCiAgICAgICAgIC8vIHJlcGFpbnQgY29udGFpbmVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIzMzA4Ci0gICAgICAgIHIubW92ZSh2LT5sYXlvdXREZWx0YSgp
KTsKKyAgICAgICAgci5tb3ZlQnkodi0+bGF5b3V0RGVsdGEoKSk7CiAgICAgfQogICAgIGNvbXB1
dGVSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFpbmVyLCByKTsKICAgICByZXR1cm4gcjsKQEAg
LTI5NCw3ICsyOTQsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZVJlY3RGb3JSZXBh
CiAgICAgci5zZXRZKHIueSgpKTsKICAgICBSZW5kZXJWaWV3KiB2ID0gdmlldygpOwogICAgIGlm
ICgoIXYgfHwgIXYtPmxheW91dFN0YXRlRW5hYmxlZCgpIHx8IHJlcGFpbnRDb250YWluZXIpICYm
IHBhcmVudCgpKQotICAgICAgICByLm1vdmUoLXBhcmVudEJveCgpLT5sb2NhdGlvbigpKTsgLy8g
Um93cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRoZWly
IG9mZnNldCBpbi4KKyAgICAgICAgci5tb3ZlQnkoLXBhcmVudEJveCgpLT5sb2NhdGlvbigpKTsg
Ly8gUm93cyBhcmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSwgc28gZG9uJ3QgYWRkIHRo
ZWlyIG9mZnNldCBpbi4KICAgICBSZW5kZXJCbG9jazo6Y29tcHV0ZVJlY3RGb3JSZXBhaW50KHJl
cGFpbnRDb250YWluZXIsIHIsIGZpeGVkKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk2Miw3ICs5NjIsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRP
YmplY3QoUGFpCiAgICAgdW5zaWduZWQgZW5kcm93ID0gdG90YWxSb3dzOwogCiAgICAgSW50UmVj
dCBsb2NhbFJlcGFpbnRSZWN0ID0gcGFpbnRJbmZvLnJlY3Q7Ci0gICAgbG9jYWxSZXBhaW50UmVj
dC5tb3ZlKC10eCwgLXR5KTsKKyAgICBsb2NhbFJlcGFpbnRSZWN0Lm1vdmVCeSgtdHgsIC10eSk7
CiAgICAgaWYgKHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHsKICAgICAg
ICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBs
b2NhbFJlcGFpbnRSZWN0LnNldFkoaGVpZ2h0KCkgLSBsb2NhbFJlcGFpbnRSZWN0Lm1heFkoKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpw
YWludCgKICAgICAgICAgY29udGVudHNSZWN0LnNldFkoKGhlaWdodCgpIC0gY29udGVudHNSZWN0
LmhlaWdodCgpKSAvIDIpOwogCiAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJlY3QgaW50byB0aGUg
Y29vcmRzIHVzZWQgZm9yIHBhaW50aW5nIHRoZSBjb250ZW50Ci0gICAgICAgIGNvbnRlbnRzUmVj
dC5tb3ZlKHR4ICsgeCgpLCB0eSArIHkoKSk7CisgICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlQnko
dHggKyB4KCksIHR5ICsgeSgpKTsKICAgICAgICAgdGhlbWUoKS0+cGFpbnRDYXBzTG9ja0luZGlj
YXRvcih0aGlzLCBwYWludEluZm8sIGNvbnRlbnRzUmVjdCk7CiAgICAgfQogfQpAQCAtMzY1LDcg
KzM2NSw3IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpub2RlQXQKICAgICBS
ZW5kZXJCb3gqIGlubmVyVGV4dFJlbmRlcmVyID0gaW5uZXJUZXh0RWxlbWVudCgpLT5yZW5kZXJC
b3goKTsKIAogICAgIEludFBvaW50IGxvY2FsUG9pbnQgPSByZXN1bHQubG9jYWxQb2ludCgpOwot
ICAgIGxvY2FsUG9pbnQubW92ZSgtaW5uZXJCbG9ja1JlbmRlcmVyLT5sb2NhdGlvbigpKTsKKyAg
ICBsb2NhbFBvaW50Lm1vdmVCeSgtaW5uZXJCbG9ja1JlbmRlcmVyLT5sb2NhdGlvbigpKTsKIAog
ICAgIGludCB0ZXh0TGVmdCA9IHR4ICsgeCgpICsgaW5uZXJCbG9ja1JlbmRlcmVyLT54KCkgKyBp
bm5lclRleHRSZW5kZXJlci0+eCgpOwogICAgIGlmIChyZXN1bHRzQnV0dG9uICYmIHJlc3VsdHNC
dXR0b24tPnJlbmRlcmVyKCkgJiYgcG9pbnRJbkNvbnRhaW5lci54KCkgPCB0ZXh0TGVmdCkKQEAg
LTM4Nyw3ICszODcsNyBAQCBib29sIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bm9kZUF0
CiAKICAgICBpZiAoaW5uZXJOb2RlKSB7CiAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoaW5u
ZXJOb2RlKTsKLSAgICAgICAgbG9jYWxQb2ludC5tb3ZlKC1pbm5lck5vZGUtPnJlbmRlckJveCgp
LT5sb2NhdGlvbigpKTsKKyAgICAgICAgbG9jYWxQb2ludC5tb3ZlQnkoLWlubmVyTm9kZS0+cmVu
ZGVyQm94KCktPmxvY2F0aW9uKCkpOwogICAgIH0KIAogICAgIHJlc3VsdC5zZXRMb2NhbFBvaW50
KGxvY2FsUG9pbnQpOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIEludFJlY3QgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpjb24KICAgICBBU1NFUlQoaGFzQ29udHJvbENsaXAoKSk7CiAKICAgICBJ
bnRSZWN0IGNsaXBSZWN0ID0gSW50UmVjdChpbm5lckJsb2NrRWxlbWVudCgpLT5yZW5kZXJCb3go
KS0+ZnJhbWVSZWN0KCkpOwotICAgIGNsaXBSZWN0Lm1vdmUoYWRkaXRpb25hbE9mZnNldCk7Cisg
ICAgY2xpcFJlY3QubW92ZUJ5KGFkZGl0aW9uYWxPZmZzZXQpOwogICAgIHJldHVybiBjbGlwUmVj
dDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEuY3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2NCw5ICsyNjQsOSBAQCBJbnRSZWN0IFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhOjpjb252ZXJ0
CiAgICAgLy8gQ29tcHV0ZSBhbiBvZmZzZXQgYmV0d2VlbiB0aGUgcGFydCByZW5kZXJlciBhbmQg
dGhlIGlucHV0IHJlbmRlcmVyLgogICAgIEludFNpemUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIg
PSAtKHBhcnRSZW5kZXJlci0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVy
ZXIpKTsKICAgICAvLyBNb3ZlIHRoZSByZWN0IGludG8gcGFydFJlbmRlcmVyJ3MgY29vcmRzLgot
ICAgIHBhcnRSZWN0Lm1vdmUob2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIpOworICAgIHBhcnRSZWN0
Lm1vdmVCeShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CiAgICAgLy8gQWNjb3VudCBmb3IgdGhl
IGxvY2FsIGRyYXdpbmcgb2Zmc2V0LgotICAgIHBhcnRSZWN0Lm1vdmUobG9jYWxPZmZzZXQueCgp
LCBsb2NhbE9mZnNldC55KCkpOworICAgIHBhcnRSZWN0Lm1vdmVCeShsb2NhbE9mZnNldC54KCks
IGxvY2FsT2Zmc2V0LnkoKSk7CiAKICAgICByZXR1cm4gcGFydFJlY3Q7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiA4NzkzMikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTU4LDkgKzU1OCw5IEBAIEZsb2F0UmVjdCBSZW5kZXJUaGVtZU1hYzo6Y29udmVy
dFRvUGFpbnQKICAgICAvLyBJZiB0aGUgaW5wdXQgcmVuZGVyZXIgd2FzIG5vdCBhIGNvbnRhaW5l
ciwgc29tZXRoaW5nIHdlbnQgd3JvbmcKICAgICBBU1NFUlQocmVuZGVyZXIgPT0gaW5wdXRSZW5k
ZXJlcik7CiAgICAgLy8gTW92ZSB0aGUgcmVjdCBpbnRvIHBhcnRSZW5kZXJlcidzIGNvb3Jkcwot
ICAgIHBhcnRSZWN0Lm1vdmUob2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIpOworICAgIHBhcnRSZWN0
Lm1vdmVCeShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CiAgICAgLy8gQWNjb3VudCBmb3IgdGhl
IGxvY2FsIGRyYXdpbmcgb2Zmc2V0ICh0eCwgdHkpCi0gICAgcGFydFJlY3QubW92ZShyLngoKSwg
ci55KCkpOworICAgIHBhcnRSZWN0Lm1vdmVCeShyLngoKSwgci55KCkpOwogCiAgICAgcmV0dXJu
IHBhcnRSZWN0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
V2luQ0UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZVdpbkNFLmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5Miw3ICs1OTIsNyBA
QCBib29sIFJlbmRlclRoZW1lV2luQ0U6OnBhaW50TWVkaWFQbGF5QnV0CiAgICAgICAgIGZsb2F0
IHdpZHRoID0gaW1SZWN0LndpZHRoKCk7CiAgICAgICAgIGltUmVjdC5zZXRXaWR0aCh3aWR0aCAv
IDMuMCk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChpbVJlY3QpOwotICAg
ICAgICBpbVJlY3QubW92ZSgyLjAgKiB3aWR0aCAvIDMuMCwgMCk7CisgICAgICAgIGltUmVjdC5t
b3ZlQnkoMi4wICogd2lkdGggLyAzLjAsIDApOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+
ZmlsbFJlY3QoaW1SZWN0KTsKICAgICB9IGVsc2UgewogICAgICAgICBGbG9hdFBvaW50IHB0c1sz
XSA9IHsgRmxvYXRQb2ludChpbVJlY3QueCgpLCBpbVJlY3QueSgpKSwgRmxvYXRQb2ludChpbVJl
Y3QubWF4WCgpLCAoaW1SZWN0LnkoKSArIGltUmVjdC5tYXhZKCkpIC8gMi4wKSwgRmxvYXRQb2lu
dChpbVJlY3QueCgpLCBpbVJlY3QubWF4WSgpKSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFJlbmRlclRyZWVBc1RleHQ6OndyaXRlUmVuZGVyT2Jq
ZWN0CiAKICAgICAvLyBGSVhNRTogVGVtcG9yYXJ5IGluIG9yZGVyIHRvIGVuc3VyZSBjb21wYXRp
YmlsaXR5IHdpdGggZXhpc3RpbmcgbGF5b3V0IHRlc3QgcmVzdWx0cy4KICAgICBpZiAoYWRqdXN0
Rm9yVGFibGVDZWxscykKLSAgICAgICAgci5tb3ZlKDAsIC10b1JlbmRlclRhYmxlQ2VsbChvLmNv
bnRhaW5pbmdCbG9jaygpKS0+aW50cmluc2ljUGFkZGluZ0JlZm9yZSgpKTsKKyAgICAgICAgci5t
b3ZlQnkoMCwgLXRvUmVuZGVyVGFibGVDZWxsKG8uY29udGFpbmluZ0Jsb2NrKCkpLT5pbnRyaW5z
aWNQYWRkaW5nQmVmb3JlKCkpOwogCiAgICAgdHMgPDwgIiAiIDw8IHI7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjgsMTIgKzE2OCwxMiBAQCBJbnRSZWN0IFJlbmRlclZpZGVvOjp2aWRlb0JveCgpIGNvbnN0
CiAgICAgICAgIC8vIEp1c3QgZmlsbCB0aGUgd2hvbGUgYXJlYSBpZiB0aGUgZGlmZmVyZW5jZSBp
cyBvbmUgcGl4ZWwgb3IgbGVzcyAoaW4gYm90aCBzaWRlcykKICAgICAgICAgaWYgKHJlbmRlckJv
eC53aWR0aCgpIC0gbmV3V2lkdGggPiAyKQogICAgICAgICAgICAgcmVuZGVyQm94LnNldFdpZHRo
KG5ld1dpZHRoKTsKLSAgICAgICAgcmVuZGVyQm94Lm1vdmUoKGNvbnRlbnRSZWN0LndpZHRoKCkg
LSByZW5kZXJCb3gud2lkdGgoKSkgLyAyLCAwKTsKKyAgICAgICAgcmVuZGVyQm94Lm1vdmVCeSgo
Y29udGVudFJlY3Qud2lkdGgoKSAtIHJlbmRlckJveC53aWR0aCgpKSAvIDIsIDApOwogICAgIH0g
ZWxzZSBpZiAocmF0aW8gPCAwKSB7CiAgICAgICAgIGludCBuZXdIZWlnaHQgPSByZW5kZXJCb3gu
d2lkdGgoKSAqIGVsZW1lbnRTaXplLmhlaWdodCgpIC8gZWxlbWVudFNpemUud2lkdGgoKTsKICAg
ICAgICAgaWYgKHJlbmRlckJveC5oZWlnaHQoKSAtIG5ld0hlaWdodCA+IDIpCiAgICAgICAgICAg
ICByZW5kZXJCb3guc2V0SGVpZ2h0KG5ld0hlaWdodCk7Ci0gICAgICAgIHJlbmRlckJveC5tb3Zl
KDAsIChjb250ZW50UmVjdC5oZWlnaHQoKSAtIHJlbmRlckJveC5oZWlnaHQoKSkgLyAyKTsKKyAg
ICAgICAgcmVuZGVyQm94Lm1vdmVCeSgwLCAoY29udGVudFJlY3QuaGVpZ2h0KCkgLSByZW5kZXJC
b3guaGVpZ2h0KCkpIC8gMik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlbmRlckJveDsKQEAgLTE5
OCw3ICsxOTgsNyBAQCB2b2lkIFJlbmRlclZpZGVvOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAg
ICAgSW50UmVjdCByZWN0ID0gdmlkZW9Cb3goKTsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICByZWN0Lm1vdmUodHgsIHR5KTsKKyAgICByZWN0Lm1vdmVCeSh0
eCwgdHkpOwogCiAgICAgaWYgKGRpc3BsYXlpbmdQb3N0ZXIpCiAgICAgICAgIHBhaW50SW50b1Jl
Y3QocGFpbnRJbmZvLmNvbnRleHQsIHJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MywxMSArMjczLDExIEBA
IHZvaWQgUmVuZGVyVmlldzo6cmVwYWludFZpZXdSZWN0YW5nbGUoY28KICAgICAgICAgCiAgICAg
ICAgIC8vIFN1YnRyYWN0IG91dCB0aGUgY29udGVudHNYIGFuZCBjb250ZW50c1kgb2Zmc2V0cyB0
byBnZXQgb3VyIGNvb3JkcyB3aXRoaW4gdGhlIHZpZXdpbmcKICAgICAgICAgLy8gcmVjdGFuZ2xl
LgotICAgICAgICByLm1vdmUoLXZyLmxvY2F0aW9uKCkpOworICAgICAgICByLm1vdmVCeSgtdnIu
bG9jYXRpb24oKSk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTogSGFyZGNvZGVkIG9mZnNl
dHMgaGVyZSBhcmUgbm90IGdvb2QuCi0gICAgICAgIHIubW92ZShvYmotPmJvcmRlckxlZnQoKSAr
IG9iai0+cGFkZGluZ0xlZnQoKSwKLSAgICAgICAgICAgICAgIG9iai0+Ym9yZGVyVG9wKCkgKyBv
YmotPnBhZGRpbmdUb3AoKSk7CisgICAgICAgIHIubW92ZUJ5KG9iai0+Ym9yZGVyTGVmdCgpICsg
b2JqLT5wYWRkaW5nTGVmdCgpLAorICAgICAgICAgICAgICAgICBvYmotPmJvcmRlclRvcCgpICsg
b2JqLT5wYWRkaW5nVG9wKCkpOwogICAgICAgICBvYmotPnJlcGFpbnRSZWN0YW5nbGUociwgaW1t
ZWRpYXRlKTsKICAgICB9CiB9CkBAIC0zMTQsNyArMzE0LDcgQEAgdm9pZCBSZW5kZXJWaWV3Ojpj
b21wdXRlUmVjdEZvclJlcGFpbnQoUgogICAgIH0KIAogICAgIGlmIChmaXhlZCAmJiBtX2ZyYW1l
VmlldykKLSAgICAgICAgcmVjdC5tb3ZlKG1fZnJhbWVWaWV3LT5zY3JvbGxYRm9yRml4ZWRQb3Np
dGlvbigpLCBtX2ZyYW1lVmlldy0+c2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSk7CisgICAgICAg
IHJlY3QubW92ZUJ5KG1fZnJhbWVWaWV3LT5zY3JvbGxYRm9yRml4ZWRQb3NpdGlvbigpLCBtX2Zy
YW1lVmlldy0+c2Nyb2xsWUZvckZpeGVkUG9zaXRpb24oKSk7CiAgICAgICAgIAogICAgIC8vIEFw
cGx5IG91ciB0cmFuc2Zvcm0gaWYgd2UgaGF2ZSBvbmUgKGJlY2F1c2Ugb2YgZnVsbCBwYWdlIHpv
b21pbmcpLgogICAgIGlmICghcmVwYWludENvbnRhaW5lciAmJiBtX2xheWVyICYmIG1fbGF5ZXIt
PnRyYW5zZm9ybSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw3ICsyOTcsNyBAQCB2b2lkIFJlbmRl
cldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWluCiAgICAgICAgICAgICAvLyBub3QgdGhlIHJv
b3QuIEluIHRoaXMgY2FzZSwgc2hpZnQgdGhlIENUTSBhbmQgYWRqdXN0IHRoZSBwYWludFJlY3Qg
dG8gYmUgcm9vdC1yZWxhdGl2ZSB0byBmaXggcGx1Zy1pbiBkcmF3aW5nLgogICAgICAgICAgICAg
aWYgKCFwYWludE9mZnNldC5pc1plcm8oKSkgewogICAgICAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUocGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIHBhaW50UmVj
dC5tb3ZlKC1wYWludE9mZnNldCk7CisgICAgICAgICAgICAgICAgcGFpbnRSZWN0Lm1vdmVCeSgt
cGFpbnRPZmZzZXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV93aWRnZXQtPnBhaW50
KHBhaW50SW5mby5jb250ZXh0LCBwYWludFJlY3QpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM3
LDcgKzMzNyw3IEBAIEdhcFJlY3RzIFJvb3RJbmxpbmVCb3g6OmxpbmVTZWxlY3Rpb25HYXAKICAg
ICAgICAgZm9yIChJbmxpbmVCb3gqIGJveCA9IGZpcnN0Qm94LT5uZXh0TGVhZkNoaWxkKCk7IGJv
eDsgYm94ID0gYm94LT5uZXh0TGVhZkNoaWxkKCkpIHsKICAgICAgICAgICAgIGlmIChib3gtPnNl
bGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CiAgICAgICAg
ICAgICAgICAgSW50UmVjdCBsb2dpY2FsUmVjdChsYXN0TG9naWNhbExlZnQsIHNlbFRvcCwgYm94
LT5sb2dpY2FsTGVmdCgpIC0gbGFzdExvZ2ljYWxMZWZ0LCBzZWxIZWlnaHQpOwotICAgICAgICAg
ICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUocmVuZGVyZXIoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBJbnRTaXplKG9mZnNldEZyb21Sb290QmxvY2su
aGVpZ2h0KCksIG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSkpOworICAgICAgICAgICAgICAg
IGxvZ2ljYWxSZWN0Lm1vdmVCeShyZW5kZXJlcigpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gb2Zmc2V0RnJvbVJvb3RCbG9jayA6IEludFNpemUob2Zmc2V0RnJvbVJvb3RCbG9jay5oZWln
aHQoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpKSk7CiAgICAgICAgICAgICAgICAgSW50
UmVjdCBnYXBSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24sIGxvZ2ljYWxSZWN0KTsKICAgICAgICAgICAgICAgICBpZiAo
aXNQcmV2aW91c0JveFNlbGVjdGVkICYmIGdhcFJlY3Qud2lkdGgoKSA+IDAgJiYgZ2FwUmVjdC5o
ZWlnaHQoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhaW50SW5mbyAmJiBib3gt
PnBhcmVudCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcAkocmV2
aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIHZvaWQgVHJhbnNmb3JtU3RhdGU6
Om1vdmUoaW50IHgsIGludCB5LCAKICAgICAgICAgICAgIGZsYXR0ZW4oKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyBKdXN0IG1vdmUgdGhlIHBvaW50IGFuZCwgb3B0aW9uYWxseSwgdGhlIHF1
YWQuCi0gICAgICAgIG1fbGFzdFBsYW5hclBvaW50Lm1vdmUoeCwgeSk7CisgICAgICAgIG1fbGFz
dFBsYW5hclBvaW50Lm1vdmVCeSh4LCB5KTsKICAgICAgICAgaWYgKG1fbWFwUXVhZCkKLSAgICAg
ICAgICAgIG1fbGFzdFBsYW5hclF1YWQubW92ZSh4LCB5KTsKKyAgICAgICAgICAgIG1fbGFzdFBs
YW5hclF1YWQubW92ZUJ5KHgsIHkpOwogICAgIH0KICAgICBtX2FjY3VtdWxhdGluZ1RyYW5zZm9y
bSA9IGFjY3VtdWxhdGUgPT0gQWNjdW11bGF0ZVRyYW5zZm9ybTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TaGFkb3dEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU2hhZG93RGF0YS5jcHAJKHJldmlzaW9uIDg3OTMy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NoYWRvd0RhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgU2hhZG93RGF0YTo6YWRqdXN0UmVjdEZv
clNoYWRvdyhJbnQKICAgICBpbnQgc2hhZG93Qm90dG9tID0gMDsKICAgICBjYWxjdWxhdGVTaGFk
b3dFeHRlbnQodGhpcywgYWRkaXRpb25hbE91dGxpbmVTaXplLCBzaGFkb3dMZWZ0LCBzaGFkb3dS
aWdodCwgc2hhZG93VG9wLCBzaGFkb3dCb3R0b20pOwogCi0gICAgcmVjdC5tb3ZlKHNoYWRvd0xl
ZnQsIHNoYWRvd1RvcCk7CisgICAgcmVjdC5tb3ZlQnkoc2hhZG93TGVmdCwgc2hhZG93VG9wKTsK
ICAgICByZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgoKSAtIHNoYWRvd0xlZnQgKyBzaGFkb3dSaWdo
dCk7CiAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIHNoYWRvd1RvcCArIHNoYWRv
d0JvdHRvbSk7CiB9CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgU2hhZG93RGF0YTo6YWRqdXN0UmVj
dEZvclNoYWRvdyhGbG8KICAgICBpbnQgc2hhZG93Qm90dG9tID0gMDsKICAgICBjYWxjdWxhdGVT
aGFkb3dFeHRlbnQodGhpcywgYWRkaXRpb25hbE91dGxpbmVTaXplLCBzaGFkb3dMZWZ0LCBzaGFk
b3dSaWdodCwgc2hhZG93VG9wLCBzaGFkb3dCb3R0b20pOwogCi0gICAgcmVjdC5tb3ZlKHNoYWRv
d0xlZnQsIHNoYWRvd1RvcCk7CisgICAgcmVjdC5tb3ZlQnkoc2hhZG93TGVmdCwgc2hhZG93VG9w
KTsKICAgICByZWN0LnNldFdpZHRoKHJlY3Qud2lkdGgoKSAtIHNoYWRvd0xlZnQgKyBzaGFkb3dS
aWdodCk7CiAgICAgcmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAtIHNoYWRvd1RvcCArIHNo
YWRvd0JvdHRvbSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0lubGluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdJbmxpbmVU
ZXh0Ojpwb3MKIAogICAgIC8vIE1hcCBsb2NhbCBwb2ludCB0byBhYnNvbHV0ZSBwb2ludCwgYXMg
dGhlIGNoYXJhY3RlciBvcmlnaW5zIHN0b3JlZCBpbiB0aGUgdGV4dCBmcmFnbWVudHMgdXNlIGFi
c29sdXRlIGNvb3JkaW5hdGVzLgogICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVQb2ludChwb2ludCk7
Ci0gICAgYWJzb2x1dGVQb2ludC5tb3ZlKGNvbnRhaW5pbmdCbG9jay0+eCgpLCBjb250YWluaW5n
QmxvY2stPnkoKSk7CisgICAgYWJzb2x1dGVQb2ludC5tb3ZlQnkoY29udGFpbmluZ0Jsb2NrLT54
KCksIGNvbnRhaW5pbmdCbG9jay0+eSgpKTsKIAogICAgIGZsb2F0IGNsb3Nlc3REaXN0YW5jZSA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKICAgICBmbG9hdCBjbG9zZXN0RGlz
dGFuY2VQb3NpdGlvbiA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAyLDcgKzEwMiw3IEBAIEZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25S
ZWMKICAgICBpZiAoc2NhbGluZ0ZhY3RvciAhPSAxKQogICAgICAgICB0ZXh0T3JpZ2luLnNjYWxl
KHNjYWxpbmdGYWN0b3IsIHNjYWxpbmdGYWN0b3IpOwogCi0gICAgdGV4dE9yaWdpbi5tb3ZlKDAs
IC1zY2FsZWRGb250TWV0cmljcy5mbG9hdEFzY2VudCgpKTsKKyAgICB0ZXh0T3JpZ2luLm1vdmVC
eSgwLCAtc2NhbGVkRm9udE1ldHJpY3MuZmxvYXRBc2NlbnQoKSk7CiAKICAgICBGbG9hdFJlY3Qg
c2VsZWN0aW9uUmVjdCA9IHNjYWxlZEZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3RydWN0
VGV4dFJ1bihzdHlsZSwgZnJhZ21lbnQpLCB0ZXh0T3JpZ2luLCBmcmFnbWVudC5oZWlnaHQgKiBz
Y2FsaW5nRmFjdG9yLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAgICAgaWYgKHNjYWxp
bmdGYWN0b3IgPT0gMSkKQEAgLTU4NCw3ICs1ODQsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6
OnBhaW50RGVjb3JhdGlvbldpCiAgICAgICAgIGNvbnRleHQtPnNldENUTShuZXdUcmFuc2Zvcm0p
OwogICAgIH0KIAotICAgIGRlY29yYXRpb25PcmlnaW4ubW92ZSgwLCAtc2NhbGVkRm9udE1ldHJp
Y3MuZmxvYXRBc2NlbnQoKSArIHBvc2l0aW9uT2Zmc2V0Rm9yRGVjb3JhdGlvbihkZWNvcmF0aW9u
LCBzY2FsZWRGb250TWV0cmljcywgdGhpY2tuZXNzKSk7CisgICAgZGVjb3JhdGlvbk9yaWdpbi5t
b3ZlQnkoMCwgLXNjYWxlZEZvbnRNZXRyaWNzLmZsb2F0QXNjZW50KCkgKyBwb3NpdGlvbk9mZnNl
dEZvckRlY29yYXRpb24oZGVjb3JhdGlvbiwgc2NhbGVkRm9udE1ldHJpY3MsIHRoaWNrbmVzcykp
OwogCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUmVjdChGbG9hdFJlY3QoZGVjb3JhdGlv
bk9yaWdpbiwgRmxvYXRTaXplKHdpZHRoLCB0aGlja25lc3MpKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCShyZXZpc2lvbiA4NzkzMikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQwLDkgKzM0MCw5IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpzdGFydFBvc2l0
aW9uT2ZDaGFyYWMKICAgICBpZiAoc3RhcnRQb3NpdGlvbikgewogICAgICAgICBTVkdUZXh0TWV0
cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVy
eURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0LCBzdGFydFBvc2l0
aW9uKTsKICAgICAgICAgaWYgKHF1ZXJ5RGF0YS0+aXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAg
ICBkYXRhLT5zdGFydFBvc2l0aW9uLm1vdmUoMCwgbWV0cmljcy5oZWlnaHQoKSk7CisgICAgICAg
ICAgICBkYXRhLT5zdGFydFBvc2l0aW9uLm1vdmVCeSgwLCBtZXRyaWNzLmhlaWdodCgpKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YS0+c3RhcnRQb3NpdGlvbi5tb3ZlKG1ldHJpY3Mu
d2lkdGgoKSwgMCk7CisgICAgICAgICAgICBkYXRhLT5zdGFydFBvc2l0aW9uLm1vdmVCeShtZXRy
aWNzLndpZHRoKCksIDApOwogICAgIH0KIAogICAgIEFmZmluZVRyYW5zZm9ybSBmcmFnbWVudFRy
YW5zZm9ybTsKQEAgLTM4OCw5ICszODgsOSBAQCBib29sIFNWR1RleHRRdWVyeTo6ZW5kUG9zaXRp
b25PZkNoYXJhY3RlCiAKICAgICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0gU1ZHVGV4dE1ldHJp
Y3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVyeURhdGEtPnRleHRSZW5kZXJlciwgZnJhZ21l
bnQuY2hhcmFjdGVyT2Zmc2V0LCBzdGFydFBvc2l0aW9uICsgMSk7CiAgICAgaWYgKHF1ZXJ5RGF0
YS0+aXNWZXJ0aWNhbFRleHQpCi0gICAgICAgIGRhdGEtPmVuZFBvc2l0aW9uLm1vdmUoMCwgbWV0
cmljcy5oZWlnaHQoKSk7CisgICAgICAgIGRhdGEtPmVuZFBvc2l0aW9uLm1vdmVCeSgwLCBtZXRy
aWNzLmhlaWdodCgpKTsKICAgICBlbHNlCi0gICAgICAgIGRhdGEtPmVuZFBvc2l0aW9uLm1vdmUo
bWV0cmljcy53aWR0aCgpLCAwKTsKKyAgICAgICAgZGF0YS0+ZW5kUG9zaXRpb24ubW92ZUJ5KG1l
dHJpY3Mud2lkdGgoKSwgMCk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zv
cm07CiAgICAgZnJhZ21lbnQuYnVpbGRGcmFnbWVudFRyYW5zZm9ybShmcmFnbWVudFRyYW5zZm9y
bSwgU1ZHVGV4dEZyYWdtZW50OjpUcmFuc2Zvcm1JZ25vcmluZ1RleHRMZW5ndGgpOwpAQCAtNDc1
LDkgKzQ3NSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVHbHlwaEJvdW5kYXIKICAg
ICBpZiAoc3RhcnRQb3NpdGlvbikgewogICAgICAgICBTVkdUZXh0TWV0cmljcyBtZXRyaWNzID0g
U1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZShxdWVyeURhdGEtPnRleHRSZW5k
ZXJlciwgZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0LCBzdGFydFBvc2l0aW9uKTsKICAgICAgICAg
aWYgKHF1ZXJ5RGF0YS0+aXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICBleHRlbnQubW92ZSgw
LCBtZXRyaWNzLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGV4dGVudC5tb3ZlQnkoMCwgbWV0cmlj
cy5oZWlnaHQoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4dGVudC5tb3ZlKG1ldHJp
Y3Mud2lkdGgoKSwgMCk7CisgICAgICAgICAgICBleHRlbnQubW92ZUJ5KG1ldHJpY3Mud2lkdGgo
KSwgMCk7CiAgICAgfQogCiAgICAgU1ZHVGV4dE1ldHJpY3MgbWV0cmljcyA9IFNWR1RleHRNZXRy
aWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFuZ2UocXVlcnlEYXRhLT50ZXh0UmVuZGVyZXIsIGZyYWdt
ZW50LmNoYXJhY3Rlck9mZnNldCArIHN0YXJ0UG9zaXRpb24sIDEpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
Niw5ICszOTYsOSBAQCB2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3VGV4CiAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQot
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQubW92ZSgwLjBmLCBpZGVudGlmaWVyLnZl
cnRpY2FsQWR2YW5jZVkgKiBzY2FsZSk7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2lu
dC5tb3ZlQnkoMC4wZiwgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZICogc2NhbGUpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvaW50Lm1vdmUo
aWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2FsZSwgMC4wZik7CisgICAgICAgICAg
ICAgICAgICAgIGN1cnJlbnRQb2ludC5tb3ZlQnkoaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5j
ZVggKiBzY2FsZSwgMC4wZik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IC8vIEhhbmRsZSBzeXN0ZW0gZm9udCBmYWxsYmFjawogICAgICAgICAgICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24oZm9udC5mb250RGVzY3JpcHRpb24oKSk7CkBAIC00MTIs
OSArNDEyLDkgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1RleAogICAg
ICAgICAgICAgICAgIGZvbnQuZHJhd1RleHQoY29udGV4dCwgZmFsbGJhY2tDaGFyYWN0ZXJSdW4s
IGN1cnJlbnRQb2ludCk7CiAKICAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0g
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2ludC5tb3ZlKDAuMGYsIGZvbnQud2lkdGgoZmFs
bGJhY2tDaGFyYWN0ZXJSdW4pKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvaW50Lm1v
dmVCeSgwLjBmLCBmb250LndpZHRoKGZhbGxiYWNrQ2hhcmFjdGVyUnVuKSk7CiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQubW92ZShmb250Lndp
ZHRoKGZhbGxiYWNrQ2hhcmFjdGVyUnVuKSwgMC4wZik7CisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRQb2ludC5tb3ZlQnkoZm9udC53aWR0aChmYWxsYmFja0NoYXJhY3RlclJ1biksIDAuMGYp
OwogCiAgICAgICAgICAgICAgICAgZmFsbGJhY2tDaGFyYWN0ZXJJbmRleCsrOwogICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5kZXIuY3BwCShyZXZpc2lvbiA4
NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDcgKzc0LDcgQEAgRmxvYXRQb2ludCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRB
bmltYXRlZAogICAgIGlmIChtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAg
ICAgIGFuaW1hdGVkUG9pbnQgKz0gbV90b0N1cnJlbnRQb2ludDsKICAgICBlbHNlCi0gICAgICAg
IGFuaW1hdGVkUG9pbnQubW92ZSgtbV90b0N1cnJlbnRQb2ludC54KCksIC1tX3RvQ3VycmVudFBv
aW50LnkoKSk7CisgICAgICAgIGFuaW1hdGVkUG9pbnQubW92ZUJ5KC1tX3RvQ3VycmVudFBvaW50
LngoKSwgLW1fdG9DdXJyZW50UG9pbnQueSgpKTsKIAogICAgIGFuaW1hdGVkUG9pbnQgPSBibGVu
ZEZsb2F0UG9pbnQoZnJvbVBvaW50LCBhbmltYXRlZFBvaW50LCBtX3Byb2dyZXNzKTsKIApAQCAt
ODYsNyArODYsNyBAQCBGbG9hdFBvaW50IFNWR1BhdGhCbGVuZGVyOjpibGVuZEFuaW1hdGVkCiAg
ICAgaWYgKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCiAgICAgICAgIHJldHVybiBh
bmltYXRlZFBvaW50ICsgY3VycmVudFBvaW50OwogCi0gICAgYW5pbWF0ZWRQb2ludC5tb3ZlKC1j
dXJyZW50UG9pbnQueCgpLCAtY3VycmVudFBvaW50LnkoKSk7CisgICAgYW5pbWF0ZWRQb2ludC5t
b3ZlQnkoLWN1cnJlbnRQb2ludC54KCksIC1jdXJyZW50UG9pbnQueSgpKTsKICAgICByZXR1cm4g
YW5pbWF0ZWRQb2ludDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyLmNw
cAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpw
YXJzZUxpbmVUb0hvcml6b250YQogCiAgICAgaWYgKG1fcGF0aFBhcnNpbmdNb2RlID09IE5vcm1h
bGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUgPT0gUmVsYXRpdmVDb29yZGluYXRl
cykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUodG9YLCAwKTsKKyAgICAgICAgICAg
IG1fY3VycmVudFBvaW50Lm1vdmVCeSh0b1gsIDApOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBtX2N1cnJlbnRQb2ludC5zZXRYKHRvWCk7CiAgICAgICAgIG1fY29uc3VtZXItPmxpbmVUbyht
X2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7CkBAIC0xMDgsNyArMTA4LDcgQEAg
Ym9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUxpbmVUb1ZlcnRpY2FsUwogCiAgICAgaWYgKG1fcGF0
aFBhcnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIGlmIChtX21vZGUg
PT0gUmVsYXRpdmVDb29yZGluYXRlcykKLSAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmUo
MCwgdG9ZKTsKKyAgICAgICAgICAgIG1fY3VycmVudFBvaW50Lm1vdmVCeSgwLCB0b1kpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX2N1cnJlbnRQb2ludC5zZXRZKHRvWSk7CiAgICAgICAg
IG1fY29uc3VtZXItPmxpbmVUbyhtX2N1cnJlbnRQb2ludCwgQWJzb2x1dGVDb29yZGluYXRlcyk7
CkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9DdWJp
Y1NtbwogICAgIGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewog
ICAgICAgICBGbG9hdFBvaW50IHBvaW50MSA9IG1fY3VycmVudFBvaW50OwogICAgICAgICBwb2lu
dDEuc2NhbGUoMiwgMik7Ci0gICAgICAgIHBvaW50MS5tb3ZlKC1tX2NvbnRyb2xQb2ludC54KCks
IC1tX2NvbnRyb2xQb2ludC55KCkpOworICAgICAgICBwb2ludDEubW92ZUJ5KC1tX2NvbnRyb2xQ
b2ludC54KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2RlID09IFJl
bGF0aXZlQ29vcmRpbmF0ZXMpIHsKICAgICAgICAgICAgIHBvaW50MiArPSBtX2N1cnJlbnRQb2lu
dDsKICAgICAgICAgICAgIHRhcmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwpAQCAtMTgxLDEx
ICsxODEsMTEgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZUN1cnZlVG9RdWFkcmF0aQogICAg
IGlmIChtX3BhdGhQYXJzaW5nTW9kZSA9PSBOb3JtYWxpemVkUGFyc2luZykgewogICAgICAgICBt
X2NvbnRyb2xQb2ludCA9IHBvaW50MTsKICAgICAgICAgRmxvYXRQb2ludCBwb2ludDEgPSBtX2N1
cnJlbnRQb2ludDsKLSAgICAgICAgcG9pbnQxLm1vdmUoMiAqIG1fY29udHJvbFBvaW50LngoKSwg
MiAqIG1fY29udHJvbFBvaW50LnkoKSk7CisgICAgICAgIHBvaW50MS5tb3ZlQnkoMiAqIG1fY29u
dHJvbFBvaW50LngoKSwgMiAqIG1fY29udHJvbFBvaW50LnkoKSk7CiAgICAgICAgIEZsb2F0UG9p
bnQgcG9pbnQyKHRhcmdldFBvaW50LngoKSArIDIgKiBtX2NvbnRyb2xQb2ludC54KCksIHRhcmdl
dFBvaW50LnkoKSArIDIgKiBtX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBpZiAobV9tb2Rl
ID09IFJlbGF0aXZlQ29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIHBvaW50MS5tb3ZlKDIgKiBt
X2N1cnJlbnRQb2ludC54KCksIDIgKiBtX2N1cnJlbnRQb2ludC55KCkpOwotICAgICAgICAgICAg
cG9pbnQyLm1vdmUoMyAqIG1fY3VycmVudFBvaW50LngoKSwgMyAqIG1fY3VycmVudFBvaW50Lnko
KSk7CisgICAgICAgICAgICBwb2ludDEubW92ZUJ5KDIgKiBtX2N1cnJlbnRQb2ludC54KCksIDIg
KiBtX2N1cnJlbnRQb2ludC55KCkpOworICAgICAgICAgICAgcG9pbnQyLm1vdmVCeSgzICogbV9j
dXJyZW50UG9pbnQueCgpLCAzICogbV9jdXJyZW50UG9pbnQueSgpKTsKICAgICAgICAgICAgIHRh
cmdldFBvaW50ICs9IG1fY3VycmVudFBvaW50OwogICAgICAgICB9CiAgICAgICAgIHBvaW50MS5z
Y2FsZShnT25lT3ZlclRocmVlLCBnT25lT3ZlclRocmVlKTsKQEAgLTIxNiw3ICsyMTYsNyBAQCBi
b29sIFNWR1BhdGhQYXJzZXI6OnBhcnNlQ3VydmVUb1F1YWRyYXRpCiAgICAgaWYgKG1fcGF0aFBh
cnNpbmdNb2RlID09IE5vcm1hbGl6ZWRQYXJzaW5nKSB7CiAgICAgICAgIEZsb2F0UG9pbnQgY3Vi
aWNQb2ludCA9IG1fY3VycmVudFBvaW50OwogICAgICAgICBjdWJpY1BvaW50LnNjYWxlKDIsIDIp
OwotICAgICAgICBjdWJpY1BvaW50Lm1vdmUoLW1fY29udHJvbFBvaW50LngoKSwgLW1fY29udHJv
bFBvaW50LnkoKSk7CisgICAgICAgIGN1YmljUG9pbnQubW92ZUJ5KC1tX2NvbnRyb2xQb2ludC54
KCksIC1tX2NvbnRyb2xQb2ludC55KCkpOwogICAgICAgICBGbG9hdFBvaW50IHBvaW50MShtX2N1
cnJlbnRQb2ludC54KCkgKyAyICogY3ViaWNQb2ludC54KCksIG1fY3VycmVudFBvaW50LnkoKSAr
IDIgKiBjdWJpY1BvaW50LnkoKSk7CiAgICAgICAgIEZsb2F0UG9pbnQgcG9pbnQyKHRhcmdldFBv
aW50LngoKSArIDIgKiBjdWJpY1BvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpICsgMiAqIGN1Ymlj
UG9pbnQueSgpKTsKICAgICAgICAgaWYgKG1fbW9kZSA9PSBSZWxhdGl2ZUNvb3JkaW5hdGVzKSB7
CkBAIC00NzEsMTEgKzQ3MSwxMSBAQCBib29sIFNWR1BhdGhQYXJzZXI6OmRlY29tcG9zZUFyY1Rv
Q3ViaWMoCiAgICAgICAgIGZsb2F0IGNvc0VuZFRoZXRhID0gY29zZihlbmRUaGV0YSk7CiAKICAg
ICAgICAgcG9pbnQxID0gRmxvYXRQb2ludChjb3NTdGFydFRoZXRhIC0gdCAqIHNpblN0YXJ0VGhl
dGEsIHNpblN0YXJ0VGhldGEgKyB0ICogY29zU3RhcnRUaGV0YSk7Ci0gICAgICAgIHBvaW50MS5t
b3ZlKGNlbnRlclBvaW50LngoKSwgY2VudGVyUG9pbnQueSgpKTsKKyAgICAgICAgcG9pbnQxLm1v
dmVCeShjZW50ZXJQb2ludC54KCksIGNlbnRlclBvaW50LnkoKSk7CiAgICAgICAgIEZsb2F0UG9p
bnQgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KGNvc0VuZFRoZXRhLCBzaW5FbmRUaGV0YSk7Ci0g
ICAgICAgIHRhcmdldFBvaW50Lm1vdmUoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2ludC55KCkp
OworICAgICAgICB0YXJnZXRQb2ludC5tb3ZlQnkoY2VudGVyUG9pbnQueCgpLCBjZW50ZXJQb2lu
dC55KCkpOwogICAgICAgICBwb2ludDIgPSB0YXJnZXRQb2ludDsKLSAgICAgICAgcG9pbnQyLm1v
dmUodCAqIHNpbkVuZFRoZXRhLCAtdCAqIGNvc0VuZFRoZXRhKTsKKyAgICAgICAgcG9pbnQyLm1v
dmVCeSh0ICogc2luRW5kVGhldGEsIC10ICogY29zRW5kVGhldGEpOwogCiAgICAgICAgIG1fY29u
c3VtZXItPmN1cnZlVG9DdWJpYyhwb2ludFRyYW5zZm9ybS5tYXBQb2ludChwb2ludDEpLCBwb2lu
dFRyYW5zZm9ybS5tYXBQb2ludChwb2ludDIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcG9pbnRUcmFuc2Zvcm0ubWFwUG9pbnQodGFyZ2V0UG9pbnQpLCBBYnNvbHV0ZUNvb3Jk
aW5hdGVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZFSW1hZ2UuY3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3
ICs3MCw3IEBAIHZvaWQgRkVJbWFnZTo6YXBwbHkoKQogICAgIG1fcHJlc2VydmVBc3BlY3RSYXRp
by50cmFuc2Zvcm1SZWN0KGRlc3RSZWN0LCBzcmNSZWN0KTsKIAogICAgIEludFBvaW50IHBhaW50
TG9jYXRpb24gPSBhYnNvbHV0ZVBhaW50UmVjdCgpLmxvY2F0aW9uKCk7Ci0gICAgZGVzdFJlY3Qu
bW92ZSgtcGFpbnRMb2NhdGlvbi54KCksIC1wYWludExvY2F0aW9uLnkoKSk7CisgICAgZGVzdFJl
Y3QubW92ZUJ5KC1wYWludExvY2F0aW9uLngoKSwgLXBhaW50TG9jYXRpb24ueSgpKTsKIAogICAg
IHJlc3VsdEltYWdlLT5jb250ZXh0KCktPmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBDb2xvclNw
YWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZp
c2lvbiA4Nzk1OSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI5IEBACisyMDExLTA2LTAyICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW5hbWUgSW50UG9pbnQvSW50UmVjdC9GbG9hdFBvaW50L0Zsb2F0UmVjdDo6bW92ZSB0byBtb3Zl
QnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxOTQ5
CisKKyAgICAgICAgTmFtZSBvbmx5IGNoYW5nZSwgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIFBsYXRmb3JtL1JlZ2lvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlZ2lv
bjo6dHJhbnNsYXRlKToKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aW52YWxp
ZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwOgorICAgICAgICAo
V2ViS2l0OjpGaW5kSW5kaWNhdG9yOjpkcmF3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL0Jh
Y2tpbmdTdG9yZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3JlOjppbmNvcnBv
cmF0ZVVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUHJveHk6OnBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6UGx1Z2luUHJveHk6OnVwZGF0ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjppbnZhbGlkYXRlUmVj
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IpOgorICAg
ICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6cmVjdHNGb3JUZXh0TWF0Y2hlcyk6CisKIDIw
MTEtMDYtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9SZWdpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1JlZ2lv
bi5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUmVnaW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDcgKzQ0OCw3IEBAIHZvaWQgUmVnaW9uOjpzdWJ0
cmFjdChjb25zdCBSZWdpb24mIHJlZ2kKIAogdm9pZCBSZWdpb246OnRyYW5zbGF0ZShjb25zdCBJ
bnRTaXplJiBvZmZzZXQpCiB7Ci0gICAgbV9ib3VuZHMubW92ZShvZmZzZXQpOworICAgIG1fYm91
bmRzLm1vdmVCeShvZmZzZXQpOwogICAgIG1fc2hhcGUudHJhbnNsYXRlKG9mZnNldCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNv
bnRyb2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYktpdDIvUGx1
Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OmludmFsaWRhdGUoYwog
ewogICAgIC8vIENvbnZlcnQgdGhlIGRpcnR5IHJlY3QgdG8gd2luZG93IGNvb3JkaW5hdGVzLgog
ICAgIEludFJlY3QgZGlydHlSZWN0ID0gcmVjdDsKLSAgICBkaXJ0eVJlY3QubW92ZShtX2ZyYW1l
UmVjdC54KCksIG1fZnJhbWVSZWN0LnkoKSk7CisgICAgZGlydHlSZWN0Lm1vdmVCeShtX2ZyYW1l
UmVjdC54KCksIG1fZnJhbWVSZWN0LnkoKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
ZGlydHkgcmVjdCBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBwbHVnLWluIGl0c2VsZi4KICAgICBk
aXJ0eVJlY3QuaW50ZXJzZWN0KG1fZnJhbWVSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9GaW5kSW5kaWNhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvRmluZEluZGljYXRvci5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYs
NyArMTQ2LDcgQEAgdm9pZCBGaW5kSW5kaWNhdG9yOjpkcmF3KEdyYXBoaWNzQ29udGV4dAogewog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0UmVjdHNJblNlbGVjdGlvblJlY3RDb29y
ZGluYXRlcy5zaXplKCk7ICsraSkgewogICAgICAgICBGbG9hdFJlY3QgdGV4dFJlY3QgPSBtX3Rl
eHRSZWN0c0luU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzW2ldOwotICAgICAgICB0ZXh0UmVjdC5t
b3ZlKGxlZnRCb3JkZXJUaGlja25lc3MsIHRvcEJvcmRlclRoaWNrbmVzcyk7CisgICAgICAgIHRl
eHRSZWN0Lm1vdmVCeShsZWZ0Qm9yZGVyVGhpY2tuZXNzLCB0b3BCb3JkZXJUaGlja25lc3MpOwog
CiAgICAgICAgIEZsb2F0UmVjdCBvdXRlclBhdGhSZWN0ID0gaW5mbGF0ZVJlY3QodGV4dFJlY3Qs
IGhvcml6b250YWxPdXRzZXRUb0NlbnRlck9mTGlnaHRCb3JkZXIsIHZlcnRpY2FsT3V0c2V0VG9D
ZW50ZXJPZkxpZ2h0Qm9yZGVyKTsKICAgICAgICAgRmxvYXRSZWN0IGlubmVyUGF0aFJlY3QgPSBp
bmZsYXRlUmVjdCh0ZXh0UmVjdCwgaG9yaXpvbnRhbFBhZGRpbmdJbnNpZGVMaWdodEJvcmRlciwg
dmVydGljYWxQYWRkaW5nSW5zaWRlTGlnaHRCb3JkZXIpOwpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9CYWNraW5nU3RvcmVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9CYWNraW5nU3RvcmVNYWMubW0JKHJldmlzaW9uIDg3OTMyKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9CYWNraW5nU3RvcmVNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3Jh
dGVVcGRhdGUoU2hhCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1cGRhdGVJbmZvLnVwZGF0
ZVJlY3RzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IHVwZGF0
ZUluZm8udXBkYXRlUmVjdHNbaV07CiAgICAgICAgIEludFJlY3Qgc3JjUmVjdCA9IHVwZGF0ZVJl
Y3Q7Ci0gICAgICAgIHNyY1JlY3QubW92ZSgtdXBkYXRlUmVjdExvY2F0aW9uLngoKSwgLXVwZGF0
ZVJlY3RMb2NhdGlvbi55KCkpOworICAgICAgICBzcmNSZWN0Lm1vdmVCeSgtdXBkYXRlUmVjdExv
Y2F0aW9uLngoKSwgLXVwZGF0ZVJlY3RMb2NhdGlvbi55KCkpOwogCiAgICAgICAgIGJpdG1hcC0+
cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCB1cGRhdGVSZWN0LmxvY2F0aW9uKCksIHNyY1JlY3QpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb3h5LmNwcAkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUz
LDcgQEAgdm9pZCBQbHVnaW5Qcm94eTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KgogICAgIH0KIAog
ICAgIEludFJlY3QgZGlydHlSZWN0SW5QbHVnaW5Db29yZGluYXRlcyA9IGRpcnR5UmVjdDsKLSAg
ICBkaXJ0eVJlY3RJblBsdWdpbkNvb3JkaW5hdGVzLm1vdmUoLW1fZnJhbWVSZWN0LngoKSwgLW1f
ZnJhbWVSZWN0LnkoKSk7CisgICAgZGlydHlSZWN0SW5QbHVnaW5Db29yZGluYXRlcy5tb3ZlQnko
LW1fZnJhbWVSZWN0LngoKSwgLW1fZnJhbWVSZWN0LnkoKSk7CiAKICAgICBtX2JhY2tpbmdTdG9y
ZS0+cGFpbnQoKmdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0LmxvY2F0aW9uKCksIGRpcnR5UmVj
dEluUGx1Z2luQ29vcmRpbmF0ZXMpOwogCkBAIC00ODcsNyArNDg3LDcgQEAgdm9pZCBQbHVnaW5Q
cm94eTo6dXBkYXRlKGNvbnN0IEludFJlY3QmIAogICAgICAgICBtX3BsdWdpbkJhY2tpbmdTdG9y
ZUNvbnRhaW5zVmFsaWREYXRhID0gdHJ1ZTsKIAogICAgIEludFJlY3QgcGFpbnRlZFJlY3RQbHVn
aW5Db29yZGluYXRlcyA9IHBhaW50ZWRSZWN0OwotICAgIHBhaW50ZWRSZWN0UGx1Z2luQ29vcmRp
bmF0ZXMubW92ZSgtbV9mcmFtZVJlY3QueCgpLCAtbV9mcmFtZVJlY3QueSgpKTsKKyAgICBwYWlu
dGVkUmVjdFBsdWdpbkNvb3JkaW5hdGVzLm1vdmVCeSgtbV9mcmFtZVJlY3QueCgpLCAtbV9mcmFt
ZVJlY3QueSgpKTsKIAogICAgIGlmIChtX2JhY2tpbmdTdG9yZSkgewogICAgICAgICAvLyBCbGl0
IHRoZSBwbHVnLWluIGJhY2tpbmcgc3RvcmUgaW50byBvdXIgb3duIGJhY2tpbmcgc3RvcmUuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcu
Y3BwCShyZXZpc2lvbiA4NzkzMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc0LDcgKzg3NCw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW4KICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIEludFJlY3QgY29udGVudFJlY3QoZGlydHlSZWN0KTsKLSAgICBjb250ZW50UmVjdC5t
b3ZlKHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwgcmVu
ZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CisgICAgY29udGVu
dFJlY3QubW92ZUJ5KHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFkZGluZ0xl
ZnQoKSwgcmVuZGVyZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CiAg
ICAgcmVuZGVyZXItPnJlcGFpbnRSZWN0YW5nbGUoY29udGVudFJlY3QpOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDg3OTMyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDggKzE4Myw4IEBA
IGJvb2wgRmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRJbmRpY2F0b3IKICAgICBPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBmaW5kSW5kaWNhdG9yVGV4dEJhY2tpbmdT
dG9yZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CiAKICAgICBJbnRSZWN0IHBhaW50UmVjdCA9
IHNlbGVjdGlvblJlY3Q7Ci0gICAgcGFpbnRSZWN0Lm1vdmUoc2VsZWN0ZWRGcmFtZS0+dmlldygp
LT5mcmFtZVJlY3QoKS54KCksIHNlbGVjdGVkRnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCkueSgp
KTsKLSAgICBwYWludFJlY3QubW92ZSgtc2VsZWN0ZWRGcmFtZS0+dmlldygpLT5zY3JvbGxPZmZz
ZXQoKSk7CisgICAgcGFpbnRSZWN0Lm1vdmVCeShzZWxlY3RlZEZyYW1lLT52aWV3KCktPmZyYW1l
UmVjdCgpLngoKSwgc2VsZWN0ZWRGcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKS55KCkpOworICAg
IHBhaW50UmVjdC5tb3ZlQnkoLXNlbGVjdGVkRnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCkp
OwogCiAgICAgZ3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLXBhaW50UmVjdC54KCksIC1wYWlu
dFJlY3QueSgpKTsKICAgICBzZWxlY3RlZEZyYW1lLT52aWV3KCktPnNldFBhaW50QmVoYXZpb3Io
UGFpbnRCZWhhdmlvclNlbGVjdGlvbk9ubHkgfCBQYWludEJlaGF2aW9yRm9yY2VCbGFja1RleHQg
fCBQYWludEJlaGF2aW9yRmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKTsKQEAgLTIwMiw3ICsyMDIs
NyBAQCBib29sIEZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kSW5kaWNhdG9yCiAgICAgCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0ZXh0UmVjdHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
SW50UmVjdCB0ZXh0UmVjdEluU2VsZWN0aW9uUmVjdENvb3JkaW5hdGVzID0gc2VsZWN0ZWRGcmFt
ZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodGV4dFJlY3RzW2ld
KSk7Ci0gICAgICAgIHRleHRSZWN0SW5TZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMubW92ZSgtc2Vs
ZWN0aW9uUmVjdEluV2luZG93Q29vcmRpbmF0ZXMueCgpLCAtc2VsZWN0aW9uUmVjdEluV2luZG93
Q29vcmRpbmF0ZXMueSgpKTsKKyAgICAgICAgdGV4dFJlY3RJblNlbGVjdGlvblJlY3RDb29yZGlu
YXRlcy5tb3ZlQnkoLXNlbGVjdGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLngoKSwgLXNlbGVj
dGlvblJlY3RJbldpbmRvd0Nvb3JkaW5hdGVzLnkoKSk7CiAKICAgICAgICAgdGV4dFJlY3RzSW5T
ZWxlY3Rpb25SZWN0Q29vcmRpbmF0ZXMuYXBwZW5kKHRleHRSZWN0SW5TZWxlY3Rpb25SZWN0Q29v
cmRpbmF0ZXMpOwogICAgIH0gICAgICAgICAgICAKQEAgLTIzOSw3ICsyMzksNyBAQCBWZWN0b3I8
SW50UmVjdD4gRmluZENvbnRyb2xsZXI6OnJlY3RzRm9yCiAKICAgICAgICAgZm9yIChWZWN0b3I8
SW50UmVjdD46Oml0ZXJhdG9yIGl0ID0gZnJhbWVSZWN0cy5iZWdpbigpLCBlbmQgPSBmcmFtZVJl
Y3RzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIGl0LT5pbnRlcnNlY3Qo
dmlzaWJsZVJlY3QpOwotICAgICAgICAgICAgaXQtPm1vdmUoZnJhbWVPZmZzZXQueCgpLCBmcmFt
ZU9mZnNldC55KCkpOworICAgICAgICAgICAgaXQtPm1vdmVCeShmcmFtZU9mZnNldC54KCksIGZy
YW1lT2Zmc2V0LnkoKSk7CiAgICAgICAgICAgICByZWN0cy5hcHBlbmQoKml0KTsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3OTU5KQorKysgU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTEtMDYtMDIgIEVtaWwgQSBFa2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmFtZSBJbnRQb2ludC9JbnRS
ZWN0L0Zsb2F0UG9pbnQvRmxvYXRSZWN0Ojptb3ZlIHRvIG1vdmVCeQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjE5NDkKKworICAgICAgICBOYW1lIG9u
bHkgY2hhbmdlLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogUGx1Z2lu
cy9XZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3Lm1tOgorICAgICAgICAoLVtXZWJCYXNlTmV0c2Nh
cGVQbHVnaW5WaWV3IGludmFsaWRhdGVQbHVnaW5Db250ZW50UmVjdDpdKToKKwogMjAxMS0wNS0y
NyAgU3RlcGhhbmllIExld2lzICA8c2xld2lzQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJCYXNlTmV0c2NhcGVQbHVn
aW5WaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViQmFz
ZU5ldHNjYXBlUGx1Z2luVmlldy5tbQkocmV2aXNpb24gODc5MzIpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9QbHVnaW5zL1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcubW0JKHdvcmtpbmcgY29weSkK
QEAgLTk2Miw3ICs5NjIsNyBAQCAtICh2b2lkKWludmFsaWRhdGVQbHVnaW5Db250ZW50UmVjdDoo
TlNSCiB7CiAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0ICpyZW5kZXJlciA9IHRvUmVuZGVy
Qm94TW9kZWxPYmplY3QoX2VsZW1lbnQtPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgIEludFJlY3Qg
Y29udGVudFJlY3QocmVjdCk7Ci0gICAgICAgIGNvbnRlbnRSZWN0Lm1vdmUocmVuZGVyZXItPmJv
cmRlckxlZnQoKSArIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLCByZW5kZXJlci0+Ym9yZGVyVG9w
KCkgKyByZW5kZXJlci0+cGFkZGluZ1RvcCgpKTsKKyAgICAgICAgY29udGVudFJlY3QubW92ZUJ5
KHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwgcmVuZGVy
ZXItPmJvcmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CiAgICAgICAgIAogICAg
ICAgICByZW5kZXJlci0+cmVwYWludFJlY3RhbmdsZShjb250ZW50UmVjdCk7CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>