From mboxrd@z Thu Jan 1 00:00:00 1970 From: Federico Beffa Subject: Re: hackage importer Date: Mon, 1 Jun 2015 17:20:06 +0200 Message-ID: References: <87k2yiqqaw.fsf@gnu.org> <871tkbdhwc.fsf@gnu.org> <871tk7ykfj.fsf@gnu.org> <87zj6t9tq5.fsf@gnu.org> <87pp6j6t85.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a113f9212725a080517765c22 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:50247) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YzRVg-0002DD-5r for guix-devel@gnu.org; Mon, 01 Jun 2015 11:20:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YzRVZ-0000uX-E3 for guix-devel@gnu.org; Mon, 01 Jun 2015 11:20:16 -0400 In-Reply-To: <87pp6j6t85.fsf@gnu.org> 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+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: =?UTF-8?Q?Ludovic_Court=C3=A8s?= Cc: Guix-devel --001a113f9212725a080517765c22 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, sorry for taking so long to answer! On Sat, May 2, 2015 at 2:48 PM, Ludovic Court=C3=A8s wrote: >> Subject: [PATCH] import: hackage: Refactor parsing code and add new opti= on. >> >> * guix/import/cabal.scm: New file. >> >> * guix/import/hackage.scm: Update to use the new Cabal parsing module. >> >> * tests/hackage.scm: Update tests for private functions. >> >> * guix/scripts/import/hackage.scm: Add new '--cabal-environment' option. >> >> * doc/guix.texi: ... and document it. >> >> * Makefile.am (MODULES): Add 'guix/import/cabal.scm', >> 'guix/import/hackage.scm' and 'guix/scripts/import/hackage.scm'. >> (SCM_TESTS): Add 'tests/hackage.scm'. > > No newlines between entries. Done. [...] > This procedure is intimidating. I think this is partly due to its > length, to the big let-values, the long identifiers, the many local > variables, nested binds, etc. Ok, this procedure has now ... disappeared ... or rather it is now hidden in a huge, but invisible macro ;-) I've added support for braces delimited blocks. In so doing the complexity of an ad-hoc solution increased further and decided that it was time to study (and use) a proper parser. But, a couple of words on your remarks: - Thanks to your comment about long list of local variables I (re-)discovered the (test =3D> expr) form of cond clauses. Very useful! - The nested use of the >>=3D function didn't look nice and the reason is that it is really meant as a way to sequence monadic functions as in (>>=3D m f1 f2 ...). Unfortunately the current version of >>=3D in guile only accepts 2 arguments (1 function), hence the nesting. It would be nice to correct that :-) In any case, I had to give up with the state monad because the lalr parser in Guile doesn't play nice with the functional programming paradigm. >> +(define-record-type >> + (make-cabal-package name version license home-page source-repository >> + synopsis description >> + executables lib test-suites >> + flags eval-environment) >> + cabal-package? >> + (name cabal-package-name) >> + (version cabal-package-version) >> + (license cabal-package-license) >> + (home-page cabal-package-home-page) >> + (source-repository cabal-package-source-repository) >> + (synopsis cabal-package-synopsis) >> + (description cabal-package-description) >> + (executables cabal-package-executables) >> + (lib cabal-package-library) ; 'library' is a Scheme keyword > > There are no keyboards in Scheme. :-) ?? > [...] > >> + (define (impl haskell) >> + (let* ((haskell-implementation (or (assoc-ref env "impl") "ghc")) >> + (impl-rx-result-with-version >> + (string-match "([a-zA-Z0-9_]+)-([0-9.]+)" haskell-implement= ation)) >> + (impl-name (or (and=3D> impl-rx-result-with-version >> + (cut match:substring <> 1)) >> + haskell-implementation)) >> + (impl-version (and=3D> impl-rx-result-with-version >> + (cut match:substring <> 2))) >> + (cabal-rx-result-with-version >> + (string-match "([a-zA-Z0-9_-]+) *([<>=3D]+) *([0-9.]+) *" h= askell)) >> + (cabal-rx-result-without-version >> + (string-match "([a-zA-Z0-9_-]+)" haskell)) >> + (cabal-impl-name (or (and=3D> cabal-rx-result-with-version >> + (cut match:substring <> 1)) >> + (match:substring >> + cabal-rx-result-without-version 1))) >> + (cabal-impl-version (and=3D> cabal-rx-result-with-version >> + (cut match:substring <> 3))) >> + (cabal-impl-operator (and=3D> cabal-rx-result-with-version >> + (cut match:substring <> 2))) >> + (comparison (and=3D> cabal-impl-operator >> + (cut string-append "string" <>)))) > > Again I feel we need one or more auxiliary procedures and/or data types > here to simplify this part (fewer local variables), as well as shorter > identifiers. WDYT? I've added two help functions to make it easier to read. > The existing tests here are fine, but they are more like integration > tests (they test the whole pipeline.) Maybe it would be nice to > directly exercise =E2=80=98read-cabal=E2=80=99 and =E2=80=98eval-cabal=E2= =80=99 individually? It is true that the tests are for the whole pipeline, but they catch most of the problems (problems in any function along the chain) with the smallest number of tests :-). I'm not very keen in doing fine grained testing. Sorry. I've removed the test with TABs because the Cabal documentation says explicitly that they are not allowed. https://www.haskell.org/cabal/users-guide/developing-packages.html#package-= descriptions I've changed the second test to check the use of braces (multi-line values have still to be indented). Regards, Fede --001a113f9212725a080517765c22 Content-Type: text/x-diff; charset=UTF-8; name="0001-import-hackage-Refactor-parsing-code-and-add-new-opt.patch" Content-Disposition: attachment; filename="0001-import-hackage-Refactor-parsing-code-and-add-new-opt.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iae0spku0 RnJvbSBmNDIyZWE5YWZmM2FhODQyNWM4MGVhYWRmNTA2MjhjMjRkNTQ0OTVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGZWRlcmljbyBCZWZmYSA8YmVmZmFAZmJlbmdpbmVlcmluZy5j aD4KRGF0ZTogU3VuLCAyNiBBcHIgMjAxNSAxMToyMjoyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hd IGltcG9ydDogaGFja2FnZTogUmVmYWN0b3IgcGFyc2luZyBjb2RlIGFuZCBhZGQgbmV3IG9wdGlv bnMuCgoqIGd1aXgvaW1wb3J0L2NhYmFsLnNjbTogTmV3IGZpbGUuCiogZ3VpeC9pbXBvcnQvaGFj a2FnZS5zY206IFVwZGF0ZSB0byB1c2UgdGhlIG5ldyBDYWJhbCBwYXJzaW5nIG1vZHVsZS4KKiB0 ZXN0cy9oYWNrYWdlLnNjbTogVXBkYXRlIHRlc3RzLgoqIGd1aXgvc2NyaXB0cy9pbXBvcnQvaGFj a2FnZS5zY206IEFkZCBuZXcgJy0tY2FiYWwtZW52aXJvbm1lbnQnIGFuZCAnLS1zdGRpbicKICBv cHRpb25zLgoqIGRvYy9ndWl4LnRleGk6IC4uLiBhbmQgZG9jdW1lbnQgdGhlbS4KKiBNYWtlZmls ZS5hbSAoTU9EVUxFUyk6IEFkZCAnZ3VpeC9pbXBvcnQvY2FiYWwuc2NtJywKICAnZ3VpeC9pbXBv cnQvaGFja2FnZS5zY20nIGFuZCAnZ3VpeC9zY3JpcHRzL2ltcG9ydC9oYWNrYWdlLnNjbScuCiAg KFNDTV9URVNUUyk6IEFkZCAndGVzdHMvaGFja2FnZS5zY20nLgotLS0KIE1ha2VmaWxlLmFtICAg ICAgICAgICAgICAgICAgICAgfCAgIDQgKwogZG9jL2d1aXgudGV4aSAgICAgICAgICAgICAgICAg ICB8ICAyMiArLQogZ3VpeC9pbXBvcnQvY2FiYWwuc2NtICAgICAgICAgICB8IDgwMiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBndWl4L2ltcG9ydC9oYWNrYWdlLnNj bSAgICAgICAgIHwgNzAwICsrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBndWl4 L3NjcmlwdHMvaW1wb3J0L2hhY2thZ2Uuc2NtIHwgIDY1ICsrKy0KIHRlc3RzL2hhY2thZ2Uuc2Nt ICAgICAgICAgICAgICAgfCAgNDkgKy0tCiA2IGZpbGVzIGNoYW5nZWQsIDk1OSBpbnNlcnRpb25z KCspLCA2ODMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ3VpeC9pbXBvcnQvY2Fi YWwuc2NtCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQppbmRleCBkNTRl MjgxLi5iNDJhN2Y1IDEwMDY0NAotLS0gYS9NYWtlZmlsZS5hbQorKysgYi9NYWtlZmlsZS5hbQpA QCAtODksNiArODksOCBAQCBNT0RVTEVTID0JCQkJCVwKICAgZ3VpeC9pbXBvcnQvdXRpbHMuc2Nt CQkJCVwKICAgZ3VpeC9pbXBvcnQvZ251LnNjbQkJCQlcCiAgIGd1aXgvaW1wb3J0L3NuaXguc2Nt CQkJCVwKKyAgZ3VpeC9pbXBvcnQvY2FiYWwuc2NtCQkJCVwKKyAgZ3VpeC9pbXBvcnQvaGFja2Fn ZS5zY20JCQlcCiAgIGd1aXgvc2NyaXB0cy9kb3dubG9hZC5zY20JCQlcCiAgIGd1aXgvc2NyaXB0 cy9idWlsZC5zY20JCQlcCiAgIGd1aXgvc2NyaXB0cy9hcmNoaXZlLnNjbQkJCVwKQEAgLTEwNCw2 ICsxMDYsNyBAQCBNT0RVTEVTID0JCQkJCVwKICAgZ3VpeC9zY3JpcHRzL2xpbnQuc2NtCQkJCVwK ICAgZ3VpeC9zY3JpcHRzL2ltcG9ydC9nbnUuc2NtCQkJXAogICBndWl4L3NjcmlwdHMvaW1wb3J0 L25peC5zY20JCQlcCisgIGd1aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5zY20JCVwKICAgZ3Vp eC9zY3JpcHRzL2Vudmlyb25tZW50LnNjbQkJCVwKICAgZ3VpeC9zY3JpcHRzL3B1Ymxpc2guc2Nt CQkJXAogICBndWl4LnNjbQkJCQkJXApAQCAtMTczLDYgKzE3Niw3IEBAIFNDTV9URVNUUyA9CQkJ CQlcCiAgIHRlc3RzL2J1aWxkLXV0aWxzLnNjbQkJCQlcCiAgIHRlc3RzL3BhY2thZ2VzLnNjbQkJ CQlcCiAgIHRlc3RzL3NuaXguc2NtCQkJCVwKKyAgdGVzdHMvaGFja2FnZS5zY20JCQkJXAogICB0 ZXN0cy9zdG9yZS5zY20JCQkJXAogICB0ZXN0cy9tb25hZHMuc2NtCQkJCVwKICAgdGVzdHMvZ2V4 cC5zY20JCQkJXApkaWZmIC0tZ2l0IGEvZG9jL2d1aXgudGV4aSBiL2RvYy9ndWl4LnRleGkKaW5k ZXggNzA2MDRiNy4uYzcwZjgzMyAxMDA2NDQKLS0tIGEvZG9jL2d1aXgudGV4aQorKysgYi9kb2Mv Z3VpeC50ZXhpCkBAIC0zMTk5LDE2ICszMTk5LDMwIEBAIGRlcGVuZGVuY2llcy4KIFNwZWNpZmlj IGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZToKIAogQHRhYmxlIEBjb2RlCitAaXRlbSAtLXN0ZGlu CitAaXRlbXggLXMKK1JlYWQgYSBDYWJhbCBmaWxlIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0Lgog QGl0ZW0gLS1uby10ZXN0LWRlcGVuZGVuY2llcwogQGl0ZW14IC10Ci1EbyBub3QgaW5jbHVkZSBk ZXBlbmRlbmNpZXMgb25seSByZXF1aXJlZCB0byBydW4gdGhlIHRlc3Qgc3VpdGUuCitEbyBub3Qg aW5jbHVkZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgYnkgdGhlIHRlc3Qgc3VpdGVzIG9ubHkuCitA aXRlbSAtLWNhYmFsLWVudmlyb25tZW50PUB2YXJ7YWxpc3R9CitAaXRlbXggLWUgQHZhcnthbGlz dH0KK0B2YXJ7YWxpc3R9IGlzIGEgU2NoZW1lIGFsaXN0IGRlZmluaW5nIHRoZSBlbnZpcm9ubWVu dCBpbiB3aGljaCB0aGUKK0NhYmFsIGNvbmRpdGlvbmFscyBhcmUgZXZhbHVhdGVkLiAgVGhlIGFj Y2VwdGVkIGtleXMgYXJlOiBAY29kZXtvc30sCitAY29kZXthcmNofSwgQGNvZGV7aW1wbH0gYW5k IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiBhIGZsYWcuCitUaGUgdmFsdWUgYXNz b2NpYXRlZCB3aXRoIGEgZmxhZyBoYXMgdG8gYmUgZWl0aGVyIHRoZSBzeW1ib2wKK0Bjb2Rle3Ry dWV9IG9yIEBjb2Rle2ZhbHNlfS4gIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggb3RoZXIga2V5 cworaGFzIHRvIGNvbmZvcm0gdG8gdGhlIENhYmFsIGZpbGUgZm9ybWF0IGRlZmluaXRpb24uICBU aGUgZGVmYXVsdCB2YWx1ZQorYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXlzIEBjb2Rle29zfSwgQGNv ZGV7YXJjaH0gYW5kIEBjb2Rle2ltcGx9IGlzCitAc2FtcHtsaW51eH0sIEBzYW1we3g4Nl82NH0g YW5kIEBzYW1we2doY30gcmVzcGVjdGl2ZWx5LgogQGVuZCB0YWJsZQogCiBUaGUgY29tbWFuZCBi ZWxvdyBpbXBvcnRzIG1ldGEtZGF0YSBmb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZQotQGNv ZGV7SFRUUH0gSGFza2VsbCBwYWNrYWdlIHdpdGhvdXQgaW5jbHVkaW5nIHRlc3QgZGVwZW5kZW5j aWVzOgorQGNvZGV7SFRUUH0gSGFza2VsbCBwYWNrYWdlIHdpdGhvdXQgaW5jbHVkaW5nIHRlc3Qg ZGVwZW5kZW5jaWVzIGFuZAorc3BlY2lmeWluZyB0aGUgdmFsdWUgb2YgdGhlIGZsYWcgQHNhbXB7 bmV0d29yay11cml9IGFzIEBjb2Rle2ZhbHNlfToKIAogQGV4YW1wbGUKLWd1aXggaW1wb3J0IGhh Y2thZ2UgLXQgSFRUUAorZ3VpeCBpbXBvcnQgaGFja2FnZSAtdCAtZSAiJygoXCJuZXR3b3JrLXVy aVwiIC4gZmFsc2UpKSIgSFRUUAogQGVuZCBleGFtcGxlCiAKIEEgc3BlY2lmaWMgcGFja2FnZSB2 ZXJzaW9uIG1heSBvcHRpb25hbGx5IGJlIHNwZWNpZmllZCBieSBmb2xsb3dpbmcgdGhlCkBAIC0z MjE3LDggKzMyMzEsNiBAQCBwYWNrYWdlIG5hbWUgYnkgYSBoeXBoZW4gYW5kIGEgdmVyc2lvbiBu dW1iZXIgYXMgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgogQGV4YW1wbGUKIGd1aXggaW1wb3J0 IGhhY2thZ2UgbXRsLTIuMS4zLjEKIEBlbmQgZXhhbXBsZQotCi1DdXJyZW50bHkgb25seSBpbmRl bnRhdGlvbiBzdHJ1Y3R1cmVkIENhYmFsIGZpbGVzIGFyZSBzdXBwb3J0ZWQuCiBAZW5kIHRhYmxl CiAKIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEBjb21tYW5ke2d1aXggaW1wb3J0fSBjb2RlIGlzIG1v ZHVsYXIuICBJdCB3b3VsZCBiZQpkaWZmIC0tZ2l0IGEvZ3VpeC9pbXBvcnQvY2FiYWwuc2NtIGIv Z3VpeC9pbXBvcnQvY2FiYWwuc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmIyMGZkZTgKLS0tIC9kZXYvbnVsbAorKysgYi9ndWl4L2ltcG9ydC9jYWJhbC5zY20KQEAgLTAs MCArMSw4MDIgQEAKKzs7OyBHTlUgR3VpeCAtLS0gRnVuY3Rpb25hbCBwYWNrYWdlIG1hbmFnZW1l bnQgZm9yIEdOVQorOzs7IENvcHlyaWdodCDCqSAyMDE1IEZlZGVyaWNvIEJlZmZhIDxiZWZmYUBm YmVuZ2luZWVyaW5nLmNoPgorOzs7Cis7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEd1aXgu Cis7OzsKKzs7OyBHTlUgR3VpeCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cis7OzsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7OyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKzs7 OyB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OzsKKzs7OyBHTlUgR3VpeCBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKzs7OyBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cis7OzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorOzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCis7OzsKKzs7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOzs7IGFsb25nIHdpdGggR05VIEd1aXguICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyhkZWZpbmUtbW9kdWxlIChn dWl4IGltcG9ydCBjYWJhbCkKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkKKyAgIzp1c2Ut bW9kdWxlIChpY2UtOSByZWdleCkKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSByZGVsaW0pCisgICM6 dXNlLW1vZHVsZSAoaWNlLTkgcmVjZWl2ZSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMjYp CisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTM0KQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3Jm aS0zNSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMTEpCisgICM6dXNlLW1vZHVsZSAoc3Jm aSBzcmZpLTEpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTkpCisgICM6dXNlLW1vZHVsZSAo c3JmaSBzcmZpLTkgZ251KQorICAjOnVzZS1tb2R1bGUgKHN5c3RlbSBiYXNlIGxhbHIpCisgICM6 dXNlLW1vZHVsZSAocm5ycyBlbnVtcykKKyAgIzpleHBvcnQgKHJlYWQtY2FiYWwKKyAgICAgICAg ICAgIGV2YWwtY2FiYWwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2FiYWwtcGFja2FnZT8K KyAgICAgICAgICAgIGNhYmFsLXBhY2thZ2UtbmFtZQorICAgICAgICAgICAgY2FiYWwtcGFja2Fn ZS12ZXJzaW9uCisgICAgICAgICAgICBjYWJhbC1wYWNrYWdlLWxpY2Vuc2UKKyAgICAgICAgICAg IGNhYmFsLXBhY2thZ2UtaG9tZS1wYWdlCisgICAgICAgICAgICBjYWJhbC1wYWNrYWdlLXNvdXJj ZS1yZXBvc2l0b3J5CisgICAgICAgICAgICBjYWJhbC1wYWNrYWdlLXN5bm9wc2lzCisgICAgICAg ICAgICBjYWJhbC1wYWNrYWdlLWRlc2NyaXB0aW9uCisgICAgICAgICAgICBjYWJhbC1wYWNrYWdl LWV4ZWN1dGFibGVzCisgICAgICAgICAgICBjYWJhbC1wYWNrYWdlLWxpYnJhcnkKKyAgICAgICAg ICAgIGNhYmFsLXBhY2thZ2UtdGVzdC1zdWl0ZXMKKyAgICAgICAgICAgIGNhYmFsLXBhY2thZ2Ut ZmxhZ3MKKyAgICAgICAgICAgIGNhYmFsLXBhY2thZ2UtZXZhbC1lbnZpcm9ubWVudAorCisgICAg ICAgICAgICBjYWJhbC1zb3VyY2UtcmVwb3NpdG9yeT8KKyAgICAgICAgICAgIGNhYmFsLXNvdXJj ZS1yZXBvc2l0b3J5LXVzZS1jYXNlCisgICAgICAgICAgICBjYWJhbC1zb3VyY2UtcmVwb3NpdG9y eS10eXBlCisgICAgICAgICAgICBjYWJhbC1zb3VyY2UtcmVwb3NpdG9yeS1sb2NhdGlvbgorCisg ICAgICAgICAgICBjYWJhbC1mbGFnPworICAgICAgICAgICAgY2FiYWwtZmxhZy1uYW1lCisgICAg ICAgICAgICBjYWJhbC1mbGFnLWRlc2NyaXB0aW9uCisgICAgICAgICAgICBjYWJhbC1mbGFnLWRl ZmF1bHQKKyAgICAgICAgICAgIGNhYmFsLWZsYWctbWFudWFsCisKKyAgICAgICAgICAgIGNhYmFs LWRlcGVuZGVuY3k/CisgICAgICAgICAgICBjYWJhbC1kZXBlbmRlbmN5LW5hbWUKKyAgICAgICAg ICAgIGNhYmFsLWRlcGVuZGVuY3ktdmVyc2lvbgorCisgICAgICAgICAgICBjYWJhbC1leGVjdXRh YmxlPworICAgICAgICAgICAgY2FiYWwtZXhlY3V0YWJsZS1uYW1lCisgICAgICAgICAgICBjYWJh bC1leGVjdXRhYmxlLWRlcGVuZGVuY2llcworCisgICAgICAgICAgICBjYWJhbC1saWJyYXJ5Pwor ICAgICAgICAgICAgY2FiYWwtbGlicmFyeS1kZXBlbmRlbmNpZXMKKworICAgICAgICAgICAgY2Fi YWwtdGVzdC1zdWl0ZT8KKyAgICAgICAgICAgIGNhYmFsLXRlc3Qtc3VpdGUtbmFtZQorICAgICAg ICAgICAgY2FiYWwtdGVzdC1zdWl0ZS1kZXBlbmRlbmNpZXMpKQorCis7OyBQYXJ0IDE6Cis7Owor OzsgRnVuY3Rpb25zIHVzZWQgdG8gcmVhZCBhIENhYmFsIGZpbGUuCisKKzs7IENvbW1lbnQ6Cis7 OworOzsgVGhlIHVzZSBvZiB2aXJ0dWFsIGNsb3NpbmcgYnJhY2VzIFZDQ1VSTFkgYW5kIHNvbWUg bGV4ZXIgZnVuY3Rpb25zIHdlcmUKKzs7IGluc3BpcmVkIGZyb20gaHR0cDovL2hhY2thZ2UuaGFz a2VsbC5vcmcvcGFja2FnZS9oYXNrZWxsLXNyYworCis7OyBPYmplY3QgY29udGFpbmluZyBpbmZv cm1hdGlvbiBhYm91dCB0aGUgc3RydWN0dXJlIG9mIGEgYmxvY2s6IChpKSBkZWxpbWl0ZWQKKzs7 IGJ5IGJyYWNlcyBvciBieSBpbmRlbnRhdGlvbiwgKGlpKSBtaW5pbXVtIGluZGVudGF0aW9uLgor KGRlZmluZS1yZWNvcmQtdHlwZSAgPHBhcnNlLWNvbnRleHQ+CisgIChtYWtlLXBhcnNlLWNvbnRl eHQgbW9kZSBpbmRlbnRhdGlvbikKKyAgcGFyc2UtY29udGV4dD8KKyAgKG1vZGUgcGFyc2UtY29u dGV4dC1tb2RlKSAgICAgICAgICAgICAgICA7ICdsYXlvdXQgb3IgJ25vLWxheW91dAorICAoaW5k ZW50YXRpb24gcGFyc2UtY29udGV4dC1pbmRlbnRhdGlvbikpIDsgI2YgZm9yICduby1sYXlvdXQK KworOzsgPHBhcnNlLWNvbnRleHQ+IG1vZGUgc2V0IHVuaXZlcnNlCisoZGVmaW5lLWVudW1lcmF0 aW9uIGNvbnRleHQgKGxheW91dCBuby1sYXlvdXQpIG1ha2UtY29udGV4dCkKKworKGRlZmluZSAo bWFrZS1zdGFjaykKKyAgIkNyZWF0ZXMgYSBzaW1wbGUgc3RhY2sgY2xvc3VyZS4gIEFjdGlvbnMg b24gdGhlIGdlbmVyYXRlZCBzdGFjayBhcmUKK3JlcXVlc3RlZCBieSBjYWxsaW5nIGl0IHdpdGgg b25lIG9mIHRoZSBmb2xsb3dpbmcgc3ltYm9scyBhcyB0aGUgZmlyc3QKK2FyZ3VtZW50OiAnZW1w dHk/LCAncHVzaCEsICd0b3AsICdwb3AhIGFuZCAnY2xlYXIhLiAgVGhlIGFjdGlvbiAncHVzaCEg aXMgdGhlCitvbmx5IG9uZSByZXF1aXJpbmcgYSBzZWNvbmQgYXJndW1lbnQgY29ycmVzcG9uZGlu ZyB0byB0aGUgb2JqZWN0IHRvIGJlIGFkZGVkCit0byB0aGUgc3RhY2suIgorICAobGV0ICgoc3Rh Y2sgJygpKSkKKyAgICAobGFtYmRhIChtc2cgLiBhcmdzKQorICAgICAgKGNvbmQgKChlcXY/IG1z ZyAnZW1wdHk/KSAobnVsbD8gc3RhY2spKQorICAgICAgICAgICAgKChlcXY/IG1zZyAncHVzaCEp IChzZXQhIHN0YWNrIChjb25zIChmaXJzdCBhcmdzKSBzdGFjaykpKQorICAgICAgICAgICAgKChl cXY/IG1zZyAndG9wKSAoaWYgKG51bGw/IHN0YWNrKSAnKCkgKGZpcnN0IHN0YWNrKSkpCisgICAg ICAgICAgICAoKGVxdj8gbXNnICdwb3AhKSAobWF0Y2ggc3RhY2sKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKChlIHIgLi4uKSAoc2V0ISBzdGFjayAoY2RyIHN0YWNrKSkgZSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF8gI2YpKSkKKyAgICAgICAgICAgICgoZXF2 PyBtc2cgJ2NsZWFyISkgKHNldCEgc3RhY2sgJygpKSkKKyAgICAgICAgICAgIChlbHNlICNmKSkp KSkKKworOzsgU3RhY2sgdG8gdHJhY2sgdGhlIHN0cnVjdHVyZSBvZiBuZXN0ZWQgYmxvY2tzCiso ZGVmaW5lIGNvbnRleHQtc3RhY2sgKG1ha2Utc3RhY2spKQorCis7OyBJbmRlbnRhdGlvbiBvZiB0 aGUgbGluZSBiZWluZyBwYXJzZWQuCisoZGVmaW5lIGN1cnJlbnQtaW5kZW50YXRpb24gKG1ha2Ut cGFyYW1ldGVyIDApKQorCis7OyBTaWduYWwgdG8gcmVwcm9jZXNzIHRoZSBiZWdpbm5pbmcgb2Yg bGluZSwgaW4gY2FzZSB3ZSBuZWVkIHRvIGNsb3NlIG1vcmUKKzs7IHRoYW4gb25lIGluZGVudGF0 aW9uIGxldmVsLgorKGRlZmluZSBjaGVjay1ib2w/IChtYWtlLXBhcmFtZXRlciAjZikpCisKKzs7 IE5hbWUgb2YgdGhlIGZpbGUgYmVpbmcgcGFyc2VkLiBVc2VkIGluIGVycm9yIG1lc3NhZ2VzLgor KGRlZmluZSBjYWJhbC1maWxlLW5hbWUgKG1ha2UtcGFyYW1ldGVyICJ1bmtub3drIikpCisKKzs7 IFNwZWNpZnkgdGhlIGdyYW1tYXIgb2YgYSBDYWJhbCBmaWxlIGFuZCBnZW5lcmF0ZSBhIHN1aXRh YmxlIHN5bnRheCBhbmFseXNlci4KKyhkZWZpbmUgKG1ha2UtY2FiYWwtcGFyc2VyKQorICAiR2Vu ZXJhdGUgYSBwYXJzZXIgZm9yIENhYmFsIGZpbGVzLiIKKyAgKGxhbHItcGFyc2VyCisgICA7OyAt LS0gdG9rZW4gZGVmaW5pdGlvbnMKKyAgIChDQ1VSTFkgVkNDVVJMWSBPUEFSRU4gQ1BBUkVOIFRF U1QgSUQgVkVSU0lPTiBSRUxBVElPTgorICAgICAgICAgICAocmlnaHQ6IElGIEZMQUcgRVhFQyBU RVNULVNVSVRFIFNPVVJDRS1SRVBPIEJFTkNITUFSSyBMSUIgT0NVUkxZKQorICAgICAgICAgICAo bGVmdDogT1IpCisgICAgICAgICAgIChsZWZ0OiBQUk9QRVJUWSBBTkQpCisgICAgICAgICAgIChy aWdodDogRUxTRSBOT1QpKQorICAgOzsgLS0tIHJ1bGVzCisgICAoYm9keSAgICAgICAgKHByb3Bl cnRpZXMgc2VjdGlvbnMpICAgOiAoYXBwZW5kICQxICQyKSkKKyAgIChzZWN0aW9ucyAgICAoc2Vj dGlvbnMgZmxhZ3MpICAgICAgICA6IChhcHBlbmQgJDEgJDIpCisgICAgICAgICAgICAgICAgKHNl Y3Rpb25zIHNvdXJjZS1yZXBvKSAgOiAoYXBwZW5kICQxIChsaXN0ICQyKSkKKyAgICAgICAgICAg ICAgICAoc2VjdGlvbnMgZXhlY3V0YWJsZXMpICA6IChhcHBlbmQgJDEgJDIpCisgICAgICAgICAg ICAgICAgKHNlY3Rpb25zIHRlc3Qtc3VpdGVzKSAgOiAoYXBwZW5kICQxICQyKQorICAgICAgICAg ICAgICAgIChzZWN0aW9ucyBiZW5jaG1hcmtzKSAgIDogKGFwcGVuZCAkMSAkMikKKyAgICAgICAg ICAgICAgICAoc2VjdGlvbnMgbGliLXNlYykgICAgICA6IChhcHBlbmQgJDEgKGxpc3QgJDIpKQor ICAgICAgICAgICAgICAgICgpICAgICAgICAgICAgICAgICAgICAgIDogJygpKQorICAgKGZsYWdz ICAgICAgIChmbGFncyBmbGFnLXNlYykgICAgICAgIDogKGFwcGVuZCAkMSAobGlzdCAkMikpCisg ICAgICAgICAgICAgICAgKGZsYWctc2VjKSAgICAgICAgICAgICAgOiAobGlzdCAkMSkpCisgICAo ZmxhZy1zZWMgICAgKEZMQUcgT0NVUkxZIHByb3BlcnRpZXMgQ0NVUkxZKSA6IGAoc2VjdGlvbiBm bGFnICwkMSAsJDMpCisgICAgICAgICAgICAgICAgKEZMQUcgb3BlbiBwcm9wZXJ0aWVzIGNsb3Nl KSAgICA6IGAoc2VjdGlvbiBmbGFnICwkMSAsJDMpCisgICAgICAgICAgICAgICAgKEZMQUcpICAg ICAgICAgICAgICAgICAgICAgICAgICA6IGAoc2VjdGlvbiBmbGFnICwkMSAnKCkpKQorICAgKHNv dXJjZS1yZXBvIChTT1VSQ0UtUkVQTyBPQ1VSTFkgcHJvcGVydGllcyBDQ1VSTFkpCisgICAgICAg ICAgICAgICAgOiBgKHNlY3Rpb24gc291cmNlLXJlcG9zaXRvcnkgLCQxICwkMykKKyAgICAgICAg ICAgICAgICAoU09VUkNFLVJFUE8gb3BlbiBwcm9wZXJ0aWVzIGNsb3NlKQorICAgICAgICAgICAg ICAgIDogYChzZWN0aW9uIHNvdXJjZS1yZXBvc2l0b3J5ICwkMSAsJDMpKQorICAgKHByb3BlcnRp ZXMgIChwcm9wZXJ0aWVzIFBST1BFUlRZKSAgIDogKGFwcGVuZCAkMSAobGlzdCAkMikpCisgICAg ICAgICAgICAgICAgKFBST1BFUlRZKSAgICAgICAgICAgICAgOiAobGlzdCAkMSkpCisgICAoZXhl Y3V0YWJsZXMgKGV4ZWN1dGFibGVzIGV4ZWMtc2VjKSAgOiAoYXBwZW5kICQxIChsaXN0ICQyKSkK KyAgICAgICAgICAgICAgICAoZXhlYy1zZWMpICAgICAgICAgICAgICA6IChsaXN0ICQxKSkKKyAg IChleGVjLXNlYyAgICAoRVhFQyBPQ1VSTFkgZXhwcnMgQ0NVUkxZKSA6IGAoc2VjdGlvbiBleGVj dXRhYmxlICwkMSAsJDMpCisgICAgICAgICAgICAgICAgKEVYRUMgb3BlbiBleHBycyBjbG9zZSkg ICAgOiBgKHNlY3Rpb24gZXhlY3V0YWJsZSAsJDEgLCQzKSkKKyAgICh0ZXN0LXN1aXRlcyAodGVz dC1zdWl0ZXMgdHMtc2VjKSAgICA6IChhcHBlbmQgJDEgKGxpc3QgJDIpKQorICAgICAgICAgICAg ICAgICh0cy1zZWMpICAgICAgICAgICAgICAgIDogKGxpc3QgJDEpKQorICAgKHRzLXNlYyAgICAg IChURVNULVNVSVRFIE9DVVJMWSBleHBycyBDQ1VSTFkpIDogYChzZWN0aW9uIHRlc3Qtc3VpdGUg LCQxICwkMykKKyAgICAgICAgICAgICAgICAoVEVTVC1TVUlURSBvcGVuIGV4cHJzIGNsb3NlKSAg ICA6IGAoc2VjdGlvbiB0ZXN0LXN1aXRlICwkMSAsJDMpKQorICAgKGJlbmNobWFya3MgIChiZW5j aG1hcmtzIGJtLXNlYykgICAgIDogKGFwcGVuZCAkMSAobGlzdCAkMikpCisgICAgICAgICAgICAg ICAgKGJtLXNlYykgICAgICAgICAgICAgICAgOiAobGlzdCAkMSkpCisgICAoYm0tc2VjICAgICAg KEJFTkNITUFSSyBPQ1VSTFkgZXhwcnMgQ0NVUkxZKSA6IGAoc2VjdGlvbiBiZW5jaG1hcmsgLCQx ICwkMykKKyAgICAgICAgICAgICAgICAoQkVOQ0hNQVJLIG9wZW4gZXhwcnMgY2xvc2UpICAgIDog YChzZWN0aW9uIGJlbmNobWFyayAsJDEgLCQzKSkKKyAgIChsaWItc2VjICAgICAoTElCIE9DVVJM WSBleHBycyBDQ1VSTFkpIDogYChzZWN0aW9uIGxpYnJhcnkgLCQzKQorICAgICAgICAgICAgICAg IChMSUIgb3BlbiBleHBycyBjbG9zZSkgICAgOiBgKHNlY3Rpb24gbGlicmFyeSAsJDMpKQorICAg KGV4cHJzICAgICAgIChleHBycyBQUk9QRVJUWSkgICAgICAgICA6IChhcHBlbmQgJDEgKGxpc3Qg JDIpKQorICAgICAgICAgICAgICAgIChQUk9QRVJUWSkgICAgICAgICAgICAgICA6IChsaXN0ICQx KQorICAgICAgICAgICAgICAgIChleHBycyBpZi10aGVuLWVsc2UpICAgICA6IChhcHBlbmQgJDEg KGxpc3QgJDIpKQorICAgICAgICAgICAgICAgIChpZi10aGVuLWVsc2UpICAgICAgICAgICA6IChs aXN0ICQxKQorICAgICAgICAgICAgICAgIChleHBycyBpZi10aGVuKSAgICAgICAgICA6IChhcHBl bmQgJDEgKGxpc3QgJDIpKQorICAgICAgICAgICAgICAgIChpZi10aGVuKSAgICAgICAgICAgICAg ICA6IChsaXN0ICQxKSkKKyAgIChpZi10aGVuLWVsc2UgKElGIHRlc3RzIE9DVVJMWSBleHBycyBD Q1VSTFkgRUxTRSBPQ1VSTFkgZXhwcnMgQ0NVUkxZKQorICAgICAgICAgICAgICAgICA6IGAoaWYg LCQyICwkNCAsJDgpCisgICAgICAgICAgICAgICAgIChJRiB0ZXN0cyBvcGVuIGV4cHJzIGNsb3Nl IEVMU0UgT0NVUkxZIGV4cHJzIENDVVJMWSkKKyAgICAgICAgICAgICAgICAgOiBgKGlmICwkMiAs JDQgLCQ4KQorICAgICAgICAgICAgICAgICA7OyBUaGUgJ29wZW4nIHRva2VuIGFmdGVyICd0ZXN0 cycgaXMgc2hpZnRlZCBhZnRlciBhbiAnZXhwcnMnCisgICAgICAgICAgICAgICAgIDs7IGlzIGZv dW5kLiAgVGhpcyBpcyBiZWNhdXNlLCBpbnN0ZWFkIG9mICdleHBycycgYSAnT0NVUkxZJworICAg ICAgICAgICAgICAgICA7OyB0b2tlbiBpcyBhIHZhbGlkIGFsdGVybmF0aXZlLiAgRm9yIHRoaXMg cmVhc29uLCAnb3BlbicKKyAgICAgICAgICAgICAgICAgOzsgcHVzaGVzIGEgPHBhcnNlLWNvbnRl eHQ+IHdpdGggYSBsaW5lIGluZGVudGF0aW9uIGVxdWFsIHRvCisgICAgICAgICAgICAgICAgIDs7 IHRoZSBpbmRlbnRhdGlvbiBvZiAnZXhwcnMnLgorICAgICAgICAgICAgICAgICA7OworICAgICAg ICAgICAgICAgICA7OyBEaWZmZXJlbnRseSBmcm9tIHRoaXMsIHdpdGhvdXQgdGhlIHJ1bGUgYWJv dmUgdGhpcworICAgICAgICAgICAgICAgICA7OyBjb21tZW50LCB3aGVuIGFuICdFTFNFJyB0b2tl biBpcyBmb3VuZCwgdGhlICdvcGVuJyB0b2tlbgorICAgICAgICAgICAgICAgICA7OyBmb2xsb3dp bmcgdGhlICdFTFNFJyB3b3VsZCBiZSBzaGlmdGVkIGltbWVkaWF0ZWx5LCBiZWZvcmUKKyAgICAg ICAgICAgICAgICAgOzsgdGhlICdleHBycycgaXMgZm91bmQgKGJlY2F1c2UgdGhlcmUgYXJlIG5v IG90aGVyIHZhbGlkCisgICAgICAgICAgICAgICAgIDs7IHRva2VucykuICBUaGUgJ29wZW4nIHdv dWxkIHRoZXJlZm9yZSBjcmVhdGUgYQorICAgICAgICAgICAgICAgICA7OyA8cGFyc2UtY29udGV4 dD4gd2l0aCB0aGUgaW5kZW50YXRpb24gb2YgJ0VMU0UnIGFuZCBub3QKKyAgICAgICAgICAgICAg ICAgOzsgJ2V4cHJzJywgY3JlYXRpbmcgYW4gaW5jb25zaXN0ZW5jeS4gIFdlIHRoZXJlZm9yZSBh bGxvdworICAgICAgICAgICAgICAgICA7OyBtaXhlZCBzdHlsZSBjb25kaXRpb25hbHMuCisgICAg ICAgICAgICAgICAgIChJRiB0ZXN0cyBvcGVuIGV4cHJzIGNsb3NlIEVMU0Ugb3BlbiBleHBycyBj bG9zZSkKKyAgICAgICAgICAgICAgICAgOiBgKGlmICwkMiAsJDQgLCQ4KSkKKyAgIChpZi10aGVu ICAgICAoSUYgdGVzdHMgT0NVUkxZIGV4cHJzIENDVVJMWSkgOiBgKGlmICwkMiAsJDQgKCkpCisg ICAgICAgICAgICAgICAgKElGIHRlc3RzIG9wZW4gZXhwcnMgY2xvc2UpICAgIDogYChpZiAsJDIg LCQ0ICgpKSkKKyAgICh0ZXN0cyAgICAgICAoVEVTVCBPUEFSRU4gSUQgQ1BBUkVOKSAgICAgICAg OiBgKCwkMSAsJDMpCisgICAgICAgICAgICAgICAgKFRFU1QgT1BBUkVOIElEIFJFTEFUSU9OIFZF UlNJT04gQ1BBUkVOKQorICAgICAgICAgICAgICAgIDogYCgsJDEgLChzdHJpbmctYXBwZW5kICQz ICIgIiAkNCAiICIgJDUpKQorICAgICAgICAgICAgICAgIChURVNUIE9QQVJFTiBJRCBSRUxBVElP TiBWRVJTSU9OIEFORCBSRUxBVElPTiBWRVJTSU9OIENQQVJFTikKKyAgICAgICAgICAgICAgICA6 IGAoYW5kICgsJDEgLChzdHJpbmctYXBwZW5kICQzICIgIiAkNCAiICIgJDUpKQorICAgICAgICAg ICAgICAgICAgICAgICAgKCwkMSAsKHN0cmluZy1hcHBlbmQgJDMgIiAiICQ3ICIgIiAkOCkpKQor ICAgICAgICAgICAgICAgKE5PVCB0ZXN0cykgICAgICAgICAgICAgICAgICAgICA6IGAobm90ICwk MikKKyAgICAgICAgICAgICAgICh0ZXN0cyBBTkQgdGVzdHMpICAgICAgICAgICAgICAgOiBgKGFu ZCAsJDEgLCQzKQorICAgICAgICAgICAgICAgKHRlc3RzIE9SIHRlc3RzKSAgICAgICAgICAgICAg ICA6IGAob3IgLCQxICwkMykKKyAgICAgICAgICAgICAgIChPUEFSRU4gdGVzdHMgQ1BBUkVOKSAg ICAgICAgICAgOiAkMikKKyAgIChvcGVuICAgICAgICgpIDogKGNvbnRleHQtc3RhY2sgJ3B1c2gh CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWtlLXBhcnNlLWNvbnRleHQg KGNvbnRleHQgbGF5b3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjdXJyZW50LWluZGVudGF0aW9uKSkpKQorICAgKGNsb3NlICAgICAg KFZDQ1VSTFkpKSkpCisKKyhkZWZpbmUgKHBlZWstbmV4dC1saW5lLWluZGVudCBwb3J0KQorICAi VGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlIG5leHQgY2hhcmFjdGVyIG9uIFBP UlQgaXMgI1xuZXdsaW5lCithbmQgcmV0dXJucyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGxpbmUg c3RhcnRpbmcgYWZ0ZXIgdGhlICNcbmV3bGluZQorY2hhcmFjdGVyLiAgRGlzY2FyZCAoYW5kIGNv bnN1bWUpIGVtcHR5IGFuZCBjb21tZW50IGxpbmVzLiIKKyAgKGxldCAoKGluaXRpYWwtbmV3bGlu ZSAoc3RyaW5nIChyZWFkLWNoYXIgcG9ydCkpKSkKKyAgICAobGV0IGxvb3AgKChjaGFyIChwZWVr LWNoYXIgcG9ydCkpCisgICAgICAgICAgICAgICAod29yZCAiIikpCisgICAgICAoY29uZCAoKGVx dj8gY2hhciAjXG5ld2xpbmUpIChyZWFkLWNoYXIgcG9ydCkKKyAgICAgICAgICAgICAobG9vcCAo cGVlay1jaGFyIHBvcnQpICIiKSkKKyAgICAgICAgICAgICgob3IgKGVxdj8gY2hhciAjXHNwYWNl KSAoZXF2PyBjaGFyICNcdGFiKSkKKyAgICAgICAgICAgICAobGV0ICgoYyAocmVhZC1jaGFyIHBv cnQpKSkKKyAgICAgICAgICAgICAgIChsb29wIChwZWVrLWNoYXIgcG9ydCkgKHN0cmluZy1hcHBl bmQgd29yZCAoc3RyaW5nIGMpKSkpKQorICAgICAgICAgICAgKChjb21tZW50LWxpbmUgcG9ydCBj aGFyKSAobG9vcCAocGVlay1jaGFyIHBvcnQpICIiKSkKKyAgICAgICAgICAgIChlbHNlCisgICAg ICAgICAgICAgKGxldCAoKGxlbiAoc3RyaW5nLWxlbmd0aCB3b3JkKSkpCisgICAgICAgICAgICAg ICAodW5yZWFkLXN0cmluZyAoc3RyaW5nLWFwcGVuZCBpbml0aWFsLW5ld2xpbmUgd29yZCkgcG9y dCkKKyAgICAgICAgICAgICAgIGxlbikpKSkpKQorCisoZGVmaW5lKiAocmVhZC12YWx1ZSBwb3J0 IHZhbHVlIG1pbi1pbmRlbnQgIzpvcHRpb25hbCAoc2VwYXJhdG9yICIgIikpCisgICJUaGUgbmV4 dCBjaGFyYWN0ZXIgb24gUE9SVCBtdXN0IGJlICNcbmV3bGluZS4gIEFwcGVuZCB0byBWQUxVRSB0 aGUKK2ZvbGxvd2luZyBsaW5lcyB3aXRoIGluZGVudGF0aW9uIGxhcmdlciB0aGFuIE1JTi1JTkRF TlQuIgorICAobGV0IGxvb3AgKCh2YWwgKHN0cmluZy10cmltLWJvdGggdmFsdWUpKQorICAgICAg ICAgICAgICh4IChwZWVrLW5leHQtbGluZS1pbmRlbnQgcG9ydCkpKQorICAgIChpZiAoPiB4IG1p bi1pbmRlbnQpCisgICAgICAgIChiZWdpbgorICAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkgOyBj b25zdW1lICNcbmV3bGluZQorICAgICAgICAgIChsb29wIChzdHJpbmctYXBwZW5kCisgICAgICAg ICAgICAgICAgIHZhbCAoaWYgKHN0cmluZy1udWxsPyB2YWwpICIiIHNlcGFyYXRvcikKKyAgICAg ICAgICAgICAgICAgKHN0cmluZy10cmltLWJvdGggKHJlYWQtZGVsaW1pdGVkICJcbiIgcG9ydCAn cGVlaykpKQorICAgICAgICAgICAgICAgIChwZWVrLW5leHQtbGluZS1pbmRlbnQgcG9ydCkpKQor ICAgICAgICB2YWwpKSkKKworKGRlZmluZSAobGV4LXdoaXRlLXNwYWNlIHBvcnQgYm9sKQorICAi Q29uc3VtZSB3aGl0ZSBzcGFjZXMgYW5kIGNvbW1lbnQgbGluZXMgb24gUE9SVC4gIElmIGEgbmV3 IGxpbmUgaXMgc3RhcnRlZCByZXR1cm4gI3QsCitvdGhlcndpc2UgcmV0dXJuIEJPTCAoYmVnaW5u aW5nLW9mLWxpbmUpLiIKKyAgKGxldCBsb29wICgoYyAocGVlay1jaGFyIHBvcnQpKQorICAgICAg ICAgICAgIChib2wgYm9sKSkKKyAgICAoY29uZAorICAgICAoKGFuZCAobm90IChlb2Ytb2JqZWN0 PyBjKSkKKyAgICAgICAgICAgKG9yIChjaGFyPT8gYyAjXHNwYWNlKSAoY2hhcj0/IGMgI1x0YWIp KSkKKyAgICAgIChyZWFkLWNoYXIgcG9ydCkKKyAgICAgIChsb29wIChwZWVrLWNoYXIgcG9ydCkg Ym9sKSkKKyAgICAgKChhbmQgKG5vdCAoZW9mLW9iamVjdD8gYykpIChjaGFyPT8gYyAjXG5ld2xp bmUpKQorICAgICAgKHJlYWQtY2hhciBwb3J0KQorICAgICAgKGxvb3AgKHBlZWstY2hhciBwb3J0 KSAjdCkpCisgICAgICgoY29tbWVudC1saW5lIHBvcnQgYykKKyAgICAgIChsZXgtd2hpdGUtc3Bh Y2UgcG9ydCBib2wpKQorICAgICAoZWxzZQorICAgICAgYm9sKSkpKQorCisoZGVmaW5lIChsZXgt Ym9sIHBvcnQpCisgICJQcm9jZXNzIHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIG9uIFBPUlQ6IHVw ZGF0ZSBjdXJyZW50LWluZGVudGF0aW9uIGFuZAorY2hlY2sgdGhlIGVuZCBvZiBhbiBpbmRlbnRh dGlvbiBiYXNlZCBjb250ZXh0LiIKKyAgKGxldCAoKGxvYyAobWFrZS1zb3VyY2UtbG9jYXRpb24g KGNhYmFsLWZpbGUtbmFtZSkgKHBvcnQtbGluZSBwb3J0KQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAocG9ydC1jb2x1bW4gcG9ydCkgLTEgLTEpKSkKKyAgICAoY3VycmVudC1p bmRlbnRhdGlvbiAoc291cmNlLWxvY2F0aW9uLWNvbHVtbiBsb2MpKQorICAgIChjYXNlIChnZXQt b2Zmc2lkZSBwb3J0KQorICAgICAgKChsZXNzLXRoYW4pCisgICAgICAgKGNoZWNrLWJvbD8gI3Qp IDsgbmVlZCB0byBjaGVjayBpZiBjbG9zaW5nIG1vcmUgdGhhbiAxIGluZGVudCBsZXZlbC4KKyAg ICAgICAodW5sZXNzIChjb250ZXh0LXN0YWNrICdlbXB0eT8pIChjb250ZXh0LXN0YWNrICdwb3Ah KSkKKyAgICAgICAobWFrZS1sZXhpY2FsLXRva2VuICdWQ0NVUkxZIGxvYyAjZikpCisgICAgICAo ZWxzZQorICAgICAgIChsZXgtdG9rZW4gcG9ydCkpKSkpCisKKyhkZWZpbmUgKGJvbD8gcG9ydCkg KG9yIChjaGVjay1ib2w/KSAoPSAocG9ydC1jb2x1bW4gcG9ydCkgMCkpKQorCisoZGVmaW5lIChj b21tZW50LWxpbmUgcG9ydCBjKQorICAiSWYgUE9SVCBzdGFydHMgd2l0aCBhIGNvbW1lbnQgbGlu ZSwgY29uc3VtZSBpdCB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcKKyNcbmV3bGluZS4gIEMgaXMg dGhlIG5leHQgY2hhcmFjdGVyIG9uIFBPUlQuIgorICAoY29uZCAoKGFuZCAobm90IChlb2Ytb2Jq ZWN0PyBjKSkgKGNoYXI9PyBjICNcLSkpCisgICAgICAgICAocmVhZC1jaGFyIHBvcnQpCisgICAg ICAgICAobGV0ICgoYzIgKHBlZWstY2hhciBwb3J0KSkpCisgICAgICAgICAgIChpZiAoY2hhcj0/ IGMyICNcLSkKKyAgICAgICAgICAgICAgIChyZWFkLWRlbGltaXRlZCAiXG4iIHBvcnQgJ3BlZWsp CisgICAgICAgICAgICAgICAoYmVnaW4gKHVucmVhZC1jaGFyIGMgcG9ydCkgI2YpKSkpCisgICAg ICAgIChlbHNlICNmKSkpCisKKyhkZWZpbmUtZW51bWVyYXRpb24gb3JkZXJpbmcgKGxlc3MtdGhh biBlcXVhbCBncmVhdGVyLXRoYW4pIG1ha2Utb3JkZXJpbmcpCisKKyhkZWZpbmUgKGdldC1vZmZz aWRlIHBvcnQpCisgICJJbiBhbiBpbmRlbnRhdGlvbiBiYXNlZCBjb250ZXh0IHJldHVybiB0aGUg c3ltYm9sICdncmVhdGVyLXRoYW4sICdlcXVhbCBvcgorJ2xlc3MtdGhhbiB0byBzaWduYWwgaWYg dGhlIGN1cnJlbnQgY29sdW1uIG51bWJlciBvbiBQT1JUIGlzIGdyZWF0ZXItLCBlcXVhbC0sCitv ciBsZXNzLXRoYW4gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGNvbnRleHQuIgorICAo bGV0ICgoeCAocG9ydC1jb2x1bW4gcG9ydCkpKQorICAgIChtYXRjaCAoY29udGV4dC1zdGFjayAn dG9wKQorICAgICAgKCgkIDxwYXJzZS1jb250ZXh0PiAnbGF5b3V0IGluZGVudGF0aW9uKQorICAg ICAgIChjb25kCisgICAgICAgICgoPiB4IGluZGVudGF0aW9uKSAob3JkZXJpbmcgZ3JlYXRlci10 aGFuKSkKKyAgICAgICAgKCg9IHggaW5kZW50YXRpb24pIChvcmRlcmluZyBlcXVhbCkpCisgICAg ICAgIChlbHNlIChvcmRlcmluZyBsZXNzLXRoYW4pKSkpCisgICAgICAoXyAob3JkZXJpbmcgZ3Jl YXRlci10aGFuKSkpKSkKKyAKKzs7IChTZW1pLSlQcmVkaWNhdGVzIGZvciBpbmRpdmlkdWFsIHRv a2Vucy4KKworKGRlZmluZSAoaXMtcmVsYXRpb24/IGMpCisgIChhbmQgKGNoYXI/IGMpIChhbnkg KGN1dCBjaGFyPT8gYyA8PikgJygjXDwgI1w+ICNcPSkpKSkKKworKGRlZmluZSAobWFrZS1yeC1t YXRjaGVyIHBhdCkKKyAgIkNvbXBpbGUgUEFUIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24gYW5k IGNyZWF0ZXMgYSBmdW5jdGlvbiBtYXRjaGluZyBhCitzdHJpbmcgYWdhaW5zdCB0aGUgY3JlYXRl ZCByZWdleHAuIgorICAobGV0ICgocnggKG1ha2UtcmVnZXhwIHBhdCkpKSAoY3V0IHJlZ2V4cC1l eGVjIHJ4IDw+KSkpCisKKyhkZWZpbmUgaXMtcHJvcGVydHkgKG1ha2UtcngtbWF0Y2hlciAiKFth LXpBLVowLTktXSspOlsgXHRdKihcXHc/LiopJCIpKQorCisoZGVmaW5lIGlzLWZsYWcgKG1ha2Ut cngtbWF0Y2hlciAiXltGZl1sYWcgKyhbYS16QS1aMC05Xy1dKykiKSkKKworKGRlZmluZSBpcy1z cmMtcmVwbworICAobWFrZS1yeC1tYXRjaGVyICJeW1NzXW91cmNlLVtScl1lcG9zaXRvcnkgKyhb YS16QS1aMC05Xy1dKykiKSkKKworKGRlZmluZSBpcy1leGVjIChtYWtlLXJ4LW1hdGNoZXIgIl5b RWVdeGVjdXRhYmxlICsoW2EtekEtWjAtOV8tXSspIikpCisKKyhkZWZpbmUgaXMtdGVzdC1zdWl0 ZSAobWFrZS1yeC1tYXRjaGVyICJeW1R0XWVzdC1bU3NddWl0ZSArKFthLXpBLVowLTlfLV0rKSIp KQorCisoZGVmaW5lIGlzLWJlbmNobWFyayAobWFrZS1yeC1tYXRjaGVyICJeW0JiXWVuY2htYXJr ICsoW2EtekEtWjAtOV8tXSspIikpCisKKyhkZWZpbmUgaXMtbGliIChtYWtlLXJ4LW1hdGNoZXIg Il5bTGxdaWJyYXJ5ICoiKSkKKworKGRlZmluZSBpcy1lbHNlIChtYWtlLXJ4LW1hdGNoZXIgIl5l bHNlIikpCisKKyhkZWZpbmUgKGlzLWlmIHMpIChzdHJpbmc9PyBzICJpZiIpKQorCisoZGVmaW5l IChpcy1hbmQgcykgKHN0cmluZz0/IHMgIiYmIikpCisKKyhkZWZpbmUgKGlzLW9yIHMpIChzdHJp bmc9PyBzICJ8fCIpKQorCisoZGVmaW5lIChpcy1pZCBzKQorICAobGV0ICgoY2FiYWwtcmVzZXJ2 ZWQtd29yZHMKKyAgICAgICAgICcoImlmIiAiZWxzZSIgImxpYnJhcnkiICJmbGFnIiAiZXhlY3V0 YWJsZSIgInRlc3Qtc3VpdGUiCisgICAgICAgICAgICJzb3VyY2UtcmVwb3NpdG9yeSIgImJlbmNo bWFyayIpKSkKKyAgICAoYW5kIChldmVyeSAoY3V0IHN0cmluZy1jaTw+IHMgPD4pIGNhYmFsLXJl c2VydmVkLXdvcmRzKQorICAgICAgICAgKG5vdCAoY2hhcj0/IChsYXN0IChzdHJpbmctPmxpc3Qg cykpICNcOikpKSkpCisKKyhkZWZpbmUgKGlzLXRlc3QgcyBwb3J0KQorICAobGV0ICgodGVzdHMt cnggKG1ha2UtcmVnZXhwICJvc3xhcmNofGZsYWd8aW1wbCIpKQorICAgICAgICAoYyAocGVlay1j aGFyIHBvcnQpKSkKKyAgICAoYW5kIChyZWdleHAtZXhlYyB0ZXN0cy1yeCBzKSAoY2hhcj0/ICNc KCBjKSkpKQorCis7OyBMZXhlcnMgZm9yIGluZGl2aWR1YWwgdG9rZW5zLgorCisoZGVmaW5lIChs ZXgtcmVsYXRpb24gbG9jIHBvcnQpCisgIChtYWtlLWxleGljYWwtdG9rZW4gJ1JFTEFUSU9OIGxv YyAocmVhZC13aGlsZSBpcy1yZWxhdGlvbj8gcG9ydCkpKQorCisoZGVmaW5lIChsZXgtdmVyc2lv biBsb2MgcG9ydCkKKyAgKG1ha2UtbGV4aWNhbC10b2tlbiAnVkVSU0lPTiBsb2MKKyAgICAgICAg ICAgICAgICAgICAgICAocmVhZC13aGlsZSBjaGFyLW51bWVyaWM/IHBvcnQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY3V0IGNoYXI9PyAjXC4gPD4pIGNoYXItbnVtZXJpYz8p KSkKKworKGRlZmluZSogKHJlYWQtd2hpbGUgaXM/IHBvcnQgIzpvcHRpb25hbAorICAgICAgICAg ICAgICAgICAgICAgKGlzLWlmLWZvbGxvd2VkLWJ5PyAobGFtYmRhIChjKSAjZikpCisgICAgICAg ICAgICAgICAgICAgICAoaXMtYWxsb3dlZC1mb2xsb3dlcj8gKGxhbWJkYSAoYykgI2YpKSkKKyAg IlJlYWQgZnJvbSBQT1JUIGFzIGxvbmcgYXM6IChpKSBlaXRoZXIgdGhlIHJlYWQgY2hhcmFjdGVy IHNhdGlzZmllcyB0aGUKK3ByZWRpY2F0ZSBJUz8sIG9yIChpaSkgaXQgc2F0aXNmaWVzIHRoZSBw cmVkaWNhdGUgSVMtSUYtRk9MTE9XRUQtQlk/IGFuZCB0aGUKK2NoYXJhY3RlciBpbW1lZGlhdGVs eSBmb2xsb3dpbmcgaXQgc2F0aXNmaWVzIElTLUFMTE9XRUQtRk9MTE9XRVI/LiAgUmV0dXJucyBh CitzdHJpbmcgd2l0aCB0aGUgcmVhZCBjaGFyYWN0ZXJzLiIKKyAgKGxldCBsb29wICgoYyAocGVl ay1jaGFyIHBvcnQpKQorICAgICAgICAgICAgIChyZXMgJygpKSkKKyAgICAoY29uZCAoKGFuZCAo bm90IChlb2Ytb2JqZWN0PyBjKSkgKGlzPyBjKSkKKyAgICAgICAgICAgKGxldCAoKGMgKHJlYWQt Y2hhciBwb3J0KSkpCisgICAgICAgICAgICAgKGxvb3AgKHBlZWstY2hhciBwb3J0KSAoYXBwZW5k IHJlcyAobGlzdCBjKSkpKSkKKyAgICAgICAgICAoKGFuZCAobm90IChlb2Ytb2JqZWN0PyBjKSkg KGlzLWlmLWZvbGxvd2VkLWJ5PyBjKSkKKyAgICAgICAgICAgKGxldCAoKGMgKHJlYWQtY2hhciBw b3J0KSkKKyAgICAgICAgICAgICAgICAgKGMyIChwZWVrLWNoYXIgcG9ydCkpKQorICAgICAgICAg ICAgIChpZiAoYW5kIChub3QgKGVvZi1vYmplY3Q/IGMyKSkgKGlzLWFsbG93ZWQtZm9sbG93ZXI/ IGMyKSkKKyAgICAgICAgICAgICAgICAgKGxvb3AgYzIgKGFwcGVuZCByZXMgKGxpc3QgYykpKQor ICAgICAgICAgICAgICAgICAoYmVnaW4gKHVucmVhZC1jaGFyIGMpIChsaXN0LT5zdHJpbmcgcmVz KSkpKSkKKyAgICAgICAgICAoZWxzZSAobGlzdC0+c3RyaW5nIHJlcykpKSkpCisKKyhkZWZpbmUg KGxleC1wcm9wZXJ0eSBrLXYtcngtcmVzIGxvYyBwb3J0KQorICAobGV0ICgoa2V5IChzdHJpbmct ZG93bmNhc2UgKG1hdGNoOnN1YnN0cmluZyBrLXYtcngtcmVzIDEpKSkKKyAgICAgICAgKHZhbHVl IChtYXRjaDpzdWJzdHJpbmcgay12LXJ4LXJlcyAyKSkpCisgICAgKG1ha2UtbGV4aWNhbC10b2tl bgorICAgICAnUFJPUEVSVFkgbG9jCisgICAgIChsaXN0IGtleSBgKCwocmVhZC12YWx1ZSBwb3J0 IHZhbHVlIChjdXJyZW50LWluZGVudGF0aW9uKSkpKSkpKQorCisoZGVmaW5lIChsZXgtcngtcmVz IHJ4LXJlcyB0b2tlbiBsb2MpCisgIChsZXQgKChuYW1lIChzdHJpbmctZG93bmNhc2UgKG1hdGNo OnN1YnN0cmluZyByeC1yZXMgMSkpKSkKKyAgICAobWFrZS1sZXhpY2FsLXRva2VuIHRva2VuIGxv YyBuYW1lKSkpCisKKyhkZWZpbmUgKGxleC1mbGFnIGZsYWctcngtcmVzIGxvYykgKGxleC1yeC1y ZXMgZmxhZy1yeC1yZXMgJ0ZMQUcgbG9jKSkKKworKGRlZmluZSAobGV4LXNyYy1yZXBvIHNyYy1y ZXBvLXJ4LXJlcyBsb2MpCisgIChsZXgtcngtcmVzIHNyYy1yZXBvLXJ4LXJlcyAnU09VUkNFLVJF UE8gbG9jKSkKKworKGRlZmluZSAobGV4LWV4ZWMgZXhlYy1yeC1yZXMgbG9jKSAobGV4LXJ4LXJl cyBleGVjLXJ4LXJlcyAnRVhFQyBsb2MpKQorCisoZGVmaW5lIChsZXgtdGVzdC1zdWl0ZSB0cy1y eC1yZXMgbG9jKSAobGV4LXJ4LXJlcyB0cy1yeC1yZXMgJ1RFU1QtU1VJVEUgbG9jKSkKKworKGRl ZmluZSAobGV4LWJlbmNobWFyayBibS1yeC1yZXMgbG9jKSAobGV4LXJ4LXJlcyBibS1yeC1yZXMg J0JFTkNITUFSSyBsb2MpKQorCisoZGVmaW5lIChsZXgtbGliIGxvYykgKG1ha2UtbGV4aWNhbC10 b2tlbiAnTElCIGxvYyAjZikpCisKKyhkZWZpbmUgKGxleC1lbHNlIGxvYykgKG1ha2UtbGV4aWNh bC10b2tlbiAnRUxTRSBsb2MgI2YpKQorCisoZGVmaW5lIChsZXgtaWYgbG9jKSAobWFrZS1sZXhp Y2FsLXRva2VuICdJRiBsb2MgI2YpKQorCisoZGVmaW5lIChsZXgtYW5kIGxvYykgKG1ha2UtbGV4 aWNhbC10b2tlbiAnQU5EIGxvYyAjZikpCisKKyhkZWZpbmUgKGxleC1vciBsb2MpIChtYWtlLWxl eGljYWwtdG9rZW4gJ09SIGxvYyAjZikpCisKKyhkZWZpbmUgKGxleC1pZCB3IGxvYykgKG1ha2Ut bGV4aWNhbC10b2tlbiAnSUQgbG9jIHcpKQorCisoZGVmaW5lIChsZXgtdGVzdCB3IGxvYykgKG1h a2UtbGV4aWNhbC10b2tlbiAnVEVTVCBsb2MgKHN0cmluZy0+c3ltYm9sIHcpKSkKKworOzsgTGV4 ZXIgZm9yIHRva2VucyByZWNvZ25pemFibGUgYnkgc2luZ2xlIGNoYXIuCisKKyhkZWZpbmUqIChp cy1yZWYtY2hhci0+dG9rZW4gcmVmLWNoYXIgbmV4dC1jaGFyIHRva2VuIGxvYyBwb3J0CisgICAg ICAgICAgICAgICAgICAgICAgICAgIzpvcHRpb25hbCAoaG9vay1mbiAjZikpCisgICJJZiB0aGUg bmV4dCBjaGFyYWN0ZXIgTkVYVC1DSEFSIG9uIFBPUlQgaXMgUkVGLUNIQVIsIHRoZW4gcmVhZCBp dCwKK2V4ZWN1dGUgSE9PSy1GTiBpZiBpdCBpc24ndCAjZiBhbmQgcmV0dXJuIGEgbGV4aWNhbCB0 b2tlbiBvZiB0eXBlIFRPS0VOIHdpdGgKK2xvY2F0aW9uIGluZm9ybWF0aW9uIExPQy4iCisgIChj b25kICgoY2hhcj0/IG5leHQtY2hhciByZWYtY2hhcikKKyAgICAgICAgIChyZWFkLWNoYXIgcG9y dCkKKyAgICAgICAgICh3aGVuIGhvb2stZm4gKGhvb2stZm4pKQorICAgICAgICAgKG1ha2UtbGV4 aWNhbC10b2tlbiB0b2tlbiBsb2MgKHN0cmluZyBuZXh0LWNoYXIpKSkKKyAgICAgICAgKGVsc2Ug I2YpKSkKKworKGRlZmluZSAoaXMtb2N1cmx5LT50b2tlbiBjIGxvYyBwb3J0KQorICAoaXMtcmVm LWNoYXItPnRva2VuICNceyBjICdPQ1VSTFkgbG9jIHBvcnQKKyAgICAgICAgICAgICAgICAgIChs YW1iZGEgKCkKKyAgICAgICAgICAgICAgICAgICAgKGNvbnRleHQtc3RhY2sgJ3B1c2ghIChtYWtl LXBhcnNlLWNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb250ZXh0IG5vLWxheW91dCkgI2YpKSkpKQorCisoZGVmaW5lIChpcy1jY3VybHktPnRva2Vu IGMgbG9jIHBvcnQpCisgIChpcy1yZWYtY2hhci0+dG9rZW4gI1x9IGMgJ0NDVVJMWSBsb2MgcG9y dCAobGFtYmRhICgpIChjb250ZXh0LXN0YWNrICdwb3AhKSkpKQorCisoZGVmaW5lIChpcy1vcGFy ZW4tPnRva2VuIGMgbG9jIHBvcnQpCisgIChpcy1yZWYtY2hhci0+dG9rZW4gI1woIGMgJ09QQVJF TiBsb2MgcG9ydCkpCisKKyhkZWZpbmUgKGlzLWNwYXJlbi0+dG9rZW4gYyBsb2MgcG9ydCkKKyAg KGlzLXJlZi1jaGFyLT50b2tlbiAjXCkgYyAnQ1BBUkVOIGxvYyBwb3J0KSkKKworKGRlZmluZSAo aXMtbm90LT50b2tlbiBjIGxvYyBwb3J0KQorICAoaXMtcmVmLWNoYXItPnRva2VuICNcISBjICdO T1QgbG9jIHBvcnQpKQorCisoZGVmaW5lIChpcy12ZXJzaW9uPyBjKSAoY2hhci1udW1lcmljPyBj KSkKKworOzsgTWFpbiBsZXhlciBmdW5jdGlvbnMKKworKGRlZmluZSAobGV4LXNpbmdsZS1jaGFy IHBvcnQgbG9jKQorICAiUHJvY2VzcyB0b2tlbnMgd2hpY2ggY2FuIGJlIHJlY29nbmlzZWQgYnkg cGVla2luZyB0aGUgbmV4dCBjaGFyYWN0ZXIgb24KK1BPUlQuICBJZiBubyB0b2tlbiBjYW4gYmUg cmVjb2duaXplZCByZXR1cm4gI2YuICBMT0MgaXMgdGhlIGN1cnJlbnQgcG9ydAorbG9jYXRpb24u IgorICAobGV0KiAoKGMgKHBlZWstY2hhciBwb3J0KSkpCisgICAgKGNvbmQgKChlb2Ytb2JqZWN0 PyBjKSAocmVhZC1jaGFyIHBvcnQpICcqZW9pKikKKyAgICAgICAgICAoKGlzLW9jdXJseS0+dG9r ZW4gYyBsb2MgcG9ydCkpCisgICAgICAgICAgKChpcy1jY3VybHktPnRva2VuIGMgbG9jIHBvcnQp KQorICAgICAgICAgICgoaXMtb3BhcmVuLT50b2tlbiBjIGxvYyBwb3J0KSkKKyAgICAgICAgICAo KGlzLWNwYXJlbi0+dG9rZW4gYyBsb2MgcG9ydCkpCisgICAgICAgICAgKChpcy1ub3QtPnRva2Vu IGMgbG9jIHBvcnQpKQorICAgICAgICAgICgoaXMtdmVyc2lvbj8gYykgKGxleC12ZXJzaW9uIGxv YyBwb3J0KSkKKyAgICAgICAgICAoKGlzLXJlbGF0aW9uPyBjKSAobGV4LXJlbGF0aW9uIGxvYyBw b3J0KSkKKyAgICAgICAgICAoZWxzZQorICAgICAgICAgICAjZikpKSkKKworKGRlZmluZSAobGV4 LXdvcmQgcG9ydCBsb2MpCisgICJQcm9jZXNzIHRva2VucyB3aGljaCBjYW4gYmUgcmVjb2duaXpl ZCBieSByZWFkaW5nIHRoZSBuZXh0IHdvcmQgZm9ybSBQT1JULgorTE9DIGlzIHRoZSBjdXJyZW50 IHBvcnQgbG9jYXRpb24uIgorICAobGV0KiAoKHcgKHJlYWQtZGVsaW1pdGVkICIgKClcdFxuIiBw b3J0ICdwZWVrKSkpCisgICAgKGNvbmQgKChpcy1pZiB3KSAobGV4LWlmIGxvYykpCisgICAgICAg ICAgKChpcy10ZXN0IHcgcG9ydCkgKGxleC10ZXN0IHcgbG9jKSkKKyAgICAgICAgICAoKGlzLWFu ZCB3KSAobGV4LWFuZCBsb2MpKQorICAgICAgICAgICgoaXMtb3IgdykgKGxleC1vciBsb2MpKQor ICAgICAgICAgICgoaXMtaWQgdykgKGxleC1pZCB3IGxvYykpCisgICAgICAgICAgKGVsc2UgKHVu cmVhZC1zdHJpbmcgdyBwb3J0KSAjZikpKSkKKworKGRlZmluZSAobGV4LWxpbmUgcG9ydCBsb2Mp CisgICJQcm9jZXNzIHRva2VucyB3aGljaCBjYW4gYmUgcmVjb2duaXNlZCBieSByZWFkaW5nIGEg bGluZSBmcm9tIFBPUlQuICBMT0MgaXMKK3RoZSBjdXJyZW50IHBvcnQgbG9jYXRpb24uIgorICAo bGV0KiAoKHMgKHJlYWQtZGVsaW1pdGVkICJcbnt9IiBwb3J0ICdwZWVrKSkpCisgICAgKGNvbmQK KyAgICAgKChpcy1wcm9wZXJ0eSBzKSA9PiAoY3V0IGxleC1wcm9wZXJ0eSA8PiBsb2MgcG9ydCkp CisgICAgICgoaXMtZmxhZyBzKSA9PiAoY3V0IGxleC1mbGFnIDw+IGxvYykpCisgICAgICgoaXMt c3JjLXJlcG8gcykgPT4gKGN1dCBsZXgtc3JjLXJlcG8gPD4gbG9jKSkKKyAgICAgKChpcy1leGVj IHMpID0+IChjdXQgbGV4LWV4ZWMgPD4gbG9jKSkKKyAgICAgKChpcy10ZXN0LXN1aXRlIHMpID0+ IChjdXQgbGV4LXRlc3Qtc3VpdGUgPD4gbG9jKSkKKyAgICAgKChpcy1iZW5jaG1hcmsgcykgPT4g KGN1dCBsZXgtYmVuY2htYXJrIDw+IGxvYykpCisgICAgICgoaXMtbGliIHMpIChsZXgtbGliIGxv YykpCisgICAgICgoaXMtZWxzZSBzKSAobGV4LWVsc2UgbG9jKSkKKyAgICAgKGVsc2UKKyAgICAg ICNmKSkpKQorCisoZGVmaW5lIChsZXgtdG9rZW4gcG9ydCkKKyAgKGxldCogKChsb2MgKG1ha2Ut c291cmNlLWxvY2F0aW9uIChjYWJhbC1maWxlLW5hbWUpIChwb3J0LWxpbmUgcG9ydCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb3J0LWNvbHVtbiBwb3J0KSAtMSAtMSkp KQorICAgIChvciAobGV4LXNpbmdsZS1jaGFyIHBvcnQgbG9jKSAobGV4LXdvcmQgcG9ydCBsb2Mp IChsZXgtbGluZSBwb3J0IGxvYykpKSkKKworOzsgTGV4ZXItIGFuZCBlcnJvci1mdW5jdGlvbiBn ZW5lcmF0b3JzCisKKyhkZWZpbmUgKGVycm9ycCkKKyAgIkdlbmVyYXRlcyB0aGUgbGV4ZXIgZXJy b3IgZnVuY3Rpb24uIgorICAobGV0ICgocCAoY3VycmVudC1lcnJvci1wb3J0KSkpCisgICAgKGxh bWJkYSAobWVzc2FnZSAuIGFyZ3MpCisgICAgICAoZm9ybWF0IHAgIn5hIiBtZXNzYWdlKQorICAg ICAgKGlmIChhbmQgKHBhaXI/IGFyZ3MpIChsZXhpY2FsLXRva2VuPyAoY2FyIGFyZ3MpKSkKKyAg ICAgICAgICAobGV0KiAoKHRva2VuIChjYXIgYXJncykpCisgICAgICAgICAgICAgICAgIChzb3Vy Y2UgKGxleGljYWwtdG9rZW4tc291cmNlIHRva2VuKSkKKyAgICAgICAgICAgICAgICAgKGxpbmUg KHNvdXJjZS1sb2NhdGlvbi1saW5lIHNvdXJjZSkpCisgICAgICAgICAgICAgICAgIChjb2x1bW4g KHNvdXJjZS1sb2NhdGlvbi1jb2x1bW4gc291cmNlKSkpCisgICAgICAgICAgICAoZm9ybWF0IHAg In5hICIgKG9yIChsZXhpY2FsLXRva2VuLXZhbHVlIHRva2VuKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxleGljYWwtdG9rZW4tY2F0ZWdvcnkgdG9rZW4pKSkKKyAgICAgICAg ICAgICh3aGVuIChhbmQgKG51bWJlcj8gbGluZSkgKG51bWJlcj8gY29sdW1uKSkKKyAgICAgICAg ICAgICAgKGZvcm1hdCBwICIoYXQgbGluZSB+YSwgY29sdW1uIH5hKSIgKDErIGxpbmUpIGNvbHVt bikpKQorICAgICAgICAgIChmb3ItZWFjaCBkaXNwbGF5IGFyZ3MpKQorICAgICAgKGZvcm1hdCBw ICJ+JSIpKSkpCisKKyhkZWZpbmUgKG1ha2UtbGV4ZXIgcG9ydCkKKyAgIkdlbmVyYXRlIHRoZSBD YWJhbCBsZXhpY2FsIGFuYWx5c2VyIHJlYWRpbmcgZnJvbSBQT1JULiIKKyAgKGxldCAoKHAgcG9y dCkpCisgICAgKGxhbWJkYSAoKQorICAgICAgKGxldCAoKGJvbCAobGV4LXdoaXRlLXNwYWNlIHAg KGJvbD8gcCkpKSkKKyAgICAgICAgKGNoZWNrLWJvbD8gI2YpCisgICAgICAgIChpZiBib2wgKGxl eC1ib2wgcCkgKGxleC10b2tlbiBwKSkpKSkpCisKKyhkZWZpbmUqIChyZWFkLWNhYmFsICM6b3B0 aW9uYWwgKHBvcnQgKGN1cnJlbnQtaW5wdXQtcG9ydCkpCisgICAgICAgICAgICAgICAgICAgICAo ZmlsZS1uYW1lICNmKSkKKyAgIlJlYWQgYSBDYWJhbCBmaWxlIGZyb20gUE9SVC4gIEZJTEUtTkFN RSBpcyBhIHN0cmluZyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzLgorSWYgI2YgdXNlIHRoZSBmdW5j dGlvbiAncG9ydC1maWxlbmFtZScgdG8gb2J0YWluIGl0LiIKKyAgKGxldCAoKGNhYmFsLXBhcnNl ciAobWFrZS1jYWJhbC1wYXJzZXIpKSkKKyAgICAoY2FiYWwtZmlsZS1uYW1lIChvciBmaWxlLW5h bWUgKHBvcnQtZmlsZW5hbWUgcG9ydCkgInN0YW5kYXJkIGlucHV0IikpCisgICAgKGNvbnRleHQt c3RhY2sgJ2NsZWFyISkKKyAgICAoY2FiYWwtcGFyc2VyIChtYWtlLWxleGVyIHBvcnQpIChlcnJv cnApKSkpCisKKzs7IFBhcnQgMjoKKzs7Cis7OyBFdmFsdWF0ZSB0aGUgUy1leHByZXNzaW9uIHJl dHVybmVkIGJ5ICdyZWFkLWNhYmFsJy4KKworOzsgVGhpcyBkZWZpbmVzIHRoZSBvYmplY3QgYW5k IGludGVyZmFjZSB0aGF0IHdlIHByb3ZpZGUgdG8gYWNjZXNzIHRoZSBDYWJhbAorOzsgZmlsZSBp bmZvcm1hdGlvbi4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGluY2x1ZGUgYWxsIHRoZSBwaWVj ZXMgb2YKKzs7IGluZm9ybWF0aW9uIG9mIHRoZSBDYWJhbCBmaWxlLCBidXQgb25seSB0aGUgb25l cyB3ZSBjdXJyZW50bHkgYXJlCis7OyBpbnRlcmVzdGVkIGluLgorKGRlZmluZS1yZWNvcmQtdHlw ZSA8Y2FiYWwtcGFja2FnZT4KKyAgKG1ha2UtY2FiYWwtcGFja2FnZSBuYW1lIHZlcnNpb24gbGlj ZW5zZSBob21lLXBhZ2Ugc291cmNlLXJlcG9zaXRvcnkKKyAgICAgICAgICAgICAgICAgICAgICBz eW5vcHNpcyBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVzIGxp YiB0ZXN0LXN1aXRlcworICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIGV2YWwtZW52aXJvbm1l bnQpCisgIGNhYmFsLXBhY2thZ2U/CisgIChuYW1lICAgY2FiYWwtcGFja2FnZS1uYW1lKQorICAo dmVyc2lvbiBjYWJhbC1wYWNrYWdlLXZlcnNpb24pCisgIChsaWNlbnNlIGNhYmFsLXBhY2thZ2Ut bGljZW5zZSkKKyAgKGhvbWUtcGFnZSBjYWJhbC1wYWNrYWdlLWhvbWUtcGFnZSkKKyAgKHNvdXJj ZS1yZXBvc2l0b3J5IGNhYmFsLXBhY2thZ2Utc291cmNlLXJlcG9zaXRvcnkpCisgIChzeW5vcHNp cyBjYWJhbC1wYWNrYWdlLXN5bm9wc2lzKQorICAoZGVzY3JpcHRpb24gY2FiYWwtcGFja2FnZS1k ZXNjcmlwdGlvbikKKyAgKGV4ZWN1dGFibGVzIGNhYmFsLXBhY2thZ2UtZXhlY3V0YWJsZXMpCisg IChsaWIgY2FiYWwtcGFja2FnZS1saWJyYXJ5KSA7ICdsaWJyYXJ5JyBpcyBhIFNjaGVtZSBrZXl3 b3JkCisgICh0ZXN0LXN1aXRlcyBjYWJhbC1wYWNrYWdlLXRlc3Qtc3VpdGVzKQorICAoZmxhZ3Mg Y2FiYWwtcGFja2FnZS1mbGFncykKKyAgKGV2YWwtZW52aXJvbm1lbnQgY2FiYWwtcGFja2FnZS1l dmFsLWVudmlyb25tZW50KSkgOyBhbGlzdAorCisoc2V0LXJlY29yZC10eXBlLXByaW50ZXIhIDxj YWJhbC1wYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhIChwYWNrYWdl IHBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCBwb3J0ICIjPGNhYmFs LXBhY2thZ2UgfmEtfmE+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y2FiYWwtcGFja2FnZS1uYW1lIHBhY2thZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjYWJhbC1wYWNrYWdlLXZlcnNpb24gcGFja2FnZSkpKSkKKworKGRlZmluZS1y ZWNvcmQtdHlwZSA8Y2FiYWwtc291cmNlLXJlcG9zaXRvcnk+CisgIChtYWtlLWNhYmFsLXNvdXJj ZS1yZXBvc2l0b3J5IHVzZS1jYXNlIHR5cGUgbG9jYXRpb24pCisgIGNhYmFsLXNvdXJjZS1yZXBv c2l0b3J5PworICAodXNlLWNhc2UgY2FiYWwtc291cmNlLXJlcG9zaXRvcnktdXNlLWNhc2UpCisg ICh0eXBlIGNhYmFsLXNvdXJjZS1yZXBvc2l0b3J5LXR5cGUpCisgIChsb2NhdGlvbiBjYWJhbC1z b3VyY2UtcmVwb3NpdG9yeS1sb2NhdGlvbikpCisKKzs7IFdlIG5lZWQgdG8gYmUgYWJsZSB0byBk aXN0aW5ndWlzaCB0aGUgdmFsdWUgb2YgYSBmbGFnIGZyb20gdGhlIFNjaGVtZSAjdAorOzsgYW5k ICNmIHZhbHVlcy4KKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLWZsYWc+CisgIChtYWtlLWNh YmFsLWZsYWcgbmFtZSBkZXNjcmlwdGlvbiBkZWZhdWx0IG1hbnVhbCkKKyAgY2FiYWwtZmxhZz8K KyAgKG5hbWUgY2FiYWwtZmxhZy1uYW1lKQorICAoZGVzY3JpcHRpb24gY2FiYWwtZmxhZy1kZXNj cmlwdGlvbikKKyAgKGRlZmF1bHQgY2FiYWwtZmxhZy1kZWZhdWx0KSA7ICd0cnVlIG9yICdmYWxz ZQorICAobWFudWFsIGNhYmFsLWZsYWctbWFudWFsKSkgIDsgJ3RydWUgb3IgJ2ZhbHNlCisKKyhz ZXQtcmVjb3JkLXR5cGUtcHJpbnRlciEgPGNhYmFsLWZsYWc+CisgICAgICAgICAgICAgICAgICAg ICAgICAgIChsYW1iZGEgKHBhY2thZ2UgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZm9ybWF0IHBvcnQgIiM8Y2FiYWwtZmxhZyB+YSBkZWZhdWx0On5hPiIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhYmFsLWZsYWctbmFtZSBwYWNrYWdlKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FiYWwtZmxhZy1kZWZhdWx0IHBh Y2thZ2UpKSkpCisKKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLWRlcGVuZGVuY3k+CisgICht YWtlLWNhYmFsLWRlcGVuZGVuY3kgbmFtZSB2ZXJzaW9uKQorICBjYWJhbC1kZXBlbmRlbmN5Pwor ICAobmFtZSBjYWJhbC1kZXBlbmRlbmN5LW5hbWUpCisgICh2ZXJzaW9uIGNhYmFsLWRlcGVuZGVu Y3ktdmVyc2lvbikpCisKKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLWV4ZWN1dGFibGU+Cisg IChtYWtlLWNhYmFsLWV4ZWN1dGFibGUgbmFtZSBkZXBlbmRlbmNpZXMpCisgIGNhYmFsLWV4ZWN1 dGFibGU/CisgIChuYW1lIGNhYmFsLWV4ZWN1dGFibGUtbmFtZSkKKyAgKGRlcGVuZGVuY2llcyBj YWJhbC1leGVjdXRhYmxlLWRlcGVuZGVuY2llcykpIDsgbGlzdCBvZiA8Y2FiYWwtZGVwZW5kZW5j eT4KKworKGRlZmluZS1yZWNvcmQtdHlwZSA8Y2FiYWwtbGlicmFyeT4KKyAgKG1ha2UtY2FiYWwt bGlicmFyeSBkZXBlbmRlbmNpZXMpCisgIGNhYmFsLWxpYnJhcnk/CisgIChkZXBlbmRlbmNpZXMg Y2FiYWwtbGlicmFyeS1kZXBlbmRlbmNpZXMpKSA7IGxpc3Qgb2YgPGNhYmFsLWRlcGVuZGVuY3k+ CisKKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLXRlc3Qtc3VpdGU+CisgIChtYWtlLWNhYmFs LXRlc3Qtc3VpdGUgbmFtZSBkZXBlbmRlbmNpZXMpCisgIGNhYmFsLXRlc3Qtc3VpdGU/CisgIChu YW1lIGNhYmFsLXRlc3Qtc3VpdGUtbmFtZSkKKyAgKGRlcGVuZGVuY2llcyBjYWJhbC10ZXN0LXN1 aXRlLWRlcGVuZGVuY2llcykpIDsgbGlzdCBvZiA8Y2FiYWwtZGVwZW5kZW5jeT4KKworKGRlZmlu ZSAoY2FiYWwtZmxhZ3MtPmFsaXN0IGZsYWctbGlzdCkKKyAgICAiUmV0cnVuIGFuIGFsaXN0IGFz c29jaWF0aW5nIHRoZSBmbGFnIG5hbWUgdG8gaXRzIGRlZmF1bHQgdmFsdWUgZnJvbSBhCitsaXN0 IG9mIDxjYWJhbC1mbGFnPiBvYmplY3RzLiIKKyAgKG1hcCAobGFtYmRhIChmbGFnKSAoY29ucyAo Y2FiYWwtZmxhZy1uYW1lIGZsYWcpIChjYWJhbC1mbGFnLWRlZmF1bHQgZmxhZykpKQorICAgICAg IGZsYWctbGlzdCkpCisKKyhkZWZpbmUgKGV2YWwtY2FiYWwgY2FiYWwtc2V4cCBlbnYpCisgICJH aXZlbiB0aGUgQ0FCQUwtU0VYUCBwcm9kdWNlZCBieSAncmVhZC1jYWJhbCcsIGV2YWx1YXRlIGFs bCBjb25kaXRpb25hbHMKK2FuZCByZXR1cm4gYSAnY2FiYWwtcGFja2FnZScgb2JqZWN0LiAgVGhl IHZhbHVlcyBvZiBhbGwgdGVzdHMgY2FuIGJlCitvdmVyd3JpdHRlbiBieSBzcGVjaWZ5aW5nIHRo ZSBkZXNpcmVkIHZhbHVlIGluIEVOVi4gIEVOViBtdXN0IGJlIGFuIGFsaXN0LgorVGhlIGFjY2Vw dGVkIGtleXMgYXJlOiBcIm9zXCIsIFwiYXJjaFwiLCBcImltcGxcIiBhbmQgYSBuYW1lIG9mIGEg ZmxhZy4gIFRoZQordmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgZmxhZyBoYXMgdG8gYmUgZWl0aGVy IFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi4gIFRoZQordmFsdWUgYXNzb2NpYXRlZCB3aXRoIG90aGVy IGtleXMgaGFzIHRvIGNvbmZvcm0gdG8gdGhlIENhYmFsIGZpbGUgZm9ybWF0CitkZWZpbml0aW9u LiIKKyAgKGRlZmluZSAob3MgbmFtZSkKKyAgICAobGV0ICgoZW52LW9zIChvciAoYXNzb2MtcmVm IGVudiAib3MiKSAibGludXgiKSkpCisgICAgICAoc3RyaW5nLW1hdGNoIGVudi1vcyBuYW1lKSkp CisgIAorICAoZGVmaW5lIChhcmNoIG5hbWUpCisgICAgKGxldCAoKGVudi1hcmNoIChvciAoYXNz b2MtcmVmIGVudiAiYXJjaCIpICJ4ODZfNjQiKSkpCisgICAgICAoc3RyaW5nLW1hdGNoIGVudi1h cmNoIG5hbWUpKSkKKworICAoZGVmaW5lIChjb21wLW5hbWUrdmVyc2lvbiBoYXNrZWxsKQorICAg ICJFeHRyYWN0IHRoZSBjb21waWxlciBuYW1lIGFuZCB2ZXJzaW9uIGZyb20gdGhlIHN0cmluZyBI QVNLRUxMLiIKKyAgICAobGV0KiAoKG1hdGNoZXItZm4gKG1ha2UtcngtbWF0Y2hlciAiKFthLXpB LVowLTlfXSspLShbMC05Ll0rKSIpKQorICAgICAgICAgICAobmFtZSAob3IgKGFuZD0+IChtYXRj aGVyLWZuIGhhc2tlbGwpIChjdXQgbWF0Y2g6c3Vic3RyaW5nIDw+IDEpKQorICAgICAgICAgICAg ICAgICAgICAgaGFza2VsbCkpCisgICAgICAgICAgICh2ZXJzaW9uIChhbmQ9PiAobWF0Y2hlci1m biBoYXNrZWxsKSAoY3V0IG1hdGNoOnN1YnN0cmluZyA8PiAyKSkpKQorICAgICAgKHZhbHVlcyBu YW1lIHZlcnNpb24pKSkKKworICAoZGVmaW5lIChjb21wLXNwZWMtbmFtZStvcCt2ZXJzaW9uIHNw ZWMpCisgICAgIkV4dHJhY3QgdGhlIGNvbXBpbGVyIHNwZWNpZmljYXRpb24gZnJvbSBTUEVDLiAg UmV0dXJuIHRoZSBjb21waWxlciBuYW1lLAordGhlIG9yZGVyaW5nIG9wZXJhdGlvbiBhbmQgdGhl IHZlcnNpb24uIgorICAgIChsZXQqICgod2l0aC12ZXItbWF0Y2hlci1mbiAobWFrZS1yeC1tYXRj aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFthLXpBLVowLTlfLV0rKSAq KFs8Pj1dKykgKihbMC05Ll0rKSAqIikpCisgICAgICAgICAgICh3aXRob3V0LXZlci1tYXRjaGVy LWZuIChtYWtlLXJ4LW1hdGNoZXIgIihbYS16QS1aMC05Xy1dKykiKSkKKyAgICAgICAgICAgKG5h bWUgKG9yIChhbmQ9PiAod2l0aC12ZXItbWF0Y2hlci1mbiBzcGVjKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjdXQgbWF0Y2g6c3Vic3RyaW5nIDw+IDEpKQorICAgICAgICAgICAgICAg ICAgICAgKG1hdGNoOnN1YnN0cmluZyAod2l0aG91dC12ZXItbWF0Y2hlci1mbiBzcGVjKSAxKSkp CisgICAgICAgICAgIChvcGVyYXRvciAoYW5kPT4gKHdpdGgtdmVyLW1hdGNoZXItZm4gc3BlYykK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3V0IG1hdGNoOnN1YnN0cmluZyA8PiAyKSkp CisgICAgICAgICAgICh2ZXJzaW9uIChhbmQ9PiAod2l0aC12ZXItbWF0Y2hlci1mbiBzcGVjKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1dCBtYXRjaDpzdWJzdHJpbmcgPD4gMykpKSkK KyAgICAgICh2YWx1ZXMgbmFtZSBvcGVyYXRvciB2ZXJzaW9uKSkpCisgIAorICAoZGVmaW5lIChp bXBsIGhhc2tlbGwpCisgICAgKGxldCotdmFsdWVzICgoKGNvbXAtbmFtZSBjb21wLXZlcikKKyAg ICAgICAgICAgICAgICAgICAoY29tcC1uYW1lK3ZlcnNpb24gKG9yIChhc3NvYy1yZWYgZW52ICJp bXBsIikgImdoYyIpKSkKKyAgICAgICAgICAgICAgICAgICgoc3BlYy1uYW1lIHNwZWMtb3Agc3Bl Yy12ZXIpCisgICAgICAgICAgICAgICAgICAgKGNvbXAtc3BlYy1uYW1lK29wK3ZlcnNpb24gaGFz a2VsbCkpKQorICAgICAgKGlmIChhbmQgc3BlYy12ZXIgY29tcC12ZXIpCisgICAgICAgICAgKGV2 YWwtc3RyaW5nCisgICAgICAgICAgIChzdHJpbmctYXBwZW5kICIoc3RyaW5nIiBzcGVjLW9wICIg XCIiIGNvbXAtbmFtZSAiXCIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgXCIiIHNwZWMt bmFtZSAiLSIgc3BlYy12ZXIgIlwiKSIpKQorICAgICAgICAgIChzdHJpbmctbWF0Y2ggc3BlYy1u YW1lIGNvbXAtbmFtZSkpKSkKKyAgCisgIChkZWZpbmUgKGNhYmFsLWZsYWdzKQorICAgIChtYWtl LWNhYmFsLXNlY3Rpb24gY2FiYWwtc2V4cCAnZmxhZykpCisgIAorICAoZGVmaW5lIChmbGFnIG5h bWUpCisgICAgKGxldCAoKHZhbHVlIChvciAoYXNzb2MtcmVmIGVudiBuYW1lKQorICAgICAgICAg ICAgICAgICAgICAgKGFzc29jLXJlZiAoY2FiYWwtZmxhZ3MtPmFsaXN0IChjYWJhbC1mbGFncykp IG5hbWUpKSkpCisgICAgICAoaWYgKGVxPyB2YWx1ZSAnZmFsc2UpICNmICN0KSkpCisgIAorICAo ZGVmaW5lIChldmFsIHNleHApCisgICAgKG1hdGNoIHNleHAKKyAgICAgICgoKSAnKCkpCisgICAg ICA7OyBuZXN0ZWQgJ2lmJworICAgICAgKCgoJ2lmIHByZWRpY2F0ZSB0cnVlLWdyb3VwIGZhbHNl LWdyb3VwKSByZXN0IC4uLikKKyAgICAgICAoYXBwZW5kIChpZiAoZXZhbCBwcmVkaWNhdGUpCisg ICAgICAgICAgICAgICAgICAgKGV2YWwgdHJ1ZS1ncm91cCkKKyAgICAgICAgICAgICAgICAgICAo ZXZhbCBmYWxzZS1ncm91cCkpCisgICAgICAgICAgICAgICAoZXZhbCByZXN0KSkpCisgICAgICAo KCdpZiBwcmVkaWNhdGUgdHJ1ZS1ncm91cCBmYWxzZS1ncm91cCkKKyAgICAgICAoaWYgKGV2YWwg cHJlZGljYXRlKQorICAgICAgICAgICAoZXZhbCB0cnVlLWdyb3VwKQorICAgICAgICAgICAoZXZh bCBmYWxzZS1ncm91cCkpKQorICAgICAgKCgnZmxhZyBuYW1lKSAoZmxhZyBuYW1lKSkKKyAgICAg ICgoJ29zIG5hbWUpIChvcyBuYW1lKSkKKyAgICAgICgoJ2FyY2ggbmFtZSkgKGFyY2ggbmFtZSkp CisgICAgICAoKCdpbXBsIG5hbWUpIChpbXBsIG5hbWUpKQorICAgICAgKCgnbm90IG5hbWUpIChu b3QgKGV2YWwgbmFtZSkpKQorICAgICAgOzsgJ2FuZCcgYW5kICdvcicgYXJlbid0IGZ1bmN0aW9u cywgdGh1cyB3ZSBjYW4ndCB1c2UgYXBwbHkKKyAgICAgICgoJ2FuZCBhcmdzIC4uLikgKGZvbGQg KGxhbWJkYSAoZSBzKSAoYW5kIGUgcykpICN0IChldmFsIGFyZ3MpKSkKKyAgICAgICgoJ29yIGFy Z3MgLi4uKSAoZm9sZCAobGFtYmRhIChlIHMpIChvciBlIHMpKSAjZiAoZXZhbCBhcmdzKSkpCisg ICAgICA7OyBubyBuZWVkIHRvIGV2YWx1YXRlIGZsYWcgcGFyYW1ldGVycworICAgICAgKCgnc2Vj dGlvbiAnZmxhZyBuYW1lIHBhcmFtZXRlcnMpCisgICAgICAgKGxpc3QgJ3NlY3Rpb24gJ2ZsYWcg bmFtZSBwYXJhbWV0ZXJzKSkKKyAgICAgIDs7IGxpYnJhcnkgZG9lcyBub3QgaGF2ZSBhIG5hbWUg cGFyYW1ldGVyCisgICAgICAoKCdzZWN0aW9uICdsaWJyYXJ5IHBhcmFtZXRlcnMpCisgICAgICAg KGxpc3QgJ3NlY3Rpb24gJ2xpYnJhcnkgKGV2YWwgcGFyYW1ldGVycykpKQorICAgICAgKCgnc2Vj dGlvbiB0eXBlIG5hbWUgcGFyYW1ldGVycykKKyAgICAgICAobGlzdCAnc2VjdGlvbiB0eXBlIG5h bWUgKGV2YWwgcGFyYW1ldGVycykpKQorICAgICAgKCgoPyBzdHJpbmc/IG5hbWUpIHZhbHVlcykK KyAgICAgICAobGlzdCBuYW1lIHZhbHVlcykpCisgICAgICAoKGVsZW1lbnQgcmVzdCAuLi4pCisg ICAgICAgKGNvbnMgKGV2YWwgZWxlbWVudCkgKGV2YWwgcmVzdCkpKQorICAgICAgKF8gKHJhaXNl IChjb25kaXRpb24KKyAgICAgICAgICAgICAgICAgKCZtZXNzYWdlIChtZXNzYWdlICJGYWlsZWQg dG8gZXZhbHVhdGUgQ2FiYWwgZmlsZS4gXAorU2VlIHRoZSBtYW51YWwgZm9yIGxpbWl0YXRpb25z LiIpKSkpKSkpCisKKyAgKGRlZmluZSAoY2FiYWwtZXZhbHVhdGVkLXNleHAtPnBhY2thZ2UgZXZh bHVhdGVkLXNleHApCisgICAgKGxldCogKChuYW1lIChsb29rdXAtam9pbiBldmFsdWF0ZWQtc2V4 cCAibmFtZSIpKQorICAgICAgICAgICAodmVyc2lvbiAobG9va3VwLWpvaW4gZXZhbHVhdGVkLXNl eHAgInZlcnNpb24iKSkKKyAgICAgICAgICAgKGxpY2Vuc2UgKGxvb2t1cC1qb2luIGV2YWx1YXRl ZC1zZXhwICJsaWNlbnNlIikpCisgICAgICAgICAgIChob21lLXBhZ2UgKGxvb2t1cC1qb2luIGV2 YWx1YXRlZC1zZXhwICJob21lcGFnZSIpKQorICAgICAgICAgICAoaG9tZS1wYWdlLW9yLWhhY2th Z2UKKyAgICAgICAgICAgIChpZiAoc3RyaW5nLW51bGw/IGhvbWUtcGFnZSkKKyAgICAgICAgICAg ICAgICAoc3RyaW5nLWFwcGVuZCAiaHR0cDovL2hhY2thZ2UuaGFza2VsbC5vcmcvcGFja2FnZS8i IG5hbWUpCisgICAgICAgICAgICAgICAgaG9tZS1wYWdlKSkKKyAgICAgICAgICAgKHNvdXJjZS1y ZXBvc2l0b3J5IChtYWtlLWNhYmFsLXNlY3Rpb24gZXZhbHVhdGVkLXNleHAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZS1yZXBvc2l0b3J5 KSkKKyAgICAgICAgICAgKHN5bm9wc2lzIChsb29rdXAtam9pbiBldmFsdWF0ZWQtc2V4cCAic3lu b3BzaXMiKSkKKyAgICAgICAgICAgKGRlc2NyaXB0aW9uIChsb29rdXAtam9pbiBldmFsdWF0ZWQt c2V4cCAiZGVzY3JpcHRpb24iKSkKKyAgICAgICAgICAgKGV4ZWN1dGFibGVzIChtYWtlLWNhYmFs LXNlY3Rpb24gZXZhbHVhdGVkLXNleHAgJ2V4ZWN1dGFibGUpKQorICAgICAgICAgICAobGliICht YWtlLWNhYmFsLXNlY3Rpb24gZXZhbHVhdGVkLXNleHAgJ2xpYnJhcnkpKQorICAgICAgICAgICAo dGVzdC1zdWl0ZXMgKG1ha2UtY2FiYWwtc2VjdGlvbiBldmFsdWF0ZWQtc2V4cCAndGVzdC1zdWl0 ZSkpCisgICAgICAgICAgIChmbGFncyAobWFrZS1jYWJhbC1zZWN0aW9uIGV2YWx1YXRlZC1zZXhw ICdmbGFnKSkKKyAgICAgICAgICAgKGV2YWwtZW52aXJvbm1lbnQgJygpKSkKKyAgICAgIChtYWtl LWNhYmFsLXBhY2thZ2UgbmFtZSB2ZXJzaW9uIGxpY2Vuc2UgaG9tZS1wYWdlLW9yLWhhY2thZ2UK KyAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLXJlcG9zaXRvcnkgc3lub3BzaXMgZGVz Y3JpcHRpb24gZXhlY3V0YWJsZXMgbGliCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qt c3VpdGVzIGZsYWdzIGV2YWwtZW52aXJvbm1lbnQpKSkKKworICAoKGNvbXBvc2UgY2FiYWwtZXZh bHVhdGVkLXNleHAtPnBhY2thZ2UgZXZhbCkgY2FiYWwtc2V4cCkpCisKKyhkZWZpbmUgKG1ha2Ut Y2FiYWwtc2VjdGlvbiBzZXhwIHNlY3Rpb24tdHlwZSkKKyAgIkdpdmVuIGFuIFNFWFAgYXMgcHJv ZHVjZWQgYnkgJ3JlYWQtY2FiYWwnLCBwcm9kdWNlIGEgbGlzdCBvZiBvYmplY3RzCitwZXJ0YWlu aW5nIHRvIFNFQ1RJT04tVFlQRSBzZWN0aW9ucy4gIFNFQ1RJT04tVFlQRSBtdXN0IGJlIG9uZSBv ZjoKKydleGVjdXRhYmxlLCAnZmxhZywgJ3Rlc3Qtc3VpdGUsICdzb3VyY2UtcmVwb3NpdG9yeSBv ciAnbGlicmFyeS4iCisgIChmaWx0ZXItbWFwIChjdXQgbWF0Y2ggPD4KKyAgICAgICAgICAgICAg ICAgICAoKCdzZWN0aW9uICg/IChjdXQgZXF1YWw/IDw+IHNlY3Rpb24tdHlwZSkpIG5hbWUgcGFy YW1ldGVycykKKyAgICAgICAgICAgICAgICAgICAgKGNhc2Ugc2VjdGlvbi10eXBlCisgICAgICAg ICAgICAgICAgICAgICAgKCh0ZXN0LXN1aXRlKSAobWFrZS1jYWJhbC10ZXN0LXN1aXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKGRlcGVuZGVuY2llcyBwYXJh bWV0ZXJzKSkpCisgICAgICAgICAgICAgICAgICAgICAgKChleGVjdXRhYmxlKSAobWFrZS1jYWJh bC1leGVjdXRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUg KGRlcGVuZGVuY2llcyBwYXJhbWV0ZXJzKSkpCisgICAgICAgICAgICAgICAgICAgICAgKChzb3Vy Y2UtcmVwb3NpdG9yeSkgKG1ha2UtY2FiYWwtc291cmNlLXJlcG9zaXRvcnkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAobG9va3VwLWpvaW4gcGFyYW1ldGVycyAidHlwZSIp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb29rdXAtam9p biBwYXJhbWV0ZXJzICJsb2NhdGlvbiIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAoKGZsYWcp CisgICAgICAgICAgICAgICAgICAgICAgIChsZXQqICgoZGVmYXVsdCAobG9va3VwLWpvaW4gcGFy YW1ldGVycyAiZGVmYXVsdCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1 bHQtdHJ1ZS1vci1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGFu ZCBkZWZhdWx0IChzdHJpbmctY2k9PyAiZmFsc2UiIGRlZmF1bHQpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ2ZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAndHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVzY3JpcHRp b24gKGxvb2t1cC1qb2luIHBhcmFtZXRlcnMgImRlc2NyaXB0aW9uIikpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobWFudWFsIChsb29rdXAtam9pbiBwYXJhbWV0ZXJzICJtYW51YWwi KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYW51YWwtdHJ1ZS1vci1mYWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoYW5kIG1hbnVhbCAoc3RyaW5nLWNp PT8gInRydWUiIG1hbnVhbCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0 cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWxzZSkpKQorICAgICAg ICAgICAgICAgICAgICAgICAgIChtYWtlLWNhYmFsLWZsYWcgbmFtZSBkZXNjcmlwdGlvbgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC10cnVlLW9yLWZh bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW51YWwtdHJ1 ZS1vci1mYWxzZSkpKQorICAgICAgICAgICAgICAgICAgICAgIChlbHNlICNmKSkpCisgICAgICAg ICAgICAgICAgICAgKCgnc2VjdGlvbiAoPyAoY3V0IGVxdWFsPyA8PiBzZWN0aW9uLXR5cGUpIGxp YikgcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICAgICAgKG1ha2UtY2FiYWwtbGlicmFyeSAo ZGVwZW5kZW5jaWVzIHBhcmFtZXRlcnMpKSkKKyAgICAgICAgICAgICAgICAgICAoXyAjZikpCisg ICAgICAgICAgICAgIHNleHApKQorCisoZGVmaW5lKiAobG9va3VwLWpvaW4ga2V5LXZhbHVlcy1s aXN0IGtleSAjOm9wdGlvbmFsIChkZWxpbWl0ZXIgIiAiKSkKKyAgIkxvb2t1cCBhbmQgam9pbnQg YWxsIHZhbHVlcyBwZXJ0YWluaW5nIHRvIGtleXMgb2YgdmFsdWUgS0VZIGluCitLRVktVkFMVUVT LUxJU1QuICBUaGUgb3B0aW9uYWwgREVMSU1JVEVSIGlzIHVzZWQgdG8gc3BlY2lmeSBhIGRlbGlt aXRlciBzdHJpbmcKK3RvIGJlIGFkZGVkIGJldHdlZW4gdGhlIHZhbHVlcyBmb3VuZCBpbiBkaWZm ZXJlbnQga2V5L3ZhbHVlIHBhaXJzLiIKKyAgKHN0cmluZy1qb2luIAorICAgKGZpbHRlci1tYXAg KGN1dCBtYXRjaCA8PiAKKyAgICAgICAgICAgICAgICAgICAgKCgoPyAobGFtYmRhKHgpIChlcXVh bD8geCBrZXkpKSkgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWpvaW4gdmFs dWUgZGVsaW1pdGVyKSkKKyAgICAgICAgICAgICAgICAgICAgKF8gI2YpKQorICAgICAgICAgICAg ICAga2V5LXZhbHVlcy1saXN0KQorICAgZGVsaW1pdGVyKSkKKworKGRlZmluZSBkZXBlbmRlbmN5 LW5hbWUtdmVyc2lvbi1yeAorICAobWFrZS1yZWdleHAgIihbYS16QS1aMC05Xy1dKykgKiguKiki KSkKKworKGRlZmluZSAoZGVwZW5kZW5jaWVzIGtleS12YWx1ZXMtbGlzdCkKKyAgIlJldHVybiBh IGxpc3Qgb2YgJ2NhYmFsLWRlcGVuZGVuY3knIG9iamVjdHMgZm9yIHRoZSBkZXBlbmRlbmNpZXMg Zm91bmQgaW4KK0tFWS1WQUxVRVMtTElTVC4iCisgIChsZXQgKChkZXBzIChzdHJpbmctdG9rZW5p emUgKGxvb2t1cC1qb2luIGtleS12YWx1ZXMtbGlzdCAiYnVpbGQtZGVwZW5kcyIgIiwiKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyLXNldC1jb21wbGVtZW50IChjaGFyLXNl dCAjXCwpKSkpKQorICAgIChtYXAgKGxhbWJkYSAoZCkKKyAgICAgICAgICAgKGxldCAoKHJ4LXJl c3VsdCAocmVnZXhwLWV4ZWMgZGVwZW5kZW5jeS1uYW1lLXZlcnNpb24tcnggZCkpKQorICAgICAg ICAgICAgIChtYWtlLWNhYmFsLWRlcGVuZGVuY3kKKyAgICAgICAgICAgICAgKG1hdGNoOnN1YnN0 cmluZyByeC1yZXN1bHQgMSkKKyAgICAgICAgICAgICAgKG1hdGNoOnN1YnN0cmluZyByeC1yZXN1 bHQgMikpKSkKKyAgICAgICAgIGRlcHMpKSkKKworOzs7IGNhYmFsLnNjbSBlbmRzIGhlcmUKZGlm ZiAtLWdpdCBhL2d1aXgvaW1wb3J0L2hhY2thZ2Uuc2NtIGIvZ3VpeC9pbXBvcnQvaGFja2FnZS5z Y20KaW5kZXggMWIyNzgwMy4uMWM1NGM3NCAxMDA2NDQKLS0tIGEvZ3VpeC9pbXBvcnQvaGFja2Fn ZS5zY20KKysrIGIvZ3VpeC9pbXBvcnQvaGFja2FnZS5zY20KQEAgLTE4LDI4ICsxOCwxOSBAQAog CiAoZGVmaW5lLW1vZHVsZSAoZ3VpeCBpbXBvcnQgaGFja2FnZSkKICAgIzp1c2UtbW9kdWxlIChp Y2UtOSBtYXRjaCkKLSAgIzp1c2UtbW9kdWxlIChpY2UtOSByZWdleCkKLSAgIzp1c2UtbW9kdWxl IChpY2UtOSByZGVsaW0pCi0gICM6dXNlLW1vZHVsZSAoaWNlLTkgcmVjZWl2ZSkKLSAgIzp1c2Ut bW9kdWxlIChpY2UtOSBwcmV0dHktcHJpbnQpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTI2 KQotICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0zNCkKLSAgIzp1c2UtbW9kdWxlIChzcmZpIHNy ZmktMzUpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTExKQogICAjOnVzZS1tb2R1bGUgKHNy Zmkgc3JmaS0xKQogICAjOnVzZS1tb2R1bGUgKChndWl4IGRvd25sb2FkKSAjOnNlbGVjdCAoZG93 bmxvYWQtdG8tc3RvcmUpKQogICAjOnVzZS1tb2R1bGUgKChndWl4IHV0aWxzKSAjOnNlbGVjdCAo cGFja2FnZS1uYW1lLT5uYW1lK3ZlcnNpb24pKQogICAjOnVzZS1tb2R1bGUgKGd1aXggaW1wb3J0 IHV0aWxzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggaW1wb3J0IGNhYmFsKQogICAjOnVzZS1tb2R1 bGUgKGd1aXggc3RvcmUpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBoYXNoKQogICAjOnVzZS1tb2R1 bGUgKGd1aXggYmFzZTMyKQogICAjOnVzZS1tb2R1bGUgKChndWl4IHV0aWxzKSAjOnNlbGVjdCAo Y2FsbC13aXRoLXRlbXBvcmFyeS1vdXRwdXQtZmlsZSkpCiAgICM6ZXhwb3J0IChoYWNrYWdlLT5n dWl4LXBhY2thZ2UpKQogCi07OyBQYXJ0IDE6Ci07OwotOzsgRnVuY3Rpb25zIHVzZWQgdG8gcmVh ZCBhIENhYmFsIGZpbGUuCi0KIChkZWZpbmUgZ2hjLXN0YW5kYXJkLWxpYnJhcmllcwogICA7OyBM aXN0IG9mIGxpYnJhcmllcyBkaXN0cmlidXRlZCB3aXRoIGdoYyAoNy44LjQpLiBXZSBpbmNsdWRl IEdIQyBpdHNlbGYgYXMKICAgOzsgc29tZSBwYWNrYWdlcyBsaXN0IGl0LgpAQCAtNzUsNTg4ICs2 NiwxMiBAQAogCiAoZGVmaW5lIHBhY2thZ2UtbmFtZS1wcmVmaXggImdoYy0iKQogCi0oZGVmaW5l IGtleS12YWx1ZS1yeAotICA7OyBSZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgImtleTogdmFs dWUiCi0gIChtYWtlLXJlZ2V4cCAiKFthLXpBLVowLTktXSspOlsgXHRdKihcXHc/LiopJCIpKQot Ci0oZGVmaW5lIHNlY3Rpb25zLXJ4Ci0gIDs7IFJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBh IHNlY3Rpb24gImhlYWQgc3ViLWhlYWQgLi4uIgotICAobWFrZS1yZWdleHAgIihbYS16QS1aMC05 XFwoXFwpLV0rKSIpKQotCi0oZGVmaW5lIGNvbW1lbnQtcngKLSAgOzsgUmVnZXhwIG1hdGNoaW5n IENhYmFsIGNvbW1lbnQgbGluZXMuCi0gIChtYWtlLXJlZ2V4cCAiXiAqLS0iKSkKLQotKGRlZmlu ZSAoaGFzLWtleT8gbGluZSkKLSAgIkNoZWNrIGlmIExJTkUgaW5jbHVkZXMgYSBrZXkuIgotICAo cmVnZXhwLWV4ZWMga2V5LXZhbHVlLXJ4IGxpbmUpKQotCi0oZGVmaW5lIChjb21tZW50LWxpbmU/ IGxpbmUpCi0gICJDaGVjayBpZiBMSU5FIGlzIGEgY29tbWVudCBsaW5lLiIKLSAgKHJlZ2V4cC1l eGVjIGNvbW1lbnQtcnggbGluZSkpCi0KLShkZWZpbmUgKGxpbmUtaW5kZW50YXRpb24rcmVzdCBs aW5lKQotICAiUmV0dXJucyB0d28gcmVzdWx0czogVGhlIG51bWJlciBvZiBpbmRlbnRhdGlvbiBz cGFjZXMgYW5kIHRoZSByZXN0IG9mIHRoZQotbGluZSAod2l0aG91dCBpbmRlbnRhdGlvbikuIgot ICAobGV0IGxvb3AgKChsaW5lLWxzdCAoc3RyaW5nLT5saXN0IGxpbmUpKQotICAgICAgICAgICAg IChjb3VudCAwKSkKLSAgICA7OyBTb21ldGltZXMgdmFsdWVzIGFyZSBzcHJlYWQgb3ZlciBtdWx0 aXBsZSBsaW5lcyBhbmQgbmV3IGxpbmVzIHN0YXJ0Ci0gICAgOzsgd2l0aCBhIGNvbW1hICcsJyB3 aXRoIHRoZSB3cm9uZyBpbmRlbnRhdGlvbi4gIFNlZSBlLmcuIGhhZGRvY2stYXBpLgotICAgIChp ZiAob3IgKG51bGw/IGxpbmUtbHN0KQotICAgICAgICAgICAgKG5vdCAob3IKLSAgICAgICAgICAg ICAgICAgIChlcXY/IChmaXJzdCBsaW5lLWxzdCkgI1xzcGFjZSkKLSAgICAgICAgICAgICAgICAg IChlcXY/IChmaXJzdCBsaW5lLWxzdCkgI1wsKSA7IHNlZSwgZS5nLiwgaGFkZG9jay1hcGkuY2Fi YWwKLSAgICAgICAgICAgICAgICAgIChlcXY/IChmaXJzdCBsaW5lLWxzdCkgI1x0YWIpKSkpCi0g ICAgICAgICh2YWx1ZXMgY291bnQgKGxpc3QtPnN0cmluZyBsaW5lLWxzdCkpCi0gICAgICAgIChs b29wIChjZHIgbGluZS1sc3QpICgrIGNvdW50IDEpKSkpKQotCi0oZGVmaW5lIChtdWx0aS1saW5l LXZhbHVlIGxpbmVzIHNlZWQpCi0gICJGdW5jdGlvbiB0byByZWFkIGEgdmFsdWUgc3BsaXQgYWNy b3NzIG11bHRpcGxlIGxpbmVzLiBMSU5FUyBhcmUgdGhlCi1yZW1haW5pbmcgaW5wdXQgbGluZXMg dG8gYmUgcmVhZC4gU0VFRCBpcyB0aGUgdmFsdWUgcmVhZCBvbiB0aGUgc2FtZSBsaW5lIGFzCi10 aGUga2V5LiAgUmV0dXJuIHR3byB2YWx1ZXM6IEEgbGlzdCB3aXRoIHZhbHVlcyBhbmQgdGhlIHJl bWFpbmluZyBsaW5lcyB0byBiZQotcHJvY2Vzc2VkLiIKLSAgKGRlZmluZSAobXVsdGktbGluZS12 YWx1ZS13aXRoLW1pbi1pbmRlbnQgbGluZXMgc2VlZCBtaW4taW5kZW50KQotICAgIChpZiAobnVs bD8gbGluZXMpCi0gICAgICAgICh2YWx1ZXMgJygpICcoKSkKLSAgICAgICAgKGxldC12YWx1ZXMg KCgoY3VycmVudC1pbmRlbnQgdmFsdWUpIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKGZpcnN0IGxp bmVzKSkpCi0gICAgICAgICAgICAgICAgICAgICAoKG5leHQtbGluZS1pbmRlbnQgbmV4dC1saW5l LXZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIChpZiAobnVsbD8gKGNkciBsaW5lcykpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZXMgI2YgIiIpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKHNlY29uZCBsaW5lcykpKSkpCi0gICAg ICAgICAgKGlmIChvciAobm90IG5leHQtbGluZS1pbmRlbnQpICg8IG5leHQtbGluZS1pbmRlbnQg bWluLWluZGVudCkKLSAgICAgICAgICAgICAgICAgIChyZWdleHAtZXhlYyBjb25kaXRpb24tcngg bmV4dC1saW5lLXZhbHVlKSkKLSAgICAgICAgICAgICAgKHZhbHVlcyAocmV2ZXJzZSAoY29ucyB2 YWx1ZSBzZWVkKSkgKGNkciBsaW5lcykpCi0gICAgICAgICAgICAgIChtdWx0aS1saW5lLXZhbHVl LXdpdGgtbWluLWluZGVudCAoY2RyIGxpbmVzKSAoY29ucyB2YWx1ZSBzZWVkKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluLWluZGVudCkpKSkpCi0K LSAgKGxldC12YWx1ZXMgKCgoY3VycmVudC1pbmRlbnQgdmFsdWUpIChsaW5lLWluZGVudGF0aW9u K3Jlc3QgKGZpcnN0IGxpbmVzKSkpKQotICAgIChtdWx0aS1saW5lLXZhbHVlLXdpdGgtbWluLWlu ZGVudCBsaW5lcyBzZWVkIGN1cnJlbnQtaW5kZW50KSkpCi0KLShkZWZpbmUgKHJlYWQtY2FiYWwg cG9ydCkKLSAgIlBhcnNlcyBhIENhYmFsIGZpbGUgZnJvbSBQT1JULiAgUmV0dXJuIGEgbGlzdCBv ZiBsaXN0IHBhaXJzOgotCi0oKChoZWFkMSBzdWItaGVhZDEgLi4uIGtleTEpICh2YWx1ZSkpCi0g KChoZWFkMiBzdWItaGVhZDIgLi4uIGtleTIpICh2YWx1ZTIpKQotIC4uLikuCi0KLVdlIHRyeSBk byBkZWR1Y2UgdGhlIENhYmFsIGZvcm1hdCBmcm9tIHRoZSBmb2xsb3dpbmcgZG9jdW1lbnQ6Ci1o dHRwczovL3d3dy5oYXNrZWxsLm9yZy9jYWJhbC91c2Vycy1ndWlkZS9kZXZlbG9waW5nLXBhY2th Z2VzLmh0bWwgCi0KLUtleXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuICBXZSB0aGVyZWZvcmUgbG93 ZXJjYXNlIHRoZW0uICBWYWx1ZXMgYXJlCi1jYXNlLXNlbnNpdGl2ZS4gIEN1cnJlbnRseSBvbmx5 IGluZGVudGF0aW9uLXN0cnVjdHVyZWQgZmlsZXMgYXJlIHBhcnNlZC4KLUJyYWNlcyBzdHJ1Y3R1 cmVkIGZpbGVzIGFyZSBub3QgaGFuZGxlZC4iIDsiIDwtIG1ha2UgZW1hY3MgaGFwcHkuCi0gIChk ZWZpbmUgKHJlYWQtYW5kLXRyaW0tbGluZSBwb3J0KQotICAgIChsZXQgKChsaW5lIChyZWFkLWxp bmUgcG9ydCkpKQotICAgICAgKGlmIChzdHJpbmc/IGxpbmUpCi0gICAgICAgICAgKHN0cmluZy10 cmltLWJvdGggbGluZSAjXHJldHVybikKLSAgICAgICAgICBsaW5lKSkpCi0KLSAgKGRlZmluZSAo c3RyaXAtaW5zaWduaWZpY2FudC1saW5lcyBwb3J0KQotICAgIChsZXQgbG9vcCAoKGxpbmUgKHJl YWQtYW5kLXRyaW0tbGluZSBwb3J0KSkKLSAgICAgICAgICAgICAgIChyZXN1bHQgJygpKSkKLSAg ICAgIChjb25kCi0gICAgICAgKChlb2Ytb2JqZWN0PyBsaW5lKQotICAgICAgICAocmV2ZXJzZSBy ZXN1bHQpKQotICAgICAgICgob3IgKHN0cmluZy1udWxsPyBsaW5lKSAoY29tbWVudC1saW5lPyBs aW5lKSkKLSAgICAgICAgKGxvb3AgKHJlYWQtYW5kLXRyaW0tbGluZSBwb3J0KSByZXN1bHQpKQot ICAgICAgIChlbHNlCi0gICAgICAgIChsb29wIChyZWFkLWFuZC10cmltLWxpbmUgcG9ydCkgKGNv bnMgbGluZSByZXN1bHQpKSkpKSkKLQotICAobGV0IGxvb3AKLSAgICAgICgobGluZXMgKHN0cmlw LWluc2lnbmlmaWNhbnQtbGluZXMgcG9ydCkpCi0gICAgICAgKGluZGVudHMgICcoKSkgOyBvbmx5 IGluY2x1ZGVzIGluZGVudHMgYXQgc3RhcnQgb2Ygc2VjdGlvbiBoZWFkcy4KLSAgICAgICAoc2Vj dGlvbnMgJygpKQotICAgICAgIChyZXN1bHQgJygpKSkKLSAgICAobGV0LXZhbHVlcwotICAgICAg ICAoKChjdXJyZW50LWluZGVudCBsaW5lKQotICAgICAgICAgIChpZiAobnVsbD8gbGluZXMpCi0g ICAgICAgICAgICAgICh2YWx1ZXMgMCAiIikKLSAgICAgICAgICAgICAgKGxpbmUtaW5kZW50YXRp b24rcmVzdCAoZmlyc3QgbGluZXMpKSkpCi0gICAgICAgICAoKG5leHQtbGluZS1pbmRlbnQgbmV4 dC1saW5lKQotICAgICAgICAgIChpZiAob3IgKG51bGw/IGxpbmVzKSAobnVsbD8gKGNkciBsaW5l cykpKQotICAgICAgICAgICAgICAodmFsdWVzIDAgIiIpCi0gICAgICAgICAgICAgIChsaW5lLWlu ZGVudGF0aW9uK3Jlc3QgKHNlY29uZCBsaW5lcykpKSkpCi0gICAgICAoaWYgKG51bGw/IGxpbmVz KQotICAgICAgICAgIChyZXZlcnNlIHJlc3VsdCkKLSAgICAgICAgICAobGV0ICgocngtcmVzdWx0 IChoYXMta2V5PyBsaW5lKSkpCi0gICAgICAgICAgICAoY29uZAotICAgICAgICAgICAgIChyeC1y ZXN1bHQKLSAgICAgICAgICAgICAgKGxldCAoKGtleSAoc3RyaW5nLWRvd25jYXNlIChtYXRjaDpz dWJzdHJpbmcgcngtcmVzdWx0IDEpKSkKLSAgICAgICAgICAgICAgICAgICAgKHZhbHVlIChtYXRj aDpzdWJzdHJpbmcgcngtcmVzdWx0IDIpKSkKLSAgICAgICAgICAgICAgICAoY29uZAotICAgICAg ICAgICAgICAgICA7OyBTaW1wbGUgc2luZ2xlIGxpbmUgImtleTogdmFsdWUiLgotICAgICAgICAg ICAgICAgICAoKD0gbmV4dC1saW5lLWluZGVudCBjdXJyZW50LWluZGVudCkKLSAgICAgICAgICAg ICAgICAgIChsb29wIChjZHIgbGluZXMpIGluZGVudHMgc2VjdGlvbnMKLSAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgKHJldmVyc2Ug KGNvbnMga2V5IHNlY3Rpb25zKSkgKGxpc3QgdmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAg ICAgIHJlc3VsdCkpKQotICAgICAgICAgICAgICAgICA7OyBNdWx0aSBsaW5lICJrZXk6IHZhbHVl XG4gdmFsdWUgY29udC4uLiIuCi0gICAgICAgICAgICAgICAgICgoPiBuZXh0LWxpbmUtaW5kZW50 IGN1cnJlbnQtaW5kZW50KQotICAgICAgICAgICAgICAgICAgKGxldCotdmFsdWVzICgoKHZhbHVl LWxzdCBsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtdWx0aS1saW5l LXZhbHVlIChjZHIgbGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaWYgKHN0cmluZy1udWxsPyB2YWx1ZSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgKCx2YWx1ZSkpKSkpCi0g ICAgICAgICAgICAgICAgICAgIDs7IG11bHRpLWxpbmUtdmFsdWUgcmV0dXJucyB0byB0aGUgZmly c3QgbGluZSBhZnRlciB0aGUKLSAgICAgICAgICAgICAgICAgICAgOzsgbXVsdGktdmFsdWUuCi0g ICAgICAgICAgICAgICAgICAgIChsb29wIGxpbmVzIGluZGVudHMgc2VjdGlvbnMKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0 IChyZXZlcnNlIChjb25zIGtleSBzZWN0aW9ucykpIHZhbHVlLWxzdCkKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdCkpKSkKLSAgICAgICAgICAgICAgICAgOzsgU2VjdGlvbiBlbmRl ZC4KLSAgICAgICAgICAgICAgICAgKGVsc2UKLSAgICAgICAgICAgICAgICAgIDs7IEluZGVudGF0 aW9uIGlzIHJlZHVjZWQuIENoZWNrIGJ5IGhvdyBtYW55IGxldmVscy4KLSAgICAgICAgICAgICAg ICAgIChsZXQqICgoaWR4IChhbmQ9PiAobGlzdC1pbmRleAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAobGFtYmRhICh4KSAoPSBuZXh0LWxpbmUtaW5kZW50IHgpKQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRzKQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjdXQgKyA8PgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGhhcy1rZXk/IG5leHQtbGluZSkgMSAwKSkpKQot ICAgICAgICAgICAgICAgICAgICAgICAgIChzZWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg KGlmIGlkeAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyb3Agc2VjdGlvbnMgaWR4 KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJhaXNlCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbmRpdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoJm1lc3NhZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlICJ1 bmFibGUgdG8gcGFyc2UgQ2FiYWwgZmlsZSIpKSkpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAoaW5kIChkcm9wIGluZGVudHMgaWR4KSkpCi0gICAgICAgICAgICAgICAgICAgIChsb29wIChj ZHIgbGluZXMpIGluZCBzZWMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAocmV2ZXJzZSAoY29ucyBrZXkgc2VjdGlvbnMp KSAobGlzdCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkpKSkp Ci0gICAgICAgICAgICAgOzsgU3RhcnQgb2YgYSBuZXcgc2VjdGlvbi4KLSAgICAgICAgICAgICAo KG9yIChudWxsPyBpbmRlbnRzKQotICAgICAgICAgICAgICAgICAgKD4gY3VycmVudC1pbmRlbnQg KGZpcnN0IGluZGVudHMpKSkKLSAgICAgICAgICAgICAgKGxvb3AgKGNkciBsaW5lcykgKGNvbnMg Y3VycmVudC1pbmRlbnQgaW5kZW50cykKLSAgICAgICAgICAgICAgICAgICAgKGNvbnMgKHN0cmlu Zy1kb3duY2FzZSBsaW5lKSBzZWN0aW9ucykgcmVzdWx0KSkKLSAgICAgICAgICAgICAoZWxzZQot ICAgICAgICAgICAgICAobG9vcCAoY2RyIGxpbmVzKSBpbmRlbnRzCi0gICAgICAgICAgICAgICAg ICAgIChjb25zIChzdHJpbmctZG93bmNhc2UgbGluZSkgKGNkciBzZWN0aW9ucykpCi0gICAgICAg ICAgICAgICAgICAgIHJlc3VsdCkpKSkpKSkpCi0KLShkZWZpbmUgY29uZGl0aW9uLXJ4Ci0gIDs7 IFJlZ2V4cCBmb3IgY29uZGl0aW9uYWxzLgotICAobWFrZS1yZWdleHAgIl5pZiArKC4qKSQiKSkK LQotKGRlZmluZSAoc3BsaXQtc2VjdGlvbiBzZWN0aW9uKQotICAiU3BsaXQgU0VDVElPTiBpbiBp bmRpdmlkdWFsIHdvcmRzIHdpdGggZXhjZXB0aW9uIGZvciB0aGUgcHJlZGljYXRlIG9mIGFuCi0n aWYnIGNvbmRpdGlvbmFsLiIKLSAgKGxldCAoKHJ4LXJlc3VsdCAocmVnZXhwLWV4ZWMgY29uZGl0 aW9uLXJ4IHNlY3Rpb24pKSkKLSAgICAoaWYgcngtcmVzdWx0Ci0gICAgICAgIGAoImlmIiAsKG1h dGNoOnN1YnN0cmluZyByeC1yZXN1bHQgMSkpCi0gICAgICAgIChtYXAgbWF0Y2g6c3Vic3RyaW5n IChsaXN0LW1hdGNoZXMgc2VjdGlvbnMtcnggc2VjdGlvbikpKSkpCi0KLShkZWZpbmUgKGpvaW4t c2VjdGlvbnMgc2VjMSBzZWMyKQotICAoZm9sZC1yaWdodCBjb25zIHNlYzIgc2VjMSkpCi0KLShk ZWZpbmUgKHByZS1wcm9jZXNzLWtleXMga2V5KQotICAobWF0Y2gga2V5Ci0gICAgKCgpICcoKSkK LSAgICAoKHNlYzEgcmVzdCAuLi4pCi0gICAgIChqb2luLXNlY3Rpb25zIChzcGxpdC1zZWN0aW9u IHNlYzEpIChwcmUtcHJvY2Vzcy1rZXlzIHJlc3QpKSkpKQotCi0oZGVmaW5lIChwcmUtcHJvY2Vz cy1lbnRyeS1rZXlzIGVudHJ5KQotICAobWF0Y2ggZW50cnkKLSAgICAoKGtleSB2YWx1ZSkKLSAg ICAgKGxpc3QgKHByZS1wcm9jZXNzLWtleXMga2V5KSB2YWx1ZSkpCi0gICAgKCgpICcoKSkpKQot Ci0oZGVmaW5lIChwcmUtcHJvY2Vzcy1lbnRyaWVzLWtleXMgZW50cmllcykKLSAgIkVOVFJJRVMg aXMgYSBsaXN0IG9mIGxpc3QgcGFpcnMsIGEga2V5cyBsaXN0IGFuZCBhIHZhbHVsZXMgbGlzdCwg YXMKLXByb2R1Y2VkIGJ5ICdyZWFkLWNhYmFsJy4gIFNwbGl0IGVhY2ggZWxlbWVudCBvZiB0aGUg a2V5cyBsaXN0IGludG8gaW5kaXZpZHVhbAotd29yZHMuICBUaGlzIHByZS1wcm9jZXNzaW5nIGlz IHVzZWQgdG8gcmVhZCBmbGFncy4iCi0gIChtYXRjaCBlbnRyaWVzCi0gICAgKChlbnRyeSByZXN0 IC4uLikKLSAgICAgKGNvbnMgKHByZS1wcm9jZXNzLWVudHJ5LWtleXMgZW50cnkpCi0gICAgICAg ICAgIChwcmUtcHJvY2Vzcy1lbnRyaWVzLWtleXMgcmVzdCkpKQotICAgICgoKQotICAgICAnKCkp KSkKLQotKGRlZmluZSAoZ2V0LWZsYWdzIHByZS1wcm9jZXNzZWQtZW50cmllcykKLSAgIlBSRS1Q Uk9DRVNTRUQtRU5UUklFUyBpcyBhIGxpc3Qgb2YgbGlzdCBwYWlycywgYSBrZXlzIGxpc3QgYW5k IGEgdmFsdWVzCi1saXN0LCBhcyBwcm9kdWNlZCBieSAncmVhZC1jYWJhbCcgYW5kIHByZS1wcm9j ZXNzZWQgYnkKLSdwcmUtcHJvY2Vzcy1lbnRyaWVzLWtleXMnLiAgUmV0dXJuIGEgbGlzdCBvZiBw YWlycyB3aXRoIHRoZSBuYW1lIG9mIGZsYWdzIGFuZAotdGhlaXIgZGVmYXVsdCB2YWx1ZSAob25l IG9mIFwiRmFsc2VcIiBvciBcIlRydWVcIikgYXMgc3BlY2lmaWVkIGluIHRoZSBDYWJhbCBmaWxl OgotCi0oKFwiZmxhZzEtbmFtZVwiIC4gXCJGYWxzZS1vci1UcnVlXCIpIC4uLikuIiA7IiA8LSBt YWtlIGVtYWNzIGhhcHB5Ci0gIChtYXRjaCBwcmUtcHJvY2Vzc2VkLWVudHJpZXMKLSAgICAoKCkg JygpKQotICAgICgoKCgiZmxhZyIgZmxhZy1uYW1lICJkZWZhdWx0IikgKGZsYWctdmFsKSkgcmVz dCAuLi4pCi0gICAgIChjb25zIChjb25zIGZsYWctbmFtZSAgZmxhZy12YWwpCi0gICAgICAgICAg IChnZXQtZmxhZ3MgcmVzdCkpKQotICAgICgoZW50cnkgcmVzdCAuLi4gKQotICAgICAoZ2V0LWZs YWdzIHJlc3QpKQotICAgIChfICNmKSkpCi0KLTs7IFBhcnQgMjoKLTs7Ci07OyBGdW5jdGlvbnMg dG8gcmVhZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBDYWJhbCBvYmplY3QgY3JlYXRlZCBieSAncmVh ZC1jYWJhbCcKLTs7IGFuZCBjb252ZXJ0IENhYmFsIGZvcm1hdCBkZXBlbmRlbmNpZXMgY29uZGl0 aW9uYWxzIGludG8gZXF1aXZhbGVudAotOzsgUy1leHByZXNzaW9ucy4KLQotKGRlZmluZSB0ZXN0 cy1yeAotICA7OyBDYWJhbCB0ZXN0IGtleXdvcmRzCi0gIChtYWtlLXJlZ2V4cCAiKG9zfGFyY2h8 ZmxhZ3xpbXBsKSAqXFwoKFsgYS16QS1aMC05Xy48Pj0tXSspXFwpIikpCi0KLShkZWZpbmUgcGFy ZW5zLXJ4Ci0gIDs7IFBhcmVudGhlc2VzIHdpdGhpbiBjb25kaXRpb25zCi0gIChtYWtlLXJlZ2V4 cCAiXFwoKC4rKVxcKSIpKQotCi0oZGVmaW5lIG9yLXJ4Ci0gIDs7IE9SIG9wZXJhdG9yIGluIGNv bmRpdGlvbnMKLSAgKG1ha2UtcmVnZXhwICIgK1xcfFxcfCArIikpCi0KLShkZWZpbmUgYW5kLXJ4 Ci0gIDs7IEFORCBvcGVyYXRvciBpbiBjb25kaXRpb25zCi0gIChtYWtlLXJlZ2V4cCAiICsmJiAr IikpCi0KLShkZWZpbmUgbm90LXJ4Ci0gIDs7IE5PVCBvcGVyYXRvciBpbiBjb25kaXRpb25zCi0g IChtYWtlLXJlZ2V4cCAiXiEuKyIpKQotCi0oZGVmaW5lIChiaS1vcC1hcmdzIHN0ciBtYXRjaC1s c3QpCi0gICJSZXR1cm4gYSBsaXN0IHdpdGggdGhlIGFyZ3VtZW50cyBvZiAobG9naWMpIGJpYW5y eSBvcGVyYXRvcnMuICBNQVRDSC1MU1QKLWlzIHRoZSByZXN1bHQgb2YgJ2xpc3QtbWF0Y2gnIGFn YWluc3QgYSBiaW5hcnkgb3BlcmF0b3IgcmVnZXhwIG9uIFNUUi4iCi0gIChsZXQgKChvcGVyYXRv cnMgKGxlbmd0aCBtYXRjaC1sc3QpKSkKLSAgICAobWFwIChsYW1iZGEgKGZyb20gdG8pCi0gICAg ICAgICAgIChzdWJzdHJpbmcgc3RyIGZyb20gdG8pKQotICAgICAgICAgKGNvbnMgMCAobWFwIG1h dGNoOmVuZCBtYXRjaC1sc3QpKQotICAgICAgICAgKGFwcGVuZCAobWFwIG1hdGNoOnN0YXJ0IG1h dGNoLWxzdCkgKGxpc3QgKHN0cmluZy1sZW5ndGggc3RyKSkpKSkpCi0KLShkZWZpbmUgKGJpLW9w LT5zZXhwLWxpa2UgYmktb3AgYXJncykKLSAgIkJJLU9QIGlzIGEgc3RyaW5nIHdpdGggdGhlIG5h bWUgb2YgYSBTY2hlbWUgb3BlcmF0b3Igd2hpY2ggaW4gYSBDYWJhbCBmaWxlCi1pcyByZXByZXNl bnRlZCBieSBhIGJpbmFyeSBvcGVyYXRvci4gIEFSR1MgYXJlIHRoZSBhcmd1bWVudHMgb2Ygc2Fp ZCBvcGVyYXRvci4KLVJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gUy1leHByZXNzaW9u IG9mIHRoZSBvcGVyYXRvciBhcHBsaWVkIHRvIGl0cwotYXJndW1lbnRzLiIKLSAgKGlmICg9IChs ZW5ndGggYXJncykgMSkKLSAgICAgIChmaXJzdCBhcmdzKQotICAgICAgKHN0cmluZy1hcHBlbmQg IigiIGJpLW9wCi0gICAgICAgICAgICAgICAgICAgICAoZm9sZCAobGFtYmRhIChhcmcgc2VlZCkg KHN0cmluZy1hcHBlbmQgc2VlZCAiICIgYXJnKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICIiIGFyZ3MpICIpIikpKQotCi0oZGVmaW5lIChub3QtPnNleHAtbGlrZSBhcmcpCi0gICJJZiB0 aGUgc3RyaW5nIEFSRyBpcyBwcmVmaXhlZCBieSBhIENhYmFsIG5lZ2F0aW9uIG9wZXJhdG9yLCBj b252ZXJ0IGl0IHRvCi1hbiBlcXVpdmFsZW50IFNjaGVtZSBTLWV4cHJlc3Npb24gc3RyaW5nLiIK LSAgKGlmIChyZWdleHAtZXhlYyBub3QtcnggYXJnKQotICAgICAgKHN0cmluZy1hcHBlbmQgIihu b3QgIgotICAgICAgICAgICAgICAgICAgICAgKHN1YnN0cmluZyBhcmcgMSAoc3RyaW5nLWxlbmd0 aCBhcmcpKQotICAgICAgICAgICAgICAgICAgICAgIikiKQotICAgICAgYXJnKSkKLQotKGRlZmlu ZSAocGFyZW5zLWxlc3MtY29uZC0+c2V4cC1saWtlIGNvbmRpdGlvbmFsKQotICAiQ29udmVydCBh IENhYmFsIENPTkRJVElPTkFMIHN0cmluZyBpbnRvIGEgc3RyaW5nIHdpdGggZXF1aXZhbGVudCBT Y2hlbWUKLXN5bnRheC4gIFRoaXMgcHJvY2VkdXJlIGFjY2VwdHMgb25seSBzaW1wbGUgY29uZGl0 aW9uYWxzIHdpdGhvdXQgcGFyZW50aGVzZXMuIgotICA7OyBUaGUgb3V0aGVyIG9wZXJhdGlvbiBp cyB0aGUgb25lIHdpdGggdGhlIGxvd2VzdCBwcmlvcml0eTogT1IKLSAgKGJpLW9wLT5zZXhwLWxp a2UKLSAgICJvciIKLSAgIDs7IGVhY2ggT1IgYXJndW1lbnQgbWF5IGJlIGFuIEFORCBvcGVyYXRp b24KLSAgIChtYXAgKGxhbWJkYSAob3ItYXJnKQotICAgICAgICAgIChsZXQgKChtLWxzdCAobGlz dC1tYXRjaGVzIGFuZC1yeCBvci1hcmcpKSkKLSAgICAgICAgICAgIDs7IGlzIHRoZXJlIGFuIEFO RCBvcGVyYXRpb24/Ci0gICAgICAgICAgICAoaWYgKD4gKGxlbmd0aCBtLWxzdCkgMCkKLSAgICAg ICAgICAgICAgICAoYmktb3AtPnNleHAtbGlrZQotICAgICAgICAgICAgICAgICAiYW5kIgotICAg ICAgICAgICAgICAgICA7OyBleHBhbmQgTk9UIG9wZXJhdG9ycyB3aGVuIHRoZXJlIGFyZSBBTkRz Ci0gICAgICAgICAgICAgICAgIChtYXAgbm90LT5zZXhwLWxpa2UgKGJpLW9wLWFyZ3Mgb3ItYXJn IG0tbHN0KSkpCi0gICAgICAgICAgICAgICAgOzsgLi4uIGFuZCB3aGVuIHRoZXJlIGFyZW4ndC4K LSAgICAgICAgICAgICAgICAobm90LT5zZXhwLWxpa2Ugb3ItYXJnKSkpKQotICAgICAgICA7OyBs aXN0IG9mIE9SIGFyZ3VtZW50cwotICAgICAgICAoYmktb3AtYXJncyBjb25kaXRpb25hbCAobGlz dC1tYXRjaGVzIG9yLXJ4IGNvbmRpdGlvbmFsKSkpKSkKLQotKGRlZmluZSB0ZXN0LWtleXdvcmQt b3JuYW1lbnQgIl9fIikKLQotKGRlZmluZSAoY29uZGl0aW9uYWwtPnNleHAtbGlrZSBjb25kaXRp b25hbCkKLSAgIkNvbnZlcnQgYSBDYWJhbCBDT05ESVRJT05BTCBzdHJpbmcgaW50byBhIHN0cmlu ZyB3aXRoIGVxdWl2YWxlbnQgU2NoZW1lCi1zeW50YXguIgotICA7OyBGaXJzdCB3ZSBzdWJzdGl0 dXRlIFRFU1QtS0VZV09SRC1PUk5BTUVOVCBmb3IgcGFyZW50aGVzZXMgYXJvdW5kIHRlc3RzCi0g IDs7IGtleXdvcmRzIHNvIHRoYXQgcGFyZW50aGVzZXMgYXJlIG9ubHkgdXNlZCB0byBzZXQgcHJl Y2VkZW5jZXMuIFRoaXMKLSAgOzsgc3Vic3RhbnRpYWxseSBzaW1wbGlmeSBwYXJzaW5nLgotICAo bGV0ICgoY29uZGl0aW9uYWwKLSAgICAgICAgIChyZWdleHAtc3Vic3RpdHV0ZS9nbG9iYWwgI2Yg dGVzdHMtcnggY29uZGl0aW9uYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J3ByZSAxIHRlc3Qta2V5d29yZC1vcm5hbWVudCAyCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRlc3Qta2V5d29yZC1vcm5hbWVudCAncG9zdCkpKQotICAgIChsZXQgbG9vcCAo KHN1Yi1jb25kIGNvbmRpdGlvbmFsKSkKLSAgICAgIChsZXQgKChyeC1yZXN1bHQgKHJlZ2V4cC1l eGVjIHBhcmVucy1yeCBzdWItY29uZCkpKQotICAgICAgICAoY29uZAotICAgICAgICAgKHJ4LXJl c3VsdAotICAgICAgICAgIChwYXJlbnMtbGVzcy1jb25kLT5zZXhwLWxpa2UKLSAgICAgICAgICAg KHN0cmluZy1hcHBlbmQKLSAgICAgICAgICAgIChtYXRjaDpwcmVmaXggcngtcmVzdWx0KQotICAg ICAgICAgICAgKGxvb3AgKG1hdGNoOnN1YnN0cmluZyByeC1yZXN1bHQgMSkpCi0gICAgICAgICAg ICAobWF0Y2g6c3VmZml4IHJ4LXJlc3VsdCkpKSkKLSAgICAgICAgIChlbHNlCi0gICAgICAgICAg KHBhcmVucy1sZXNzLWNvbmQtPnNleHAtbGlrZSBzdWItY29uZCkpKSkpKSkKLQotKGRlZmluZSAo ZXZhbC1mbGFncyBzZXhwLWxpa2UtY29uZCBmbGFncykKLSAgIlNFWFAtTElLRS1DT05EIGlzIGEg c3RyaW5nIHJlcHJlc2VudGluZyBhbiBTLWV4cHJlc3Npb24gY29uZGl0aW9uYWwuICBGTEFHUwot aXMgYSBsaXN0IG9mIGZsYWcgbmFtZSBhbmQgdmFsdWUgcGFpcnMgYXMgcHJvZHVjZWQgYnkgJ2dl dC1mbGFncycuICBTdWJzdGl0dXRlCi1cIiN0XCIgb3IgXCIjZlwiIGFjY29yZGluZyB0byB0aGUg dmFsdWUgb2YgZmxhZ3MuIChEZWZhdWx0IHRvIFwiVHJ1ZVwiKS4iCi0gIChmb2xkLXJpZ2h0Ci0g ICAobGFtYmRhIChmbGFnIHNleHApCi0gICAgIChtYXRjaCBmbGFnCi0gICAgICAgKChuYW1lIC4g dmFsdWUpCi0gICAgICAgIChsZXQgKChyeCAobWFrZS1yZWdleHAKLSAgICAgICAgICAgICAgICAg ICAoc3RyaW5nLWFwcGVuZCAiZmxhZyIgdGVzdC1rZXl3b3JkLW9ybmFtZW50IG5hbWUKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LWtleXdvcmQtb3JuYW1lbnQpKSkpCi0g ICAgICAgICAgKHJlZ2V4cC1zdWJzdGl0dXRlL2dsb2JhbAotICAgICAgICAgICAjZiByeCBzZXhw Ci0gICAgICAgICAgICdwcmUgKGlmIChzdHJpbmctY2k9IHZhbHVlICJGYWxzZSIpICIjZiIgIiN0 IikgJ3Bvc3QpKSkKLSAgICAgICAoXyBzZXhwKSkpCi0gICBzZXhwLWxpa2UtY29uZAotICAgKGNv bnMgJygiW2EtekEtWjAtOV8tXSsiIC4gIlRydWUiKSBmbGFncykpKQotCi0oZGVmaW5lIChldmFs LXRlc3RzLT5zZXhwIHNleHAtbGlrZS1jb25kKQotICAiSW4gdGhlIHN0cmluZyBTRVhQLUxJS0Ut Q09ORCBzdWJzdGl0dXRlIHRlc3Qga2V5d29yZHMgXCJvcyguLi4pXCIgYW5kCi1cImFyY2goLi4u KVwiIHdpdGggZXF1aXZhbGVudCBTY2hlbWUgY2hlY2tzLiAgUmV0cnVuIGFuIFMtZXhwcmVzc2lv bi4iCi0gICh3aXRoLWlucHV0LWZyb20tc3RyaW5nIAotICAgICAgKGZvbGQtcmlnaHQKLSAgICAg ICAobGFtYmRhICh0ZXN0IHNleHApCi0gICAgICAgICAobWF0Y2ggdGVzdAotICAgICAgICAgICAo KHR5cGUgcHJlLW1hdGNoIHBvc3QtbWF0Y2gpCi0gICAgICAgICAgICAobGV0ICgocnggKG1ha2Ut cmVnZXhwCi0gICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBwZW5kIHR5cGUgdGVzdC1r ZXl3b3JkLW9ybmFtZW50ICIoXFx3KykiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRlc3Qta2V5d29yZC1vcm5hbWVudCkpKSkKLSAgICAgICAgICAgICAgKHJlZ2V4cC1z dWJzdGl0dXRlL2dsb2JhbAotICAgICAgICAgICAgICAgI2Ygcnggc2V4cAotICAgICAgICAgICAg ICAgJ3ByZSBwcmUtbWF0Y2ggMiBwb3N0LW1hdGNoICdwb3N0KSkpCi0gICAgICAgICAgIChfIHNl eHApKSkKLSAgICAgICBzZXhwLWxpa2UtY29uZAotICAgICAgIDs7ICglY3VycmVudC1zeXN0ZW0p IHJldHVybnMsIGUuZy4sICJ4ODZfNjQtbGludXgiIG9yICJpNjg2LWxpbnV4Ii4KLSAgICAgICAn KCgiKG9zfGFyY2gpIiAiKHN0cmluZy1tYXRjaCBcIiIgIlwiICglY3VycmVudC1zeXN0ZW0pKSIp KSkKLSAgICByZWFkKSkKLQotKGRlZmluZSAoZXZhbC1pbXBsIHNleHAtbGlrZS1jb25kKQotICAi Q2hlY2sgZm9yIHRoZSBDYWJhbCB0ZXN0IFwiaW1wbCguLi4pXCIgaW4gdGhlIHN0cmluZyBTRVhQ LUxJS0UtQ09ORC4KLUFzc3VtZSB0aGUgbW9kdWxlIGRlY2xhcmluZyB0aGUgZ2VuZXJhdGVkIHBh Y2thZ2UgaW5jbHVkZXMgYSBsb2NhbCB2YXJpYWJsZQotY2FsbGVkIFwiaGFza2VsbC1pbXBsZW1l bnRhdGlvblwiIHdpdGggYSBzdHJpbmcgdmFsdWUgb2YgdGhlIGZvcm0gTkFNRS1WRVJTSU9OCi1h Z2FpbnN0IHdoaWNoIHdlIGNvbXBhcmUuIgotICAod2l0aC1vdXRwdXQtdG8tc3RyaW5nCi0gICAg KGxhbWJkYSAoKQotICAgICAgKHdyaXRlCi0gICAgICAgKHdpdGgtaW5wdXQtZnJvbS1zdHJpbmcg Ci0gICAgICAgICAgIChmb2xkLXJpZ2h0Ci0gICAgICAgICAgICAobGFtYmRhICh0ZXN0IHNleHAp Ci0gICAgICAgICAgICAgIChtYXRjaCB0ZXN0Ci0gICAgICAgICAgICAgICAgKChwcmUtbWF0Y2gg cG9zdC1tYXRjaCkKLSAgICAgICAgICAgICAgICAgKGxldCAoKHJ4LXdpdGgtdmVyc2lvbgotICAg ICAgICAgICAgICAgICAgICAgICAgKG1ha2UtcmVnZXhwCi0gICAgICAgICAgICAgICAgICAgICAg ICAgKHN0cmluZy1hcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImltcGwiIHRlc3Qt a2V5d29yZC1vcm5hbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAiKFthLXpBLVowLTlf LV0rKSAqKFs8Pj1dKykgKihbMC05Ll0rKSAqIgotICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZXN0LWtleXdvcmQtb3JuYW1lbnQpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgKHJ4LXdpdGhv dXQtdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgKG1ha2UtcmVnZXhwCi0gICAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgImltcGwiIHRlc3Qta2V5d29yZC1vcm5h bWVudCAiKFxcdyspIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl c3Qta2V5d29yZC1vcm5hbWVudCkpKSkKLSAgICAgICAgICAgICAgICAgICAoaWYgKHJlZ2V4cC1l eGVjIHJ4LXdpdGgtdmVyc2lvbiBzZXhwKQotICAgICAgICAgICAgICAgICAgICAgICAocmVnZXhw LXN1YnN0aXR1dGUvZ2xvYmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAjZiByeC13aXRoLXZl cnNpb24gc2V4cAotICAgICAgICAgICAgICAgICAgICAgICAgJ3ByZSBwcmUtbWF0Y2ggMiAiICIg cG9zdC1tYXRjaCAiIFwiIiAxICItIiAzICJcIikiICdwb3N0KQotICAgICAgICAgICAgICAgICAg ICAgICAocmVnZXhwLXN1YnN0aXR1dGUvZ2xvYmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAj ZiByeC13aXRob3V0LXZlcnNpb24gc2V4cAotICAgICAgICAgICAgICAgICAgICAgICAgJ3ByZSBw cmUtbWF0Y2ggIi1tYXRjaCBcIiIgMSAiXCIgIiBwb3N0LW1hdGNoICIpIiAncG9zdCkpKSkKLSAg ICAgICAgICAgICAgICAoXyBzZXhwKSkpCi0gICAgICAgICAgICBzZXhwLWxpa2UtY29uZAotICAg ICAgICAgICAgJygoIihzdHJpbmciICJoYXNrZWxsLWltcGxlbWVudGF0aW9uIikpKQotICAgICAg ICAgcmVhZCkpKSkpCi0KLShkZWZpbmUgKGV2YWwtY2FiYWwta2V5d29yZHMgc2V4cC1saWtlLWNv bmQgZmxhZ3MpCi0gICgoY29tcG9zZSBldmFsLXRlc3RzLT5zZXhwIGV2YWwtaW1wbCAoY3V0IGV2 YWwtZmxhZ3MgPD4gZmxhZ3MpKQotICAgc2V4cC1saWtlLWNvbmQpKQotCi0oZGVmaW5lIChrZXkt PnZhbHVlcyBtZXRhIGtleSkKLSAgIk1FVEEgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2Fi YWwgZmlsZSBhcyBwcm9kdWNlZCBieSAncmVhZC1jYWJhbCcuCi1SZXR1cm4gdGhlIGxpc3Qgb2Yg dmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIEtFWSAoYSBzdHJpbmcpLiIKLSAgKG1h dGNoIG1ldGEKLSAgICAoKCkgJygpKQotICAgICgoKCgoPyAobGFtYmRhKHgpIChlcXVhbD8geCBr ZXkpKSkpIHYpIHIgLi4uKQotICAgICB2KQotICAgICgoKGsgdikgciAuLi4pCi0gICAgIChrZXkt PnZhbHVlcyAoY2RyIG1ldGEpIGtleSkpCi0gICAgKF8gImtleSBOb3QgZm91bnQiKSkpCi0KLShk ZWZpbmUgKGtleS1zdGFydC1lbmQtPmVudHJpZXMgbWV0YSBrZXktc3RhcnQtcngga2V5LWVuZC1y eCkKLSAgIk1FVEEgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2FiYWwgZmlsZSBhcyBwcm9k dWNlZCBieSAncmVhZC1jYWJhbCcuCi1SZXR1cm4gYWxsIGVudHJpZXMgd2hvc2Uga2V5cyBsaXN0 IHN0YXJ0cyB3aXRoIEtFWS1TVEFSVCBhbmQgZW5kcyB3aXRoCi1LRVktRU5ELiIKLSAgKGxldCAo KHByZWQKLSAgICAgICAgIChsYW1iZGEgKHgpCi0gICAgICAgICAgIChhbmQgKHJlZ2V4cC1leGVj IGtleS1zdGFydC1yeCAoZmlyc3QgeCkpCi0gICAgICAgICAgICAgICAgKHJlZ2V4cC1leGVjIGtl eS1lbmQtcnggKGxhc3QgeCkpKSkpKQotICAgICAgICAgICA7OyAoZXF1YWw/IChsaXN0IGtleS1z dGFydCBrZXktZW5kKSAobGlzdCAoZmlyc3QgeCkgKGxhc3QgeCkpKSkpKQotICAgIChtYXRjaCBt ZXRhCi0gICAgICAoKCkgJygpKQotICAgICAgKCgoKD8gcHJlZCBrKSB2KSByIC4uLikKLSAgICAg ICAoY29ucyBgKCxrICx2KQotICAgICAgICAgICAgIChrZXktc3RhcnQtZW5kLT5lbnRyaWVzIChj ZHIgbWV0YSkga2V5LXN0YXJ0LXJ4IGtleS1lbmQtcngpKSkKLSAgICAgICgoKGsgdikgciAuLi4p Ci0gICAgICAgKGtleS1zdGFydC1lbmQtPmVudHJpZXMgKGNkciBtZXRhKSBrZXktc3RhcnQtcngg a2V5LWVuZC1yeCkpCi0gICAgICAoXyAia2V5IE5vdCBmb3VudCIpKSkpCi0KLShkZWZpbmUgZWxz ZS1yeAotICAobWFrZS1yZWdleHAgIl5lbHNlJCIpKQotCi0oZGVmaW5lIChjb3VudC1pZi1lbHNl IHJ4LXJlc3VsdC1scykKLSAgKGFwcGx5ICsgKG1hcCAobGFtYmRhIChtKSAoaWYgbSAxIDApKSBy eC1yZXN1bHQtbHMpKSkKLQotKGRlZmluZSAoYW5hbHl6ZS1lbnRyeS1jb25kIGVudHJ5KQotICAo bGV0KiAoKGtleXMgKGZpcnN0IGVudHJ5KSkKLSAgICAgICAgICh2YWxzIChzZWNvbmQgZW50cnkp KQotICAgICAgICAgKHJ4LWNvbmQtcmVzdWx0Ci0gICAgICAgICAgKG1hcCAoY3V0IHJlZ2V4cC1l eGVjIGNvbmRpdGlvbi1yeCA8Pikga2V5cykpCi0gICAgICAgICAocngtZWxzZS1yZXN1bHQKLSAg ICAgICAgICAobWFwIChjdXQgcmVnZXhwLWV4ZWMgZWxzZS1yeCA8Pikga2V5cykpCi0gICAgICAg ICAoY29uZC1ubyAoY291bnQtaWYtZWxzZSByeC1jb25kLXJlc3VsdCkpCi0gICAgICAgICAoZWxz ZS1ubyAoY291bnQtaWYtZWxzZSByeC1lbHNlLXJlc3VsdCkpCi0gICAgICAgICAoY29uZC1pZHgg KGxpc3QtaW5kZXggKGxhbWJkYSAocngpIChpZiByeCAjdCAjZikpIHJ4LWNvbmQtcmVzdWx0KSkK LSAgICAgICAgIChlbHNlLWlkeCAobGlzdC1pbmRleCAobGFtYmRhIChyeCkgKGlmIHJ4ICN0ICNm KSkgcngtZWxzZS1yZXN1bHQpKQotICAgICAgICAgKGtleS1jb25kCi0gICAgICAgICAgICAgIChj b25kCi0gICAgICAgICAgICAgICAoKG9yIChhbmQgY29uZC1pZHggZWxzZS1pZHggKDwgY29uZC1p ZHggZWxzZS1pZHgpKQotICAgICAgICAgICAgICAgICAgICAoYW5kIGNvbmQtaWR4IChub3QgZWxz ZS1pZHgpKSkKLSAgICAgICAgICAgICAgICAobWF0Y2g6c3Vic3RyaW5nCi0gICAgICAgICAgICAg ICAgIChyZWNlaXZlIChoZWFkIHRhaWwpCi0gICAgICAgICAgICAgICAgICAgICAoc3BsaXQtYXQg cngtY29uZC1yZXN1bHQgY29uZC1pZHgpIChmaXJzdCB0YWlsKSkpKQotICAgICAgICAgICAgICAg KChvciAoYW5kIGNvbmQtaWR4IGVsc2UtaWR4ICg+IGNvbmQtaWR4IGVsc2UtaWR4KSkKLSAgICAg ICAgICAgICAgICAgICAgKGFuZCAobm90IGNvbmQtaWR4KSBlbHNlLWlkeCkpCi0gICAgICAgICAg ICAgICAgKG1hdGNoOnN1YnN0cmluZwotICAgICAgICAgICAgICAgICAocmVjZWl2ZSAoaGVhZCB0 YWlsKQotICAgICAgICAgICAgICAgICAgICAgKHNwbGl0LWF0IHJ4LWVsc2UtcmVzdWx0IGVsc2Ut aWR4KSAoZmlyc3QgdGFpbCkpKSkKLSAgICAgICAgICAgICAgIChlbHNlCi0gICAgICAgICAgICAg ICAgIiIpKSkpCi0gICAgKHZhbHVlcyBrZXlzIHZhbHMgcngtY29uZC1yZXN1bHQKLSAgICAgICAg ICAgIHJ4LWVsc2UtcmVzdWx0IGNvbmQtbm8gZWxzZS1ubyBrZXktY29uZCkpKQotCi0oZGVmaW5l IChyZW1vdmUtY29uZCBlbnRyeSBjb25kKQotICAobWF0Y2ggZW50cnkKLSAgICAoKGsgdikKLSAg ICAgKGxpc3QgKGNkciAobWVtYmVyIGNvbmQgaykpIHYpKSkpCi0KLShkZWZpbmUgKGdyb3VwLWFu ZC1yZWR1Y2UtbGV2ZWwgZW50cmllcyBncm91cCBncm91cC1jb25kKQotICAobGV0IGxvb3AKLSAg ICAgICgodHJ1ZS1ncm91cCBncm91cCkKLSAgICAgICAoZmFsc2UtZ3JvdXAgJygpKQotICAgICAg IChlbnRyaWVzIGVudHJpZXMpKQotICAgIChpZiAobnVsbD8gZW50cmllcykKLSAgICAgICAgKHZh bHVlcyAocmV2ZXJzZSB0cnVlLWdyb3VwKSAocmV2ZXJzZSBmYWxzZS1ncm91cCkgZW50cmllcykK LSAgICAgICAgKGxldCotdmFsdWVzICgoKGVudHJ5KSAoZmlyc3QgZW50cmllcykpCi0gICAgICAg ICAgICAgICAgICAgICAgKChrZXlzIHZhbHMgcngtY29uZC1yZXN1bHQgcngtZWxzZS1yZXN1bHQK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZC1ubyBlbHNlLW5vIGtleS1jb25kKQot ICAgICAgICAgICAgICAgICAgICAgICAoYW5hbHl6ZS1lbnRyeS1jb25kIGVudHJ5KSkpCi0gICAg ICAgICAgKGNvbmQKLSAgICAgICAgICAgKChhbmQgKD49ICgrIGNvbmQtbm8gZWxzZS1ubykgMSkg KHN0cmluZz0gZ3JvdXAtY29uZCBrZXktY29uZCkpCi0gICAgICAgICAgICAobG9vcCAoY29ucyAo cmVtb3ZlLWNvbmQgZW50cnkgZ3JvdXAtY29uZCkgdHJ1ZS1ncm91cCkgZmFsc2UtZ3JvdXAKLSAg ICAgICAgICAgICAgICAgIChjZHIgZW50cmllcykpKQotICAgICAgICAgICAoKGFuZCAoPj0gKCsg Y29uZC1ubyBlbHNlLW5vKSAxKSAoc3RyaW5nPSBrZXktY29uZCAiZWxzZSIpKQotICAgICAgICAg ICAgKGxvb3AgdHJ1ZS1ncm91cCAoY29ucyAocmVtb3ZlLWNvbmQgZW50cnkgImVsc2UiKSBmYWxz ZS1ncm91cCkKLSAgICAgICAgICAgICAgICAgIChjZHIgZW50cmllcykpKQotICAgICAgICAgICAo ZWxzZQotICAgICAgICAgICAgKHZhbHVlcyAocmV2ZXJzZSB0cnVlLWdyb3VwKSAocmV2ZXJzZSBm YWxzZS1ncm91cCkgZW50cmllcykpKSkpKSkKLQotKGRlZmluZSBkZXBlbmRlbmNpZXMtcngKLSAg KG1ha2UtcmVnZXhwICIoW2EtekEtWjAtOV8tXSspICpbXixdKiw/IikpCi0KIChkZWZpbmUgKGhh Y2thZ2UtbmFtZS0+cGFja2FnZS1uYW1lIG5hbWUpCisgICJHaXZlbiB0aGUgTkFNRSBvZiBhIENh YmFsIHBhY2thZ2UsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBHdWl4IG5hbWUuIgogICAoaWYg KHN0cmluZy1wcmVmaXg/IHBhY2thZ2UtbmFtZS1wcmVmaXggbmFtZSkKICAgICAgIChzdHJpbmct ZG93bmNhc2UgbmFtZSkKICAgICAgIChzdHJpbmctYXBwZW5kIHBhY2thZ2UtbmFtZS1wcmVmaXgg KHN0cmluZy1kb3duY2FzZSBuYW1lKSkpKQogCi0oZGVmaW5lIChzcGxpdC1hbmQtZmlsdGVyLWRl cGVuZGVuY2llcyBscyBuYW1lcy10by1maWx0ZXIpCi0gICJTcGxpdCB0aGUgY29tbWEgc2VwYXJh dGVkIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIExTIGNvbWluZyBmcm9tIHRoZSBDYWJhbAotZmlsZSwg ZmlsdGVyIHBhY2thZ2VzIGluY2x1ZGVkIGluIE5BTUVTLVRPLUZJTFRFUiBhbmQgcmV0dXJuIGEg bGlzdCB3aXRoCi1pbnB1dHMgc3VpdGFibGUgZm9yIHRoZSBHdWl4IHBhY2thZ2UuICBDdXJyZW50 bHkgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMKLWRpc2NhcmRlZC4iCi0gIChkZWZpbmUgKHNw bGl0LWF0LWNvbW1hLWFuZC1maWx0ZXIgZCkKLSAgICAoZm9sZAotICAgICAobGFtYmRhIChtIHNl ZWQpCi0gICAgICAgKGxldCogKChuYW1lIChzdHJpbmctZG93bmNhc2UgKG1hdGNoOnN1YnN0cmlu ZyBtIDEpKSkKLSAgICAgICAgICAgICAgKHBrZy1uYW1lIChoYWNrYWdlLW5hbWUtPnBhY2thZ2Ut bmFtZSBuYW1lKSkpCi0gICAgICAgICAoaWYgKG1lbWJlciBuYW1lIG5hbWVzLXRvLWZpbHRlcikK LSAgICAgICAgICAgICBzZWVkCi0gICAgICAgICAgICAgKGNvbnMgKGxpc3QgcGtnLW5hbWUgKGxp c3QgJ3VucXVvdGUgKHN0cmluZy0+c3ltYm9sIHBrZy1uYW1lKSkpCi0gICAgICAgICAgICAgICAg ICAgc2VlZCkpKSkKLSAgICAgJygpCi0gICAgIChsaXN0LW1hdGNoZXMgZGVwZW5kZW5jaWVzLXJ4 IGQpKSkKLSAgICAKLSAgKGZvbGQgKGxhbWJkYSAoZCBwKSAoYXBwZW5kIChzcGxpdC1hdC1jb21t YS1hbmQtZmlsdGVyIGQpIHApKSAnKCkgIGxzKSkKLQotKGRlZmluZSogKGRlcGVuZGVuY2llcy1j b25kLT5zZXhwIG1ldGEgIzprZXkgKGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/ICN0KSkKLSAg Ik1FVEEgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2FiYWwgZmlsZSBhcyBwcm9kdWNlZCBi eSAncmVhZC1jYWJhbCcuCi1SZXR1cm4gYW4gUy1leHByZXNzaW9uIGNvbnRhaW5pbmcgdGhlIGxp c3Qgb2YgZGVwZW5kZW5jaWVzIGFzIGV4cGVjdGVkIGJ5IHRoZQotJ2lucHV0cycgZmllbGQgb2Yg YSBwYWNrYWdlLiAgVGhlIGdlbmVyYXRlZCBTLWV4cHJlc3Npb25zIG1heSBpbmNsdWRlCi1jb25k aXRpb25hbHMgYXMgZGVmaW5lZCBpbiB0aGUgY2FiYWwgZmlsZS4gIER1cmluZyB0aGlzIHByb2Nl c3Mgd2UgZGlzY2FyZCB0aGUKLXZlcnNpb24gaW5mb3JtYXRpb24gb2YgdGhlIHBhY2thZ2VzLiIK LSAgKGRlZmluZSAodGFrZS1kZXBlbmRlbmNpZXMgbWV0YSkKLSAgICAobGV0ICgoa2V5LXN0YXJ0 LWV4ZSAobWFrZS1yZWdleHAgImV4ZWN1dGFibGUiKSkKLSAgICAgICAgICAoa2V5LXN0YXJ0LWxp YiAobWFrZS1yZWdleHAgImxpYnJhcnkiKSkKLSAgICAgICAgICAoa2V5LXN0YXJ0LXRlc3RzICht YWtlLXJlZ2V4cCAidGVzdC1zdWl0ZSIpKQotICAgICAgICAgIChrZXktZW5kIChtYWtlLXJlZ2V4 cCAiYnVpbGQtZGVwZW5kcyIpKSkKLSAgICAgIChhcHBlbmQKLSAgICAgICAoa2V5LXN0YXJ0LWVu ZC0+ZW50cmllcyBtZXRhIGtleS1zdGFydC1leGUga2V5LWVuZCkKLSAgICAgICAoa2V5LXN0YXJ0 LWVuZC0+ZW50cmllcyBtZXRhIGtleS1zdGFydC1saWIga2V5LWVuZCkKLSAgICAgICAoaWYgaW5j bHVkZS10ZXN0LWRlcGVuZGVuY2llcz8KLSAgICAgICAgICAgKGtleS1zdGFydC1lbmQtPmVudHJp ZXMgbWV0YSBrZXktc3RhcnQtdGVzdHMga2V5LWVuZCkKLSAgICAgICAgICAgJygpKSkpKQotCi0g IChsZXQgKChmbGFncyAoZ2V0LWZsYWdzIChwcmUtcHJvY2Vzcy1lbnRyaWVzLWtleXMgbWV0YSkp KQotICAgICAgICAoYXVnbWVudGVkLWdoYy1zdGQtbGlicyAoYXBwZW5kIChrZXktPnZhbHVlcyBt ZXRhICJuYW1lIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaGMt c3RhbmRhcmQtbGlicmFyaWVzKSkpCi0gICAgKGRlbGV0ZS1kdXBsaWNhdGVzCi0gICAgIChsZXQg bG9vcCAoKGVudHJpZXMgKHRha2UtZGVwZW5kZW5jaWVzIG1ldGEpKQotICAgICAgICAgICAgICAg IChyZXN1bHQgJygpKSkKLSAgICAgICAoaWYgKG51bGw/IGVudHJpZXMpCi0gICAgICAgICAgIChy ZXZlcnNlIHJlc3VsdCkKLSAgICAgICAgICAgKGxldCotdmFsdWVzICgoKGVudHJ5KSAoZmlyc3Qg ZW50cmllcykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKChrZXlzIHZhbHMgcngtY29uZC1y ZXN1bHQgcngtZWxzZS1yZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u ZC1ubyBlbHNlLW5vIGtleS1jb25kKQotICAgICAgICAgICAgICAgICAgICAgICAgICAoYW5hbHl6 ZS1lbnRyeS1jb25kIGVudHJ5KSkpCi0gICAgICAgICAgICAgKGNvbmQKLSAgICAgICAgICAgICAg KCg9ICgrIGNvbmQtbm8gZWxzZS1ubykgMCkKLSAgICAgICAgICAgICAgIChsb29wIChjZHIgZW50 cmllcykKLSAgICAgICAgICAgICAgICAgICAgIChhcHBlbmQKLSAgICAgICAgICAgICAgICAgICAg ICAoc3BsaXQtYW5kLWZpbHRlci1kZXBlbmRlbmNpZXMgdmFscwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWdtZW50ZWQtZ2hjLXN0ZC1saWJz KQotICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKQotICAgICAgICAgICAgICAoZWxzZQot ICAgICAgICAgICAgICAgKGxldC12YWx1ZXMgKCgodHJ1ZS1ncm91cCBmYWxzZS1ncm91cCBlbnRy aWVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JvdXAtYW5kLXJlZHVjZS1sZXZl bCBlbnRyaWVzICcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBrZXktY29uZCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjb25k LWZpbmFsKSAoZXZhbC1jYWJhbC1rZXl3b3JkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjb25kaXRpb25hbC0+c2V4cC1saWtlCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYXN0IChzcGxpdC1zZWN0aW9uIGtleS1jb25k KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpKSkK LSAgICAgICAgICAgICAgICAgKGxvb3AgZW50cmllcwotICAgICAgICAgICAgICAgICAgICAgICAo Y29uZAotICAgICAgICAgICAgICAgICAgICAgICAgKChvciAoZXE/IGNvbmQtZmluYWwgI3QpIChl cXVhbD8gY29uZC1maW5hbCAnKG5vdCAjZikpKQotICAgICAgICAgICAgICAgICAgICAgICAgIChh cHBlbmQgKGxvb3AgdHJ1ZS1ncm91cCAnKCkpIHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAg ICAgICAoKG9yIChlcT8gY29uZC1maW5hbCAjZikgKGVxdWFsPyBjb25kLWZpbmFsICcobm90ICN0 KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZCAobG9vcCBmYWxzZS1ncm91cCAn KCkpIHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAoZWxzZQotICAgICAgICAgICAg ICAgICAgICAgICAgIChsZXQgKCh0cnVlLWdyb3VwLXJlc3VsdCAobG9vcCB0cnVlLWdyb3VwICco KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZhbHNlLWdyb3VwLXJlc3VsdCAo bG9vcCBmYWxzZS1ncm91cCAnKCkpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25k Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhbmQgKG51bGw/IHRydWUtZ3JvdXAtcmVz dWx0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudWxsPyBmYWxzZS1ncm91 cC1yZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgKChudWxsPyBmYWxzZS1ncm91cC1yZXN1bHQpCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zIGAodW5xdW90ZS1zcGxpY2luZwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuICxjb25kLWZpbmFsICx0cnVlLWdyb3Vw LXJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChudWxsPyB0cnVlLWdyb3VwLXJlc3VsdCkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgYCh1bnF1b3RlLXNwbGljaW5nCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAsY29uZC1maW5hbCAsZmFs c2UtZ3JvdXAtcmVzdWx0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz dWx0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxzZQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29ucyBgKHVucXVvdGUtc3BsaWNpbmcKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoaWYgLGNvbmQtZmluYWwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLHRydWUtZ3JvdXAtcmVzdWx0Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICxmYWxzZS1ncm91cC1yZXN1bHQpKQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkpKSkpKSkpKSkpKSkpCi0KLTs7IFBh cnQgMzoKLTs7Ci07OyBSZXRyaXZlIHRoZSBkZXNpcmVkIHBhY2thZ2UgYW5kIGl0cyBDYWJhbCBm aWxlIGZyb20KLTs7IGh0dHA6Ly9oYWNrYWdlLmhhc2tlbGwub3JnIGFuZCBjb25zdHJ1Y3QgdGhl IEd1aXggcGFja2FnZSBTLWV4cHJlc3Npb24uCi0KIChkZWZpbmUgKGhhY2thZ2UtZmV0Y2ggbmFt ZS12ZXJzaW9uKQogICAiUmV0dXJuIHRoZSBDYWJhbCBmaWxlIGZvciB0aGUgcGFja2FnZSBOQU1F LVZFUlNJT04sIG9yICNmIG9uIGZhaWx1cmUuICBJZgogdGhlIHZlcnNpb24gcGFydCBpcyBvbWl0 dGVkIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwgdGhlbiByZXR1cm4gdGhlIGxhdGVzdApAQCAtNjk2 LDMzICsxMTEsNjMgQEAgdmVyc2lvbi4iCiAgICAoKGxzdCAuLi4pIGAobGlzdCAsQChtYXAgc3Ry aW5nLT5saWNlbnNlIGxzdCkpKQogICAgKF8gI2YpKSkKIAotKGRlZmluZSogKGhhY2thZ2UtbW9k dWxlLT5zZXhwIG1ldGEgIzprZXkgKGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/ICN0KSkKLSAg IlJldHVybiB0aGUgYHBhY2thZ2UnIFMtZXhwcmVzc2lvbiBmb3IgYSBDYWJhbCBwYWNrYWdlLiAg TUVUQSBpcyB0aGUKKworKGRlZmluZSAoY2FiYWwtZGVwZW5kZW5jaWVzLT5uYW1lcyBjYWJhbCBp bmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPykKKyAgIlJldHVybiB0aGUgbGlzdCBvZiBkZXBlbmRl bmNpZXMgbmFtZXMgZnJvbSB0aGUgQ0FCQUwgcGFja2FnZSBvYmplY3QuICBJZgorSU5DTFVERS1U RVNULURFUEVOREVOQ0lFUz8gaXMgI2YsIGRvIG5vdCBpbmNsdWRlIGRlcGVuZGVuY2llcyByZXF1 aXJlZCBieSB0ZXN0CitzdWl0ZXMuIgorICAobGV0KiAoKGxpYiAoY2FiYWwtcGFja2FnZS1saWJy YXJ5IGNhYmFsKSkKKyAgICAgICAgIChsaWItZGVwcyAoaWYgKHBhaXI/IGxpYikKKyAgICAgICAg ICAgICAgICAgICAgICAgKG1hcCBjYWJhbC1kZXBlbmRlbmN5LW5hbWUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoYXBwZW5kLW1hcCBjYWJhbC1saWJyYXJ5LWRlcGVuZGVuY2llcyBsaWIp KQorICAgICAgICAgICAgICAgICAgICAgICAnKCkpKQorICAgICAgICAgKGV4ZSAoY2FiYWwtcGFj a2FnZS1leGVjdXRhYmxlcyBjYWJhbCkpCisgICAgICAgICAoZXhlLWRlcHMgKGlmIChwYWlyPyBl eGUpCisgICAgICAgICAgICAgICAgICAgICAgIChtYXAgY2FiYWwtZGVwZW5kZW5jeS1uYW1lCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZC1tYXAgY2FiYWwtZXhlY3V0YWJsZS1k ZXBlbmRlbmNpZXMgZXhlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgJygpKSkKKyAgICAgICAg ICh0cyAoY2FiYWwtcGFja2FnZS10ZXN0LXN1aXRlcyBjYWJhbCkpCisgICAgICAgICAodHMtZGVw cyAoaWYgKHBhaXI/IHRzKQorICAgICAgICAgICAgICAgICAgICAgICAobWFwIGNhYmFsLWRlcGVu ZGVuY3ktbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcHBlbmQtbWFwIGNhYmFs LXRlc3Qtc3VpdGUtZGVwZW5kZW5jaWVzIHRzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgJygp KSkpCisgICAgKGlmIGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/CisgICAgICAgIChkZWxldGUt ZHVwbGljYXRlcyAoYXBwZW5kIGxpYi1kZXBzIGV4ZS1kZXBzIHRzLWRlcHMpKQorICAgICAgICAo ZGVsZXRlLWR1cGxpY2F0ZXMgKGFwcGVuZCBsaWItZGVwcyBleGUtZGVwcykpKSkpCisKKyhkZWZp bmUgKGZpbHRlci1kZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzIG93bi1uYW1lKQorICAiRmlsdGVy IHRoZSBkZXBlbmRlbmNpZXMgaW5jbHVkZWQgd2l0aCB0aGUgR0hDIGNvbXBpbGVyIGZyb20gREVQ RU5ERU5DSUVTLCBhCitsaXN0IHdpdGggdGhlIG5hbWVzIG9mIGRlcGVuZGVuY2llcy4gIE9XTi1O QU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBDYWJhbAorcGFja2FnZSBiZWluZyBwcm9jZXNzZWQgYW5k IGlzIHVzZWQgdG8gZmlsdGVyIHJlZmVyZW5jZXMgdG8gaXRzZWxmLiIKKyAgKGZpbHRlciAobGFt YmRhIChkKSAobm90IChtZW1iZXIgKHN0cmluZy1kb3duY2FzZSBkKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29ucyBvd24tbmFtZSBnaGMtc3RhbmRhcmQtbGlicmFyaWVz KSkpKQorICAgICAgICAgIGRlcGVuZGVuY2llcykpCisKKyhkZWZpbmUqIChoYWNrYWdlLW1vZHVs ZS0+c2V4cCBjYWJhbCAjOmtleSAoaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8gI3QpKQorICAi UmV0dXJuIHRoZSBgcGFja2FnZScgUy1leHByZXNzaW9uIGZvciBhIENhYmFsIHBhY2thZ2UuICBD QUJBTCBpcyB0aGUKIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2FiYWwgZmlsZSBhcyBwcm9kdWNlZCBi eSAncmVhZC1jYWJhbCcuIgogCiAgIChkZWZpbmUgbmFtZQotICAgIChmaXJzdCAoa2V5LT52YWx1 ZXMgbWV0YSAibmFtZSIpKSkKKyAgICAoY2FiYWwtcGFja2FnZS1uYW1lIGNhYmFsKSkKIAogICAo ZGVmaW5lIHZlcnNpb24KLSAgICAoZmlyc3QgKGtleS0+dmFsdWVzIG1ldGEgInZlcnNpb24iKSkp Ci0gIAotICAoZGVmaW5lIGRlc2NyaXB0aW9uCi0gICAgKGxldCotdmFsdWVzICgoKGRlc2NyaXB0 aW9uKSAoa2V5LT52YWx1ZXMgbWV0YSAiZGVzY3JpcHRpb24iKSkKLSAgICAgICAgICAgICAgICAg ICgobGluZXMgbGFzdCkKLSAgICAgICAgICAgICAgICAgICAoc3BsaXQtYXQgZGVzY3JpcHRpb24g KC0gKGxlbmd0aCBkZXNjcmlwdGlvbikgMSkpKSkKLSAgICAgIChmb2xkLXJpZ2h0IChsYW1iZGEg KGxpbmUgc2VlZCkgKHN0cmluZy1hcHBlbmQgbGluZSAiXG4iIHNlZWQpKQotICAgICAgICAgICAg ICAgICAgKGZpcnN0IGxhc3QpIGxpbmVzKSkpCisgICAgKGNhYmFsLXBhY2thZ2UtdmVyc2lvbiBj YWJhbCkpCiAgIAogICAoZGVmaW5lIHNvdXJjZS11cmwKICAgICAoc3RyaW5nLWFwcGVuZCAiaHR0 cDovL2hhY2thZ2UuaGFza2VsbC5vcmcvcGFja2FnZS8iIG5hbWUKICAgICAgICAgICAgICAgICAg ICAiLyIgbmFtZSAiLSIgdmVyc2lvbiAiLnRhci5neiIpKQogCi0gIDs7IFNldmVyYWwgcGFja2Fn ZXMgZG8gbm90IGhhdmUgYW4gb2ZmaWNpYWwgaG9tZS1wYWdlIG90aGVyIHRoYW4gb24gSGFja2Fn ZS4KLSAgKGRlZmluZSBob21lLXBhZ2UKLSAgICAobGV0ICgoaG9tZS1wYWdlLWVudHJ5IChrZXkt PnZhbHVlcyBtZXRhICJob21lcGFnZSIpKSkKLSAgICAgIChpZiAobnVsbD8gaG9tZS1wYWdlLWVu dHJ5KQotICAgICAgICAgIChzdHJpbmctYXBwZW5kICJodHRwOi8vaGFja2FnZS5oYXNrZWxsLm9y Zy9wYWNrYWdlLyIgbmFtZSkKLSAgICAgICAgICAoZmlyc3QgaG9tZS1wYWdlLWVudHJ5KSkpKQor ICAoZGVmaW5lIGRlcGVuZGVuY2llcworICAgIChsZXQgKChuYW1lcworICAgICAgICAgICAobWFw IGhhY2thZ2UtbmFtZS0+cGFja2FnZS1uYW1lCisgICAgICAgICAgICAgICAgKChjb21wb3NlIChj dXQgZmlsdGVyLWRlcGVuZGVuY2llcyA8PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjYWJhbC1wYWNrYWdlLW5hbWUgY2FiYWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAo Y3V0IGNhYmFsLWRlcGVuZGVuY2llcy0+bmFtZXMgPD4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPykpCisgICAgICAgICAgICAgICAgIGNh YmFsKSkpKQorICAgICAgKG1hcCAobGFtYmRhIChuYW1lKQorICAgICAgICAgICAgIChsaXN0IG5h bWUgKGxpc3QgJ3VucXVvdGUgKHN0cmluZy0+c3ltYm9sIG5hbWUpKSkpCisgICAgICAgICAgIG5h bWVzKSkpCiAgIAogICAoZGVmaW5lIChtYXliZS1pbnB1dHMgaW5wdXQtdHlwZSBpbnB1dHMpCiAg ICAgKG1hdGNoIGlucHV0cwpAQCAtNzMyLDYgKzE3NywxMSBAQCByZXByZXNlbnRhdGlvbiBvZiBh IENhYmFsIGZpbGUgYXMgcHJvZHVjZWQgYnkgJ3JlYWQtY2FiYWwnLiIKICAgICAgICAobGlzdCAo bGlzdCBpbnB1dC10eXBlCiAgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3F1YXNpcXVvdGUgaW5w dXRzKSkpKSkpCiAgIAorICAoZGVmaW5lIChtYXliZS1hcmd1bWVudHMpCisgICAgKGlmIChub3Qg aW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8pCisgICAgICAgICcoKGFyZ3VtZW50cyBgKCM6dGVz dHM/ICNmKSkpCisgICAgICAgICcoKSkpCisKICAgKGxldCAoKHRhcmJhbGwgKHdpdGgtc3RvcmUg c3RvcmUKICAgICAgICAgICAgICAgICAgICAoZG93bmxvYWQtdG8tc3RvcmUgc3RvcmUgc291cmNl LXVybCkpKSkKICAgICBgKHBhY2thZ2UKQEAgLTc0NiwyMiArMTk2LDMyIEBAIHJlcHJlc2VudGF0 aW9uIG9mIGEgQ2FiYWwgZmlsZSBhcyBwcm9kdWNlZCBieSAncmVhZC1jYWJhbCcuIgogICAgICAg ICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItPm5peC1iYXNlMzItc3RyaW5nIChmaWxlLXNo YTI1NiB0YXJiYWxsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gZG93bmxv YWQgdGFyIGFyY2hpdmUiKSkpKSkKICAgICAgICAoYnVpbGQtc3lzdGVtIGhhc2tlbGwtYnVpbGQt c3lzdGVtKQotICAgICAgICxAKG1heWJlLWlucHV0cyAnaW5wdXRzCi0gICAgICAgICAgICAgICAg ICAgICAgIChkZXBlbmRlbmNpZXMtY29uZC0+c2V4cCBtZXRhCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/ Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRl LXRlc3QtZGVwZW5kZW5jaWVzPykpCi0gICAgICAgKGhvbWUtcGFnZSAsaG9tZS1wYWdlKQotICAg ICAgIChzeW5vcHNpcyAsQChrZXktPnZhbHVlcyBtZXRhICJzeW5vcHNpcyIpKQotICAgICAgIChk ZXNjcmlwdGlvbiAsZGVzY3JpcHRpb24pCi0gICAgICAgKGxpY2Vuc2UgLChzdHJpbmctPmxpY2Vu c2UgKGtleS0+dmFsdWVzIG1ldGEgImxpY2Vuc2UiKSkpKSkpCi0KLShkZWZpbmUqIChoYWNrYWdl LT5ndWl4LXBhY2thZ2UgbW9kdWxlLW5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIzprZXkgKGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/ICN0KSkKKyAgICAgICAsQChtYXli ZS1pbnB1dHMgJ2lucHV0cyBkZXBlbmRlbmNpZXMpCisgICAgICAgLEAobWF5YmUtYXJndW1lbnRz KQorICAgICAgIChob21lLXBhZ2UgLChjYWJhbC1wYWNrYWdlLWhvbWUtcGFnZSBjYWJhbCkpCisg ICAgICAgKHN5bm9wc2lzICwoY2FiYWwtcGFja2FnZS1zeW5vcHNpcyBjYWJhbCkpCisgICAgICAg KGRlc2NyaXB0aW9uICwoY2FiYWwtcGFja2FnZS1kZXNjcmlwdGlvbiBjYWJhbCkpCisgICAgICAg KGxpY2Vuc2UgLChzdHJpbmctPmxpY2Vuc2UgKGNhYmFsLXBhY2thZ2UtbGljZW5zZSBjYWJhbCkp KSkpKQorCisoZGVmaW5lKiAoaGFja2FnZS0+Z3VpeC1wYWNrYWdlIHBhY2thZ2UtbmFtZSAjOmtl eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5jbHVkZS10ZXN0LWRlcGVuZGVu Y2llcz8gI3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkLWZyb20tc3Rk aW4/ICNmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FiYWwtZW52aXJvbm1l bnQgJygpKSkKICAgIkZldGNoIHRoZSBDYWJhbCBmaWxlIGZvciBQQUNLQUdFLU5BTUUgZnJvbSBo YWNrYWdlLmhhc2tlbGwub3JnLCBhbmQgcmV0dXJuCi10aGUgYHBhY2thZ2UnIFMtZXhwcmVzc2lv biBjb3JyZXNwb25kaW5nIHRvIHRoYXQgcGFja2FnZSwgb3IgI2Ygb24gZmFpbHVyZS4iCi0gIChs ZXQgKChtb2R1bGUtbWV0YSAoaGFja2FnZS1mZXRjaCBtb2R1bGUtbmFtZSkpKQotICAgIChhbmQ9 PiBtb2R1bGUtbWV0YSAoY3V0IGhhY2thZ2UtbW9kdWxlLT5zZXhwIDw+Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIzppbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/KSkpKQordGhlIGBwYWNr YWdlJyBTLWV4cHJlc3Npb24gY29ycmVzcG9uZGluZyB0byB0aGF0IHBhY2thZ2UsIG9yICNmIG9u IGZhaWx1cmUuCitDQUJBTC1FTlZJUk9OTUVOVCBpcyBhbiBhbGlzdCBkZWZpbmluZyB0aGUgZW52 aXJvbm1lbnQgaW4gd2hpY2ggdGhlIENhYmFsCitjb25kaXRpb25hbHMgYXJlIGV2YWx1YXRlZC4g IFRoZSBhY2NlcHRlZCBrZXlzIGFyZTogXCJvc1wiLCBcImFyY2hcIiwgXCJpbXBsXCIKK2FuZCB0 aGUgbmFtZSBvZiBhIGZsYWcuICBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgZmxhZyBoYXMg dG8gYmUgZWl0aGVyIHRoZQorc3ltYm9sICd0cnVlJyBvciAnZmFsc2UnLiAgVGhlIHZhbHVlIGFz c29jaWF0ZWQgd2l0aCBvdGhlciBrZXlzIGhhcyB0byBjb25mb3JtCit0byB0aGUgQ2FiYWwgZmls ZSBmb3JtYXQgZGVmaW5pdGlvbi4gIFRoZSBkZWZhdWx0IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0 aGUKK2tleXMgXCJvc1wiLCBcImFyY2hcIiBhbmQgXCJpbXBsXCIgaXMgXCJsaW51eFwiLCBcIng4 Nl82NFwiIGFuZCBcImdoY1wiCityZXNwZWN0aXZlbHkuIgorICAobGV0ICgoY2FiYWwtbWV0YSAo aWYgcmVhZC1mcm9tLXN0ZGluPworICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWQtY2FiYWwp CisgICAgICAgICAgICAgICAgICAgICAgICAoaGFja2FnZS1mZXRjaCBwYWNrYWdlLW5hbWUpKSkp CisgICAgKGFuZD0+IGNhYmFsLW1ldGEgKGNvbXBvc2UgKGN1dCBoYWNrYWdlLW1vZHVsZS0+c2V4 cCA8PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzppbmNsdWRlLXRlc3Qt ZGVwZW5kZW5jaWVzPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1 ZGUtdGVzdC1kZXBlbmRlbmNpZXM/KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj dXQgZXZhbC1jYWJhbCA8PiBjYWJhbC1lbnZpcm9ubWVudCkpKSkpCiAKIDs7OyBjYWJhbC5zY20g ZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9ndWl4L3NjcmlwdHMvaW1wb3J0L2hhY2thZ2Uuc2NtIGIv Z3VpeC9zY3JpcHRzL2ltcG9ydC9oYWNrYWdlLnNjbQppbmRleCBmN2MxOGNkLi4wNWFhZWI2IDEw MDY0NAotLS0gYS9ndWl4L3NjcmlwdHMvaW1wb3J0L2hhY2thZ2Uuc2NtCisrKyBiL2d1aXgvc2Ny aXB0cy9pbXBvcnQvaGFja2FnZS5zY20KQEAgLTM0LDcgKzM0LDkgQEAKIDs7OwogCiAoZGVmaW5l ICVkZWZhdWx0LW9wdGlvbnMKLSAgJygoaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8gLiAjdCkp KQorICAnKChpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPyAuICN0KQorICAgIChyZWFkLWZyb20t c3RkaW4/IC4gI2YpCisgICAgKCdjYWJhbC1lbnZpcm9ubWVudCAuICcoKSkpKQogCiAoZGVmaW5l IChzaG93LWhlbHApCiAgIChkaXNwbGF5IChfICJVc2FnZTogZ3VpeCBpbXBvcnQgaGFja2FnZSBQ QUNLQUdFLU5BTUUKQEAgLTQ1LDggKzQ3LDEzIEBAIHBhY2thZ2Ugd2lsbCBiZSBnZW5lcmF0ZWQu ICBJZiBubyB2ZXJzaW9uIHN1ZmZpeCBpcyBwZWNpZmllZCwgdGhlbiB0aGUKIGdlbmVyYXRlZCBw YWNrYWdlIGRlZmluaXRpb24gd2lsbCBjb3JyZXNwb25kIHRvIHRoZSBsYXRlc3QgYXZhaWxhYmxl CiB2ZXJzaW9uLlxuIikpCiAgIChkaXNwbGF5IChfICIKKyAgLWUgQUxJU1QsIC0tY2FiYWwtZW52 aXJvbm1lbnQ9QUxJU1QgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5 IGVudmlyb25tZW50IGZvciBDYWJhbCBldmFsdWF0aW9uIikpCisgIChkaXNwbGF5IChfICIKICAg LWgsIC0taGVscCAgICAgICAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdCIp KQogICAoZGlzcGxheSAoXyAiCisgIC1zLCAtLXN0ZGluICAgICAgICAgICAgICAgICAgcmVhZCBm cm9tIHN0YW5kYXJkIGlucHV0IikpCisgIChkaXNwbGF5IChfICIKICAgLXQsIC0tbm8tdGVzdC1k ZXBlbmRlbmNpZXMgICBkb24ndCBpbmNsdWRlIHRlc3Qgb25seSBkZXBlbmRlbmNpZXMiKSkKICAg KGRpc3BsYXkgKF8gIgogICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICAgIGRpc3BsYXkgdmVy c2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdCIpKQpAQCAtNjcsNiArNzQsMTYgQEAgdmVyc2lvbi5c biIpKQogICAgICAgICAgICAgICAgICAgIChhbGlzdC1jb25zICdpbmNsdWRlLXRlc3QtZGVwZW5k ZW5jaWVzPyAjZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGlzdC1kZWxldGUg J2luY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXN1bHQpKSkpCisgICAgICAgICAob3B0aW9uICcoI1xzICJzdGRp biIpICNmICNmCisgICAgICAgICAgICAgICAgIChsYW1iZGEgKG9wdCBuYW1lIGFyZyByZXN1bHQp CisgICAgICAgICAgICAgICAgICAgKGFsaXN0LWNvbnMgJ3JlYWQtZnJvbS1zdGRpbj8gI3QKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxpc3QtZGVsZXRlICdyZWFkLWZyb20tc3Rk aW4/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQp KSkpCisgICAgICAgICAob3B0aW9uICcoI1xlICJjYWJhbC1lbnZpcm9ubWVudCIpICN0ICNmCisg ICAgICAgICAgICAgICAgIChsYW1iZGEgKG9wdCBuYW1lIGFyZyByZXN1bHQpCisgICAgICAgICAg ICAgICAgICAgKGFsaXN0LWNvbnMgJ2NhYmFsLWVudmlyb25tZW50IChyZWFkL2V2YWwgYXJnKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGlzdC1kZWxldGUgJ2NhYmFsLWVudmly b25tZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1 bHQpKSkpCiAgICAgICAgICAlc3RhbmRhcmQtaW1wb3J0LW9wdGlvbnMpKQogCiAMCkBAIC04NCwy MyArMTAxLDQxIEBAIHZlcnNpb24uXG4iKSkKICAgICAgICAgICAgICAgICAgIChhbGlzdC1jb25z ICdhcmd1bWVudCBhcmcgcmVzdWx0KSkKICAgICAgICAgICAgICAgICAlZGVmYXVsdC1vcHRpb25z KSkKIAorICAoZGVmaW5lIChydW4taW1wb3J0ZXIgcGFja2FnZS1uYW1lIG9wdHMgZXJyb3ItZm4p CisgICAgKGxldCAoKHNleHAgKGhhY2thZ2UtPmd1aXgtcGFja2FnZQorICAgICAgICAgICAgICAg ICBwYWNrYWdlLW5hbWUKKyAgICAgICAgICAgICAgICAgIzppbmNsdWRlLXRlc3QtZGVwZW5kZW5j aWVzPworICAgICAgICAgICAgICAgICAoYXNzb2MtcmVmIG9wdHMgJ2luY2x1ZGUtdGVzdC1kZXBl bmRlbmNpZXM/KQorICAgICAgICAgICAgICAgICAjOnJlYWQtZnJvbS1zdGRpbj8KKyAgICAgICAg ICAgICAgICAgKGFzc29jLXJlZiBvcHRzICdyZWFkLWZyb20tc3RkaW4/KQorICAgICAgICAgICAg ICAgICAjOmNhYmFsLWVudmlyb25tZW50CisgICAgICAgICAgICAgICAgIChhc3NvYy1yZWYgb3B0 cyAnY2FiYWwtZW52aXJvbm1lbnQpKSkpCisgICAgICAodW5sZXNzIHNleHAgKGVycm9yLWZuKSkK KyAgICAgIHNleHApKQorCiAgIChsZXQqICgob3B0cyAocGFyc2Utb3B0aW9ucykpCiAgICAgICAg ICAoYXJncyAoZmlsdGVyLW1hcCAobWF0Y2gtbGFtYmRhCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCgnYXJndW1lbnQgLiB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF8gI2YpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHJldmVyc2Ugb3B0cykpKSkKLSAgICAobWF0Y2ggYXJncwotICAgICAg KChwYWNrYWdlLW5hbWUpCi0gICAgICAgKGxldCAoKHNleHAgKGhhY2thZ2UtPmd1aXgtcGFja2Fn ZQotICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLW5hbWUKLSAgICAgICAgICAgICAgICAgICAg IzppbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPwotICAgICAgICAgICAgICAgICAgICAoYXNzb2Mt cmVmIG9wdHMgJ2luY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/KSkpKQotICAgICAgICAgKHVubGVz cyBzZXhwCi0gICAgICAgICAgIChsZWF2ZSAoXyAiZmFpbGVkIHRvIGRvd25sb2FkIGNhYmFsIGZp bGUgZm9yIHBhY2thZ2UgJ35hJ34lIikKLSAgICAgICAgICAgICAgICAgIHBhY2thZ2UtbmFtZSkp Ci0gICAgICAgICBzZXhwKSkKLSAgICAgICgoKQotICAgICAgIChsZWF2ZSAoXyAidG9vIGZldyBh cmd1bWVudHN+JSIpKSkKLSAgICAgICgobWFueSAuLi4pCi0gICAgICAgKGxlYXZlIChfICJ0b28g bWFueSBhcmd1bWVudHN+JSIpKSkpKSkKKyAgICAoaWYgKGFzc29jLXJlZiBvcHRzICdyZWFkLWZy b20tc3RkaW4/KQorICAgICAgICAobWF0Y2ggYXJncworICAgICAgICAgICgoKQorICAgICAgICAg ICAocnVuLWltcG9ydGVyICJzdGRpbiIgb3B0cworICAgICAgICAgICAgICAgICAgICAgICAgIChs YW1iZGEgKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZWF2ZSAoXyAiZmFpbGVkIHRv IGltcG9ydCBjYWJhbCBmaWxlIGZyb20gJ35hJ34lIikpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBwYWNrYWdlLW5hbWUpKSkKKyAgICAgICAgICAoKG1hbnkgLi4uKQorICAgICAgICAgICAo bGVhdmUgKF8gInRvbyBtYW55IGFyZ3VtZW50c34lIikpKSkKKyAgICAgICAgKG1hdGNoIGFyZ3MK KyAgICAgICAgICAoKHBhY2thZ2UtbmFtZSkKKyAgICAgICAgICAgKHJ1bi1pbXBvcnRlciBwYWNr YWdlLW5hbWUgb3B0cworICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIChsZWF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg IChfICJmYWlsZWQgdG8gZG93bmxvYWQgY2FiYWwgZmlsZSBmb3IgcGFja2FnZSAnfmEnfiUiKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UtbmFtZSkpKQorICAgICAgICAgICgo KQorICAgICAgICAgICAobGVhdmUgKF8gInRvbyBmZXcgYXJndW1lbnRzfiUiKSkpCisgICAgICAg ICAgKChtYW55IC4uLikKKyAgICAgICAgICAgKGxlYXZlIChfICJ0b28gbWFueSBhcmd1bWVudHN+ JSIpKSkpKSkpCmRpZmYgLS1naXQgYS90ZXN0cy9oYWNrYWdlLnNjbSBiL3Rlc3RzL2hhY2thZ2Uu c2NtCmluZGV4IDIzYjg1NGMuLmYwZGM4NzUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2hhY2thZ2Uuc2Nt CisrKyBiL3Rlc3RzL2hhY2thZ2Uuc2NtCkBAIC0xNyw2ICsxNyw3IEBACiA7OzsgYWxvbmcgd2l0 aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K IAogKGRlZmluZS1tb2R1bGUgKHRlc3QtaGFja2FnZSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGlt cG9ydCBjYWJhbCkKICAgIzp1c2UtbW9kdWxlIChndWl4IGltcG9ydCBoYWNrYWdlKQogICAjOnVz ZS1tb2R1bGUgKGd1aXggdGVzdHMpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTY0KQpAQCAt MzUsNDUgKzM2LDIwIEBAIGV4ZWN1dGFibGUgY2FiYWwKICAgICBtdGwgICAgICAgID49IDIuMCAg ICAgICYmIDwgMwogIikKIAotOzsgVXNlIFRBQnMgdG8gaW5kZW50IGxpbmVzIGFuZCB0byBzZXBh cmF0ZSBrZXlzIGZyb20gdmFsdWUuCiAoZGVmaW5lIHRlc3QtY2FiYWwtMgotICAibmFtZToJZm9v Ci12ZXJzaW9uOgkxLjAuMAotaG9tZXBhZ2U6CWh0dHA6Ly90ZXN0Lm9yZwotc3lub3BzaXM6CXN5 bm9wc2lzCi1kZXNjcmlwdGlvbjoJZGVzY3JpcHRpb24KLWxpY2Vuc2U6CUJTRDMKLWV4ZWN1dGFi bGUgY2FiYWwKLQlidWlsZC1kZXBlbmRzOglIVFRQICAgICAgID49IDQwMDAuMi41ICYmIDwgNDAw MC4zLAotCQltdGwgICAgICAgID49IDIuMCAgICAgICYmIDwgMwotIikKLQotOzsgVXNlIGluZGVu dGF0aW9uIHdpdGggY29tbWEgYXMgZm91bmQsIGUuZy4sIGluICdoYWRkb2NrLWFwaScuCi0oZGVm aW5lIHRlc3QtY2FiYWwtMwogICAibmFtZTogZm9vCiB2ZXJzaW9uOiAxLjAuMAogaG9tZXBhZ2U6 IGh0dHA6Ly90ZXN0Lm9yZwogc3lub3BzaXM6IHN5bm9wc2lzCiBkZXNjcmlwdGlvbjogZGVzY3Jp cHRpb24KIGxpY2Vuc2U6IEJTRDMKLWV4ZWN1dGFibGUgY2FiYWwKLSAgICBidWlsZC1kZXBlbmRz OgotICAgICAgICBIVFRQICAgICAgID49IDQwMDAuMi41ICYmIDwgNDAwMC4zCi0gICAgICAsIG10 bCAgICAgICAgPj0gMi4wICAgICAgJiYgPCAzCitleGVjdXRhYmxlIGNhYmFsIHsKK2J1aWxkLWRl cGVuZHM6CisgIEhUVFAgICAgICAgPj0gNDAwMC4yLjUgJiYgPCA0MDAwLjMsCisgIG10bCAgICAg ICAgPj0gMi4wICAgICAgJiYgPCAzCit9CiAiKQogCi0oZGVmaW5lIHRlc3QtY29uZC0xCi0gICIo b3MoZGFyd2luKSB8fCAhKGZsYWcoZGVidWcpKSkgJiYgZmxhZyhjaXBzKSIpCi0KLShkZWZpbmUg cmVhZC1jYWJhbAotICAoQEAgKGd1aXggaW1wb3J0IGhhY2thZ2UpIHJlYWQtY2FiYWwpKQotCi0o ZGVmaW5lIGV2YWwtY2FiYWwta2V5d29yZHMKLSAgKEBAIChndWl4IGltcG9ydCBoYWNrYWdlKSBl dmFsLWNhYmFsLWtleXdvcmRzKSkKLQotKGRlZmluZSBjb25kaXRpb25hbC0+c2V4cC1saWtlCi0g IChAQCAoZ3VpeCBpbXBvcnQgaGFja2FnZSkgY29uZGl0aW9uYWwtPnNleHAtbGlrZSkpCi0KICh0 ZXN0LWJlZ2luICJoYWNrYWdlIikKIAogKGRlZmluZSAoZXZhbC10ZXN0LXdpdGgtY2FiYWwgdGVz dC1jYWJhbCkKQEAgLTExNSwxOSArOTEsNiBAQCBleGVjdXRhYmxlIGNhYmFsCiAodGVzdC1hc3Nl cnQgImhhY2thZ2UtPmd1aXgtcGFja2FnZSB0ZXN0IDIiCiAgIChldmFsLXRlc3Qtd2l0aC1jYWJh bCB0ZXN0LWNhYmFsLTIpKQogCi0odGVzdC1hc3NlcnQgImhhY2thZ2UtPmd1aXgtcGFja2FnZSB0 ZXN0IDMiCi0gIChldmFsLXRlc3Qtd2l0aC1jYWJhbCB0ZXN0LWNhYmFsLTMpKQotCi0odGVzdC1h c3NlcnQgImNvbmRpdGlvbmFsLT5zZXhwLWxpa2UiCi0gIChtYXRjaAotICAgIChldmFsLWNhYmFs LWtleXdvcmRzCi0gICAgIChjb25kaXRpb25hbC0+c2V4cC1saWtlIHRlc3QtY29uZC0xKQotICAg ICAnKCgiZGVidWciIC4gIkZhbHNlIikpKQotICAgICgoJ2FuZCAoJ29yICgnc3RyaW5nLW1hdGNo ICJkYXJ3aW4iICgnJWN1cnJlbnQtc3lzdGVtKSkgKCdub3QgJyNmKSkgJyN0KQotICAgICAjdCkK LSAgICAoeAotICAgICAocGsgJ2ZhaWwgeCAjZikpKSkKLQogKHRlc3QtZW5kICJoYWNrYWdlIikK IAogDAotLSAKMi4yLjEKCg== --001a113f9212725a080517765c22--