From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id cIadApEE5F7DLAAA0tVLHw (envelope-from ) for ; Fri, 12 Jun 2020 22:41:21 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id EG8POpAE5F6oDQAAB5/wlQ (envelope-from ) for ; Fri, 12 Jun 2020 22:41:20 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 839EB940712 for ; Fri, 12 Jun 2020 22:41:20 +0000 (UTC) Received: from localhost ([::1]:55218 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jjsMR-0007LV-D3 for larch@yhetil.org; Fri, 12 Jun 2020 18:41:19 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jjsMI-0007LP-Q2 for guix-devel@gnu.org; Fri, 12 Jun 2020 18:41:10 -0400 Received: from sender4-of-o53.zoho.com ([136.143.188.53]:21326) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jjsMG-0001JA-Km for guix-devel@gnu.org; Fri, 12 Jun 2020 18:41:10 -0400 ARC-Seal: i=1; a=rsa-sha256; t=1592001664; cv=none; d=zohomail.com; s=zohoarc; b=jau0Thy9Ue3cwbVxcbMoDom3xuxwldfPbTp+re+s3upRk+CLHclgauhjNboq8UGrA/6yE4kGF9BI1GWZlcqLBpH3DnjXW9UgiDznfgOXDGoydYnyzFRgXYtxY+V+zMalnys161pX/Wef8B6O5xpF2TjMls/mh2hOqQs4DD0eh/M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1592001664; h=Content-Type:Date:From:MIME-Version:Message-ID:Subject:To; bh=i5Lc3zgYobxy72l7dOWzG8i0Vv+/rSU6kEGsmgK+hWI=; b=N3bPbDjfT8wedQyZHOMoMdUcTm+nEpRRdaYpQaBbd1ASYZ8vBoet4Qte4rsGxctU1F9rpaoPNl3vh1aOhC4PimMoZYxKGDnzAGUDXThwLFwatTM4VX1p3vlBLcvkcj4neeRuoE1E2mGCczlETcg6lmWy3Y5QeedmZPafSqu2+eM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=elephly.net; spf=pass smtp.mailfrom=rekado@elephly.net; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1592001664; s=zoho; d=elephly.net; i=rekado@elephly.net; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type; bh=i5Lc3zgYobxy72l7dOWzG8i0Vv+/rSU6kEGsmgK+hWI=; b=DzGa04CZfaOfLL63ELt7FwvmDRqExihAg5x9CmcWtMBMJu4jJnuvm6R+QfDJV0oG QVhtb/UG5z9Qo1PblQKjkoPNLKCzpED6kkzjaCRSqkB8J6NK2CkdasEOtfZ0RAuzlPz iCbV1sw+PM4E56Jmii5LUoe4j/jwXcnhX98BzbKs= Received: from localhost (p54ad4aa3.dip0.t-ipconnect.de [84.173.74.163]) by mx.zohomail.com with SMTPS id 1592001661537975.9417283940938; Fri, 12 Jun 2020 15:41:01 -0700 (PDT) User-agent: mu4e 1.4.4; emacs 26.3 From: Ricardo Wurmus To: guix-devel@gnu.org Subject: generate commit messages for package updates X-URL: https://elephly.net X-PGP-Key: https://elephly.net/rekado.pubkey X-PGP-Fingerprint: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC Date: Sat, 13 Jun 2020 00:40:58 +0200 Message-ID: <87pna3ewlh.fsf@elephly.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Zoho-Virus-Status: 1 X-ZohoMailClient: External Received-SPF: pass client-ip=136.143.188.53; envelope-from=rekado@elephly.net; helo=sender4-of-o53.zoho.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/12 18:41:05 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=elephly.net header.s=zoho header.b=DzGa04CZ; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-devel-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-devel-bounces@gnu.org X-Spam-Score: -2.21 X-TUID: XMqo+urpFPIX --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Guix, I=E2=80=99m currently working on upgrading all Bioconductor packages to the= 3.11 release. The hardest work here is to write commit messages for the 200+ packages that have changed. Even with the =E2=80=9Cupdate=E2=80=9D yasnipp= et and magit this takes a very long time. I wrote a little tool to reduce the amount of time needed to create commits. It is not fully automatic yet as it requires my input to stage hunks, but the commit messages it produces take all input changes into account, which is something the =E2=80=9Cupdate=E2=80=9D yasnippet does not= do. After =E2=80=9Cguix refresh -t bioconductor -u=E2=80=9D, manually verifying= and implementing the suggested changes, and building all packages, I run =E2=80=9Cgit add -p=E2=80=9D to stage hunks that belong to the same package= definition. Then I run the attached tool to make a commit: ./committer.scm | git commit -F - The tool works by looking at the unified diff in the staging area and generating two S-expressions corresponding to the original package definition and the changed package definition, respectively. It then looks at the inputs, propagated-inputs, and native-inputs fields and generates a GNU ChangeLog-style commit message describing the changes. Here=E2=80=99s an example diff: --8<---------------cut here---------------start------------->8--- modified gnu/packages/bioconductor.scm @@ -2701,29 +2701,32 @@ gene and isoform level using RNA-seq data") (define-public r-karyoploter (package (name "r-karyoploter") - (version "1.12.4") + (version "1.14.0") (source (origin (method url-fetch) (uri (bioconductor-uri "karyoploteR" version)) (sha256 (base32 - "03jmfgmw35hrgn3pc5lq6pblzhfx9fp4l6dx50rp303lr7kjxp9v")))) + "0h0gk4xd95k5phy6qcsv7j931d7gk3p24i2fg4mz5dsk110lpifs")))) (build-system r-build-system) (propagated-inputs - `(("r-regioner" ,r-regioner) + `(("r-annotationdbi" ,r-annotationdbi) + ("r-bamsignals" ,r-bamsignals) + ("r-bezier" ,r-bezier) + ("r-biovizbase" ,r-biovizbase) + ("r-digest" ,r-digest) + ("r-genomeinfodb" ,r-genomeinfodb) + ("r-genomicfeatures" ,r-genomicfeatures) ("r-genomicranges" ,r-genomicranges) ("r-iranges" ,r-iranges) - ("r-rsamtools" ,r-rsamtools) ("r-memoise" ,r-memoise) + ("r-regioner" ,r-regioner) + ("r-rsamtools" ,r-rsamtools) ("r-rtracklayer" ,r-rtracklayer) - ("r-genomeinfodb" ,r-genomeinfodb) ("r-s4vectors" ,r-s4vectors) - ("r-biovizbase" ,r-biovizbase) - ("r-digest" ,r-digest) - ("r-bezier" ,r-bezier) - ("r-bamsignals" ,r-bamsignals) - ("r-annotationdbi" ,r-annotationdbi) ("r-variantannotation" ,r-variantannotation))) + (native-inputs + `(("r-knitr" ,r-knitr))) (home-page "https://bioconductor.org/packages/karyoploteR/") (synopsis "Plot customizable linear genomes displaying arbitrary data") (description "This package creates karyotype plots of arbitrary genome= s and --8<---------------cut here---------------end--------------->8--- =E2=80=A6and this is the generated commit message: --8<---------------cut here---------------start------------->8--- gnu: r-karyoploter: Update to 1.14.0. * gnu/packages/bioconductor.scm (r-karyoploter): Update to 1.14.0. [propagated-inputs]: Add r-genomicfeatures. [native-inputs]: Add r-knitr. --8<---------------cut here---------------end--------------->8--- Obviously, this can be improved by avoiding the staging area and operating on all hunks in all selected files, so that more than one commit can be made at a time. But I thought I=E2=80=99d share this hack an= yway, crude as it is. --=20 Ricardo --=-=-= Content-Type: application/x-scheme Content-Disposition: attachment; filename=committer.scm Content-Transfer-Encoding: base64 IyEvcnVuL2N1cnJlbnQtc3lzdGVtL3Byb2ZpbGUvYmluL2d1aWxlIFwKLS1uby1hdXRvLWNvbXBp bGUgLXMKISMKCiN8CiB8IFN0YWdlIGFsbCBodW5rcyBhZmZlY3Rpbmcgb25lIHBhY2thZ2UgZXhw cmVzc2lvbi4gIFRoZW4gcnVuCiB8ICAgLi9jb21taXR0ZXIuc2NtIHwgZ2l0IGNvbW1pdCAtRiAt CiB8IFJlcGVhdC4KIHwKIHwjCgooaW1wb3J0IChzeG1sIHhwYXRoKQogICAgICAgIChzcmZpIHNy ZmktMSkKICAgICAgICAoaWNlLTkgZm9ybWF0KQogICAgICAgIChpY2UtOSBwb3BlbikKICAgICAg ICAoaWNlLTkgbWF0Y2gpCiAgICAgICAgKGljZS05IHJkZWxpbSkKICAgICAgICAoaWNlLTkgdGV4 dHVhbC1wb3J0cykKICAgICAgICAoaWNlLTkgcHJldHR5LXByaW50KSkKCihkZWZpbmUgKHJlYWQt ZXhjdXJzaW9uIHBvcnQpCiAgIlJlYWQgYW4gZXhwcmVzc2lvbiBmcm9tIFBPUlQgYW5kIHJlc2V0 IHRoZSBwb3J0IHBvc2l0aW9uIGJlZm9yZSByZXR1cm5pbmcKdGhlIGV4cHJlc3Npb24uIgogIChs ZXQgKChzdGFydCAoZnRlbGwgcG9ydCkpCiAgICAgICAgKHJlc3VsdCAocmVhZCBwb3J0KSkpCiAg ICAoc2VlayBwb3J0IHN0YXJ0IFNFRUtfU0VUKQogICAgcmVzdWx0KSkKCihkZWZpbmUgKHN1cnJv dW5kaW5nLXNleHAgcG9ydCBsaW5lLW5vKQogICJSZXR1cm4gdGhlIHRvcC1sZXZlbCBTLWV4cHJl c3Npb24gc3Vycm91bmRpbmcgdGhlIGNoYW5nZSBhdCBsaW5lIG51bWJlcgpMSU5FLU5PIGluIFBP UlQuIgogIChsZXQgbG9vcCAoKGkgKDEtIGxpbmUtbm8pKQogICAgICAgICAgICAgKGxhc3QtdG9w LWxldmVsLXNleHAgI2YpKQogICAgKGlmICh6ZXJvPyBpKQogICAgICAgIGxhc3QtdG9wLWxldmVs LXNleHAKICAgICAgICAobWF0Y2ggKHBlZWstY2hhciBwb3J0KQogICAgICAgICAgKCNcKAogICAg ICAgICAgIChsZXQgKChzZXhwIChyZWFkLWV4Y3Vyc2lvbiBwb3J0KSkpCiAgICAgICAgICAgICAo cmVhZC1saW5lIHBvcnQpCiAgICAgICAgICAgICAobG9vcCAoMS0gaSkgc2V4cCkpKQogICAgICAg ICAgKF8KICAgICAgICAgICAocmVhZC1saW5lIHBvcnQpCiAgICAgICAgICAgKGxvb3AgKDEtIGkp IGxhc3QtdG9wLWxldmVsLXNleHApKSkpKSkKCihkZWZpbmUgKGRpZmYtaW5mbykKICAiUmVhZCB0 aGUgc3RhZ2VkIGRpZmYgYW5kIHJldHVybiBhIGxpc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXdv cmRzOgpGSUxFLU5BTUUsIE5FVy1MSU5FIGZvciB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGZpcnN0 IGh1bmsgaW4gdGhlIGNoYW5nZWQgZmlsZSwKYW5kIE9MRC1MSU5FIGZvciB0aGUgbGluZSBudW1i ZXIgYmVmb3JlIHRoZSBjaGFuZ2UuICBUaGUgbGluZSBudW1iZXJzIGFyZSBvbmx5CnVzZWQgdG8g ZmluZCB0aGUgbW9kaWZpZWQgdG9wLWxldmVsIGRlZmluaXRpb24gaW4gdGhlIGZpbGUgYmVmb3Jl IGFuZCBhZnRlcgptb2RpZmljYXRpb24uICBXZSBhc3N1bWUgdGhhdCBhbGwgc3RhZ2VkIGh1bmtz IGZhbGwgd2l0aGluIHRoZSBzYW1lIHRvcC1sZXZlbApkZWZpbml0aW9uLiIKICAobGV0ICgocG9y dCAob3Blbi1waXBlKiBPUEVOX1JFQUQKICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2l0IiAi ZGlmZiIgIi0tc3RhZ2VkIgogICAgICAgICAgICAgICAgICAgICAgICAgICItLXNyYy1wcmVmaXg9 IgogICAgICAgICAgICAgICAgICAgICAgICAgIDs7IERvIG5vdCBpbmNsdWRlIGFueSBjb250ZXh0 IGxpbmVzLiAgVGhpcyBtYWtlcyBpdAogICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGVhc2ll ciB0byBmaW5kIHRoZSBTLWV4cHJlc3Npb24gc3Vycm91bmRpbmcgdGhlCiAgICAgICAgICAgICAg ICAgICAgICAgICAgOzsgY2hhbmdlLgogICAgICAgICAgICAgICAgICAgICAgICAgICItLXVuaWZp ZWQ9MCIpKSkKICAgIChkZWZpbmUgKGV4dHJhY3QtbGluZS1udW1iZXIgbGluZS10YWcpCiAgICAg IChhYnMgKHN0cmluZy0+bnVtYmVyCiAgICAgICAgICAgIChjYXIgKHN0cmluZy1zcGxpdCBsaW5l LXRhZyAjXCwpKSkpKQogICAgKGRlZmluZSBpbmZvCiAgICAgIChsZXQgbG9vcCAoKGFjYyAnKCkp KQogICAgICAgIChsZXQgKChsaW5lIChyZWFkLWxpbmUgcG9ydCkpKQogICAgICAgICAgKGNvbmQK ICAgICAgICAgICAoKGVvZi1vYmplY3Q/IGxpbmUpIGFjYykKICAgICAgICAgICAoKHN0cmluZy1w cmVmaXg/ICItLS0gIiBsaW5lKQogICAgICAgICAgICAobWF0Y2ggKHN0cmluZy1zcGxpdCBsaW5l ICNcc3BhY2UpCiAgICAgICAgICAgICAgKChfIGZpbGUtbmFtZSkKICAgICAgICAgICAgICAgKGxv b3AgKGNvbnMgKGNvbnMgIzpmaWxlLW5hbWUgZmlsZS1uYW1lKSBhY2MpKSkpKQogICAgICAgICAg ICgoc3RyaW5nLXByZWZpeD8gIkBAICIgbGluZSkKICAgICAgICAgICAgKG1hdGNoIChzdHJpbmct c3BsaXQgbGluZSAjXHNwYWNlKQogICAgICAgICAgICAgICgoXyBvbGQtc3RhcnQgbmV3LXN0YXJ0 IC4gXykKICAgICAgICAgICAgICAgKGNvbnMqCiAgICAgICAgICAgICAgICAoY29ucyAjOm9sZC1s aW5lIChleHRyYWN0LWxpbmUtbnVtYmVyIG9sZC1zdGFydCkpCiAgICAgICAgICAgICAgICAoY29u cyAjOm5ldy1saW5lIChleHRyYWN0LWxpbmUtbnVtYmVyIG5ldy1zdGFydCkpCiAgICAgICAgICAg ICAgICBhY2MpKSkpCiAgICAgICAgICAgKGVsc2UgKGxvb3AgYWNjKSkpKSkpCiAgICAoY2xvc2Ut cGlwZSBwb3J0KQogICAgaW5mbykpCgooZGVmaW5lIChjb21wYXJlLXBhY2thZ2Utc2V4cHMgZmls ZS1uYW1lIG9sZCBuZXcpCiAgIlByaW50IGNoYW5nZXMgYmV0d2VlbiBPTEQgYW5kIE5FVy4iCiAg KGRlZmluZSAoZ2V0LXZhbHVlcyBleHByIGZpZWxkKQogICAgKG1hdGNoICgoc3hwYXRoIGAoLy8g LGZpZWxkIHF1YXNpcXVvdGUgKikpIGV4cHIpCiAgICAgICgoKSAnKCkpCiAgICAgICgoZmlyc3Qg LiByZXN0KQogICAgICAgKG1hcCBjYWRhZHIgZmlyc3QpKSkpCiAgKGRlZmluZSAobGlzdGlmeSBp dGVtcykKICAgIChtYXRjaCBpdGVtcwogICAgICAoKG9uZSkgb25lKQogICAgICAoKG9uZSB0d28p CiAgICAgICAoc3RyaW5nLWFwcGVuZCBvbmUgIiBhbmQgIiB0d28pKQogICAgICAoKG9uZSB0d28g LiBtb3JlKQogICAgICAgKHN0cmluZy1hcHBlbmQgKHN0cmluZy1qb2luIChkcm9wLXJpZ2h0IGl0 ZW1zIDEpICIsICIpCiAgICAgICAgICAgICAgICAgICAgICAiIGFuZCAiICh0YWtlLXJpZ2h0IGl0 ZW1zIDEpKSkpKQogIChkZWZpbmUgdmFyaWFibGUtbmFtZQogICAgKHNlY29uZCBvbGQpKQogIChk ZWZpbmUgdmVyc2lvbgogICAgKGFuZD0+ICgoc3hwYXRoICcoLy8gdmVyc2lvbiAqYW55KikpIG5l dykKICAgICAgICAgICBmaXJzdCkpCiAgKGZvcm1hdCAoY3VycmVudC1vdXRwdXQtcG9ydCkKICAg ICAgICAgICJnbnU6IH5hOiBVcGRhdGUgdG8gfmEufiV+JSogfmEgKH5hKTogVXBkYXRlIHRvIH5h Ln4lIgogICAgICAgICAgdmFyaWFibGUtbmFtZSB2ZXJzaW9uIGZpbGUtbmFtZSB2YXJpYWJsZS1u YW1lIHZlcnNpb24pCiAgKGZvci1lYWNoIChsYW1iZGEgKGZpZWxkKQogICAgICAgICAgICAgIChs ZXQgKChvbGQtdmFsdWVzIChnZXQtdmFsdWVzIG9sZCBmaWVsZCkpCiAgICAgICAgICAgICAgICAg ICAgKG5ldy12YWx1ZXMgKGdldC12YWx1ZXMgbmV3IGZpZWxkKSkpCiAgICAgICAgICAgICAgICAo b3IgKGVxdWFsPyBvbGQtdmFsdWVzIG5ldy12YWx1ZXMpCiAgICAgICAgICAgICAgICAgICAgKGxl dCAoKHJlbW92ZWQgKGxzZXQtZGlmZmVyZW5jZSBlcT8gb2xkLXZhbHVlcyBuZXctdmFsdWVzKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkZWQgKGxzZXQtZGlmZmVyZW5jZSBlcT8gbmV3 LXZhbHVlcyBvbGQtdmFsdWVzKSkpCiAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0IChjdXJy ZW50LW91dHB1dC1wb3J0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW35hXTogfmF+ JSIgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoIChsaXN0IChtYXAg c3ltYm9sLT5zdHJpbmcgcmVtb3ZlZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChtYXAgc3ltYm9sLT5zdHJpbmcgYWRkZWQpKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgoKCkgYWRkZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChmb3JtYXQgI2YgIkFkZCB+YS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGxpc3RpZnkgYWRkZWQpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo KHJlbW92ZWQgKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgI2Yg IlJlbW92ZSB+YS4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxp c3RpZnkgcmVtb3ZlZCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocmVtb3Zl ZCBhZGRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAjZiAiUmVt b3ZlIH5hOyBhZGQgfmEuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChsaXN0aWZ5IHJlbW92ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGxpc3RpZnkgYWRkZWQpKSkpKSkpKSkKICAgICAgICAgICAgJyhpbnB1dHMgcHJvcGFnYXRl ZC1pbnB1dHMgbmF0aXZlLWlucHV0cykpKQoKKGRlZmluZSAob2xkLXNleHAgaW5mbykKICAiVXNp bmcgdGhlIGRpZmYgaW5mb3JtYXRpb24gaW4gSU5GTyByZXR1cm4gdGhlIHVubW9kaWZpZWQgUy1l eHByZXNzaW9uCmNvcnJlc3BvbmRpbmcgdG8gdGhlIHRvcC1sZXZlbCBkZWZpbml0aW9uIGNvbnRh aW5pbmcgdGhlIHN0YWdlZCBjaGFuZ2VzLiIKICA7OyBXZSBjYW4ndCBzZWVrcyB3aXRoIGEgcGlw ZSBwb3J0Li4uCiAgKGxldCogKChwb3J0IChvcGVuLXBpcGUqIE9QRU5fUkVBRAogICAgICAgICAg ICAgICAgICAgICAgICAgICAiZ2l0IiAic2hvdyIgKHN0cmluZy1hcHBlbmQgIkhFQUQ6IgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFzc29j LXJlZiBpbmZvICM6ZmlsZS1uYW1lKSkpKQogICAgICAgICAoY29udGVudHMgKGdldC1zdHJpbmct YWxsIHBvcnQpKSkKICAgIChjbG9zZS1waXBlIHBvcnQpCiAgICAoY2FsbC13aXRoLWlucHV0LXN0 cmluZyBjb250ZW50cwogICAgICAobGFtYmRhIChwb3J0KQogICAgICAgIChzdXJyb3VuZGluZy1z ZXhwIHBvcnQgKGFzc29jLXJlZiBpbmZvICM6b2xkLWxpbmUpKSkpKSkKCihkZWZpbmUgKG5ldy1z ZXhwIGluZm8pCiAgIlVzaW5nIHRoZSBkaWZmIGluZm9ybWF0aW9uIGluIElORk8gcmV0dXJuIHRo ZSBtb2RpZmllZCBTLWV4cHJlc3Npb24KY29ycmVzcG9uZGluZyB0byB0aGUgdG9wLWxldmVsIGRl ZmluaXRpb24gY29udGFpbmluZyB0aGUgc3RhZ2VkIGNoYW5nZXMuIgogIChjYWxsLXdpdGgtaW5w dXQtZmlsZSAoYXNzb2MtcmVmIGluZm8gIzpmaWxlLW5hbWUpCiAgICAobGFtYmRhIChwb3J0KQog ICAgICAoc3Vycm91bmRpbmctc2V4cCBwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgIChhc3Nv Yy1yZWYgaW5mbyAjOm5ldy1saW5lKSkpKSkKCihkZWZpbmUgKG1haW4gLiBhcmdzKQogIChsZXQq ICgoaW5mbyAoZGlmZi1pbmZvKSkKICAgICAgICAgKG9sZCAob2xkLXNleHAgaW5mbykpCiAgICAg ICAgIChuZXcgKG5ldy1zZXhwIGluZm8pKSkKICAgIChjb21wYXJlLXBhY2thZ2Utc2V4cHMgKGFz c29jLXJlZiBpbmZvICM6ZmlsZS1uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQg bmV3KSkpCgoobWFpbikK --=-=-=--