<?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>147495</bug_id>
          
          <creation_ts>2015-07-31 11:40:42 -0700</creation_ts>
          <short_desc>Rename the header file LengthBox.h to Insets.h and the classes inside accordingly</short_desc>
          <delta_ts>2017-04-24 19:10:59 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>aj355</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1113769</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-07-31 11:40:42 -0700</bug_when>
    <thetext>In http://trac.webkit.org/changeset/184895, LengthBox was used to replace other similar classes. The right name of the base template should be Insets and the specialized classes should be LengthInsets, LayoutInsets and FloatInsets. Unused functions (e.g. T&amp; before(), T&amp; after(), T&amp; start() and T&amp; end()) should be removed.  New helper functions (e.g. T width(), T height(), void scale()) may be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113772</commentid>
    <comment_count>1</comment_count>
      <attachid>257938</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-07-31 12:00:01 -0700</bug_when>
    <thetext>Created attachment 257938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113773</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-31 12:02:40 -0700</bug_when>
    <thetext>Attachment 257938 did not pass style-queue:


ERROR: Source/WebCore/rendering/style/RenderStyle.cpp:1794:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113786</commentid>
    <comment_count>3</comment_count>
      <attachid>257944</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-07-31 12:33:05 -0700</bug_when>
    <thetext>Created attachment 257944
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113789</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-31 12:37:52 -0700</bug_when>
    <thetext>Attachment 257944 did not pass style-queue:


ERROR: Source/WebCore/rendering/style/RenderStyle.cpp:1794:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1113895</commentid>
    <comment_count>5</comment_count>
    <who name="A J">aj355</who>
    <bug_when>2015-07-31 15:28:10 -0700</bug_when>
    <thetext>Attachment 257944 did not pass style-queue:


ERROR: Source/WebCore/rendering/style/RenderStyle.cpp:1794:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 35 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300831</commentid>
    <comment_count>6</comment_count>
      <attachid>257944</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-04-24 19:10:59 -0700</bug_when>
    <thetext>Comment on attachment 257944
Patch

This patch has been pending review since 2015 with no recent activity.
It seems unlikely that it would even still apply to trunk in its current form.

Clearing from the review queue.

Feel free to update and resubmit if the patch is still relevant.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257938</attachid>
            <date>2015-07-31 12:00:01 -0700</date>
            <delta_ts>2015-07-31 12:33:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147495-20150731115959.patch</filename>
            <type>text/plain</type>
            <size>91081</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzY1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MiBAQAorMjAxNS0wNy0zMSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSB0
aGUgaGVhZGVyIGZpbGUgTGVuZ3RoQm94LmggdG8gSW5zZXRzLmggYW5kIHRoZSBjbGFzc2VzIGlu
c2lkZSBhY2NvcmRpbmdseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ3NDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVuYW1lIExlbmd0aEJveC5oIHRvIEluc2V0cy5oLiBSZW5hbWUgdGhlIHRlbXBs
YXRlcy9jbGFzc2VzIGluIHRoaXMgaGVhZGVyCisgICAgICAgIGZpbGUgdG8gYmU6IEluc2V0cywg
TGVuZ3RoSW5zZXRzLCBMYXlvdXRJbnNldHMgYW5kIEZsb2F0SW5zZXRzLiBBZGQgZmV3IGhlbHBl
cgorICAgICAgICBmdW5jdGlvbnMgdG8gdGhlIEluc2V0cyB0ZW1wbGF0ZTogd2lkdGgoKSwgaGVp
Z2h0KCkgYW5kIHNjYWxlKCkuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVy
czoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JOaW5lUGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4
dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVUb1BoeXNpY2FsUHJvcGVydHkpOgorICAgICAgICAq
IGNzcy9DU1NUb1N0eWxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6
Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1h
cDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1h
cC5oOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxWYWx1ZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YnVpbGRSZW5kZXJlckhpZ2hsaWdodCk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJv
cGVydHlBbmltYXRpb25XcmFwcGVyTWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9JbnNldHMuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94LmguCisgICAgICAg
IChXZWJDb3JlOjpJbnNldHM6Okluc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6OmF0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6c2V0QXQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXRzOjp0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXRzOjpyaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNldHM6OmJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6Omxl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXRzOjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXRzOjpzZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6OnNldEJvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6OnNldExlZnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXRzOjpiZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXRzOjphZnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNldHM6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0
czo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6c2V0QmVmb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc2V0czo6c2V0QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXRzOjpz
ZXRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6OnNldEVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNldHM6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6aGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXRzOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGhJbnNldHM6Okxlbmd0aEluc2V0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpMZW5ndGhJbnNldHM6OmlzWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpC
b3hFeHRlbnQ6OkJveEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCb3hFeHRl
bnQ6OmF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6dG9wKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6cmlnaHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Qm94RXh0ZW50Ojpib3R0b20pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Qm94RXh0ZW50OjpsZWZ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4
dGVudDo6c2V0QXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qm94RXh0ZW50OjpzZXRU
b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qm94RXh0ZW50OjpzZXRSaWdodCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCb3hFeHRlbnQ6OnNldEJvdHRvbSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpCb3hFeHRlbnQ6OnNldExlZnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Qm94RXh0ZW50OjpiZWZvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Qm94RXh0ZW50OjphZnRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCb3hFeHRl
bnQ6OnN0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6ZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6c2V0QmVmb3JlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6c2V0QWZ0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Qm94RXh0ZW50OjpzZXRTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCb3hFeHRlbnQ6OnNldEVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
b3hFeHRlbnQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qm94RXh0
ZW50OjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aEJveDo6
TGVuZ3RoQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aEJveDo6aXNaZXJv
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGhCb3guaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9UaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZTo6Y29u
dHJvbEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZTo6Y29udHJvbFBhZGRpbmcpOgor
ICAgICAgICAqIHBsYXRmb3JtL1RoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZTo6bWlu
aW11bUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpjb250cm9sUmVxdWly
ZXNQcmVXaGl0ZVNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRSZWN0Ojptb3ZlKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dFJlY3Q6OmV4cGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRSZWN0Ojpj
b250cmFjdCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmg6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6Om1p
bmltdW1Db250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6Y29udHJvbEJv
cmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6Y29udHJvbFBhZGRpbmcpOgorICAg
ICAgICAqIHBsYXRmb3JtL3RleHQvV3JpdGluZ01vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnJv
dGF0ZVBoeXNpY2FsU2lkZSk6CisgICAgICAgIChXZWJDb3JlOjptYXBMb2dpY2FsU2lkZVRvUGh5
c2ljYWxTaWRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjphZGRCb3JkZXJPdXRzZXRWaXN1YWxPdmVyZmxv
dyk6CisgICAgICAgIChXZWJDb3JlOjpjbGlwUmVjdEZvck5pbmVQaWVjZUltYWdlU3RyaXApOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ft
ZVNpemVBc1JlbmRlckJveDo6flNhbWVTaXplQXNSZW5kZXJCb3gpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjphcHBseVZpc3VhbEVmZmVjdE92ZXJmbG93KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRl
U3RpY2t5UG9zaXRpb25Db25zdHJhaW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVwYWludEFmdGVy
TGF5b3V0SWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q29tbW9u
QnV0dG9uUGFkZGluZ1RvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U2VsZWN0TGlz
dEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RC
dXR0b25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJvcmRlckRhdGE6OmJvcmRlckJvdHRvbVdpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkJvcmRlckRhdGE6OmJvcmRlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJv
cmRlckRhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9OaW5lUGll
Y2VJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6TmluZVBpZWNl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TmluZVBpZWNlSW1hZ2U6OmNvbXB1dGVTbGljZSk6
CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZVNsaWNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6c2NhbGVTbGljZXNJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6aXNFbXB0eVBpZWNlUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZUludHJpbnNpY1JlY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjpjb21wdXRlTm9uSW50cmluc2ljUmVjdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6TmluZVBpZWNlSW1hZ2U6OnBhaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVj
ZUltYWdlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6c2V0SW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TmluZVBpZWNlSW1hZ2U6OmltYWdlU2xpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5p
bmVQaWVjZUltYWdlOjpzZXRJbWFnZVNsaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGll
Y2VJbWFnZTo6ZmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6c2V0Rmls
bCk6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6Ym9yZGVyU2xpY2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjpzZXRCb3JkZXJTbGljZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TmluZVBpZWNlSW1hZ2U6Om91dHNldCk6CisgICAgICAgIChXZWJDb3JlOjpO
aW5lUGllY2VJbWFnZTo6c2V0T3V0c2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUlt
YWdlOjpob3Jpem9udGFsUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6
c2V0SG9yaXpvbnRhbFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6TmluZVBpZWNlSW1hZ2U6OnNl
dE1hc2tEZWZhdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6Y29tcHV0
ZU91dHNldCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjppbmhlcml0ZWREYXRhU2hhcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBvc2l0aW9uQ2hhbmdlSXNNb3ZlbWVudE9ubHkpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmdldFNoYWRvd0V4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTdHlsZTo6Z2V0U2hhZG93SW5zZXRFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyU3R5bGU6OmdldFNoYWRvd0hvcml6b250YWxFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU3R5bGU6OmluaXRpYWxUYXBIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTdHlsZTo6aW1hZ2VPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpnZXRGb250QW5kR2x5cGhPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U3R5bGU6OnNldEJvcmRlckltYWdlU2xpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJJbWFnZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxl
OjpzZXRCb3JkZXJJbWFnZU91dHNldCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRGFzaGJvYXJkUmVnaW9u
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlU3Vycm91bmREYXRhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVN1cnJvdW5kRGF0YTo6b3BlcmF0b3IhPSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1N0eWxlVmlzdWFsRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVWaXN1YWxEYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlVmlzdWFs
RGF0YTo6b3BlcmF0b3IhPSk6CisKIDIwMTUtMDctMzEgIEplciBOb2JsZSAgPGplci5ub2JsZUBh
cHBsZS5jb20+CiAKICAgICAgICAgQ1JBU0ggYXQgV2ViQ29yZTo6VGFza0Rpc3BhdGNoZXI8V2Vi
Q29yZTo6U2NyaXB0RXhlY3V0aW9uQ29udGV4dD46OnBvc3RUYXNrICsgMzgKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24g
MTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMjAxOTcsNyArMjAxOTcsNyBAQAogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cTGFuZ3VhZ2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXExheW91dFVuaXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBsYXRmb3JtXExlbmd0aC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxh
dGZvcm1cTGVuZ3RoQm94LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxJbnNldHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXExlbmd0
aFNpemUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXExpbmtIYXNo
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxMb2NhbGl6ZWRTdHJp
bmdzLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcg
Y29weSkKQEAgLTgyMDQsNyArODIwNCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxMZW5ndGguaCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxMZW5ndGhC
b3guaCI+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxJbnNldHMuaCI+CiAg
ICAgICA8RmlsdGVyPnBsYXRmb3JtPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxMZW5ndGhTaXplLmgiPgpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NjA2LDcgKzU2MDYsNyBAQAogCQlCQ0ZCMkU1RTA5
NzlFNDY0MDBCQTcwM0QgLyogQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkIyRTVEMDk3OUU0NjQwMEJBNzAzRCAv
KiBDYWNoZWRSZXNvdXJjZUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUJDRkUyRjExMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRTJGMEYw
QzFCNTgzNzAwMjAyMzVGIC8qIEpTUmVjdC5jcHAgKi87IH07CiAJCUJDRkUyRjEyMEMxQjU4Mzgw
MDIwMjM1RiAvKiBKU1JlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDRkUyRjEwMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuaCAqLzsgfTsKLQkJ
QkNGRjY0OTEwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aEJveC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRjY0OEYwRUFEMTVDMjAwQzFENkY3IC8q
IExlbmd0aEJveC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCUJDRkY2NDkxMEVBRDE1QzIwMEMxRDZGNyAvKiBJbnNldHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkY2NDhGMEVBRDE1QzIwMEMxRDZG
NyAvKiBJbnNldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlCQ0ZGNjQ5MjBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoU2l6ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRjY0OTAwRUFEMTVDMjAw
QzFENkY3IC8qIExlbmd0aFNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCRTE2QzU5MjE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kR2VuZXJp
Y1RleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCRTE2QzU4RTE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kR2VuZXJpY1RleHRUcmFjay5j
cHAgKi87IH07CiAJCUJFMTZDNTkzMTdDRkUxNzIwMDg1MkMwNCAvKiBJbmJhbmRHZW5lcmljVGV4
dFRyYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
RTE2QzU4RjE3Q0ZFMTcyMDA4NTJDMDQgLyogSW5iYW5kR2VuZXJpY1RleHRUcmFjay5oICovOyB9
OwpAQCAtMTMxOTYsNyArMTMxOTYsNyBAQAogCQlCQ0ZCNDVGNDE3RDhFNDk0MDA0NDQ0NDYgLyog
UmVuZGVyQmxvY2tGbG93LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlckJsb2NrRmxvdy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRkUy
RjBGMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTUmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDRkUyRjEwMEMxQjU4MzcwMDIwMjM1RiAvKiBKU1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
Q0ZGNjQ4RjBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExlbmd0aEJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCQ0ZGNjQ4RjBFQUQxNUMyMDBDMUQ2RjcgLyogSW5zZXRzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluc2V0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Q0ZGNjQ5MDBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoU2l6ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMZW5ndGhTaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJFMTZDNThFMTdDRkUxNzIwMDg1MkMwNCAvKiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluYmFuZEdlbmVyaWNUZXh0
VHJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCRTE2QzU4RjE3Q0ZFMTcy
MDA4NTJDMDQgLyogSW5iYW5kR2VuZXJpY1RleHRUcmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yMTkyMCw3ICsyMTkyMCw3IEBACiAJCQkJMTQxREMwNDcxNjQ4MzQ4RjAw
MzcxRTVBIC8qIExheW91dFVuaXQuaCAqLywKIAkJCQlCQ0U2NUJFODBFQUNERjE2MDA3RTQ1MzMg
LyogTGVuZ3RoLmNwcCAqLywKIAkJCQlCQ0U2NUJFOTBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3Ro
LmggKi8sCi0JCQkJQkNGRjY0OEYwRUFEMTVDMjAwQzFENkY3IC8qIExlbmd0aEJveC5oICovLAor
CQkJCUJDRkY2NDhGMEVBRDE1QzIwMEMxRDZGNyAvKiBJbnNldHMuaCAqLywKIAkJCQlCQ0ZGNjQ5
MDBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoU2l6ZS5oICovLAogCQkJCUE3QUQyRjg1MEVDODlE
MDcwMDhBQjAwMiAvKiBMaW5rSGFzaC5jcHAgKi8sCiAJCQkJQTdBRDJGODYwRUM4OUQwNzAwOEFC
MDAyIC8qIExpbmtIYXNoLmggKi8sCkBAIC0yNTkwOSw3ICsyNTkwOSw3IEBACiAJCQkJRTRFMzlB
RkIxMzMwRUZBODAwM0FCMjc0IC8qIExlZ2FjeVRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxMkREOEY1MEQ5MUU2QUYwMDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0U2NUJFQjBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmggaW4g
SGVhZGVycyAqLywKLQkJCQlCQ0ZGNjQ5MTBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCQ0ZGNjQ5MTBFQUQxNUMyMDBDMUQ2RjcgLyogSW5zZXRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNUJBN0Q2MzE1MTQzN0NBMDBGRTFFM0YgLyogTGVuZ3RoRnVu
Y3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDJGRkI0NjE5ODRCNzE2MDBGNjgzN0YgLyog
TGVuZ3RoUmVwZWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZGNjQ5MjBFQUQxNUMyMDBDMUQ2
RjcgLyogTGVuZ3RoU2l6ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTg3
NTU2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw0NCArNTM4LDQ0IEBAIHN0YXRpYyBSZWY8Q1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlPiB2YWwKICAgICByZXR1cm4gQ1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlOjpjcmVhdGUoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoV1RGOjptb3ZlKHF1YWQpKSwg
aW1hZ2UuZmlsbCgpKTsKIH0KIAotc3RhdGljIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVG
b3JOaW5lUGllY2VJbWFnZVF1YWQoY29uc3QgTGVuZ3RoQm94JiBib3gpCitzdGF0aWMgUmVmPENT
U1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUXVhZChjb25zdCBMZW5ndGhJ
bnNldHMmIGluc2V0cykKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHRvcDsKICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJpZ2h0OwogICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gYm90dG9tOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVmdDsKIAot
ICAgIGlmIChib3gudG9wKCkuaXNSZWxhdGl2ZSgpKQotICAgICAgICB0b3AgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShib3gudG9wKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpOworICAgIGlmIChpbnNldHMudG9wKCkuaXNSZWxhdGl2ZSgpKQorICAgICAgICB0
b3AgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpbnNldHMudG9wKCkudmFsdWUoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgIGVsc2UKLSAgICAgICAgdG9wID0gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LnRvcCgpKTsKKyAgICAgICAgdG9wID0gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoaW5zZXRzLnRvcCgpKTsKIAotICAgIGlmIChib3gucmlnaHQo
KSA9PSBib3gudG9wKCkgJiYgYm94LmJvdHRvbSgpID09IGJveC50b3AoKSAmJiBib3gubGVmdCgp
ID09IGJveC50b3AoKSkgeworICAgIGlmIChpbnNldHMucmlnaHQoKSA9PSBpbnNldHMudG9wKCkg
JiYgaW5zZXRzLmJvdHRvbSgpID09IGluc2V0cy50b3AoKSAmJiBpbnNldHMubGVmdCgpID09IGlu
c2V0cy50b3AoKSkgewogICAgICAgICByaWdodCA9IHRvcDsKICAgICAgICAgYm90dG9tID0gdG9w
OwogICAgICAgICBsZWZ0ID0gdG9wOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChib3gucmln
aHQoKS5pc1JlbGF0aXZlKCkpCi0gICAgICAgICAgICByaWdodCA9IGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKGJveC5yaWdodCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKTsKKyAgICAgICAgaWYgKGluc2V0cy5yaWdodCgpLmlzUmVsYXRpdmUoKSkKKyAgICAgICAg
ICAgIHJpZ2h0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW5zZXRzLnJpZ2h0KCkudmFs
dWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByaWdodCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJveC5yaWdodCgpKTsK
KyAgICAgICAgICAgIHJpZ2h0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW5zZXRzLnJp
Z2h0KCkpOwogCi0gICAgICAgIGlmIChib3guYm90dG9tKCkgPT0gYm94LnRvcCgpICYmIGJveC5y
aWdodCgpID09IGJveC5sZWZ0KCkpIHsKKyAgICAgICAgaWYgKGluc2V0cy5ib3R0b20oKSA9PSBp
bnNldHMudG9wKCkgJiYgaW5zZXRzLnJpZ2h0KCkgPT0gaW5zZXRzLmxlZnQoKSkgewogICAgICAg
ICAgICAgYm90dG9tID0gdG9wOwogICAgICAgICAgICAgbGVmdCA9IHJpZ2h0OwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKGJveC5ib3R0b20oKS5pc1JlbGF0aXZlKCkpCi0gICAg
ICAgICAgICAgICAgYm90dG9tID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LmJvdHRv
bSgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAg
IGlmIChpbnNldHMuYm90dG9tKCkuaXNSZWxhdGl2ZSgpKQorICAgICAgICAgICAgICAgIGJvdHRv
bSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGluc2V0cy5ib3R0b20oKS52YWx1ZSgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgYm90dG9tID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LmJvdHRvbSgp
KTsKKyAgICAgICAgICAgICAgICBib3R0b20gPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShp
bnNldHMuYm90dG9tKCkpOwogCi0gICAgICAgICAgICBpZiAoYm94LmxlZnQoKSA9PSBib3gucmln
aHQoKSkKKyAgICAgICAgICAgIGlmIChpbnNldHMubGVmdCgpID09IGluc2V0cy5yaWdodCgpKQog
ICAgICAgICAgICAgICAgIGxlZnQgPSByaWdodDsKICAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmIChib3gubGVmdCgpLmlzUmVsYXRpdmUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgbGVmdCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJveC5sZWZ0KCkudmFsdWUoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgICAgIGlmIChpbnNl
dHMubGVmdCgpLmlzUmVsYXRpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGluc2V0cy5sZWZ0KCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgbGVmdCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJveC5sZWZ0KCkpOworICAg
ICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW5zZXRz
LmxlZnQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzA5LDcgKzI3
MDksNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDb21wdXRlZFN0eWxlRXh0cmFjCiAgICAgICAg
ICAgICAgICAgU3R5bGVEYXNoYm9hcmRSZWdpb24gc3R5bGVSZWdpb24gPSByZWdpb25zW2ldOwog
CiAgICAgICAgICAgICAgICAgcmVnaW9uLT5tX2xhYmVsID0gc3R5bGVSZWdpb24ubGFiZWw7Ci0g
ICAgICAgICAgICAgICAgTGVuZ3RoQm94IG9mZnNldCA9IHN0eWxlUmVnaW9uLm9mZnNldDsKKyAg
ICAgICAgICAgICAgICBMZW5ndGhJbnNldHMgb2Zmc2V0ID0gc3R5bGVSZWdpb24ub2Zmc2V0Owog
ICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9wKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zm
c2V0LnRvcCgpLnZhbHVlKCksICpzdHlsZSkpOwogICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0
UmlnaHQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShvZmZzZXQucmlnaHQoKS52YWx1ZSgpLCAqc3R5
bGUpKTsKICAgICAgICAgICAgICAgICByZWdpb24tPnNldEJvdHRvbSh6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKG9mZnNldC5ib3R0b20oKS52YWx1ZSgpLCAqc3R5bGUpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1Byb3BlcnR5LmNwcAkocmV2aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1Byb3BlcnR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lk
IENTU1Byb3BlcnR5Ojp3cmFwVmFsdWVJbkNvbW1hU2VwYXJhCiAKIHN0YXRpYyBDU1NQcm9wZXJ0
eUlEIHJlc29sdmVUb1BoeXNpY2FsUHJvcGVydHkoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBMb2dpY2FsQm94U2lkZSBsb2dpY2FsU2lkZSwgY29uc3Qg
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kKQogewotICAgIHJldHVybiBzaG9ydGhh
bmQucHJvcGVydGllcygpW21hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93
KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBsb2dpY2FsU2lkZSldOworICAgIHJldHVybiBzaG9y
dGhhbmQucHJvcGVydGllcygpW21hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobG9naWNhbFNp
ZGUsIG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSldOwogfQogCiBlbnVtIExv
Z2ljYWxFeHRlbnQgeyBMb2dpY2FsV2lkdGgsIExvZ2ljYWxIZWlnaHQgfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAJKHJldmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDM0ICs2
MTUsMzQgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVNsaQogICAgIGF1
dG8mIGJvcmRlckltYWdlU2xpY2UgPSBkb3duY2FzdDxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+
KHZhbHVlKTsKIAogICAgIC8vIFNldCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBp
bWFnZSBzbGljZXMuCi0gICAgTGVuZ3RoQm94IGJveDsKKyAgICBMZW5ndGhJbnNldHMgaW5zZXRz
OwogICAgIFF1YWQqIHNsaWNlcyA9IGJvcmRlckltYWdlU2xpY2Uuc2xpY2VzKCk7CiAgICAgaWYg
KHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gudG9wKCkgPSBMZW5n
dGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgICAgIGlu
c2V0cy50b3AoKSA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJj
ZW50KTsKICAgICBlbHNlCi0gICAgICAgIGJveC50b3AoKSA9IExlbmd0aChzbGljZXMtPnRvcCgp
LT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIEZpeGVkKTsKKyAg
ICAgICAgaW5zZXRzLnRvcCgpID0gTGVuZ3RoKHNsaWNlcy0+dG9wKCktPmdldEludFZhbHVlKENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOwogICAgIGlmIChzbGljZXMtPmJv
dHRvbSgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgYm94LmJvdHRvbSgpID0gTGVuZ3RoKHNs
aWNlcy0+Ym90dG9tKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOworICAgICAgICBpbnNl
dHMuYm90dG9tKCkgPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoKSwg
UGVyY2VudCk7CiAgICAgZWxzZQotICAgICAgICBib3guYm90dG9tKCkgPSBMZW5ndGgoKGludClz
bGljZXMtPmJvdHRvbSgpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSwgRml4ZWQpOworICAgICAgICBpbnNldHMuYm90dG9tKCkgPSBMZW5ndGgoKGludClzbGlj
ZXMtPmJvdHRvbSgpLT5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KSwgRml4ZWQpOwogICAgIGlmIChzbGljZXMtPmxlZnQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAg
ICAgIGJveC5sZWZ0KCkgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldERvdWJsZVZhbHVlKCks
IFBlcmNlbnQpOworICAgICAgICBpbnNldHMubGVmdCgpID0gTGVuZ3RoKHNsaWNlcy0+bGVmdCgp
LT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNlCi0gICAgICAgIGJveC5sZWZ0
KCkgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldEludFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKSwgRml4ZWQpOworICAgICAgICBpbnNldHMubGVmdCgpID0gTGVuZ3RoKHNs
aWNlcy0+bGVmdCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiks
IEZpeGVkKTsKICAgICBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAg
ICAgYm94LnJpZ2h0KCkgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXREb3VibGVWYWx1ZSgp
LCBQZXJjZW50KTsKKyAgICAgICAgaW5zZXRzLnJpZ2h0KCkgPSBMZW5ndGgoc2xpY2VzLT5yaWdo
dCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNlCi0gICAgICAgIGJveC5y
aWdodCgpID0gTGVuZ3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7Ci0gICAgaW1hZ2Uuc2V0SW1hZ2VTbGljZXMoYm94
KTsKKyAgICAgICAgaW5zZXRzLnJpZ2h0KCkgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5nZXRJ
bnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiksIEZpeGVkKTsKKyAgICBpbWFn
ZS5zZXRJbWFnZVNsaWNlcyhpbnNldHMpOwogCiAgICAgLy8gU2V0IG91ciBmaWxsIG1vZGUuCiAg
ICAgaW1hZ2Uuc2V0RmlsbChib3JkZXJJbWFnZVNsaWNlLm1fZmlsbCk7CiB9CiAKLUxlbmd0aEJv
eCBDU1NUb1N0eWxlTWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUmIHZhbHVlKQor
TGVuZ3RoSW5zZXRzIENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1
ZSYgdmFsdWUpCiB7CiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQotICAg
ICAgICByZXR1cm4gTGVuZ3RoQm94KCk7CisgICAgICAgIHJldHVybiBMZW5ndGhJbnNldHMoKTsK
IAogICAgIC8vIEdldCBvdXIgem9vbSB2YWx1ZS4KICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhIGNvbnZlcnNpb25EYXRhID0gdXNlU1ZHWm9vbVJ1bGVzKCkgPyBtX3Jlc29sdmVyLT5zdGF0
ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBm
KSA6IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwpAQCAt
NjUwLDM4ICs2NTAsMzggQEAgTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUlt
YQogICAgIC8vIFJldHJpZXZlIHRoZSBwcmltaXRpdmUgdmFsdWUuCiAgICAgYXV0byYgYm9yZGVy
V2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAotICAgIC8vIFNl
dCB1cCBhIGxlbmd0aCBib3ggdG8gcmVwcmVzZW50IG91ciBpbWFnZSBzbGljZXMuCi0gICAgTGVu
Z3RoQm94IGJveDsgLy8gRGVmYXVsdHMgdG8gJ2F1dG8nIHNvIHdlIGRvbid0IGhhdmUgdG8gaGFu
ZGxlIHRoYXQgZXhwbGljaXRseSBiZWxvdy4KKyAgICAvLyBTZXQgdXAgYSBsZW5ndGggaW5zZXRz
IHRvIHJlcHJlc2VudCBvdXIgaW1hZ2Ugc2xpY2VzLgorICAgIExlbmd0aEluc2V0cyBpbnNldHM7
IC8vIERlZmF1bHRzIHRvICdhdXRvJyBzbyB3ZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0aGF0IGV4
cGxpY2l0bHkgYmVsb3cuCiAgICAgUXVhZCogc2xpY2VzID0gYm9yZGVyV2lkdGhzLmdldFF1YWRW
YWx1ZSgpOwogICAgIGlmIChzbGljZXMtPnRvcCgpLT5pc051bWJlcigpKQotICAgICAgICBib3gu
dG9wKCkgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwor
ICAgICAgICBpbnNldHMudG9wKCkgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50VmFsdWUo
KSwgUmVsYXRpdmUpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmlzUGVyY2VudGFnZSgp
KQotICAgICAgICBib3gudG9wKCkgPSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0RG91YmxlVmFs
dWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CisgICAgICAg
IGluc2V0cy50b3AoKSA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXREb3VibGVWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChz
bGljZXMtPnRvcCgpLT5nZXRWYWx1ZUlEKCkgIT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBib3gu
dG9wKCkgPSBzbGljZXMtPnRvcCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRh
dGEpOworICAgICAgICBpbnNldHMudG9wKCkgPSBzbGljZXMtPnRvcCgpLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwogCiAgICAgaWYgKHNsaWNlcy0+cmlnaHQoKS0+aXNO
dW1iZXIoKSkKLSAgICAgICAgYm94LnJpZ2h0KCkgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5n
ZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CisgICAgICAgIGluc2V0cy5yaWdodCgpID0gTGVuZ3Ro
KHNsaWNlcy0+cmlnaHQoKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUpOwogICAgIGVsc2UgaWYg
KHNsaWNlcy0+cmlnaHQoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGJveC5yaWdodCgpID0g
TGVuZ3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CisgICAgICAgIGluc2V0cy5yaWdodCgpID0gTGVu
Z3RoKHNsaWNlcy0+cmlnaHQoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdodCgpLT5n
ZXRWYWx1ZUlEKCkgIT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBib3gucmlnaHQoKSA9IHNsaWNl
cy0+cmlnaHQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAg
ICAgaW5zZXRzLnJpZ2h0KCkgPSBzbGljZXMtPnJpZ2h0KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3Ro
Pihjb252ZXJzaW9uRGF0YSk7CiAKICAgICBpZiAoc2xpY2VzLT5ib3R0b20oKS0+aXNOdW1iZXIo
KSkKLSAgICAgICAgYm94LmJvdHRvbSgpID0gTGVuZ3RoKHNsaWNlcy0+Ym90dG9tKCktPmdldElu
dFZhbHVlKCksIFJlbGF0aXZlKTsKKyAgICAgICAgaW5zZXRzLmJvdHRvbSgpID0gTGVuZ3RoKHNs
aWNlcy0+Ym90dG9tKCktPmdldEludFZhbHVlKCksIFJlbGF0aXZlKTsKICAgICBlbHNlIGlmIChz
bGljZXMtPmJvdHRvbSgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgYm94LmJvdHRvbSgpID0g
TGVuZ3RoKHNsaWNlcy0+Ym90dG9tKCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQpOworICAgICAgICBpbnNldHMuYm90dG9tKCkgPSBM
ZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5ib3R0b20o
KS0+Z2V0VmFsdWVJRCgpICE9IENTU1ZhbHVlQXV0bykKLSAgICAgICAgYm94LmJvdHRvbSgpID0g
c2xpY2VzLT5ib3R0b20oKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsK
KyAgICAgICAgaW5zZXRzLmJvdHRvbSgpID0gc2xpY2VzLT5ib3R0b20oKS0+Y29tcHV0ZUxlbmd0
aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKIAogICAgIGlmIChzbGljZXMtPmxlZnQoKS0+aXNO
dW1iZXIoKSkKLSAgICAgICAgYm94LmxlZnQoKSA9IExlbmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0
SW50VmFsdWUoKSwgUmVsYXRpdmUpOworICAgICAgICBpbnNldHMubGVmdCgpID0gTGVuZ3RoKHNs
aWNlcy0+bGVmdCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xp
Y2VzLT5sZWZ0KCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gubGVmdCgpID0gTGVuZ3Ro
KHNsaWNlcy0+bGVmdCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BF
UkNFTlRBR0UpLCBQZXJjZW50KTsKKyAgICAgICAgaW5zZXRzLmxlZnQoKSA9IExlbmd0aChzbGlj
ZXMtPmxlZnQoKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5U
QUdFKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5sZWZ0KCktPmdldFZhbHVlSUQo
KSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC5sZWZ0KCkgPSBzbGljZXMtPmxlZnQoKS0+
Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgaW5zZXRzLmxl
ZnQoKSA9IHNsaWNlcy0+bGVmdCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRh
dGEpOwogCi0gICAgcmV0dXJuIGJveDsKKyAgICByZXR1cm4gaW5zZXRzOwogfQogCiB2b2lkIENT
U1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlJiB2YWx1ZSwgTmlu
ZVBpZWNlSW1hZ2UmIGltYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCShy
ZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIFN0eWxlSW1hZ2U7CiBjbGFzcyBT
dHlsZVJlc29sdmVyOwogY2xhc3MgTmluZVBpZWNlSW1hZ2U7CiAKLWNsYXNzIExlbmd0aEJveDsK
K2NsYXNzIExlbmd0aEluc2V0czsKIAogY2xhc3MgQ1NTVG9TdHlsZU1hcCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ1NTVG9TdHlsZU1hcCk7CkBAIC03Myw3ICs3Myw3IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBO
aW5lUGllY2VJbWFnZSYpOwogICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VTbGljZShDU1NWYWx1
ZSYsIE5pbmVQaWVjZUltYWdlJik7Ci0gICAgTGVuZ3RoQm94IG1hcE5pbmVQaWVjZUltYWdlUXVh
ZChDU1NWYWx1ZSYpOworICAgIExlbmd0aEluc2V0cyBtYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NT
VmFsdWUmKTsKICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlJiwgTmlu
ZVBpZWNlSW1hZ2UmKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZUJ1aWxkZXJDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVC
dWlsZGVyQ3VzdG9tLmgJKHJldmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZUJ1aWxkZXJDdXN0b20uaAkod29ya2luZyBjb3B5KQpAQCAtNTM0LDcgKzUzNCw3IEBAIHB1
YmxpYzoKICAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci5zdHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBP
dXRzZXQ6Ci0gICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQoTGVuZ3RoQm94KDApKTsKKyAgICAg
ICAgICAgIGltYWdlLnNldE91dHNldChMZW5ndGhJbnNldHMoMCkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUmVwZWF0OgogICAgICAgICAgICAgaW1hZ2Uuc2V0SG9yaXpvbnRh
bFJ1bGUoU3RyZXRjaEltYWdlUnVsZSk7CkBAIC01NDIsMTIgKzU0MiwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTbGljZToKICAgICAgICAgICAgIC8vIE1h
c2tzIGhhdmUgYSBkaWZmZXJlbnQgaW5pdGlhbCB2YWx1ZSBmb3Igc2xpY2VzLiBQcmVzZXJ2ZSB0
aGUgdmFsdWUgb2YgMCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCi0gICAgICAgICAgICBp
bWFnZS5zZXRJbWFnZVNsaWNlcyh0eXBlID09IEJvcmRlckltYWdlID8gTGVuZ3RoQm94KExlbmd0
aCgxMDAsIFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQZXJjZW50KSwgTGVuZ3RoKDEwMCwgUGVyY2Vu
dCksIExlbmd0aCgxMDAsIFBlcmNlbnQpKSA6IExlbmd0aEJveCgpKTsKKyAgICAgICAgICAgIGlt
YWdlLnNldEltYWdlU2xpY2VzKHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhJbnNldHMoTGVu
Z3RoKDEwMCwgUGVyY2VudCksIExlbmd0aCgxMDAsIFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQZXJj
ZW50KSwgTGVuZ3RoKDEwMCwgUGVyY2VudCkpIDogTGVuZ3RoSW5zZXRzKCkpOwogICAgICAgICAg
ICAgaW1hZ2Uuc2V0RmlsbChmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBXaWR0aDoKICAgICAgICAgICAgIC8vIE1hc2tzIGhhdmUgYSBkaWZmZXJlbnQgaW5pdGlhbCB2
YWx1ZSBmb3Igd2lkdGhzLiBUaGV5IHVzZSBhbiAnYXV0bycgdmFsdWUgcmF0aGVyIHRoYW4gdHJ5
aW5nIHRvIGZpdCB0byB0aGUgYm9yZGVyLgotICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xp
Y2VzKHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEsIFJlbGF0aXZlKSwg
TGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0aXZlKSwgTGVuZ3RoKDEsIFJlbGF0
aXZlKSkgOiBMZW5ndGhCb3goKSk7CisgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMo
dHlwZSA9PSBCb3JkZXJJbWFnZSA/IExlbmd0aEluc2V0cyhMZW5ndGgoMSwgUmVsYXRpdmUpLCBM
ZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRp
dmUpKSA6IExlbmd0aEluc2V0cygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSwgaW1hZ2UpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAkocmV2aXNpb24g
MTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsMTMgKzEwNywxMyBAQCBzdGF0aWMgdm9pZCBidWlsZFJl
bmRlcmVySGlnaGxpZ2h0KFJlbmRlCiAgICAgICAgIGlmIChpczxSZW5kZXJCb3g+KCpyZW5kZXJl
cikpIHsKICAgICAgICAgICAgIGF1dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4o
KnJlbmRlcmVyKTsKIAotICAgICAgICAgICAgTGF5b3V0Qm94RXh0ZW50IG1hcmdpbnMocmVuZGVy
Qm94Lm1hcmdpblRvcCgpLCByZW5kZXJCb3gubWFyZ2luUmlnaHQoKSwgcmVuZGVyQm94Lm1hcmdp
bkJvdHRvbSgpLCByZW5kZXJCb3gubWFyZ2luTGVmdCgpKTsKKyAgICAgICAgICAgIExheW91dElu
c2V0cyBtYXJnaW5zKHJlbmRlckJveC5tYXJnaW5Ub3AoKSwgcmVuZGVyQm94Lm1hcmdpblJpZ2h0
KCksIHJlbmRlckJveC5tYXJnaW5Cb3R0b20oKSwgcmVuZGVyQm94Lm1hcmdpbkxlZnQoKSk7CiAK
ICAgICAgICAgICAgIGlmICghcmVuZGVyQm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIHJl
Z2lvbikgewogICAgICAgICAgICAgICAgIFJlbmRlckJveDo6TG9naWNhbEV4dGVudENvbXB1dGVk
VmFsdWVzIGNvbXB1dGVkVmFsdWVzOwogICAgICAgICAgICAgICAgIHJlbmRlckJveC5jb21wdXRl
TG9naWNhbFdpZHRoSW5SZWdpb24oY29tcHV0ZWRWYWx1ZXMsIHJlZ2lvbik7Ci0gICAgICAgICAg
ICAgICAgbWFyZ2lucy5zdGFydChyZW5kZXJCb3guc3R5bGUoKS53cml0aW5nTW9kZSgpKSA9IGNv
bXB1dGVkVmFsdWVzLm1fbWFyZ2lucy5tX3N0YXJ0OwotICAgICAgICAgICAgICAgIG1hcmdpbnMu
ZW5kKHJlbmRlckJveC5zdHlsZSgpLndyaXRpbmdNb2RlKCkpID0gY29tcHV0ZWRWYWx1ZXMubV9t
YXJnaW5zLm1fZW5kOworICAgICAgICAgICAgICAgIG1hcmdpbnMuc2V0U3RhcnQoY29tcHV0ZWRW
YWx1ZXMubV9tYXJnaW5zLm1fc3RhcnQsIHJlbmRlckJveC5zdHlsZSgpLndyaXRpbmdNb2RlKCkp
OworICAgICAgICAgICAgICAgIG1hcmdpbnMuc2V0RW5kKGNvbXB1dGVkVmFsdWVzLm1fbWFyZ2lu
cy5tX2VuZCwgcmVuZGVyQm94LnN0eWxlKCkud3JpdGluZ01vZGUoKSk7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIHBhZGRpbmdCb3ggPSByZW5kZXJCb3guY2xpZW50Qm94UmVjdEluUmVn
aW9uKHJlZ2lvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0Miw5ICsyNDIsOSBAQCBzdGF0aWMgaW5saW5lIEVWaXNpYmlsaXR5IGJs
ZW5kRnVuYyhjb25zCiAgICAgcmV0dXJuIHJlc3VsdCA+IDAuID8gVklTSUJMRSA6ICh0byAhPSBW
SVNJQkxFID8gdG8gOiBmcm9tKTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGhCb3ggYmxlbmRG
dW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGNvbnN0IExlbmd0aEJveCYgZnJvbSwgY29u
c3QgTGVuZ3RoQm94JiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBMZW5ndGhJ
bnNldHMgYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGNvbnN0IExlbmd0aElu
c2V0cyYgZnJvbSwgY29uc3QgTGVuZ3RoSW5zZXRzJiB0bywgZG91YmxlIHByb2dyZXNzKQogewot
ICAgIExlbmd0aEJveCByZXN1bHQoYmxlbmRGdW5jKGFuaW0sIGZyb20udG9wKCksIHRvLnRvcCgp
LCBwcm9ncmVzcyksCisgICAgTGVuZ3RoSW5zZXRzIHJlc3VsdChibGVuZEZ1bmMoYW5pbSwgZnJv
bS50b3AoKSwgdG8udG9wKCksIHByb2dyZXNzKSwKICAgICAgICAgICAgICAgICAgICAgIGJsZW5k
RnVuYyhhbmltLCBmcm9tLnJpZ2h0KCksIHRvLnJpZ2h0KCksIHByb2dyZXNzKSwKICAgICAgICAg
ICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwg
cHJvZ3Jlc3MpLAogICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVm
dCgpLCB0by5sZWZ0KCksIHByb2dyZXNzKSk7CkBAIC0xMjAzLDkgKzEyMDMsOSBAQCBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OkNTU1Byb3BlCiAgICAgICAgIG5ldyBTdHlsZUltYWdl
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCAmUmVuZGVyU3R5bGU6
Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrSW1hZ2UpLAogCiAgICAgICAgIG5ldyBT
dHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1h
Z2VTb3VyY2UpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4o
Q1NTUHJvcGVydHlCb3JkZXJJbWFnZVNsaWNlLCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlU2xp
Y2VzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlU2xpY2VzKSwKLSAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0
aCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRl
ckltYWdlV2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyPExlbmd0aEJv
eD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFn
ZU91dHNldCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoSW5zZXRzPihDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlU2xpY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTbGljZXMsICZSZW5kZXJTdHlsZTo6
c2V0Qm9yZGVySW1hZ2VTbGljZXMpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
PExlbmd0aEluc2V0cz4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OmJvcmRlckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCisg
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoSW5zZXRzPihDU1NQcm9wZXJ0
eUJvcmRlckltYWdlT3V0c2V0LCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlT3V0c2V0LCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckltYWdlT3V0c2V0KSwKIAogICAgICAgICBuZXcgU3R5bGVJbWFn
ZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZSwgJlJl
bmRlclN0eWxlOjptYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveElt
YWdlU291cmNlKSwKICAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBOaW5lUGllY2VJ
bWFnZSY+KENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tC
b3hJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2UpLApAQCAtMTI1OCw3ICsxMjU4
LDcgQEAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpDU1NQcm9wZQogICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyPEVWaXNpYmlsaXR5PihDU1NQcm9wZXJ0eVZpc2liaWxpdHksICZS
ZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRWaXNpYmlsaXR5KSwKICAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlab29tLCAmUmVuZGVy
U3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhvdXRSZXR1cm5WYWx1ZSksCiAK
LSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5
Q2xpcCwgJlJlbmRlclN0eWxlOjpjbGlwLCAmUmVuZGVyU3R5bGU6OnNldENsaXApLAorICAgICAg
ICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyPExlbmd0aEluc2V0cz4oQ1NTUHJvcGVydHlDbGlw
LCAmUmVuZGVyU3R5bGU6OmNsaXAsICZSZW5kZXJTdHlsZTo6c2V0Q2xpcCksCiAKICAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpLAogICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0luc2V0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0luc2V0cy5oCShyZXZpc2lvbiAxODc1MTEpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0xlbmd0aEJveC5oOjE4NzUxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0luc2V0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICAgIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgQ29weXJpZ2h0
IChjKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
TGVuZ3RoQm94X2gKKyNkZWZpbmUgTGVuZ3RoQm94X2gKKworI2luY2x1ZGUgIkxlbmd0aC5oIgor
I2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCisjaW5jbHVkZSA8YXJyYXk+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgQm94RXh0ZW50IHsKK3B1Ymxp
YzoKKyAgICBCb3hFeHRlbnQoKQorICAgICAgICA6IG1fc2lkZXMoe3sgVCgwKSwgVCgwKSwgVCgw
KSwgVCgwKSB9fSkKKyAgICB7CisgICAgfQorCisgICAgQm94RXh0ZW50KGNvbnN0IFQmIHRvcCwg
Y29uc3QgVCYgcmlnaHQsIGNvbnN0IFQmIGJvdHRvbSwgY29uc3QgVCYgbGVmdCkKKyAgICAgICAg
OiBtX3NpZGVzKHt7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9fSkKKyAgICB7CisgICAgfQor
CisgICAgVCYgYXQoUGh5c2ljYWxCb3hTaWRlIHNpZGUpIHsgcmV0dXJuIG1fc2lkZXNbc2lkZV07
IH0KKyAgICBUJiB0b3AoKSB7IHJldHVybiBhdChUb3BTaWRlKTsgfQorICAgIFQmIHJpZ2h0KCkg
eyByZXR1cm4gYXQoUmlnaHRTaWRlKTsgfQorICAgIFQmIGJvdHRvbSgpIHsgcmV0dXJuIGF0KEJv
dHRvbVNpZGUpOyB9CisgICAgVCYgbGVmdCgpIHsgcmV0dXJuIGF0KExlZnRTaWRlKTsgfQorCisg
ICAgY29uc3QgVCYgYXQoUGh5c2ljYWxCb3hTaWRlIHNpZGUpIGNvbnN0IHsgcmV0dXJuIG1fc2lk
ZXNbc2lkZV07IH0KKyAgICBjb25zdCBUJiB0b3AoKSBjb25zdCB7IHJldHVybiBhdChUb3BTaWRl
KTsgfQorICAgIGNvbnN0IFQmIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gYXQoUmlnaHRTaWRlKTsg
fQorICAgIGNvbnN0IFQmIGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGF0KEJvdHRvbVNpZGUpOyB9
CisgICAgY29uc3QgVCYgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIGF0KExlZnRTaWRlKTsgfQorCisg
ICAgdm9pZCBzZXRBdChQaHlzaWNhbEJveFNpZGUgc2lkZSwgY29uc3QgVCYgdikgeyBhdChzaWRl
KSA9IHY7IH0KKyAgICB2b2lkIHNldFRvcChjb25zdCBUJiB0b3ApIHsgc2V0QXQoVG9wU2lkZSwg
dG9wKTsgfQorICAgIHZvaWQgc2V0UmlnaHQoY29uc3QgVCYgcmlnaHQpIHsgc2V0QXQoUmlnaHRT
aWRlLCByaWdodCk7IH0KKyAgICB2b2lkIHNldEJvdHRvbShjb25zdCBUJiBib3R0b20pIHsgc2V0
QXQoQm90dG9tU2lkZSwgYm90dG9tKTsgfQorICAgIHZvaWQgc2V0TGVmdChjb25zdCBUJiBsZWZ0
KSB7IHNldEF0KExlZnRTaWRlLCBsZWZ0KTsgfQorCisgICAgVCYgYmVmb3JlKFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9Q
aHlzaWNhbFNpZGUod3JpdGluZ01vZGUsIEJlZm9yZVNpZGUpKTsKKyAgICB9CisKKyAgICBUJiBh
ZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhdCht
YXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKHdyaXRpbmdNb2RlLCBBZnRlclNpZGUpKTsKKyAg
ICB9CisKKyAgICBUJiBzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24gPSBMVFIpCisgICAgeworICAgICAgICByZXR1cm4gYXQobWFwTG9naWNhbFNp
ZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIFN0
YXJ0U2lkZSkpOworICAgIH0KKworICAgIFQmIGVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIpCisgICAgeworICAgICAgICByZXR1cm4gYXQo
bWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRp
cmVjdGlvbiksIEVuZFNpZGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBiZWZvcmUoV3JpdGlu
Z01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQobWFwTG9n
aWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgQmVmb3JlU2lkZSkpOworICAgIH0K
KworICAgIGNvbnN0IFQmIGFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGlu
Z01vZGUsIEFmdGVyU2lkZSkpOworICAgIH0KKworICAgIGNvbnN0IFQmIHN0YXJ0KFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VU
ZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgU3RhcnRTaWRlKSk7CisgICAgfQorCisg
ICAgY29uc3QgVCYgZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiA9IExUUikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdChtYXBMb2dpY2Fs
U2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwg
RW5kU2lkZSkpOworICAgIH0KKworICAgIHZvaWQgc2V0QmVmb3JlKGNvbnN0IFQmIGJlZm9yZSwg
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgdGhpcy0+YmVmb3JlKHdyaXRpbmdNb2RlKSA9IGJl
Zm9yZTsgfQorICAgIHZvaWQgc2V0QWZ0ZXIoY29uc3QgVCYgYWZ0ZXIsIFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKSB7IHRoaXMtPmFmdGVyKHdyaXRpbmdNb2RlKSA9IGFmdGVyOyB9CisgICAgdm9p
ZCBzZXRTdGFydChjb25zdCBUJiBzdGFydCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSB7IHRoaXMtPnN0YXJ0KHdyaXRpbmdNb2RlLCBkaXJl
Y3Rpb24pID0gc3RhcnQ7IH0KKyAgICB2b2lkIHNldEVuZChjb25zdCBUJiBlbmQsIFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikgeyB0aGlzLT5l
bmQod3JpdGluZ01vZGUsIGRpcmVjdGlvbikgPSBlbmQ7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBCb3hFeHRlbnQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
c2lkZXMgPT0gb3RoZXIubV9zaWRlczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgQm94RXh0ZW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NpZGVz
ICE9IG90aGVyLm1fc2lkZXM7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RkOjphcnJheTxU
LCA0PiBtX3NpZGVzOworfTsKKworY2xhc3MgTGVuZ3RoQm94IDogcHVibGljIEJveEV4dGVudDxM
ZW5ndGg+IHsKK3B1YmxpYzoKKyAgICBMZW5ndGhCb3goKQorICAgICAgICA6IExlbmd0aEJveChB
dXRvKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBMZW5ndGhCb3goTGVuZ3RoVHlwZSB0
eXBlKQorICAgICAgICA6IEJveEV4dGVudChMZW5ndGgodHlwZSksIExlbmd0aCh0eXBlKSwgTGVu
Z3RoKHR5cGUpLCBMZW5ndGgodHlwZSkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IExl
bmd0aEJveChpbnQgdikKKyAgICAgICAgOiBCb3hFeHRlbnQoTGVuZ3RoKHYsIEZpeGVkKSwgTGVu
Z3RoKHYsIEZpeGVkKSwgTGVuZ3RoKHYsIEZpeGVkKSwgTGVuZ3RoKHYsIEZpeGVkKSkKKyAgICB7
CisgICAgfQorCisgICAgTGVuZ3RoQm94KGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSwg
aW50IGxlZnQpCisgICAgICAgIDogQm94RXh0ZW50KExlbmd0aCh0b3AsIEZpeGVkKSwgTGVuZ3Ro
KHJpZ2h0LCBGaXhlZCksIExlbmd0aChib3R0b20sIEZpeGVkKSwgTGVuZ3RoKGxlZnQsIEZpeGVk
KSkKKyAgICB7CisgICAgfQorCisgICAgTGVuZ3RoQm94KGNvbnN0IExlbmd0aCYgdG9wLCBjb25z
dCBMZW5ndGgmIHJpZ2h0LCBjb25zdCBMZW5ndGgmIGJvdHRvbSwgY29uc3QgTGVuZ3RoJiBsZWZ0
KQorICAgICAgICA6IEJveEV4dGVudCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpCisgICAgewor
ICAgIH0KKworICAgIGJvb2wgaXNaZXJvKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
b3AoKS5pc1plcm8oKSAmJiByaWdodCgpLmlzWmVybygpICYmIGJvdHRvbSgpLmlzWmVybygpICYm
IGxlZnQoKS5pc1plcm8oKTsKKyAgICB9Cit9OworCit0eXBlZGVmIEJveEV4dGVudDxMYXlvdXRV
bml0PiBMYXlvdXRCb3hFeHRlbnQ7Cit0eXBlZGVmIEJveEV4dGVudDxmbG9hdD4gRmxvYXRCb3hF
eHRlbnQ7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIExlbmd0aEJveF9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9JbnNldHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9JbnNldHMuaAkod29ya2luZyBjb3B5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vSW5zZXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDggKzE5LDgg
QEAKICAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICovCiAKLSNpZm5kZWYgTGVuZ3Ro
Qm94X2gKLSNkZWZpbmUgTGVuZ3RoQm94X2gKKyNpZm5kZWYgSW5zZXRzX2gKKyNkZWZpbmUgSW5z
ZXRzX2gKIAogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIldyaXRpbmdNb2RlLmgiCkBA
IC0yOCwxMTkgKzI4LDEwMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIEJveEV4dGVudCB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBJ
bnNldHMgewogcHVibGljOgotICAgIEJveEV4dGVudCgpCisgICAgSW5zZXRzKCkKICAgICAgICAg
OiBtX3NpZGVzKHt7IFQoMCksIFQoMCksIFQoMCksIFQoMCkgfX0pCiAgICAgewogICAgIH0KIAot
ICAgIEJveEV4dGVudChjb25zdCBUJiB0b3AsIGNvbnN0IFQmIHJpZ2h0LCBjb25zdCBUJiBib3R0
b20sIGNvbnN0IFQmIGxlZnQpCisgICAgSW5zZXRzKGNvbnN0IFQmIHRvcCwgY29uc3QgVCYgcmln
aHQsIGNvbnN0IFQmIGJvdHRvbSwgY29uc3QgVCYgbGVmdCkKICAgICAgICAgOiBtX3NpZGVzKHt7
IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9fSkKICAgICB7CiAgICAgfQogCitwcm90ZWN0ZWQ6
CiAgICAgVCYgYXQoUGh5c2ljYWxCb3hTaWRlIHNpZGUpIHsgcmV0dXJuIG1fc2lkZXNbc2lkZV07
IH0KLSAgICBUJiB0b3AoKSB7IHJldHVybiBhdChUb3BTaWRlKTsgfQotICAgIFQmIHJpZ2h0KCkg
eyByZXR1cm4gYXQoUmlnaHRTaWRlKTsgfQotICAgIFQmIGJvdHRvbSgpIHsgcmV0dXJuIGF0KEJv
dHRvbVNpZGUpOyB9Ci0gICAgVCYgbGVmdCgpIHsgcmV0dXJuIGF0KExlZnRTaWRlKTsgfQotCisg
ICAgVCYgYXQoTG9naWNhbEJveFNpZGUgc2lkZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsg
cmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUoc2lkZSwgd3JpdGluZ01vZGUp
KTsgfQorICAgIFQmIGF0KExvZ2ljYWxCb3hTaWRlIHNpZGUsIFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBhdCht
YXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKHNpZGUsIG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9k
ZSwgZGlyZWN0aW9uKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEF0KFBoeXNpY2FsQm94
U2lkZSBzaWRlLCBjb25zdCBUJiB2KSB7IGF0KHNpZGUpID0gdjsgfQorICAgIHZvaWQgc2V0QXQo
TG9naWNhbEJveFNpZGUgc2lkZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIGNvbnN0IFQmIHYp
IHsgYXQoc2lkZSwgd3JpdGluZ01vZGUpID0gdjsgfQorICAgIHZvaWQgc2V0QXQoTG9naWNhbEJv
eFNpZGUgc2lkZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uLCBjb25zdCBUJiB2KSB7IGF0KHNpZGUsIHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pID0gdjsg
fQorICAgIAorcHVibGljOgogICAgIGNvbnN0IFQmIGF0KFBoeXNpY2FsQm94U2lkZSBzaWRlKSBj
b25zdCB7IHJldHVybiBtX3NpZGVzW3NpZGVdOyB9CisgICAgY29uc3QgVCYgYXQoTG9naWNhbEJv
eFNpZGUgc2lkZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGF0KG1h
cExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUoc2lkZSwgd3JpdGluZ01vZGUpKTsgfQorICAgIGNv
bnN0IFQmIGF0KExvZ2ljYWxCb3hTaWRlIHNpZGUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdCht
YXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKHNpZGUsIG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9k
ZSwgZGlyZWN0aW9uKSkpOworICAgIH0KKwogICAgIGNvbnN0IFQmIHRvcCgpIGNvbnN0IHsgcmV0
dXJuIGF0KFRvcFNpZGUpOyB9CiAgICAgY29uc3QgVCYgcmlnaHQoKSBjb25zdCB7IHJldHVybiBh
dChSaWdodFNpZGUpOyB9CiAgICAgY29uc3QgVCYgYm90dG9tKCkgY29uc3QgeyByZXR1cm4gYXQo
Qm90dG9tU2lkZSk7IH0KICAgICBjb25zdCBUJiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gYXQoTGVm
dFNpZGUpOyB9CiAKLSAgICB2b2lkIHNldEF0KFBoeXNpY2FsQm94U2lkZSBzaWRlLCBjb25zdCBU
JiB2KSB7IGF0KHNpZGUpID0gdjsgfQorICAgIFQmIHRvcCgpIHsgcmV0dXJuIGF0KFRvcFNpZGUp
OyB9CisgICAgVCYgcmlnaHQoKSB7IHJldHVybiBhdChSaWdodFNpZGUpOyB9CisgICAgVCYgYm90
dG9tKCkgeyByZXR1cm4gYXQoQm90dG9tU2lkZSk7IH0KKyAgICBUJiBsZWZ0KCkgeyByZXR1cm4g
YXQoTGVmdFNpZGUpOyB9CisKICAgICB2b2lkIHNldFRvcChjb25zdCBUJiB0b3ApIHsgc2V0QXQo
VG9wU2lkZSwgdG9wKTsgfQogICAgIHZvaWQgc2V0UmlnaHQoY29uc3QgVCYgcmlnaHQpIHsgc2V0
QXQoUmlnaHRTaWRlLCByaWdodCk7IH0KICAgICB2b2lkIHNldEJvdHRvbShjb25zdCBUJiBib3R0
b20pIHsgc2V0QXQoQm90dG9tU2lkZSwgYm90dG9tKTsgfQogICAgIHZvaWQgc2V0TGVmdChjb25z
dCBUJiBsZWZ0KSB7IHNldEF0KExlZnRTaWRlLCBsZWZ0KTsgfQogCi0gICAgVCYgYmVmb3JlKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2lj
YWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGluZ01vZGUsIEJlZm9yZVNpZGUpKTsKLSAgICB9Cisg
ICAgY29uc3QgVCYgYmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVy
biBhdChCZWZvcmVTaWRlLCB3cml0aW5nTW9kZSk7IH0KKyAgICBjb25zdCBUJiBhZnRlcihXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gYXQoQWZ0ZXJTaWRlLCB3cml0aW5n
TW9kZSk7IH0KKyAgICBjb25zdCBUJiBzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4
dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIpIGNvbnN0IHsgcmV0dXJuIGF0KFN0YXJ0U2lkZSwg
d3JpdGluZ01vZGUsIGRpcmVjdGlvbik7IH0KKyAgICBjb25zdCBUJiBlbmQoV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSBjb25zdCB7IHJldHVy
biBhdChFbmRTaWRlLCB3cml0aW5nTW9kZSwgZGlyZWN0aW9uKTsgfQorCisgICAgdm9pZCBzZXRC
ZWZvcmUoY29uc3QgVCYgYmVmb3JlLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBzZXRBdChC
ZWZvcmVTaWRlLCB3cml0aW5nTW9kZSwgYmVmb3JlKTsgfQorICAgIHZvaWQgc2V0QWZ0ZXIoY29u
c3QgVCYgYWZ0ZXIsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IHNldEF0KEFmdGVyU2lkZSwg
d3JpdGluZ01vZGUsIGFmdGVyKTsgfQorICAgIHZvaWQgc2V0U3RhcnQoY29uc3QgVCYgc3RhcnQs
IFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikg
eyBzZXRBdChTdGFydFNpZGUsIHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24sIHN0YXJ0KTsgfQorICAg
IHZvaWQgc2V0RW5kKGNvbnN0IFQmIGVuZCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSB7IHNldEF0KEVuZFNpZGUsIHdyaXRpbmdNb2RlLCBk
aXJlY3Rpb24sIGVuZCk7IH0KKyAgICAKKyAgICBUIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbGVm
dCgpICsgcmlnaHQoKTsgfQorICAgIFQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gdG9wKCkgKyBi
b3R0b20oKTsgfQogCi0gICAgVCYgYWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCisgICAg
dm9pZCBzY2FsZShmbG9hdCBmYWN0b3IpCiAgICAgewotICAgICAgICByZXR1cm4gYXQobWFwTG9n
aWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgQWZ0ZXJTaWRlKSk7CisgICAgICAg
IGZvciAoYXV0byAmc2lkZSA6IG1fc2lkZXMpCisgICAgICAgICAgICBzaWRlICo9IGZhY3RvcjsK
ICAgICB9CiAKLSAgICBUJiBzdGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24gPSBMVFIpCi0gICAgewotICAgICAgICByZXR1cm4gYXQobWFwTG9naWNh
bFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiks
IFN0YXJ0U2lkZSkpOwotICAgIH0KLQotICAgIFQmIGVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIpCi0gICAgewotICAgICAgICByZXR1cm4g
YXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUs
IGRpcmVjdGlvbiksIEVuZFNpZGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBUJiBiZWZvcmUoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXQobWFw
TG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgQmVmb3JlU2lkZSkpOwotICAg
IH0KLQotICAgIGNvbnN0IFQmIGFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3Jp
dGluZ01vZGUsIEFmdGVyU2lkZSkpOwotICAgIH0KLQotICAgIGNvbnN0IFQmIHN0YXJ0KFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1h
a2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgU3RhcnRTaWRlKSk7Ci0gICAgfQot
Ci0gICAgY29uc3QgVCYgZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiA9IExUUikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dp
Y2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9u
KSwgRW5kU2lkZSkpOwotICAgIH0KLQotICAgIHZvaWQgc2V0QmVmb3JlKGNvbnN0IFQmIGJlZm9y
ZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgdGhpcy0+YmVmb3JlKHdyaXRpbmdNb2RlKSA9
IGJlZm9yZTsgfQotICAgIHZvaWQgc2V0QWZ0ZXIoY29uc3QgVCYgYWZ0ZXIsIFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlKSB7IHRoaXMtPmFmdGVyKHdyaXRpbmdNb2RlKSA9IGFmdGVyOyB9Ci0gICAg
dm9pZCBzZXRTdGFydChjb25zdCBUJiBzdGFydCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSB7IHRoaXMtPnN0YXJ0KHdyaXRpbmdNb2RlLCBk
aXJlY3Rpb24pID0gc3RhcnQ7IH0KLSAgICB2b2lkIHNldEVuZChjb25zdCBUJiBlbmQsIFdyaXRp
bmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikgeyB0aGlz
LT5lbmQod3JpdGluZ01vZGUsIGRpcmVjdGlvbikgPSBlbmQ7IH0KLQotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBCb3hFeHRlbnQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fc2lkZXMgPT0gb3RoZXIubV9zaWRlczsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgQm94RXh0ZW50JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Np
ZGVzICE9IG90aGVyLm1fc2lkZXM7Ci0gICAgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJ
bnNldHMmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3NpZGVzID09IG90aGVyLm1fc2lkZXM7IH0K
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSW5zZXRzJiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV9zaWRlcyAhPSBvdGhlci5tX3NpZGVzOyB9CiAKIHByb3RlY3RlZDoKICAgICBzdGQ6OmFycmF5
PFQsIDQ+IG1fc2lkZXM7CiB9OwogCi1jbGFzcyBMZW5ndGhCb3ggOiBwdWJsaWMgQm94RXh0ZW50
PExlbmd0aD4geworY2xhc3MgTGVuZ3RoSW5zZXRzIDogcHVibGljIEluc2V0czxMZW5ndGg+IHsK
IHB1YmxpYzoKLSAgICBMZW5ndGhCb3goKQotICAgICAgICA6IExlbmd0aEJveChBdXRvKQorICAg
IExlbmd0aEluc2V0cygpCisgICAgICAgIDogTGVuZ3RoSW5zZXRzKEF1dG8pCiAgICAgewogICAg
IH0KIAotICAgIGV4cGxpY2l0IExlbmd0aEJveChMZW5ndGhUeXBlIHR5cGUpCi0gICAgICAgIDog
Qm94RXh0ZW50KExlbmd0aCh0eXBlKSwgTGVuZ3RoKHR5cGUpLCBMZW5ndGgodHlwZSksIExlbmd0
aCh0eXBlKSkKKyAgICBleHBsaWNpdCBMZW5ndGhJbnNldHMoTGVuZ3RoVHlwZSB0eXBlKQorICAg
ICAgICA6IEluc2V0cyhMZW5ndGgodHlwZSksIExlbmd0aCh0eXBlKSwgTGVuZ3RoKHR5cGUpLCBM
ZW5ndGgodHlwZSkpCiAgICAgewogICAgIH0KIAotICAgIGV4cGxpY2l0IExlbmd0aEJveChpbnQg
dikKLSAgICAgICAgOiBCb3hFeHRlbnQoTGVuZ3RoKHYsIEZpeGVkKSwgTGVuZ3RoKHYsIEZpeGVk
KSwgTGVuZ3RoKHYsIEZpeGVkKSwgTGVuZ3RoKHYsIEZpeGVkKSkKKyAgICBleHBsaWNpdCBMZW5n
dGhJbnNldHMoaW50IHYpCisgICAgICAgIDogSW5zZXRzKExlbmd0aCh2LCBGaXhlZCksIExlbmd0
aCh2LCBGaXhlZCksIExlbmd0aCh2LCBGaXhlZCksIExlbmd0aCh2LCBGaXhlZCkpCiAgICAgewog
ICAgIH0KIAotICAgIExlbmd0aEJveChpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20sIGlu
dCBsZWZ0KQotICAgICAgICA6IEJveEV4dGVudChMZW5ndGgodG9wLCBGaXhlZCksIExlbmd0aChy
aWdodCwgRml4ZWQpLCBMZW5ndGgoYm90dG9tLCBGaXhlZCksIExlbmd0aChsZWZ0LCBGaXhlZCkp
CisgICAgTGVuZ3RoSW5zZXRzKGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSwgaW50IGxl
ZnQpCisgICAgICAgIDogSW5zZXRzKExlbmd0aCh0b3AsIEZpeGVkKSwgTGVuZ3RoKHJpZ2h0LCBG
aXhlZCksIExlbmd0aChib3R0b20sIEZpeGVkKSwgTGVuZ3RoKGxlZnQsIEZpeGVkKSkKICAgICB7
CiAgICAgfQogCi0gICAgTGVuZ3RoQm94KGNvbnN0IExlbmd0aCYgdG9wLCBjb25zdCBMZW5ndGgm
IHJpZ2h0LCBjb25zdCBMZW5ndGgmIGJvdHRvbSwgY29uc3QgTGVuZ3RoJiBsZWZ0KQotICAgICAg
ICA6IEJveEV4dGVudCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpCisgICAgTGVuZ3RoSW5zZXRz
KGNvbnN0IExlbmd0aCYgdG9wLCBjb25zdCBMZW5ndGgmIHJpZ2h0LCBjb25zdCBMZW5ndGgmIGJv
dHRvbSwgY29uc3QgTGVuZ3RoJiBsZWZ0KQorICAgICAgICA6IEluc2V0cyh0b3AsIHJpZ2h0LCBi
b3R0b20sIGxlZnQpCiAgICAgewogICAgIH0KIApAQCAtMTUwLDkgKzEzNCw5IEBAIHB1YmxpYzoK
ICAgICB9CiB9OwogCi10eXBlZGVmIEJveEV4dGVudDxMYXlvdXRVbml0PiBMYXlvdXRCb3hFeHRl
bnQ7Ci10eXBlZGVmIEJveEV4dGVudDxmbG9hdD4gRmxvYXRCb3hFeHRlbnQ7Cit0eXBlZGVmIElu
c2V0czxMYXlvdXRVbml0PiBMYXlvdXRJbnNldHM7Cit0eXBlZGVmIEluc2V0czxmbG9hdD4gRmxv
YXRJbnNldHM7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIExlbmd0aEJv
eF9oCisjZW5kaWYgLy8gSW5zZXRzX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xl
bmd0aEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aEJv
eC5oCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGhC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDgsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICAgIENvcHly
aWdodCAoYykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZu
ZGVmIExlbmd0aEJveF9oCi0jZGVmaW5lIExlbmd0aEJveF9oCi0KLSNpbmNsdWRlICJMZW5ndGgu
aCIKLSNpbmNsdWRlICJXcml0aW5nTW9kZS5oIgotI2luY2x1ZGUgPGFycmF5PgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEJveEV4dGVudCB7Ci1w
dWJsaWM6Ci0gICAgQm94RXh0ZW50KCkKLSAgICAgICAgOiBtX3NpZGVzKHt7IFQoMCksIFQoMCks
IFQoMCksIFQoMCkgfX0pCi0gICAgewotICAgIH0KLQotICAgIEJveEV4dGVudChjb25zdCBUJiB0
b3AsIGNvbnN0IFQmIHJpZ2h0LCBjb25zdCBUJiBib3R0b20sIGNvbnN0IFQmIGxlZnQpCi0gICAg
ICAgIDogbV9zaWRlcyh7eyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfX0pCi0gICAgewotICAg
IH0KLQotICAgIFQmIGF0KFBoeXNpY2FsQm94U2lkZSBzaWRlKSB7IHJldHVybiBtX3NpZGVzW3Np
ZGVdOyB9Ci0gICAgVCYgdG9wKCkgeyByZXR1cm4gYXQoVG9wU2lkZSk7IH0KLSAgICBUJiByaWdo
dCgpIHsgcmV0dXJuIGF0KFJpZ2h0U2lkZSk7IH0KLSAgICBUJiBib3R0b20oKSB7IHJldHVybiBh
dChCb3R0b21TaWRlKTsgfQotICAgIFQmIGxlZnQoKSB7IHJldHVybiBhdChMZWZ0U2lkZSk7IH0K
LQotICAgIGNvbnN0IFQmIGF0KFBoeXNpY2FsQm94U2lkZSBzaWRlKSBjb25zdCB7IHJldHVybiBt
X3NpZGVzW3NpZGVdOyB9Ci0gICAgY29uc3QgVCYgdG9wKCkgY29uc3QgeyByZXR1cm4gYXQoVG9w
U2lkZSk7IH0KLSAgICBjb25zdCBUJiByaWdodCgpIGNvbnN0IHsgcmV0dXJuIGF0KFJpZ2h0U2lk
ZSk7IH0KLSAgICBjb25zdCBUJiBib3R0b20oKSBjb25zdCB7IHJldHVybiBhdChCb3R0b21TaWRl
KTsgfQotICAgIGNvbnN0IFQmIGxlZnQoKSBjb25zdCB7IHJldHVybiBhdChMZWZ0U2lkZSk7IH0K
LQotICAgIHZvaWQgc2V0QXQoUGh5c2ljYWxCb3hTaWRlIHNpZGUsIGNvbnN0IFQmIHYpIHsgYXQo
c2lkZSkgPSB2OyB9Ci0gICAgdm9pZCBzZXRUb3AoY29uc3QgVCYgdG9wKSB7IHNldEF0KFRvcFNp
ZGUsIHRvcCk7IH0KLSAgICB2b2lkIHNldFJpZ2h0KGNvbnN0IFQmIHJpZ2h0KSB7IHNldEF0KFJp
Z2h0U2lkZSwgcmlnaHQpOyB9Ci0gICAgdm9pZCBzZXRCb3R0b20oY29uc3QgVCYgYm90dG9tKSB7
IHNldEF0KEJvdHRvbVNpZGUsIGJvdHRvbSk7IH0KLSAgICB2b2lkIHNldExlZnQoY29uc3QgVCYg
bGVmdCkgeyBzZXRBdChMZWZ0U2lkZSwgbGVmdCk7IH0KLQotICAgIFQmIGJlZm9yZShXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lk
ZVRvUGh5c2ljYWxTaWRlKHdyaXRpbmdNb2RlLCBCZWZvcmVTaWRlKSk7Ci0gICAgfQotCi0gICAg
VCYgYWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCi0gICAgewotICAgICAgICByZXR1cm4g
YXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgQWZ0ZXJTaWRlKSk7
Ci0gICAgfQotCi0gICAgVCYgc3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uID0gTFRSKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2lj
YWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24p
LCBTdGFydFNpZGUpKTsKLSAgICB9Ci0KLSAgICBUJiBlbmQoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2Rl
LCBkaXJlY3Rpb24pLCBFbmRTaWRlKSk7Ci0gICAgfQotCi0gICAgY29uc3QgVCYgYmVmb3JlKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG1h
cExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGluZ01vZGUsIEJlZm9yZVNpZGUpKTsKLSAg
ICB9Ci0KLSAgICBjb25zdCBUJiBhZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKHdy
aXRpbmdNb2RlLCBBZnRlclNpZGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBUJiBzdGFydChXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSht
YWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIFN0YXJ0U2lkZSkpOwotICAgIH0K
LQotICAgIGNvbnN0IFQmIGVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24gPSBMVFIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXQobWFwTG9n
aWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlv
biksIEVuZFNpZGUpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEJlZm9yZShjb25zdCBUJiBiZWZv
cmUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IHRoaXMtPmJlZm9yZSh3cml0aW5nTW9kZSkg
PSBiZWZvcmU7IH0KLSAgICB2b2lkIHNldEFmdGVyKGNvbnN0IFQmIGFmdGVyLCBXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkgeyB0aGlzLT5hZnRlcih3cml0aW5nTW9kZSkgPSBhZnRlcjsgfQotICAg
IHZvaWQgc2V0U3RhcnQoY29uc3QgVCYgc3RhcnQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikgeyB0aGlzLT5zdGFydCh3cml0aW5nTW9kZSwg
ZGlyZWN0aW9uKSA9IHN0YXJ0OyB9Ci0gICAgdm9pZCBzZXRFbmQoY29uc3QgVCYgZW5kLCBXcml0
aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIpIHsgdGhp
cy0+ZW5kKHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pID0gZW5kOyB9Ci0KLSAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQm94RXh0ZW50JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX3NpZGVzID09IG90aGVyLm1fc2lkZXM7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEJveEV4dGVudCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9z
aWRlcyAhPSBvdGhlci5tX3NpZGVzOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHN0ZDo6YXJy
YXk8VCwgND4gbV9zaWRlczsKLX07Ci0KLWNsYXNzIExlbmd0aEJveCA6IHB1YmxpYyBCb3hFeHRl
bnQ8TGVuZ3RoPiB7Ci1wdWJsaWM6Ci0gICAgTGVuZ3RoQm94KCkKLSAgICAgICAgOiBMZW5ndGhC
b3goQXV0bykKLSAgICB7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgTGVuZ3RoQm94KExlbmd0aFR5
cGUgdHlwZSkKLSAgICAgICAgOiBCb3hFeHRlbnQoTGVuZ3RoKHR5cGUpLCBMZW5ndGgodHlwZSks
IExlbmd0aCh0eXBlKSwgTGVuZ3RoKHR5cGUpKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNp
dCBMZW5ndGhCb3goaW50IHYpCi0gICAgICAgIDogQm94RXh0ZW50KExlbmd0aCh2LCBGaXhlZCks
IExlbmd0aCh2LCBGaXhlZCksIExlbmd0aCh2LCBGaXhlZCksIExlbmd0aCh2LCBGaXhlZCkpCi0g
ICAgewotICAgIH0KLQotICAgIExlbmd0aEJveChpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0
b20sIGludCBsZWZ0KQotICAgICAgICA6IEJveEV4dGVudChMZW5ndGgodG9wLCBGaXhlZCksIExl
bmd0aChyaWdodCwgRml4ZWQpLCBMZW5ndGgoYm90dG9tLCBGaXhlZCksIExlbmd0aChsZWZ0LCBG
aXhlZCkpCi0gICAgewotICAgIH0KLQotICAgIExlbmd0aEJveChjb25zdCBMZW5ndGgmIHRvcCwg
Y29uc3QgTGVuZ3RoJiByaWdodCwgY29uc3QgTGVuZ3RoJiBib3R0b20sIGNvbnN0IExlbmd0aCYg
bGVmdCkKLSAgICAgICAgOiBCb3hFeHRlbnQodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KQotICAg
IHsKLSAgICB9Ci0KLSAgICBib29sIGlzWmVybygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gdG9wKCkuaXNaZXJvKCkgJiYgcmlnaHQoKS5pc1plcm8oKSAmJiBib3R0b20oKS5pc1plcm8o
KSAmJiBsZWZ0KCkuaXNaZXJvKCk7Ci0gICAgfQotfTsKLQotdHlwZWRlZiBCb3hFeHRlbnQ8TGF5
b3V0VW5pdD4gTGF5b3V0Qm94RXh0ZW50OwotdHlwZWRlZiBCb3hFeHRlbnQ8ZmxvYXQ+IEZsb2F0
Qm94RXh0ZW50OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBMZW5ndGhC
b3hfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmNwcAkocmV2aXNpb24gMTg3NTU2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTGVuZ3RoQm94IFRoZW1lOjpj
b250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
TGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0KSBjb25zdAorTGVuZ3RoSW5zZXRzIFRoZW1lOjpj
b250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3Qg
TGVuZ3RoSW5zZXRzJiB6b29tZWRCb3gsIGZsb2F0KSBjb25zdAogewogICAgIHN3aXRjaCAocGFy
dCkgewogICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgpAQCAtMzgsMjAgKzM4LDIwIEBAIExl
bmd0aEJveCBUaGVtZTo6Y29udHJvbEJvcmRlcihDb250cm9sUGEKICAgICAgICAgY2FzZSBTZWFy
Y2hGaWVsZFBhcnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgogICAgICAgICBjYXNlIFJh
ZGlvUGFydDoKLSAgICAgICAgICAgIHJldHVybiBMZW5ndGhCb3goMCk7CisgICAgICAgICAgICBy
ZXR1cm4gTGVuZ3RoSW5zZXRzKDApOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuIHpvb21lZEJveDsKICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVtZTo6Y29udHJvbFBhZGRp
bmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gm
IHpvb21lZEJveCwgZmxvYXQpIGNvbnN0CitMZW5ndGhJbnNldHMgVGhlbWU6OmNvbnRyb2xQYWRk
aW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoSW5z
ZXRzJiB6b29tZWRCb3gsIGZsb2F0KSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkgewogICAg
ICAgICBjYXNlIE1lbnVsaXN0UGFydDoKICAgICAgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6
CiAgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgogICAgICAgICBjYXNlIFJhZGlvUGFydDoKLSAg
ICAgICAgICAgIHJldHVybiBMZW5ndGhCb3goMCk7CisgICAgICAgICAgICByZXR1cm4gTGVuZ3Ro
SW5zZXRzKDApOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIHpvb21lZEJv
eDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgJKHJldmlzaW9uIDE4NzU1NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDggKzMwLDggQEAKICNpbmNsdWRlICJDb250cm9sU3RhdGVzLmgiCiAjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW5zZXRzLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxlbmd0aEJveC5oIgogI2luY2x1ZGUg
Ikxlbmd0aFNpemUuaCIKICNpbmNsdWRlICJUaGVtZVR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KQEAgLTkzLDggKzkzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGVuZ3RoU2l6
ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgZmxv
YXQgLyp6b29tRmFjdG9yKi8pIGNvbnN0IHsgcmV0dXJuIExlbmd0aFNpemUoTGVuZ3RoKDAsIEZp
eGVkKSwgTGVuZ3RoKDAsIEZpeGVkKSk7IH0KICAgICAKICAgICAvLyBBbGxvd3MgdGhlIHRoZW1l
IHRvIG1vZGlmeSB0aGUgZXhpc3RpbmcgcGFkZGluZy9ib3JkZXIuCi0gICAgdmlydHVhbCBMZW5n
dGhCb3ggY29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OwotICAgIHZp
cnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNj
YWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0
OworICAgIHZpcnR1YWwgTGVuZ3RoSW5zZXRzIGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEluc2V0cyYgem9vbWVkQm94LCBmbG9hdCB6
b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEluc2V0cyBjb250cm9sQm9yZGVy
KENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEluc2V0cyYgem9v
bWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKICAgICAKICAgICAvLyBXaGV0aGVyIG9y
IG5vdCB3aGl0ZXNwYWNlOiBwcmUgc2hvdWxkIGJlIGZvcmNlZCBvbiBhbHdheXMuCiAgICAgdmly
dHVhbCBib29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9MYXlvdXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTGF5b3V0UmVjdC5oCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMy
LDkgQEAKICNkZWZpbmUgTGF5b3V0UmVjdF9oCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNp
bmNsdWRlICJJbnNldHMuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0
UG9pbnQuaCIKLSNpbmNsdWRlICJMZW5ndGhCb3guaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTgzLDE3ICs4MywxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBtb3ZlKExheW91dFVuaXQgZHgsIExheW91dFVuaXQgZHkpIHsgbV9sb2NhdGlvbi5tb3Zl
KGR4LCBkeSk7IH0gCiAKICAgICB2b2lkIGV4cGFuZChjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7
IG1fc2l6ZSArPSBzaXplOyB9Ci0gICAgdm9pZCBleHBhbmQoY29uc3QgTGF5b3V0Qm94RXh0ZW50
JiBib3gpCisgICAgdm9pZCBleHBhbmQoY29uc3QgTGF5b3V0SW5zZXRzJiBpbnNldHMpCiAgICAg
ewotICAgICAgICBtX2xvY2F0aW9uLm1vdmUoLWJveC5sZWZ0KCksIC1ib3gudG9wKCkpOwotICAg
ICAgICBtX3NpemUuZXhwYW5kKGJveC5sZWZ0KCkgKyBib3gucmlnaHQoKSwgYm94LnRvcCgpICsg
Ym94LmJvdHRvbSgpKTsKKyAgICAgICAgbV9sb2NhdGlvbi5tb3ZlKC1pbnNldHMubGVmdCgpLCAt
aW5zZXRzLnRvcCgpKTsKKyAgICAgICAgbV9zaXplLmV4cGFuZChpbnNldHMud2lkdGgoKSwgaW5z
ZXRzLmhlaWdodCgpKTsKICAgICB9CiAgICAgdm9pZCBleHBhbmQoTGF5b3V0VW5pdCBkdywgTGF5
b3V0VW5pdCBkaCkgeyBtX3NpemUuZXhwYW5kKGR3LCBkaCk7IH0KICAgICB2b2lkIGNvbnRyYWN0
KGNvbnN0IExheW91dFNpemUmIHNpemUpIHsgbV9zaXplIC09IHNpemU7IH0KLSAgICB2b2lkIGNv
bnRyYWN0KGNvbnN0IExheW91dEJveEV4dGVudCYgYm94KQorICAgIHZvaWQgY29udHJhY3QoY29u
c3QgTGF5b3V0SW5zZXRzJiBpbnNldHMpCiAgICAgewotICAgICAgICBtX2xvY2F0aW9uLm1vdmUo
Ym94LmxlZnQoKSwgYm94LnRvcCgpKTsKLSAgICAgICAgbV9zaXplLnNocmluayhib3gubGVmdCgp
ICsgYm94LnJpZ2h0KCksIGJveC50b3AoKSArIGJveC5ib3R0b20oKSk7CisgICAgICAgIG1fbG9j
YXRpb24ubW92ZShpbnNldHMubGVmdCgpLCBpbnNldHMudG9wKCkpOworICAgICAgICBtX3NpemUu
c2hyaW5rKGluc2V0cy53aWR0aCgpLCBpbnNldHMuaGVpZ2h0KCkpOwogICAgIH0KICAgICB2b2lk
IGNvbnRyYWN0KExheW91dFVuaXQgZHcsIExheW91dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZCgt
ZHcsIC1kaCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmgJ
KHJldmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1h
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihDb250cm9s
UGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxv
YXQgem9vbUZhY3RvcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBMZW5ndGhJbnNldHMg
Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVu
Z3RoSW5zZXRzJiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgTGVuZ3RoSW5zZXRzIGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoSW5zZXRzJiB6b29tZWRCb3gsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xSZXF1aXJl
c1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFydCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
cGFydCA9PSBQdXNoQnV0dG9uUGFydDsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1RoZW1lTWFjLm1tCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTc2NCwxOSArNzY0LDE5IEBA
IExlbmd0aFNpemUgVGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZSgKICAgICB9CiB9CiAKLUxl
bmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbEJvcmRlcihDb250cm9sUGFydCBwYXJ0LCBjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0CitMZW5ndGhJbnNldHMgVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aEluc2V0cyYg
em9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAgIHN3aXRjaCAocGFydCkg
ewogICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgRGVmYXVsdEJ1
dHRvblBhcnQ6CiAgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICAgICAgICAgIHJldHVybiBM
ZW5ndGhCb3goMCwgem9vbWVkQm94LnJpZ2h0KCkudmFsdWUoKSwgMCwgem9vbWVkQm94LmxlZnQo
KS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBMZW5ndGhJbnNldHMoMCwgem9vbWVkQm94
LnJpZ2h0KCkudmFsdWUoKSwgMCwgem9vbWVkQm94LmxlZnQoKS52YWx1ZSgpKTsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBUaGVtZTo6Y29udHJvbEJvcmRlcihwYXJ0LCBm
b250LCB6b29tZWRCb3gsIHpvb21GYWN0b3IpOwogICAgIH0KIH0KIAotTGVuZ3RoQm94IFRoZW1l
TWFjOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYg
Zm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0
CitMZW5ndGhJbnNldHMgVGhlbWVNYWM6OmNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0IHBhcnQs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBMZW5ndGhJbnNldHMmIHpvb21lZEJveCwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAg
Y2FzZSBQdXNoQnV0dG9uUGFydDogewpAQCAtNzg2LDcgKzc4Niw3IEBAIExlbmd0aEJveCBUaGVt
ZU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHIKICAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBndWFy
YW50ZWVzIHRoZSBIVE1MIDxidXR0b24+IHdpbGwgbWF0Y2ggb3VyIHJlbmRlcmluZyBieSBkZWZh
dWx0LCBzaW5jZSB3ZSdyZSB1c2luZyBhIGNvbnNpc3RlbnQKICAgICAgICAgICAgIC8vIHBhZGRp
bmcuCiAgICAgICAgICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDggKiB6b29tRmFjdG9yOwotICAg
ICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgyLCBwYWRkaW5nLCAzLCBwYWRkaW5nKTsKKyAgICAg
ICAgICAgIHJldHVybiBMZW5ndGhJbnNldHMoMiwgcGFkZGluZywgMywgcGFkZGluZyk7CiAgICAg
ICAgIH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBUaGVtZTo6Y29udHJv
bFBhZGRpbmcocGFydCwgZm9udCwgem9vbWVkQm94LCB6b29tRmFjdG9yKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvV3JpdGluZ01vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmgJKHJldmlzaW9uIDE4NzU1NikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvV3JpdGluZ01vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ2LDcgKzE0Niw3IEBAIGlubGluZSBQaHlzaWNhbEJveFNpZGUgcm90YXRlUGh5
c2ljYWxTaWQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGh5c2ljYWxCb3hTaWRlPigoc3RhdGlj
X2Nhc3Q8aW50PihwaHlzaWNhbFNpZGUpICsgKGhvcml6b250YWxTaWRlID8gMSA6IDMpKSAlIDQp
OwogfQogCi1pbmxpbmUgUGh5c2ljYWxCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNp
ZGUoVGV4dEZsb3cgdGV4dGZsb3csIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRlKQoraW5saW5l
IFBoeXNpY2FsQm94U2lkZSBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKExvZ2ljYWxCb3hT
aWRlIGxvZ2ljYWxTaWRlLCBUZXh0RmxvdyB0ZXh0ZmxvdykKIHsKICAgICBQaHlzaWNhbEJveFNp
ZGUgcGh5c2ljYWxTaWRlID0gc3RhdGljX2Nhc3Q8UGh5c2ljYWxCb3hTaWRlPihsb2dpY2FsU2lk
ZSk7CiAgICAgYm9vbCBob3Jpem9udGFsU2lkZSA9IGlzSG9yaXpvbnRhbFBoeXNpY2FsU2lkZShw
aHlzaWNhbFNpZGUpOwpAQCAtMTYwLDExICsxNjAsMTEgQEAgaW5saW5lIFBoeXNpY2FsQm94U2lk
ZSBtYXBMb2dpY2FsU2lkZVRvUAogICAgIHJldHVybiBwaHlzaWNhbFNpZGU7CiB9CiAKLWlubGlu
ZSBQaHlzaWNhbEJveFNpZGUgbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSwgTG9naWNhbEJveFNpZGUgbG9naWNhbFNpZGUpCitpbmxpbmUgUGh5c2lj
YWxCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUoTG9naWNhbEJveFNpZGUgbG9n
aWNhbFNpZGUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQogewogICAgIC8vIFNldCB0aGUgZGly
ZWN0aW9uIHN1Y2ggdGhhdCBzaWRlIGlzIG1pcnJvcmVkIGlmIGlzRmxpcHBlZFdyaXRpbmdNb2Rl
KCkgaXMgdHJ1ZQogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gaXNGbGlwcGVkV3JpdGlu
Z01vZGUod3JpdGluZ01vZGUpID8gUlRMIDogTFRSOwotICAgIHJldHVybiBtYXBMb2dpY2FsU2lk
ZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgbG9n
aWNhbFNpZGUpOworICAgIHJldHVybiBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKGxvZ2lj
YWxTaWRlLCBtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbikpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0MSw3ICs4NDEsNyBAQCBp
bmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRCb3JkZXJPdXRzCiAgICAgaWYgKCFsaW5lU3R5
bGUuaGFzQm9yZGVySW1hZ2VPdXRzZXRzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIExheW91
dEJveEV4dGVudCBib3JkZXJPdXRzZXRzID0gbGluZVN0eWxlLmJvcmRlckltYWdlT3V0c2V0cygp
OworICAgIExheW91dEluc2V0cyBib3JkZXJPdXRzZXRzID0gbGluZVN0eWxlLmJvcmRlckltYWdl
T3V0c2V0cygpOwogCiAgICAgTGF5b3V0VW5pdCBib3JkZXJPdXRzZXRMb2dpY2FsVG9wID0gYm9y
ZGVyT3V0c2V0cy5iZWZvcmUobGluZVN0eWxlLndyaXRpbmdNb2RlKCkpOwogICAgIExheW91dFVu
aXQgYm9yZGVyT3V0c2V0TG9naWNhbEJvdHRvbSA9IGJvcmRlck91dHNldHMuYWZ0ZXIobGluZVN0
eWxlLndyaXRpbmdNb2RlKCkpOwpAQCAtMTI5Myw3ICsxMjkzLDcgQEAgc3RhdGljIExheW91dFJl
Y3QgY2xpcFJlY3RGb3JOaW5lUGllY2VJbQogewogICAgIExheW91dFJlY3QgY2xpcFJlY3QocGFp
bnRSZWN0KTsKICAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBib3gtPnJlbmRlcmVyKCkuc3R5bGUo
KTsKLSAgICBMYXlvdXRCb3hFeHRlbnQgb3V0c2V0cyA9IHN0eWxlLmltYWdlT3V0c2V0cyhpbWFn
ZSk7CisgICAgTGF5b3V0SW5zZXRzIG91dHNldHMgPSBzdHlsZS5pbWFnZU91dHNldHMoaW1hZ2Up
OwogICAgIGlmIChib3gtPmlzSG9yaXpvbnRhbCgpKSB7CiAgICAgICAgIGNsaXBSZWN0LnNldFko
cGFpbnRSZWN0LnkoKSAtIG91dHNldHMudG9wKCkpOwogICAgICAgICBjbGlwUmVjdC5zZXRIZWln
aHQocGFpbnRSZWN0LmhlaWdodCgpICsgb3V0c2V0cy50b3AoKSArIG91dHNldHMuYm90dG9tKCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDE4
NzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBTYW1l
U2l6ZUFzUmVuZGVyQm94IDogcHVibGljIFJlbmRlckJveE1vZGVsT2JqZWN0IHsKICAgICB2aXJ0
dWFsIH5TYW1lU2l6ZUFzUmVuZGVyQm94KCkgeyB9CiAgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3Q7
Ci0gICAgTGF5b3V0Qm94RXh0ZW50IG1hcmdpbkJveDsKKyAgICBMYXlvdXRJbnNldHMgbWFyZ2lu
Qm94OwogICAgIExheW91dFVuaXQgcHJlZmVycmVkTG9naWNhbFdpZHRoc1syXTsKICAgICB2b2lk
KiBwb2ludGVyc1syXTsKIH07CkBAIC00NDI5LDcgKzQ0MjksNyBAQCBMYXlvdXRSZWN0IFJlbmRl
ckJveDo6YXBwbHlWaXN1YWxFZmZlY3RPCiAKICAgICAvLyBOb3cgY29tcHV0ZSBib3JkZXItaW1h
Z2Utb3V0c2V0IG92ZXJmbG93LgogICAgIGlmIChzdHlsZSgpLmhhc0JvcmRlckltYWdlT3V0c2V0
cygpKSB7Ci0gICAgICAgIExheW91dEJveEV4dGVudCBib3JkZXJPdXRzZXRzID0gc3R5bGUoKS5i
b3JkZXJJbWFnZU91dHNldHMoKTsKKyAgICAgICAgTGF5b3V0SW5zZXRzIGJvcmRlck91dHNldHMg
PSBzdHlsZSgpLmJvcmRlckltYWdlT3V0c2V0cygpOwogICAgICAgICAKICAgICAgICAgLy8gSW4g
ZmxpcHBlZCBibG9ja3Mgd3JpdGluZyBtb2RlcywgdGhlIHBoeXNpY2FsIHNpZGVzIGFyZSBpbnZl
cnRlZC4gRm9yIGV4YW1wbGUgaW4gdmVydGljYWwtcmwsIHRoZSByaWdodAogICAgICAgICAvLyBi
b3JkZXIgaXMgYXQgdGhlIGxvd2VyIHggY29vcmRpbmF0ZSB2YWx1ZS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNzI4LDcgKzcyOCw3
IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0UmVjdCBtX2ZyYW1lUmVjdDsKIAogcHJvdGVjdGVkOgot
ICAgIExheW91dEJveEV4dGVudCBtX21hcmdpbkJveDsKKyAgICBMYXlvdXRJbnNldHMgbV9tYXJn
aW5Cb3g7CiAKICAgICAvLyBUaGUgcHJlZmVycmVkIGxvZ2ljYWwgd2lkdGggb2YgdGhlIGVsZW1l
bnQgaWYgaXQgd2VyZSB0byBicmVhayBpdHMgbGluZXMgYXQgZXZlcnkgcG9zc2libGUgb3Bwb3J0
dW5pdHkuCiAgICAgTGF5b3V0VW5pdCBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cAkocmV2aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgzLDcgKzM4Myw3IEBAIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbXB1dGVTdGlja3kKIAogICAgIC8vIFN0aWNreSBwb3Np
dGlvbmVkIGVsZW1lbnQgaWdub3JlIGFueSBvdmVycmlkZSBsb2dpY2FsIHdpZHRoIG9uIHRoZSBj
b250YWluaW5nIGJsb2NrIChhcyB0aGV5IGRvbid0IGNhbGwKICAgICAvLyBjb250YWluaW5nQmxv
Y2tMb2dpY2FsV2lkdGhGb3JDb250ZW50KS4gSXQncyB1bmNsZWFyIHdoZXRoZXIgdGhpcyBpcyB0
b3RhbGx5IGZpbmUuCi0gICAgTGF5b3V0Qm94RXh0ZW50IG1pbk1hcmdpbihtaW5pbXVtVmFsdWVG
b3JMZW5ndGgoc3R5bGUoKS5tYXJnaW5Ub3AoKSwgbWF4V2lkdGgpLAorICAgIExheW91dEluc2V0
cyBtaW5NYXJnaW4obWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubWFyZ2luVG9wKCksIG1h
eFdpZHRoKSwKICAgICAgICAgbWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubWFyZ2luUmln
aHQoKSwgbWF4V2lkdGgpLAogICAgICAgICBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUoKS5t
YXJnaW5Cb3R0b20oKSwgbWF4V2lkdGgpLAogICAgICAgICBtaW5pbXVtVmFsdWVGb3JMZW5ndGgo
c3R5bGUoKS5tYXJnaW5MZWZ0KCksIG1heFdpZHRoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MjYsNyArMTMyNiw3IEBAIGJvb2wgUmVuZGVyRWxlbWVudDo6cmVwYWludEFmdGVyTGF5b3V0SWYK
ICAgICAvLyB0d28gcmVjdGFuZ2xlcyAoYnV0IHR5cGljYWxseSBvbmx5IG9uZSkuCiAgICAgY29u
c3QgUmVuZGVyU3R5bGUmIG91dGxpbmVTdHlsZSA9IG91dGxpbmVTdHlsZUZvclJlcGFpbnQoKTsK
ICAgICBMYXlvdXRVbml0IG91dGxpbmVXaWR0aCA9IG91dGxpbmVTdHlsZS5vdXRsaW5lU2l6ZSgp
OwotICAgIExheW91dEJveEV4dGVudCBpbnNldFNoYWRvd0V4dGVudCA9IHN0eWxlKCkuZ2V0Qm94
U2hhZG93SW5zZXRFeHRlbnQoKTsKKyAgICBMYXlvdXRJbnNldHMgaW5zZXRTaGFkb3dFeHRlbnQg
PSBzdHlsZSgpLmdldEJveFNoYWRvd0luc2V0RXh0ZW50KCk7CiAgICAgTGF5b3V0VW5pdCB3aWR0
aCA9IGFic29sdXRlVmFsdWUobmV3T3V0bGluZUJveC53aWR0aCgpIC0gb2xkT3V0bGluZUJveC53
aWR0aCgpKTsKICAgICBpZiAod2lkdGgpIHsKICAgICAgICAgTGF5b3V0VW5pdCBzaGFkb3dMZWZ0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lv
biAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBSZW5kZXJUaGVtZTo6YWRqdXN0
U3R5bGUoU3R5bGVSZXNvbAogICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBC
dXR0b25QYXJ0OiB7CiAgICAgICAgIC8vIEJvcmRlcgotICAgICAgICBMZW5ndGhCb3ggYm9yZGVy
Qm94KHN0eWxlLmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5
bGUuYm9yZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUuYm9yZGVyTGVmdFdpZHRoKCkpOworICAgICAg
ICBMZW5ndGhJbnNldHMgYm9yZGVyQm94KHN0eWxlLmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLmJv
cmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUuYm9yZGVy
TGVmdFdpZHRoKCkpOwogICAgICAgICBib3JkZXJCb3ggPSBtX3RoZW1lLT5jb250cm9sQm9yZGVy
KHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIGJvcmRlckJveCwgc3R5bGUuZWZmZWN0aXZlWm9v
bSgpKTsKICAgICAgICAgaWYgKGJvcmRlckJveC50b3AoKS52YWx1ZSgpICE9IHN0YXRpY19jYXN0
PGludD4oc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSkpIHsKICAgICAgICAgICAgIGlmIChib3JkZXJC
b3gudG9wKCkudmFsdWUoKSkKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFJlbmRlclRoZW1lOjph
ZGp1c3RTdHlsZShTdHlsZVJlc29sCiAgICAgICAgIH0KIAogICAgICAgICAvLyBQYWRkaW5nCi0g
ICAgICAgIExlbmd0aEJveCBwYWRkaW5nQm94ID0gbV90aGVtZS0+Y29udHJvbFBhZGRpbmcocGFy
dCwgc3R5bGUuZm9udENhc2NhZGUoKSwgc3R5bGUucGFkZGluZ0JveCgpLCBzdHlsZS5lZmZlY3Rp
dmVab29tKCkpOworICAgICAgICBMZW5ndGhJbnNldHMgcGFkZGluZ0JveCA9IG1fdGhlbWUtPmNv
bnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLnBhZGRpbmdCb3go
KSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKICAgICAgICAgaWYgKHBhZGRpbmdCb3ggIT0gc3R5
bGUucGFkZGluZ0JveCgpKQogICAgICAgICAgICAgc3R5bGUuc2V0UGFkZGluZ0JveChwYWRkaW5n
Qm94KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5t
bQkocmV2aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MzUsNyArNTM1LDcgQEAgc3RhdGljIHZvaWQg
YXBwbHlDb21tb25CdXR0b25QYWRkaW5nVG9TdAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGVs
ZW1lbnQuZG9jdW1lbnQoKTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGVtU2l6ZSA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMC41LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VN
Uyk7CiAgICAgaW50IHBpeGVscyA9IGVtU2l6ZS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoJnN0eWxlLCBkb2N1bWVudC5yZW5kZXJTdHlsZSgpLCBkb2N1bWVu
dC5yZW5kZXJWaWV3KCksIGRvY3VtZW50LmZyYW1lKCktPnBhZ2Vab29tRmFjdG9yKCkpKTsKLSAg
ICBzdHlsZS5zZXRQYWRkaW5nQm94KExlbmd0aEJveCgwLCBwaXhlbHMsIDAsIHBpeGVscykpOwor
ICAgIHN0eWxlLnNldFBhZGRpbmdCb3goTGVuZ3RoSW5zZXRzKDAsIHBpeGVscywgMCwgcGl4ZWxz
KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFkanVzdFNlbGVjdExpc3RCdXR0b25TdHlsZShSZW5kZXJT
dHlsZSYgc3R5bGUsIEVsZW1lbnQmIGVsZW1lbnQpCkBAIC05NzAsNyArOTcwLDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZUlPUzo6YWRqdXN0QnV0dG9uU3R5bGUoUwogICAgIC8vIGFuZCB0aGUgcmVuZGVy
IHZpZXcuCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBlbVNpemUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKDEuMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpOwogICAgIGlu
dCBwaXhlbHMgPSBlbVNpemUtPmNvbXB1dGVMZW5ndGg8aW50PihDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCZzdHlsZSwgbnVsbHB0ciwgbnVsbHB0ciwgMS4wLCBmYWxzZSkpOwotICAgIHN0eWxl
LnNldFBhZGRpbmdCb3goTGVuZ3RoQm94KDAsIHBpeGVscywgMCwgcGl4ZWxzKSk7CisgICAgc3R5
bGUuc2V0UGFkZGluZ0JveChMZW5ndGhJbnNldHMoMCwgcGl4ZWxzLCAwLCBwaXhlbHMpKTsKIAog
ICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5oCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Myw5ICs5Myw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYm90dG9tLndpZHRoKCk7
CiAgICAgfQogCi0gICAgRmxvYXRCb3hFeHRlbnQgYm9yZGVyV2lkdGgoKSBjb25zdAorICAgIEZs
b2F0SW5zZXRzIGJvcmRlcldpZHRoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBGbG9h
dEJveEV4dGVudChib3JkZXJUb3BXaWR0aCgpLCBib3JkZXJSaWdodFdpZHRoKCksIGJvcmRlckJv
dHRvbVdpZHRoKCksIGJvcmRlckxlZnRXaWR0aCgpKTsKKyAgICAgICAgcmV0dXJuIEZsb2F0SW5z
ZXRzKGJvcmRlclRvcFdpZHRoKCksIGJvcmRlclJpZ2h0V2lkdGgoKSwgYm9yZGVyQm90dG9tV2lk
dGgoKSwgYm9yZGVyTGVmdFdpZHRoKCkpOwogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQm9yZGVyRGF0YSYgbykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmNwcAkocmV2aXNpb24gMTg3NTU2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBOaW5lUGllY2VJbWFnZTo6TmluZVBpZWNlSW1h
Z2UoKQogewogfQogCi1OaW5lUGllY2VJbWFnZTo6TmluZVBpZWNlSW1hZ2UoUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBpbWFnZSwgTGVuZ3RoQm94IGltYWdlU2xpY2VzLCBib29sIGZpbGwsIExlbmd0
aEJveCBib3JkZXJTbGljZXMsIExlbmd0aEJveCBvdXRzZXQsIEVOaW5lUGllY2VJbWFnZVJ1bGUg
aG9yaXpvbnRhbFJ1bGUsIEVOaW5lUGllY2VJbWFnZVJ1bGUgdmVydGljYWxSdWxlKQorTmluZVBp
ZWNlSW1hZ2U6Ok5pbmVQaWVjZUltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UsIExl
bmd0aEluc2V0cyBpbWFnZVNsaWNlcywgYm9vbCBmaWxsLCBMZW5ndGhJbnNldHMgYm9yZGVyU2xp
Y2VzLCBMZW5ndGhJbnNldHMgb3V0c2V0LCBFTmluZVBpZWNlSW1hZ2VSdWxlIGhvcml6b250YWxS
dWxlLCBFTmluZVBpZWNlSW1hZ2VSdWxlIHZlcnRpY2FsUnVsZSkKICAgICA6IG1fZGF0YShOaW5l
UGllY2VJbWFnZURhdGE6OmNyZWF0ZSgpKQogewogICAgIG1fZGF0YS5hY2Nlc3MoKS0+aW1hZ2Ug
PSBpbWFnZTsKQEAgLTYzLDQyICs2MywzOCBAQCBMYXlvdXRVbml0IE5pbmVQaWVjZUltYWdlOjpj
b21wdXRlU2xpY2UoCiAgICAgcmV0dXJuIHZhbHVlRm9yTGVuZ3RoKGxlbmd0aCwgZXh0ZW50KTsK
IH0KIAotTGF5b3V0Qm94RXh0ZW50IE5pbmVQaWVjZUltYWdlOjpjb21wdXRlU2xpY2VzKGNvbnN0
IExheW91dFNpemUmIHNpemUsIGNvbnN0IExlbmd0aEJveCYgbGVuZ3RocywgaW50IHNjYWxlRmFj
dG9yKQorTGF5b3V0SW5zZXRzIE5pbmVQaWVjZUltYWdlOjpjb21wdXRlU2xpY2VzKGNvbnN0IExh
eW91dFNpemUmIHNpemUsIGNvbnN0IExlbmd0aEluc2V0cyYgbGVuZ3RocywgaW50IHNjYWxlRmFj
dG9yKQogewogICAgIExheW91dFVuaXQgdG9wICAgID0gc3RkOjptaW48TGF5b3V0VW5pdD4oc2l6
ZS5oZWlnaHQoKSwgdmFsdWVGb3JMZW5ndGgobGVuZ3Rocy50b3AoKSwgICAgc2l6ZS5oZWlnaHQo
KSkpICogc2NhbGVGYWN0b3I7CiAgICAgTGF5b3V0VW5pdCByaWdodCAgPSBzdGQ6Om1pbjxMYXlv
dXRVbml0PihzaXplLndpZHRoKCksICB2YWx1ZUZvckxlbmd0aChsZW5ndGhzLnJpZ2h0KCksICBz
aXplLndpZHRoKCkpKSAgKiBzY2FsZUZhY3RvcjsKICAgICBMYXlvdXRVbml0IGJvdHRvbSA9IHN0
ZDo6bWluPExheW91dFVuaXQ+KHNpemUuaGVpZ2h0KCksIHZhbHVlRm9yTGVuZ3RoKGxlbmd0aHMu
Ym90dG9tKCksIHNpemUuaGVpZ2h0KCkpKSAqIHNjYWxlRmFjdG9yOwogICAgIExheW91dFVuaXQg
bGVmdCAgID0gc3RkOjptaW48TGF5b3V0VW5pdD4oc2l6ZS53aWR0aCgpLCAgdmFsdWVGb3JMZW5n
dGgobGVuZ3Rocy5sZWZ0KCksICAgc2l6ZS53aWR0aCgpKSkgICogc2NhbGVGYWN0b3I7Ci0gICAg
cmV0dXJuIExheW91dEJveEV4dGVudCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOworICAgIHJl
dHVybiBMYXlvdXRJbnNldHModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKIH0KIAotTGF5b3V0
Qm94RXh0ZW50IE5pbmVQaWVjZUltYWdlOjpjb21wdXRlU2xpY2VzKGNvbnN0IExheW91dFNpemUm
IHNpemUsIGNvbnN0IExlbmd0aEJveCYgbGVuZ3RocywgY29uc3QgRmxvYXRCb3hFeHRlbnQmIHdp
ZHRocywgY29uc3QgTGF5b3V0Qm94RXh0ZW50JiBzbGljZXMpCitMYXlvdXRJbnNldHMgTmluZVBp
ZWNlSW1hZ2U6OmNvbXB1dGVTbGljZXMoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSwgY29uc3QgTGVu
Z3RoSW5zZXRzJiBsZW5ndGhzLCBjb25zdCBGbG9hdEluc2V0cyYgd2lkdGhzLCBjb25zdCBMYXlv
dXRJbnNldHMmIHNsaWNlcykKIHsKICAgICBMYXlvdXRVbml0IHRvcCAgICA9IGNvbXB1dGVTbGlj
ZShsZW5ndGhzLnRvcCgpLCAgICB3aWR0aHMudG9wKCksICAgIHNsaWNlcy50b3AoKSwgICAgc2l6
ZS5oZWlnaHQoKSk7CiAgICAgTGF5b3V0VW5pdCByaWdodCAgPSBjb21wdXRlU2xpY2UobGVuZ3Ro
cy5yaWdodCgpLCAgd2lkdGhzLnJpZ2h0KCksICBzbGljZXMucmlnaHQoKSwgIHNpemUud2lkdGgo
KSk7CiAgICAgTGF5b3V0VW5pdCBib3R0b20gPSBjb21wdXRlU2xpY2UobGVuZ3Rocy5ib3R0b20o
KSwgd2lkdGhzLmJvdHRvbSgpLCBzbGljZXMuYm90dG9tKCksIHNpemUuaGVpZ2h0KCkpOwogICAg
IExheW91dFVuaXQgbGVmdCAgID0gY29tcHV0ZVNsaWNlKGxlbmd0aHMubGVmdCgpLCAgIHdpZHRo
cy5sZWZ0KCksICAgc2xpY2VzLmxlZnQoKSwgICBzaXplLndpZHRoKCkpOwotICAgIHJldHVybiBM
YXlvdXRCb3hFeHRlbnQodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKKyAgICByZXR1cm4gTGF5
b3V0SW5zZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CiB9CiAKLXZvaWQgTmluZVBpZWNl
SW1hZ2U6OnNjYWxlU2xpY2VzSWZOZWVkZWQoY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSwgTGF5b3V0
Qm94RXh0ZW50JiBzbGljZXMsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQordm9pZCBOaW5lUGll
Y2VJbWFnZTo6c2NhbGVTbGljZXNJZk5lZWRlZChjb25zdCBMYXlvdXRTaXplJiBzaXplLCBMYXlv
dXRJbnNldHMmIHNsaWNlcywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgTGF5b3V0
VW5pdCB3aWR0aCAgPSBzdGQ6Om1heDxMYXlvdXRVbml0PigxIC8gZGV2aWNlU2NhbGVGYWN0b3Is
IHNsaWNlcy5sZWZ0KCkgKyBzbGljZXMucmlnaHQoKSk7Ci0gICAgTGF5b3V0VW5pdCBoZWlnaHQg
PSBzdGQ6Om1heDxMYXlvdXRVbml0PigxIC8gZGV2aWNlU2NhbGVGYWN0b3IsIHNsaWNlcy50b3Ao
KSArIHNsaWNlcy5ib3R0b20oKSk7CisgICAgTGF5b3V0VW5pdCB3aWR0aCAgPSBzdGQ6Om1heDxM
YXlvdXRVbml0PigxIC8gZGV2aWNlU2NhbGVGYWN0b3IsIHNsaWNlcy53aWR0aCgpKTsKKyAgICBM
YXlvdXRVbml0IGhlaWdodCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDEgLyBkZXZpY2VTY2FsZUZh
Y3Rvciwgc2xpY2VzLmhlaWdodCgpKTsKIAogICAgIGZsb2F0IHNsaWNlU2NhbGVGYWN0b3IgPSBz
dGQ6Om1pbigoZmxvYXQpc2l6ZS53aWR0aCgpIC8gd2lkdGgsIChmbG9hdClzaXplLmhlaWdodCgp
IC8gaGVpZ2h0KTsKIAogICAgIGlmIChzbGljZVNjYWxlRmFjdG9yID49IDEpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIC8vIEFsbCBzbGljZXMgYXJlIHJlZHVjZWQgYnkgbXVsdGlwbHlpbmcgdGhl
bSBieSBzbGljZVNjYWxlRmFjdG9yLgotICAgIHNsaWNlcy50b3AoKSAgICAqPSBzbGljZVNjYWxl
RmFjdG9yOwotICAgIHNsaWNlcy5yaWdodCgpICAqPSBzbGljZVNjYWxlRmFjdG9yOwotICAgIHNs
aWNlcy5ib3R0b20oKSAqPSBzbGljZVNjYWxlRmFjdG9yOwotICAgIHNsaWNlcy5sZWZ0KCkgICAq
PSBzbGljZVNjYWxlRmFjdG9yOworICAgIHNsaWNlcy5zY2FsZShzbGljZVNjYWxlRmFjdG9yKTsK
IH0KIAotYm9vbCBOaW5lUGllY2VJbWFnZTo6aXNFbXB0eVBpZWNlUmVjdChJbWFnZVBpZWNlIHBp
ZWNlLCBjb25zdCBMYXlvdXRCb3hFeHRlbnQmIHNsaWNlcykKK2Jvb2wgTmluZVBpZWNlSW1hZ2U6
OmlzRW1wdHlQaWVjZVJlY3QoSW1hZ2VQaWVjZSBwaWVjZSwgY29uc3QgTGF5b3V0SW5zZXRzJiBz
bGljZXMpCiB7CiAgICAgaWYgKHBpZWNlID09IE1pZGRsZVBpZWNlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xMTMsMTEgKzEwOSwxMSBAQCBib29sIE5pbmVQaWVjZUltYWdlOjppc0VtcHR5
UGllY2VSZWN0KEltCiAgICAgcmV0dXJuIGRlc3RpbmF0aW9uUmVjdHNbcGllY2VdLmlzRW1wdHko
KSB8fCBzb3VyY2VSZWN0c1twaWVjZV0uaXNFbXB0eSgpOwogfQogCi1WZWN0b3I8RmxvYXRSZWN0
PiBOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZUludHJpbnNpY1JlY3RzKGNvbnN0IEZsb2F0UmVjdCYg
b3V0ZXIsIGNvbnN0IExheW91dEJveEV4dGVudCYgc2xpY2VzLCBmbG9hdCBkZXZpY2VTY2FsZUZh
Y3RvcikKK1ZlY3RvcjxGbG9hdFJlY3Q+IE5pbmVQaWVjZUltYWdlOjpjb21wdXRlSW50cmluc2lj
UmVjdHMoY29uc3QgRmxvYXRSZWN0JiBvdXRlciwgY29uc3QgTGF5b3V0SW5zZXRzJiBzbGljZXMs
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewogICAgIEZsb2F0UmVjdCBpbm5lciA9IG91dGVy
OwogICAgIGlubmVyLm1vdmUoc2xpY2VzLmxlZnQoKSwgc2xpY2VzLnRvcCgpKTsKLSAgICBpbm5l
ci5jb250cmFjdChzbGljZXMubGVmdCgpICsgc2xpY2VzLnJpZ2h0KCksIHNsaWNlcy50b3AoKSAr
IHNsaWNlcy5ib3R0b20oKSk7CisgICAgaW5uZXIuY29udHJhY3Qoc2xpY2VzLndpZHRoKCksIHNs
aWNlcy5oZWlnaHQoKSk7CiAgICAgQVNTRVJUKG91dGVyLmNvbnRhaW5zKGlubmVyKSk7CiAKICAg
ICBWZWN0b3I8RmxvYXRSZWN0PiByZWN0cyhNYXhQaWVjZSk7CkBAIC0xMzcsNyArMTMzLDcgQEAg
VmVjdG9yPEZsb2F0UmVjdD4gTmluZVBpZWNlSW1hZ2U6OmNvbXB1dAogICAgIHJldHVybiByZWN0
czsKIH0KIAotVmVjdG9yPEZsb2F0UmVjdD4gTmluZVBpZWNlSW1hZ2U6OmNvbXB1dGVOb25JbnRy
aW5zaWNSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgaW50cmluc2ljUmVjdHMsIGNvbnN0
IExheW91dEJveEV4dGVudCYgc2xpY2VzKQorVmVjdG9yPEZsb2F0UmVjdD4gTmluZVBpZWNlSW1h
Z2U6OmNvbXB1dGVOb25JbnRyaW5zaWNSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgaW50
cmluc2ljUmVjdHMsIGNvbnN0IExheW91dEluc2V0cyYgc2xpY2VzKQogewogICAgIFZlY3RvcjxG
bG9hdFJlY3Q+IHJlY3RzKE1heFBpZWNlKTsKIApAQCAtMjEzLDggKzIwOSw4IEBAIHZvaWQgTmlu
ZVBpZWNlSW1hZ2U6OnBhaW50KEdyYXBoaWNzQ29udGUKICAgICBTdHlsZUltYWdlKiBzdHlsZUlt
YWdlID0gaW1hZ2UoKTsKICAgICBBU1NFUlQoc3R5bGVJbWFnZSAmJiBzdHlsZUltYWdlLT5pc0xv
YWRlZCgpKTsKIAotICAgIExheW91dEJveEV4dGVudCBzb3VyY2VTbGljZXMgPSBjb21wdXRlU2xp
Y2VzKHNvdXJjZSwgaW1hZ2VTbGljZXMoKSwgc3R5bGVJbWFnZS0+aW1hZ2VTY2FsZUZhY3Rvcigp
KTsKLSAgICBMYXlvdXRCb3hFeHRlbnQgZGVzdGluYXRpb25TbGljZXMgPSBjb21wdXRlU2xpY2Vz
KGRlc3RpbmF0aW9uLnNpemUoKSwgYm9yZGVyU2xpY2VzKCksIHN0eWxlLmJvcmRlcldpZHRoKCks
IHNvdXJjZVNsaWNlcyk7CisgICAgTGF5b3V0SW5zZXRzIHNvdXJjZVNsaWNlcyA9IGNvbXB1dGVT
bGljZXMoc291cmNlLCBpbWFnZVNsaWNlcygpLCBzdHlsZUltYWdlLT5pbWFnZVNjYWxlRmFjdG9y
KCkpOworICAgIExheW91dEluc2V0cyBkZXN0aW5hdGlvblNsaWNlcyA9IGNvbXB1dGVTbGljZXMo
ZGVzdGluYXRpb24uc2l6ZSgpLCBib3JkZXJTbGljZXMoKSwgc3R5bGUuYm9yZGVyV2lkdGgoKSwg
c291cmNlU2xpY2VzKTsKIAogICAgIHNjYWxlU2xpY2VzSWZOZWVkZWQoZGVzdGluYXRpb24uc2l6
ZSgpLCBkZXN0aW5hdGlvblNsaWNlcywgZGV2aWNlU2NhbGVGYWN0b3IpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuaAkocmV2aXNp
b24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUlt
YWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMCBAQAogI2RlZmluZSBOaW5lUGll
Y2VJbWFnZV9oCiAKICNpbmNsdWRlICJEYXRhUmVmLmgiCisjaW5jbHVkZSAiSW5zZXRzLmgiCiAj
aW5jbHVkZSAiTGF5b3V0UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFNpemUuaCIKICNpbmNsdWRl
ICJMYXlvdXRVbml0LmgiCi0jaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVkZSAiU3R5bGVJ
bWFnZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMTE0LDkgKzExNCw5IEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCBob3Jpem9udGFsUnVsZSA6IDI7IC8vIEVOaW5lUGllY2VJbWFn
ZVJ1bGUKICAgICB1bnNpZ25lZCB2ZXJ0aWNhbFJ1bGUgOiAyOyAvLyBFTmluZVBpZWNlSW1hZ2VS
dWxlCiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlOwotICAgIExlbmd0aEJveCBpbWFnZVNs
aWNlczsKLSAgICBMZW5ndGhCb3ggYm9yZGVyU2xpY2VzOwotICAgIExlbmd0aEJveCBvdXRzZXQ7
CisgICAgTGVuZ3RoSW5zZXRzIGltYWdlU2xpY2VzOworICAgIExlbmd0aEluc2V0cyBib3JkZXJT
bGljZXM7CisgICAgTGVuZ3RoSW5zZXRzIG91dHNldDsKIAogcHJpdmF0ZToKICAgICBOaW5lUGll
Y2VJbWFnZURhdGEoKTsKQEAgLTEyNiw3ICsxMjYsNyBAQCBwcml2YXRlOgogY2xhc3MgTmluZVBp
ZWNlSW1hZ2UgewogcHVibGljOgogICAgIE5pbmVQaWVjZUltYWdlKCk7Ci0gICAgTmluZVBpZWNl
SW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiwgTGVuZ3RoQm94IGltYWdlU2xpY2VzLCBib29s
IGZpbGwsIExlbmd0aEJveCBib3JkZXJTbGljZXMsIExlbmd0aEJveCBvdXRzZXQsIEVOaW5lUGll
Y2VJbWFnZVJ1bGUgaG9yaXpvbnRhbFJ1bGUsIEVOaW5lUGllY2VJbWFnZVJ1bGUgdmVydGljYWxS
dWxlKTsKKyAgICBOaW5lUGllY2VJbWFnZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+LCBMZW5ndGhJ
bnNldHMgaW1hZ2VTbGljZXMsIGJvb2wgZmlsbCwgTGVuZ3RoSW5zZXRzIGJvcmRlclNsaWNlcywg
TGVuZ3RoSW5zZXRzIG91dHNldCwgRU5pbmVQaWVjZUltYWdlUnVsZSBob3Jpem9udGFsUnVsZSwg
RU5pbmVQaWVjZUltYWdlUnVsZSB2ZXJ0aWNhbFJ1bGUpOwogCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IE5pbmVQaWVjZUltYWdlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9kYXRhID09IG90
aGVyLm1fZGF0YTsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBOaW5lUGllY2VJbWFnZSYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSAhPSBvdGhlci5tX2RhdGE7IH0KQEAgLTEzNSwx
NyArMTM1LDE3IEBAIHB1YmxpYzoKICAgICBTdHlsZUltYWdlKiBpbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YS0+aW1hZ2UuZ2V0KCk7IH0KICAgICB2b2lkIHNldEltYWdlKFBhc3NSZWZQdHI8
U3R5bGVJbWFnZT4gaW1hZ2UpIHsgbV9kYXRhLmFjY2VzcygpLT5pbWFnZSA9IGltYWdlOyB9CiAg
ICAgCi0gICAgY29uc3QgTGVuZ3RoQm94JiBpbWFnZVNsaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS0+aW1hZ2VTbGljZXM7IH0KLSAgICB2b2lkIHNldEltYWdlU2xpY2VzKExlbmd0aEJveCBz
bGljZXMpIHsgbV9kYXRhLmFjY2VzcygpLT5pbWFnZVNsaWNlcyA9IFdURjo6bW92ZShzbGljZXMp
OyB9CisgICAgY29uc3QgTGVuZ3RoSW5zZXRzJiBpbWFnZVNsaWNlcygpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS0+aW1hZ2VTbGljZXM7IH0KKyAgICB2b2lkIHNldEltYWdlU2xpY2VzKExlbmd0aElu
c2V0cyBzbGljZXMpIHsgbV9kYXRhLmFjY2VzcygpLT5pbWFnZVNsaWNlcyA9IFdURjo6bW92ZShz
bGljZXMpOyB9CiAKICAgICBib29sIGZpbGwoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPmZpbGw7
IH0KICAgICB2b2lkIHNldEZpbGwoYm9vbCBmaWxsKSB7IG1fZGF0YS5hY2Nlc3MoKS0+ZmlsbCA9
IGZpbGw7IH0KIAotICAgIGNvbnN0IExlbmd0aEJveCYgYm9yZGVyU2xpY2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhLT5ib3JkZXJTbGljZXM7IH0KLSAgICB2b2lkIHNldEJvcmRlclNsaWNlcyhM
ZW5ndGhCb3ggc2xpY2VzKSB7IG1fZGF0YS5hY2Nlc3MoKS0+Ym9yZGVyU2xpY2VzID0gV1RGOjpt
b3ZlKHNsaWNlcyk7IH0KKyAgICBjb25zdCBMZW5ndGhJbnNldHMmIGJvcmRlclNsaWNlcygpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YS0+Ym9yZGVyU2xpY2VzOyB9CisgICAgdm9pZCBzZXRCb3JkZXJT
bGljZXMoTGVuZ3RoSW5zZXRzIHNsaWNlcykgeyBtX2RhdGEuYWNjZXNzKCktPmJvcmRlclNsaWNl
cyA9IFdURjo6bW92ZShzbGljZXMpOyB9CiAKLSAgICBjb25zdCBMZW5ndGhCb3gmIG91dHNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+b3V0c2V0OyB9Ci0gICAgdm9pZCBzZXRPdXRzZXQoTGVu
Z3RoQm94IG91dHNldCkgeyBtX2RhdGEuYWNjZXNzKCktPm91dHNldCA9IFdURjo6bW92ZShvdXRz
ZXQpOyB9CisgICAgY29uc3QgTGVuZ3RoSW5zZXRzJiBvdXRzZXQoKSBjb25zdCB7IHJldHVybiBt
X2RhdGEtPm91dHNldDsgfQorICAgIHZvaWQgc2V0T3V0c2V0KExlbmd0aEluc2V0cyBvdXRzZXQp
IHsgbV9kYXRhLmFjY2VzcygpLT5vdXRzZXQgPSBXVEY6Om1vdmUob3V0c2V0KTsgfQogCiAgICAg
RU5pbmVQaWVjZUltYWdlUnVsZSBob3Jpem9udGFsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEVOaW5lUGllY2VJbWFnZVJ1bGU+KG1fZGF0YS0+aG9yaXpvbnRhbFJ1bGUpOyB9CiAg
ICAgdm9pZCBzZXRIb3Jpem9udGFsUnVsZShFTmluZVBpZWNlSW1hZ2VSdWxlIHJ1bGUpIHsgbV9k
YXRhLmFjY2VzcygpLT5ob3Jpem9udGFsUnVsZSA9IHJ1bGU7IH0KQEAgLTE3Nyw5ICsxNzcsOSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE1hc2tEZWZhdWx0cygpCiAgICAgewotICAgICAgICBt
X2RhdGEuYWNjZXNzKCktPmltYWdlU2xpY2VzID0gTGVuZ3RoQm94KDApOworICAgICAgICBtX2Rh
dGEuYWNjZXNzKCktPmltYWdlU2xpY2VzID0gTGVuZ3RoSW5zZXRzKDApOwogICAgICAgICBtX2Rh
dGEuYWNjZXNzKCktPmZpbGwgPSB0cnVlOwotICAgICAgICBtX2RhdGEuYWNjZXNzKCktPmJvcmRl
clNsaWNlcyA9IExlbmd0aEJveCgpOworICAgICAgICBtX2RhdGEuYWNjZXNzKCktPmJvcmRlclNs
aWNlcyA9IExlbmd0aEluc2V0cygpOwogICAgIH0KIAogICAgIHN0YXRpYyBMYXlvdXRVbml0IGNv
bXB1dGVPdXRzZXQoY29uc3QgTGVuZ3RoJiBvdXRzZXRTaWRlLCBMYXlvdXRVbml0IGJvcmRlclNp
ZGUpCkBAIC0xOTAsMTYgKzE5MCwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgc3RhdGljIExh
eW91dFVuaXQgY29tcHV0ZVNsaWNlKExlbmd0aCwgTGF5b3V0VW5pdCB3aWR0aCwgTGF5b3V0VW5p
dCBzbGljZSwgTGF5b3V0VW5pdCBleHRlbnQpOwotICAgIHN0YXRpYyBMYXlvdXRCb3hFeHRlbnQg
Y29tcHV0ZVNsaWNlcyhjb25zdCBMYXlvdXRTaXplJiwgY29uc3QgTGVuZ3RoQm94JiBsZW5ndGhz
LCBpbnQgc2NhbGVGYWN0b3IpOwotICAgIHN0YXRpYyBMYXlvdXRCb3hFeHRlbnQgY29tcHV0ZVNs
aWNlcyhjb25zdCBMYXlvdXRTaXplJiwgY29uc3QgTGVuZ3RoQm94JiBsZW5ndGhzLCBjb25zdCBG
bG9hdEJveEV4dGVudCYgd2lkdGhzLCBjb25zdCBMYXlvdXRCb3hFeHRlbnQmIHNsaWNlcyk7Cisg
ICAgc3RhdGljIExheW91dEluc2V0cyBjb21wdXRlU2xpY2VzKGNvbnN0IExheW91dFNpemUmLCBj
b25zdCBMZW5ndGhJbnNldHMmIGxlbmd0aHMsIGludCBzY2FsZUZhY3Rvcik7CisgICAgc3RhdGlj
IExheW91dEluc2V0cyBjb21wdXRlU2xpY2VzKGNvbnN0IExheW91dFNpemUmLCBjb25zdCBMZW5n
dGhJbnNldHMmIGxlbmd0aHMsIGNvbnN0IEZsb2F0SW5zZXRzJiB3aWR0aHMsIGNvbnN0IExheW91
dEluc2V0cyYgc2xpY2VzKTsKIAotICAgIHN0YXRpYyBib29sIGlzRW1wdHlQaWVjZVJlY3QoSW1h
Z2VQaWVjZSwgY29uc3QgTGF5b3V0Qm94RXh0ZW50JiBzbGljZXMpOworICAgIHN0YXRpYyBib29s
IGlzRW1wdHlQaWVjZVJlY3QoSW1hZ2VQaWVjZSwgY29uc3QgTGF5b3V0SW5zZXRzJiBzbGljZXMp
OwogICAgIHN0YXRpYyBib29sIGlzRW1wdHlQaWVjZVJlY3QoSW1hZ2VQaWVjZSwgY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIGRlc3RpbmF0aW9uUmVjdHMsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiBzb3VyY2VSZWN0cyk7CiAKLSAgICBzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gY29tcHV0ZUlu
dHJpbnNpY1JlY3RzKGNvbnN0IEZsb2F0UmVjdCYgb3V0ZXIsIGNvbnN0IExheW91dEJveEV4dGVu
dCYgc2xpY2VzLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgc3RhdGljIFZlY3RvcjxG
bG9hdFJlY3Q+IGNvbXB1dGVOb25JbnRyaW5zaWNSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgaW50cmluc2ljUmVjdHMsIGNvbnN0IExheW91dEJveEV4dGVudCYgc2xpY2VzKTsKKyAgICBz
dGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gY29tcHV0ZUludHJpbnNpY1JlY3RzKGNvbnN0IEZsb2F0
UmVjdCYgb3V0ZXIsIGNvbnN0IExheW91dEluc2V0cyYgc2xpY2VzLCBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3Rvcik7CisgICAgc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGNvbXB1dGVOb25JbnRyaW5z
aWNSZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgaW50cmluc2ljUmVjdHMsIGNvbnN0IExh
eW91dEluc2V0cyYgc2xpY2VzKTsKIAotICAgIHN0YXRpYyB2b2lkIHNjYWxlU2xpY2VzSWZOZWVk
ZWQoY29uc3QgTGF5b3V0U2l6ZSYsIExheW91dEJveEV4dGVudCYgc2xpY2VzLCBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3Rvcik7CisgICAgc3RhdGljIHZvaWQgc2NhbGVTbGljZXNJZk5lZWRlZChjb25z
dCBMYXlvdXRTaXplJiwgTGF5b3V0SW5zZXRzJiBzbGljZXMsIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKTsKIAogICAgIHN0YXRpYyBGbG9hdFNpemUgY29tcHV0ZUludHJpbnNpY1NpZGVUaWxlU2Nh
bGUoSW1hZ2VQaWVjZSwgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIGRlc3RpbmF0aW9uUmVjdHMs
IGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBzb3VyY2VSZWN0cyk7CiAgICAgc3RhdGljIEZsb2F0
U2l6ZSBjb21wdXRlSW50cmluc2ljTWlkZGxlVGlsZVNjYWxlKGNvbnN0IFZlY3RvcjxGbG9hdFNp
emU+JiBzY2FsZXMsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBkZXN0aW5hdGlvblJlY3RzLCBj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgc291cmNlUmVjdHMsIEVOaW5lUGllY2VJbWFnZVJ1bGUg
aFJ1bGUsIEVOaW5lUGllY2VJbWFnZVJ1bGUgdlJ1bGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiAxODc1NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTgsNyArNDE4LDcgQEAgYm9vbCBSZW5kZXJTdHlsZTo6aW5oZXJpdGVkRGF0
YVNoYXJlZChjbwogICAgICAgICAmJiByYXJlSW5oZXJpdGVkRGF0YS5nZXQoKSA9PSBvdGhlci0+
cmFyZUluaGVyaXRlZERhdGEuZ2V0KCk7CiB9CiAKLXN0YXRpYyBib29sIHBvc2l0aW9uQ2hhbmdl
SXNNb3ZlbWVudE9ubHkoY29uc3QgTGVuZ3RoQm94JiBhLCBjb25zdCBMZW5ndGhCb3gmIGIsIGNv
bnN0IExlbmd0aCYgd2lkdGgpCitzdGF0aWMgYm9vbCBwb3NpdGlvbkNoYW5nZUlzTW92ZW1lbnRP
bmx5KGNvbnN0IExlbmd0aEluc2V0cyYgYSwgY29uc3QgTGVuZ3RoSW5zZXRzJiBiLCBjb25zdCBM
ZW5ndGgmIHdpZHRoKQogewogICAgIC8vIElmIGFueSB1bml0IHR5cGVzIGFyZSBkaWZmZXJlbnQs
IHRoZW4gd2UgY2FuJ3QgZ3VhcmFudGVlCiAgICAgLy8gdGhhdCB0aGlzIHdhcyBqdXN0IGEgbW92
ZW1lbnQuCkBAIC0xNTE1LDcgKzE1MTUsNyBAQCB2b2lkIFJlbmRlclN0eWxlOjpnZXRTaGFkb3dF
eHRlbnQoY29uc3QgCiAgICAgfQogfQogCi1MYXlvdXRCb3hFeHRlbnQgUmVuZGVyU3R5bGU6Omdl
dFNoYWRvd0luc2V0RXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykgY29uc3QKK0xheW91
dEluc2V0cyBSZW5kZXJTdHlsZTo6Z2V0U2hhZG93SW5zZXRFeHRlbnQoY29uc3QgU2hhZG93RGF0
YSogc2hhZG93KSBjb25zdAogewogICAgIExheW91dFVuaXQgdG9wID0gMDsKICAgICBMYXlvdXRV
bml0IHJpZ2h0ID0gMDsKQEAgLTE1MzMsNyArMTUzMyw3IEBAIExheW91dEJveEV4dGVudCBSZW5k
ZXJTdHlsZTo6Z2V0U2hhZG93SW4KICAgICAgICAgbGVmdCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KGxlZnQsIHNoYWRvdy0+eCgpICsgZXh0ZW50QW5kU3ByZWFkKTsKICAgICB9CiAKLSAgICByZXR1
cm4gTGF5b3V0Qm94RXh0ZW50KHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CisgICAgcmV0dXJu
IExheW91dEluc2V0cyh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOwogfQogCiB2b2lkIFJlbmRl
clN0eWxlOjpnZXRTaGFkb3dIb3Jpem9udGFsRXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRv
dywgTGF5b3V0VW5pdCAmbGVmdCwgTGF5b3V0VW5pdCAmcmlnaHQpIGNvbnN0CkBAIC0xNzg5LDEy
ICsxNzg5LDEyIEBAIENvbG9yIFJlbmRlclN0eWxlOjppbml0aWFsVGFwSGlnaGxpZ2h0Q28KIH0K
ICNlbmRpZgogCi1MYXlvdXRCb3hFeHRlbnQgUmVuZGVyU3R5bGU6OmltYWdlT3V0c2V0cyhjb25z
dCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpIGNvbnN0CitMYXlvdXRJbnNldHMgUmVuZGVyU3R5bGU6
OmltYWdlT3V0c2V0cyhjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIExheW91dEJveEV4dGVudChOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZU91dHNldChpbWFn
ZS5vdXRzZXQoKS50b3AoKSwgYm9yZGVyVG9wV2lkdGgoKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZU91dHNldChpbWFnZS5vdXRzZXQoKS5yaWdo
dCgpLCBib3JkZXJSaWdodFdpZHRoKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTmlu
ZVBpZWNlSW1hZ2U6OmNvbXB1dGVPdXRzZXQoaW1hZ2Uub3V0c2V0KCkuYm90dG9tKCksIGJvcmRl
ckJvdHRvbVdpZHRoKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTmluZVBpZWNlSW1h
Z2U6OmNvbXB1dGVPdXRzZXQoaW1hZ2Uub3V0c2V0KCkubGVmdCgpLCBib3JkZXJMZWZ0V2lkdGgo
KSkpOworICAgIHJldHVybiBMYXlvdXRJbnNldHMoTmluZVBpZWNlSW1hZ2U6OmNvbXB1dGVPdXRz
ZXQoaW1hZ2Uub3V0c2V0KCkudG9wKCksIGJvcmRlclRvcFdpZHRoKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgTmluZVBpZWNlSW1hZ2U6OmNvbXB1dGVPdXRzZXQoaW1hZ2Uub3V0c2V0KCku
cmlnaHQoKSwgYm9yZGVyUmlnaHRXaWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5p
bmVQaWVjZUltYWdlOjpjb21wdXRlT3V0c2V0KGltYWdlLm91dHNldCgpLmJvdHRvbSgpLCBib3Jk
ZXJCb3R0b21XaWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5pbmVQaWVjZUltYWdl
Ojpjb21wdXRlT3V0c2V0KGltYWdlLm91dHNldCgpLmxlZnQoKSwgYm9yZGVyTGVmdFdpZHRoKCkp
KTsKIH0KIAogdm9pZCBSZW5kZXJTdHlsZTo6Z2V0Rm9udEFuZEdseXBoT3JpZW50YXRpb24oRm9u
dE9yaWVudGF0aW9uJiBmb250T3JpZW50YXRpb24sIE5vbkNKS0dseXBoT3JpZW50YXRpb24mIGds
eXBoT3JpZW50YXRpb24pCkBAIC0xODQzLDIxICsxODQzLDIxIEBAIHZvaWQgUmVuZGVyU3R5bGU6
OnNldEJvcmRlckltYWdlU291cmNlKFAKICAgICBzdXJyb3VuZC5hY2Nlc3MoKS0+Ym9yZGVyLm1f
aW1hZ2Uuc2V0SW1hZ2UoaW1hZ2UpOwogfQogCi12b2lkIFJlbmRlclN0eWxlOjpzZXRCb3JkZXJJ
bWFnZVNsaWNlcyhMZW5ndGhCb3ggc2xpY2VzKQordm9pZCBSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
SW1hZ2VTbGljZXMoTGVuZ3RoSW5zZXRzIHNsaWNlcykKIHsKICAgICBpZiAoc3Vycm91bmQtPmJv
cmRlci5tX2ltYWdlLmltYWdlU2xpY2VzKCkgPT0gc2xpY2VzKQogICAgICAgICByZXR1cm47CiAg
ICAgc3Vycm91bmQuYWNjZXNzKCktPmJvcmRlci5tX2ltYWdlLnNldEltYWdlU2xpY2VzKHNsaWNl
cyk7CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlV2lkdGgoTGVuZ3RoQm94
IHNsaWNlcykKK3ZvaWQgUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlV2lkdGgoTGVuZ3RoSW5z
ZXRzIHNsaWNlcykKIHsKICAgICBpZiAoc3Vycm91bmQtPmJvcmRlci5tX2ltYWdlLmJvcmRlclNs
aWNlcygpID09IHNsaWNlcykKICAgICAgICAgcmV0dXJuOwogICAgIHN1cnJvdW5kLmFjY2Vzcygp
LT5ib3JkZXIubV9pbWFnZS5zZXRCb3JkZXJTbGljZXMoc2xpY2VzKTsKIH0KIAotdm9pZCBSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQoTGVuZ3RoQm94IG91dHNldCkKK3ZvaWQgUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckltYWdlT3V0c2V0KExlbmd0aEluc2V0cyBvdXRzZXQpCiB7CiAg
ICAgaWYgKHN1cnJvdW5kLT5ib3JkZXIubV9pbWFnZS5vdXRzZXQoKSA9PSBvdXRzZXQpCiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOCBAQAogI2lu
Y2x1ZGUgIkZvbnRCYXNlbGluZS5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbnNldHMuaCIKICNpbmNsdWRlICJM
ZW5ndGguaCIKLSNpbmNsdWRlICJMZW5ndGhCb3guaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlv
bnMuaCIKICNpbmNsdWRlICJMZW5ndGhTaXplLmgiCiAjaW5jbHVkZSAiTGluZUNsYW1wVmFsdWUu
aCIKQEAgLTU1MywxNyArNTUzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGhhc0JhY2tn
cm91bmRJbWFnZSgpOwogICAgIH0KICAgICAKLSAgICBMYXlvdXRCb3hFeHRlbnQgaW1hZ2VPdXRz
ZXRzKGNvbnN0IE5pbmVQaWVjZUltYWdlJikgY29uc3Q7CisgICAgTGF5b3V0SW5zZXRzIGltYWdl
T3V0c2V0cyhjb25zdCBOaW5lUGllY2VJbWFnZSYpIGNvbnN0OwogICAgIGJvb2wgaGFzQm9yZGVy
SW1hZ2VPdXRzZXRzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBib3JkZXJJbWFnZSgp
Lmhhc0ltYWdlKCkgJiYgIWJvcmRlckltYWdlKCkub3V0c2V0KCkuaXNaZXJvKCk7CiAgICAgfQot
ICAgIExheW91dEJveEV4dGVudCBib3JkZXJJbWFnZU91dHNldHMoKSBjb25zdAorICAgIExheW91
dEluc2V0cyBib3JkZXJJbWFnZU91dHNldHMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IGltYWdlT3V0c2V0cyhib3JkZXJJbWFnZSgpKTsKICAgICB9CiAKLSAgICBMYXlvdXRCb3hFeHRl
bnQgbWFza0JveEltYWdlT3V0c2V0cygpIGNvbnN0CisgICAgTGF5b3V0SW5zZXRzIG1hc2tCb3hJ
bWFnZU91dHNldHMoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGltYWdlT3V0c2V0cyht
YXNrQm94SW1hZ2UoKSk7CiAgICAgfQpAQCAtNjM4LDkgKzYzOCw5IEBAIHB1YmxpYzoKIAogICAg
IGNvbnN0IE5pbmVQaWVjZUltYWdlJiBib3JkZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHN1cnJv
dW5kLT5ib3JkZXIuaW1hZ2UoKTsgfQogICAgIFN0eWxlSW1hZ2UqIGJvcmRlckltYWdlU291cmNl
KCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5pbWFnZSgpLmltYWdlKCk7IH0KLSAg
ICBjb25zdCBMZW5ndGhCb3gmIGJvcmRlckltYWdlU2xpY2VzKCkgY29uc3QgeyByZXR1cm4gc3Vy
cm91bmQtPmJvcmRlci5pbWFnZSgpLmltYWdlU2xpY2VzKCk7IH0KLSAgICBjb25zdCBMZW5ndGhC
b3gmIGJvcmRlckltYWdlV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmlt
YWdlKCkuYm9yZGVyU2xpY2VzKCk7IH0KLSAgICBjb25zdCBMZW5ndGhCb3gmIGJvcmRlckltYWdl
T3V0c2V0KCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5pbWFnZSgpLm91dHNldCgp
OyB9CisgICAgY29uc3QgTGVuZ3RoSW5zZXRzJiBib3JkZXJJbWFnZVNsaWNlcygpIGNvbnN0IHsg
cmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuaW1hZ2UoKS5pbWFnZVNsaWNlcygpOyB9CisgICAgY29u
c3QgTGVuZ3RoSW5zZXRzJiBib3JkZXJJbWFnZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3Vycm91
bmQtPmJvcmRlci5pbWFnZSgpLmJvcmRlclNsaWNlcygpOyB9CisgICAgY29uc3QgTGVuZ3RoSW5z
ZXRzJiBib3JkZXJJbWFnZU91dHNldCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIu
aW1hZ2UoKS5vdXRzZXQoKTsgfQogCiAgICAgY29uc3QgTGVuZ3RoU2l6ZSYgYm9yZGVyVG9wTGVm
dFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIudG9wTGVmdCgpOyB9CiAg
ICAgY29uc3QgTGVuZ3RoU2l6ZSYgYm9yZGVyVG9wUmlnaHRSYWRpdXMoKSBjb25zdCB7IHJldHVy
biBzdXJyb3VuZC0+Ym9yZGVyLnRvcFJpZ2h0KCk7IH0KQEAgLTY2MCw3ICs2NjAsNyBAQCBwdWJs
aWM6CiAgICAgZmxvYXQgYm9yZGVyQm90dG9tV2lkdGgoKSBjb25zdCB7IHJldHVybiBzdXJyb3Vu
ZC0+Ym9yZGVyLmJvcmRlckJvdHRvbVdpZHRoKCk7IH0KICAgICBFQm9yZGVyU3R5bGUgYm9yZGVy
Qm90dG9tU3R5bGUoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLnN0
eWxlKCk7IH0KICAgICBib29sIGJvcmRlckJvdHRvbUlzVHJhbnNwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLmlzVHJhbnNwYXJlbnQoKTsgfQotICAgIEZs
b2F0Qm94RXh0ZW50IGJvcmRlcldpZHRoKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRl
ci5ib3JkZXJXaWR0aCgpOyB9CisgICAgRmxvYXRJbnNldHMgYm9yZGVyV2lkdGgoKSBjb25zdCB7
IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvcmRlcldpZHRoKCk7IH0KIAogICAgIGZsb2F0IGJv
cmRlckJlZm9yZVdpZHRoKCkgY29uc3Q7CiAgICAgZmxvYXQgYm9yZGVyQWZ0ZXJXaWR0aCgpIGNv
bnN0OwpAQCAtNjg5LDcgKzY4OSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBMZW5ndGgmIGNsaXBS
aWdodCgpIGNvbnN0IHsgcmV0dXJuIHZpc3VhbC0+Y2xpcC5yaWdodCgpOyB9CiAgICAgY29uc3Qg
TGVuZ3RoJiBjbGlwVG9wKCkgY29uc3QgeyByZXR1cm4gdmlzdWFsLT5jbGlwLnRvcCgpOyB9CiAg
ICAgY29uc3QgTGVuZ3RoJiBjbGlwQm90dG9tKCkgY29uc3QgeyByZXR1cm4gdmlzdWFsLT5jbGlw
LmJvdHRvbSgpOyB9Ci0gICAgY29uc3QgTGVuZ3RoQm94JiBjbGlwKCkgY29uc3QgeyByZXR1cm4g
dmlzdWFsLT5jbGlwOyB9CisgICAgY29uc3QgTGVuZ3RoSW5zZXRzJiBjbGlwKCkgY29uc3QgeyBy
ZXR1cm4gdmlzdWFsLT5jbGlwOyB9CiAgICAgYm9vbCBoYXNDbGlwKCkgY29uc3QgeyByZXR1cm4g
dmlzdWFsLT5oYXNDbGlwOyB9CiAKICAgICBFVW5pY29kZUJpZGkgdW5pY29kZUJpZGkoKSBjb25z
dCB7IHJldHVybiBub25pbmhlcml0ZWRfZmxhZ3MudW5pY29kZUJpZGkoKTsgfQpAQCAtODQ4LDcg
Kzg0OCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBMZW5ndGgmIG1hcmdpbkJlZm9yZVVzaW5nKGNv
bnN0IFJlbmRlclN0eWxlKiBvdGhlclN0eWxlKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+bWFy
Z2luLmJlZm9yZShvdGhlclN0eWxlLT53cml0aW5nTW9kZSgpKTsgfQogICAgIGNvbnN0IExlbmd0
aCYgbWFyZ2luQWZ0ZXJVc2luZyhjb25zdCBSZW5kZXJTdHlsZSogb3RoZXJTdHlsZSkgY29uc3Qg
eyByZXR1cm4gc3Vycm91bmQtPm1hcmdpbi5hZnRlcihvdGhlclN0eWxlLT53cml0aW5nTW9kZSgp
KTsgfQogCi0gICAgY29uc3QgTGVuZ3RoQm94JiBwYWRkaW5nQm94KCkgY29uc3QgeyByZXR1cm4g
c3Vycm91bmQtPnBhZGRpbmc7IH0KKyAgICBjb25zdCBMZW5ndGhJbnNldHMmIHBhZGRpbmdCb3go
KSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+cGFkZGluZzsgfQogICAgIGNvbnN0IExlbmd0aCYg
cGFkZGluZ1RvcCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5wYWRkaW5nLnRvcCgpOyB9CiAg
ICAgY29uc3QgTGVuZ3RoJiBwYWRkaW5nQm90dG9tKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQt
PnBhZGRpbmcuYm90dG9tKCk7IH0KICAgICBjb25zdCBMZW5ndGgmIHBhZGRpbmdMZWZ0KCkgY29u
c3QgeyByZXR1cm4gc3Vycm91bmQtPnBhZGRpbmcubGVmdCgpOyB9CkBAIC05NjcsNyArOTY3LDcg
QEAgcHVibGljOgogCiAgICAgY29uc3QgU2hhZG93RGF0YSogYm94U2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYm94U2hhZG93LmdldCgpOyB9CiAgICAgdm9p
ZCBnZXRCb3hTaGFkb3dFeHRlbnQoTGF5b3V0VW5pdCYgdG9wLCBMYXlvdXRVbml0JiByaWdodCwg
TGF5b3V0VW5pdCYgYm90dG9tLCBMYXlvdXRVbml0JiBsZWZ0KSBjb25zdCB7IGdldFNoYWRvd0V4
dGVudChib3hTaGFkb3coKSwgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsgfQotICAgIExheW91
dEJveEV4dGVudCBnZXRCb3hTaGFkb3dJbnNldEV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIGdldFNo
YWRvd0luc2V0RXh0ZW50KGJveFNoYWRvdygpKTsgfQorICAgIExheW91dEluc2V0cyBnZXRCb3hT
aGFkb3dJbnNldEV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIGdldFNoYWRvd0luc2V0RXh0ZW50KGJv
eFNoYWRvdygpKTsgfQogICAgIHZvaWQgZ2V0Qm94U2hhZG93SG9yaXpvbnRhbEV4dGVudChMYXlv
dXRVbml0JiBsZWZ0LCBMYXlvdXRVbml0JiByaWdodCkgY29uc3QgeyBnZXRTaGFkb3dIb3Jpem9u
dGFsRXh0ZW50KGJveFNoYWRvdygpLCBsZWZ0LCByaWdodCk7IH0KICAgICB2b2lkIGdldEJveFNo
YWRvd1ZlcnRpY2FsRXh0ZW50KExheW91dFVuaXQmIHRvcCwgTGF5b3V0VW5pdCYgYm90dG9tKSBj
b25zdCB7IGdldFNoYWRvd1ZlcnRpY2FsRXh0ZW50KGJveFNoYWRvdygpLCB0b3AsIGJvdHRvbSk7
IH0KICAgICB2b2lkIGdldEJveFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudChMYXlvdXRVbml0
JiBsb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYgbG9naWNhbFJpZ2h0KSBjb25zdCB7IGdldFNoYWRv
d0lubGluZURpcmVjdGlvbkV4dGVudChib3hTaGFkb3coKSwgbG9naWNhbExlZnQsIGxvZ2ljYWxS
aWdodCk7IH0KQEAgLTEyNzAsOSArMTI3MCw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHNl
dEJvcmRlckltYWdlKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBiKSB7IFNFVF9WQVIoc3Vycm91bmQs
IGJvcmRlci5tX2ltYWdlLCBiKTsgfQogICAgIHZvaWQgc2V0Qm9yZGVySW1hZ2VTb3VyY2UoUGFz
c1JlZlB0cjxTdHlsZUltYWdlPik7Ci0gICAgdm9pZCBzZXRCb3JkZXJJbWFnZVNsaWNlcyhMZW5n
dGhCb3gpOwotICAgIHZvaWQgc2V0Qm9yZGVySW1hZ2VXaWR0aChMZW5ndGhCb3gpOwotICAgIHZv
aWQgc2V0Qm9yZGVySW1hZ2VPdXRzZXQoTGVuZ3RoQm94KTsKKyAgICB2b2lkIHNldEJvcmRlcklt
YWdlU2xpY2VzKExlbmd0aEluc2V0cyk7CisgICAgdm9pZCBzZXRCb3JkZXJJbWFnZVdpZHRoKExl
bmd0aEluc2V0cyk7CisgICAgdm9pZCBzZXRCb3JkZXJJbWFnZU91dHNldChMZW5ndGhJbnNldHMp
OwogCiAgICAgdm9pZCBzZXRCb3JkZXJUb3BMZWZ0UmFkaXVzKExlbmd0aFNpemUgc2l6ZSkgeyBT
RVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV90b3BMZWZ0LCBXVEY6Om1vdmUoc2l6ZSkpOyB9CiAg
ICAgdm9pZCBzZXRCb3JkZXJUb3BSaWdodFJhZGl1cyhMZW5ndGhTaXplIHNpemUpIHsgU0VUX1ZB
UihzdXJyb3VuZCwgYm9yZGVyLm1fdG9wUmlnaHQsIFdURjo6bW92ZShzaXplKSk7IH0KQEAgLTEz
MjcsNyArMTMyNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENsaXBUb3AoTGVuZ3RoIGxlbmd0
aCkgeyBTRVRfVkFSKHZpc3VhbCwgY2xpcC50b3AoKSwgV1RGOjptb3ZlKGxlbmd0aCkpOyB9CiAg
ICAgdm9pZCBzZXRDbGlwQm90dG9tKExlbmd0aCBsZW5ndGgpIHsgU0VUX1ZBUih2aXN1YWwsIGNs
aXAuYm90dG9tKCksIFdURjo6bW92ZShsZW5ndGgpKTsgfQogICAgIHZvaWQgc2V0Q2xpcChMZW5n
dGggdG9wLCBMZW5ndGggcmlnaHQsIExlbmd0aCBib3R0b20sIExlbmd0aCBsZWZ0KTsKLSAgICB2
b2lkIHNldENsaXAoTGVuZ3RoQm94IGJveCkgeyBTRVRfVkFSKHZpc3VhbCwgY2xpcCwgV1RGOjpt
b3ZlKGJveCkpOyB9CisgICAgdm9pZCBzZXRDbGlwKExlbmd0aEluc2V0cyBpbnNldHMpIHsgU0VU
X1ZBUih2aXN1YWwsIGNsaXAsIFdURjo6bW92ZShpbnNldHMpKTsgfQogCiAgICAgdm9pZCBzZXRV
bmljb2RlQmlkaShFVW5pY29kZUJpZGkgYikgeyBub25pbmhlcml0ZWRfZmxhZ3Muc2V0VW5pY29k
ZUJpZGkoYik7IH0KIApAQCAtMTQzNSw3ICsxNDM1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
TGlzdFN0eWxlSW1hZ2UoUGFzc1JlZlB0cjxTdHlsZUltYWdlPik7CiAgICAgdm9pZCBzZXRMaXN0
U3R5bGVQb3NpdGlvbihFTGlzdFN0eWxlUG9zaXRpb24gdikgeyBpbmhlcml0ZWRfZmxhZ3MuX2xp
c3Rfc3R5bGVfcG9zaXRpb24gPSB2OyB9CiAKLSAgICB2b2lkIHJlc2V0TWFyZ2luKCkgeyBTRVRf
VkFSKHN1cnJvdW5kLCBtYXJnaW4sIExlbmd0aEJveChGaXhlZCkpOyB9CisgICAgdm9pZCByZXNl
dE1hcmdpbigpIHsgU0VUX1ZBUihzdXJyb3VuZCwgbWFyZ2luLCBMZW5ndGhJbnNldHMoRml4ZWQp
KTsgfQogICAgIHZvaWQgc2V0TWFyZ2luVG9wKExlbmd0aCBsZW5ndGgpIHsgU0VUX1ZBUihzdXJy
b3VuZCwgbWFyZ2luLnRvcCgpLCBXVEY6Om1vdmUobGVuZ3RoKSk7IH0KICAgICB2b2lkIHNldE1h
cmdpbkJvdHRvbShMZW5ndGggbGVuZ3RoKSB7IFNFVF9WQVIoc3Vycm91bmQsIG1hcmdpbi5ib3R0
b20oKSwgV1RGOjptb3ZlKGxlbmd0aCkpOyB9CiAgICAgdm9pZCBzZXRNYXJnaW5MZWZ0KExlbmd0
aCBsZW5ndGgpIHsgU0VUX1ZBUihzdXJyb3VuZCwgbWFyZ2luLmxlZnQoKSwgV1RGOjptb3ZlKGxl
bmd0aCkpOyB9CkBAIC0xNDQzLDggKzE0NDMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRNYXJn
aW5TdGFydChMZW5ndGgpOwogICAgIHZvaWQgc2V0TWFyZ2luRW5kKExlbmd0aCk7CiAKLSAgICB2
b2lkIHJlc2V0UGFkZGluZygpIHsgU0VUX1ZBUihzdXJyb3VuZCwgcGFkZGluZywgTGVuZ3RoQm94
KEF1dG8pKTsgfQotICAgIHZvaWQgc2V0UGFkZGluZ0JveChMZW5ndGhCb3ggYm94KSB7IFNFVF9W
QVIoc3Vycm91bmQsIHBhZGRpbmcsIFdURjo6bW92ZShib3gpKTsgfQorICAgIHZvaWQgcmVzZXRQ
YWRkaW5nKCkgeyBTRVRfVkFSKHN1cnJvdW5kLCBwYWRkaW5nLCBMZW5ndGhJbnNldHMoQXV0bykp
OyB9CisgICAgdm9pZCBzZXRQYWRkaW5nQm94KExlbmd0aEluc2V0cyBpbnNldHMpIHsgU0VUX1ZB
UihzdXJyb3VuZCwgcGFkZGluZywgV1RGOjptb3ZlKGluc2V0cykpOyB9CiAgICAgdm9pZCBzZXRQ
YWRkaW5nVG9wKExlbmd0aCBsZW5ndGgpIHsgU0VUX1ZBUihzdXJyb3VuZCwgcGFkZGluZy50b3Ao
KSwgV1RGOjptb3ZlKGxlbmd0aCkpOyB9CiAgICAgdm9pZCBzZXRQYWRkaW5nQm90dG9tKExlbmd0
aCBsZW5ndGgpIHsgU0VUX1ZBUihzdXJyb3VuZCwgcGFkZGluZy5ib3R0b20oKSwgV1RGOjptb3Zl
KGxlbmd0aCkpOyB9CiAgICAgdm9pZCBzZXRQYWRkaW5nTGVmdChMZW5ndGggbGVuZ3RoKSB7IFNF
VF9WQVIoc3Vycm91bmQsIHBhZGRpbmcubGVmdCgpLCBXVEY6Om1vdmUobGVuZ3RoKSk7IH0KQEAg
LTIxMTAsNyArMjExMCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGluaGVyaXRVbmljb2RlQmlk
aUZyb20oY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudCkgeyBub25pbmhlcml0ZWRfZmxhZ3Muc2V0
VW5pY29kZUJpZGkocGFyZW50LT5ub25pbmhlcml0ZWRfZmxhZ3MudW5pY29kZUJpZGkoKSk7IH0K
ICAgICB2b2lkIGdldFNoYWRvd0V4dGVudChjb25zdCBTaGFkb3dEYXRhKiwgTGF5b3V0VW5pdCYg
dG9wLCBMYXlvdXRVbml0JiByaWdodCwgTGF5b3V0VW5pdCYgYm90dG9tLCBMYXlvdXRVbml0JiBs
ZWZ0KSBjb25zdDsKLSAgICBMYXlvdXRCb3hFeHRlbnQgZ2V0U2hhZG93SW5zZXRFeHRlbnQoY29u
c3QgU2hhZG93RGF0YSopIGNvbnN0OworICAgIExheW91dEluc2V0cyBnZXRTaGFkb3dJbnNldEV4
dGVudChjb25zdCBTaGFkb3dEYXRhKikgY29uc3Q7CiAgICAgdm9pZCBnZXRTaGFkb3dIb3Jpem9u
dGFsRXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqLCBMYXlvdXRVbml0JiBsZWZ0LCBMYXlvdXRVbml0
JiByaWdodCkgY29uc3Q7CiAgICAgdm9pZCBnZXRTaGFkb3dWZXJ0aWNhbEV4dGVudChjb25zdCBT
aGFkb3dEYXRhKiwgTGF5b3V0VW5pdCYgdG9wLCBMYXlvdXRVbml0JiBib3R0b20pIGNvbnN0Owog
ICAgIHZvaWQgZ2V0U2hhZG93SW5saW5lRGlyZWN0aW9uRXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEq
IHNoYWRvdywgTGF5b3V0VW5pdCYgbG9naWNhbExlZnQsIExheW91dFVuaXQmIGxvZ2ljYWxSaWdo
dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZURhc2hi
b2FyZFJlZ2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZURhc2hib2FyZFJlZ2lvbi5oCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVEYXNoYm9hcmRSZWdpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsNyBAQAogI2RlZmluZSBTdHlsZURhc2hib2FyZFJlZ2lvbl9oCiAjaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogCi0jaW5jbHVkZSAiTGVuZ3RoQm94LmgiCisjaW5j
bHVkZSAiSW5zZXRzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dHJ1Y3QgU3R5bGVEYXNoYm9hcmRSZWdpb24gewogICAgIFN0cmluZyBsYWJlbDsKLSAgICBMZW5n
dGhCb3ggb2Zmc2V0OworICAgIExlbmd0aEluc2V0cyBvZmZzZXQ7CiAgICAgaW50IHR5cGU7CiAK
ICAgICBlbnVtIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVN1
cnJvdW5kRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TdHlsZVN1cnJvdW5kRGF0YS5oCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVTdXJyb3VuZERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2RlZmluZSBTdHlsZVN1cnJvdW5kRGF0YV9oCiAKICNpbmNsdWRlICJC
b3JkZXJEYXRhLmgiCi0jaW5jbHVkZSAiTGVuZ3RoQm94LmgiCisjaW5jbHVkZSAiSW5zZXRzLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogCkBAIC00Myw5ICs0Myw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
byk7CiAgICAgfQogCi0gICAgTGVuZ3RoQm94IG9mZnNldDsKLSAgICBMZW5ndGhCb3ggbWFyZ2lu
OwotICAgIExlbmd0aEJveCBwYWRkaW5nOworICAgIExlbmd0aEluc2V0cyBvZmZzZXQ7CisgICAg
TGVuZ3RoSW5zZXRzIG1hcmdpbjsKKyAgICBMZW5ndGhJbnNldHMgcGFkZGluZzsKICAgICBCb3Jk
ZXJEYXRhIGJvcmRlcjsKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVWaXN1YWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlVmlzdWFsRGF0YS5oCShyZXZpc2lvbiAxODc1NTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVWaXN1YWxEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICNpZm5kZWYgU3R5bGVWaXN1YWxEYXRhX2gKICNk
ZWZpbmUgU3R5bGVWaXN1YWxEYXRhX2gKIAotI2luY2x1ZGUgIkxlbmd0aEJveC5oIgorI2luY2x1
ZGUgIkluc2V0cy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpAQCAtNTAs
NyArNTAsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHls
ZVZpc3VhbERhdGEmIG8pIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KIAotICAgIExl
bmd0aEJveCBjbGlwOworICAgIExlbmd0aEluc2V0cyBjbGlwOwogICAgIGJvb2wgaGFzQ2xpcCA6
IDE7CiAgICAgdW5zaWduZWQgdGV4dERlY29yYXRpb24gOiBUZXh0RGVjb3JhdGlvbkJpdHM7IC8v
IFRleHQgZGVjb3JhdGlvbnMgZGVmaW5lZCAqb25seSogYnkgdGhpcyBlbGVtZW50LgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257944</attachid>
            <date>2015-07-31 12:33:05 -0700</date>
            <delta_ts>2017-04-24 19:10:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147495-20150731123303.patch</filename>
            <type>text/plain</type>
            <size>93035</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzY2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NiBAQAorMjAxNS0wNy0zMSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSB0
aGUgaGVhZGVyIGZpbGUgTGVuZ3RoQm94LmggdG8gSW5zZXRzLmggYW5kIHRoZSBjbGFzc2VzIGlu
c2lkZSBhY2NvcmRpbmdseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ3NDk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVuYW1lIExlbmd0aEJveC5oIHRvIEluc2V0cy5oLiBSZW5hbWUgdGhlIHRlbXBs
YXRlcy9jbGFzc2VzIGluIHRoaXMgaGVhZGVyCisgICAgICAgIGZpbGUgdG8gYmU6IEluc2V0cywg
TGVuZ3RoSW5zZXRzLCBMYXlvdXRJbnNldHMgYW5kIEZsb2F0SW5zZXRzLiBBZGQgZmV3IGhlbHBl
cgorICAgICAgICBmdW5jdGlvbnMgdG8gdGhlIEluc2V0cyB0ZW1wbGF0ZTogd2lkdGgoKSwgaGVp
Z2h0KCkgYW5kIHNjYWxlKCkuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVy
czoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JOaW5lUGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZWRTdHlsZUV4
dHJhY3Rvcjo6cHJvcGVydHlWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1Byb3BlcnR5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVUb1BoeXNpY2FsUHJvcGVydHkpOgorICAgICAgICAq
IGNzcy9DU1NUb1N0eWxlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6
Om1hcE5pbmVQaWVjZUltYWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1h
cDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1h
cC5oOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxWYWx1ZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YnVpbGRSZW5kZXJlckhpZ2hsaWdodCk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTUHJvcGVydHlBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRGdW5jKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJv
cGVydHlBbmltYXRpb25XcmFwcGVyTWFwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9JbnNldHMuaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94LmguCisgICAgICAg
IChXZWJDb3JlOjpJbnNldHM6Okluc2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6OmF0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6c2V0QXQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXRzOjp0b3ApOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXRzOjpyaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNldHM6OmJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6Omxl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXRzOjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXRzOjpzZXRSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6OnNldEJvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6OnNldExlZnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXRzOjpiZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXRzOjphZnRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNldHM6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0
czo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6c2V0QmVmb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc2V0czo6c2V0QWZ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXRzOjpz
ZXRTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNldHM6OnNldEVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNldHM6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6aGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXRzOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Okluc2V0czo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChXZWJDb3JlOjpMZW5ndGhJbnNldHM6Okxlbmd0aEluc2V0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpMZW5ndGhJbnNldHM6OmlzWmVybyk6CisgICAgICAgIChXZWJDb3JlOjpC
b3hFeHRlbnQ6OkJveEV4dGVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCb3hFeHRl
bnQ6OmF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6dG9wKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6cmlnaHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Qm94RXh0ZW50Ojpib3R0b20pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Qm94RXh0ZW50OjpsZWZ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4
dGVudDo6c2V0QXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qm94RXh0ZW50OjpzZXRU
b3ApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qm94RXh0ZW50OjpzZXRSaWdodCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCb3hFeHRlbnQ6OnNldEJvdHRvbSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpCb3hFeHRlbnQ6OnNldExlZnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Qm94RXh0ZW50OjpiZWZvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Qm94RXh0ZW50OjphZnRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCb3hFeHRl
bnQ6OnN0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6ZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6c2V0QmVmb3JlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJveEV4dGVudDo6c2V0QWZ0ZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Qm94RXh0ZW50OjpzZXRTdGFydCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpCb3hFeHRlbnQ6OnNldEVuZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpC
b3hFeHRlbnQ6Om9wZXJhdG9yPT0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Qm94RXh0
ZW50OjpvcGVyYXRvciE9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aEJveDo6
TGVuZ3RoQm94KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okxlbmd0aEJveDo6aXNaZXJv
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGhCb3guaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9UaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZTo6Y29u
dHJvbEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZTo6Y29udHJvbFBhZGRpbmcpOgor
ICAgICAgICAqIHBsYXRmb3JtL1RoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZTo6bWlu
aW11bUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lOjpjb250cm9sUmVxdWly
ZXNQcmVXaGl0ZVNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2NyaXB0
aW9uRmFsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVFZmw6OmFwcGx5UGFy
dERlc2NyaXB0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXlvdXRSZWN0Lmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXRSZWN0Ojptb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dFJlY3Q6OmV4
cGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRSZWN0Ojpjb250cmFjdCk6CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVNYWM6Om1pbmltdW1Db250cm9sU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUaGVtZU1hYzo6Y29udHJvbEJvcmRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUaGVtZU1hYzo6Y29udHJvbFBhZGRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvV3JpdGluZ01vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnJvdGF0ZVBoeXNpY2FsU2lkZSk6
CisgICAgICAgIChXZWJDb3JlOjptYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVGbG93Qm94OjphZGRCb3JkZXJPdXRzZXRWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpjbGlwUmVjdEZvck5pbmVQaWVjZUltYWdlU3RyaXApOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2FtZVNpemVBc1JlbmRlckJveDo6
flNhbWVTaXplQXNSZW5kZXJCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphcHBs
eVZpc3VhbEVmZmVjdE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5UG9zaXRpb25Db25z
dHJhaW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVwYWludEFmdGVyTGF5b3V0SWZOZWVkZWQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5Q29tbW9uQnV0dG9uUGFkZGluZ1RvU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0U2VsZWN0TGlzdEJ1dHRvblN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjphZGp1c3RCdXR0b25TdHlsZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJv
cmRlckRhdGE6OmJvcmRlckJvdHRvbVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckRh
dGE6OmJvcmRlcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckRhdGE6Om9wZXJhdG9y
PT0pOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6TmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6TmluZVBpZWNlSW1hZ2U6OmNvbXB1dGVTbGljZSk6CisgICAgICAgIChXZWJDb3Jl
OjpOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZVNsaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpOaW5l
UGllY2VJbWFnZTo6c2NhbGVTbGljZXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpOaW5l
UGllY2VJbWFnZTo6aXNFbXB0eVBpZWNlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGll
Y2VJbWFnZTo6Y29tcHV0ZUludHJpbnNpY1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQ
aWVjZUltYWdlOjpjb21wdXRlTm9uSW50cmluc2ljUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
TmluZVBpZWNlSW1hZ2U6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvTmluZVBp
ZWNlSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpO
aW5lUGllY2VJbWFnZTo6c2V0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TmluZVBpZWNlSW1h
Z2U6OmltYWdlU2xpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjpzZXRJ
bWFnZVNsaWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6ZmlsbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6c2V0RmlsbCk6CisgICAgICAgIChXZWJD
b3JlOjpOaW5lUGllY2VJbWFnZTo6Ym9yZGVyU2xpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5p
bmVQaWVjZUltYWdlOjpzZXRCb3JkZXJTbGljZXMpOgorICAgICAgICAoV2ViQ29yZTo6TmluZVBp
ZWNlSW1hZ2U6Om91dHNldCk6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6c2V0
T3V0c2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5pbmVQaWVjZUltYWdlOjpob3Jpem9udGFsUnVs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6c2V0SG9yaXpvbnRhbFJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6TmluZVBpZWNlSW1hZ2U6OnNldE1hc2tEZWZhdWx0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZU91dHNldCk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclN0eWxlOjppbmhlcml0ZWREYXRhU2hhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OnBvc2l0
aW9uQ2hhbmdlSXNNb3ZlbWVudE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6
OmdldFNoYWRvd0V4dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Z2V0U2hh
ZG93SW5zZXRFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldFNoYWRv
d0hvcml6b250YWxFeHRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmluaXRp
YWxUYXBIaWdobGlnaHRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6aW1h
Z2VPdXRzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRGb250QW5kR2x5
cGhPcmllbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
SW1hZ2VTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OnNldEJvcmRlcklt
YWdlU2xpY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFn
ZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZU91
dHNldCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAg
ICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlRGFzaGJvYXJkUmVnaW9uLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlU3Vycm91bmREYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVN1cnJvdW5kRGF0YTo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0
eWxlVmlzdWFsRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVWaXN1YWxEYXRhOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlVmlzdWFsRGF0YTo6b3BlcmF0b3IhPSk6
CisKIDIwMTUtMDctMzEgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBPbmx5IGdlbmVyYXRlICJ0aGVtZVdpbioiIFVzZXJBZ2VudFN0eWxlU2hlZXQgY29u
c3RhbnRzIGZvciBXaW5kb3dzIGJ1aWxkcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDE5Nyw3ICsyMDE5Nyw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxMYW5ndWFnZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cTGF5
b3V0VW5pdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cTGVuZ3Ro
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxMZW5ndGhCb3guaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXEluc2V0cy5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cTGVuZ3RoU2l6ZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cTGlua0hhc2guaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXExvY2FsaXplZFN0cmluZ3MuaCIgLz4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
LmZpbHRlcnMJKHJldmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4
cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtODIwNCw3ICs4
MjA0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXExlbmd0aC5oIj4K
ICAgICAgIDxGaWx0ZXI+cGxhdGZvcm08L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXExlbmd0aEJveC5oIj4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXEluc2V0cy5oIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZv
cm08L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXExlbmd0aFNpemUuaCI+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTU2MDYsNyArNTYwNiw3IEBACiAJCUJDRkIyRTVFMDk3OUU0NjQwMEJBNzAzRCAvKiBD
YWNoZWRSZXNvdXJjZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNGQjJFNUQwOTc5RTQ2NDAwQkE3MDNEIC8qIENhY2hlZFJlc291cmNlQ2xp
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QkNGRTJGMTEwQzFCNTgzNzAwMjAyMzVGIC8qIEpTUmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZFMkYwRjBDMUI1ODM3MDAyMDIzNUYgLyog
SlNSZWN0LmNwcCAqLzsgfTsKIAkJQkNGRTJGMTIwQzFCNTgzODAwMjAyMzVGIC8qIEpTUmVjdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGRTJGMTAw
QzFCNTgzNzAwMjAyMzVGIC8qIEpTUmVjdC5oICovOyB9OwotCQlCQ0ZGNjQ5MTBFQUQxNUMyMDBD
MUQ2RjcgLyogTGVuZ3RoQm94LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0ZGNjQ4RjBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkNGRjY0OTEwRUFE
MTVDMjAwQzFENkY3IC8qIEluc2V0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNGRjY0OEYwRUFEMTVDMjAwQzFENkY3IC8qIEluc2V0cy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkY2NDkyMEVB
RDE1QzIwMEMxRDZGNyAvKiBMZW5ndGhTaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZGNjQ5MDBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoU2l6
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJF
MTZDNTkyMTdDRkUxNzIwMDg1MkMwNCAvKiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMTZDNThFMTdDRkUx
NzIwMDg1MkMwNCAvKiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmNwcCAqLzsgfTsKIAkJQkUxNkM1
OTMxN0NGRTE3MjAwODUyQzA0IC8qIEluYmFuZEdlbmVyaWNUZXh0VHJhY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJFMTZDNThGMTdDRkUxNzIwMDg1
MkMwNCAvKiBJbmJhbmRHZW5lcmljVGV4dFRyYWNrLmggKi87IH07CkBAIC0xMzE5Niw3ICsxMzE5
Niw3IEBACiAJCUJDRkI0NUY0MTdEOEU0OTQwMDQ0NDQ0NiAvKiBSZW5kZXJCbG9ja0Zsb3cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyQmxvY2tGbG93LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRTJGMEYwQzFCNTgzNzAwMjAyMzVG
IC8qIEpTUmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNS
ZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGRTJGMTAwQzFCNTgzNzAw
MjAyMzVGIC8qIEpTUmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNS
ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDRkY2NDhGMEVBRDE1QzIwMEMx
RDZGNyAvKiBMZW5ndGhCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVu
Z3RoQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRkY2NDhGMEVBRDE1QzIw
MEMxRDZGNyAvKiBJbnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
ZXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRkY2NDkwMEVBRDE1QzIwMEMx
RDZGNyAvKiBMZW5ndGhTaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExl
bmd0aFNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkUxNkM1OEUxN0NGRTE3
MjAwODUyQzA0IC8qIEluYmFuZEdlbmVyaWNUZXh0VHJhY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5iYW5kR2VuZXJpY1RleHRUcmFjay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJFMTZDNThGMTdDRkUxNzIwMDg1MkMwNCAvKiBJbmJhbmRH
ZW5lcmljVGV4dFRyYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluYmFu
ZEdlbmVyaWNUZXh0VHJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxOTIw
LDcgKzIxOTIwLDcgQEAKIAkJCQkxNDFEQzA0NzE2NDgzNDhGMDAzNzFFNUEgLyogTGF5b3V0VW5p
dC5oICovLAogCQkJCUJDRTY1QkU4MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguY3BwICovLAog
CQkJCUJDRTY1QkU5MEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCAqLywKLQkJCQlCQ0ZGNjQ4
RjBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94LmggKi8sCisJCQkJQkNGRjY0OEYwRUFEMTVD
MjAwQzFENkY3IC8qIEluc2V0cy5oICovLAogCQkJCUJDRkY2NDkwMEVBRDE1QzIwMEMxRDZGNyAv
KiBMZW5ndGhTaXplLmggKi8sCiAJCQkJQTdBRDJGODUwRUM4OUQwNzAwOEFCMDAyIC8qIExpbmtI
YXNoLmNwcCAqLywKIAkJCQlBN0FEMkY4NjBFQzg5RDA3MDA4QUIwMDIgLyogTGlua0hhc2guaCAq
LywKQEAgLTI1OTA5LDcgKzI1OTA5LDcgQEAKIAkJCQlFNEUzOUFGQjEzMzBFRkE4MDAzQUIyNzQg
LyogTGVnYWN5VGlsZUxheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyREQ4RjUwRDkx
RTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdlYkFyY2hpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RTY1QkVCMEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCBpbiBIZWFkZXJzICovLAotCQkJCUJD
RkY2NDkxMEVBRDE1QzIwMEMxRDZGNyAvKiBMZW5ndGhCb3guaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDRkY2NDkxMEVBRDE1QzIwMEMxRDZGNyAvKiBJbnNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU1QkE3RDYzMTUxNDM3Q0EwMEZFMUUzRiAvKiBMZW5ndGhGdW5jdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUY0MkZGQjQ2MTk4NEI3MTYwMEY2ODM3RiAvKiBMZW5ndGhSZXBlYXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRkY2NDkyMEVBRDE1QzIwMEMxRDZGNyAvKiBMZW5ndGhTaXplLmgg
aW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTM4LDQ0ICs1MzgsNDQgQEAgc3RhdGljIFJlZjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+
IHZhbAogICAgIHJldHVybiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU6OmNyZWF0ZShjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShXVEY6Om1vdmUocXVhZCkpLCBpbWFnZS5maWxsKCkpOwogfQog
Ci1zdGF0aWMgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUXVh
ZChjb25zdCBMZW5ndGhCb3gmIGJveCkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHZh
bHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFkKGNvbnN0IExlbmd0aEluc2V0cyYgaW5zZXRzKQogewog
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9wOwogICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcmlnaHQ7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBib3R0b207CiAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZWZ0OwogCi0gICAgaWYgKGJveC50b3AoKS5p
c1JlbGF0aXZlKCkpCi0gICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJv
eC50b3AoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgaWYg
KGluc2V0cy50b3AoKS5pc1JlbGF0aXZlKCkpCisgICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKGluc2V0cy50b3AoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUik7CiAgICAgZWxzZQotICAgICAgICB0b3AgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShib3gudG9wKCkpOworICAgICAgICB0b3AgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShpbnNldHMudG9wKCkpOwogCi0gICAgaWYgKGJveC5yaWdodCgpID09IGJveC50b3AoKSAmJiBi
b3guYm90dG9tKCkgPT0gYm94LnRvcCgpICYmIGJveC5sZWZ0KCkgPT0gYm94LnRvcCgpKSB7Cisg
ICAgaWYgKGluc2V0cy5yaWdodCgpID09IGluc2V0cy50b3AoKSAmJiBpbnNldHMuYm90dG9tKCkg
PT0gaW5zZXRzLnRvcCgpICYmIGluc2V0cy5sZWZ0KCkgPT0gaW5zZXRzLnRvcCgpKSB7CiAgICAg
ICAgIHJpZ2h0ID0gdG9wOwogICAgICAgICBib3R0b20gPSB0b3A7CiAgICAgICAgIGxlZnQgPSB0
b3A7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGJveC5yaWdodCgpLmlzUmVsYXRpdmUoKSkK
LSAgICAgICAgICAgIHJpZ2h0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LnJpZ2h0
KCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICBpZiAo
aW5zZXRzLnJpZ2h0KCkuaXNSZWxhdGl2ZSgpKQorICAgICAgICAgICAgcmlnaHQgPSBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShpbnNldHMucmlnaHQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJpZ2h0ID0gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LnJpZ2h0KCkpOworICAgICAgICAgICAgcmlnaHQg
PSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpbnNldHMucmlnaHQoKSk7CiAKLSAgICAgICAg
aWYgKGJveC5ib3R0b20oKSA9PSBib3gudG9wKCkgJiYgYm94LnJpZ2h0KCkgPT0gYm94LmxlZnQo
KSkgeworICAgICAgICBpZiAoaW5zZXRzLmJvdHRvbSgpID09IGluc2V0cy50b3AoKSAmJiBpbnNl
dHMucmlnaHQoKSA9PSBpbnNldHMubGVmdCgpKSB7CiAgICAgICAgICAgICBib3R0b20gPSB0b3A7
CiAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoYm94LmJvdHRvbSgpLmlzUmVsYXRpdmUoKSkKLSAgICAgICAgICAgICAgICBib3R0b20g
PSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShib3guYm90dG9tKCkudmFsdWUoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgaWYgKGluc2V0cy5ib3R0b20o
KS5pc1JlbGF0aXZlKCkpCisgICAgICAgICAgICAgICAgYm90dG9tID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoaW5zZXRzLmJvdHRvbSgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBib3R0b20gPSBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShib3guYm90dG9tKCkpOworICAgICAgICAgICAgICAg
IGJvdHRvbSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGluc2V0cy5ib3R0b20oKSk7CiAK
LSAgICAgICAgICAgIGlmIChib3gubGVmdCgpID09IGJveC5yaWdodCgpKQorICAgICAgICAgICAg
aWYgKGluc2V0cy5sZWZ0KCkgPT0gaW5zZXRzLnJpZ2h0KCkpCiAgICAgICAgICAgICAgICAgbGVm
dCA9IHJpZ2h0OwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJveC5s
ZWZ0KCkuaXNSZWxhdGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoYm94LmxlZnQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7CisgICAgICAgICAgICAgICAgaWYgKGluc2V0cy5sZWZ0KCkuaXNSZWxhdGl2
ZSgpKQorICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUoaW5zZXRzLmxlZnQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LmxlZnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGxl
ZnQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpbnNldHMubGVmdCgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3MDksNyArMjcwOSw3IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENvbXB1dGVkU3R5bGVFeHRyYWMKICAgICAgICAgICAgICAgICBTdHlsZURhc2hi
b2FyZFJlZ2lvbiBzdHlsZVJlZ2lvbiA9IHJlZ2lvbnNbaV07CiAKICAgICAgICAgICAgICAgICBy
ZWdpb24tPm1fbGFiZWwgPSBzdHlsZVJlZ2lvbi5sYWJlbDsKLSAgICAgICAgICAgICAgICBMZW5n
dGhCb3ggb2Zmc2V0ID0gc3R5bGVSZWdpb24ub2Zmc2V0OworICAgICAgICAgICAgICAgIExlbmd0
aEluc2V0cyBvZmZzZXQgPSBzdHlsZVJlZ2lvbi5vZmZzZXQ7CiAgICAgICAgICAgICAgICAgcmVn
aW9uLT5zZXRUb3Aoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShvZmZzZXQudG9wKCkudmFsdWUoKSwg
KnN0eWxlKSk7CiAgICAgICAgICAgICAgICAgcmVnaW9uLT5zZXRSaWdodCh6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlKG9mZnNldC5yaWdodCgpLnZhbHVlKCksICpzdHlsZSkpOwogICAgICAgICAgICAg
ICAgIHJlZ2lvbi0+c2V0Qm90dG9tKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zmc2V0LmJvdHRv
bSgpLnZhbHVlKCksICpzdHlsZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3Bl
cnR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuY3Bw
CShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgQ1NTUHJvcGVydHk6OndyYXBW
YWx1ZUluQ29tbWFTZXBhcmEKIAogc3RhdGljIENTU1Byb3BlcnR5SUQgcmVzb2x2ZVRvUGh5c2lj
YWxQcm9wZXJ0eShUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUsIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRlLCBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRo
YW5kJiBzaG9ydGhhbmQpCiB7Ci0gICAgcmV0dXJuIHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbbWFw
TG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVj
dGlvbiksIGxvZ2ljYWxTaWRlKV07CisgICAgcmV0dXJuIHNob3J0aGFuZC5wcm9wZXJ0aWVzKClb
bWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShsb2dpY2FsU2lkZSwgbWFrZVRleHRGbG93KHdy
aXRpbmdNb2RlLCBkaXJlY3Rpb24pKV07CiB9CiAKIGVudW0gTG9naWNhbEV4dGVudCB7IExvZ2lj
YWxXaWR0aCwgTG9naWNhbEhlaWdodCB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1Rv
U3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmNwcAkocmV2aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTUsMzQgKzYxNSwzNCBAQCB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlU2xpCiAgICAgYXV0byYgYm9yZGVySW1hZ2VTbGlj
ZSA9IGRvd25jYXN0PENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4odmFsdWUpOwogCiAgICAgLy8g
U2V0IHVwIGEgbGVuZ3RoIGJveCB0byByZXByZXNlbnQgb3VyIGltYWdlIHNsaWNlcy4KLSAgICBM
ZW5ndGhCb3ggYm94OworICAgIExlbmd0aEluc2V0cyBpbnNldHM7CiAgICAgUXVhZCogc2xpY2Vz
ID0gYm9yZGVySW1hZ2VTbGljZS5zbGljZXMoKTsKICAgICBpZiAoc2xpY2VzLT50b3AoKS0+aXNQ
ZXJjZW50YWdlKCkpCi0gICAgICAgIGJveC50b3AoKSA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5n
ZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKKyAgICAgICAgaW5zZXRzLnRvcCgpID0gTGVuZ3Ro
KHNsaWNlcy0+dG9wKCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOwogICAgIGVsc2UKLSAg
ICAgICAgYm94LnRvcCgpID0gTGVuZ3RoKHNsaWNlcy0+dG9wKCktPmdldEludFZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOworICAgICAgICBpbnNldHMudG9wKCkg
PSBMZW5ndGgoc2xpY2VzLT50b3AoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpLCBGaXhlZCk7CiAgICAgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmlzUGVyY2VudGFn
ZSgpKQotICAgICAgICBib3guYm90dG9tKCkgPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0
RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgICAgIGluc2V0cy5ib3R0b20oKSA9IExlbmd0
aChzbGljZXMtPmJvdHRvbSgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICBlbHNl
Ci0gICAgICAgIGJveC5ib3R0b20oKSA9IExlbmd0aCgoaW50KXNsaWNlcy0+Ym90dG9tKCktPmdl
dEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7CisgICAg
ICAgIGluc2V0cy5ib3R0b20oKSA9IExlbmd0aCgoaW50KXNsaWNlcy0+Ym90dG9tKCktPmdldEZs
b2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhlZCk7CiAgICAgaWYg
KHNsaWNlcy0+bGVmdCgpLT5pc1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgYm94LmxlZnQoKSA9IExl
bmd0aChzbGljZXMtPmxlZnQoKS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCk7CisgICAgICAg
IGluc2V0cy5sZWZ0KCkgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldERvdWJsZVZhbHVlKCks
IFBlcmNlbnQpOwogICAgIGVsc2UKLSAgICAgICAgYm94LmxlZnQoKSA9IExlbmd0aChzbGljZXMt
PmxlZnQoKS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpLCBGaXhl
ZCk7CisgICAgICAgIGluc2V0cy5sZWZ0KCkgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldElu
dFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOwogICAgIGlmIChz
bGljZXMtPnJpZ2h0KCktPmlzUGVyY2VudGFnZSgpKQotICAgICAgICBib3gucmlnaHQoKSA9IExl
bmd0aChzbGljZXMtPnJpZ2h0KCktPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpOworICAgICAg
ICBpbnNldHMucmlnaHQoKSA9IExlbmd0aChzbGljZXMtPnJpZ2h0KCktPmdldERvdWJsZVZhbHVl
KCksIFBlcmNlbnQpOwogICAgIGVsc2UKLSAgICAgICAgYm94LnJpZ2h0KCkgPSBMZW5ndGgoc2xp
Y2VzLT5yaWdodCgpLT5nZXRJbnRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiks
IEZpeGVkKTsKLSAgICBpbWFnZS5zZXRJbWFnZVNsaWNlcyhib3gpOworICAgICAgICBpbnNldHMu
cmlnaHQoKSA9IExlbmd0aChzbGljZXMtPnJpZ2h0KCktPmdldEludFZhbHVlKENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSwgRml4ZWQpOworICAgIGltYWdlLnNldEltYWdlU2xpY2VzKGlu
c2V0cyk7CiAKICAgICAvLyBTZXQgb3VyIGZpbGwgbW9kZS4KICAgICBpbWFnZS5zZXRGaWxsKGJv
cmRlckltYWdlU2xpY2UubV9maWxsKTsKIH0KIAotTGVuZ3RoQm94IENTU1RvU3R5bGVNYXA6Om1h
cE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSYgdmFsdWUpCitMZW5ndGhJbnNldHMgQ1NTVG9T
dHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBp
ZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBMZW5ndGhC
b3goKTsKKyAgICAgICAgcmV0dXJuIExlbmd0aEluc2V0cygpOwogCiAgICAgLy8gR2V0IG91ciB6
b29tIHZhbHVlLgogICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEg
PSB1c2VTVkdab29tUnVsZXMoKSA/IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpIDogbV9yZXNvbHZlci0+c3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CkBAIC02NTAsMzggKzY1MCwzOCBAQCBM
ZW5ndGhCb3ggQ1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hCiAgICAgLy8gUmV0cmlldmUg
dGhlIHByaW1pdGl2ZSB2YWx1ZS4KICAgICBhdXRvJiBib3JkZXJXaWR0aHMgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCi0gICAgLy8gU2V0IHVwIGEgbGVuZ3RoIGJveCB0
byByZXByZXNlbnQgb3VyIGltYWdlIHNsaWNlcy4KLSAgICBMZW5ndGhCb3ggYm94OyAvLyBEZWZh
dWx0cyB0byAnYXV0bycgc28gd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhhdCBleHBsaWNpdGx5
IGJlbG93LgorICAgIC8vIFNldCB1cCBhIGxlbmd0aCBpbnNldHMgdG8gcmVwcmVzZW50IG91ciBp
bWFnZSBzbGljZXMuCisgICAgTGVuZ3RoSW5zZXRzIGluc2V0czsgLy8gRGVmYXVsdHMgdG8gJ2F1
dG8nIHNvIHdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHRoYXQgZXhwbGljaXRseSBiZWxvdy4KICAg
ICBRdWFkKiBzbGljZXMgPSBib3JkZXJXaWR0aHMuZ2V0UXVhZFZhbHVlKCk7CiAgICAgaWYgKHNs
aWNlcy0+dG9wKCktPmlzTnVtYmVyKCkpCi0gICAgICAgIGJveC50b3AoKSA9IExlbmd0aChzbGlj
ZXMtPnRvcCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CisgICAgICAgIGluc2V0cy50b3Ao
KSA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CiAgICAg
ZWxzZSBpZiAoc2xpY2VzLT50b3AoKS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgIGJveC50b3Ao
KSA9IExlbmd0aChzbGljZXMtPnRvcCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsKKyAgICAgICAgaW5zZXRzLnRvcCgpID0gTGVu
Z3RoKHNsaWNlcy0+dG9wKCktPmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UEVSQ0VOVEFHRSksIFBlcmNlbnQpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+dG9wKCktPmdldFZh
bHVlSUQoKSAhPSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIGJveC50b3AoKSA9IHNsaWNlcy0+dG9w
KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CisgICAgICAgIGluc2V0
cy50b3AoKSA9IHNsaWNlcy0+dG9wKCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9u
RGF0YSk7CiAKICAgICBpZiAoc2xpY2VzLT5yaWdodCgpLT5pc051bWJlcigpKQotICAgICAgICBi
b3gucmlnaHQoKSA9IExlbmd0aChzbGljZXMtPnJpZ2h0KCktPmdldEludFZhbHVlKCksIFJlbGF0
aXZlKTsKKyAgICAgICAgaW5zZXRzLnJpZ2h0KCkgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgpLT5n
ZXRJbnRWYWx1ZSgpLCBSZWxhdGl2ZSk7CiAgICAgZWxzZSBpZiAoc2xpY2VzLT5yaWdodCgpLT5p
c1BlcmNlbnRhZ2UoKSkKLSAgICAgICAgYm94LnJpZ2h0KCkgPSBMZW5ndGgoc2xpY2VzLT5yaWdo
dCgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQ
ZXJjZW50KTsKKyAgICAgICAgaW5zZXRzLnJpZ2h0KCkgPSBMZW5ndGgoc2xpY2VzLT5yaWdodCgp
LT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJj
ZW50KTsKICAgICBlbHNlIGlmIChzbGljZXMtPnJpZ2h0KCktPmdldFZhbHVlSUQoKSAhPSBDU1NW
YWx1ZUF1dG8pCi0gICAgICAgIGJveC5yaWdodCgpID0gc2xpY2VzLT5yaWdodCgpLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICBpbnNldHMucmlnaHQoKSA9
IHNsaWNlcy0+cmlnaHQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsK
IAogICAgIGlmIChzbGljZXMtPmJvdHRvbSgpLT5pc051bWJlcigpKQotICAgICAgICBib3guYm90
dG9tKCkgPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0SW50VmFsdWUoKSwgUmVsYXRpdmUp
OworICAgICAgICBpbnNldHMuYm90dG9tKCkgPSBMZW5ndGgoc2xpY2VzLT5ib3R0b20oKS0+Z2V0
SW50VmFsdWUoKSwgUmVsYXRpdmUpOwogICAgIGVsc2UgaWYgKHNsaWNlcy0+Ym90dG9tKCktPmlz
UGVyY2VudGFnZSgpKQotICAgICAgICBib3guYm90dG9tKCkgPSBMZW5ndGgoc2xpY2VzLT5ib3R0
b20oKS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKSwg
UGVyY2VudCk7CisgICAgICAgIGluc2V0cy5ib3R0b20oKSA9IExlbmd0aChzbGljZXMtPmJvdHRv
bSgpLT5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQ
ZXJjZW50KTsKICAgICBlbHNlIGlmIChzbGljZXMtPmJvdHRvbSgpLT5nZXRWYWx1ZUlEKCkgIT0g
Q1NTVmFsdWVBdXRvKQotICAgICAgICBib3guYm90dG9tKCkgPSBzbGljZXMtPmJvdHRvbSgpLT5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICBpbnNldHMuYm90
dG9tKCkgPSBzbGljZXMtPmJvdHRvbSgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lv
bkRhdGEpOwogCiAgICAgaWYgKHNsaWNlcy0+bGVmdCgpLT5pc051bWJlcigpKQotICAgICAgICBi
b3gubGVmdCgpID0gTGVuZ3RoKHNsaWNlcy0+bGVmdCgpLT5nZXRJbnRWYWx1ZSgpLCBSZWxhdGl2
ZSk7CisgICAgICAgIGluc2V0cy5sZWZ0KCkgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdldElu
dFZhbHVlKCksIFJlbGF0aXZlKTsKICAgICBlbHNlIGlmIChzbGljZXMtPmxlZnQoKS0+aXNQZXJj
ZW50YWdlKCkpCi0gICAgICAgIGJveC5sZWZ0KCkgPSBMZW5ndGgoc2xpY2VzLT5sZWZ0KCktPmdl
dERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSksIFBlcmNlbnQp
OworICAgICAgICBpbnNldHMubGVmdCgpID0gTGVuZ3RoKHNsaWNlcy0+bGVmdCgpLT5nZXREb3Vi
bGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpLCBQZXJjZW50KTsKICAg
ICBlbHNlIGlmIChzbGljZXMtPmxlZnQoKS0+Z2V0VmFsdWVJRCgpICE9IENTU1ZhbHVlQXV0bykK
LSAgICAgICAgYm94LmxlZnQoKSA9IHNsaWNlcy0+bGVmdCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oY29udmVyc2lvbkRhdGEpOworICAgICAgICBpbnNldHMubGVmdCgpID0gc2xpY2VzLT5sZWZ0
KCktPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CiAKLSAgICByZXR1cm4g
Ym94OworICAgIHJldHVybiBpbnNldHM7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwTmlu
ZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUmIHZhbHVlLCBOaW5lUGllY2VJbWFnZSYgaW1hZ2Up
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgJKHJldmlzaW9uIDE4NzU1NikKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAgY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiBjbGFz
cyBOaW5lUGllY2VJbWFnZTsKIAotY2xhc3MgTGVuZ3RoQm94OworY2xhc3MgTGVuZ3RoSW5zZXRz
OwogCiBjbGFzcyBDU1NUb1N0eWxlTWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NU
b1N0eWxlTWFwKTsKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBtYXBOaW5l
UGllY2VJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIE5pbmVQaWVjZUltYWdlJik7CiAg
ICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVNsaWNlKENTU1ZhbHVlJiwgTmluZVBpZWNlSW1hZ2Um
KTsKLSAgICBMZW5ndGhCb3ggbWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJik7CisgICAg
TGVuZ3RoSW5zZXRzIG1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSYpOwogICAgIHZvaWQg
bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUmLCBOaW5lUGllY2VJbWFnZSYpOwogCiBw
cml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAkocmV2
aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MzQsNyArNTM0LDcgQEAgcHVibGljOgogICAgICAgICBOaW5l
UGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCkpKTsKICAgICAg
ICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAg
IGltYWdlLnNldE91dHNldChMZW5ndGhCb3goMCkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0
c2V0KExlbmd0aEluc2V0cygwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBS
ZXBlYXQ6CiAgICAgICAgICAgICBpbWFnZS5zZXRIb3Jpem9udGFsUnVsZShTdHJldGNoSW1hZ2VS
dWxlKTsKQEAgLTU0MiwxMiArNTQyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFNsaWNlOgogICAgICAgICAgICAgLy8gTWFza3MgaGF2ZSBhIGRpZmZlcmVu
dCBpbml0aWFsIHZhbHVlIGZvciBzbGljZXMuIFByZXNlcnZlIHRoZSB2YWx1ZSBvZiAwIGZvciBi
YWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgICAgIGltYWdlLnNldEltYWdlU2xpY2Vz
KHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBMZW5ndGhCb3goTGVuZ3RoKDEwMCwgUGVyY2VudCksIExl
bmd0aCgxMDAsIFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQZXJjZW50KSwgTGVuZ3RoKDEwMCwgUGVy
Y2VudCkpIDogTGVuZ3RoQm94KCkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0SW1hZ2VTbGljZXMo
dHlwZSA9PSBCb3JkZXJJbWFnZSA/IExlbmd0aEluc2V0cyhMZW5ndGgoMTAwLCBQZXJjZW50KSwg
TGVuZ3RoKDEwMCwgUGVyY2VudCksIExlbmd0aCgxMDAsIFBlcmNlbnQpLCBMZW5ndGgoMTAwLCBQ
ZXJjZW50KSkgOiBMZW5ndGhJbnNldHMoKSk7CiAgICAgICAgICAgICBpbWFnZS5zZXRGaWxsKGZh
bHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgogICAgICAgICAg
ICAgLy8gTWFza3MgaGF2ZSBhIGRpZmZlcmVudCBpbml0aWFsIHZhbHVlIGZvciB3aWR0aHMuIFRo
ZXkgdXNlIGFuICdhdXRvJyB2YWx1ZSByYXRoZXIgdGhhbiB0cnlpbmcgdG8gZml0IHRvIHRoZSBi
b3JkZXIuCi0gICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXModHlwZSA9PSBCb3JkZXJJ
bWFnZSA/IExlbmd0aEJveChMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUp
LCBMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpKSA6IExlbmd0aEJveCgp
KTsKKyAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyh0eXBlID09IEJvcmRlckltYWdl
ID8gTGVuZ3RoSW5zZXRzKExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSks
IExlbmd0aCgxLCBSZWxhdGl2ZSksIExlbmd0aCgxLCBSZWxhdGl2ZSkpIDogTGVuZ3RoSW5zZXRz
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci5zdHlsZSgpLCBpbWFnZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNywxMyArMTA3LDEzIEBAIHN0YXRpYyB2b2lkIGJ1aWxkUmVuZGVyZXJIaWdobGlnaHQoUmVu
ZGUKICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSkgewogICAgICAgICAgICAg
YXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpOwogCi0gICAg
ICAgICAgICBMYXlvdXRCb3hFeHRlbnQgbWFyZ2lucyhyZW5kZXJCb3gubWFyZ2luVG9wKCksIHJl
bmRlckJveC5tYXJnaW5SaWdodCgpLCByZW5kZXJCb3gubWFyZ2luQm90dG9tKCksIHJlbmRlckJv
eC5tYXJnaW5MZWZ0KCkpOworICAgICAgICAgICAgTGF5b3V0SW5zZXRzIG1hcmdpbnMocmVuZGVy
Qm94Lm1hcmdpblRvcCgpLCByZW5kZXJCb3gubWFyZ2luUmlnaHQoKSwgcmVuZGVyQm94Lm1hcmdp
bkJvdHRvbSgpLCByZW5kZXJCb3gubWFyZ2luTGVmdCgpKTsKIAogICAgICAgICAgICAgaWYgKCFy
ZW5kZXJCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgcmVnaW9uKSB7CiAgICAgICAgICAg
ICAgICAgUmVuZGVyQm94OjpMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMgY29tcHV0ZWRWYWx1
ZXM7CiAgICAgICAgICAgICAgICAgcmVuZGVyQm94LmNvbXB1dGVMb2dpY2FsV2lkdGhJblJlZ2lv
bihjb21wdXRlZFZhbHVlcywgcmVnaW9uKTsKLSAgICAgICAgICAgICAgICBtYXJnaW5zLnN0YXJ0
KHJlbmRlckJveC5zdHlsZSgpLndyaXRpbmdNb2RlKCkpID0gY29tcHV0ZWRWYWx1ZXMubV9tYXJn
aW5zLm1fc3RhcnQ7Ci0gICAgICAgICAgICAgICAgbWFyZ2lucy5lbmQocmVuZGVyQm94LnN0eWxl
KCkud3JpdGluZ01vZGUoKSkgPSBjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9lbmQ7CisgICAg
ICAgICAgICAgICAgbWFyZ2lucy5zZXRTdGFydChjb21wdXRlZFZhbHVlcy5tX21hcmdpbnMubV9z
dGFydCwgcmVuZGVyQm94LnN0eWxlKCkud3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICAgICAg
bWFyZ2lucy5zZXRFbmQoY29tcHV0ZWRWYWx1ZXMubV9tYXJnaW5zLm1fZW5kLCByZW5kZXJCb3gu
c3R5bGUoKS53cml0aW5nTW9kZSgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcGFk
ZGluZ0JveCA9IHJlbmRlckJveC5jbGllbnRCb3hSZWN0SW5SZWdpb24ocmVnaW9uKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFu
aW1hdGlvbi5jcHAJKHJldmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDkg
KzI0Miw5IEBAIHN0YXRpYyBpbmxpbmUgRVZpc2liaWxpdHkgYmxlbmRGdW5jKGNvbnMKICAgICBy
ZXR1cm4gcmVzdWx0ID4gMC4gPyBWSVNJQkxFIDogKHRvICE9IFZJU0lCTEUgPyB0byA6IGZyb20p
OwogfQogCi1zdGF0aWMgaW5saW5lIExlbmd0aEJveCBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9u
QmFzZSogYW5pbSwgY29uc3QgTGVuZ3RoQm94JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIExlbmd0aEluc2V0cyBibGVuZEZ1bmMoY29u
c3QgQW5pbWF0aW9uQmFzZSogYW5pbSwgY29uc3QgTGVuZ3RoSW5zZXRzJiBmcm9tLCBjb25zdCBM
ZW5ndGhJbnNldHMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7Ci0gICAgTGVuZ3RoQm94IHJlc3Vs
dChibGVuZEZ1bmMoYW5pbSwgZnJvbS50b3AoKSwgdG8udG9wKCksIHByb2dyZXNzKSwKKyAgICBM
ZW5ndGhJbnNldHMgcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgpLCB0by50b3AoKSwg
cHJvZ3Jlc3MpLAogICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ucmln
aHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgICAgICAgICAgYmxlbmRG
dW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVzcyksCiAgICAgICAg
ICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRvLmxlZnQoKSwgcHJv
Z3Jlc3MpKTsKQEAgLTEyMDMsOSArMTIwMyw5IEBAIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBl
ck1hcDo6Q1NTUHJvcGUKICAgICAgICAgbmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlXZWJraXRNYXNrSW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0ltYWdlLCAmUmVuZGVy
U3R5bGU6OnNldE1hc2tJbWFnZSksCiAKICAgICAgICAgbmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpib3JkZXJJ
bWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVNvdXJjZSksCi0gICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlU2xpY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTbGljZXMsICZSZW5kZXJTdHlsZTo6
c2V0Qm9yZGVySW1hZ2VTbGljZXMpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
PExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJv
cmRlckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCi0gICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRl
ckltYWdlT3V0c2V0LCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlT3V0c2V0LCAmUmVuZGVyU3R5
bGU6OnNldEJvcmRlckltYWdlT3V0c2V0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3Jh
cHBlcjxMZW5ndGhJbnNldHM+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwgJlJlbmRlclN0
eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVNsaWNl
cyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoSW5zZXRzPihDU1NQ
cm9wZXJ0eUJvcmRlckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VXaWR0aCwg
JlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcjxMZW5ndGhJbnNldHM+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VPdXRzZXQs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
SW1hZ2VPdXRzZXQpLAogCiAgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6Om1hc2tCb3hJ
bWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2VTb3VyY2UpLAogICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IE5pbmVQaWVjZUltYWdlJj4oQ1NTUHJvcGVydHlX
ZWJraXRNYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0JveEltYWdlLCAmUmVuZGVyU3R5
bGU6OnNldE1hc2tCb3hJbWFnZSksCkBAIC0xMjU4LDcgKzEyNTgsNyBAQCBDU1NQcm9wZXJ0eUFu
aW1hdGlvbldyYXBwZXJNYXA6OkNTU1Byb3BlCiAgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
RVZpc2liaWxpdHk+KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjp2aXNpYmls
aXR5LCAmUmVuZGVyU3R5bGU6OnNldFZpc2liaWxpdHkpLAogICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVpvb20sICZSZW5kZXJTdHlsZTo6em9vbSwgJlJlbmRl
clN0eWxlOjpzZXRab29tV2l0aG91dFJldHVyblZhbHVlKSwKIAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlDbGlwLCAmUmVuZGVyU3R5bGU6
OmNsaXAsICZSZW5kZXJTdHlsZTo6c2V0Q2xpcCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXI8TGVuZ3RoSW5zZXRzPihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xp
cCwgJlJlbmRlclN0eWxlOjpzZXRDbGlwKSwKIAogICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
QWNjZWxlcmF0ZWRPcGFjaXR5KCksCiAgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVy
YXRlZFRyYW5zZm9ybSgpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW5zZXRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW5zZXRzLmgJKHJldmlzaW9u
IDE4NzUxMSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94Lmg6MTg3NTEx
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSW5zZXRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNTggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCisgICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICBDb3B5cmlnaHQgKGMpIDIwMTIsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMZW5ndGhCb3hfaAorI2RlZmlu
ZSBMZW5ndGhCb3hfaAorCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisjaW5jbHVkZSAiV3JpdGluZ01v
ZGUuaCIKKyNpbmNsdWRlIDxhcnJheT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjbGFzcyBCb3hFeHRlbnQgeworcHVibGljOgorICAgIEJveEV4dGVudCgp
CisgICAgICAgIDogbV9zaWRlcyh7eyBUKDApLCBUKDApLCBUKDApLCBUKDApIH19KQorICAgIHsK
KyAgICB9CisKKyAgICBCb3hFeHRlbnQoY29uc3QgVCYgdG9wLCBjb25zdCBUJiByaWdodCwgY29u
c3QgVCYgYm90dG9tLCBjb25zdCBUJiBsZWZ0KQorICAgICAgICA6IG1fc2lkZXMoe3sgdG9wLCBy
aWdodCwgYm90dG9tLCBsZWZ0IH19KQorICAgIHsKKyAgICB9CisKKyAgICBUJiBhdChQaHlzaWNh
bEJveFNpZGUgc2lkZSkgeyByZXR1cm4gbV9zaWRlc1tzaWRlXTsgfQorICAgIFQmIHRvcCgpIHsg
cmV0dXJuIGF0KFRvcFNpZGUpOyB9CisgICAgVCYgcmlnaHQoKSB7IHJldHVybiBhdChSaWdodFNp
ZGUpOyB9CisgICAgVCYgYm90dG9tKCkgeyByZXR1cm4gYXQoQm90dG9tU2lkZSk7IH0KKyAgICBU
JiBsZWZ0KCkgeyByZXR1cm4gYXQoTGVmdFNpZGUpOyB9CisKKyAgICBjb25zdCBUJiBhdChQaHlz
aWNhbEJveFNpZGUgc2lkZSkgY29uc3QgeyByZXR1cm4gbV9zaWRlc1tzaWRlXTsgfQorICAgIGNv
bnN0IFQmIHRvcCgpIGNvbnN0IHsgcmV0dXJuIGF0KFRvcFNpZGUpOyB9CisgICAgY29uc3QgVCYg
cmlnaHQoKSBjb25zdCB7IHJldHVybiBhdChSaWdodFNpZGUpOyB9CisgICAgY29uc3QgVCYgYm90
dG9tKCkgY29uc3QgeyByZXR1cm4gYXQoQm90dG9tU2lkZSk7IH0KKyAgICBjb25zdCBUJiBsZWZ0
KCkgY29uc3QgeyByZXR1cm4gYXQoTGVmdFNpZGUpOyB9CisKKyAgICB2b2lkIHNldEF0KFBoeXNp
Y2FsQm94U2lkZSBzaWRlLCBjb25zdCBUJiB2KSB7IGF0KHNpZGUpID0gdjsgfQorICAgIHZvaWQg
c2V0VG9wKGNvbnN0IFQmIHRvcCkgeyBzZXRBdChUb3BTaWRlLCB0b3ApOyB9CisgICAgdm9pZCBz
ZXRSaWdodChjb25zdCBUJiByaWdodCkgeyBzZXRBdChSaWdodFNpZGUsIHJpZ2h0KTsgfQorICAg
IHZvaWQgc2V0Qm90dG9tKGNvbnN0IFQmIGJvdHRvbSkgeyBzZXRBdChCb3R0b21TaWRlLCBib3R0
b20pOyB9CisgICAgdm9pZCBzZXRMZWZ0KGNvbnN0IFQmIGxlZnQpIHsgc2V0QXQoTGVmdFNpZGUs
IGxlZnQpOyB9CisKKyAgICBUJiBiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpCisgICAg
eworICAgICAgICByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5n
TW9kZSwgQmVmb3JlU2lkZSkpOworICAgIH0KKworICAgIFQmIGFmdGVyKFdyaXRpbmdNb2RlIHdy
aXRpbmdNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlz
aWNhbFNpZGUod3JpdGluZ01vZGUsIEFmdGVyU2lkZSkpOworICAgIH0KKworICAgIFQmIHN0YXJ0
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikK
KyAgICB7CisgICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1h
a2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgU3RhcnRTaWRlKSk7CisgICAgfQor
CisgICAgVCYgZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiA9IExUUikKKyAgICB7CisgICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5
c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgRW5kU2lkZSkp
OworICAgIH0KKworICAgIGNvbnN0IFQmIGJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxT
aWRlKHdyaXRpbmdNb2RlLCBCZWZvcmVTaWRlKSk7CisgICAgfQorCisgICAgY29uc3QgVCYgYWZ0
ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
YXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgQWZ0ZXJTaWRlKSk7
CisgICAgfQorCisgICAgY29uc3QgVCYgc3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2Rl
LCBkaXJlY3Rpb24pLCBTdGFydFNpZGUpKTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBlbmQoV3Jp
dGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUo
bWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBFbmRTaWRlKSk7CisgICAgfQor
CisgICAgdm9pZCBzZXRCZWZvcmUoY29uc3QgVCYgYmVmb3JlLCBXcml0aW5nTW9kZSB3cml0aW5n
TW9kZSkgeyB0aGlzLT5iZWZvcmUod3JpdGluZ01vZGUpID0gYmVmb3JlOyB9CisgICAgdm9pZCBz
ZXRBZnRlcihjb25zdCBUJiBhZnRlciwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgdGhpcy0+
YWZ0ZXIod3JpdGluZ01vZGUpID0gYWZ0ZXI7IH0KKyAgICB2b2lkIHNldFN0YXJ0KGNvbnN0IFQm
IHN0YXJ0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24g
PSBMVFIpIHsgdGhpcy0+c3RhcnQod3JpdGluZ01vZGUsIGRpcmVjdGlvbikgPSBzdGFydDsgfQor
ICAgIHZvaWQgc2V0RW5kKGNvbnN0IFQmIGVuZCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRl
eHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSB7IHRoaXMtPmVuZCh3cml0aW5nTW9kZSwgZGly
ZWN0aW9uKSA9IGVuZDsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJveEV4dGVudCYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zaWRlcyA9PSBvdGhlci5tX3Np
ZGVzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCb3hFeHRlbnQmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2lkZXMgIT0gb3RoZXIubV9zaWRlczsK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGQ6OmFycmF5PFQsIDQ+IG1fc2lkZXM7Cit9Owor
CitjbGFzcyBMZW5ndGhCb3ggOiBwdWJsaWMgQm94RXh0ZW50PExlbmd0aD4geworcHVibGljOgor
ICAgIExlbmd0aEJveCgpCisgICAgICAgIDogTGVuZ3RoQm94KEF1dG8pCisgICAgeworICAgIH0K
KworICAgIGV4cGxpY2l0IExlbmd0aEJveChMZW5ndGhUeXBlIHR5cGUpCisgICAgICAgIDogQm94
RXh0ZW50KExlbmd0aCh0eXBlKSwgTGVuZ3RoKHR5cGUpLCBMZW5ndGgodHlwZSksIExlbmd0aCh0
eXBlKSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgTGVuZ3RoQm94KGludCB2KQorICAg
ICAgICA6IEJveEV4dGVudChMZW5ndGgodiwgRml4ZWQpLCBMZW5ndGgodiwgRml4ZWQpLCBMZW5n
dGgodiwgRml4ZWQpLCBMZW5ndGgodiwgRml4ZWQpKQorICAgIHsKKyAgICB9CisKKyAgICBMZW5n
dGhCb3goaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tLCBpbnQgbGVmdCkKKyAgICAgICAg
OiBCb3hFeHRlbnQoTGVuZ3RoKHRvcCwgRml4ZWQpLCBMZW5ndGgocmlnaHQsIEZpeGVkKSwgTGVu
Z3RoKGJvdHRvbSwgRml4ZWQpLCBMZW5ndGgobGVmdCwgRml4ZWQpKQorICAgIHsKKyAgICB9CisK
KyAgICBMZW5ndGhCb3goY29uc3QgTGVuZ3RoJiB0b3AsIGNvbnN0IExlbmd0aCYgcmlnaHQsIGNv
bnN0IExlbmd0aCYgYm90dG9tLCBjb25zdCBMZW5ndGgmIGxlZnQpCisgICAgICAgIDogQm94RXh0
ZW50KHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBp
c1plcm8oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRvcCgpLmlzWmVybygpICYmIHJp
Z2h0KCkuaXNaZXJvKCkgJiYgYm90dG9tKCkuaXNaZXJvKCkgJiYgbGVmdCgpLmlzWmVybygpOwor
ICAgIH0KK307CisKK3R5cGVkZWYgQm94RXh0ZW50PExheW91dFVuaXQ+IExheW91dEJveEV4dGVu
dDsKK3R5cGVkZWYgQm94RXh0ZW50PGZsb2F0PiBGbG9hdEJveEV4dGVudDsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gTGVuZ3RoQm94X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0luc2V0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0luc2V0cy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9J
bnNldHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTksOCArMTksOCBAQAogICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgogKi8KIAotI2lmbmRlZiBMZW5ndGhCb3hfaAotI2RlZmluZSBMZW5n
dGhCb3hfaAorI2lmbmRlZiBJbnNldHNfaAorI2RlZmluZSBJbnNldHNfaAogCiAjaW5jbHVkZSAi
TGVuZ3RoLmgiCiAjaW5jbHVkZSAiV3JpdGluZ01vZGUuaCIKQEAgLTI4LDExOSArMjgsMTAzIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgQm94
RXh0ZW50IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEluc2V0cyB7CiBwdWJsaWM6Ci0g
ICAgQm94RXh0ZW50KCkKKyAgICBJbnNldHMoKQogICAgICAgICA6IG1fc2lkZXMoe3sgVCgwKSwg
VCgwKSwgVCgwKSwgVCgwKSB9fSkKICAgICB7CiAgICAgfQogCi0gICAgQm94RXh0ZW50KGNvbnN0
IFQmIHRvcCwgY29uc3QgVCYgcmlnaHQsIGNvbnN0IFQmIGJvdHRvbSwgY29uc3QgVCYgbGVmdCkK
KyAgICBJbnNldHMoY29uc3QgVCYgdG9wLCBjb25zdCBUJiByaWdodCwgY29uc3QgVCYgYm90dG9t
LCBjb25zdCBUJiBsZWZ0KQogICAgICAgICA6IG1fc2lkZXMoe3sgdG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0IH19KQogICAgIHsKICAgICB9CiAKK3Byb3RlY3RlZDoKICAgICBUJiBhdChQaHlzaWNh
bEJveFNpZGUgc2lkZSkgeyByZXR1cm4gbV9zaWRlc1tzaWRlXTsgfQotICAgIFQmIHRvcCgpIHsg
cmV0dXJuIGF0KFRvcFNpZGUpOyB9Ci0gICAgVCYgcmlnaHQoKSB7IHJldHVybiBhdChSaWdodFNp
ZGUpOyB9Ci0gICAgVCYgYm90dG9tKCkgeyByZXR1cm4gYXQoQm90dG9tU2lkZSk7IH0KLSAgICBU
JiBsZWZ0KCkgeyByZXR1cm4gYXQoTGVmdFNpZGUpOyB9Ci0KKyAgICBUJiBhdChMb2dpY2FsQm94
U2lkZSBzaWRlLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyByZXR1cm4gYXQobWFwTG9naWNh
bFNpZGVUb1BoeXNpY2FsU2lkZShzaWRlLCB3cml0aW5nTW9kZSkpOyB9CisgICAgVCYgYXQoTG9n
aWNhbEJveFNpZGUgc2lkZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24g
ZGlyZWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlz
aWNhbFNpZGUoc2lkZSwgbWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0QXQoUGh5c2ljYWxCb3hTaWRlIHNpZGUsIGNvbnN0IFQm
IHYpIHsgYXQoc2lkZSkgPSB2OyB9CisgICAgdm9pZCBzZXRBdChMb2dpY2FsQm94U2lkZSBzaWRl
LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgY29uc3QgVCYgdikgeyBhdChzaWRlLCB3cml0aW5n
TW9kZSkgPSB2OyB9CisgICAgdm9pZCBzZXRBdChMb2dpY2FsQm94U2lkZSBzaWRlLCBXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFQmIHYpIHsg
YXQoc2lkZSwgd3JpdGluZ01vZGUsIGRpcmVjdGlvbikgPSB2OyB9CisgICAgCitwdWJsaWM6CiAg
ICAgY29uc3QgVCYgYXQoUGh5c2ljYWxCb3hTaWRlIHNpZGUpIGNvbnN0IHsgcmV0dXJuIG1fc2lk
ZXNbc2lkZV07IH0KKyAgICBjb25zdCBUJiBhdChMb2dpY2FsQm94U2lkZSBzaWRlLCBXcml0aW5n
TW9kZSB3cml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNp
Y2FsU2lkZShzaWRlLCB3cml0aW5nTW9kZSkpOyB9CisgICAgY29uc3QgVCYgYXQoTG9naWNhbEJv
eFNpZGUgc2lkZSwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlz
aWNhbFNpZGUoc2lkZSwgbWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pKSk7Cisg
ICAgfQorCiAgICAgY29uc3QgVCYgdG9wKCkgY29uc3QgeyByZXR1cm4gYXQoVG9wU2lkZSk7IH0K
ICAgICBjb25zdCBUJiByaWdodCgpIGNvbnN0IHsgcmV0dXJuIGF0KFJpZ2h0U2lkZSk7IH0KICAg
ICBjb25zdCBUJiBib3R0b20oKSBjb25zdCB7IHJldHVybiBhdChCb3R0b21TaWRlKTsgfQogICAg
IGNvbnN0IFQmIGxlZnQoKSBjb25zdCB7IHJldHVybiBhdChMZWZ0U2lkZSk7IH0KIAotICAgIHZv
aWQgc2V0QXQoUGh5c2ljYWxCb3hTaWRlIHNpZGUsIGNvbnN0IFQmIHYpIHsgYXQoc2lkZSkgPSB2
OyB9CisgICAgVCYgdG9wKCkgeyByZXR1cm4gYXQoVG9wU2lkZSk7IH0KKyAgICBUJiByaWdodCgp
IHsgcmV0dXJuIGF0KFJpZ2h0U2lkZSk7IH0KKyAgICBUJiBib3R0b20oKSB7IHJldHVybiBhdChC
b3R0b21TaWRlKTsgfQorICAgIFQmIGxlZnQoKSB7IHJldHVybiBhdChMZWZ0U2lkZSk7IH0KKwog
ICAgIHZvaWQgc2V0VG9wKGNvbnN0IFQmIHRvcCkgeyBzZXRBdChUb3BTaWRlLCB0b3ApOyB9CiAg
ICAgdm9pZCBzZXRSaWdodChjb25zdCBUJiByaWdodCkgeyBzZXRBdChSaWdodFNpZGUsIHJpZ2h0
KTsgfQogICAgIHZvaWQgc2V0Qm90dG9tKGNvbnN0IFQmIGJvdHRvbSkgeyBzZXRBdChCb3R0b21T
aWRlLCBib3R0b20pOyB9CiAgICAgdm9pZCBzZXRMZWZ0KGNvbnN0IFQmIGxlZnQpIHsgc2V0QXQo
TGVmdFNpZGUsIGxlZnQpOyB9CiAKLSAgICBUJiBiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpCi0gICAgewotICAgICAgICByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lk
ZSh3cml0aW5nTW9kZSwgQmVmb3JlU2lkZSkpOwotICAgIH0KKyAgICBjb25zdCBUJiBiZWZvcmUo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGF0KEJlZm9yZVNpZGUsIHdy
aXRpbmdNb2RlKTsgfQorICAgIGNvbnN0IFQmIGFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
KSBjb25zdCB7IHJldHVybiBhdChBZnRlclNpZGUsIHdyaXRpbmdNb2RlKTsgfQorICAgIGNvbnN0
IFQmIHN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biA9IExUUikgY29uc3QgeyByZXR1cm4gYXQoU3RhcnRTaWRlLCB3cml0aW5nTW9kZSwgZGlyZWN0
aW9uKTsgfQorICAgIGNvbnN0IFQmIGVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIpIGNvbnN0IHsgcmV0dXJuIGF0KEVuZFNpZGUsIHdyaXRp
bmdNb2RlLCBkaXJlY3Rpb24pOyB9CisKKyAgICB2b2lkIHNldEJlZm9yZShjb25zdCBUJiBiZWZv
cmUsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IHNldEF0KEJlZm9yZVNpZGUsIHdyaXRpbmdN
b2RlLCBiZWZvcmUpOyB9CisgICAgdm9pZCBzZXRBZnRlcihjb25zdCBUJiBhZnRlciwgV3JpdGlu
Z01vZGUgd3JpdGluZ01vZGUpIHsgc2V0QXQoQWZ0ZXJTaWRlLCB3cml0aW5nTW9kZSwgYWZ0ZXIp
OyB9CisgICAgdm9pZCBzZXRTdGFydChjb25zdCBUJiBzdGFydCwgV3JpdGluZ01vZGUgd3JpdGlu
Z01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSB7IHNldEF0KFN0YXJ0U2lkZSwg
d3JpdGluZ01vZGUsIGRpcmVjdGlvbiwgc3RhcnQpOyB9CisgICAgdm9pZCBzZXRFbmQoY29uc3Qg
VCYgZW5kLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24g
PSBMVFIpIHsgc2V0QXQoRW5kU2lkZSwgd3JpdGluZ01vZGUsIGRpcmVjdGlvbiwgZW5kKTsgfQor
ICAgIAorICAgIFQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBsZWZ0KCkgKyByaWdodCgpOyB9Cisg
ICAgVCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiB0b3AoKSArIGJvdHRvbSgpOyB9CiAKLSAgICBU
JiBhZnRlcihXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKKyAgICB2b2lkIHNjYWxlKGZsb2F0IGZh
Y3RvcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxT
aWRlKHdyaXRpbmdNb2RlLCBBZnRlclNpZGUpKTsKKyAgICAgICAgZm9yIChhdXRvICZzaWRlIDog
bV9zaWRlcykKKyAgICAgICAgICAgIHNpZGUgKj0gZmFjdG9yOwogICAgIH0KIAotICAgIFQmIHN0
YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExU
UikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRl
KG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgU3RhcnRTaWRlKSk7Ci0gICAg
fQotCi0gICAgVCYgZW5kKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiA9IExUUikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRv
UGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgRW5kU2lk
ZSkpOwotICAgIH0KLQotICAgIGNvbnN0IFQmIGJlZm9yZShXcml0aW5nTW9kZSB3cml0aW5nTW9k
ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2lj
YWxTaWRlKHdyaXRpbmdNb2RlLCBCZWZvcmVTaWRlKSk7Ci0gICAgfQotCi0gICAgY29uc3QgVCYg
YWZ0ZXIoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZSh3cml0aW5nTW9kZSwgQWZ0ZXJTaWRl
KSk7Ci0gICAgfQotCi0gICAgY29uc3QgVCYgc3RhcnQoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUs
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUobWFrZVRleHRGbG93KHdyaXRpbmdN
b2RlLCBkaXJlY3Rpb24pLCBTdGFydFNpZGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBUJiBlbmQo
V3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNp
ZGUobWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pLCBFbmRTaWRlKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBzZXRCZWZvcmUoY29uc3QgVCYgYmVmb3JlLCBXcml0aW5nTW9kZSB3cml0
aW5nTW9kZSkgeyB0aGlzLT5iZWZvcmUod3JpdGluZ01vZGUpID0gYmVmb3JlOyB9Ci0gICAgdm9p
ZCBzZXRBZnRlcihjb25zdCBUJiBhZnRlciwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgdGhp
cy0+YWZ0ZXIod3JpdGluZ01vZGUpID0gYWZ0ZXI7IH0KLSAgICB2b2lkIHNldFN0YXJ0KGNvbnN0
IFQmIHN0YXJ0LCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24gPSBMVFIpIHsgdGhpcy0+c3RhcnQod3JpdGluZ01vZGUsIGRpcmVjdGlvbikgPSBzdGFydDsg
fQotICAgIHZvaWQgc2V0RW5kKGNvbnN0IFQmIGVuZCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUs
IFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSKSB7IHRoaXMtPmVuZCh3cml0aW5nTW9kZSwg
ZGlyZWN0aW9uKSA9IGVuZDsgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJveEV4dGVu
dCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zaWRlcyA9PSBvdGhlci5t
X3NpZGVzOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCb3hFeHRlbnQmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2lkZXMgIT0gb3RoZXIubV9zaWRl
czsKLSAgICB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEluc2V0cyYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fc2lkZXMgPT0gb3RoZXIubV9zaWRlczsgfQorICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBJbnNldHMmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3NpZGVzICE9IG90aGVyLm1f
c2lkZXM7IH0KIAogcHJvdGVjdGVkOgogICAgIHN0ZDo6YXJyYXk8VCwgND4gbV9zaWRlczsKIH07
CiAKLWNsYXNzIExlbmd0aEJveCA6IHB1YmxpYyBCb3hFeHRlbnQ8TGVuZ3RoPiB7CitjbGFzcyBM
ZW5ndGhJbnNldHMgOiBwdWJsaWMgSW5zZXRzPExlbmd0aD4gewogcHVibGljOgotICAgIExlbmd0
aEJveCgpCi0gICAgICAgIDogTGVuZ3RoQm94KEF1dG8pCisgICAgTGVuZ3RoSW5zZXRzKCkKKyAg
ICAgICAgOiBMZW5ndGhJbnNldHMoQXV0bykKICAgICB7CiAgICAgfQogCi0gICAgZXhwbGljaXQg
TGVuZ3RoQm94KExlbmd0aFR5cGUgdHlwZSkKLSAgICAgICAgOiBCb3hFeHRlbnQoTGVuZ3RoKHR5
cGUpLCBMZW5ndGgodHlwZSksIExlbmd0aCh0eXBlKSwgTGVuZ3RoKHR5cGUpKQorICAgIGV4cGxp
Y2l0IExlbmd0aEluc2V0cyhMZW5ndGhUeXBlIHR5cGUpCisgICAgICAgIDogSW5zZXRzKExlbmd0
aCh0eXBlKSwgTGVuZ3RoKHR5cGUpLCBMZW5ndGgodHlwZSksIExlbmd0aCh0eXBlKSkKICAgICB7
CiAgICAgfQogCi0gICAgZXhwbGljaXQgTGVuZ3RoQm94KGludCB2KQotICAgICAgICA6IEJveEV4
dGVudChMZW5ndGgodiwgRml4ZWQpLCBMZW5ndGgodiwgRml4ZWQpLCBMZW5ndGgodiwgRml4ZWQp
LCBMZW5ndGgodiwgRml4ZWQpKQorICAgIGV4cGxpY2l0IExlbmd0aEluc2V0cyhpbnQgdikKKyAg
ICAgICAgOiBJbnNldHMoTGVuZ3RoKHYsIEZpeGVkKSwgTGVuZ3RoKHYsIEZpeGVkKSwgTGVuZ3Ro
KHYsIEZpeGVkKSwgTGVuZ3RoKHYsIEZpeGVkKSkKICAgICB7CiAgICAgfQogCi0gICAgTGVuZ3Ro
Qm94KGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSwgaW50IGxlZnQpCi0gICAgICAgIDog
Qm94RXh0ZW50KExlbmd0aCh0b3AsIEZpeGVkKSwgTGVuZ3RoKHJpZ2h0LCBGaXhlZCksIExlbmd0
aChib3R0b20sIEZpeGVkKSwgTGVuZ3RoKGxlZnQsIEZpeGVkKSkKKyAgICBMZW5ndGhJbnNldHMo
aW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tLCBpbnQgbGVmdCkKKyAgICAgICAgOiBJbnNl
dHMoTGVuZ3RoKHRvcCwgRml4ZWQpLCBMZW5ndGgocmlnaHQsIEZpeGVkKSwgTGVuZ3RoKGJvdHRv
bSwgRml4ZWQpLCBMZW5ndGgobGVmdCwgRml4ZWQpKQogICAgIHsKICAgICB9CiAKLSAgICBMZW5n
dGhCb3goY29uc3QgTGVuZ3RoJiB0b3AsIGNvbnN0IExlbmd0aCYgcmlnaHQsIGNvbnN0IExlbmd0
aCYgYm90dG9tLCBjb25zdCBMZW5ndGgmIGxlZnQpCi0gICAgICAgIDogQm94RXh0ZW50KHRvcCwg
cmlnaHQsIGJvdHRvbSwgbGVmdCkKKyAgICBMZW5ndGhJbnNldHMoY29uc3QgTGVuZ3RoJiB0b3As
IGNvbnN0IExlbmd0aCYgcmlnaHQsIGNvbnN0IExlbmd0aCYgYm90dG9tLCBjb25zdCBMZW5ndGgm
IGxlZnQpCisgICAgICAgIDogSW5zZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCkKICAgICB7
CiAgICAgfQogCkBAIC0xNTAsOSArMTM0LDkgQEAgcHVibGljOgogICAgIH0KIH07CiAKLXR5cGVk
ZWYgQm94RXh0ZW50PExheW91dFVuaXQ+IExheW91dEJveEV4dGVudDsKLXR5cGVkZWYgQm94RXh0
ZW50PGZsb2F0PiBGbG9hdEJveEV4dGVudDsKK3R5cGVkZWYgSW5zZXRzPExheW91dFVuaXQ+IExh
eW91dEluc2V0czsKK3R5cGVkZWYgSW5zZXRzPGZsb2F0PiBGbG9hdEluc2V0czsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gTGVuZ3RoQm94X2gKKyNlbmRpZiAvLyBJbnNl
dHNfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoQm94LmgJKHJldmlzaW9uIDE4NzU1
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aEJveC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE1OCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICAgQ29weXJpZ2h0IChjKSAyMDEyLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpZm5kZWYgTGVuZ3RoQm94X2gKLSNk
ZWZpbmUgTGVuZ3RoQm94X2gKLQotI2luY2x1ZGUgIkxlbmd0aC5oIgotI2luY2x1ZGUgIldyaXRp
bmdNb2RlLmgiCi0jaW5jbHVkZSA8YXJyYXk+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgQm94RXh0ZW50IHsKLXB1YmxpYzoKLSAgICBCb3hFeHRl
bnQoKQotICAgICAgICA6IG1fc2lkZXMoe3sgVCgwKSwgVCgwKSwgVCgwKSwgVCgwKSB9fSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgQm94RXh0ZW50KGNvbnN0IFQmIHRvcCwgY29uc3QgVCYgcmlnaHQs
IGNvbnN0IFQmIGJvdHRvbSwgY29uc3QgVCYgbGVmdCkKLSAgICAgICAgOiBtX3NpZGVzKHt7IHRv
cCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9fSkKLSAgICB7Ci0gICAgfQotCi0gICAgVCYgYXQoUGh5
c2ljYWxCb3hTaWRlIHNpZGUpIHsgcmV0dXJuIG1fc2lkZXNbc2lkZV07IH0KLSAgICBUJiB0b3Ao
KSB7IHJldHVybiBhdChUb3BTaWRlKTsgfQotICAgIFQmIHJpZ2h0KCkgeyByZXR1cm4gYXQoUmln
aHRTaWRlKTsgfQotICAgIFQmIGJvdHRvbSgpIHsgcmV0dXJuIGF0KEJvdHRvbVNpZGUpOyB9Ci0g
ICAgVCYgbGVmdCgpIHsgcmV0dXJuIGF0KExlZnRTaWRlKTsgfQotCi0gICAgY29uc3QgVCYgYXQo
UGh5c2ljYWxCb3hTaWRlIHNpZGUpIGNvbnN0IHsgcmV0dXJuIG1fc2lkZXNbc2lkZV07IH0KLSAg
ICBjb25zdCBUJiB0b3AoKSBjb25zdCB7IHJldHVybiBhdChUb3BTaWRlKTsgfQotICAgIGNvbnN0
IFQmIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gYXQoUmlnaHRTaWRlKTsgfQotICAgIGNvbnN0IFQm
IGJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGF0KEJvdHRvbVNpZGUpOyB9Ci0gICAgY29uc3QgVCYg
bGVmdCgpIGNvbnN0IHsgcmV0dXJuIGF0KExlZnRTaWRlKTsgfQotCi0gICAgdm9pZCBzZXRBdChQ
aHlzaWNhbEJveFNpZGUgc2lkZSwgY29uc3QgVCYgdikgeyBhdChzaWRlKSA9IHY7IH0KLSAgICB2
b2lkIHNldFRvcChjb25zdCBUJiB0b3ApIHsgc2V0QXQoVG9wU2lkZSwgdG9wKTsgfQotICAgIHZv
aWQgc2V0UmlnaHQoY29uc3QgVCYgcmlnaHQpIHsgc2V0QXQoUmlnaHRTaWRlLCByaWdodCk7IH0K
LSAgICB2b2lkIHNldEJvdHRvbShjb25zdCBUJiBib3R0b20pIHsgc2V0QXQoQm90dG9tU2lkZSwg
Ym90dG9tKTsgfQotICAgIHZvaWQgc2V0TGVmdChjb25zdCBUJiBsZWZ0KSB7IHNldEF0KExlZnRT
aWRlLCBsZWZ0KTsgfQotCi0gICAgVCYgYmVmb3JlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3Jp
dGluZ01vZGUsIEJlZm9yZVNpZGUpKTsKLSAgICB9Ci0KLSAgICBUJiBhZnRlcihXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRv
UGh5c2ljYWxTaWRlKHdyaXRpbmdNb2RlLCBBZnRlclNpZGUpKTsKLSAgICB9Ci0KLSAgICBUJiBz
dGFydChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBM
VFIpCi0gICAgewotICAgICAgICByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lk
ZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIFN0YXJ0U2lkZSkpOwotICAg
IH0KLQotICAgIFQmIGVuZChXcml0aW5nTW9kZSB3cml0aW5nTW9kZSwgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24gPSBMVFIpCi0gICAgewotICAgICAgICByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVU
b1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUsIGRpcmVjdGlvbiksIEVuZFNp
ZGUpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBUJiBiZWZvcmUoV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXQobWFwTG9naWNhbFNpZGVUb1BoeXNp
Y2FsU2lkZSh3cml0aW5nTW9kZSwgQmVmb3JlU2lkZSkpOwotICAgIH0KLQotICAgIGNvbnN0IFQm
IGFmdGVyKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGF0KG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNhbFNpZGUod3JpdGluZ01vZGUsIEFmdGVyU2lk
ZSkpOwotICAgIH0KLQotICAgIGNvbnN0IFQmIHN0YXJ0KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5n
TW9kZSwgZGlyZWN0aW9uKSwgU3RhcnRTaWRlKSk7Ci0gICAgfQotCi0gICAgY29uc3QgVCYgZW5k
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxT
aWRlKG1ha2VUZXh0Rmxvdyh3cml0aW5nTW9kZSwgZGlyZWN0aW9uKSwgRW5kU2lkZSkpOwotICAg
IH0KLQotICAgIHZvaWQgc2V0QmVmb3JlKGNvbnN0IFQmIGJlZm9yZSwgV3JpdGluZ01vZGUgd3Jp
dGluZ01vZGUpIHsgdGhpcy0+YmVmb3JlKHdyaXRpbmdNb2RlKSA9IGJlZm9yZTsgfQotICAgIHZv
aWQgc2V0QWZ0ZXIoY29uc3QgVCYgYWZ0ZXIsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IHRo
aXMtPmFmdGVyKHdyaXRpbmdNb2RlKSA9IGFmdGVyOyB9Ci0gICAgdm9pZCBzZXRTdGFydChjb25z
dCBUJiBzdGFydCwgV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uID0gTFRSKSB7IHRoaXMtPnN0YXJ0KHdyaXRpbmdNb2RlLCBkaXJlY3Rpb24pID0gc3RhcnQ7
IH0KLSAgICB2b2lkIHNldEVuZChjb25zdCBUJiBlbmQsIFdyaXRpbmdNb2RlIHdyaXRpbmdNb2Rl
LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUikgeyB0aGlzLT5lbmQod3JpdGluZ01vZGUs
IGRpcmVjdGlvbikgPSBlbmQ7IH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3hFeHRl
bnQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2lkZXMgPT0gb3RoZXIu
bV9zaWRlczsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQm94RXh0ZW50JiBv
dGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NpZGVzICE9IG90aGVyLm1fc2lk
ZXM7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RkOjphcnJheTxULCA0PiBtX3NpZGVzOwot
fTsKLQotY2xhc3MgTGVuZ3RoQm94IDogcHVibGljIEJveEV4dGVudDxMZW5ndGg+IHsKLXB1Ymxp
YzoKLSAgICBMZW5ndGhCb3goKQotICAgICAgICA6IExlbmd0aEJveChBdXRvKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBleHBsaWNpdCBMZW5ndGhCb3goTGVuZ3RoVHlwZSB0eXBlKQotICAgICAgICA6
IEJveEV4dGVudChMZW5ndGgodHlwZSksIExlbmd0aCh0eXBlKSwgTGVuZ3RoKHR5cGUpLCBMZW5n
dGgodHlwZSkpCi0gICAgewotICAgIH0KLQotICAgIGV4cGxpY2l0IExlbmd0aEJveChpbnQgdikK
LSAgICAgICAgOiBCb3hFeHRlbnQoTGVuZ3RoKHYsIEZpeGVkKSwgTGVuZ3RoKHYsIEZpeGVkKSwg
TGVuZ3RoKHYsIEZpeGVkKSwgTGVuZ3RoKHYsIEZpeGVkKSkKLSAgICB7Ci0gICAgfQotCi0gICAg
TGVuZ3RoQm94KGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSwgaW50IGxlZnQpCi0gICAg
ICAgIDogQm94RXh0ZW50KExlbmd0aCh0b3AsIEZpeGVkKSwgTGVuZ3RoKHJpZ2h0LCBGaXhlZCks
IExlbmd0aChib3R0b20sIEZpeGVkKSwgTGVuZ3RoKGxlZnQsIEZpeGVkKSkKLSAgICB7Ci0gICAg
fQotCi0gICAgTGVuZ3RoQm94KGNvbnN0IExlbmd0aCYgdG9wLCBjb25zdCBMZW5ndGgmIHJpZ2h0
LCBjb25zdCBMZW5ndGgmIGJvdHRvbSwgY29uc3QgTGVuZ3RoJiBsZWZ0KQotICAgICAgICA6IEJv
eEV4dGVudCh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpCi0gICAgewotICAgIH0KLQotICAgIGJv
b2wgaXNaZXJvKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b3AoKS5pc1plcm8oKSAm
JiByaWdodCgpLmlzWmVybygpICYmIGJvdHRvbSgpLmlzWmVybygpICYmIGxlZnQoKS5pc1plcm8o
KTsKLSAgICB9Ci19OwotCi10eXBlZGVmIEJveEV4dGVudDxMYXlvdXRVbml0PiBMYXlvdXRCb3hF
eHRlbnQ7Ci10eXBlZGVmIEJveEV4dGVudDxmbG9hdD4gRmxvYXRCb3hFeHRlbnQ7Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIExlbmd0aEJveF9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9UaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGhlbWUuY3BwCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9UaGVtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1MZW5ndGhCb3ggVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJv
eCwgZmxvYXQpIGNvbnN0CitMZW5ndGhJbnNldHMgVGhlbWU6OmNvbnRyb2xCb3JkZXIoQ29udHJv
bFBhcnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhJbnNldHMmIHpvb21l
ZEJveCwgZmxvYXQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2Ug
UHVzaEJ1dHRvblBhcnQ6CkBAIC0zOCwyMCArMzgsMjAgQEAgTGVuZ3RoQm94IFRoZW1lOjpjb250
cm9sQm9yZGVyKENvbnRyb2xQYQogICAgICAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKICAgICAg
ICAgY2FzZSBDaGVja2JveFBhcnQ6CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICAg
ICAgcmV0dXJuIExlbmd0aEJveCgwKTsKKyAgICAgICAgICAgIHJldHVybiBMZW5ndGhJbnNldHMo
MCk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gem9vbWVkQm94OwogICAg
IH0KIH0KIAotTGVuZ3RoQm94IFRoZW1lOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0
LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCkg
Y29uc3QKK0xlbmd0aEluc2V0cyBUaGVtZTo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFy
dCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhJbnNldHMmIHpvb21lZEJveCwgZmxv
YXQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgTWVudWxpc3RQ
YXJ0OgogICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKICAgICAgICAgY2FzZSBDaGVj
a2JveFBhcnQ6CiAgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICAgICAgcmV0dXJuIExl
bmd0aEJveCgwKTsKKyAgICAgICAgICAgIHJldHVybiBMZW5ndGhJbnNldHMoMCk7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gem9vbWVkQm94OwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVGhlbWUuaAkocmV2aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogI2luY2x1
ZGUgIkNvbnRyb2xTdGF0ZXMuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJJbnNldHMuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCi0jaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVkZSAiTGVuZ3RoU2l6ZS5oIgogI2lu
Y2x1ZGUgIlRoZW1lVHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtOTMsOCAr
OTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMZW5ndGhTaXplIG1pbmltdW1Db250cm9sU2l6
ZShDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBmbG9hdCAvKnpvb21GYWN0b3IqLykg
Y29uc3QgeyByZXR1cm4gTGVuZ3RoU2l6ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMCwgRml4
ZWQpKTsgfQogICAgIAogICAgIC8vIEFsbG93cyB0aGUgdGhlbWUgdG8gbW9kaWZ5IHRoZSBleGlz
dGluZyBwYWRkaW5nL2JvcmRlci4KLSAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250cm9sUGFkZGlu
ZyhDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21l
ZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Ci0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29u
dHJvbEJvcmRlcihDb250cm9sUGFydCwgY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBMZW5ndGhC
b3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5n
dGhJbnNldHMgY29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgTGVuZ3RoSW5zZXRzJiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Owor
ICAgIHZpcnR1YWwgTGVuZ3RoSW5zZXRzIGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoSW5zZXRzJiB6b29tZWRCb3gsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0OwogICAgIAogICAgIC8vIFdoZXRoZXIgb3Igbm90IHdoaXRlc3BhY2U6IHBy
ZSBzaG91bGQgYmUgZm9yY2VkIG9uIGFsd2F5cy4KICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFJl
cXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9sUGFydCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVmbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNw
cAkocmV2aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRl
clRoZW1lRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM3LDcgKzUzNyw3IEBAIHZvaWQgUmVu
ZGVyVGhlbWVFZmw6OmFwcGx5UGFydERlc2NyaXB0aW8KICAgICBkZXNjLT5tYXguc2V0V2lkdGgo
TGVuZ3RoKDAsIEZpeGVkKSk7CiAgICAgZGVzYy0+bWF4LnNldEhlaWdodChMZW5ndGgoMCwgRml4
ZWQpKTsKIAotICAgIGRlc2MtPnBhZGRpbmcgPSBMZW5ndGhCb3goMCwgMCwgMCwgMCk7CisgICAg
ZGVzYy0+cGFkZGluZyA9IExlbmd0aEluc2V0cygwLCAwLCAwLCAwKTsKIH0KIAogdm9pZCBSZW5k
ZXJUaGVtZUVmbDo6YXBwbHlQYXJ0RGVzY3JpcHRpb24oRXZhc19PYmplY3QqIG9iamVjdCwgVGhl
bWVQYXJ0RGVzYyogZGVzYykKQEAgLTU1Niw3ICs1NTYsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZs
OjphcHBseVBhcnREZXNjcmlwdGlvCiAgICAgZGVzYy0+bWF4LnNldEhlaWdodChMZW5ndGgobWF4
aCwgRml4ZWQpKTsKIAogICAgIGlmICghZWRqZV9vYmplY3RfcGFydF9leGlzdHMob2JqZWN0LCAi
dGV4dF9jb25maW5lbWVudCIpKQotICAgICAgICBkZXNjLT5wYWRkaW5nID0gTGVuZ3RoQm94KDAs
IDAsIDAsIDApOworICAgICAgICBkZXNjLT5wYWRkaW5nID0gTGVuZ3RoSW5zZXRzKDAsIDAsIDAs
IDApOwogICAgIGVsc2UgewogICAgICAgICBFdmFzX0Nvb3JkIHB4LCBweSwgcHcsIHBoOwogICAg
ICAgICBFdmFzX0Nvb3JkIG94ID0gMCwgb3kgPSAwLCBvdyA9IDAsIG9oID0gMDsKQEAgLTU4Nyw3
ICs1ODcsNyBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphcHBseVBhcnREZXNjcmlwdGlvCiAgICAg
ICAgIGwgPSBweCAtIG94OwogICAgICAgICByID0gKG93ICsgb3gpIC0gKHB3ICsgcHgpOwogCi0g
ICAgICAgIGRlc2MtPnBhZGRpbmcgPSBMZW5ndGhCb3godCwgciwgYiwgbCk7CisgICAgICAgIGRl
c2MtPnBhZGRpbmcgPSBMZW5ndGhJbnNldHModCwgciwgYiwgbCk7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuaAkocmV2aXNp
b24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBwcml2YXRlOgogICAgICAgICBG
b3JtVHlwZSB0eXBlOwogICAgICAgICBMZW5ndGhTaXplIG1pbjsKICAgICAgICAgTGVuZ3RoU2l6
ZSBtYXg7Ci0gICAgICAgIExlbmd0aEJveCBwYWRkaW5nOworICAgICAgICBMZW5ndGhJbnNldHMg
cGFkZGluZzsKICAgICB9OwogICAgIHZvaWQgYXBwbHlQYXJ0RGVzY3JpcHRpb25GYWxsYmFjayhz
dHJ1Y3QgVGhlbWVQYXJ0RGVzYyopOwogICAgIHZvaWQgYXBwbHlQYXJ0RGVzY3JpcHRpb24oRXZh
c19PYmplY3QqLCBzdHJ1Y3QgVGhlbWVQYXJ0RGVzYyopOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xheW91dFJlY3QuaAkocmV2aXNpb24gMTg3NTU2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF5b3V0UmVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw5ICszMiw5IEBACiAjZGVmaW5lIExheW91dFJlY3RfaAogCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW5zZXRzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIkxheW91dFBvaW50LmgiCi0jaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC04MywxNyArODMsMTcg
QEAgcHVibGljOgogICAgIHZvaWQgbW92ZShMYXlvdXRVbml0IGR4LCBMYXlvdXRVbml0IGR5KSB7
IG1fbG9jYXRpb24ubW92ZShkeCwgZHkpOyB9IAogCiAgICAgdm9pZCBleHBhbmQoY29uc3QgTGF5
b3V0U2l6ZSYgc2l6ZSkgeyBtX3NpemUgKz0gc2l6ZTsgfQotICAgIHZvaWQgZXhwYW5kKGNvbnN0
IExheW91dEJveEV4dGVudCYgYm94KQorICAgIHZvaWQgZXhwYW5kKGNvbnN0IExheW91dEluc2V0
cyYgaW5zZXRzKQogICAgIHsKLSAgICAgICAgbV9sb2NhdGlvbi5tb3ZlKC1ib3gubGVmdCgpLCAt
Ym94LnRvcCgpKTsKLSAgICAgICAgbV9zaXplLmV4cGFuZChib3gubGVmdCgpICsgYm94LnJpZ2h0
KCksIGJveC50b3AoKSArIGJveC5ib3R0b20oKSk7CisgICAgICAgIG1fbG9jYXRpb24ubW92ZSgt
aW5zZXRzLmxlZnQoKSwgLWluc2V0cy50b3AoKSk7CisgICAgICAgIG1fc2l6ZS5leHBhbmQoaW5z
ZXRzLndpZHRoKCksIGluc2V0cy5oZWlnaHQoKSk7CiAgICAgfQogICAgIHZvaWQgZXhwYW5kKExh
eW91dFVuaXQgZHcsIExheW91dFVuaXQgZGgpIHsgbV9zaXplLmV4cGFuZChkdywgZGgpOyB9CiAg
ICAgdm9pZCBjb250cmFjdChjb25zdCBMYXlvdXRTaXplJiBzaXplKSB7IG1fc2l6ZSAtPSBzaXpl
OyB9Ci0gICAgdm9pZCBjb250cmFjdChjb25zdCBMYXlvdXRCb3hFeHRlbnQmIGJveCkKKyAgICB2
b2lkIGNvbnRyYWN0KGNvbnN0IExheW91dEluc2V0cyYgaW5zZXRzKQogICAgIHsKLSAgICAgICAg
bV9sb2NhdGlvbi5tb3ZlKGJveC5sZWZ0KCksIGJveC50b3AoKSk7Ci0gICAgICAgIG1fc2l6ZS5z
aHJpbmsoYm94LmxlZnQoKSArIGJveC5yaWdodCgpLCBib3gudG9wKCkgKyBib3guYm90dG9tKCkp
OworICAgICAgICBtX2xvY2F0aW9uLm1vdmUoaW5zZXRzLmxlZnQoKSwgaW5zZXRzLnRvcCgpKTsK
KyAgICAgICAgbV9zaXplLnNocmluayhpbnNldHMud2lkdGgoKSwgaW5zZXRzLmhlaWdodCgpKTsK
ICAgICB9CiAgICAgdm9pZCBjb250cmFjdChMYXlvdXRVbml0IGR3LCBMYXlvdXRVbml0IGRoKSB7
IG1fc2l6ZS5leHBhbmQoLWR3LCAtZGgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9UaGVtZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9UaGVtZU1hYy5oCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENv
bnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29udHJvbFBh
cnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0
IHpvb21GYWN0b3IpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRy
b2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoQm94
JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgTGVuZ3RoSW5zZXRzIGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IExlbmd0aEluc2V0cyYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIExlbmd0aEluc2V0cyBjb250cm9sQm9yZGVyKENv
bnRyb2xQYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IExlbmd0aEluc2V0cyYgem9vbWVk
Qm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgYm9v
bCBjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHBhcnQgPT0gUHVzaEJ1dHRvblBhcnQ7IH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQkocmV2aXNpb24gMTg3NTU2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03
NjQsMTkgKzc2NCwxOSBAQCBMZW5ndGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUo
CiAgICAgfQogfQogCi1MZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBh
cnQgcGFydCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVk
Qm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoSW5zZXRzIFRoZW1lTWFjOjpjb250
cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBMZW5ndGhJbnNldHMmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKHBhcnQpIHsKICAgICAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgogICAgICAg
ICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgogICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0gICAg
ICAgICAgICByZXR1cm4gTGVuZ3RoQm94KDAsIHpvb21lZEJveC5yaWdodCgpLnZhbHVlKCksIDAs
IHpvb21lZEJveC5sZWZ0KCkudmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gTGVuZ3RoSW5z
ZXRzKDAsIHpvb21lZEJveC5yaWdodCgpLnZhbHVlKCksIDAsIHpvb21lZEJveC5sZWZ0KCkudmFs
dWUoKSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gVGhlbWU6OmNvbnRy
b2xCb3JkZXIocGFydCwgZm9udCwgem9vbWVkQm94LCB6b29tRmFjdG9yKTsKICAgICB9CiB9CiAK
LUxlbmd0aEJveCBUaGVtZU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29u
c3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6
b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoSW5zZXRzIFRoZW1lTWFjOjpjb250cm9sUGFkZGluZyhD
b250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgTGVuZ3RoSW5z
ZXRzJiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChw
YXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6IHsKQEAgLTc4Niw3ICs3ODYsNyBA
QCBMZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xQYWRkaW5nKENvbnRyCiAgICAgICAgICAgICAv
LyBUaGlzIGFsc28gZ3VhcmFudGVlcyB0aGUgSFRNTCA8YnV0dG9uPiB3aWxsIG1hdGNoIG91ciBy
ZW5kZXJpbmcgYnkgZGVmYXVsdCwgc2luY2Ugd2UncmUgdXNpbmcgYSBjb25zaXN0ZW50CiAgICAg
ICAgICAgICAvLyBwYWRkaW5nLgogICAgICAgICAgICAgY29uc3QgaW50IHBhZGRpbmcgPSA4ICog
em9vbUZhY3RvcjsKLSAgICAgICAgICAgIHJldHVybiBMZW5ndGhCb3goMiwgcGFkZGluZywgMywg
cGFkZGluZyk7CisgICAgICAgICAgICByZXR1cm4gTGVuZ3RoSW5zZXRzKDIsIHBhZGRpbmcsIDMs
IHBhZGRpbmcpOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gVGhlbWU6OmNvbnRyb2xQYWRkaW5nKHBhcnQsIGZvbnQsIHpvb21lZEJveCwgem9vbUZhY3Rv
cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdNb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Xcml0aW5nTW9kZS5oCShy
ZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1dyaXRpbmdN
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw3ICsxNDYsNyBAQCBpbmxpbmUgUGh5c2ljYWxC
b3hTaWRlIHJvdGF0ZVBoeXNpY2FsU2lkCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFBoeXNpY2Fs
Qm94U2lkZT4oKHN0YXRpY19jYXN0PGludD4ocGh5c2ljYWxTaWRlKSArIChob3Jpem9udGFsU2lk
ZSA/IDEgOiAzKSkgJSA0KTsKIH0KIAotaW5saW5lIFBoeXNpY2FsQm94U2lkZSBtYXBMb2dpY2Fs
U2lkZVRvUGh5c2ljYWxTaWRlKFRleHRGbG93IHRleHRmbG93LCBMb2dpY2FsQm94U2lkZSBsb2dp
Y2FsU2lkZSkKK2lubGluZSBQaHlzaWNhbEJveFNpZGUgbWFwTG9naWNhbFNpZGVUb1BoeXNpY2Fs
U2lkZShMb2dpY2FsQm94U2lkZSBsb2dpY2FsU2lkZSwgVGV4dEZsb3cgdGV4dGZsb3cpCiB7CiAg
ICAgUGh5c2ljYWxCb3hTaWRlIHBoeXNpY2FsU2lkZSA9IHN0YXRpY19jYXN0PFBoeXNpY2FsQm94
U2lkZT4obG9naWNhbFNpZGUpOwogICAgIGJvb2wgaG9yaXpvbnRhbFNpZGUgPSBpc0hvcml6b250
YWxQaHlzaWNhbFNpZGUocGh5c2ljYWxTaWRlKTsKQEAgLTE2MCwxMSArMTYwLDExIEBAIGlubGlu
ZSBQaHlzaWNhbEJveFNpZGUgbWFwTG9naWNhbFNpZGVUb1AKICAgICByZXR1cm4gcGh5c2ljYWxT
aWRlOwogfQogCi1pbmxpbmUgUGh5c2ljYWxCb3hTaWRlIG1hcExvZ2ljYWxTaWRlVG9QaHlzaWNh
bFNpZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUsIExvZ2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRl
KQoraW5saW5lIFBoeXNpY2FsQm94U2lkZSBtYXBMb2dpY2FsU2lkZVRvUGh5c2ljYWxTaWRlKExv
Z2ljYWxCb3hTaWRlIGxvZ2ljYWxTaWRlLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKIHsKICAg
ICAvLyBTZXQgdGhlIGRpcmVjdGlvbiBzdWNoIHRoYXQgc2lkZSBpcyBtaXJyb3JlZCBpZiBpc0Zs
aXBwZWRXcml0aW5nTW9kZSgpIGlzIHRydWUKICAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9
IGlzRmxpcHBlZFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKSA/IFJUTCA6IExUUjsKLSAgICByZXR1
cm4gbWFwTG9naWNhbFNpZGVUb1BoeXNpY2FsU2lkZShtYWtlVGV4dEZsb3cod3JpdGluZ01vZGUs
IGRpcmVjdGlvbiksIGxvZ2ljYWxTaWRlKTsKKyAgICByZXR1cm4gbWFwTG9naWNhbFNpZGVUb1Bo
eXNpY2FsU2lkZShsb2dpY2FsU2lkZSwgbWFrZVRleHRGbG93KHdyaXRpbmdNb2RlLCBkaXJlY3Rp
b24pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTg3NTU2KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NDEsNyArODQxLDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkQm9yZGVyT3V0cwog
ICAgIGlmICghbGluZVN0eWxlLmhhc0JvcmRlckltYWdlT3V0c2V0cygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBMYXlvdXRCb3hFeHRlbnQgYm9yZGVyT3V0c2V0cyA9IGxpbmVTdHlsZS5ib3Jk
ZXJJbWFnZU91dHNldHMoKTsKKyAgICBMYXlvdXRJbnNldHMgYm9yZGVyT3V0c2V0cyA9IGxpbmVT
dHlsZS5ib3JkZXJJbWFnZU91dHNldHMoKTsKIAogICAgIExheW91dFVuaXQgYm9yZGVyT3V0c2V0
TG9naWNhbFRvcCA9IGJvcmRlck91dHNldHMuYmVmb3JlKGxpbmVTdHlsZS53cml0aW5nTW9kZSgp
KTsKICAgICBMYXlvdXRVbml0IGJvcmRlck91dHNldExvZ2ljYWxCb3R0b20gPSBib3JkZXJPdXRz
ZXRzLmFmdGVyKGxpbmVTdHlsZS53cml0aW5nTW9kZSgpKTsKQEAgLTEyOTMsNyArMTI5Myw3IEBA
IHN0YXRpYyBMYXlvdXRSZWN0IGNsaXBSZWN0Rm9yTmluZVBpZWNlSW0KIHsKICAgICBMYXlvdXRS
ZWN0IGNsaXBSZWN0KHBhaW50UmVjdCk7CiAgICAgUmVuZGVyU3R5bGUmIHN0eWxlID0gYm94LT5y
ZW5kZXJlcigpLnN0eWxlKCk7Ci0gICAgTGF5b3V0Qm94RXh0ZW50IG91dHNldHMgPSBzdHlsZS5p
bWFnZU91dHNldHMoaW1hZ2UpOworICAgIExheW91dEluc2V0cyBvdXRzZXRzID0gc3R5bGUuaW1h
Z2VPdXRzZXRzKGltYWdlKTsKICAgICBpZiAoYm94LT5pc0hvcml6b250YWwoKSkgewogICAgICAg
ICBjbGlwUmVjdC5zZXRZKHBhaW50UmVjdC55KCkgLSBvdXRzZXRzLnRvcCgpKTsKICAgICAgICAg
Y2xpcFJlY3Quc2V0SGVpZ2h0KHBhaW50UmVjdC5oZWlnaHQoKSArIG91dHNldHMudG9wKCkgKyBv
dXRzZXRzLmJvdHRvbSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwCShyZXZpc2lvbiAxODc1NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBzdHJ1Y3QgU2FtZVNpemVBc1JlbmRlckJveCA6IHB1YmxpYyBSZW5kZXJCb3hNb2RlbE9i
amVjdCB7CiAgICAgdmlydHVhbCB+U2FtZVNpemVBc1JlbmRlckJveCgpIHsgfQogICAgIExheW91
dFJlY3QgZnJhbWVSZWN0OwotICAgIExheW91dEJveEV4dGVudCBtYXJnaW5Cb3g7CisgICAgTGF5
b3V0SW5zZXRzIG1hcmdpbkJveDsKICAgICBMYXlvdXRVbml0IHByZWZlcnJlZExvZ2ljYWxXaWR0
aHNbMl07CiAgICAgdm9pZCogcG9pbnRlcnNbMl07CiB9OwpAQCAtNDQyOSw3ICs0NDI5LDcgQEAg
TGF5b3V0UmVjdCBSZW5kZXJCb3g6OmFwcGx5VmlzdWFsRWZmZWN0TwogCiAgICAgLy8gTm93IGNv
bXB1dGUgYm9yZGVyLWltYWdlLW91dHNldCBvdmVyZmxvdy4KICAgICBpZiAoc3R5bGUoKS5oYXNC
b3JkZXJJbWFnZU91dHNldHMoKSkgewotICAgICAgICBMYXlvdXRCb3hFeHRlbnQgYm9yZGVyT3V0
c2V0cyA9IHN0eWxlKCkuYm9yZGVySW1hZ2VPdXRzZXRzKCk7CisgICAgICAgIExheW91dEluc2V0
cyBib3JkZXJPdXRzZXRzID0gc3R5bGUoKS5ib3JkZXJJbWFnZU91dHNldHMoKTsKICAgICAgICAg
CiAgICAgICAgIC8vIEluIGZsaXBwZWQgYmxvY2tzIHdyaXRpbmcgbW9kZXMsIHRoZSBwaHlzaWNh
bCBzaWRlcyBhcmUgaW52ZXJ0ZWQuIEZvciBleGFtcGxlIGluIHZlcnRpY2FsLXJsLCB0aGUgcmln
aHQKICAgICAgICAgLy8gYm9yZGVyIGlzIGF0IHRoZSBsb3dlciB4IGNvb3JkaW5hdGUgdmFsdWUu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAxODc1NTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTcyOCw3ICs3MjgsNyBAQCBwcml2YXRlOgogICAgIExheW91dFJlY3QgbV9mcmFtZVJlY3Q7
CiAKIHByb3RlY3RlZDoKLSAgICBMYXlvdXRCb3hFeHRlbnQgbV9tYXJnaW5Cb3g7CisgICAgTGF5
b3V0SW5zZXRzIG1fbWFyZ2luQm94OwogCiAgICAgLy8gVGhlIHByZWZlcnJlZCBsb2dpY2FsIHdp
ZHRoIG9mIHRoZSBlbGVtZW50IGlmIGl0IHdlcmUgdG8gYnJlYWsgaXRzIGxpbmVzIGF0IGV2ZXJ5
IHBvc3NpYmxlIG9wcG9ydHVuaXR5LgogICAgIExheW91dFVuaXQgbV9taW5QcmVmZXJyZWRMb2dp
Y2FsV2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Myw3
ICszODMsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb21wdXRlU3RpY2t5CiAKICAg
ICAvLyBTdGlja3kgcG9zaXRpb25lZCBlbGVtZW50IGlnbm9yZSBhbnkgb3ZlcnJpZGUgbG9naWNh
bCB3aWR0aCBvbiB0aGUgY29udGFpbmluZyBibG9jayAoYXMgdGhleSBkb24ndCBjYWxsCiAgICAg
Ly8gY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCkuIEl0J3MgdW5jbGVhciB3
aGV0aGVyIHRoaXMgaXMgdG90YWxseSBmaW5lLgotICAgIExheW91dEJveEV4dGVudCBtaW5NYXJn
aW4obWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubWFyZ2luVG9wKCksIG1heFdpZHRoKSwK
KyAgICBMYXlvdXRJbnNldHMgbWluTWFyZ2luKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZSgp
Lm1hcmdpblRvcCgpLCBtYXhXaWR0aCksCiAgICAgICAgIG1pbmltdW1WYWx1ZUZvckxlbmd0aChz
dHlsZSgpLm1hcmdpblJpZ2h0KCksIG1heFdpZHRoKSwKICAgICAgICAgbWluaW11bVZhbHVlRm9y
TGVuZ3RoKHN0eWxlKCkubWFyZ2luQm90dG9tKCksIG1heFdpZHRoKSwKICAgICAgICAgbWluaW11
bVZhbHVlRm9yTGVuZ3RoKHN0eWxlKCkubWFyZ2luTGVmdCgpLCBtYXhXaWR0aCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTg3
NTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzI2LDcgKzEzMjYsNyBAQCBib29sIFJlbmRlckVsZW1lbnQ6OnJlcGFp
bnRBZnRlckxheW91dElmCiAgICAgLy8gdHdvIHJlY3RhbmdsZXMgKGJ1dCB0eXBpY2FsbHkgb25s
eSBvbmUpLgogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBvdXRsaW5lU3R5bGUgPSBvdXRsaW5lU3R5
bGVGb3JSZXBhaW50KCk7CiAgICAgTGF5b3V0VW5pdCBvdXRsaW5lV2lkdGggPSBvdXRsaW5lU3R5
bGUub3V0bGluZVNpemUoKTsKLSAgICBMYXlvdXRCb3hFeHRlbnQgaW5zZXRTaGFkb3dFeHRlbnQg
PSBzdHlsZSgpLmdldEJveFNoYWRvd0luc2V0RXh0ZW50KCk7CisgICAgTGF5b3V0SW5zZXRzIGlu
c2V0U2hhZG93RXh0ZW50ID0gc3R5bGUoKS5nZXRCb3hTaGFkb3dJbnNldEV4dGVudCgpOwogICAg
IExheW91dFVuaXQgd2lkdGggPSBhYnNvbHV0ZVZhbHVlKG5ld091dGxpbmVCb3gud2lkdGgoKSAt
IG9sZE91dGxpbmVCb3gud2lkdGgoKSk7CiAgICAgaWYgKHdpZHRoKSB7CiAgICAgICAgIExheW91
dFVuaXQgc2hhZG93TGVmdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmNwcAkocmV2aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgUmVu
ZGVyVGhlbWU6OmFkanVzdFN0eWxlKFN0eWxlUmVzb2wKICAgICBjYXNlIERlZmF1bHRCdXR0b25Q
YXJ0OgogICAgIGNhc2UgQnV0dG9uUGFydDogewogICAgICAgICAvLyBCb3JkZXIKLSAgICAgICAg
TGVuZ3RoQm94IGJvcmRlckJveChzdHlsZS5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS5ib3JkZXJS
aWdodFdpZHRoKCksIHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLmJvcmRlckxlZnRX
aWR0aCgpKTsKKyAgICAgICAgTGVuZ3RoSW5zZXRzIGJvcmRlckJveChzdHlsZS5ib3JkZXJUb3BX
aWR0aCgpLCBzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLmJvcmRlckJvdHRvbVdpZHRo
KCksIHN0eWxlLmJvcmRlckxlZnRXaWR0aCgpKTsKICAgICAgICAgYm9yZGVyQm94ID0gbV90aGVt
ZS0+Y29udHJvbEJvcmRlcihwYXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBib3JkZXJCb3gsIHN0
eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlmIChib3JkZXJCb3gudG9wKCkudmFsdWUo
KSAhPSBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpKSB7CiAgICAgICAg
ICAgICBpZiAoYm9yZGVyQm94LnRvcCgpLnZhbHVlKCkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoU3R5bGVSZXNvbAogICAgICAgICB9CiAKICAgICAg
ICAgLy8gUGFkZGluZwotICAgICAgICBMZW5ndGhCb3ggcGFkZGluZ0JveCA9IG1fdGhlbWUtPmNv
bnRyb2xQYWRkaW5nKHBhcnQsIHN0eWxlLmZvbnRDYXNjYWRlKCksIHN0eWxlLnBhZGRpbmdCb3go
KSwgc3R5bGUuZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgTGVuZ3RoSW5zZXRzIHBhZGRpbmdC
b3ggPSBtX3RoZW1lLT5jb250cm9sUGFkZGluZyhwYXJ0LCBzdHlsZS5mb250Q2FzY2FkZSgpLCBz
dHlsZS5wYWRkaW5nQm94KCksIHN0eWxlLmVmZmVjdGl2ZVpvb20oKSk7CiAgICAgICAgIGlmIChw
YWRkaW5nQm94ICE9IHN0eWxlLnBhZGRpbmdCb3goKSkKICAgICAgICAgICAgIHN0eWxlLnNldFBh
ZGRpbmdCb3gocGFkZGluZ0JveCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTM1LDcgKzUzNSw3
IEBAIHN0YXRpYyB2b2lkIGFwcGx5Q29tbW9uQnV0dG9uUGFkZGluZ1RvU3QKICAgICBEb2N1bWVu
dCYgZG9jdW1lbnQgPSBlbGVtZW50LmRvY3VtZW50KCk7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBlbVNpemUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuNSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19FTVMpOwogICAgIGludCBwaXhlbHMgPSBlbVNpemUtPmNvbXB1dGVMZW5n
dGg8aW50PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgZG9jdW1lbnQucmVuZGVy
U3R5bGUoKSwgZG9jdW1lbnQucmVuZGVyVmlldygpLCBkb2N1bWVudC5mcmFtZSgpLT5wYWdlWm9v
bUZhY3RvcigpKSk7Ci0gICAgc3R5bGUuc2V0UGFkZGluZ0JveChMZW5ndGhCb3goMCwgcGl4ZWxz
LCAwLCBwaXhlbHMpKTsKKyAgICBzdHlsZS5zZXRQYWRkaW5nQm94KExlbmd0aEluc2V0cygwLCBw
aXhlbHMsIDAsIHBpeGVscykpOwogfQogCiBzdGF0aWMgdm9pZCBhZGp1c3RTZWxlY3RMaXN0QnV0
dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50JiBlbGVtZW50KQpAQCAtOTcwLDcg
Kzk3MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OmFkanVzdEJ1dHRvblN0eWxlKFMKICAgICAv
LyBhbmQgdGhlIHJlbmRlciB2aWV3LgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZW1T
aXplID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgxLjAsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfRU1TKTsKICAgICBpbnQgcGl4ZWxzID0gZW1TaXplLT5jb21wdXRlTGVuZ3RoPGludD4oQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmc3R5bGUsIG51bGxwdHIsIG51bGxwdHIsIDEuMCwgZmFs
c2UpKTsKLSAgICBzdHlsZS5zZXRQYWRkaW5nQm94KExlbmd0aEJveCgwLCBwaXhlbHMsIDAsIHBp
eGVscykpOworICAgIHN0eWxlLnNldFBhZGRpbmdCb3goTGVuZ3RoSW5zZXRzKDAsIHBpeGVscywg
MCwgcGl4ZWxzKSk7CiAKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Cb3JkZXJEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaAkocmV2aXNpb24g
MTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtOTMsOSArOTMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X2JvdHRvbS53aWR0aCgpOwogICAgIH0KIAotICAgIEZsb2F0Qm94RXh0ZW50IGJvcmRlcldpZHRo
KCkgY29uc3QKKyAgICBGbG9hdEluc2V0cyBib3JkZXJXaWR0aCgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gRmxvYXRCb3hFeHRlbnQoYm9yZGVyVG9wV2lkdGgoKSwgYm9yZGVyUmlnaHRX
aWR0aCgpLCBib3JkZXJCb3R0b21XaWR0aCgpLCBib3JkZXJMZWZ0V2lkdGgoKSk7CisgICAgICAg
IHJldHVybiBGbG9hdEluc2V0cyhib3JkZXJUb3BXaWR0aCgpLCBib3JkZXJSaWdodFdpZHRoKCks
IGJvcmRlckJvdHRvbVdpZHRoKCksIGJvcmRlckxlZnRXaWR0aCgpKTsKICAgICB9CiAgICAgCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJvcmRlckRhdGEmIG8pIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvTmluZVBpZWNlSW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGllY2VJbWFnZS5jcHAJKHJl
dmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9OaW5lUGll
Y2VJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgTmluZVBpZWNlSW1h
Z2U6Ok5pbmVQaWVjZUltYWdlKCkKIHsKIH0KIAotTmluZVBpZWNlSW1hZ2U6Ok5pbmVQaWVjZUlt
YWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gaW1hZ2UsIExlbmd0aEJveCBpbWFnZVNsaWNlcywg
Ym9vbCBmaWxsLCBMZW5ndGhCb3ggYm9yZGVyU2xpY2VzLCBMZW5ndGhCb3ggb3V0c2V0LCBFTmlu
ZVBpZWNlSW1hZ2VSdWxlIGhvcml6b250YWxSdWxlLCBFTmluZVBpZWNlSW1hZ2VSdWxlIHZlcnRp
Y2FsUnVsZSkKK05pbmVQaWVjZUltYWdlOjpOaW5lUGllY2VJbWFnZShQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IGltYWdlLCBMZW5ndGhJbnNldHMgaW1hZ2VTbGljZXMsIGJvb2wgZmlsbCwgTGVuZ3Ro
SW5zZXRzIGJvcmRlclNsaWNlcywgTGVuZ3RoSW5zZXRzIG91dHNldCwgRU5pbmVQaWVjZUltYWdl
UnVsZSBob3Jpem9udGFsUnVsZSwgRU5pbmVQaWVjZUltYWdlUnVsZSB2ZXJ0aWNhbFJ1bGUpCiAg
ICAgOiBtX2RhdGEoTmluZVBpZWNlSW1hZ2VEYXRhOjpjcmVhdGUoKSkKIHsKICAgICBtX2RhdGEu
YWNjZXNzKCktPmltYWdlID0gaW1hZ2U7CkBAIC02Myw0MiArNjMsMzggQEAgTGF5b3V0VW5pdCBO
aW5lUGllY2VJbWFnZTo6Y29tcHV0ZVNsaWNlKAogICAgIHJldHVybiB2YWx1ZUZvckxlbmd0aChs
ZW5ndGgsIGV4dGVudCk7CiB9CiAKLUxheW91dEJveEV4dGVudCBOaW5lUGllY2VJbWFnZTo6Y29t
cHV0ZVNsaWNlcyhjb25zdCBMYXlvdXRTaXplJiBzaXplLCBjb25zdCBMZW5ndGhCb3gmIGxlbmd0
aHMsIGludCBzY2FsZUZhY3RvcikKK0xheW91dEluc2V0cyBOaW5lUGllY2VJbWFnZTo6Y29tcHV0
ZVNsaWNlcyhjb25zdCBMYXlvdXRTaXplJiBzaXplLCBjb25zdCBMZW5ndGhJbnNldHMmIGxlbmd0
aHMsIGludCBzY2FsZUZhY3RvcikKIHsKICAgICBMYXlvdXRVbml0IHRvcCAgICA9IHN0ZDo6bWlu
PExheW91dFVuaXQ+KHNpemUuaGVpZ2h0KCksIHZhbHVlRm9yTGVuZ3RoKGxlbmd0aHMudG9wKCks
ICAgIHNpemUuaGVpZ2h0KCkpKSAqIHNjYWxlRmFjdG9yOwogICAgIExheW91dFVuaXQgcmlnaHQg
ID0gc3RkOjptaW48TGF5b3V0VW5pdD4oc2l6ZS53aWR0aCgpLCAgdmFsdWVGb3JMZW5ndGgobGVu
Z3Rocy5yaWdodCgpLCAgc2l6ZS53aWR0aCgpKSkgICogc2NhbGVGYWN0b3I7CiAgICAgTGF5b3V0
VW5pdCBib3R0b20gPSBzdGQ6Om1pbjxMYXlvdXRVbml0PihzaXplLmhlaWdodCgpLCB2YWx1ZUZv
ckxlbmd0aChsZW5ndGhzLmJvdHRvbSgpLCBzaXplLmhlaWdodCgpKSkgKiBzY2FsZUZhY3RvcjsK
ICAgICBMYXlvdXRVbml0IGxlZnQgICA9IHN0ZDo6bWluPExheW91dFVuaXQ+KHNpemUud2lkdGgo
KSwgIHZhbHVlRm9yTGVuZ3RoKGxlbmd0aHMubGVmdCgpLCAgIHNpemUud2lkdGgoKSkpICAqIHNj
YWxlRmFjdG9yOwotICAgIHJldHVybiBMYXlvdXRCb3hFeHRlbnQodG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0KTsKKyAgICByZXR1cm4gTGF5b3V0SW5zZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVm
dCk7CiB9CiAKLUxheW91dEJveEV4dGVudCBOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZVNsaWNlcyhj
b25zdCBMYXlvdXRTaXplJiBzaXplLCBjb25zdCBMZW5ndGhCb3gmIGxlbmd0aHMsIGNvbnN0IEZs
b2F0Qm94RXh0ZW50JiB3aWR0aHMsIGNvbnN0IExheW91dEJveEV4dGVudCYgc2xpY2VzKQorTGF5
b3V0SW5zZXRzIE5pbmVQaWVjZUltYWdlOjpjb21wdXRlU2xpY2VzKGNvbnN0IExheW91dFNpemUm
IHNpemUsIGNvbnN0IExlbmd0aEluc2V0cyYgbGVuZ3RocywgY29uc3QgRmxvYXRJbnNldHMmIHdp
ZHRocywgY29uc3QgTGF5b3V0SW5zZXRzJiBzbGljZXMpCiB7CiAgICAgTGF5b3V0VW5pdCB0b3Ag
ICAgPSBjb21wdXRlU2xpY2UobGVuZ3Rocy50b3AoKSwgICAgd2lkdGhzLnRvcCgpLCAgICBzbGlj
ZXMudG9wKCksICAgIHNpemUuaGVpZ2h0KCkpOwogICAgIExheW91dFVuaXQgcmlnaHQgID0gY29t
cHV0ZVNsaWNlKGxlbmd0aHMucmlnaHQoKSwgIHdpZHRocy5yaWdodCgpLCAgc2xpY2VzLnJpZ2h0
KCksICBzaXplLndpZHRoKCkpOwogICAgIExheW91dFVuaXQgYm90dG9tID0gY29tcHV0ZVNsaWNl
KGxlbmd0aHMuYm90dG9tKCksIHdpZHRocy5ib3R0b20oKSwgc2xpY2VzLmJvdHRvbSgpLCBzaXpl
LmhlaWdodCgpKTsKICAgICBMYXlvdXRVbml0IGxlZnQgICA9IGNvbXB1dGVTbGljZShsZW5ndGhz
LmxlZnQoKSwgICB3aWR0aHMubGVmdCgpLCAgIHNsaWNlcy5sZWZ0KCksICAgc2l6ZS53aWR0aCgp
KTsKLSAgICByZXR1cm4gTGF5b3V0Qm94RXh0ZW50KHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7
CisgICAgcmV0dXJuIExheW91dEluc2V0cyh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOwogfQog
Ci12b2lkIE5pbmVQaWVjZUltYWdlOjpzY2FsZVNsaWNlc0lmTmVlZGVkKGNvbnN0IExheW91dFNp
emUmIHNpemUsIExheW91dEJveEV4dGVudCYgc2xpY2VzLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
cikKK3ZvaWQgTmluZVBpZWNlSW1hZ2U6OnNjYWxlU2xpY2VzSWZOZWVkZWQoY29uc3QgTGF5b3V0
U2l6ZSYgc2l6ZSwgTGF5b3V0SW5zZXRzJiBzbGljZXMsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KQogewotICAgIExheW91dFVuaXQgd2lkdGggID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMSAvIGRl
dmljZVNjYWxlRmFjdG9yLCBzbGljZXMubGVmdCgpICsgc2xpY2VzLnJpZ2h0KCkpOwotICAgIExh
eW91dFVuaXQgaGVpZ2h0ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMSAvIGRldmljZVNjYWxlRmFj
dG9yLCBzbGljZXMudG9wKCkgKyBzbGljZXMuYm90dG9tKCkpOworICAgIExheW91dFVuaXQgd2lk
dGggID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMSAvIGRldmljZVNjYWxlRmFjdG9yLCBzbGljZXMu
d2lkdGgoKSk7CisgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBzdGQ6Om1heDxMYXlvdXRVbml0Pigx
IC8gZGV2aWNlU2NhbGVGYWN0b3IsIHNsaWNlcy5oZWlnaHQoKSk7CiAKICAgICBmbG9hdCBzbGlj
ZVNjYWxlRmFjdG9yID0gc3RkOjptaW4oKGZsb2F0KXNpemUud2lkdGgoKSAvIHdpZHRoLCAoZmxv
YXQpc2l6ZS5oZWlnaHQoKSAvIGhlaWdodCk7CiAKICAgICBpZiAoc2xpY2VTY2FsZUZhY3RvciA+
PSAxKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBBbGwgc2xpY2VzIGFyZSByZWR1Y2VkIGJ5
IG11bHRpcGx5aW5nIHRoZW0gYnkgc2xpY2VTY2FsZUZhY3Rvci4KLSAgICBzbGljZXMudG9wKCkg
ICAgKj0gc2xpY2VTY2FsZUZhY3RvcjsKLSAgICBzbGljZXMucmlnaHQoKSAgKj0gc2xpY2VTY2Fs
ZUZhY3RvcjsKLSAgICBzbGljZXMuYm90dG9tKCkgKj0gc2xpY2VTY2FsZUZhY3RvcjsKLSAgICBz
bGljZXMubGVmdCgpICAgKj0gc2xpY2VTY2FsZUZhY3RvcjsKKyAgICBzbGljZXMuc2NhbGUoc2xp
Y2VTY2FsZUZhY3Rvcik7CiB9CiAKLWJvb2wgTmluZVBpZWNlSW1hZ2U6OmlzRW1wdHlQaWVjZVJl
Y3QoSW1hZ2VQaWVjZSBwaWVjZSwgY29uc3QgTGF5b3V0Qm94RXh0ZW50JiBzbGljZXMpCitib29s
IE5pbmVQaWVjZUltYWdlOjppc0VtcHR5UGllY2VSZWN0KEltYWdlUGllY2UgcGllY2UsIGNvbnN0
IExheW91dEluc2V0cyYgc2xpY2VzKQogewogICAgIGlmIChwaWVjZSA9PSBNaWRkbGVQaWVjZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEzLDExICsxMDksMTEgQEAgYm9vbCBOaW5lUGll
Y2VJbWFnZTo6aXNFbXB0eVBpZWNlUmVjdChJbQogICAgIHJldHVybiBkZXN0aW5hdGlvblJlY3Rz
W3BpZWNlXS5pc0VtcHR5KCkgfHwgc291cmNlUmVjdHNbcGllY2VdLmlzRW1wdHkoKTsKIH0KIAot
VmVjdG9yPEZsb2F0UmVjdD4gTmluZVBpZWNlSW1hZ2U6OmNvbXB1dGVJbnRyaW5zaWNSZWN0cyhj
b25zdCBGbG9hdFJlY3QmIG91dGVyLCBjb25zdCBMYXlvdXRCb3hFeHRlbnQmIHNsaWNlcywgZmxv
YXQgZGV2aWNlU2NhbGVGYWN0b3IpCitWZWN0b3I8RmxvYXRSZWN0PiBOaW5lUGllY2VJbWFnZTo6
Y29tcHV0ZUludHJpbnNpY1JlY3RzKGNvbnN0IEZsb2F0UmVjdCYgb3V0ZXIsIGNvbnN0IExheW91
dEluc2V0cyYgc2xpY2VzLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKICAgICBGbG9hdFJl
Y3QgaW5uZXIgPSBvdXRlcjsKICAgICBpbm5lci5tb3ZlKHNsaWNlcy5sZWZ0KCksIHNsaWNlcy50
b3AoKSk7Ci0gICAgaW5uZXIuY29udHJhY3Qoc2xpY2VzLmxlZnQoKSArIHNsaWNlcy5yaWdodCgp
LCBzbGljZXMudG9wKCkgKyBzbGljZXMuYm90dG9tKCkpOworICAgIGlubmVyLmNvbnRyYWN0KHNs
aWNlcy53aWR0aCgpLCBzbGljZXMuaGVpZ2h0KCkpOwogICAgIEFTU0VSVChvdXRlci5jb250YWlu
cyhpbm5lcikpOwogCiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHMoTWF4UGllY2UpOwpAQCAt
MTM3LDcgKzEzMyw3IEBAIFZlY3RvcjxGbG9hdFJlY3Q+IE5pbmVQaWVjZUltYWdlOjpjb21wdXQK
ICAgICByZXR1cm4gcmVjdHM7CiB9CiAKLVZlY3RvcjxGbG9hdFJlY3Q+IE5pbmVQaWVjZUltYWdl
Ojpjb21wdXRlTm9uSW50cmluc2ljUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIGludHJp
bnNpY1JlY3RzLCBjb25zdCBMYXlvdXRCb3hFeHRlbnQmIHNsaWNlcykKK1ZlY3RvcjxGbG9hdFJl
Y3Q+IE5pbmVQaWVjZUltYWdlOjpjb21wdXRlTm9uSW50cmluc2ljUmVjdHMoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIGludHJpbnNpY1JlY3RzLCBjb25zdCBMYXlvdXRJbnNldHMmIHNsaWNlcykK
IHsKICAgICBWZWN0b3I8RmxvYXRSZWN0PiByZWN0cyhNYXhQaWVjZSk7CiAKQEAgLTIxMyw4ICsy
MDksOCBAQCB2b2lkIE5pbmVQaWVjZUltYWdlOjpwYWludChHcmFwaGljc0NvbnRlCiAgICAgU3R5
bGVJbWFnZSogc3R5bGVJbWFnZSA9IGltYWdlKCk7CiAgICAgQVNTRVJUKHN0eWxlSW1hZ2UgJiYg
c3R5bGVJbWFnZS0+aXNMb2FkZWQoKSk7CiAKLSAgICBMYXlvdXRCb3hFeHRlbnQgc291cmNlU2xp
Y2VzID0gY29tcHV0ZVNsaWNlcyhzb3VyY2UsIGltYWdlU2xpY2VzKCksIHN0eWxlSW1hZ2UtPmlt
YWdlU2NhbGVGYWN0b3IoKSk7Ci0gICAgTGF5b3V0Qm94RXh0ZW50IGRlc3RpbmF0aW9uU2xpY2Vz
ID0gY29tcHV0ZVNsaWNlcyhkZXN0aW5hdGlvbi5zaXplKCksIGJvcmRlclNsaWNlcygpLCBzdHls
ZS5ib3JkZXJXaWR0aCgpLCBzb3VyY2VTbGljZXMpOworICAgIExheW91dEluc2V0cyBzb3VyY2VT
bGljZXMgPSBjb21wdXRlU2xpY2VzKHNvdXJjZSwgaW1hZ2VTbGljZXMoKSwgc3R5bGVJbWFnZS0+
aW1hZ2VTY2FsZUZhY3RvcigpKTsKKyAgICBMYXlvdXRJbnNldHMgZGVzdGluYXRpb25TbGljZXMg
PSBjb21wdXRlU2xpY2VzKGRlc3RpbmF0aW9uLnNpemUoKSwgYm9yZGVyU2xpY2VzKCksIHN0eWxl
LmJvcmRlcldpZHRoKCksIHNvdXJjZVNsaWNlcyk7CiAKICAgICBzY2FsZVNsaWNlc0lmTmVlZGVk
KGRlc3RpbmF0aW9uLnNpemUoKSwgZGVzdGluYXRpb25TbGljZXMsIGRldmljZVNjYWxlRmFjdG9y
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVjZUltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL05pbmVQaWVj
ZUltYWdlLmgJKHJldmlzaW9uIDE4NzU1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9OaW5lUGllY2VJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTAgQEAK
ICNkZWZpbmUgTmluZVBpZWNlSW1hZ2VfaAogCiAjaW5jbHVkZSAiRGF0YVJlZi5oIgorI2luY2x1
ZGUgIkluc2V0cy5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJMYXlvdXRT
aXplLmgiCiAjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgotI2luY2x1ZGUgIkxlbmd0aEJveC5oIgog
I2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTEx
NCw5ICsxMTQsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaG9yaXpvbnRhbFJ1bGUgOiAyOyAv
LyBFTmluZVBpZWNlSW1hZ2VSdWxlCiAgICAgdW5zaWduZWQgdmVydGljYWxSdWxlIDogMjsgLy8g
RU5pbmVQaWVjZUltYWdlUnVsZQogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZTsKLSAgICBM
ZW5ndGhCb3ggaW1hZ2VTbGljZXM7Ci0gICAgTGVuZ3RoQm94IGJvcmRlclNsaWNlczsKLSAgICBM
ZW5ndGhCb3ggb3V0c2V0OworICAgIExlbmd0aEluc2V0cyBpbWFnZVNsaWNlczsKKyAgICBMZW5n
dGhJbnNldHMgYm9yZGVyU2xpY2VzOworICAgIExlbmd0aEluc2V0cyBvdXRzZXQ7CiAKIHByaXZh
dGU6CiAgICAgTmluZVBpZWNlSW1hZ2VEYXRhKCk7CkBAIC0xMjYsNyArMTI2LDcgQEAgcHJpdmF0
ZToKIGNsYXNzIE5pbmVQaWVjZUltYWdlIHsKIHB1YmxpYzoKICAgICBOaW5lUGllY2VJbWFnZSgp
OwotICAgIE5pbmVQaWVjZUltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4sIExlbmd0aEJveCBp
bWFnZVNsaWNlcywgYm9vbCBmaWxsLCBMZW5ndGhCb3ggYm9yZGVyU2xpY2VzLCBMZW5ndGhCb3gg
b3V0c2V0LCBFTmluZVBpZWNlSW1hZ2VSdWxlIGhvcml6b250YWxSdWxlLCBFTmluZVBpZWNlSW1h
Z2VSdWxlIHZlcnRpY2FsUnVsZSk7CisgICAgTmluZVBpZWNlSW1hZ2UoUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiwgTGVuZ3RoSW5zZXRzIGltYWdlU2xpY2VzLCBib29sIGZpbGwsIExlbmd0aEluc2V0
cyBib3JkZXJTbGljZXMsIExlbmd0aEluc2V0cyBvdXRzZXQsIEVOaW5lUGllY2VJbWFnZVJ1bGUg
aG9yaXpvbnRhbFJ1bGUsIEVOaW5lUGllY2VJbWFnZVJ1bGUgdmVydGljYWxSdWxlKTsKIAogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBOaW5lUGllY2VJbWFnZSYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YSA9PSBvdGhlci5tX2RhdGE7IH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
TmluZVBpZWNlSW1hZ2UmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2RhdGEgIT0gb3RoZXIubV9k
YXRhOyB9CkBAIC0xMzUsMTcgKzEzNSwxNyBAQCBwdWJsaWM6CiAgICAgU3R5bGVJbWFnZSogaW1h
Z2UoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPmltYWdlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRJ
bWFnZShQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlKSB7IG1fZGF0YS5hY2Nlc3MoKS0+aW1h
Z2UgPSBpbWFnZTsgfQogICAgIAotICAgIGNvbnN0IExlbmd0aEJveCYgaW1hZ2VTbGljZXMoKSBj
b25zdCB7IHJldHVybiBtX2RhdGEtPmltYWdlU2xpY2VzOyB9Ci0gICAgdm9pZCBzZXRJbWFnZVNs
aWNlcyhMZW5ndGhCb3ggc2xpY2VzKSB7IG1fZGF0YS5hY2Nlc3MoKS0+aW1hZ2VTbGljZXMgPSBX
VEY6Om1vdmUoc2xpY2VzKTsgfQorICAgIGNvbnN0IExlbmd0aEluc2V0cyYgaW1hZ2VTbGljZXMo
KSBjb25zdCB7IHJldHVybiBtX2RhdGEtPmltYWdlU2xpY2VzOyB9CisgICAgdm9pZCBzZXRJbWFn
ZVNsaWNlcyhMZW5ndGhJbnNldHMgc2xpY2VzKSB7IG1fZGF0YS5hY2Nlc3MoKS0+aW1hZ2VTbGlj
ZXMgPSBXVEY6Om1vdmUoc2xpY2VzKTsgfQogCiAgICAgYm9vbCBmaWxsKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLT5maWxsOyB9CiAgICAgdm9pZCBzZXRGaWxsKGJvb2wgZmlsbCkgeyBtX2RhdGEu
YWNjZXNzKCktPmZpbGwgPSBmaWxsOyB9CiAKLSAgICBjb25zdCBMZW5ndGhCb3gmIGJvcmRlclNs
aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS0+Ym9yZGVyU2xpY2VzOyB9Ci0gICAgdm9pZCBz
ZXRCb3JkZXJTbGljZXMoTGVuZ3RoQm94IHNsaWNlcykgeyBtX2RhdGEuYWNjZXNzKCktPmJvcmRl
clNsaWNlcyA9IFdURjo6bW92ZShzbGljZXMpOyB9CisgICAgY29uc3QgTGVuZ3RoSW5zZXRzJiBi
b3JkZXJTbGljZXMoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPmJvcmRlclNsaWNlczsgfQorICAg
IHZvaWQgc2V0Qm9yZGVyU2xpY2VzKExlbmd0aEluc2V0cyBzbGljZXMpIHsgbV9kYXRhLmFjY2Vz
cygpLT5ib3JkZXJTbGljZXMgPSBXVEY6Om1vdmUoc2xpY2VzKTsgfQogCi0gICAgY29uc3QgTGVu
Z3RoQm94JiBvdXRzZXQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPm91dHNldDsgfQotICAgIHZv
aWQgc2V0T3V0c2V0KExlbmd0aEJveCBvdXRzZXQpIHsgbV9kYXRhLmFjY2VzcygpLT5vdXRzZXQg
PSBXVEY6Om1vdmUob3V0c2V0KTsgfQorICAgIGNvbnN0IExlbmd0aEluc2V0cyYgb3V0c2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhLT5vdXRzZXQ7IH0KKyAgICB2b2lkIHNldE91dHNldChMZW5n
dGhJbnNldHMgb3V0c2V0KSB7IG1fZGF0YS5hY2Nlc3MoKS0+b3V0c2V0ID0gV1RGOjptb3ZlKG91
dHNldCk7IH0KIAogICAgIEVOaW5lUGllY2VJbWFnZVJ1bGUgaG9yaXpvbnRhbFJ1bGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxFTmluZVBpZWNlSW1hZ2VSdWxlPihtX2RhdGEtPmhvcml6
b250YWxSdWxlKTsgfQogICAgIHZvaWQgc2V0SG9yaXpvbnRhbFJ1bGUoRU5pbmVQaWVjZUltYWdl
UnVsZSBydWxlKSB7IG1fZGF0YS5hY2Nlc3MoKS0+aG9yaXpvbnRhbFJ1bGUgPSBydWxlOyB9CkBA
IC0xNzcsOSArMTc3LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRNYXNrRGVmYXVsdHMoKQog
ICAgIHsKLSAgICAgICAgbV9kYXRhLmFjY2VzcygpLT5pbWFnZVNsaWNlcyA9IExlbmd0aEJveCgw
KTsKKyAgICAgICAgbV9kYXRhLmFjY2VzcygpLT5pbWFnZVNsaWNlcyA9IExlbmd0aEluc2V0cygw
KTsKICAgICAgICAgbV9kYXRhLmFjY2VzcygpLT5maWxsID0gdHJ1ZTsKLSAgICAgICAgbV9kYXRh
LmFjY2VzcygpLT5ib3JkZXJTbGljZXMgPSBMZW5ndGhCb3goKTsKKyAgICAgICAgbV9kYXRhLmFj
Y2VzcygpLT5ib3JkZXJTbGljZXMgPSBMZW5ndGhJbnNldHMoKTsKICAgICB9CiAKICAgICBzdGF0
aWMgTGF5b3V0VW5pdCBjb21wdXRlT3V0c2V0KGNvbnN0IExlbmd0aCYgb3V0c2V0U2lkZSwgTGF5
b3V0VW5pdCBib3JkZXJTaWRlKQpAQCAtMTkwLDE2ICsxOTAsMTYgQEAgcHVibGljOgogICAgIH0K
IAogICAgIHN0YXRpYyBMYXlvdXRVbml0IGNvbXB1dGVTbGljZShMZW5ndGgsIExheW91dFVuaXQg
d2lkdGgsIExheW91dFVuaXQgc2xpY2UsIExheW91dFVuaXQgZXh0ZW50KTsKLSAgICBzdGF0aWMg
TGF5b3V0Qm94RXh0ZW50IGNvbXB1dGVTbGljZXMoY29uc3QgTGF5b3V0U2l6ZSYsIGNvbnN0IExl
bmd0aEJveCYgbGVuZ3RocywgaW50IHNjYWxlRmFjdG9yKTsKLSAgICBzdGF0aWMgTGF5b3V0Qm94
RXh0ZW50IGNvbXB1dGVTbGljZXMoY29uc3QgTGF5b3V0U2l6ZSYsIGNvbnN0IExlbmd0aEJveCYg
bGVuZ3RocywgY29uc3QgRmxvYXRCb3hFeHRlbnQmIHdpZHRocywgY29uc3QgTGF5b3V0Qm94RXh0
ZW50JiBzbGljZXMpOworICAgIHN0YXRpYyBMYXlvdXRJbnNldHMgY29tcHV0ZVNsaWNlcyhjb25z
dCBMYXlvdXRTaXplJiwgY29uc3QgTGVuZ3RoSW5zZXRzJiBsZW5ndGhzLCBpbnQgc2NhbGVGYWN0
b3IpOworICAgIHN0YXRpYyBMYXlvdXRJbnNldHMgY29tcHV0ZVNsaWNlcyhjb25zdCBMYXlvdXRT
aXplJiwgY29uc3QgTGVuZ3RoSW5zZXRzJiBsZW5ndGhzLCBjb25zdCBGbG9hdEluc2V0cyYgd2lk
dGhzLCBjb25zdCBMYXlvdXRJbnNldHMmIHNsaWNlcyk7CiAKLSAgICBzdGF0aWMgYm9vbCBpc0Vt
cHR5UGllY2VSZWN0KEltYWdlUGllY2UsIGNvbnN0IExheW91dEJveEV4dGVudCYgc2xpY2VzKTsK
KyAgICBzdGF0aWMgYm9vbCBpc0VtcHR5UGllY2VSZWN0KEltYWdlUGllY2UsIGNvbnN0IExheW91
dEluc2V0cyYgc2xpY2VzKTsKICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5UGllY2VSZWN0KEltYWdl
UGllY2UsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBkZXN0aW5hdGlvblJlY3RzLCBjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgc291cmNlUmVjdHMpOwogCi0gICAgc3RhdGljIFZlY3RvcjxGbG9h
dFJlY3Q+IGNvbXB1dGVJbnRyaW5zaWNSZWN0cyhjb25zdCBGbG9hdFJlY3QmIG91dGVyLCBjb25z
dCBMYXlvdXRCb3hFeHRlbnQmIHNsaWNlcywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwotICAg
IHN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBjb21wdXRlTm9uSW50cmluc2ljUmVjdHMoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIGludHJpbnNpY1JlY3RzLCBjb25zdCBMYXlvdXRCb3hFeHRlbnQm
IHNsaWNlcyk7CisgICAgc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGNvbXB1dGVJbnRyaW5zaWNS
ZWN0cyhjb25zdCBGbG9hdFJlY3QmIG91dGVyLCBjb25zdCBMYXlvdXRJbnNldHMmIHNsaWNlcywg
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBj
b21wdXRlTm9uSW50cmluc2ljUmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIGludHJpbnNp
Y1JlY3RzLCBjb25zdCBMYXlvdXRJbnNldHMmIHNsaWNlcyk7CiAKLSAgICBzdGF0aWMgdm9pZCBz
Y2FsZVNsaWNlc0lmTmVlZGVkKGNvbnN0IExheW91dFNpemUmLCBMYXlvdXRCb3hFeHRlbnQmIHNs
aWNlcywgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIHN0YXRpYyB2b2lkIHNjYWxlU2xp
Y2VzSWZOZWVkZWQoY29uc3QgTGF5b3V0U2l6ZSYsIExheW91dEluc2V0cyYgc2xpY2VzLCBmbG9h
dCBkZXZpY2VTY2FsZUZhY3Rvcik7CiAKICAgICBzdGF0aWMgRmxvYXRTaXplIGNvbXB1dGVJbnRy
aW5zaWNTaWRlVGlsZVNjYWxlKEltYWdlUGllY2UsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBk
ZXN0aW5hdGlvblJlY3RzLCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgc291cmNlUmVjdHMpOwog
ICAgIHN0YXRpYyBGbG9hdFNpemUgY29tcHV0ZUludHJpbnNpY01pZGRsZVRpbGVTY2FsZShjb25z
dCBWZWN0b3I8RmxvYXRTaXplPiYgc2NhbGVzLCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgZGVz
dGluYXRpb25SZWN0cywgY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHNvdXJjZVJlY3RzLCBFTmlu
ZVBpZWNlSW1hZ2VSdWxlIGhSdWxlLCBFTmluZVBpZWNlSW1hZ2VSdWxlIHZSdWxlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2
aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDcgKzQxOCw3IEBAIGJvb2wgUmVuZGVyU3R5
bGU6OmluaGVyaXRlZERhdGFTaGFyZWQoY28KICAgICAgICAgJiYgcmFyZUluaGVyaXRlZERhdGEu
Z2V0KCkgPT0gb3RoZXItPnJhcmVJbmhlcml0ZWREYXRhLmdldCgpOwogfQogCi1zdGF0aWMgYm9v
bCBwb3NpdGlvbkNoYW5nZUlzTW92ZW1lbnRPbmx5KGNvbnN0IExlbmd0aEJveCYgYSwgY29uc3Qg
TGVuZ3RoQm94JiBiLCBjb25zdCBMZW5ndGgmIHdpZHRoKQorc3RhdGljIGJvb2wgcG9zaXRpb25D
aGFuZ2VJc01vdmVtZW50T25seShjb25zdCBMZW5ndGhJbnNldHMmIGEsIGNvbnN0IExlbmd0aElu
c2V0cyYgYiwgY29uc3QgTGVuZ3RoJiB3aWR0aCkKIHsKICAgICAvLyBJZiBhbnkgdW5pdCB0eXBl
cyBhcmUgZGlmZmVyZW50LCB0aGVuIHdlIGNhbid0IGd1YXJhbnRlZQogICAgIC8vIHRoYXQgdGhp
cyB3YXMganVzdCBhIG1vdmVtZW50LgpAQCAtMTUxNSw3ICsxNTE1LDcgQEAgdm9pZCBSZW5kZXJT
dHlsZTo6Z2V0U2hhZG93RXh0ZW50KGNvbnN0IAogICAgIH0KIH0KIAotTGF5b3V0Qm94RXh0ZW50
IFJlbmRlclN0eWxlOjpnZXRTaGFkb3dJbnNldEV4dGVudChjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3cpIGNvbnN0CitMYXlvdXRJbnNldHMgUmVuZGVyU3R5bGU6OmdldFNoYWRvd0luc2V0RXh0ZW50
KGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IHRvcCA9
IDA7CiAgICAgTGF5b3V0VW5pdCByaWdodCA9IDA7CkBAIC0xNTMzLDcgKzE1MzMsNyBAQCBMYXlv
dXRCb3hFeHRlbnQgUmVuZGVyU3R5bGU6OmdldFNoYWRvd0luCiAgICAgICAgIGxlZnQgPSBzdGQ6
Om1heDxMYXlvdXRVbml0PihsZWZ0LCBzaGFkb3ctPngoKSArIGV4dGVudEFuZFNwcmVhZCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIExheW91dEJveEV4dGVudCh0b3AsIHJpZ2h0LCBib3R0b20sIGxl
ZnQpOworICAgIHJldHVybiBMYXlvdXRJbnNldHModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsK
IH0KIAogdm9pZCBSZW5kZXJTdHlsZTo6Z2V0U2hhZG93SG9yaXpvbnRhbEV4dGVudChjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3csIExheW91dFVuaXQgJmxlZnQsIExheW91dFVuaXQgJnJpZ2h0KSBj
b25zdApAQCAtMTc4OSwxMiArMTc4OSwxMiBAQCBDb2xvciBSZW5kZXJTdHlsZTo6aW5pdGlhbFRh
cEhpZ2hsaWdodENvCiB9CiAjZW5kaWYKIAotTGF5b3V0Qm94RXh0ZW50IFJlbmRlclN0eWxlOjpp
bWFnZU91dHNldHMoY29uc3QgTmluZVBpZWNlSW1hZ2UmIGltYWdlKSBjb25zdAorTGF5b3V0SW5z
ZXRzIFJlbmRlclN0eWxlOjppbWFnZU91dHNldHMoY29uc3QgTmluZVBpZWNlSW1hZ2UmIGltYWdl
KSBjb25zdAogewotICAgIHJldHVybiBMYXlvdXRCb3hFeHRlbnQoTmluZVBpZWNlSW1hZ2U6OmNv
bXB1dGVPdXRzZXQoaW1hZ2Uub3V0c2V0KCkudG9wKCksIGJvcmRlclRvcFdpZHRoKCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTmluZVBpZWNlSW1hZ2U6OmNvbXB1dGVPdXRzZXQoaW1h
Z2Uub3V0c2V0KCkucmlnaHQoKSwgYm9yZGVyUmlnaHRXaWR0aCgpKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5pbmVQaWVjZUltYWdlOjpjb21wdXRlT3V0c2V0KGltYWdlLm91dHNldCgp
LmJvdHRvbSgpLCBib3JkZXJCb3R0b21XaWR0aCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5pbmVQaWVjZUltYWdlOjpjb21wdXRlT3V0c2V0KGltYWdlLm91dHNldCgpLmxlZnQoKSwg
Ym9yZGVyTGVmdFdpZHRoKCkpKTsKKyAgICByZXR1cm4gTGF5b3V0SW5zZXRzKE5pbmVQaWVjZUlt
YWdlOjpjb21wdXRlT3V0c2V0KGltYWdlLm91dHNldCgpLnRvcCgpLCBib3JkZXJUb3BXaWR0aCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5pbmVQaWVjZUltYWdlOjpjb21wdXRlT3V0c2V0
KGltYWdlLm91dHNldCgpLnJpZ2h0KCksIGJvcmRlclJpZ2h0V2lkdGgoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZU91dHNldChpbWFnZS5vdXRzZXQo
KS5ib3R0b20oKSwgYm9yZGVyQm90dG9tV2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBOaW5lUGllY2VJbWFnZTo6Y29tcHV0ZU91dHNldChpbWFnZS5vdXRzZXQoKS5sZWZ0KCksIGJv
cmRlckxlZnRXaWR0aCgpKSk7CiB9CiAKIHZvaWQgUmVuZGVyU3R5bGU6OmdldEZvbnRBbmRHbHlw
aE9yaWVudGF0aW9uKEZvbnRPcmllbnRhdGlvbiYgZm9udE9yaWVudGF0aW9uLCBOb25DSktHbHlw
aE9yaWVudGF0aW9uJiBnbHlwaE9yaWVudGF0aW9uKQpAQCAtMTg0MywyMSArMTg0MywyMSBAQCB2
b2lkIFJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVNvdXJjZShQCiAgICAgc3Vycm91bmQuYWNj
ZXNzKCktPmJvcmRlci5tX2ltYWdlLnNldEltYWdlKGltYWdlKTsKIH0KIAotdm9pZCBSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVySW1hZ2VTbGljZXMoTGVuZ3RoQm94IHNsaWNlcykKK3ZvaWQgUmVuZGVy
U3R5bGU6OnNldEJvcmRlckltYWdlU2xpY2VzKExlbmd0aEluc2V0cyBzbGljZXMpCiB7CiAgICAg
aWYgKHN1cnJvdW5kLT5ib3JkZXIubV9pbWFnZS5pbWFnZVNsaWNlcygpID09IHNsaWNlcykKICAg
ICAgICAgcmV0dXJuOwogICAgIHN1cnJvdW5kLmFjY2VzcygpLT5ib3JkZXIubV9pbWFnZS5zZXRJ
bWFnZVNsaWNlcyhzbGljZXMpOwogfQogCi12b2lkIFJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFn
ZVdpZHRoKExlbmd0aEJveCBzbGljZXMpCit2b2lkIFJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFn
ZVdpZHRoKExlbmd0aEluc2V0cyBzbGljZXMpCiB7CiAgICAgaWYgKHN1cnJvdW5kLT5ib3JkZXIu
bV9pbWFnZS5ib3JkZXJTbGljZXMoKSA9PSBzbGljZXMpCiAgICAgICAgIHJldHVybjsKICAgICBz
dXJyb3VuZC5hY2Nlc3MoKS0+Ym9yZGVyLm1faW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHNsaWNlcyk7
CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlT3V0c2V0KExlbmd0aEJveCBv
dXRzZXQpCit2b2lkIFJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldChMZW5ndGhJbnNl
dHMgb3V0c2V0KQogewogICAgIGlmIChzdXJyb3VuZC0+Ym9yZGVyLm1faW1hZ2Uub3V0c2V0KCkg
PT0gb3V0c2V0KQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDggKzM3LDggQEAKICNpbmNsdWRlICJGb250QmFzZWxpbmUuaCIKICNpbmNsdWRlICJGb250RGVz
Y3JpcHRpb24uaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW5zZXRz
LmgiCiAjaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5jbHVkZSAiTGVuZ3RoQm94LmgiCiAjaW5jbHVk
ZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiTGVuZ3RoU2l6ZS5oIgogI2luY2x1ZGUg
IkxpbmVDbGFtcFZhbHVlLmgiCkBAIC01NTMsMTcgKzU1MywxNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBoYXNCYWNrZ3JvdW5kSW1hZ2UoKTsKICAgICB9CiAgICAgCi0gICAgTGF5b3V0Qm94
RXh0ZW50IGltYWdlT3V0c2V0cyhjb25zdCBOaW5lUGllY2VJbWFnZSYpIGNvbnN0OworICAgIExh
eW91dEluc2V0cyBpbWFnZU91dHNldHMoY29uc3QgTmluZVBpZWNlSW1hZ2UmKSBjb25zdDsKICAg
ICBib29sIGhhc0JvcmRlckltYWdlT3V0c2V0cygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gYm9yZGVySW1hZ2UoKS5oYXNJbWFnZSgpICYmICFib3JkZXJJbWFnZSgpLm91dHNldCgpLmlz
WmVybygpOwogICAgIH0KLSAgICBMYXlvdXRCb3hFeHRlbnQgYm9yZGVySW1hZ2VPdXRzZXRzKCkg
Y29uc3QKKyAgICBMYXlvdXRJbnNldHMgYm9yZGVySW1hZ2VPdXRzZXRzKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBpbWFnZU91dHNldHMoYm9yZGVySW1hZ2UoKSk7CiAgICAgfQogCi0g
ICAgTGF5b3V0Qm94RXh0ZW50IG1hc2tCb3hJbWFnZU91dHNldHMoKSBjb25zdAorICAgIExheW91
dEluc2V0cyBtYXNrQm94SW1hZ2VPdXRzZXRzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBpbWFnZU91dHNldHMobWFza0JveEltYWdlKCkpOwogICAgIH0KQEAgLTYzOCw5ICs2MzgsOSBA
QCBwdWJsaWM6CiAKICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgYm9yZGVySW1hZ2UoKSBjb25z
dCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmltYWdlKCk7IH0KICAgICBTdHlsZUltYWdlKiBi
b3JkZXJJbWFnZVNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuaW1hZ2Uo
KS5pbWFnZSgpOyB9Ci0gICAgY29uc3QgTGVuZ3RoQm94JiBib3JkZXJJbWFnZVNsaWNlcygpIGNv
bnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuaW1hZ2UoKS5pbWFnZVNsaWNlcygpOyB9Ci0g
ICAgY29uc3QgTGVuZ3RoQm94JiBib3JkZXJJbWFnZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3Vy
cm91bmQtPmJvcmRlci5pbWFnZSgpLmJvcmRlclNsaWNlcygpOyB9Ci0gICAgY29uc3QgTGVuZ3Ro
Qm94JiBib3JkZXJJbWFnZU91dHNldCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIu
aW1hZ2UoKS5vdXRzZXQoKTsgfQorICAgIGNvbnN0IExlbmd0aEluc2V0cyYgYm9yZGVySW1hZ2VT
bGljZXMoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmltYWdlKCkuaW1hZ2VTbGlj
ZXMoKTsgfQorICAgIGNvbnN0IExlbmd0aEluc2V0cyYgYm9yZGVySW1hZ2VXaWR0aCgpIGNvbnN0
IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuaW1hZ2UoKS5ib3JkZXJTbGljZXMoKTsgfQorICAg
IGNvbnN0IExlbmd0aEluc2V0cyYgYm9yZGVySW1hZ2VPdXRzZXQoKSBjb25zdCB7IHJldHVybiBz
dXJyb3VuZC0+Ym9yZGVyLmltYWdlKCkub3V0c2V0KCk7IH0KIAogICAgIGNvbnN0IExlbmd0aFNp
emUmIGJvcmRlclRvcExlZnRSYWRpdXMoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVy
LnRvcExlZnQoKTsgfQogICAgIGNvbnN0IExlbmd0aFNpemUmIGJvcmRlclRvcFJpZ2h0UmFkaXVz
KCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci50b3BSaWdodCgpOyB9CkBAIC02NjAs
NyArNjYwLDcgQEAgcHVibGljOgogICAgIGZsb2F0IGJvcmRlckJvdHRvbVdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3JkZXJCb3R0b21XaWR0aCgpOyB9CiAgICAgRUJv
cmRlclN0eWxlIGJvcmRlckJvdHRvbVN0eWxlKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJv
cmRlci5ib3R0b20oKS5zdHlsZSgpOyB9CiAgICAgYm9vbCBib3JkZXJCb3R0b21Jc1RyYW5zcGFy
ZW50KCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3R0b20oKS5pc1RyYW5zcGFy
ZW50KCk7IH0KLSAgICBGbG9hdEJveEV4dGVudCBib3JkZXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJu
IHN1cnJvdW5kLT5ib3JkZXIuYm9yZGVyV2lkdGgoKTsgfQorICAgIEZsb2F0SW5zZXRzIGJvcmRl
cldpZHRoKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3JkZXJXaWR0aCgpOyB9
CiAKICAgICBmbG9hdCBib3JkZXJCZWZvcmVXaWR0aCgpIGNvbnN0OwogICAgIGZsb2F0IGJvcmRl
ckFmdGVyV2lkdGgoKSBjb25zdDsKQEAgLTY4OSw3ICs2ODksNyBAQCBwdWJsaWM6CiAgICAgY29u
c3QgTGVuZ3RoJiBjbGlwUmlnaHQoKSBjb25zdCB7IHJldHVybiB2aXN1YWwtPmNsaXAucmlnaHQo
KTsgfQogICAgIGNvbnN0IExlbmd0aCYgY2xpcFRvcCgpIGNvbnN0IHsgcmV0dXJuIHZpc3VhbC0+
Y2xpcC50b3AoKTsgfQogICAgIGNvbnN0IExlbmd0aCYgY2xpcEJvdHRvbSgpIGNvbnN0IHsgcmV0
dXJuIHZpc3VhbC0+Y2xpcC5ib3R0b20oKTsgfQotICAgIGNvbnN0IExlbmd0aEJveCYgY2xpcCgp
IGNvbnN0IHsgcmV0dXJuIHZpc3VhbC0+Y2xpcDsgfQorICAgIGNvbnN0IExlbmd0aEluc2V0cyYg
Y2xpcCgpIGNvbnN0IHsgcmV0dXJuIHZpc3VhbC0+Y2xpcDsgfQogICAgIGJvb2wgaGFzQ2xpcCgp
IGNvbnN0IHsgcmV0dXJuIHZpc3VhbC0+aGFzQ2xpcDsgfQogCiAgICAgRVVuaWNvZGVCaWRpIHVu
aWNvZGVCaWRpKCkgY29uc3QgeyByZXR1cm4gbm9uaW5oZXJpdGVkX2ZsYWdzLnVuaWNvZGVCaWRp
KCk7IH0KQEAgLTg0OCw3ICs4NDgsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgTGVuZ3RoJiBtYXJn
aW5CZWZvcmVVc2luZyhjb25zdCBSZW5kZXJTdHlsZSogb3RoZXJTdHlsZSkgY29uc3QgeyByZXR1
cm4gc3Vycm91bmQtPm1hcmdpbi5iZWZvcmUob3RoZXJTdHlsZS0+d3JpdGluZ01vZGUoKSk7IH0K
ICAgICBjb25zdCBMZW5ndGgmIG1hcmdpbkFmdGVyVXNpbmcoY29uc3QgUmVuZGVyU3R5bGUqIG90
aGVyU3R5bGUpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5tYXJnaW4uYWZ0ZXIob3RoZXJTdHls
ZS0+d3JpdGluZ01vZGUoKSk7IH0KIAotICAgIGNvbnN0IExlbmd0aEJveCYgcGFkZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5wYWRkaW5nOyB9CisgICAgY29uc3QgTGVuZ3RoSW5z
ZXRzJiBwYWRkaW5nQm94KCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPnBhZGRpbmc7IH0KICAg
ICBjb25zdCBMZW5ndGgmIHBhZGRpbmdUb3AoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+cGFk
ZGluZy50b3AoKTsgfQogICAgIGNvbnN0IExlbmd0aCYgcGFkZGluZ0JvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIHN1cnJvdW5kLT5wYWRkaW5nLmJvdHRvbSgpOyB9CiAgICAgY29uc3QgTGVuZ3RoJiBw
YWRkaW5nTGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5wYWRkaW5nLmxlZnQoKTsgfQpA
QCAtOTY3LDcgKzk2Nyw3IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFNoYWRvd0RhdGEqIGJveFNo
YWRvdygpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2JveFNoYWRvdy5n
ZXQoKTsgfQogICAgIHZvaWQgZ2V0Qm94U2hhZG93RXh0ZW50KExheW91dFVuaXQmIHRvcCwgTGF5
b3V0VW5pdCYgcmlnaHQsIExheW91dFVuaXQmIGJvdHRvbSwgTGF5b3V0VW5pdCYgbGVmdCkgY29u
c3QgeyBnZXRTaGFkb3dFeHRlbnQoYm94U2hhZG93KCksIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVm
dCk7IH0KLSAgICBMYXlvdXRCb3hFeHRlbnQgZ2V0Qm94U2hhZG93SW5zZXRFeHRlbnQoKSBjb25z
dCB7IHJldHVybiBnZXRTaGFkb3dJbnNldEV4dGVudChib3hTaGFkb3coKSk7IH0KKyAgICBMYXlv
dXRJbnNldHMgZ2V0Qm94U2hhZG93SW5zZXRFeHRlbnQoKSBjb25zdCB7IHJldHVybiBnZXRTaGFk
b3dJbnNldEV4dGVudChib3hTaGFkb3coKSk7IH0KICAgICB2b2lkIGdldEJveFNoYWRvd0hvcml6
b250YWxFeHRlbnQoTGF5b3V0VW5pdCYgbGVmdCwgTGF5b3V0VW5pdCYgcmlnaHQpIGNvbnN0IHsg
Z2V0U2hhZG93SG9yaXpvbnRhbEV4dGVudChib3hTaGFkb3coKSwgbGVmdCwgcmlnaHQpOyB9CiAg
ICAgdm9pZCBnZXRCb3hTaGFkb3dWZXJ0aWNhbEV4dGVudChMYXlvdXRVbml0JiB0b3AsIExheW91
dFVuaXQmIGJvdHRvbSkgY29uc3QgeyBnZXRTaGFkb3dWZXJ0aWNhbEV4dGVudChib3hTaGFkb3co
KSwgdG9wLCBib3R0b20pOyB9CiAgICAgdm9pZCBnZXRCb3hTaGFkb3dJbmxpbmVEaXJlY3Rpb25F
eHRlbnQoTGF5b3V0VW5pdCYgbG9naWNhbExlZnQsIExheW91dFVuaXQmIGxvZ2ljYWxSaWdodCkg
Y29uc3QgeyBnZXRTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQoYm94U2hhZG93KCksIGxvZ2lj
YWxMZWZ0LCBsb2dpY2FsUmlnaHQpOyB9CkBAIC0xMjcwLDkgKzEyNzAsOSBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBzZXRCb3JkZXJJbWFnZShjb25zdCBOaW5lUGllY2VJbWFnZSYgYikgeyBT
RVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV9pbWFnZSwgYik7IH0KICAgICB2b2lkIHNldEJvcmRl
ckltYWdlU291cmNlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4pOwotICAgIHZvaWQgc2V0Qm9yZGVy
SW1hZ2VTbGljZXMoTGVuZ3RoQm94KTsKLSAgICB2b2lkIHNldEJvcmRlckltYWdlV2lkdGgoTGVu
Z3RoQm94KTsKLSAgICB2b2lkIHNldEJvcmRlckltYWdlT3V0c2V0KExlbmd0aEJveCk7CisgICAg
dm9pZCBzZXRCb3JkZXJJbWFnZVNsaWNlcyhMZW5ndGhJbnNldHMpOworICAgIHZvaWQgc2V0Qm9y
ZGVySW1hZ2VXaWR0aChMZW5ndGhJbnNldHMpOworICAgIHZvaWQgc2V0Qm9yZGVySW1hZ2VPdXRz
ZXQoTGVuZ3RoSW5zZXRzKTsKIAogICAgIHZvaWQgc2V0Qm9yZGVyVG9wTGVmdFJhZGl1cyhMZW5n
dGhTaXplIHNpemUpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLm1fdG9wTGVmdCwgV1RGOjpt
b3ZlKHNpemUpKTsgfQogICAgIHZvaWQgc2V0Qm9yZGVyVG9wUmlnaHRSYWRpdXMoTGVuZ3RoU2l6
ZSBzaXplKSB7IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5tX3RvcFJpZ2h0LCBXVEY6Om1vdmUo
c2l6ZSkpOyB9CkBAIC0xMzI3LDcgKzEzMjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDbGlw
VG9wKExlbmd0aCBsZW5ndGgpIHsgU0VUX1ZBUih2aXN1YWwsIGNsaXAudG9wKCksIFdURjo6bW92
ZShsZW5ndGgpKTsgfQogICAgIHZvaWQgc2V0Q2xpcEJvdHRvbShMZW5ndGggbGVuZ3RoKSB7IFNF
VF9WQVIodmlzdWFsLCBjbGlwLmJvdHRvbSgpLCBXVEY6Om1vdmUobGVuZ3RoKSk7IH0KICAgICB2
b2lkIHNldENsaXAoTGVuZ3RoIHRvcCwgTGVuZ3RoIHJpZ2h0LCBMZW5ndGggYm90dG9tLCBMZW5n
dGggbGVmdCk7Ci0gICAgdm9pZCBzZXRDbGlwKExlbmd0aEJveCBib3gpIHsgU0VUX1ZBUih2aXN1
YWwsIGNsaXAsIFdURjo6bW92ZShib3gpKTsgfQorICAgIHZvaWQgc2V0Q2xpcChMZW5ndGhJbnNl
dHMgaW5zZXRzKSB7IFNFVF9WQVIodmlzdWFsLCBjbGlwLCBXVEY6Om1vdmUoaW5zZXRzKSk7IH0K
IAogICAgIHZvaWQgc2V0VW5pY29kZUJpZGkoRVVuaWNvZGVCaWRpIGIpIHsgbm9uaW5oZXJpdGVk
X2ZsYWdzLnNldFVuaWNvZGVCaWRpKGIpOyB9CiAKQEAgLTE0MzUsNyArMTQzNSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldExpc3RTdHlsZUltYWdlKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4pOwog
ICAgIHZvaWQgc2V0TGlzdFN0eWxlUG9zaXRpb24oRUxpc3RTdHlsZVBvc2l0aW9uIHYpIHsgaW5o
ZXJpdGVkX2ZsYWdzLl9saXN0X3N0eWxlX3Bvc2l0aW9uID0gdjsgfQogCi0gICAgdm9pZCByZXNl
dE1hcmdpbigpIHsgU0VUX1ZBUihzdXJyb3VuZCwgbWFyZ2luLCBMZW5ndGhCb3goRml4ZWQpKTsg
fQorICAgIHZvaWQgcmVzZXRNYXJnaW4oKSB7IFNFVF9WQVIoc3Vycm91bmQsIG1hcmdpbiwgTGVu
Z3RoSW5zZXRzKEZpeGVkKSk7IH0KICAgICB2b2lkIHNldE1hcmdpblRvcChMZW5ndGggbGVuZ3Ro
KSB7IFNFVF9WQVIoc3Vycm91bmQsIG1hcmdpbi50b3AoKSwgV1RGOjptb3ZlKGxlbmd0aCkpOyB9
CiAgICAgdm9pZCBzZXRNYXJnaW5Cb3R0b20oTGVuZ3RoIGxlbmd0aCkgeyBTRVRfVkFSKHN1cnJv
dW5kLCBtYXJnaW4uYm90dG9tKCksIFdURjo6bW92ZShsZW5ndGgpKTsgfQogICAgIHZvaWQgc2V0
TWFyZ2luTGVmdChMZW5ndGggbGVuZ3RoKSB7IFNFVF9WQVIoc3Vycm91bmQsIG1hcmdpbi5sZWZ0
KCksIFdURjo6bW92ZShsZW5ndGgpKTsgfQpAQCAtMTQ0Myw4ICsxNDQzLDggQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0TWFyZ2luU3RhcnQoTGVuZ3RoKTsKICAgICB2b2lkIHNldE1hcmdpbkVuZChM
ZW5ndGgpOwogCi0gICAgdm9pZCByZXNldFBhZGRpbmcoKSB7IFNFVF9WQVIoc3Vycm91bmQsIHBh
ZGRpbmcsIExlbmd0aEJveChBdXRvKSk7IH0KLSAgICB2b2lkIHNldFBhZGRpbmdCb3goTGVuZ3Ro
Qm94IGJveCkgeyBTRVRfVkFSKHN1cnJvdW5kLCBwYWRkaW5nLCBXVEY6Om1vdmUoYm94KSk7IH0K
KyAgICB2b2lkIHJlc2V0UGFkZGluZygpIHsgU0VUX1ZBUihzdXJyb3VuZCwgcGFkZGluZywgTGVu
Z3RoSW5zZXRzKEF1dG8pKTsgfQorICAgIHZvaWQgc2V0UGFkZGluZ0JveChMZW5ndGhJbnNldHMg
aW5zZXRzKSB7IFNFVF9WQVIoc3Vycm91bmQsIHBhZGRpbmcsIFdURjo6bW92ZShpbnNldHMpKTsg
fQogICAgIHZvaWQgc2V0UGFkZGluZ1RvcChMZW5ndGggbGVuZ3RoKSB7IFNFVF9WQVIoc3Vycm91
bmQsIHBhZGRpbmcudG9wKCksIFdURjo6bW92ZShsZW5ndGgpKTsgfQogICAgIHZvaWQgc2V0UGFk
ZGluZ0JvdHRvbShMZW5ndGggbGVuZ3RoKSB7IFNFVF9WQVIoc3Vycm91bmQsIHBhZGRpbmcuYm90
dG9tKCksIFdURjo6bW92ZShsZW5ndGgpKTsgfQogICAgIHZvaWQgc2V0UGFkZGluZ0xlZnQoTGVu
Z3RoIGxlbmd0aCkgeyBTRVRfVkFSKHN1cnJvdW5kLCBwYWRkaW5nLmxlZnQoKSwgV1RGOjptb3Zl
KGxlbmd0aCkpOyB9CkBAIC0yMTEwLDcgKzIxMTAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBp
bmhlcml0VW5pY29kZUJpZGlGcm9tKGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnQpIHsgbm9uaW5o
ZXJpdGVkX2ZsYWdzLnNldFVuaWNvZGVCaWRpKHBhcmVudC0+bm9uaW5oZXJpdGVkX2ZsYWdzLnVu
aWNvZGVCaWRpKCkpOyB9CiAgICAgdm9pZCBnZXRTaGFkb3dFeHRlbnQoY29uc3QgU2hhZG93RGF0
YSosIExheW91dFVuaXQmIHRvcCwgTGF5b3V0VW5pdCYgcmlnaHQsIExheW91dFVuaXQmIGJvdHRv
bSwgTGF5b3V0VW5pdCYgbGVmdCkgY29uc3Q7Ci0gICAgTGF5b3V0Qm94RXh0ZW50IGdldFNoYWRv
d0luc2V0RXh0ZW50KGNvbnN0IFNoYWRvd0RhdGEqKSBjb25zdDsKKyAgICBMYXlvdXRJbnNldHMg
Z2V0U2hhZG93SW5zZXRFeHRlbnQoY29uc3QgU2hhZG93RGF0YSopIGNvbnN0OwogICAgIHZvaWQg
Z2V0U2hhZG93SG9yaXpvbnRhbEV4dGVudChjb25zdCBTaGFkb3dEYXRhKiwgTGF5b3V0VW5pdCYg
bGVmdCwgTGF5b3V0VW5pdCYgcmlnaHQpIGNvbnN0OwogICAgIHZvaWQgZ2V0U2hhZG93VmVydGlj
YWxFeHRlbnQoY29uc3QgU2hhZG93RGF0YSosIExheW91dFVuaXQmIHRvcCwgTGF5b3V0VW5pdCYg
Ym90dG9tKSBjb25zdDsKICAgICB2b2lkIGdldFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudChj
b25zdCBTaGFkb3dEYXRhKiBzaGFkb3csIExheW91dFVuaXQmIGxvZ2ljYWxMZWZ0LCBMYXlvdXRV
bml0JiBsb2dpY2FsUmlnaHQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVEYXNoYm9hcmRSZWdpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVEYXNoYm9hcmRSZWdpb24uaAkocmV2aXNpb24gMTg3NTU2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlRGFzaGJvYXJkUmVnaW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNkZWZpbmUgU3R5bGVEYXNoYm9h
cmRSZWdpb25faAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKIAotI2luY2x1ZGUgIkxl
bmd0aEJveC5oIgorI2luY2x1ZGUgIkluc2V0cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RydWN0IFN0eWxlRGFzaGJvYXJkUmVnaW9uIHsKICAgICBTdHJpbmcg
bGFiZWw7Ci0gICAgTGVuZ3RoQm94IG9mZnNldDsKKyAgICBMZW5ndGhJbnNldHMgb2Zmc2V0Owog
ICAgIGludCB0eXBlOwogCiAgICAgZW51bSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU3R5bGVTdXJyb3VuZERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVTdXJyb3VuZERhdGEuaAkocmV2aXNpb24gMTg3NTU2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlU3Vycm91bmREYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNkZWZpbmUgU3R5bGVTdXJyb3VuZERhdGFf
aAogCiAjaW5jbHVkZSAiQm9yZGVyRGF0YS5oIgotI2luY2x1ZGUgIkxlbmd0aEJveC5oIgorI2lu
Y2x1ZGUgIkluc2V0cy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAtNDMsOSArNDMsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG8pOwogICAgIH0KIAotICAgIExlbmd0aEJveCBvZmZzZXQ7Ci0gICAg
TGVuZ3RoQm94IG1hcmdpbjsKLSAgICBMZW5ndGhCb3ggcGFkZGluZzsKKyAgICBMZW5ndGhJbnNl
dHMgb2Zmc2V0OworICAgIExlbmd0aEluc2V0cyBtYXJnaW47CisgICAgTGVuZ3RoSW5zZXRzIHBh
ZGRpbmc7CiAgICAgQm9yZGVyRGF0YSBib3JkZXI7CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlVmlzdWFsRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuaAkocmV2
aXNpb24gMTg3NTU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlVmlz
dWFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZuZGVmIFN0eWxl
VmlzdWFsRGF0YV9oCiAjZGVmaW5lIFN0eWxlVmlzdWFsRGF0YV9oCiAKLSNpbmNsdWRlICJMZW5n
dGhCb3guaCIKKyNpbmNsdWRlICJJbnNldHMuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0
YW50cy5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIH0KICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgU3R5bGVWaXN1YWxEYXRhJiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09
IG8pOyB9CiAKLSAgICBMZW5ndGhCb3ggY2xpcDsKKyAgICBMZW5ndGhJbnNldHMgY2xpcDsKICAg
ICBib29sIGhhc0NsaXAgOiAxOwogICAgIHVuc2lnbmVkIHRleHREZWNvcmF0aW9uIDogVGV4dERl
Y29yYXRpb25CaXRzOyAvLyBUZXh0IGRlY29yYXRpb25zIGRlZmluZWQgKm9ubHkqIGJ5IHRoaXMg
ZWxlbWVudC4KIAo=
</data>
<flag name="review"
          id="283126"
          type_id="1"
          status="-"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>