<?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>150992</bug_id>
          
          <creation_ts>2015-11-06 18:22:08 -0800</creation_ts>
          <short_desc>Rework the way allowed argument classes are stored</short_desc>
          <delta_ts>2015-11-09 10:35:15 -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>New Bugs</component>
          <version>WebKit 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="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1140133</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-11-06 18:22:08 -0800</bug_when>
    <thetext>Rework the way allowed argument classes are stored</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140404</commentid>
    <comment_count>1</comment_count>
      <attachid>265067</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-11-09 10:01:50 -0800</bug_when>
    <thetext>Created attachment 265067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140408</commentid>
    <comment_count>2</comment_count>
      <attachid>265067</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-11-09 10:09:53 -0800</bug_when>
    <thetext>Comment on attachment 265067
Patch

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

&gt; Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectCoder.mm:384
&gt; +        *static_cast&lt;int*&gt;(data) = [decodeObjectFromObjectStream(self, { [NSNumber class] }) intValue];

Seems a shame to have to create/destroy an HashSet with the NSNumber class in it so many times. Maybe have a global one to reuse or a code path that doesn’t require building the set?

&gt; Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectCoder.mm:424
&gt; +    if (auto *allowedClasses = decoder-&gt;_allowedClasses) {

Should be auto* instead of auto *.

&gt; Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectCoder.mm:426
&gt; +        for (Class cls = objectClass; cls; cls = class_getSuperclass(cls)) {

Would be nice to dodge “cls” by using some other name. Maybe superclass or baseClass or ancestralClass? Not completely accurate, but so much better than a letter cluster.

&gt; Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectCoder.mm:519
&gt; +            const auto&amp; allowedClasses = allowedArgumentClasses[i - 2];

Why not just auto&amp;? Does const add much here?

&gt; Source/WebKit2/Shared/API/Cocoa/_WKRemoteObjectInterface.mm:138
&gt; +    unsigned superProtocolCount;

I might decide to coin the term superprotocol and treat it as a word the way we do superclass, thus omitting the capital P.

&gt; Source/WebKit2/Shared/API/Cocoa/_WKRemoteObjectInterface.mm:206
&gt; +    auto result = adoptNS([[NSMutableSet alloc] init]);
&gt; +
&gt; +    for (auto allowedClass : classesForSelectorArgument(self, selector, argumentIndex))
&gt; +        [result addObject:allowedClass];
&gt; +
&gt; +    return result.autorelease();

It’d be tempting to make HashSet/NSSet translation functions, and thus write this as a one-liner, exposing the classesForSelectorArgument call better rather than having it be inside the for declaration.

&gt; Source/WebKit2/Shared/API/Cocoa/_WKRemoteObjectInterface.mm:215
&gt; +    HashSet&lt;Class&gt; allowedClasses;
&gt; +    for (Class allowedClass in classes)
&gt; +        allowedClasses.add(allowedClass);
&gt; +
&gt; +    classesForSelectorArgument(self, selector, argumentIndex) = WTF::move(allowedClasses);

It’d be tempting to make HashSet/NSSet translation functions, and thus write this as a one-liner without an explicit WTF::move.

&gt; Source/WebKit2/Shared/API/Cocoa/_WKRemoteObjectInterface.mm:247
&gt; -    auto it = _allowedArgumentClasses.find(selector);
&gt; -    ASSERT(it != _allowedArgumentClasses.end());
&gt; +    auto it = _methods.find(selector);
&gt; +    ASSERT(it != _methods.end());
&gt;  
&gt; -    return it-&gt;value;
&gt; +    return it-&gt;value.allowedArgumentClasses;

I like to do ASSERT(contains), return get; in cases like this rather than using find/value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140413</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-11-09 10:21:53 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 265067 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265067&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectCoder.mm:384
&gt; &gt; +        *static_cast&lt;int*&gt;(data) = [decodeObjectFromObjectStream(self, { [NSNumber class] }) intValue];
&gt; 
&gt; Seems a shame to have to create/destroy an HashSet with the NSNumber class
&gt; in it so many times. Maybe have a global one to reuse or a code path that
&gt; doesn’t require building the set?

Agreed, I&apos;ll look at doing it in a follow-up patch.

&gt; 
&gt; &gt; Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectCoder.mm:426
&gt; &gt; +        for (Class cls = objectClass; cls; cls = class_getSuperclass(cls)) {
&gt; 
&gt; Would be nice to dodge “cls” by using some other name. Maybe superclass or
&gt; baseClass or ancestralClass? Not completely accurate, but so much better
&gt; than a letter cluster.

Unrolled one iteration of the loop so I could call it superclass.

&gt; 
&gt; &gt; Source/WebKit2/Shared/API/Cocoa/WKRemoteObjectCoder.mm:519
&gt; &gt; +            const auto&amp; allowedClasses = allowedArgumentClasses[i - 2];
&gt; 
&gt; Why not just auto&amp;? Does const add much here?

Nope, removed.

&gt; 
&gt; &gt; Source/WebKit2/Shared/API/Cocoa/_WKRemoteObjectInterface.mm:138
&gt; &gt; +    unsigned superProtocolCount;
&gt; 
&gt; I might decide to coin the term superprotocol and treat it as a word the way
&gt; we do superclass, thus omitting the capital P.
&gt; 

I renamed it to conformingProtocol count since superProtocol isn&apos;t really a correct name. A single protocol can conform to more than one other protocol.

&gt; &gt; Source/WebKit2/Shared/API/Cocoa/_WKRemoteObjectInterface.mm:206
&gt; &gt; +    auto result = adoptNS([[NSMutableSet alloc] init]);
&gt; &gt; +
&gt; &gt; +    for (auto allowedClass : classesForSelectorArgument(self, selector, argumentIndex))
&gt; &gt; +        [result addObject:allowedClass];
&gt; &gt; +
&gt; &gt; +    return result.autorelease();
&gt; 
&gt; It’d be tempting to make HashSet/NSSet translation functions, and thus write
&gt; this as a one-liner, exposing the classesForSelectorArgument call better
&gt; rather than having it be inside the for declaration.
&gt; 
&gt; &gt; Source/WebKit2/Shared/API/Cocoa/_WKRemoteObjectInterface.mm:215
&gt; &gt; +    HashSet&lt;Class&gt; allowedClasses;
&gt; &gt; +    for (Class allowedClass in classes)
&gt; &gt; +        allowedClasses.add(allowedClass);
&gt; &gt; +
&gt; &gt; +    classesForSelectorArgument(self, selector, argumentIndex) = WTF::move(allowedClasses);
&gt; 
&gt; It’d be tempting to make HashSet/NSSet translation functions, and thus write
&gt; this as a one-liner without an explicit WTF::move.

Thought about that but I couldn&apos;t come up with a good name :)

&gt; 
&gt; &gt; Source/WebKit2/Shared/API/Cocoa/_WKRemoteObjectInterface.mm:247
&gt; &gt; -    auto it = _allowedArgumentClasses.find(selector);
&gt; &gt; -    ASSERT(it != _allowedArgumentClasses.end());
&gt; &gt; +    auto it = _methods.find(selector);
&gt; &gt; +    ASSERT(it != _methods.end());
&gt; &gt;  
&gt; &gt; -    return it-&gt;value;
&gt; &gt; +    return it-&gt;value.allowedArgumentClasses;
&gt; 
&gt; I like to do ASSERT(contains), return get; in cases like this rather than
&gt; using find/value.

I also like ASSERT(contains) better than find + ASSERT(... != end()), aka the Adam Roben style.

I did change the ASSERT to contains, but I can&apos;t use get since I want to return a const reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1140417</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-11-09 10:35:15 -0800</bug_when>
    <thetext>Committed r192162: &lt;http://trac.webkit.org/changeset/192162&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265067</attachid>
            <date>2015-11-09 10:01:50 -0800</date>
            <delta_ts>2015-11-09 10:09:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150992-20151109100147.patch</filename>
            <type>text/plain</type>
            <size>21588</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyMTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZWZjYTllZGE5YjA3NzU0
NDc5OGFjYjM2MjNjYjI2ZGFhMjBlNGQ4MC4uMmY5MjY0NjNhYzVkZDYyNzhmYTVmZWVmMGZmYzhj
ZWI5N2NhMmIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE1LTExLTA2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV3b3JrIHRoZSB3
YXkgYWxsb3dlZCBhcmd1bWVudCBjbGFzc2VzIGFyZSBzdG9yZWQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDk5MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHNlcGFyYXRlIE1ldGhvZEluZm8g
Y2xhc3Mgc28gd2UgaGF2ZSBzb21lcGxhY2UgdG8gc3RvcmUgdGhlIHJlcGx5IGJsb2NrIGFyZ3Vt
ZW50cy4KKyAgICAgICAgVXNlIEhhc2hTZXQ8Q2xhc3M+IGluc3RlYWQgb2YgTlNTZXQuIE5vIGZ1
bmN0aW9uYWxpdHkgY2hhbmdlIGludGVuZGVkLgorCisgICAgICAgICogU2hhcmVkL0FQSS9Db2Nv
YS9XS1JlbW90ZU9iamVjdENvZGVyLm1tOgorICAgICAgICAoLVtXS1JlbW90ZU9iamVjdERlY29k
ZXIgZGVjb2RlVmFsdWVPZk9iakNUeXBlOmF0Ol0pOgorICAgICAgICAoZGVjb2RlT2JqZWN0RnJv
bU9iamVjdFN0cmVhbSk6CisgICAgICAgIChjaGVja0lmQ2xhc3NJc0FsbG93ZWQpOgorICAgICAg
ICAoZGVjb2RlSW52b2NhdGlvbkFyZ3VtZW50cyk6CisgICAgICAgIChkZWNvZGVPYmplY3QpOgor
ICAgICAgICAoLVtXS1JlbW90ZU9iamVjdERlY29kZXIgZGVjb2RlT2JqZWN0T2ZDbGFzc2VzOmZv
cktleTpdKToKKyAgICAgICAgKC1bV0tSZW1vdGVPYmplY3REZWNvZGVyIGFsbG93ZWRDbGFzc2Vz
XSk6CisgICAgICAgICogU2hhcmVkL0FQSS9Db2NvYS9fV0tSZW1vdGVPYmplY3RJbnRlcmZhY2Uu
bW06CisgICAgICAgIChpc0NvbnRhaW5lckNsYXNzKToKKyAgICAgICAgKHByb3BlcnR5TGlzdENs
YXNzZXMpOgorICAgICAgICAoaW5pdGlhbGl6ZU1ldGhvZCk6CisgICAgICAgIChpbml0aWFsaXpl
TWV0aG9kcyk6CisgICAgICAgICgtW19XS1JlbW90ZU9iamVjdEludGVyZmFjZSBpbml0V2l0aFBy
b3RvY29sOmlkZW50aWZpZXI6XSk6CisgICAgICAgIChjbGFzc2VzRm9yU2VsZWN0b3JBcmd1bWVu
dCk6CisgICAgICAgICgtW19XS1JlbW90ZU9iamVjdEludGVyZmFjZSBjbGFzc2VzRm9yU2VsZWN0
b3I6YXJndW1lbnRJbmRleDpdKToKKyAgICAgICAgKC1bX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNl
IHNldENsYXNzZXM6Zm9yU2VsZWN0b3I6YXJndW1lbnRJbmRleDpdKToKKyAgICAgICAgKC1bX1dL
UmVtb3RlT2JqZWN0SW50ZXJmYWNlIF9hbGxvd2VkQXJndW1lbnRDbGFzc2VzRm9yU2VsZWN0b3I6
XSk6CisgICAgICAgIChhbGxvd2VkQXJndW1lbnRDbGFzc2VzRm9yTWV0aG9kKTogRGVsZXRlZC4K
KyAgICAgICAgKGluaXRpYWxpemVBbGxvd2VkQXJndW1lbnRDbGFzc2VzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBTaGFyZWQvQVBJL0NvY29hL19XS1JlbW90ZU9iamVjdEludGVyZmFjZUludGVybmFs
Lmg6CisKIDIwMTUtMTEtMDYgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRkIHByZWxpbWluYXJ5IChTUEkpIHN1cHBvcnQgZm9yIE5TVGV4dEZpbmRl
ciBvbiBXS1dlYlZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29j
b2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29j
b2EvV0tSZW1vdGVPYmplY3RDb2Rlci5tbQppbmRleCA4MDJhY2QyNTY3MTA1NDAyYmE3NGQ2YzI0
MjJlYmEzNGQ4OGUwMWJlLi44MzUxNTcxNjQ0YWI0MzM5NWZiYTA1MjQ3ZjNhMGRlNGRiNjY1YmQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0NvY29hL1dLUmVtb3RlT2Jq
ZWN0Q29kZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9XS1JlbW90
ZU9iamVjdENvZGVyLm1tCkBAIC0zNTgsNyArMzU4LDcgQEAgc3RhdGljIE5TU3RyaW5nICplc2Nh
cGVLZXkoTlNTdHJpbmcgKmtleSkKICAgICBjb25zdCBBUEk6OkFycmF5KiBfb2JqZWN0U3RyZWFt
OwogICAgIHNpemVfdCBfb2JqZWN0U3RyZWFtUG9zaXRpb247CiAKLSAgICBOU1NldCAqX2FsbG93
ZWRDbGFzc2VzOworICAgIGNvbnN0IEhhc2hTZXQ8Q2xhc3M+KiBfYWxsb3dlZENsYXNzZXM7CiB9
CiAKIC0gKGlkKWluaXRXaXRoSW50ZXJmYWNlOihfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2UgKilp
bnRlcmZhY2Ugcm9vdE9iamVjdERpY3Rpb25hcnk6KGNvbnN0IEFQSTo6RGljdGlvbmFyeSopcm9v
dE9iamVjdERpY3Rpb25hcnkKQEAgLTM4MSw3ICszODEsNyBAQCBzdGF0aWMgTlNTdHJpbmcgKmVz
Y2FwZUtleShOU1N0cmluZyAqa2V5KQogICAgIHN3aXRjaCAoKnR5cGUpIHsKICAgICAvLyBpbnQK
ICAgICBjYXNlICdpJzoKLSAgICAgICAgKnN0YXRpY19jYXN0PGludCo+KGRhdGEpID0gW2RlY29k
ZU9iamVjdEZyb21PYmplY3RTdHJlYW0oc2VsZiwgW05TU2V0IHNldFdpdGhPYmplY3Q6W05TTnVt
YmVyIGNsYXNzXV0pIGludFZhbHVlXTsKKyAgICAgICAgKnN0YXRpY19jYXN0PGludCo+KGRhdGEp
ID0gW2RlY29kZU9iamVjdEZyb21PYmplY3RTdHJlYW0oc2VsZiwgeyBbTlNOdW1iZXIgY2xhc3Nd
IH0pIGludFZhbHVlXTsKICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OgpAQCAtNDA0LDkg
KzQwNCw5IEBAIHN0YXRpYyBOU1N0cmluZyAqZXNjYXBlS2V5KE5TU3RyaW5nICprZXkpCiAgICAg
cmV0dXJuIFtzZWxmIGRlY29kZU9iamVjdE9mQ2xhc3NlczpuaWwgZm9yS2V5OmtleV07CiB9CiAK
LXN0YXRpYyBpZCBkZWNvZGVPYmplY3QoV0tSZW1vdGVPYmplY3REZWNvZGVyICosIGNvbnN0IEFQ
STo6RGljdGlvbmFyeSosIE5TU2V0ICphbGxvd2VkQ2xhc3Nlcyk7CitzdGF0aWMgaWQgZGVjb2Rl
T2JqZWN0KFdLUmVtb3RlT2JqZWN0RGVjb2RlciAqLCBjb25zdCBBUEk6OkRpY3Rpb25hcnkqLCBj
b25zdCBIYXNoU2V0PENsYXNzPiYgYWxsb3dlZENsYXNzZXMpOwogCi1zdGF0aWMgaWQgZGVjb2Rl
T2JqZWN0RnJvbU9iamVjdFN0cmVhbShXS1JlbW90ZU9iamVjdERlY29kZXIgKmRlY29kZXIsIE5T
U2V0ICphbGxvd2VkQ2xhc3NlcykKK3N0YXRpYyBpZCBkZWNvZGVPYmplY3RGcm9tT2JqZWN0U3Ry
ZWFtKFdLUmVtb3RlT2JqZWN0RGVjb2RlciAqZGVjb2RlciwgY29uc3QgSGFzaFNldDxDbGFzcz4m
IGFsbG93ZWRDbGFzc2VzKQogewogICAgIGlmICghZGVjb2Rlci0+X29iamVjdFN0cmVhbSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKQEAgLTQyMSwxNSArNDIxLDE1IEBAIHN0YXRpYyBpZCBkZWNvZGVP
YmplY3RGcm9tT2JqZWN0U3RyZWFtKFdLUmVtb3RlT2JqZWN0RGVjb2RlciAqZGVjb2RlciwgTlNT
ZXQgKmFsCiAKIHN0YXRpYyB2b2lkIGNoZWNrSWZDbGFzc0lzQWxsb3dlZChXS1JlbW90ZU9iamVj
dERlY29kZXIgKmRlY29kZXIsIENsYXNzIG9iamVjdENsYXNzKQogewotICAgIE5TU2V0ICphbGxv
d2VkQ2xhc3NlcyA9IGRlY29kZXItPl9hbGxvd2VkQ2xhc3NlczsKLQotICAgIC8vIENoZWNrIGlm
IHRoZSBjbGFzcyBvciBhbnkgb2YgaXRzIHN1cGVyY2xhc3NlcyBhcmUgaW4gdGhlIGFsbG93ZWQg
Y2xhc3NlcyBzZXQuCi0gICAgZm9yIChDbGFzcyBjbHMgPSBvYmplY3RDbGFzczsgY2xzOyBjbHMg
PSBjbGFzc19nZXRTdXBlcmNsYXNzKGNscykpIHsKLSAgICAgICAgaWYgKFthbGxvd2VkQ2xhc3Nl
cyBjb250YWluc09iamVjdDpjbHNdKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmIChhdXRv
ICphbGxvd2VkQ2xhc3NlcyA9IGRlY29kZXItPl9hbGxvd2VkQ2xhc3NlcykgeworICAgICAgICAv
LyBDaGVjayBpZiB0aGUgY2xhc3Mgb3IgYW55IG9mIGl0cyBzdXBlcmNsYXNzZXMgYXJlIGluIHRo
ZSBhbGxvd2VkIGNsYXNzZXMgc2V0LgorICAgICAgICBmb3IgKENsYXNzIGNscyA9IG9iamVjdENs
YXNzOyBjbHM7IGNscyA9IGNsYXNzX2dldFN1cGVyY2xhc3MoY2xzKSkgeworICAgICAgICAgICAg
aWYgKGFsbG93ZWRDbGFzc2VzLT5jb250YWlucyhjbHMpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRV
bmFyY2hpdmVPcGVyYXRpb25FeGNlcHRpb24gZm9ybWF0OkAiT2JqZWN0IG9mIGNsYXNzIFwiJUBc
IiBpcyBub3QgYWxsb3dlZC4gQWxsb3dlZCBjbGFzc2VzIGFyZSBcIiVAXCIiLCBvYmplY3RDbGFz
cywgYWxsb3dlZENsYXNzZXNdOworICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRVbmFy
Y2hpdmVPcGVyYXRpb25FeGNlcHRpb24gZm9ybWF0OkAiT2JqZWN0IG9mIGNsYXNzIFwiJUBcIiBp
cyBub3QgYWxsb3dlZC4gQWxsb3dlZCBjbGFzc2VzIGFyZSBcIiVAXCIiLCBvYmplY3RDbGFzcywg
ZGVjb2Rlci5hbGxvd2VkQ2xhc3Nlc107CiB9CiAKIHN0YXRpYyB2b2lkIHZhbGlkYXRlQ2xhc3Mo
V0tSZW1vdGVPYmplY3REZWNvZGVyICpkZWNvZGVyLCBDbGFzcyBvYmplY3RDbGFzcykKQEAgLTQ0
NSw3ICs0NDUsNyBAQCBzdGF0aWMgdm9pZCB2YWxpZGF0ZUNsYXNzKFdLUmVtb3RlT2JqZWN0RGVj
b2RlciAqZGVjb2RlciwgQ2xhc3Mgb2JqZWN0Q2xhc3MpCiAgICAgW2RlY29kZXIgdmFsaWRhdGVD
bGFzc1N1cHBvcnRzU2VjdXJlQ29kaW5nOm9iamVjdENsYXNzXTsKIH0KIAotc3RhdGljIHZvaWQg
ZGVjb2RlSW52b2NhdGlvbkFyZ3VtZW50cyhXS1JlbW90ZU9iamVjdERlY29kZXIgKmRlY29kZXIs
IE5TSW52b2NhdGlvbiAqaW52b2NhdGlvbiwgY29uc3QgVmVjdG9yPFJldGFpblB0cjxOU1NldD4+
JiBhbGxvd2VkQXJndW1lbnRDbGFzc2VzKQorc3RhdGljIHZvaWQgZGVjb2RlSW52b2NhdGlvbkFy
Z3VtZW50cyhXS1JlbW90ZU9iamVjdERlY29kZXIgKmRlY29kZXIsIE5TSW52b2NhdGlvbiAqaW52
b2NhdGlvbiwgY29uc3QgVmVjdG9yPEhhc2hTZXQ8Q2xhc3M+PiYgYWxsb3dlZEFyZ3VtZW50Q2xh
c3NlcykKIHsKICAgICBOU01ldGhvZFNpZ25hdHVyZSAqbWV0aG9kU2lnbmF0dXJlID0gaW52b2Nh
dGlvbi5tZXRob2RTaWduYXR1cmU7CiAgICAgTlNVSW50ZWdlciBhcmd1bWVudENvdW50ID0gbWV0
aG9kU2lnbmF0dXJlLm51bWJlck9mQXJndW1lbnRzOwpAQCAtNDYwLDYzICs0NjAsNjMgQEAgc3Rh
dGljIHZvaWQgZGVjb2RlSW52b2NhdGlvbkFyZ3VtZW50cyhXS1JlbW90ZU9iamVjdERlY29kZXIg
KmRlY29kZXIsIE5TSW52b2NhdGkKICAgICAgICAgc3dpdGNoICgqdHlwZSkgewogICAgICAgICAv
LyBkb3VibGUKICAgICAgICAgY2FzZSAnZCc6IHsKLSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9
IFtkZWNvZGVPYmplY3RGcm9tT2JqZWN0U3RyZWFtKGRlY29kZXIsIFtOU1NldCBzZXRXaXRoT2Jq
ZWN0OltOU051bWJlciBjbGFzc11dKSBkb3VibGVWYWx1ZV07CisgICAgICAgICAgICBkb3VibGUg
dmFsdWUgPSBbZGVjb2RlT2JqZWN0RnJvbU9iamVjdFN0cmVhbShkZWNvZGVyLCB7IFtOU051bWJl
ciBjbGFzc10gfSkgZG91YmxlVmFsdWVdOwogICAgICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJn
dW1lbnQ6JnZhbHVlIGF0SW5kZXg6aV07CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIGZsb2F0CiAgICAgICAgIGNhc2UgJ2YnOiB7Ci0gICAgICAgICAgICBmbG9h
dCB2YWx1ZSA9IFtkZWNvZGVPYmplY3RGcm9tT2JqZWN0U3RyZWFtKGRlY29kZXIsIFtOU1NldCBz
ZXRXaXRoT2JqZWN0OltOU051bWJlciBjbGFzc11dKSBmbG9hdFZhbHVlXTsKKyAgICAgICAgICAg
IGZsb2F0IHZhbHVlID0gW2RlY29kZU9iamVjdEZyb21PYmplY3RTdHJlYW0oZGVjb2RlciwgeyBb
TlNOdW1iZXIgY2xhc3NdIH0pIGZsb2F0VmFsdWVdOwogICAgICAgICAgICAgW2ludm9jYXRpb24g
c2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6aV07CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIGludAogICAgICAgICBjYXNlICdpJzogewotICAgICAgICAgICAg
aW50IHZhbHVlID0gW2RlY29kZU9iamVjdEZyb21PYmplY3RTdHJlYW0oZGVjb2RlciwgW05TU2V0
IHNldFdpdGhPYmplY3Q6W05TTnVtYmVyIGNsYXNzXV0pIGludFZhbHVlXTsKKyAgICAgICAgICAg
IGludCB2YWx1ZSA9IFtkZWNvZGVPYmplY3RGcm9tT2JqZWN0U3RyZWFtKGRlY29kZXIsIHsgW05T
TnVtYmVyIGNsYXNzXSB9KSBpbnRWYWx1ZV07CiAgICAgICAgICAgICBbaW52b2NhdGlvbiBzZXRB
cmd1bWVudDomdmFsdWUgYXRJbmRleDppXTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gdW5zaWduZWQKICAgICAgICAgY2FzZSAnSSc6IHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHZhbHVlID0gW2RlY29kZU9iamVjdEZyb21PYmplY3RTdHJlYW0oZGVjb2Rlciwg
W05TU2V0IHNldFdpdGhPYmplY3Q6W05TTnVtYmVyIGNsYXNzXV0pIHVuc2lnbmVkSW50VmFsdWVd
OworICAgICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSBbZGVjb2RlT2JqZWN0RnJvbU9iamVjdFN0
cmVhbShkZWNvZGVyLCB7IFtOU051bWJlciBjbGFzc10gfSkgdW5zaWduZWRJbnRWYWx1ZV07CiAg
ICAgICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDppXTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgLy8gY2hhcgogICAgICAgICBj
YXNlICdjJzogewotICAgICAgICAgICAgY2hhciB2YWx1ZSA9IFtkZWNvZGVPYmplY3RGcm9tT2Jq
ZWN0U3RyZWFtKGRlY29kZXIsIFtOU1NldCBzZXRXaXRoT2JqZWN0OltOU051bWJlciBjbGFzc11d
KSBjaGFyVmFsdWVdOworICAgICAgICAgICAgY2hhciB2YWx1ZSA9IFtkZWNvZGVPYmplY3RGcm9t
T2JqZWN0U3RyZWFtKGRlY29kZXIsIHsgW05TTnVtYmVyIGNsYXNzXSB9KSBjaGFyVmFsdWVdOwog
ICAgICAgICAgICAgW2ludm9jYXRpb24gc2V0QXJndW1lbnQ6JnZhbHVlIGF0SW5kZXg6aV07CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIC8vIGJvb2wKICAgICAgICAg
Y2FzZSAnQic6IHsKLSAgICAgICAgICAgIGJvb2wgdmFsdWUgPSBbZGVjb2RlT2JqZWN0RnJvbU9i
amVjdFN0cmVhbShkZWNvZGVyLCBbTlNTZXQgc2V0V2l0aE9iamVjdDpbTlNOdW1iZXIgY2xhc3Nd
XSkgYm9vbFZhbHVlXTsKKyAgICAgICAgICAgIGJvb2wgdmFsdWUgPSBbZGVjb2RlT2JqZWN0RnJv
bU9iamVjdFN0cmVhbShkZWNvZGVyLCB7IFtOU051bWJlciBjbGFzc10gfSkgYm9vbFZhbHVlXTsK
ICAgICAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmldOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBsb25nCiAgICAgICAg
IGNhc2UgJ3EnOiB7Ci0gICAgICAgICAgICBsb25nIHZhbHVlID0gW2RlY29kZU9iamVjdEZyb21P
YmplY3RTdHJlYW0oZGVjb2RlciwgW05TU2V0IHNldFdpdGhPYmplY3Q6W05TTnVtYmVyIGNsYXNz
XV0pIGxvbmdWYWx1ZV07CisgICAgICAgICAgICBsb25nIHZhbHVlID0gW2RlY29kZU9iamVjdEZy
b21PYmplY3RTdHJlYW0oZGVjb2RlciwgeyBbTlNOdW1iZXIgY2xhc3NdIH0pIGxvbmdWYWx1ZV07
CiAgICAgICAgICAgICBbaW52b2NhdGlvbiBzZXRBcmd1bWVudDomdmFsdWUgYXRJbmRleDppXTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgLy8gdW5zaWduZWQgbG9u
ZwogICAgICAgICBjYXNlICdRJzogewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9
IFtkZWNvZGVPYmplY3RGcm9tT2JqZWN0U3RyZWFtKGRlY29kZXIsIFtOU1NldCBzZXRXaXRoT2Jq
ZWN0OltOU051bWJlciBjbGFzc11dKSB1bnNpZ25lZExvbmdWYWx1ZV07CisgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIHZhbHVlID0gW2RlY29kZU9iamVjdEZyb21PYmplY3RTdHJlYW0oZGVjb2Rl
ciwgeyBbTlNOdW1iZXIgY2xhc3NdIH0pIHVuc2lnbmVkTG9uZ1ZhbHVlXTsKICAgICAgICAgICAg
IFtpbnZvY2F0aW9uIHNldEFyZ3VtZW50OiZ2YWx1ZSBhdEluZGV4OmldOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAvLyBPYmplY3RpdmUtQyBv
YmplY3QKICAgICAgICAgY2FzZSAnQCc6IHsKLSAgICAgICAgICAgIE5TU2V0ICphbGxvd2VkQ2xh
c3NlcyA9IGFsbG93ZWRBcmd1bWVudENsYXNzZXNbaSAtIDJdLmdldCgpOworICAgICAgICAgICAg
Y29uc3QgYXV0byYgYWxsb3dlZENsYXNzZXMgPSBhbGxvd2VkQXJndW1lbnRDbGFzc2VzW2kgLSAy
XTsKIAogICAgICAgICAgICAgaWQgdmFsdWUgPSBkZWNvZGVPYmplY3RGcm9tT2JqZWN0U3RyZWFt
KGRlY29kZXIsIGFsbG93ZWRDbGFzc2VzKTsKICAgICAgICAgICAgIFtpbnZvY2F0aW9uIHNldEFy
Z3VtZW50OiZ2YWx1ZSBhdEluZGV4OmldOwpAQCAtNjA4LDcgKzYwOCw3IEBAIHN0YXRpYyBpZCBk
ZWNvZGVPYmplY3QoV0tSZW1vdGVPYmplY3REZWNvZGVyICpkZWNvZGVyKQogICAgIHJldHVybiBb
cmVzdWx0IGF1dG9yZWxlYXNlXTsKIH0KIAotc3RhdGljIGlkIGRlY29kZU9iamVjdChXS1JlbW90
ZU9iamVjdERlY29kZXIgKmRlY29kZXIsIGNvbnN0IEFQSTo6RGljdGlvbmFyeSogZGljdGlvbmFy
eSwgTlNTZXQgKmFsbG93ZWRDbGFzc2VzKQorc3RhdGljIGlkIGRlY29kZU9iamVjdChXS1JlbW90
ZU9iamVjdERlY29kZXIgKmRlY29kZXIsIGNvbnN0IEFQSTo6RGljdGlvbmFyeSogZGljdGlvbmFy
eSwgY29uc3QgSGFzaFNldDxDbGFzcz4mIGFsbG93ZWRDbGFzc2VzKQogewogICAgIGlmICghZGlj
dGlvbmFyeSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTYxNiwxMCArNjE2LDEwIEBAIHN0YXRp
YyBpZCBkZWNvZGVPYmplY3QoV0tSZW1vdGVPYmplY3REZWNvZGVyICpkZWNvZGVyLCBjb25zdCBB
UEk6OkRpY3Rpb25hcnkqIGRpCiAgICAgVGVtcG9yYXJ5Q2hhbmdlPGNvbnN0IEFQSTo6RGljdGlv
bmFyeSo+IGRpY3Rpb25hcnlDaGFuZ2UoZGVjb2Rlci0+X2N1cnJlbnREaWN0aW9uYXJ5LCBkaWN0
aW9uYXJ5KTsKIAogICAgIC8vIElmIG5vIGFsbG93ZWQgY2xhc3NlcyB3ZXJlIGxpc3RlZCwganVz
dCB1c2UgdGhlIGN1cnJlbnRseSBhbGxvd2VkIGNsYXNzZXMuCi0gICAgaWYgKCFhbGxvd2VkQ2xh
c3NlcykKKyAgICBpZiAoYWxsb3dlZENsYXNzZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZGVjb2RlT2JqZWN0KGRlY29kZXIpOwogCi0gICAgVGVtcG9yYXJ5Q2hhbmdlPE5TU2V0ICo+IGFs
bG93ZWRDbGFzc2VzQ2hhbmdlKGRlY29kZXItPl9hbGxvd2VkQ2xhc3NlcywgYWxsb3dlZENsYXNz
ZXMpOworICAgIFRlbXBvcmFyeUNoYW5nZTxjb25zdCBIYXNoU2V0PENsYXNzPio+IGFsbG93ZWRD
bGFzc2VzQ2hhbmdlKGRlY29kZXItPl9hbGxvd2VkQ2xhc3NlcywgJmFsbG93ZWRDbGFzc2VzKTsK
ICAgICByZXR1cm4gZGVjb2RlT2JqZWN0KGRlY29kZXIpOwogfQogCkBAIC02OTUsMTIgKzY5NSwy
MyBAQCBzdGF0aWMgaWQgZGVjb2RlT2JqZWN0KFdLUmVtb3RlT2JqZWN0RGVjb2RlciAqZGVjb2Rl
ciwgY29uc3QgQVBJOjpEaWN0aW9uYXJ5KiBkaQogCiAtIChpZClkZWNvZGVPYmplY3RPZkNsYXNz
ZXM6KE5TU2V0ICopY2xhc3NlcyBmb3JLZXk6KE5TU3RyaW5nICopa2V5CiB7Ci0gICAgcmV0dXJu
IGRlY29kZU9iamVjdChzZWxmLCBfY3VycmVudERpY3Rpb25hcnktPmdldDxBUEk6OkRpY3Rpb25h
cnk+KGVzY2FwZUtleShrZXkpKSwgY2xhc3Nlcyk7CisgICAgSGFzaFNldDxDbGFzcz4gYWxsb3dl
ZENsYXNzZXM7CisgICAgZm9yIChDbGFzcyBhbGxvd2VkQ2xhc3MgaW4gY2xhc3NlcykKKyAgICAg
ICAgYWxsb3dlZENsYXNzZXMuYWRkKGFsbG93ZWRDbGFzcyk7CisKKyAgICByZXR1cm4gZGVjb2Rl
T2JqZWN0KHNlbGYsIF9jdXJyZW50RGljdGlvbmFyeS0+Z2V0PEFQSTo6RGljdGlvbmFyeT4oZXNj
YXBlS2V5KGtleSkpLCBhbGxvd2VkQ2xhc3Nlcyk7CiB9CiAKIC0gKE5TU2V0ICopYWxsb3dlZENs
YXNzZXMKIHsKLSAgICByZXR1cm4gX2FsbG93ZWRDbGFzc2VzOworICAgIGlmICghX2FsbG93ZWRD
bGFzc2VzKQorICAgICAgICByZXR1cm4gW05TU2V0IHNldF07CisKKyAgICBhdXRvIHJlc3VsdCA9
IGFkb3B0TlMoW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRdKTsKKyAgICBmb3IgKENsYXNzIGFs
bG93ZWRDbGFzcyA6ICpfYWxsb3dlZENsYXNzZXMpCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0
OmFsbG93ZWRDbGFzc107CisKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CiB9CiAK
IEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29jb2EvX1dLUmVt
b3RlT2JqZWN0SW50ZXJmYWNlLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9f
V0tSZW1vdGVPYmplY3RJbnRlcmZhY2UubW0KaW5kZXggODM1ZjFmZDEzNThjZmQyOTIwZDIwNDRl
OTI1ZTBmNGRhZTA3NzMxMi4uZDdjOTk3ZjE5Mzg5ZmMxZGM2YjlkMTJkZGY5Y2JlYmQ1ZGQ5MzJl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tSZW1vdGVP
YmplY3RJbnRlcmZhY2UubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9f
V0tSZW1vdGVPYmplY3RJbnRlcmZhY2UubW0KQEAgLTI0LDE0ICsyNCwxNSBAQAogICovCiAKICNp
bXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlLmgiCisj
aW1wb3J0ICJfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2VJbnRlcm5hbC5oIgogCiAjaWYgV0tfQVBJ
X0VOQUJMRUQKIAogI2ltcG9ydCA8b2JqYy9ydW50aW1lLmg+CiAjaW1wb3J0IDx3dGYvSGFzaE1h
cC5oPgotI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgorI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvVmVjdG9yLmg+CiAK
IGV4dGVybiAiQyIKIGNvbnN0IGNoYXIgKl9wcm90b2NvbF9nZXRNZXRob2RUeXBlRW5jb2Rpbmco
UHJvdG9jb2wgKnAsIFNFTCBzZWwsIEJPT0wgaXNSZXF1aXJlZE1ldGhvZCwgQk9PTCBpc0luc3Rh
bmNlTWV0aG9kKTsKQEAgLTQwLDg4ICs0MSwxMTYgQEAgY29uc3QgY2hhciAqX3Byb3RvY29sX2dl
dE1ldGhvZFR5cGVFbmNvZGluZyhQcm90b2NvbCAqcCwgU0VMIHNlbCwgQk9PTCBpc1JlcXVpcmUK
IC0gKENsYXNzKV9jbGFzc0Zvck9iamVjdEF0QXJndW1lbnRJbmRleDooTlNJbnRlZ2VyKWlkeDsK
IEBlbmQKIAorc3RydWN0IE1ldGhvZEluZm8geworICAgIFZlY3RvcjxIYXNoU2V0PENsYXNzPj4g
YWxsb3dlZEFyZ3VtZW50Q2xhc3NlczsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYXZl
IGFsbG93ZWQgcmVwbHkgYXJndW1lbnQgY2xhc3NlcyB0b28uCit9OworCiBAaW1wbGVtZW50YXRp
b24gX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlIHsKLSAgICBIYXNoTWFwPFNFTCwgVmVjdG9yPFJl
dGFpblB0cjxOU1NldD4+PiBfYWxsb3dlZEFyZ3VtZW50Q2xhc3NlczsKICAgICBSZXRhaW5QdHI8
TlNTdHJpbmc+IF9pZGVudGlmaWVyOworCisgICAgSGFzaE1hcDxTRUwsIE1ldGhvZEluZm8+IF9t
ZXRob2RzOwogfQogCiBzdGF0aWMgYm9vbCBpc0NvbnRhaW5lckNsYXNzKENsYXNzIG9iamVjdENs
YXNzKQogewogICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBjbGFzc2VzIGhlcmUgaWYgbmVlZGVkLgot
ICAgIHN0YXRpYyBOU1NldCAqY29udGFpbmVyQ2xhc3NlcyA9IFtbTlNTZXQgYWxsb2NdIGluaXRX
aXRoT2JqZWN0czpbTlNBcnJheSBjbGFzc10sIFtOU0RpY3Rpb25hcnkgY2xhc3NdLCBuaWxdOwor
ICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxDbGFzcz4+IGNvbnRhaW5lckNs
YXNzZXM7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0
Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBjb250YWluZXJDbGFzc2VzLmNvbnN0cnVj
dChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Q2xhc3M+IHsgW05TQXJyYXkgY2xhc3NdLCBbTlNEaWN0
aW9uYXJ5IGNsYXNzXSB9KTsKKyAgICB9KTsKIAotICAgIHJldHVybiBbY29udGFpbmVyQ2xhc3Nl
cyBjb250YWluc09iamVjdDpvYmplY3RDbGFzc107CisgICAgcmV0dXJuIGNvbnRhaW5lckNsYXNz
ZXMtPmNvbnRhaW5zKG9iamVjdENsYXNzKTsKIH0KIAotc3RhdGljIE5TU2V0ICpwcm9wZXJ0eUxp
c3RDbGFzc2VzKCkKK3N0YXRpYyBIYXNoU2V0PENsYXNzPiYgcHJvcGVydHlMaXN0Q2xhc3Nlcygp
CiB7Ci0gICAgLy8gRklYTUU6IEFkZCBtb3JlIHByb3BlcnR5IGxpc3QgY2xhc3NlcyBpZiBuZWVk
ZWQuCi0gICAgc3RhdGljIE5TU2V0ICpwcm9wZXJ0eUxpc3RDbGFzc2VzID0gW1tOU1NldCBhbGxv
Y10gaW5pdFdpdGhPYmplY3RzOltOU0FycmF5IGNsYXNzXSwgW05TRGljdGlvbmFyeSBjbGFzc10s
IFtOU051bWJlciBjbGFzc10sIFtOU1N0cmluZyBjbGFzc10sIG5pbF07CisgICAgc3RhdGljIExh
enlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PENsYXNzPj4gcHJvcGVydHlMaXN0Q2xhc3NlczsKKyAg
ICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZv
bmNlVG9rZW4sIF57CisgICAgICAgIHByb3BlcnR5TGlzdENsYXNzZXMuY29uc3RydWN0KHN0ZDo6
aW5pdGlhbGl6ZXJfbGlzdDxDbGFzcz4geyBbTlNBcnJheSBjbGFzc10sIFtOU0RpY3Rpb25hcnkg
Y2xhc3NdLCBbTlNOdW1iZXIgY2xhc3NdLCBbTlNTdHJpbmcgY2xhc3NdIH0pOworICAgIH0pOwog
CiAgICAgcmV0dXJuIHByb3BlcnR5TGlzdENsYXNzZXM7CiB9CiAKLXN0YXRpYyBWZWN0b3I8UmV0
YWluUHRyPE5TU2V0Pj4gYWxsb3dlZEFyZ3VtZW50Q2xhc3Nlc0Zvck1ldGhvZChOU01ldGhvZFNp
Z25hdHVyZSAqbWV0aG9kU2lnbmF0dXJlKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU1ldGhvZChN
ZXRob2RJbmZvJiBtZXRob2RJbmZvLCBOU01ldGhvZFNpZ25hdHVyZSAqbWV0aG9kU2lnbmF0dXJl
LCBib29sIGZvclJlcGx5QmxvY2spCiB7Ci0gICAgVmVjdG9yPFJldGFpblB0cjxOU1NldD4+IHJl
c3VsdDsKKyAgICBWZWN0b3I8SGFzaFNldDxDbGFzcz4+IGFsbG93ZWRDbGFzc2VzOwogCi0gICAg
TlNTZXQgKmVtcHR5U2V0ID0gW05TU2V0IHNldF07CisgICAgTlNVSW50ZWdlciBmaXJzdEFyZ3Vt
ZW50ID0gZm9yUmVwbHlCbG9jayA/IDEgOiAyOworICAgIE5TVUludGVnZXIgYXJndW1lbnRDb3Vu
dCA9IG1ldGhvZFNpZ25hdHVyZS5udW1iZXJPZkFyZ3VtZW50czsKIAotICAgIC8vIFdlIGlnbm9y
ZSBzZWxmIGFuZCBfY21kLgotICAgIE5TVUludGVnZXIgYXJndW1lbnRDb3VudCA9IG1ldGhvZFNp
Z25hdHVyZS5udW1iZXJPZkFyZ3VtZW50cyAtIDI7CisgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSBm
aXJzdEFyZ3VtZW50OyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0IGNo
YXIqIGFyZ3VtZW50VHlwZSA9IFttZXRob2RTaWduYXR1cmUgZ2V0QXJndW1lbnRUeXBlQXRJbmRl
eDppXTsKIAotICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFyZ3VtZW50Q291bnQp
OwotCi0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IGNoYXIqIHR5cGUgPSBbbWV0aG9kU2lnbmF0dXJlIGdldEFyZ3VtZW50
VHlwZUF0SW5kZXg6aSArIDJdOwotCi0gICAgICAgIGlmICgqdHlwZSAhPSAnQCcpIHsKKyAgICAg
ICAgaWYgKCphcmd1bWVudFR5cGUgIT0gJ0AnKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIGEg
bm9uLW9iamVjdCB0eXBlOyB3ZSB3b24ndCBhbGxvdyBhbnkgY2xhc3NlcyB0byBiZSBkZWNvZGVk
IGZvciBpdC4KLSAgICAgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoZW1wdHlTZXQpOwor
ICAgICAgICAgICAgYWxsb3dlZENsYXNzZXMudW5jaGVja2VkQXBwZW5kKHsgfSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIENsYXNzIG9iamVjdENsYXNzID0g
W21ldGhvZFNpZ25hdHVyZSBfY2xhc3NGb3JPYmplY3RBdEFyZ3VtZW50SW5kZXg6aSArIDJdOwor
ICAgICAgICBDbGFzcyBvYmplY3RDbGFzcyA9IFttZXRob2RTaWduYXR1cmUgX2NsYXNzRm9yT2Jq
ZWN0QXRBcmd1bWVudEluZGV4OmldOwogICAgICAgICBpZiAoIW9iamVjdENsYXNzKSB7Ci0gICAg
ICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKGVtcHR5U2V0KTsKKyAgICAgICAgICAgIGFs
bG93ZWRDbGFzc2VzLmFwcGVuZCh7IH0pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoaXNDb250YWluZXJDbGFzcyhvYmplY3RDbGFzcykpIHsKICAgICAg
ICAgICAgIC8vIEZvciBjb250YWluZXIgY2xhc3Nlcywgd2UgYWxsb3cgYWxsIHNpbXBsZSBwcm9w
ZXJ0eSBsaXN0IGNsYXNzZXMuCi0gICAgICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHBy
b3BlcnR5TGlzdENsYXNzZXMoKSk7CisgICAgICAgICAgICBhbGxvd2VkQ2xhc3Nlcy5hcHBlbmQo
cHJvcGVydHlMaXN0Q2xhc3NlcygpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgcmVzdWx0LnVuY2hlY2tlZEFwcGVuZChbTlNTZXQgc2V0V2l0aE9iamVjdDpv
YmplY3RDbGFzc10pOworICAgICAgICBhbGxvd2VkQ2xhc3Nlcy5hcHBlbmQoeyBvYmplY3RDbGFz
cyB9KTsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIG1ldGhvZEluZm8uYWxsb3dl
ZEFyZ3VtZW50Q2xhc3NlcyA9IFdURjo6bW92ZShhbGxvd2VkQ2xhc3Nlcyk7CiB9CiAKLXN0YXRp
YyB2b2lkIGluaXRpYWxpemVBbGxvd2VkQXJndW1lbnRDbGFzc2VzKF9XS1JlbW90ZU9iamVjdElu
dGVyZmFjZSAqaW50ZXJmYWNlLCBib29sIHJlcXVpcmVkTWV0aG9kcykKK3N0YXRpYyB2b2lkIGlu
aXRpYWxpemVNZXRob2RzKF9XS1JlbW90ZU9iamVjdEludGVyZmFjZSAqaW50ZXJmYWNlLCBQcm90
b2NvbCAqcHJvdG9jb2wsIGJvb2wgcmVxdWlyZWRNZXRob2RzKQogewogICAgIHVuc2lnbmVkIG1l
dGhvZENvdW50OwotICAgIHN0cnVjdCBvYmpjX21ldGhvZF9kZXNjcmlwdGlvbiAqbWV0aG9kcyA9
IHByb3RvY29sX2NvcHlNZXRob2REZXNjcmlwdGlvbkxpc3QoaW50ZXJmYWNlLT5fcHJvdG9jb2ws
IHJlcXVpcmVkTWV0aG9kcywgdHJ1ZSwgJm1ldGhvZENvdW50KTsKKyAgICBzdHJ1Y3Qgb2JqY19t
ZXRob2RfZGVzY3JpcHRpb24gKm1ldGhvZHMgPSBwcm90b2NvbF9jb3B5TWV0aG9kRGVzY3JpcHRp
b25MaXN0KHByb3RvY29sLCByZXF1aXJlZE1ldGhvZHMsIHRydWUsICZtZXRob2RDb3VudCk7CiAK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWV0aG9kQ291bnQ7ICsraSkgewogICAgICAg
ICBTRUwgc2VsZWN0b3IgPSBtZXRob2RzW2ldLm5hbWU7CiAKLSAgICAgICAgY29uc3QgY2hhciog
dHlwZXMgPSBfcHJvdG9jb2xfZ2V0TWV0aG9kVHlwZUVuY29kaW5nKGludGVyZmFjZS0+X3Byb3Rv
Y29sLCBzZWxlY3RvciwgcmVxdWlyZWRNZXRob2RzLCB0cnVlKTsKLSAgICAgICAgaWYgKCF0eXBl
cykKKyAgICAgICAgQVNTRVJUKCFpbnRlcmZhY2UtPl9tZXRob2RzLmNvbnRhaW5zKHNlbGVjdG9y
KSk7CisgICAgICAgIE1ldGhvZEluZm8mIG1ldGhvZEluZm8gPSBpbnRlcmZhY2UtPl9tZXRob2Rz
LmFkZChzZWxlY3RvciwgTWV0aG9kSW5mbygpKS5pdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAg
Y29uc3QgY2hhciogbWV0aG9kVHlwZUVuY29kaW5nID0gX3Byb3RvY29sX2dldE1ldGhvZFR5cGVF
bmNvZGluZyhwcm90b2NvbCwgc2VsZWN0b3IsIHJlcXVpcmVkTWV0aG9kcywgdHJ1ZSk7CisgICAg
ICAgIGlmICghbWV0aG9kVHlwZUVuY29kaW5nKQogICAgICAgICAgICAgW05TRXhjZXB0aW9uIHJh
aXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkNvdWxkIG5vdCBmaW5kIG1l
dGhvZCB0eXBlIGVuY29kaW5nIGZvciBtZXRob2QgXCIlc1wiIiwgc2VsX2dldE5hbWUoc2VsZWN0
b3IpXTsKIAotICAgICAgICBOU01ldGhvZFNpZ25hdHVyZSAqbWV0aG9kU2lnbmF0dXJlID0gW05T
TWV0aG9kU2lnbmF0dXJlIHNpZ25hdHVyZVdpdGhPYmpDVHlwZXM6dHlwZXNdOwotICAgICAgICBp
bnRlcmZhY2UtPl9hbGxvd2VkQXJndW1lbnRDbGFzc2VzLnNldChzZWxlY3RvciwgYWxsb3dlZEFy
Z3VtZW50Q2xhc3Nlc0Zvck1ldGhvZChtZXRob2RTaWduYXR1cmUpKTsKKyAgICAgICAgTlNNZXRo
b2RTaWduYXR1cmUgKm1ldGhvZFNpZ25hdHVyZSA9IFtOU01ldGhvZFNpZ25hdHVyZSBzaWduYXR1
cmVXaXRoT2JqQ1R5cGVzOm1ldGhvZFR5cGVFbmNvZGluZ107CisKKyAgICAgICAgaW5pdGlhbGl6
ZU1ldGhvZChtZXRob2RJbmZvLCBtZXRob2RTaWduYXR1cmUsIGZhbHNlKTsKICAgICB9CiAKICAg
ICBmcmVlKG1ldGhvZHMpOwogfQogCi1zdGF0aWMgdm9pZCBpbml0aWFsaXplQWxsb3dlZEFyZ3Vt
ZW50Q2xhc3NlcyhfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2UgKmludGVyZmFjZSkKK3N0YXRpYyB2
b2lkIGluaXRpYWxpemVNZXRob2RzKF9XS1JlbW90ZU9iamVjdEludGVyZmFjZSAqaW50ZXJmYWNl
LCBQcm90b2NvbCAqcHJvdG9jb2wpCiB7Ci0gICAgaW5pdGlhbGl6ZUFsbG93ZWRBcmd1bWVudENs
YXNzZXMoaW50ZXJmYWNlLCB0cnVlKTsKLSAgICBpbml0aWFsaXplQWxsb3dlZEFyZ3VtZW50Q2xh
c3NlcyhpbnRlcmZhY2UsIGZhbHNlKTsKKyAgICB1bnNpZ25lZCBzdXBlclByb3RvY29sQ291bnQ7
CisgICAgUHJvdG9jb2wqKiBzdXBlclByb3RvY29scyA9IHByb3RvY29sX2NvcHlQcm90b2NvbExp
c3QoaW50ZXJmYWNlLT5fcHJvdG9jb2wsICZzdXBlclByb3RvY29sQ291bnQpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN1cGVyUHJvdG9jb2xDb3VudDsgKytpKSB7CisgICAgICAg
IFByb3RvY29sKiBzdXBlclByb3RvY29sID0gc3VwZXJQcm90b2NvbHNbaV07CisKKyAgICAgICAg
aWYgKHN1cGVyUHJvdG9jb2wgPT0gQHByb3RvY29sKE5TT2JqZWN0KSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGluaXRpYWxpemVNZXRob2RzKGludGVyZmFjZSwgc3VwZXJQcm90
b2NvbCk7CisgICAgfQorCisgICAgZnJlZShzdXBlclByb3RvY29scyk7CisKKyAgICBpbml0aWFs
aXplTWV0aG9kcyhpbnRlcmZhY2UsIHByb3RvY29sLCB0cnVlKTsKKyAgICBpbml0aWFsaXplTWV0
aG9kcyhpbnRlcmZhY2UsIHByb3RvY29sLCBmYWxzZSk7CiB9CiAKIC0gKGlkKWluaXRXaXRoUHJv
dG9jb2w6KFByb3RvY29sICopcHJvdG9jb2wgaWRlbnRpZmllcjooTlNTdHJpbmcgKilpZGVudGlm
aWVyCkBAIC0xMzIsNyArMTYxLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFsbG93ZWRBcmd1
bWVudENsYXNzZXMoX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlICppbnRlcmZhY2UKICAgICBfcHJv
dG9jb2wgPSBwcm90b2NvbDsKICAgICBfaWRlbnRpZmllciA9IGFkb3B0TlMoW2lkZW50aWZpZXIg
Y29weV0pOwogCi0gICAgaW5pdGlhbGl6ZUFsbG93ZWRBcmd1bWVudENsYXNzZXMoc2VsZik7Cisg
ICAgaW5pdGlhbGl6ZU1ldGhvZHMoc2VsZiwgX3Byb3RvY29sKTsKIAogICAgIHJldHVybiBzZWxm
OwogfQpAQCAtMTUyLDI2ICsxODEsMzggQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFsbG93ZWRB
cmd1bWVudENsYXNzZXMoX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlICppbnRlcmZhY2UKICAgICBy
ZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8JUA6ICVwOyBwcm90b2NvbCA9IFwi
JUBcIjsgaWRlbnRpZmllciA9IFwiJUBcIj4iLCBOU1N0cmluZ0Zyb21DbGFzcyhzZWxmLmNsYXNz
KSwgc2VsZiwgX2lkZW50aWZpZXIuZ2V0KCksIE5TU3RyaW5nRnJvbVByb3RvY29sKF9wcm90b2Nv
bCldOwogfQogCi1zdGF0aWMgUmV0YWluUHRyPE5TU2V0PiYgY2xhc3Nlc0ZvclNlbGVjdG9yQXJn
dW1lbnQoX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlICppbnRlcmZhY2UsIFNFTCBzZWxlY3Rvciwg
TlNVSW50ZWdlciBhcmd1bWVudEluZGV4KQorc3RhdGljIEhhc2hTZXQ8Q2xhc3M+JiBjbGFzc2Vz
Rm9yU2VsZWN0b3JBcmd1bWVudChfV0tSZW1vdGVPYmplY3RJbnRlcmZhY2UgKmludGVyZmFjZSwg
U0VMIHNlbGVjdG9yLCBOU1VJbnRlZ2VyIGFyZ3VtZW50SW5kZXgpCiB7Ci0gICAgYXV0byBpdCA9
IGludGVyZmFjZS0+X2FsbG93ZWRBcmd1bWVudENsYXNzZXMuZmluZChzZWxlY3Rvcik7Ci0gICAg
aWYgKGl0ID09IGludGVyZmFjZS0+X2FsbG93ZWRBcmd1bWVudENsYXNzZXMuZW5kKCkpCisgICAg
YXV0byBpdCA9IGludGVyZmFjZS0+X21ldGhvZHMuZmluZChzZWxlY3Rvcik7CisgICAgaWYgKGl0
ID09IGludGVyZmFjZS0+X21ldGhvZHMuZW5kKCkpCiAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlz
ZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJJbnRlcmZhY2UgZG9lcyBub3Qg
Y29udGFpbiBzZWxlY3RvciBcIiVzXCIiLCBzZWxfZ2V0TmFtZShzZWxlY3RvcildOwogCi0gICAg
aWYgKGFyZ3VtZW50SW5kZXggPj0gaXQtPnZhbHVlLnNpemUoKSkKKyAgICBNZXRob2RJbmZvJiBt
ZXRob2RJbmZvID0gaXQtPnZhbHVlOworICAgIGF1dG8mIGFsbG93ZWRBcmd1bWVudENsYXNzZXMg
PSBtZXRob2RJbmZvLmFsbG93ZWRBcmd1bWVudENsYXNzZXM7CisKKyAgICBpZiAoYXJndW1lbnRJ
bmRleCA+PSBhbGxvd2VkQXJndW1lbnRDbGFzc2VzLnNpemUoKSkKICAgICAgICAgW05TRXhjZXB0
aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkFyZ3VtZW50IGlu
ZGV4ICVsZCBpcyBvdXQgb2YgcmFuZ2UgZm9yIHNlbGVjdG9yIFwiJXNcIiIsICh1bnNpZ25lZCBs
b25nKWFyZ3VtZW50SW5kZXgsIHNlbF9nZXROYW1lKHNlbGVjdG9yKV07CiAKLSAgICByZXR1cm4g
aXQtPnZhbHVlW2FyZ3VtZW50SW5kZXhdOworICAgIHJldHVybiBhbGxvd2VkQXJndW1lbnRDbGFz
c2VzW2FyZ3VtZW50SW5kZXhdOwogfQogCiAtIChOU1NldCAqKWNsYXNzZXNGb3JTZWxlY3Rvcjoo
U0VMKXNlbGVjdG9yIGFyZ3VtZW50SW5kZXg6KE5TVUludGVnZXIpYXJndW1lbnRJbmRleAogewot
ICAgIHJldHVybiBbW2NsYXNzZXNGb3JTZWxlY3RvckFyZ3VtZW50KHNlbGYsIHNlbGVjdG9yLCBh
cmd1bWVudEluZGV4KS5nZXQoKSByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGFkb3B0TlMoW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRdKTsKKworICAgIGZvciAoYXV0
byBhbGxvd2VkQ2xhc3MgOiBjbGFzc2VzRm9yU2VsZWN0b3JBcmd1bWVudChzZWxmLCBzZWxlY3Rv
ciwgYXJndW1lbnRJbmRleCkpCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OmFsbG93ZWRDbGFz
c107CisKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKHZvaWQpc2V0
Q2xhc3NlczooTlNTZXQgKiljbGFzc2VzIGZvclNlbGVjdG9yOihTRUwpc2VsZWN0b3IgYXJndW1l
bnRJbmRleDooTlNVSW50ZWdlcilhcmd1bWVudEluZGV4CiB7Ci0gICAgY2xhc3Nlc0ZvclNlbGVj
dG9yQXJndW1lbnQoc2VsZiwgc2VsZWN0b3IsIGFyZ3VtZW50SW5kZXgpID0gYWRvcHROUyhbY2xh
c3NlcyBjb3B5XSk7CisgICAgSGFzaFNldDxDbGFzcz4gYWxsb3dlZENsYXNzZXM7CisgICAgZm9y
IChDbGFzcyBhbGxvd2VkQ2xhc3MgaW4gY2xhc3NlcykKKyAgICAgICAgYWxsb3dlZENsYXNzZXMu
YWRkKGFsbG93ZWRDbGFzcyk7CisKKyAgICBjbGFzc2VzRm9yU2VsZWN0b3JBcmd1bWVudChzZWxm
LCBzZWxlY3RvciwgYXJndW1lbnRJbmRleCkgPSBXVEY6Om1vdmUoYWxsb3dlZENsYXNzZXMpOwog
fQogCiBzdGF0aWMgY29uc3QgY2hhciogbWV0aG9kQXJndW1lbnRUeXBlRW5jb2RpbmdGb3JTZWxl
Y3RvcihQcm90b2NvbCAqcHJvdG9jb2wsIFNFTCBzZWxlY3RvcikKQEAgLTE5OCwxMiArMjM5LDEy
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBtZXRob2RBcmd1bWVudFR5cGVFbmNvZGluZ0ZvclNlbGVj
dG9yKFByb3RvY29sICpwcm90b2NvbCwgU0VMCiAgICAgcmV0dXJuIFtOU01ldGhvZFNpZ25hdHVy
ZSBzaWduYXR1cmVXaXRoT2JqQ1R5cGVzOnR5cGVzXTsKIH0KIAotLSAoY29uc3QgVmVjdG9yPFJl
dGFpblB0cjxOU1NldD4+JilfYWxsb3dlZEFyZ3VtZW50Q2xhc3Nlc0ZvclNlbGVjdG9yOihTRUwp
c2VsZWN0b3IKKy0gKGNvbnN0IFZlY3RvcjxIYXNoU2V0PENsYXNzPj4mKV9hbGxvd2VkQXJndW1l
bnRDbGFzc2VzRm9yU2VsZWN0b3I6KFNFTClzZWxlY3RvcgogewotICAgIGF1dG8gaXQgPSBfYWxs
b3dlZEFyZ3VtZW50Q2xhc3Nlcy5maW5kKHNlbGVjdG9yKTsKLSAgICBBU1NFUlQoaXQgIT0gX2Fs
bG93ZWRBcmd1bWVudENsYXNzZXMuZW5kKCkpOworICAgIGF1dG8gaXQgPSBfbWV0aG9kcy5maW5k
KHNlbGVjdG9yKTsKKyAgICBBU1NFUlQoaXQgIT0gX21ldGhvZHMuZW5kKCkpOwogCi0gICAgcmV0
dXJuIGl0LT52YWx1ZTsKKyAgICByZXR1cm4gaXQtPnZhbHVlLmFsbG93ZWRBcmd1bWVudENsYXNz
ZXM7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQ29j
b2EvX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9BUEkvQ29jb2EvX1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlSW50ZXJuYWwuaAppbmRleCAz
NjJlY2JiMGRiZjAwMmExNzEwNTg0NDU1YzkzMThmNWEwZmI5MTVjLi5kZmYxYWJiZTNiY2JmMmYy
OGVhNzEwMjY2YjQzNmVmZTM4YTFjNjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQVBJL0NvY29hL19XS1JlbW90ZU9iamVjdEludGVyZmFjZUludGVybmFsLmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9Db2NvYS9fV0tSZW1vdGVPYmplY3RJbnRlcmZhY2VJbnRl
cm5hbC5oCkBAIC0yOCwxMiArMjgsMTQgQEAKICNpZiBXS19BUElfRU5BQkxFRAogCiAjaW1wb3J0
IDx3dGYvRm9yd2FyZC5oPgorI2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIAogQGludGVyZmFjZSBfV0tSZW1v
dGVPYmplY3RJbnRlcmZhY2UgKCkKIAogLSAoTlNNZXRob2RTaWduYXR1cmUgKilfbWV0aG9kU2ln
bmF0dXJlRm9yU2VsZWN0b3I6KFNFTClzZWxlY3RvcjsKLS0gKGNvbnN0IFZlY3RvcjxSZXRhaW5Q
dHI8TlNTZXQ+PiYpX2FsbG93ZWRBcmd1bWVudENsYXNzZXNGb3JTZWxlY3RvcjooU0VMKXNlbGVj
dG9yOworLSAoY29uc3QgVmVjdG9yPEhhc2hTZXQ8Q2xhc3M+PiYpX2FsbG93ZWRBcmd1bWVudENs
YXNzZXNGb3JTZWxlY3RvcjooU0VMKXNlbGVjdG9yOwogCiBAZW5kCiAK
</data>
<flag name="review"
          id="290154"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>