<?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>85688</bug_id>
          
          <creation_ts>2012-05-04 18:22:10 -0700</creation_ts>
          <short_desc>Rename ICULocale to LocaleICU, part 1</short_desc>
          <delta_ts>2012-05-04 20:06:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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>
          
          <blocked>85695</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>haraken</cc>
    
    <cc>morrita</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>616847</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-04 18:22:10 -0700</bug_when>
    <thetext>Rename ICULocale to LocaleICU, part 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616854</commentid>
    <comment_count>1</comment_count>
      <attachid>140372</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-04 18:33:22 -0700</bug_when>
    <thetext>Created attachment 140372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616857</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-04 18:38:23 -0700</bug_when>
    <thetext>Attachment 140372 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/text/LocaleICU.h:31:  #ifndef header guard has wrong style, please use: LocaleICU_h  [build/header_guard] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616872</commentid>
    <comment_count>3</comment_count>
      <attachid>140372</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-05-04 19:41:44 -0700</bug_when>
    <thetext>Comment on attachment 140372
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=140372&amp;action=review

&gt; Source/WebCore/ChangeLog:8
&gt; +        Rename it for consistency. Our convension is Foo&lt;Platform&gt;.{cpp,h}.

Nit: convention

&gt; Source/WebCore/WebCore.gypi:4489
&gt; +            &apos;platform/text/LocaleICU.cpp&apos;,
&gt; +            &apos;platform/text/LocaleICU.h&apos;,

Nit: Alphabetical order please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616874</commentid>
    <comment_count>4</comment_count>
      <attachid>140372</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-04 19:48:59 -0700</bug_when>
    <thetext>Comment on attachment 140372
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=140372&amp;action=review

Thanks!

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        Rename it for consistency. Our convension is Foo&lt;Platform&gt;.{cpp,h}.
&gt; 
&gt; Nit: convention

oops

&gt;&gt; Source/WebCore/WebCore.gypi:4489
&gt;&gt; +            &apos;platform/text/LocaleICU.h&apos;,
&gt; 
&gt; Nit: Alphabetical order please.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616876</commentid>
    <comment_count>5</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-04 19:53:23 -0700</bug_when>
    <thetext>Committed r116204: &lt;http://trac.webkit.org/changeset/116204&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140372</attachid>
            <date>2012-05-04 18:33:22 -0700</date>
            <delta_ts>2012-05-04 19:48:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85688-20120505103320.patch</filename>
            <type>text/plain</type>
            <size>47130</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2MTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTU3YjYyODUyOTQ0YzJj
