From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 93081 invoked by alias); 14 Nov 2015 17:39:35 -0000 Mailing-List: contact fortran-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: fortran-owner@gcc.gnu.org Received: (qmail 93058 invoked by uid 89); 14 Nov 2015 17:39:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-oi0-f52.google.com Received: from mail-oi0-f52.google.com (HELO mail-oi0-f52.google.com) (209.85.218.52) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Sat, 14 Nov 2015 17:39:30 +0000 Received: by oiww189 with SMTP id w189so65296110oiw.3; Sat, 14 Nov 2015 09:39:28 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.202.227.129 with SMTP id a123mr6302838oih.71.1447522768463; Sat, 14 Nov 2015 09:39:28 -0800 (PST) Received: by 10.202.83.141 with HTTP; Sat, 14 Nov 2015 09:39:28 -0800 (PST) Date: Sat, 14 Nov 2015 17:39:00 -0000 Message-ID: Subject: Ping: [Patch, fortran] Bug 68241 - [meta-bug] Deferred-length character - PRs50221, 68216, 63932, 66408, 67674 and 49954 From: Paul Richard Thomas To: "fortran@gcc.gnu.org" , gcc-patches Cc: Steve Kargl , Damian Rouson , Louis Krupp , Dominique Dhumieres Content-Type: multipart/mixed; boundary=001a114091866b4f86052483a87f X-IsSubscribed: yes X-SW-Source: 2015-11/txt/msg00075.txt.bz2 --001a114091866b4f86052483a87f Content-Type: text/plain; charset=UTF-8 Content-length: 3152 Dear All, I am completely unable to reproduce the problems that Dominique is reporting for deferred_character_4.f90. This might be because the patch has moved on to fix PR49554 :-) Concatenation expressions assigned to deferred length character arrays need careful handling to ensure that the temporary creation for the concatenation operator occurs at the right place, that the descriptor dtype is updated and an array temporary is created if there is any dependency between lhs and rhs. This latter has been implemented in resolve.c. Testcases 4-6 have been added to reflect the additional fixes afforded by the original patch, as reported by Dominique (thanks!). As soon as this patch has been committed, I will prepare a version for 4.9 and 5 branches Bootstrapped and regtested on FC21/x86_64 - OK for trunk? Paul 2015-15-08 Paul Thomas PR fortran/50221 PR fortran/68216 PR fortran/63932 PR fortran/66408 * trans_array.c (gfc_conv_scalarized_array_ref): Pass the symbol decl for deferred character length array references. * trans-stmt.c (gfc_trans_allocate): Keep the string lengths to update deferred length character string lengths. * trans-types.c (gfc_get_dtype_rank_type); Use the string length of deferred character types for the dtype size. * trans.c (gfc_build_array_ref): For references to deferred character arrays, use the domain max value, if it is a variable to set the 'span' and use pointer arithmetic for acces to the element. (trans_code): Set gfc_current_locus for diagnostic purposes. PR fortran/67674 * trans-expr.c (gfc_conv_procedure_call): Do not fix deferred string lengths of components. PR fortran/49954 * resolve.c (deferred_op_assign): New function. (gfc_resolve_code): Call it. * trans-array.c (concat_str_length): New function. (gfc_alloc_allocatable_for_assignment): Jump directly to alloc/ realloc blocks for deferred character length arrays because the string length might change, even if the shape is the same. Call concat_str_length to obtain the string length for concatenation since it is needed to compute the lhs string length. Set the descriptor dtype appropriately for the new string length. * trans-expr.c (gfc_trans_assignment_1): Use the rse string length for all characters, other than deferred types. For concatenation operators, push the rse.pre block to the inner most loop so that the temporary pointer and the assignments are properly placed. 2015-15-08 Paul Thomas PR fortran/50221 * gfortran.dg/deferred_character_1.f90: New test. * gfortran.dg/deferred_character_4.f90: New test for comment #4 of the PR. PR fortran/68216 * gfortran.dg/deferred_character_2.f90: New test. PR fortran/67674 * gfortran.dg/deferred_character_3.f90: New test. PR fortran/63932 * gfortran.dg/deferred_character_5.f90: New test. PR fortran/66408 * gfortran.dg/deferred_character_6.f90: New test. PR fortran/49954 * gfortran.dg/deferred_character_7.f90: New test. --001a114091866b4f86052483a87f Content-Type: text/plain; charset=US-ASCII; name="resubmit.diff" Content-Disposition: attachment; filename="resubmit.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_igz3siqf0 Content-length: 37402 SW5kZXg6IGdjYy9mb3J0cmFuL3Jlc29sdmUuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CioqKiBnY2MvZm9ydHJhbi9yZXNvbHZlLmMJKHJldmlzaW9uIDIy OTk1MykKLS0tIGdjYy9mb3J0cmFuL3Jlc29sdmUuYwkod29ya2luZyBjb3B5 KQoqKioqKioqKioqKioqKiogcmVzb2x2ZV9wdHJfZmNuX2Fzc2lnbiAoZ2Zj X2NvZGUgKipjb2RlLAoqKiogMTAyMjIsMTAyMjcgKioqKgotLS0gMTAyMjIs MTAyNzEgLS0tLQogIH0KICAKICAKKyAvKiBEZWZlcnJlZCBjaGFyYWN0ZXIg bGVuZ3RoIGFzc2lnbm1lbnRzIGZyb20gYW4gb3BlcmF0b3IgZXhwcmVzc2lv bgorICAgIHJlcXVpcmUgYSB0ZW1wb3JhcnkgYmVjYXVzZSB0aGUgY2hhcmFj dGVyIGxlbmd0aCBvZiB0aGUgbGhzIGNhbgorICAgIGNoYW5nZSBpbiB0aGUg Y291cnNlIG9mIHRoZSBhc3NpZ25tZW50LiAgKi8KKyAKKyBzdGF0aWMgYm9v bAorIGRlZmVycmVkX29wX2Fzc2lnbiAoZ2ZjX2NvZGUgKipjb2RlLCBnZmNf bmFtZXNwYWNlICpucykKKyB7CisgICBnZmNfZXhwciAqdG1wX2V4cHI7Cisg ICBnZmNfY29kZSAqdGhpc19jb2RlOworIAorICAgaWYgKCEoKCpjb2RlKS0+ ZXhwcjEtPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSCisgCSAmJiAoKmNvZGUp LT5leHByMS0+dHMuZGVmZXJyZWQgJiYgKCpjb2RlKS0+ZXhwcjEtPnJhbmsK KyAJICYmICgqY29kZSktPmV4cHIyLT5leHByX3R5cGUgPT0gRVhQUl9PUCkp CisgICAgIHJldHVybiBmYWxzZTsKKyAKKyAgIGlmICghZ2ZjX2NoZWNrX2Rl cGVuZGVuY3kgKCgqY29kZSktPmV4cHIxLCAoKmNvZGUpLT5leHByMiwgMSkp CisgICAgIHJldHVybiBmYWxzZTsKKyAKKyAgIHRtcF9leHByID0gZ2V0X3Rl bXBfZnJvbV9leHByICgoKmNvZGUpLT5leHByMSwgbnMpOworICAgdG1wX2V4 cHItPndoZXJlID0gKCpjb2RlKS0+bG9jOworIAorICAgLyogQSBuZXcgY2hh cmxlbiBpcyByZXF1aXJlZCB0byBlbnN1cmUgdGhhdCB0aGUgdmFyaWFibGUg c3RyaW5nCisgICAgICBsZW5ndGggaXMgZGlmZmVyZW50IHRvIHRoYXQgb2Yg dGhlIG9yaWdpbmFsIGxocy4gICovCisgICB0bXBfZXhwci0+dHMudS5jbCA9 IGdmY19nZXRfY2hhcmxlbigpOworICAgdG1wX2V4cHItPnN5bXRyZWUtPm4u c3ltLT50cy51LmNsID0gdG1wX2V4cHItPnRzLnUuY2w7CisgICB0bXBfZXhw ci0+dHMudS5jbC0+bmV4dCA9ICgqY29kZSktPmV4cHIyLT50cy51LmNsLT5u ZXh0OworICAgKCpjb2RlKS0+ZXhwcjItPnRzLnUuY2wtPm5leHQgPSB0bXBf ZXhwci0+dHMudS5jbDsKKyAKKyAgIHRtcF9leHByLT5zeW10cmVlLT5uLnN5 bS0+dHMuZGVmZXJyZWQgPSAxOworIAorICAgdGhpc19jb2RlID0gYnVpbGRf YXNzaWdubWVudCAoRVhFQ19BU1NJR04sCisgCQkJCSgqY29kZSktPmV4cHIx LAorIAkJCQlnZmNfY29weV9leHByICh0bXBfZXhwciksCisgCQkJCU5VTEws IE5VTEwsICgqY29kZSktPmxvYyk7CisgCisgICAoKmNvZGUpLT5leHByMSA9 IHRtcF9leHByOworIAorICAgdGhpc19jb2RlLT5uZXh0ID0gKCpjb2RlKS0+ bmV4dDsKKyAgICgqY29kZSktPm5leHQgPSB0aGlzX2NvZGU7CisgCisgICBy ZXR1cm4gdHJ1ZTsKKyB9CisgCisgCiAgLyogR2l2ZW4gYSBibG9jayBvZiBj b2RlLCByZWN1cnNpdmVseSByZXNvbHZlIGV2ZXJ5dGhpbmcgcG9pbnRlZCB0 byBieSB0aGlzCiAgICAgY29kZSBibG9jay4gICovCiAgCioqKioqKioqKioq KioqKiBzdGFydDoKKioqIDEwNDI3LDEwNDMyICoqKioKLS0tIDEwNDcxLDEw NDgxIC0tLS0KICAJCWdvdG8gY2FsbDsKICAJICAgIH0KICAKKyAJICAvKiBD aGVjayBmb3IgZGVwZW5kZW5jaWVzIGluIGRlZmVycmVkIGNoYXJhY3RlciBs ZW5ndGggYXJyYXkKKyAJICAgICBhc3NpZ25tZW50cyBhbmQgZ2VuZXJhdGUg YSB0ZW1wb3JhcnksIGlmIG5lY2Vzc2FyeS4gICovCisgCSAgaWYgKGNvZGUt Pm9wID09IEVYRUNfQVNTSUdOICYmIGRlZmVycmVkX29wX2Fzc2lnbiAoJmNv ZGUsIG5zKSkKKyAJICAgIGJyZWFrOworIAogIAkgIC8qIEYwMyA3LjQuMS4z IGZvciBub24tYWxsb2NhdGFibGUsIG5vbi1wb2ludGVyIGNvbXBvbmVudHMu ICAqLwogIAkgIGlmIChjb2RlLT5vcCAhPSBFWEVDX0NBTEwgJiYgY29kZS0+ ZXhwcjEtPnRzLnR5cGUgPT0gQlRfREVSSVZFRAogIAkgICAgICAmJiBjb2Rl LT5leHByMS0+dHMudS5kZXJpdmVkCioqKioqKioqKioqKioqKiBnZmNfdmVy aWZ5X2JpbmRpbmdfbGFiZWxzIChnZmNfc3ltYm9sICpzCioqKiAxMDgwMSwx MDgwNyAqKioqCiAgICAgICAgc3ltLT5iaW5kaW5nX2xhYmVsID0gTlVMTDsK ICAKICAgICAgfQohICAgZWxzZSBpZiAoc3ltLT5hdHRyLmZsYXZvciA9PSBG TF9WQVJJQUJMRSAmJiBtb2R1bGUgCiAgCSAgICYmIChzdHJjbXAgKG1vZHVs ZSwgZ3N5bS0+bW9kX25hbWUpICE9IDAKICAJICAgICAgIHx8IHN0cmNtcCAo c3ltLT5uYW1lLCBnc3ltLT5zeW1fbmFtZSkgIT0gMCkpCiAgICAgIHsKLS0t IDEwODUwLDEwODU2IC0tLS0KICAgICAgICBzeW0tPmJpbmRpbmdfbGFiZWwg PSBOVUxMOwogIAogICAgICB9CiEgICBlbHNlIGlmIChzeW0tPmF0dHIuZmxh dm9yID09IEZMX1ZBUklBQkxFICYmIG1vZHVsZQogIAkgICAmJiAoc3RyY21w IChtb2R1bGUsIGdzeW0tPm1vZF9uYW1lKSAhPSAwCiAgCSAgICAgICB8fCBz dHJjbXAgKHN5bS0+bmFtZSwgZ3N5bS0+c3ltX25hbWUpICE9IDApKQogICAg ICB7CkluZGV4OiBnY2MvZm9ydHJhbi90cmFucy1hcnJheS5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFuL3RyYW5zLWFycmF5LmMJ KHJldmlzaW9uIDIyOTk1MykKLS0tIGdjYy9mb3J0cmFuL3RyYW5zLWFycmF5 LmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGdmY19jb252X3Nj YWxhcml6ZWRfYXJyYXlfcmVmIChnZmNfc2UgKgoqKiogMzE2OCwzMTc0ICoq KioKICAgICAgaW5kZXggPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0 aW9uLCBQTFVTX0VYUFIsIGdmY19hcnJheV9pbmRleF90eXBlLAogIAkJCSAg ICAgaW5kZXgsIGluZm8tPm9mZnNldCk7CiAgCiEgICBpZiAoZXhwciAmJiBp c19zdWJyZWZfYXJyYXkgKGV4cHIpKQogICAgICBkZWNsID0gZXhwci0+c3lt dHJlZS0+bi5zeW0tPmJhY2tlbmRfZGVjbDsKICAKICAgIHRtcCA9IGJ1aWxk X2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAoaW5wdXRfbG9jYXRpb24sIGluZm8t PmRhdGEpOwotLS0gMzE2OCwzMTc1IC0tLS0KICAgICAgaW5kZXggPSBmb2xk X2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBQTFVTX0VYUFIsIGdmY19h cnJheV9pbmRleF90eXBlLAogIAkJCSAgICAgaW5kZXgsIGluZm8tPm9mZnNl dCk7CiAgCiEgICBpZiAoZXhwciAmJiAoaXNfc3VicmVmX2FycmF5IChleHBy KQohIAkgICAgICAgfHwgKGV4cHItPnRzLmRlZmVycmVkICYmIGV4cHItPmV4 cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFKSkpCiAgICAgIGRlY2wgPSBleHBy LT5zeW10cmVlLT5uLnN5bS0+YmFja2VuZF9kZWNsOwogIAogICAgdG1wID0g YnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwg aW5mby0+ZGF0YSk7CioqKioqKioqKioqKioqKiBnZmNfaXNfcmVhbGxvY2F0 YWJsZV9saHMgKGdmY19leHByICpleHByCioqKiA4NTAxLDg1MDYgKioqKgot LS0gODUwMiw4NTc2IC0tLS0KICB9CiAgCiAgCisgc3RhdGljIHRyZWUKKyBj b25jYXRfc3RyX2xlbmd0aCAoZ2ZjX2V4cHIqIGV4cHIpCisgeworICAgdHJl ZSB0eXBlOworICAgdHJlZSBsZW4xOworICAgdHJlZSBsZW4yOworICAgZ2Zj X3NlIHNlOworIAorICAgdHlwZSA9IGdmY190eXBlbm9kZV9mb3Jfc3BlYyAo JmV4cHItPnZhbHVlLm9wLm9wMS0+dHMpOworICAgbGVuMSA9IFRZUEVfTUFY X1ZBTFVFIChUWVBFX0RPTUFJTiAodHlwZSkpOworICAgaWYgKGxlbjEgPT0g TlVMTF9UUkVFKQorICAgICB7CisgICAgICAgaWYgKGV4cHItPnZhbHVlLm9w Lm9wMS0+ZXhwcl90eXBlID09IEVYUFJfT1ApCisgCWxlbjEgPSBjb25jYXRf c3RyX2xlbmd0aCAoZXhwci0+dmFsdWUub3Aub3AxKTsKKyAgICAgICBlbHNl IGlmIChleHByLT52YWx1ZS5vcC5vcDEtPmV4cHJfdHlwZSA9PSBFWFBSX0NP TlNUQU5UKQorIAlsZW4xID0gYnVpbGRfaW50X2NzdCAoZ2ZjX2NoYXJsZW5f dHlwZV9ub2RlLAorIAkJCWV4cHItPnZhbHVlLm9wLm9wMS0+dmFsdWUuY2hh cmFjdGVyLmxlbmd0aCk7CisgICAgICAgZWxzZSBpZiAoZXhwci0+dmFsdWUu b3Aub3AxLT50cy51LmNsLT5sZW5ndGgpCisgCXsKKyAJICBnZmNfaW5pdF9z ZSAoJnNlLCBOVUxMKTsKKyAJICBnZmNfY29udl9leHByICgmc2UsIGV4cHIt PnZhbHVlLm9wLm9wMS0+dHMudS5jbC0+bGVuZ3RoKTsKKyAJICBsZW4xID0g c2UuZXhwcjsKKyAJfQorICAgICAgIGVsc2UKKyAJeworIAkgIC8qIExhc3Qg cmVzb3J0ISAgKi8KKyAJICBnZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKKyAJ ICBzZS53YW50X3BvaW50ZXIgPSAxOworIAkgIHNlLmRlc2NyaXB0b3Jfb25s eSA9IDE7CisgCSAgZ2ZjX2NvbnZfZXhwciAoJnNlLCBleHByLT52YWx1ZS5v cC5vcDEpOworIAkgIGxlbjEgPSBzZS5zdHJpbmdfbGVuZ3RoOworIAl9Cisg ICAgIH0KKyAKKyAgIHR5cGUgPSBnZmNfdHlwZW5vZGVfZm9yX3NwZWMgKCZl eHByLT52YWx1ZS5vcC5vcDItPnRzKTsKKyAgIGxlbjIgPSBUWVBFX01BWF9W QUxVRSAoVFlQRV9ET01BSU4gKHR5cGUpKTsKKyAgIGlmIChsZW4yID09IE5V TExfVFJFRSkKKyAgICAgeworICAgICAgIGlmIChleHByLT52YWx1ZS5vcC5v cDItPmV4cHJfdHlwZSA9PSBFWFBSX09QKQorIAlsZW4yID0gY29uY2F0X3N0 cl9sZW5ndGggKGV4cHItPnZhbHVlLm9wLm9wMik7CisgICAgICAgZWxzZSBp ZiAoZXhwci0+dmFsdWUub3Aub3AyLT5leHByX3R5cGUgPT0gRVhQUl9DT05T VEFOVCkKKyAJbGVuMiA9IGJ1aWxkX2ludF9jc3QgKGdmY19jaGFybGVuX3R5 cGVfbm9kZSwKKyAJCQlleHByLT52YWx1ZS5vcC5vcDItPnZhbHVlLmNoYXJh Y3Rlci5sZW5ndGgpOworICAgICAgIGVsc2UgaWYgKGV4cHItPnZhbHVlLm9w Lm9wMi0+dHMudS5jbC0+bGVuZ3RoKQorIAl7CisgCSAgZ2ZjX2luaXRfc2Ug KCZzZSwgTlVMTCk7CisgCSAgZ2ZjX2NvbnZfZXhwciAoJnNlLCBleHByLT52 YWx1ZS5vcC5vcDItPnRzLnUuY2wtPmxlbmd0aCk7CisgCSAgbGVuMiA9IHNl LmV4cHI7CisgCX0KKyAgICAgICBlbHNlCisgCXsKKyAJICAvKiBMYXN0IHJl c29ydCEgICovCisgCSAgZ2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7CisgCSAg c2Uud2FudF9wb2ludGVyID0gMTsKKyAJICBzZS5kZXNjcmlwdG9yX29ubHkg PSAxOworIAkgIGdmY19jb252X2V4cHIgKCZzZSwgZXhwci0+dmFsdWUub3Au b3AyKTsKKyAJICBsZW4yID0gc2Uuc3RyaW5nX2xlbmd0aDsKKyAJfQorICAg ICB9CisgCisgICBnY2NfYXNzZXJ0KGxlbjEgJiYgbGVuMik7CisgICBsZW4x ID0gZm9sZF9jb252ZXJ0IChnZmNfY2hhcmxlbl90eXBlX25vZGUsIGxlbjEp OworICAgbGVuMiA9IGZvbGRfY29udmVydCAoZ2ZjX2NoYXJsZW5fdHlwZV9u b2RlLCBsZW4yKTsKKyAKKyAgIHJldHVybiBmb2xkX2J1aWxkMl9sb2MgKGlu cHV0X2xvY2F0aW9uLCBQTFVTX0VYUFIsCisgCQkJICBnZmNfY2hhcmxlbl90 eXBlX25vZGUsIGxlbjEsIGxlbjIpOworIH0KKyAKKyAKICAvKiBBbGxvY2F0 ZSB0aGUgbGhzIG9mIGFuIGFzc2lnbm1lbnQgdG8gYW4gYWxsb2NhdGFibGUg YXJyYXksIG90aGVyd2lzZQogICAgIHJlYWxsb2NhdGUgaXQuICAqLwogIAoq KioqKioqKioqKioqKiogZ2ZjX2FsbG9jX2FsbG9jYXRhYmxlX2Zvcl9hc3Np Z25tZW50IChnZgoqKiogODU5OCw4NjAzICoqKioKLS0tIDg2NjgsODY3OSAt LS0tCiAgICAvKiBBbGxvY2F0ZSBpZiBkYXRhIGlzIE5VTEwuICAqLwogICAg Y29uZF9udWxsID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwg RVFfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsCiAgCQkJIGFycmF5MSwgYnVp bGRfaW50X2NzdCAoVFJFRV9UWVBFIChhcnJheTEpLCAwKSk7CisgCisgICBp ZiAoZXhwcjEtPnRzLmRlZmVycmVkKQorICAgICBjb25kX251bGwgPSBnZmNf ZXZhbHVhdGVfbm93IChib29sZWFuX3RydWVfbm9kZSwgJmZibG9jayk7Cisg ICBlbHNlCisgICAgIGNvbmRfbnVsbD0gZ2ZjX2V2YWx1YXRlX25vdyAoY29u ZF9udWxsLCAmZmJsb2NrKTsKKyAKICAgIHRtcCA9IGJ1aWxkM192IChDT05E X0VYUFIsIGNvbmRfbnVsbCwKICAJCSAgYnVpbGQxX3YgKEdPVE9fRVhQUiwg anVtcF9sYWJlbDEpLAogIAkJICBidWlsZF9lbXB0eV9zdG10IChpbnB1dF9s b2NhdGlvbikpOwoqKioqKioqKioqKioqKiogZ2ZjX2FsbG9jX2FsbG9jYXRh YmxlX2Zvcl9hc3NpZ25tZW50IChnZgoqKiogODY4Niw4NjkyICoqKioKICAK ICAgIGNvbmQgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBO RV9FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwKICAJCQkgIHNpemUxLCBzaXpl Mik7CiEgICBuZXFfc2l6ZSA9IGdmY19ldmFsdWF0ZV9ub3cgKGNvbmQsICZm YmxvY2spOwogIAogICAgLyogRGVhbGxvY2F0aW9uIG9mIGFsbG9jYXRhYmxl IGNvbXBvbmVudHMgd2lsbCBoYXZlIHRvIG9jY3VyIG9uCiAgICAgICByZWFs bG9jYXRpb24uICBGaXggdGhlIG9sZCBkZXNjcmlwdG9yIG5vdy4gICovCi0t LSA4NzYyLDg3NzQgLS0tLQogIAogICAgY29uZCA9IGZvbGRfYnVpbGQyX2xv YyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsIGJvb2xlYW5fdHlwZV9ub2Rl LAogIAkJCSAgc2l6ZTEsIHNpemUyKTsKISAKISAgIC8qIElmIHRoZSBsaHMg aXMgZGVmZXJyZWQgbGVuZ3RoLCBhc3N1bWUgdGhhdCB0aGUgZWxlbWVudCBz aXplCiEgICAgICBjaGFuZ2VzIGFuZCBmb3JjZSBhIHJlYWxsb2NhdGlvbi4g ICovCiEgICBpZiAoZXhwcjEtPnRzLmRlZmVycmVkKQohICAgICBuZXFfc2l6 ZSA9IGdmY19ldmFsdWF0ZV9ub3cgKGJvb2xlYW5fdHJ1ZV9ub2RlLCAmZmJs b2NrKTsKISAgIGVsc2UKISAgICAgbmVxX3NpemUgPSBnZmNfZXZhbHVhdGVf bm93IChjb25kLCAmZmJsb2NrKTsKICAKICAgIC8qIERlYWxsb2NhdGlvbiBv ZiBhbGxvY2F0YWJsZSBjb21wb25lbnRzIHdpbGwgaGF2ZSB0byBvY2N1ciBv bgogICAgICAgcmVhbGxvY2F0aW9uLiAgRml4IHRoZSBvbGQgZGVzY3JpcHRv ciBub3cuICAqLwoqKioqKioqKioqKioqKiogZ2ZjX2FsbG9jX2FsbG9jYXRh YmxlX2Zvcl9hc3NpZ25tZW50IChnZgoqKiogODc5MSw4Nzk2ICoqKioKLS0t IDg4NzMsODg4NCAtLS0tCiAgICAgICAgZWxzZQogIAl7CiAgCSAgdG1wID0g ZXhwcjItPnRzLnUuY2wtPmJhY2tlbmRfZGVjbDsKKyAJICBpZiAoIXRtcCAm JiBleHByMi0+ZXhwcl90eXBlID09IEVYUFJfT1AKKyAJICAgICAgJiYgZXhw cjItPnZhbHVlLm9wLm9wID09IElOVFJJTlNJQ19DT05DQVQpCisgCSAgICB7 CisgCSAgICAgIHRtcCA9IGNvbmNhdF9zdHJfbGVuZ3RoIChleHByMik7Cisg CSAgICAgIGV4cHIyLT50cy51LmNsLT5iYWNrZW5kX2RlY2wgPSBnZmNfZXZh bHVhdGVfbm93ICh0bXAsICZmYmxvY2spOworIAkgICAgfQogIAkgIHRtcCA9 IGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChleHByMS0+dHMudS5jbC0+YmFj a2VuZF9kZWNsKSwgdG1wKTsKICAJfQogIAoqKioqKioqKioqKioqKiogZ2Zj X2FsbG9jX2FsbG9jYXRhYmxlX2Zvcl9hc3NpZ25tZW50IChnZgoqKiogODgx OCw4ODIzICoqKioKLS0tIDg5MDYsODkyNyAtLS0tCiAgCQkJICAgc2l6ZTIs IHNpemVfb25lX25vZGUpOwogICAgc2l6ZTIgPSBnZmNfZXZhbHVhdGVfbm93 IChzaXplMiwgJmZibG9jayk7CiAgCisgICAvKiBGb3IgZGVmZXJyZWQgY2hh cmFjdGVyIGxlbmd0aCwgdGhlICdzaXplJyBmaWVsZCBvZiB0aGUgZHR5cGUg bWlnaHQKKyAgICAgIGhhdmUgY2hhbmdlZCBzbyBzZXQgdGhlIGR0eXBlLiAg Ki8KKyAgIGlmIChHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAo ZGVzYykpCisgICAgICAgJiYgZXhwcjEtPnRzLnR5cGUgPT0gQlRfQ0hBUkFD VEVSICYmIGV4cHIxLT50cy5kZWZlcnJlZCkKKyAgICAgeworICAgICAgIHRy ZWUgdHlwZTsKKyAgICAgICB0bXAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2R0 eXBlIChkZXNjKTsKKyAgICAgICBpZiAoZXhwcjItPnRzLnUuY2wtPmJhY2tl bmRfZGVjbCkKKyAJdHlwZSA9IGdmY190eXBlbm9kZV9mb3Jfc3BlYyAoJmV4 cHIyLT50cyk7CisgICAgICAgZWxzZQorIAl0eXBlID0gZ2ZjX3R5cGVub2Rl X2Zvcl9zcGVjICgmZXhwcjEtPnRzKTsKKyAKKyAgICAgICBnZmNfYWRkX21v ZGlmeSAoJmZibG9jaywgdG1wLAorIAkJICAgICAgZ2ZjX2dldF9kdHlwZV9y YW5rX3R5cGUgKGV4cHIxLT5yYW5rLHR5cGUpKTsKKyAgICAgfQorIAogICAg LyogUmVhbGxvYyBleHByZXNzaW9uLiAgTm90ZSB0aGF0IHRoZSBzY2FsYXJp emVyIHVzZXMgZGVzYy5kYXRhCiAgICAgICBpbiB0aGUgYXJyYXkgcmVmZXJl bmNlIC0gKCpkZXNjLmRhdGEpWzxlbGVtZW50Pl0uICAqLwogICAgZ2ZjX2lu aXRfYmxvY2sgKCZyZWFsbG9jX2Jsb2NrKTsKKioqKioqKioqKioqKioqIGdm Y19hbGxvY19hbGxvY2F0YWJsZV9mb3JfYXNzaWdubWVudCAoZ2YKKioqIDg4 NjAsODg2NyAqKioqCiAgCQkJICAgICAxLCBzaXplMik7CiAgICBnZmNfY29u dl9kZXNjcmlwdG9yX2RhdGFfc2V0ICgmYWxsb2NfYmxvY2ssCiAgCQkJCWRl c2MsIHRtcCk7CiEgICB0bXAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2R0eXBl IChkZXNjKTsKISAgIGdmY19hZGRfbW9kaWZ5ICgmYWxsb2NfYmxvY2ssIHRt cCwgZ2ZjX2dldF9kdHlwZSAoVFJFRV9UWVBFIChkZXNjKSkpOwogICAgaWYg KChleHByMS0+dHMudHlwZSA9PSBCVF9ERVJJVkVEKQogIAkmJiBleHByMS0+ dHMudS5kZXJpdmVkLT5hdHRyLmFsbG9jX2NvbXApCiAgICAgIHsKLS0tIDg5 NjQsODk3OSAtLS0tCiAgCQkJICAgICAxLCBzaXplMik7CiAgICBnZmNfY29u dl9kZXNjcmlwdG9yX2RhdGFfc2V0ICgmYWxsb2NfYmxvY2ssCiAgCQkJCWRl c2MsIHRtcCk7CiEgCiEgICAvKiBXZSBhbHJlYWR5IHNldCB0aGUgZHR5cGUg aW4gdGhlIGNhc2Ugb2YgZGVmZXJyZWQgY2hhcmFjdGVyCiEgICAgICBsZW5n dGggYXJyYXlzLiAgKi8KISAgIGlmICghKEdGQ19ERVNDUklQVE9SX1RZUEVf UCAoVFJFRV9UWVBFIChkZXNjKSkKISAgICAgICAgICYmIGV4cHIxLT50cy50 eXBlID09IEJUX0NIQVJBQ1RFUiAmJiBleHByMS0+dHMuZGVmZXJyZWQpKQoh ICAgICB7CiEgICAgICAgdG1wID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kdHlw ZSAoZGVzYyk7CiEgICAgICAgZ2ZjX2FkZF9tb2RpZnkgKCZhbGxvY19ibG9j aywgdG1wLCBnZmNfZ2V0X2R0eXBlIChUUkVFX1RZUEUgKGRlc2MpKSk7CiEg ICAgIH0KISAKICAgIGlmICgoZXhwcjEtPnRzLnR5cGUgPT0gQlRfREVSSVZF RCkKICAJJiYgZXhwcjEtPnRzLnUuZGVyaXZlZC0+YXR0ci5hbGxvY19jb21w KQogICAgICB7CkluZGV4OiBnY2MvZm9ydHJhbi90cmFucy1leHByLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4vdHJhbnMtZXhw ci5jCShyZXZpc2lvbiAyMjk5NTMpCi0tLSBnY2MvZm9ydHJhbi90cmFucy1l eHByLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGdmY19jb252 X3Byb2NlZHVyZV9jYWxsIChnZmNfc2UgKiBzZSwgZ2YKKioqIDU2MDEsNTYw NyAqKioqCiAgCSAgZWxzZQogIAkgICAgewogIAkgICAgICB0bXAgPSBwYXJt c2Uuc3RyaW5nX2xlbmd0aDsKISAJICAgICAgaWYgKFRSRUVfQ09ERSAodG1w KSAhPSBWQVJfREVDTCkKICAJCXRtcCA9IGdmY19ldmFsdWF0ZV9ub3cgKHBh cm1zZS5zdHJpbmdfbGVuZ3RoLCAmc2UtPnByZSk7CiAgCSAgICAgIHBhcm1z ZS5zdHJpbmdfbGVuZ3RoID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVMTF9U UkVFLCB0bXApOwogIAkgICAgfQotLS0gNTYwMSw1NjA4IC0tLS0KICAJICBl bHNlCiAgCSAgICB7CiAgCSAgICAgIHRtcCA9IHBhcm1zZS5zdHJpbmdfbGVu Z3RoOwohIAkgICAgICBpZiAoVFJFRV9DT0RFICh0bXApICE9IFZBUl9ERUNM CiEgCQkgICYmIFRSRUVfQ09ERSAodG1wKSAhPSBDT01QT05FTlRfUkVGKQog IAkJdG1wID0gZ2ZjX2V2YWx1YXRlX25vdyAocGFybXNlLnN0cmluZ19sZW5n dGgsICZzZS0+cHJlKTsKICAJICAgICAgcGFybXNlLnN0cmluZ19sZW5ndGgg PSBnZmNfYnVpbGRfYWRkcl9leHByIChOVUxMX1RSRUUsIHRtcCk7CiAgCSAg ICB9CioqKioqKioqKioqKioqKiBnZmNfdHJhbnNfYXNzaWdubWVudF8xIChn ZmNfZXhwciAqIGV4cHIxCioqKiA5MjUyLDkyNTkgKioqKgogICAgICB9CiAg CiAgICAvKiBTdGFiaWxpemUgYSBzdHJpbmcgbGVuZ3RoIGZvciB0ZW1wb3Jh cmllcy4gICovCiEgICBpZiAoZXhwcjItPnRzLnR5cGUgPT0gQlRfQ0hBUkFD VEVSKQogICAgICBzdHJpbmdfbGVuZ3RoID0gZ2ZjX2V2YWx1YXRlX25vdyAo cnNlLnN0cmluZ19sZW5ndGgsICZyc2UucHJlKTsKICAgIGVsc2UKICAgICAg c3RyaW5nX2xlbmd0aCA9IE5VTExfVFJFRTsKICAKLS0tIDkyNTMsOTI2MiAt LS0tCiAgICAgIH0KICAKICAgIC8qIFN0YWJpbGl6ZSBhIHN0cmluZyBsZW5n dGggZm9yIHRlbXBvcmFyaWVzLiAgKi8KISAgIGlmIChleHByMi0+dHMudHlw ZSA9PSBCVF9DSEFSQUNURVIgJiYgIWV4cHIyLT50cy5kZWZlcnJlZCkKICAg ICAgc3RyaW5nX2xlbmd0aCA9IGdmY19ldmFsdWF0ZV9ub3cgKHJzZS5zdHJp bmdfbGVuZ3RoLCAmcnNlLnByZSk7CisgICBlbHNlIGlmIChleHByMi0+dHMu dHlwZSA9PSBCVF9DSEFSQUNURVIpCisgICAgIHN0cmluZ19sZW5ndGggPSBy c2Uuc3RyaW5nX2xlbmd0aDsKICAgIGVsc2UKICAgICAgc3RyaW5nX2xlbmd0 aCA9IE5VTExfVFJFRTsKICAKKioqKioqKioqKioqKioqIGdmY190cmFuc19h c3NpZ25tZW50XzEgKGdmY19leHByICogZXhwcjEKKioqIDkyODcsOTI5NCAq KioqCiAgICAgICB0aGUgZnVuY3Rpb24gY2FsbCBtdXN0IGhhcHBlbiBiZWZv cmUgdGhlIChyZSlhbGxvY2F0aW9uIG9mIHRoZSBsaHMgLQogICAgICAgb3Ro ZXJ3aXNlIHRoZSBjaGFyYWN0ZXIgbGVuZ3RoIG9mIHRoZSByZXN1bHQgaXMg bm90IGtub3duLgogICAgICAgTk9URTogVGhpcyByZWxpZXMgb24gaGF2aW5n IHRoZSBleGFjdCBkZXBlbmRlbmNlIG9mIHRoZSBsZW5ndGggdHlwZQohICAg ICAgcGFyYW1ldGVyIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyOyBnZm9ydHJh biBzYXZlcyBpdCBpbiB0aGUgLm1vZCBmaWxlcy4gICovCiEgICBpZiAoZmxh Z19yZWFsbG9jX2xocyAmJiBleHByMi0+dHMudHlwZSA9PSBCVF9DSEFSQUNU RVIgJiYgZXhwcjEtPnRzLmRlZmVycmVkKQogICAgICBnZmNfYWRkX2Jsb2Nr X3RvX2Jsb2NrICgmYmxvY2ssICZyc2UucHJlKTsKICAKICAgIC8qIE51bGxp ZnkgdGhlIGFsbG9jYXRhYmxlIGNvbXBvbmVudHMgY29ycmVzcG9uZGluZyB0 byB0aG9zZSBvZiB0aGUgbGhzCi0tLSA5MjkwLDkzMDMgLS0tLQogICAgICAg dGhlIGZ1bmN0aW9uIGNhbGwgbXVzdCBoYXBwZW4gYmVmb3JlIHRoZSAocmUp YWxsb2NhdGlvbiBvZiB0aGUgbGhzIC0KICAgICAgIG90aGVyd2lzZSB0aGUg Y2hhcmFjdGVyIGxlbmd0aCBvZiB0aGUgcmVzdWx0IGlzIG5vdCBrbm93bi4K ICAgICAgIE5PVEU6IFRoaXMgcmVsaWVzIG9uIGhhdmluZyB0aGUgZXhhY3Qg ZGVwZW5kZW5jZSBvZiB0aGUgbGVuZ3RoIHR5cGUKISAgICAgIHBhcmFtZXRl ciBhdmFpbGFibGUgdG8gdGhlIGNhbGxlcjsgZ2ZvcnRyYW4gc2F2ZXMgaXQg aW4gdGhlIC5tb2QgZmlsZXMuCiEgICAgICBOT1RFIEFMU086IFRoZSBjb25j YXRlbmF0aW9uIG9wZXJhdGlvbiBnZW5lcmF0ZXMgYSB0ZW1wb3JhcnkgcG9p bnRlciwKISAgICAgIHdob3NlIGFsbG9jYXRpb24gbXVzdCBnbyB0byB0aGUg aW5uZXJtb3N0IGxvb3AuICAqLwohICAgaWYgKGZsYWdfcmVhbGxvY19saHMK ISAgICAgICAmJiBleHByMi0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIgJiYg ZXhwcjEtPnRzLmRlZmVycmVkCiEgICAgICAgJiYgIShsc3MgIT0gZ2ZjX3Nz X3Rlcm1pbmF0b3IKISAJICAgJiYgZXhwcjItPmV4cHJfdHlwZSA9PSBFWFBS X09QCiEgCSAgICYmIGV4cHIyLT52YWx1ZS5vcC5vcCA9PSBJTlRSSU5TSUNf Q09OQ0FUKSkKICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoJmJsb2Nr LCAmcnNlLnByZSk7CiAgCiAgICAvKiBOdWxsaWZ5IHRoZSBhbGxvY2F0YWJs ZSBjb21wb25lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhvc2Ugb2YgdGhlIGxo cwpJbmRleDogZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFuL3RyYW5zLXN0bXQuYwkocmV2 aXNpb24gMjI5OTUzKQotLS0gZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jCSh3 b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKiBnZmNfdHJhbnNfYWxsb2Nh dGUgKGdmY19jb2RlICogY29kZSkKKioqIDUwODksNTA5NCAqKioqCi0tLSA1 MDg5LDUwOTUgLS0tLQogICAgdHJlZSBsYWJlbF9maW5pc2g7CiAgICB0cmVl IG1lbXN6OwogICAgdHJlZSBhbF92cHRyLCBhbF9sZW47CisgICB0cmVlIGRl Zl9zdHJfbGVuID0gTlVMTF9UUkVFOwogICAgLyogSWYgYW4gZXhwcjMgaXMg cHJlc2VudCwgdGhlbiBzdG9yZSB0aGUgdHJlZSBmb3IgYWNjZXNzaW5nIGl0 cwogICAgICAgX3ZwdHIsIGFuZCBfbGVuIGNvbXBvbmVudHMgaW4gdGhlIHZh cmlhYmxlcywgcmVzcGVjdGl2ZWx5LiAgVGhlCiAgICAgICBlbGVtZW50IHNp emUsIGkuZS4gX3ZwdHIlc2l6ZSwgaXMgc3RvcmVkIGluIGV4cHIzX2VzaXpl LiAgQW55IG9mCioqKioqKioqKioqKioqKiBnZmNfdHJhbnNfYWxsb2NhdGUg KGdmY19jb2RlICogY29kZSkKKioqIDU0NjYsNTQ3MSAqKioqCi0tLSA1NDY3 LDU0NzMgLS0tLQogIAkgIGV4cHIzX2VzaXplID0gZm9sZF9idWlsZDJfbG9j IChpbnB1dF9sb2NhdGlvbiwgTVVMVF9FWFBSLAogIAkJCQkJIFRSRUVfVFlQ RSAoc2Vfc3ouZXhwciksCiAgCQkJCQkgdG1wLCBzZV9zei5leHByKTsKKyAJ ICBkZWZfc3RyX2xlbiA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlX3N6LmV4cHIs ICZibG9jayk7CiAgCX0KICAgICAgfQogIAoqKioqKioqKioqKioqKiogZ2Zj X3RyYW5zX2FsbG9jYXRlIChnZmNfY29kZSAqIGNvZGUpCioqKiA1NTE3LDU1 MjIgKioqKgotLS0gNTUxOSw1NTM1IC0tLS0KICAKICAgICAgICBzZS53YW50 X3BvaW50ZXIgPSAxOwogICAgICAgIHNlLmRlc2NyaXB0b3Jfb25seSA9IDE7 CisgCisgICAgICAgaWYgKGV4cHItPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVS CisgCSAgJiYgZXhwci0+dHMuZGVmZXJyZWQKKyAJICAmJiBUUkVFX0NPREUg KGV4cHItPnRzLnUuY2wtPmJhY2tlbmRfZGVjbCkgPT0gVkFSX0RFQ0wKKyAJ ICAmJiBkZWZfc3RyX2xlbiAhPSBOVUxMX1RSRUUpCisgCXsKKyAJICB0bXAg PSBleHByLT50cy51LmNsLT5iYWNrZW5kX2RlY2w7CisgCSAgZ2ZjX2FkZF9t b2RpZnkgKCZibG9jaywgdG1wLAorIAkJCSAgZm9sZF9jb252ZXJ0IChUUkVF X1RZUEUgKHRtcCksIGRlZl9zdHJfbGVuKSk7CisgCX0KKyAKICAgICAgICBn ZmNfY29udl9leHByICgmc2UsIGV4cHIpOwogICAgICAgIGlmIChleHByLT50 cy50eXBlID09IEJUX0NIQVJBQ1RFUiAmJiBleHByLT50cy5kZWZlcnJlZCkK ICAJLyogc2Uuc3RyaW5nX2xlbmd0aCBub3cgc3RvcmVzIHRoZSAuc3RyaW5n X2xlbmd0aCB2YXJpYWJsZSBvZiBleHByCkluZGV4OiBnY2MvZm9ydHJhbi90 cmFucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFu L3RyYW5zLmMJKHJldmlzaW9uIDIyOTk1MykKLS0tIGdjYy9mb3J0cmFuL3Ry YW5zLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGdmY19idWls ZF9hcnJheV9yZWYgKHRyZWUgYmFzZSwgdHJlZSBvZmYKKioqIDMzNCwzMzkg KioqKgotLS0gMzM0LDM1MSAtLS0tCiAgCiAgICB0eXBlID0gVFJFRV9UWVBF ICh0eXBlKTsKICAKKyAgIC8qIFVzZSBwb2ludGVyIGFyaXRobWV0aWMgZm9y IGRlZmVycmVkIGNoYXJhY3RlciBsZW5ndGggYXJyYXkKKyAgICAgIHJlZmVy ZW5jZXMuICAqLworICAgaWYgKHR5cGUgJiYgVFJFRV9DT0RFICh0eXBlKSA9 PSBBUlJBWV9UWVBFCisgICAgICAgJiYgVFlQRV9NQVhWQUwgKFRZUEVfRE9N QUlOICh0eXBlKSkgIT0gTlVMTF9UUkVFCisgICAgICAgJiYgVFJFRV9DT0RF IChUWVBFX01BWFZBTCAoVFlQRV9ET01BSU4gKHR5cGUpKSkgPT0gVkFSX0RF Q0wKKyAgICAgICAmJiBkZWNsCisgICAgICAgJiYgREVDTF9DT05URVhUIChU WVBFX01BWFZBTCAoVFlQRV9ET01BSU4gKHR5cGUpKSkKKyAJCQkJCT09IERF Q0xfQ09OVEVYVCAoZGVjbCkpCisgICAgIHNwYW4gPSBUWVBFX01BWFZBTCAo VFlQRV9ET01BSU4gKHR5cGUpKTsKKyAgIGVsc2UKKyAgICAgc3BhbiA9IE5V TExfVFJFRTsKKyAKICAgIGlmIChERUNMX1AgKGJhc2UpKQogICAgICBUUkVF X0FERFJFU1NBQkxFIChiYXNlKSA9IDE7CiAgCioqKioqKioqKioqKioqKiBn ZmNfYnVpbGRfYXJyYXlfcmVmICh0cmVlIGJhc2UsIHRyZWUgb2ZmCioqKiAz NDgsMzU1ICoqKioKICAJCXx8IFRSRUVfQ09ERSAoZGVjbCkgPT0gUEFSTV9E RUNMKQogICAgICAgICAmJiAoKEdGQ19ERUNMX1NVQlJFRl9BUlJBWV9QIChk ZWNsKQogIAkgICAgJiYgIWludGVnZXJfemVyb3AgKEdGQ19ERUNMX1NQQU4g KGRlY2wpKSkKISAJICAgfHwgR0ZDX0RFQ0xfQ0xBU1MgKGRlY2wpKSkKISAg ICAgICB8fCB2cHRyKQogICAgICB7CiAgICAgICAgaWYgKGRlY2wpCiAgCXsK LS0tIDM2MCwzNjggLS0tLQogIAkJfHwgVFJFRV9DT0RFIChkZWNsKSA9PSBQ QVJNX0RFQ0wpCiAgICAgICAgICYmICgoR0ZDX0RFQ0xfU1VCUkVGX0FSUkFZ X1AgKGRlY2wpCiAgCSAgICAmJiAhaW50ZWdlcl96ZXJvcCAoR0ZDX0RFQ0xf U1BBTiAoZGVjbCkpKQohIAkgICB8fCBHRkNfREVDTF9DTEFTUyAoZGVjbCkK ISAJICAgfHwgc3BhbiAhPSBOVUxMX1RSRUUpKQohICAgICAgIHx8IHZwdHIg IT0gTlVMTF9UUkVFKQogICAgICB7CiAgICAgICAgaWYgKGRlY2wpCiAgCXsK KioqKioqKioqKioqKioqIGdmY19idWlsZF9hcnJheV9yZWYgKHRyZWUgYmFz ZSwgdHJlZSBvZmYKKioqIDM3OSwzODQgKioqKgotLS0gMzkyLDM5OSAtLS0t CiAgCSAgICB9CiAgCSAgZWxzZSBpZiAoR0ZDX0RFQ0xfU1VCUkVGX0FSUkFZ X1AgKGRlY2wpKQogIAkgICAgc3BhbiA9IEdGQ19ERUNMX1NQQU4gKGRlY2wp OworIAkgIGVsc2UgaWYgKHNwYW4pCisgCSAgICBzcGFuID0gZm9sZF9jb252 ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgc3Bhbik7CiAgCSAgZWxzZQog IAkgICAgZ2NjX3VucmVhY2hhYmxlICgpOwogIAl9CioqKioqKioqKioqKioq KiB0cmFuc19jb2RlIChnZmNfY29kZSAqIGNvZGUsIHRyZWUgY29uZCkKKioq IDE2MjMsMTYyOCAqKioqCi0tLSAxNjM4LDE2NDQgLS0tLQogIAkgIGdmY19h ZGRfZXhwcl90b19ibG9jayAoJmJsb2NrLCByZXMpOwogIAl9CiAgCisgICAg ICAgZ2ZjX2N1cnJlbnRfbG9jdXMgPSBjb2RlLT5sb2M7CiAgICAgICAgZ2Zj X3NldF9iYWNrZW5kX2xvY3VzICgmY29kZS0+bG9jKTsKICAKICAgICAgICBz d2l0Y2ggKGNvZGUtPm9wKQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9kZWZlcnJlZF9jaGFyYWN0ZXJfMS5mOTAKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQoqKiogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZlcnJl ZF9jaGFyYWN0ZXJfMS5mOTAJKHJldmlzaW9uIDApCi0tLSBnY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVkX2NoYXJhY3Rlcl8xLmY5MAkod29y a2luZyBjb3B5KQoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSw0 MCAtLS0tCisgISB7IGRnLWRvIHJ1biB9CisgIQorICEgVGVzdHMgdGhlIGZp eCBmb3IgUFI1MDIyMQorICEKKyAhIENvbnRyaWJ1dGVkIGJ5IENsaXZlIFBh Z2UgIDxjbGl2ZWdwYWdlQGdtYWlsLmNvbT4KKyAhICAgICAgICAgICAgYW5k IFRvYmlhcyBCdXJudXMgIDxidXJudXNAZ2NjLmdudS5vcmc+CisgIQorICEg VGhpcyBpcyBmcm9tIGNvbW1lbnQgIzIgYnkgVG9iaWFzIEJ1cm51cy4KKyAh CisgbW9kdWxlIG0KKyAgIGNoYXJhY3RlcihsZW49OiksIHNhdmUsIGFsbG9j YXRhYmxlIDo6IHN0cig6KQorICAgY2hhcmFjdGVyKGxlbj0yKSwgcGFyYW1l dGVyIDo6IGNvbnN0KDMpID0gWyJhMSIsICJiMiIsICJjMyJdCisgZW5kCisg CisgICB1c2UgbQorICAgY2FsbCB0ZXN0KCkKKyAgIGlmKGFsbG9jYXRlZChz dHIpKSBkZWFsbG9jYXRlKHN0cikKKyAgIGNhbGwgZm9vCisgY29udGFpbnMK KyAgIHN1YnJvdXRpbmUgdGVzdCgpCisgICAgIGNhbGwgZG9pdCgpCisgISAg ICBwcmludCAqLCAnc3RybGVuPScsbGVuKHN0ciksJyAvIGFycmF5IHNpemUg PScsc2l6ZShzdHIpCisgISAgICBwcmludCAnKDNhKScsICc+JyxzdHIoMSks JzwnCisgISAgICBwcmludCAnKDNhKScsICc+JyxzdHIoMiksJzwnCisgISAg ICBwcmludCAnKDNhKScsICc+JyxzdHIoMyksJzwnCisgICAgIGlmIChhbnkg KHN0ciAubmUuIGNvbnN0KSkgY2FsbCBhYm9ydAorICAgZW5kIHN1YnJvdXRp bmUgdGVzdAorICAgc3Vicm91dGluZSBkb2l0KCkKKyAgICAgc3RyID0gY29u c3QKKyAgIGVuZCBzdWJyb3V0aW5lIGRvaXQKKyAgIHN1YnJvdXRpbmUgZm9v CisgIQorICEgVGhpcyBpcyB0aGUgb3JpZ2luYWwgUFIgZnJvbSBDbGl2ZSBQ YWdlCisgIQorICAgICBjaGFyYWN0ZXIoOiksIGFsbG9jYXRhYmxlLCBkaW1l bnNpb24oOikgOjogYXJyYXkKKyAgICAgYXJyYXkgPSAoLyd4eCcsICd5eScs ICd6eicvKQorICEgICAgcHJpbnQgKiwgJ2FycmF5PScsIGFycmF5LCBsZW4o YXJyYXkoMSkpLCBzaXplKGFycmF5KQorICAgICBpZiAoYW55IChhcnJheSAu bmUuIFsieHgiLCAieXkiLCAienoiXSkpIGNhbGwgYWJvcnQKKyAgIGVuZCBz dWJyb3V0aW5lCisgZW5kCkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL2RlZmVycmVkX2NoYXJhY3Rlcl8yLmY5MAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVk X2NoYXJhY3Rlcl8yLmY5MAkocmV2aXNpb24gMCkKLS0tIGdjYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVyXzIuZjkwCSh3b3Jr aW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDg1 IC0tLS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBUZXN0cyB0aGUgZml4 IGZvciBQUjY4MjE2CisgIQorICEgUmVwb3J0ZWQgb24gY2xmOiBodHRwczov L2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhdG9waWMvY29tcC5sYW5nLmZv cnRyYW4vZVdRVEtmcUtMWmMKKyAhCisgUFJPR1JBTSBoZWxsbworICEKKyAh IFRoaXMgaXMgYmFzZWQgb24gdGhlIGZpcnN0IHRlc3RjYXNlLCBmcm9tIEZy YW5jaXNjbyAoQXl5eSBMTUFPKS4gT3JpZ2luYWwKKyAhIGxpbmVzIGFyZSBj b21tZW50ZWQgb3V0LiBUaGUgc2Vjb25kIHRlc3RjYXNlIGZyb20gdGhpcyB0 aHJlYWQgaXMgYWNhbGxlZAorICEgYXQgdGhlIGVuZCBvZiB0aGUgcHJvZ3Jh bS4KKyAhCisgICAgIElNUExJQ0lUIE5PTkUKKyAKKyAgICAgQ0hBUkFDVEVS KExFTj06KSxESU1FTlNJT04oOiksQUxMT0NBVEFCTEUgOjogYXJyYXlfbGlu ZWFzCisgICAgIENIQVJBQ1RFUihMRU49OiksRElNRU5TSU9OKDopLEFMTE9D QVRBQkxFIDo6IGFycmF5X2NvcGlhCisgICAgIGNoYXJhY3RlciAoMyksIGRp bWVuc2lvbiAoMikgOjogYXJyYXlfZmlqbyA9IFsiYWJjIiwiZGVmIl0KKyAg ICAgY2hhcmFjdGVyICgxMDApIDo6IGJ1ZmZlcgorICAgICBJTlRFR0VSIDo6 IGxhcmdvICwgY2FudF9saW5lYXMgLCBpCisgCisgICAgIHdyaXRlIChidWZm ZXIsICIoMmEzKSIpIGFycmF5X2Zpam8KKyAKKyAhICAgIFdSSVRFKCosKikg JyBFc2NyaWJhIHVuIG51bWVybyBwYXJhIGVsIGxhcmdvIGRlIGNhZGEgbGlu ZWEnCisgISAgICBSRUFEKCosKikgbGFyZ28KKyAgICAgbGFyZ28gPSBMRU4g KGFycmF5X2Zpam8pCisgCisgISAgICBXUklURSgqLCopICcgRXNjcmliYSBs YSBjYW50aWRhZCBkZSBsaW5lYXMnCisgISAgICBSRUFEKCosKikgY2FudF9s aW5lYXMKKyAgICAgY2FudF9saW5lYXMgPSBzaXplIChhcnJheV9maWpvLCAx KQorIAorICAgICBBTExPQ0FURShDSEFSQUNURVIoTEVOPWxhcmdvKSA6OiBh cnJheV9saW5lYXMoY2FudF9saW5lYXMpKQorIAorICEgICAgV1JJVEUoKiwq KSAnRXNjcmliYSBlbCBhcnJheScsIGxlbihhcnJheV9saW5lYXMpLCBzaXpl KGFycmF5X2xpbmVhcykKKyAgICAgUkVBRChidWZmZXIsIigyYTMpIikgKGFy cmF5X2xpbmVhcyhpKSxpPTEsY2FudF9saW5lYXMpCisgCisgISAgICBXUklU RSgqLCopICdBcnJheSBndWFyZGFkbzogJworICEgICAgRE8gaT0xLGNhbnRf bGluZWFzCisgISAgICBXUklURSgqLCopIGFycmF5X2xpbmVhcyhpKQorICEg ICAgRU5ERE8KKyAgICAgIGlmIChhbnkgKGFycmF5X2xpbmVhcyAubmUuIGFy cmF5X2Zpam8pKSBjYWxsIGFib3J0CisgCisgISBUaGUgZm9sbG93aW5nIGFy ZSBhZGRpdGlvbmFsIHRlc3RzIGJleW9uZCB0aGF0IG9mIHRoZSBvcmlnaW5h bC4KKyAhCisgISBDaGVjayB0aGF0IGFsbG9jYXRpb24gd2l0aCBzb3VyY2Ug PSBhbm90aGVyIGRlZmVycmVkIGxlbmd0aCBpcyBPSworICAgICAgYWxsb2Nh dGUgKGFycmF5X2NvcGlhLCBzb3VyY2UgPSBhcnJheV9saW5lYXMpCisgICAg ICBpZiAoYW55IChhcnJheV9jb3BpYSAubmUuIGFycmF5X2Zpam8pKSBjYWxs IGFib3J0CisgICAgICBkZWFsbG9jYXRlIChhcnJheV9saW5lYXMsIGFycmF5 X2NvcGlhKQorIAorICEgQ2hlY2sgdGhhdCBhbGxvY2F0aW9uIHdpdGggc291 cmNlID0gYSBub24tZGVmZXJyZWQgbGVuZ3RoIGlzIE9LCisgICAgICBhbGxv Y2F0ZSAoYXJyYXlfbGluZWFzLCBzb3VyY2UgPSBhcnJheV9maWpvKQorICAg ICAgaWYgKGFueSAoYXJyYXlfbGluZWFzIC5uZS4gYXJyYXlfZmlqbykpIGNh bGwgYWJvcnQKKyAgICAgIGRlYWxsb2NhdGUgKGFycmF5X2xpbmVhcykKKyAK KyAhIENoZWNrIHRoYXQgYWxsb2NhdGlvbiB3aXRoIE1PTEQgPSBhIG5vbi1k ZWZlcnJlZCBsZW5ndGggaXMgT0sKKyAgICAgIGFsbG9jYXRlIChhcnJheV9j b3BpYSwgbW9sZCA9IFthcnJheV9maWpvKDopKDE6MiksIGFycmF5X2Zpam8o OikoMToyKV0pCisgICAgICBpZiAoc2l6ZSAoYXJyYXlfY29waWEsIDEpIC5u ZS4gNCkgY2FsbCBhYm9ydAorICAgICAgaWYgKExFTiAoYXJyYXlfY29waWEs IDEpIC5uZS4gMikgY2FsbCBhYm9ydAorIAorICEgQ2hlY2sgdGhhdCBhbGxv Y2F0aW9uIHdpdGggTU9MRCA9IGFub3RoZXIgZGVmZXJyZWQgbGVuZ3RoIGlz IE9LCisgICAgICBhbGxvY2F0ZSAoYXJyYXlfbGluZWFzLCBtb2xkID0gYXJy YXlfY29waWEpCisgICAgICBpZiAoc2l6ZSAoYXJyYXlfY29waWEsIDEpIC5u ZS4gNCkgY2FsbCBhYm9ydAorICAgICAgaWYgKExFTiAoYXJyYXlfY29waWEs IDEpIC5uZS4gMikgY2FsbCBhYm9ydAorICAgICAgZGVhbGxvY2F0ZSAoYXJy YXlfbGluZWFzLCBhcnJheV9jb3BpYSkKKyAKKyAhICAgIFJFQUQoKiwqKQor ICAgICAgY2FsbCB0ZXN0ZGVmY2hhcgorIGNvbnRhaW5zCisgICAgICBzdWJy b3V0aW5lIHRlc3RkZWZjaGFyCisgIQorICEgVGhpcyBpcyB0aGUgdGVzdGNh c2UgaW4gdGhlIGFib3ZlIHRocmVhZCBmcm9tIEJsb2tidXN0ZXIKKyAhCisg ICAgICAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgICAgICAgY2hhcmFjdGVy KDopLCBhbGxvY2F0YWJsZSA6OiB0ZXN0KDopCisgCisgICAgICAgICAgIGFs bG9jYXRlKGNoYXJhY3RlcigzKSA6OiB0ZXN0KDIpKQorICAgICAgICAgICB0 ZXN0KDEpID0gJ2FiYycKKyAgICAgICAgICAgdGVzdCgyKSA9ICdkZWYnCisg ICAgICAgICAgIGlmIChhbnkgKHRlc3QgLm5lLiBbJ2FiYycsICdkZWYnXSkp IGNhbGwgYWJvcnQKKyAKKyAgICAgICAgICAgdGVzdCA9IFsnYWEnLCdiYics J2NjJ10KKyAgICAgICAgICAgaWYgKGFueSAodGVzdCAubmUuIFsnYWEnLCAn YmInLCAnY2MnXSkpIGNhbGwgYWJvcnQKKyAKKyAgICAgIGVuZCBzdWJyb3V0 aW5lIHRlc3RkZWZjaGFyCisgCisgRU5EIFBST0dSQU0KSW5kZXg6IGdjYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVyXzMuZjkw Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVyXzMuZjkwCShyZXZpc2lvbiAw KQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZlcnJlZF9jaGFy YWN0ZXJfMy5mOTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqCioq KiAwICoqKioKLS0tIDEsNDYgLS0tLQorICEge2RnX2RvIHJ1biB9CisgIQor ICEgVGVzdHMgdGhlIGZpeCBmb3IgUFI2NzY3NAorICEKKyAhIENvbnRyaWJ1 dGVkIGJ5IEtyaXN0b3BoZXIgS3VobG1hbiAgPGtyaXN0b3BoZXIua3VobG1h bkBnbWFpbC5jb20+CisgIQorIHByb2dyYW0gdGVzdAorICAgaW1wbGljaXQg bm9uZQorIAorICAgdHlwZSBzdHJpbmdfdHlwZQorICAgICBjaGFyYWN0ZXIo bGVuPTopLCBhbGxvY2F0YWJsZSA6OiBuYW1lCisgICBlbmQgdHlwZSBzdHJp bmdfdHlwZQorICAgdHlwZShzdHJpbmdfdHlwZSksIGFsbG9jYXRhYmxlIDo6 IG15X3N0cmluZ190eXBlCisgCisgICBhbGxvY2F0ZShteV9zdHJpbmdfdHlw ZSkKKyAgIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MCkgOjogbXlfc3RyaW5n X3R5cGUlbmFtZSkKKyAKKyAhICBwcmludCAqLCAnbGVuZ3RoIG1haW4gcHJv Z3JhbSBiZWZvcmUnLGxlbihteV9zdHJpbmdfdHlwZSVuYW1lKQorIAorICAg Y2FsbCBpbnB1dHJlYWR3b3JkMShteV9zdHJpbmdfdHlwZSVuYW1lKQorIAor ICEgIHByaW50ICosICdsZW5ndGggbWFpbiBwcm9ncmFtIGFmdGVyJyxsZW4o bXlfc3RyaW5nX3R5cGUlbmFtZSkKKyAhICBwcmludCAqLCAnZmluYWwgcmVz dWx0OicsbXlfc3RyaW5nX3R5cGUlbmFtZQorICAgaWYgKG15X3N0cmluZ190 eXBlJW5hbWUgLm5lLiAnaGVyZSB0aGUgd29yZCBpcyBmaW5hbGx5IHNldCcp IGNhbGwgYWJvcnQKKyAKKyBjb250YWlucworICAgc3Vicm91dGluZSBpbnB1 dHJlYWR3b3JkMSh3b3JkX2ludGVybWVkaWF0ZSkKKyAgICAgY2hhcmFjdGVy KGxlbj06KSwgYWxsb2NhdGFibGUgOjogd29yZF9pbnRlcm1lZGlhdGUKKyAK KyAhICAgIHByaW50ICosICdsZW5ndGggaW50ZXJtZWRpYXRlIGJlZm9yZScs bGVuKHdvcmRfaW50ZXJtZWRpYXRlKQorICAgICBjYWxsIGlucHV0cmVhZHdv cmQyKHdvcmRfaW50ZXJtZWRpYXRlKQorICEgICAgcHJpbnQgKiwgJ2xlbmd0 aCBpbnRlcm1lZGlhdGUgYWZ0ZXInLGxlbih3b3JkX2ludGVybWVkaWF0ZSkK KyAhICAgIHByaW50ICosIHdvcmRfaW50ZXJtZWRpYXRlCisgCisgICBlbmQg c3Vicm91dGluZSBpbnB1dHJlYWR3b3JkMQorIAorICAgc3Vicm91dGluZSBp bnB1dHJlYWR3b3JkMih3b3JkKQorICAgICBjaGFyYWN0ZXIobGVuPTopLCBh bGxvY2F0YWJsZSA6OiB3b3JkCisgCisgISAgICBwcmludCAqLCAnbGVuZ3Ro IGlubmVyIGJlZm9yZScsbGVuKHdvcmQpCisgICAgIHdvcmQgPSAnaGVyZSB0 aGUgd29yZCBpcyBmaW5hbGx5IHNldCcgISB3YW50IGF1dG9tYXRpYyByZWFs bG9jYXRpb24gdG8gaGFwcGVuIGhlcmUKKyAhICAgIHByaW50ICosICdsZW5n dGggaW5uZXIgYWZ0ZXInLGxlbih3b3JkKQorICEgICAgcHJpbnQgKiwgd29y ZAorIAorICAgZW5kIHN1YnJvdXRpbmUgaW5wdXRyZWFkd29yZDIKKyBlbmQg cHJvZ3JhbSB0ZXN0CkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRn L2RlZmVycmVkX2NoYXJhY3Rlcl80LmY5MAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVkX2No YXJhY3Rlcl80LmY5MAkocmV2aXNpb24gMCkKLS0tIGdjYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVyXzQuZjkwCSh3b3JraW5n IGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDMwIC0t LS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBDaGVjayB0aGF0IFBSNTAy MjEgY29tbWVudCAjNCBpcyBmaXhlZC4KKyAhCisgISBDb250cmlidXRlZCBi eSBBcmplbiBNYWt1cyAgPGFyamVuLm1hcmt1czg5NUBnbWFpbC5jb20+Cisg IQorIHByb2dyYW0gY2hrX2FsbG9jX3N0cmluZworICAgICBpbXBsaWNpdCBu b25lCisgCisgICAgIGNoYXJhY3RlcihsZW49OiksIGRpbWVuc2lvbig6KSwg YWxsb2NhdGFibGUgOjogc3RyaW5ncworICAgICBjaGFyYWN0ZXIoMjApIDo6 IGJ1ZmZlcgorICAgICBpbnRlZ2VyIDo6IGkKKyAKKyAgICAgYWxsb2NhdGUo IGNoYXJhY3RlcigxMCk6OiBzdHJpbmdzKDE6MykgKQorIAorICAgICBzdHJp bmdzID0gWyAiQSAgICIsICJDICAgIiwgIkFCQ0QiLCAiViAgICIgXQorIAor ICAgICBpZiAobGVuKHN0cmluZ3MpIC5uZS4gNCkgY2FsbCBhYm9ydAorICAg ICBpZiAoc2l6ZShzdHJpbmdzLCAxKSAubmUuIDQpIGNhbGwgYWJvcnQKKyAg ICAgaWYgKGFueSAoc3RyaW5ncyAubmUuIFtjaGFyYWN0ZXIobGVuPTQpIDo6 ICJBIiwgIkMiLCAiQUJDRCIsICJWIl0pKSBjYWxsIGFib3J0CisgCisgICAg IHN0cmluZ3MgPSBbY2hhcmFjdGVyKGxlbj00KSA6OiAiQSIsICJDIiwgIkFC Q0RFIiwgIlYiLCAienp6eiJdCisgCisgICAgIGlmIChsZW4oc3RyaW5ncykg Lm5lLiA0KSBjYWxsIGFib3J0CisgICAgIGlmIChzaXplKHN0cmluZ3MsIDEp IC5uZS4gNSkgY2FsbCBhYm9ydAorICAgICBpZiAoYW55IChzdHJpbmdzIC5u ZS4gW2NoYXJhY3RlcihsZW49NCkgOjogIkEiLCAiQyIsICJBQkNEIiwgIlYi LCAienp6eiJdKSkgY2FsbCBhYm9ydAorIAorICAgICB3cml0ZSAoYnVmZmVy LCAiKDVhNCkiKSBzdHJpbmdzCisgICAgIGlmIChidWZmZXIgLm5lLiAiQSAg IEMgICBBQkNEViAgIHp6enoiKSBjYWxsIGFib3J0CisgZW5kIHByb2dyYW0g Y2hrX2FsbG9jX3N0cmluZwpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9kZWZlcnJlZF9jaGFyYWN0ZXJfNS5mOTAKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQoqKiogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZlcnJl ZF9jaGFyYWN0ZXJfNS5mOTAJKHJldmlzaW9uIDApCi0tLSBnY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2RlZmVycmVkX2NoYXJhY3Rlcl81LmY5MAkod29y a2luZyBjb3B5KQoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSwz MiAtLS0tCisgISB7IGRnLWRvIHJ1biB9CisgIQorICEgVGVzdHMgdGhhdCBQ UjYzOTMyIHN0YXlzIGZpeGVkLgorICEKKyAhIENvbnRyaWJ1dGVkIGJ5IFZh bGVyeSBXZWJlciAgPHZhbGVyeXdlYmVyQGhvdG1haWwuY29tPgorICEKKyBt b2R1bGUgbW9kCisgICB0eXBlIDo6IHQKKyAgICAgIGNoYXJhY3Rlcig6KSwg YWxsb2NhdGFibGUgOjogYworICAgICAgaW50ZWdlciA6OiBpCisgICAgY29u dGFpbnMKKyAgICAgIHByb2NlZHVyZSwgcGFzcyA6OiBnZXQKKyAgIGVuZCB0 eXBlIHQKKyAgIHR5cGUgOjogdQorICAgICAgY2hhcmFjdGVyKDopLCBhbGxv Y2F0YWJsZSA6OiBjCisgICBlbmQgdHlwZSB1CisgY29udGFpbnMKKyAgIHN1 YnJvdXRpbmUgZ2V0KHRoaXMsIGEpCisgICAgIGNsYXNzKHQpLCBpbnRlbnQo aW4pIDo6IHRoaXMKKyAgICAgY2hhcmFjdGVyKDopLCBhbGxvY2F0YWJsZSwg aW50ZW50KG91dCksIG9wdGlvbmFsIDo6IGEKKyAgICAgaWYgKHByZXNlbnQg KGEpKSBhID0gdGhpcyVjCisgICBlbmQgc3Vicm91dGluZSBnZXQKKyBlbmQg bW9kdWxlIG1vZAorIAorIHByb2dyYW0gdGVzdAorICAgdXNlIG1vZAorICAg dHlwZSh0KSA6OiBhCisgICB0eXBlKHUpIDo6IGIKKyAgIGElYyA9ICdzb21l dGhpbmcnCisgICBjYWxsIGElZ2V0IChhID0gYiVjKQorICAgaWYgKGIlYyAu bmUuICdzb21ldGhpbmcnKSBjYWxsIGFib3J0CisgZW5kIHByb2dyYW0gdGVz dApJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZlcnJlZF9j aGFyYWN0ZXJfNi5mOTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2Nj L3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9kZWZlcnJlZF9jaGFyYWN0ZXJfNi5m OTAJKHJldmlzaW9uIDApCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRn L2RlZmVycmVkX2NoYXJhY3Rlcl82LmY5MAkod29ya2luZyBjb3B5KQoqKioq KioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSw1NCAtLS0tCisgISB7IGRn LWRvIHJ1biB9CisgIQorICEgVGVzdHMgdGhhdCBQUjY2NDA4IHN0YXlzIGZp eGVkLgorICEKKyAhIENvbnRyaWJ1dGVkIGJ5IDx3ZXJuZXIuYmxva2J1c3Rl ckBnbWFpbC5jb20+CisgIQorIG1vZHVsZSBteXRlc3QKKyAKKyAgICAgaW1w bGljaXQgbm9uZQorIAorICAgICB0eXBlIHZhcnkKKyAgICAgICAgIGNoYXJh Y3Rlcig6KSwgYWxsb2NhdGFibGUgOjogc3RyaW5nCisgICAgIGVuZCB0eXBl IHZhcnkKKyAKKyAgICAgaW50ZXJmYWNlIGFzc2lnbm1lbnQoPSkKKyAgICAg ICAgIG1vZHVsZSBwcm9jZWR1cmUgY2hhcl9lcV92YXJ5CisgICAgIGVuZCBp bnRlcmZhY2UgYXNzaWdubWVudCg9KQorIAorIGNvbnRhaW5zCisgCisgICAg IHN1YnJvdXRpbmUgY2hhcl9lcV92YXJ5KG15X2NoYXIsbXlfdmFyeSkKKyAg ICAgICAgIGNoYXJhY3Rlcig6KSwgYWxsb2NhdGFibGUsIGludGVudChvdXQp IDo6IG15X2NoYXIKKyAgICAgICAgIHR5cGUodmFyeSksIGludGVudChpbikg OjogbXlfdmFyeQorICAgICAgICAgbXlfY2hhciA9IG15X3Zhcnklc3RyaW5n CisgICAgIGVuZCBzdWJyb3V0aW5lIGNoYXJfZXFfdmFyeQorIAorIGVuZCBt b2R1bGUgbXl0ZXN0CisgCisgCisgcHJvZ3JhbSB0aGlzdGVzdAorIAorICAg ICB1c2UgbXl0ZXN0LCBvbmx5OiB2YXJ5LCBhc3NpZ25tZW50KD0pCisgICAg IGltcGxpY2l0IG5vbmUKKyAKKyAgICAgY2hhcmFjdGVyKDopLCBhbGxvY2F0 YWJsZSA6OiB0ZXN0X2NoYXIKKyAgICAgY2hhcmFjdGVyKDE0KSwgcGFyYW1l dGVyIDo6IHN0ciA9ICdleGFtcGxlIHN0cmluZycKKyAgICAgdHlwZSh2YXJ5 KSA6OiB0ZXN0X3ZhcnkKKyAgICAgdHlwZSh2YXJ5KSA6OiBteV9zdHVmZgor IAorIAorICAgICB0ZXN0X3Zhcnklc3RyaW5nID0gc3RyCisgICAgIGlmICh0 ZXN0X3Zhcnklc3RyaW5nIC5uZS4gc3RyKSBjYWxsIGFib3J0CisgCisgISBU aGlzIHByZXZpb3VzbHkgZ2F2ZSBhIGJsYW5rIHN0cmluZy4KKyAgICAgbXlf c3R1ZmYlc3RyaW5nID0gdGVzdF92YXJ5CisgICAgIGlmIChteV9zdHVmZiVz dHJpbmcgLm5lLiBzdHIpIGNhbGwgYWJvcnQKKyAKKyAgICAgdGVzdF9jaGFy ID0gdGVzdF92YXJ5CisgICAgIGlmICh0ZXN0X2NoYXIgLm5lLiBzdHIpIGNh bGwgYWJvcnQKKyAKKyAgICAgbXlfc3R1ZmYgPSB0ZXN0X3ZhcnkKKyAgICAg aWYgKG15X3N0dWZmJXN0cmluZyAubmUuIHN0cikgY2FsbCBhYm9ydAorIAor IGVuZCBwcm9ncmFtIHRoaXN0ZXN0CkluZGV4OiBnY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL2RlZmVycmVkX2NoYXJhY3Rlcl83LmY5MAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Rl ZmVycmVkX2NoYXJhY3Rlcl83LmY5MAkocmV2aXNpb24gMCkKLS0tIGdjYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZGVmZXJyZWRfY2hhcmFjdGVyXzcuZjkw CSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0t LSAxLDM5IC0tLS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBUZXN0cyB0 aGUgZml4IGZvciBwcjQ5OTU0LCBpbiB3aGljaCBjb25jYXRlbmF0aW9uIHRv IGRlZmVycmVkIGxlbmd0aCBjaGFyYWN0ZXIKKyAhIGFycmF5cywgYXQgYmVz dCwgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4KKyAhCisgIQorICEKKyBpbXBs aWNpdCBub25lCisgICBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6 OiBhMSg6KQorICAgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjog YTIoOiksIGEzKDopCisgICBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJs ZSA6OiBiMQorICAgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjog YjIKKyAgIGNoYXJhY3Rlcig4KSA6OiBjaHIgPSAiSUpLTE1OT1AiCisgICBj aGFyYWN0ZXIoNDgpIDo6IGJ1ZmZlcgorIAorICAgYTEgPSBbIkFCQ0RFRkdI IiwiYWJjZGVmZ2giXQorICAgYTIgPSAiXyIvL2ExLy9jaHIvLyJfIgorICAg aWYgKGFueSAoYTIgLm5lLiBbIl9BQkNERUZHSElKS0xNTk9QXyIsIl9hYmNk ZWZnaElKS0xNTk9QXyJdKSkgY2FsbCBhYm9ydAorIAorICEgQ2hlY2sgdGhh dCB0aGUgZGVzY3JpcHRvciBkdHlwZSBpcyBPSyAtIHRoZSBhcnJheSB3cml0 ZSBuZWVkcyBpdC4KKyAgIHdyaXRlIChidWZmZXIsICIoMmExOCkiKSBhMgor ICAgaWYgKHRyaW0gKGJ1ZmZlcikgLm5lLiAiX0FCQ0RFRkdISUpLTE1OT1Bf X2FiY2RlZmdoSUpLTE1OT1BfIikgY2FsbCBhYm9ydAorIAorICEgTWFrZSBz dXJlIHNjYWxhcnMgc3Vydml2ZWQgdGhlIGZpeCEKKyAgIGIxID0gIkFCQ0RF RkdIIgorICAgYjIgPSAiXyIvL2IxLy9jaHIvLyJfIgorICAgaWYgKGIyIC5u ZS4gIl9BQkNERUZHSElKS0xNTk9QXyIpIGNhbGwgYWJvcnQKKyAKKyAhIENo ZWNrIHRoZSBkZXBlbmRlbmN5IGlzIGRldGVjdGVkIGFuZCBkZWFsdCB3aXRo IGJ5IGdlbmVyYXRpb24gb2YgYSB0ZW1wb3JhcnkuCisgICBhMSA9ICI/Ii8v YTEvLyI/IgorICAgaWYgKGFueSAoYTEgLm5lLiBbIj9BQkNERUZHSD8iLCI/ YWJjZGVmZ2g/Il0pKSBjYWxsIGFib3J0CisgISBXaXRoIGFuIGFycmF5IHJl ZmVyZW5jZS4uLgorICAgYTEgPSAiPyIvL2ExKDE6MikvLyI/IgorICAgaWYg KGFueSAoYTEgLm5lLiBbIj8/QUJDREVGR0g/PyIsIj8/YWJjZGVmZ2g/PyJd KSkgY2FsbCBhYm9ydAorICEuLi4gdG9nZXRoZXIgd2l0aCBhIHN1YnN0cmlu Zy4KKyAgIGExID0gIj8iLy9hMSgxOjEpKDI6NCkvLyI/IgorICAgaWYgKGFu eSAoYTEgLm5lLiBbIj8/QUI/Il0pKSBjYWxsIGFib3J0CisgY29udGFpbnMK KyBlbmQK --001a114091866b4f86052483a87f--