From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by sourceware.org (Postfix) with ESMTPS id 0881A3858C5F for ; Thu, 8 Feb 2024 14:47:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0881A3858C5F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=baylibre.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0881A3858C5F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::102e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707403643; cv=none; b=UWBzRbDCr3eisGaP/lLA8fjp2bXgMCB0NQHFth6rLuqdrqao8mdSVyfukYKXlZdxJil167mXoj4yyS3KWvH028szDhxpyvBD7I9hkXDlLKIEdZGEjw5/ifhPraJvwmkKoQEtKtybvZJpUqhkPD5CAC/cdZzwcH7fHgSYVW2+2eE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707403643; c=relaxed/simple; bh=htI3oGngmYhgTiVXgmmPavzS7055qDUJrEXcl0Yk5g4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:From:Subject:To; b=CEJ0k765IO4bvHBUvUumsceuvSz4wLqnPMzkKNWAhYzkb/KMLn4Bn3/tBJhgB/RuxPP5SEibLgPJrMFIie+DvPTDjmFGGvnBgL3T6UhhYH09meh+eQTnLQoQsf8sFgQt4VyvGKTV/ResbXuE8khb+pOjg33vzczR/CtxEPEpvJg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-296c58a11d0so1397187a91.3 for ; Thu, 08 Feb 2024 06:47:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1707403636; x=1708008436; darn=gcc.gnu.org; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=Ex9s5iUTLtD8Wf/d2e6ZVIOqrl1KqswIHKltvwT4vW0=; b=VK4kjCdY7VGdnu5c4IcAaYlImz0fTNIig7ifKIZznO1g+X7gxAypmYarQUW3Z2aCmf PoHgKCpQDBnixJ9y/9MLHwibHgCHAI16eAnUXLiVboi63uTzMowu2mwnSt/EiWfut612 QdKw9loRig+FPbB+bHA7CQA/phbe1XS90UYy7rnS9zC7kpgTqJ+LzwAgfb8rGIcZ2EXm 2unK2cEiXHkx+BJAMGpS5kj2GWFzRpxhKUP7fBKn1wG8FmVJ4y6H7r3LfEOVwyRnGEo0 wRzPIH8CvfjEXnmUrJgPUS2L0dVoXanJEf5XSzoQNesqfAGZ5yTfxJkYAqsW01d/nIUf iHrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707403636; x=1708008436; h=to:subject:from:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Ex9s5iUTLtD8Wf/d2e6ZVIOqrl1KqswIHKltvwT4vW0=; b=ejpr8eNThkgRUKj2R69Z1YE093Ble9lPE0YRQhdHj8j+EAF7fzl18/1JwTXIMjf3wf 95I6Xq/fIAYQX5MPGELNinAB7RDgPnXyOZEv87bB1DYnX2qTeUvpo3cIq+ruw8PoME0a uHcu/WGpTe30xHv63w6oxVTb4UI9RDARuoPi0xOnVbCx99QheImkDHrulkvCd7KNhid5 UE9Zj5v+Tkbb88u7VA7u7WnDWT2fX0ZmNM+94nyr0N2UHH7tX0ecisuRoLJhF2FBWF4T EygRtCGuXz0D3L5dWvqStq7ui4jsJpx6QmbRnT/USlauMqSQROPSgPC7akwHDPJKRZ/Q FwbA== X-Gm-Message-State: AOJu0YwrO3daUUBENgs3IQvf19dTMBRUqpjRn8fEdT8NaAoXDfMbaXil JzJkLqV/BP36mMQx3jDjrg9ATVguRDz6ZgnUXWKlu28u+EGT0z5mprEIs+42B2w= X-Google-Smtp-Source: AGHT+IFadW0F0Xoeuz3cqp9Zv3BrHWXrJdt3rRUtxmba8tkwWn8TUYiburi1EQNunUG9AQ3kp3Dh3g== X-Received: by 2002:a17:90b:4f87:b0:296:1d2a:6245 with SMTP id qe7-20020a17090b4f8700b002961d2a6245mr6411943pjb.18.1707403635873; Thu, 08 Feb 2024 06:47:15 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUW8qGxAjziKAUFA0QOEH3T6vNnIvIaYCccQ9MLbY3G8yu/caKmr4rQLlSyEsXD+tgTvqWeJ5ZOLcy1m3SMr4XccOFzqpY4W9AvzXtn5Izg7okd2LQIHW0taa/9VVv+9DlxJGzZVJczmSZkZaxFq8lUxg== Received: from [192.168.50.226] (112-104-16-194.adsl.dynamic.seed.net.tw. [112.104.16.194]) by smtp.gmail.com with ESMTPSA id br15-20020a17090b0f0f00b00296bae431ecsm1622218pjb.48.2024.02.08.06.47.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 08 Feb 2024 06:47:15 -0800 (PST) Content-Type: multipart/mixed; boundary="------------2NqXIty1h0Ie0ogvuydvtY01" Message-ID: <9209bd62-7ca1-4480-8497-d402b2889a72@baylibre.com> Date: Thu, 8 Feb 2024 22:47:13 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Chung-Lin Tang Subject: [PATCH, OpenACC 2.7] struct/array reductions for Fortran To: gcc-patches , gfortran , Tobias Burnus , Thomas Schwinge X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------2NqXIty1h0Ie0ogvuydvtY01 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Tobias, Thomas, this patch adds support for Fortran to use arrays and struct(record) types in OpenACC reductions. There is still some shortcomings in the current state, mainly that only explicit-shaped arrays can be used (like its C counterpart). Anything else is currently a bit more complicated in the middle-end, since the existing reduction code creates an "init-op" (literal of initial values) which can't be done when say TYPE_MAX_VALUE (TYPE_DOMAIN (array_type)) is not a tree constant. I think we'll be on the hook to solve this later, but I think the current state is okay to submit. Tested without regressions on mainline (on top of first struct/array reduction patch[1]) Thanks, Chung-Lin [1] https://gcc.gnu.org/pipermail/gcc-patches/2024-January/641669.html 2024-02-08 Chung-Lin Tang gcc/fortran/ChangeLog: * openmp.cc (oacc_reduction_defined_type_p): New function. (resolve_omp_clauses): Adjust OpenACC array reduction error case. Use oacc_reduction_defined_type_p for OpenACC. * trans-openmp.cc (gfc_trans_omp_array_reduction_or_udr): Add 'bool openacc' parameter, adjust part of function to be !openacc only. (gfc_trans_omp_reduction_list): Add 'bool openacc' parameter, pass to calls to gfc_trans_omp_array_reduction_or_udr. (gfc_trans_omp_clauses): Add 'openacc' argument to calls to gfc_trans_omp_reduction_list. (gfc_trans_omp_do): Pass 'op == EXEC_OACC_LOOP' as 'bool openacc' parameter in call to gfc_trans_omp_clauses. gcc/ChangeLog: * omp-low.cc (omp_reduction_init_op): Add checking if reduced array has constant bounds. (lower_oacc_reductions): Add handling of error_mark_node. gcc/testsuite/ChangeLog: * gfortran.dg/goacc/array-reduction.f90: Adjust testcase. * gfortran.dg/goacc/reduction.f95: Likewise. libgomp/ChangeLog: * libgomp/testsuite/libgomp.oacc-fortran/reduction-9.f90: New testcase. * libgomp/testsuite/libgomp.oacc-fortran/reduction-10.f90: Likewise. * libgomp/testsuite/libgomp.oacc-fortran/reduction-11.f90: Likewise. * libgomp/testsuite/libgomp.oacc-fortran/reduction-12.f90: Likewise. * libgomp/testsuite/libgomp.oacc-fortran/reduction-13.f90: Likewise. --------------2NqXIty1h0Ie0ogvuydvtY01 Content-Type: text/plain; charset=UTF-8; name="openacc-2.7b-struct-array-reduction-fortran.patch" Content-Disposition: attachment; filename="openacc-2.7b-struct-array-reduction-fortran.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL29wZW5tcC5jYyBiL2djYy9mb3J0cmFuL29wZW5t cC5jYwppbmRleCAwYWY4MGQ1NGZhZC4uNGJiYTllNjY2ZDYgMTAwNjQ0Ci0tLSBhL2djYy9m b3J0cmFuL29wZW5tcC5jYworKysgYi9nY2MvZm9ydHJhbi9vcGVubXAuY2MKQEAgLTcwNDcs NiArNzA0Nyw3MiBAQCBvYWNjX2lzX2xvb3AgKGdmY19jb2RlICpjb2RlKQogCSB8fCBjb2Rl LT5vcCA9PSBFWEVDX09BQ0NfTE9PUDsKIH0KIAorc3RhdGljIGJvb2wKK29hY2NfcmVkdWN0 aW9uX2RlZmluZWRfdHlwZV9wIChlbnVtIGdmY19vbXBfcmVkdWN0aW9uX29wIHJvcCwgZ2Zj X3R5cGVzcGVjICp0cykKK3sKKyAgaWYgKHJvcCA9PSBPTVBfUkVEVUNUSU9OX1VTRVIgfHwg cm9wID09IE9NUF9SRURVQ1RJT05fTk9ORSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYg KHRzLT50eXBlID09IEJUX0lOVEVHRVIpCisgICAgc3dpdGNoIChyb3ApCisgICAgICB7Cisg ICAgICBjYXNlIE9NUF9SRURVQ1RJT05fQU5EOgorICAgICAgY2FzZSBPTVBfUkVEVUNUSU9O X09SOgorICAgICAgY2FzZSBPTVBfUkVEVUNUSU9OX0VRVjoKKyAgICAgIGNhc2UgT01QX1JF RFVDVElPTl9ORVFWOgorCXJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisJcmV0dXJu IHRydWU7CisgICAgICB9CisKKyAgaWYgKHRzLT50eXBlID09IEJUX0xPR0lDQUwpCisgICAg c3dpdGNoIChyb3ApCisgICAgICB7CisgICAgICBjYXNlIE9NUF9SRURVQ1RJT05fQU5EOgor ICAgICAgY2FzZSBPTVBfUkVEVUNUSU9OX09SOgorICAgICAgY2FzZSBPTVBfUkVEVUNUSU9O X0VRVjoKKyAgICAgIGNhc2UgT01QX1JFRFVDVElPTl9ORVFWOgorCXJldHVybiB0cnVlOwor ICAgICAgZGVmYXVsdDoKKwlyZXR1cm4gZmFsc2U7CisgICAgICB9CisKKyAgaWYgKHRzLT50 eXBlID09IEJUX1JFQUwgfHwgdHMtPnR5cGUgPT0gQlRfQ09NUExFWCkKKyAgICBzd2l0Y2gg KHJvcCkKKyAgICAgIHsKKyAgICAgIGNhc2UgT01QX1JFRFVDVElPTl9QTFVTOgorICAgICAg Y2FzZSBPTVBfUkVEVUNUSU9OX1RJTUVTOgorICAgICAgY2FzZSBPTVBfUkVEVUNUSU9OX01J TlVTOgorCXJldHVybiB0cnVlOworCisgICAgICBjYXNlIE9NUF9SRURVQ1RJT05fQU5EOgor ICAgICAgY2FzZSBPTVBfUkVEVUNUSU9OX09SOgorICAgICAgY2FzZSBPTVBfUkVEVUNUSU9O X0VRVjoKKyAgICAgIGNhc2UgT01QX1JFRFVDVElPTl9ORVFWOgorCXJldHVybiBmYWxzZTsK KworICAgICAgY2FzZSBPTVBfUkVEVUNUSU9OX01BWDoKKyAgICAgIGNhc2UgT01QX1JFRFVD VElPTl9NSU46CisJcmV0dXJuIHRzLT50eXBlICE9IEJUX0NPTVBMRVg7CisgICAgICBjYXNl IE9NUF9SRURVQ1RJT05fSUFORDoKKyAgICAgIGNhc2UgT01QX1JFRFVDVElPTl9JT1I6Cisg ICAgICBjYXNlIE9NUF9SRURVQ1RJT05fSUVPUjoKKwlyZXR1cm4gZmFsc2U7CisgICAgICBk ZWZhdWx0OgorCWdjY191bnJlYWNoYWJsZSAoKTsKKyAgICAgIH0KKworICBpZiAodHMtPnR5 cGUgPT0gQlRfREVSSVZFRCkKKyAgICB7CisgICAgICBmb3IgKGdmY19jb21wb25lbnQgKnAg PSB0cy0+dS5kZXJpdmVkLT5jb21wb25lbnRzOyBwOyBwID0gcC0+bmV4dCkKKwlpZiAoIW9h Y2NfcmVkdWN0aW9uX2RlZmluZWRfdHlwZV9wIChyb3AsICZwLT50cykpCisJICByZXR1cm4g ZmFsc2U7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgcmV0dXJuIGZhbHNlOwor fQorCiBzdGF0aWMgdm9pZAogcmVzb2x2ZV9zY2FsYXJfaW50X2V4cHIgKGdmY19leHByICpl eHByLCBjb25zdCBjaGFyICpjbGF1c2UpCiB7CkBAIC04MTM3LDEzICs4MjAzLDE1IEBAIHJl c29sdmVfb21wX2NsYXVzZXMgKGdmY19jb2RlICpjb2RlLCBnZmNfb21wX2NsYXVzZXMgKm9t cF9jbGF1c2VzLAogCSAgZWxzZQogCSAgICBuLT5zeW0tPm1hcmsgPSAxOwogCi0JICAvKiBP cGVuQUNDIGRvZXMgbm90IHN1cHBvcnQgcmVkdWN0aW9ucyBvbiBhcnJheXMuICAqLwotCSAg aWYgKG4tPnN5bS0+YXMpCisJICAvKiBPcGVuQUNDIGN1cnJlbnQgb25seSBzdXBwb3J0cyBh cnJheSByZWR1Y3Rpb25zIG9uIGV4cGxpY2l0LXNoYXBlCisJICAgICBhcnJheXMuICAqLwor CSAgaWYgKChuLT5zeW0tPmFzICYmIG4tPnN5bS0+YXMtPnR5cGUgIT0gQVNfRVhQTElDSVQp CisJICAgICAgfHwgbi0+c3ltLT5hdHRyLmNvZGltZW5zaW9uKQogCSAgICBnZmNfZXJyb3Ig KCJBcnJheSAlcXMgaXMgbm90IHBlcm1pdHRlZCBpbiByZWR1Y3Rpb24gYXQgJUwiLAogCQkg ICAgICAgbi0+c3ltLT5uYW1lLCAmbi0+d2hlcmUpOwogCX0KICAgICB9Ci0gIAorCiAgIGZv ciAobiA9IG9tcF9jbGF1c2VzLT5saXN0c1tPTVBfTElTVF9UT107IG47IG4gPSBuLT5uZXh0 KQogICAgIG4tPnN5bS0+bWFyayA9IDA7CiAgIGZvciAobiA9IG9tcF9jbGF1c2VzLT5saXN0 c1tPTVBfTElTVF9GUk9NXTsgbjsgbiA9IG4tPm5leHQpCkBAIC04Nzk3LDM5ICs4ODY1LDQ2 IEBAIHJlc29sdmVfb21wX2NsYXVzZXMgKGdmY19jb2RlICpjb2RlLCBnZmNfb21wX2NsYXVz ZXMgKm9tcF9jbGF1c2VzLAogCQkgIGNhc2UgT01QX0xJU1RfSU5fUkVEVUNUSU9OOgogCQkg IGNhc2UgT01QX0xJU1RfVEFTS19SRURVQ1RJT046CiAJCSAgY2FzZSBPTVBfTElTVF9SRURV Q1RJT05fSU5TQ0FOOgotCQkgICAgc3dpdGNoIChuLT51LnJlZHVjdGlvbl9vcCkKKwkJICAg IGlmIChvcGVuYWNjKQogCQkgICAgICB7Ci0JCSAgICAgIGNhc2UgT01QX1JFRFVDVElPTl9Q TFVTOgotCQkgICAgICBjYXNlIE9NUF9SRURVQ1RJT05fVElNRVM6Ci0JCSAgICAgIGNhc2Ug T01QX1JFRFVDVElPTl9NSU5VUzoKLQkJCWlmICghZ2ZjX251bWVyaWNfdHMgKCZuLT5zeW0t PnRzKSkKKwkJCWlmICghb2FjY19yZWR1Y3Rpb25fZGVmaW5lZF90eXBlX3AgKG4tPnUucmVk dWN0aW9uX29wLAorCQkJCQkJCSAgICAmbi0+c3ltLT50cykpCiAJCQkgIGJhZCA9IHRydWU7 Ci0JCQlicmVhazsKLQkJICAgICAgY2FzZSBPTVBfUkVEVUNUSU9OX0FORDoKLQkJICAgICAg Y2FzZSBPTVBfUkVEVUNUSU9OX09SOgotCQkgICAgICBjYXNlIE9NUF9SRURVQ1RJT05fRVFW OgotCQkgICAgICBjYXNlIE9NUF9SRURVQ1RJT05fTkVRVjoKLQkJCWlmIChuLT5zeW0tPnRz LnR5cGUgIT0gQlRfTE9HSUNBTCkKLQkJCSAgYmFkID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQkg ICAgICBjYXNlIE9NUF9SRURVQ1RJT05fTUFYOgotCQkgICAgICBjYXNlIE9NUF9SRURVQ1RJ T05fTUlOOgotCQkJaWYgKG4tPnN5bS0+dHMudHlwZSAhPSBCVF9JTlRFR0VSCi0JCQkgICAg JiYgbi0+c3ltLT50cy50eXBlICE9IEJUX1JFQUwpCi0JCQkgIGJhZCA9IHRydWU7Ci0JCQli cmVhazsKLQkJICAgICAgY2FzZSBPTVBfUkVEVUNUSU9OX0lBTkQ6Ci0JCSAgICAgIGNhc2Ug T01QX1JFRFVDVElPTl9JT1I6Ci0JCSAgICAgIGNhc2UgT01QX1JFRFVDVElPTl9JRU9SOgot CQkJaWYgKG4tPnN5bS0+dHMudHlwZSAhPSBCVF9JTlRFR0VSKQotCQkJICBiYWQgPSB0cnVl OwotCQkJYnJlYWs7Ci0JCSAgICAgIGNhc2UgT01QX1JFRFVDVElPTl9VU0VSOgotCQkJYmFk ID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQkgICAgICBkZWZhdWx0OgotCQkJYnJlYWs7CiAJCSAg ICAgIH0KKwkJICAgIGVsc2UKKwkJICAgICAgc3dpdGNoIChuLT51LnJlZHVjdGlvbl9vcCkK KwkJCXsKKwkJCWNhc2UgT01QX1JFRFVDVElPTl9QTFVTOgorCQkJY2FzZSBPTVBfUkVEVUNU SU9OX1RJTUVTOgorCQkJY2FzZSBPTVBfUkVEVUNUSU9OX01JTlVTOgorCQkJICBpZiAoIWdm Y19udW1lcmljX3RzICgmbi0+c3ltLT50cykpCisJCQkgICAgYmFkID0gdHJ1ZTsKKwkJCSAg YnJlYWs7CisJCQljYXNlIE9NUF9SRURVQ1RJT05fQU5EOgorCQkJY2FzZSBPTVBfUkVEVUNU SU9OX09SOgorCQkJY2FzZSBPTVBfUkVEVUNUSU9OX0VRVjoKKwkJCWNhc2UgT01QX1JFRFVD VElPTl9ORVFWOgorCQkJICBpZiAobi0+c3ltLT50cy50eXBlICE9IEJUX0xPR0lDQUwpCisJ CQkgICAgYmFkID0gdHJ1ZTsKKwkJCSAgYnJlYWs7CisJCQljYXNlIE9NUF9SRURVQ1RJT05f TUFYOgorCQkJY2FzZSBPTVBfUkVEVUNUSU9OX01JTjoKKwkJCSAgaWYgKG4tPnN5bS0+dHMu dHlwZSAhPSBCVF9JTlRFR0VSCisJCQkgICAgICAmJiBuLT5zeW0tPnRzLnR5cGUgIT0gQlRf UkVBTCkKKwkJCSAgICBiYWQgPSB0cnVlOworCQkJICBicmVhazsKKwkJCWNhc2UgT01QX1JF RFVDVElPTl9JQU5EOgorCQkJY2FzZSBPTVBfUkVEVUNUSU9OX0lPUjoKKwkJCWNhc2UgT01Q X1JFRFVDVElPTl9JRU9SOgorCQkJICBpZiAobi0+c3ltLT50cy50eXBlICE9IEJUX0lOVEVH RVIpCisJCQkgICAgYmFkID0gdHJ1ZTsKKwkJCSAgYnJlYWs7CisJCQljYXNlIE9NUF9SRURV Q1RJT05fVVNFUjoKKwkJCSAgYmFkID0gdHJ1ZTsKKwkJCSAgYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJICBicmVhazsKKwkJCX0KIAkJICAgIGlmICghYmFkKQogCQkgICAgICBuLT51Mi51 ZHIgPSBOVUxMOwogCQkgICAgZWxzZQpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMt b3Blbm1wLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCmluZGV4IDk1OTk1MjFi OTdjLi4yOWFkODgwYTMwYyAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1w LmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYwpAQCAtMTk5Niw3ICsxOTk2 LDggQEAgb21wX3Vkcl9maW5kX29yaWcgKGdmY19leHByICoqZSwgaW50ICp3YWxrX3N1YnRy ZWVzIEFUVFJJQlVURV9VTlVTRUQsCiB9CiAKIHN0YXRpYyB2b2lkCi1nZmNfdHJhbnNfb21w X2FycmF5X3JlZHVjdGlvbl9vcl91ZHIgKHRyZWUgYywgZ2ZjX29tcF9uYW1lbGlzdCAqbiwg bG9jdXMgd2hlcmUpCitnZmNfdHJhbnNfb21wX2FycmF5X3JlZHVjdGlvbl9vcl91ZHIgKHRy ZWUgYywgZ2ZjX29tcF9uYW1lbGlzdCAqbiwgbG9jdXMgd2hlcmUsCisJCQkJICAgICAgYm9v bCBvcGVuYWNjKQogewogICBnZmNfc3ltYm9sICpzeW0gPSBuLT5zeW07CiAgIGdmY19zeW10 cmVlICpyb290MSA9IE5VTEwsICpyb290MiA9IE5VTEwsICpyb290MyA9IE5VTEwsICpyb290 NCA9IE5VTEw7CkBAIC0yMjUxLDIxICsyMjUyLDI0IEBAIGdmY190cmFuc19vbXBfYXJyYXlf cmVkdWN0aW9uX29yX3VkciAodHJlZSBjLCBnZmNfb21wX25hbWVsaXN0ICpuLCBsb2N1cyB3 aGVyZSkKICAgICBwb3BsZXZlbCAoMCwgMCk7CiAgIE9NUF9DTEFVU0VfUkVEVUNUSU9OX0lO SVQgKGMpID0gc3RtdDsKIAotICAvKiBDcmVhdGUgdGhlIG1lcmdlIHN0YXRlbWVudCBsaXN0 LiAgKi8KLSAgcHVzaGxldmVsICgpOwotICBpZiAoZTQpCi0gICAgc3RtdCA9IGdmY190cmFu c19hc3NpZ25tZW50IChlMywgZTQsIGZhbHNlLCB0cnVlKTsKLSAgZWxzZQotICAgIHN0bXQg PSBnZmNfdHJhbnNfY2FsbCAobi0+dTIudWRyLT5jb21iaW5lciwgZmFsc2UsCi0JCQkgICBO VUxMX1RSRUUsIE5VTExfVFJFRSwgZmFsc2UpOwotICBpZiAoVFJFRV9DT0RFIChzdG10KSAh PSBCSU5EX0VYUFIpCi0gICAgc3RtdCA9IGJ1aWxkM192IChCSU5EX0VYUFIsIE5VTEwsIHN0 bXQsIHBvcGxldmVsICgxLCAwKSk7Ci0gIGVsc2UKLSAgICBwb3BsZXZlbCAoMCwgMCk7Ci0g IE9NUF9DTEFVU0VfUkVEVUNUSU9OX01FUkdFIChjKSA9IHN0bXQ7CisgIGlmICghb3BlbmFj YykKKyAgICB7CisgICAgICAvKiBDcmVhdGUgdGhlIG1lcmdlIHN0YXRlbWVudCBsaXN0LiAg Ki8KKyAgICAgIHB1c2hsZXZlbCAoKTsKKyAgICAgIGlmIChlNCkKKwlzdG10ID0gZ2ZjX3Ry YW5zX2Fzc2lnbm1lbnQgKGUzLCBlNCwgZmFsc2UsIHRydWUpOworICAgICAgZWxzZQorCXN0 bXQgPSBnZmNfdHJhbnNfY2FsbCAobi0+dTIudWRyLT5jb21iaW5lciwgZmFsc2UsCisJCQkg ICAgICAgTlVMTF9UUkVFLCBOVUxMX1RSRUUsIGZhbHNlKTsKKyAgICAgIGlmIChUUkVFX0NP REUgKHN0bXQpICE9IEJJTkRfRVhQUikKKwlzdG10ID0gYnVpbGQzX3YgKEJJTkRfRVhQUiwg TlVMTCwgc3RtdCwgcG9wbGV2ZWwgKDEsIDApKTsKKyAgICAgIGVsc2UKKwlwb3BsZXZlbCAo MCwgMCk7CisgICAgICBPTVBfQ0xBVVNFX1JFRFVDVElPTl9NRVJHRSAoYykgPSBzdG10Owog Ci0gIC8qIEFuZCBzdGljayB0aGUgcGxhY2Vob2xkZXIgVkFSX0RFQ0wgaW50byB0aGUgY2xh dXNlIGFzIHdlbGwuICAqLwotICBPTVBfQ0xBVVNFX1JFRFVDVElPTl9QTEFDRUhPTERFUiAo YykgPSBvdXRlcl9kZWNsOworICAgICAgLyogQW5kIHN0aWNrIHRoZSBwbGFjZWhvbGRlciBW QVJfREVDTCBpbnRvIHRoZSBjbGF1c2UgYXMgd2VsbC4gICovCisgICAgICBPTVBfQ0xBVVNF X1JFRFVDVElPTl9QTEFDRUhPTERFUiAoYykgPSBvdXRlcl9kZWNsOworICAgIH0KIAogICBn ZmNfY3VycmVudF9sb2N1cyA9IG9sZF9sb2M7CiAKQEAgLTIyOTYsNyArMjMwMCw3IEBAIGdm Y190cmFuc19vbXBfYXJyYXlfcmVkdWN0aW9uX29yX3VkciAodHJlZSBjLCBnZmNfb21wX25h bWVsaXN0ICpuLCBsb2N1cyB3aGVyZSkKIAogc3RhdGljIHRyZWUKIGdmY190cmFuc19vbXBf cmVkdWN0aW9uX2xpc3QgKGludCBraW5kLCBnZmNfb21wX25hbWVsaXN0ICpuYW1lbGlzdCwg dHJlZSBsaXN0LAotCQkJICAgICAgbG9jdXMgd2hlcmUsIGJvb2wgbWFya19hZGRyZXNzYWJs ZSkKKwkJCSAgICAgIGxvY3VzIHdoZXJlLCBib29sIG1hcmtfYWRkcmVzc2FibGUsIGJvb2wg b3BlbmFjYykKIHsKICAgb21wX2NsYXVzZV9jb2RlIGNsYXVzZSA9IE9NUF9DTEFVU0VfUkVE VUNUSU9OOwogICBzd2l0Y2ggKGtpbmQpCkBAIC0yMzc2LDcgKzIzODAsOCBAQCBnZmNfdHJh bnNfb21wX3JlZHVjdGlvbl9saXN0IChpbnQga2luZCwgZ2ZjX29tcF9uYW1lbGlzdCAqbmFt ZWxpc3QsIHRyZWUgbGlzdCwKIAkgICAgaWYgKG5hbWVsaXN0LT5zeW0tPmF0dHIuZGltZW5z aW9uCiAJCXx8IG5hbWVsaXN0LT51LnJlZHVjdGlvbl9vcCA9PSBPTVBfUkVEVUNUSU9OX1VT RVIKIAkJfHwgbmFtZWxpc3QtPnN5bS0+YXR0ci5hbGxvY2F0YWJsZSkKLQkgICAgICBnZmNf dHJhbnNfb21wX2FycmF5X3JlZHVjdGlvbl9vcl91ZHIgKG5vZGUsIG5hbWVsaXN0LCB3aGVy ZSk7CisJICAgICAgZ2ZjX3RyYW5zX29tcF9hcnJheV9yZWR1Y3Rpb25fb3JfdWRyIChub2Rl LCBuYW1lbGlzdCwgd2hlcmUsCisJCQkJCQkgICAgb3BlbmFjYyk7CiAJICAgIGxpc3QgPSBn ZmNfdHJhbnNfYWRkX2NsYXVzZSAobm9kZSwgbGlzdCk7CiAJICB9CiAgICAgICB9CkBAIC0y NzE1LDcgKzI3MjAsOCBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpi bG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCSAgLyogQW4gT3BlbkFDQyBhc3lu YyBjbGF1c2UgaW5kaWNhdGVzIHRoZSBuZWVkIHRvIHNldCByZWR1Y3Rpb24KIAkgICAgIGFy Z3VtZW50cyBhZGRyZXNzYWJsZSwgdG8gYWxsb3cgYXN5bmNocm9ub3VzIGNvcHktb3V0LiAg Ki8KIAkgIG9tcF9jbGF1c2VzID0gZ2ZjX3RyYW5zX29tcF9yZWR1Y3Rpb25fbGlzdCAobGlz dCwgbiwgb21wX2NsYXVzZXMsCi0JCQkJCQkgICAgICB3aGVyZSwgY2xhdXNlcy0+YXN5bmMp OworCQkJCQkJICAgICAgd2hlcmUsIGNsYXVzZXMtPmFzeW5jLAorCQkJCQkJICAgICAgb3Bl bmFjYyk7CiAJICBicmVhazsKIAljYXNlIE9NUF9MSVNUX1BSSVZBVEU6CiAJICBjbGF1c2Vf Y29kZSA9IE9NUF9DTEFVU0VfUFJJVkFURTsKQEAgLTU3NTcsNyArNTc2Myw4IEBAIGdmY190 cmFuc19vbXBfZG8gKGdmY19jb2RlICpjb2RlLCBnZmNfZXhlY19vcCBvcCwgc3RtdGJsb2Nr X3QgKnBibG9jaywKICAgICAgb24gdGhlIHNpbWQgY29uc3RydWN0IGFuZCBETydzIGNsYXVz ZXMgYXJlIHRyYW5zbGF0ZWQgZWxzZXdoZXJlLiAgKi8KICAgZG9fY2xhdXNlcy0+c2NoZWRf c2ltZCA9IGZhbHNlOwogCi0gIG9tcF9jbGF1c2VzID0gZ2ZjX3RyYW5zX29tcF9jbGF1c2Vz IChwYmxvY2ssIGRvX2NsYXVzZXMsIGNvZGUtPmxvYyk7CisgIG9tcF9jbGF1c2VzID0gZ2Zj X3RyYW5zX29tcF9jbGF1c2VzIChwYmxvY2ssIGRvX2NsYXVzZXMsIGNvZGUtPmxvYywgZmFs c2UsCisJCQkJICAgICAgIG9wID09IEVYRUNfT0FDQ19MT09QKTsKIAogICBmb3IgKGkgPSAw OyBpIDwgY29sbGFwc2U7IGkrKykKICAgICB7CmRpZmYgLS1naXQgYS9nY2Mvb21wLWxvdy5j YyBiL2djYy9vbXAtbG93LmNjCmluZGV4IGYzYTA1NmRmOGYyLi40YmJmMzA2MjdjMyAxMDA2 NDQKLS0tIGEvZ2NjL29tcC1sb3cuY2MKKysrIGIvZ2NjL29tcC1sb3cuY2MKQEAgLTQ0MjYs OSArNDQyNiwxNiBAQCBvbXBfcmVkdWN0aW9uX2luaXRfb3AgKGxvY2F0aW9uX3QgbG9jLCBl bnVtIHRyZWVfY29kZSBvcCwgdHJlZSB0eXBlKQogewogICBpZiAoVFJFRV9DT0RFICh0eXBl KSA9PSBBUlJBWV9UWVBFKQogICAgIHsKKyAgICAgIHRyZWUgbWluX3RyZWUgPSBUWVBFX01J Tl9WQUxVRSAoVFlQRV9ET01BSU4gKHR5cGUpKTsKKyAgICAgIHRyZWUgbWF4X3RyZWUgPSBU WVBFX01BWF9WQUxVRSAoVFlQRV9ET01BSU4gKHR5cGUpKTsKKyAgICAgIGlmICghVFJFRV9D T05TVEFOVCAobWluX3RyZWUpIHx8ICFUUkVFX0NPTlNUQU5UIChtYXhfdHJlZSkpCisJewor CSAgZXJyb3JfYXQgKGxvYywgImFycmF5IGluIHJlZHVjdGlvbiBtdXN0IGJlIG9mIGNvbnN0 YW50IHNpemUiKTsKKwkgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisJfQogICAgICAgdmVj PGNvbnN0cnVjdG9yX2VsdCwgdmFfZ2M+ICp2ID0gTlVMTDsKLSAgICAgIEhPU1RfV0lERV9J TlQgbWluID0gdHJlZV90b19zaHdpIChUWVBFX01JTl9WQUxVRSAoVFlQRV9ET01BSU4gKHR5 cGUpKSk7Ci0gICAgICBIT1NUX1dJREVfSU5UIG1heCA9IHRyZWVfdG9fc2h3aSAoVFlQRV9N QVhfVkFMVUUgKFRZUEVfRE9NQUlOICh0eXBlKSkpOworICAgICAgSE9TVF9XSURFX0lOVCBt aW4gPSB0cmVlX3RvX3Nod2kgKG1pbl90cmVlKTsKKyAgICAgIEhPU1RfV0lERV9JTlQgbWF4 ID0gdHJlZV90b19zaHdpIChtYXhfdHJlZSk7CiAgICAgICB0cmVlIHQgPSBvbXBfcmVkdWN0 aW9uX2luaXRfb3AgKGxvYywgb3AsIFRSRUVfVFlQRSAodHlwZSkpOwogICAgICAgZm9yIChI T1NUX1dJREVfSU5UIGkgPSBtaW47IGkgPD0gbWF4OyBpKyspCiAJQ09OU1RSVUNUT1JfQVBQ RU5EX0VMVCAodiwgc2l6ZV9pbnQgKGkpLCB0KTsKQEAgLTc1NTksNiArNzU2Niw5IEBAIGxv d2VyX29hY2NfcmVkdWN0aW9ucyAobG9jYXRpb25fdCBsb2MsIHRyZWUgY2xhdXNlcywgdHJl ZSBsZXZlbCwgYm9vbCBpbm5lciwKIAkgIGhhc19vdXRlcl9yZWR1Y3Rpb246OwogCSAgfQog CisJaWYgKGluY29taW5nID09IGVycm9yX21hcmtfbm9kZSkKKwkgIGNvbnRpbnVlOworCiAJ aWYgKCFyZWZfdG9fcmVzKQogCSAgcmVmX3RvX3JlcyA9IGludGVnZXJfemVyb19ub2RlOwog CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL2FycmF5LXJl ZHVjdGlvbi5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL2FycmF5LXJl ZHVjdGlvbi5mOTAKaW5kZXggZDcxYzQwMGE1YmYuLmY5YTNiNDNlN2YzIDEwMDY0NAotLS0g YS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL2FycmF5LXJlZHVjdGlvbi5mOTAK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9hcnJheS1yZWR1Y3Rpb24u ZjkwCkBAIC0xLDc0ICsxLDgwIEBACishIHsgZGctZG8gY29tcGlsZSB9CishIHsgZGctYWRk aXRpb25hbC1vcHRpb25zICItZmR1bXAtdHJlZS1naW1wbGUiIH0KKwogcHJvZ3JhbSB0ZXN0 CiAgIGltcGxpY2l0IG5vbmUKICAgaW50ZWdlciBhKDEwKSwgaQogCiAgIGEoOikgPSAwCi0g IAorCiAgICEgQXJyYXkgcmVkdWN0aW9ucy4KLSAgCi0gICEkYWNjIHBhcmFsbGVsIHJlZHVj dGlvbiAoKzphKSAhIHsgZGctZXJyb3IgIkFycmF5ICdhJyBpcyBub3QgcGVybWl0dGVkIGlu IHJlZHVjdGlvbiIgfQorCisgICEkYWNjIHBhcmFsbGVsIHJlZHVjdGlvbiAoKzphKQogICBk byBpID0gMSwgMTAKICAgICAgYSA9IGEgKyAxCiAgIGVuZCBkbwogICAhJGFjYyBlbmQgcGFy YWxsZWwKIAogICAhJGFjYyBwYXJhbGxlbAotICAhJGFjYyBsb29wIHJlZHVjdGlvbiAoKzph KSAhIHsgZGctZXJyb3IgIkFycmF5ICdhJyBpcyBub3QgcGVybWl0dGVkIGluIHJlZHVjdGlv biIgfQorICAhJGFjYyBsb29wIHJlZHVjdGlvbiAoKzphKQogICBkbyBpID0gMSwgMTAKICAg ICAgYSA9IGEgKyAxCiAgIGVuZCBkbwogICAhJGFjYyBlbmQgcGFyYWxsZWwKIAogICAhJGFj YyBrZXJuZWxzCi0gICEkYWNjIGxvb3AgcmVkdWN0aW9uICgrOmEpICEgeyBkZy1lcnJvciAi QXJyYXkgJ2EnIGlzIG5vdCBwZXJtaXR0ZWQgaW4gcmVkdWN0aW9uIiB9CisgICEkYWNjIGxv b3AgcmVkdWN0aW9uICgrOmEpCiAgIGRvIGkgPSAxLCAxMAogICAgICBhID0gYSArIDEKICAg ZW5kIGRvCiAgICEkYWNjIGVuZCBrZXJuZWxzCiAKICAgISBTdWJhcnJheSByZWR1Y3Rpb25z LgotICAKLSAgISRhY2MgcGFyYWxsZWwgcmVkdWN0aW9uICgrOmEoMTo1KSkgISB7IGRnLWVy cm9yICJBcnJheSAnYScgaXMgbm90IHBlcm1pdHRlZCBpbiByZWR1Y3Rpb24iIH0KKworICAh JGFjYyBwYXJhbGxlbCByZWR1Y3Rpb24gKCs6YSgxOjUpKQogICBkbyBpID0gMSwgMTAKICAg ICAgYSA9IGEgKyAxCiAgIGVuZCBkbwogICAhJGFjYyBlbmQgcGFyYWxsZWwKIAogICAhJGFj YyBwYXJhbGxlbAotICAhJGFjYyBsb29wIHJlZHVjdGlvbiAoKzphKDE6NSkpICEgeyBkZy1l cnJvciAiQXJyYXkgJ2EnIGlzIG5vdCBwZXJtaXR0ZWQgaW4gcmVkdWN0aW9uIiB9CisgICEk YWNjIGxvb3AgcmVkdWN0aW9uICgrOmEoMTo1KSkKICAgZG8gaSA9IDEsIDEwCiAgICAgIGEg PSBhICsgMQogICBlbmQgZG8KICAgISRhY2MgZW5kIHBhcmFsbGVsCiAKICAgISRhY2Mga2Vy bmVscwotICAhJGFjYyBsb29wIHJlZHVjdGlvbiAoKzphKDE6NSkpICEgeyBkZy1lcnJvciAi QXJyYXkgJ2EnIGlzIG5vdCBwZXJtaXR0ZWQgaW4gcmVkdWN0aW9uIiB9CisgICEkYWNjIGxv b3AgcmVkdWN0aW9uICgrOmEoMTo1KSkKICAgZG8gaSA9IDEsIDEwCiAgICAgIGEgPSBhICsg MQogICBlbmQgZG8KICAgISRhY2MgZW5kIGtlcm5lbHMKIAogICAhIFJlZHVjdGlvbnMgb24g YXJyYXkgZWxlbWVudHMuCi0gIAotICAhJGFjYyBwYXJhbGxlbCByZWR1Y3Rpb24gKCs6YSgx KSkgISB7IGRnLWVycm9yICJBcnJheSAnYScgaXMgbm90IHBlcm1pdHRlZCBpbiByZWR1Y3Rp b24iIH0KKworICAhJGFjYyBwYXJhbGxlbCByZWR1Y3Rpb24gKCs6YSgxKSkKICAgZG8gaSA9 IDEsIDEwCiAgICAgIGEoMSkgPSBhKDEpICsgMQogICBlbmQgZG8KICAgISRhY2MgZW5kIHBh cmFsbGVsCiAKICAgISRhY2MgcGFyYWxsZWwKLSAgISRhY2MgbG9vcCByZWR1Y3Rpb24gKCs6 YSgxKSkgISB7IGRnLWVycm9yICJBcnJheSAnYScgaXMgbm90IHBlcm1pdHRlZCBpbiByZWR1 Y3Rpb24iIH0KKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24gKCs6YSgxKSkKICAgZG8gaSA9IDEs IDEwCiAgICAgIGEoMSkgPSBhKDEpICsgMQogICBlbmQgZG8KICAgISRhY2MgZW5kIHBhcmFs bGVsCiAKICAgISRhY2Mga2VybmVscwotICAhJGFjYyBsb29wIHJlZHVjdGlvbiAoKzphKDEp KSAhIHsgZGctZXJyb3IgIkFycmF5ICdhJyBpcyBub3QgcGVybWl0dGVkIGluIHJlZHVjdGlv biIgfQorICAhJGFjYyBsb29wIHJlZHVjdGlvbiAoKzphKDEpKQogICBkbyBpID0gMSwgMTAK ICAgICAgYSgxKSA9IGEoMSkgKyAxCiAgIGVuZCBkbwogICAhJGFjYyBlbmQga2VybmVscwot ICAKKwogICBwcmludCAqLCBhCiBlbmQgcHJvZ3JhbSB0ZXN0CisKKyEgeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgbG9vcCBwcml2YXRlXFwo aVxcKSByZWR1Y3Rpb25cXChcXCs6YVxcKSIgNiAiZ2ltcGxlIiB9IH0KKyEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBvbXAgdGFyZ2V0IG9hY2Nf cGFyYWxsZWwgcmVkdWN0aW9uXFwoXFwrOmFcXCkgbWFwXFwodG9mcm9tOmEgXFxcW2xlbjog XFswLTlcXStcXFxdXFwpIiAzICJnaW1wbGUiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9yZWR1Y3Rpb24uZjk1IGIvZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9nb2FjYy9yZWR1Y3Rpb24uZjk1CmluZGV4IGExMzU3NGIxNTBjLi5jNDI1 ZjAwZDg3ZiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9y ZWR1Y3Rpb24uZjk1CisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcmVk dWN0aW9uLmY5NQpAQCAtNzIsOSArNzIsOSBAQCBjb21tb24gL2Jsay8gaTEKICEkYWNjIGVu ZCBwYXJhbGxlbAogISRhY2MgcGFyYWxsZWwgcmVkdWN0aW9uICgtOmExKQkJISB7IGRnLWVy cm9yICJPTVAgREVDTEFSRSBSRURVQ1RJT04gLSBub3QgZm91bmQgZm9yIHR5cGUgQ0hBUkFD VEVSIiB9CiAhJGFjYyBlbmQgcGFyYWxsZWwKLSEkYWNjIHBhcmFsbGVsIHJlZHVjdGlvbiAo Kzp0MSkJCSEgeyBkZy1lcnJvciAiT01QIERFQ0xBUkUgUkVEVUNUSU9OIFxcKyBub3QgZm91 bmQgZm9yIHR5cGUgVFlQRSIgfQorISRhY2MgcGFyYWxsZWwgcmVkdWN0aW9uICgrOnQxKQog ISRhY2MgZW5kIHBhcmFsbGVsCi0hJGFjYyBwYXJhbGxlbCByZWR1Y3Rpb24gKCo6dGExKQkh IHsgZGctZXJyb3IgIk9NUCBERUNMQVJFIFJFRFVDVElPTiBcXCogbm90IGZvdW5kIGZvciB0 eXBlIFRZUEUiIH0KKyEkYWNjIHBhcmFsbGVsIHJlZHVjdGlvbiAoKjp0YTEpCiAhJGFjYyBl bmQgcGFyYWxsZWwKICEkYWNjIHBhcmFsbGVsIHJlZHVjdGlvbiAoLmFuZC46aTMpCSEgeyBk Zy1lcnJvciAiT01QIERFQ0xBUkUgUkVEVUNUSU9OIFxcLmFuZFxcLiBub3QgZm91bmQgZm9y IHR5cGUgSU5URUdFUiIgfQogISRhY2MgZW5kIHBhcmFsbGVsCkBAIC0xMDgsOSArMTA4LDkg QEAgY29tbW9uIC9ibGsvIGkxCiAhJGFjYyBlbmQgcGFyYWxsZWwKICEkYWNjIHBhcmFsbGVs IHJlZHVjdGlvbiAobWF4OmExKQkhIHsgZGctZXJyb3IgIk9NUCBERUNMQVJFIFJFRFVDVElP TiBtYXggbm90IGZvdW5kIGZvciB0eXBlIENIQVJBQ1RFUiIgfQogISRhY2MgZW5kIHBhcmFs bGVsCi0hJGFjYyBwYXJhbGxlbCByZWR1Y3Rpb24gKG1pbjp0MSkJISB7IGRnLWVycm9yICJP TVAgREVDTEFSRSBSRURVQ1RJT04gbWluIG5vdCBmb3VuZCBmb3IgdHlwZSBUWVBFIiB9Cish JGFjYyBwYXJhbGxlbCByZWR1Y3Rpb24gKG1pbjp0MSkKICEkYWNjIGVuZCBwYXJhbGxlbAot ISRhY2MgcGFyYWxsZWwgcmVkdWN0aW9uIChtYXg6dGExKQkhIHsgZGctZXJyb3IgIk9NUCBE RUNMQVJFIFJFRFVDVElPTiBtYXggbm90IGZvdW5kIGZvciB0eXBlIFRZUEUiIH0KKyEkYWNj IHBhcmFsbGVsIHJlZHVjdGlvbiAobWF4OnRhMSkKICEkYWNjIGVuZCBwYXJhbGxlbAogISRh Y2MgcGFyYWxsZWwgcmVkdWN0aW9uIChpYW5kOnIxKQkhIHsgZGctZXJyb3IgIk9NUCBERUNM QVJFIFJFRFVDVElPTiBpYW5kIG5vdCBmb3VuZCBmb3IgdHlwZSBSRUFMIiB9CiAhJGFjYyBl bmQgcGFyYWxsZWwKQEAgLTEzMCwzMiArMTMwLDEyIEBAIGNvbW1vbiAvYmxrLyBpMQogISRh Y2MgZW5kIHBhcmFsbGVsCiAhJGFjYyBwYXJhbGxlbCByZWR1Y3Rpb24gKGlvcjphMSkJISB7 IGRnLWVycm9yICJPTVAgREVDTEFSRSBSRURVQ1RJT04gaW9yIG5vdCBmb3VuZCBmb3IgdHlw ZSBDSEFSQUNURVIiIH0KICEkYWNjIGVuZCBwYXJhbGxlbAotISRhY2MgcGFyYWxsZWwgcmVk dWN0aW9uIChpZW9yOnQxKQkhIHsgZGctZXJyb3IgIk9NUCBERUNMQVJFIFJFRFVDVElPTiBp ZW9yIG5vdCBmb3VuZCBmb3IgdHlwZSBUWVBFIiB9CishJGFjYyBwYXJhbGxlbCByZWR1Y3Rp b24gKGllb3I6dDEpCiAhJGFjYyBlbmQgcGFyYWxsZWwKLSEkYWNjIHBhcmFsbGVsIHJlZHVj dGlvbiAoaWFuZDp0YTEpCSEgeyBkZy1lcnJvciAiT01QIERFQ0xBUkUgUkVEVUNUSU9OIGlh bmQgbm90IGZvdW5kIGZvciB0eXBlIFRZUEUiIH0KKyEkYWNjIHBhcmFsbGVsIHJlZHVjdGlv biAoaWFuZDp0YTEpCiAhJGFjYyBlbmQgcGFyYWxsZWwKIAogZW5kIHN1YnJvdXRpbmUKIAot ISB7IGRnLWVycm9yICJBcnJheSAnaWEyJyBpcyBub3QgcGVybWl0dGVkIGluIHJlZHVjdGlv biIgIiIgeyB0YXJnZXQgIiotKi0qIiB9IDI3IH0KLSEgeyBkZy1lcnJvciAiQXJyYXkgJ3Jh MScgaXMgbm90IHBlcm1pdHRlZCBpbiByZWR1Y3Rpb24iICIiIHsgdGFyZ2V0ICIqLSotKiIg fSAyOSB9Ci0hIHsgZGctZXJyb3IgIkFycmF5ICdjYTEnIGlzIG5vdCBwZXJtaXR0ZWQgaW4g cmVkdWN0aW9uIiAiIiB7IHRhcmdldCAiKi0qLSoiIH0gMzEgfQotISB7IGRnLWVycm9yICJB cnJheSAnZGExJyBpcyBub3QgcGVybWl0dGVkIGluIHJlZHVjdGlvbiIgIiIgeyB0YXJnZXQg IiotKi0qIiB9IDMzIH0KLSEgeyBkZy1lcnJvciAiQXJyYXkgJ2xhMScgaXMgbm90IHBlcm1p dHRlZCBpbiByZWR1Y3Rpb24iICIiIHsgdGFyZ2V0ICIqLSotKiIgfSAzNSB9CiAhIHsgZGct ZXJyb3IgIkFycmF5ICdhYTEnIGlzIG5vdCBwZXJtaXR0ZWQgaW4gcmVkdWN0aW9uIiAiIiB7 IHRhcmdldCAiKi0qLSoiIH0gNjUgfQogISB7IGRnLWVycm9yICJBcnJheSAnaWExJyBpcyBu b3QgcGVybWl0dGVkIGluIHJlZHVjdGlvbiIgIiIgeyB0YXJnZXQgIiotKi0qIiB9IDY3IH0K LSEgeyBkZy1lcnJvciAiQXJyYXkgJ2xhMScgaXMgbm90IHBlcm1pdHRlZCBpbiByZWR1Y3Rp b24iICIiIHsgdGFyZ2V0ICIqLSotKiIgfSA3MSB9Ci0hIHsgZGctZXJyb3IgIkFycmF5ICd0 YTEnIGlzIG5vdCBwZXJtaXR0ZWQgaW4gcmVkdWN0aW9uIiAiIiB7IHRhcmdldCAiKi0qLSoi IH0gNzcgfQotISB7IGRnLWVycm9yICJBcnJheSAnaWEyJyBpcyBub3QgcGVybWl0dGVkIGlu IHJlZHVjdGlvbiIgIiIgeyB0YXJnZXQgIiotKi0qIiB9IDgxIH0KLSEgeyBkZy1lcnJvciAi QXJyYXkgJ3JhMScgaXMgbm90IHBlcm1pdHRlZCBpbiByZWR1Y3Rpb24iICIiIHsgdGFyZ2V0 ICIqLSotKiIgfSA4NSB9Ci0hIHsgZGctZXJyb3IgIkFycmF5ICdkYTEnIGlzIG5vdCBwZXJt aXR0ZWQgaW4gcmVkdWN0aW9uIiAiIiB7IHRhcmdldCAiKi0qLSoiIH0gODkgfQotISB7IGRn LWVycm9yICJBcnJheSAnY2ExJyBpcyBub3QgcGVybWl0dGVkIGluIHJlZHVjdGlvbiIgIiIg eyB0YXJnZXQgIiotKi0qIiB9IDkzIH0KLSEgeyBkZy1lcnJvciAiQXJyYXkgJ3RhMScgaXMg bm90IHBlcm1pdHRlZCBpbiByZWR1Y3Rpb24iICIiIHsgdGFyZ2V0ICIqLSotKiIgfSA5OSB9 Ci0hIHsgZGctZXJyb3IgIkFycmF5ICdjYTEnIGlzIG5vdCBwZXJtaXR0ZWQgaW4gcmVkdWN0 aW9uIiAiIiB7IHRhcmdldCAiKi0qLSoiIH0gMTAzIH0KLSEgeyBkZy1lcnJvciAiQXJyYXkg J2xhMScgaXMgbm90IHBlcm1pdHRlZCBpbiByZWR1Y3Rpb24iICIiIHsgdGFyZ2V0ICIqLSot KiIgfSAxMDcgfQotISB7IGRnLWVycm9yICJBcnJheSAndGExJyBpcyBub3QgcGVybWl0dGVk IGluIHJlZHVjdGlvbiIgIiIgeyB0YXJnZXQgIiotKi0qIiB9IDExMyB9Ci0hIHsgZGctZXJy b3IgIkFycmF5ICdyYTEnIGlzIG5vdCBwZXJtaXR0ZWQgaW4gcmVkdWN0aW9uIiAiIiB7IHRh cmdldCAiKi0qLSoiIH0gMTE3IH0KLSEgeyBkZy1lcnJvciAiQXJyYXkgJ2RhMScgaXMgbm90 IHBlcm1pdHRlZCBpbiByZWR1Y3Rpb24iICIiIHsgdGFyZ2V0ICIqLSotKiIgfSAxMjEgfQot ISB7IGRnLWVycm9yICJBcnJheSAnY2ExJyBpcyBub3QgcGVybWl0dGVkIGluIHJlZHVjdGlv biIgIiIgeyB0YXJnZXQgIiotKi0qIiB9IDEyNSB9Ci0hIHsgZGctZXJyb3IgIkFycmF5ICds YTEnIGlzIG5vdCBwZXJtaXR0ZWQgaW4gcmVkdWN0aW9uIiAiIiB7IHRhcmdldCAiKi0qLSoi IH0gMTI5IH0KLSEgeyBkZy1lcnJvciAiQXJyYXkgJ3RhMScgaXMgbm90IHBlcm1pdHRlZCBp biByZWR1Y3Rpb24iICIiIHsgdGFyZ2V0ICIqLSotKiIgfSAxMzUgfQpkaWZmIC0tZ2l0IGEv bGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5vYWNjLWZvcnRyYW4vcmVkdWN0aW9uLTEwLmY5 MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAub2FjYy1mb3J0cmFuL3JlZHVjdGlvbi0x MC5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUwNmRmYWYy OWY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5vYWNj LWZvcnRyYW4vcmVkdWN0aW9uLTEwLmY5MApAQCAtMCwwICsxLDQ4MyBAQAorISB7IGRnLWRv IHJ1biB9CisKKyEgcmVhbCBhcnJheSByZWR1Y3Rpb25zCisKK3Byb2dyYW0gcmVkdWN0aW9u XzEwCisgIGltcGxpY2l0IG5vbmUKKworICBpbnRlZ2VyLCBwYXJhbWV0ZXIgICAgIDo6IG4g PSAxMCwgbmcgPSA4LCBudyA9IDQsIHZsID0gMzIKKyAgaW50ZWdlciAgICAgICAgICAgICAg ICA6OiBpLCBqCisgIHJlYWwsIGRpbWVuc2lvbiAobikgOjogdnJlc3VsdCwgcmcsIHJ3LCBy diwgcmMKKyAgbG9naWNhbCwgZGltZW5zaW9uIChuKSA6OiBscmcsIGxydywgbHJ2LCBscmMs IGx2cmVzdWx0CisgIHJlYWwsIGRpbWVuc2lvbiAobikgOjogYXJyYXkKKworICBkbyBpID0g MSwgbgorICAgICBhcnJheShpKSA9IGkKKyAgZW5kIGRvCisKKyAgIQorICAhICcrJyByZWR1 Y3Rpb25zCisgICEKKworICByZyA9IDAKKyAgcncgPSAwCisgIHJ2ID0gMAorICByYyA9IDAK KyAgdnJlc3VsdCA9IDAKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIGNvcHko cmcpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKCs6cmcpIGdhbmcKKyAgZG8gaSA9IDEsIG4K KyAgICBkbyBqID0gMSwgbgorICAgICAgcmcoaikgPSByZyhqKSArIGFycmF5KGkpCisgICAg ZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJh bGxlbCBudW1fd29ya2VycyhudykgY29weShydykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24o Kzpydykgd29ya2VyCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJ3 KGopID0gcncoaikgKyBhcnJheShpKQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2Mg ZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgdmVjdG9yX2xlbmd0aCh2bCkgY29w eShydikKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oKzpydikgdmVjdG9yCisgIGRvIGkgPSAx LCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJ2KGopID0gcnYoaikgKyBhcnJheShpKQor ICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2Mg cGFyYWxsZWwgbnVtX2dhbmdzKG5nKSBudW1fd29ya2VycyhudykgdmVjdG9yX2xlbmd0aCh2 bCkgY29weShyYykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oKzpyYykgZ2FuZyB3b3JrZXIg dmVjdG9yCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJjKGopID0g cmMoaikgKyBhcnJheShpKQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBh cmFsbGVsCisKKyAgISBWZXJpZnkgdGhlIHJlc3VsdHMKKyAgZG8gaSA9IDEsIG4KKyAgICBk byBqID0gMSwgbgorICAgICAgdnJlc3VsdChqKSA9IHZyZXN1bHQoaikgKyBhcnJheShpKQor ICAgIGVuZCBkbworICBlbmQgZG8KKworICBpZiAoY291bnQgKHJnIC5uZS4gdnJlc3VsdCkg Lm5lLiAwKSBTVE9QIDEKKyAgaWYgKGNvdW50IChydyAubmUuIHZyZXN1bHQpIC5uZS4gMCkg U1RPUCAyCisgIGlmIChjb3VudCAocnYgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMwor ICBpZiAoY291bnQgKHJjIC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDQKKworICAhCisg ICEgJyonIHJlZHVjdGlvbnMKKyAgIQorCisgIHJnID0gMQorICBydyA9IDEKKyAgcnYgPSAx CisgIHJjID0gMQorICB2cmVzdWx0ID0gMQorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5n cyhuZykgY29weShyZykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oKjpyZykgZ2FuZworICBk byBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICByZyhqKSA9IHJnKGopICogYXJy YXkoaSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisg ICEkYWNjIHBhcmFsbGVsIG51bV93b3JrZXJzKG53KSBjb3B5KHJ3KQorICAhJGFjYyBsb29w IHJlZHVjdGlvbigqOnJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwg bgorICAgICAgcncoaikgPSBydyhqKSAqIGFycmF5KGkpCisgICAgZW5kIGRvCisgIGVuZCBk bworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCB2ZWN0b3JfbGVu Z3RoKHZsKSBjb3B5KHJ2KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbigqOnJ2KSB2ZWN0b3IK KyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgcnYoaikgPSBydihqKSAq IGFycmF5KGkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwK KworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51bV93b3JrZXJzKG53KSB2ZWN0 b3JfbGVuZ3RoKHZsKSBjb3B5KHJjKQorICAhJGFjYyBsb29wIHJlZHVjdGlvbigqOnJjKSBn YW5nIHdvcmtlciB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAg ICAgcmMoaikgPSByYyhqKSAqIGFycmF5KGkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAh JGFjYyBlbmQgcGFyYWxsZWwKKworICAhIFZlcmlmeSB0aGUgcmVzdWx0cworICBkbyBpID0g MSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICB2cmVzdWx0KGopID0gdnJlc3VsdChqKSAq IGFycmF5KGkpCisgICAgZW5kIGRvCisgIGVuZCBkbworCisgIGlmIChjb3VudCAocmcgLm5l LiB2cmVzdWx0KSAubmUuIDApIFNUT1AgNQorICBpZiAoY291bnQgKHJ3IC5uZS4gdnJlc3Vs dCkgLm5lLiAwKSBTVE9QIDYKKyAgaWYgKGNvdW50IChydiAubmUuIHZyZXN1bHQpIC5uZS4g MCkgU1RPUCA3CisgIGlmIChjb3VudCAocmMgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1Ag OAorCisgICEKKyAgISAnbWF4JyByZWR1Y3Rpb25zCisgICEKKworICByZyA9IDAKKyAgcncg PSAwCisgIHJ2ID0gMAorICByYyA9IDAKKyAgdnJlc3VsdCA9IDAKKworICAhJGFjYyBwYXJh bGxlbCBudW1fZ2FuZ3MobmcpIGNvcHkocmcpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKG1h eDpyZykgZ2FuZworICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICByZyhq KSA9IG1heCAocmcoaiksIGFycmF5KGkpKQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRh Y2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX3dvcmtlcnMobncpIGNv cHkocncpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKG1heDpydykgd29ya2VyCisgIGRvIGkg PSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJ3KGopID0gbWF4IChydyhqKSwgYXJy YXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKwor ICAhJGFjYyBwYXJhbGxlbCB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHJ2KQorICAhJGFjYyBs b29wIHJlZHVjdGlvbihtYXg6cnYpIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRvIGog PSAxLCBuCisgICAgICBydihqKSA9IG1heCAocnYoaiksIGFycmF5KGkpKQorICAgIGVuZCBk bworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwg bnVtX2dhbmdzKG5nKSBudW1fd29ya2VycyhudykgdmVjdG9yX2xlbmd0aCh2bCkgY29weShy YykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24obWF4OnJjKSBnYW5nIHdvcmtlciB2ZWN0b3IK KyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgcmMoaikgPSBtYXggKHJj KGopLCBhcnJheShpKSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJh bGxlbAorCisgICEgVmVyaWZ5IHRoZSByZXN1bHRzCisgIGRvIGkgPSAxLCBuCisgICAgZG8g aiA9IDEsIG4KKyAgICAgIHZyZXN1bHQoaikgPSBtYXggKHZyZXN1bHQoaiksIGFycmF5KGkp KQorICAgIGVuZCBkbworICBlbmQgZG8KKworICBpZiAoY291bnQgKHJnIC5uZS4gdnJlc3Vs dCkgLm5lLiAwKSBTVE9QIDkKKyAgaWYgKGNvdW50IChydyAubmUuIHZyZXN1bHQpIC5uZS4g MCkgU1RPUCAxMAorICBpZiAoY291bnQgKHJ2IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9Q IDExCisgIGlmIChjb3VudCAocmMgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMTIKKwor ICAhCisgICEgJ21pbicgcmVkdWN0aW9ucworICAhCisKKyAgcmcgPSAwCisgIHJ3ID0gMAor ICBydiA9IDAKKyAgcmMgPSAwCisgIHZyZXN1bHQgPSAwCisKKyAgISRhY2MgcGFyYWxsZWwg bnVtX2dhbmdzKG5nKSBjb3B5KHJnKQorICAhJGFjYyBsb29wIHJlZHVjdGlvbihtaW46cmcp IGdhbmcKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgcmcoaikgPSBt aW4gKHJnKGopLCBhcnJheShpKSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVu ZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV93b3JrZXJzKG53KSBjb3B5KHJ3 KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbihtaW46cncpIHdvcmtlcgorICBkbyBpID0gMSwg bgorICAgIGRvIGogPSAxLCBuCisgICAgICBydyhqKSA9IG1pbiAocncoaiksIGFycmF5KGkp KQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRh Y2MgcGFyYWxsZWwgdmVjdG9yX2xlbmd0aCh2bCkgY29weShydikKKyAgISRhY2MgbG9vcCBy ZWR1Y3Rpb24obWluOnJ2KSB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwg bgorICAgICAgcnYoaikgPSBtaW4gKHJ2KGopLCBhcnJheShpKSkKKyAgICBlbmQgZG8KKyAg ZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9n YW5ncyhuZykgbnVtX3dvcmtlcnMobncpIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkocmMpCisg ICEkYWNjIGxvb3AgcmVkdWN0aW9uKG1pbjpyYykgZ2FuZyB3b3JrZXIgdmVjdG9yCisgIGRv IGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJjKGopID0gbWluIChyYyhqKSwg YXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwK KworICAhIFZlcmlmeSB0aGUgcmVzdWx0cworICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAx LCBuCisgICAgICB2cmVzdWx0KGopID0gbWluICh2cmVzdWx0KGopLCBhcnJheShpKSkKKyAg ICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgaWYgKGNvdW50IChyZyAubmUuIHZyZXN1bHQpIC5u ZS4gMCkgU1RPUCAxMworICBpZiAoY291bnQgKHJ3IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBT VE9QIDE0CisgIGlmIChjb3VudCAocnYgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMTUK KyAgaWYgKGNvdW50IChyYyAubmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAxNgorCisgICEK KyAgISAnLmFuZC4nIHJlZHVjdGlvbnMKKyAgIQorCisgIGxyZyA9IC50cnVlLgorICBscncg PSAudHJ1ZS4KKyAgbHJ2ID0gLnRydWUuCisgIGxyYyA9IC50cnVlLgorICBsdnJlc3VsdCA9 IC50cnVlLgorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgY29weShscmcpCisg ICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5hbmQuOmxyZykgZ2FuZworICBkbyBpID0gMSwgbgor ICAgIGRvIGogPSAxLCBuCisgICAgICBscmcoaikgPSBscmcoaikgLmFuZC4gKGFycmF5KGkp IC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAor CisgICEkYWNjIHBhcmFsbGVsIG51bV93b3JrZXJzKG53KSBjb3B5KGxydykKKyAgISRhY2Mg bG9vcCByZWR1Y3Rpb24oLmFuZC46bHJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEsIG4KKyAgICBk byBqID0gMSwgbgorICAgICAgbHJ3KGopID0gbHJ3KGopIC5hbmQuIChhcnJheShpKSAuZ2Uu IDUpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAh JGFjYyBwYXJhbGxlbCB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KGxydikKKyAgISRhY2MgbG9v cCByZWR1Y3Rpb24oLmFuZC46bHJ2KSB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBq ID0gMSwgbgorICAgICAgbHJ2KGopID0gbHJ2KGopIC5hbmQuIChhcnJheShpKSAuZ2UuIDUp CisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFj YyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51bV93b3JrZXJzKG53KSB2ZWN0b3JfbGVuZ3Ro KHZsKSBjb3B5KGxyYykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oLmFuZC46bHJjKSBnYW5n IHdvcmtlciB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAg bHJjKGopID0gbHJjKGopIC5hbmQuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisg IGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhIFZlcmlmeSB0aGUgcmVzdWx0 cworICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBsdnJlc3VsdChqKSA9 IGx2cmVzdWx0KGopIC5hbmQuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisgIGVu ZCBkbworCisgIGlmIChjb3VudCAobHJnIC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9Q IDE3CisgIGlmIChjb3VudCAobHJ3IC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDE4 CisgIGlmIChjb3VudCAobHJ2IC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDE5Cisg IGlmIChjb3VudCAobHJjIC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDIwCisKKyAg IQorICAhICcub3IuJyByZWR1Y3Rpb25zCisgICEKKworICBscmcgPSAudHJ1ZS4KKyAgbHJ3 ID0gLnRydWUuCisgIGxydiA9IC50cnVlLgorICBscmMgPSAudHJ1ZS4KKyAgbHZyZXN1bHQg PSAudHJ1ZS4KKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIGNvcHkobHJnKQor ICAhJGFjYyBsb29wIHJlZHVjdGlvbigub3IuOmxyZykgZ2FuZworICBkbyBpID0gMSwgbgor ICAgIGRvIGogPSAxLCBuCisgICAgICBscmcoaikgPSBscmcoaikgLm9yLiAoYXJyYXkoaSkg LmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisK KyAgISRhY2MgcGFyYWxsZWwgbnVtX3dvcmtlcnMobncpIGNvcHkobHJ3KQorICAhJGFjYyBs b29wIHJlZHVjdGlvbigub3IuOmxydykgd29ya2VyCisgIGRvIGkgPSAxLCBuCisgICAgZG8g aiA9IDEsIG4KKyAgICAgIGxydyhqKSA9IGxydyhqKSAub3IuIChhcnJheShpKSAuZ2UuIDUp CisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFj YyBwYXJhbGxlbCB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KGxydikKKyAgISRhY2MgbG9vcCBy ZWR1Y3Rpb24oLm9yLjpscnYpIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAx LCBuCisgICAgICBscnYoaikgPSBscnYoaikgLm9yLiAoYXJyYXkoaSkgLmdlLiA1KQorICAg IGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFy YWxsZWwgbnVtX2dhbmdzKG5nKSBudW1fd29ya2VycyhudykgdmVjdG9yX2xlbmd0aCh2bCkg Y29weShscmMpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5vci46bHJjKSBnYW5nIHdvcmtl ciB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgbHJjKGop ID0gbHJjKGopIC5vci4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRv CisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEgVmVyaWZ5IHRoZSByZXN1bHRzCisgIGRv IGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGx2cmVzdWx0KGopID0gbHZyZXN1 bHQoaikgLm9yLiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKwor ICBpZiAoY291bnQgKGxyZyAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAyMQorICBp ZiAoY291bnQgKGxydyAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAyMgorICBpZiAo Y291bnQgKGxydiAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAyMworICBpZiAoY291 bnQgKGxyYyAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAyNAorCisgICEKKyAgISAn LmVxdi4nIHJlZHVjdGlvbnMKKyAgIQorCisgIGxyZyA9IC50cnVlLgorICBscncgPSAudHJ1 ZS4KKyAgbHJ2ID0gLnRydWUuCisgIGxyYyA9IC50cnVlLgorICBsdnJlc3VsdCA9IC50cnVl LgorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgY29weShscmcpCisgICEkYWNj IGxvb3AgcmVkdWN0aW9uKC5lcXYuOmxyZykgZ2FuZworICBkbyBpID0gMSwgbgorICAgIGRv IGogPSAxLCBuCisgICAgICBscmcoaikgPSBscmcoaikgLmVxdi4gKGFycmF5KGkpIC5nZS4g NSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEk YWNjIHBhcmFsbGVsIG51bV93b3JrZXJzKG53KSBjb3B5KGxydykKKyAgISRhY2MgbG9vcCBy ZWR1Y3Rpb24oLmVxdi46bHJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0g MSwgbgorICAgICAgbHJ3KGopID0gbHJ3KGopIC5lcXYuIChhcnJheShpKSAuZ2UuIDUpCisg ICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBw YXJhbGxlbCB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KGxydikKKyAgISRhY2MgbG9vcCByZWR1 Y3Rpb24oLmVxdi46bHJ2KSB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwg bgorICAgICAgbHJ2KGopID0gbHJ2KGopIC5lcXYuIChhcnJheShpKSAuZ2UuIDUpCisgICAg ZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJh bGxlbCBudW1fZ2FuZ3MobmcpIG51bV93b3JrZXJzKG53KSB2ZWN0b3JfbGVuZ3RoKHZsKSBj b3B5KGxyYykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oLmVxdi46bHJjKSBnYW5nIHdvcmtl ciB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgbHJjKGop ID0gbHJjKGopIC5lcXYuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisgIGVuZCBk bworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhIFZlcmlmeSB0aGUgcmVzdWx0cworICBk byBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBsdnJlc3VsdChqKSA9IGx2cmVz dWx0KGopIC5lcXYuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisgIGVuZCBkbwor CisgIGlmIChjb3VudCAobHJnIC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDI1Cisg IGlmIChjb3VudCAobHJ3IC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDI2CisgIGlm IChjb3VudCAobHJ2IC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDI3CisgIGlmIChj b3VudCAobHJjIC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDI4CisKKyAgIQorICAh ICcubmVxdi4nIHJlZHVjdGlvbnMKKyAgIQorCisgIGxyZyA9IC50cnVlLgorICBscncgPSAu dHJ1ZS4KKyAgbHJ2ID0gLnRydWUuCisgIGxyYyA9IC50cnVlLgorICBsdnJlc3VsdCA9IC50 cnVlLgorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgY29weShscmcpCisgICEk YWNjIGxvb3AgcmVkdWN0aW9uKC5uZXF2LjpscmcpIGdhbmcKKyAgZG8gaSA9IDEsIG4KKyAg ICBkbyBqID0gMSwgbgorICAgICAgbHJnKGopID0gbHJnKGopIC5uZXF2LiAoYXJyYXkoaSkg LmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisK KyAgISRhY2MgcGFyYWxsZWwgbnVtX3dvcmtlcnMobncpIGNvcHkobHJ3KQorICAhJGFjYyBs b29wIHJlZHVjdGlvbigubmVxdi46bHJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEsIG4KKyAgICBk byBqID0gMSwgbgorICAgICAgbHJ3KGopID0gbHJ3KGopIC5uZXF2LiAoYXJyYXkoaSkgLmdl LiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAg ISRhY2MgcGFyYWxsZWwgdmVjdG9yX2xlbmd0aCh2bCkgY29weShscnYpCisgICEkYWNjIGxv b3AgcmVkdWN0aW9uKC5uZXF2LjpscnYpIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRv IGogPSAxLCBuCisgICAgICBscnYoaikgPSBscnYoaikgLm5lcXYuIChhcnJheShpKSAuZ2Uu IDUpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAh JGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51bV93b3JrZXJzKG53KSB2ZWN0b3JfbGVu Z3RoKHZsKSBjb3B5KGxyYykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oLm5lcXYuOmxyYykg Z2FuZyB3b3JrZXIgdmVjdG9yCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAg ICAgIGxyYyhqKSA9IGxyYyhqKSAubmVxdi4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQg ZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEgVmVyaWZ5IHRoZSBy ZXN1bHRzCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGx2cmVzdWx0 KGopID0gbHZyZXN1bHQoaikgLm5lcXYuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRv CisgIGVuZCBkbworCisgIGlmIChjb3VudCAobHJnIC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAw KSBTVE9QIDI5CisgIGlmIChjb3VudCAobHJ3IC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBT VE9QIDMwCisgIGlmIChjb3VudCAobHJ2IC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9Q IDMxCisgIGlmIChjb3VudCAobHJjIC5uZXF2LiBsdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDMy CisKK2VuZCBwcm9ncmFtIHJlZHVjdGlvbl8xMAorCmRpZmYgLS1naXQgYS9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLm9hY2MtZm9ydHJhbi9yZWR1Y3Rpb24tMTEuZjkwIGIvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5vYWNjLWZvcnRyYW4vcmVkdWN0aW9uLTExLmY5MApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGJlYzFjNzk3Y2QKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLm9hY2MtZm9ydHJhbi9y ZWR1Y3Rpb24tMTEuZjkwCkBAIC0wLDAgKzEsNDgzIEBACishIHsgZGctZG8gcnVuIH0KKwor ISBkb3VibGUgcHJlY2lzaW9uIGFycmF5IHJlZHVjdGlvbnMKKworcHJvZ3JhbSByZWR1Y3Rp b25fMTEKKyAgaW1wbGljaXQgbm9uZQorCisgIGludGVnZXIsIHBhcmFtZXRlciAgICAgOjog biA9IDEwLCBuZyA9IDgsIG53ID0gNCwgdmwgPSAzMgorICBpbnRlZ2VyICAgICAgICAgICAg ICAgIDo6IGksIGoKKyAgZG91YmxlIHByZWNpc2lvbiwgZGltZW5zaW9uIChuKSA6OiB2cmVz dWx0LCByZywgcncsIHJ2LCByYworICBsb2dpY2FsLCBkaW1lbnNpb24gKG4pIDo6IGxyZywg bHJ3LCBscnYsIGxyYywgbHZyZXN1bHQKKyAgZG91YmxlIHByZWNpc2lvbiwgZGltZW5zaW9u IChuKSA6OiBhcnJheQorCisgIGRvIGkgPSAxLCBuCisgICAgIGFycmF5KGkpID0gaQorICBl bmQgZG8KKworICAhCisgICEgJysnIHJlZHVjdGlvbnMKKyAgIQorCisgIHJnID0gMAorICBy dyA9IDAKKyAgcnYgPSAwCisgIHJjID0gMAorICB2cmVzdWx0ID0gMAorCisgICEkYWNjIHBh cmFsbGVsIG51bV9nYW5ncyhuZykgY29weShyZykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24o KzpyZykgZ2FuZworICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICByZyhq KSA9IHJnKGopICsgYXJyYXkoaSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVu ZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV93b3JrZXJzKG53KSBjb3B5KHJ3 KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbigrOnJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEsIG4K KyAgICBkbyBqID0gMSwgbgorICAgICAgcncoaikgPSBydyhqKSArIGFycmF5KGkpCisgICAg ZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJh bGxlbCB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHJ2KQorICAhJGFjYyBsb29wIHJlZHVjdGlv bigrOnJ2KSB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAg cnYoaikgPSBydihqKSArIGFycmF5KGkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFj YyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51bV93 b3JrZXJzKG53KSB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHJjKQorICAhJGFjYyBsb29wIHJl ZHVjdGlvbigrOnJjKSBnYW5nIHdvcmtlciB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBk byBqID0gMSwgbgorICAgICAgcmMoaikgPSByYyhqKSArIGFycmF5KGkpCisgICAgZW5kIGRv CisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhIFZlcmlmeSB0aGUgcmVz dWx0cworICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICB2cmVzdWx0KGop ID0gdnJlc3VsdChqKSArIGFycmF5KGkpCisgICAgZW5kIGRvCisgIGVuZCBkbworCisgIGlm IChjb3VudCAocmcgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMQorICBpZiAoY291bnQg KHJ3IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDIKKyAgaWYgKGNvdW50IChydiAubmUu IHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAzCisgIGlmIChjb3VudCAocmMgLm5lLiB2cmVzdWx0 KSAubmUuIDApIFNUT1AgNAorCisgICEKKyAgISAnKicgcmVkdWN0aW9ucworICAhCisKKyAg cmcgPSAxCisgIHJ3ID0gMQorICBydiA9IDEKKyAgcmMgPSAxCisgIHZyZXN1bHQgPSAxCisK KyAgISRhY2MgcGFyYWxsZWwgbnVtX2dhbmdzKG5nKSBjb3B5KHJnKQorICAhJGFjYyBsb29w IHJlZHVjdGlvbigqOnJnKSBnYW5nCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4K KyAgICAgIHJnKGopID0gcmcoaikgKiBhcnJheShpKQorICAgIGVuZCBkbworICBlbmQgZG8K KyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX3dvcmtlcnMo bncpIGNvcHkocncpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKCo6cncpIHdvcmtlcgorICBk byBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBydyhqKSA9IHJ3KGopICogYXJy YXkoaSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisg ICEkYWNjIHBhcmFsbGVsIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkocnYpCisgICEkYWNjIGxv b3AgcmVkdWN0aW9uKCo6cnYpIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAx LCBuCisgICAgICBydihqKSA9IHJ2KGopICogYXJyYXkoaSkKKyAgICBlbmQgZG8KKyAgZW5k IGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5n cyhuZykgbnVtX3dvcmtlcnMobncpIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkocmMpCisgICEk YWNjIGxvb3AgcmVkdWN0aW9uKCo6cmMpIGdhbmcgd29ya2VyIHZlY3RvcgorICBkbyBpID0g MSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICByYyhqKSA9IHJjKGopICogYXJyYXkoaSkK KyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEgVmVy aWZ5IHRoZSByZXN1bHRzCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAg IHZyZXN1bHQoaikgPSB2cmVzdWx0KGopICogYXJyYXkoaSkKKyAgICBlbmQgZG8KKyAgZW5k IGRvCisKKyAgaWYgKGNvdW50IChyZyAubmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA1Cisg IGlmIChjb3VudCAocncgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgNgorICBpZiAoY291 bnQgKHJ2IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDcKKyAgaWYgKGNvdW50IChyYyAu bmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA4CisKKyAgIQorICAhICdtYXgnIHJlZHVjdGlv bnMKKyAgIQorCisgIHJnID0gMAorICBydyA9IDAKKyAgcnYgPSAwCisgIHJjID0gMAorICB2 cmVzdWx0ID0gMAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgY29weShyZykK KyAgISRhY2MgbG9vcCByZWR1Y3Rpb24obWF4OnJnKSBnYW5nCisgIGRvIGkgPSAxLCBuCisg ICAgZG8gaiA9IDEsIG4KKyAgICAgIHJnKGopID0gbWF4IChyZyhqKSwgYXJyYXkoaSkpCisg ICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBw YXJhbGxlbCBudW1fd29ya2VycyhudykgY29weShydykKKyAgISRhY2MgbG9vcCByZWR1Y3Rp b24obWF4OnJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAg ICAgcncoaikgPSBtYXggKHJ3KGopLCBhcnJheShpKSkKKyAgICBlbmQgZG8KKyAgZW5kIGRv CisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIHZlY3Rvcl9sZW5n dGgodmwpIGNvcHkocnYpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKG1heDpydikgdmVjdG9y CisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJ2KGopID0gbWF4IChy dihqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFy YWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51bV93b3JrZXJzKG53 KSB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHJjKQorICAhJGFjYyBsb29wIHJlZHVjdGlvbiht YXg6cmMpIGdhbmcgd29ya2VyIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAx LCBuCisgICAgICByYyhqKSA9IG1heCAocmMoaiksIGFycmF5KGkpKQorICAgIGVuZCBkbwor ICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISBWZXJpZnkgdGhlIHJlc3Vs dHMKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgdnJlc3VsdChqKSA9 IG1heCAodnJlc3VsdChqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbworCisg IGlmIChjb3VudCAocmcgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgOQorICBpZiAoY291 bnQgKHJ3IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDEwCisgIGlmIChjb3VudCAocnYg Lm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMTEKKyAgaWYgKGNvdW50IChyYyAubmUuIHZy ZXN1bHQpIC5uZS4gMCkgU1RPUCAxMgorCisgICEKKyAgISAnbWluJyByZWR1Y3Rpb25zCisg ICEKKworICByZyA9IDAKKyAgcncgPSAwCisgIHJ2ID0gMAorICByYyA9IDAKKyAgdnJlc3Vs dCA9IDAKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIGNvcHkocmcpCisgICEk YWNjIGxvb3AgcmVkdWN0aW9uKG1pbjpyZykgZ2FuZworICBkbyBpID0gMSwgbgorICAgIGRv IGogPSAxLCBuCisgICAgICByZyhqKSA9IG1pbiAocmcoaiksIGFycmF5KGkpKQorICAgIGVu ZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxs ZWwgbnVtX3dvcmtlcnMobncpIGNvcHkocncpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKG1p bjpydykgd29ya2VyCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJ3 KGopID0gbWluIChydyhqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAh JGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCB2ZWN0b3JfbGVuZ3RoKHZs KSBjb3B5KHJ2KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbihtaW46cnYpIHZlY3RvcgorICBk byBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBydihqKSA9IG1pbiAocnYoaiks IGFycmF5KGkpKQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVs CisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX2dhbmdzKG5nKSBudW1fd29ya2VycyhudykgdmVj dG9yX2xlbmd0aCh2bCkgY29weShyYykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24obWluOnJj KSBnYW5nIHdvcmtlciB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgor ICAgICAgcmMoaikgPSBtaW4gKHJjKGopLCBhcnJheShpKSkKKyAgICBlbmQgZG8KKyAgZW5k IGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEgVmVyaWZ5IHRoZSByZXN1bHRzCisg IGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHZyZXN1bHQoaikgPSBtaW4g KHZyZXN1bHQoaiksIGFycmF5KGkpKQorICAgIGVuZCBkbworICBlbmQgZG8KKworICBpZiAo Y291bnQgKHJnIC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDEzCisgIGlmIChjb3VudCAo cncgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMTQKKyAgaWYgKGNvdW50IChydiAubmUu IHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAxNQorICBpZiAoY291bnQgKHJjIC5uZS4gdnJlc3Vs dCkgLm5lLiAwKSBTVE9QIDE2CisKKyAgIQorICAhICcuYW5kLicgcmVkdWN0aW9ucworICAh CisKKyAgbHJnID0gLnRydWUuCisgIGxydyA9IC50cnVlLgorICBscnYgPSAudHJ1ZS4KKyAg bHJjID0gLnRydWUuCisgIGx2cmVzdWx0ID0gLnRydWUuCisKKyAgISRhY2MgcGFyYWxsZWwg bnVtX2dhbmdzKG5nKSBjb3B5KGxyZykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oLmFuZC46 bHJnKSBnYW5nCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxyZyhq KSA9IGxyZyhqKSAuYW5kLiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQg ZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX3dvcmtl cnMobncpIGNvcHkobHJ3KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbiguYW5kLjpscncpIHdv cmtlcgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBscncoaikgPSBs cncoaikgLmFuZC4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisg ICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIHZlY3Rvcl9sZW5ndGgo dmwpIGNvcHkobHJ2KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbiguYW5kLjpscnYpIHZlY3Rv cgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBscnYoaikgPSBscnYo aikgLmFuZC4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEk YWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgbnVt X3dvcmtlcnMobncpIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkobHJjKQorICAhJGFjYyBsb29w IHJlZHVjdGlvbiguYW5kLjpscmMpIGdhbmcgd29ya2VyIHZlY3RvcgorICBkbyBpID0gMSwg bgorICAgIGRvIGogPSAxLCBuCisgICAgICBscmMoaikgPSBscmMoaikgLmFuZC4gKGFycmF5 KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxl bAorCisgICEgVmVyaWZ5IHRoZSByZXN1bHRzCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9 IDEsIG4KKyAgICAgIGx2cmVzdWx0KGopID0gbHZyZXN1bHQoaikgLmFuZC4gKGFycmF5KGkp IC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgaWYgKGNvdW50IChscmcgLm5l cXYuIGx2cmVzdWx0KSAubmUuIDApIFNUT1AgMTcKKyAgaWYgKGNvdW50IChscncgLm5lcXYu IGx2cmVzdWx0KSAubmUuIDApIFNUT1AgMTgKKyAgaWYgKGNvdW50IChscnYgLm5lcXYuIGx2 cmVzdWx0KSAubmUuIDApIFNUT1AgMTkKKyAgaWYgKGNvdW50IChscmMgLm5lcXYuIGx2cmVz dWx0KSAubmUuIDApIFNUT1AgMjAKKworICAhCisgICEgJy5vci4nIHJlZHVjdGlvbnMKKyAg IQorCisgIGxyZyA9IC50cnVlLgorICBscncgPSAudHJ1ZS4KKyAgbHJ2ID0gLnRydWUuCisg IGxyYyA9IC50cnVlLgorICBsdnJlc3VsdCA9IC50cnVlLgorCisgICEkYWNjIHBhcmFsbGVs IG51bV9nYW5ncyhuZykgY29weShscmcpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5vci46 bHJnKSBnYW5nCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxyZyhq KSA9IGxyZyhqKSAub3IuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisgIGVuZCBk bworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fd29ya2Vy cyhudykgY29weShscncpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5vci46bHJ3KSB3b3Jr ZXIKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgbHJ3KGopID0gbHJ3 KGopIC5vci4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEk YWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIHZlY3Rvcl9sZW5ndGgodmwp IGNvcHkobHJ2KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbigub3IuOmxydikgdmVjdG9yCisg IGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxydihqKSA9IGxydihqKSAu b3IuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBl bmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51bV93b3Jr ZXJzKG53KSB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KGxyYykKKyAgISRhY2MgbG9vcCByZWR1 Y3Rpb24oLm9yLjpscmMpIGdhbmcgd29ya2VyIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAg IGRvIGogPSAxLCBuCisgICAgICBscmMoaikgPSBscmMoaikgLm9yLiAoYXJyYXkoaSkgLmdl LiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAg ISBWZXJpZnkgdGhlIHJlc3VsdHMKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgor ICAgICAgbHZyZXN1bHQoaikgPSBsdnJlc3VsdChqKSAub3IuIChhcnJheShpKSAuZ2UuIDUp CisgICAgZW5kIGRvCisgIGVuZCBkbworCisgIGlmIChjb3VudCAobHJnIC5uZXF2LiBsdnJl c3VsdCkgLm5lLiAwKSBTVE9QIDIxCisgIGlmIChjb3VudCAobHJ3IC5uZXF2LiBsdnJlc3Vs dCkgLm5lLiAwKSBTVE9QIDIyCisgIGlmIChjb3VudCAobHJ2IC5uZXF2LiBsdnJlc3VsdCkg Lm5lLiAwKSBTVE9QIDIzCisgIGlmIChjb3VudCAobHJjIC5uZXF2LiBsdnJlc3VsdCkgLm5l LiAwKSBTVE9QIDI0CisKKyAgIQorICAhICcuZXF2LicgcmVkdWN0aW9ucworICAhCisKKyAg bHJnID0gLnRydWUuCisgIGxydyA9IC50cnVlLgorICBscnYgPSAudHJ1ZS4KKyAgbHJjID0g LnRydWUuCisgIGx2cmVzdWx0ID0gLnRydWUuCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX2dh bmdzKG5nKSBjb3B5KGxyZykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oLmVxdi46bHJnKSBn YW5nCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxyZyhqKSA9IGxy ZyhqKSAuZXF2LiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKyAg ISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX3dvcmtlcnMobncp IGNvcHkobHJ3KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbiguZXF2LjpscncpIHdvcmtlcgor ICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBscncoaikgPSBscncoaikg LmVxdi4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNj IGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIHZlY3Rvcl9sZW5ndGgodmwpIGNv cHkobHJ2KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbiguZXF2LjpscnYpIHZlY3RvcgorICBk byBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBscnYoaikgPSBscnYoaikgLmVx di4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVu ZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgbnVtX3dvcmtl cnMobncpIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkobHJjKQorICAhJGFjYyBsb29wIHJlZHVj dGlvbiguZXF2LjpscmMpIGdhbmcgd29ya2VyIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAg IGRvIGogPSAxLCBuCisgICAgICBscmMoaikgPSBscmMoaikgLmVxdi4gKGFycmF5KGkpIC5n ZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisg ICEgVmVyaWZ5IHRoZSByZXN1bHRzCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4K KyAgICAgIGx2cmVzdWx0KGopID0gbHZyZXN1bHQoaikgLmVxdi4gKGFycmF5KGkpIC5nZS4g NSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgaWYgKGNvdW50IChscmcgLm5lcXYuIGx2 cmVzdWx0KSAubmUuIDApIFNUT1AgMjUKKyAgaWYgKGNvdW50IChscncgLm5lcXYuIGx2cmVz dWx0KSAubmUuIDApIFNUT1AgMjYKKyAgaWYgKGNvdW50IChscnYgLm5lcXYuIGx2cmVzdWx0 KSAubmUuIDApIFNUT1AgMjcKKyAgaWYgKGNvdW50IChscmMgLm5lcXYuIGx2cmVzdWx0KSAu bmUuIDApIFNUT1AgMjgKKworICAhCisgICEgJy5uZXF2LicgcmVkdWN0aW9ucworICAhCisK KyAgbHJnID0gLnRydWUuCisgIGxydyA9IC50cnVlLgorICBscnYgPSAudHJ1ZS4KKyAgbHJj ID0gLnRydWUuCisgIGx2cmVzdWx0ID0gLnRydWUuCisKKyAgISRhY2MgcGFyYWxsZWwgbnVt X2dhbmdzKG5nKSBjb3B5KGxyZykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oLm5lcXYuOmxy ZykgZ2FuZworICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBscmcoaikg PSBscmcoaikgLm5lcXYuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisgIGVuZCBk bworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fd29ya2Vy cyhudykgY29weShscncpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5uZXF2LjpscncpIHdv cmtlcgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBscncoaikgPSBs cncoaikgLm5lcXYuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisgIGVuZCBkbwor ICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCB2ZWN0b3JfbGVuZ3Ro KHZsKSBjb3B5KGxydikKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oLm5lcXYuOmxydikgdmVj dG9yCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxydihqKSA9IGxy dihqKSAubmVxdi4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisg ICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykg bnVtX3dvcmtlcnMobncpIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkobHJjKQorICAhJGFjYyBs b29wIHJlZHVjdGlvbigubmVxdi46bHJjKSBnYW5nIHdvcmtlciB2ZWN0b3IKKyAgZG8gaSA9 IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgbHJjKGopID0gbHJjKGopIC5uZXF2LiAo YXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBh cmFsbGVsCisKKyAgISBWZXJpZnkgdGhlIHJlc3VsdHMKKyAgZG8gaSA9IDEsIG4KKyAgICBk byBqID0gMSwgbgorICAgICAgbHZyZXN1bHQoaikgPSBsdnJlc3VsdChqKSAubmVxdi4gKGFy cmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgaWYgKGNvdW50IChs cmcgLm5lcXYuIGx2cmVzdWx0KSAubmUuIDApIFNUT1AgMjkKKyAgaWYgKGNvdW50IChscncg Lm5lcXYuIGx2cmVzdWx0KSAubmUuIDApIFNUT1AgMzAKKyAgaWYgKGNvdW50IChscnYgLm5l cXYuIGx2cmVzdWx0KSAubmUuIDApIFNUT1AgMzEKKyAgaWYgKGNvdW50IChscmMgLm5lcXYu IGx2cmVzdWx0KSAubmUuIDApIFNUT1AgMzIKKworZW5kIHByb2dyYW0gcmVkdWN0aW9uXzEx CisKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAub2FjYy1mb3J0cmFu L3JlZHVjdGlvbi0xMi5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLm9hY2MtZm9y dHJhbi9yZWR1Y3Rpb24tMTIuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5iNjA5YzdhMjk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAub2FjYy1mb3J0cmFuL3JlZHVjdGlvbi0xMi5mOTAKQEAgLTAsMCArMSwx MzUgQEAKKyEgeyBkZy1kbyBydW4gfQorCishIGNvbXBsZXggYXJyYXkgcmVkdWN0aW9ucwor Citwcm9ncmFtIHJlZHVjdGlvbl8xMgorICBpbXBsaWNpdCBub25lCisKKyAgaW50ZWdlciwg cGFyYW1ldGVyICAgICA6OiBuID0gMTAsIG5nID0gOCwgbncgPSA0LCB2bCA9IDMyCisgIGlu dGVnZXIgICAgICAgICAgICAgICAgOjogaSwgagorICBjb21wbGV4LCBkaW1lbnNpb24gKG4p IDo6IHZyZXN1bHQsIHJnLCBydywgcnYsIHJjCisgIGxvZ2ljYWwsIGRpbWVuc2lvbiAobikg OjogbHJnLCBscncsIGxydiwgbHJjLCBsdnJlc3VsdAorICBjb21wbGV4LCBkaW1lbnNpb24g KG4pIDo6IGFycmF5CisKKyAgZG8gaSA9IDEsIG4KKyAgICAgYXJyYXkoaSkgPSBpCisgIGVu ZCBkbworCisgICEKKyAgISAnKycgcmVkdWN0aW9ucworICAhCisKKyAgcmcgPSAwCisgIHJ3 ID0gMAorICBydiA9IDAKKyAgcmMgPSAwCisgIHZyZXN1bHQgPSAwCisKKyAgISRhY2MgcGFy YWxsZWwgbnVtX2dhbmdzKG5nKSBjb3B5KHJnKQorICAhJGFjYyBsb29wIHJlZHVjdGlvbigr OnJnKSBnYW5nCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJnKGop ID0gcmcoaikgKyBhcnJheShpKQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5k IHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX3dvcmtlcnMobncpIGNvcHkocncp CisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKCs6cncpIHdvcmtlcgorICBkbyBpID0gMSwgbgor ICAgIGRvIGogPSAxLCBuCisgICAgICBydyhqKSA9IHJ3KGopICsgYXJyYXkoaSkKKyAgICBl bmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFs bGVsIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkocnYpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9u KCs6cnYpIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBy dihqKSA9IHJ2KGopICsgYXJyYXkoaSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNj IGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgbnVtX3dv cmtlcnMobncpIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkocmMpCisgICEkYWNjIGxvb3AgcmVk dWN0aW9uKCs6cmMpIGdhbmcgd29ya2VyIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRv IGogPSAxLCBuCisgICAgICByYyhqKSA9IHJjKGopICsgYXJyYXkoaSkKKyAgICBlbmQgZG8K KyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEgVmVyaWZ5IHRoZSByZXN1 bHRzCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHZyZXN1bHQoaikg PSB2cmVzdWx0KGopICsgYXJyYXkoaSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgaWYg KGNvdW50IChyZyAubmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAxCisgIGlmIChjb3VudCAo cncgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMgorICBpZiAoY291bnQgKHJ2IC5uZS4g dnJlc3VsdCkgLm5lLiAwKSBTVE9QIDMKKyAgaWYgKGNvdW50IChyYyAubmUuIHZyZXN1bHQp IC5uZS4gMCkgU1RPUCA0CisKKyAgIQorICAhICcqJyByZWR1Y3Rpb25zCisgICEKKworICBy ZyA9IDEKKyAgcncgPSAxCisgIHJ2ID0gMQorICByYyA9IDEKKyAgdnJlc3VsdCA9IDEKKwor ICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIGNvcHkocmcpCisgICEkYWNjIGxvb3Ag cmVkdWN0aW9uKCo6cmcpIGdhbmcKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgor ICAgICAgcmcoaikgPSByZyhqKSAqIGFycmF5KGkpCisgICAgZW5kIGRvCisgIGVuZCBkbwor ICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fd29ya2Vycyhu dykgY29weShydykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oKjpydykgd29ya2VyCisgIGRv IGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJ3KGopID0gcncoaikgKiBhcnJh eShpKQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAg ISRhY2MgcGFyYWxsZWwgdmVjdG9yX2xlbmd0aCh2bCkgY29weShydikKKyAgISRhY2MgbG9v cCByZWR1Y3Rpb24oKjpydikgdmVjdG9yCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEs IG4KKyAgICAgIHJ2KGopID0gcnYoaikgKiBhcnJheShpKQorICAgIGVuZCBkbworICBlbmQg ZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX2dhbmdz KG5nKSBudW1fd29ya2VycyhudykgdmVjdG9yX2xlbmd0aCh2bCkgY29weShyYykKKyAgISRh Y2MgbG9vcCByZWR1Y3Rpb24oKjpyYykgZ2FuZyB3b3JrZXIgdmVjdG9yCisgIGRvIGkgPSAx LCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJjKGopID0gcmMoaikgKiBhcnJheShpKQor ICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISBWZXJp ZnkgdGhlIHJlc3VsdHMKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAg dnJlc3VsdChqKSA9IHZyZXN1bHQoaikgKiBhcnJheShpKQorICAgIGVuZCBkbworICBlbmQg ZG8KKworICBpZiAoY291bnQgKHJnIC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDUKKyAg aWYgKGNvdW50IChydyAubmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA2CisgIGlmIChjb3Vu dCAocnYgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgNworICBpZiAoY291bnQgKHJjIC5u ZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDgKKworZW5kIHByb2dyYW0gcmVkdWN0aW9uXzEy CisKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAub2FjYy1mb3J0cmFu L3JlZHVjdGlvbi0xMy5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLm9hY2MtZm9y dHJhbi9yZWR1Y3Rpb24tMTMuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4wODhjNWNkM2IwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAub2FjYy1mb3J0cmFuL3JlZHVjdGlvbi0xMy5mOTAKQEAgLTAsMCArMSw2 NiBAQAorISB7IGRnLWRvIHJ1biB9CisKKyEgcmVjb3JkIHR5cGUgcmVkdWN0aW9ucworCitw cm9ncmFtIHJlZHVjdGlvbl8xMworICBpbXBsaWNpdCBub25lCisKKyAgdHlwZSB0MQorICAg ICBpbnRlZ2VyIDo6IGkKKyAgICAgcmVhbCA6OiByCisgIGVuZCB0eXBlIHQxCisKKyAgdHlw ZSB0MgorICAgICByZWFsIDo6IHIKKyAgICAgaW50ZWdlciA6OiBpCisgICAgIGRvdWJsZSBw cmVjaXNpb24gOjogZAorICBlbmQgdHlwZSB0MgorCisgIGludGVnZXIsIHBhcmFtZXRlciA6 OiBuID0gMTAsIG5nID0gOCwgbncgPSA0LCB2bCA9IDMyCisgIGludGVnZXIgOjogaQorICB0 eXBlKHQxKSA6OiB2MSwgYTEKKyAgdHlwZSAodDIpIDo6IHYyLCBhMgorCisgIHYxJWkgPSAw CisgIHYxJXIgPSAwCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgbnVtX3dvcmtl cnMobncpIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkodjEpCisgICEkYWNjIGxvb3AgcmVkdWN0 aW9uICgrOnYxKQorICBkbyBpID0gMSwgbgorICAgICB2MSVpID0gdjElaSArIDEKKyAgICAg djElciA9IHYxJXIgKyAyCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKyAgYTEl aSA9IDAKKyAgYTElciA9IDAKKyAgZG8gaSA9IDEsIG4KKyAgICAgYTElaSA9IGExJWkgKyAx CisgICAgIGExJXIgPSBhMSVyICsgMgorICBlbmQgZG8KKyAgaWYgKHYxJWkgLm5lLiBhMSVp KSBTVE9QIDEKKyAgaWYgKHYxJXIgLm5lLiBhMSVyKSBTVE9QIDIKKworICB2MiVpID0gMQor ICB2MiVyID0gMQorICB2MiVkID0gMQorICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3Mobmcp IG51bV93b3JrZXJzKG53KSB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHYyKQorICAhJGFjYyBs b29wIHJlZHVjdGlvbiAoKjp2MikKKyAgZG8gaSA9IDEsIG4KKyAgICAgdjIlaSA9IHYyJWkg KiAyCisgICAgIHYyJXIgPSB2MiVyICogMS4xCisgICAgIHYyJWQgPSB2MiVkICogMS4zCisg IGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKyAgYTIlaSA9IDEKKyAgYTIlciA9IDEK KyAgYTIlZCA9IDEKKyAgZG8gaSA9IDEsIG4KKyAgICAgYTIlaSA9IGEyJWkgKiAyCisgICAg IGEyJXIgPSBhMiVyICogMS4xCisgICAgIGEyJWQgPSBhMiVkICogMS4zCisgIGVuZCBkbwor CisgIGlmICh2MiVpIC5uZS4gYTIlaSkgU1RPUCAzCisgIGlmICh2MiVyIC5uZS4gYTIlcikg U1RPUCA0CisgIGlmICh2MiVkIC5uZS4gYTIlZCkgU1RPUCA1CisKK2VuZCBwcm9ncmFtIHJl ZHVjdGlvbl8xMwpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5vYWNj LWZvcnRyYW4vcmVkdWN0aW9uLTkuZjkwIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5v YWNjLWZvcnRyYW4vcmVkdWN0aW9uLTkuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi40M2FiMTU1YWE3MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAub2FjYy1mb3J0cmFuL3JlZHVjdGlvbi05LmY5MApAQCAtMCww ICsxLDY1NyBAQAorISB7IGRnLWRvIHJ1biB9CisKKyEgaW50ZWdlciBhcnJheSByZWR1Y3Rp b25zCisKK3Byb2dyYW0gcmVkdWN0aW9uXzkKKyAgaW1wbGljaXQgbm9uZQorCisgIGludGVn ZXIsIHBhcmFtZXRlciAgICAgOjogbiA9IDEwLCBuZyA9IDgsIG53ID0gNCwgdmwgPSAzMgor ICBpbnRlZ2VyICAgICAgICAgICAgICAgIDo6IGksIGoKKyAgaW50ZWdlciwgZGltZW5zaW9u IChuKSA6OiB2cmVzdWx0LCByZywgcncsIHJ2LCByYworICBsb2dpY2FsLCBkaW1lbnNpb24g KG4pIDo6IGxyZywgbHJ3LCBscnYsIGxyYywgbHZyZXN1bHQKKyAgaW50ZWdlciwgZGltZW5z aW9uIChuKSA6OiBhcnJheQorCisgIGRvIGkgPSAxLCBuCisgICAgIGFycmF5KGkpID0gaQor ICBlbmQgZG8KKworICAhCisgICEgJysnIHJlZHVjdGlvbnMKKyAgIQorCisgIHJnID0gMAor ICBydyA9IDAKKyAgcnYgPSAwCisgIHJjID0gMAorICB2cmVzdWx0ID0gMAorCisgICEkYWNj IHBhcmFsbGVsIG51bV9nYW5ncyhuZykgY29weShyZykKKyAgISRhY2MgbG9vcCByZWR1Y3Rp b24oKzpyZykgZ2FuZworICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBy ZyhqKSA9IHJnKGopICsgYXJyYXkoaSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNj IGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV93b3JrZXJzKG53KSBjb3B5 KHJ3KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbigrOnJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEs IG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgcncoaikgPSBydyhqKSArIGFycmF5KGkpCisg ICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBw YXJhbGxlbCB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHJ2KQorICAhJGFjYyBsb29wIHJlZHVj dGlvbigrOnJ2KSB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAg ICAgcnYoaikgPSBydihqKSArIGFycmF5KGkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAh JGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51 bV93b3JrZXJzKG53KSB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHJjKQorICAhJGFjYyBsb29w IHJlZHVjdGlvbigrOnJjKSBnYW5nIHdvcmtlciB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAg ICBkbyBqID0gMSwgbgorICAgICAgcmMoaikgPSByYyhqKSArIGFycmF5KGkpCisgICAgZW5k IGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhIFZlcmlmeSB0aGUg cmVzdWx0cworICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICB2cmVzdWx0 KGopID0gdnJlc3VsdChqKSArIGFycmF5KGkpCisgICAgZW5kIGRvCisgIGVuZCBkbworCisg IGlmIChjb3VudCAocmcgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMQorICBpZiAoY291 bnQgKHJ3IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDIKKyAgaWYgKGNvdW50IChydiAu bmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAzCisgIGlmIChjb3VudCAocmMgLm5lLiB2cmVz dWx0KSAubmUuIDApIFNUT1AgNAorCisgICEKKyAgISAnKicgcmVkdWN0aW9ucworICAhCisK KyAgcmcgPSAxCisgIHJ3ID0gMQorICBydiA9IDEKKyAgcmMgPSAxCisgIHZyZXN1bHQgPSAx CisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX2dhbmdzKG5nKSBjb3B5KHJnKQorICAhJGFjYyBs b29wIHJlZHVjdGlvbigqOnJnKSBnYW5nCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEs IG4KKyAgICAgIHJnKGopID0gcmcoaikgKiBhcnJheShpKQorICAgIGVuZCBkbworICBlbmQg ZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX3dvcmtl cnMobncpIGNvcHkocncpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKCo6cncpIHdvcmtlcgor ICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBydyhqKSA9IHJ3KGopICog YXJyYXkoaSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAor CisgICEkYWNjIHBhcmFsbGVsIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkocnYpCisgICEkYWNj IGxvb3AgcmVkdWN0aW9uKCo6cnYpIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRvIGog PSAxLCBuCisgICAgICBydihqKSA9IHJ2KGopICogYXJyYXkoaSkKKyAgICBlbmQgZG8KKyAg ZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9n YW5ncyhuZykgbnVtX3dvcmtlcnMobncpIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkocmMpCisg ICEkYWNjIGxvb3AgcmVkdWN0aW9uKCo6cmMpIGdhbmcgd29ya2VyIHZlY3RvcgorICBkbyBp ID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICByYyhqKSA9IHJjKGopICogYXJyYXko aSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEg VmVyaWZ5IHRoZSByZXN1bHRzCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAg ICAgIHZyZXN1bHQoaikgPSB2cmVzdWx0KGopICogYXJyYXkoaSkKKyAgICBlbmQgZG8KKyAg ZW5kIGRvCisKKyAgaWYgKGNvdW50IChyZyAubmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA1 CisgIGlmIChjb3VudCAocncgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgNgorICBpZiAo Y291bnQgKHJ2IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDcKKyAgaWYgKGNvdW50IChy YyAubmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA4CisKKyAgIQorICAhICdtYXgnIHJlZHVj dGlvbnMKKyAgIQorCisgIHJnID0gMAorICBydyA9IDAKKyAgcnYgPSAwCisgIHJjID0gMAor ICB2cmVzdWx0ID0gMAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgY29weShy ZykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24obWF4OnJnKSBnYW5nCisgIGRvIGkgPSAxLCBu CisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJnKGopID0gbWF4IChyZyhqKSwgYXJyYXkoaSkp CisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFj YyBwYXJhbGxlbCBudW1fd29ya2VycyhudykgY29weShydykKKyAgISRhY2MgbG9vcCByZWR1 Y3Rpb24obWF4OnJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgor ICAgICAgcncoaikgPSBtYXggKHJ3KGopLCBhcnJheShpKSkKKyAgICBlbmQgZG8KKyAgZW5k IGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIHZlY3Rvcl9s ZW5ndGgodmwpIGNvcHkocnYpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKG1heDpydikgdmVj dG9yCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJ2KGopID0gbWF4 IChydihqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQg cGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51bV93b3JrZXJz KG53KSB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHJjKQorICAhJGFjYyBsb29wIHJlZHVjdGlv bihtYXg6cmMpIGdhbmcgd29ya2VyIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRvIGog PSAxLCBuCisgICAgICByYyhqKSA9IG1heCAocmMoaiksIGFycmF5KGkpKQorICAgIGVuZCBk bworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISBWZXJpZnkgdGhlIHJl c3VsdHMKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgdnJlc3VsdChq KSA9IG1heCAodnJlc3VsdChqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbwor CisgIGlmIChjb3VudCAocmcgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgOQorICBpZiAo Y291bnQgKHJ3IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDEwCisgIGlmIChjb3VudCAo cnYgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMTEKKyAgaWYgKGNvdW50IChyYyAubmUu IHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAxMgorCisgICEKKyAgISAnbWluJyByZWR1Y3Rpb25z CisgICEKKworICByZyA9IDAKKyAgcncgPSAwCisgIHJ2ID0gMAorICByYyA9IDAKKyAgdnJl c3VsdCA9IDAKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIGNvcHkocmcpCisg ICEkYWNjIGxvb3AgcmVkdWN0aW9uKG1pbjpyZykgZ2FuZworICBkbyBpID0gMSwgbgorICAg IGRvIGogPSAxLCBuCisgICAgICByZyhqKSA9IG1pbiAocmcoaiksIGFycmF5KGkpKQorICAg IGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFy YWxsZWwgbnVtX3dvcmtlcnMobncpIGNvcHkocncpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9u KG1pbjpydykgd29ya2VyCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAg IHJ3KGopID0gbWluIChydyhqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbwor ICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCB2ZWN0b3JfbGVuZ3Ro KHZsKSBjb3B5KHJ2KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbihtaW46cnYpIHZlY3Rvcgor ICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBydihqKSA9IG1pbiAocnYo aiksIGFycmF5KGkpKQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFs bGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX2dhbmdzKG5nKSBudW1fd29ya2Vycyhudykg dmVjdG9yX2xlbmd0aCh2bCkgY29weShyYykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24obWlu OnJjKSBnYW5nIHdvcmtlciB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwg bgorICAgICAgcmMoaikgPSBtaW4gKHJjKGopLCBhcnJheShpKSkKKyAgICBlbmQgZG8KKyAg ZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEgVmVyaWZ5IHRoZSByZXN1bHRz CisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHZyZXN1bHQoaikgPSBt aW4gKHZyZXN1bHQoaiksIGFycmF5KGkpKQorICAgIGVuZCBkbworICBlbmQgZG8KKworICBp ZiAoY291bnQgKHJnIC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDEzCisgIGlmIChjb3Vu dCAocncgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMTQKKyAgaWYgKGNvdW50IChydiAu bmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAxNQorICBpZiAoY291bnQgKHJjIC5uZS4gdnJl c3VsdCkgLm5lLiAwKSBTVE9QIDE2CisKKyAgIQorICAhICdpYW5kJyByZWR1Y3Rpb25zCisg ICEKKworICByZyA9IDEKKyAgcncgPSAxCisgIHJ2ID0gMQorICByYyA9IDEKKyAgdnJlc3Vs dCA9IDEKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIGNvcHkocmcpCisgICEk YWNjIGxvb3AgcmVkdWN0aW9uKGlhbmQ6cmcpIGdhbmcKKyAgZG8gaSA9IDEsIG4KKyAgICBk byBqID0gMSwgbgorICAgICAgcmcoaikgPSBpYW5kIChyZyhqKSwgYXJyYXkoaSkpCisgICAg ZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJh bGxlbCBudW1fd29ya2VycyhudykgY29weShydykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24o aWFuZDpydykgd29ya2VyCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAg IHJ3KGopID0gaWFuZCAocncoaiksIGFycmF5KGkpKQorICAgIGVuZCBkbworICBlbmQgZG8K KyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgdmVjdG9yX2xlbmd0 aCh2bCkgY29weShydikKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oaWFuZDpydikgdmVjdG9y CisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJ2KGopID0gaWFuZCAo cnYoaiksIGFycmF5KGkpKQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBh cmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX2dhbmdzKG5nKSBudW1fd29ya2Vycyhu dykgdmVjdG9yX2xlbmd0aCh2bCkgY29weShyYykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24o aWFuZDpyYykgZ2FuZyB3b3JrZXIgdmVjdG9yCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9 IDEsIG4KKyAgICAgIHJjKGopID0gaWFuZCAocmMoaiksIGFycmF5KGkpKQorICAgIGVuZCBk bworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISBWZXJpZnkgdGhlIHJl c3VsdHMKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgdnJlc3VsdChq KSA9IGlhbmQgKHZyZXN1bHQoaiksIGFycmF5KGkpKQorICAgIGVuZCBkbworICBlbmQgZG8K KworICBpZiAoY291bnQgKHJnIC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDE3CisgIGlm IChjb3VudCAocncgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMTgKKyAgaWYgKGNvdW50 IChydiAubmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAxOQorICBpZiAoY291bnQgKHJjIC5u ZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDIwCisKKyAgIQorICAhICdpb3InIHJlZHVjdGlv bnMKKyAgIQorCisgIHJnID0gMAorICBydyA9IDAKKyAgcnYgPSAwCisgIHJjID0gMAorICB2 cmVzdWx0ID0gMAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgY29weShyZykK KyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oaW9yOnJnKSBnYW5nCisgIGRvIGkgPSAxLCBuCisg ICAgZG8gaiA9IDEsIG4KKyAgICAgIHJnKGopID0gaW9yIChyZyhqKSwgYXJyYXkoaSkpCisg ICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBw YXJhbGxlbCBudW1fd29ya2VycyhudykgY29weShydykKKyAgISRhY2MgbG9vcCByZWR1Y3Rp b24oaW9yOnJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAg ICAgcncoaikgPSBpb3IgKHJ3KGopLCBhcnJheShpKSkKKyAgICBlbmQgZG8KKyAgZW5kIGRv CisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIHZlY3Rvcl9sZW5n dGgodmwpIGNvcHkocnYpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKGlvcjpydikgdmVjdG9y CisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIHJ2KGopID0gaW9yIChy dihqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFy YWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51bV93b3JrZXJzKG53 KSB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHJjKQorICAhJGFjYyBsb29wIHJlZHVjdGlvbihp b3I6cmMpIGdhbmcgd29ya2VyIHZlY3RvcgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAx LCBuCisgICAgICByYyhqKSA9IGlvciAocmMoaiksIGFycmF5KGkpKQorICAgIGVuZCBkbwor ICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISBWZXJpZnkgdGhlIHJlc3Vs dHMKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgdnJlc3VsdChqKSA9 IGlvciAodnJlc3VsdChqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbworCisg IGlmIChjb3VudCAocmcgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMjEKKyAgaWYgKGNv dW50IChydyAubmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAyMgorICBpZiAoY291bnQgKHJ2 IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDIzCisgIGlmIChjb3VudCAocmMgLm5lLiB2 cmVzdWx0KSAubmUuIDApIFNUT1AgMjQKKworICAhCisgICEgJ2llb3InIHJlZHVjdGlvbnMK KyAgIQorCisgIHJnID0gMAorICBydyA9IDAKKyAgcnYgPSAwCisgIHJjID0gMAorICB2cmVz dWx0ID0gMAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhuZykgY29weShyZykKKyAg ISRhY2MgbG9vcCByZWR1Y3Rpb24oaWVvcjpyZykgZ2FuZworICBkbyBpID0gMSwgbgorICAg IGRvIGogPSAxLCBuCisgICAgICByZyhqKSA9IGllb3IgKHJnKGopLCBhcnJheShpKSkKKyAg ICBlbmQgZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBh cmFsbGVsIG51bV93b3JrZXJzKG53KSBjb3B5KHJ3KQorICAhJGFjYyBsb29wIHJlZHVjdGlv bihpZW9yOnJ3KSB3b3JrZXIKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAg ICAgcncoaikgPSBpZW9yIChydyhqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBk bworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCB2ZWN0b3JfbGVu Z3RoKHZsKSBjb3B5KHJ2KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbihpZW9yOnJ2KSB2ZWN0 b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgcnYoaikgPSBpZW9y IChydihqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQg cGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIG51bV93b3JrZXJz KG53KSB2ZWN0b3JfbGVuZ3RoKHZsKSBjb3B5KHJjKQorICAhJGFjYyBsb29wIHJlZHVjdGlv bihpZW9yOnJjKSBnYW5nIHdvcmtlciB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBq ID0gMSwgbgorICAgICAgcmMoaikgPSBpZW9yIChyYyhqKSwgYXJyYXkoaSkpCisgICAgZW5k IGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhIFZlcmlmeSB0aGUg cmVzdWx0cworICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICB2cmVzdWx0 KGopID0gaWVvciAodnJlc3VsdChqKSwgYXJyYXkoaSkpCisgICAgZW5kIGRvCisgIGVuZCBk bworCisgIGlmIChjb3VudCAocmcgLm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMjUKKyAg aWYgKGNvdW50IChydyAubmUuIHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAyNgorICBpZiAoY291 bnQgKHJ2IC5uZS4gdnJlc3VsdCkgLm5lLiAwKSBTVE9QIDI3CisgIGlmIChjb3VudCAocmMg Lm5lLiB2cmVzdWx0KSAubmUuIDApIFNUT1AgMjgKKworICAhCisgICEgJy5hbmQuJyByZWR1 Y3Rpb25zCisgICEKKworICBscmcgPSAudHJ1ZS4KKyAgbHJ3ID0gLnRydWUuCisgIGxydiA9 IC50cnVlLgorICBscmMgPSAudHJ1ZS4KKyAgbHZyZXN1bHQgPSAudHJ1ZS4KKworICAhJGFj YyBwYXJhbGxlbCBudW1fZ2FuZ3MobmcpIGNvcHkobHJnKQorICAhJGFjYyBsb29wIHJlZHVj dGlvbiguYW5kLjpscmcpIGdhbmcKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgor ICAgICAgbHJnKGopID0gbHJnKGopIC5hbmQuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5k IGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxl bCBudW1fd29ya2VycyhudykgY29weShscncpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5h bmQuOmxydykgd29ya2VyCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAg IGxydyhqKSA9IGxydyhqKSAuYW5kLiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbwor ICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgdmVj dG9yX2xlbmd0aCh2bCkgY29weShscnYpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5hbmQu OmxydikgdmVjdG9yCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxy dihqKSA9IGxydihqKSAuYW5kLiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBl bmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX2dh bmdzKG5nKSBudW1fd29ya2VycyhudykgdmVjdG9yX2xlbmd0aCh2bCkgY29weShscmMpCisg ICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5hbmQuOmxyYykgZ2FuZyB3b3JrZXIgdmVjdG9yCisg IGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxyYyhqKSA9IGxyYyhqKSAu YW5kLiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2Mg ZW5kIHBhcmFsbGVsCisKKyAgISBWZXJpZnkgdGhlIHJlc3VsdHMKKyAgZG8gaSA9IDEsIG4K KyAgICBkbyBqID0gMSwgbgorICAgICAgbHZyZXN1bHQoaikgPSBsdnJlc3VsdChqKSAuYW5k LiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKworICBpZiAoY291 bnQgKGxyZyAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAyOQorICBpZiAoY291bnQg KGxydyAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAzMAorICBpZiAoY291bnQgKGxy diAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAzMQorICBpZiAoY291bnQgKGxyYyAu bmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAzMgorCisgICEKKyAgISAnLm9yLicgcmVk dWN0aW9ucworICAhCisKKyAgbHJnID0gLnRydWUuCisgIGxydyA9IC50cnVlLgorICBscnYg PSAudHJ1ZS4KKyAgbHJjID0gLnRydWUuCisgIGx2cmVzdWx0ID0gLnRydWUuCisKKyAgISRh Y2MgcGFyYWxsZWwgbnVtX2dhbmdzKG5nKSBjb3B5KGxyZykKKyAgISRhY2MgbG9vcCByZWR1 Y3Rpb24oLm9yLjpscmcpIGdhbmcKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgor ICAgICAgbHJnKGopID0gbHJnKGopIC5vci4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQg ZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVs IG51bV93b3JrZXJzKG53KSBjb3B5KGxydykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oLm9y LjpscncpIHdvcmtlcgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBs cncoaikgPSBscncoaikgLm9yLiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBl bmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgdmVjdG9y X2xlbmd0aCh2bCkgY29weShscnYpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5vci46bHJ2 KSB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAgbHJ2KGop ID0gbHJ2KGopIC5vci4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRv CisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIG51bV9nYW5ncyhu ZykgbnVtX3dvcmtlcnMobncpIHZlY3Rvcl9sZW5ndGgodmwpIGNvcHkobHJjKQorICAhJGFj YyBsb29wIHJlZHVjdGlvbigub3IuOmxyYykgZ2FuZyB3b3JrZXIgdmVjdG9yCisgIGRvIGkg PSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxyYyhqKSA9IGxyYyhqKSAub3IuIChh cnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAhJGFjYyBlbmQgcGFy YWxsZWwKKworICAhIFZlcmlmeSB0aGUgcmVzdWx0cworICBkbyBpID0gMSwgbgorICAgIGRv IGogPSAxLCBuCisgICAgICBsdnJlc3VsdChqKSA9IGx2cmVzdWx0KGopIC5vci4gKGFycmF5 KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8KKyAgZW5kIGRvCisKKyAgaWYgKGNvdW50IChscmcg Lm5lcXYuIGx2cmVzdWx0KSAubmUuIDApIFNUT1AgMzMKKyAgaWYgKGNvdW50IChscncgLm5l cXYuIGx2cmVzdWx0KSAubmUuIDApIFNUT1AgMzQKKyAgaWYgKGNvdW50IChscnYgLm5lcXYu IGx2cmVzdWx0KSAubmUuIDApIFNUT1AgMzUKKyAgaWYgKGNvdW50IChscmMgLm5lcXYuIGx2 cmVzdWx0KSAubmUuIDApIFNUT1AgMzYKKworICAhCisgICEgJy5lcXYuJyByZWR1Y3Rpb25z CisgICEKKworICBscmcgPSAudHJ1ZS4KKyAgbHJ3ID0gLnRydWUuCisgIGxydiA9IC50cnVl LgorICBscmMgPSAudHJ1ZS4KKyAgbHZyZXN1bHQgPSAudHJ1ZS4KKworICAhJGFjYyBwYXJh bGxlbCBudW1fZ2FuZ3MobmcpIGNvcHkobHJnKQorICAhJGFjYyBsb29wIHJlZHVjdGlvbigu ZXF2LjpscmcpIGdhbmcKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAg bHJnKGopID0gbHJnKGopIC5lcXYuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisg IGVuZCBkbworICAhJGFjYyBlbmQgcGFyYWxsZWwKKworICAhJGFjYyBwYXJhbGxlbCBudW1f d29ya2VycyhudykgY29weShscncpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5lcXYuOmxy dykgd29ya2VyCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxydyhq KSA9IGxydyhqKSAuZXF2LiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQg ZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgdmVjdG9yX2xl bmd0aCh2bCkgY29weShscnYpCisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5lcXYuOmxydikg dmVjdG9yCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxydihqKSA9 IGxydihqKSAuZXF2LiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8K KyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVtX2dhbmdzKG5n KSBudW1fd29ya2VycyhudykgdmVjdG9yX2xlbmd0aCh2bCkgY29weShscmMpCisgICEkYWNj IGxvb3AgcmVkdWN0aW9uKC5lcXYuOmxyYykgZ2FuZyB3b3JrZXIgdmVjdG9yCisgIGRvIGkg PSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAgIGxyYyhqKSA9IGxyYyhqKSAuZXF2LiAo YXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKyAgISRhY2MgZW5kIHBh cmFsbGVsCisKKyAgISBWZXJpZnkgdGhlIHJlc3VsdHMKKyAgZG8gaSA9IDEsIG4KKyAgICBk byBqID0gMSwgbgorICAgICAgbHZyZXN1bHQoaikgPSBsdnJlc3VsdChqKSAuZXF2LiAoYXJy YXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKworICBpZiAoY291bnQgKGxy ZyAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAzNworICBpZiAoY291bnQgKGxydyAu bmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAzOAorICBpZiAoY291bnQgKGxydiAubmVx di4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCAzOQorICBpZiAoY291bnQgKGxyYyAubmVxdi4g bHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA0MAorCisgICEKKyAgISAnLm5lcXYuJyByZWR1Y3Rp b25zCisgICEKKworICBscmcgPSAudHJ1ZS4KKyAgbHJ3ID0gLnRydWUuCisgIGxydiA9IC50 cnVlLgorICBscmMgPSAudHJ1ZS4KKyAgbHZyZXN1bHQgPSAudHJ1ZS4KKworICAhJGFjYyBw YXJhbGxlbCBudW1fZ2FuZ3MobmcpIGNvcHkobHJnKQorICAhJGFjYyBsb29wIHJlZHVjdGlv bigubmVxdi46bHJnKSBnYW5nCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAg ICAgIGxyZyhqKSA9IGxyZyhqKSAubmVxdi4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQg ZG8KKyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVs IG51bV93b3JrZXJzKG53KSBjb3B5KGxydykKKyAgISRhY2MgbG9vcCByZWR1Y3Rpb24oLm5l cXYuOmxydykgd29ya2VyCisgIGRvIGkgPSAxLCBuCisgICAgZG8gaiA9IDEsIG4KKyAgICAg IGxydyhqKSA9IGxydyhqKSAubmVxdi4gKGFycmF5KGkpIC5nZS4gNSkKKyAgICBlbmQgZG8K KyAgZW5kIGRvCisgICEkYWNjIGVuZCBwYXJhbGxlbAorCisgICEkYWNjIHBhcmFsbGVsIHZl Y3Rvcl9sZW5ndGgodmwpIGNvcHkobHJ2KQorICAhJGFjYyBsb29wIHJlZHVjdGlvbigubmVx di46bHJ2KSB2ZWN0b3IKKyAgZG8gaSA9IDEsIG4KKyAgICBkbyBqID0gMSwgbgorICAgICAg bHJ2KGopID0gbHJ2KGopIC5uZXF2LiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbwor ICBlbmQgZG8KKyAgISRhY2MgZW5kIHBhcmFsbGVsCisKKyAgISRhY2MgcGFyYWxsZWwgbnVt X2dhbmdzKG5nKSBudW1fd29ya2VycyhudykgdmVjdG9yX2xlbmd0aCh2bCkgY29weShscmMp CisgICEkYWNjIGxvb3AgcmVkdWN0aW9uKC5uZXF2LjpscmMpIGdhbmcgd29ya2VyIHZlY3Rv cgorICBkbyBpID0gMSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBscmMoaikgPSBscmMo aikgLm5lcXYuIChhcnJheShpKSAuZ2UuIDUpCisgICAgZW5kIGRvCisgIGVuZCBkbworICAh JGFjYyBlbmQgcGFyYWxsZWwKKworICAhIFZlcmlmeSB0aGUgcmVzdWx0cworICBkbyBpID0g MSwgbgorICAgIGRvIGogPSAxLCBuCisgICAgICBsdnJlc3VsdChqKSA9IGx2cmVzdWx0KGop IC5uZXF2LiAoYXJyYXkoaSkgLmdlLiA1KQorICAgIGVuZCBkbworICBlbmQgZG8KKworICBp ZiAoY291bnQgKGxyZyAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA0MQorICBpZiAo Y291bnQgKGxydyAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA0MgorICBpZiAoY291 bnQgKGxydiAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA0MworICBpZiAoY291bnQg KGxyYyAubmVxdi4gbHZyZXN1bHQpIC5uZS4gMCkgU1RPUCA0NAorCitlbmQgcHJvZ3JhbSBy ZWR1Y3Rpb25fOQorCg== --------------2NqXIty1h0Ie0ogvuydvtY01--