<?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>141177</bug_id>
          
          <creation_ts>2015-02-02 15:08:23 -0800</creation_ts>
          <short_desc>Simple line layout: Rename FlowContentsIterator to TextFragmentIterator</short_desc>
          <delta_ts>2015-02-02 19:08:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1066257</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-02-02 15:08:23 -0800</bug_when>
    <thetext>Having both FlowContentsIterator and FlowContents::Iterator is confusing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066260</commentid>
    <comment_count>1</comment_count>
      <attachid>245905</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-02-02 15:17:31 -0800</bug_when>
    <thetext>Created attachment 245905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066288</commentid>
    <comment_count>2</comment_count>
      <attachid>245913</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-02-02 16:29:16 -0800</bug_when>
    <thetext>Created attachment 245913
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066321</commentid>
    <comment_count>3</comment_count>
      <attachid>245913</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-02 19:08:39 -0800</bug_when>
    <thetext>Comment on attachment 245913
Patch

Clearing flags on attachment: 245913

Committed r179534: &lt;http://trac.webkit.org/changeset/179534&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066322</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-02 19:08:43 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245905</attachid>
            <date>2015-02-02 15:17:31 -0800</date>
            <delta_ts>2015-02-02 16:29:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.txt</filename>
            <type>text/plain</type>
            <size>35947</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZDBmZDFiOS4uYmFlN2JlYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTIzNTEsNyArMjM1MSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvU2Nyb2xsQmVoYXZpb3IuY3BwCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCi0gICAg
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAKKyAgICBy
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcAogICAgIHJl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAogICAgIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCiAgICAgcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMjU3YTQzMS4uYjc1NTJlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYy
IEBACiAyMDE1LTAyLTAyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKKyAgICAg
ICAgU2ltcGxlIGxpbmUgbGF5b3V0OiBSZW5hbWUgRmxvd0NvbnRlbnRzSXRlcmF0b3IgdG8gVGV4
dEZyYWdtZW50SXRlcmF0b3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDExNzcKKworICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBBbnR0aSBLb2l2
aXN0bworCisgICAgICAgIEZsb3dDb250ZW50c0l0ZXJhdG9yIGlzIGVhc3kgdG8gY29uZnVzZSB3
aXRoIEZsb3dDb250ZW50czo6SXRlcmF0b3IuCisgICAgICAgIFRleHRGcmFnbWVudEl0ZXJhdG9y
IHJlZmxlY3RzIHRoZSBmdW5jdGlvbmFsaXR5IGJldHRlci4KKworICAgICAgICBObyBjaGFuZ2Ug
aW4gZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IFdlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OnNldE92
ZXJmbG93ZWRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpM
aW5lU3RhdGU6Om92ZXJmbG93ZWRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpMaW5lU3RhdGU6OmFwcGVuZEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUxpbmVMYXlvdXQ6OmJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmVXcmFw
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnJlbW92ZVRyYWlsaW5nV2hp
dGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpzcGxpdEZyYWdt
ZW50VG9GaXRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmZpcnN0
RnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlTGlu
ZVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2xvc2VMaW5lRW5k
aW5nQW5kQWRqdXN0UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpz
cGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGlu
ZUxheW91dDo6Y3JlYXRlVGV4dFJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxh
eW91dDo6dXBkYXRlTGluZUNvbnN0cmFpbnMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVy
YXRvci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6U3R5bGU6OlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnRJdGVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6bmV4
dFRleHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6dGV4dFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxp
bmVMYXlvdXQ6Om5leHRCcmVha2FibGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6ZmluZE5leHRCcmVha2FibGVQb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpmaW5kTmV4dE5vbldo
aXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdt
ZW50SXRlcmF0b3I6OmZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpydW5XaWR0aCk6
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRv
ci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHNJdGVyYXRvci5oLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxh
eW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6VGV4dEZyYWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OmVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojp0eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OmlzQ29s
bGFwc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OmlzQnJlYWthYmxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6Omlz
RW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50
SXRlcmF0b3I6OnN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpzZWdtZW50Rm9yUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6
c3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50
SXRlcmF0b3I6OmNoYXJhY3RlckF0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjppc0xpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6aXNFbmQpOgorCisyMDE1
LTAyLTAyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKICAgICAgICAgU2ltcGxl
IGxpbmUgbGF5b3V0OiB1c2Ugc3RkOjp1cHBlcl9ib3VuZCBpbiBzcGxpdEZyYWdtZW50VG9GaXRM
aW5lKCkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MTE0NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJv
agppbmRleCA5NDNhMzU1Li5kMTYwNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAgLTExNTgyLDcgKzExNTgyLDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTZWxlY3Rpb25TdWJ0cmVlUm9vdC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxheW91dC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxh
eW91dEZsb3dDb250ZW50cy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5k
ZXJpbmdcU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcCIgLz4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdt
ZW50SXRlcmF0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50U3R5bGUuY3BwIiAvPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5m
aWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5m
aWx0ZXJzCmluZGV4IDc2YWM1NmEuLjZkOWMzMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTY3NzIsNyAr
Njc3Miw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGlu
ZUxheW91dEZsb3dDb250ZW50cy5jcHAiPgogICAgICAgPEZpbHRlcj5yZW5kZXJpbmc8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwIj4KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRl
cmF0b3IuY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5jcHAiPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGQwNGIwNDkuLmVjMmQ4YzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwOTQsOCAr
MjA5NCw4IEBACiAJCTU4MDM3MTYxMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODAzNzE1RjFBNjZG
MDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICovOyB9OwogCQk1ODAzNzE2MjFBNjZGMDBBMDBC
QUY1MTkgLyogQ2xpcFJlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU4MDM3MTYwMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU4MDM3MTY0MUE2NkYx
RDMwMEJBRjUxOSAvKiBMYXllckZyYWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1ODAzNzE2MzFBNjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJGcmFn
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTU4MkNCMDUzMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRz
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU4MkNCMDUyMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRz
SXRlcmF0b3IuaCAqLzsgfTsKLQkJNTgyQ0IwNTUxQTc4QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODJDQjA1NDFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxl
TGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcCAqLzsgfTsKKwkJNTgyQ0IwNTMxQTc4
QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgyQ0IwNTIxQTc4
QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oICov
OyB9OworCQk1ODJDQjA1NTFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRG
cmFnbWVudEl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU4MkNCMDU0MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4
dEZyYWdtZW50SXRlcmF0b3IuY3BwICovOyB9OwogCQk1ODVENkRGQzFBMTUzNTU2MDBGQTRGMTIg
LyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4NUQ2REZCMUExNTM1NTYwMEZBNEYxMiAvKiBTaW1wbGVM
aW5lTGF5b3V0UmVzb2x2ZXIuY3BwICovOyB9OwogCQk1ODVENkUwMzFBMUE3OTJFMDBGQTRGMTIg
LyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODVENkUwMTFBMUE3OTJFMDBGQTRGMTIgLyogU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHAgKi87IH07CiAJCTU4NUQ2RTA0MUExQTc5MkUw
MEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIg
LyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oICovOyB9OwpAQCAtOTIyOCw4ICs5MjI4
LDggQEAKIAkJNTgwMzcxNUYxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsaXBSZWN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTgwMzcxNjAxQTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBSZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU4MDM3MTYzMUE2NkYxRDMwMEJBRjUxOSAvKiBMYXllckZyYWdt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheWVyRnJhZ21lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTgyQ0IwNTIxQTc4QTE0QjAwQUZGQ0M0IC8q
IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTgyQ0IwNTQxQTc4QTJCMjAwQUZGQ0M0IC8q
IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1ODJDQjA1MjFBNzhBMTRCMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1ODJDQjA1NDFBNzhBMkIyMDBB
RkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21l
bnRJdGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4NUQ2REZCMUEx
NTM1NTYwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTg1RDZFMDExQTFBNzkyRTAwRkE0RjEyIC8q
IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4NUQ2RTAyMUExQTc5MkUwMEZBNEYxMiAvKiBTaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIyNTk2LDggKzIyNTk2LDggQEAKIAkJCQlFNEM5MUEwRDE4MDIzNDMxMDBBMTdGNkQg
LyogVGV4dFBhaW50U3R5bGUuaCAqLywKIAkJCQkzN0ZDOTZEQTExMDRFRDcxMDAzRTFGQUQgLyog
VHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8sCiAJCQkJQkNBMjU3MTQxMjkzQzAxMDAw
N0EyNjNEIC8qIFZlcnRpY2FsUG9zaXRpb25DYWNoZS5oICovLAotCQkJCTU4MkNCMDUyMUE3OEEx
NEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCAqLywK
LQkJCQk1ODJDQjA1NDFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50c0l0ZXJhdG9yLmNwcCAqLywKKwkJCQk1ODJDQjA1MjFBNzhBMTRCMDBBRkZDQzQgLyogU2lt
cGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggKi8sCisJCQkJNTgyQ0IwNTQxQTc4
QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IHJlbmRlcmluZzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC0yMzUzNyw3ICsyMzUzNyw3IEBACiAJCQkJMzc5RTYxQ0MxMjZDQTVDNDAwQjYzRThE
IC8qIEJhc2VDaGVja2FibGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1RTBDNjVD
MTY0M0M0MkMwMEQ2Q0I2OSAvKiBCYXNlQ2hvb3Nlck9ubHlEYXRlQW5kVGltZUlucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzMzRUU1QzUxNEZCNDk2MTAwMDIwOTVBIC8qIEJhc2VDbGlj
a2FibGVXaXRoS2V5SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1ODJDQjA1MzFBNzhB
MTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxh
eW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTlDOTYwMDEy
NTVCMjNGMDAwNjIzQzAgLyogQmFzZURhdGVBbmRUaW1lSW5wdXRUeXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNTVCM0RBRTEyNTFGMTJEMDAzRUYyNjkgLyogQmFzZVRleHRJbnB1dFR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUZCRDZBRjhBMTVFRjI1REYwMDhCNzExMCAvKiBCYXNpY1NoYXBl
RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTI5NDk4LDcgKzI5NDk4LDcgQEAKIAkJCQlC
QzI0NDFDNDBFOEI2NUQwMDA1NTMyMEYgLyogU2Nyb2xsVmlldy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNDUzOTA0NTBFQUZENjM3MDAzNjk1QzggLyogU2Nyb2xsVmlld0lPUy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1t
IGluIFNvdXJjZXMgKi8sCi0JCQkJNTgyQ0IwNTUxQTc4QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1ODJD
QjA1NTFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzREQxMTI1MUYxMkQwMDNFRjI2OSAvKiBT
ZWFyY2hJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RjM2RUExNDY4NjIyNTAw
NUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0QwRTBG
QTBFOTcyQzM1MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKaW5kZXggYWJh
NDhiNi4uNjBkMDBmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0LmNwcApAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVu
dHMuaCIKLSNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCIK
KyNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCIKICNpbmNs
dWRlICJTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2lu
Y2x1ZGUgIlRleHRQYWludFN0eWxlLmgiCkBAIC0yMzEsMTggKzIzMSwxOCBAQCBjbGFzcyBMaW5l
U3RhdGUgewogcHVibGljOgogICAgIHZvaWQgc2V0QXZhaWxhYmxlV2lkdGgoZmxvYXQgd2lkdGgp
IHsgbV9hdmFpbGFibGVXaWR0aCA9IHdpZHRoOyB9CiAgICAgdm9pZCBzZXRMb2dpY2FsTGVmdE9m
ZnNldChmbG9hdCBvZmZzZXQpIHsgbV9sb2dpY2FsTGVmdE9mZnNldCA9IG9mZnNldDsgfQotICAg
IHZvaWQgc2V0T3ZlcmZsb3dlZEZyYWdtZW50KGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50KSB7IG1fb3ZlcmZsb3dlZEZyYWdtZW50ID0gZnJhZ21lbnQ7
IH0KKyAgICB2b2lkIHNldE92ZXJmbG93ZWRGcmFnbWVudChjb25zdCBUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkgeyBtX292ZXJmbG93ZWRGcmFnbWVudCA9IGZy
YWdtZW50OyB9CiAKICAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
YXZhaWxhYmxlV2lkdGg7IH0KICAgICBmbG9hdCBsb2dpY2FsTGVmdE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9naWNhbExlZnRPZmZzZXQ7IH0KLSAgICBjb25zdCBGbG93Q29udGVudHNJdGVy
YXRvcjo6VGV4dEZyYWdtZW50JiBvdmVyZmxvd2VkRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBt
X292ZXJmbG93ZWRGcmFnbWVudDsgfQorICAgIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQmIG92ZXJmbG93ZWRGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZs
b3dlZEZyYWdtZW50OyB9CiAgICAgYm9vbCBoYXNUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aDsgfQogICAgIGJvb2wgaXNXaGl0ZXNw
YWNlT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggJiYgbV9y
dW5zV2lkdGggPT0gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQogICAgIGJvb2wgZml0cyhm
bG9hdCBleHRyYSkgY29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aCA+PSBtX3J1bnNXaWR0
aCArIGV4dHJhOyB9CiAgICAgYm9vbCBmaXJzdENoYXJhY3RlckZpdHMoKSBjb25zdCB7IHJldHVy
biBtX2ZpcnN0Q2hhcmFjdGVyRml0czsgfQogICAgIGZsb2F0IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9ydW5zV2lkdGg7IH0KIAotICAgIHZvaWQgYXBwZW5kRnJhZ21lbnQoY29uc3QgRmxvd0Nv
bnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIExheW91dDo6UnVuVmVjdG9y
JiBydW5zKQorICAgIHZvaWQgYXBwZW5kRnJhZ21lbnQoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIExheW91dDo6UnVuVmVjdG9yJiBydW5zKQogICAg
IHsKICAgICAgICAgLy8gQWRqdXN0IGVuZCBwb3NpdGlvbiB3aGlsZSBjb2xsYXBzaW5nLgogICAg
ICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IGZyYWdtZW50LmlzQ29sbGFwc2VkKCkgPyBmcmFn
bWVudC5zdGFydCgpICsgMSA6IGZyYWdtZW50LmVuZCgpOwpAQCAtMjU4LDcgKzI1OCw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9jcmVhdGVOZXdSdW4gPSBmcmFnbWVudC5pc0NvbGxhcHNlZCgpOwog
ICAgICAgICBtX3J1bnNXaWR0aCArPSBmcmFnbWVudC53aWR0aCgpOwogCi0gICAgICAgIGlmIChm
cmFnbWVudC50eXBlKCkgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hp
dGVzcGFjZSkgeworICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKICAgICAgICAgICAgIG1fdHJhaWxp
bmdXaGl0ZXNwYWNlTGVuZ3RoICs9IGVuZFBvc2l0aW9uIC0gZnJhZ21lbnQuc3RhcnQoKTsKICAg
ICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggKz0gZnJhZ21lbnQud2lkdGgoKTsK
ICAgICAgICAgfSBlbHNlIHsKQEAgLTI4Nyw3ICsyODcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGZsb2F0IG1fYXZhaWxhYmxlV2lkdGggeyAwIH07CiAgICAgZmxvYXQgbV9sb2dpY2FsTGVm
dE9mZnNldCB7IDAgfTsKLSAgICBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IG1f
b3ZlcmZsb3dlZEZyYWdtZW50OworICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQgbV9vdmVyZmxvd2VkRnJhZ21lbnQ7CiAgICAgZmxvYXQgbV9ydW5zV2lkdGggeyAwIH07CiAg
ICAgYm9vbCBtX2NyZWF0ZU5ld1J1biB7IHRydWUgfTsKICAgICBmbG9hdCBtX3RyYWlsaW5nV2hp
dGVzcGFjZVdpZHRoIHsgMCB9OyAvLyBVc2UgdGhpcyB0byByZW1vdmUgdHJhaWxpbmcgd2hpdGVz
cGFjZSB3aXRob3V0IHJlLW1lc3VyaW5nIHRoZSB0ZXh0LgpAQCAtMzE3LDIxICszMTcsMjEgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2ZyYWdtZW50SW5kZXggeyAwIH07CiB9OwogCi1zdGF0
aWMgRnJhZ21lbnRGb3J3YXJkSXRlcmF0b3IgYmVnaW4oY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0
b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQpICB7IHJldHVybiBGcmFnbWVudEZvcndhcmRJdGVy
YXRvcihmcmFnbWVudC5zdGFydCgpKTsgfQotc3RhdGljIEZyYWdtZW50Rm9yd2FyZEl0ZXJhdG9y
IGVuZChjb25zdCBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkg
IHsgcmV0dXJuIEZyYWdtZW50Rm9yd2FyZEl0ZXJhdG9yKGZyYWdtZW50LmVuZCgpKTsgfQorc3Rh
dGljIEZyYWdtZW50Rm9yd2FyZEl0ZXJhdG9yIGJlZ2luKGNvbnN0IFRleHRGcmFnbWVudEl0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSAgeyByZXR1cm4gRnJhZ21lbnRGb3J3YXJkSXRl
cmF0b3IoZnJhZ21lbnQuc3RhcnQoKSk7IH0KK3N0YXRpYyBGcmFnbWVudEZvcndhcmRJdGVyYXRv
ciBlbmQoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQp
ICB7IHJldHVybiBGcmFnbWVudEZvcndhcmRJdGVyYXRvcihmcmFnbWVudC5lbmQoKSk7IH0KIAot
c3RhdGljIGJvb2wgcHJlV3JhcChjb25zdCBGbG93Q29udGVudHNJdGVyYXRvcjo6U3R5bGUmIHN0
eWxlKQorc3RhdGljIGJvb2wgcHJlV3JhcChjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6U3R5
bGUmIHN0eWxlKQogewogICAgIHJldHVybiBzdHlsZS53cmFwTGluZXMgJiYgIXN0eWxlLmNvbGxh
cHNlV2hpdGVzcGFjZTsKIH0KICAgICAKLXN0YXRpYyB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVz
cGFjZShMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIGNvbnN0
IEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKK3N0YXRpYyB2b2lk
IHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5b3V0OjpS
dW5WZWN0b3ImIHJ1bnMsIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJ
dGVyYXRvcikKIHsKICAgICBpZiAoIWxpbmVTdGF0ZS5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFJlbW92ZSBjb2xsYXBzZWQgd2hpdGVzcGFj
ZSwgb3Igbm9uLWNvbGxhcHNlZCBwcmUtd3JhcCB3aGl0ZXNwYWNlLCB1bmxlc3MgaXQncyB0aGUg
b25seSBjb250ZW50IG9uIHRoZSBsaW5lIC1zbyByZW1vdmluZyB0aGUgd2hpdGVzYXBjZSB3b3Vs
ZCBwcm9kdWNlIGFuIGVtcHR5IGxpbmUuCi0gICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93Q29u
dGVudHNJdGVyYXRvci5zdHlsZSgpOworICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gdGV4dEZyYWdt
ZW50SXRlcmF0b3Iuc3R5bGUoKTsKICAgICBib29sIGNvbGxhcHNlV2hpdGVzcGFjZSA9IHN0eWxl
LmNvbGxhcHNlV2hpdGVzcGFjZSB8IHByZVdyYXAoc3R5bGUpOwogICAgIGlmICghY29sbGFwc2VX
aGl0ZXNwYWNlKQogICAgICAgICByZXR1cm47CkBAIC0zNTEsNTMgKzM1MSw1MyBAQCBzdGF0aWMg
dm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIExp
bmVTdGF0ZSYgbGluZSkKICAgICBsaW5lLnNldEF2YWlsYWJsZVdpZHRoKHN0ZDo6bWF4PGZsb2F0
PigwLCBsb2dpY2FsUmlnaHRPZmZzZXQgLSBsaW5lLmxvZ2ljYWxMZWZ0T2Zmc2V0KCkpKTsKIH0K
IAotc3RhdGljIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgc3BsaXRGcmFnbWVu
dFRvRml0TGluZShGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudFRv
U3BsaXQsIGZsb2F0IGF2YWlsYWJsZVdpZHRoLCBib29sIGtlZXBBdExlYXN0T25lQ2hhcmFjdGVy
LCBjb25zdCBGbG93Q29udGVudHNJdGVyYXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCitzdGF0
aWMgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBzcGxpdEZyYWdtZW50VG9GaXRM
aW5lKFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50VG9TcGxpdCwg
ZmxvYXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wga2VlcEF0TGVhc3RPbmVDaGFyYWN0ZXIsIGNvbnN0
IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRvcikKIHsKICAgICAvLyBG
SVhNRTogYWRkIHN1cnJvZ2F0ZSBwYWlyIHN1cHBvcnQuCiAgICAgdW5zaWduZWQgc3RhcnQgPSBm
cmFnbWVudFRvU3BsaXQuc3RhcnQoKTsKLSAgICBhdXRvIGl0ID0gc3RkOjp1cHBlcl9ib3VuZChi
ZWdpbihmcmFnbWVudFRvU3BsaXQpLCBlbmQoZnJhZ21lbnRUb1NwbGl0KSwgYXZhaWxhYmxlV2lk
dGgsIFsmZmxvd0NvbnRlbnRzSXRlcmF0b3IsIHN0YXJ0XShmbG9hdCBhdmFpbGFibGVXaWR0aCwg
dW5zaWduZWQgaW5kZXgpIHsKKyAgICBhdXRvIGl0ID0gc3RkOjp1cHBlcl9ib3VuZChiZWdpbihm
cmFnbWVudFRvU3BsaXQpLCBlbmQoZnJhZ21lbnRUb1NwbGl0KSwgYXZhaWxhYmxlV2lkdGgsIFsm
dGV4dEZyYWdtZW50SXRlcmF0b3IsIHN0YXJ0XShmbG9hdCBhdmFpbGFibGVXaWR0aCwgdW5zaWdu
ZWQgaW5kZXgpIHsKICAgICAgICAgLy8gRklYTUU6IHVzZSB0aGUgYWN0dWFsIGxlZnQgcG9zaXRp
b24gb2YgdGhlIGxpbmUgKGluc3RlYWQgb2YgMCkgdG8gY2FsY3VsYXRlZCB3aWR0aC4gSXQgbWln
aHQgZ2l2ZSBmYWxzZSB3aWR0aCBmb3IgdGFiIGNoYXJhY3RlcnMuCi0gICAgICAgIHJldHVybiBh
dmFpbGFibGVXaWR0aCA8IGZsb3dDb250ZW50c0l0ZXJhdG9yLnRleHRXaWR0aChzdGFydCwgaW5k
ZXggKyAxLCAwKTsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVdpZHRoIDwgdGV4dEZyYWdtZW50
SXRlcmF0b3IudGV4dFdpZHRoKHN0YXJ0LCBpbmRleCArIDEsIDApOwogICAgIH0pOwogICAgIHVu
c2lnbmVkIHNwbGl0UG9zaXRpb24gPSAoKml0KTsKICAgICBpZiAoa2VlcEF0TGVhc3RPbmVDaGFy
YWN0ZXIgJiYgc3BsaXRQb3NpdGlvbiA9PSBmcmFnbWVudFRvU3BsaXQuc3RhcnQoKSkKICAgICAg
ICAgKytzcGxpdFBvc2l0aW9uOwotICAgIHJldHVybiBmcmFnbWVudFRvU3BsaXQuc3BsaXQoc3Bs
aXRQb3NpdGlvbiwgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOworICAgIHJldHVybiBmcmFnbWVudFRv
U3BsaXQuc3BsaXQoc3BsaXRQb3NpdGlvbiwgdGV4dEZyYWdtZW50SXRlcmF0b3IpOwogfQogCi1z
dGF0aWMgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBmaXJzdEZyYWdtZW50KEZs
b3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvciwgY29uc3QgTGluZVN0YXRl
JiBwcmV2aW91c0xpbmUpCitzdGF0aWMgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVu
dCBmaXJzdEZyYWdtZW50KFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRv
ciwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUpCiB7CiAgICAgLy8gSGFuZGxlIG92ZXJm
bG93ZWQgZnJhZ21lbnQgZnJvbSBwcmV2aW91cyBsaW5lLgotICAgIEZsb3dDb250ZW50c0l0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQgZmlyc3RGcmFnbWVudChwcmV2aW91c0xpbmUub3ZlcmZsb3dlZEZy
YWdtZW50KCkpOwotICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZmxvd0NvbnRlbnRzSXRlcmF0b3Iu
c3R5bGUoKTsKKyAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50IGZpcnN0RnJh
Z21lbnQocHJldmlvdXNMaW5lLm92ZXJmbG93ZWRGcmFnbWVudCgpKTsKKyAgICBjb25zdCBhdXRv
JiBzdHlsZSA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCk7CiAKICAgICBpZiAoZmlyc3RG
cmFnbWVudC5pc0VtcHR5KCkpCi0gICAgICAgIGZpcnN0RnJhZ21lbnQgPSBmbG93Q29udGVudHNJ
dGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCk7CisgICAgICAgIGZpcnN0RnJhZ21lbnQgPSB0ZXh0
RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IC8vIFNwZWNpYWwgb3ZlcmZsb3cgcHJlLXdyYXAgd2hpdGVzcGFjZSBoYW5kbGluZzogaWdub3Jl
IHRoZSBvdmVyZmxvd2VkIHdoaXRlc3BhY2UgaWYgd2UgbWFuYWdlZCB0byBmaXQgYXQgbGVhc3Qg
b25lIGNoYXJhY3RlciBvbiB0aGUgcHJldmlvdXMgbGluZS4KICAgICAgICAgLy8gV2hlbiB0aGUg
bGluZSBpcyB0b28gc2hvcnQgdG8gZml0IG9uZSBjaGFyYWN0ZXIgKHRob3VnaHQgaXQgc3RpbGwg
c3RheXMgb24gdGhlIGxpbmUpIHdlIGNvbnRpbnVlIHdpdGggdGhlIG92ZXJmbG93IHdoaXRlc3Bh
Y2UgY29udGVudCBvbiB0aGlzIGxpbmUuCi0gICAgICAgIGlmIChmaXJzdEZyYWdtZW50LnR5cGUo
KSA9PSBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlICYmIHBy
ZVdyYXAoc3R5bGUpICYmIHByZXZpb3VzTGluZS5maXJzdENoYXJhY3RlckZpdHMoKSkgewotICAg
ICAgICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLm5leHRUZXh0RnJh
Z21lbnQoKTsKKyAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgJiYgcHJlV3JhcChzdHlsZSkgJiYg
cHJldmlvdXNMaW5lLmZpcnN0Q2hhcmFjdGVyRml0cygpKSB7CisgICAgICAgICAgICBmaXJzdEZy
YWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOwogICAgICAg
ICAgICAgLy8gSWYgc2tpcHBpbmcgdGhlIHdoaXRlc3BhY2UgcHV0cyB1cyBvbiBhIGhhcmQgbmV3
bGluZSwgc2tpcCB0aGUgbmV3bGluZSB0b28gYXMgd2UgYWxyZWFkeSB3cmFwcGVkIHRoZSBsaW5l
LgotICAgICAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSgpID09IEZsb3dDb250ZW50c0l0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaykKLSAgICAgICAgICAgICAgICBmaXJzdEZy
YWdtZW50ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOworICAgICAg
ICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaykKKyAgICAgICAgICAgICAgICBmaXJzdEZyYWdtZW50ID0g
dGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBza2lwIHRoZSBsZWFkaW5nIHdoaXRlc3Bh
Y2UuCi0gICAgaWYgKHN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSAmJiBmaXJzdEZyYWdtZW50LnR5
cGUoKSA9PSBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlKQot
ICAgICAgICBmaXJzdEZyYWdtZW50ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFn
bWVudCgpOworICAgIGlmIChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgZmlyc3RGcmFnbWVu
dC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFj
ZSkKKyAgICAgICAgZmlyc3RGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLm5leHRUZXh0
RnJhZ21lbnQoKTsKICAgICByZXR1cm4gZmlyc3RGcmFnbWVudDsKIH0KIAotc3RhdGljIGJvb2wg
Y3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3Vz
TGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93
Q29udGVudHNJdGVyYXRvcikKK3N0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYg
bGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91dDo6UnVuVmVjdG9yJiBy
dW5zLCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IpCiB7Ci0gICAg
Y29uc3QgYXV0byYgc3R5bGUgPSBmbG93Q29udGVudHNJdGVyYXRvci5zdHlsZSgpOworICAgIGNv
bnN0IGF1dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKICAgICBib29s
IGxpbmVDYW5CZVdyYXBwZWQgPSBzdHlsZS53cmFwTGluZXMgfHwgc3R5bGUuYnJlYWtXb3JkT25P
dmVyZmxvdzsKLSAgICBhdXRvIGZyYWdtZW50ID0gZmlyc3RGcmFnbWVudChmbG93Q29udGVudHNJ
dGVyYXRvciwgcHJldmlvdXNMaW5lKTsKLSAgICB3aGlsZSAoZnJhZ21lbnQudHlwZSgpICE9IEZs
b3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpIHsKKyAgICBhdXRv
IGZyYWdtZW50ID0gZmlyc3RGcmFnbWVudCh0ZXh0RnJhZ21lbnRJdGVyYXRvciwgcHJldmlvdXNM
aW5lKTsKKyAgICB3aGlsZSAoZnJhZ21lbnQudHlwZSgpICE9IFRleHRGcmFnbWVudEl0ZXJhdG9y
OjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpIHsKICAgICAgICAgLy8gSGFyZCBsaW5lYnJlYWsu
Ci0gICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRl
eHRGcmFnbWVudDo6TGluZUJyZWFrKSB7CisgICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0g
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6TGluZUJyZWFrKSB7CiAgICAgICAg
ICAgICAvLyBBZGQgdGhlIG5ldyBsaW5lIGZyYWdtZW50IG9ubHkgaWYgdGhlcmUncyBub3RoaW5n
IG9uIHRoZSBsaW5lLiAob3RoZXJ3aXNlIHRoZSBleHRyYSBuZXcgbGluZSBjaGFyYWN0ZXIgd291
bGQgc2hvdyB1cCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50LikKICAgICAgICAgICAgIGlmICgh
bGluZS53aWR0aCgpKQogICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kRnJhZ21lbnQoZnJhZ21l
bnQsIHJ1bnMpOwpAQCAtNDExLDEwICs0MTEsMTAgQEAgc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1
bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3UK
ICAgICAgICAgICAgIC8vIDQuIE5vbi13aGl0ZXNwYWNlIGZyYWdtZW50IHdoZW4gdGhlcmUncyBh
bHJlYWR5IGFub3RoZXIgZnJhZ21lbnQgb24gdGhlIGxpbmUgZ2V0cyBwdXNoZWQgdG8gdGhlIG5l
eHQgbGluZS4KICAgICAgICAgICAgIGJvb2wgZW1wdHlMaW5lID0gIWxpbmUud2lkdGgoKTsKICAg
ICAgICAgICAgIC8vIFdoaXRlc3BhY2UgZnJhZ21lbnQuCi0gICAgICAgICAgICBpZiAoZnJhZ21l
bnQudHlwZSgpID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3Bh
Y2UpIHsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRl
cmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgewogICAgICAgICAgICAgICAgIGlmICgh
c3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNwbGl0
IHRoZSBmcmFnbWVudDsgKG1vZGlmaWVkKWZyYWdtZW50IHN0YXlzIG9uIHRoaXMgbGluZSwgb3Zl
cmZsb3dlZEZyYWdtZW50IGlzIHB1c2hlZCB0byBuZXh0IGxpbmUuCi0gICAgICAgICAgICAgICAg
ICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJh
Z21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCBm
bG93Q29udGVudHNJdGVyYXRvcikpOworICAgICAgICAgICAgICAgICAgICBsaW5lLnNldE92ZXJm
bG93ZWRGcmFnbWVudChzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdtZW50LCBsaW5lLmF2YWls
YWJsZVdpZHRoKCkgLSBsaW5lLndpZHRoKCksIGVtcHR5TGluZSwgdGV4dEZyYWdtZW50SXRlcmF0
b3IpKTsKICAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRGcmFnbWVudChmcmFnbWVudCwg
cnVucyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIFdoZW4gd2hpdGVz
cGFjZSBjb2xsYXBzZSBpcyBvbiwgd2hpdGVzcGFjZSB0aGF0IGRvZXNuJ3QgZml0IGlzIHNpbXBs
eSBza2lwcGVkLgpAQCAtNDIzLDcgKzQyMyw3IEBAIHN0YXRpYyBib29sIGNyZWF0ZUxpbmVSdW5z
KExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91CiAg
ICAgICAgICAgICAvLyBOb24td2hpdGVzcGFjZSBmcmFnbWVudC4gKCFzdHlsZS53cmFwTGluZXM6
IGJ1ZzEzODEwMihwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvcikKICAgICAgICAgICAgIGlmICgo
ZW1wdHlMaW5lICYmIHN0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpIHx8ICFzdHlsZS53cmFwTGlu
ZXMpIHsKICAgICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21lbnQ7IChtb2RpZmllZClm
cmFnbWVudCBzdGF5cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFnbWVudCBpcyBwdXNoZWQg
dG8gbmV4dCBsaW5lLgotICAgICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50
KHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAt
IGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVudHNJdGVyYXRvcikpOworICAgICAg
ICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KHNwbGl0RnJhZ21lbnRUb0ZpdExp
bmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGxpbmUud2lkdGgoKSwgZW1wdHlM
aW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcikpOwogICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5k
RnJhZ21lbnQoZnJhZ21lbnQsIHJ1bnMpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQpAQCAtNDM4LDIxICs0MzgsMjEgQEAgc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMo
TGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3UKICAg
ICAgICAgfQogICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50KGZyYWdtZW50LCBydW5zKTsKICAg
ICAgICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0IGZyYWdtZW50LgotICAgICAgICBmcmFnbWVudCA9
IGZsb3dDb250ZW50c0l0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQobGluZS53aWR0aCgpKTsKKyAg
ICAgICAgZnJhZ21lbnQgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KGxp
bmUud2lkdGgoKSk7CiAgICAgfQotICAgIHJldHVybiBmcmFnbWVudC50eXBlKCkgPT0gRmxvd0Nv
bnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCAmJiBsaW5lLm92ZXJmbG93
ZWRGcmFnbWVudCgpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gZnJhZ21lbnQudHlwZSgpID09IFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQgJiYgbGluZS5vdmVy
Zmxvd2VkRnJhZ21lbnQoKS5pc0VtcHR5KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsb3NlTGluZUVu
ZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6OlJ1blZlY3RvciYgcnVu
cywgdW5zaWduZWQgcHJldmlvdXNSdW5Db3VudCwgdW5zaWduZWQmIGxpbmVDb3VudCwgY29uc3Qg
Rmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250ZW50c0l0ZXJhdG9yKQorc3RhdGljIHZvaWQg
Y2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxpbmUsIExheW91dDo6UnVu
VmVjdG9yJiBydW5zLCB1bnNpZ25lZCBwcmV2aW91c1J1bkNvdW50LCB1bnNpZ25lZCYgbGluZUNv
dW50LCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IpCiB7
CiAgICAgaWYgKHByZXZpb3VzUnVuQ291bnQgPT0gcnVucy5zaXplKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBBU1NFUlQocnVucy5zaXplKCkpOwotICAgIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFj
ZShsaW5lLCBydW5zLCBmbG93Q29udGVudHNJdGVyYXRvcik7CisgICAgcmVtb3ZlVHJhaWxpbmdX
aGl0ZXNwYWNlKGxpbmUsIHJ1bnMsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKICAgICBpZiAoIXJ1
bnMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gQWRqdXN0IHJ1bnMnIHBvc2l0aW9u
IGJ5IHRha2luZyBsaW5lJ3MgYWxpZ25tZW50IGludG8gYWNjb3VudC4KLSAgICBpZiAoZmxvYXQg
bGluZUxvZ2ljYWxMZWZ0ID0gY29tcHV0ZUxpbmVMZWZ0KGZsb3dDb250ZW50c0l0ZXJhdG9yLnN0
eWxlKCkudGV4dEFsaWduLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCksIGxpbmUud2lkdGgoKSwgbGlu
ZS5sb2dpY2FsTGVmdE9mZnNldCgpKSkgeworICAgIGlmIChmbG9hdCBsaW5lTG9naWNhbExlZnQg
PSBjb21wdXRlTGluZUxlZnQodGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKS50ZXh0QWxpZ24s
IGxpbmUuYXZhaWxhYmxlV2lkdGgoKSwgbGluZS53aWR0aCgpLCBsaW5lLmxvZ2ljYWxMZWZ0T2Zm
c2V0KCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHByZXZpb3VzUnVuQ291bnQ7IGkg
PCBydW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBydW5zW2ldLmxvZ2ljYWxMZWZ0ICs9
IGxpbmVMb2dpY2FsTGVmdDsKICAgICAgICAgICAgIHJ1bnNbaV0ubG9naWNhbFJpZ2h0ICs9IGxp
bmVMb2dpY2FsTGVmdDsKQEAgLTQ2Miw3ICs0NjIsNyBAQCBzdGF0aWMgdm9pZCBjbG9zZUxpbmVF
bmRpbmdBbmRBZGp1c3RSdW5zKExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1
bgogICAgICsrbGluZUNvdW50OwogfQogCi1zdGF0aWMgdm9pZCBzcGxpdFJ1bnNBdFJlbmRlcmVy
Qm91bmRhcnkoTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBjb25zdCBGbG93Q29udGVudHNJ
dGVyYXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCitzdGF0aWMgdm9pZCBzcGxpdFJ1bnNBdFJl
bmRlcmVyQm91bmRhcnkoTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBjb25zdCBUZXh0RnJh
Z21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IpCiB7CiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBwcm9iYWJseSBzcGxpdCBkdXJpbmcgcnVuIGNvbnN0cnVjdGlvbiBpbnN0ZWFkIG9m
IGFzIGEgc2VwYXJhdGUgcGFzcy4KICAgICBpZiAobGluZVJ1bnMuaXNFbXB0eSgpKQpAQCAtNDcx
LDEyICs0NzEsMTIgQEAgc3RhdGljIHZvaWQgc3BsaXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5KExh
eW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgY29uc3QgRmxvd0MKICAgICBkbyB7CiAgICAgICAg
IGNvbnN0IFJ1biYgcnVuID0gbGluZVJ1bnMuYXQocnVuSW5kZXgpOwogICAgICAgICBBU1NFUlQo
cnVuLnN0YXJ0ICE9IHJ1bi5lbmQpOwotICAgICAgICBhdXRvJiBzdGFydFNlZ21lbnQgPSBmbG93
Q29udGVudHNJdGVyYXRvci5zZWdtZW50Rm9yUG9zaXRpb24ocnVuLnN0YXJ0KTsKKyAgICAgICAg
YXV0byYgc3RhcnRTZWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc2VnbWVudEZvclBvc2l0
aW9uKHJ1bi5zdGFydCk7CiAgICAgICAgIGlmIChydW4uZW5kIDw9IHN0YXJ0U2VnbWVudC5lbmQp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gVGhpcyBydW4gb3ZlcmxhcHMgbXVs
dGlwbGUgcmVuZGVyZXJzLiBTcGxpdCBpdCB1cC4KICAgICAgICAgLy8gU3BsaXQgcnVuIGF0IHRo
ZSByZW5kZXJlcidzIGJvdW5kYXJ5IGFuZCBjcmVhdGUgYSBuZXcgcnVuIGZvciB0aGUgbGVmdCBz
aWRlLCB3aGlsZSB1c2UgdGhlIGN1cnJlbnQgcnVuIGFzIHRoZSByaWdodCBzaWRlLgotICAgICAg
ICBmbG9hdCBsb2dpY2FsUmlnaHRPZkxlZnRSdW4gPSBydW4ubG9naWNhbExlZnQgKyBmbG93Q29u
dGVudHNJdGVyYXRvci50ZXh0V2lkdGgocnVuLnN0YXJ0LCBzdGFydFNlZ21lbnQuZW5kLCBydW4u
bG9naWNhbExlZnQpOworICAgICAgICBmbG9hdCBsb2dpY2FsUmlnaHRPZkxlZnRSdW4gPSBydW4u
bG9naWNhbExlZnQgKyB0ZXh0RnJhZ21lbnRJdGVyYXRvci50ZXh0V2lkdGgocnVuLnN0YXJ0LCBz
dGFydFNlZ21lbnQuZW5kLCBydW4ubG9naWNhbExlZnQpOwogICAgICAgICBsaW5lUnVucy5pbnNl
cnQocnVuSW5kZXgsIFJ1bihydW4uc3RhcnQsIHN0YXJ0U2VnbWVudC5lbmQsIHJ1bi5sb2dpY2Fs
TGVmdCwgbG9naWNhbFJpZ2h0T2ZMZWZ0UnVuLCBmYWxzZSkpOwogICAgICAgICBSdW4mIHJpZ2h0
U2lkZVJ1biA9IGxpbmVSdW5zLmF0KHJ1bkluZGV4ICsgMSk7CiAgICAgICAgIHJpZ2h0U2lkZVJ1
bi5zdGFydCA9IHN0YXJ0U2VnbWVudC5lbmQ7CkBAIC00OTAsNyArNDkwLDcgQEAgc3RhdGljIHZv
aWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIFJlbmRlckJsb2NrRmxv
dyYgZmxvdywgdW5zaWcKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0RnJv
bUZsb3coZmxvdyk7CiAgICAgTGluZVN0YXRlIGxpbmU7CiAgICAgYm9vbCBpc0VuZE9mQ29udGVu
dCA9IGZhbHNlOwotICAgIEZsb3dDb250ZW50c0l0ZXJhdG9yIGZsb3dDb250ZW50c0l0ZXJhdG9y
ID0gRmxvd0NvbnRlbnRzSXRlcmF0b3IoZmxvdyk7CisgICAgVGV4dEZyYWdtZW50SXRlcmF0b3Ig
dGV4dEZyYWdtZW50SXRlcmF0b3IgPSBUZXh0RnJhZ21lbnRJdGVyYXRvcihmbG93KTsKIAogICAg
IGRvIHsKICAgICAgICAgZmxvdy5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVIZWlnaHQgKiBsaW5lQ291
bnQgKyBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKTsKQEAgLTQ5OCwxMiArNDk4LDEyIEBAIHN0YXRp
YyB2b2lkIGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9yJiBydW5zLCBSZW5kZXJCbG9j
a0Zsb3cmIGZsb3csIHVuc2lnCiAgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzUnVuQ291bnQgPSBy
dW5zLnNpemUoKTsKICAgICAgICAgbGluZSA9IExpbmVTdGF0ZSgpOwogICAgICAgICB1cGRhdGVM
aW5lQ29uc3RyYWlucyhmbG93LCBsaW5lKTsKLSAgICAgICAgaXNFbmRPZkNvbnRlbnQgPSBjcmVh
dGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMsIGZsb3dDb250ZW50c0l0ZXJhdG9y
KTsKLSAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhsaW5lLCBydW5zLCBwcmV2
aW91c1J1bkNvdW50LCBsaW5lQ291bnQsIGZsb3dDb250ZW50c0l0ZXJhdG9yKTsKKyAgICAgICAg
aXNFbmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMs
IHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKKyAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0
UnVucyhsaW5lLCBydW5zLCBwcmV2aW91c1J1bkNvdW50LCBsaW5lQ291bnQsIHRleHRGcmFnbWVu
dEl0ZXJhdG9yKTsKICAgICB9IHdoaWxlICghaXNFbmRPZkNvbnRlbnQpOwogCiAgICAgaWYgKGZs
b3cuZmlyc3RDaGlsZCgpICE9IGZsb3cubGFzdENoaWxkKCkpCi0gICAgICAgIHNwbGl0UnVuc0F0
UmVuZGVyZXJCb3VuZGFyeShydW5zLCBmbG93Q29udGVudHNJdGVyYXRvcik7CisgICAgICAgIHNw
bGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFyeShydW5zLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcik7CiB9
CiAKIHN0ZDo6dW5pcXVlX3B0cjxMYXlvdXQ+IGNyZWF0ZShSZW5kZXJCbG9ja0Zsb3cmIGZsb3cp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRl
eHRGcmFnbWVudEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCmluZGV4IDNhYmQ0ZjguLjllNWY2NjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4
dEZyYWdtZW50SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGbG93
Q29udGVudHNJdGVyYXRvci5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21l
bnRJdGVyYXRvci5oIgogCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAi
UmVuZGVyQ2hpbGRJdGVyYXRvci5oIgpAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewogCi1GbG93Q29udGVudHNJdGVyYXRv
cjo6U3R5bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK1RleHRGcmFnbWVudEl0
ZXJhdG9yOjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIDogZm9u
dChzdHlsZS5mb250Q2FzY2FkZSgpKQogICAgICwgdGV4dEFsaWduKHN0eWxlLnRleHRBbGlnbigp
KQogICAgICwgY29sbGFwc2VXaGl0ZXNwYWNlKHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKQpA
QCAtNDcsMTQgKzQ3LDE0IEBAIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpTdHlsZTo6U3R5bGUoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogfQogCi1GbG93Q29udGVudHNJdGVyYXRvcjo6Rmxv
d0NvbnRlbnRzSXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQorVGV4dEZyYWdt
ZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYg
ZmxvdykKICAgICA6IG1fZmxvd0NvbnRlbnRzKGZsb3cpCiAgICAgLCBtX2xpbmVCcmVha0l0ZXJh
dG9yKCgqbV9mbG93Q29udGVudHMuYmVnaW4oKSkudGV4dCwgZmxvdy5zdHlsZSgpLmxvY2FsZSgp
KQogICAgICwgbV9zdHlsZShmbG93LnN0eWxlKCkpCiB7CiB9CiAKLUZsb3dDb250ZW50c0l0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6Om5leHRUZXh0RnJhZ21lbnQo
ZmxvYXQgeFBvc2l0aW9uKQorVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBUZXh0
RnJhZ21lbnRJdGVyYXRvcjo6bmV4dFRleHRGcmFnbWVudChmbG9hdCB4UG9zaXRpb24pCiB7CiAg
ICAgLy8gQSBmcmFnbWVudCBjYW4gZWl0aGVyIGJlCiAgICAgLy8gMS4gbmV3IGxpbmUgY2hhcmFj
dGVyIHdoZW4gcHJlc2VydmVOZXdsaW5lIGlzIG9uIChub3QgY29uc2lkZXJlZCBhcyB3aGl0ZXNw
YWNlKSBvcgpAQCAtOTEsNyArOTEsNyBAQCBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpuZXh0VGV4dEZyYWdtZW50KGZsb2F0CiAgICAgcmV0
dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgdGV4dFdpZHRoKHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB4UG9zaXRpb24pLCBUZXh0RnJhZ21lbnQ6Ok5vbldo
aXRlc3BhY2UsIGZhbHNlLCBtX3N0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpOwogfQogCi1mbG9h
dCBGbG93Q29udGVudHNJdGVyYXRvcjo6dGV4dFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0CitmbG9hdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6
dGV4dFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNv
bnN0CiB7CiAgICAgY29uc3QgYXV0byYgZnJvbVNlZ21lbnQgPSBtX2Zsb3dDb250ZW50cy5zZWdt
ZW50Rm9yUG9zaXRpb24oZnJvbSk7CiAgICAgaWYgKChtX3N0eWxlLmZvbnQuaXNGaXhlZFBpdGNo
KCkgJiYgZnJvbVNlZ21lbnQuZW5kID49IHRvKSB8fCAoZnJvbSA9PSBmcm9tU2VnbWVudC5zdGFy
dCAmJiB0byA9PSBmcm9tU2VnbWVudC5lbmQpKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHN0YXRpYyB1
bnNpZ25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb24oTGF6eUxpbmVCcmVha0l0ZXJhdG9yJiBsaW5l
QnJlYWtJdGVyYXRvciwKICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uTm9uTG9vc2Vs
eTxDaGFyYWN0ZXJUeXBlLCBOQlNQQmVoYXZpb3I6Oklnbm9yZU5CU1A+KGxpbmVCcmVha0l0ZXJh
dG9yLCBjaGFyYWN0ZXJzLCBzZWdtZW50TGVuZ3RoLCBzZWdtZW50UG9zaXRpb24pOwogfQogCi11
bnNpZ25lZCBGbG93Q29udGVudHNJdGVyYXRvcjo6ZmluZE5leHRCcmVha2FibGVQb3NpdGlvbih1
bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK3Vuc2lnbmVkIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpm
aW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewogICAg
IHdoaWxlICghaXNFbmQocG9zaXRpb24pKSB7CiAgICAgICAgIGF1dG8mIHNlZ21lbnQgPSBtX2Zs
b3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOwpAQCAtMTQyLDcgKzE0Miw3
IEBAIHVuc2lnbmVkIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpmaW5kTmV4dEJyZWFrYWJsZVBvc2l0
aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgZmluZE5leHROb25XaGl0ZXNwYWNlKGNvbnN0IEZsb3dD
b250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlN0
eWxlJiBzdHlsZSwgdW5zaWduZWQmIHBvc2l0aW9uLCB1bnNpZ25lZCYgc3BhY2VDb3VudCkKK3N0
YXRpYyBib29sIGZpbmROZXh0Tm9uV2hpdGVzcGFjZShjb25zdCBGbG93Q29udGVudHM6OlNlZ21l
bnQmIHNlZ21lbnQsIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpTdHlsZSYgc3R5bGUsIHVu
c2lnbmVkJiBwb3NpdGlvbiwgdW5zaWduZWQmIHNwYWNlQ291bnQpCiB7CiAgICAgY29uc3QgYXV0
byogdGV4dCA9IHNlZ21lbnQudGV4dC5jaGFyYWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7CiAgICAg
Zm9yICg7IHBvc2l0aW9uIDwgc2VnbWVudC5lbmQ7ICsrcG9zaXRpb24pIHsKQEAgLTE1Nyw3ICsx
NTcsNyBAQCBzdGF0aWMgYm9vbCBmaW5kTmV4dE5vbldoaXRlc3BhY2UoY29uc3QgRmxvd0NvbnRl
bnRzOjpTZWdtZW50JiBzZWdtZW50LCBjb25zdCBGbAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dW5zaWduZWQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OmZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0
aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCYgc3BhY2VDb3VudCkgY29uc3QKK3Vuc2ln
bmVkIFRleHRGcmFnbWVudEl0ZXJhdG9yOjpmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbih1
bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQmIHNwYWNlQ291bnQpIGNvbnN0CiB7CiAgICAgRmxv
d0NvbnRlbnRzOjpJdGVyYXRvciBpdChtX2Zsb3dDb250ZW50cywgbV9mbG93Q29udGVudHMuc2Vn
bWVudEluZGV4Rm9yUG9zaXRpb24ocG9zaXRpb24pKTsKICAgICBmb3IgKGF1dG8gZW5kID0gbV9m
bG93Q29udGVudHMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTY5LDcgKzE2OSw3IEBA
IHVuc2lnbmVkIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3Np
dGlvbih1bnNpZ25lZCBwb3NpdGlvbiwKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+Ci1mbG9hdCBGbG93Q29udGVudHNJdGVyYXRvcjo6cnVuV2lkdGgoY29uc3QgU3RyaW5n
JiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25z
dAorZmxvYXQgVGV4dEZyYWdtZW50SXRlcmF0b3I6OnJ1bldpZHRoKGNvbnN0IFN0cmluZyYgdGV4
dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKIHsK
ICAgICBBU1NFUlQoZnJvbSA8PSB0byk7CiAgICAgaWYgKGZyb20gPT0gdG8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0
ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRG
cmFnbWVudEl0ZXJhdG9yLmgKaW5kZXggZTM0YmZlMS4uYmQyZjVhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZy
YWdtZW50SXRlcmF0b3IuaApAQCAtMjMsOCArMjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
c0l0ZXJhdG9yX2gKLSNkZWZpbmUgU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9y
X2gKKyNpZm5kZWYgU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yX2gKKyNkZWZp
bmUgU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yX2gKIAogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIgpA
QCAtMzYsOSArMzYsOSBAQCBjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiAKIG5hbWVzcGFjZSBTaW1w
bGVMaW5lTGF5b3V0IHsKIAotY2xhc3MgRmxvd0NvbnRlbnRzSXRlcmF0b3IgeworY2xhc3MgVGV4
dEZyYWdtZW50SXRlcmF0b3IgewogcHVibGljOgotICAgIEZsb3dDb250ZW50c0l0ZXJhdG9yKGNv
bnN0IFJlbmRlckJsb2NrRmxvdyYpOworICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYpOwogICAgIGNsYXNzIFRleHRGcmFnbWVudCB7CiAgICAgcHVibGljOgog
ICAgICAgICBlbnVtIFR5cGUgeyBDb250ZW50RW5kLCBMaW5lQnJlYWssIFdoaXRlc3BhY2UsIE5v
bldoaXRlc3BhY2UgfTsKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlz
QnJlYWthYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc0JyZWFrYWJsZTsgfQogCiAgICAgICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgPT0gZW5kKCk7IH0KLSAgICAgICAg
VGV4dEZyYWdtZW50IHNwbGl0KHVuc2lnbmVkIHNwbGl0UG9zaXRpb24sIGNvbnN0IEZsb3dDb250
ZW50c0l0ZXJhdG9yJik7CisgICAgICAgIFRleHRGcmFnbWVudCBzcGxpdCh1bnNpZ25lZCBzcGxp
dFBvc2l0aW9uLCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYpOwogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsKQEAgLTEwNSwxMyArMTA1LDEzIEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9wb3NpdGlvbiB7IDAgfTsKIH07CiAKLWlubGluZSBGbG93
Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0
RnJhZ21lbnQ6OnNwbGl0KHVuc2lnbmVkIHNwbGl0UG9zaXRpb24sIGNvbnN0IEZsb3dDb250ZW50
c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKK2lubGluZSBUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6VGV4dEZyYWdtZW50IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OnNw
bGl0KHVuc2lnbmVkIHNwbGl0UG9zaXRpb24sIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0
ZXh0RnJhZ21lbnRJdGVyYXRvcikKIHsKLSAgICBhdXRvIHVwZGF0ZUZyYWdtZW50UHJvcGVydGll
cyA9IFsmZmxvd0NvbnRlbnRzSXRlcmF0b3JdIChUZXh0RnJhZ21lbnQmIGZyYWdtZW50KQorICAg
IGF1dG8gdXBkYXRlRnJhZ21lbnRQcm9wZXJ0aWVzID0gWyZ0ZXh0RnJhZ21lbnRJdGVyYXRvcl0g
KFRleHRGcmFnbWVudCYgZnJhZ21lbnQpCiAgICAgewogICAgICAgICBmcmFnbWVudC5tX3dpZHRo
ID0gMDsKICAgICAgICAgaWYgKGZyYWdtZW50LnN0YXJ0KCkgIT0gZnJhZ21lbnQuZW5kKCkpCi0g
ICAgICAgICAgICBmcmFnbWVudC5tX3dpZHRoID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IudGV4dFdp
ZHRoKGZyYWdtZW50LnN0YXJ0KCksIGZyYWdtZW50LmVuZCgpLCAwKTsKKyAgICAgICAgICAgIGZy
YWdtZW50Lm1fd2lkdGggPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci50ZXh0V2lkdGgoZnJhZ21lbnQu
c3RhcnQoKSwgZnJhZ21lbnQuZW5kKCksIDApOwogICAgICAgICBpZiAoZnJhZ21lbnQuc3RhcnQo
KSArIDEgPiBmcmFnbWVudC5lbmQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZnJh
Z21lbnQubV9pc0NvbGxhcHNlZCA9IGZhbHNlOwpAQCAtMTI3LDIwICsxMjcsMjAgQEAgaW5saW5l
IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6
OlRleHRGcmFnbWVudDo6c3AKICAgICByZXR1cm4gbmV3RnJhZ21lbnQ7CiB9CiAKLWlubGluZSBV
Q2hhciBGbG93Q29udGVudHNJdGVyYXRvcjo6Y2hhcmFjdGVyQXQodW5zaWduZWQgcG9zaXRpb24p
IGNvbnN0CitpbmxpbmUgVUNoYXIgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmNoYXJhY3RlckF0KHVu
c2lnbmVkIHBvc2l0aW9uKSBjb25zdAogewogICAgIGF1dG8mIHNlZ21lbnQgPSBtX2Zsb3dDb250
ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOwogICAgIHJldHVybiBzZWdtZW50LnRl
eHRbcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0XTsKIH0KIAotaW5saW5lIGJvb2wgRmxvd0NvbnRl
bnRzSXRlcmF0b3I6OmlzTGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAoraW5saW5l
IGJvb2wgVGV4dEZyYWdtZW50SXRlcmF0b3I6OmlzTGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9u
KSBjb25zdAogewogICAgIGlmIChpc0VuZChwb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXR1cm4gbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyQXQocG9z
aXRpb24pID09ICdcbic7CiB9CiAKLWlubGluZSBib29sIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpp
c0VuZCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK2lubGluZSBib29sIFRleHRGcmFnbWVudEl0
ZXJhdG9yOjppc0VuZCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gcG9z
aXRpb24gPj0gbV9mbG93Q29udGVudHMubGVuZ3RoKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245913</attachid>
            <date>2015-02-02 16:29:16 -0800</date>
            <delta_ts>2015-02-02 19:08:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141177-20150202162924.patch</filename>
            <type>text/plain</type>
            <size>58937</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NTEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzlkYWY4OWFlNDdmYzdh
