<?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>27598</bug_id>
          
          <creation_ts>2009-07-22 23:22:47 -0700</creation_ts>
          <short_desc>Clean up the AccessibilityObject class</short_desc>
          <delta_ts>2009-07-23 11:11:32 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>134038</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-07-22 23:22:47 -0700</bug_when>
    <thetext>The AccessibilityObject class is the base class for all types accessibility objects. It has a lot of empty stubs of functions so that the main client of AccessibilityObject -- the AccessibilityObjectWrapper -- does not have to cast to different types of AccessibilityObjects to call appropriate functions. Some of these stubs should be pure virtual since all of the sub-classes implement them anyway. Others will need to stay empty stubs to avoid casting, but we can still clean up the class by moving them all to the header file since only half of these stubs are there now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134039</commentid>
    <comment_count>1</comment_count>
      <attachid>33316</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-07-22 23:25:12 -0700</bug_when>
    <thetext>Created attachment 33316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134104</commentid>
    <comment_count>2</comment_count>
      <attachid>33316</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-07-23 08:27:02 -0700</bug_when>
    <thetext>Comment on attachment 33316
Patch

Making the functions pure virtual seems great to me!

It also seems OK to move these &quot;stubs&quot; to the header. I know Hyatt likes this style.

But personally I normally avoid putting bodies of virtual functions into the class definition in the header, even small stubs. For one thing, it means changing any of these requires recompilation of any files that include the header. And generally there are few opportunities for virtual functions to be inlined, which is the usual reason for putting things in a header or in the class definition.

&gt; -    virtual VisiblePosition visiblePositionForIndex(unsigned indexValue, bool lastIndexOK) const;
&gt; +    virtual VisiblePosition visiblePositionForIndex(unsigned, bool) const { return VisiblePosition(); }

Here I think it&apos;s not so great to lose the names of the arguments, since the meaning of the bool is not clear without a name. Maybe keep lastIndexOK around, but commented out, like this:

    virtual VisiblePosition visiblePositionForIndex(unsigned, bool /* lastIndexOK */) const { return VisiblePosition(); }

Or leave this one in the implementation file.

r=me as-is, but please consider the lastIndexOK thing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134161</commentid>
    <comment_count>3</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2009-07-23 11:11:32 -0700</bug_when>
    <thetext>Thanks Darin! I fixed the lastIndexOK thing.

Fixed with r46276.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33316</attachid>
            <date>2009-07-22 23:25:12 -0700</date>
            <delta_ts>2009-07-23 08:27:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>forReview.txt</filename>
            <type>text/plain</type>
            <size>29052</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjI1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODkgQEAKKzIwMDktMDctMjIgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3NTk4IENsZWFuIHVw
IHRoZSAKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCBjbGFzcworCisgICAgICAgIE1vc3Rs
eSB0aGlzIGlzIGp1c3QgbW92aW5nIGVtcHR5IHN0dWJzIGludG8gdGhlIGhlYWRlciByYXRoZXIg
dGhhbiAKKyAgICAgICAgbXVkZHlpbmcgdGhlIGNwcCBmaWxlIHdpdGggdGhlbS4gQSBmZXcgZnVu
Y3Rpb25zIHdlcmUgbWFkZSBwdXJlIAorICAgICAgICB2aXJ0dWFsLgorCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmlzQVJJQUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6Y2xpY2tQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojpkb2N1bWVudEZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjphY3Rpb25WZXJiKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmludFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omxh
eW91dENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQWNj
ZXNzaWJpbGl0eUhpdFRlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6Zm9jdXNlZFVJRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6
Omxhc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmV2
aW91c1NpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bmV4
dFNpYmxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cGFyZW50
T2JqZWN0SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
b2JzZXJ2YWJsZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpsaW5rZWRVSUVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnRpdGxlVUlFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmFyaWFSb2xlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3Q6OmlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVJvbGVIYXNQcmVzZW50YXRpb25hbENoaWxkcmVu
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnJvbGVWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhQWNjZXNzaWJsaXR5TmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhTGFiZWxlZEJ5
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFE
ZXNjcmliZWRCeUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6YXJpYVNlbGVjdGVkVGV4dERPTVJhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmF4T2JqZWN0Q2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXhPYmplY3RJRCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRBWE9iamVjdElEKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFuY2hvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6YWN0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojpib3VuZGluZ0JveFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0ZWRUZXh0UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpzZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6c3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
dGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGVscFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6dGV4dFVuZGVyRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp0ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnRleHRMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0ZWRUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc0tleSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp3aWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0Rm9jdXNlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRTZWxlY3RlZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0U2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6bWFrZVJhbmdlVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6aGFzQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6c2VsZWN0ZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kc0ZvclZpc2libGVQb3Np
dGlvblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNldFNl
bGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6bmV4dFZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmV2aW91c1Zpc2libGVQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRleEZvclZpc2li
bGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb0FYUmFuZ2VGb3JM
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhSYW5nZUZv
ckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhTdHJp
bmdGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb0FY
Qm91bmRzRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
dXBkYXRlQmFja2luZ1N0b3JlKToKKwogMjAwOS0wNy0yMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCklu
ZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShy
ZXZpc2lvbiA0NjIyNykKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMzEgKzgwLDYgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpkZXRhY2goKQogI2VuZGlmICAgIAogfQogCi1BY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpmaXJzdENoaWxkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
MDsKLX0KLQotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6bGFzdENo
aWxkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eU9iamVjdCog
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdDo6bmV4
dFNpYmxpbmcoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1BY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwYXJlbnRPYmplY3QoKSBjb25zdAotewotICAgIHJl
dHVybiAwOwotfQotCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpw
YXJlbnRPYmplY3RVbmlnbm9yZWQoKSBjb25zdAogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IHBhcmVudDsKQEAgLTExMywzMSArODgsNiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3Np
YmlsaXR5T2JqZWN0CiAgICAgcmV0dXJuIHBhcmVudDsKIH0KIAotQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eU9iamVjdDo6cGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdAotewot
ICAgIHJldHVybiAwOwotfQotICAgIAotaW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxheW91dENv
dW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLSAgICAKLVN0cmluZyBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojp0ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0gICAg
Ci1TdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGVscFRleHQoKSBjb25zdAotewotICAgIHJl
dHVybiBTdHJpbmcoKTsgICAKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnRleHRV
bmRlckVsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQogYm9vbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9s
ZSkKIHsKICAgICByZXR1cm4gYXJpYVJvbGUgPT0gUmFkaW9CdXR0b25Sb2xlIHx8IGFyaWFSb2xl
ID09IENoZWNrQm94Um9sZSB8fCBhcmlhUm9sZSA9PSBUZXh0RmllbGRSb2xlOwpAQCAtMTQ4LDE0
NSArOTgsMTIgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFDb250cm9sKAogICAg
IHJldHVybiBpc0FSSUFJbnB1dChhcmlhUm9sZSkgfHwgYXJpYVJvbGUgPT0gVGV4dEFyZWFSb2xl
IHx8IGFyaWFSb2xlID09IEJ1dHRvblJvbGUgCiAgICAgfHwgYXJpYVJvbGUgPT0gQ29tYm9Cb3hS
b2xlIHx8IGFyaWFSb2xlID09IFNsaWRlclJvbGU7IAogfQotICAgIAotaW50IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmludFZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotU3RyaW5n
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN0cmluZ1ZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhQWNjZXNzaWJs
aXR5TmFtZShjb25zdCBTdHJpbmcmKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUoKSBj
b25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnRpdGxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhRGVzY3JpYmVkQnlBdHRyaWJ1dGUoKSBjb25zdAot
ewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygp
OwotfQotCi1JbnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kaW5nQm94UmVjdCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotSW50UmVjdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjplbGVtZW50UmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0K
LQotSW50U2l6ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSW50U2l6ZSgpOwotfQogCiBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGlja1Bv
aW50KCkgY29uc3QKIHsKICAgICBJbnRSZWN0IHJlY3QgPSBlbGVtZW50UmVjdCgpOwogICAgIHJl
dHVybiBJbnRQb2ludChyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QueSgpICsgcmVj
dC5oZWlnaHQoKSAvIDIpOwogfQotICAgIAotdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaW5r
ZWRVSUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuOwotfQotICAgIAotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVj
dDo6dGl0bGVVSUVsZW1lbnQoKSBjb25zdAotewotICAgICByZXR1cm4gMDsgICAKLX0KLQotaW50
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnRleHRMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiAw
OwotfQotCi1QYXNzUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhU2VsZWN0
ZWRUZXh0RE9NUmFuZ2UoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1TdHJpbmcgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWNj
ZXNzS2V5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbEF0b207Ci19Ci0KLVZpc2libGVTZWxl
Y3Rpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gVmlzaWJsZVNlbGVjdGlvbigpOwotfQotCi1QbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpzZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFBsYWluVGV4
dFJhbmdlKCk7Ci19Ci0KLXVuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblN0
YXJ0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2VsZWN0ZWRUZXh0UmFuZ2UoKS5zdGFydDsKLX0K
LQotdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uRW5kKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc2VsZWN0ZWRUZXh0UmFuZ2UoKS5sZW5ndGg7Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6c2V0U2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8g
VE9ETzogc2V0IHNlbGVjdGVkIHRleHQgKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKS4gPHJkYXI6
Ly9wcm9ibGVtLzQ3MTIxMjU+Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpzZXRTZWxlY3RlZFRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5n
ZSYpCi17Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6bWFrZVJhbmdlVmlzaWJsZShj
b25zdCBQbGFpblRleHRSYW5nZSYpCi17Ci0gICAgLy8gVE9ETzogbWFrZSByYW5nZSB2aXNpYmxl
IChzY3JvbGxSZWN0VG9WaXNpYmxlKS4gIDxyZGFyOi8vcHJvYmxlbS80NzEyMTAxPgotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLUtVUkwgQWNjZXNzaWJpbGl0eU9iamVjdDo6dXJsKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gS1VSTCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnNldEZvY3VzZWQoYm9vbCkKLXsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRW
YWx1ZShjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNl
dFNlbGVjdGVkKGJvb2wpCi17Ci19CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6cHJlc3Mo
KSBjb25zdAogewpAQCAtMzE0LDUzICsxMzEsNiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVj
dDo6bGFuZ3VhZ2UoKSBjCiAgICAgcmV0dXJuIHBhcmVudC0+bGFuZ3VhZ2UoKTsKIH0KICAgICAK
LUFYT2JqZWN0Q2FjaGUqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmF4T2JqZWN0Q2FjaGUoKSBjb25z
dAotewotICAgIHJldHVybiAwOwotfQotCi1XaWRnZXQqIEFjY2Vzc2liaWxpdHlPYmplY3Q6Ondp
ZGdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVdpZGdldCogQWNjZXNzaWJpbGl0
eU9iamVjdDo6d2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKSBjb25zdAotewotICAgIHJldHVybiAw
OwotfQotCi1FbGVtZW50KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphbmNob3JFbGVtZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gMDsgICAKLX0KLQotRWxlbWVudCogQWNjZXNzaWJpbGl0eU9iamVj
dDo6YWN0aW9uRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIFRoaXMg
ZnVuY3Rpb24gaXMgbGlrZSBhIGNyb3NzLXBsYXRmb3JtIHZlcnNpb24gb2YgLSAoV2ViQ29yZVRl
eHRNYXJrZXJSYW5nZSopdGV4dE1hcmtlclJhbmdlLiBJdCByZXR1cm5zCi0vLyBhIFJhbmdlIHRo
YXQgd2UgY2FuIGNvbnZlcnQgdG8gYSBXZWJDb3JlUmFuZ2UgaW4gdGhlIE9iai1DIGZpbGUKLVZp
c2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJh
bmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKLX0KLQot
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JMaW5lKHVuc2lnbmVkKSBjb25zdAotewotICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b25SYW5nZSgpOwotfQotCi1WaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlz
aWJsZVBvc2l0aW9uRm9ySW5kZXgoaW50KSBjb25zdAotewotICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oKTsKLX0KLSAgICAKLWludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppbmRleEZvclZpc2li
bGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdAotewotICAgIHJldHVybiAw
OwotfQotICAgIAogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlz
aWJsZVBvc2l0aW9uUmFuZ2VGb3JVbm9yZGVyZWRQb3NpdGlvbnMoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zMSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zMikgY29u
c3QKIHsKICAgICBpZiAodmlzaWJsZVBvczEuaXNOdWxsKCkgfHwgdmlzaWJsZVBvczIuaXNOdWxs
KCkpCkBAIC02MTksMTEgKzM4OSw2IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJp
bmdGb3JWaXMKICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHRWZWN0b3IpOwogfQogCi1J
bnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdl
KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3QKLXsKLSAgICByZXR1cm4gSW50UmVj
dCgpOwotfQotCiBpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGVuZ3RoRm9yVmlzaWJsZVBvc2l0
aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmIHZpc2libGVQb3NpdGlvblJhbmdl
KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBNdWx0aS1ieXRlIHN1cHBvcnQKQEAgLTY1MSwyNSAr
NDE2LDYgQEAgaW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6Omxlbmd0aEZvclZpc2libAogICAgIHJl
dHVybiBsZW5ndGg7CiB9CiAKLXZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0U2VsZWN0ZWRW
aXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0Ci17
Ci19Ci0KLVZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRp
b25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFZpc2libGVQ
b3NpdGlvbigpOwotfQotCi1WaXNpYmxlUG9zaXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6bmV4
dFZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHZpc2libGVQb3MubmV4dCgpOwotfQotCi1WaXNpYmxlUG9zaXRpb24g
QWNjZXNzaWJpbGl0eU9iamVjdDo6cHJldmlvdXNWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uJiB2aXNpYmxlUG9zKSBjb25zdAotewotICAgIHJldHVybiB2aXNpYmxlUG9zLnBy
ZXZpb3VzKCk7Ci19Ci0KIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpuZXh0
V29yZEVuZChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3MpIGNvbnN0CiB7CiAgICAg
aWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCkBAIC04MTgsMTIgKzU2NCw2IEBAIFZpc2libGVQb3Np
dGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpwcmUKICAgICByZXR1cm4gc3RhcnRPZlBhcmFncmFw
aChwcmV2aW91c1Bvcyk7CiB9CiAKLS8vIE5PVEU6IENvbnNpZGVyIHByb3ZpZGluZyB0aGlzIHV0
aWxpdHkgbWV0aG9kIGFzIEFYIEFQSQotVmlzaWJsZVBvc2l0aW9uIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnZpc2libGVQb3NpdGlvbkZvckluZGV4KHVuc2lnbmVkLCBib29sKSBjb25zdAotewotICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLX0KLQogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNj
ZXNzaWJpbGl0eU9iamVjdDo6YWNjZXNzaWJpbGl0eU9iamVjdEZvclBvc2l0aW9uKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdmlzaWJsZVBvcykgY29uc3QKIHsKICAgICBpZiAodmlzaWJsZVBvcy5p
c051bGwoKSkKQEAgLTg2OSwxOSArNjA5LDYgQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0
eU9iamVjdDo6cGxhaQogICAgIHJldHVybiBQbGFpblRleHRSYW5nZShpbmRleDEsIGluZGV4MiAt
IGluZGV4MSk7CiB9CiAKLS8vIE5PVEU6IENvbnNpZGVyIHByb3ZpZGluZyB0aGlzIHV0aWxpdHkg
bWV0aG9kIGFzIEFYIEFQSQotaW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmluZGV4KGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIC0xOwotfQotCi0vLyBHaXZlbiBh
IGxpbmUgbnVtYmVyLCB0aGUgcmFuZ2Ugb2YgY2hhcmFjdGVycyBvZiB0aGUgdGV4dCBhc3NvY2lh
dGVkIHdpdGggdGhpcyBhY2Nlc3NpYmlsaXR5Ci0vLyBvYmplY3QgdGhhdCBjb250YWlucyB0aGUg
bGluZSBudW1iZXIuCi1QbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb0FYUmFu
Z2VGb3JMaW5lKHVuc2lnbmVkKSBjb25zdAotewotICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgp
OwotfQotCiAvLyBUaGUgY29tcG9zZWQgY2hhcmFjdGVyIHJhbmdlIGluIHRoZSB0ZXh0IGFzc29j
aWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRoYXQKIC8vIGlzIHNwZWNpZmll
ZCBieSB0aGUgZ2l2ZW4gc2NyZWVuIGNvb3JkaW5hdGVzLiBUaGlzIHBhcmFtZXRlcml6ZWQgYXR0
cmlidXRlIHJldHVybnMgdGhlCiAvLyBjb21wbGV0ZSByYW5nZSBvZiBjaGFyYWN0ZXJzIChpbmNs
dWRpbmcgc3Vycm9nYXRlIHBhaXJzIG9mIG11bHRpLWJ5dGUgZ2x5cGhzKSBhdCB0aGUgZ2l2ZW4K
QEAgLTg5NywxNCArNjI0LDYgQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6
ZG9BWAogICAgIHJldHVybiBQbGFpblRleHRSYW5nZShpLCAxKTsKIH0KIAotLy8gVGhlIGNvbXBv
c2VkIGNoYXJhY3RlciByYW5nZSBpbiB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhpcyBhY2Nl
c3NpYmlsaXR5IG9iamVjdCB0aGF0Ci0vLyBpcyBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIGluZGV4
IHZhbHVlLiBUaGlzIHBhcmFtZXRlcml6ZWQgYXR0cmlidXRlIHJldHVybnMgdGhlIGNvbXBsZXRl
Ci0vLyByYW5nZSBvZiBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgc3Vycm9nYXRlIHBhaXJzIG9mIG11
bHRpLWJ5dGUgZ2x5cGhzKSBhdCB0aGUgZ2l2ZW4gaW5kZXguCi1QbGFpblRleHRSYW5nZSBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojpkb0FYUmFuZ2VGb3JJbmRleCh1bnNpZ25lZCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKLX0KLQogLy8gR2l2ZW4gYSBjaGFyYWN0ZXIgaW5k
ZXgsIHRoZSByYW5nZSBvZiB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkg
b2JqZWN0CiAvLyBvdmVyIHdoaWNoIHRoZSBzdHlsZSBpbiBlZmZlY3QgYXQgdGhhdCBjaGFyYWN0
ZXIgaW5kZXggYXBwbGllcy4KIFBsYWluVGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRv
QVhTdHlsZVJhbmdlRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CkBAIC05MTMsMjEgKzYz
Miw2IEBAIFBsYWluVGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVgKICAgICByZXR1
cm4gcGxhaW5UZXh0UmFuZ2VGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7CiB9CiAKLS8v
IEEgc3Vic3RyaW5nIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxp
dHkgb2JqZWN0IHRoYXQgaXMKLS8vIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHJh
bmdlLgotU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhTdHJpbmdGb3JSYW5nZShjb25z
dCBQbGFpblRleHRSYW5nZSYpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi0v
LyBUaGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlz
IGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRoYXQgaXMKLS8vIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4g
cmFuZ2UuIFRoaXMgaXMgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBhIHNpZ2h0ZWQgdXNlciB3b3Vs
ZCBzZWUKLS8vIG9uIHRoZSBkaXNwbGF5IHNjcmVlbiwgaW4gcGl4ZWxzLgotSW50UmVjdCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2Um
KSBjb25zdAotewotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KIC8vIEdpdmVuIGFuIGluZGV4
ZWQgY2hhcmFjdGVyLCB0aGUgbGluZSBudW1iZXIgb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgYWNjZXNzaWJpbGl0eQogLy8gb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIGNoYXJhY3Rl
ci4KIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhMaW5lRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgpCkBAIC05NDUsNDEgKzY0OSw2IEBAIEZyYW1lVmlldyogQWNjZXNzaWJpbGl0eU9i
amVjdDo6ZG9jdW1lbnQKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gb2JqZWN0LT5k
b2N1bWVudEZyYW1lVmlldygpOwotfSAgICAKLQotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNz
aWJpbGl0eU9iamVjdDo6ZG9BY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdAotewotICAgIHJldHVybiAwOwot
fQotCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpvYnNlcnZhYmxl
T2JqZWN0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotQWNjZXNzaWJpbGl0eVJvbGUg
QWNjZXNzaWJpbGl0eU9iamVjdDo6cm9sZVZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gVW5r
bm93blJvbGU7Ci19Ci0gICAgCi1BY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjphcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFVua25vd25Sb2xlOwot
fQotCi1ib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJp
YVJvbGUoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjphcmlhUm9sZUhhc1ByZXNlbnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdAotewot
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjbGVhckNo
aWxkcmVuKCkKQEAgLTk4OCwzMyArNjU3LDYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpj
bGVhckNoaWxkcmVuKAogICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKIH0KIAotdm9pZCBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpjaGlsZHJlbkNoYW5nZWQoKQotewotICAgIHJldHVybjsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphZGRDaGlsZHJlbigpCi17Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6c2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3ImKQotewotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVDaGlsZHJlbihB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKQotewotfQotICAgIAotdW5zaWduZWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6YXhPYmplY3RJRCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faWQ7Ci19
Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0QVhPYmplY3RJRCh1bnNpZ25lZCBheE9i
amVjdElEKQotewotICAgIG1faWQgPSBheE9iamVjdElEOwotfQotCiBjb25zdCBTdHJpbmcmIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFjdGlvblZlcmIoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIGFkZCB2ZXJicyBmb3Igc2VsZWN0IGVsZW1lbnRzLgpAQCAtMTA0Myw5ICs2ODUsNSBA
QCBjb25zdCBTdHJpbmcmIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjdGlvCiAgICAgICAgICAgICBy
ZXR1cm4gbm9BY3Rpb247CiAgICAgfQogfQotCi12b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpCi17Ci19CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJldmlz
aW9uIDQ2MjI3KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsMTAgQEAKICNpZm5kZWYgQWNjZXNzaWJpbGl0
eU9iamVjdF9oCiAjZGVmaW5lIEFjY2Vzc2liaWxpdHlPYmplY3RfaAogCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgi
CisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0x
OTMsNiArMTk2LDcgQEAgcHJvdGVjdGVkOgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QoKTsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5T2JqZWN0KCk7CisgICAgdmlydHVhbCB2
b2lkIGRldGFjaCgpOwogICAgICAgICAKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8QWNjZXNz
aWJpbGl0eU9iamVjdD4gPiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3I7CiAgICAgCkBAIC0y
NTIsOTMgKzI1Niw5NiBAQCBwdWJsaWM6CiAgICAgYm9vbCBhY2Nlc3NpYmlsaXR5U2hvdWxkVXNl
VW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9OwogICAgIHZpcnR1YWwgYm9vbCBhY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QgIHsgcmV0dXJuIHRydWU7IH07CiAKLSAgICB2aXJ0
dWFsIGludCBpbnRWYWx1ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGludFZhbHVlKCkgY29u
c3QgeyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgZmxvYXQgdmFsdWVGb3JSYW5nZSgpIGNvbnN0
IHsgcmV0dXJuIDAuMGY7IH0KICAgICB2aXJ0dWFsIGZsb2F0IG1heFZhbHVlRm9yUmFuZ2UoKSBj
b25zdCB7IHJldHVybiAwLjBmOyB9CiAgICAgdmlydHVhbCBmbG9hdCBtaW5WYWx1ZUZvclJhbmdl
KCkgY29uc3QgeyByZXR1cm4gMC4wZjsgfQotICAgIHZpcnR1YWwgaW50IGxheW91dENvdW50KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgbGF5b3V0Q291bnQoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAgICAgc3RhdGljIGJvb2wgaXNBUklBQ29udHJvbChBY2Nlc3NpYmlsaXR5Um9sZSk7CiAgICAg
c3RhdGljIGJvb2wgaXNBUklBSW5wdXQoQWNjZXNzaWJpbGl0eVJvbGUpOwotICAgIHVuc2lnbmVk
IGF4T2JqZWN0SUQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGRvQWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLSAgICB2
aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZvY3VzZWRVSUVsZW1lbnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcHJldmlvdXNTaWJsaW5nKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBuZXh0U2libGluZygpIGNvbnN0OwotICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBkb0FjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBv
aW50JikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVj
dCogZm9jdXNlZFVJRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwg
QWNjZXNzaWJpbGl0eU9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHByZXZpb3VzU2libGluZygp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIG5l
eHRTaWJsaW5nKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0
eU9iamVjdCogcGFyZW50T2JqZWN0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50T2JqZWN0VW5pZ25vcmVkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnRPYmplY3RJZkV4aXN0cygpIGNvbnN0OwotICAgIHZp
cnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JzZXJ2YWJsZU9iamVjdCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBsaW5rZWRVSUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYpIGNvbnN0OwotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogdGl0bGVVSUVsZW1l
bnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVj
dElmRXhpc3RzKCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYnNlcnZhYmxlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgdm9pZCBsaW5rZWRVSUVsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYp
IGNvbnN0IHsgfQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogdGl0bGVVSUVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBib29sIGV4cG9zZXNUaXRsZVVJ
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxp
dHlSb2xlIGFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzUHJl
c2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgYXJp
YVJvbGVIYXNQcmVzZW50YXRpb25hbENoaWxkcmVuKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEFj
Y2Vzc2liaWxpdHlSb2xlIHJvbGVWYWx1ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgQVhPYmplY3RD
YWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgRWxlbWVudCog
YW5jaG9yRWxlbWVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgRWxlbWVudCogYWN0aW9uRWxlbWVu
dCgpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCBib3VuZGluZ0JveFJlY3QoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEludFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdDsKLSAgICB2aXJ0dWFsIElu
dFNpemUgc2l6ZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlh
Um9sZUF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIFVua25vd25Sb2xlOyB9CisgICAgdmlydHVh
bCBib29sIGlzUHJlc2VudGF0aW9uYWxDaGlsZE9mQXJpYVJvbGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBhcmlhUm9sZUhhc1ByZXNlbnRhdGlvbmFsQ2hpbGRy
ZW4oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJv
bGUgcm9sZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gVW5rbm93blJvbGU7IH0KKyAgICB2aXJ0dWFs
IFN0cmluZyBhcmlhQWNjZXNzaWJsaXR5TmFtZShjb25zdCBTdHJpbmcmKSBjb25zdCB7IHJldHVy
biBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGFyaWFMYWJlbGVkQnlBdHRyaWJ1dGUo
KSBjb25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGFyaWFEZXNj
cmliZWRCeUF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVh
bCBTdHJpbmcgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gU3RyaW5n
KCk7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmFuZ2U+IGFyaWFTZWxlY3RlZFRleHRET01S
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgQVhPYmplY3RDYWNoZSog
YXhPYmplY3RDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB1bnNpZ25lZCBheE9iamVj
dElEKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIHZvaWQgc2V0QVhPYmplY3RJRCh1bnNp
Z25lZCBheE9iamVjdElEKSB7IG1faWQgPSBheE9iamVjdElEOyB9CisgICAgCisgICAgdmlydHVh
bCBFbGVtZW50KiBhbmNob3JFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1
YWwgRWxlbWVudCogYWN0aW9uRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0
dWFsIEludFJlY3QgYm91bmRpbmdCb3hSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9
CisgICAgdmlydHVhbCBJbnRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgSW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50UG9pbnQgY2xpY2tQ
b2ludCgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgS1VSTCB1cmwoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFBsYWluVGV4dFJhbmdlIHNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigpIGNvbnN0OwotICAgIHVuc2lnbmVkIHNl
bGVjdGlvblN0YXJ0KCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgc2VsZWN0aW9uRW5kKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nVmFsdWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0
cmluZyBhcmlhQWNjZXNzaWJsaXR5TmFtZShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2aXJ0
dWFsIFN0cmluZyBhcmlhTGFiZWxlZEJ5QXR0cmlidXRlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBT
dHJpbmcgdGl0bGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBhcmlhRGVzY3JpYmVkQnlB
dHRyaWJ1dGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBhY2Nlc3NpYmlsaXR5RGVzY3Jp
cHRpb24oKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0cmluZyBoZWxwVGV4dCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgU3RyaW5nIHRleHRVbmRlckVsZW1lbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFN0
cmluZyB0ZXh0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgdGV4dExlbmd0aCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSYW5nZT4gYXJpYVNlbGVjdGVkVGV4dERPTVJhbmdlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgc2VsZWN0ZWRUZXh0KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vzc0tleSgpIGNvbnN0OworCisgICAgdmlydHVh
bCBQbGFpblRleHRSYW5nZSBzZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIFBsYWlu
VGV4dFJhbmdlKCk7IH0KKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgcmV0
dXJuIHNlbGVjdGVkVGV4dFJhbmdlKCkuc3RhcnQ7IH0KKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25F
bmQoKSBjb25zdCB7IHJldHVybiBzZWxlY3RlZFRleHRSYW5nZSgpLmxlbmd0aDsgfQorICAgIAor
ICAgIHZpcnR1YWwgS1VSTCB1cmwoKSBjb25zdCB7IHJldHVybiBLVVJMKCk7IH0KKyAgICB2aXJ0
dWFsIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gVmlzaWJsZVNl
bGVjdGlvbigpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgc3RyaW5nVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3QgeyByZXR1
cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBoZWxwVGV4dCgpIGNvbnN0IHsgcmV0
dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdGV4dFVuZGVyRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdGV4dCgpIGNvbnN0
IHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCBpbnQgdGV4dExlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBzZWxlY3RlZFRleHQoKSBjb25zdCB7
IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhY2Nl
c3NLZXkoKSBjb25zdCB7IHJldHVybiBudWxsQXRvbTsgfQogICAgIGNvbnN0IFN0cmluZyYgYWN0
aW9uVmVyYigpIGNvbnN0OwotICAgIHZpcnR1YWwgV2lkZ2V0KiB3aWRnZXQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFdpZGdldCogd2lkZ2V0Rm9yQXR0YWNobWVudFZpZXcoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFdpZGdldCogd2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
V2lkZ2V0KiB3aWRnZXRGb3JBdHRhY2htZW50VmlldygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAg
ICB2aXJ0dWFsIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2
aXJ0dWFsIEZyYW1lVmlldyogdG9wRG9jdW1lbnRGcmFtZVZpZXcoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAgICAgdmlydHVhbCBGcmFtZVZpZXcqIGRvY3VtZW50RnJhbWVWaWV3KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBTdHJpbmcgbGFuZ3VhZ2UoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHNldEFY
T2JqZWN0SUQodW5zaWduZWQpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1c2VkKGJvb2wpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJik7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTZWxlY3RlZChib29sKTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIG1ha2VSYW5nZVZpc2libGUoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRGb2N1c2VkKGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dFNlbGVjdGVkVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRT
ZWxlY3RlZChib29sKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBtYWtlUmFuZ2VWaXNpYmxlKGNv
bnN0IFBsYWluVGV4dFJhbmdlJikgeyB9CiAgICAgdmlydHVhbCBib29sIHByZXNzKCkgY29uc3Q7
CiAgICAgYm9vbCBwZXJmb3JtRGVmYXVsdEFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHByZXNzKCk7
IH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CisgICAgdmlydHVh
bCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpIHsgfQogICAgIHZpcnR1YWwgY29uc3QgQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRy
ZW4oKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBoYXNDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJu
IG1faGF2ZUNoaWxkcmVuOyB9OwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3RlZENoaWxkcmVuKEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwotICAgIHZpcnR1YWwgdm9pZCB2aXNpYmxlQ2hp
bGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7CisgICAgdmlydHVhbCBib29sIGhh
c0NoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXZlQ2hpbGRyZW47IH0KKyAgICB2aXJ0dWFs
IHZvaWQgc2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaWJsZUNoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGb2N1c0FjdGl2ZURlc2NlbmRhbnQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVj
dCogYWN0aXZlRGVzY2VuZGFudCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0gICAgCiAgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkKCkgeyB9CiAKLSAgICB2aXJ0dWFs
IFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUo
dW5zaWduZWQpIGNvbnN0OworICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9
CisgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZv
ckxpbmUodW5zaWduZWQpIGNvbnN0IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0K
ICAgICAKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclVu
b3JkZXJlZFBvc2l0aW9ucyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mKSBjb25zdDsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBwb3NpdGlvbk9mTGVmdFdv
cmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Q7CkBAIC0zNTEsMTMgKzM1OCwxMyBAQCBw
dWJsaWM6CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JS
YW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0OwogCiAgICAgU3RyaW5nIHN0cmluZ0Zv
clZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Q7
Ci0gICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0
IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Q7ICAgIAorICAgIHZpcnR1YWwgSW50UmVjdCBi
b3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYp
IGNvbnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQogICAgIGludCBsZW5ndGhGb3JWaXNpYmxlUG9z
aXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3Np
dGlvblJhbmdlJikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkVmlzaWJsZVBv
c2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCB7IH0KIAotICAg
IHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IElu
dFBvaW50JikgY29uc3Q7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIG5leHRWaXNpYmxlUG9zaXRpb24o
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Q7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHByZXZp
b3VzVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0OworICAgIHZp
cnR1YWwgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IEludFBv
aW50JikgY29uc3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7IH0KKyAgICBWaXNpYmxlUG9z
aXRpb24gbmV4dFZpc2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3MpIGNvbnN0IHsgcmV0dXJuIHZpc2libGVQb3MubmV4dCgpOyB9CisgICAgVmlzaWJsZVBvc2l0
aW9uIHByZXZpb3VzVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJs
ZVBvcykgY29uc3QgeyByZXR1cm4gdmlzaWJsZVBvcy5wcmV2aW91cygpOyB9CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIG5leHRXb3JkRW5kKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0OwogICAg
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1dvcmRTdGFydChjb25zdCBWaXNpYmxlUG9zaXRpb24m
KSBjb25zdDsKICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dExpbmVFbmRQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24mKSBjb25zdDsKQEAgLTM2NiwyMyArMzczLDIzIEBAIHB1YmxpYzoKICAg
ICBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNTZW50ZW5jZVN0YXJ0UG9zaXRpb24oY29uc3QgVmlz
aWJsZVBvc2l0aW9uJikgY29uc3Q7CiAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQYXJhZ3JhcGhF
bmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsKICAgICBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXNQYXJhZ3JhcGhTdGFydFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpIGNvbnN0OwotICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZv
ckluZGV4KHVuc2lnbmVkIGluZGV4VmFsdWUsIGJvb2wgbGFzdEluZGV4T0spIGNvbnN0OworICAg
IHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4KHVuc2lnbmVk
LCBib29sKSBjb25zdCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQogICAgIAotICAgIHZp
cnR1YWwgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4KGludCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uJikgY29uc3Q7CisgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0
aW9uRm9ySW5kZXgoaW50KSBjb25zdCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsgfQorICAg
IHZpcnR1YWwgaW50IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlv
biYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vz
c2liaWxpdHlPYmplY3RGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsK
ICAgICBpbnQgbGluZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0Owog
ICAgIFBsYWluVGV4dFJhbmdlIHBsYWluVGV4dFJhbmdlRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBpbmRl
eChjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBpbmRleChj
b25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdCB7IHJldHVybiAtMTsgfQogCi0gICAgdmlydHVh
bCBQbGFpblRleHRSYW5nZSBkb0FYUmFuZ2VGb3JMaW5lKHVuc2lnbmVkKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBsYWluVGV4dFJhbmdlIGRvQVhSYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IHsg
cmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7IH0KICAgICBQbGFpblRleHRSYW5nZSBkb0FYUmFuZ2VG
b3JQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgIHZpcnR1YWwgUGxhaW5UZXh0
UmFuZ2UgZG9BWFJhbmdlRm9ySW5kZXgodW5zaWduZWQpIGNvbnN0OworICAgIHZpcnR1YWwgUGxh
aW5UZXh0UmFuZ2UgZG9BWFJhbmdlRm9ySW5kZXgodW5zaWduZWQpIGNvbnN0IHsgcmV0dXJuIFBs
YWluVGV4dFJhbmdlKCk7IH0KICAgICBQbGFpblRleHRSYW5nZSBkb0FYU3R5bGVSYW5nZUZvcklu
ZGV4KHVuc2lnbmVkKSBjb25zdDsKIAotICAgIHZpcnR1YWwgU3RyaW5nIGRvQVhTdHJpbmdGb3JS
YW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0OwotICAgIHZpcnR1YWwgSW50UmVjdCBk
b0FYQm91bmRzRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIFN0cmluZyBkb0FYU3RyaW5nRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25z
dCB7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgSW50UmVjdCBkb0FYQm91bmRzRm9y
UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0K
IAogICAgIHVuc2lnbmVkIGRvQVhMaW5lRm9ySW5kZXgodW5zaWduZWQpOwogCkBAIC00MDgsNyAr
NDE1LDcgQEAgcHVibGljOgogCiAgICAgLy8gYWxsb3dzIGZvciBhbiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0IHRvIHVwZGF0ZSBpdHMgcmVuZGVyIHRyZWUgb3IgcGVyZm9ybQogICAgIC8vIG90aGVyIG9w
ZXJhdGlvbnMgdXBkYXRlIHR5cGUgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVC
YWNraW5nU3RvcmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCkgeyB9
CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgdW5zaWduZWQgbV9pZDsK
</data>
<flag name="review"
          id="17615"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>