ZmUxNzI3MjA2MGIxYWNmZTE2ZWM2ZDRhNi4uMDQ5OGFkNTYxYzk0NzRlOGFiZGIxYmRhNjg4YThm
YzBkYzY1ZmNhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA1LTA0ICBLZW50
IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZW5hbWUgSUNVTG9jYWxl
IHRvIExvY2FsZUlDVSwgcGFydCAxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NTY4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbmFtZSBpdCBmb3IgY29uc2lzdGVuY3kuIE91ciBjb252ZW5zaW9uIGlz
IEZvbzxQbGF0Zm9ybT4ue2NwcCxofS4KKyAgICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIG9ubHkg
ZmlsZSBuYW1lcy4gV2UnbGwgcmVuYW1lIElDVUxvY2FsZSBjbGFzcworICAgICAgICBieSBhIGZv
bGxvd2luZyBwYXRjaC4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2VzLgorCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvSUNVTG9jYWxlLmNwcC4K
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9JQ1VMb2NhbGUuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L0xvY2FsaXplZERhdGVJQ1UuY3BwOiBSZW5hbWUgSUNVTG9jYWxlLmggdG8gTG9jYWxlSUNV
LmguCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3BwOiBkaXR0
by4KKwogMjAxMi0wNS0wNCAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIENoYW5nZXMgdG8gbGF5ZXIgdHJlZSBzdHJ1Y3R1cmUgbmVl
ZCB0byBiZSB0cmFja2VkIHByb3Blcmx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDI2
Yjg5N2MyODRjYWJmNTgxNWJiNDJmNDc5MjFkMzAxM2NiMDQ0ZDQuLjRmN2Q0NDAzNzIyMWUwNTc2
OGUzMDVlODk3YTk4NGRjMmI1NTZmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMTItMDUtMDQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJlbmFtZSBJQ1VMb2NhbGUgdG8gTG9jYWxlSUNVLCBwYXJ0IDEKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1Njg4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9Mb2NhbGl6
ZWROdW1iZXJJQ1VUZXN0LmNwcDogUmVuYW1lIElDVUxvY2FsZS5oIHRvIExvY2FsZUlDVS5oLgor
CiAyMDEyLTA1LTA0ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gQ2hhbmdlcyB0byBsYXllciB0cmVlIHN0cnVjdHVyZSBuZWVkIHRv
IGJlIHRyYWNrZWQgcHJvcGVybHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjMTM0ZjM3MmI0NzJlNWVj
YTAxNjgwZTU1YjkxMGM1ZTA3ZTU1NWJmLi4xNWUxMGQzNDQ0MDIzMWU0ZTAxYjQ5OWJiNTZiMDhh
ZWY5MGQ1MTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00NDgxLDEyICs0NDgxLDEyIEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL3RleHQvSHlwaGVuYXRpb24uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS90ZXh0
L0h5cGhlbmF0aW9uLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvSUNVTG9jYWxlLmNw
cCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9JQ1VMb2NhbGUuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vdGV4dC9MaW5lRW5kaW5nLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
dGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vdGV4
dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdEZWZhdWx0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vdGV4dC9Mb2NhbGVUb1NjcmlwdE1hcHBpbmdJQ1UuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvTG9j
YWxlSUNVLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL3RleHQvTG9jYWxlV2luLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vdGV4dC9Mb2NhbGVXaW4uaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vdGV4dC9Mb2NhbGl6ZWREYXRlLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9JQ1VMb2NhbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9JQ1VMb2NhbGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2FmYTQ0NDcz
NGNmZDQzMjA3MjIzNjA2MDRiZjM2NzYzYTBlNzQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvSUNVTG9j
YWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIklDVUxvY2FsZS5oIgotCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
LQotdXNpbmcgbmFtZXNwYWNlIGljdTsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotSUNVTG9jYWxlOjpJQ1VMb2NhbGUoY29uc3QgY2hhciogbG9jYWxlKQot
ICAgIDogbV9sb2NhbGUobG9jYWxlKQotICAgICwgbV9udW1iZXJGb3JtYXQoMCkKLSAgICAsIG1f
c2hvcnREYXRlRm9ybWF0KDApCi0gICAgLCBtX2RpZENyZWF0ZURlY2ltYWxGb3JtYXQoZmFsc2Up
Ci0gICAgLCBtX2RpZENyZWF0ZVNob3J0RGF0ZUZvcm1hdChmYWxzZSkKLSNpZiBFTkFCTEUoQ0FM
RU5EQVJfUElDS0VSKQotICAgICwgbV9maXJzdERheU9mV2VlaygwKQotI2VuZGlmCi17Ci19Ci0K
LUlDVUxvY2FsZTo6fklDVUxvY2FsZSgpCi17Ci0gICAgdW51bV9jbG9zZShtX251bWJlckZvcm1h
dCk7Ci0gICAgdWRhdF9jbG9zZShtX3Nob3J0RGF0ZUZvcm1hdCk7Ci19Ci0KLVBhc3NPd25QdHI8
SUNVTG9jYWxlPiBJQ1VMb2NhbGU6OmNyZWF0ZShjb25zdCBjaGFyKiBsb2NhbGVTdHJpbmcpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJQ1VMb2NhbGUobG9jYWxlU3RyaW5nKSk7Ci19Ci0K
LVBhc3NPd25QdHI8SUNVTG9jYWxlPiBJQ1VMb2NhbGU6OmNyZWF0ZUZvckN1cnJlbnRMb2NhbGUo
KQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgSUNVTG9jYWxlKDApKTsKLX0KLQotSUNVTG9j
YWxlKiBJQ1VMb2NhbGU6OmN1cnJlbnRMb2NhbGUoKQotewotICAgIHN0YXRpYyBJQ1VMb2NhbGUq
IGN1cnJlbnRJQ1VMb2NhbGUgPSBJQ1VMb2NhbGU6OmNyZWF0ZUZvckN1cnJlbnRMb2NhbGUoKS5s
ZWFrUHRyKCk7Ci0gICAgcmV0dXJuIGN1cnJlbnRJQ1VMb2NhbGU7Ci19Ci0KLXZvaWQgSUNVTG9j
YWxlOjpzZXREZWNpbWFsU3ltYm9sKHVuc2lnbmVkIGluZGV4LCBVTnVtYmVyRm9ybWF0U3ltYm9s
IHN5bWJvbCkKLXsKLSAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICBp
bnQzMl90IGJ1ZmZlckxlbmd0aCA9IHVudW1fZ2V0U3ltYm9sKG1fbnVtYmVyRm9ybWF0LCBzeW1i
b2wsIDAsIDAsICZzdGF0dXMpOwotICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSB8fCBzdGF0
dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOwotICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVz
KSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0gICAgICAgIHJldHVybjsK
LSAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZmZXJMZW5ndGgpOwotICAgIHN0YXR1cyA9IFVf
WkVST19FUlJPUjsKLSAgICB1bnVtX2dldFN5bWJvbChtX251bWJlckZvcm1hdCwgc3ltYm9sLCBi
dWZmZXIuZGF0YSgpLCBidWZmZXJMZW5ndGgsICZzdGF0dXMpOwotICAgIGlmIChVX0ZBSUxVUkUo
c3RhdHVzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZGVjaW1hbFN5bWJvbHNbaW5kZXhdID0g
U3RyaW5nOjphZG9wdChidWZmZXIpOwotfQotCi12b2lkIElDVUxvY2FsZTo6c2V0RGVjaW1hbFRl
eHRBdHRyaWJ1dGUoU3RyaW5nJiBkZXN0aW5hdGlvbiwgVU51bWJlckZvcm1hdFRleHRBdHRyaWJ1
dGUgdGFnKQotewotICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgIGlu
dDMyX3QgYnVmZmVyTGVuZ3RoID0gdW51bV9nZXRUZXh0QXR0cmlidXRlKG1fbnVtYmVyRm9ybWF0
LCB0YWcsIDAsIDAsICZzdGF0dXMpOwotICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSB8fCBz
dGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOwotICAgIGlmIChVX0ZBSUxVUkUoc3Rh
dHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCi0gICAgICAgIHJldHVy
bjsKLSAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZmZXJMZW5ndGgpOwotICAgIHN0YXR1cyA9
IFVfWkVST19FUlJPUjsKLSAgICB1bnVtX2dldFRleHRBdHRyaWJ1dGUobV9udW1iZXJGb3JtYXQs
IHRhZywgYnVmZmVyLmRhdGEoKSwgYnVmZmVyTGVuZ3RoLCAmc3RhdHVzKTsKLSAgICBBU1NFUlQo
VV9TVUNDRVNTKHN0YXR1cykpOwotICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGRlc3RpbmF0aW9uID0gU3RyaW5nOjphZG9wdChidWZmZXIpOwotfQotCi12
b2lkIElDVUxvY2FsZTo6aW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQoKQotewotICAgIGlmIChtX2Rp
ZENyZWF0ZURlY2ltYWxGb3JtYXQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2RpZENyZWF0ZURl
Y2ltYWxGb3JtYXQgPSB0cnVlOwotICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OwotICAgIG1fbnVtYmVyRm9ybWF0ID0gdW51bV9vcGVuKFVOVU1fREVDSU1BTCwgMCwgMCwgbV9s
b2NhbGUuZGF0YSgpLCAwLCAmc3RhdHVzKTsKLSAgICBpZiAoIVVfU1VDQ0VTUyhzdGF0dXMpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzZXREZWNpbWFsU3ltYm9sKDAsIFVOVU1fWkVST19ESUdJ
VF9TWU1CT0wpOwotICAgIHNldERlY2ltYWxTeW1ib2woMSwgVU5VTV9PTkVfRElHSVRfU1lNQk9M
KTsKLSAgICBzZXREZWNpbWFsU3ltYm9sKDIsIFVOVU1fVFdPX0RJR0lUX1NZTUJPTCk7Ci0gICAg
c2V0RGVjaW1hbFN5bWJvbCgzLCBVTlVNX1RIUkVFX0RJR0lUX1NZTUJPTCk7Ci0gICAgc2V0RGVj
aW1hbFN5bWJvbCg0LCBVTlVNX0ZPVVJfRElHSVRfU1lNQk9MKTsKLSAgICBzZXREZWNpbWFsU3lt
Ym9sKDUsIFVOVU1fRklWRV9ESUdJVF9TWU1CT0wpOwotICAgIHNldERlY2ltYWxTeW1ib2woNiwg
VU5VTV9TSVhfRElHSVRfU1lNQk9MKTsKLSAgICBzZXREZWNpbWFsU3ltYm9sKDcsIFVOVU1fU0VW
RU5fRElHSVRfU1lNQk9MKTsKLSAgICBzZXREZWNpbWFsU3ltYm9sKDgsIFVOVU1fRUlHSFRfRElH
SVRfU1lNQk9MKTsKLSAgICBzZXREZWNpbWFsU3ltYm9sKDksIFVOVU1fTklORV9ESUdJVF9TWU1C
T0wpOwotICAgIHNldERlY2ltYWxTeW1ib2woRGVjaW1hbFNlcGFyYXRvckluZGV4LCBVTlVNX0RF
Q0lNQUxfU0VQQVJBVE9SX1NZTUJPTCk7Ci0gICAgc2V0RGVjaW1hbFN5bWJvbChHcm91cFNlcGFy
YXRvckluZGV4LCBVTlVNX0dST1VQSU5HX1NFUEFSQVRPUl9TWU1CT0wpOwotICAgIHNldERlY2lt
YWxUZXh0QXR0cmlidXRlKG1fcG9zaXRpdmVQcmVmaXgsIFVOVU1fUE9TSVRJVkVfUFJFRklYKTsK
LSAgICBzZXREZWNpbWFsVGV4dEF0dHJpYnV0ZShtX3Bvc2l0aXZlU3VmZml4LCBVTlVNX1BPU0lU
SVZFX1NVRkZJWCk7Ci0gICAgc2V0RGVjaW1hbFRleHRBdHRyaWJ1dGUobV9uZWdhdGl2ZVByZWZp
eCwgVU5VTV9ORUdBVElWRV9QUkVGSVgpOwotICAgIHNldERlY2ltYWxUZXh0QXR0cmlidXRlKG1f
bmVnYXRpdmVTdWZmaXgsIFVOVU1fTkVHQVRJVkVfU1VGRklYKTsKLSAgICBBU1NFUlQoIW1fcG9z
aXRpdmVQcmVmaXguaXNFbXB0eSgpIHx8ICFtX3Bvc2l0aXZlU3VmZml4LmlzRW1wdHkoKSB8fCAh
bV9uZWdhdGl2ZVByZWZpeC5pc0VtcHR5KCkgfHwgIW1fbmVnYXRpdmVTdWZmaXguaXNFbXB0eSgp
KTsKLX0KLQotU3RyaW5nIElDVUxvY2FsZTo6Y29udmVydFRvTG9jYWxpemVkTnVtYmVyKGNvbnN0
IFN0cmluZyYgaW5wdXQpCi17Ci0gICAgaW5pdGlhbGl6ZURlY2ltYWxGb3JtYXQoKTsKLSAgICBp
ZiAoIW1fbnVtYmVyRm9ybWF0IHx8IGlucHV0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGlu
cHV0OwotCi0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgYm9vbCBpc05lZ2F0aXZlID0gZmFsc2U7
Ci0gICAgVW5pY29kZVN0cmluZyB1c3RyaW5nOwotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
LSAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShpbnB1dC5sZW5ndGgoKSk7Ci0KLSAgICBpZiAo
aW5wdXRbMF0gPT0gJy0nKSB7Ci0gICAgICAgICsraTsKLSAgICAgICAgaXNOZWdhdGl2ZSA9IHRy
dWU7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fbmVnYXRpdmVQcmVmaXgpOwotICAgIH0gZWxz
ZQotICAgICAgICBidWlsZGVyLmFwcGVuZChtX3Bvc2l0aXZlUHJlZml4KTsKLQotICAgIGZvciAo
OyBpIDwgaW5wdXQubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBzd2l0Y2ggKGlucHV0W2ldKSB7
Ci0gICAgICAgIGNhc2UgJzAnOgotICAgICAgICBjYXNlICcxJzoKLSAgICAgICAgY2FzZSAnMic6
Ci0gICAgICAgIGNhc2UgJzMnOgotICAgICAgICBjYXNlICc0JzoKLSAgICAgICAgY2FzZSAnNSc6
Ci0gICAgICAgIGNhc2UgJzYnOgotICAgICAgICBjYXNlICc3JzoKLSAgICAgICAgY2FzZSAnOCc6
Ci0gICAgICAgIGNhc2UgJzknOgotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kZWNpbWFs
U3ltYm9sc1tpbnB1dFtpXSAtICcwJ10pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgJy4nOgotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kZWNpbWFsU3ltYm9sc1tEZWNp
bWFsU2VwYXJhdG9ySW5kZXhdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBidWlsZGVyLmFwcGVuZChpc05lZ2F0aXZlID8gbV9uZWdhdGl2ZVN1ZmZpeCA6IG1fcG9z
aXRpdmVTdWZmaXgpOwotCi0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotc3Rh
dGljIGJvb2wgbWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIHBvc2l0aW9uLCBj
b25zdCBTdHJpbmcmIHBhcnQpCi17Ci0gICAgaWYgKHBhcnQuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBpZiAocG9zaXRpb24gKyBwYXJ0Lmxlbmd0aCgpID4gdGV4dC5sZW5n
dGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwYXJ0Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRleHRbcG9zaXRpb24gKyBpXSAh
PSBwYXJ0W2ldKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBJQ1VMb2NhbGU6OmRldGVjdFNpZ25BbmRHZXREaWdpdFJhbmdlKGNv
bnN0IFN0cmluZyYgaW5wdXQsIGJvb2wmIGlzTmVnYXRpdmUsIHVuc2lnbmVkJiBzdGFydEluZGV4
LCB1bnNpZ25lZCYgZW5kSW5kZXgpCi17Ci0gICAgc3RhcnRJbmRleCA9IDA7Ci0gICAgZW5kSW5k
ZXggPSBpbnB1dC5sZW5ndGgoKTsKLSAgICBpZiAobV9uZWdhdGl2ZVByZWZpeC5pc0VtcHR5KCkg
JiYgbV9uZWdhdGl2ZVN1ZmZpeC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKGlucHV0LnN0YXJ0
c1dpdGgobV9wb3NpdGl2ZVByZWZpeCkgJiYgaW5wdXQuZW5kc1dpdGgobV9wb3NpdGl2ZVN1ZmZp
eCkpIHsKLSAgICAgICAgICAgIGlzTmVnYXRpdmUgPSBmYWxzZTsKLSAgICAgICAgICAgIHN0YXJ0
SW5kZXggPSBtX3Bvc2l0aXZlUHJlZml4Lmxlbmd0aCgpOwotICAgICAgICAgICAgZW5kSW5kZXgg
LT0gbV9wb3NpdGl2ZVN1ZmZpeC5sZW5ndGgoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBpc05lZ2F0aXZlID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoaW5wdXQuc3Rh
cnRzV2l0aChtX25lZ2F0aXZlUHJlZml4KSAmJiBpbnB1dC5lbmRzV2l0aChtX25lZ2F0aXZlU3Vm
Zml4KSkgewotICAgICAgICAgICAgaXNOZWdhdGl2ZSA9IHRydWU7Ci0gICAgICAgICAgICBzdGFy
dEluZGV4ID0gbV9uZWdhdGl2ZVByZWZpeC5sZW5ndGgoKTsKLSAgICAgICAgICAgIGVuZEluZGV4
IC09IG1fbmVnYXRpdmVTdWZmaXgubGVuZ3RoKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpc05lZ2F0aXZlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0
aChtX3Bvc2l0aXZlUHJlZml4KSAmJiBpbnB1dC5lbmRzV2l0aChtX3Bvc2l0aXZlU3VmZml4KSkg
ewotICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBtX3Bvc2l0aXZlUHJlZml4Lmxlbmd0aCgp
OwotICAgICAgICAgICAgICAgIGVuZEluZGV4IC09IG1fcG9zaXRpdmVTdWZmaXgubGVuZ3RoKCk7
Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXVuc2lnbmVkIElDVUxvY2FsZTo6
bWF0Y2hlZERlY2ltYWxTeW1ib2xJbmRleChjb25zdCBTdHJpbmcmIGlucHV0LCB1bnNpZ25lZCYg
cG9zaXRpb24pCi17Ci0gICAgZm9yICh1bnNpZ25lZCBzeW1ib2xJbmRleCA9IDA7IHN5bWJvbElu
ZGV4IDwgRGVjaW1hbFN5bWJvbHNTaXplOyArK3N5bWJvbEluZGV4KSB7Ci0gICAgICAgIGlmICht
X2RlY2ltYWxTeW1ib2xzW3N5bWJvbEluZGV4XS5sZW5ndGgoKSAmJiBtYXRjaGVzKGlucHV0LCBw
b3NpdGlvbiwgbV9kZWNpbWFsU3ltYm9sc1tzeW1ib2xJbmRleF0pKSB7Ci0gICAgICAgICAgICBw
b3NpdGlvbiArPSBtX2RlY2ltYWxTeW1ib2xzW3N5bWJvbEluZGV4XS5sZW5ndGgoKTsKLSAgICAg
ICAgICAgIHJldHVybiBzeW1ib2xJbmRleDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
RGVjaW1hbFN5bWJvbHNTaXplOwotfQotCi1TdHJpbmcgSUNVTG9jYWxlOjpjb252ZXJ0RnJvbUxv
Y2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmIGxvY2FsaXplZCkKLXsKLSAgICBpbml0aWFsaXpl
RGVjaW1hbEZvcm1hdCgpOwotICAgIFN0cmluZyBpbnB1dCA9IGxvY2FsaXplZC5zdHJpcFdoaXRl
U3BhY2UoKTsKLSAgICBpZiAoIW1fbnVtYmVyRm9ybWF0IHx8IGlucHV0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIGlucHV0OwotCi0gICAgYm9vbCBpc05lZ2F0aXZlOwotICAgIHVuc2lnbmVk
IHN0YXJ0SW5kZXg7Ci0gICAgdW5zaWduZWQgZW5kSW5kZXg7Ci0gICAgaWYgKCFkZXRlY3RTaWdu
QW5kR2V0RGlnaXRSYW5nZShpbnB1dCwgaXNOZWdhdGl2ZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgp
KSB7Ci0gICAgICAgIC8vIElucHV0IGlzIGJyb2tlbi4gUmV0dXJuaW5nIGFuIGludmFsaWQgbnVt
YmVyIHN0cmluZy4KLSAgICAgICAgcmV0dXJuICIqIjsKLSAgICB9Ci0KLSAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHkoaW5wdXQubGVuZ3RoKCkp
OwotICAgIGlmIChpc05lZ2F0aXZlKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiLSIpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDspIHsKLSAgICAgICAg
dW5zaWduZWQgc3ltYm9sSW5kZXggPSBtYXRjaGVkRGVjaW1hbFN5bWJvbEluZGV4KGlucHV0LCBp
KTsKLSAgICAgICAgaWYgKHN5bWJvbEluZGV4ID49IERlY2ltYWxTeW1ib2xzU2l6ZSkKLSAgICAg
ICAgICAgIHJldHVybiAiKiI7Ci0gICAgICAgIGlmIChzeW1ib2xJbmRleCA9PSBEZWNpbWFsU2Vw
YXJhdG9ySW5kZXgpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAgICAgICBl
bHNlIGlmIChzeW1ib2xJbmRleCA9PSBHcm91cFNlcGFyYXRvckluZGV4KSB7Ci0gICAgICAgICAg
ICAvLyBJZ25vcmUgZ3JvdXAgc2VwYXJhdG9ycy4KLQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PFVDaGFyPignMCcgKyBzeW1ib2xJbmRleCkp
OwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi1ib29sIElDVUxv
Y2FsZTo6aW5pdGlhbGl6ZVNob3J0RGF0ZUZvcm1hdCgpCi17Ci0gICAgaWYgKG1fZGlkQ3JlYXRl
U2hvcnREYXRlRm9ybWF0KQotICAgICAgICByZXR1cm4gbV9zaG9ydERhdGVGb3JtYXQ7Ci0gICAg
Y29uc3QgVUNoYXIgZ210VGltZXpvbmVbM10gPSB7J0cnLCAnTScsICdUJ307Ci0gICAgVUVycm9y
Q29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgbV9zaG9ydERhdGVGb3JtYXQgPSB1ZGF0
X29wZW4oVURBVF9OT05FLCBVREFUX1NIT1JULCBtX2xvY2FsZS5kYXRhKCksIGdtdFRpbWV6b25l
LCBXVEZfQVJSQVlfTEVOR1RIKGdtdFRpbWV6b25lKSwgMCwgLTEsICZzdGF0dXMpOwotICAgIG1f
ZGlkQ3JlYXRlU2hvcnREYXRlRm9ybWF0ID0gdHJ1ZTsKLSAgICByZXR1cm4gbV9zaG9ydERhdGVG
b3JtYXQ7Ci19Ci0KLWRvdWJsZSBJQ1VMb2NhbGU6OnBhcnNlTG9jYWxpemVkRGF0ZShjb25zdCBT
dHJpbmcmIGlucHV0KQotewotICAgIGlmICghaW5pdGlhbGl6ZVNob3J0RGF0ZUZvcm1hdCgpKQot
ICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAg
aWYgKGlucHV0Lmxlbmd0aCgpID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bWVyaWNfbGltaXRz
PGludDMyX3Q+OjptYXgoKSkpCi0gICAgICAgIHJldHVybiBudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKLSAgICBpbnQzMl90IGlucHV0TGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4oaW5wdXQubGVuZ3RoKCkpOwotICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VS
Uk9SOwotICAgIGludDMyX3QgcGFyc2VQb3NpdGlvbiA9IDA7Ci0gICAgVURhdGUgZGF0ZSA9IHVk
YXRfcGFyc2UobV9zaG9ydERhdGVGb3JtYXQsIGlucHV0LmNoYXJhY3RlcnMoKSwgaW5wdXRMZW5n
dGgsICZwYXJzZVBvc2l0aW9uLCAmc3RhdHVzKTsKLSAgICBpZiAocGFyc2VQb3NpdGlvbiAhPSBp
bnB1dExlbmd0aCB8fCBVX0ZBSUxVUkUoc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuIG51bWVyaWNf
bGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgIC8vIFVEYXRlLCB3aGljaCBpcyBhbiBh
bGlhcyBvZiBkb3VibGUsIGlzIGNvbXBhdGlibGUgd2l0aCBvdXIgZXhwZWN0YXRpb24uCi0gICAg
cmV0dXJuIGRhdGU7Ci19Ci0KLVN0cmluZyBJQ1VMb2NhbGU6OmZvcm1hdExvY2FsaXplZERhdGUo
Y29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVDb21wb25lbnRzKQotewotICAgIGlmICghaW5pdGlh
bGl6ZVNob3J0RGF0ZUZvcm1hdCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgZG91
YmxlIGlucHV0ID0gZGF0ZUNvbXBvbmVudHMubWlsbGlzZWNvbmRzU2luY2VFcG9jaCgpOwotICAg
IFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotICAgIGludDMyX3QgbGVuZ3RoID0g
dWRhdF9mb3JtYXQobV9zaG9ydERhdGVGb3JtYXQsIGlucHV0LCAwLCAwLCAwLCAmc3RhdHVzKTsK
LSAgICBpZiAoc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7Ci0gICAgVmVjdG9yPFVDaGFyPiBidWZmZXIobGVuZ3RoKTsKLSAgICBzdGF0
dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgdWRhdF9mb3JtYXQobV9zaG9ydERhdGVGb3JtYXQsIGlu
cHV0LCBidWZmZXIuZGF0YSgpLCBsZW5ndGgsIDAsICZzdGF0dXMpOwotICAgIGlmIChVX0ZBSUxV
UkUoc3RhdHVzKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBTdHJpbmc6
OmFkb3B0KGJ1ZmZlcik7Ci19Ci0KLSNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQotc3RhdGlj
IGlubGluZSBib29sIGlzSUNVWWVhclN5bWJvbChVQ2hhciBsZXR0ZXIpCi17Ci0gICAgcmV0dXJu
IGxldHRlciA9PSAneScgfHwgbGV0dGVyID09ICdZJzsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IGlzSUNVTW9udGhTeW1ib2woVUNoYXIgbGV0dGVyKQotewotICAgIHJldHVybiBsZXR0ZXIgPT0g
J00nOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNJQ1VEYXlJbk1vbnRoU3ltYm9sKFVDaGFy
IGxldHRlcikKLXsKLSAgICByZXR1cm4gbGV0dGVyID09ICdkJzsKLX0KLQotLy8gU3BlY2lmaWNh
dGlvbiBvZiB0aGUgaW5wdXQ6Ci0vLyBodHRwOi8vaWN1LXByb2plY3Qub3JnL2FwaXJlZi9pY3U0
Yy9jbGFzc1NpbXBsZURhdGVGb3JtYXQuaHRtbCNkZXRhaWxzCi1zdGF0aWMgU3RyaW5nIGxvY2Fs
aXplRm9ybWF0KGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGJ1ZmZlcikKLXsKLSAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7Ci0gICAgVUNoYXIgbGFzdENoYXIgPSAwOwotICAgIGJvb2wgaW5RdW90ZSA9
IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXIuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKGluUXVvdGUpIHsKLSAgICAgICAgICAgIGlmIChidWZmZXJbaV0gPT0g
J1wnJykgewotICAgICAgICAgICAgICAgIGluUXVvdGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBsYXN0Q2hhciA9IDA7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGkpOwotICAgICAgICAgICAg
ICAgIGlmIChidWZmZXJbaSAtIDFdID09ICdcJycpCi0gICAgICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCdcJycpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoYnVmZmVyW2ldKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChpc0FTQ0lJQWxwaGEobGFzdENoYXIpICYmIGxhc3RDaGFyID09IGJ1ZmZlcltpXSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxhc3RDaGFyID0gYnVmZmVyW2ldOwot
ICAgICAgICAgICAgaWYgKGlzSUNVWWVhclN5bWJvbChsYXN0Q2hhcikpIHsKLSAgICAgICAgICAg
ICAgICBTdHJpbmcgdGV4dCA9IGRhdGVGb3JtYXRZZWFyVGV4dCgpOwotICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKHRleHQuaXNFbXB0eSgpID8gIlllYXIiIDogdGV4dCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzSUNVTW9udGhTeW1ib2wobGFzdENoYXIpKSB7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIHRleHQgPSBkYXRlRm9ybWF0TW9udGhUZXh0KCk7Ci0gICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQodGV4dC5pc0VtcHR5KCkgPyAiTW9udGgiIDogdGV4dCk7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGlzSUNVRGF5SW5Nb250aFN5bWJvbChsYXN0Q2hhcikpIHsKLSAg
ICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGRhdGVGb3JtYXREYXlJbk1vbnRoVGV4dCgpOwot
ICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRleHQuaXNFbXB0eSgpID8gIkRheSIgOiB0
ZXh0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdENoYXIgPT0gJ1wnJykKLSAgICAgICAg
ICAgICAgICBpblF1b3RlID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChsYXN0Q2hhcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotdm9pZCBJQ1VMb2NhbGU6OmluaXRpYWxpemVMb2Nh
bGl6ZWREYXRlRm9ybWF0VGV4dCgpCi17Ci0gICAgaWYgKCFtX2xvY2FsaXplZERhdGVGb3JtYXRU
ZXh0LmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9sb2NhbGl6ZWREYXRlRm9ybWF0
VGV4dCA9IFN0cmluZygiIik7Ci0gICAgaWYgKCFpbml0aWFsaXplU2hvcnREYXRlRm9ybWF0KCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsK
LSAgICBpbnQzMl90IGxlbmd0aCA9IHVkYXRfdG9QYXR0ZXJuKG1fc2hvcnREYXRlRm9ybWF0LCBU
UlVFLCAwLCAwLCAmc3RhdHVzKTsKLSAgICBpZiAoc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9X
X0VSUk9SKQotICAgICAgICByZXR1cm47Ci0gICAgVmVjdG9yPFVDaGFyPiBidWZmZXIobGVuZ3Ro
KTsKLSAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgdWRhdF90b1BhdHRlcm4obV9zaG9y
dERhdGVGb3JtYXQsIFRSVUUsIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1cyk7Ci0gICAg
aWYgKFVfRkFJTFVSRShzdGF0dXMpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9sb2NhbGl6ZWRE
YXRlRm9ybWF0VGV4dCA9IGxvY2FsaXplRm9ybWF0KGJ1ZmZlcik7Ci19Ci0KLVN0cmluZyBJQ1VM
b2NhbGU6OmxvY2FsaXplZERhdGVGb3JtYXRUZXh0KCkKLXsKLSAgICBpbml0aWFsaXplTG9jYWxp
emVkRGF0ZUZvcm1hdFRleHQoKTsKLSAgICByZXR1cm4gbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4
dDsKLX0KLQotUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IElDVUxvY2FsZTo6Y3JlYXRlTGFi
ZWxWZWN0b3IoVURhdGVGb3JtYXRTeW1ib2xUeXBlIHR5cGUsIGludDMyX3Qgc3RhcnRJbmRleCwg
aW50MzJfdCBzaXplKQotewotICAgIGlmICghbV9zaG9ydERhdGVGb3JtYXQpCi0gICAgICAgIHJl
dHVybiBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4oKTsKLSAgICBpZiAodWRhdF9jb3VudFN5
bWJvbHMobV9zaG9ydERhdGVGb3JtYXQsIHR5cGUpICE9IHN0YXJ0SW5kZXggKyBzaXplKQotICAg
ICAgICByZXR1cm4gUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+KCk7Ci0KLSAgICBPd25QdHI8
VmVjdG9yPFN0cmluZz4gPiBsYWJlbHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFN0cmluZz4oKSk7
Ci0gICAgbGFiZWxzLT5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7Ci0gICAgZm9yIChpbnQzMl90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJP
X0VSUk9SOwotICAgICAgICBpbnQzMl90IGxlbmd0aCA9IHVkYXRfZ2V0U3ltYm9scyhtX3Nob3J0
RGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGksIDAsIDAsICZzdGF0dXMpOwotICAgICAg
ICBpZiAoc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQotICAgICAgICAgICAgcmV0
dXJuIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPigpOwotICAgICAgICBWZWN0b3I8VUNoYXI+
IGJ1ZmZlcihsZW5ndGgpOwotICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAg
IHVkYXRfZ2V0U3ltYm9scyhtX3Nob3J0RGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGks
IGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1cyk7Ci0gICAgICAgIGlmIChVX0ZBSUxVUkUo
c3RhdHVzKSkKLSAgICAgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4o
KTsKLSAgICAgICAgbGFiZWxzLT5hcHBlbmQoU3RyaW5nOjphZG9wdChidWZmZXIpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGxhYmVscy5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBQYXNzT3duUHRyPFZl
Y3RvcjxTdHJpbmc+ID4gY3JlYXRlRmFsbGJhY2tNb250aExhYmVscygpCi17Ci0gICAgT3duUHRy
PFZlY3RvcjxTdHJpbmc+ID4gbGFiZWxzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxTdHJpbmc+KCkp
OwotICAgIGxhYmVscy0+cmVzZXJ2ZUNhcGFjaXR5KFdURl9BUlJBWV9MRU5HVEgoV1RGOjptb250
aEZ1bGxOYW1lKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5H
VEgoV1RGOjptb250aEZ1bGxOYW1lKTsgKytpKQotICAgICAgICBsYWJlbHMtPmFwcGVuZChXVEY6
Om1vbnRoRnVsbE5hbWVbaV0pOwotICAgIHJldHVybiBsYWJlbHMucmVsZWFzZSgpOwotfQotCi1z
dGF0aWMgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+IGNyZWF0ZUZhbGxiYWNrV2Vla0RheVNo
b3J0TGFiZWxzKCkKLXsKLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBsYWJlbHMgPSBhZG9w
dFB0cihuZXcgVmVjdG9yPFN0cmluZz4oKSk7Ci0gICAgbGFiZWxzLT5yZXNlcnZlQ2FwYWNpdHko
Nyk7Ci0gICAgbGFiZWxzLT5hcHBlbmQoIlN1biIpOwotICAgIGxhYmVscy0+YXBwZW5kKCJNb24i
KTsKLSAgICBsYWJlbHMtPmFwcGVuZCgiVHVlIik7Ci0gICAgbGFiZWxzLT5hcHBlbmQoIldlZCIp
OwotICAgIGxhYmVscy0+YXBwZW5kKCJUaHUiKTsKLSAgICBsYWJlbHMtPmFwcGVuZCgiRnJpIik7
Ci0gICAgbGFiZWxzLT5hcHBlbmQoIlNhdCIpOwotICAgIHJldHVybiBsYWJlbHMucmVsZWFzZSgp
OwotfQotCi12b2lkIElDVUxvY2FsZTo6aW5pdGlhbGl6ZUNhbGVuZGFyKCkKLXsKLSAgICBpZiAo
bV9tb250aExhYmVscyAmJiBtX3dlZWtEYXlTaG9ydExhYmVscykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFpbml0aWFsaXplU2hvcnREYXRlRm9ybWF0KCkpIHsKLSAgICAgICAgbV9maXJz
dERheU9mV2VlayA9IDA7Ci0gICAgICAgIG1fbW9udGhMYWJlbHMgPSBjcmVhdGVGYWxsYmFja01v
bnRoTGFiZWxzKCk7Ci0gICAgICAgIG1fd2Vla0RheVNob3J0TGFiZWxzID0gY3JlYXRlRmFsbGJh
Y2tXZWVrRGF5U2hvcnRMYWJlbHMoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2Zp
cnN0RGF5T2ZXZWVrID0gdWNhbF9nZXRBdHRyaWJ1dGUodWRhdF9nZXRDYWxlbmRhcihtX3Nob3J0
RGF0ZUZvcm1hdCksIFVDQUxfRklSU1RfREFZX09GX1dFRUspIC0gVUNBTF9TVU5EQVk7Ci0KLSAg
ICBtX21vbnRoTGFiZWxzID0gY3JlYXRlTGFiZWxWZWN0b3IoVURBVF9NT05USFMsIFVDQUxfSkFO
VUFSWSwgMTIpOwotICAgIGlmICghbV9tb250aExhYmVscykKLSAgICAgICAgbV9tb250aExhYmVs
cyA9IGNyZWF0ZUZhbGxiYWNrTW9udGhMYWJlbHMoKTsKLQotICAgIG1fd2Vla0RheVNob3J0TGFi
ZWxzID0gY3JlYXRlTGFiZWxWZWN0b3IoVURBVF9TSE9SVF9XRUVLREFZUywgVUNBTF9TVU5EQVks
IDcpOwotICAgIGlmICghbV93ZWVrRGF5U2hvcnRMYWJlbHMpCi0gICAgICAgIG1fd2Vla0RheVNo
b3J0TGFiZWxzID0gY3JlYXRlRmFsbGJhY2tXZWVrRGF5U2hvcnRMYWJlbHMoKTsKLX0KLQotY29u
c3QgVmVjdG9yPFN0cmluZz4mIElDVUxvY2FsZTo6bW9udGhMYWJlbHMoKQotewotICAgIGluaXRp
YWxpemVDYWxlbmRhcigpOwotICAgIHJldHVybiAqbV9tb250aExhYmVsczsKLX0KLQotY29uc3Qg
VmVjdG9yPFN0cmluZz4mIElDVUxvY2FsZTo6d2Vla0RheVNob3J0TGFiZWxzKCkKLXsKLSAgICBp
bml0aWFsaXplQ2FsZW5kYXIoKTsKLSAgICByZXR1cm4gKm1fd2Vla0RheVNob3J0TGFiZWxzOwot
fQotCi11bnNpZ25lZCBJQ1VMb2NhbGU6OmZpcnN0RGF5T2ZXZWVrKCkKLXsKLSAgICBpbml0aWFs
aXplQ2FsZW5kYXIoKTsKLSAgICByZXR1cm4gbV9maXJzdERheU9mV2VlazsKLX0KLSNlbmRpZgot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvSUNVTG9jYWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0lD
VUxvY2FsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGZjNzA3MTk4YjZkNThm
Nzc1MjA2YjNmMGNiMDEyY2Y5YTk5NzgzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvSUNVTG9jYWxlLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSUNVTG9jYWxlX2gKLSNkZWZp
bmUgSUNVTG9jYWxlX2gKLQotI2luY2x1ZGUgIkRhdGVDb21wb25lbnRzLmgiCi0jaW5jbHVkZSA8
dW5pY29kZS91ZGF0Lmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91bnVtLmg+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLS8vIFdlIHNob3VsZCB1c2UgdGhpcyBjbGFzcyBvbmx5IGZvciBMb2NhbGl6
ZWROdW1iZXJJQ1UuY3BwLCBMb2NhbGl6ZWREYXRlSUNVLmNwcCwKLS8vIExvY2FsaXplZENhbGVu
ZGFySUNVLmNwcCwgYW5kIExvY2FsaXplZE51bWJlcklDVVRlc3QuY3BwLgotY2xhc3MgSUNVTG9j
YWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJQ1VMb2NhbGU+IGNyZWF0ZShj
b25zdCBjaGFyKiBsb2NhbGVTdHJpbmcpOwotICAgIHN0YXRpYyBJQ1VMb2NhbGUqIGN1cnJlbnRM
b2NhbGUoKTsKLSAgICB+SUNVTG9jYWxlKCk7Ci0KLSAgICAvLyBGb3IgTG9jYWxpemVkTnVtYmVy
Ci0gICAgU3RyaW5nIGNvbnZlcnRUb0xvY2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmKTsKLSAg
ICBTdHJpbmcgY29udmVydEZyb21Mb2NhbGl6ZWROdW1iZXIoY29uc3QgU3RyaW5nJik7Ci0KLSAg
ICAvLyBGb3IgTG9jYWxpemVkRGF0ZQotICAgIGRvdWJsZSBwYXJzZUxvY2FsaXplZERhdGUoY29u
c3QgU3RyaW5nJik7Ci0gICAgU3RyaW5nIGZvcm1hdExvY2FsaXplZERhdGUoY29uc3QgRGF0ZUNv
bXBvbmVudHMmKTsKLSNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQotICAgIFN0cmluZyBsb2Nh
bGl6ZWREYXRlRm9ybWF0VGV4dCgpOwotCi0gICAgLy8gRm9yIExvY2FsaXplZENhbGVuZGFyCi0g
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIG1vbnRoTGFiZWxzKCk7Ci0gICAgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHdlZWtEYXlTaG9ydExhYmVscygpOwotICAgIHVuc2lnbmVkIGZpcnN0RGF5T2ZX
ZWVrKCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgUGFzc093blB0cjxJQ1VMb2Nh
bGU+IGNyZWF0ZUZvckN1cnJlbnRMb2NhbGUoKTsKLSAgICBleHBsaWNpdCBJQ1VMb2NhbGUoY29u
c3QgY2hhciopOwotICAgIHZvaWQgc2V0RGVjaW1hbFN5bWJvbCh1bnNpZ25lZCBpbmRleCwgVU51
bWJlckZvcm1hdFN5bWJvbCk7Ci0gICAgdm9pZCBzZXREZWNpbWFsVGV4dEF0dHJpYnV0ZShTdHJp
bmcmLCBVTnVtYmVyRm9ybWF0VGV4dEF0dHJpYnV0ZSk7Ci0gICAgdm9pZCBpbml0aWFsaXplRGVj
aW1hbEZvcm1hdCgpOwotCi0gICAgYm9vbCBkZXRlY3RTaWduQW5kR2V0RGlnaXRSYW5nZShjb25z
dCBTdHJpbmcmIGlucHV0LCBib29sJiBpc05lZ2F0aXZlLCB1bnNpZ25lZCYgc3RhcnRJbmRleCwg
dW5zaWduZWQmIGVuZEluZGV4KTsKLSAgICB1bnNpZ25lZCBtYXRjaGVkRGVjaW1hbFN5bWJvbElu
ZGV4KGNvbnN0IFN0cmluZyYgaW5wdXQsIHVuc2lnbmVkJiBwb3NpdGlvbik7Ci0KLSAgICBib29s
IGluaXRpYWxpemVTaG9ydERhdGVGb3JtYXQoKTsKLQotI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNL
RVIpCi0gICAgdm9pZCBpbml0aWFsaXplTG9jYWxpemVkRGF0ZUZvcm1hdFRleHQoKTsKLSAgICBQ
YXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gY3JlYXRlTGFiZWxWZWN0b3IoVURhdGVGb3JtYXRT
eW1ib2xUeXBlLCBpbnQzMl90IHN0YXJ0SW5kZXgsIGludDMyX3Qgc2l6ZSk7Ci0gICAgdm9pZCBp
bml0aWFsaXplQ2FsZW5kYXIoKTsKLSNlbmRpZgotCi0gICAgQ1N0cmluZyBtX2xvY2FsZTsKLSAg
ICBVTnVtYmVyRm9ybWF0KiBtX251bWJlckZvcm1hdDsKLSAgICBVRGF0ZUZvcm1hdCogbV9zaG9y
dERhdGVGb3JtYXQ7Ci0gICAgZW51bSB7Ci0gICAgICAgIC8vIDAtOSBmb3IgZGlnaXRzLgotICAg
ICAgICBEZWNpbWFsU2VwYXJhdG9ySW5kZXggPSAxMCwKLSAgICAgICAgR3JvdXBTZXBhcmF0b3JJ
bmRleCA9IDExLAotICAgICAgICBEZWNpbWFsU3ltYm9sc1NpemUKLSAgICB9OwotICAgIFN0cmlu
ZyBtX2RlY2ltYWxTeW1ib2xzW0RlY2ltYWxTeW1ib2xzU2l6ZV07Ci0gICAgU3RyaW5nIG1fcG9z
aXRpdmVQcmVmaXg7Ci0gICAgU3RyaW5nIG1fcG9zaXRpdmVTdWZmaXg7Ci0gICAgU3RyaW5nIG1f
bmVnYXRpdmVQcmVmaXg7Ci0gICAgU3RyaW5nIG1fbmVnYXRpdmVTdWZmaXg7Ci0gICAgYm9vbCBt
X2RpZENyZWF0ZURlY2ltYWxGb3JtYXQ7Ci0gICAgYm9vbCBtX2RpZENyZWF0ZVNob3J0RGF0ZUZv
cm1hdDsKLQotI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNLRVIpCi0gICAgU3RyaW5nIG1fbG9jYWxp
emVkRGF0ZUZvcm1hdFRleHQ7Ci0gICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbV9tb250aExh
YmVsczsKLSAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBtX3dlZWtEYXlTaG9ydExhYmVsczsK
LSAgICB1bnNpZ25lZCBtX2ZpcnN0RGF5T2ZXZWVrOwotI2VuZGlmCi19OwotCi19Ci0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
NWNmNTNlYzc5NzVmZmE0ZTcyODJmOTQ5ZTc3OWQ3YjJiZWMwOWZlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGVJQ1UuY3BwCkBAIC0wLDAgKzEs
NDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvY2FsZUlDVS5oIgorCisjaW5j
bHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3
dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIGljdTsKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSUNVTG9jYWxlOjpJQ1VMb2Nh
bGUoY29uc3QgY2hhciogbG9jYWxlKQorICAgIDogbV9sb2NhbGUobG9jYWxlKQorICAgICwgbV9u
dW1iZXJGb3JtYXQoMCkKKyAgICAsIG1fc2hvcnREYXRlRm9ybWF0KDApCisgICAgLCBtX2RpZENy
ZWF0ZURlY2ltYWxGb3JtYXQoZmFsc2UpCisgICAgLCBtX2RpZENyZWF0ZVNob3J0RGF0ZUZvcm1h
dChmYWxzZSkKKyNpZiBFTkFCTEUoQ0FMRU5EQVJfUElDS0VSKQorICAgICwgbV9maXJzdERheU9m
V2VlaygwKQorI2VuZGlmCit7Cit9CisKK0lDVUxvY2FsZTo6fklDVUxvY2FsZSgpCit7CisgICAg
dW51bV9jbG9zZShtX251bWJlckZvcm1hdCk7CisgICAgdWRhdF9jbG9zZShtX3Nob3J0RGF0ZUZv
cm1hdCk7Cit9CisKK1Bhc3NPd25QdHI8SUNVTG9jYWxlPiBJQ1VMb2NhbGU6OmNyZWF0ZShjb25z
dCBjaGFyKiBsb2NhbGVTdHJpbmcpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJQ1VMb2Nh
bGUobG9jYWxlU3RyaW5nKSk7Cit9CisKK1Bhc3NPd25QdHI8SUNVTG9jYWxlPiBJQ1VMb2NhbGU6
OmNyZWF0ZUZvckN1cnJlbnRMb2NhbGUoKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSUNV
TG9jYWxlKDApKTsKK30KKworSUNVTG9jYWxlKiBJQ1VMb2NhbGU6OmN1cnJlbnRMb2NhbGUoKQor
eworICAgIHN0YXRpYyBJQ1VMb2NhbGUqIGN1cnJlbnRJQ1VMb2NhbGUgPSBJQ1VMb2NhbGU6OmNy
ZWF0ZUZvckN1cnJlbnRMb2NhbGUoKS5sZWFrUHRyKCk7CisgICAgcmV0dXJuIGN1cnJlbnRJQ1VM
b2NhbGU7Cit9CisKK3ZvaWQgSUNVTG9jYWxlOjpzZXREZWNpbWFsU3ltYm9sKHVuc2lnbmVkIGlu
ZGV4LCBVTnVtYmVyRm9ybWF0U3ltYm9sIHN5bWJvbCkKK3sKKyAgICBVRXJyb3JDb2RlIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKKyAgICBpbnQzMl90IGJ1ZmZlckxlbmd0aCA9IHVudW1fZ2V0U3lt
Ym9sKG1fbnVtYmVyRm9ybWF0LCBzeW1ib2wsIDAsIDAsICZzdGF0dXMpOworICAgIEFTU0VSVChV
X1NVQ0NFU1Moc3RhdHVzKSB8fCBzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpOwor
ICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1df
RVJST1IpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZmZXJM
ZW5ndGgpOworICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICB1bnVtX2dldFN5bWJvbCht
X251bWJlckZvcm1hdCwgc3ltYm9sLCBidWZmZXIuZGF0YSgpLCBidWZmZXJMZW5ndGgsICZzdGF0
dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
ZGVjaW1hbFN5bWJvbHNbaW5kZXhdID0gU3RyaW5nOjphZG9wdChidWZmZXIpOworfQorCit2b2lk
IElDVUxvY2FsZTo6c2V0RGVjaW1hbFRleHRBdHRyaWJ1dGUoU3RyaW5nJiBkZXN0aW5hdGlvbiwg
VU51bWJlckZvcm1hdFRleHRBdHRyaWJ1dGUgdGFnKQoreworICAgIFVFcnJvckNvZGUgc3RhdHVz
ID0gVV9aRVJPX0VSUk9SOworICAgIGludDMyX3QgYnVmZmVyTGVuZ3RoID0gdW51bV9nZXRUZXh0
QXR0cmlidXRlKG1fbnVtYmVyRm9ybWF0LCB0YWcsIDAsIDAsICZzdGF0dXMpOworICAgIEFTU0VS
VChVX1NVQ0NFU1Moc3RhdHVzKSB8fCBzdGF0dXMgPT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1Ip
OworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZM
T1dfRVJST1IpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihidWZm
ZXJMZW5ndGgpOworICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICB1bnVtX2dldFRleHRB
dHRyaWJ1dGUobV9udW1iZXJGb3JtYXQsIHRhZywgYnVmZmVyLmRhdGEoKSwgYnVmZmVyTGVuZ3Ro
LCAmc3RhdHVzKTsKKyAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOworICAgIGlmIChVX0ZB
SUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIGRlc3RpbmF0aW9uID0gU3RyaW5n
OjphZG9wdChidWZmZXIpOworfQorCit2b2lkIElDVUxvY2FsZTo6aW5pdGlhbGl6ZURlY2ltYWxG
b3JtYXQoKQoreworICAgIGlmIChtX2RpZENyZWF0ZURlY2ltYWxGb3JtYXQpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2RpZENyZWF0ZURlY2ltYWxGb3JtYXQgPSB0cnVlOworICAgIFVFcnJvckNv
ZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIG1fbnVtYmVyRm9ybWF0ID0gdW51bV9vcGVu
KFVOVU1fREVDSU1BTCwgMCwgMCwgbV9sb2NhbGUuZGF0YSgpLCAwLCAmc3RhdHVzKTsKKyAgICBp
ZiAoIVVfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBzZXREZWNpbWFs
U3ltYm9sKDAsIFVOVU1fWkVST19ESUdJVF9TWU1CT0wpOworICAgIHNldERlY2ltYWxTeW1ib2wo
MSwgVU5VTV9PTkVfRElHSVRfU1lNQk9MKTsKKyAgICBzZXREZWNpbWFsU3ltYm9sKDIsIFVOVU1f
VFdPX0RJR0lUX1NZTUJPTCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCgzLCBVTlVNX1RIUkVFX0RJ
R0lUX1NZTUJPTCk7CisgICAgc2V0RGVjaW1hbFN5bWJvbCg0LCBVTlVNX0ZPVVJfRElHSVRfU1lN
Qk9MKTsKKyAgICBzZXREZWNpbWFsU3ltYm9sKDUsIFVOVU1fRklWRV9ESUdJVF9TWU1CT0wpOwor
ICAgIHNldERlY2ltYWxTeW1ib2woNiwgVU5VTV9TSVhfRElHSVRfU1lNQk9MKTsKKyAgICBzZXRE
ZWNpbWFsU3ltYm9sKDcsIFVOVU1fU0VWRU5fRElHSVRfU1lNQk9MKTsKKyAgICBzZXREZWNpbWFs
U3ltYm9sKDgsIFVOVU1fRUlHSFRfRElHSVRfU1lNQk9MKTsKKyAgICBzZXREZWNpbWFsU3ltYm9s
KDksIFVOVU1fTklORV9ESUdJVF9TWU1CT0wpOworICAgIHNldERlY2ltYWxTeW1ib2woRGVjaW1h
bFNlcGFyYXRvckluZGV4LCBVTlVNX0RFQ0lNQUxfU0VQQVJBVE9SX1NZTUJPTCk7CisgICAgc2V0
RGVjaW1hbFN5bWJvbChHcm91cFNlcGFyYXRvckluZGV4LCBVTlVNX0dST1VQSU5HX1NFUEFSQVRP
Ul9TWU1CT0wpOworICAgIHNldERlY2ltYWxUZXh0QXR0cmlidXRlKG1fcG9zaXRpdmVQcmVmaXgs
IFVOVU1fUE9TSVRJVkVfUFJFRklYKTsKKyAgICBzZXREZWNpbWFsVGV4dEF0dHJpYnV0ZShtX3Bv
c2l0aXZlU3VmZml4LCBVTlVNX1BPU0lUSVZFX1NVRkZJWCk7CisgICAgc2V0RGVjaW1hbFRleHRB
dHRyaWJ1dGUobV9uZWdhdGl2ZVByZWZpeCwgVU5VTV9ORUdBVElWRV9QUkVGSVgpOworICAgIHNl
dERlY2ltYWxUZXh0QXR0cmlidXRlKG1fbmVnYXRpdmVTdWZmaXgsIFVOVU1fTkVHQVRJVkVfU1VG
RklYKTsKKyAgICBBU1NFUlQoIW1fcG9zaXRpdmVQcmVmaXguaXNFbXB0eSgpIHx8ICFtX3Bvc2l0
aXZlU3VmZml4LmlzRW1wdHkoKSB8fCAhbV9uZWdhdGl2ZVByZWZpeC5pc0VtcHR5KCkgfHwgIW1f
bmVnYXRpdmVTdWZmaXguaXNFbXB0eSgpKTsKK30KKworU3RyaW5nIElDVUxvY2FsZTo6Y29udmVy
dFRvTG9jYWxpemVkTnVtYmVyKGNvbnN0IFN0cmluZyYgaW5wdXQpCit7CisgICAgaW5pdGlhbGl6
ZURlY2ltYWxGb3JtYXQoKTsKKyAgICBpZiAoIW1fbnVtYmVyRm9ybWF0IHx8IGlucHV0LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIGlucHV0OworCisgICAgdW5zaWduZWQgaSA9IDA7CisgICAg
Ym9vbCBpc05lZ2F0aXZlID0gZmFsc2U7CisgICAgVW5pY29kZVN0cmluZyB1c3RyaW5nOworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLnJlc2VydmVDYXBhY2l0eShpbnB1
dC5sZW5ndGgoKSk7CisKKyAgICBpZiAoaW5wdXRbMF0gPT0gJy0nKSB7CisgICAgICAgICsraTsK
KyAgICAgICAgaXNOZWdhdGl2ZSA9IHRydWU7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fbmVn
YXRpdmVQcmVmaXgpOworICAgIH0gZWxzZQorICAgICAgICBidWlsZGVyLmFwcGVuZChtX3Bvc2l0
aXZlUHJlZml4KTsKKworICAgIGZvciAoOyBpIDwgaW5wdXQubGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICBzd2l0Y2ggKGlucHV0W2ldKSB7CisgICAgICAgIGNhc2UgJzAnOgorICAgICAgICBjYXNl
ICcxJzoKKyAgICAgICAgY2FzZSAnMic6CisgICAgICAgIGNhc2UgJzMnOgorICAgICAgICBjYXNl
ICc0JzoKKyAgICAgICAgY2FzZSAnNSc6CisgICAgICAgIGNhc2UgJzYnOgorICAgICAgICBjYXNl
ICc3JzoKKyAgICAgICAgY2FzZSAnOCc6CisgICAgICAgIGNhc2UgJzknOgorICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQobV9kZWNpbWFsU3ltYm9sc1tpbnB1dFtpXSAtICcwJ10pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJy4nOgorICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQobV9kZWNpbWFsU3ltYm9sc1tEZWNpbWFsU2VwYXJhdG9ySW5kZXhdKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBidWlsZGVyLmFwcGVuZChpc05lZ2F0aXZlID8g
bV9uZWdhdGl2ZVN1ZmZpeCA6IG1fcG9zaXRpdmVTdWZmaXgpOworCisgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGljIGJvb2wgbWF0Y2hlcyhjb25zdCBTdHJpbmcmIHRl
eHQsIHVuc2lnbmVkIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIHBhcnQpCit7CisgICAgaWYgKHBh
cnQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocG9zaXRpb24gKyBw
YXJ0Lmxlbmd0aCgpID4gdGV4dC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJ0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
aWYgKHRleHRbcG9zaXRpb24gKyBpXSAhPSBwYXJ0W2ldKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJQ1VMb2NhbGU6OmRldGVj
dFNpZ25BbmRHZXREaWdpdFJhbmdlKGNvbnN0IFN0cmluZyYgaW5wdXQsIGJvb2wmIGlzTmVnYXRp
dmUsIHVuc2lnbmVkJiBzdGFydEluZGV4LCB1bnNpZ25lZCYgZW5kSW5kZXgpCit7CisgICAgc3Rh
cnRJbmRleCA9IDA7CisgICAgZW5kSW5kZXggPSBpbnB1dC5sZW5ndGgoKTsKKyAgICBpZiAobV9u
ZWdhdGl2ZVByZWZpeC5pc0VtcHR5KCkgJiYgbV9uZWdhdGl2ZVN1ZmZpeC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaWYgKGlucHV0LnN0YXJ0c1dpdGgobV9wb3NpdGl2ZVByZWZpeCkgJiYgaW5wdXQu
ZW5kc1dpdGgobV9wb3NpdGl2ZVN1ZmZpeCkpIHsKKyAgICAgICAgICAgIGlzTmVnYXRpdmUgPSBm
YWxzZTsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBtX3Bvc2l0aXZlUHJlZml4Lmxlbmd0aCgp
OworICAgICAgICAgICAgZW5kSW5kZXggLT0gbV9wb3NpdGl2ZVN1ZmZpeC5sZW5ndGgoKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBpc05lZ2F0aXZlID0gdHJ1ZTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChtX25lZ2F0aXZlUHJlZml4KSAmJiBpbnB1
dC5lbmRzV2l0aChtX25lZ2F0aXZlU3VmZml4KSkgeworICAgICAgICAgICAgaXNOZWdhdGl2ZSA9
IHRydWU7CisgICAgICAgICAgICBzdGFydEluZGV4ID0gbV9uZWdhdGl2ZVByZWZpeC5sZW5ndGgo
KTsKKyAgICAgICAgICAgIGVuZEluZGV4IC09IG1fbmVnYXRpdmVTdWZmaXgubGVuZ3RoKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpc05lZ2F0aXZlID0gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoaW5wdXQuc3RhcnRzV2l0aChtX3Bvc2l0aXZlUHJlZml4KSAmJiBpbnB1dC5lbmRz
V2l0aChtX3Bvc2l0aXZlU3VmZml4KSkgeworICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBt
X3Bvc2l0aXZlUHJlZml4Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGVuZEluZGV4IC09IG1f
cG9zaXRpdmVTdWZmaXgubGVuZ3RoKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3Vuc2lnbmVkIElDVUxvY2FsZTo6bWF0Y2hlZERlY2ltYWxTeW1ib2xJbmRleChjb25zdCBT
dHJpbmcmIGlucHV0LCB1bnNpZ25lZCYgcG9zaXRpb24pCit7CisgICAgZm9yICh1bnNpZ25lZCBz
eW1ib2xJbmRleCA9IDA7IHN5bWJvbEluZGV4IDwgRGVjaW1hbFN5bWJvbHNTaXplOyArK3N5bWJv
bEluZGV4KSB7CisgICAgICAgIGlmIChtX2RlY2ltYWxTeW1ib2xzW3N5bWJvbEluZGV4XS5sZW5n
dGgoKSAmJiBtYXRjaGVzKGlucHV0LCBwb3NpdGlvbiwgbV9kZWNpbWFsU3ltYm9sc1tzeW1ib2xJ
bmRleF0pKSB7CisgICAgICAgICAgICBwb3NpdGlvbiArPSBtX2RlY2ltYWxTeW1ib2xzW3N5bWJv
bEluZGV4XS5sZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2xJbmRleDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gRGVjaW1hbFN5bWJvbHNTaXplOworfQorCitTdHJpbmcg
SUNVTG9jYWxlOjpjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihjb25zdCBTdHJpbmcmIGxvY2Fs
aXplZCkKK3sKKyAgICBpbml0aWFsaXplRGVjaW1hbEZvcm1hdCgpOworICAgIFN0cmluZyBpbnB1
dCA9IGxvY2FsaXplZC5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBpZiAoIW1fbnVtYmVyRm9ybWF0
IHx8IGlucHV0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGlucHV0OworCisgICAgYm9vbCBp
c05lZ2F0aXZlOworICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXg7CisgICAgdW5zaWduZWQgZW5kSW5k
ZXg7CisgICAgaWYgKCFkZXRlY3RTaWduQW5kR2V0RGlnaXRSYW5nZShpbnB1dCwgaXNOZWdhdGl2
ZSwgc3RhcnRJbmRleCwgZW5kSW5kZXgpKSB7CisgICAgICAgIC8vIElucHV0IGlzIGJyb2tlbi4g
UmV0dXJuaW5nIGFuIGludmFsaWQgbnVtYmVyIHN0cmluZy4KKyAgICAgICAgcmV0dXJuICIqIjsK
KyAgICB9CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5yZXNlcnZl
Q2FwYWNpdHkoaW5wdXQubGVuZ3RoKCkpOworICAgIGlmIChpc05lZ2F0aXZlKQorICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiLSIpOworICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkg
PCBlbmRJbmRleDspIHsKKyAgICAgICAgdW5zaWduZWQgc3ltYm9sSW5kZXggPSBtYXRjaGVkRGVj
aW1hbFN5bWJvbEluZGV4KGlucHV0LCBpKTsKKyAgICAgICAgaWYgKHN5bWJvbEluZGV4ID49IERl
Y2ltYWxTeW1ib2xzU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiAiKiI7CisgICAgICAgIGlmIChz
eW1ib2xJbmRleCA9PSBEZWNpbWFsU2VwYXJhdG9ySW5kZXgpCisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgnLicpOworICAgICAgICBlbHNlIGlmIChzeW1ib2xJbmRleCA9PSBHcm91cFNlcGFy
YXRvckluZGV4KSB7CisgICAgICAgICAgICAvLyBJZ25vcmUgZ3JvdXAgc2VwYXJhdG9ycy4KKwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXRpY19jYXN0PFVD
aGFyPignMCcgKyBzeW1ib2xJbmRleCkpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOworfQorCitib29sIElDVUxvY2FsZTo6aW5pdGlhbGl6ZVNob3J0RGF0ZUZvcm1hdCgp
Cit7CisgICAgaWYgKG1fZGlkQ3JlYXRlU2hvcnREYXRlRm9ybWF0KQorICAgICAgICByZXR1cm4g
bV9zaG9ydERhdGVGb3JtYXQ7CisgICAgY29uc3QgVUNoYXIgZ210VGltZXpvbmVbM10gPSB7J0cn
LCAnTScsICdUJ307CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAg
bV9zaG9ydERhdGVGb3JtYXQgPSB1ZGF0X29wZW4oVURBVF9OT05FLCBVREFUX1NIT1JULCBtX2xv
Y2FsZS5kYXRhKCksIGdtdFRpbWV6b25lLCBXVEZfQVJSQVlfTEVOR1RIKGdtdFRpbWV6b25lKSwg
MCwgLTEsICZzdGF0dXMpOworICAgIG1fZGlkQ3JlYXRlU2hvcnREYXRlRm9ybWF0ID0gdHJ1ZTsK
KyAgICByZXR1cm4gbV9zaG9ydERhdGVGb3JtYXQ7Cit9CisKK2RvdWJsZSBJQ1VMb2NhbGU6OnBh
cnNlTG9jYWxpemVkRGF0ZShjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAgIGlmICghaW5pdGlh
bGl6ZVNob3J0RGF0ZUZvcm1hdCgpKQorICAgICAgICByZXR1cm4gbnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgaWYgKGlucHV0Lmxlbmd0aCgpID4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkpCisgICAgICAgIHJldHVy
biBudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICBpbnQzMl90IGlucHV0
TGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oaW5wdXQubGVuZ3RoKCkpOworICAgIFVFcnJv
ckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGludDMyX3QgcGFyc2VQb3NpdGlvbiA9
IDA7CisgICAgVURhdGUgZGF0ZSA9IHVkYXRfcGFyc2UobV9zaG9ydERhdGVGb3JtYXQsIGlucHV0
LmNoYXJhY3RlcnMoKSwgaW5wdXRMZW5ndGgsICZwYXJzZVBvc2l0aW9uLCAmc3RhdHVzKTsKKyAg
ICBpZiAocGFyc2VQb3NpdGlvbiAhPSBpbnB1dExlbmd0aCB8fCBVX0ZBSUxVUkUoc3RhdHVzKSkK
KyAgICAgICAgcmV0dXJuIG51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAg
IC8vIFVEYXRlLCB3aGljaCBpcyBhbiBhbGlhcyBvZiBkb3VibGUsIGlzIGNvbXBhdGlibGUgd2l0
aCBvdXIgZXhwZWN0YXRpb24uCisgICAgcmV0dXJuIGRhdGU7Cit9CisKK1N0cmluZyBJQ1VMb2Nh
bGU6OmZvcm1hdExvY2FsaXplZERhdGUoY29uc3QgRGF0ZUNvbXBvbmVudHMmIGRhdGVDb21wb25l
bnRzKQoreworICAgIGlmICghaW5pdGlhbGl6ZVNob3J0RGF0ZUZvcm1hdCgpKQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgZG91YmxlIGlucHV0ID0gZGF0ZUNvbXBvbmVudHMubWlsbGlz
ZWNvbmRzU2luY2VFcG9jaCgpOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OworICAgIGludDMyX3QgbGVuZ3RoID0gdWRhdF9mb3JtYXQobV9zaG9ydERhdGVGb3JtYXQsIGlu
cHV0LCAwLCAwLCAwLCAmc3RhdHVzKTsKKyAgICBpZiAoc3RhdHVzICE9IFVfQlVGRkVSX09WRVJG
TE9XX0VSUk9SKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgVmVjdG9yPFVDaGFyPiBi
dWZmZXIobGVuZ3RoKTsKKyAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgdWRhdF9mb3Jt
YXQobV9zaG9ydERhdGVGb3JtYXQsIGlucHV0LCBidWZmZXIuZGF0YSgpLCBsZW5ndGgsIDAsICZz
dGF0dXMpOworICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KGJ1ZmZlcik7Cit9CisKKyNpZiBFTkFCTEUo
Q0FMRU5EQVJfUElDS0VSKQorc3RhdGljIGlubGluZSBib29sIGlzSUNVWWVhclN5bWJvbChVQ2hh
ciBsZXR0ZXIpCit7CisgICAgcmV0dXJuIGxldHRlciA9PSAneScgfHwgbGV0dGVyID09ICdZJzsK
K30KKworc3RhdGljIGlubGluZSBib29sIGlzSUNVTW9udGhTeW1ib2woVUNoYXIgbGV0dGVyKQor
eworICAgIHJldHVybiBsZXR0ZXIgPT0gJ00nOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJ
Q1VEYXlJbk1vbnRoU3ltYm9sKFVDaGFyIGxldHRlcikKK3sKKyAgICByZXR1cm4gbGV0dGVyID09
ICdkJzsKK30KKworLy8gU3BlY2lmaWNhdGlvbiBvZiB0aGUgaW5wdXQ6CisvLyBodHRwOi8vaWN1
LXByb2plY3Qub3JnL2FwaXJlZi9pY3U0Yy9jbGFzc1NpbXBsZURhdGVGb3JtYXQuaHRtbCNkZXRh
aWxzCitzdGF0aWMgU3RyaW5nIGxvY2FsaXplRm9ybWF0KGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGJ1
ZmZlcikKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgVUNoYXIgbGFzdENoYXIg
PSAwOworICAgIGJvb2wgaW5RdW90ZSA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBidWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGluUXVvdGUpIHsKKyAgICAg
ICAgICAgIGlmIChidWZmZXJbaV0gPT0gJ1wnJykgeworICAgICAgICAgICAgICAgIGluUXVvdGUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBsYXN0Q2hhciA9IDA7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGkpOworICAgICAgICAgICAgICAgIGlmIChidWZmZXJbaSAtIDFdID09ICdcJycpCisg
ICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcJycpOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVmZmVyW2ldKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEobGFzdENoYXIpICYmIGxhc3RD
aGFyID09IGJ1ZmZlcltpXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGxhc3RDaGFyID0gYnVmZmVyW2ldOworICAgICAgICAgICAgaWYgKGlzSUNVWWVhclN5bWJvbChs
YXN0Q2hhcikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGRhdGVGb3JtYXRZZWFy
VGV4dCgpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRleHQuaXNFbXB0eSgpID8g
IlllYXIiIDogdGV4dCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSUNVTW9udGhTeW1ib2wo
bGFzdENoYXIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBkYXRlRm9ybWF0TW9u
dGhUZXh0KCk7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQodGV4dC5pc0VtcHR5KCkg
PyAiTW9udGgiIDogdGV4dCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzSUNVRGF5SW5Nb250
aFN5bWJvbChsYXN0Q2hhcikpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IGRhdGVG
b3JtYXREYXlJbk1vbnRoVGV4dCgpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRl
eHQuaXNFbXB0eSgpID8gIkRheSIgOiB0ZXh0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGFz
dENoYXIgPT0gJ1wnJykKKyAgICAgICAgICAgICAgICBpblF1b3RlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChsYXN0Q2hhcik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwordm9pZCBJ
Q1VMb2NhbGU6OmluaXRpYWxpemVMb2NhbGl6ZWREYXRlRm9ybWF0VGV4dCgpCit7CisgICAgaWYg
KCFtX2xvY2FsaXplZERhdGVGb3JtYXRUZXh0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dCA9IFN0cmluZygiIik7CisgICAgaWYgKCFpbml0
aWFsaXplU2hvcnREYXRlRm9ybWF0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBVRXJyb3JDb2Rl
IHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgICBpbnQzMl90IGxlbmd0aCA9IHVkYXRfdG9QYXR0
ZXJuKG1fc2hvcnREYXRlRm9ybWF0LCBUUlVFLCAwLCAwLCAmc3RhdHVzKTsKKyAgICBpZiAoc3Rh
dHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQorICAgICAgICByZXR1cm47CisgICAgVmVj
dG9yPFVDaGFyPiBidWZmZXIobGVuZ3RoKTsKKyAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Cisg
ICAgdWRhdF90b1BhdHRlcm4obV9zaG9ydERhdGVGb3JtYXQsIFRSVUUsIGJ1ZmZlci5kYXRhKCks
IGxlbmd0aCwgJnN0YXR1cyk7CisgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dCA9IGxvY2FsaXplRm9ybWF0KGJ1
ZmZlcik7Cit9CisKK1N0cmluZyBJQ1VMb2NhbGU6OmxvY2FsaXplZERhdGVGb3JtYXRUZXh0KCkK
K3sKKyAgICBpbml0aWFsaXplTG9jYWxpemVkRGF0ZUZvcm1hdFRleHQoKTsKKyAgICByZXR1cm4g
bV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dDsKK30KKworUGFzc093blB0cjxWZWN0b3I8U3RyaW5n
PiA+IElDVUxvY2FsZTo6Y3JlYXRlTGFiZWxWZWN0b3IoVURhdGVGb3JtYXRTeW1ib2xUeXBlIHR5
cGUsIGludDMyX3Qgc3RhcnRJbmRleCwgaW50MzJfdCBzaXplKQoreworICAgIGlmICghbV9zaG9y
dERhdGVGb3JtYXQpCisgICAgICAgIHJldHVybiBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4o
KTsKKyAgICBpZiAodWRhdF9jb3VudFN5bWJvbHMobV9zaG9ydERhdGVGb3JtYXQsIHR5cGUpICE9
IHN0YXJ0SW5kZXggKyBzaXplKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxWZWN0b3I8U3Ry
aW5nPiA+KCk7CisKKyAgICBPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBsYWJlbHMgPSBhZG9wdFB0
cihuZXcgVmVjdG9yPFN0cmluZz4oKSk7CisgICAgbGFiZWxzLT5yZXNlcnZlQ2FwYWNpdHkoc2l6
ZSk7CisgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFVF
cnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgICAgICBpbnQzMl90IGxlbmd0aCA9
IHVkYXRfZ2V0U3ltYm9scyhtX3Nob3J0RGF0ZUZvcm1hdCwgdHlwZSwgc3RhcnRJbmRleCArIGks
IDAsIDAsICZzdGF0dXMpOworICAgICAgICBpZiAoc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9X
X0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPigp
OworICAgICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOworICAgICAgICBzdGF0dXMg
PSBVX1pFUk9fRVJST1I7CisgICAgICAgIHVkYXRfZ2V0U3ltYm9scyhtX3Nob3J0RGF0ZUZvcm1h
dCwgdHlwZSwgc3RhcnRJbmRleCArIGksIGJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgJnN0YXR1cyk7
CisgICAgICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKKyAgICAgICAgICAgIHJldHVybiBQYXNz
T3duUHRyPFZlY3RvcjxTdHJpbmc+ID4oKTsKKyAgICAgICAgbGFiZWxzLT5hcHBlbmQoU3RyaW5n
OjphZG9wdChidWZmZXIpKTsKKyAgICB9CisgICAgcmV0dXJuIGxhYmVscy5yZWxlYXNlKCk7Cit9
CisKK3N0YXRpYyBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gY3JlYXRlRmFsbGJhY2tNb250
aExhYmVscygpCit7CisgICAgT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gbGFiZWxzID0gYWRvcHRQ
dHIobmV3IFZlY3RvcjxTdHJpbmc+KCkpOworICAgIGxhYmVscy0+cmVzZXJ2ZUNhcGFjaXR5KFdU
Rl9BUlJBWV9MRU5HVEgoV1RGOjptb250aEZ1bGxOYW1lKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoV1RGOjptb250aEZ1bGxOYW1lKTsgKytpKQorICAg
ICAgICBsYWJlbHMtPmFwcGVuZChXVEY6Om1vbnRoRnVsbE5hbWVbaV0pOworICAgIHJldHVybiBs
YWJlbHMucmVsZWFzZSgpOworfQorCitzdGF0aWMgUGFzc093blB0cjxWZWN0b3I8U3RyaW5nPiA+
IGNyZWF0ZUZhbGxiYWNrV2Vla0RheVNob3J0TGFiZWxzKCkKK3sKKyAgICBPd25QdHI8VmVjdG9y
PFN0cmluZz4gPiBsYWJlbHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFN0cmluZz4oKSk7CisgICAg
bGFiZWxzLT5yZXNlcnZlQ2FwYWNpdHkoNyk7CisgICAgbGFiZWxzLT5hcHBlbmQoIlN1biIpOwor
ICAgIGxhYmVscy0+YXBwZW5kKCJNb24iKTsKKyAgICBsYWJlbHMtPmFwcGVuZCgiVHVlIik7Cisg
ICAgbGFiZWxzLT5hcHBlbmQoIldlZCIpOworICAgIGxhYmVscy0+YXBwZW5kKCJUaHUiKTsKKyAg
ICBsYWJlbHMtPmFwcGVuZCgiRnJpIik7CisgICAgbGFiZWxzLT5hcHBlbmQoIlNhdCIpOworICAg
IHJldHVybiBsYWJlbHMucmVsZWFzZSgpOworfQorCit2b2lkIElDVUxvY2FsZTo6aW5pdGlhbGl6
ZUNhbGVuZGFyKCkKK3sKKyAgICBpZiAobV9tb250aExhYmVscyAmJiBtX3dlZWtEYXlTaG9ydExh
YmVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbml0aWFsaXplU2hvcnREYXRlRm9y
bWF0KCkpIHsKKyAgICAgICAgbV9maXJzdERheU9mV2VlayA9IDA7CisgICAgICAgIG1fbW9udGhM
YWJlbHMgPSBjcmVhdGVGYWxsYmFja01vbnRoTGFiZWxzKCk7CisgICAgICAgIG1fd2Vla0RheVNo
b3J0TGFiZWxzID0gY3JlYXRlRmFsbGJhY2tXZWVrRGF5U2hvcnRMYWJlbHMoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX2ZpcnN0RGF5T2ZXZWVrID0gdWNhbF9nZXRBdHRyaWJ1dGUo
dWRhdF9nZXRDYWxlbmRhcihtX3Nob3J0RGF0ZUZvcm1hdCksIFVDQUxfRklSU1RfREFZX09GX1dF
RUspIC0gVUNBTF9TVU5EQVk7CisKKyAgICBtX21vbnRoTGFiZWxzID0gY3JlYXRlTGFiZWxWZWN0
b3IoVURBVF9NT05USFMsIFVDQUxfSkFOVUFSWSwgMTIpOworICAgIGlmICghbV9tb250aExhYmVs
cykKKyAgICAgICAgbV9tb250aExhYmVscyA9IGNyZWF0ZUZhbGxiYWNrTW9udGhMYWJlbHMoKTsK
KworICAgIG1fd2Vla0RheVNob3J0TGFiZWxzID0gY3JlYXRlTGFiZWxWZWN0b3IoVURBVF9TSE9S
VF9XRUVLREFZUywgVUNBTF9TVU5EQVksIDcpOworICAgIGlmICghbV93ZWVrRGF5U2hvcnRMYWJl
bHMpCisgICAgICAgIG1fd2Vla0RheVNob3J0TGFiZWxzID0gY3JlYXRlRmFsbGJhY2tXZWVrRGF5
U2hvcnRMYWJlbHMoKTsKK30KKworY29uc3QgVmVjdG9yPFN0cmluZz4mIElDVUxvY2FsZTo6bW9u
dGhMYWJlbHMoKQoreworICAgIGluaXRpYWxpemVDYWxlbmRhcigpOworICAgIHJldHVybiAqbV9t
b250aExhYmVsczsKK30KKworY29uc3QgVmVjdG9yPFN0cmluZz4mIElDVUxvY2FsZTo6d2Vla0Rh
eVNob3J0TGFiZWxzKCkKK3sKKyAgICBpbml0aWFsaXplQ2FsZW5kYXIoKTsKKyAgICByZXR1cm4g
Km1fd2Vla0RheVNob3J0TGFiZWxzOworfQorCit1bnNpZ25lZCBJQ1VMb2NhbGU6OmZpcnN0RGF5
T2ZXZWVrKCkKK3sKKyAgICBpbml0aWFsaXplQ2FsZW5kYXIoKTsKKyAgICByZXR1cm4gbV9maXJz
dERheU9mV2VlazsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvTG9jYWxlSUNVLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0ZmM3MDcxOThi
NmQ1OGY3NzUyMDZiM2YwY2IwMTJjZjlhOTk3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJQ1VMb2NhbGVfaAorI2RlZmluZSBJQ1VMb2NhbGVfaAorCisjaW5jbHVkZSAiRGF0ZUNvbXBv
bmVudHMuaCIKKyNpbmNsdWRlIDx1bmljb2RlL3VkYXQuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vu
dW0uaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2Ugc2hvdWxkIHVzZSB0aGlzIGNs
YXNzIG9ubHkgZm9yIExvY2FsaXplZE51bWJlcklDVS5jcHAsIExvY2FsaXplZERhdGVJQ1UuY3Bw
LAorLy8gTG9jYWxpemVkQ2FsZW5kYXJJQ1UuY3BwLCBhbmQgTG9jYWxpemVkTnVtYmVySUNVVGVz
dC5jcHAuCitjbGFzcyBJQ1VMb2NhbGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PElDVUxvY2FsZT4gY3JlYXRlKGNvbnN0IGNoYXIqIGxvY2FsZVN0cmluZyk7CisgICAgc3RhdGlj
IElDVUxvY2FsZSogY3VycmVudExvY2FsZSgpOworICAgIH5JQ1VMb2NhbGUoKTsKKworICAgIC8v
IEZvciBMb2NhbGl6ZWROdW1iZXIKKyAgICBTdHJpbmcgY29udmVydFRvTG9jYWxpemVkTnVtYmVy
KGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBjb252ZXJ0RnJvbUxvY2FsaXplZE51bWJlcihj
b25zdCBTdHJpbmcmKTsKKworICAgIC8vIEZvciBMb2NhbGl6ZWREYXRlCisgICAgZG91YmxlIHBh
cnNlTG9jYWxpemVkRGF0ZShjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgZm9ybWF0TG9jYWxp
emVkRGF0ZShjb25zdCBEYXRlQ29tcG9uZW50cyYpOworI2lmIEVOQUJMRShDQUxFTkRBUl9QSUNL
RVIpCisgICAgU3RyaW5nIGxvY2FsaXplZERhdGVGb3JtYXRUZXh0KCk7CisKKyAgICAvLyBGb3Ig
TG9jYWxpemVkQ2FsZW5kYXIKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbW9udGhMYWJlbHMo
KTsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgd2Vla0RheVNob3J0TGFiZWxzKCk7CisgICAg
dW5zaWduZWQgZmlyc3REYXlPZldlZWsoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPElDVUxvY2FsZT4gY3JlYXRlRm9yQ3VycmVudExvY2FsZSgpOworICAgIGV4
cGxpY2l0IElDVUxvY2FsZShjb25zdCBjaGFyKik7CisgICAgdm9pZCBzZXREZWNpbWFsU3ltYm9s
KHVuc2lnbmVkIGluZGV4LCBVTnVtYmVyRm9ybWF0U3ltYm9sKTsKKyAgICB2b2lkIHNldERlY2lt
YWxUZXh0QXR0cmlidXRlKFN0cmluZyYsIFVOdW1iZXJGb3JtYXRUZXh0QXR0cmlidXRlKTsKKyAg
ICB2b2lkIGluaXRpYWxpemVEZWNpbWFsRm9ybWF0KCk7CisKKyAgICBib29sIGRldGVjdFNpZ25B
bmRHZXREaWdpdFJhbmdlKGNvbnN0IFN0cmluZyYgaW5wdXQsIGJvb2wmIGlzTmVnYXRpdmUsIHVu
c2lnbmVkJiBzdGFydEluZGV4LCB1bnNpZ25lZCYgZW5kSW5kZXgpOworICAgIHVuc2lnbmVkIG1h
dGNoZWREZWNpbWFsU3ltYm9sSW5kZXgoY29uc3QgU3RyaW5nJiBpbnB1dCwgdW5zaWduZWQmIHBv
c2l0aW9uKTsKKworICAgIGJvb2wgaW5pdGlhbGl6ZVNob3J0RGF0ZUZvcm1hdCgpOworCisjaWYg
RU5BQkxFKENBTEVOREFSX1BJQ0tFUikKKyAgICB2b2lkIGluaXRpYWxpemVMb2NhbGl6ZWREYXRl
Rm9ybWF0VGV4dCgpOworICAgIFBhc3NPd25QdHI8VmVjdG9yPFN0cmluZz4gPiBjcmVhdGVMYWJl
bFZlY3RvcihVRGF0ZUZvcm1hdFN5bWJvbFR5cGUsIGludDMyX3Qgc3RhcnRJbmRleCwgaW50MzJf
dCBzaXplKTsKKyAgICB2b2lkIGluaXRpYWxpemVDYWxlbmRhcigpOworI2VuZGlmCisKKyAgICBD
U3RyaW5nIG1fbG9jYWxlOworICAgIFVOdW1iZXJGb3JtYXQqIG1fbnVtYmVyRm9ybWF0OworICAg
IFVEYXRlRm9ybWF0KiBtX3Nob3J0RGF0ZUZvcm1hdDsKKyAgICBlbnVtIHsKKyAgICAgICAgLy8g
MC05IGZvciBkaWdpdHMuCisgICAgICAgIERlY2ltYWxTZXBhcmF0b3JJbmRleCA9IDEwLAorICAg
ICAgICBHcm91cFNlcGFyYXRvckluZGV4ID0gMTEsCisgICAgICAgIERlY2ltYWxTeW1ib2xzU2l6
ZQorICAgIH07CisgICAgU3RyaW5nIG1fZGVjaW1hbFN5bWJvbHNbRGVjaW1hbFN5bWJvbHNTaXpl
XTsKKyAgICBTdHJpbmcgbV9wb3NpdGl2ZVByZWZpeDsKKyAgICBTdHJpbmcgbV9wb3NpdGl2ZVN1
ZmZpeDsKKyAgICBTdHJpbmcgbV9uZWdhdGl2ZVByZWZpeDsKKyAgICBTdHJpbmcgbV9uZWdhdGl2
ZVN1ZmZpeDsKKyAgICBib29sIG1fZGlkQ3JlYXRlRGVjaW1hbEZvcm1hdDsKKyAgICBib29sIG1f
ZGlkQ3JlYXRlU2hvcnREYXRlRm9ybWF0OworCisjaWYgRU5BQkxFKENBTEVOREFSX1BJQ0tFUikK
KyAgICBTdHJpbmcgbV9sb2NhbGl6ZWREYXRlRm9ybWF0VGV4dDsKKyAgICBPd25QdHI8VmVjdG9y
PFN0cmluZz4gPiBtX21vbnRoTGFiZWxzOworICAgIE93blB0cjxWZWN0b3I8U3RyaW5nPiA+IG1f
d2Vla0RheVNob3J0TGFiZWxzOworICAgIHVuc2lnbmVkIG1fZmlyc3REYXlPZldlZWs7CisjZW5k
aWYKK307CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9Mb2NhbGl6ZWREYXRlSUNVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
TG9jYWxpemVkRGF0ZUlDVS5jcHAKaW5kZXggNWMwNGIyZGYyY2RkZjBlNmJhYzA3NWUzMTAwM2Ew
YjBlMTA5ZWZhYy4uNTdhNGY2M2QxNTcyNmRiNGVmZTgwMzc4MjE4YTIyZjJkNTE5MWI1YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWREYXRlSUNVLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L0xvY2FsaXplZERhdGVJQ1UuY3Bw
CkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTG9jYWxp
emVkRGF0ZS5oIgogCi0jaW5jbHVkZSAiSUNVTG9jYWxlLmgiCisjaW5jbHVkZSAiTG9jYWxlSUNV
LmgiCiAjaW5jbHVkZSA8bGltaXRzPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9Mb2NhbGl6ZWROdW1iZXJJQ1UuY3BwCmluZGV4
IGE5OTE0MTM1NGQ0NTI2ZDIyOWRlN2Y3NWFiMzk0NmFlYWIzNDQ4ODcuLjQ3NjQxYTE0MzU1ZWNh
MjJmNjY4ZmQ1NjBmNDA5NjhmMmU1NjgxNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvTG9jYWxpemVkTnVtYmVySUNVLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L0xvY2FsaXplZE51bWJlcklDVS5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSAiSUNVTG9jYWxlLmgiCisjaW5jbHVkZSAi
TG9jYWxlSUNVLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkTnVtYmVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTG9jYWxp
emVkTnVtYmVySUNVVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0xvY2Fs
aXplZE51bWJlcklDVVRlc3QuY3BwCmluZGV4IDZhZjE0MTkyNTU0ZDBhZmNjMWNkZjgzZGE1NWJj
NWVjNzAxNTY3YmMuLjRmNGU2YWY2OGFjOGIwZDkzODBjMWQ0ZTY0ZmRhNGRmODhiYzAwMTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTG9jYWxpemVkTnVtYmVySUNV
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Mb2NhbGl6ZWROdW1i
ZXJJQ1VUZXN0LmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAK
LSNpbmNsdWRlICJJQ1VMb2NhbGUuaCIKKyNpbmNsdWRlICJMb2NhbGVJQ1UuaCIKICNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAK
</data>
<flag name="review"
          id="146209"
          type_id="1"
          status="+"
          setter="haraken"
    />
          </attachment>
      

    </bug>

</bugzilla>