MTcwZTY1YmEwZWU2M2ZlYmRmZjEzNzIzMS4uYjcxNTJmNzc3YjBjM2Q5YjllOTdkMGM0ZDg1MGM5
YzAzOWUxMTM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYxIEBACiAyMDE1LTAyLTAyICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBSZW5hbWUgRmxvd0NvbnRlbnRzSXRlcmF0b3IgdG8gVGV4dEZyYWdtZW50SXRlcmF0b3IuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDExNzcKKwor
ICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBBbnR0aSBLb2l2aXN0bworCisgICAgICAgIEZsb3dD
b250ZW50c0l0ZXJhdG9yIGlzIGVhc3kgdG8gY29uZnVzZSB3aXRoIEZsb3dDb250ZW50czo6SXRl
cmF0b3IuCisgICAgICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yIHJlZmxlY3RzIHRoZSBmdW5jdGlv
bmFsaXR5IGJldHRlci4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2o6CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5m
aWx0ZXJzOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6OnNldE92ZXJmbG93ZWRGcmFnbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6Om92ZXJmbG93ZWRG
cmFnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lU3RhdGU6
OmFwcGVuZEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmJl
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmVXcmFwKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUxpbmVMYXlvdXQ6OnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpzcGxpdEZyYWdtZW50VG9GaXRMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmZpcnN0RnJhZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlTGluZVJ1bnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpzcGxpdFJ1bnNBdFJlbmRlcmVyQm91
bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y3JlYXRlVGV4dFJ1
bnMpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRl
cmF0b3IuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6U3R5bGU6OlN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0
RnJhZ21lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6bmV4dFRleHRGcmFnbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6dGV4dFdpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6Om5leHRCcmVha2FibGVQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRv
cjo6ZmluZE5leHRCcmVha2FibGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpmaW5kTmV4dE5vbldoaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OmZpbmROZXh0Tm9uV2hpdGVzcGFj
ZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFn
bWVudEl0ZXJhdG9yOjpydW5XaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5oLgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRG
cmFnbWVudDo6VGV4dEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OnN0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQ6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50Ojp0eXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQ6OmlzQ29sbGFwc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OmlzQnJlYWth
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0
ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OnN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjpzZWdtZW50Rm9yUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6VGV4dEZyYWdtZW50
SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6c3BsaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6VGV4dEZyYWdtZW50SXRlcmF0b3I6OmNoYXJhY3RlckF0KToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlRleHRGcmFnbWVudEl0ZXJhdG9yOjppc0xpbmVC
cmVhayk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6aXNFbmQpOgorCisyMDE1LTAyLTAyICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CisKICAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0OiB1c2Ugc3RkOjp1cHBlcl9ib3Vu
ZCBpbiBzcGxpdEZyYWdtZW50VG9GaXRMaW5lKCkKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTE0NgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGQw
ZmQxYjk4OGJiNWUyZDIyNmVkYmI4YzM1ZTI0YTRhYTI3NmRlOTcuLmJhZTdiZWE1MTEyOTJlNjM3
MmE3ZTljZDE0ZmQ3OGE5Y2Y0OTVmNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMzUxLDcg
KzIzNTEsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJlaGF2
aW9yLmNwcAogICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAogICAgIHJlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAotICAgIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwCisgICAgcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAKICAgICByZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dEZ1bmN0aW9ucy5jcHAKICAgICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29s
dmVyLmNwcAogICAgIHJlbmRlcmluZy9UZXh0QXV0b3NpemVyLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5kZXggZjg2MDAxODQwZWRhZTFl
ZTY4OTJmOGVkODg5YmYxOWYzN2JhYzc1ZS4uODQ3YTljZTEzNTdlNzgyM2RjZjM3ODJjZjQ4YmFj
MGE3ODZlZmNiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qCkBAIC0xMTU4OCw3ICsxMTU4OCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXQuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVu
dHMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxp
bmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1wbGVMaW5lTGF5
b3V0RnVuY3Rpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmlu
Z1xTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccmVuZGVyaW5nXFRleHRQYWludFN0eWxlLmNwcCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA2
ZDQwNWFjOTEwNjU4YzhkYTczNTFmOTFmOWU0MjIzNWZiNTkwYWQyLi43MzI4Y2U5MGQ1MjdhNjhh
MTQ4MjExZTdkNjQ3NWMxODVjOTJhYjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCkBAIC02NzY5LDcgKzY3Njks
NyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxpbmVMYXlv
dXRGbG93Q29udGVudHMuY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcCI+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9y
LmNwcCI+CiAgICAgICA8RmlsdGVyPnJlbmRlcmluZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxl
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXRG
dW5jdGlvbnMuY3BwIj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBkMDRiMDQ5MGUzMTdhNmQ5NmQyYmMzYjJjMGIyMmY4OGQyYTM2
NjhhLi5lYzJkOGM1Y2U5ODE0YmVmMmM5MDhiYWJkNGEwZjU4Zjk3ODU5MmY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDk0
LDggKzIwOTQsOCBAQAogCQk1ODAzNzE2MTFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgwMzcxNUYx
QTY2RjAwQTAwQkFGNTE5IC8qIENsaXBSZWN0LmNwcCAqLzsgfTsKIAkJNTgwMzcxNjIxQTY2RjAw
QTAwQkFGNTE5IC8qIENsaXBSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1ODAzNzE2MDFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1ODAzNzE2NDFB
NjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJGcmFnbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgwMzcxNjMxQTY2RjFEMzAwQkFGNTE5IC8qIExheWVy
RnJhZ21lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50c0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1ODJDQjA1MjFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50c0l0ZXJhdG9yLmggKi87IH07Ci0JCTU4MkNCMDU1MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTgyQ0IwNTQxQTc4QTJCMjAwQUZGQ0M0IC8qIFNp
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5jcHAgKi87IH07CisJCTU4MkNCMDUz
MUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MkNCMDUy
MUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3Iu
aCAqLzsgfTsKKwkJNTgyQ0IwNTUxQTc4QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRU
ZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1ODJDQjA1NDFBNzhBMkIyMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91
dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJNTg1RDZERkMxQTE1MzU1NjAwRkE0
RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODVENkRGQjFBMTUzNTU2MDBGQTRGMTIgLyogU2lt
cGxlTGluZUxheW91dFJlc29sdmVyLmNwcCAqLzsgfTsKIAkJNTg1RDZFMDMxQTFBNzkyRTAwRkE0
RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTg1RDZFMDExQTFBNzkyRTAwRkE0RjEyIC8q
IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwICovOyB9OwogCQk1ODVENkUwNDFBMUE3
OTJFMDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTg1RDZFMDIxQTFBNzkyRTAwRkE0
RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCAqLzsgfTsKQEAgLTkyMjgsOCAr
OTIyOCw4IEBACiAJCTU4MDM3MTVGMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbGlwUmVjdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4MDM3MTYwMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwUmVjdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1ODAzNzE2MzFBNjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJG
cmFnbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMYXllckZyYWdtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDUyMUE3OEExNEIwMEFGRkND
NCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU4MkNCMDU0MUE3OEEyQjIwMEFGRkND
NCAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0
ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTgyQ0IwNTIxQTc4QTE0
QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50
SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTgyQ0IwNTQxQTc4QTJC
MjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0VGV4dEZy
YWdtZW50SXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODVENkRG
QjFBMTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4NUQ2RTAxMUExQTc5MkUwMEZBNEYx
MiAvKiBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODVENkUwMjFBMUE3OTJFMDBGQTRGMTIgLyogU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMjU5Niw4ICsyMjU5Niw4IEBACiAJCQkJRTRDOTFBMEQxODAyMzQzMTAwQTE3
RjZEIC8qIFRleHRQYWludFN0eWxlLmggKi8sCiAJCQkJMzdGQzk2REExMTA0RUQ3MTAwM0UxRkFE
IC8qIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovLAogCQkJCUJDQTI1NzE0MTI5M0Mw
MTAwMDdBMjYzRCAvKiBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCAqLywKLQkJCQk1ODJDQjA1MjFB
NzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmgg
Ki8sCi0JCQkJNTgyQ0IwNTQxQTc4QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93
Q29udGVudHNJdGVyYXRvci5jcHAgKi8sCisJCQkJNTgyQ0IwNTIxQTc4QTE0QjAwQUZGQ0M0IC8q
IFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oICovLAorCQkJCTU4MkNCMDU0
MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3Iu
Y3BwICovLAogCQkJKTsKIAkJCXBhdGggPSByZW5kZXJpbmc7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjM1MzcsNyArMjM1MzcsNyBAQAogCQkJCTM3OUU2MUNDMTI2Q0E1QzQwMEI2
M0U4RCAvKiBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNUUw
QzY1QzE2NDNDNDJDMDBENkNCNjkgLyogQmFzZUNob29zZXJPbmx5RGF0ZUFuZFRpbWVJbnB1dFR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMzM0VFNUM1MTRGQjQ5NjEwMDAyMDk1QSAvKiBCYXNl
Q2xpY2thYmxlV2l0aEtleUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTgyQ0IwNTMx
QTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHNJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTgyQ0IwNTMxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxp
bmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU5Qzk2
MDAxMjU1QjIzRjAwMDYyM0MwIC8qIEJhc2VEYXRlQW5kVGltZUlucHV0VHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjU1QjNEQUUxMjUxRjEyRDAwM0VGMjY5IC8qIEJhc2VUZXh0SW5wdXRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGQkQ2QUY4QTE1RUYyNURGMDA4QjcxMTAgLyogQmFzaWNT
aGFwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQ5OCw3ICsyOTQ5OCw3IEBACiAJ
CQkJQkMyNDQxQzQwRThCNjVEMDAwNTUzMjBGIC8qIFNjcm9sbFZpZXcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTQ1MzkwNDUwRUFGRDYzNzAwMzY5NUM4IC8qIFNjcm9sbFZpZXdJT1MubW0gaW4g
U291cmNlcyAqLywKIAkJCQk5MzUzNjc2QjA5QUVEODhCMDBEMzVDRDYgLyogU2Nyb2xsVmlld01h
Yy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTU4MkNCMDU1MUE3OEEyQjIwMEFGRkNDNCAvKiBTaW1w
bGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NTgyQ0IwNTUxQTc4QTJCMjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0REMTEyNTFGMTJEMDAzRUYyNjkg
LyogU2VhcmNoSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NkYzNkVBMTQ2ODYy
MjUwMDVFOTNCNCAvKiBTZWN1cml0eUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNE
MEUwRkEwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luLmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCmluZGV4
IGFiYTQ4YjZlYjE1NzQ5NmE0ZGVjNTAxMjc3YmJmZGE1NjFkNGQwODMuLjlkMDc0OWRmNWRhMjMz
YmQ3ZjI5ZmFmYTM1MTNlMmY2NzA0ODQ4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dC5jcHAKQEAgLTQ0LDggKzQ0LDggQEAKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
c0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgorI2lu
Y2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJUZXh0UGFpbnRTdHlsZS5oIgogCkBAIC0yMzEsMTggKzIzMSwx
OCBAQCBjbGFzcyBMaW5lU3RhdGUgewogcHVibGljOgogICAgIHZvaWQgc2V0QXZhaWxhYmxlV2lk
dGgoZmxvYXQgd2lkdGgpIHsgbV9hdmFpbGFibGVXaWR0aCA9IHdpZHRoOyB9CiAgICAgdm9pZCBz
ZXRMb2dpY2FsTGVmdE9mZnNldChmbG9hdCBvZmZzZXQpIHsgbV9sb2dpY2FsTGVmdE9mZnNldCA9
IG9mZnNldDsgfQotICAgIHZvaWQgc2V0T3ZlcmZsb3dlZEZyYWdtZW50KGNvbnN0IEZsb3dDb250
ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSB7IG1fb3ZlcmZsb3dlZEZyYWdt
ZW50ID0gZnJhZ21lbnQ7IH0KKyAgICB2b2lkIHNldE92ZXJmbG93ZWRGcmFnbWVudChjb25zdCBU
ZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBmcmFnbWVudCkgeyBtX292ZXJmbG93
ZWRGcmFnbWVudCA9IGZyYWdtZW50OyB9CiAKICAgICBmbG9hdCBhdmFpbGFibGVXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGg7IH0KICAgICBmbG9hdCBsb2dpY2FsTGVmdE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbExlZnRPZmZzZXQ7IH0KLSAgICBjb25zdCBG
bG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50JiBvdmVyZmxvd2VkRnJhZ21lbnQoKSBj
b25zdCB7IHJldHVybiBtX292ZXJmbG93ZWRGcmFnbWVudDsgfQorICAgIGNvbnN0IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIG92ZXJmbG93ZWRGcmFnbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3ZlcmZsb3dlZEZyYWdtZW50OyB9CiAgICAgYm9vbCBoYXNUcmFpbGluZ1doaXRl
c3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aDsgfQogICAg
IGJvb2wgaXNXaGl0ZXNwYWNlT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlV2lkdGggJiYgbV9ydW5zV2lkdGggPT0gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQog
ICAgIGJvb2wgZml0cyhmbG9hdCBleHRyYSkgY29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0
aCA+PSBtX3J1bnNXaWR0aCArIGV4dHJhOyB9CiAgICAgYm9vbCBmaXJzdENoYXJhY3RlckZpdHMo
KSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Q2hhcmFjdGVyRml0czsgfQogICAgIGZsb2F0IHdpZHRo
KCkgY29uc3QgeyByZXR1cm4gbV9ydW5zV2lkdGg7IH0KIAotICAgIHZvaWQgYXBwZW5kRnJhZ21l
bnQoY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIExh
eW91dDo6UnVuVmVjdG9yJiBydW5zKQorICAgIHZvaWQgYXBwZW5kRnJhZ21lbnQoY29uc3QgVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQsIExheW91dDo6UnVuVmVj
dG9yJiBydW5zKQogICAgIHsKICAgICAgICAgLy8gQWRqdXN0IGVuZCBwb3NpdGlvbiB3aGlsZSBj
b2xsYXBzaW5nLgogICAgICAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IGZyYWdtZW50LmlzQ29s
bGFwc2VkKCkgPyBmcmFnbWVudC5zdGFydCgpICsgMSA6IGZyYWdtZW50LmVuZCgpOwpAQCAtMjU4
LDcgKzI1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jcmVhdGVOZXdSdW4gPSBmcmFnbWVudC5p
c0NvbGxhcHNlZCgpOwogICAgICAgICBtX3J1bnNXaWR0aCArPSBmcmFnbWVudC53aWR0aCgpOwog
Ci0gICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRl
eHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgeworICAgICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09
IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UpIHsKICAgICAg
ICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoICs9IGVuZFBvc2l0aW9uIC0gZnJhZ21l
bnQuc3RhcnQoKTsKICAgICAgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggKz0gZnJh
Z21lbnQud2lkdGgoKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTI4Nyw3ICsyODcsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGZsb2F0IG1fYXZhaWxhYmxlV2lkdGggeyAwIH07CiAgICAgZmxv
YXQgbV9sb2dpY2FsTGVmdE9mZnNldCB7IDAgfTsKLSAgICBGbG93Q29udGVudHNJdGVyYXRvcjo6
VGV4dEZyYWdtZW50IG1fb3ZlcmZsb3dlZEZyYWdtZW50OworICAgIFRleHRGcmFnbWVudEl0ZXJh
dG9yOjpUZXh0RnJhZ21lbnQgbV9vdmVyZmxvd2VkRnJhZ21lbnQ7CiAgICAgZmxvYXQgbV9ydW5z
V2lkdGggeyAwIH07CiAgICAgYm9vbCBtX2NyZWF0ZU5ld1J1biB7IHRydWUgfTsKICAgICBmbG9h
dCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OyAvLyBVc2UgdGhpcyB0byByZW1vdmUg
dHJhaWxpbmcgd2hpdGVzcGFjZSB3aXRob3V0IHJlLW1lc3VyaW5nIHRoZSB0ZXh0LgpAQCAtMzE3
LDIxICszMTcsMjEgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2ZyYWdtZW50SW5kZXggeyAw
IH07CiB9OwogCi1zdGF0aWMgRnJhZ21lbnRGb3J3YXJkSXRlcmF0b3IgYmVnaW4oY29uc3QgRmxv
d0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCYgZnJhZ21lbnQpICB7IHJldHVybiBGcmFn
bWVudEZvcndhcmRJdGVyYXRvcihmcmFnbWVudC5zdGFydCgpKTsgfQotc3RhdGljIEZyYWdtZW50
Rm9yd2FyZEl0ZXJhdG9yIGVuZChjb25zdCBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50JiBmcmFnbWVudCkgIHsgcmV0dXJuIEZyYWdtZW50Rm9yd2FyZEl0ZXJhdG9yKGZyYWdtZW50
LmVuZCgpKTsgfQorc3RhdGljIEZyYWdtZW50Rm9yd2FyZEl0ZXJhdG9yIGJlZ2luKGNvbnN0IFRl
eHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZyYWdtZW50KSAgeyByZXR1cm4gRnJh
Z21lbnRGb3J3YXJkSXRlcmF0b3IoZnJhZ21lbnQuc3RhcnQoKSk7IH0KK3N0YXRpYyBGcmFnbWVu
dEZvcndhcmRJdGVyYXRvciBlbmQoY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudCYgZnJhZ21lbnQpICB7IHJldHVybiBGcmFnbWVudEZvcndhcmRJdGVyYXRvcihmcmFnbWVu
dC5lbmQoKSk7IH0KIAotc3RhdGljIGJvb2wgcHJlV3JhcChjb25zdCBGbG93Q29udGVudHNJdGVy
YXRvcjo6U3R5bGUmIHN0eWxlKQorc3RhdGljIGJvb2wgcHJlV3JhcChjb25zdCBUZXh0RnJhZ21l
bnRJdGVyYXRvcjo6U3R5bGUmIHN0eWxlKQogewogICAgIHJldHVybiBzdHlsZS53cmFwTGluZXMg
JiYgIXN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZTsKIH0KICAgICAKLXN0YXRpYyB2b2lkIHJlbW92
ZVRyYWlsaW5nV2hpdGVzcGFjZShMaW5lU3RhdGUmIGxpbmVTdGF0ZSwgTGF5b3V0OjpSdW5WZWN0
b3ImIHJ1bnMsIGNvbnN0IEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRv
cikKK3N0YXRpYyB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZShMaW5lU3RhdGUmIGxpbmVT
dGF0ZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9y
JiB0ZXh0RnJhZ21lbnRJdGVyYXRvcikKIHsKICAgICBpZiAoIWxpbmVTdGF0ZS5oYXNUcmFpbGlu
Z1doaXRlc3BhY2UoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIC8vIFJlbW92ZSBjb2xs
YXBzZWQgd2hpdGVzcGFjZSwgb3Igbm9uLWNvbGxhcHNlZCBwcmUtd3JhcCB3aGl0ZXNwYWNlLCB1
bmxlc3MgaXQncyB0aGUgb25seSBjb250ZW50IG9uIHRoZSBsaW5lIC1zbyByZW1vdmluZyB0aGUg
d2hpdGVzYXBjZSB3b3VsZCBwcm9kdWNlIGFuIGVtcHR5IGxpbmUuCi0gICAgY29uc3QgYXV0byYg
c3R5bGUgPSBmbG93Q29udGVudHNJdGVyYXRvci5zdHlsZSgpOworICAgIGNvbnN0IGF1dG8mIHN0
eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5bGUoKTsKICAgICBib29sIGNvbGxhcHNlV2hp
dGVzcGFjZSA9IHN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSB8IHByZVdyYXAoc3R5bGUpOwogICAg
IGlmICghY29sbGFwc2VXaGl0ZXNwYWNlKQogICAgICAgICByZXR1cm47CkBAIC0zNTEsNTMgKzM1
MSw1MyBAQCBzdGF0aWMgdm9pZCB1cGRhdGVMaW5lQ29uc3RyYWlucyhjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGZsb3csIExpbmVTdGF0ZSYgbGluZSkKICAgICBsaW5lLnNldEF2YWlsYWJsZVdpZHRo
KHN0ZDo6bWF4PGZsb2F0PigwLCBsb2dpY2FsUmlnaHRPZmZzZXQgLSBsaW5lLmxvZ2ljYWxMZWZ0
T2Zmc2V0KCkpKTsKIH0KIAotc3RhdGljIEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21l
bnQgc3BsaXRGcmFnbWVudFRvRml0TGluZShGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50JiBmcmFnbWVudFRvU3BsaXQsIGZsb2F0IGF2YWlsYWJsZVdpZHRoLCBib29sIGtlZXBBdExl
YXN0T25lQ2hhcmFjdGVyLCBjb25zdCBGbG93Q29udGVudHNJdGVyYXRvciYgZmxvd0NvbnRlbnRz
SXRlcmF0b3IpCitzdGF0aWMgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBzcGxp
dEZyYWdtZW50VG9GaXRMaW5lKFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQmIGZy
YWdtZW50VG9TcGxpdCwgZmxvYXQgYXZhaWxhYmxlV2lkdGgsIGJvb2wga2VlcEF0TGVhc3RPbmVD
aGFyYWN0ZXIsIGNvbnN0IFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0RnJhZ21lbnRJdGVyYXRv
cikKIHsKICAgICAvLyBGSVhNRTogYWRkIHN1cnJvZ2F0ZSBwYWlyIHN1cHBvcnQuCiAgICAgdW5z
aWduZWQgc3RhcnQgPSBmcmFnbWVudFRvU3BsaXQuc3RhcnQoKTsKLSAgICBhdXRvIGl0ID0gc3Rk
Ojp1cHBlcl9ib3VuZChiZWdpbihmcmFnbWVudFRvU3BsaXQpLCBlbmQoZnJhZ21lbnRUb1NwbGl0
KSwgYXZhaWxhYmxlV2lkdGgsIFsmZmxvd0NvbnRlbnRzSXRlcmF0b3IsIHN0YXJ0XShmbG9hdCBh
dmFpbGFibGVXaWR0aCwgdW5zaWduZWQgaW5kZXgpIHsKKyAgICBhdXRvIGl0ID0gc3RkOjp1cHBl
cl9ib3VuZChiZWdpbihmcmFnbWVudFRvU3BsaXQpLCBlbmQoZnJhZ21lbnRUb1NwbGl0KSwgYXZh
aWxhYmxlV2lkdGgsIFsmdGV4dEZyYWdtZW50SXRlcmF0b3IsIHN0YXJ0XShmbG9hdCBhdmFpbGFi
bGVXaWR0aCwgdW5zaWduZWQgaW5kZXgpIHsKICAgICAgICAgLy8gRklYTUU6IHVzZSB0aGUgYWN0
dWFsIGxlZnQgcG9zaXRpb24gb2YgdGhlIGxpbmUgKGluc3RlYWQgb2YgMCkgdG8gY2FsY3VsYXRl
ZCB3aWR0aC4gSXQgbWlnaHQgZ2l2ZSBmYWxzZSB3aWR0aCBmb3IgdGFiIGNoYXJhY3RlcnMuCi0g
ICAgICAgIHJldHVybiBhdmFpbGFibGVXaWR0aCA8IGZsb3dDb250ZW50c0l0ZXJhdG9yLnRleHRX
aWR0aChzdGFydCwgaW5kZXggKyAxLCAwKTsKKyAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVdpZHRo
IDwgdGV4dEZyYWdtZW50SXRlcmF0b3IudGV4dFdpZHRoKHN0YXJ0LCBpbmRleCArIDEsIDApOwog
ICAgIH0pOwogICAgIHVuc2lnbmVkIHNwbGl0UG9zaXRpb24gPSAoKml0KTsKICAgICBpZiAoa2Vl
cEF0TGVhc3RPbmVDaGFyYWN0ZXIgJiYgc3BsaXRQb3NpdGlvbiA9PSBmcmFnbWVudFRvU3BsaXQu
c3RhcnQoKSkKICAgICAgICAgKytzcGxpdFBvc2l0aW9uOwotICAgIHJldHVybiBmcmFnbWVudFRv
U3BsaXQuc3BsaXQoc3BsaXRQb3NpdGlvbiwgZmxvd0NvbnRlbnRzSXRlcmF0b3IpOworICAgIHJl
dHVybiBmcmFnbWVudFRvU3BsaXQuc3BsaXQoc3BsaXRQb3NpdGlvbiwgdGV4dEZyYWdtZW50SXRl
cmF0b3IpOwogfQogCi1zdGF0aWMgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudCBm
aXJzdEZyYWdtZW50KEZsb3dDb250ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvciwg
Y29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUpCitzdGF0aWMgVGV4dEZyYWdtZW50SXRlcmF0
b3I6OlRleHRGcmFnbWVudCBmaXJzdEZyYWdtZW50KFRleHRGcmFnbWVudEl0ZXJhdG9yJiB0ZXh0
RnJhZ21lbnRJdGVyYXRvciwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUpCiB7CiAgICAg
Ly8gSGFuZGxlIG92ZXJmbG93ZWQgZnJhZ21lbnQgZnJvbSBwcmV2aW91cyBsaW5lLgotICAgIEZs
b3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgZmlyc3RGcmFnbWVudChwcmV2aW91c0xp
bmUub3ZlcmZsb3dlZEZyYWdtZW50KCkpOwotICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gZmxvd0Nv
bnRlbnRzSXRlcmF0b3Iuc3R5bGUoKTsKKyAgICBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6VGV4dEZy
YWdtZW50IGZpcnN0RnJhZ21lbnQocHJldmlvdXNMaW5lLm92ZXJmbG93ZWRGcmFnbWVudCgpKTsK
KyAgICBjb25zdCBhdXRvJiBzdHlsZSA9IHRleHRGcmFnbWVudEl0ZXJhdG9yLnN0eWxlKCk7CiAK
ICAgICBpZiAoZmlyc3RGcmFnbWVudC5pc0VtcHR5KCkpCi0gICAgICAgIGZpcnN0RnJhZ21lbnQg
PSBmbG93Q29udGVudHNJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCk7CisgICAgICAgIGZpcnN0
RnJhZ21lbnQgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0VGV4dEZyYWdtZW50KCk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIC8vIFNwZWNpYWwgb3ZlcmZsb3cgcHJlLXdyYXAgd2hpdGVzcGFjZSBo
YW5kbGluZzogaWdub3JlIHRoZSBvdmVyZmxvd2VkIHdoaXRlc3BhY2UgaWYgd2UgbWFuYWdlZCB0
byBmaXQgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBvbiB0aGUgcHJldmlvdXMgbGluZS4KICAgICAg
ICAgLy8gV2hlbiB0aGUgbGluZSBpcyB0b28gc2hvcnQgdG8gZml0IG9uZSBjaGFyYWN0ZXIgKHRo
b3VnaHQgaXQgc3RpbGwgc3RheXMgb24gdGhlIGxpbmUpIHdlIGNvbnRpbnVlIHdpdGggdGhlIG92
ZXJmbG93IHdoaXRlc3BhY2UgY29udGVudCBvbiB0aGlzIGxpbmUuCi0gICAgICAgIGlmIChmaXJz
dEZyYWdtZW50LnR5cGUoKSA9PSBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpX
aGl0ZXNwYWNlICYmIHByZVdyYXAoc3R5bGUpICYmIHByZXZpb3VzTGluZS5maXJzdENoYXJhY3Rl
ckZpdHMoKSkgewotICAgICAgICAgICAgZmlyc3RGcmFnbWVudCA9IGZsb3dDb250ZW50c0l0ZXJh
dG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKKyAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSgp
ID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OldoaXRlc3BhY2UgJiYgcHJl
V3JhcChzdHlsZSkgJiYgcHJldmlvdXNMaW5lLmZpcnN0Q2hhcmFjdGVyRml0cygpKSB7CisgICAg
ICAgICAgICBmaXJzdEZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFn
bWVudCgpOwogICAgICAgICAgICAgLy8gSWYgc2tpcHBpbmcgdGhlIHdoaXRlc3BhY2UgcHV0cyB1
cyBvbiBhIGhhcmQgbmV3bGluZSwgc2tpcCB0aGUgbmV3bGluZSB0b28gYXMgd2UgYWxyZWFkeSB3
cmFwcGVkIHRoZSBsaW5lLgotICAgICAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSgpID09
IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaykKLSAgICAgICAg
ICAgICAgICBmaXJzdEZyYWdtZW50ID0gZmxvd0NvbnRlbnRzSXRlcmF0b3IubmV4dFRleHRGcmFn
bWVudCgpOworICAgICAgICAgICAgaWYgKGZpcnN0RnJhZ21lbnQudHlwZSgpID09IFRleHRGcmFn
bWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkxpbmVCcmVhaykKKyAgICAgICAgICAgICAgICBm
aXJzdEZyYWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3IubmV4dFRleHRGcmFnbWVudCgpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBza2lwIHRoZSBs
ZWFkaW5nIHdoaXRlc3BhY2UuCi0gICAgaWYgKHN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSAmJiBm
aXJzdEZyYWdtZW50LnR5cGUoKSA9PSBGbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50
OjpXaGl0ZXNwYWNlKQotICAgICAgICBmaXJzdEZyYWdtZW50ID0gZmxvd0NvbnRlbnRzSXRlcmF0
b3IubmV4dFRleHRGcmFnbWVudCgpOworICAgIGlmIChzdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2Ug
JiYgZmlyc3RGcmFnbWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFn
bWVudDo6V2hpdGVzcGFjZSkKKyAgICAgICAgZmlyc3RGcmFnbWVudCA9IHRleHRGcmFnbWVudEl0
ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQoKTsKICAgICByZXR1cm4gZmlyc3RGcmFnbWVudDsKIH0K
IAotc3RhdGljIGJvb2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5l
U3RhdGUmIHByZXZpb3VzTGluZSwgTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMsIEZsb3dDb250ZW50
c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKK3N0YXRpYyBib29sIGNyZWF0ZUxpbmVS
dW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91c0xpbmUsIExheW91
dDo6UnVuVmVjdG9yJiBydW5zLCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRl
cmF0b3IpCiB7Ci0gICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93Q29udGVudHNJdGVyYXRvci5z
dHlsZSgpOworICAgIGNvbnN0IGF1dG8mIHN0eWxlID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5
bGUoKTsKICAgICBib29sIGxpbmVDYW5CZVdyYXBwZWQgPSBzdHlsZS53cmFwTGluZXMgfHwgc3R5
bGUuYnJlYWtXb3JkT25PdmVyZmxvdzsKLSAgICBhdXRvIGZyYWdtZW50ID0gZmlyc3RGcmFnbWVu
dChmbG93Q29udGVudHNJdGVyYXRvciwgcHJldmlvdXNMaW5lKTsKLSAgICB3aGlsZSAoZnJhZ21l
bnQudHlwZSgpICE9IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRF
bmQpIHsKKyAgICBhdXRvIGZyYWdtZW50ID0gZmlyc3RGcmFnbWVudCh0ZXh0RnJhZ21lbnRJdGVy
YXRvciwgcHJldmlvdXNMaW5lKTsKKyAgICB3aGlsZSAoZnJhZ21lbnQudHlwZSgpICE9IFRleHRG
cmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpIHsKICAgICAgICAgLy8g
SGFyZCBsaW5lYnJlYWsuCi0gICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0gRmxvd0NvbnRl
bnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudDo6TGluZUJyZWFrKSB7CisgICAgICAgIGlmIChmcmFn
bWVudC50eXBlKCkgPT0gVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6TGluZUJy
ZWFrKSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBsaW5lIGZyYWdtZW50IG9ubHkgaWYg
dGhlcmUncyBub3RoaW5nIG9uIHRoZSBsaW5lLiAob3RoZXJ3aXNlIHRoZSBleHRyYSBuZXcgbGlu
ZSBjaGFyYWN0ZXIgd291bGQgc2hvdyB1cCBhdCB0aGUgZW5kIG9mIHRoZSBjb250ZW50LikKICAg
ICAgICAgICAgIGlmICghbGluZS53aWR0aCgpKQogICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5k
RnJhZ21lbnQoZnJhZ21lbnQsIHJ1bnMpOwpAQCAtNDExLDEwICs0MTEsMTAgQEAgc3RhdGljIGJv
b2wgY3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZp
b3VzTGluZSwgTGF5b3UKICAgICAgICAgICAgIC8vIDQuIE5vbi13aGl0ZXNwYWNlIGZyYWdtZW50
IHdoZW4gdGhlcmUncyBhbHJlYWR5IGFub3RoZXIgZnJhZ21lbnQgb24gdGhlIGxpbmUgZ2V0cyBw
dXNoZWQgdG8gdGhlIG5leHQgbGluZS4KICAgICAgICAgICAgIGJvb2wgZW1wdHlMaW5lID0gIWxp
bmUud2lkdGgoKTsKICAgICAgICAgICAgIC8vIFdoaXRlc3BhY2UgZnJhZ21lbnQuCi0gICAgICAg
ICAgICBpZiAoZnJhZ21lbnQudHlwZSgpID09IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpUZXh0RnJh
Z21lbnQ6OldoaXRlc3BhY2UpIHsKKyAgICAgICAgICAgIGlmIChmcmFnbWVudC50eXBlKCkgPT0g
VGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudDo6V2hpdGVzcGFjZSkgewogICAgICAg
ICAgICAgICAgIGlmICghc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFNwbGl0IHRoZSBmcmFnbWVudDsgKG1vZGlmaWVkKWZyYWdtZW50IHN0YXlzIG9u
IHRoaXMgbGluZSwgb3ZlcmZsb3dlZEZyYWdtZW50IGlzIHB1c2hlZCB0byBuZXh0IGxpbmUuCi0g
ICAgICAgICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KHNwbGl0RnJhZ21l
bnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGxpbmUud2lkdGgo
KSwgZW1wdHlMaW5lLCBmbG93Q29udGVudHNJdGVyYXRvcikpOworICAgICAgICAgICAgICAgICAg
ICBsaW5lLnNldE92ZXJmbG93ZWRGcmFnbWVudChzcGxpdEZyYWdtZW50VG9GaXRMaW5lKGZyYWdt
ZW50LCBsaW5lLmF2YWlsYWJsZVdpZHRoKCkgLSBsaW5lLndpZHRoKCksIGVtcHR5TGluZSwgdGV4
dEZyYWdtZW50SXRlcmF0b3IpKTsKICAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRGcmFn
bWVudChmcmFnbWVudCwgcnVucyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IC8vIFdoZW4gd2hpdGVzcGFjZSBjb2xsYXBzZSBpcyBvbiwgd2hpdGVzcGFjZSB0aGF0IGRvZXNu
J3QgZml0IGlzIHNpbXBseSBza2lwcGVkLgpAQCAtNDIzLDcgKzQyMyw3IEBAIHN0YXRpYyBib29s
IGNyZWF0ZUxpbmVSdW5zKExpbmVTdGF0ZSYgbGluZSwgY29uc3QgTGluZVN0YXRlJiBwcmV2aW91
c0xpbmUsIExheW91CiAgICAgICAgICAgICAvLyBOb24td2hpdGVzcGFjZSBmcmFnbWVudC4gKCFz
dHlsZS53cmFwTGluZXM6IGJ1ZzEzODEwMihwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvcikKICAg
ICAgICAgICAgIGlmICgoZW1wdHlMaW5lICYmIHN0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpIHx8
ICFzdHlsZS53cmFwTGluZXMpIHsKICAgICAgICAgICAgICAgICAvLyBTcGxpdCB0aGUgZnJhZ21l
bnQ7IChtb2RpZmllZClmcmFnbWVudCBzdGF5cyBvbiB0aGlzIGxpbmUsIG92ZXJmbG93ZWRGcmFn
bWVudCBpcyBwdXNoZWQgdG8gbmV4dCBsaW5lLgotICAgICAgICAgICAgICAgIGxpbmUuc2V0T3Zl
cmZsb3dlZEZyYWdtZW50KHNwbGl0RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZh
aWxhYmxlV2lkdGgoKSAtIGxpbmUud2lkdGgoKSwgZW1wdHlMaW5lLCBmbG93Q29udGVudHNJdGVy
YXRvcikpOworICAgICAgICAgICAgICAgIGxpbmUuc2V0T3ZlcmZsb3dlZEZyYWdtZW50KHNwbGl0
RnJhZ21lbnRUb0ZpdExpbmUoZnJhZ21lbnQsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSAtIGxpbmUu
d2lkdGgoKSwgZW1wdHlMaW5lLCB0ZXh0RnJhZ21lbnRJdGVyYXRvcikpOwogICAgICAgICAgICAg
ICAgIGxpbmUuYXBwZW5kRnJhZ21lbnQoZnJhZ21lbnQsIHJ1bnMpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNDM4LDIxICs0MzgsMjEgQEAgc3RhdGljIGJvb2wg
Y3JlYXRlTGluZVJ1bnMoTGluZVN0YXRlJiBsaW5lLCBjb25zdCBMaW5lU3RhdGUmIHByZXZpb3Vz
TGluZSwgTGF5b3UKICAgICAgICAgfQogICAgICAgICBsaW5lLmFwcGVuZEZyYWdtZW50KGZyYWdt
ZW50LCBydW5zKTsKICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCB0ZXh0IGZyYWdtZW50LgotICAg
ICAgICBmcmFnbWVudCA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLm5leHRUZXh0RnJhZ21lbnQobGlu
ZS53aWR0aCgpKTsKKyAgICAgICAgZnJhZ21lbnQgPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci5uZXh0
VGV4dEZyYWdtZW50KGxpbmUud2lkdGgoKSk7CiAgICAgfQotICAgIHJldHVybiBmcmFnbWVudC50
eXBlKCkgPT0gRmxvd0NvbnRlbnRzSXRlcmF0b3I6OlRleHRGcmFnbWVudDo6Q29udGVudEVuZCAm
JiBsaW5lLm92ZXJmbG93ZWRGcmFnbWVudCgpLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gZnJhZ21l
bnQudHlwZSgpID09IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQ6OkNvbnRlbnRF
bmQgJiYgbGluZS5vdmVyZmxvd2VkRnJhZ21lbnQoKS5pc0VtcHR5KCk7CiB9CiAKLXN0YXRpYyB2
b2lkIGNsb3NlTGluZUVuZGluZ0FuZEFkanVzdFJ1bnMoTGluZVN0YXRlJiBsaW5lLCBMYXlvdXQ6
OlJ1blZlY3RvciYgcnVucywgdW5zaWduZWQgcHJldmlvdXNSdW5Db3VudCwgdW5zaWduZWQmIGxp
bmVDb3VudCwgY29uc3QgRmxvd0NvbnRlbnRzSXRlcmF0b3ImIGZsb3dDb250ZW50c0l0ZXJhdG9y
KQorc3RhdGljIHZvaWQgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhMaW5lU3RhdGUmIGxp
bmUsIExheW91dDo6UnVuVmVjdG9yJiBydW5zLCB1bnNpZ25lZCBwcmV2aW91c1J1bkNvdW50LCB1
bnNpZ25lZCYgbGluZUNvdW50LCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdt
ZW50SXRlcmF0b3IpCiB7CiAgICAgaWYgKHByZXZpb3VzUnVuQ291bnQgPT0gcnVucy5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQocnVucy5zaXplKCkpOwotICAgIHJlbW92ZVRy
YWlsaW5nV2hpdGVzcGFjZShsaW5lLCBydW5zLCBmbG93Q29udGVudHNJdGVyYXRvcik7CisgICAg
cmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKGxpbmUsIHJ1bnMsIHRleHRGcmFnbWVudEl0ZXJhdG9y
KTsKICAgICBpZiAoIXJ1bnMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gQWRqdXN0
IHJ1bnMnIHBvc2l0aW9uIGJ5IHRha2luZyBsaW5lJ3MgYWxpZ25tZW50IGludG8gYWNjb3VudC4K
LSAgICBpZiAoZmxvYXQgbGluZUxvZ2ljYWxMZWZ0ID0gY29tcHV0ZUxpbmVMZWZ0KGZsb3dDb250
ZW50c0l0ZXJhdG9yLnN0eWxlKCkudGV4dEFsaWduLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCksIGxp
bmUud2lkdGgoKSwgbGluZS5sb2dpY2FsTGVmdE9mZnNldCgpKSkgeworICAgIGlmIChmbG9hdCBs
aW5lTG9naWNhbExlZnQgPSBjb21wdXRlTGluZUxlZnQodGV4dEZyYWdtZW50SXRlcmF0b3Iuc3R5
bGUoKS50ZXh0QWxpZ24sIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSwgbGluZS53aWR0aCgpLCBsaW5l
LmxvZ2ljYWxMZWZ0T2Zmc2V0KCkpKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHByZXZp
b3VzUnVuQ291bnQ7IGkgPCBydW5zLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBydW5zW2ld
LmxvZ2ljYWxMZWZ0ICs9IGxpbmVMb2dpY2FsTGVmdDsKICAgICAgICAgICAgIHJ1bnNbaV0ubG9n
aWNhbFJpZ2h0ICs9IGxpbmVMb2dpY2FsTGVmdDsKQEAgLTQ2Miw3ICs0NjIsNyBAQCBzdGF0aWMg
dm9pZCBjbG9zZUxpbmVFbmRpbmdBbmRBZGp1c3RSdW5zKExpbmVTdGF0ZSYgbGluZSwgTGF5b3V0
OjpSdW5WZWN0b3ImIHJ1bgogICAgICsrbGluZUNvdW50OwogfQogCi1zdGF0aWMgdm9pZCBzcGxp
dFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkoTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5zLCBjb25z
dCBGbG93Q29udGVudHNJdGVyYXRvciYgZmxvd0NvbnRlbnRzSXRlcmF0b3IpCitzdGF0aWMgdm9p
ZCBzcGxpdFJ1bnNBdFJlbmRlcmVyQm91bmRhcnkoTGF5b3V0OjpSdW5WZWN0b3ImIGxpbmVSdW5z
LCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IpCiB7CiAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBzcGxpdCBkdXJpbmcgcnVuIGNvbnN0cnVj
dGlvbiBpbnN0ZWFkIG9mIGFzIGEgc2VwYXJhdGUgcGFzcy4KICAgICBpZiAobGluZVJ1bnMuaXNF
bXB0eSgpKQpAQCAtNDcxLDEyICs0NzEsMTIgQEAgc3RhdGljIHZvaWQgc3BsaXRSdW5zQXRSZW5k
ZXJlckJvdW5kYXJ5KExheW91dDo6UnVuVmVjdG9yJiBsaW5lUnVucywgY29uc3QgRmxvd0MKICAg
ICBkbyB7CiAgICAgICAgIGNvbnN0IFJ1biYgcnVuID0gbGluZVJ1bnMuYXQocnVuSW5kZXgpOwog
ICAgICAgICBBU1NFUlQocnVuLnN0YXJ0ICE9IHJ1bi5lbmQpOwotICAgICAgICBhdXRvJiBzdGFy
dFNlZ21lbnQgPSBmbG93Q29udGVudHNJdGVyYXRvci5zZWdtZW50Rm9yUG9zaXRpb24ocnVuLnN0
YXJ0KTsKKyAgICAgICAgYXV0byYgc3RhcnRTZWdtZW50ID0gdGV4dEZyYWdtZW50SXRlcmF0b3Iu
c2VnbWVudEZvclBvc2l0aW9uKHJ1bi5zdGFydCk7CiAgICAgICAgIGlmIChydW4uZW5kIDw9IHN0
YXJ0U2VnbWVudC5lbmQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gVGhpcyBy
dW4gb3ZlcmxhcHMgbXVsdGlwbGUgcmVuZGVyZXJzLiBTcGxpdCBpdCB1cC4KICAgICAgICAgLy8g
U3BsaXQgcnVuIGF0IHRoZSByZW5kZXJlcidzIGJvdW5kYXJ5IGFuZCBjcmVhdGUgYSBuZXcgcnVu
IGZvciB0aGUgbGVmdCBzaWRlLCB3aGlsZSB1c2UgdGhlIGN1cnJlbnQgcnVuIGFzIHRoZSByaWdo
dCBzaWRlLgotICAgICAgICBmbG9hdCBsb2dpY2FsUmlnaHRPZkxlZnRSdW4gPSBydW4ubG9naWNh
bExlZnQgKyBmbG93Q29udGVudHNJdGVyYXRvci50ZXh0V2lkdGgocnVuLnN0YXJ0LCBzdGFydFNl
Z21lbnQuZW5kLCBydW4ubG9naWNhbExlZnQpOworICAgICAgICBmbG9hdCBsb2dpY2FsUmlnaHRP
ZkxlZnRSdW4gPSBydW4ubG9naWNhbExlZnQgKyB0ZXh0RnJhZ21lbnRJdGVyYXRvci50ZXh0V2lk
dGgocnVuLnN0YXJ0LCBzdGFydFNlZ21lbnQuZW5kLCBydW4ubG9naWNhbExlZnQpOwogICAgICAg
ICBsaW5lUnVucy5pbnNlcnQocnVuSW5kZXgsIFJ1bihydW4uc3RhcnQsIHN0YXJ0U2VnbWVudC5l
bmQsIHJ1bi5sb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0T2ZMZWZ0UnVuLCBmYWxzZSkpOwogICAg
ICAgICBSdW4mIHJpZ2h0U2lkZVJ1biA9IGxpbmVSdW5zLmF0KHJ1bkluZGV4ICsgMSk7CiAgICAg
ICAgIHJpZ2h0U2lkZVJ1bi5zdGFydCA9IHN0YXJ0U2VnbWVudC5lbmQ7CkBAIC00OTAsNyArNDkw
LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlVGV4dFJ1bnMoTGF5b3V0OjpSdW5WZWN0b3ImIHJ1bnMs
IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgdW5zaWcKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQg
PSBsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdyk7CiAgICAgTGluZVN0YXRlIGxpbmU7CiAgICAgYm9v
bCBpc0VuZE9mQ29udGVudCA9IGZhbHNlOwotICAgIEZsb3dDb250ZW50c0l0ZXJhdG9yIGZsb3dD
b250ZW50c0l0ZXJhdG9yID0gRmxvd0NvbnRlbnRzSXRlcmF0b3IoZmxvdyk7CisgICAgVGV4dEZy
YWdtZW50SXRlcmF0b3IgdGV4dEZyYWdtZW50SXRlcmF0b3IgPSBUZXh0RnJhZ21lbnRJdGVyYXRv
cihmbG93KTsKIAogICAgIGRvIHsKICAgICAgICAgZmxvdy5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVI
ZWlnaHQgKiBsaW5lQ291bnQgKyBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKTsKQEAgLTQ5OCwxMiAr
NDk4LDEyIEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSdW5zKExheW91dDo6UnVuVmVjdG9yJiBy
dW5zLCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIHVuc2lnCiAgICAgICAgIHVuc2lnbmVkIHByZXZp
b3VzUnVuQ291bnQgPSBydW5zLnNpemUoKTsKICAgICAgICAgbGluZSA9IExpbmVTdGF0ZSgpOwog
ICAgICAgICB1cGRhdGVMaW5lQ29uc3RyYWlucyhmbG93LCBsaW5lKTsKLSAgICAgICAgaXNFbmRP
ZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2aW91c0xpbmUsIHJ1bnMsIGZsb3dD
b250ZW50c0l0ZXJhdG9yKTsKLSAgICAgICAgY2xvc2VMaW5lRW5kaW5nQW5kQWRqdXN0UnVucyhs
aW5lLCBydW5zLCBwcmV2aW91c1J1bkNvdW50LCBsaW5lQ291bnQsIGZsb3dDb250ZW50c0l0ZXJh
dG9yKTsKKyAgICAgICAgaXNFbmRPZkNvbnRlbnQgPSBjcmVhdGVMaW5lUnVucyhsaW5lLCBwcmV2
aW91c0xpbmUsIHJ1bnMsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKKyAgICAgICAgY2xvc2VMaW5l
RW5kaW5nQW5kQWRqdXN0UnVucyhsaW5lLCBydW5zLCBwcmV2aW91c1J1bkNvdW50LCBsaW5lQ291
bnQsIHRleHRGcmFnbWVudEl0ZXJhdG9yKTsKICAgICB9IHdoaWxlICghaXNFbmRPZkNvbnRlbnQp
OwogCiAgICAgaWYgKGZsb3cuZmlyc3RDaGlsZCgpICE9IGZsb3cubGFzdENoaWxkKCkpCi0gICAg
ICAgIHNwbGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFyeShydW5zLCBmbG93Q29udGVudHNJdGVyYXRv
cik7CisgICAgICAgIHNwbGl0UnVuc0F0UmVuZGVyZXJCb3VuZGFyeShydW5zLCB0ZXh0RnJhZ21l
bnRJdGVyYXRvcik7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxMYXlvdXQ+IGNyZWF0ZShSZW5kZXJC
bG9ja0Zsb3cmIGZsb3cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWJkNGY4ZjQ0ZjMwMmI5MWQzYWMzZjBmZTZkNWE0Y2I5
YmQxNTAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0
b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0
ZXJhdG9yLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5k
ZXJDaGlsZEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUgIlNp
bXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFt
ZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgewotCi1GbG93Q29udGVudHNJdGVyYXRvcjo6U3R5bGU6
OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLSAgICA6IGZvbnQoc3R5bGUuZm9udENh
c2NhZGUoKSkKLSAgICAsIHRleHRBbGlnbihzdHlsZS50ZXh0QWxpZ24oKSkKLSAgICAsIGNvbGxh
cHNlV2hpdGVzcGFjZShzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKLSAgICAsIHByZXNlcnZl
TmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkKLSAgICAsIHdyYXBMaW5lcyhzdHlsZS5h
dXRvV3JhcCgpKQotICAgICwgYnJlYWtXb3JkT25PdmVyZmxvdyhzdHlsZS5vdmVyZmxvd1dyYXAo
KSA9PSBCcmVha092ZXJmbG93V3JhcCAmJiAod3JhcExpbmVzIHx8IHByZXNlcnZlTmV3bGluZSkp
Ci0gICAgLCBzcGFjZVdpZHRoKGZvbnQud2lkdGgoVGV4dFJ1bigmc3BhY2UsIDEpKSkKLSAgICAs
IHRhYldpZHRoKGNvbGxhcHNlV2hpdGVzcGFjZSA/IDAgOiBzdHlsZS50YWJTaXplKCkpCi0gICAg
LCBsb2NhbGUoc3R5bGUubG9jYWxlKCkpCi17Ci19Ci0KLUZsb3dDb250ZW50c0l0ZXJhdG9yOjpG
bG93Q29udGVudHNJdGVyYXRvcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCi0gICAgOiBt
X2Zsb3dDb250ZW50cyhmbG93KQotICAgICwgbV9saW5lQnJlYWtJdGVyYXRvcigoKm1fZmxvd0Nv
bnRlbnRzLmJlZ2luKCkpLnRleHQsIGZsb3cuc3R5bGUoKS5sb2NhbGUoKSkKLSAgICAsIG1fc3R5
bGUoZmxvdy5zdHlsZSgpKQotewotfQotCi1GbG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdt
ZW50IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpuZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3NpdGlv
bikKLXsKLSAgICAvLyBBIGZyYWdtZW50IGNhbiBlaXRoZXIgYmUKLSAgICAvLyAxLiBuZXcgbGlu
ZSBjaGFyYWN0ZXIgd2hlbiBwcmVzZXJ2ZU5ld2xpbmUgaXMgb24gKG5vdCBjb25zaWRlcmVkIGFz
IHdoaXRlc3BhY2UpIG9yCi0gICAgLy8gMi4gd2hpdGVzcGFjZSAoY29sbGFzcGVkLCBub24tY29s
bGFwc2VkIG11bHRpIG9yIHNpbmdsZSkgb3IKLSAgICAvLyAzLiBub24td2hpdGVzcGFjZSBjaGFy
YWN0ZXJzLgotICAgIC8vIDQuIGVtcHR5LCBpbmRpY2F0aW5nIGNvbnRlbnQgZW5kLgotICAgIGlm
IChpc0VuZChtX3Bvc2l0aW9uKSkKLSAgICAgICAgcmV0dXJuIFRleHRGcmFnbWVudChtX3Bvc2l0
aW9uLCBtX3Bvc2l0aW9uLCAwLCBUZXh0RnJhZ21lbnQ6OkNvbnRlbnRFbmQpOwotICAgIGlmIChp
c0xpbmVCcmVhayhtX3Bvc2l0aW9uKSkgewotICAgICAgICBUZXh0RnJhZ21lbnQgZnJhZ21lbnQo
bV9wb3NpdGlvbiwgbV9wb3NpdGlvbiArIDEsIDAsIFRleHRGcmFnbWVudDo6TGluZUJyZWFrKTsK
LSAgICAgICAgKyttX3Bvc2l0aW9uOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQot
ICAgIHVuc2lnbmVkIHNwYWNlQ291bnQgPSAwOwotICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24g
PSBtX3Bvc2l0aW9uOwotICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gZmluZE5leHROb25XaGl0
ZXNwYWNlUG9zaXRpb24oc3RhcnRQb3NpdGlvbiwgc3BhY2VDb3VudCk7Ci0gICAgQVNTRVJUKHN0
YXJ0UG9zaXRpb24gPD0gZW5kUG9zaXRpb24pOwotICAgIGlmIChlbmRQb3NpdGlvbiA+IHN0YXJ0
UG9zaXRpb24pIHsKLSAgICAgICAgYm9vbCBtdWx0aXBsZVdoaXRlc3BhY2UgPSBzdGFydFBvc2l0
aW9uICsgMSA8IGVuZFBvc2l0aW9uOwotICAgICAgICBib29sIGlzQ29sbGFwc2VkID0gbXVsdGlw
bGVXaGl0ZXNwYWNlICYmIG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlOwotICAgICAgICBib29s
IGlzQnJlYWthYmxlID0gIWlzQ29sbGFwc2VkICYmIG11bHRpcGxlV2hpdGVzcGFjZTsKLSAgICAg
ICAgZmxvYXQgd2lkdGggPSAwOwotICAgICAgICBpZiAoaXNDb2xsYXBzZWQpCi0gICAgICAgICAg
ICB3aWR0aCA9IG1fc3R5bGUuc3BhY2VXaWR0aDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb247Ci0gICAgICAg
ICAgICB3aWR0aCA9IGxlbmd0aCA9PSBzcGFjZUNvdW50ID8gbGVuZ3RoICogbV9zdHlsZS5zcGFj
ZVdpZHRoIDogdGV4dFdpZHRoKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB4UG9zaXRpb24p
OwotICAgICAgICB9Ci0gICAgICAgIG1fcG9zaXRpb24gPSBlbmRQb3NpdGlvbjsKLSAgICAgICAg
cmV0dXJuIFRleHRGcmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgd2lkdGgsIFRl
eHRGcmFnbWVudDo6V2hpdGVzcGFjZSwgaXNDb2xsYXBzZWQsIGlzQnJlYWthYmxlKTsKLSAgICB9
Ci0gICAgZW5kUG9zaXRpb24gPSBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRp
b24gKyAxKTsKLSAgICBtX3Bvc2l0aW9uID0gZW5kUG9zaXRpb247Ci0gICAgcmV0dXJuIFRleHRG
cmFnbWVudChzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbiwgdGV4dFdpZHRoKHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uLCB4UG9zaXRpb24pLCBUZXh0RnJhZ21lbnQ6Ok5vbldoaXRlc3BhY2Us
IGZhbHNlLCBtX3N0eWxlLmJyZWFrV29yZE9uT3ZlcmZsb3cpOwotfQotCi1mbG9hdCBGbG93Q29u
dGVudHNJdGVyYXRvcjo6dGV4dFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9h
dCB4UG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgY29uc3QgYXV0byYgZnJvbVNlZ21lbnQgPSBtX2Zs
b3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24oZnJvbSk7Ci0gICAgaWYgKChtX3N0eWxlLmZv
bnQuaXNGaXhlZFBpdGNoKCkgJiYgZnJvbVNlZ21lbnQuZW5kID49IHRvKSB8fCAoZnJvbSA9PSBm
cm9tU2VnbWVudC5zdGFydCAmJiB0byA9PSBmcm9tU2VnbWVudC5lbmQpKQotICAgICAgICByZXR1
cm4gZnJvbVNlZ21lbnQucmVuZGVyZXIud2lkdGgoZnJvbSAtIGZyb21TZWdtZW50LnN0YXJ0LCB0
byAtIGZyb20sIG1fc3R5bGUuZm9udCwgeFBvc2l0aW9uLCBudWxscHRyLCBudWxscHRyKTsKLQot
ICAgIGNvbnN0IGF1dG8qIHNlZ21lbnQgPSAmZnJvbVNlZ21lbnQ7Ci0gICAgZmxvYXQgdGV4dFdp
ZHRoID0gMDsKLSAgICB1bnNpZ25lZCBmcmFnbWVudEVuZCA9IDA7Ci0gICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgZnJhZ21lbnRFbmQgPSBzdGQ6Om1pbih0bywgc2VnbWVudC0+ZW5kKTsKLSAg
ICAgICAgdGV4dFdpZHRoICs9IHNlZ21lbnQtPnRleHQuaXM4Qml0KCkgPyBydW5XaWR0aDxMQ2hh
cj4oc2VnbWVudC0+dGV4dCwgZnJvbSAtIHNlZ21lbnQtPnN0YXJ0LCBmcmFnbWVudEVuZCAtIHNl
Z21lbnQtPnN0YXJ0LCB4UG9zaXRpb24gKyB0ZXh0V2lkdGgpIDoKLSAgICAgICAgICAgIHJ1bldp
ZHRoPFVDaGFyPihzZWdtZW50LT50ZXh0LCBmcm9tIC0gc2VnbWVudC0+c3RhcnQsIGZyYWdtZW50
RW5kIC0gc2VnbWVudC0+c3RhcnQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCk7Ci0gICAgICAgIGlm
IChmcmFnbWVudEVuZCA9PSB0bykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBmcm9tID0g
ZnJhZ21lbnRFbmQ7Ci0gICAgICAgIHNlZ21lbnQgPSAmbV9mbG93Q29udGVudHMuc2VnbWVudEZv
clBvc2l0aW9uKGZyYWdtZW50RW5kKTsKLSAgICB9OwotCi0gICAgcmV0dXJuIHRleHRXaWR0aDsK
LX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgdW5zaWduZWQg
bmV4dEJyZWFrYWJsZVBvc2l0aW9uKExhenlMaW5lQnJlYWtJdGVyYXRvciYgbGluZUJyZWFrSXRl
cmF0b3IsIGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgdW5zaWduZWQgcG9z
aXRpb24pCi17Ci0gICAgY29uc3QgYXV0byogY2hhcmFjdGVycyA9IHNlZ21lbnQudGV4dC5jaGFy
YWN0ZXJzPENoYXJhY3RlclR5cGU+KCk7Ci0gICAgdW5zaWduZWQgc2VnbWVudExlbmd0aCA9IHNl
Z21lbnQuZW5kIC0gc2VnbWVudC5zdGFydDsKLSAgICB1bnNpZ25lZCBzZWdtZW50UG9zaXRpb24g
PSBwb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnQ7Ci0gICAgcmV0dXJuIG5leHRCcmVha2FibGVQb3Np
dGlvbk5vbkxvb3NlbHk8Q2hhcmFjdGVyVHlwZSwgTkJTUEJlaGF2aW9yOjpJZ25vcmVOQlNQPihs
aW5lQnJlYWtJdGVyYXRvciwgY2hhcmFjdGVycywgc2VnbWVudExlbmd0aCwgc2VnbWVudFBvc2l0
aW9uKTsKLX0KLQotdW5zaWduZWQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OmZpbmROZXh0QnJlYWth
YmxlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgd2hpbGUgKCFpc0Vu
ZChwb3NpdGlvbikpIHsKLSAgICAgICAgYXV0byYgc2VnbWVudCA9IG1fZmxvd0NvbnRlbnRzLnNl
Z21lbnRGb3JQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIGlmIChzZWdtZW50LnRleHQuaW1w
bCgpICE9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nKCkuaW1wbCgpKSB7Ci0gICAgICAgICAg
ICBVQ2hhciBsYXN0Q2hhcmFjdGVyID0gc2VnbWVudC5zdGFydCA+IDAgPyBjaGFyYWN0ZXJBdChz
ZWdtZW50LnN0YXJ0IC0gMSkgOiAwOwotICAgICAgICAgICAgVUNoYXIgc2Vjb25kVG9MYXN0Q2hh
cmFjdGVyID0gc2VnbWVudC5zdGFydCA+IDEgPyBjaGFyYWN0ZXJBdChzZWdtZW50LnN0YXJ0IC0g
MikgOiAwOwotICAgICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5zZXRQcmlvckNvbnRleHQo
bGFzdENoYXJhY3Rlciwgc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIG1fbGlu
ZUJyZWFrSXRlcmF0b3IucmVzZXRTdHJpbmdBbmRSZWxlYXNlSXRlcmF0b3Ioc2VnbWVudC50ZXh0
LCBtX3N0eWxlLmxvY2FsZSwgTGluZUJyZWFrSXRlcmF0b3JNb2RlVUFYMTQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdW5zaWduZWQgYnJlYWthYmxlID0gc2VnbWVudC50ZXh0LmlzOEJpdCgpID8g
bmV4dEJyZWFrYWJsZVBvc2l0aW9uPExDaGFyPihtX2xpbmVCcmVha0l0ZXJhdG9yLCBzZWdtZW50
LCBwb3NpdGlvbikgOiBuZXh0QnJlYWthYmxlUG9zaXRpb248VUNoYXI+KG1fbGluZUJyZWFrSXRl
cmF0b3IsIHNlZ21lbnQsIHBvc2l0aW9uKTsKLSAgICAgICAgcG9zaXRpb24gPSBzZWdtZW50LnN0
YXJ0ICsgYnJlYWthYmxlOwotICAgICAgICBpZiAocG9zaXRpb24gPCBzZWdtZW50LmVuZCkKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGJvb2wgZmluZE5leHROb25XaGl0
ZXNwYWNlKGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudCwgY29uc3QgRmxvd0Nv
bnRlbnRzSXRlcmF0b3I6OlN0eWxlJiBzdHlsZSwgdW5zaWduZWQmIHBvc2l0aW9uLCB1bnNpZ25l
ZCYgc3BhY2VDb3VudCkKLXsKLSAgICBjb25zdCBhdXRvKiB0ZXh0ID0gc2VnbWVudC50ZXh0LmNo
YXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKLSAgICBmb3IgKDsgcG9zaXRpb24gPCBzZWdtZW50
LmVuZDsgKytwb3NpdGlvbikgewotICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHRleHRbcG9zaXRp
b24gLSBzZWdtZW50LnN0YXJ0XTsKLSAgICAgICAgYm9vbCBpc1NwYWNlID0gY2hhcmFjdGVyID09
ICcgJzsKLSAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UgPSBpc1NwYWNlIHx8IGNoYXJhY3RlciA9
PSAnXHQnIHx8ICghc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIGNoYXJhY3RlciA9PSAnXG4nKTsK
LSAgICAgICAgaWYgKCFpc1doaXRlc3BhY2UpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKGlzU3BhY2UpCi0gICAgICAgICAgICArK3NwYWNlQ291bnQ7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotdW5zaWduZWQgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OmZpbmRO
ZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCYgc3Bh
Y2VDb3VudCkgY29uc3QKLXsKLSAgICBGbG93Q29udGVudHM6Okl0ZXJhdG9yIGl0KG1fZmxvd0Nv
bnRlbnRzLCBtX2Zsb3dDb250ZW50cy5zZWdtZW50SW5kZXhGb3JQb3NpdGlvbihwb3NpdGlvbikp
OwotICAgIGZvciAoYXV0byBlbmQgPSBtX2Zsb3dDb250ZW50cy5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGJvb2wgZm91bmROb25XaGl0ZXNwYWNlID0gKCppdCkudGV4dC5pczhC
aXQoKSA/IGZpbmROZXh0Tm9uV2hpdGVzcGFjZTxMQ2hhcj4oKml0LCBtX3N0eWxlLCBwb3NpdGlv
biwgc3BhY2VDb3VudCkgOiBmaW5kTmV4dE5vbldoaXRlc3BhY2U8VUNoYXI+KCppdCwgbV9zdHls
ZSwgcG9zaXRpb24sIHNwYWNlQ291bnQpOwotICAgICAgICBpZiAoZm91bmROb25XaGl0ZXNwYWNl
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBwb3NpdGlvbjsKLX0KLQot
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1mbG9hdCBGbG93Q29udGVudHNJdGVy
YXRvcjo6cnVuV2lkdGgoY29uc3QgU3RyaW5nJiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChmcm9tIDw9IHRvKTsK
LSAgICBpZiAoZnJvbSA9PSB0bykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgYm9vbCBtZWFzdXJl
V2l0aEVuZFNwYWNlID0gbV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UgJiYgdG8gPCB0ZXh0Lmxl
bmd0aCgpICYmIHRleHRbdG9dID09ICcgJzsKLSAgICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkK
LSAgICAgICAgKyt0bzsKLSAgICBUZXh0UnVuIHJ1bih0ZXh0LmNoYXJhY3RlcnM8Q2hhcmFjdGVy
VHlwZT4oKSArIGZyb20sIHRvIC0gZnJvbSk7Ci0gICAgcnVuLnNldFhQb3MoeFBvc2l0aW9uKTsK
LSAgICBydW4uc2V0VGFiU2l6ZSghIW1fc3R5bGUudGFiV2lkdGgsIG1fc3R5bGUudGFiV2lkdGgp
OwotICAgIGZsb2F0IHdpZHRoID0gbV9zdHlsZS5mb250LndpZHRoKHJ1bik7Ci0gICAgaWYgKG1l
YXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgIHdpZHRoIC09IG1fc3R5bGUuc3BhY2VXaWR0aDsK
LSAgICByZXR1cm4gd2lkdGg7Ci19Ci0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzSXRlcmF0b3Iu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlNmUyMTA1OTU1ODgyMjVkNjdkYjAx
NmJlNDRlMTE2NjRhOTJmNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250
ZW50c0l0ZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yX2gKLSNkZWZp
bmUgU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50c0l0ZXJhdG9yX2gKLQotI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIgot
I2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUmVuZGVyQmxvY2tGbG93OwotCi1uYW1lc3Bh
Y2UgU2ltcGxlTGluZUxheW91dCB7Ci0KLWNsYXNzIEZsb3dDb250ZW50c0l0ZXJhdG9yICB7Ci1w
dWJsaWM6Ci0gICAgRmxvd0NvbnRlbnRzSXRlcmF0b3IoY29uc3QgUmVuZGVyQmxvY2tGbG93Jik7
Ci0gICAgY2xhc3MgVGV4dEZyYWdtZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gVHlw
ZSB7IENvbnRlbnRFbmQsIExpbmVCcmVhaywgV2hpdGVzcGFjZSwgTm9uV2hpdGVzcGFjZSB9Owot
ICAgICAgICBUZXh0RnJhZ21lbnQoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIFRleHRGcmFnbWVudCh1
bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBmbG9hdCB3aWR0aCwgVHlwZSB0eXBlLCBib29s
IGlzQ29sbGFwc2VkID0gZmFsc2UsIGJvb2wgaXNCcmVha2FibGUgPSBmYWxzZSkKLSAgICAgICAg
ICAgIDogbV9zdGFydChzdGFydCkKLSAgICAgICAgICAgICwgbV9lbmQoZW5kKQotICAgICAgICAg
ICAgLCBtX3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV93aWR0aCh3aWR0aCkKLSAgICAgICAg
ICAgICwgbV9pc0NvbGxhcHNlZChpc0NvbGxhcHNlZCkKLSAgICAgICAgICAgICwgbV9pc0JyZWFr
YWJsZShpc0JyZWFrYWJsZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWdu
ZWQgc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9Ci0gICAgICAgIHVuc2lnbmVkIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9Ci0gICAgICAgIGZsb2F0IHdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV93aWR0aDsgfQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KLSAgICAgICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXND
b2xsYXBzZWQ7IH0KLSAgICAgICAgYm9vbCBpc0JyZWFrYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNCcmVha2FibGU7IH0KLQotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBz
dGFydCgpID09IGVuZCgpOyB9Ci0gICAgICAgIFRleHRGcmFnbWVudCBzcGxpdCh1bnNpZ25lZCBz
cGxpdFBvc2l0aW9uLCBjb25zdCBGbG93Q29udGVudHNJdGVyYXRvciYpOwotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgdW5zaWduZWQgbV9zdGFydCB7IDAgfTsKLSAgICAgICAgdW5zaWduZWQgbV9l
bmQgeyAwIH07Ci0gICAgICAgIFR5cGUgbV90eXBlIHsgTm9uV2hpdGVzcGFjZSB9OwotICAgICAg
ICBmbG9hdCBtX3dpZHRoIHsgMCB9OwotICAgICAgICBib29sIG1faXNDb2xsYXBzZWQgeyBmYWxz
ZSB9OwotICAgICAgICBib29sIG1faXNCcmVha2FibGUgeyBmYWxzZSB9OwotICAgIH07Ci0gICAg
VGV4dEZyYWdtZW50IG5leHRUZXh0RnJhZ21lbnQoZmxvYXQgeFBvc2l0aW9uID0gMCk7Ci0gICAg
ZmxvYXQgdGV4dFdpZHRoKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRp
b24pIGNvbnN0OwotCi0gICAgc3RydWN0IFN0eWxlIHsKLSAgICAgICAgZXhwbGljaXQgU3R5bGUo
Y29uc3QgUmVuZGVyU3R5bGUmKTsKLQotICAgICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udDsK
LSAgICAgICAgRVRleHRBbGlnbiB0ZXh0QWxpZ247Ci0gICAgICAgIGJvb2wgY29sbGFwc2VXaGl0
ZXNwYWNlOwotICAgICAgICBib29sIHByZXNlcnZlTmV3bGluZTsKLSAgICAgICAgYm9vbCB3cmFw
TGluZXM7Ci0gICAgICAgIGJvb2wgYnJlYWtXb3JkT25PdmVyZmxvdzsKLSAgICAgICAgZmxvYXQg
c3BhY2VXaWR0aDsKLSAgICAgICAgdW5zaWduZWQgdGFiV2lkdGg7Ci0gICAgICAgIEF0b21pY1N0
cmluZyBsb2NhbGU7Ci0gICAgfTsKLSAgICBjb25zdCBTdHlsZSYgc3R5bGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0eWxlOyB9Ci0gICAgLy8gRklYTUU6IHJlbW92ZSBzcGxpdFJ1bnNBdFJlbmRlcmVy
Qm91bmRhcnkoKQotICAgIGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgc2VnbWVudEZvclBv
c2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdCB7IHJldHVybiBtX2Zsb3dDb250ZW50cy5z
ZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOyB9OwotCi1wcml2YXRlOgotICAgIHVuc2lnbmVk
IGZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25l
ZCYgc3BhY2VDb3VudCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgZmluZE5leHRCcmVha2FibGVQb3Np
dGlvbih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3Q7Ci0gICAgVUNoYXIgY2hhcmFjdGVyQXQodW5z
aWduZWQgcG9zaXRpb24pIGNvbnN0OwotICAgIGJvb2wgaXNMaW5lQnJlYWsodW5zaWduZWQgcG9z
aXRpb24pIGNvbnN0OwotICAgIGJvb2wgaXNFbmQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Owot
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBmbG9hdCBydW5XaWR0aChjb25z
dCBTdHJpbmcmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgZmxvYXQgeFBvc2l0aW9uKSBj
b25zdDsKLQotICAgIEZsb3dDb250ZW50cyBtX2Zsb3dDb250ZW50czsKLSAgICBtdXRhYmxlIExh
enlMaW5lQnJlYWtJdGVyYXRvciBtX2xpbmVCcmVha0l0ZXJhdG9yOwotICAgIGNvbnN0IFN0eWxl
IG1fc3R5bGU7Ci0gICAgdW5zaWduZWQgbV9wb3NpdGlvbiB7IDAgfTsKLX07Ci0KLWlubGluZSBG
bG93Q29udGVudHNJdGVyYXRvcjo6VGV4dEZyYWdtZW50IEZsb3dDb250ZW50c0l0ZXJhdG9yOjpU
ZXh0RnJhZ21lbnQ6OnNwbGl0KHVuc2lnbmVkIHNwbGl0UG9zaXRpb24sIGNvbnN0IEZsb3dDb250
ZW50c0l0ZXJhdG9yJiBmbG93Q29udGVudHNJdGVyYXRvcikKLXsKLSAgICBhdXRvIHVwZGF0ZUZy
YWdtZW50UHJvcGVydGllcyA9IFsmZmxvd0NvbnRlbnRzSXRlcmF0b3JdIChUZXh0RnJhZ21lbnQm
IGZyYWdtZW50KQotICAgIHsKLSAgICAgICAgZnJhZ21lbnQubV93aWR0aCA9IDA7Ci0gICAgICAg
IGlmIChmcmFnbWVudC5zdGFydCgpICE9IGZyYWdtZW50LmVuZCgpKQotICAgICAgICAgICAgZnJh
Z21lbnQubV93aWR0aCA9IGZsb3dDb250ZW50c0l0ZXJhdG9yLnRleHRXaWR0aChmcmFnbWVudC5z
dGFydCgpLCBmcmFnbWVudC5lbmQoKSwgMCk7Ci0gICAgICAgIGlmIChmcmFnbWVudC5zdGFydCgp
ICsgMSA+IGZyYWdtZW50LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmcmFn
bWVudC5tX2lzQ29sbGFwc2VkID0gZmFsc2U7Ci0gICAgICAgIGZyYWdtZW50Lm1faXNCcmVha2Fi
bGUgPSBmYWxzZTsKLSAgICB9OwotCi0gICAgVGV4dEZyYWdtZW50IG5ld0ZyYWdtZW50KCp0aGlz
KTsKLSAgICBtX2VuZCA9IHNwbGl0UG9zaXRpb247Ci0gICAgdXBkYXRlRnJhZ21lbnRQcm9wZXJ0
aWVzKCp0aGlzKTsKLQotICAgIG5ld0ZyYWdtZW50Lm1fc3RhcnQgPSBzcGxpdFBvc2l0aW9uOwot
ICAgIHVwZGF0ZUZyYWdtZW50UHJvcGVydGllcyhuZXdGcmFnbWVudCk7Ci0gICAgcmV0dXJuIG5l
d0ZyYWdtZW50OwotfQotCi1pbmxpbmUgVUNoYXIgRmxvd0NvbnRlbnRzSXRlcmF0b3I6OmNoYXJh
Y3RlckF0KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAotewotICAgIGF1dG8mIHNlZ21lbnQgPSBt
X2Zsb3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOwotICAgIHJldHVybiBz
ZWdtZW50LnRleHRbcG9zaXRpb24gLSBzZWdtZW50LnN0YXJ0XTsKLX0KLQotaW5saW5lIGJvb2wg
Rmxvd0NvbnRlbnRzSXRlcmF0b3I6OmlzTGluZUJyZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25z
dAotewotICAgIGlmIChpc0VuZChwb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyQXQocG9zaXRpb24p
ID09ICdcbic7Ci19Ci0KLWlubGluZSBib29sIEZsb3dDb250ZW50c0l0ZXJhdG9yOjppc0VuZCh1
bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gcG9zaXRpb24gPj0gbV9mbG93
Q29udGVudHMubGVuZ3RoKCk7Ci19Ci0KLX0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdt
ZW50SXRlcmF0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllNWY2NjQzYmE3MGM4MDg5NjBhOTIwNTFjZDJj
Y2M2ODUzODY3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmNwcApAQCAtMCwwICsxLDE5MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVMaW5l
TGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCIKKworI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxv
dy5oIgorI2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCisjaW5jbHVkZSAiU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50cy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7CisKK1RleHRGcmFn
bWVudEl0ZXJhdG9yOjpTdHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQorICAg
IDogZm9udChzdHlsZS5mb250Q2FzY2FkZSgpKQorICAgICwgdGV4dEFsaWduKHN0eWxlLnRleHRB
bGlnbigpKQorICAgICwgY29sbGFwc2VXaGl0ZXNwYWNlKHN0eWxlLmNvbGxhcHNlV2hpdGVTcGFj
ZSgpKQorICAgICwgcHJlc2VydmVOZXdsaW5lKHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKQorICAg
ICwgd3JhcExpbmVzKHN0eWxlLmF1dG9XcmFwKCkpCisgICAgLCBicmVha1dvcmRPbk92ZXJmbG93
KHN0eWxlLm92ZXJmbG93V3JhcCgpID09IEJyZWFrT3ZlcmZsb3dXcmFwICYmICh3cmFwTGluZXMg
fHwgcHJlc2VydmVOZXdsaW5lKSkKKyAgICAsIHNwYWNlV2lkdGgoZm9udC53aWR0aChUZXh0UnVu
KCZzcGFjZSwgMSkpKQorICAgICwgdGFiV2lkdGgoY29sbGFwc2VXaGl0ZXNwYWNlID8gMCA6IHN0
eWxlLnRhYlNpemUoKSkKKyAgICAsIGxvY2FsZShzdHlsZS5sb2NhbGUoKSkKK3sKK30KKworVGV4
dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJlbmRlckJsb2Nr
RmxvdyYgZmxvdykKKyAgICA6IG1fZmxvd0NvbnRlbnRzKGZsb3cpCisgICAgLCBtX2xpbmVCcmVh
a0l0ZXJhdG9yKCgqbV9mbG93Q29udGVudHMuYmVnaW4oKSkudGV4dCwgZmxvdy5zdHlsZSgpLmxv
Y2FsZSgpKQorICAgICwgbV9zdHlsZShmbG93LnN0eWxlKCkpCit7Cit9CisKK1RleHRGcmFnbWVu
dEl0ZXJhdG9yOjpUZXh0RnJhZ21lbnQgVGV4dEZyYWdtZW50SXRlcmF0b3I6Om5leHRUZXh0RnJh
Z21lbnQoZmxvYXQgeFBvc2l0aW9uKQoreworICAgIC8vIEEgZnJhZ21lbnQgY2FuIGVpdGhlciBi
ZQorICAgIC8vIDEuIG5ldyBsaW5lIGNoYXJhY3RlciB3aGVuIHByZXNlcnZlTmV3bGluZSBpcyBv
biAobm90IGNvbnNpZGVyZWQgYXMgd2hpdGVzcGFjZSkgb3IKKyAgICAvLyAyLiB3aGl0ZXNwYWNl
IChjb2xsYXNwZWQsIG5vbi1jb2xsYXBzZWQgbXVsdGkgb3Igc2luZ2xlKSBvcgorICAgIC8vIDMu
IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCisgICAgLy8gNC4gZW1wdHksIGluZGljYXRpbmcg
Y29udGVudCBlbmQuCisgICAgaWYgKGlzRW5kKG1fcG9zaXRpb24pKQorICAgICAgICByZXR1cm4g
VGV4dEZyYWdtZW50KG1fcG9zaXRpb24sIG1fcG9zaXRpb24sIDAsIFRleHRGcmFnbWVudDo6Q29u
dGVudEVuZCk7CisgICAgaWYgKGlzTGluZUJyZWFrKG1fcG9zaXRpb24pKSB7CisgICAgICAgIFRl
eHRGcmFnbWVudCBmcmFnbWVudChtX3Bvc2l0aW9uLCBtX3Bvc2l0aW9uICsgMSwgMCwgVGV4dEZy
YWdtZW50OjpMaW5lQnJlYWspOworICAgICAgICArK21fcG9zaXRpb247CisgICAgICAgIHJldHVy
biBmcmFnbWVudDsKKyAgICB9CisgICAgdW5zaWduZWQgc3BhY2VDb3VudCA9IDA7CisgICAgdW5z
aWduZWQgc3RhcnRQb3NpdGlvbiA9IG1fcG9zaXRpb247CisgICAgdW5zaWduZWQgZW5kUG9zaXRp
b24gPSBmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbihzdGFydFBvc2l0aW9uLCBzcGFjZUNv
dW50KTsKKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA8PSBlbmRQb3NpdGlvbik7CisgICAgaWYg
KGVuZFBvc2l0aW9uID4gc3RhcnRQb3NpdGlvbikgeworICAgICAgICBib29sIG11bHRpcGxlV2hp
dGVzcGFjZSA9IHN0YXJ0UG9zaXRpb24gKyAxIDwgZW5kUG9zaXRpb247CisgICAgICAgIGJvb2wg
aXNDb2xsYXBzZWQgPSBtdWx0aXBsZVdoaXRlc3BhY2UgJiYgbV9zdHlsZS5jb2xsYXBzZVdoaXRl
c3BhY2U7CisgICAgICAgIGJvb2wgaXNCcmVha2FibGUgPSAhaXNDb2xsYXBzZWQgJiYgbXVsdGlw
bGVXaGl0ZXNwYWNlOworICAgICAgICBmbG9hdCB3aWR0aCA9IDA7CisgICAgICAgIGlmIChpc0Nv
bGxhcHNlZCkKKyAgICAgICAgICAgIHdpZHRoID0gbV9zdHlsZS5zcGFjZVdpZHRoOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGVuZFBvc2l0aW9uIC0gc3Rh
cnRQb3NpdGlvbjsKKyAgICAgICAgICAgIHdpZHRoID0gbGVuZ3RoID09IHNwYWNlQ291bnQgPyBs
ZW5ndGggKiBtX3N0eWxlLnNwYWNlV2lkdGggOiB0ZXh0V2lkdGgoc3RhcnRQb3NpdGlvbiwgZW5k
UG9zaXRpb24sIHhQb3NpdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgbV9wb3NpdGlvbiA9IGVu
ZFBvc2l0aW9uOworICAgICAgICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uLCB3aWR0aCwgVGV4dEZyYWdtZW50OjpXaGl0ZXNwYWNlLCBpc0NvbGxhcHNlZCwg
aXNCcmVha2FibGUpOworICAgIH0KKyAgICBlbmRQb3NpdGlvbiA9IGZpbmROZXh0QnJlYWthYmxl
UG9zaXRpb24oc3RhcnRQb3NpdGlvbiArIDEpOworICAgIG1fcG9zaXRpb24gPSBlbmRQb3NpdGlv
bjsKKyAgICByZXR1cm4gVGV4dEZyYWdtZW50KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCB0
ZXh0V2lkdGgoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIHhQb3NpdGlvbiksIFRleHRGcmFn
bWVudDo6Tm9uV2hpdGVzcGFjZSwgZmFsc2UsIG1fc3R5bGUuYnJlYWtXb3JkT25PdmVyZmxvdyk7
Cit9CisKK2Zsb2F0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjp0ZXh0V2lkdGgodW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKK3sKKyAgICBjb25zdCBhdXRv
JiBmcm9tU2VnbWVudCA9IG1fZmxvd0NvbnRlbnRzLnNlZ21lbnRGb3JQb3NpdGlvbihmcm9tKTsK
KyAgICBpZiAoKG1fc3R5bGUuZm9udC5pc0ZpeGVkUGl0Y2goKSAmJiBmcm9tU2VnbWVudC5lbmQg
Pj0gdG8pIHx8IChmcm9tID09IGZyb21TZWdtZW50LnN0YXJ0ICYmIHRvID09IGZyb21TZWdtZW50
LmVuZCkpCisgICAgICAgIHJldHVybiBmcm9tU2VnbWVudC5yZW5kZXJlci53aWR0aChmcm9tIC0g
ZnJvbVNlZ21lbnQuc3RhcnQsIHRvIC0gZnJvbSwgbV9zdHlsZS5mb250LCB4UG9zaXRpb24sIG51
bGxwdHIsIG51bGxwdHIpOworCisgICAgY29uc3QgYXV0byogc2VnbWVudCA9ICZmcm9tU2VnbWVu
dDsKKyAgICBmbG9hdCB0ZXh0V2lkdGggPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kID0g
MDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBmcmFnbWVudEVuZCA9IHN0ZDo6bWluKHRv
LCBzZWdtZW50LT5lbmQpOworICAgICAgICB0ZXh0V2lkdGggKz0gc2VnbWVudC0+dGV4dC5pczhC
aXQoKSA/IHJ1bldpZHRoPExDaGFyPihzZWdtZW50LT50ZXh0LCBmcm9tIC0gc2VnbWVudC0+c3Rh
cnQsIGZyYWdtZW50RW5kIC0gc2VnbWVudC0+c3RhcnQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCkg
OgorICAgICAgICAgICAgcnVuV2lkdGg8VUNoYXI+KHNlZ21lbnQtPnRleHQsIGZyb20gLSBzZWdt
ZW50LT5zdGFydCwgZnJhZ21lbnRFbmQgLSBzZWdtZW50LT5zdGFydCwgeFBvc2l0aW9uICsgdGV4
dFdpZHRoKTsKKyAgICAgICAgaWYgKGZyYWdtZW50RW5kID09IHRvKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGZyb20gPSBmcmFnbWVudEVuZDsKKyAgICAgICAgc2VnbWVudCA9ICZtX2Zs
b3dDb250ZW50cy5zZWdtZW50Rm9yUG9zaXRpb24oZnJhZ21lbnRFbmQpOworICAgIH07CisKKyAg
ICByZXR1cm4gdGV4dFdpZHRoOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KK3N0YXRpYyB1bnNpZ25lZCBuZXh0QnJlYWthYmxlUG9zaXRpb24oTGF6eUxpbmVCcmVha0l0
ZXJhdG9yJiBsaW5lQnJlYWtJdGVyYXRvciwgY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBz
ZWdtZW50LCB1bnNpZ25lZCBwb3NpdGlvbikKK3sKKyAgICBjb25zdCBhdXRvKiBjaGFyYWN0ZXJz
ID0gc2VnbWVudC50ZXh0LmNoYXJhY3RlcnM8Q2hhcmFjdGVyVHlwZT4oKTsKKyAgICB1bnNpZ25l
ZCBzZWdtZW50TGVuZ3RoID0gc2VnbWVudC5lbmQgLSBzZWdtZW50LnN0YXJ0OworICAgIHVuc2ln
bmVkIHNlZ21lbnRQb3NpdGlvbiA9IHBvc2l0aW9uIC0gc2VnbWVudC5zdGFydDsKKyAgICByZXR1
cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uTm9uTG9vc2VseTxDaGFyYWN0ZXJUeXBlLCBOQlNQQmVo
YXZpb3I6Oklnbm9yZU5CU1A+KGxpbmVCcmVha0l0ZXJhdG9yLCBjaGFyYWN0ZXJzLCBzZWdtZW50
TGVuZ3RoLCBzZWdtZW50UG9zaXRpb24pOworfQorCit1bnNpZ25lZCBUZXh0RnJhZ21lbnRJdGVy
YXRvcjo6ZmluZE5leHRCcmVha2FibGVQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QK
K3sKKyAgICB3aGlsZSAoIWlzRW5kKHBvc2l0aW9uKSkgeworICAgICAgICBhdXRvJiBzZWdtZW50
ID0gbV9mbG93Q29udGVudHMuc2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsKKyAgICAgICAg
aWYgKHNlZ21lbnQudGV4dC5pbXBsKCkgIT0gbV9saW5lQnJlYWtJdGVyYXRvci5zdHJpbmcoKS5p
bXBsKCkpIHsKKyAgICAgICAgICAgIFVDaGFyIGxhc3RDaGFyYWN0ZXIgPSBzZWdtZW50LnN0YXJ0
ID4gMCA/IGNoYXJhY3RlckF0KHNlZ21lbnQuc3RhcnQgLSAxKSA6IDA7CisgICAgICAgICAgICBV
Q2hhciBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIgPSBzZWdtZW50LnN0YXJ0ID4gMSA/IGNoYXJhY3Rl
ckF0KHNlZ21lbnQuc3RhcnQgLSAyKSA6IDA7CisgICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJh
dG9yLnNldFByaW9yQ29udGV4dChsYXN0Q2hhcmFjdGVyLCBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIp
OworICAgICAgICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJ
dGVyYXRvcihzZWdtZW50LnRleHQsIG1fc3R5bGUubG9jYWxlLCBMaW5lQnJlYWtJdGVyYXRvck1v
ZGVVQVgxNCk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBicmVha2FibGUgPSBzZWdt
ZW50LnRleHQuaXM4Qml0KCkgPyBuZXh0QnJlYWthYmxlUG9zaXRpb248TENoYXI+KG1fbGluZUJy
ZWFrSXRlcmF0b3IsIHNlZ21lbnQsIHBvc2l0aW9uKSA6IG5leHRCcmVha2FibGVQb3NpdGlvbjxV
Q2hhcj4obV9saW5lQnJlYWtJdGVyYXRvciwgc2VnbWVudCwgcG9zaXRpb24pOworICAgICAgICBw
b3NpdGlvbiA9IHNlZ21lbnQuc3RhcnQgKyBicmVha2FibGU7CisgICAgICAgIGlmIChwb3NpdGlv
biA8IHNlZ21lbnQuZW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBw
b3NpdGlvbjsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMg
Ym9vbCBmaW5kTmV4dE5vbldoaXRlc3BhY2UoY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBz
ZWdtZW50LCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvcjo6U3R5bGUmIHN0eWxlLCB1bnNpZ25l
ZCYgcG9zaXRpb24sIHVuc2lnbmVkJiBzcGFjZUNvdW50KQoreworICAgIGNvbnN0IGF1dG8qIHRl
eHQgPSBzZWdtZW50LnRleHQuY2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpOworICAgIGZvciAo
OyBwb3NpdGlvbiA8IHNlZ21lbnQuZW5kOyArK3Bvc2l0aW9uKSB7CisgICAgICAgIGF1dG8gY2hh
cmFjdGVyID0gdGV4dFtwb3NpdGlvbiAtIHNlZ21lbnQuc3RhcnRdOworICAgICAgICBib29sIGlz
U3BhY2UgPSBjaGFyYWN0ZXIgPT0gJyAnOworICAgICAgICBib29sIGlzV2hpdGVzcGFjZSA9IGlz
U3BhY2UgfHwgY2hhcmFjdGVyID09ICdcdCcgfHwgKCFzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUgJiYg
Y2hhcmFjdGVyID09ICdcbicpOworICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoaXNTcGFjZSkKKyAgICAgICAgICAgICsrc3Bh
Y2VDb3VudDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit1bnNpZ25lZCBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6ZmluZE5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24odW5zaWduZWQgcG9z
aXRpb24sIHVuc2lnbmVkJiBzcGFjZUNvdW50KSBjb25zdAoreworICAgIEZsb3dDb250ZW50czo6
SXRlcmF0b3IgaXQobV9mbG93Q29udGVudHMsIG1fZmxvd0NvbnRlbnRzLnNlZ21lbnRJbmRleEZv
clBvc2l0aW9uKHBvc2l0aW9uKSk7CisgICAgZm9yIChhdXRvIGVuZCA9IG1fZmxvd0NvbnRlbnRz
LmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgYm9vbCBmb3VuZE5vbldoaXRlc3Bh
Y2UgPSAoKml0KS50ZXh0LmlzOEJpdCgpID8gZmluZE5leHROb25XaGl0ZXNwYWNlPExDaGFyPigq
aXQsIG1fc3R5bGUsIHBvc2l0aW9uLCBzcGFjZUNvdW50KSA6IGZpbmROZXh0Tm9uV2hpdGVzcGFj
ZTxVQ2hhcj4oKml0LCBtX3N0eWxlLCBwb3NpdGlvbiwgc3BhY2VDb3VudCk7CisgICAgICAgIGlm
IChmb3VuZE5vbldoaXRlc3BhY2UpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHBvc2l0aW9uOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK2Zs
b2F0IFRleHRGcmFnbWVudEl0ZXJhdG9yOjpydW5XaWR0aChjb25zdCBTdHJpbmcmIHRleHQsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0Cit7CisgICAg
QVNTRVJUKGZyb20gPD0gdG8pOworICAgIGlmIChmcm9tID09IHRvKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBib29sIG1lYXN1cmVXaXRoRW5kU3BhY2UgPSBtX3N0eWxlLmNvbGxhcHNlV2hpdGVz
cGFjZSAmJiB0byA8IHRleHQubGVuZ3RoKCkgJiYgdGV4dFt0b10gPT0gJyAnOworICAgIGlmICht
ZWFzdXJlV2l0aEVuZFNwYWNlKQorICAgICAgICArK3RvOworICAgIFRleHRSdW4gcnVuKHRleHQu
Y2hhcmFjdGVyczxDaGFyYWN0ZXJUeXBlPigpICsgZnJvbSwgdG8gLSBmcm9tKTsKKyAgICBydW4u
c2V0WFBvcyh4UG9zaXRpb24pOworICAgIHJ1bi5zZXRUYWJTaXplKCEhbV9zdHlsZS50YWJXaWR0
aCwgbV9zdHlsZS50YWJXaWR0aCk7CisgICAgZmxvYXQgd2lkdGggPSBtX3N0eWxlLmZvbnQud2lk
dGgocnVuKTsKKyAgICBpZiAobWVhc3VyZVdpdGhFbmRTcGFjZSkKKyAgICAgICAgd2lkdGggLT0g
bV9zdHlsZS5zcGFjZVdpZHRoOworICAgIHJldHVybiB3aWR0aDsKK30KKworfQorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21l
bnRJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRU
ZXh0RnJhZ21lbnRJdGVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MzcyMWJkMTYxODE3N2IxODNkNzkw
NTIxMzRmZjY4ZDBjOTE5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgKQEAgLTAsMCArMSwx
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJ
dGVyYXRvcl9oCisjZGVmaW5lIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21lbnRJdGVyYXRvcl9o
CisKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHMuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgorI2luY2x1ZGUg
ImJyZWFrX2xpbmVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFJlbmRlckJsb2Nr
RmxvdzsKKworbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgeworCitjbGFzcyBUZXh0RnJhZ21l
bnRJdGVyYXRvciAgeworcHVibGljOgorICAgIFRleHRGcmFnbWVudEl0ZXJhdG9yKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYpOworICAgIGNsYXNzIFRleHRGcmFnbWVudCB7CisgICAgcHVibGljOgor
ICAgICAgICBlbnVtIFR5cGUgeyBDb250ZW50RW5kLCBMaW5lQnJlYWssIFdoaXRlc3BhY2UsIE5v
bldoaXRlc3BhY2UgfTsKKyAgICAgICAgVGV4dEZyYWdtZW50KCkgPSBkZWZhdWx0OworICAgICAg
ICBUZXh0RnJhZ21lbnQodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgZmxvYXQgd2lkdGgs
IFR5cGUgdHlwZSwgYm9vbCBpc0NvbGxhcHNlZCA9IGZhbHNlLCBib29sIGlzQnJlYWthYmxlID0g
ZmFsc2UpCisgICAgICAgICAgICA6IG1fc3RhcnQoc3RhcnQpCisgICAgICAgICAgICAsIG1fZW5k
KGVuZCkKKyAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICAgICAsIG1fd2lkdGgo
d2lkdGgpCisgICAgICAgICAgICAsIG1faXNDb2xsYXBzZWQoaXNDb2xsYXBzZWQpCisgICAgICAg
ICAgICAsIG1faXNCcmVha2FibGUoaXNCcmVha2FibGUpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydDsgfQorICAg
ICAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQorICAgICAgICBmbG9h
dCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICAgICAgVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgICAgIGJvb2wgaXNDb2xsYXBzZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzQ29sbGFwc2VkOyB9CisgICAgICAgIGJvb2wgaXNCcmVha2FibGUoKSBj
b25zdCB7IHJldHVybiBtX2lzQnJlYWthYmxlOyB9CisKKyAgICAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gc3RhcnQoKSA9PSBlbmQoKTsgfQorICAgICAgICBUZXh0RnJhZ21lbnQg
c3BsaXQodW5zaWduZWQgc3BsaXRQb3NpdGlvbiwgY29uc3QgVGV4dEZyYWdtZW50SXRlcmF0b3Im
KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnQgeyAwIH07CisgICAg
ICAgIHVuc2lnbmVkIG1fZW5kIHsgMCB9OworICAgICAgICBUeXBlIG1fdHlwZSB7IE5vbldoaXRl
c3BhY2UgfTsKKyAgICAgICAgZmxvYXQgbV93aWR0aCB7IDAgfTsKKyAgICAgICAgYm9vbCBtX2lz
Q29sbGFwc2VkIHsgZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX2lzQnJlYWthYmxlIHsgZmFsc2Ug
fTsKKyAgICB9OworICAgIFRleHRGcmFnbWVudCBuZXh0VGV4dEZyYWdtZW50KGZsb2F0IHhQb3Np
dGlvbiA9IDApOworICAgIGZsb2F0IHRleHRXaWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsKKworICAgIHN0cnVjdCBTdHlsZSB7CisgICAgICAg
IGV4cGxpY2l0IFN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJik7CisKKyAgICAgICAgY29uc3QgRm9u
dENhc2NhZGUmIGZvbnQ7CisgICAgICAgIEVUZXh0QWxpZ24gdGV4dEFsaWduOworICAgICAgICBi
b29sIGNvbGxhcHNlV2hpdGVzcGFjZTsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZU5ld2xpbmU7Cisg
ICAgICAgIGJvb2wgd3JhcExpbmVzOworICAgICAgICBib29sIGJyZWFrV29yZE9uT3ZlcmZsb3c7
CisgICAgICAgIGZsb2F0IHNwYWNlV2lkdGg7CisgICAgICAgIHVuc2lnbmVkIHRhYldpZHRoOwor
ICAgICAgICBBdG9taWNTdHJpbmcgbG9jYWxlOworICAgIH07CisgICAgY29uc3QgU3R5bGUmIHN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQorICAgIC8vIEZJWE1FOiByZW1vdmUgc3Bs
aXRSdW5zQXRSZW5kZXJlckJvdW5kYXJ5KCkKKyAgICBjb25zdCBGbG93Q29udGVudHM6OlNlZ21l
bnQmIHNlZ21lbnRGb3JQb3NpdGlvbih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4g
bV9mbG93Q29udGVudHMuc2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9uKTsgfTsKKworcHJpdmF0
ZToKKyAgICB1bnNpZ25lZCBmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbih1bnNpZ25lZCBw
b3NpdGlvbiwgdW5zaWduZWQmIHNwYWNlQ291bnQpIGNvbnN0OworICAgIHVuc2lnbmVkIGZpbmRO
ZXh0QnJlYWthYmxlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0OworICAgIFVDaGFy
IGNoYXJhY3RlckF0KHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIGlzTGluZUJy
ZWFrKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIGlzRW5kKHVuc2lnbmVkIHBv
c2l0aW9uKSBjb25zdDsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gZmxv
YXQgcnVuV2lkdGgoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZs
b2F0IHhQb3NpdGlvbikgY29uc3Q7CisKKyAgICBGbG93Q29udGVudHMgbV9mbG93Q29udGVudHM7
CisgICAgbXV0YWJsZSBMYXp5TGluZUJyZWFrSXRlcmF0b3IgbV9saW5lQnJlYWtJdGVyYXRvcjsK
KyAgICBjb25zdCBTdHlsZSBtX3N0eWxlOworICAgIHVuc2lnbmVkIG1fcG9zaXRpb24geyAwIH07
Cit9OworCitpbmxpbmUgVGV4dEZyYWdtZW50SXRlcmF0b3I6OlRleHRGcmFnbWVudCBUZXh0RnJh
Z21lbnRJdGVyYXRvcjo6VGV4dEZyYWdtZW50OjpzcGxpdCh1bnNpZ25lZCBzcGxpdFBvc2l0aW9u
LCBjb25zdCBUZXh0RnJhZ21lbnRJdGVyYXRvciYgdGV4dEZyYWdtZW50SXRlcmF0b3IpCit7Cisg
ICAgYXV0byB1cGRhdGVGcmFnbWVudFByb3BlcnRpZXMgPSBbJnRleHRGcmFnbWVudEl0ZXJhdG9y
XSAoVGV4dEZyYWdtZW50JiBmcmFnbWVudCkKKyAgICB7CisgICAgICAgIGZyYWdtZW50Lm1fd2lk
dGggPSAwOworICAgICAgICBpZiAoZnJhZ21lbnQuc3RhcnQoKSAhPSBmcmFnbWVudC5lbmQoKSkK
KyAgICAgICAgICAgIGZyYWdtZW50Lm1fd2lkdGggPSB0ZXh0RnJhZ21lbnRJdGVyYXRvci50ZXh0
V2lkdGgoZnJhZ21lbnQuc3RhcnQoKSwgZnJhZ21lbnQuZW5kKCksIDApOworICAgICAgICBpZiAo
ZnJhZ21lbnQuc3RhcnQoKSArIDEgPiBmcmFnbWVudC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZnJhZ21lbnQubV9pc0NvbGxhcHNlZCA9IGZhbHNlOworICAgICAgICBmcmFn
bWVudC5tX2lzQnJlYWthYmxlID0gZmFsc2U7CisgICAgfTsKKworICAgIFRleHRGcmFnbWVudCBu
ZXdGcmFnbWVudCgqdGhpcyk7CisgICAgbV9lbmQgPSBzcGxpdFBvc2l0aW9uOworICAgIHVwZGF0
ZUZyYWdtZW50UHJvcGVydGllcygqdGhpcyk7CisKKyAgICBuZXdGcmFnbWVudC5tX3N0YXJ0ID0g
c3BsaXRQb3NpdGlvbjsKKyAgICB1cGRhdGVGcmFnbWVudFByb3BlcnRpZXMobmV3RnJhZ21lbnQp
OworICAgIHJldHVybiBuZXdGcmFnbWVudDsKK30KKworaW5saW5lIFVDaGFyIFRleHRGcmFnbWVu
dEl0ZXJhdG9yOjpjaGFyYWN0ZXJBdCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBh
dXRvJiBzZWdtZW50ID0gbV9mbG93Q29udGVudHMuc2VnbWVudEZvclBvc2l0aW9uKHBvc2l0aW9u
KTsKKyAgICByZXR1cm4gc2VnbWVudC50ZXh0W3Bvc2l0aW9uIC0gc2VnbWVudC5zdGFydF07Cit9
CisKK2lubGluZSBib29sIFRleHRGcmFnbWVudEl0ZXJhdG9yOjppc0xpbmVCcmVhayh1bnNpZ25l
ZCBwb3NpdGlvbikgY29uc3QKK3sKKyAgICBpZiAoaXNFbmQocG9zaXRpb24pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYmIGNoYXJh
Y3RlckF0KHBvc2l0aW9uKSA9PSAnXG4nOworfQorCitpbmxpbmUgYm9vbCBUZXh0RnJhZ21lbnRJ
dGVyYXRvcjo6aXNFbmQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIHBv
c2l0aW9uID49IG1fZmxvd0NvbnRlbnRzLmxlbmd0aCgpOworfQorCit9Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>