From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16410 invoked by alias); 18 Jun 2012 07:30:34 -0000 Received: (qmail 16400 invoked by uid 22791); 18 Jun 2012 07:30:32 -0000 X-SWARE-Spam-Status: No, hits=-5.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,TW_BJ,TW_RG,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-qc0-f169.google.com (HELO mail-qc0-f169.google.com) (209.85.216.169) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 18 Jun 2012 07:30:16 +0000 Received: by qcsd16 with SMTP id d16so3164715qcs.0 for ; Mon, 18 Jun 2012 00:30:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:x-system-of-record:x-gm-message-state; bh=E5LiTpZQnTNoWOSj1xV7q+SnZm0ZEfWsYUYP/6fT+Ek=; b=Jgofni+zslkdNAE6PCe+MJsjtrv9OCTBGGDdK4u7da2ch06MoS/rf6WvdiBPwxazU5 gLDpUYk5osN5U3NP3wxdIn2wzpH0kthOSd+KpWQS6753KX4+oYWZsJDQMVXNFk5fYKkd 6F5XYZ0GXkUZofrl49tqrrFNBk9darhRc6Ag8k/C2FLjECXE4jqtueyqBGdOH08TJ8Wd IYzH6mKBtexBu2rwMrfJsdvU0KLAzsUTJGdwAGuBzyX1vvuX9EhG7bPeDsoQMAPj6G9v 33hX8wNdWMi5L+cL27EBwSGYM/yL6FZSI84E7nRnqIXlc96XdEyqbELvstufXNiTf1Yh xFWw== Received: by 10.224.176.70 with SMTP id bd6mr25675818qab.27.1340004615392; Mon, 18 Jun 2012 00:30:15 -0700 (PDT) MIME-Version: 1.0 Received: by 10.224.176.70 with SMTP id bd6mr25675796qab.27.1340004615231; Mon, 18 Jun 2012 00:30:15 -0700 (PDT) Received: by 10.224.126.67 with HTTP; Mon, 18 Jun 2012 00:30:15 -0700 (PDT) In-Reply-To: References: <87aa0in6ii.fsf@fleche.redhat.com> <871ulpem66.fsf@fleche.redhat.com> Date: Mon, 18 Jun 2012 07:30:00 -0000 Message-ID: Subject: Re: [RFC] Extend existing support for evaluating expressions using overloaded operators From: Siva Chandra To: Tom Tromey Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=20cf302ef79016979b04c2ba2348 X-System-Of-Record: true X-Gm-Message-State: ALoCoQnnfB7WVC+TkYW40qE8Y4IQQOKNDxjzSkl9wLGDcVXdMRq9ApEcxK9f8TSJT6Jt/CUSxTWrTlQDxQqhLlyHbXC3kTVEjqFdoeOjO/Dfzr8C9JkBjCjdsPysrK+1pgd3Js8Oepyw6Ka3m3KmxbpELT+RywNusw== X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-06/txt/msg00567.txt.bz2 --20cf302ef79016979b04c2ba2348 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 1745 Siva> I will stage the clean up and extension in multiple patches. Also, Siva> that way I will get to discuss in smaller pieces as to why the code is Siva> the way it is. I have submitted http://sourceware.org/ml/gdb-patches/2012-06/msg00245.html as the first cleanup patch. Attached now is a patch which extends the overloaded operator support. It contains a minor refactoring so that the overloaded operator support can be extended to cases where the first operand of a binary operation is a non-struct/non-union. Note that this patch does not yet extend the support into Python API. 2012-06-18 Siva Chandra Reddy Extend existing support for evaluating expressions using overloaded operators. * gdbtypes.c (is_compound_type): New function to test if a type is a struct or union. (type_can_have_methods): New function to check if a type can have methods defined on it. * gdbtypes.h (is_compound_type, type_can_have_methods): Declare. * valarith.c (value_user_defined_cpp_op): Make different calls to 'find_overload_match' based on the type of the first argument. (value_x_binop): Extend to handle binary operations which have either or both operands of a compound value. Pass operands as is to value_user_defined_op. (value_x_unop): Pass operand as is to value_user_defined_op. (binop_types_user_defined_p): Use is_compound_type to include unions. testsuite/ * gdb.cp/operator.cc: Add test cases to test overloaded binary operator evaluation. * gdb.cp/operator.exp: Add tests to test overloaded binary operator evaluation. Thanks, Siva Chandra --20cf302ef79016979b04c2ba2348 Content-Type: text/plain; charset=US-ASCII; name="oprovld_patch_v3.txt" Content-Disposition: attachment; filename="oprovld_patch_v3.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_h3l73owy0 Content-length: 10456 SW5kZXg6IGdkYnR5cGVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9nZGJ0eXBlcy5jLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjIzMApkaWZmIC11IC1wIC1yMS4yMzAgZ2RidHlwZXMu YwotLS0gZ2RidHlwZXMuYwkyMyBNYXkgMjAxMiAyMzo0NTowOSAtMDAwMAkx LjIzMAorKysgZ2RidHlwZXMuYwkxOCBKdW4gMjAxMiAwNjo1Njo0MiAtMDAw MApAQCAtMjAwNiw2ICsyMDA2LDQ4IEBAIGlzX3NjYWxhcl90eXBlIChzdHJ1 Y3QgdHlwZSAqdHlwZSkKICAgICB9CiB9CiAKKy8qIFJldHVybiB0cnVlIGlm IFRZUEUgaXMgYSBzdHJ1Y3Qgb3IgdW5pb24uICAqLworCitpbnQKK2lzX2Nv bXBvdW5kX3R5cGUgKHN0cnVjdCB0eXBlICp0eXBlKQoreworICBlbnVtIHR5 cGVfY29kZSB0eXBlX2NvZGU7CisKKyAgQ0hFQ0tfVFlQRURFRiAodHlwZSk7 CisKKyAgdHlwZV9jb2RlID0gVFlQRV9DT0RFICh0eXBlKTsKKyAgaWYgKHR5 cGVfY29kZSA9PSBUWVBFX0NPREVfU1RSVUNUIHx8IHR5cGVfY29kZSA9PSBU WVBFX0NPREVfVU5JT04pCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICBy ZXR1cm4gMDsKK30KKworLyogUmV0dXJuIHRydWUgaXMgVFlQRSBpcyBhIHR5 cGUgd2hpY2ggY2FuIGhhdmUgbWV0aG9kcyBkZWZpbmVkIG9uIGl0LgorICAg VGhhdCBpcywgaWYgVFlQRSBpcyBhIHN0cnVjdCBvciBhIHVuaW9uLCBvciBp cyBhIHBvaW50ZXIvcmVmZXJlbmNlIHRvIGEKKyAgIHN0cnVjdCBvciB1bmlv biwgdGhlbiBpdCByZXR1cm5zIHRydWUuICAqLworCitpbnQKK3R5cGVfY2Fu X2hhdmVfbWV0aG9kcyAoc3RydWN0IHR5cGUgKnR5cGUpCit7CisgIGlmIChp c19jb21wb3VuZF90eXBlICh0eXBlKSkKKyAgICByZXR1cm4gMTsKKyAgZWxz ZQorICAgIHsKKyAgICAgIGVudW0gdHlwZV9jb2RlIHR5cGVfY29kZTsKKwor ICAgICAgQ0hFQ0tfVFlQRURFRiAodHlwZSk7CisgICAgICB0eXBlX2NvZGUg PSBUWVBFX0NPREUgKHR5cGUpOworCisgICAgICBpZiAodHlwZV9jb2RlID09 IFRZUEVfQ09ERV9QVFIgfHwgdHlwZV9jb2RlID09IFRZUEVfQ09ERV9SRUYp CisgICAgICAgIHsKKyAgICAgICAgICB0eXBlID0gVFlQRV9UQVJHRVRfVFlQ RSAodHlwZSk7CisgICAgICAgICAgcmV0dXJuIHR5cGVfY2FuX2hhdmVfbWV0 aG9kcyAodHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgcmV0dXJuIDA7 Cit9CisKIC8qIFJldHVybiB0cnVlIGlmIFQgaXMgc2NhbGFyLCBvciBhIGNv bXBvc2l0ZSB0eXBlIHdoaWNoIGluIHByYWN0aWNlIGhhcwogICAgdGhlIG1l bW9yeSBsYXlvdXQgb2YgYSBzY2FsYXIgdHlwZS4gIEUuZy4sIGFuIGFycmF5 IG9yIHN0cnVjdCB3aXRoIG9ubHkKICAgIG9uZSBzY2FsYXIgZWxlbWVudCBp bnNpZGUgaXQsIG9yIGEgdW5pb24gd2l0aCBvbmx5IHNjYWxhciBlbGVtZW50 cy4gICovCkluZGV4OiBnZGJ0eXBlcy5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2RidHlwZXMuaCx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4xNjcKZGlmZiAtdSAtcCAtcjEuMTY3IGdk YnR5cGVzLmgKLS0tIGdkYnR5cGVzLmgJMTcgSnVuIDIwMTIgMTk6NTM6NTIg LTAwMDAJMS4xNjcKKysrIGdkYnR5cGVzLmgJMTggSnVuIDIwMTIgMDY6NTY6 NDMgLTAwMDAKQEAgLTE2MjksNiArMTYyOSwxMCBAQCBleHRlcm4gaW50IGlz X2ludGVncmFsX3R5cGUgKHN0cnVjdCB0eXBlCiAKIGV4dGVybiBpbnQgaXNf c2NhbGFyX3R5cGVfcmVjdXJzaXZlIChzdHJ1Y3QgdHlwZSAqKTsKIAorZXh0 ZXJuIGludCBpc19jb21wb3VuZF90eXBlIChzdHJ1Y3QgdHlwZSAqKTsKKwor ZXh0ZXJuIGludCB0eXBlX2Nhbl9oYXZlX21ldGhvZHMgKHN0cnVjdCB0eXBl ICopOworCiBleHRlcm4gdm9pZCBtYWludGVuYW5jZV9wcmludF90eXBlIChj aGFyICosIGludCk7CiAKIGV4dGVybiBodGFiX3QgY3JlYXRlX2NvcGllZF90 eXBlc19oYXNoIChzdHJ1Y3Qgb2JqZmlsZSAqb2JqZmlsZSk7CkluZGV4OiB2 YWxhcml0aC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j dnMvc3JjL3NyYy9nZGIvdmFsYXJpdGguYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xMDQKZGlmZiAtdSAtcCAtcjEuMTA0IHZhbGFyaXRoLmMKLS0tIHZh bGFyaXRoLmMJOSBKdW4gMjAxMiAwNzozNjo0MyAtMDAwMAkxLjEwNAorKysg dmFsYXJpdGguYwkxOCBKdW4gMjAxMiAwNjo1Njo0MyAtMDAwMApAQCAtMjgz LDggKzI4Myw3IEBAIGJpbm9wX3R5cGVzX3VzZXJfZGVmaW5lZF9wIChlbnVt IGV4cF9vcGMKICAgaWYgKFRZUEVfQ09ERSAodHlwZTIpID09IFRZUEVfQ09E RV9SRUYpCiAgICAgdHlwZTIgPSBjaGVja190eXBlZGVmIChUWVBFX1RBUkdF VF9UWVBFICh0eXBlMikpOwogCi0gIHJldHVybiAoVFlQRV9DT0RFICh0eXBl MSkgPT0gVFlQRV9DT0RFX1NUUlVDVAotCSAgfHwgVFlQRV9DT0RFICh0eXBl MikgPT0gVFlQRV9DT0RFX1NUUlVDVCk7CisgIHJldHVybiAoaXNfY29tcG91 bmRfdHlwZSAodHlwZTEpIHx8IGlzX2NvbXBvdW5kX3R5cGUgKHR5cGUyKSk7 CiB9CiAKIC8qIENoZWNrIHRvIHNlZSBpZiBlaXRoZXIgYXJndW1lbnQgaXMg YSBzdHJ1Y3R1cmUsIG9yIGEgcmVmZXJlbmNlIHRvCkBAIC0zMzUsMjIgKzMz NCwzOCBAQCB2YWx1ZV91c2VyX2RlZmluZWRfY3BwX29wIChzdHJ1Y3QgdmFs dWUgCiAgIHN0cnVjdCBzeW1ib2wgKnN5bXAgPSBOVUxMOwogICBzdHJ1Y3Qg dmFsdWUgKnZhbHAgPSBOVUxMOwogCi0gIGZpbmRfb3ZlcmxvYWRfbWF0Y2gg KGFyZ3MsIG5hcmdzLCBvcGVyYXRvciwgQk9USCAvKiBjb3VsZCBiZSBtZXRo b2QgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgIDAgLyogc3RyaWN0IG1h dGNoICovLCAmYXJnc1swXSwgLyogb2JqcCAqLwotICAgICAgICAgICAgICAg ICAgICAgICBOVUxMIC8qIHBhc3MgTlVMTCBzeW1ib2wgc2luY2Ugc3ltYm9s IGlzIHVua25vd24gKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICZ2YWxw LCAmc3ltcCwgc3RhdGljX21lbWZ1bmNwLCAwKTsKKyAgaWYgKHR5cGVfY2Fu X2hhdmVfbWV0aG9kcyAodmFsdWVfdHlwZSAoYXJnc1swXSkpKQorICAgIHsK KyAgICAgIHN0cnVjdCB2YWx1ZSAqKmFyZ3ZlYzsKKyAgICAgIGludCBpOwor CisgICAgICBhcmd2ZWMgPSAoc3RydWN0IHZhbHVlICoqKSBhbGxvY2EgKHNp emVvZiAoc3RydWN0IHZhbHVlICopICogbmFyZ3MpOworICAgICAgYXJndmVj WzBdID0gdmFsdWVfYWRkciAoYXJnc1swXSk7CisgICAgICBmb3IgKGkgPSAx OyBpIDwgbmFyZ3M7IGkrKykKKyAgICAgICAgYXJndmVjW2ldID0gYXJnc1tp XTsKKyAgICAgIAorICAgICAgZmluZF9vdmVybG9hZF9tYXRjaCAoYXJndmVj LCBuYXJncywgb3BlcmF0b3IsIEJPVEggLyogY291bGQgYmUgbWV0aG9kICov LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBzdHJpY3QgbWF0 Y2ggKi8sICZhcmd2ZWNbMF0sIC8qIG9ianAgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwgLyogcGFzcyBOVUxMIHN5bWJvbCBzaW5jZSBz eW1ib2wgaXMgdW5rbm93biAqLywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICZ2YWxwLCAmc3ltcCwgc3RhdGljX21lbWZ1bmNwLCAwKTsKIAotICBp ZiAodmFscCkKLSAgICByZXR1cm4gdmFscDsKIAotICBpZiAoc3ltcCkKLSAg ICB7Ci0gICAgICAvKiBUaGlzIGlzIGEgbm9uIG1lbWJlciBmdW5jdGlvbiBh bmQgZG9lcyBub3QKLSAgICAgICAgIGV4cGVjdCBhIHJlZmVyZW5jZSBhcyBp dHMgZmlyc3QgYXJndW1lbnQKLSAgICAgICAgIHJhdGhlciB0aGUgZXhwbGlj aXQgc3RydWN0dXJlLiAgKi8KLSAgICAgIGFyZ3NbMF0gPSB2YWx1ZV9pbmQg KGFyZ3NbMF0pOwotICAgICAgcmV0dXJuIHZhbHVlX29mX3ZhcmlhYmxlIChz eW1wLCAwKTsKKyAgICAgIGlmICh2YWxwKQorICAgICAgICB7CisgICAgICAg ICAgLyogQSBtZXRob2QgbWF0Y2ggd2FzIGZvdW5kLiBJbiBzdWNoIGEgY2Fz ZSwgdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAgICAgc2hvdWxkIGFj dHVhbGx5IGJlIGEgcG9pbnRlciB0byAndGhpcycgKG9mIHRoZSBmaXJzdCBh cmcpLiAgKi8KKyAgICAgICAgICBhcmdzWzBdID0gYXJndmVjWzBdOworICAg ICAgICAgIHJldHVybiB2YWxwOworICAgICAgICB9ICAgICAgCiAgICAgfQor ICBlbHNlCisgICAgZmluZF9vdmVybG9hZF9tYXRjaCAoYXJncywgbmFyZ3Ms IG9wZXJhdG9yLCBOT05fTUVUSE9ELAorICAgICAgICAgICAgICAgICAgICAg ICAgIDAgLyogc3RyaWN0IG1hdGNoICovLCBOVUxMLCAvKiBvYmpwICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCAvKiBwYXNzIE5VTEwgc3lt Ym9sIHNpbmNlIHN5bWJvbCBpcyB1bmtub3duICovLAorICAgICAgICAgICAg ICAgICAgICAgICAgICZ2YWxwLCAmc3ltcCwgc3RhdGljX21lbWZ1bmNwLCAw KTsKKworICBpZiAoc3ltcCkKKyAgICByZXR1cm4gdmFsdWVfb2ZfdmFyaWFi bGUgKHN5bXAsIDApOwogCiAgIGVycm9yIChfKCJDb3VsZCBub3QgZmluZCAl cy4iKSwgb3BlcmF0b3IpOwogfQpAQCAtMzk3LDExICs0MTIsMTIgQEAgdmFs dWVfeF9iaW5vcCAoc3RydWN0IHZhbHVlICphcmcxLCBzdHJ1YwogICAvKiBu b3cgd2Uga25vdyB0aGF0IHdoYXQgd2UgaGF2ZSB0byBkbyBpcyBjb25zdHJ1 Y3Qgb3VyCiAgICAgIGFyZyB2ZWN0b3IgYW5kIGZpbmQgdGhlIHJpZ2h0IGZ1 bmN0aW9uIHRvIGNhbGwgaXQgd2l0aC4gICovCiAKLSAgaWYgKFRZUEVfQ09E RSAoY2hlY2tfdHlwZWRlZiAodmFsdWVfdHlwZSAoYXJnMSkpKSAhPSBUWVBF X0NPREVfU1RSVUNUKQorICBpZiAoIWlzX2NvbXBvdW5kX3R5cGUgKGNoZWNr X3R5cGVkZWYgKHZhbHVlX3R5cGUgKGFyZzEpKSkKKyAgICAgICYmICFpc19j b21wb3VuZF90eXBlIChjaGVja190eXBlZGVmICh2YWx1ZV90eXBlIChhcmcy KSkpKQogICAgIGVycm9yIChfKCJDYW4ndCBkbyB0aGF0IGJpbmFyeSBvcCBv biB0aGF0IHR5cGUiKSk7CS8qIEZJWE1FIGJlIGV4cGxpY2l0ICovCiAKICAg YXJndmVjID0gKHN0cnVjdCB2YWx1ZSAqKikgYWxsb2NhIChzaXplb2YgKHN0 cnVjdCB2YWx1ZSAqKSAqIDQpOwotICBhcmd2ZWNbMV0gPSB2YWx1ZV9hZGRy IChhcmcxKTsKKyAgYXJndmVjWzFdID0gYXJnMTsKICAgYXJndmVjWzJdID0g YXJnMjsKICAgYXJndmVjWzNdID0gMDsKIApAQCAtNTY1LDcgKzU4MSw3IEBA IHZhbHVlX3hfdW5vcCAoc3RydWN0IHZhbHVlICphcmcxLCBlbnVtIGUKICAg ICBlcnJvciAoXygiQ2FuJ3QgZG8gdGhhdCB1bmFyeSBvcCBvbiB0aGF0IHR5 cGUiKSk7CS8qIEZJWE1FIGJlIGV4cGxpY2l0ICovCiAKICAgYXJndmVjID0g KHN0cnVjdCB2YWx1ZSAqKikgYWxsb2NhIChzaXplb2YgKHN0cnVjdCB2YWx1 ZSAqKSAqIDQpOwotICBhcmd2ZWNbMV0gPSB2YWx1ZV9hZGRyIChhcmcxKTsK KyAgYXJndmVjWzFdID0gYXJnMTsKICAgYXJndmVjWzJdID0gMDsKIAogICBu YXJncyA9IDE7CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmNwL29wZXJhdG9yLmNj Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3Ny Yy9nZGIvdGVzdHN1aXRlL2dkYi5jcC9vcGVyYXRvci5jYyx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIgb3BlcmF0b3IuY2MK LS0tIHRlc3RzdWl0ZS9nZGIuY3Avb3BlcmF0b3IuY2MJMjUgSnVuIDIwMTAg MTg6MDU6MzAgLTAwMDAJMS4yCisrKyB0ZXN0c3VpdGUvZ2RiLmNwL29wZXJh dG9yLmNjCTE4IEp1biAyMDEyIDA2OjU2OjQ0IC0wMDAwCkBAIC0xLDcgKzEs MzggQEAKIGNsYXNzIEEKIHsKKyBwdWJsaWM6CisgIGludCBhOworCisgIEEg b3BlcmF0b3IrIChjb25zdCBBICZvcHIyKTsKK307CisKK3VuaW9uIFUKK3sK KyAgaW50IGk7CisgIGNoYXIgYzsKIH07CiAKK0EKK0E6Om9wZXJhdG9yKyAo Y29uc3QgQSAmb3ByMikKK3sKKyAgQSBuZXdfYTsKKyAgbmV3X2EuYSA9IGEg KyBvcHIyLmE7CisKKyAgcmV0dXJuIG5ld19hOworfQorCitpbnQKK29wZXJh dG9yKyAoY29uc3QgaW50IG9wcjEsIGNvbnN0IEEgJm9wcjIpCit7CisgIHJl dHVybiBvcHIxICsgb3ByMi5hOworfQorCitpbnQKK29wZXJhdG9yKyAoY29u c3QgVSAmb3ByMSwgY29uc3QgQSAmb3ByMikKK3sKKyAgcmV0dXJuIG9wcjEu aSArIG9wcjIuYTsKK30KKwogaW50IG9wZXJhdG9yPT0gKEEsIGludCkKIHsK ICAgcmV0dXJuIDExOwpAQCAtMTc2LDYgKzIwNyw3IEBAIHRlc3QgeDsKIGlu dCBtYWluICgpCiB7CiAgIEEgYTsKKwogICBhID09IDE7CiAgIGEgPT0gJ2En OwogCkBAIC0yMDcsNSArMjM5LDEwIEBAIGludCBtYWluICgpCiAgIEwgbDsK ICAgbCA9PSAxOwogCi0gIHJldHVybiAwOworICBBIG9iajEgPSB7IDEwIH07 CisgIEEgb2JqMiA9IHsgMjAgfTsKKyAgaW50IHZhbCA9IDE7CisgIFUgdSA9 IHsgMTAgfTsKKworICByZXR1cm4gMDsgLyogQnJlYWsgaGVyZS4gICovCiB9 CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmNwL29wZXJhdG9yLmV4cAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3Rl c3RzdWl0ZS9nZGIuY3Avb3BlcmF0b3IuZXhwLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEuNCBvcGVyYXRvci5leHAKLS0tIHRl c3RzdWl0ZS9nZGIuY3Avb3BlcmF0b3IuZXhwCTQgSmFuIDIwMTIgMDg6MTc6 NDcgLTAwMDAJMS40CisrKyB0ZXN0c3VpdGUvZ2RiLmNwL29wZXJhdG9yLmV4 cAkxOCBKdW4gMjAxMiAwNjo1Njo0NCAtMDAwMApAQCAtMjYsNiArMjYsOSBA QCBpZiAhW3J1bnRvX21haW5dIHRoZW4gewogICAgIGNvbnRpbnVlCiB9CiAK K2dkYl9icmVha3BvaW50IFtnZGJfZ2V0X2xpbmVfbnVtYmVyICJCcmVhayBo ZXJlLiJdCitnZGJfY29udGludWVfdG9fYnJlYWtwb2ludCAiQnJlYWsgaGVy ZSIgIi4qQnJlYWsgaGVyZS4qIgorCiAjIFRlc3QgZ2xvYmFsIG9wZXJhdG9y CiBnZGJfdGVzdCAicCBhID09IDEiICI9IDExIiAiZ2xvYmFsIG9wZXJhdG9y IgogZ2RiX3Rlc3QgInAgYSA9PSAnYSciICI9IDEyIiAiZ2xvYmFsIG9wZXJh dG9yIG92ZXJsb2FkIgpAQCAtNTksMyArNjIsOCBAQCBnZGJfdGVzdCAicCBs ID09IDEiICI9IDg4IgogCiAjIFRlc3QgdGhhdCB3ZSBkb24ndCBmYWxsIGlu dG8gYW4gaW1wb3J0IGxvb3AKIGdkYl90ZXN0IHtwIHhbMF19IHtObyBzeW1i b2wgIm9wZXJhdG9yXFtcXSIgaW4gY3VycmVudCBjb250ZXh0Ln0KKworIyBU ZXN0ICsgb3BlcmF0b3JzCitnZGJfdGVzdCAicHJpbnQgdmFsICsgb2JqMSIg IjExIiAiVGVzdCBvdmVybG9hZGVkIG9wZXJhdG9yIGZ1bmN0aW9uIgorZ2Ri X3Rlc3QgInByaW50IChvYmoxICsgb2JqMikuYSIgIjMwIiAiVGVzdCBvdmVy bG9hZGVkIG9wZXJhdG9yIG1ldGhvZCIKK2dkYl90ZXN0ICJwcmludCB1ICsg b2JqMiIgIjMwIiAiVGVzdCBvdmVybG9hZGVkIG9wZXJhdG9yIGZ1bmN0aW9u IHdpdGggdW5pb24gYXJnIgo= --20cf302ef79016979b04c2ba2348--