From owner-freebsd-cvsweb@FreeBSD.ORG Mon Aug 11 11:01:18 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6599F37B401 for ; Mon, 11 Aug 2003 11:01:18 -0700 (PDT) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id D519443F85 for ; Mon, 11 Aug 2003 11:01:13 -0700 (PDT) (envelope-from owner-bugmaster@freebsd.org) Received: from freefall.freebsd.org (peter@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.9/8.12.9) with ESMTP id h7BI1DUp080729 for ; Mon, 11 Aug 2003 11:01:13 -0700 (PDT) (envelope-from owner-bugmaster@freebsd.org) Received: (from peter@localhost) by freefall.freebsd.org (8.12.9/8.12.9/Submit) id h7BI1CYp080723 for freebsd-cvsweb@freebsd.org; Mon, 11 Aug 2003 11:01:12 -0700 (PDT) Date: Mon, 11 Aug 2003 11:01:12 -0700 (PDT) Message-Id: <200308111801.h7BI1CYp080723@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: peter set sender to owner-bugmaster@freebsd.org using -f From: FreeBSD bugmaster To: freebsd-cvsweb@FreeBSD.org Subject: Current problem reports assigned to you X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Aug 2003 18:01:18 -0000 Current FreeBSD problem reports Critical problems Serious problems Non-critical problems S Submitted Tracker Resp. Description ------------------------------------------------------------------------------- o [2003/05/17] ports/52386 cvsweb [patch] devel/cvsweb and perl5.8 1 problem total. From owner-freebsd-cvsweb@FreeBSD.ORG Tue Aug 12 03:08:02 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 341A637B401 for ; Tue, 12 Aug 2003 03:08:02 -0700 (PDT) Received: from wehq.winbond.com.tw (wehq.winbond.com.tw [202.39.229.15]) by mx1.FreeBSD.org (Postfix) with ESMTP id 1D71F43FBD for ; Tue, 12 Aug 2003 03:07:59 -0700 (PDT) (envelope-from XHChen@Winbond.com.tw) Received: from wemlg.winbond.com.tw (wemlg [10.2.6.199]) by wehq.winbond.com.tw (8.12.6/8.12.6) with ESMTP id h7CA7utj010402 for ; Tue, 12 Aug 2003 18:07:56 +0800 (CST) Received: from WEHQIMC02.winbond.com.tw (wehqimc02 [10.2.6.99]) by wemlg.winbond.com.tw (8.12.6/8.12.6) with ESMTP id h7CA7JCo027601 for ; Tue, 12 Aug 2003 18:07:26 +0800 (CST) Received: from WEHQIMC01.winbond.com.tw ([192.168.6.152]) by WEHQIMC02.winbond.com.tw with Microsoft SMTPSVC(5.0.2195.5329); Tue, 12 Aug 2003 18:05:50 +0800 Received: from weshml02.winbond.com.tw ([10.130.10.34]) by WEHQIMC01.winbond.com.tw with Microsoft SMTPSVC(5.0.2195.5329); Tue, 12 Aug 2003 18:05:44 +0800 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C360B9.49C45A42" X-MimeOLE: Produced By Microsoft Exchange V6.0.5762.3 Date: Tue, 12 Aug 2003 18:05:41 +0800 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: Graph of revisions for cvsweb.cgi Thread-Index: AcNguXRG6JCq/rGGSPOVilvjehLmKQ== From: "PC32 XHChen" To: X-OriginalArrivalTime: 12 Aug 2003 10:05:44.0049 (UTC) FILETIME=[4B074610:01C360B9] X-Content-Filtered-By: Mailman/MimeDel 2.1.1 Subject: Graph of revisions for cvsweb.cgi X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Aug 2003 10:08:02 -0000 This is a multi-part message in MIME format. ------_=_NextPart_001_01C360B9.49C45A42 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 RGVhciBhbGw6DQoJSSBtb2RpZmllZCBjdnN3ZWIuY2dpIGZvciBzdXBwb3J0aW5nICJncmFwaCBz ZWxlY3Rpb24iIGFzIHdoYXQncyBpbiB3aW5jdnMuDQoJVGhhbmtzIGZvciB0cnlpbmcgaXQgIQ0K DQpCZXN0IHJlZ2FyZHMuDQp4aGNoZW5Ad2luYm9uZC5jb20udHcNCigyMS02MjM2NTk5OS0xODEx KQ0KQ2hlbiBYaWFvaHVpDQo= Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1UaGUgcHJpdmlsZWdlZCBjb25maWRl bnRpYWwgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgZW1haWwgaXMgaW50ZW5kZWQgZm9y IHVzZSBvbmx5IGJ5IHRoZSBhZGRyZXNzZWVzIGFzIGluZGljYXRlZCBieSB0aGUgb3JpZ2luYWwg YXV0aG9yIG9mIHRoaXMgZW1haWwuIElmIHlvdSBhcmUgbm90IHRoZSBhZGRyZXNzZWUgaW5kaWNh dGVkIGluIHRoaXMgZW1haWwgb3IgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZGVsaXZlcnkgb2Yg dGhlIGVtYWlsIHRvIHN1Y2ggcGVyc29uLCBwbGVhc2Uga2luZGx5IHJlcGx5IHRoZSBzZW5kZXIg aW5kaWNhdGluZyBhY2NvcmRpbmdseSBhbmQgZGVsZXRlIGFsbCBjb3BpZXMgb2YgaXQgZnJvbSB5 b3VyIGNvbXB1dGVyIGFuZCBuZXR3b3JrIHNlcnZlciBpbW1lZGlhdGVseS4gV2UgdGhhbmsgeW91 IGZvciB5b3VyIGNvb3BlcmF0aW9uLiBJdCBpcyBhZHZpc2FibGUgdGhhdCBhbnkgdW5hdXRob3Jp emVkIHVzZSBvZiBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgV2luYm9uZCBpcyBzdHJpY3Rs eSBwcm9oaWJpdGVkOyBhbmQgYW55IGluZm9ybWF0aW9uIGluIHRoaXMgZW1haWwgdGhhdCBkb2Vz IG5vdCByZWxhdGUgdG8gdGhlIG9mZmljaWFsIGJ1c2luZXNzIG9mIFdpbmJvbmQgc2hhbGwgYmUg ZGVlbWVkIGFzIG5laXRoZXIgZ2l2ZW4gbm9yIGVuZG9yc2VkIGJ5IFdpbmJvbmQuPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PUlmIHlvdXIgY29tcHV0ZXIgaXMgdW5hYmxlIHRvIGRl Y29kZSBDaGluZXNlIGZvbnQsIHBsZWFzZSBpZ25vcmUgdGhlIGZvbGxvd2luZyBtZXNzYWdlLiBU aGV5IGVzc2VudGlhbGx5IHJlcGVhdCB0aGUmbmJzcDsgRW5nbGlzaCBzdGF0ZW1lbnQgYWJvdmUu pburSKXzpLqp0qd0tdioublxpGyqurBdsqOpyr73sUupyrjqsFQsILbIscLFdq3stW+rSKRIq/yp d6SnpqyrSKRIqPq+XKSnpc4uILCyqM+xeqjDq0SzUav8qXekp6asq0ikSKnOpl2l9KbzreymXaZi pby4Z7HCxXaqurGhp86kp6RVpqyo7KW7q0il8ywgvdCxeqdpqr6t7LVvq0ikSKjDpd+nWbFOq0il 87FxuXG4o7tQuvS49Kb4qkG+uaSkpKmlSK74sKMuILnvqfOxeqq6plinQCwgp9qtzKX9prmtUMHC LiCvU6a5tKO/9CwgpfSm86W8uGexwsV2vtWm26jPpc612Ki5uXGkbKq6vvexS7jqsFSquqbmrLCs T7NRxFmu5rhUpO6qui4gq0il87tQtdioublxpGzA57d+tUzD9qSnpLquZSyko7FvtfissLXYqLm5 caRspKel37P1qc63TqijLg0K ------_=_NextPart_001_01C360B9.49C45A42 Content-Type: application/octet-stream; name="cvsweb.cgi" Content-Transfer-Encoding: base64 Content-Description: cvsweb.cgi Content-Disposition: attachment; filename="cvsweb.cgi" IyEvdXNyL2Jpbi9wZXJsIC13VAojCiMgY3Zzd2ViIC0gYSBDR0kgaW50ZXJmYWNlIHRvIENWUyB0 cmVlcy4KIwojIFdyaXR0ZW4gaW4gdGhlaXIgc3BhcmUgdGltZSBieQojICAgICAgICAgICAgIEJp bGwgRmVubmVyICAgICAgICAgIDxmZW5uZXJARnJlZUJTRC5vcmc+ICAgKG9yaWdpbmFsIHdvcmsp CiMgZXh0ZW5kZWQgYnkgSGVubmVyIFplbGxlciAgICAgICAgPHplbGxlckB0aGluay5kZT4sCiMg ICAgICAgICAgICAgSGVucmlrIE5vcmRzdHJvbSAgICAgPGhub0BoZW0ucGFzc2FnZW4uc2U+CiMg ICAgICAgICAgICAgS2VuIENvYXIgICAgICAgICAgICAgPGNvYXJAQXBhY2hlLk9yZz4KIyAgICAg ICAgICAgICBEaWNrIEJhbGFza2EgICAgICAgICA8ZGlja0BidWNrb3NvZnQuY29tPgojICAgICAg ICAgICAgIEFraW5vcmkgTVVTSEEgICAgICAgIDxrbnVARnJlZUJTRC5vcmc+CiMgICAgICAgICAg ICAgSmVucy1Vd2UgTWFnZXIgICAgICAgPGp1bUBoZWxpb3MuZGU+CiMgICAgICAgICAgICAgVmls bGUgU2t5dHTkICAgICAgICAgPHNjb3BARnJlZUJTRC5vcmc+CiMgICAgICAgICAgICAgVmFzc2ls aWkgS2hhY2hhdHVyb3YgPHZhc3NpbGlpQHRhcnVuei5vcmc+CiMKIyBCYXNlZCBvbjoKIyAqIEJp bGwgRmVubmVycyBjdnN3ZWIuY2dpIHJldmlzaW9uIDEuMjggYXZhaWxhYmxlIGZyb206CiMgICBo dHRwOi8vd3d3LkZyZWVCU0Qub3JnL2NnaS9jdnN3ZWIuY2dpL3d3dy9lbi9jZ2kvY3Zzd2ViLmNn aQojCiMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTggQmlsbCBGZW5uZXIKIyAgICAgICAgICAgKGMp IDE5OTgtMTk5OSBIZW5uZXIgWmVsbGVyCiMgICAgICAgICAgIChjKSAxOTk5ICAgICAgSGVucmlr IE5vcmRzdHJvbQojICAgICAgICAgICAoYykgMjAwMC0yMDAyIEFraW5vcmkgTVVTSEEKIyAgICAg ICAgICAgKGMpIDIwMDIgICAgICBWaWxsZSBTa3l0dOQKIyBBbGwgcmlnaHRzIHJlc2VydmVkLgoj CiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiMgYXJlIG1ldDoKIyAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgojCiMgVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ UycnIEFORAojIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQojIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCiMgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAojIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCiMgT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiMg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULCBTVFJJQ1QKIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiMgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgojIFNV Q0ggREFNQUdFLgojCiMgJEZyZWVCU0Q6IHByb2plY3RzL2N2c3dlYi9jdnN3ZWIuY2dpLHYgMS4x MTkuMi42IDIwMDIvMDkvMjYgMjA6NTY6MDUgc2NvcCBFeHAgJAojICRJZDogY3Zzd2ViLmNnaSx2 IDEuMTEyIDIwMDEvMDcvMjQgMTM6MDM6MTYgaHplbGxlciBFeHAgJAojICRJZGFlbW9uczogL2hv bWUvY3ZzL2N2c3dlYi9jdnN3ZWIuY2dpLHYgMS44NCAyMDAxLzEwLzA3IDIwOjUwOjEwIGtudSBF eHAgJAojCiMjIwoKcmVxdWlyZSA1LjAwMDsKCnVzZSBzdHJpY3Q7Cgp1c2UgdmFycyBxdyAoCiAg ICAkY3Zzd2ViX3JldmlzaW9uCiAgICAkbXlkaXIgJHVuYW1lICRjb25maWcgJGFsbG93X3ZlcnNp b25fc2VsZWN0ICR2ZXJib3NlCiAgICBAQ1ZTcmVwb3NpdG9yaWVzIEBDVlNST09UICVDVlNST09U ICVDVlNST09UZGVzY3IKICAgICVNSVJST1JTICVERUZBVUxUVkFMVUUgJUlDT05TICVNVFlQRVMK ICAgIEBESUZGVFlQRVMgJURJRkZUWVBFUyBATE9HU09SVEtFWVMgJUxPR1NPUlRLRVlTCiAgICAl YWxsdGFncyBAdGFiY29sb3JzICVmaWxlaW5mbyAldGFncyBAYnJhbmNobmFtZXMgJW5hbWVwcmlu dGVkCiAgICAlc3ltcmV2ICVyZXZzeW0gQGFsbHJldmlzaW9ucyAlZGF0ZSAlYXV0aG9yIEByZXZk aXNwbGF5b3JkZXIKICAgIEByZXZpc2lvbnMgJXN0YXRlICVkaWZmbGluZXMgJWxvZyAlYnJhbmNo cG9pbnQgQHJldm9yZGVyCiAgICAkcHJjZ2kgQHByY2F0ZWdvcmllcyAkcmVfcHJjYXRlZ29yaWVz ICRwcmtleXdvcmQgJHJlX3Bya2V5d29yZCAkbWFuY2dpCiAgICAkY2hlY2tvdXRNYWdpYyAkZG9D aGVja291dCAkc2NyaXB0bmFtZSAkc2NyaXB0d2hlcmUKICAgICR3aGVyZSAkcGF0aGluZm8gJEJy b3dzZXIgJG5vZmlsZWxpbmtzICRtYXljb21wcmVzcwogICAgQHN0aWNreXZhcnMgQHVuc2FmZXZh cnMKICAgICVmdW5jbGluZV9yZWdleHAgJGlzX21vZF9wZXJsCiAgICAkaXNfbGlua3MgJGlzX2x5 bnggJGlzX3czbSAkaXNfbXNpZSAkaXNfbW96aWxsYTMgJGlzX3RleHRiYXNlZAogICAgJWlucHV0 ICRxdWVyeSAkYmFyZXF1ZXJ5ICRzb3J0YnkgJGJ5ZGF0ZSAkYnlyZXYgJGJ5YXV0aG9yCiAgICAk Ynlsb2cgJGJ5ZmlsZSAkZGVmYXVsdERpZmZUeXBlICRsb2dzb3J0ICRjdnN0cmVlICRjdnNyb290 CiAgICAkbWltZXR5cGUgJGNoYXJzZXQgJG91dHB1dF9maWx0ZXIgJGRlZmF1bHRUZXh0UGxhaW4g JGRlZmF1bHRWaWV3YWJsZQogICAgJGNvbW1hbmRfcGF0aCAlQ01EICRhbGxvd19jb21wcmVzcwog ICAgJGJhY2tpY29uICRkaXJpY29uICRmaWxlaWNvbgogICAgJGZ1bGxuYW1lICRuZXduYW1lICRj dnN0cmVlZGVmYXVsdAogICAgJGJvZHlfdGFnICRib2R5X3RhZ19mb3Jfc3JjICRsb2dvICRkZWZh dWx0dGl0bGUgJGFkZHJlc3MKICAgICRsb25nX2ludHJvICRzaG9ydF9pbnN0cnVjdGlvbiAkc2hv cnRMb2dMZW4KICAgICRzaG93X2F1dGhvciAkZGlydGFibGUgJHRhYmxlcGFkZGluZyAkY29sdW1u SGVhZGVyQ29sb3JEZWZhdWx0CiAgICAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgJGhyX2JyZWFr YWJsZSAkc2hvd2Z1bmMgJGhyX2lnbndoaXRlCiAgICAkaHJfaWdua2V5c3Vic3QgJGRpZmZjb2xv ckhlYWRpbmcgJGRpZmZjb2xvckVtcHR5ICRkaWZmY29sb3JSZW1vdmUKICAgICRkaWZmY29sb3JD aGFuZ2UgJGRpZmZjb2xvckFkZCAkZGlmZmNvbG9yRGFya0NoYW5nZSAkZGlmZmZvbnRmYWNlCiAg ICAkZGlmZmZvbnRzaXplICRpbnB1dFRleHRTaXplICRtaW1lX3R5cGVzCiAgICAkYWxsb3dfYW5u b3RhdGUgJGFsbG93X21hcmt1cAogICAgJGFsbG93X2xvZ19leHRyYSAkYWxsb3dfZGlyX2V4dHJh ICRhbGxvd19zb3VyY2VfZXh0cmEKICAgICR1c2VfamF2YV9zY3JpcHQgJG9wZW5fZXh0ZXJuX3dp bmRvdwogICAgJGV4dGVybl93aW5kb3dfd2lkdGggJGV4dGVybl93aW5kb3dfaGVpZ2h0ICRlZGl0 X29wdGlvbl9mb3JtCiAgICAkc2hvd19zdWJkaXJfbGFzdG1vZCAkc2hvd19sb2dfaW5fbWFya3Vw ICRwcmVmb3JtYXRfaW5fbWFya3VwICR2CiAgICAkbmF2aWdhdGlvbkhlYWRlckNvbG9yICR0YWJs ZUJvcmRlckNvbG9yICRtYXJrdXBMb2dDb2xvcgogICAgJHRhYnN0b3AgJHN0YXRlICRhbm5UYWJs ZSAkc2VsICRjdXJicmFuY2ggQEhpZGVNb2R1bGVzIEBGb3JiaWRkZW5GaWxlcwogICAgJG1vZHVs ZSAkdXNlX2Rlc2NyaXB0aW9ucyAlZGVzY3JpcHRpb25zIEBteXR6ICRkd2hlcmUgJG1vZGRhdGUK ICAgICR1c2VfbW9kZGF0ZSAkaGFzX3psaWIgJGd6aXBfb3BlbgogICAgJGFsbG93X3RhciBAdGFy X29wdGlvbnMgQGd6aXBfb3B0aW9ucyBAemlwX29wdGlvbnMgQGN2c19vcHRpb25zCiAgICBAYW5u b3RhdGVfb3B0aW9ucyAkTE9HX0ZJTEVTRVBBUkFUT1IgJExPR19SRVZTRVBBUkFUT1IKICAgICR0 bXBkaXIgJEhUTUxfRE9DVFlQRSAkSFRNTF9NRVRBCik7CgpzdWIgcHJpbnREaWZmU2VsZWN0KCQp OwpzdWIgcHJpbnREaWZmTGlua3MoJCQpOwpzdWIgcHJpbnRMb2dTb3J0U2VsZWN0KCQpOwpzdWIg ZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQCk7CnN1YiBodG1saWZ5X3N1YigmJCk7CnN1YiBodG1s aWZ5KCQ7JCk7CnN1YiBzcGFjZWRIdG1sVGV4dCgkOyQpOwpzdWIgbGluaygkJCk7CnN1YiByZXZj bXAoJCQpOwpzdWIgZmF0YWwoJCRAKTsKc3ViIHJlZGlyZWN0KCQpOwpzdWIgc2FmZWdsb2IoJCk7 CnN1YiBzZWFyY2hfcGF0aCgkKTsKc3ViIGdldE1pbWVUeXBlRnJvbVN1ZmZpeCgkKTsKc3ViIGhl YWQoJDskKTsKc3ViIHNjYW5fZGlyZWN0aXZlcyhAKTsKc3ViIG9wZW5PdXRwdXRGaWx0ZXIoKTsK c3ViIGRvQW5ub3RhdGUoJCQpOwpzdWIgZG9DaGVja291dCgkJCk7CnN1YiBjdnN3ZWJNYXJrdXAo JCQkKTsKc3ViIHZpZXdhYmxlKCQpOwpzdWIgZG9EaWZmKCQkJCQkJCk7CnN1YiBnZXREaXJMb2dz KCQkQCk7CnN1YiByZWFkTG9nKCQ7JCk7CnN1YiBwcmludExvZygkOyQpOwpzdWIgZG9Mb2coJCk7 CnN1YiBkb0dyYXBoKCQpOyN4aGNoZW4Kc3ViIGZsdXNoX2RpZmZfcm93cygkJCQkKTsKc3ViIGh1 bWFuX3JlYWRhYmxlX2RpZmYoJCk7CnN1YiBuYXZpZ2F0ZUhlYWRlcigkJCQkJCk7CnN1YiBwbHVy YWxfd3JpdGUoJCQpOwpzdWIgcmVhZGFibGVUaW1lKCQkKTsKc3ViIGNsaWNrYWJsZVBhdGgoJCQp OwpzdWIgY2hvb3NlQ1ZTUm9vdCgpOwpzdWIgY2hvb3NlTWlycm9yKCk7CnN1YiBmaWxlU29ydENt cCgpOwpzdWIgZG93bmxvYWRfdXJsKCQkOyQpOwpzdWIgZG93bmxvYWRfbGluaygkJCQ7JCk7CnN1 YiB0b2dnbGVRdWVyeSgkJCk7CnN1YiB1cmxlbmNvZGUoJCk7CnN1YiBodG1sanMoJCk7I3hoY2hl bgpzdWIgaHRtbHF1b3RlKCQpOwpzdWIgaHRtbHVucXVvdGUoJCk7CnN1YiBocmVmcXVvdGUoJCk7 CnN1YiBodHRwX2hlYWRlcig7JCk7CnN1YiBodG1sX2hlYWRlcigkKTsKc3ViIGh0bWxfZm9vdGVy KCk7CnN1YiBsaW5rX3RhZ3MoJCk7CnN1YiBmb3JiaWRkZW5fZmlsZSgkKTsKc3ViIGZvcmJpZGRl bl9tb2R1bGUoJCk7CgojIyMjIyBTdGFydCBvZiBDb25maWd1cmF0aW9uIEFyZWEgIyMjIyMjIyMK ZGVsZXRlICRFTlZ7UEFUSH07CgokY3Zzd2ViX3JldmlzaW9uID0gJzIuMC42JzsKCnVzZSBGaWxl OjpCYXNlbmFtZSAoKTsKCigkbXlkaXIpID0gKEZpbGU6OkJhc2VuYW1lOjpkaXJuYW1lKCQwKSA9 fiAvKC4qKS8pOyAgICAjIHVudGFpbnQKCiMgPT0gRURJVCB0aGlzID09CiMgTG9jYXRpb25zIHRv IHNlYXJjaCBmb3IgdXNlciBjb25maWd1cmF0aW9uLCBpbiBvcmRlcjoKZm9yICgiJG15ZGlyL2N2 c3dlYi5jb25mIiwgJy91c3IvbG9jYWwvZXRjL2N2c3dlYi9jdnN3ZWIuY29uZicpIHsKCWlmIChk ZWZpbmVkKCRfKSAmJiAtciAkXykgewoJCSRjb25maWcgPSAkXzsKCQlsYXN0OwoJfQp9CgojID09 IENvbmZpZ3VyYXRpb24gZGVmYXVsdHMgPT0KIyBEZWZhdWx0cyBmb3IgY29uZmlndXJhdGlvbiB2 YXJpYWJsZXMgdGhhdCBzaG91bGRuJ3QgbmVlZAojIHRvIGJlIGNvbmZpZ3VyZWQuLgokYWxsb3df dmVyc2lvbl9zZWxlY3QgPSAxOwokYWxsb3dfbG9nX2V4dHJhID0gMTsKCiMjIyMjIEVuZCBvZiBD b25maWd1cmF0aW9uIEFyZWEgICAjIyMjIyMjIwoKIyMjIyMjIyMgQ29uZmlndXJhdGlvbiB2YXJp YWJsZXMgIyMjIyMjIyMjCiMgVGhlc2UgYXJlIGRlZmluZWQgdG8gYWxsb3cgY2hlY2tpbmcgd2l0 aCBwZXJsIC1jdwpAQ1ZTcmVwb3NpdG9yaWVzID0gQENWU1JPT1QgPSAlQ1ZTUk9PVCA9ICVNSVJS T1JTID0gJURFRkFVTFRWQUxVRSA9ICVJQ09OUyA9CiAgICAlTVRZUEVTID0gJXRhZ3MgPSAlYWxs dGFncyA9IEB0YWJjb2xvcnMgPSAlZmlsZWluZm8gPSAoKTsKJGN2c3RyZWVkZWZhdWx0ID0gJGJv ZHlfdGFnID0gJGJvZHlfdGFnX2Zvcl9zcmMgPSAkbG9nbyA9ICRkZWZhdWx0dGl0bGUgPQogICAg JGFkZHJlc3MgPSAkbG9uZ19pbnRybyA9ICRzaG9ydF9pbnN0cnVjdGlvbiA9ICRzaG9ydExvZ0xl biA9ICRzaG93X2F1dGhvciA9CiAgICAkZGlydGFibGUgPSAkdGFibGVwYWRkaW5nID0gJGNvbHVt bkhlYWRlckNvbG9yRGVmYXVsdCA9CiAgICAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgPSAkaHJf YnJlYWthYmxlID0gJHNob3dmdW5jID0gJGhyX2lnbndoaXRlID0KICAgICRocl9pZ25rZXlzdWJz dCA9ICRkaWZmY29sb3JIZWFkaW5nID0gJGRpZmZjb2xvckVtcHR5ID0gJGRpZmZjb2xvclJlbW92 ZSA9CiAgICAkZGlmZmNvbG9yQ2hhbmdlID0gJGRpZmZjb2xvckFkZCAgPSAkZGlmZmNvbG9yRGFy a0NoYW5nZSA9ICRkaWZmZm9udGZhY2UgICA9CiAgICAkZGlmZmZvbnRzaXplICAgID0gJGlucHV0 VGV4dFNpemUgPSAkbWltZV90eXBlcyAgICAgICAgICA9ICRhbGxvd19hbm5vdGF0ZSA9CiAgICAk YWxsb3dfbWFya3VwICAgICAgICA9ICR1c2VfamF2YV9zY3JpcHQgICAgICA9ICRvcGVuX2V4dGVy bl93aW5kb3cgPQogICAgJGV4dGVybl93aW5kb3dfd2lkdGggPSAkZXh0ZXJuX3dpbmRvd19oZWln aHQgPSAkZWRpdF9vcHRpb25fZm9ybSAgID0KICAgICRzaG93X3N1YmRpcl9sYXN0bW9kID0gJHNo b3dfbG9nX2luX21hcmt1cCA9ICR2ID0gJG5hdmlnYXRpb25IZWFkZXJDb2xvciA9CiAgICAkdGFi bGVCb3JkZXJDb2xvciA9ICRtYXJrdXBMb2dDb2xvciA9ICR0YWJzdG9wID0gJHVzZV9tb2RkYXRl ID0gJG1vZGRhdGUgPQogICAgJGd6aXBfb3BlbiA9ICRIVE1MX0RPQ1RZUEUgPSAkSFRNTF9NRVRB ID0gdW5kZWY7CiR0bXBkaXIgPSBkZWZpbmVkKCRFTlZ7VE1QRElSfSkgPyAkRU5We1RNUERJUn0g OiAiL3Zhci90bXAiOwoKJExPR19GSUxFU0VQQVJBVE9SID0gcS9ePXs3N30kLzsKJExPR19SRVZT RVBBUkFUT1IgID0gcS9eLXsyOH0kLzsKCkBESUZGVFlQRVMgPSBxdyhoIEggdSBjIHMpOwpARElG RlRZUEVTe0BESUZGVFlQRVN9ID0gKAoJewoJCSdkZXNjcicgICA9PiAnY29sb3JlZCcsCgkJJ29w dHMnICAgID0+IFsnLXUnXSwKCQknY29sb3JlZCcgPT4gMSwKCX0sCgl7CgkJJ2Rlc2NyJyAgID0+ ICdsb25nIGNvbG9yZWQnLAoJCSdvcHRzJyAgICA9PiBbJy0tdW5pZmllZD0xNSddLAoJCSdjb2xv cmVkJyA9PiAxLAoJfSwKCXsKCQknZGVzY3InICAgPT4gJ3VuaWZpZWQnLAoJCSdvcHRzJyAgICA9 PiBbJy11J10sCgkJJ2NvbG9yZWQnID0+IDAsCgl9LAoJewoJCSdkZXNjcicgICA9PiAnY29udGV4 dCcsCgkJJ29wdHMnICAgID0+IFsnLWMnXSwKCQknY29sb3JlZCcgPT4gMCwKCX0sCgl7CgkJJ2Rl c2NyJyAgID0+ICdzaWRlIGJ5IHNpZGUnLAoJCSdvcHRzJyAgICA9PiBbJy0tc2lkZS1ieS1zaWRl JywgJy0td2lkdGg9MTY0J10sCgkJJ2NvbG9yZWQnID0+IDAsCgl9LAopOwoKQExPR1NPUlRLRVlT ID0gcXcoY3ZzIGRhdGUgcmV2KTsKQExPR1NPUlRLRVlTe0BMT0dTT1JUS0VZU30gPSAoCgl7CgkJ J2Rlc2NyJyA9PiAnTm90IHNvcnRlZCcsCgl9LAoJewoJCSdkZXNjcicgPT4gJ0NvbW1pdCBkYXRl JywKCX0sCgl7CgkJJ2Rlc2NyJyA9PiAnUmV2aXNpb24nLAoJfSwKKTsKCiRIVE1MX0RPQ1RZUEUg PQogICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0 aW9uYWwvL0VOIj4nOwoKJEhUTUxfTUVUQSA9IDw8RU9NOwo8bWV0YSBuYW1lPSJyb2JvdHMiIGNv bnRlbnQ9Im5vZm9sbG93Ij4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGcmVlQlNE LUNWU3dlYiAkY3Zzd2ViX3JldmlzaW9uIj4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3Jp cHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0Ij4KPG1ldGEgaHR0cC1lcXVpdj0iQ29u dGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+CkVPTQoKIyMjIyMgRW5kIG9mIGNv bmZpZ3VyYXRpb24gdmFyaWFibGVzICMjIyMjCgp1c2UgVGltZTo6TG9jYWwgKCk7CnVzZSBJUEM6 Ok9wZW4yIHF3KG9wZW4yKTsKCiMgQ2hlY2sgaWYgdGhlIHpsaWIgQyBsaWJyYXJ5IGludGVyZmFj ZSBpcyBpbnN0YWxsZWQsIGFuZCBpZiB5ZXMKIyB3ZSBjYW4gYXZvaWQgdXNpbmcgdGhlIGV4dHJh IGd6aXAgcHJvY2Vzcy4KZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWI7IH07CiRoYXNfemxp YiA9ICEkQDsKCiR2ZXJib3NlICAgICAgID0gJHY7CiRjaGVja291dE1hZ2ljID0gIn5jaGVja291 dH4iOwokcGF0aGluZm8gICAgICA9IGRlZmluZWQoJEVOVntQQVRIX0lORk99KSA/ICRFTlZ7UEFU SF9JTkZPfSA6ICcnOwokd2hlcmUgICAgICAgICA9ICRwYXRoaW5mbzsKJGRvQ2hlY2tvdXQgPSAo JHdoZXJlID1+IG18Xi8kY2hlY2tvdXRNYWdpYy98KTsKJHdoZXJlID1+IHN8Xi8kY2hlY2tvdXRN YWdpYy98L3w7CiR3aGVyZSA9fiBzfF4vfHw7CiRzY3JpcHRuYW1lID0gZGVmaW5lZCgkRU5We1ND UklQVF9OQU1FfSkgPyAkRU5We1NDUklQVF9OQU1FfSA6ICcnOwokc2NyaXB0bmFtZSA9fiBzfF4v KnwvfDsKCiMgTGV0J3Mgd29ya2Fyb3VuZCB0aHR0cGQncyBzdHVwaWRpdHkuLgppZiAoJHNjcmlw dG5hbWUgPX4gbXwvJHwpIHsKCSRwYXRoaW5mbyAuPSAnLyc7CglteSAkcmUgPSBxdW90ZW1ldGEg JHBhdGhpbmZvOwoJJHNjcmlwdG5hbWUgPX4gcy8kcmUkLy87Cn0KCiRzY3JpcHR3aGVyZSA9ICRz Y3JpcHRuYW1lOwokc2NyaXB0d2hlcmUgLj0gJy8nIC4gdXJsZW5jb2RlKCR3aGVyZSk7CiR3aGVy ZSA9ICcvJyBpZiAoJHdoZXJlIGVxICcnKTsKCiRpc19tb2RfcGVybCA9IGRlZmluZWQoJEVOVntN T0RfUEVSTH0pOwoKIyBpbiBseW54LCBpdCBpdCB2ZXJ5IGFubm95aW5nIHRvIGhhdmUgdHdvIGxp bmtzCiMgcGVyIGZpbGUsIHNvIGRpc2FibGUgdGhlIGxpbmsgYXQgdGhlIGljb24KIyBpbiB0aGlz IGNhc2U6CiRCcm93c2VyID0gJEVOVntIVFRQX1VTRVJfQUdFTlR9IHx8ICcnOwokaXNfbGlua3Mg ICAgPSAoJEJyb3dzZXIgPX4gbWBeTGlua3MgYCk7CiRpc19seW54ICAgICA9ICgkQnJvd3NlciA9 fiBtYF5MeW54L2BpKTsKJGlzX3czbSAgICAgID0gKCRCcm93c2VyID1+IG1gXnczbS9gaSk7CiRp c19tc2llICAgICA9ICgkQnJvd3NlciA9fiBtYE1TSUVgKTsKJGlzX21vemlsbGEzID0gKCRCcm93 c2VyID1+IG1gXk1vemlsbGEvWzMtOV1gKTsKCiRpc190ZXh0YmFzZWQgPSAoJGlzX2xpbmtzIHx8 ICRpc19seW54IHx8ICRpc193M20pOwoKJG5vZmlsZWxpbmtzID0gJGlzX3RleHRiYXNlZDsKCiMg bmV3ZXIgYnJvd3NlcnMgYWNjZXB0IGd6aXAgY29udGVudCBlbmNvZGluZwojIGFuZCBzdGF0ZSB0 aGlzIGluIGEgaGVhZGVyCiMgKG5ldHNjYXBlIGRpZCBhbHdheXMgYnV0IGRpZG4ndCBzdGF0ZSBp dCkKIyBJdCBoYXMgYmVlbiByZXBvcnRlZCB0aGF0IHRoZXNlCiMgIGJyYWluZGFtYWdlZCBNUy1J bnRlcm5ldCBFeHBsb2RlcnMgY2xhaW0gdGhhdCB0aGV5CiMgYWNjZXB0IGd6aXAgLi4gYnV0IGRv bid0IGluIGZhY3QgYW5kCiMgZGlzcGxheSBnYXJiYWdlIHRoZW4gOi0vCiMgVHVybiBvZmYgZ3pp cCBpZiBydW5uaW5nIHVuZGVyIG1vZF9wZXJsIGFuZCBubyB6bGliIGlzIGF2YWlsYWJsZSwKIyBw aXBpbmcgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCBpbnNpZGUgdGhlIHNlcnZlci4KJG1heWNv bXByZXNzID0KICAgICgoKGRlZmluZWQoJEVOVntIVFRQX0FDQ0VQVF9FTkNPRElOR30pCiAgICAm JiAkRU5We0hUVFBfQUNDRVBUX0VOQ09ESU5HfSA9fiBtYGd6aXBgKSB8fCAkaXNfbW96aWxsYTMp ICYmICEkaXNfbXNpZQogICAgJiYgISgkaXNfbW9kX3BlcmwgJiYgISRoYXNfemxpYikpOwoKIyBw dXQgaGVyZSB0aGUgdmFyaWFibGVzIHdlIG5lZWQgaW4gb3JkZXIKIyB0byBob2xkIG91ciBzdGF0 ZSAtIHRoZXkgd2lsbCBiZSBhZGRlZCAod2l0aAojIHRoZWlyIGN1cnJlbnQgdmFsdWUpIHRvIGFu eSBsaW5rL3F1ZXJ5IHN0cmluZwojIHlvdSBjb25zdHJ1Y3QKQHN0aWNreXZhcnMgPSBxdyhjdnNy b290IGhpZGVhdHRpYyBzb3J0YnkgbG9nc29ydCBmIG9ubHlfd2l0aF90YWcpOwpAdW5zYWZldmFy cyA9IHF3KGxvZ3NvcnQgb25seV93aXRoX3RhZyByMSByMiByZXYgc29ydGJ5IHRyMSB0cjIpOwoK aWYgKC1mICRjb25maWcpIHsKCWRvICIkY29uZmlnIiBvciBmYXRhbCgiNTAwIEludGVybmFsIEVy cm9yIiwKCQkJICAgICAgJ0Vycm9yIGluIGxvYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlOiAlczxi cj48YnI+JXM8YnI+JywKCQkJICAgICAgJGNvbmZpZywgJEApOwp9IGVsc2UgewoJZmF0YWwoIjUw MCBJbnRlcm5hbCBFcnJvciIsCgkgICAgICAnQ29uZmlndXJhdGlvbiBub3QgZm91bmQuICBTZXQg dGhlIHZhcmlhYmxlIDxjb2RlPiRjb25maWc8L2NvZGU+IGluIGN2c3dlYi5jZ2kgdG8geW91ciA8 Yj5jdnN3ZWIuY29uZjwvYj4gY29uZmlndXJhdGlvbiBmaWxlIGZpcnN0LicKCSAgICAgKTsKfQoK dW5kZWYgJWlucHV0OwokcXVlcnkgPSAkRU5We1FVRVJZX1NUUklOR307CgppZiAoZGVmaW5lZCgk cXVlcnkpICYmICRxdWVyeSBuZSAnJykgewoJZm9yZWFjaCAoc3BsaXQgKC8mLywgJHF1ZXJ5KSkg ewoJCXkvKy8gLzsKCQlzLyUoLi4pL3NwcmludGYoIiVjIiwgaGV4KCQxKSkvZ2U7ICAgICMgdW5x dW90ZSAlLXF1b3RlZAoJCWlmICgvKFxTKyk9KC4qKS8pIHsKCQkJJGlucHV0eyQxfSA9ICQyIGlm ICgkMiBuZSAiIik7CgkJfSBlbHNlIHsKCQkJJGlucHV0eyRffSsrOwoJCX0KCX0KfQoKIyBGb3Ig YmFja3dhcmRzIGNvbXBhYmlsaXR5LCBzZXQgb25seV93aXRoX3RhZyB0byBvbmx5X29uX2JyYW5j aCBpZiBzZXQuCiRpbnB1dHtvbmx5X3dpdGhfdGFnfSA9ICRpbnB1dHtvbmx5X29uX2JyYW5jaH0K ICAgIGlmIChkZWZpbmVkKCRpbnB1dHtvbmx5X29uX2JyYW5jaH0pKTsKCiMgUHJldmVudCBjcm9z cy1zaXRlIHNjcmlwdGluZwpmb3JlYWNoIChAdW5zYWZldmFycykgewoJIyBDb2xvbnMgYXJlIG5l ZWRlZCBpbiBkaWZmcyBiZXR3ZWVuIHRhZ3MuCglpZiAoZGVmaW5lZCgkaW5wdXR7JF99KSAmJiAk aW5wdXR7JF99ID1+IC9bXlx3XC0uOl0vKSB7CgkJZmF0YWwoIjUwMCBJbnRlcm5hbCBFcnJvciIs CgkJICAgICAgJ01hbGZvcm1lZCBxdWVyeSAoJXM9JXMpJywKCQkgICAgICAkXywgJGlucHV0eyRf fSk7Cgl9Cn0KCmlmIChkZWZpbmVkKCRpbnB1dHsiY29udGVudC10eXBlIn0pKSB7CglmYXRhbCgi NTAwIEludGVybmFsIEVycm9yIiwgIlVuc3VwcG9ydGVkIGNvbnRlbnQtdHlwZSIpCgkgICAgaWYg KCRpbnB1dHsiY29udGVudC10eXBlIn0gIX4gL15bLTAtOUEtWmEtel0rXC9bLTAtOUEtWmEtel0r JC8pOwp9CgokREVGQVVMVFZBTFVFeydjdnNyb290J30gPSAkY3ZzdHJlZWRlZmF1bHQ7Cgpmb3Jl YWNoIChrZXlzICVERUZBVUxUVkFMVUUpIHsKCgkjIHJlcGxhY2Ugbm90IGdpdmVuIHBhcmFtZXRl cnMgd2l0aCB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzCglpZiAoIWRlZmluZWQoJGlucHV0eyRffSkg fHwgJGlucHV0eyRffSBlcSAiIikgewoKCQkjIEVtcHR5IENoZWNrYm94ZXMgaW4gZm9ybXMgcmV0 dXJuIC0tIG5vdGhpbmcuIFNvIHdlIGRlZmluZSBhIGhlbHBlcgoJCSMgdmFyaWFibGUgaW4gdGhl c2UgZm9ybXMgKGNvcHQpIHdoaWNoIGluZGljYXRlcyB0aGF0IHdlIGp1c3Qgc2V0CgkJIyBwYXJh bWV0ZXJzIHdpdGggYSBjaGVja2JveAoJCWlmICghZGVmaW5lZCgkaW5wdXR7ImNvcHQifSkpIHsK CgkJCSMgJ2NvcHQnIGlzbid0IGRlZmluZWQgLS0+IGVtcHR5IGlucHV0IGlzIG5vdCB0aGUgcmVz dWx0CgkJCSMgb2YgZW1wdHkgaW5wdXQgY2hlY2tib3ggLS0+IHNldCBkZWZhdWx0CgkJCSRpbnB1 dHskX30gPSAkREVGQVVMVFZBTFVFeyRffQoJCQkgICAgaWYgKGRlZmluZWQoJERFRkFVTFRWQUxV RXskX30pKTsKCQl9IGVsc2UgewoKCQkJIyAnY29wdCcgaXMgZGVmaW5lZCAtPiB0aGUgcmVzdWx0 IG9mIGVtcHR5IGlucHV0IGNoZWNrYm94CgkJCSMgLT4gc2V0IHRvIHplcm8gKGRpc2FibGUpIGlm IGRlZmF1bHQgaXMgYSBib29sZWFuICgwfDEpLgoJCQkkaW5wdXR7JF99ID0gMAoJCQkgICAgaWYg KGRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pCgkJCSAgICAmJiAoJERFRkFVTFRWQUxVRXskX30g ZXEgIjAiCgkJCSAgICB8fCAkREVGQVVMVFZBTFVFeyRffSBlcSAiMSIpKTsKCQl9Cgl9Cn0KCiRi YXJlcXVlcnkgPSAiIjsKbXkgQGJhcmVxdWVyeTsKZm9yZWFjaCAoQHN0aWNreXZhcnMpIHsKCgkj IGNvbnN0cnVjdCBhIHF1ZXJ5IHN0cmluZyB3aXRoIHRoZSBzdGlja3kgbm9uIGRlZmF1bHQgcGFy YW1ldGVycyBzZXQKCWlmIChkZWZpbmVkKCRpbnB1dHskX30pICYmICRpbnB1dHskX30gbmUgJycK CSAgICAmJiAhKGRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pICYmICRpbnB1dHskX30gZXEgJERF RkFVTFRWQUxVRXskX30pKQoJewoJCXB1c2ggQGJhcmVxdWVyeSwKCQkgICAgam9pbiAoJz0nLCB1 cmxlbmNvZGUoJF8pLCB1cmxlbmNvZGUoJGlucHV0eyRffSkpOwoJfQp9CgojIGlzIHRoZXJlIGFu eSBxdWVyeSA/CmlmIChAYmFyZXF1ZXJ5KSB7CgkkYmFyZXF1ZXJ5ID0gam9pbiAoJyYnLCBAYmFy ZXF1ZXJ5KTsKCSRxdWVyeSAgICAgPSAiPyRiYXJlcXVlcnkiOwoJJGJhcmVxdWVyeSA9ICImJGJh cmVxdWVyeSI7Cn0gZWxzZSB7CgkkcXVlcnkgPSAiIjsKfQp1bmRlZiBAYmFyZXF1ZXJ5OwoKaWYg KGRlZmluZWQoJGlucHV0e3BhdGh9KSkgewoJcmVkaXJlY3QoIiRzY3JpcHRuYW1lLyRpbnB1dHtw YXRofSRxdWVyeSIpOwp9CgojIGdldCBhY3R1YWwgcGFyYW1ldGVycwokc29ydGJ5ICAgPSAkaW5w dXR7InNvcnRieSJ9OwokYnlkYXRlICAgPSAwOwokYnlyZXYgICAgPSAwOwokYnlhdXRob3IgPSAw OwokYnlsb2cgICAgPSAwOwokYnlmaWxlICAgPSAwOwppZiAoJHNvcnRieSBlcSAiZGF0ZSIpIHsK CSRieWRhdGUgPSAxOwp9IGVsc2lmICgkc29ydGJ5IGVxICJyZXYiKSB7CgkkYnlyZXYgPSAxOwp9 IGVsc2lmICgkc29ydGJ5IGVxICJhdXRob3IiKSB7CgkkYnlhdXRob3IgPSAxOwp9IGVsc2lmICgk c29ydGJ5IGVxICJsb2ciKSB7CgkkYnlsb2cgPSAxOwp9IGVsc2UgewoJJGJ5ZmlsZSA9IDE7Cn0K CiRkZWZhdWx0RGlmZlR5cGUgPSAkaW5wdXR7J2YnfTsKCiRsb2dzb3J0ID0gJGlucHV0eydsb2dz b3J0J307Cgp7CglteSBAdG1wID0gQENWU3JlcG9zaXRvcmllczsKCW15IEBwYWlyOwoKCXdoaWxl IChAcGFpciA9IHNwbGljZShAdG1wLCAwLCAyKSkgewoJCW15ICgka2V5LCAgICR2YWwpICAgICA9 IEBwYWlyOwoJCW15ICgkZGVzY3IsICRjdnNyb290KSA9IEAkdmFsOwoKCQluZXh0IGlmICEtZCAk Y3Zzcm9vdDsKCgkJJENWU1JPT1RkZXNjcnska2V5fSA9ICRkZXNjcjsKCQkkQ1ZTUk9PVHska2V5 fSAgICAgID0gJGN2c3Jvb3Q7CgkJcHVzaCBAQ1ZTUk9PVCwgJGtleTsKCX0KfQoKIyMgRGVmYXVs dCBDVlMtVHJlZQppZiAoIWRlZmluZWQoJENWU1JPT1R7JGN2c3RyZWVkZWZhdWx0fSkpIHsKCWZh dGFsKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAoJICAgICAgJzxjb2RlPiRjdnN0cmVlZGVmYXVsdDwv Y29kZT4gcG9pbnRzIHRvIGEgcmVwb3NpdG9yeSAoJXMpIG5vdCBkZWZpbmVkIGluIDxjb2RlPiUl Q1ZTUk9PVDwvY29kZT4gKGVkaXQgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgJXMpJywKCSAgICAg ICRjdnN0cmVlZGVmYXVsdCwgJGNvbmZpZyk7Cn0KCiMgYWx0ZXJuYXRlIENWUy1UcmVlLCBjb25m aWd1cmVkIGluIGN2c3dlYi5jb25mCmlmICgkaW5wdXR7J2N2c3Jvb3QnfSAmJiAkQ1ZTUk9PVHsk aW5wdXR7J2N2c3Jvb3QnfX0pIHsKCSRjdnN0cmVlID0gJGlucHV0eydjdnNyb290J307Cn0gZWxz ZSB7CgkkY3ZzdHJlZSA9ICRjdnN0cmVlZGVmYXVsdDsKfQoKJGN2c3Jvb3QgPSAkQ1ZTUk9PVHsk Y3ZzdHJlZX07CgojIGNyZWF0ZSBpY29ucyBvdXQgb2YgZGVzY3JpcHRpb24KZm9yZWFjaCBteSAk ayAoa2V5cyAlSUNPTlMpIHsKCW5vIHN0cmljdCAncmVmcyc7CglteSAoJGl0eHQsICRpcGF0aCwg JGl3aWR0aCwgJGloZWlnaHQpID0gQHskSUNPTlN7JGt9fTsKCWlmICgkaXBhdGgpIHsKCQkkeyIk e2t9aWNvbiJ9ID0KCQkgICAgc3ByaW50ZigKCQkJJzxpbWcgc3JjPSIlcyIgYWx0PSIlcyIgYm9y ZGVyPSIwIiB3aWR0aD0iJWQiIGhlaWdodD0iJWQiPicsCgkJCWhyZWZxdW90ZSgkaXBhdGgpLCBo dG1scXVvdGUoJGl0eHQpLCAkaXdpZHRoLCAkaWhlaWdodCkKCX0gZWxzZSB7CgkJJHsiJHtrfWlj b24ifSA9ICRpdHh0OwoJfQp9CgpteSAkY29uZmlnX2N2c3RyZWUgPSAiJGNvbmZpZy0kY3ZzdHJl ZSI7CgojIERvIHNvbWUgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZvciBjdnN0cmVlcwppZiAoLWYg JGNvbmZpZ19jdnN0cmVlKSB7CglkbyAiJGNvbmZpZ19jdnN0cmVlIiBvcgoJICAgIGZhdGFsKCI1 MDAgSW50ZXJuYWwgRXJyb3IiLAoJCSAgJ0Vycm9yIGluIGxvYWRpbmcgY29uZmlndXJhdGlvbiBm aWxlOiAlczxicj48YnI+JXM8YnI+JywKCQkgICRjb25maWdfY3ZzdHJlZSwgJEApOwp9CnVuZGVm ICRjb25maWdfY3ZzdHJlZTsKCiRyZV9wcmNhdGVnb3JpZXMgPSAnKD86JyAuIGpvaW4gKCd8Jywg QHByY2F0ZWdvcmllcykgLiAnKScgaWYgQHByY2F0ZWdvcmllczsKJHJlX3Bya2V5d29yZCA9IHF1 b3RlbWV0YSgkcHJrZXl3b3JkKSBpZiBkZWZpbmVkKCRwcmtleXdvcmQpOwokcHJjZ2kgLj0gJyVz JyBpZiBkZWZpbmVkKCRwcmNnaSkgJiYgJHByY2dpICF+IC8lcy87CgokZnVsbG5hbWUgICAgICAg ICA9ICIkY3Zzcm9vdC8kd2hlcmUiOwokbWltZXR5cGUgICAgICAgICA9ICZnZXRNaW1lVHlwZUZy b21TdWZmaXgoJGZ1bGxuYW1lKTsKJGRlZmF1bHRUZXh0UGxhaW4gPSAoJG1pbWV0eXBlIGVxICJ0 ZXh0L3BsYWluIik7CiRkZWZhdWx0Vmlld2FibGUgID0gJGFsbG93X21hcmt1cCAmJiB2aWV3YWJs ZSgkbWltZXR5cGUpOwoKbXkgJHJld3JpdGUgPSAwOwoKaWYgKCRwYXRoaW5mbyA9fiBtfC8vfCkg ewoJJHBhdGhpbmZvID1+IHl8L3wvfHM7CgkkcmV3cml0ZSA9IDE7Cn0KCmlmICgtZCAkZnVsbG5h bWUgJiYgJHBhdGhpbmZvICF+IG18LyR8KSB7CgkkcGF0aGluZm8gLj0gJy8nOwoJJHJld3JpdGUg PSAxOwp9CgppZiAoIS1kICRmdWxsbmFtZSAmJiAkcGF0aGluZm8gPX4gbXwvJHwpIHsKCWNob3Ag JHBhdGhpbmZvOwoJJHJld3JpdGUgPSAxOwp9CgppZiAoJHJld3JpdGUpIHsKCXJlZGlyZWN0KCRz Y3JpcHRuYW1lIC4gdXJsZW5jb2RlKCRwYXRoaW5mbykgLiAkcXVlcnkpOwp9Cgp1bmRlZiAkcmV3 cml0ZTsKCmlmICghLWQgJGN2c3Jvb3QpIHsKCWZhdGFsKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAoJ ICAgICAgJyRDVlNST09UIG5vdCBmb3VuZCE8cD5UaGUgc2VydmVyIG9uIHdoaWNoIHRoZSBDVlMg dHJlZSBsaXZlcyBpcyBwcm9iYWJseSBkb3duLiAgUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIGZldyBt aW51dGVzLicpOwp9CgojCiMgU2VlIGlmIHRoZSBtb2R1bGUgaXMgaW4gb3VyIGZvcmJpZGRlbiBs aXN0LgojCiR3aGVyZSA9fiBtOihbXi9dKik6OwokbW9kdWxlID0gJDE7CmlmICgkbW9kdWxlICYm ICZmb3JiaWRkZW5fbW9kdWxlKCRtb2R1bGUpKSB7CglmYXRhbCgiNDAzIEZvcmJpZGRlbiIsCgkg ICAgICAnQWNjZXNzIHRvICVzIGZvcmJpZGRlbi4nLAoJICAgICAgJHdoZXJlKTsKfQoKIwojIEhh bmRsZSB0YXJiYWxsIGRvd25sb2FkcyBiZWZvcmUgYW55IGhlYWRlcnMgYXJlIG91dHB1dC4KIwpp ZiAoJGlucHV0e3RhcmJhbGx9KSB7CglmYXRhbCgiNDAzIEZvcmJpZGRlbiIsCgkgICAgICAnRG93 bmxvYWRpbmcgdGFyYmFsbHMgaXMgcHJvaGliaXRlZC4nKQoJICAgIHVubGVzcyAkYWxsb3dfdGFy OwoJbXkgKCRtb2R1bGUpID0gKCR3aGVyZSA9fiBtLF4vPyguKiksKTsgICAgIyB1bnRhaW50Cgkk bW9kdWxlID1+IHMsLyhbXi9dKikkLCw7CglteSAoJGV4dCkgICAgID0gKCQxICAgICAgPX4gLyhc LnRhclwuZ3p8XC56aXApJC8pOwoJbXkgKCRiYXNlZGlyKSA9ICgkbW9kdWxlID1+IG0sKFteL10r KSQsKTsKCglpZiAoJGJhc2VkaXIgZXEgJycgfHwgJG1vZHVsZSBlcSAnJykgewoJCWZhdGFsKCI1 MDAgSW50ZXJuYWwgRXJyb3IiLAoJCSAgICAgICdZb3UgY2Fubm90IGRvd25sb2FkIHRoZSB0b3Ag bGV2ZWwgZGlyZWN0b3J5LicpOwoJfQoKCW15ICR0bXBleHBvcnRkaXIgPSAiJHRtcGRpci8uY3Zz d2ViLiQkLiIgLiBpbnQodGltZSk7CgoJbWtkaXIoJHRtcGV4cG9ydGRpciwgMDcwMCkKCSAgICBv ciBmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwKCQkgICAgICdVbmFibGUgdG8gbWFrZSB0ZW1w b3JhcnkgZGlyZWN0b3J5OiAlcycsCgkJICAgICAkISk7CgoJbXkgQGZhdGFsOwoKCW15ICR0YWcg PQoJICAgIChleGlzdHMgJGlucHV0e29ubHlfd2l0aF90YWd9ICYmIGxlbmd0aCAkaW5wdXR7b25s eV93aXRoX3RhZ30pID8KCSAgICAkaW5wdXR7b25seV93aXRoX3RhZ30gOiAiSEVBRCI7CgoJaWYg KCR0YWcgZXEgJ01BSU4nKSB7CgkgICAgJHRhZyA9ICdIRUFEJzsKCX0KCglpZiAoc3lzdGVtICRD TUR7Y3ZzfSwgQGN2c19vcHRpb25zLCAnLVFkJywgJGN2c3Jvb3QsICdleHBvcnQnLCAnLXInLAoJ ICAgICR0YWcsICctZCcsICIkdG1wZXhwb3J0ZGlyLyRiYXNlZGlyIiwgJG1vZHVsZSkKCXsKCQlA ZmF0YWwgPSAoIjUwMCBJbnRlcm5hbCBFcnJvciIsCgkJCSAgJ2N2cyBjbyBmYWlsdXJlOiAlczog JXMnLAoJCQkgICQhLCAkbW9kdWxlKTsKCX0gZWxzZSB7CgkJJHwgPSAxOyAgICAjIEVzc2VudGlh bCB0byBnZXQgdGhlIGJ1ZmZlcmluZyByaWdodC4KCgkJaWYgKCRleHQgZXEgJy50YXIuZ3onKSB7 CgkJCXByaW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ3ppcFxyXG5cclxuIjsKCgkJ CXN5c3RlbQoJCQkgICAgIiRDTUR7dGFyfSBAdGFyX29wdGlvbnMgLWNmIC0gLUMgJHRtcGV4cG9y dGRpciAkYmFzZWRpciB8ICRDTUR7Z3ppcH0gQGd6aXBfb3B0aW9ucyAtYyIKCQkJICAgIGFuZCBA ZmF0YWwgPQoJCQkJKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAoJCQkJICd0YXIgemMgZmFpbHVyZTog JXM6ICVzJywKCQkJICAgICAkISwgJGJhc2VkaXIpOwoJCX0gZWxzaWYgKCRleHQgZXEgJy56aXAn ICYmICRDTUR7emlwfSkgewoJCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi96aXBc clxuXHJcbiI7CgoJCQlzeXN0ZW0KCQkJICAgICJjZCAkdG1wZXhwb3J0ZGlyICYmICRDTUR7emlw fSBAemlwX29wdGlvbnMgLXIgLSAkYmFzZWRpciIKCQkJICAgIGFuZCBAZmF0YWwgPQoJCQkJKCI1 MDAgSW50ZXJuYWwgRXJyb3IiLAoJCQkJICd6aXAgZmFpbHVyZTogJXM6ICVzJywKCQkJCSAkISwg JGJhc2VkaXIpOwoJCX0gZWxzZSB7CgkJCUBmYXRhbCA9CgkJCSAgICAoIjUwMCBJbnRlcm5hbCBF cnJvciIsCgkJCSAgICAgJ3Vuc3VwcG9ydGVkIGZpbGUgdHlwZScpOwoJCX0KCX0KCglzeXN0ZW0g JENNRHtybX0sICctcmYnLCAkdG1wZXhwb3J0ZGlyIGlmIC1kICR0bXBleHBvcnRkaXI7CgoJJmZh dGFsKEBmYXRhbCkgaWYgQGZhdGFsOwoKCWV4aXQ7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwojIFZpZXcgYSBkaXJlY3RvcnkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwppZiAoLWQgJGZ1bGxuYW1lKSB7CglteSAkZGggPSBkbyB7IGxvY2FsICgqREgpOyB9OwoJb3Bl bmRpcigkZGgsICRmdWxsbmFtZSkgb3IgZmF0YWwoIjQwNCBOb3QgRm91bmQiLAoJCQkJCSAnJXM6 ICVzJywKCQkJCQkgJHdoZXJlLCAkISk7CglteSBAZGlyID0gcmVhZGRpcigkZGgpOwoJY2xvc2Vk aXIoJGRoKTsKCW15IEBzdWJMZXZlbEZpbGVzID0gZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQGRp cikKCSAgICBpZiAoJHNob3dfc3ViZGlyX2xhc3Rtb2QpOwoJZ2V0RGlyTG9ncygkY3Zzcm9vdCwg JHdoZXJlLCBAc3ViTGV2ZWxGaWxlcyk7CgoJaWYgKCR3aGVyZSBlcSAnLycpIHsKCQlodG1sX2hl YWRlcigkZGVmYXVsdHRpdGxlKTsKCQkkbG9uZ19pbnRybyA9fiBzLyEhQ1ZTUk9PVGRlc2NyISEv JENWU1JPT1RkZXNjcnskY3ZzdHJlZX0vZzsKCQlwcmludCAkbG9uZ19pbnRybzsKCX0gZWxzZSB7 CgkJaHRtbF9oZWFkZXIoJHdoZXJlKTsKCQlwcmludCAkc2hvcnRfaW5zdHJ1Y3Rpb247Cgl9CgoJ aWYgKCR1c2VfZGVzY3JpcHRpb25zICYmIG9wZW4oREVTQywgIjwkY3Zzcm9vdC9DVlNST09UL2Rl c2NyaXB0aW9ucyIpKQoJewoJCXdoaWxlICg8REVTQz4pIHsKCQkJY2hvbXA7CgkJCW15ICgkZGly LCAkZGVzY3JpcHRpb24pID0gLyhcUyspXHMrKC4qKS87CgkJCSRkZXNjcmlwdGlvbnN7JGRpcn0g PSAkZGVzY3JpcHRpb247CgkJfQoJCWNsb3NlKERFU0MpOwoJfQoKCXByaW50ICI8cD48YSBuYW1l PVwiZGlybGlzdFwiPjwvYT48L3A+XG4iOwoKCSMgZ2l2ZSBkaXJlY3QgYWNjZXNzIHRvIGRpcnMK CWlmICgkd2hlcmUgZXEgJy8nKSB7CgkJY2hvb3NlTWlycm9yICgpOwoJCWNob29zZUNWU1Jvb3Qg KCk7Cgl9IGVsc2UgewoJCXByaW50ICI8cD5DdXJyZW50IGRpcmVjdG9yeTogPGI+IiwgJmNsaWNr YWJsZVBhdGgoJHdoZXJlLCAwKSwKCQkgICAgIjwvYj48L3A+XG4iOwoKCQlwcmludCAiPHA+Q3Vy cmVudCB0YWc6IDxiPiIsICRpbnB1dHtvbmx5X3dpdGhfdGFnfSwiPC9iPjwvcD5cbiIKCQkgICAg aWYgJGlucHV0e29ubHlfd2l0aF90YWd9OwoKCX0KCglwcmludCAiPGhyIG5vc2hhZGU+XG4iOwoK CSMgVXNpbmcgPG1lbnU+IGluIHRoaXMgbWFubmVyIHZpb2xhdGVzIHRoZSBIVE1MMi4wIHNwZWMg YnV0CgkjIHByb3ZpZGVzIHRoZSByZXN1bHRzIHRoYXQgSSB3YW50IGluIG1vc3QgYnJvd3NlcnMu ICBBbm90aGVyCgkjIGNhc2Ugb2YgbGF5b3V0IHNwb29naW5nIHVwIEhUTUwuCgoJbXkgJGluZm9j b2xzID0gMDsKCWlmICgkZGlydGFibGUpIHsKCQlwcmludCAiPHRhYmxlIHN0eWxlPVwiYm9yZGVy LXdpZHRoOiAwIjsKCQlwcmludCAiOyBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGVCb3JkZXJDb2xv ciIKCQkgICAgaWYgKGRlZmluZWQgJHRhYmxlQm9yZGVyQ29sb3IpOwoJCXByaW50ICJcIiB3aWR0 aD1cIjEwMCVcIiBjZWxsc3BhY2luZz1cIjFcIiBjZWxscGFkZGluZz1cIiR0YWJsZXBhZGRpbmdc Ij5cbiI7CgkJJGluZm9jb2xzKys7CgkJcHJpbnRmICI8dHI+XG48dGggc3R5bGU9XCJ0ZXh0LWFs aWduOiBsZWZ0OyBiYWNrZ3JvdW5kLWNvbG9yOiAlc1wiPiIsCgkJICAgICRieWZpbGUgPyAkY29s dW1uSGVhZGVyQ29sb3JTb3J0ZWQgOgoJCSAgICAkY29sdW1uSGVhZGVyQ29sb3JEZWZhdWx0OwoK CQlpZiAoJGJ5ZmlsZSkgewoJCQlwcmludCAnRmlsZSc7CgkJfSBlbHNlIHsKCQkJcHJpbnQgJmxp bmsoCgkJCQknRmlsZScsCgkJCQlzcHJpbnRmKAoJCQkJCScuLyVzI2Rpcmxpc3QnLAoJCQkJCSZ0 b2dnbGVRdWVyeSgic29ydGJ5IiwgImZpbGUiKQoJCQkJKQoJCQkpOwoJCX0KCQlwcmludCAiPC90 aD5cbiI7CgoJCSMgZG8gbm90IGRpc3BsYXkgdGhlIG90aGVyIGNvbHVtbi1oZWFkZXJzLCBpZiB3 ZSBkbyBub3QgaGF2ZSBhbnkgZmlsZXMKCQkjIHdpdGggcmV2aXNpb24gaW5mb3JtYXRpb246CgkJ aWYgKHNjYWxhciglZmlsZWluZm8pKSB7CgkJCSRpbmZvY29scysrOwoJCQlwcmludGYgJzx0aCBz dHlsZT0idGV4dC1hbGlnbjogbGVmdDsgYmFja2dyb3VuZC1jb2xvcjogJXMiPicsCgkJCSAgICAk YnlyZXYgPyAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgOgoJCQkgICAgJGNvbHVtbkhlYWRlckNv bG9yRGVmYXVsdDsKCgkJCWlmICgkYnlyZXYpIHsKCQkJCXByaW50ICdSZXYuJzsKCQkJfSBlbHNl IHsKCQkJCXByaW50ICZsaW5rKAoJCQkJCSdSZXYuJywKCQkJCQlzcHJpbnRmKAoJCQkJCQknLi8l cyNkaXJsaXN0JywKCQkJCQkJJnRvZ2dsZVF1ZXJ5KCJzb3J0YnkiLCAicmV2IikKCQkJCQkpCgkJ CQkpOwoJCQl9CgkJCXByaW50ICI8L3RoPlxuIjsKCQkJJGluZm9jb2xzKys7CgkJCXByaW50ZiAn PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyBiYWNrZ3JvdW5kLWNvbG9yOiAlcyI+JywKCQkJ ICAgICRieWRhdGUgPyAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgOgoJCQkgICAgJGNvbHVtbkhl YWRlckNvbG9yRGVmYXVsdDsKCgkJCWlmICgkYnlkYXRlKSB7CgkJCQlwcmludCAnQWdlJzsKCQkJ fSBlbHNlIHsKCQkJCXByaW50ICZsaW5rKAoJCQkJCSdBZ2UnLAoJCQkJCXNwcmludGYoCgkJCQkJ CScuLyVzI2Rpcmxpc3QnLAoJCQkJCQkmdG9nZ2xlUXVlcnkoInNvcnRieSIsICJkYXRlIikKCQkJ CQkpCgkJCQkpOwoJCQl9CgkJCXByaW50ICI8L3RoPlxuIjsKCgkJCWlmICgkc2hvd19hdXRob3Ip IHsKCQkJCSRpbmZvY29scysrOwoJCQkJcHJpbnRmICc8dGggc3R5bGU9InRleHQtYWxpZ246IGxl ZnQ7IGJhY2tncm91bmQtY29sb3I6ICVzIj4nLAoJCQkJICAgICRieWF1dGhvciA/ICRjb2x1bW5I ZWFkZXJDb2xvclNvcnRlZCA6CgkJCQkgICAgJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdDsKCgkJ CQlpZiAoJGJ5YXV0aG9yKSB7CgkJCQkJcHJpbnQgJ0F1dGhvcic7CgkJCQl9IGVsc2UgewoJCQkJ CXByaW50ICZsaW5rKAoJCQkJCQknQXV0aG9yJywKCQkJCQkJc3ByaW50ZigKCQkJCQkJCScuLyVz I2Rpcmxpc3QnLAoJCQkJCQkJJnRvZ2dsZVF1ZXJ5KAoJCQkJCQkJCSJzb3J0YnkiLAoJCQkJCQkJ CSJhdXRob3IiCgkJCQkJCQkpCgkJCQkJCSkKCQkJCQkpOwoJCQkJfQoJCQkJcHJpbnQgIjwvdGg+ XG4iOwoJCQl9CgkJCSRpbmZvY29scysrOwoJCQlwcmludGYgJzx0aCBzdHlsZT0idGV4dC1hbGln bjogbGVmdDsgYmFja2dyb3VuZC1jb2xvcjogJXMiPicsCgkJCSAgICAkYnlsb2cgPyAkY29sdW1u SGVhZGVyQ29sb3JTb3J0ZWQgOgoJCQkgICAgJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdDsKCgkJ CWlmICgkYnlsb2cpIHsKCQkJCXByaW50ICdMYXN0IGxvZyBlbnRyeSc7CgkJCX0gZWxzZSB7CgkJ CQlwcmludCAmbGluaygKCQkJCQknTGFzdCBsb2cgZW50cnknLAoJCQkJCXNwcmludGYoCgkJCQkJ CScuLyVzI2Rpcmxpc3QnLAoJCQkJCQkmdG9nZ2xlUXVlcnkoInNvcnRieSIsICJsb2ciKQoJCQkJ CSkKCQkJCSk7CgkJCX0KCQkJcHJpbnQgIjwvdGg+XG4iOwoJCX0gZWxzaWYgKCR1c2VfZGVzY3Jp cHRpb25zKSB7CgkJCXByaW50ZiAnPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyBiYWNrZ3Jv dW5kLWNvbG9yOiBzIj4nLAoJCQkgICAgJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdDsKCQkJcHJp bnQgIkRlc2NyaXB0aW9uPC90aD5cbiI7CgkJCSRpbmZvY29scysrOwoJCX0KCQlwcmludCAiPC90 cj5cbiI7Cgl9IGVsc2UgewoJCXByaW50ICI8bWVudT5cbiI7Cgl9CglteSAkZGlycm93ID0gMDsK CglteSAkaTsKCWxvb2tpbmdmb3JhdHRpYzoKCWZvciAoJGkgPSAwIDsgJGkgPD0gJCNkaXIgOyAk aSsrKSB7CgkJaWYgKCRkaXJbJGldIGVxICJBdHRpYyIpIHsKCQkJbGFzdCBsb29raW5nZm9yYXR0 aWM7CgkJfQoJfQoKCWlmICghJGlucHV0eydoaWRlYXR0aWMnfSAmJiAoJGkgPD0gJCNkaXIpCgkg ICAgJiYgb3BlbmRpcigkZGgsICRmdWxsbmFtZSAuICIvQXR0aWMiKSkKCXsKCQlzcGxpY2UoQGRp ciwgJGksIDEsIGdyZXAoKHN8XnxBdHRpYy98LCAhbXwvXC58KSwgcmVhZGRpcigkZGgpKSk7CgkJ Y2xvc2VkaXIoJGRoKTsKCX0KCglteSAkaGlkZUF0dGljVG9nZ2xlTGluayA9CgkgICAgJGlucHV0 eydoaWRlYXR0aWMnfSA/ICcnIDoKCSAgICAmbGluaygnW0hpZGVdJywgc3ByaW50ZignLi8lcyNk aXJsaXN0JywgJnRvZ2dsZVF1ZXJ5KCJoaWRlYXR0aWMiKSkpOwoKCSMgU29ydCB3aXRob3V0IHRo ZSBBdHRpYy8gcGF0aG5hbWUuCgkjIHBsYWNlIGRpcmVjdG9yaWVzIGZpcnN0CgoJbXkgJGF0dGlj OwoJbXkgJHVybDsKCW15ICRmaWxldXJsOwoJbXkgJGZpbGVzZXhpc3RzOwoJbXkgJGZpbGVzZm91 bmQ7CgoJZm9yZWFjaCBteSAkZmlsZSAoc29ydCB7ICZmaWxlU29ydENtcCB9IEBkaXIpIHsKCgkJ bmV4dCBpZiAoJGZpbGUgZXEgJy4nKTsKCgkJIyBpZ25vcmUgQ1ZTIGxvY2sgYW5kIHN0YWxlIE5G UyBmaWxlcwoJCW5leHQgaWYgKCRmaWxlID1+IC9eI2N2c1wufF4sfF5cLm5mcy8pOwoKCQkjIENo ZWNrIHdoZXRoZXIgdG8gc2hvdyB0aGUgQ1ZTUk9PVCBwYXRoCgkJbmV4dCBpZiAoJGlucHV0eydo aWRlY3Zzcm9vdCd9ICYmICRmaWxlIGVxICdDVlNST09UJyk7CgoJCSMgQ2hlY2sgd2hldGhlciB0 aGUgbW9kdWxlIGlzIGluIHRoZSByZXN0cmljdGVkIGxpc3QKCQluZXh0IGlmICgkZmlsZSAmJiAm Zm9yYmlkZGVuX21vZHVsZSgkZmlsZSkpOwoKCQkjIElnbm9yZSBub24tcmVhZGFibGUgZmlsZXMK CQluZXh0IGlmICgkaW5wdXR7J2hpZGVub25yZWFkYWJsZSd9ICYmICEoLXIgIiRmdWxsbmFtZS8k ZmlsZSIpKTsKCgkJaWYgKCRmaWxlID1+IHN8XkF0dGljL3x8KSB7CgkJCSRhdHRpYyA9ICIgKGlu IHRoZSBBdHRpYykmbmJzcDsiIC4gJGhpZGVBdHRpY1RvZ2dsZUxpbms7CgkJfSBlbHNlIHsKCQkJ JGF0dGljID0gIiI7CgkJfQoKCQlpZiAoJGZpbGUgZXEgJy4uJyB8fCAtZCAiJGZ1bGxuYW1lLyRm aWxlIikgewoJCQluZXh0IGlmICgkZmlsZSBlcSAnLi4nICYmICR3aGVyZSBlcSAnLycpOwoJCQlt eSAoJHJldiwgJGRhdGUsICRsb2csICRhdXRob3IsICRmaWxlbmFtZSkgPQoJCQkgICAgQHskZmls ZWluZm97JGZpbGV9fQoJCQkgICAgaWYgKGRlZmluZWQoJGZpbGVpbmZveyRmaWxlfSkpOwoJCQlw cmludGYgIjx0ciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICVzXCI+XG48dGQ+IiwKCQkJICAg ICAkdGFiY29sb3JzWyRkaXJyb3cgJSAyXSBpZiAkZGlydGFibGU7CgoJCQlpZiAoJGZpbGUgZXEg Jy4uJykgewoJCQkJJHVybCA9ICIuLi8kcXVlcnkiOwoJCQkJaWYgKCRub2ZpbGVsaW5rcykgewoJ CQkJCXByaW50ICRiYWNraWNvbjsKCQkJCX0gZWxzZSB7CgkJCQkJcHJpbnQgJmxpbmsoJGJhY2tp Y29uLCAkdXJsKTsKCQkJCX0KCQkJCXByaW50ICcmbmJzcDsnLCAmbGluaygiUGFyZW50IERpcmVj dG9yeSIsICR1cmwpOwoJCQl9IGVsc2UgewoJCQkJJHVybCA9ICcuLycgLiB1cmxlbmNvZGUoJGZp bGUpIC4gIi8kcXVlcnkiOwoJCQkJcHJpbnQgIjxhIG5hbWU9XCIkZmlsZVwiPjwvYT4iOwoKCQkJ CWlmICgkbm9maWxlbGlua3MpIHsKCQkJCQlwcmludCAkZGlyaWNvbjsKCQkJCX0gZWxzZSB7CgkJ CQkJcHJpbnQgJmxpbmsoJGRpcmljb24sICR1cmwpOwoJCQkJfQoJCQkJcHJpbnQgJyZuYnNwOycs ICZsaW5rKCIkZmlsZS8iLCAkdXJsKSwgJGF0dGljOwoKCQkJCWlmICgkZmlsZSBlcSAiQXR0aWMi KSB7CgkJCQkJcHJpbnQgIiZuYnNwOyAiOwoJCQkJCXByaW50ICZsaW5rKAoJCQkJCQkiW0Rvbid0 IGhpZGVdIiwKCQkJCQkJc3ByaW50ZigKCQkJCQkJCScuLyVzI2Rpcmxpc3QnLAoJCQkJCQkJJnRv Z2dsZVF1ZXJ5KAoJCQkJCQkJCSJoaWRlYXR0aWMiKQoJCQkJCQkpCgkJCQkJKTsKCQkJCX0KCQkJ fQoKCQkJIyBTaG93IGxhc3QgY2hhbmdlIGluIGRpcgoJCQlpZiAoJGZpbGVuYW1lKSB7CgkJCQlw cmludCAiPC90ZD5cbjx0ZD4mbmJzcDs8L3RkPlxuPHRkPiZuYnNwOyIKCQkJCSAgICBpZiAoJGRp cnRhYmxlKTsKCQkJCWlmICgkZGF0ZSkgewoJCQkJCXByaW50ICIgPGk+IiwKCQkJCQkgICAgcmVh ZGFibGVUaW1lKHRpbWUoKSAtICRkYXRlLCAwKSwKCQkJCQkgICAgIjwvaT4iOwoJCQkJfQoKCQkJ CWlmICgkc2hvd19hdXRob3IpIHsKCQkJCQlwcmludCAiPC90ZD5cbjx0ZD4mbmJzcDsiIGlmICgk ZGlydGFibGUpOwoJCQkJCXByaW50ICRhdXRob3I7CgkJCQl9CgkJCQlwcmludCAiPC90ZD5cbjx0 ZD4mbmJzcDsiIGlmICgkZGlydGFibGUpOwoJCQkJJGZpbGVuYW1lID1+IHMlXlteL10rLyUlOwoJ CQkJcHJpbnQgIiRmaWxlbmFtZS8kcmV2IjsKCQkJCXByaW50ICI8YnI+IiBpZiAoJGRpcnRhYmxl KTsKCgkJCQlpZiAoJGxvZykgewoJCQkJCXByaW50ICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQt c2l6ZTogc21hbGxlclwiPiIsCgkJCQkJICAmaHRtbGlmeSgKCQkJCQkJc3Vic3RyKCRsb2csIDAs ICRzaG9ydExvZ0xlbiksICRhbGxvd19kaXJfZXh0cmEpOwoJCQkJCWlmIChsZW5ndGggJGxvZyA+ IDgwKSB7CgkJCQkJCXByaW50ICIuLi4iOwoJCQkJCX0KCQkJCQlwcmludCAiPC9zcGFuPiI7CgkJ CQl9CgkJCX0gZWxzZSB7CgkJCQlteSAoJGR3aGVyZSkgPQoJCQkJICAgICgkd2hlcmUgbmUgIi8i ID8gJHdoZXJlIDogIiIpIC4gJGZpbGU7CgoJCQkJaWYgKCR1c2VfZGVzY3JpcHRpb25zCgkJCQkg ICAgJiYgZGVmaW5lZCAkZGVzY3JpcHRpb25zeyRkd2hlcmV9KQoJCQkJewoJCQkJCXByaW50ICI8 dGQgY29sc3Bhbj1cIiIsKCRpbmZvY29scyAtIDEpLAoJCQkJCSAgICAiXCI+Jm5ic3A7IgoJCQkJ CSAgICBpZiAkZGlydGFibGU7CgkJCQkJcHJpbnQgJGRlc2NyaXB0aW9uc3skZHdoZXJlfTsKCQkJ CX0gZWxzaWYgKCRkaXJ0YWJsZSAmJiAkaW5mb2NvbHMgPiAxKSB7CgoJCQkJCSMgY2xvc2UgdGhl IHJvdyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YKCQkJCQkjIGNvbHVtbnMsIHNvIHRo YXQgdGhlIHZlcnRpY2FsIHNlcGVyYXRvcnMgYXJlIHZpc2libGUKCQkJCQlteSAoJGNvbHMpID0g JGluZm9jb2xzOwoJCQkJCXdoaWxlICgkY29scyA+IDEpIHsKCQkJCQkJcHJpbnQgIjwvdGQ+XG48 dGQ+Jm5ic3A7IjsKCQkJCQkJJGNvbHMtLTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCWlmICgkZGly dGFibGUpIHsKCQkJCXByaW50ICI8L3RkPlxuPC90cj5cbiI7CgkJCX0gZWxzZSB7CgkJCQlwcmlu dCAiPGJyPlxuIjsKCQkJfQoJCQkkZGlycm93Kys7CgkJfSBlbHNpZiAoJGZpbGUgPX4gcy8sdiQv LykgewoKCQkJIyBTa2lwIGZvcmJpZGRlbiBmaWxlcyBub3cgc28gd2UnbGwgZ2l2ZSBubyBoaW50 CgkJCSMgYWJvdXQgdGhlaXIgZXhpc3RlbmNlLiAgVGhpcyBzaG91bGQgcHJvYmFibHkgaGF2ZQoJ CQkjIGJlZW4gZG9uZSBlYXJsaWVyLCBidXQgaXQncyBzdHJhaWdodGZvcndhcmQgaGVyZS4KCQkJ bmV4dCBpZiBmb3JiaWRkZW5fZmlsZSgiJGZ1bGxuYW1lLyRmaWxlIik7CgoJCQkkZmlsZXVybCA9 ICgkYXR0aWMgPyAiQXR0aWMvIiA6ICIiKSAuIHVybGVuY29kZSgkZmlsZSk7CgkJCSR1cmwgPSAn Li8nIC4gJGZpbGV1cmwgLiAkcXVlcnk7CgkJCSRmaWxlc2V4aXN0cysrOwoJCQluZXh0IGlmICgh ZGVmaW5lZCgkZmlsZWluZm97JGZpbGV9KSk7CgkJCW15ICgkcmV2LCAkZGF0ZSwgJGxvZywgJGF1 dGhvcikgPSBAeyRmaWxlaW5mb3skZmlsZX19OwoJCQkkZmlsZXNmb3VuZCsrOwoJCQlwcmludGYg Ijx0ciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICVzXCI+XG48dGQ+IiwKCQkJICAgICR0YWJj b2xvcnNbJGRpcnJvdyAlIDJdIGlmICRkaXJ0YWJsZTsKCQkJcHJpbnQgIjxhIG5hbWU9XCIkZmls ZVwiPjwvYT4iOwoKCQkJaWYgKCRub2ZpbGVsaW5rcykgewoJCQkJcHJpbnQgJGZpbGVpY29uOwoJ CQl9IGVsc2UgewoJCQkJcHJpbnQgJmxpbmsoJGZpbGVpY29uLCAkdXJsKTsKCQkJfQoJCQlwcmlu dCAnJm5ic3A7JywgJmxpbmsoaHRtbHF1b3RlKCRmaWxlKSwgJHVybCksICRhdHRpYzsKCQkJcHJp bnQgIjwvdGQ+XG48dGQ+Jm5ic3A7IiBpZiAoJGRpcnRhYmxlKTsKCQkJZG93bmxvYWRfbGluaygk ZmlsZXVybCwgJHJldiwgJHJldiwKCQkJCSRkZWZhdWx0Vmlld2FibGUgPyAidGV4dC94LWN2c3dl Yi1tYXJrdXAiIDoKCQkJCXVuZGVmKTsKCQkJcHJpbnQgIjwvdGQ+XG48dGQ+Jm5ic3A7IiBpZiAo JGRpcnRhYmxlKTsKCgkJCWlmICgkZGF0ZSkgewoJCQkJcHJpbnQgIiA8aT4iLCByZWFkYWJsZVRp bWUodGltZSgpIC0gJGRhdGUsIDApLAoJCQkJICAgICI8L2k+IjsKCQkJfQoJCQlpZiAoJHNob3df YXV0aG9yKSB7CgkJCQlwcmludCAiPC90ZD5cbjx0ZD4mbmJzcDsiIGlmICgkZGlydGFibGUpOwoJ CQkJcHJpbnQgJGF1dGhvcjsKCQkJfQoJCQlwcmludCAiPC90ZD5cbjx0ZD4mbmJzcDsiIGlmICgk ZGlydGFibGUpOwoKCQkJaWYgKCRsb2cpIHsKCQkJCXByaW50ICIgPHNwYW4gc3R5bGU9XCJmb250 LXNpemU6IHNtYWxsZXJcIj4iLAoJCQkJICAgICZodG1saWZ5KHN1YnN0cigkbG9nLCAwLCAkc2hv cnRMb2dMZW4pLCAkYWxsb3dfZGlyX2V4dHJhKTsKCQkJCWlmIChsZW5ndGggJGxvZyA+IDgwKSB7 CgkJCQkJcHJpbnQgIi4uLiI7CgkJCQl9CgkJCQlwcmludCAiPC9zcGFuPiI7CgkJCX0KCQkJcHJp bnQgIjwvdGQ+XG4iIGlmICgkZGlydGFibGUpOwoJCQlwcmludCgoJGRpcnRhYmxlKSA/ICI8L3Ry PiIgOiAiPGJyPiIpOwoJCQkkZGlycm93Kys7CgkJfQoJCXByaW50ICJcbiI7Cgl9CgoJcHJpbnQo JGRpcnRhYmxlID8gIjwvdGFibGU+XG4iIDogIjwvbWVudT5cbiIpOwoKCWlmICgkZmlsZXNleGlz dHMgJiYgISRmaWxlc2ZvdW5kKSB7CgkJcHJpbnQKCQkgICAgIjxwPjxiPk5PVEU6PC9iPiBUaGVy ZSBhcmUgJGZpbGVzZXhpc3RzIGZpbGVzLCBidXQgbm9uZSBtYXRjaGVzIHRoZSBjdXJyZW50IHRh ZyAoJGlucHV0e29ubHlfd2l0aF90YWd9KS48L3A+XG4iOwoJfQoJaWYgKCRpbnB1dHtvbmx5X3dp dGhfdGFnfSAmJiAoISV0YWdzIHx8ICEkdGFnc3skaW5wdXR7b25seV93aXRoX3RhZ319KSkKCXsK CQkldGFncyA9ICVhbGx0YWdzCgl9CgoJaWYgKHNjYWxhciAldGFncyB8fCAkaW5wdXR7b25seV93 aXRoX3RhZ30gfHwgJGVkaXRfb3B0aW9uX2Zvcm0KCSAgICB8fCBkZWZpbmVkKCRpbnB1dHsib3B0 aW9ucyJ9KSkKCXsKCQlwcmludCAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT5cbiI7Cgl9CgoJaWYg KHNjYWxhciAldGFncyB8fCAkaW5wdXR7b25seV93aXRoX3RhZ30pIHsKCQlwcmludCAiPGZvcm0g bWV0aG9kPVwiZ2V0XCIgYWN0aW9uPVwiLi9cIj5cbiI7CgkJZm9yZWFjaCBteSAkdmFyIChAc3Rp Y2t5dmFycykgewoJCQlwcmludAoJCQkgICAgIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1c IiR2YXJcIiB2YWx1ZT1cIiRpbnB1dHskdmFyfVwiPlxuIgoJCQkgICAgaWYgKGRlZmluZWQoJGlu cHV0eyR2YXJ9KQoJCQkgICAgJiYgKCFkZWZpbmVkKCRERUZBVUxUVkFMVUV7JHZhcn0pCgkJCSAg ICB8fCAkaW5wdXR7JHZhcn0gbmUgJERFRkFVTFRWQUxVRXskdmFyfSkKCQkJICAgICYmICRpbnB1 dHskdmFyfSBuZSAiIiAmJiAkdmFyIG5lICJvbmx5X3dpdGhfdGFnIik7CgkJfQoJCXByaW50ICI8 cD48bGFiZWwgZm9yPVwib25seV93aXRoX3RhZ1wiIGFjY2Vzc2tleT1cIlRcIj4iOwoJCXByaW50 ICJTaG93IG9ubHkgZmlsZXMgd2l0aCB0YWc6PC9sYWJlbD5cbiI7CgkJcHJpbnQgIjxzZWxlY3Qg aWQ9XCJvbmx5X3dpdGhfdGFnXCIgbmFtZT1cIm9ubHlfd2l0aF90YWdcIiI7CgkJcHJpbnQgIiBv bmNoYW5nZT1cInRoaXMuZm9ybS5zdWJtaXQoKVwiIiBpZiAkdXNlX2phdmFfc2NyaXB0OwoJCXBy aW50ICI+IjsKCQlwcmludCAiPG9wdGlvbiB2YWx1ZT1cIlwiPkFsbCB0YWdzIC8gZGVmYXVsdCBi cmFuY2g8L29wdGlvbj5cbiI7CgoJCWZvcmVhY2ggbXkgJHRhZyAocmV2ZXJzZSBzb3J0IHsgbGMg JGEgY21wIGxjICRiIH0ga2V5cyAldGFncykgewoJCQlwcmludCAiPG9wdGlvbiIsCgkJCSAgICBk ZWZpbmVkKCRpbnB1dHtvbmx5X3dpdGhfdGFnfSkKCQkJICAgICYmICRpbnB1dHtvbmx5X3dpdGhf dGFnfSBlcSAkdGFnID8gIiBzZWxlY3RlZCIgOiAiIiwKCQkJICAgICI+JHRhZzwvb3B0aW9uPlxu IjsKCQl9CgkJcHJpbnQgIjwvc2VsZWN0PlxuIjsKCQlwcmludCAiIDxsYWJlbCBmb3I9XCJwYXRo XCIgYWNjZXNza2V5PVwiUFwiPiI7CgkJcHJpbnQgIk1vZHVsZSBwYXRoIG9yIGFsaWFzOjwvbGFi ZWw+XG4iOwoJCXByaW50ZiAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwYXRoXCIgbmFtZT1c InBhdGhcIiB2YWx1ZT1cIiVzXCIgc2l6ZT1cIjE1XCI+XG4iLAoJCSAgICBodG1scXVvdGUoJHdo ZXJlKTsKCQlwcmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkdvXCIgYWNjZXNz a2V5PVwiR1wiPjwvcD5cbiI7CgkJcHJpbnQgIjwvZm9ybT5cbiI7Cgl9CgoJaWYgKCRhbGxvd190 YXIpIHsKCQlteSAoJGJhc2VmaWxlKSA9ICgkd2hlcmUgPX4gbSwoPzouKi8pPyhbXi9dKyksKTsK CgkJaWYgKGRlZmluZWQoJGJhc2VmaWxlKSAmJiAkYmFzZWZpbGUgbmUgJycpIHsKCQkJcHJpbnQg IjxociBub3NoYWRlPlxuIiwKCQkJICAgICI8ZGl2IGFsaWduPVwiY2VudGVyXCI+RG93bmxvYWQg dGhpcyBkaXJlY3RvcnkgaW4gIjsKCgkJCSMgTWFuZ2xlIHRoZSBmaWxlbmFtZSBzbyBicm93c2Vy cyBzaG93IGEgcmVhc29uYWJsZQoJCQkjIGZpbGVuYW1lIHRvIGRvd25sb2FkLgoJCQlwcmludCAm bGluaygidGFyYmFsbCIsICIuLyRiYXNlZmlsZS50YXIuZ3okcXVlcnkiCgkJCQkuICgkcXVlcnkg PyAiJiIgOiAiPyIpIC4gInRhcmJhbGw9MSIpOwoJCQlpZiAoJENNRHt6aXB9KSB7CgkJCQlwcmlu dCAiIG9yICIsCgkJCQkgICAgJmxpbmsoInppcCBhcmNoaXZlIiwgIi4vJGJhc2VmaWxlLnppcCRx dWVyeSIKCQkJCQkuICgkcXVlcnkgPyAiJiIgOiAiPyIpIC4gInRhcmJhbGw9MSIpOwoJCQl9CgkJ CXByaW50ICI8L2Rpdj5cbiI7CgkJfQoJfQoKCWlmICgkZWRpdF9vcHRpb25fZm9ybSB8fCBkZWZp bmVkKCRpbnB1dHsib3B0aW9ucyJ9KSkgewoKCQlteSAkZm9ybXdoZXJlID0gJHNjcmlwdHdoZXJl OwoJCSRmb3Jtd2hlcmUgPX4gc3xBdHRpYy8/JHx8IGlmICgkaW5wdXR7J2hpZGVhdHRpYyd9KTsK CgkJcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdldFwiIGFjdGlvbj1cIiR7Zm9ybXdoZXJlfVwiPlxu IjsKCQlwcmludCAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY29wdFwiIHZhbHVlPVwi MVwiPlxuIjsKCQlpZiAoJGN2c3RyZWUgbmUgJGN2c3RyZWVkZWZhdWx0KSB7CgkJCXByaW50CgkJ CSAgICAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY3Zzcm9vdFwiIHZhbHVlPVwiJGN2 c3RyZWVcIj5cbiI7CgkJfQoJCXByaW50ICI8Y2VudGVyPlxuPHRhYmxlIGNlbGxwYWRkaW5nPVwi MFwiIGNlbGxzcGFjaW5nPVwiMFwiPiI7CgkJcHJpbnQgIlxuPHRyIHN0eWxlPVwiYmFja2dyb3Vu ZC1jb2xvcjogJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdFwiPlxuIjsKCQlwcmludCAiPHRoIGNv bHNwYW49XCIyXCI+UHJlZmVyZW5jZXM8L3RoPlxuPC90cj5cbiI7CgkJcHJpbnQgIjx0cj5cbjx0 ZD4iOwoJCXByaW50ICI8bGFiZWwgZm9yPVwic29ydGJ5XCIgYWNjZXNza2V5PVwiRlwiPlNvcnQg ZmlsZXMgYnkgIjsKCQlwcmludCAiPC9sYWJlbD48c2VsZWN0IGlkPVwic29ydGJ5XCIgbmFtZT1c InNvcnRieVwiPlxuIjsKCQlwcmludCAiPG9wdGlvbiB2YWx1ZT1cIlwiPkZpbGU8L29wdGlvbj5c biI7CgkJcHJpbnQgIjxvcHRpb24iLCAkYnlkYXRlID8gIiBzZWxlY3RlZCIgOiAiIiwKCQkgICAg IiB2YWx1ZT1cImRhdGVcIj5BZ2U8L29wdGlvbj5cbiI7CgkJcHJpbnQgIjxvcHRpb24iLCAkYnlh dXRob3IgPyAiIHNlbGVjdGVkIiA6ICIiLAoJCSAgICAiIHZhbHVlPVwiYXV0aG9yXCI+QXV0aG9y PC9vcHRpb24+XG4iCgkJICAgIGlmICgkc2hvd19hdXRob3IpOwoJCXByaW50ICI8b3B0aW9uIiwg JGJ5cmV2ID8gIiBzZWxlY3RlZCIgOiAiIiwKCQkgICAgIiB2YWx1ZT1cInJldlwiPlJldmlzaW9u PC9vcHRpb24+XG4iOwoJCXByaW50ICI8b3B0aW9uIiwgJGJ5bG9nID8gIiBzZWxlY3RlZCIgOiAi IiwKCQkgICAgIiB2YWx1ZT1cImxvZ1wiPkxvZyBtZXNzYWdlPC9vcHRpb24+XG4iOwoJCXByaW50 ICI8L3NlbGVjdD5cbjwvdGQ+XG4iOwoJCXByaW50ICI8dGQ+PGxhYmVsIGZvcj1cImxvZ3NvcnRc IiBhY2Nlc3NrZXk9XCJMXCI+IjsKCQlwcmludCAiU29ydCBsb2cgYnk6IDwvbGFiZWw+IjsKCQlw cmludExvZ1NvcnRTZWxlY3QoMCk7CgkJcHJpbnQgIjwvdGQ+XG48L3RyPlxuIjsKCQlwcmludCAi PHRyPlxuPHRkPjxsYWJlbCBmb3I9XCJmXCIgYWNjZXNza2V5PVwiRFwiPiI7CgkJcHJpbnQgIkRp ZmYgZm9ybWF0OiA8L2xhYmVsPiI7CgkJcHJpbnREaWZmU2VsZWN0KDApOwoJCXByaW50ICI8L3Rk PlxuIjsKCQlwcmludCAiPHRkPjxsYWJlbCBmb3I9XCJoaWRlYXR0aWNcIiBhY2Nlc3NrZXk9XCJB XCI+IjsKCQlwcmludCAiU2hvdyBBdHRpYyBmaWxlczogPC9sYWJlbD4iOwoJCXByaW50ICI8aW5w dXQgaWQ9XCJoaWRlYXR0aWNcIiBuYW1lPVwiaGlkZWF0dGljXCIgdHlwZT1cImNoZWNrYm94XCIi LAoJCSAgICAkaW5wdXR7J2hpZGVhdHRpYyd9ID8gIiBjaGVja2VkIiA6ICIiLAoJCSAgICAgIj48 L3RkPlxuPC90cj5cbiI7CgkJcHJpbnQgIjx0cj5cbjx0ZCBhbGlnbj1cImNlbnRlclwiIGNvbHNw YW49XCIyXCI+IjsKCQlwcmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNoYW5n ZSBPcHRpb25zXCIgYWNjZXNza2V5PVwiQ1wiPiI7CgkJcHJpbnQgIjwvdGQ+XG48L3RyPlxuPC90 YWJsZT5cbjwvY2VudGVyPlxuPC9mb3JtPlxuIjsKCX0KCWh0bWxfZm9vdGVyKCk7Cn0KCiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBWaWV3IEZpbGVzCiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKZWxzaWYgKC1mICRmdWxsbmFtZSAuICcsdicpIHsKCglpZiAoZm9yYmlk ZGVuX2ZpbGUoJGZ1bGxuYW1lKSkgewoJCWZhdGFsKCc0MDMgRm9yYmlkZGVuJywKCQkgICAgICAn QWNjZXNzIGZvcmJpZGRlbi4gIFRoaXMgZmlsZSBpcyBtZW50aW9uZWQgaW4gQEZvcmJpZGRlbkZp bGVzJyk7CgkJcmV0dXJuOwoJfQoKCSN4aGNoZW4KCWlmIChkZWZpbmVkKCRpbnB1dHsnZ3JhcGgn fSkpIHsKCQkmZG9HcmFwaCgkZnVsbG5hbWUpOwoJCWV4aXQ7Cgl9CgoJaWYgKGRlZmluZWQoJGlu cHV0eydyZXYnfSkgfHwgJGRvQ2hlY2tvdXQpIHsKCQkmZG9DaGVja291dCgkZnVsbG5hbWUsICRp bnB1dHsncmV2J30pOwoJCWd6aXBjbG9zZSgpOwoJCWV4aXQ7Cgl9CgoJaWYgKGRlZmluZWQoJGlu cHV0eydhbm5vdGF0ZSd9KSAmJiAkYWxsb3dfYW5ub3RhdGUpIHsKCQkmZG9Bbm5vdGF0ZSgkaW5w dXR7J2Fubm90YXRlJ30pOwoJCWd6aXBjbG9zZSgpOwoJCWV4aXQ7Cgl9CgoJaWYgKGRlZmluZWQo JGlucHV0eydyMSd9KSAmJiBkZWZpbmVkKCRpbnB1dHsncjInfSkpIHsKCQkmZG9EaWZmKAoJCQkk ZnVsbG5hbWUsICAgICAkaW5wdXR7J3IxJ30sCgkJCSRpbnB1dHsndHIxJ30sICRpbnB1dHsncjIn fSwKCQkJJGlucHV0eyd0cjInfSwgJGlucHV0eydmJ30KCQkpOwoJCWd6aXBjbG9zZSgpOwoJCWV4 aXQ7Cgl9CglwcmludCgiZ29pbmcgdG8gZG9sb2coJGZ1bGxuYW1lKVxuIikgaWYgKCR2ZXJib3Nl KTsKCSZkb0xvZygkZnVsbG5hbWUpOwoKCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJ IyBWaWV3IERpZmYKCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp9IGVsc2lmICgkZnVs bG5hbWUgPX4gcy9cLmRpZmYkLy8gJiYgLWYgJGZ1bGxuYW1lIC4gIix2IiAmJiAkaW5wdXR7J3Ix J30KICAgICYmICRpbnB1dHsncjInfSkKewoKCSMgJHdoZXJlLWRpZmYtcmVtb3ZhbCBpZiAnY3Zz IHJkaWZmJyBpcyB1c2VkCgkjIC4uIGJ1dCAnY3ZzIHJkaWZmJ2RvZXNuJ3Qgc3VwcG9ydCBzb21l IG9wdGlvbnMKCSMgcmNzZGlmZiBkb2VzICgtdyBhbmQgLXApLCBzbyBpdCBpcyBkaXNhYmxlZAoJ IyAkd2hlcmUgPX4gcy9cLmRpZmYkLy87CgoJIyBBbGxvdyBkaWZmcyB1c2luZyB0aGUgIi5kaWZm IiBleHRlbnNpb24KCSMgc28gdGhhdCBicm93c2VycyB0aGF0IGRlZmF1bHQgdG8gdGhlIFVSTAoJ IyBmb3IgYSBzYXZlIGZpbGVuYW1lIGRvbid0IHNhdmUgZGlmZidzIGFzCgkjIGUuZy4gZm9vLmMK CSZkb0RpZmYoCgkJJGZ1bGxuYW1lLCAgICAgJGlucHV0eydyMSd9LCAkaW5wdXR7J3RyMSd9LCAk aW5wdXR7J3IyJ30sCgkJJGlucHV0eyd0cjInfSwgJGlucHV0eydmJ30KCSk7CglnemlwY2xvc2Uo KTsKCWV4aXQ7Cn0gZWxzaWYgKCgkbmV3bmFtZSA9ICRmdWxsbmFtZSkgPX4gc3wvKFteL10rKSR8 L0F0dGljLyQxfCAmJiAtZiAkbmV3bmFtZSAuICIsdiIpCnsKCgkjIFRoZSBmaWxlIGhhcyBiZWVu IHJlbW92ZWQgYW5kIGlzIGluIHRoZSBBdHRpYy4KCSMgU2VuZCBhIHJlZGlyZWN0IHBvaW50aW5n IHRvIHRoZSBmaWxlIGluIHRoZSBBdHRpYy4KCShteSAkbmV3cGxhY2UgPSAkc2NyaXB0d2hlcmUp ID1+IHN8LyhbXi9dKykkfC9BdHRpYy8kMXw7CglpZiAoJEVOVntRVUVSWV9TVFJJTkd9IG5lICIi KSB7CgkJcmVkaXJlY3QoIiR7bmV3cGxhY2V9PyRFTlZ7UVVFUllfU1RSSU5HfSIpOwoJfSBlbHNl IHsKCQlyZWRpcmVjdCgkbmV3cGxhY2UpOwoJfQoJZXhpdDsKfSBlbHNpZiAoMCAmJiAobXkgQGZp bGVzID0gJnNhZmVnbG9iKCRmdWxsbmFtZSAuICIsdiIpKSkgewoJaHR0cF9oZWFkZXIoInRleHQv cGxhaW4iKTsKCXByaW50ICJZb3UgbWF0Y2hlZCB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIjsKCXBy aW50IGpvaW4gKCJcbiIsIEBmaWxlcyk7CgoJIyBGaW5kIHRoZSB0YWdzIGZyb20gZWFjaCBmaWxl CgkjIERpc3BsYXkgYSBmb3JtIG9mZmVyaW5nIGRpZmZzIGJldHdlZW4gc2FpZCB0YWdzCn0gZWxz ZSB7CglteSAkZmggPSBkbyB7IGxvY2FsICgqRkgpOyB9OwoJbXkgKCR4dHJhLCAkbW9kdWxlKTsK CgkjIEFzc3VtZSBpdCdzIGEgbW9kdWxlIG5hbWUgd2l0aCBhIHBvdGVudGlhbCBwYXRoIGZvbGxv d2luZyBpdC4KCSR4dHJhID0gKCgkbW9kdWxlID0gJHdoZXJlKSA9fiBzfC8uKnx8KSA/ICQmIDog Jyc7CgoJIyBJcyB0aGVyZSBhbiBpbmRleGVkIHZlcnNpb24gb2YgbW9kdWxlcz8KCWlmIChvcGVu KCRmaCwgIjwgJGN2c3Jvb3QvQ1ZTUk9PVC9tb2R1bGVzIikpIHsKCQl3aGlsZSAoPCRmaD4pIHsK CQkJaWYgKC9eKFxTKylccysoXFMrKS9vICYmICRtb2R1bGUgZXEgJDEKCQkJICAgICYmIC1kICIk Y3Zzcm9vdC8kMiIgJiYgJG1vZHVsZSBuZSAkMikKCQkJewoJCQkJcmVkaXJlY3QoIiRzY3JpcHRu YW1lLyQyJHh0cmEkcXVlcnkiKTsKCQkJfQoJCX0KCX0KCWZhdGFsKCI0MDQgTm90IEZvdW5kIiwK CSAgICAgICclczogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScsCgkgICAgICAkd2hlcmUpOwp9 CgpnemlwY2xvc2UoKTsKCiMjIEVuZCBNQUlOCgpzdWIgcHJpbnREaWZmU2VsZWN0KCQpIHsKCW15 ICgkdXNlX2phdmFfc2NyaXB0KSA9IEBfOwoJbXkgJGYgPSAkaW5wdXR7J2YnfTsKCglwcmludCAn PHNlbGVjdCBpZD0iZiIgbmFtZT0iZiInOwoJcHJpbnQgJyBvbmNoYW5nZT0idGhpcy5mb3JtLnN1 Ym1pdCgpIicgaWYgJHVzZV9qYXZhX3NjcmlwdDsKCXByaW50ICI+XG4iOwoKCWxvY2FsICRfOwoJ Zm9yIChARElGRlRZUEVTKSB7CgkJcHJpbnRmKCI8b3B0aW9uIHZhbHVlPVwiJXNcIiVzPiVzPC9v cHRpb24+XG4iLCAkXywKCQkgICAgJGYgZXEgJF8gPyAnIHNlbGVjdGVkJyA6ICcnLCAiXHUkRElG RlRZUEVTeyRffXsnZGVzY3InfSIpOwoJfQoKCXByaW50ICI8L3NlbGVjdD4iOwp9CgpzdWIgcHJp bnRMb2dTb3J0U2VsZWN0KCQpIHsKCW15ICgkdXNlX2phdmFfc2NyaXB0KSA9IEBfOwoKCXByaW50 ICc8c2VsZWN0IGlkPSJsb2dzb3J0IiBuYW1lPSJsb2dzb3J0Iic7CglwcmludCAnIG9uY2hhbmdl PSJ0aGlzLmZvcm0uc3VibWl0KCkiJyBpZiAkdXNlX2phdmFfc2NyaXB0OwoJcHJpbnQgIj5cbiI7 CgoJbG9jYWwgJF87Cglmb3IgKEBMT0dTT1JUS0VZUykgewoJCXByaW50ZigiPG9wdGlvbiB2YWx1 ZT1cIiVzXCIlcz4lczwvb3B0aW9uPlxuIiwgJF8sCgkJICAgICRsb2dzb3J0IGVxICRfID8gJyBz ZWxlY3RlZCcgOiAnJywKCQkgICAgIlx1JExPR1NPUlRLRVlTeyRffXsnZGVzY3InfSIpOwoJfQoK CXByaW50ICI8L3NlbGVjdD4iOwp9CgpzdWIgZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQCkgewoJ bXkgKEBkaXJzKSA9IEBfOwoJbXkgKCRkaXJuYW1lLCBAZmlsZXMpOwoKCWZvcmVhY2ggJGRpcm5h bWUgKEBkaXJzKSB7CgkJbmV4dCBpZiAoJGRpcm5hbWUgZXEgIi4iKTsKCQluZXh0IGlmICgkZGly bmFtZSBlcSAiLi4iKTsKCQlteSAoJGRpcikgPSAiJGZ1bGxuYW1lLyRkaXJuYW1lIjsKCQluZXh0 IGlmICghLWQgJGRpcik7CgoJCW15ICgkbGFzdG1vZCkgICAgID0gdW5kZWY7CgkJbXkgKCRsYXN0 bW9kdGltZSkgPSB1bmRlZjsKCQlteSAkZGggPSBkbyB7IGxvY2FsICgqREgpOyB9OwoKCQlvcGVu ZGlyKCRkaCwgJGRpcikgb3IgbmV4dDsKCQlteSAoQGZpbGVuYW1lcykgPSByZWFkZGlyKCRkaCk7 CgkJY2xvc2VkaXIoJGRoKTsKCgkJZm9yZWFjaCBteSAkZmlsZW5hbWUgKEBmaWxlbmFtZXMpIHsK CQkJJGZpbGVuYW1lID0gIiRkaXJuYW1lLyRmaWxlbmFtZSI7CgkJCW15ICgkZmlsZSkgPSAiJGZ1 bGxuYW1lLyRmaWxlbmFtZSI7CgkJCW5leHQgaWYgKCRmaWxlbmFtZSAhfiAvLHYkLyB8fCAhLWYg JGZpbGUpOwoKCQkJIyBTa2lwIGZvcmJpZGRlbiBmaWxlcy4KCQkJKG15ICRmID0gJGZpbGUpID1+ IHMvLHYkLy87CgkJCW5leHQgaWYgZm9yYmlkZGVuX2ZpbGUoJGYpOwoKCQkJJGZpbGVuYW1lID1+ IHMvLHYkLy87CgkJCW15ICRtb2R0aW1lID0gLU0gJGZpbGU7CgoJCQlpZiAoIWRlZmluZWQoJGxh c3Rtb2QpIHx8ICRtb2R0aW1lIDwgJGxhc3Rtb2R0aW1lKSB7CgkJCQkkbGFzdG1vZCAgICAgPSAk ZmlsZW5hbWU7CgkJCQkkbGFzdG1vZHRpbWUgPSAkbW9kdGltZTsKCQkJfQoJCX0KCQlwdXNoIChA ZmlsZXMsICRsYXN0bW9kKSBpZiAoZGVmaW5lZCgkbGFzdG1vZCkpOwoJfQoJcmV0dXJuIEBmaWxl czsKfQoKc3ViIGh0bWxpZnlfc3ViKCYkKSB7CgkobXkgJHByb2MsIGxvY2FsICRfKSA9IEBfOwoJ bXkgQGEgPSBzcGxpdCAobWAoPGEgW14+XSs+W148XSo8L2E+KWBpKTsKCW15ICRsaW5rZWQ7Cglt eSAkcmVzdWx0ID0gJyc7CgoJd2hpbGUgKCgkXywgJGxpbmtlZCkgPSBzcGxpY2UoQGEsIDAsIDIp KSB7CgkJJiRwcm9jKCk7CgkJJHJlc3VsdCAuPSAkXyAgICAgIGlmIGRlZmluZWQoJF8pOwoJCSRy ZXN1bHQgLj0gJGxpbmtlZCBpZiBkZWZpbmVkKCRsaW5rZWQpOwoJfQoKCSRyZXN1bHQ7Cn0KCnN1 YiBodG1saWZ5KCQ7JCkgewoJKGxvY2FsICRfLCBteSAkZXh0cmEpID0gQF87CgoJJF8gPSBodG1s cXVvdGUoJF8pOwoKCSMgZ2V0IFVSTCdzIGFzIGxpbmsKCXN7CiAgICAgIChodHRwfGZ0cHxodHRw cyk6Ly9cUysKICAgICB9ewoJICZsaW5rKCQmLCBodG1sdW5xdW90ZSgkJikpCiAgICAgfWVneDsK CgkjIGdldCBlLW1haWxzIGFzIGxpbmsKCSRfID0gaHRtbGlmeV9zdWIgewoJCXM8CgkgIFtcdys9 XC0uIV0rQFtcd1wtXSsoXC5bXHdcLV0rKSsKCSAgICA+PAoJICAgICAgJmxpbmsoJCYsICJtYWls dG86JCYiKQoJCT5lZ2l4OwoJICAgIH0KCSAgICAkXzsKCglpZiAoJGV4dHJhKSB7CgoJCSMgZ2V0 IFBSICMncyBhcyBsaW5rOiAiUFIjbm5ubiIgIlBSOiBubm5uLCAuLi4iICJQUiBubm5uLCAuLi4i ICJiaW4vbm5ubiIKCQlpZiAoZGVmaW5lZCgkcHJjZ2kpICYmIGRlZmluZWQoJHJlX3Bya2V5d29y ZCkpCgkJewoJCQlteSAkcHJldjsKCgkJCWRvIHsKCQkJCSRwcmV2ID0gJF87CgoJCQkJJF8gPSBo dG1saWZ5X3N1YiB7CgkJCQkJc3sKCQkgICAgICAoXGIkcmVfcHJrZXl3b3JkWzpcI10/XHMqCgkJ ICAgICAgICg/OgoJCQlcIz8KCQkJXGQrWyxcc11ccyoKCQkgICAgICAgKSoKCQkgICAgICAgXCM/ KQoJCSAgICAgIChcZCspXGIKCQkgICAgIH17CgkJCSAkMSAuICZsaW5rKCQyLCBzcHJpbnRmKCRw cmNnaSwgJDIpKQoJCSAgICAgfWVnaXg7CgkJCQkgICAgfQoJCQkJICAgICRfOwoJCQl9IHdoaWxl ICgkXyBuZSAkcHJldik7CgoJCQlpZiAoZGVmaW5lZCgkcmVfcHJjYXRlZ29yaWVzKSkgewoJCQkJ JF8gPSBodG1saWZ5X3N1YiB7CgkJCQkJc3sKCQkJICAoXGIkcmVfcHJjYXRlZ29yaWVzLyhcZCsp XGIpCgkJCX17CgkJCQkmbGluaygkMSwgc3ByaW50ZigkcHJjZ2ksICQyKSkKCQkJfWVnb3g7CgkJ CQkgICAgfQoJCQkJICAgICRfOwoJCQl9CgkJfQoKCQkjIGdldCBtYW5wYWdlIHNwZWNzIGFzIGxp bms6ICJmb28uMSIgImZvbygxKSIKCQlpZiAoZGVmaW5lZCgkbWFuY2dpKSkgewoJCQkkXyA9IGh0 bWxpZnlfc3ViIHsKCQkJCXN7CgkJICAoXGIoW2EtekEtWl1bXHcuXSspCgkJICAgKD86CgkJICAg IFwoIChbMC05bl0pIFwpXEIKCQkgICAgfAoJCSAgICBcLihbMC05bl0pXGIKCQkgICApCgkJICAp CgkJIH17CgkJICAgICAmbGluaygkMSwgc3ByaW50ZigkbWFuY2dpLCBkZWZpbmVkKCQzKSA/ICQz IDogJDQsICQyKSkKCQkgfWVneDsKCQkJICAgIH0KCQkJICAgICRfOwoJCX0KCX0KCgkkXzsKfQoK I3hoY2hlbgpzdWIgaHRtbGpzKCQpCnsKCWxvY2FsICgkXykgPSBAXzsKCglzL1xcL1xcXFwvZzsK CXMvXCcvXFxcJy9nOwoJcy9cbi9cXG4vZzsKCXMvXC8vXFxcLy9nOwoJJF87Cn0KCnN1YiBzcGFj ZWRIdG1sVGV4dCgkOyQpIHsKCWxvY2FsICRfID0gJF9bMF07CglteSAkdHMgPSAkX1sxXSB8fCAk dGFic3RvcDsKCgkjIEN1dCB0cmFpbGluZyBzcGFjZXMgYW5kIHRhYnMKCXMvWyBcdF0rJC8vOwoK CWlmIChkZWZpbmVkKCR0cykpIHsKCgkJIyBFeHBhbmQgdGFicwoJCTEgd2hpbGUgcy9cdCsvJyAn IHggKGxlbmd0aCgkJikgKiAkdHMgLSBsZW5ndGgoJGApICUgJHRzKS9lCgl9CgoJIyByZXBsYWNl IDx0YWI+IGFuZCA8c3BhY2U+IChcMDAxIGlzIHRvIHByb3RlY3QgdXMgZnJvbSBodG1saWZ5KQoJ IyBnemlwIGNhbiBtYWtlIGV4Y2VsbGVudCB1c2Ugb2YgdGhpcyByZXBlYXRpbmcgcGF0dGVybiA6 LSkKCWlmICgkaHJfYnJlYWthYmxlKSB7CgoJCSMgbWFrZSBldmVyeSBvdGhlciBzcGFjZSAnYnJl YWthYmxlJwoJCXMvICAvIFwwMDFuYnNwOy9nOyAgICAjIDIgKiA8c3BhY2U+CgkJICAgICAgICAg ICAgICAgICAgICAgICMgbGVhdmUgc2luZ2xlIHNwYWNlIGFzIGl0IGlzCgl9IGVsc2UgewoJCXMv IC9cMDAxbmJzcDsvZzsKCX0KCgkkXyA9IGh0bWxpZnkoJF8sICRhbGxvd19zb3VyY2VfZXh0cmEp OwoKCSMgdW5lc2NhcGUKCXkvXDAwMS8mLzsKCglyZXR1cm4gJF87Cn0KCiMgTm90ZSB0aGF0IHRo aXMgZG9lc24ndCBodG1scXVvdGUgdGhlIGZpcnN0IGFyZ3VtZW50Li4uCnN1YiBsaW5rKCQkKSB7 CglteSAoJG5hbWUsICR1cmwpID0gQF87CgoJJHVybCA9fiBzLzovc3ByaW50ZigiJSUlMDJ4Iiwg b3JkKCQmKSkvZWcKCSAgICBpZiAkdXJsID1+IC9eW15hLXpdLzsgICAgIyByZWxhdGl2ZQoKCXNw cmludGYgJzxhIGhyZWY9IiVzIj4lczwvYT4nLCBocmVmcXVvdGUoJHVybCksICRuYW1lOwp9Cgpz dWIgcmV2Y21wKCQkKSB7CglteSAoJHJldjEsICRyZXYyKSA9IEBfOwoKCSMgbWFrZSBubyBjb21w YXJpc29uIGZvciBhIHRhZyBvciBhIGJyYW5jaAoJcmV0dXJuIDAgaWYgJHJldjEgPX4gL1teXGQu XS8gfHwgJHJldjIgPX4gL1teXGQuXS87CgoJbXkgKEByMSkgPSBzcGxpdCAoL1wuLywgJHJldjEp OwoJbXkgKEByMikgPSBzcGxpdCAoL1wuLywgJHJldjIpOwoJbXkgKCRhLCAkYik7CgoJd2hpbGUg KCgkYSA9IHNoaWZ0IChAcjEpKSAmJiAoJGIgPSBzaGlmdCAoQHIyKSkpIHsKCQlpZiAoJGEgIT0g JGIpIHsKCQkJcmV0dXJuICRhIDw9PiAkYjsKCQl9Cgl9CglpZiAoQHIxKSB7IHJldHVybiAxOyB9 CglpZiAoQHIyKSB7IHJldHVybiAtMTsgfQoJcmV0dXJuIDA7Cn0KCnN1YiBmYXRhbCgkJEApIHsK CW15ICgkZXJyY29kZSwgJGZvcm1hdCwgQGFyZ3MpID0gQF87CglpZiAoJGlzX21vZF9wZXJsKSB7 CgkJQXBhY2hlLT5yZXF1ZXN0LT5zdGF0dXMoKHNwbGl0ICgvIC8sICRlcnJjb2RlKSlbMF0pOwoJ fSBlbHNlIHsKCQlwcmludCAiU3RhdHVzOiAkZXJyY29kZVxyXG4iOwoJfQoJaHRtbF9oZWFkZXIo IkVycm9yIik7CglwcmludCAiPHA+RXJyb3I6ICIsCgkgIHNwcmludGYoJGZvcm1hdCwgbWFwKGh0 bWxxdW90ZSgkXyksIEBhcmdzKSksCgkgICI8L3A+XG4iOwoJaHRtbF9mb290ZXIoKTsKCWV4aXQo MSk7Cn0KCnN1YiByZWRpcmVjdCgkKSB7CglteSAoJHVybCkgPSBAXzsKCWlmICgkaXNfbW9kX3Bl cmwpIHsKCQlBcGFjaGUtPnJlcXVlc3QtPnN0YXR1cygzMDEpOwoJCUFwYWNoZS0+cmVxdWVzdC0+ aGVhZGVyX291dChMb2NhdGlvbiA9PiAkdXJsKTsKCX0gZWxzZSB7CgkJcHJpbnQgIlN0YXR1czog MzAxIE1vdmVkXHJcbiI7CgkJcHJpbnQgIkxvY2F0aW9uOiAkdXJsXHJcbiI7Cgl9CglodG1sX2hl YWRlcigiTW92ZWQiKTsKCXByaW50ICI8cD5UaGlzIGRvY3VtZW50IGlzIGxvY2F0ZWQgIiwgJmxp bmsoJ2hlcmUnLCAkdXJsKSwgIjwvcD5cbiI7CglodG1sX2Zvb3RlcigpOwoJZXhpdCgxKTsKfQoK c3ViIHNhZmVnbG9iKCQpIHsKCW15ICgkZmlsZW5hbWUpID0gQF87CglteSAoJGRpcm5hbWUpOwoJ bXkgKEByZXN1bHRzKTsKCW15ICRkaCA9IGRvIHsgbG9jYWwgKCpESCk7IH07CgoJKCRkaXJuYW1l ID0gJGZpbGVuYW1lKSA9fiBzfC9bXi9dKyR8fDsKCSRmaWxlbmFtZSA9fiBzfC4qL3x8OwoKCWlm IChvcGVuZGlyKCRkaCwgJGRpcm5hbWUpKSB7CgkJbXkgJGdsb2IgPSAkZmlsZW5hbWU7CgkJbXkg JHQ7CgoJCSMJdHJhbnNmb3JtIGZpbGVuYW1lIGZyb20gZ2xvYiB0byByZWdleC4gIERlYWwgd2l0 aDoKCQkjCVssIHssID8sICogYXMgZ2xvYiBjaGFycwoJCSMJbWFrZSBzdXJlIHRvIGVzY2FwZSBh bGwgb3RoZXIgcmVnZXggY2hhcnMKCQkkZ2xvYiA9fiBzLyhbXC5cKFwpXHxcK10pL1xcJDEvZzsK CQkkZ2xvYiA9fiBzL1wqLy4qL2c7CgkJJGdsb2IgPX4gcy9cPy8uL2c7CgkJJGdsb2IgPX4gcy97 KFtefV0rKX0vKCR0ID0gJDEpID1+IHMtLC18LWc7ICIoJHQpIi9lZzsKCQlmb3JlYWNoIChyZWFk ZGlyKCRkaCkpIHsKCgkJCWlmICgvXiR7Z2xvYn0kLykgewoJCQkJcHVzaCAoQHJlc3VsdHMsICIk ZGlybmFtZS8iIC4gJF8pOwoJCQl9CgkJfQoJCWNsb3NlZGlyKCRkaCk7Cgl9CgoJQHJlc3VsdHM7 Cn0KCnN1YiBzZWFyY2hfcGF0aCgkKSB7CglteSAoJGNvbW1hbmQpID0gQF87CglteSAkZDsKCglm b3IgJGQgKHNwbGl0ICgvOi8sICRjb21tYW5kX3BhdGgpKSB7CgkJcmV0dXJuICIkZC8kY29tbWFu ZCIgaWYgLXggIiRkLyRjb21tYW5kIjsKCX0KCgknJzsKfQoKc3ViIGdldE1pbWVUeXBlRnJvbVN1 ZmZpeCgkKSB7CglteSAoJGZ1bGxuYW1lKSA9IEBfOwoJbXkgKCRtaW1ldHlwZSwgJHN1ZmZpeCk7 CglteSAkZmggPSBkbyB7IGxvY2FsICgqRkgpOyB9OwoKCSgkc3VmZml4ID0gJGZ1bGxuYW1lKSA9 fiBzL14uKlwuKFteLl0qKSQvJDEvOwoJJG1pbWV0eXBlID0gJE1UWVBFU3skc3VmZml4fTsKCSRt aW1ldHlwZSA9ICRNVFlQRVN7JyonfSBpZiAoISRtaW1ldHlwZSk7CgoJaWYgKCEkbWltZXR5cGUg JiYgLWYgJG1pbWVfdHlwZXMpIHsKCgkJIyBva2V5LCB0aGlzIGlzIHNvbWV0aGluZyBzcGVjaWFs IC0gc2VhcmNoIHRoZQoJCSMgbWltZS50eXBlcyBkYXRhYmFzZQoJCW9wZW4oJGZoLCAiPCRtaW1l X3R5cGVzIik7CgkJd2hpbGUgKDwkZmg+KSB7CgkJCWlmICgkXyA9fiAvXlxzKihcUytcL1xTKyku KlxiJHN1ZmZpeFxiLykgewoJCQkJJG1pbWV0eXBlID0gJDE7CgkJCQlsYXN0OwoJCQl9CgkJfQoJ CWNsb3NlKCRmaCk7Cgl9CgoJIyBva2V5LCBkaWRuJ3QgZmluZCBhbnl0aGluZyB1c2VmdWwgLi4K CWlmICghKCRtaW1ldHlwZSA9fiAvXFNcL1xTLykpIHsKCQkkbWltZXR5cGUgPSAidGV4dC9wbGFp biI7Cgl9CglyZXR1cm4gJG1pbWV0eXBlOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiMgcmVhZCBmaXJzdCBsaW5lcyBsaWtlIGhlYWQoMSkKIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwpzdWIgaGVhZCgkOyQpIHsKCW15ICRmaCAgICAgICAgPSAkX1swXTsKCW15ICRs aW5lY291bnQgPSAkX1sxXSB8fCAxMDsKCglteSBAYnVmOwoKCWlmICgkbGluZWNvdW50ID4gMCkg ewoJCW15ICRpOwoJCWZvciAoJGkgPSAwIDsgIWVvZigkZmgpICYmICRpIDwgJGxpbmVjb3VudCA7 ICRpKyspIHsKCQkJcHVzaCBAYnVmLCBzY2FsYXIgPCRmaD47CgkJfQoJfSBlbHNlIHsKCQlAYnVm ID0gPCRmaD47Cgl9CgoJQGJ1ZjsKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoj IHNjYW4gdmltIGFuZCBFbWFjcyBkaXJlY3RpdmVzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKc3ViIHNjYW5fZGlyZWN0aXZlcyhAKSB7CglteSAkdHMgPSB1bmRlZjsKCglmb3IgKEBf KSB7CgkJJHRzID0gJDEgaWYgL1xiKD86dHN8dGFic3RvcHx0YWItd2lkdGgpWzo9XVxzKihbMS05 XVxkKilcYi87Cgl9CgoJKCd0YWJzdG9wJyA9PiAkdHMpOwp9CgpzdWIgb3Blbk91dHB1dEZpbHRl cigpIHsKCXJldHVybiBpZiAhZGVmaW5lZCgkb3V0cHV0X2ZpbHRlcikgfHwgJG91dHB1dF9maWx0 ZXIgZXEgJyc7CgoJb3BlbihTVERPVVQsICJ8LSIpIGFuZCByZXR1cm47CgoJIyBjaGlsZCBvZiBj aGlsZAoJb3BlbihTVERFUlIsICc+L2Rldi9udWxsJyk7CglleGVjKCRvdXRwdXRfZmlsdGVyKSBv ciBleGl0IC0xOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc2hvdyBBbm5v dGF0aW9uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc3ViIGRvQW5ub3RhdGUoJCQp IHsKCW15ICgkcmV2KSA9IEBfOwoJbXkgKCRwaWQpOwoJbXkgKCRwYXRobmFtZSwgJGZpbGVuYW1l KTsKCW15ICRyZWFkZXIgPSBkbyB7IGxvY2FsICgqRkgpOyB9OwoJbXkgJHdyaXRlciA9IGRvIHsg bG9jYWwgKCpGSCk7IH07CgoJIyBtYWtlIHN1cmUgdGhlIHJldmlzaW9ucyBhcmUgd2VsbGZvcm1l ZCwgZm9yIHNlY3VyaXR5CgkjIHJlYXNvbnMgLi4KCWlmICgkcmV2ID1+IC9bXlx3Ll0vKSB7CgkJ ZmF0YWwoIjQwNCBOb3QgRm91bmQiLAoJCSAgICAgICdNYWxmb3JtZWQgcXVlcnkgIiVzIicsCgkJ ICAgICAgJEVOVntRVUVSWV9TVFJJTkd9KTsKCX0KCgkoJHBhdGhuYW1lID0gJHdoZXJlKSA9fiBz LyhBdHRpY1wvKT9bXlwvXSokLy87CgkoJGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzL14uKlwvLy87 CgoJIyB0aGlzIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeQoJJHwgPSAxOwoJJHwgPSAwOyAgICAjIEZs dXNoCgoJIyBXb3JrIGFyb3VuZCBhIG1vZF9wZXJsIGJ1ZyAoPykgaW4gb3JkZXIgdG8gbWFrZSBv cGVuMigpIHdvcmsuCgkjIFNlYXJjaCBmb3IgInVudGllIFNURElOIiBpbiBtb2RfcGVybCBtYWls aW5nIGxpc3QgYXJjaGl2ZXMuCglteSAkb2xkX3N0ZGluOwoJaWYgKCRpc19tb2RfcGVybCAmJiAo JG9sZF9zdGRpbiA9IHRpZWQgKlNURElOKSkgewoJICBsb2NhbCAkXlcgPSB1bmRlZjsKCSAgdW50 aWUgKlNURElOOwoJfQoKCSMgdGhpcyBhbm5vdGF0ZSB2ZXJzaW9uIGlzIGJhc2VkIG9uIHRoZQoJ IyBjdnMgYW5ub3RhdGUtZGVtbyBQZXJsIHNjcmlwdCBieSBDeWNsaWMgU29mdHdhcmUKCSMgSXQg d2FzIHdyaXR0ZW4gYnkgQ3ljbGljIFNvZnR3YXJlLCBodHRwOi8vd3d3LmN5Y2xpYy5jb20vLCBh bmQgaXMgaW4KCSMgdGhlIHB1YmxpYyBkb21haW4uCgkjIHdlIGNvdWxkIGFiYW5kb24gdGhlIHVz ZSBvZiBybG9nLCByY3NkaWZmIGFuZCBjbyB1c2luZwoJIyB0aGUgY3Zzc2VydmVyIGluIGEgc2lt aWxpYXIgd2F5IG9uZSBkYXkgKC4uYWZ0ZXIgcmV3cml0ZSkKCSRwaWQgPSBvcGVuMigkcmVhZGVy LCAkd3JpdGVyLCAkQ01Ee2N2c30sIEBhbm5vdGF0ZV9vcHRpb25zLCAnc2VydmVyJykKCSAgICBv ciBmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwKCQkgICAgICdGYXRhbCBFcnJvciAtIHVuYWJs ZSB0byBvcGVuIGN2cyBmb3IgYW5ub3RhdGlvbicpOwoKCSMgUmUtdGllIFNURElOIGlmIHdlIGZp ZGRsZWQgYXJvdW5kIHdpdGggaXQgZWFybGllciwganVzdCB0byBiZSBzdXJlLgoJdGllKCpTVERJ TiwgcmVmKCRvbGRfc3RkaW4pLCAkb2xkX3N0ZGluKSBpZiAoJG9sZF9zdGRpbiAmJiAhdGllZCgq U1RESU4pKTsKCgkjIE9LLCBmaXJzdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuICBB IHNpbXBsaWZpZWQgZXhhbXBsZSBpczoKCSMgICAgIFJvb3QgL2hvbWUva2luZ2Rvbi96d29yay9j dnNyb290CgkjICAgICBBcmd1bWVudCBmb28veHgKCSMgICAgIERpcmVjdG9yeSBmb28KCSMgICAg IC9ob21lL2tpbmdkb24vendvcmsvY3Zzcm9vdC9mb28KCSMgICAgIERpcmVjdG9yeSAuCgkjICAg ICAvaG9tZS9raW5nZG9uL3p3b3JrL2N2c3Jvb3QKCSMgICAgIGFubm90YXRlCgkjIGFsdGhvdWdo IGFzIHlvdSBjYW4gc2VlIHRoZXJlIGFyZSBhIGZldyBtb3JlIGRldGFpbHMuCgoJcHJpbnQgJHdy aXRlciAiUm9vdCAkY3Zzcm9vdFxuIjsKCXByaW50ICR3cml0ZXIKCSAgICAiVmFsaWQtcmVzcG9u c2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIENoZWNrZWQtaW4gVXBkYXRlZCBNZXJnZWQgUmVt b3ZlZCBNIEVcbiI7CgoJIyBEb24ndCB3b3JyeSBhYm91dCBzZW5kaW5nIHZhbGlkLXJlcXVlc3Rz LCB0aGUgc2VydmVyIGp1c3QgbmVlZHMgdG8KCSMgc3VwcG9ydCAiYW5ub3RhdGUiIGFuZCBpZiBp dCBkb2Vzbid0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiZSBkb25lLgoJcHJpbnQgJHdyaXRl ciAiVXNlVW5jaGFuZ2VkXG4iOwoJcHJpbnQgJHdyaXRlciAiQXJndW1lbnQgLXJcbiI7Cglwcmlu dCAkd3JpdGVyICJBcmd1bWVudCAkcmV2XG4iOwoJcHJpbnQgJHdyaXRlciAiQXJndW1lbnQgJHdo ZXJlXG4iOwoKCSMgVGhlIHByb3RvY29sIHJlcXVpcmVzIHVzIHRvIGZ1bGx5IGZha2UgYSB3b3Jr aW5nIGRpcmVjdG9yeSAoYXQKCSMgbGVhc3QgdG8gdGhlIHBvaW50IG9mIGluY2x1ZGluZyB0aGUg ZGlyZWN0b3JpZXMgZG93biB0byB0aGUgb25lCgkjIGNvbnRhaW5pbmcgdGhlIGZpbGUgaW4gcXVl c3Rpb24pLgoJIyBTbyBpZiAkd2hlcmUgaXMgImRpci9zZGlyL2ZpbGUiLCB0aGVuIEBkaXJzIHdp bGwgYmUgKCJkaXIiLCJzZGlyIiwiZmlsZSIpCglteSBAZGlycyA9IHNwbGl0ICgnLycsICR3aGVy ZSk7CglteSAkcGF0aCA9ICIiOwoJZm9yZWFjaCAoQGRpcnMpIHsKCgkJaWYgKCRwYXRoIGVxICIi KSB7CgoJCQkjIEluIG91ciBleGFtcGxlLCAkXyBpcyAiZGlyIi4KCQkJJHBhdGggPSAkXzsKCQl9 IGVsc2UgewoJCQlwcmludCAkd3JpdGVyICJEaXJlY3RvcnkgJHBhdGhcbiI7CgkJCXByaW50ICR3 cml0ZXIgIiRjdnNyb290LyRwYXRoXG4iOwoKCQkJIyBJbiBvdXIgZXhhbXBsZSwgJF8gaXMgInNk aXIiIGFuZCAkcGF0aCBiZWNvbWVzICJkaXIvc2RpciIKCQkJIyBBbmQgdGhlIG5leHQgdGltZSwg ImZpbGUiIGFuZCAiZGlyL3NkaXIvZmlsZSIgKHdoaWNoIHRoZW4gZ2V0cwoJCQkjIGlnbm9yZWQs IGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBzZW5kIERpcmVjdG9yeSBmb3IgdGhlIGZpbGUpLgoJ CQkkcGF0aCAuPSAiLyRfIjsKCQl9Cgl9CgoJIyBBbmQgdGhlIGxhc3QgIkRpcmVjdG9yeSIgYmVm b3JlICJhbm5vdGF0ZSIgaXMgdGhlIHRvcCBsZXZlbC4KCXByaW50ICR3cml0ZXIgIkRpcmVjdG9y eSAuXG4iOwoJcHJpbnQgJHdyaXRlciAiJGN2c3Jvb3RcbiI7CgoJcHJpbnQgJHdyaXRlciAiYW5u b3RhdGVcbiI7CgoJIyBPSywgd2UndmUgc2VudCBvdXIgY29tbWFuZCB0byB0aGUgc2VydmVyLiAg VGhpbmcgdG8gZG8gaXMgdG8KCSMgY2xvc2UgdGhlIHdyaXRlciBzaWRlIGFuZCBnZXQgYWxsIHRo ZSByZXNwb25zZXMuICBJZiAiY3ZzIHNlcnZlciIKCSMgd2VyZSBuaWNlciBhYm91dCBidWZmZXJp bmcsIHRoZW4gd2UgY291bGQganVzdCBsZWF2ZSBpdCBvcGVuLCBJIHRoaW5rLgoJY2xvc2UoJHdy aXRlcikgb3IgZGllICJjYW5ub3QgY2xvc2U6ICQhIjsKCglodHRwX2hlYWRlcigpOwoKCW5hdmln YXRlSGVhZGVyKCRzY3JpcHR3aGVyZSwgJHBhdGhuYW1lLCAkZmlsZW5hbWUsICRyZXYsICJhbm5v dGF0ZSIpOwoJcHJpbnQKCSAgICAiPGgzIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+QW5u b3RhdGlvbiBvZiAkcGF0aG5hbWUkZmlsZW5hbWUsIFJldmlzaW9uICRyZXY8L2gzPlxuIjsKCgkj IFJlYWR5IHRvIGdldCB0aGUgcmVzcG9uc2VzIGZyb20gdGhlIHNlcnZlci4KCSMgRm9yIGV4YW1w bGU6CgkjICAgICBFIEFubm90YXRpb25zIGZvciBmb28veHgKCSMgICAgIEUgKioqKioqKioqKioq KioqCgkjICAgICBNIDEuMyAgICAgICAgICAoa2luZ2RvbiAgMDYtU2VwLTk3KTogaGVsbG8KCSMg ICAgIG9rCglteSAoJGxpbmVOcikgPSAwOwoJbXkgKCRvbGRMcmV2LCAkb2xkTHVzcikgPSAoIiIs ICIiKTsKCW15ICgkcmV2cHJpbnQsICR1c3JwcmludCk7CgoJaWYgKCRhbm5UYWJsZSkgewoJCXBy aW50ICI8dGFibGUgc3R5bGU9XCJib3JkZXI6IG5vbmVcIiBjZWxsc3BhY2luZz1cIjBcIiBjZWxs cGFkZGluZz1cIjBcIj5cbiI7Cgl9IGVsc2UgewoJCXByaW50ICI8cHJlPiI7Cgl9CgoJIyBwcmVm ZXRjaCBzZXZlcmFsIGxpbmVzCglteSBAYnVmID0gaGVhZCgkcmVhZGVyKTsKCglteSAlZCA9IHNj YW5fZGlyZWN0aXZlcyhAYnVmKTsKCgl3aGlsZSAoQGJ1ZiB8fCAhZW9mKCRyZWFkZXIpKSB7CgkJ JF8gPSBAYnVmID8gc2hpZnQgQGJ1ZiA6IDwkcmVhZGVyPjsKCgkJbXkgQHdvcmRzID0gc3BsaXQ7 CgoJCSMgQWRkaW5nIG9uZSBpcyBmb3IgdGhlIChzaW5nbGUpIHNwYWNlIHdoaWNoIGZvbGxvd3Mg JHdvcmRzWzBdLgoJCW15ICRyZXN0ID0gc3Vic3RyKCRfLCBsZW5ndGgoJHdvcmRzWzBdKSArIDEp OwoJCWlmICgkd29yZHNbMF0gZXEgIkUiKSB7CgkJCW5leHQ7CgkJfSBlbHNpZiAoJHdvcmRzWzBd IGVxICJNIikgewoJCQkkbGluZU5yKys7CgkJCShteSAkbHJldiA9IHN1YnN0cigkXywgMiwgIDEz KSkgPX4geS8gLy9kOwoJCQkobXkgJGx1c3IgPSBzdWJzdHIoJF8sIDE2LCA5KSkgID1+IHkvIC8v ZDsKCQkJbXkgJGxpbmUgPSBzdWJzdHIoJF8sIDM2KTsKCQkJbXkgJGlzQ3VycmVudFJldiA9ICgk cmV2IGVxICRscmV2KTsKCgkJCSMgd2Ugc2hvdWxkIHBhcnNlIHRoZSBkYXRlIGhlcmUgLi4KCQkJ aWYgKCRscmV2IGVxICRvbGRMcmV2KSB7CgkJCQkkcmV2cHJpbnQgPSBzcHJpbnRmKCclLThzJywg JycpOwoJCQl9IGVsc2UgewoJCQkJJHJldnByaW50ID0gc3ByaW50ZignJS04cycsICRscmV2KTsK CQkJCSRyZXZwcmludCA9fgoJCQkJICAgIHNgXFMrYCZsaW5rKCQmLCAiJHNjcmlwdHdoZXJlJHF1 ZXJ5I3JldiQmIilgZQoJCQkJICAgIDsgICAgIyBgCgkJCQkkb2xkTHVzciA9ICcnOwoJCQl9CgoJ CQlpZiAoJGx1c3IgZXEgJG9sZEx1c3IpIHsKCQkJCSR1c3JwcmludCA9ICcnOwoJCQl9IGVsc2Ug ewoJCQkJJHVzcnByaW50ID0gJGx1c3I7CgkJCX0KCQkJJG9sZExyZXYgPSAkbHJldjsKCQkJJG9s ZEx1c3IgPSAkbHVzcjsKCgkJCSMgU2V0IGJvbGQgZm9yIHRleHQtYmFzZWQgYnJvd3NlcnMgb25s eSAtIGdyYXBoaWNhbAoJCQkjIGJyb3dzZXJzIHNob3cgYm9sZCBmb250cyBhIGJpdCB3aWRlciB0 aGFuIHJlZ3VsYXIgZm9udHMsCgkJCSMgc28gaXQgbG9va3MgaXJyZWd1bGFyLgoJCQlwcmludCAi PGI+IiBpZiAoJGlzQ3VycmVudFJldiAmJiAkaXNfdGV4dGJhc2VkKTsKCgkJCXByaW50ZiAiJXMl cyAlLThzICU0ZDoiLCAkcmV2cHJpbnQsCgkJCSAgICAkaXNDdXJyZW50UmV2ID8gJyEnIDogJyAn LCAkdXNycHJpbnQsICRsaW5lTnI7CgkJCXByaW50IHNwYWNlZEh0bWxUZXh0KCRsaW5lLCAkZHsn dGFic3RvcCd9KTsKCgkJCXByaW50ICI8L2I+IiBpZiAoJGlzQ3VycmVudFJldiAmJiAkaXNfdGV4 dGJhc2VkKTsKCQl9IGVsc2lmICgkd29yZHNbMF0gZXEgIm9rIikgewoKCQkJIyBXZSBjb3VsZCBj b21wbGFpbiBhYm91dCBhbnkgdGV4dCByZWNlaXZlZCBhZnRlciB0aGlzLCBsaWtlIHRoZQoJCQkj IENWUyBjb21tYW5kIGxpbmUgY2xpZW50LiAgQnV0IGZvciBzaW1wbGljaXR5LCB3ZSBkb24ndC4K CQl9IGVsc2lmICgkd29yZHNbMF0gZXEgImVycm9yIikgewoJCQlmYXRhbCgiNTAwIEludGVybmFs IEVycm9yIiwKCQkJICAgICAgJ0Vycm9yIG9jY3VyZWQgZHVyaW5nIGFubm90YXRlOiA8Yj4lczwv Yj4nLAoJCQkgICAgICAkXyk7CgkJfQoJfQoKCWlmICgkYW5uVGFibGUpIHsKCQlwcmludCAiPC90 YWJsZT4iOwoJfSBlbHNlIHsKCQlwcmludCAiPC9wcmU+IjsKCX0KCWh0bWxfZm9vdGVyKCk7CgoJ Y2xvc2UoJHJlYWRlcikgb3Igd2FybiAiY2Fubm90IGNsb3NlOiAkISI7Cgl3YWl0Owp9CgojIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgbWFrZSBDaGVja291dAojIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCnN1YiBkb0NoZWNrb3V0KCQkKSB7CglteSAoJGZ1bGxuYW1lLCAk cmV2KSA9IEBfOwoJbXkgKCRtaW1ldHlwZSwgJHJldm9wdCk7CglteSAkZmggPSBkbyB7IGxvY2Fs ICgqRkgpOyB9OwoKCWlmICgkcmV2IGVxICdIRUFEJyB8fCAkcmV2IGVxICcuJykgewoJCSRyZXYg PSB1bmRlZjsKCX0KCgkjIG1ha2Ugc3VyZSB0aGUgcmV2aXNpb25zIGEgd2VsbGZvcm1lZCwgZm9y IHNlY3VyaXR5CgkjIHJlYXNvbnMgLi4KCWlmIChkZWZpbmVkKCRyZXYpICYmICRyZXYgPX4gL1te XHcuXS8pIHsKCQlmYXRhbCgiNDA0IE5vdCBGb3VuZCIsCgkJICAgICAgJ01hbGZvcm1lZCBxdWVy eSAiJXMiJywKCQkgICAgICAkRU5We1FVRVJZX1NUUklOR30pOwoJfQoKCSMgZ2V0IG1pbWV0eXBl CglpZiAoZGVmaW5lZCgkaW5wdXR7ImNvbnRlbnQtdHlwZSJ9KQoJICAgICYmICgkaW5wdXR7ImNv bnRlbnQtdHlwZSJ9ID1+IC9cU1wvXFMvKSkKCXsKCQkkbWltZXR5cGUgPSAkaW5wdXR7ImNvbnRl bnQtdHlwZSJ9Cgl9IGVsc2UgewoJCSRtaW1ldHlwZSA9ICZnZXRNaW1lVHlwZUZyb21TdWZmaXgo JGZ1bGxuYW1lKTsKCX0KCglpZiAoZGVmaW5lZCgkcmV2KSkgewoJCSRyZXZvcHQgPSAiLXIkcmV2 IjsKCQlpZiAoJHVzZV9tb2RkYXRlKSB7CgkJCXJlYWRMb2coJGZ1bGxuYW1lLCAkcmV2KTsKCQkJ JG1vZGRhdGUgPSAkZGF0ZXskcmV2fTsKCQl9Cgl9IGVsc2UgewoJCSRyZXZvcHQgPSAiLXJIRUFE IjsKCgkJaWYgKCR1c2VfbW9kZGF0ZSkgewoJCQlyZWFkTG9nKCRmdWxsbmFtZSk7CgkJCSRtb2Rk YXRlID0gJGRhdGV7JHN5bXJldntIRUFEfX07CgkJfQoJfQoKCSMjIyBqdXN0IGZvciB0aGUgcmVj b3JkOgoJIyMjICdjdnMgY28nIHNlZW1zIHRvIGhhdmUgYSBidWcgcmVnYXJkaW5nIHNpbmdsZSBj aGVja291dCBvZgoJIyMjIGRpcmVjdG9yaWVzL2ZpbGVzIGhhdmluZyBzcGFjZXMgaW4gaXQ7Cgkj IyMgdGhpcyBpcyBhbiBpc3N1ZSB0aGF0IHNob3VsZCBiZSByZXNvbHZlZCBvbiBjdnMncyBzaWRl CgkjCgkjIFNhZmVseSBmb3IgYSBjaGlsZCBwcm9jZXNzIHRvIHJlYWQgZnJvbS4KCWlmICghb3Bl bigkZmgsICItfCIpKSB7ICAgICMgY2hpbGQKCQkgIyBjaGRpciB0byAkdG1wZGlyIGJlZm9yZSB0 byBhdm9pZCBub24tcmVhZGFibGUgY2dpLWJpbiBkaXJlY3RvcmllcwoJCWNoZGlyKCR0bXBkaXIp OwoJCW9wZW4oU1RERVJSLCAiPiZTVERPVVQiKTsgICAgIyBSZWRpcmVjdCBzdGRlcnIgdG8gc3Rk b3V0CgoJCSMgd29yayBhcm91bmQgYSBidWcgb2YgY3ZzIC1wOyBleHBhbmQgc3ltbGlua3MKCQl1 c2UgQ3dkICdhYnNfcGF0aCc7CgkJZXhlYygkQ01Ee2N2c30sIEBjdnNfb3B0aW9ucywKCQkgICAg ICctZCcsIGFic19wYXRoKCRjdnNyb290KSwKCQkgICAgICdjbycsICctcCcsCgkJICAgICAkcmV2 b3B0LCAkd2hlcmUpIG9yIGV4aXQgLTE7Cgl9CgoJaWYgKGVvZigkZmgpKSB7CgkJZmF0YWwoIjQw NCBOb3QgRm91bmQiLAoJCSAgICAgICclcyBpcyBub3QgKGFueSBsb25nZXIpIHBlcnRpbmVudCcs CgkJICAgICAgJHdoZXJlKTsKCX0KCgkjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJI0NoZWNraW5nIG91dCBzcXVpZC9z cmMvZnRwLmMKCSNSQ1M6ICAvdXNyL3NyYy9DVlMvc3F1aWQvc3JjL2Z0cC5jLHYKCSNWRVJTOiAx LjEuMS4yOC42LjIKCSMqKioqKioqKioqKioqKioKCgkjIFBhcnNlIENWUyBoZWFkZXIKCW15ICgk cmV2aXNpb24sICRmaWxlbmFtZSwgJGN2c2hlYWRlcik7CgkkZmlsZW5hbWUgPSAiIjsKCXdoaWxl ICg8JGZoPikgewoJCWxhc3QgaWYgKC9eXCpcKlwqXCovKTsKCQkkcmV2aXNpb24gPSAkMSBpZiAo L15WRVJTOiAoLiopJC8pOwoKCQlpZiAoL15DaGVja2luZyBvdXQgKC4qKSQvKSB7CgkJCSRmaWxl bmFtZSA9ICQxOwoJCQkkZmlsZW5hbWUgPX4gcy9eXC5cLyovLzsKCQl9CgkJJGN2c2hlYWRlciAu PSAkXzsKCX0KCglpZiAoJGZpbGVuYW1lIG5lICR3aGVyZSkgewoJCWZhdGFsKCI1MDAgSW50ZXJu YWwgRXJyb3IiLAoJCSAgICAgICdVbmV4cGVjdGVkIG91dHB1dCBmcm9tIGN2cyBjbzogJXMnLAoJ CSAgICAgICRjdnNoZWFkZXIpOwoJfQoJJHwgPSAxOwoKCWlmICgkbWltZXR5cGUgZXEgInRleHQv eC1jdnN3ZWItbWFya3VwIikgewoJCSZjdnN3ZWJNYXJrdXAoJGZoLCAkZnVsbG5hbWUsICRyZXZp c2lvbik7Cgl9IGVsc2UgewoJCWh0dHBfaGVhZGVyKCRtaW1ldHlwZSk7CgkJcHJpbnQgPCRmaD47 Cgl9CgljbG9zZSgkZmgpOwp9CgpzdWIgY3Zzd2ViTWFya3VwKCQkJCkgewoJbXkgKCRmaWxlaGFu ZGxlLCAkZnVsbG5hbWUsICRyZXZpc2lvbikgPSBAXzsKCW15ICgkcGF0aG5hbWUsICAgJGZpbGVu YW1lKTsKCgkoJHBhdGhuYW1lID0gJHdoZXJlKSA9fiBzLyhBdHRpY1wvKT9bXlwvXSokLy87Cgko JGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzL14uKlwvLy87CglteSAoJGZpbGV1cmwpID0gdXJsZW5j b2RlKCRmaWxlbmFtZSk7CgoJaHR0cF9oZWFkZXIoKTsKCgluYXZpZ2F0ZUhlYWRlcigkc2NyaXB0 d2hlcmUsICRwYXRobmFtZSwgJGZpbGVuYW1lLCAkcmV2aXNpb24sICJ2aWV3Iik7CglwcmludCAi PGhyIG5vc2hhZGU+IjsKCXByaW50ICI8dGFibGUgd2lkdGg9XCIxMDAlXCI+XG48dHI+XG48dGQg c3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFya3VwTG9nQ29sb3JcIj4iOwoJcHJpbnQgIkZp bGU6ICIsICZjbGlja2FibGVQYXRoKCR3aGVyZSwgMSk7CglwcmludCAiJm5ic3A7KCI7CgkmZG93 bmxvYWRfbGluaygkZmlsZXVybCwgJHJldmlzaW9uLCAiZG93bmxvYWQiKTsKCXByaW50ICIpIjsK CglpZiAoISRkZWZhdWx0VGV4dFBsYWluKSB7CgkJcHJpbnQgIiZuYnNwOygiOwoJCSZkb3dubG9h ZF9saW5rKCRmaWxldXJsLCAkcmV2aXNpb24sICJhcyB0ZXh0IiwgInRleHQvcGxhaW4iKTsKCQlw cmludCAiKSI7Cgl9CglwcmludCAiPGJyPlxuIjsKCglpZiAoJHNob3dfbG9nX2luX21hcmt1cCkg ewoJCXJlYWRMb2coJGZ1bGxuYW1lKTsgICAgIywkcmV2aXNpb24pOwoJCXByaW50TG9nKCRyZXZp c2lvbiwgMCk7Cgl9IGVsc2UgewoJCXByaW50ICJWZXJzaW9uOiA8Yj4kcmV2aXNpb248L2I+PGJy PlxuIjsKCQlwcmludCAiVGFnOiA8Yj4iLCAkaW5wdXR7b25seV93aXRoX3RhZ30sICI8L2I+PGJy PlxuIgoJCSAgICBpZiAkaW5wdXR7b25seV93aXRoX3RhZ307Cgl9CglwcmludCAiPC90ZD5cbjwv dHI+XG48L3RhYmxlPiI7CglteSAkdXJsID0gZG93bmxvYWRfdXJsKCRmaWxldXJsLCAkcmV2aXNp b24sICRtaW1ldHlwZSk7CglwcmludCAiPGhyIG5vc2hhZGU+IjsKCglpZiAoJG1pbWV0eXBlID1+ IC9eaW1hZ2UvKSB7CgkJcHJpbnRmICc8aW1nIHNyYz0iJXMiIGFsdD0iIj48YnI+JywgaHJlZnF1 b3RlKCIkdXJsJGJhcmVxdWVyeSIpOwoJfSBlbHNpZiAoJG1pbWV0eXBlID1+IG0lXmFwcGxpY2F0 aW9uL3BkZiUpIHsKCQlwcmludGYgJzxlbWJlZCBzcmM9IiVzIiB3aWR0aD0iMTAwJSI+PGJyPics CgkJICAgIGhyZWZxdW90ZSgiJHVybCRiYXJlcXVlcnkiKTsKCX0gZWxzaWYgKCRwcmVmb3JtYXRf aW5fbWFya3VwKSB7CgkJcHJpbnQgIjxwcmU+IjsKCgkJIyBwcmVmZXRjaCBzZXZlcmFsIGxpbmVz CgkJbXkgQGJ1ZiA9IGhlYWQoJGZpbGVoYW5kbGUpOwoKCQlteSAlZCA9IHNjYW5fZGlyZWN0aXZl cyhAYnVmKTsKCgkJd2hpbGUgKEBidWYgfHwgIWVvZigkZmlsZWhhbmRsZSkpIHsKCQkJJF8gPSBA YnVmID8gc2hpZnQgQGJ1ZiA6IDwkZmlsZWhhbmRsZT47CgoJCQlwcmludCBzcGFjZWRIdG1sVGV4 dCgkXywgJGR7J3RhYnN0b3AnfSk7CgkJfQoJCXByaW50ICI8L3ByZT4iOwoJfSBlbHNlIHsKCQlw cmludCAiPHByZT4iOwoKCQl3aGlsZSAoPCRmaWxlaGFuZGxlPikgewoJCQlwcmludCBodG1scXVv dGUoJF8pOwoJCX0KCQlwcmludCAiPC9wcmU+IjsKCX0KfQoKc3ViIHZpZXdhYmxlKCQpIHsKCW15 ICgkbWltZXR5cGUpID0gQF87CgoJJG1pbWV0eXBlID1+IG0lXigodGV4dHxpbWFnZSkvfGFwcGxp Y2F0aW9uL3BkZiklOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU2hvdyBD b2xvcmVkIERpZmYKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgZG9EaWZmKCQk JCQkJCkgewoJbXkgKCRmdWxsbmFtZSwgJHIxLCAkdHIxLCAkcjIsICR0cjIsICRmKSA9IEBfOwoJ bXkgJGZoID0gZG8geyBsb2NhbCAoKkZIKTsgfTsKCW15ICgkcmV2MSwgJHJldjIsICRzeW0xLCAk c3ltMiwgJGYxLCAkZjIpOwoKCWlmICgmZm9yYmlkZGVuX2ZpbGUoJGZ1bGxuYW1lKSkgewoJCWZh dGFsKCI0MDMgRm9yYmlkZGVuIiwKCQkgICAgICAnQWNjZXNzIGZvcmJpZGRlbi4gIFRoaXMgZmls ZSBpcyBtZW50aW9uZWQgaW4gQEZvcmJpZGRlbkZpbGVzJyk7CgkJcmV0dXJuOwoJfQoKCWlmICgk cjEgPX4gLyhbXjpdKykoOiguKykpPy8pIHsKCQkkcmV2MSA9ICQxOwoJCSRzeW0xID0gJDM7Cgl9 CglpZiAoJHIxIGVxICd0ZXh0JykgewoJCSRyZXYxID0gJHRyMTsKCQkkc3ltMSA9ICIiOwoJfQoK CWlmICgkcjIgPX4gLyhbXjpdKykoOiguKykpPy8pIHsKCQkkcmV2MiA9ICQxOwoJCSRzeW0yID0g JDM7Cgl9CglpZiAoJHIyIGVxICd0ZXh0JykgewoJCSRyZXYyID0gJHRyMjsKCQkkc3ltMiA9ICIi OwoJfQoKCSMgbWFrZSBzdXJlIHRoZSByZXZpc2lvbnMgYSB3ZWxsZm9ybWVkLCBmb3Igc2VjdXJp dHkKCSMgcmVhc29ucyAuLgoJaWYgKCRyZXYxID1+IC9bXlx3Ll0vIHx8ICRyZXYyID1+IC9bXlx3 Ll0vKSB7CgkJZmF0YWwoIjQwNCBOb3QgRm91bmQiLAoJCSAgICAgICdNYWxmb3JtZWQgcXVlcnkg IiVzIicsCgkJICAgICAgJEVOVntRVUVSWV9TVFJJTkd9KTsKCX0KCgkjCgkjIHJldjEgYW5kIHJl djIgYXJlIG5vdyBib3RoIG51bWVyaWMgcmV2aXNpb25zLgoJIyBUaHVzIHdlIGRvIGEgRFdJTSBo ZXJlIGFuZCBzd2FwIHRoZW0gaWYgcmV2MSBpcyBhZnRlciByZXYyLgoJIyBYWFggc2hvdWxkIHdl IHdhcm4gYWJvdXQgdGhlIGZhY3QgdGhhdCB3ZSBkbyB0aGlzPwoJaWYgKCZyZXZjbXAoJHJldjEs ICRyZXYyKSA+IDApIHsKCQlteSAoJHRtcDEsICR0bXAyKSA9ICgkcmV2MSwgJHN5bTEpOwoJCSgk cmV2MSwgJHN5bTEpID0gKCRyZXYyLCAkc3ltMik7CgkJKCRyZXYyLCAkc3ltMikgPSAoJHRtcDEs ICR0bXAyKTsKCX0KCW15ICRkaWZmdHlwZSA9ICRESUZGVFlQRVN7JGZ9OwoKCWlmICghJGRpZmZ0 eXBlKSB7CgkJZmF0YWwoIjQwMCBCYWQgYXJndW1lbnRzIiwKCQkgICAgICAnRGlmZiBmb3JtYXQg JXMgbm90IHVuZGVyc3Rvb2QnLAoJCSAgICAgICRmKTsKCX0KCglteSBAZGlmZnR5cGUgICAgICAg PSBAeyRkaWZmdHlwZS0+eydvcHRzJ319OwoJbXkgJGh1bWFuX3JlYWRhYmxlID0gJGRpZmZ0eXBl LT57J2NvbG9yZWQnfTsKCgkjIGFwcGx5IHNwZWNpYWwgb3B0aW9ucwoJaWYgKCRzaG93ZnVuYykg ewoJCXB1c2ggQGRpZmZ0eXBlLCAnLXAnIGlmICRmIG5lICdzJzsKCgkJbXkgKCRyZTEsICRyZTIp OwoKCQl3aGlsZSAoKCRyZTEsICRyZTIpID0gZWFjaCAlZnVuY2xpbmVfcmVnZXhwKSB7CgkJCWlm ICgkZnVsbG5hbWUgPX4gLyRyZTEvKSB7CgkJCQlwdXNoIEBkaWZmdHlwZSwgJy1GJywgJHJlMjsK CQkJCWxhc3Q7CgkJCX0KCQl9Cgl9CgoJaWYgKCRodW1hbl9yZWFkYWJsZSkgewoJCWlmICgkaHJf aWdud2hpdGUpIHsKCQkJcHVzaCBAZGlmZnR5cGUsICctdyc7CgkJfQoJCWlmICgkaHJfaWdua2V5 c3Vic3QpIHsKCQkJcHVzaCBAZGlmZnR5cGUsICcta2snOwoJCX0KCX0KCglpZiAoIW9wZW4oJGZo LCAiLXwiKSkgeyAgICAjIGNoaWxkCgkJb3BlbihTVERFUlIsICI+JlNURE9VVCIpOyAgICAjIFJl ZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQKCQlvcGVuT3V0cHV0RmlsdGVyKCk7CgkJZXhlYygkQ01E e3Jjc2RpZmZ9LCBAZGlmZnR5cGUsICItciRyZXYxIiwgIi1yJHJldjIiLCAkZnVsbG5hbWUpIG9y IGV4aXQgLTE7Cgl9CglpZiAoJGh1bWFuX3JlYWRhYmxlKSB7CgkJaHR0cF9oZWFkZXIoKTsKCQkm aHVtYW5fcmVhZGFibGVfZGlmZigkZmgsICRyZXYyKTsKCQlodG1sX2Zvb3RlcigpOwoJCWd6aXBj bG9zZSgpOwoJCWV4aXQ7Cgl9IGVsc2UgewoJCWh0dHBfaGVhZGVyKCJ0ZXh0L3BsYWluIik7Cgl9 CgoJIwoJIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KCSNSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL25ldGluZXQv dGNwX291dHB1dC5jLHYKCSNyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKCSNyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMTcKCSNkaWZmIC1jIC1yMS4xNiAtcjEuMTcKCSMqKiogL2hvbWUvbmN2cy9zcmMv c3lzL25ldGluZXQvdGNwX291dHB1dC5jICAgICAxOTk1LzExLzAzIDIyOjA4OjA4ICAgICAxLjE2 CgkjLS0tIC9ob21lL25jdnMvc3JjL3N5cy9uZXRpbmV0L3RjcF9vdXRwdXQuYyAgICAgMTk5NS8x Mi8wNSAxNzo0NjozNSAgICAgMS4xNwoJIwoJIyBJZGVhczoKCSMgLSBudWtlIHRoZSBzdGRlcnIg b3V0cHV0IGlmIGl0J3Mgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUKCSMgLSBBZGQgIm5vIGRpZmZl cmVuY2VzIGZvdW5kIiBpZiB0aGUgZGlmZiBjb21tYW5kIHN1cHBsaWVkIG5vIG91dHB1dC4KCSMK CSMqKiogc3JjL3N5cy9uZXRpbmV0L3RjcF9vdXRwdXQuYyAgICAgMTk5NS8xMS8wMyAyMjowODow OCAgICAgMS4xNgoJIy0tLSBzcmMvc3lzL25ldGluZXQvdGNwX291dHB1dC5jICAgICAxOTk1LzEy LzA1IDE3OjQ2OjM1ICAgICAxLjE3IFJFTEVOR18yXzFfMAoJIyAoYm9ndXMgZXhhbXBsZSwgYnV0 Li4uKQoJIwoJaWYgKGdyZXAgeyAkXyBlcSAnLXUnIH0gQGRpZmZ0eXBlKSB7CgkJJGYxID0gJy0t LSc7CgkJJGYyID0gJ1wrXCtcKyc7Cgl9IGVsc2UgewoJCSRmMSA9ICdcKlwqXConOwoJCSRmMiA9 ICctLS0nOwoJfQoKCXdoaWxlICg8JGZoPikgewoJCWlmIChtfF4kZjEgJGN2c3Jvb3R8bykgewoJ CQlzfCRjdnNyb290L3x8bzsKCQkJaWYgKCRzeW0xKSB7CgkJCQljaG9wOwoJCQkJJF8gLj0gIiAk c3ltMVxuIjsKCQkJfQoJCX0gZWxzaWYgKG18XiRmMiAkY3Zzcm9vdHxvKSB7CgkJCXN8JGN2c3Jv b3QvfHxvOwoKCQkJaWYgKCRzeW0yKSB7CgkJCQljaG9wOwoJCQkJJF8gLj0gIiAkc3ltMlxuIjsK CQkJfQoJCX0KCQlwcmludCAkXzsKCX0KCWNsb3NlKCRmaCk7Cn0KCiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKIyBTaG93IExvZ3MgLi4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwpzdWIgZ2V0RGlyTG9ncygkJEApIHsKCW15ICgkY3Zzcm9vdCwgJGRpcm5hbWUsIEBvdGhl ckZpbGVzKSA9IEBfOwoJbXkgKCRzdGF0ZSwgJG90aGVyRmlsZXMsICR0YWcsICRmaWxlLCAkZGF0 ZSwgJGJyYW5jaHBvaW50LCAkYnJhbmNoLAoJICAgICRsb2cpOwoJbXkgKCRyZXYsICRyZXZpc2lv biwgJHJldndhbnRlZCwgJGZpbGVuYW1lLCAkaGVhZCwgJGF1dGhvcik7CgoJJHRhZyA9ICRpbnB1 dHtvbmx5X3dpdGhfdGFnfTsKCglteSAoJERpck5hbWUpID0gIiRjdnNyb290LyR3aGVyZSI7Cglt eSAoQGZpbGVzLCBAZmlsZXRhZ3MpOwoJbXkgJGZoID0gZG8geyBsb2NhbCAoKkZIKTsgfTsKCglw dXNoIChAZmlsZXMsICZzYWZlZ2xvYigiJERpck5hbWUvKix2IikpOwoJcHVzaCAoQGZpbGVzLCAm c2FmZWdsb2IoIiREaXJOYW1lL0F0dGljLyosdiIpKQoJICAgIGlmICghJGlucHV0eydoaWRlYXR0 aWMnfSk7Cglmb3JlYWNoIG15ICRmaWxlIChAb3RoZXJGaWxlcykgewoJCXB1c2ggKEBmaWxlcywg IiREaXJOYW1lLyRmaWxlIik7Cgl9CgoJIyBqdXN0IGV4ZWN1dGUgcmxvZyBpZiB0aGVyZSBhcmUg YW55IGZpbGVzCglpZiAoJCNmaWxlcyA8IDApIHsKCQlyZXR1cm47Cgl9CgoJaWYgKGRlZmluZWQo JHRhZykpIHsKCgkJI2Nhbid0IHVzZSAtcjx0YWc+IGFzIC0gaXMgYWxsb3dlZCBpbiB0YWduYW1l cywgYnV0IG1pc2ludGVycHJlYXRlZCBieSBybG9nLi4KCQlpZiAoIW9wZW4oJGZoLCAiLXwiKSkg eyAgICAjIGNoaWxkCgkJCW9wZW4oU1RERVJSLCAnPi9kZXYvbnVsbCcpOyAjIHJsb2cgbWF5IGNv bXBsYWluOyBpZ25vcmUuCgkJCW9wZW5PdXRwdXRGaWx0ZXIoKTsKCQkJZXhlYygkQ01Ee3Jsb2d9 LCBAZmlsZXMpIG9yIGV4aXQgLTE7CgkJfQoJfSBlbHNlIHsKCgkJaWYgKCFvcGVuKCRmaCwgIi18 IikpIHsgICAgIyBjaGlsZAoJCQlvcGVuKFNUREVSUiwgJz4vZGV2L251bGwnKTsgIyBybG9nIG1h eSBjb21wbGFpbjsgaWdub3JlLgoJCQlvcGVuT3V0cHV0RmlsdGVyKCk7CgkJCWV4ZWMoJENNRHty bG9nfSwgJy1yJywgQGZpbGVzKSBvciBleGl0IC0xOwoJCX0KCX0KCSRzdGF0ZSA9ICJzdGFydCI7 CgoJd2hpbGUgKDwkZmg+KSB7CgkJaWYgKCRzdGF0ZSBlcSAic3RhcnQiKSB7CgoJCQkjTmV4dCBm aWxlLiBJbml0aWFsaXplIGZpbGUgdmFyaWFibGVzCgkJCSRyZXYgICAgICAgICA9ICcnOwoJCQkk cmV2d2FudGVkICAgPSAnJzsKCQkJJGJyYW5jaCAgICAgID0gJyc7CgkJCSRicmFuY2hwb2ludCA9 ICcnOwoJCQkkZmlsZW5hbWUgICAgPSAnJzsKCQkJJGxvZyAgICAgICAgID0gJyc7CgkJCSRyZXZp c2lvbiAgICA9ICcnOwoJCQklc3ltcmV2ICAgICAgPSAoKTsKCQkJQGZpbGV0YWdzICAgID0gKCk7 CgoJCQkjanVtcCB0byBoZWFkIHN0YXRlCgkJCSRzdGF0ZSA9ICJoZWFkIjsKCQl9CgkJcHJpbnQg IiRzdGF0ZTokXyIgaWYgKCR2ZXJib3NlKTsKCQlhZ2FpbjoKCgkJaWYgKCRzdGF0ZSBlcSAiaGVh ZCIpIHsKCgkJCSMkcmNzZmlsZSA9ICQxIGlmICgvXlJDUyBmaWxlOiAoLispJC8pOyAjbm90IHVz ZWQgKHlldCkKCgkJCWlmICgvXldvcmtpbmcgZmlsZTogKC4rKSQvKSB7CgkJCQkkZmlsZW5hbWUg PSAkMTsKCQkJfSBlbHNpZiAoL15oZWFkOiAoLispJC8pIHsKCQkJCSRoZWFkID0gJDE7CgkJCX0g ZWxzaWYgKC9eYnJhbmNoOiAoLispJC8pIHsKCQkJCSRicmFuY2ggPSAkMQoJCQl9IGVsc2lmICgv XnN5bWJvbGljIG5hbWVzOi8pIHsKCQkJCSRzdGF0ZSA9ICJ0YWdzIjsKCQkJCSgkYnJhbmNoID0g JGhlYWQpID1+IHMvXC5cZCskLy8KCQkJCSAgICBpZiAkYnJhbmNoIGVxICcnOwoJCQkJJGJyYW5j aCA9fiBzLyhcZCspJC8wLiQxLzsKCQkJCSRzeW1yZXZ7TUFJTn0gID0gJGJyYW5jaDsKCQkJCSRz eW1yZXZ7SEVBRH0gID0gJGJyYW5jaDsKCQkJCSRhbGx0YWdze01BSU59ID0gMTsKCQkJCSRhbGx0 YWdze0hFQUR9ID0gMTsKCQkJCXB1c2ggKEBmaWxldGFncywgIk1BSU4iLCAiSEVBRCIpOwoJCQl9 IGVsc2lmICgvJExPR19SRVZTRVBBUkFUT1IvbykgewoJCQkJJHN0YXRlID0gImxvZyI7CgkJCQkk cmV2ICAgPSAnJzsKCQkJCSRkYXRlICA9ICcnOwoJCQkJJGxvZyAgID0gJyc7CgoJCQkJIyBUcnkg dG8gcmVjb25zdHJ1Y3QgdGhlIHJlbGF0aXZlIGZpbGVuYW1lIGlmIFJDUyBzcGl0cyBvdXQgYSBm dWxsIHBhdGgKCQkJCSRmaWxlbmFtZSA9fiBzJV5cUSREaXJOYW1lXEUvJSU7CgkJCX0KCQkJbmV4 dDsKCQl9CgoJCWlmICgkc3RhdGUgZXEgInRhZ3MiKSB7CgkJCWlmICgvXlxzKyhbXjpdKyk6XHMr KFtcZFwuXSspXHMqJC8pIHsKCQkJCXB1c2ggKEBmaWxldGFncywgJDEpOwoJCQkJJHN5bXJldnsk MX0gID0gJDI7CgkJCQkkYWxsdGFnc3skMX0gPSAxOwoJCQkJbmV4dDsKCQkJfSBlbHNpZiAoL15c Uy8pIHsKCgkJCQlpZiAoZGVmaW5lZCgkdGFnKSkgewoJCQkJCWlmIChkZWZpbmVkKCRzeW1yZXZ7 JHRhZ30pCgkJCQkJICAgIHx8ICR0YWcgZXEgIkhFQUQiKQoJCQkJCXsKCQkJCQkJJHJldndhbnRl ZCA9CgkJCQkJCSAgICAkc3ltcmV2eyR0YWcgZXEgIkhFQUQiID8KCQkJCQkJICAgICJNQUlOIiA6 ICR0YWd9OwoJCQkJCQkoJGJyYW5jaCA9ICRyZXZ3YW50ZWQpID1+CgkJCQkJCSAgICBzL1xiMFwu Ly87CgkJCQkJCSgkYnJhbmNocG9pbnQgPSAkYnJhbmNoKSA9fgoJCQkJCQkgICAgcy9cLj9cZCsk Ly87CgkJCQkJCSRyZXZ3YW50ZWQgPSAnJwoJCQkJCQkgICAgaWYgKCRyZXZ3YW50ZWQgbmUgJGJy YW5jaCk7CgkJCQkJfSBlbHNpZiAoJHRhZyBuZSAiSEVBRCIpIHsKCQkJCQkJcHJpbnQKCQkJCQkJ ICAgICJUYWcgbm90IGZvdW5kLCBza2lwIHRoaXMgZmlsZSIKCQkJCQkJICAgIGlmICgkdmVyYm9z ZSk7CgkJCQkJCSRzdGF0ZSA9ICJza2lwIjsKCQkJCQkJbmV4dDsKCQkJCQl9CgkJCQl9CgoJCQkJ Zm9yZWFjaCBteSAkdGFnZm91bmQgKEBmaWxldGFncykgewoJCQkJCSR0YWdzeyR0YWdmb3VuZH0g PSAxOwoJCQkJfQoJCQkJJHN0YXRlID0gImhlYWQiOwoJCQkJZ290byBhZ2FpbjsKCQkJfQoJCX0K CgkJaWYgKCRzdGF0ZSBlcSAibG9nIikgewoJCQlpZiAoLyRMT0dfUkVWU0VQQVJBVE9SL28gfHwg LyRMT0dfRklMRVNFUEFSQVRPUi9vKSB7CgoJCQkJIyBFbmQgb2YgYSBsb2cgZW50cnkuCgkJCQlt eSAkcmV2YnJhbmNoID0gJHJldjsKCQkJCSRyZXZicmFuY2ggPX4gcy9cLlxkKyQvLzsKCQkJCXBy aW50ICIkZmlsZW5hbWUgJHJldiBXYW50ZWQ6ICRyZXZ3YW50ZWQgIiwKCQkJCSAgICAiUmV2YnJh bmNoOiAkcmV2YnJhbmNoIEJyYW5jaDogJGJyYW5jaCAiLAoJCQkJICAgICJCcmFuY2hwb2ludDog JGJyYW5jaHBvaW50XG4iCgkJCQkgICAgaWYgKCR2ZXJib3NlKTsKCgkJCQlpZiAoJHJldndhbnRl ZCBlcSAnJyAmJiAkYnJhbmNoIG5lICcnCgkJCQkgICAgJiYgJGJyYW5jaCBlcSAkcmV2YnJhbmNo IHx8ICFkZWZpbmVkKCR0YWcpKQoJCQkJewoJCQkJCXByaW50CgkJCQkJICAgICJGaWxlIHJldmlz aW9uICRyZXYgZm91bmQgZm9yIGJyYW5jaCAkYnJhbmNoXG4iCgkJCQkJICAgIGlmICgkdmVyYm9z ZSk7CgkJCQkJJHJldndhbnRlZCA9ICRyZXY7CgkJCQl9CgoJCQkJaWYgKCRyZXZ3YW50ZWQgbmUg JycgPyAkcmV2IGVxICRyZXZ3YW50ZWQgOgoJCQkJICAgICRicmFuY2hwb2ludCBuZSAnJyA/ICRy ZXYgZXEgJGJyYW5jaHBvaW50IDoKCQkJCSAgICAwICYmICgkcmV2IGVxICRoZWFkKSkKCQkJCXsg ICAgIyBEb24ndCB0aGluayBoZWFkIGlzIG5lZWRlZCBoZXJlLi4KCQkJCQlwcmludAoJCQkJCSAg ICAiRmlsZSBpbmZvICRyZXYgZm91bmQgZm9yICRmaWxlbmFtZVxuIgoJCQkJCSAgICBpZiAoJHZl cmJvc2UpOwoJCQkJCW15IEBmaW5mbyA9CgkJCQkJICAgICgkcmV2LCAkZGF0ZSwgJGxvZywgJGF1 dGhvciwKCQkJCQkJJGZpbGVuYW1lKTsKCQkJCQlteSAoJG5hbWUpOwoJCQkJCSgkbmFtZSA9ICRm aWxlbmFtZSkgPX4gcyUvLiolJTsKCQkJCQkkZmlsZWluZm97JG5hbWV9ID0gW0BmaW5mb107CgkJ CQkJJHN0YXRlID0gImRvbmUiIGlmICgkcmV2IGVxICRyZXZ3YW50ZWQpOwoJCQkJfQoJCQkJJHJl diAgPSAnJzsKCQkJCSRkYXRlID0gJyc7CgkJCQkkbG9nICA9ICcnOwoJCQl9IGVsc2lmICgkZGF0 ZSBlcSAnJwoJCQkgICAgJiYgbXxeZGF0ZTpccysoXGQrKS8oXGQrKS8oXGQrKVxzKyhcZCspOihc ZCspOihcZCspO3wKCQkJICAgICkKCQkJewoJCQkJbXkgJHlyID0gJDE7CgoJCQkJIyBkYW1uIDIt ZGlnaXQgeWVhciByb3V0aW5lcyA6LSkKCQkJCWlmICgkeXIgPiAxMDApIHsKCQkJCQkkeXIgLT0g MTkwMDsKCQkJCX0KCQkJCSRkYXRlID0KCQkJCSAgICAmVGltZTo6TG9jYWw6OnRpbWVnbSgkNiwg JDUsICQ0LCAkMywgJDIgLSAxLAoJCQkJCSR5cik7CgkJCQkoJGF1dGhvcikgPSAvYXV0aG9yOiAo W147XSspLzsKCQkJCSRzdGF0ZSA9ICJsb2ciOwoJCQkJJGxvZyAgID0gJyc7CgkJCQluZXh0OwoJ CQl9IGVsc2lmICgkcmV2IGVxICcnICYmIC9ecmV2aXNpb24gKFxkKyg/OlwuXGQrKSspLiokLykg ewoJCQkJJHJldiA9ICQxOyAjIC4qJCBlYXRzIHVwIHRoZSBsb2NrZXIobG9ja2Vycz8pIGluZm8s IGlmIGFueQoJCQkJbmV4dDsKCQkJfSBlbHNlIHsKCQkJCSRsb2cgLj0gJF87CgkJCX0KCQl9CgoJ CWlmICgvJExPR19GSUxFU0VQQVJBVE9SL28pIHsKCQkJJHN0YXRlID0gInN0YXJ0IjsKCQkJbmV4 dDsKCQl9Cgl9CgoJaWYgKCQuID09IDApIHsKCQlmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwK CQkgICAgICAnRmFpbGVkIHRvIHNwYXduIEdOVSBybG9nIG9uIDxlbT4iJXMiPC9lbT4uICA8cD5E aWQgeW91IHNldCB0aGUgPGI+JGNvbW1hbmRfcGF0aDwvYj4gaW4geW91ciBjb25maWd1cmF0aW9u IGZpbGUgY29ycmVjdGx5ID8gKEN1cnJlbnRseSAiJXMiJywKCQkgICAgICBqb2luICgiLCAiLCBA ZmlsZXMpLCAkY29tbWFuZF9wYXRoKTsKCX0KCWNsb3NlKCRmaCk7Cn0KCnN1YiByZWFkTG9nKCQ7 JCkgewoJbXkgKCRmdWxsbmFtZSwgJHJldmlzaW9uKSA9IEBfOwoJbXkgKCRzeW1uYW1lcywgJGhl YWQsICRyZXYsICRiciwgJGJycCwgJGJyYW5jaCwgJGJyYW5jaHJldik7CglteSAkZmggPSBkbyB7 IGxvY2FsICgqRkgpOyB9OwoKCWlmIChkZWZpbmVkKCRyZXZpc2lvbikpIHsKCQkkcmV2aXNpb24g PSAiLXIkcmV2aXNpb24iOwoJfSBlbHNlIHsKCQkkcmV2aXNpb24gPSAiIjsKCX0KCgl1bmRlZiAl c3ltcmV2OwoJdW5kZWYgJXJldnN5bTsKCXVuZGVmIEBhbGxyZXZpc2lvbnM7Cgl1bmRlZiAlZGF0 ZTsKCXVuZGVmICVhdXRob3I7Cgl1bmRlZiAlc3RhdGU7Cgl1bmRlZiAlZGlmZmxpbmVzOwoJdW5k ZWYgJWxvZzsKCglwcmludCgiR29pbmcgdG8gcmxvZyAnJGZ1bGxuYW1lJ1xuIikgaWYgKCR2ZXJi b3NlKTsKCWlmICghb3BlbigkZmgsICItfCIpKSB7ICAgICMgY2hpbGQKCQlpZiAoJHJldmlzaW9u IG5lICcnKSB7CgkJCW9wZW5PdXRwdXRGaWx0ZXIoKTsKCQkJZXhlYygkQ01Ee3Jsb2d9LCAkcmV2 aXNpb24sICRmdWxsbmFtZSkgb3IgZXhpdCAtMTsKCQl9IGVsc2UgewoJCQlvcGVuT3V0cHV0Rmls dGVyKCk7CgkJCWV4ZWMoJENNRHtybG9nfSwgJGZ1bGxuYW1lKSBvciBleGl0IC0xOwoJCX0KCX0K Cgl3aGlsZSAoPCRmaD4pIHsKCQlwcmludCBpZiAoJHZlcmJvc2UpOwoJCWlmICgkc3ltbmFtZXMp IHsKCQkJaWYgKC9eXHMrKFteOl0rKTpccysoW1xkXC5dKykvKSB7CgkJCQkkc3ltcmV2eyQxfSA9 ICQyOwoJCQl9IGVsc2UgewoJCQkJJHN5bW5hbWVzID0gMDsKCQkJfQoJCX0gZWxzaWYgKC9eaGVh ZDpccysoW1xkXC5dKykvKSB7CgkJCSRoZWFkID0gJDE7CgkJfSBlbHNpZiAoL15icmFuY2g6XHMr KFtcZFwuXSspLykgewoJCQkkY3VyYnJhbmNoID0gJDE7CgkJfSBlbHNpZiAoL15zeW1ib2xpYyBu YW1lcy8pIHsKCQkJJHN5bW5hbWVzID0gMTsKCQl9IGVsc2lmICgvXi0tLS0tLykgewoJCQlsYXN0 OwoJCX0KCX0KCSgkY3VyYnJhbmNoID0gJGhlYWQpID1+IHMvXC5cZCskLy8gaWYgKCFkZWZpbmVk KCRjdXJicmFuY2gpKTsKCgkjIGVhY2ggbG9nIGVudHJ5IGlzIG9mIHRoZSBmb3JtOgoJIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkjIHJldmlzaW9uIDMuNy4xLjEKCSMgZGF0ZTogMTk5 NS8xMS8yOSAyMjoxNTo1MjsgIGF1dGhvcjogZmVubmVyOyAgc3RhdGU6IEV4cDsgIGxpbmVzOiAr NSAtMwoJIyBsb2cgaW5mbwoJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJIyBGb3Ig YSBsb2NrZWQgcmV2aXNpb24sIHRoZSBmaXJzdCBsaW5lIGFmdGVyIHRoZSBzZXBhcmF0b3IgCgkj IGJlY29tZXMgc210aCBsaWtlCgkjIHJldmlzaW9uIDkuMTkJbG9ja2VkIGJ5OiB2YXNzaWxpaTsK Cglsb2dlbnRyeToKCgl3aGlsZSAoIS8kTE9HX0ZJTEVTRVBBUkFUT1IvbykgewoJCSRfID0gPCRm aD47CgkJbGFzdCBsb2dlbnRyeSBpZiAoIWRlZmluZWQoJF8pKTsgICAgIyBFT0YKCQlwcmludCAi UjoiLCAkXyBpZiAoJHZlcmJvc2UpOwoJCWlmICgvXnJldmlzaW9uIChcZCsoPzpcLlxkKykrKS8p IHsKCQkJJHJldiA9ICQxOwoJCQl1bnNoaWZ0IChAYWxscmV2aXNpb25zLCAkcmV2KTsKCQl9IGVs c2lmICgvJExPR19GSUxFU0VQQVJBVE9SL28gfHwgLyRMT0dfUkVWU0VQQVJBVE9SL28pIHsKCQkJ bmV4dCBsb2dlbnRyeTsKCQl9IGVsc2UgewoKCQkJIyBUaGUgcmxvZyBvdXRwdXQgaXMgc3ludGFj dGljYWxseSBhbWJpZ3VvdXMuICBXZSBtdXN0CgkJCSMgaGF2ZSBndWVzc2VkIHdyb25nIGFib3V0 IHdoZXJlIHRoZSBlbmQgb2YgdGhlIGxhc3QgbG9nCgkJCSMgbWVzc2FnZSB3YXMuCgkJCSMgU2lu Y2UgdGhpcyBpcyBsaWtlbHkgdG8gaGFwcGVuIHdoZW4gcGVvcGxlIHB1dCBybG9nIG91dHB1dAoJ CQkjIGluIHRoZWlyIGNvbW1pdCBtZXNzYWdlcywgZG9uJ3QgZXZlbiBib3RoZXIga2VlcGluZwoJ CQkjIHRoZXNlIGxpbmVzIHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCByZXZpc2lvbiB0aGV5IGdv IHdpdGgKCQkJIyBhbnkgbW9yZS4KCQkJbmV4dCBsb2dlbnRyeTsKCQl9CgkJJF8gPSA8JGZoPjsK CQlwcmludCAiRDoiLCAkXyBpZiAoJHZlcmJvc2UpOwoJCWlmICgKCQkgICAgbXxeZGF0ZTpccyso XGQrKS8oXGQrKS8oXGQrKVxzKyhcZCspOihcZCspOihcZCspO1xzK2F1dGhvcjpccysoXFMrKTtc cytzdGF0ZTpccysoXFMrKTtccysobGluZXM6XHMrKFswLTlccystXSspKT98CgkJICAgICkKCQl7 CgkJCW15ICR5ciA9ICQxOwoKCQkJIyBkYW1uIDItZGlnaXQgeWVhciByb3V0aW5lcyA6LSkKCQkJ aWYgKCR5ciA+IDEwMCkgewoJCQkJJHlyIC09IDE5MDA7CgkJCX0KCQkJJGRhdGV7JHJldn0gPQoJ CQkgICAgJlRpbWU6OkxvY2FsOjp0aW1lZ20oJDYsICQ1LCAkNCwgJDMsICQyIC0gMSwgJHlyKTsK CQkJJGF1dGhvcnskcmV2fSAgICA9ICQ3OwoJCQkkc3RhdGV7JHJldn0gICAgID0gJDg7CgkJCSRk aWZmbGluZXN7JHJldn0gPSAkMTA7CgkJfSBlbHNlIHsKCQkJZmF0YWwoIjUwMCBJbnRlcm5hbCBF cnJvciIsCgkJCSAgICAgICdFcnJvciBwYXJzaW5nIFJDUyBvdXRwdXQ6ICVzJywKCQkJICAgICAg JF8pOwoJCX0KCQlsaW5lOgoKCQl3aGlsZSAoPCRmaD4pIHsKCQkJcHJpbnQgIkw6IiwgJF8gaWYg KCR2ZXJib3NlKTsKCQkJbmV4dCBsaW5lIGlmICgvXmJyYW5jaGVzOlxzLyk7CgkJCWxhc3QgbGlu ZQoJCQkgICAgaWYgKC8kTE9HX0ZJTEVTRVBBUkFUT1IvbyB8fCAvJExPR19SRVZTRVBBUkFUT1Iv byk7CgkJCSRsb2d7JHJldn0gLj0gJF87CgkJfQoJCXByaW50ICJFOiIsICRfIGlmICgkdmVyYm9z ZSk7Cgl9CgljbG9zZSgkZmgpOwoJcHJpbnQgIkRvbmUgcmVhZGluZyBSQ1MgZmlsZVxuIiBpZiAo JHZlcmJvc2UpOwoKCUByZXZvcmRlciA9IHJldmVyc2Ugc29ydCB7IHJldmNtcCgkYSwgJGIpIH0g QGFsbHJldmlzaW9uczsKCXByaW50ICJEb25lIHNvcnRpbmcgcmV2aXNpb25zIiwgam9pbiAoIiAi LCBAcmV2b3JkZXIpLCAiXG4iCgkgICAgaWYgKCR2ZXJib3NlKTsKCgkjCgkjIEhFQUQgaXMgYW4g YXJ0aWZpY2lhbCB0YWcgd2hpY2ggaXMgc2ltcGx5IHRoZSBoaWdoZXN0IHRhZyBudW1iZXIgb24g dGhlIG1haW4KCSMgYnJhbmNoLCB1bmxlc3MgdGhlcmUgaXMgYSBicmFuY2ggdGFnIGluIHRoZSBS Q1MgZmlsZSBpbiB3aGljaCBjYXNlIGl0J3MgdGhlCgkjIGhpZ2hlc3QgcmV2aXNpb24gb24gdGhh dCBicmFuY2guICBGaW5kIGl0IGJ5IGxvb2tpbmcgdGhyb3VnaCBAcmV2b3JkZXI7IGl0CgkjIGlz IHRoZSBmaXJzdCBjb21taXQgbGlzdGVkIG9uIHRoZSBhcHByb3ByaWF0ZSBicmFuY2guCgkjIFRo aXMgaXMgbm90IG5lY2Nlc2FyeSB0aGUgc2FtZSByZXZpc2lvbiBhcyBtYXJrZWQgYXMgaGVhZCBp biB0aGUgUkNTIGZpbGUuCglteSAkaGVhZHJldiA9ICRjdXJicmFuY2ggfHwgIjEiOwoJKCRzeW1y ZXZ7Ik1BSU4ifSA9ICRoZWFkcmV2KSA9fiBzLyhcZCspJC8wLiQxLzsKCglmb3JlYWNoICRyZXYg KEByZXZvcmRlcikgewoJCWlmICgkcmV2ID1+IC9eKFxTKilcLlxkKyQvICYmICRoZWFkcmV2IGVx ICQxKSB7CgkJCSRzeW1yZXZ7IkhFQUQifSA9ICRyZXY7CgkJCWxhc3Q7CgkJfQoJfQoJKCRzeW1y ZXZ7IkhFQUQifSA9ICRoZWFkcmV2KSA9fiBzL1wuXGQrJC8vCgkgICAgaWYgKCFkZWZpbmVkKCRz eW1yZXZ7IkhFQUQifSkpOwoJcHJpbnQgIkRvbmUgZmluZGluZyBIRUFEXG4iIGlmICgkdmVyYm9z ZSk7CgoJIwoJIyBOb3cgdGhhdCB3ZSBrbm93IGFsbCBvZiB0aGUgcmV2aXNpb24gbnVtYmVycywg d2UgY2FuIGFzc29jaWF0ZQoJIyBhYnNvbHV0ZSByZXZpc2lvbiBudW1iZXJzIHdpdGggYWxsIG9m IHRoZSBzeW1ib2xpYyBuYW1lcywgYW5kCgkjIHBhc3MgdGhlbSB0byB0aGUgZm9ybSBzbyB0aGF0 IHRoZSBzYW1lIGFzc29jaWF0aW9uIGRvZXNuJ3QgaGF2ZQoJIyB0byBiZSBidWlsdCB0aGVuLgoJ IwoJdW5kZWYgQGJyYW5jaG5hbWVzOwoJdW5kZWYgJWJyYW5jaHBvaW50OwoJdW5kZWYgJHNlbDsK Cglmb3JlYWNoIChyZXZlcnNlIHNvcnQga2V5cyAlc3ltcmV2KSB7CgkJJHJldiA9ICRzeW1yZXZ7 JF99OwoJCWlmICgkcmV2ID1+IC9eKCguKilcLik/XGIwXC4oXGQrKSQvKSB7CgkJCXB1c2ggKEBi cmFuY2huYW1lcywgJF8pOwoKCQkJIwoJCQkjIEEgcmV2aXNpb24gbnVtYmVyIG9mIEEuQi4wLkQg cmVhbGx5IHRyYW5zbGF0ZXMgaW50bwoJCQkjICJ0aGUgaGlnaGVzdCBjdXJyZW50IHJldmlzaW9u IG9uIGJyYW5jaCBBLkIuRCIuCgkJCSMKCQkJIyBJZiB0aGVyZSBpcyBubyBicmFuY2ggQS5CLkQs IHRoZW4gaXQgdHJhbnNsYXRlcyBpbnRvCgkJCSMgdGhlIGhlYWQgQS5CIC4KCQkJIwoJCQkjIFRo aXMgcmVhc29uaW5nIGFsc28gYXBwbGllcyB0byB0aGUgbWFpbiBicmFuY2ggQS5CLAoJCQkjIHdp dGggdGhlIGJyYW5jaCBudW1iZXIgMC5BLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAoJCQkjIGl0 IGhhcyBubyBoZWFkIHRvIHRyYW5zbGF0ZSB0byBpZiB0aGVyZSBpcyBub3RoaW5nIG9uCgkJCSMg dGhlIGJyYW5jaCwgYnV0IEkgZ3Vlc3MgdGhpcyBjYW4gbmV2ZXIgaGFwcGVuPwoJCQkjCgkJCSMg KHRoZSBjb2RlIGJlbG93IGdyYWNlZnVsbHkgZm9yZ2V0cyBhYm91dCB0aGUgYnJhbmNoCgkJCSMg aWYgaXQgc2hvdWxkIGhhcHBlbikKCQkJIwoJCQkkaGVhZCA9IGRlZmluZWQoJDIpID8gJDIgOiAi IjsKCQkJJGJyYW5jaCA9ICQzOwoJCQkkYnJhbmNocmV2ID0gJGhlYWQgLiAoJGhlYWQgbmUgIiIg PyAiLiIgOiAiIikgLiAkYnJhbmNoOwoJCQlteSAkcmVnZXg7CgkJCSRyZWdleCA9IHF1b3RlbWV0 YSAkYnJhbmNocmV2OwoJCQkkcmV2ICAgPSAkaGVhZDsKCgkJCWZvcmVhY2ggbXkgJHIgKEByZXZv cmRlcikgewoJCQkJaWYgKCRyID1+IC9eJHtyZWdleH1cYi8pIHsKCQkJCQkkcmV2ID0gJGJyYW5j aHJldjsKCQkJCQlsYXN0OwoJCQkJfQoJCQl9CgkJCW5leHQgaWYgKCRyZXYgZXEgIiIpOwoKCQkJ aWYgKCRyZXYgbmUgJGhlYWQgJiYgJGhlYWQgbmUgIiIpIHsKCQkJCSRicmFuY2hwb2ludHskaGVh ZH0gLj0gIiwgIgoJCQkJICAgIGlmICgkYnJhbmNocG9pbnR7JGhlYWR9KTsKCQkJCSRicmFuY2hw b2ludHskaGVhZH0gLj0gJF87CgkJCX0KCQl9CgkJJHJldnN5bXskcmV2fSAuPSAiLCAiIGlmICgk cmV2c3lteyRyZXZ9KTsKCQkkcmV2c3lteyRyZXZ9IC49ICRfOwoJCSRzZWwgLj0gIjxvcHRpb24g dmFsdWU9XCIke3Jldn06JHtffVwiPiRfPC9vcHRpb24+XG4iOwoJfQoJcHJpbnQgIkRvbmUgYXNz b2NpYXRpbmcgcmV2aXNpb25zIHdpdGggYnJhbmNoZXNcbiIgaWYgKCR2ZXJib3NlKTsKCglteSAo JG9ubHlvbmJyYW5jaCwgJG9ubHlicmFuY2hwb2ludCk7CglpZiAoJG9ubHlvbmJyYW5jaCA9ICRp bnB1dHsnb25seV93aXRoX3RhZyd9KSB7CgkJJG9ubHlvbmJyYW5jaCA9ICRzeW1yZXZ7JG9ubHlv bmJyYW5jaH07CgkJaWYgKCRvbmx5b25icmFuY2ggPX4gcy9cYjBcLi8vKSB7CgkJCSgkb25seWJy YW5jaHBvaW50ID0gJG9ubHlvbmJyYW5jaCkgPX4gcy9cLlxkKyQvLzsKCQl9IGVsc2UgewoJCQkk b25seWJyYW5jaHBvaW50ID0gJG9ubHlvbmJyYW5jaDsKCQl9CgoJCWlmICghZGVmaW5lZCgkb25s eW9uYnJhbmNoKSB8fCAkb25seWJyYW5jaHBvaW50IGVxICIiKSB7CgkJCWZhdGFsKCI0MDQgVGFn IG5vdCBmb3VuZCIsCgkJCSAgICAgICdUYWcgJXMgbm90IGRlZmluZWQnLAoJCQkgICAgICAkaW5w dXR7J29ubHlfd2l0aF90YWcnfSk7CgkJfQoJfQoKCXVuZGVmIEByZXZpc2lvbnM7CgoJZm9yZWFj aCAoQGFsbHJldmlzaW9ucykgewoJCSgkYnIgID0gJF8pICA9fiBzL1wuXGQrJC8vOwoJCSgkYnJw ID0gJGJyKSA9fiBzL1wuXGQrJC8vOwoJCW5leHQKCQkgICAgaWYgKCRvbmx5b25icmFuY2ggJiYg JGJyIG5lICRvbmx5b25icmFuY2gKCQkgICAgJiYgJF8gbmUgJG9ubHlicmFuY2hwb2ludCk7CgkJ dW5zaGlmdCAoQHJldmlzaW9ucywgJF8pOwoJfQoKCWlmICgkbG9nc29ydCBlcSAiZGF0ZSIpIHsK CgkJIyBTb3J0IHRoZSByZXZpc2lvbnMgaW4gY29tbWl0IG9yZGVyIGFuIHNlY29uZGFyeSBzb3J0 IG9uIHJldmlzaW9uCgkJIyAoc2Vjb25kYXJ5IHNvcnQgbmVlZGVkIGZvciBpbXBvcnRlZCBzb3Vy Y2VzLCBvciB0aGUgZmlyc3QgbWFpbgoJCSMgcmV2aXNpb24gZ2V0cyBiZWZvcmUgdGhlIHNhbWUg cmV2aXNpb24gb24gdGhlIDEuMS4xIGJyYW5jaCkKCQlAcmV2ZGlzcGxheW9yZGVyID0KCQkgICAg c29ydCB7ICRkYXRleyRifSA8PT4gJGRhdGV7JGF9IHx8IC1yZXZjbXAoJGEsICRiKSB9CgkJICAg IEByZXZpc2lvbnM7Cgl9IGVsc2lmICgkbG9nc29ydCBlcSAicmV2IikgewoKCQkjIFNvcnQgdGhl IHJldmlzaW9ucyBpbiByZXZpc2lvbiBvcmRlciwgaGlnaGVzdCBmaXJzdAoJCUByZXZkaXNwbGF5 b3JkZXIgPSByZXZlcnNlIHNvcnQgeyByZXZjbXAoJGEsICRiKSB9IEByZXZpc2lvbnM7Cgl9IGVs c2UgewoKCQkjIE5vIHNvcnRpbmcuIFByZXNlbnQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmxvZyAv IGN2cyBsb2cKCQlAcmV2ZGlzcGxheW9yZGVyID0gQHJldmlzaW9uczsKCX0KCn0KCnN1YiBwcmlu dERpZmZMaW5rcygkJCkgewoJbXkgKCR0ZXh0LCAkdXJsKSA9IEBfOwoJbXkgQGV4dHJhOwoKCWxv Y2FsICRfOwoJZm9yICgkRElGRlRZUEVTeyRkZWZhdWx0RGlmZlR5cGV9eydjb2xvcmVkJ30gPyBx dyh1KSA6IHF3KGgpKSB7CgkJbXkgJGYgPSAkXyBlcSAkZGVmYXVsdERpZmZUeXBlID8gJycgOiAk XzsKCgkJcHVzaCBAZXh0cmEsICZsaW5rKGxjICRESUZGVFlQRVN7JF99eydkZXNjcid9LCAiJHVy bCZmPSRmIik7Cgl9CgoJcHJpbnQgJmxpbmsoJHRleHQsICR1cmwpLCAnICgnLCBqb2luICgnLCAn LCBAZXh0cmEpLCAnKSc7Cn0KCnN1YiBwcmludExvZygkOyQpIHsKCW15ICgkbGluaywgJGJyLCAk YnJwKTsKCSgkXywgJGxpbmspID0gQF87CgkoJGJyICA9ICRfKSAgPX4gcy9cLlxkKyQvLzsKCSgk YnJwID0gJGJyKSA9fiBzL1wuP1xkKyQvLzsKCW15ICgkaXNEZWFkLCAkcHJldik7CgoJJGxpbmsg PSAxIGlmICghZGVmaW5lZCgkbGluaykpOwoJJGlzRGVhZCA9ICgkc3RhdGV7JF99IGVxICJkZWFk Iik7CgoJcHJpbnQgIjxwPlxuIjsKCWlmICgkbGluayAmJiAhJGlzRGVhZCkgewoJCW15ICgkZmls ZW5hbWUpOwoJCSgkZmlsZW5hbWUgPSAkd2hlcmUpID1+IHMvXi4qXC8vLzsKCQlteSAoJGZpbGV1 cmwpID0gdXJsZW5jb2RlKCRmaWxlbmFtZSk7CgkJcHJpbnQgIjxhIG5hbWU9XCJyZXYkX1wiPjwv YT4iOwoKCQlpZiAoZGVmaW5lZCgkcmV2c3lteyRffSkpIHsKCQkJZm9yZWFjaCBteSAkc3ltIChz cGxpdCAoIiwgIiwgJHJldnN5bXskX30pKSB7CgkJCQlwcmludCAiPGEgbmFtZT1cIiRzeW1cIj48 L2E+IjsKCQkJfQoJCX0KCgkJaWYgKGRlZmluZWQoJHJldnN5bXskYnJ9KSAmJiAkcmV2c3lteyRi cn0KCQkgICAgJiYgIWRlZmluZWQoJG5hbWVwcmludGVkeyRicn0pKQoJCXsKCQkJZm9yZWFjaCBt eSAkc3ltIChzcGxpdCAoIiwgIiwgJHJldnN5bXskYnJ9KSkgewoJCQkJcHJpbnQgIjxhIG5hbWU9 XCIkc3ltXCI+PC9hPiI7CgkJCX0KCQkJJG5hbWVwcmludGVkeyRicn0gPSAxOwoJCX0KCQlwcmlu dCAiXG4gUmV2aXNpb24gIjsKCQkmZG93bmxvYWRfbGluaygkZmlsZXVybCwgJF8sICRfLAoJCQkk ZGVmYXVsdFZpZXdhYmxlID8gInRleHQveC1jdnN3ZWItbWFya3VwIiA6IHVuZGVmKTsKCgkJaWYg KCRkZWZhdWx0Vmlld2FibGUpIHsKCQkJcHJpbnQgIiAvICgiOwoJCQkmZG93bmxvYWRfbGluaygk ZmlsZXVybCwgJF8sICJkb3dubG9hZCIsICRtaW1ldHlwZSk7CgkJCXByaW50ICIpIjsKCQl9CgoJ CWlmIChub3QgJGRlZmF1bHRUZXh0UGxhaW4pIHsKCQkJcHJpbnQgIiAvICgiOwoJCQkmZG93bmxv YWRfbGluaygkZmlsZXVybCwgJF8sICJhcyB0ZXh0IiwgInRleHQvcGxhaW4iKTsKCQkJcHJpbnQg IikiOwoJCX0KCgkJaWYgKCEkZGVmYXVsdFZpZXdhYmxlKSB7CgkJCXByaW50ICIgLyAoIjsKCQkJ JmRvd25sb2FkX2xpbmsoJGZpbGV1cmwsICRfLCAidmlldyIsCgkJCQkidGV4dC94LWN2c3dlYi1t YXJrdXAiKTsKCQkJcHJpbnQgIikiOwoJCX0KCgkJaWYgKCRhbGxvd19hbm5vdGF0ZSkgewoJCQlw cmludCAiIC0gIjsKCQkJcHJpbnQgJmxpbmsoCgkJCQknYW5ub3RhdGUnLAoJCQkJc3ByaW50ZigK CQkJCQknJXMvJXM/YW5ub3RhdGU9JXMlcycsICRzY3JpcHRuYW1lLAoJCQkJCXVybGVuY29kZSgk d2hlcmUpLCAgICAgJF8sCgkJCQkJJGJhcmVxdWVyeQoJCQkJKQoJCQkpOwoJCX0KCgkJIyBQbHVz IGEgc2VsZWN0IGxpbmsgaWYgZW5hYmxlZCwgYW5kIHRoaXMgdmVyc2lvbiBpc24ndCBzZWxlY3Rl ZAoJCWlmICgkYWxsb3dfdmVyc2lvbl9zZWxlY3QpIHsKCQkJaWYgKCghZGVmaW5lZCgkaW5wdXR7 InIxIn0pIHx8ICRpbnB1dHsicjEifSBuZSAkXykpIHsKCQkJCXByaW50ICIgLSAiOwoJCQkJcHJp bnQgJmxpbmsoCgkJCQkJJ1tzZWxlY3QgZm9yIGRpZmZzXScsCgkJCQkJc3ByaW50ZigKCQkJCQkJ JyVzP3IxPSVzJXMnLCAkc2NyaXB0d2hlcmUsCgkJCQkJCSRfLCAgICAgICAgICAgJGJhcmVxdWVy eQoJCQkJCSkKCQkJCSk7CgkJCX0gZWxzZSB7CgkJCQlwcmludCAiIC0gPGI+W3NlbGVjdGVkXTwv Yj4iOwoJCQl9CgkJfQoJfSBlbHNlIHsKCQlwcmludCAiUmV2aXNpb24gPGI+JF88L2I+IjsKCX0K CglpZiAoL14xXC4xXC4xXC5cZCskLykgewoJCXByaW50ICIgPGk+KHZlbmRvciBicmFuY2gpPC9p PiI7Cgl9CglpZiAoZGVmaW5lZCBAbXl0eikgewoJCW15ICgkZXN0KSA9ICRteXR6Wyhsb2NhbHRp bWUoJGRhdGV7JF99KSlbOF1dOwoJCXByaW50ICIsIDxpPiIsIHNjYWxhciBsb2NhbHRpbWUoJGRh dGV7JF99KSwgIiAkZXN0PC9pPiAoIjsKCX0gZWxzZSB7CgkJcHJpbnQgIiwgPGk+Iiwgc2NhbGFy IGdtdGltZSgkZGF0ZXskX30pLCAiIFVUQzwvaT4gKCI7Cgl9CglwcmludCByZWFkYWJsZVRpbWUo dGltZSgpIC0gJGRhdGV7JF99LCAxKSwgIiBhZ28pIjsKCXByaW50ICIgYnkgIjsKCXByaW50ICI8 aT4iLCAkYXV0aG9yeyRffSwgIjwvaT5cbiI7CglwcmludCAiPGJyPkJyYW5jaDogPGI+IiwgJGxp bmsgPyBsaW5rX3RhZ3MoJHJldnN5bXskYnJ9KSA6ICRyZXZzeW17JGJyfSwKCSAgICAiPC9iPlxu IgoJICAgIGlmICgkcmV2c3lteyRicn0pOwoJcHJpbnQgIjxicj5DVlMgVGFnczogPGI+IiwgJGxp bmsgPyBsaW5rX3RhZ3MoJHJldnN5bXskX30pIDogJHJldnN5bXskX30sCgkgICAgIjwvYj4iCgkg ICAgaWYgKCRyZXZzeW17JF99KTsKCXByaW50ICI8YnI+QnJhbmNoIHBvaW50IGZvcjogPGI+IiwK CSAgICAkbGluayA/IGxpbmtfdGFncygkYnJhbmNocG9pbnR7JF99KSA6ICRicmFuY2hwb2ludHsk X30sICI8L2I+XG4iCgkgICAgaWYgKCRicmFuY2hwb2ludHskX30pOwoKCSMgRmluZCB0aGUgcHJl dmlvdXMgcmV2aXNpb24KCW15IEBwcmV2cmV2ID0gc3BsaXQgKC9cLi8sICRfKTsKCWRvIHsKCQlp ZiAoLS0kcHJldnJldlskI3ByZXZyZXZdIDw9IDApIHsKCgkJCSMgSWYgaXQgd2FzIFguWS5aLjEs IGp1c3QgbWFrZSBpdCBYLlkKCQkJcG9wIChAcHJldnJldik7CgkJCXBvcCAoQHByZXZyZXYpOwoJ CX0KCQkkcHJldiA9IGpvaW4gKCIuIiwgQHByZXZyZXYpOwoJfSB1bnRpbCAoZGVmaW5lZCgkZGF0 ZXskcHJldn0pIHx8ICRwcmV2IGVxICIiKTsKCglpZiAoJHByZXYgbmUgIiIpIHsKCQlpZiAoJGRp ZmZsaW5lc3skX30pIHsKCQkJcHJpbnQKCQkJICAgICI8YnI+Q2hhbmdlcyBzaW5jZSA8Yj4kcHJl djogJGRpZmZsaW5lc3skX30gbGluZXM8L2I+IjsKCQl9Cgl9CgoJaWYgKCRpc0RlYWQpIHsKCQlw cmludCAiPGJyPjxiPjxpPkZJTEUgUkVNT1ZFRDwvaT48L2I+XG4iOwoJfSBlbHNpZiAoJGxpbmsp IHsKCQlteSAlZGlmZnJldiA9ICgpOwoJCSRkaWZmcmV2eyRffSA9IDE7CgkJJGRpZmZyZXZ7IiJ9 ID0gMTsKCQlwcmludCAnPGJyPic7CgkJbXkgJGRpZmYgPSAnRGlmZic7CgoJCSMKCQkjIE9mZmVy IGRpZmYgdG8gcHJldmlvdXMgcmV2aXNpb24KCQlpZiAoJHByZXYpIHsKCQkJJGRpZmZyZXZ7JHBy ZXZ9ID0gMTsKCgkJCW15ICR1cmwgPQoJCQkgICAgc3ByaW50ZignJXMuZGlmZj9yMT0lcyZyMj0l cyVzJywgJHNjcmlwdHdoZXJlLAoJCQkJJHByZXYsICRfLCAkYmFyZXF1ZXJ5KTsKCgkJCXByaW50 ICRkaWZmLCAiIHRvIHByZXZpb3VzICI7CgkJCSRkaWZmID0gJyc7CgkJCXByaW50RGlmZkxpbmtz KCRwcmV2LCAkdXJsKTsKCQl9CgoJCSMKCQkjIFBsdXMsIGlmIGl0J3Mgb24gYSBicmFuY2gsIGFu ZCBpdCdzIG5vdCBhIHZlbmRvciBicmFuY2gsCgkJIyBvZmZlciBhIGRpZmYgd2l0aCB0aGUgYnJh bmNoIHBvaW50LgoJCWlmICgkcmV2c3lteyRicnB9ICYmICEvXjFcLjFcLjFcLlxkKyQvCgkJICAg ICYmICFkZWZpbmVkKCRkaWZmcmV2eyRicnB9KSkKCQl7CgkJCW15ICR1cmwgPQoJCQkgICAgc3By aW50ZignJXMuZGlmZj9yMT0lcyZyMj0lcyVzJywgJHNjcmlwdHdoZXJlLCAkYnJwLAoJCQkJJF8s ICRiYXJlcXVlcnkpOwoKCQkJcHJpbnQgJGRpZmYsICIgdG8gYnJhbmNocG9pbnQgIjsKCQkJJGRp ZmYgPSAnJzsKCQkJcHJpbnREaWZmTGlua3MoJGJycCwgJHVybCk7CgkJfQoKCQkjCgkJIyBQbHVz LCBpZiBpdCdzIG9uIGEgYnJhbmNoLCBhbmQgaXQncyBub3QgYSB2ZW5kb3IgYnJhbmNoLAoJCSMg b2ZmZXIgdG8gZGlmZiB3aXRoIHRoZSBuZXh0IHJldmlzaW9uIG9mIHRoZSBoaWdoZXIgYnJhbmNo LgoJCSMgKGUuZy4gY2hhbmdlIGdldHMgY29tbWl0dGVkIGFuZCB0aGVuIGJyb3VnaHQKCQkjIG92 ZXIgdG8gLXN0YWJsZSkKCQlpZiAoL15cZCtcLlxkK1wuXGQrLyAmJiAhL14xXC4xXC4xXC5cZCsk LykgewoJCQlteSAoJGksICRuZXh0bWFpbik7CgoJCQlmb3IgKCRpID0gMCA7ICRpIDwgJCNyZXZv cmRlciAmJiAkcmV2b3JkZXJbJGldIG5lICRfIDsKCQkJICAgICRpKyspCgkJCXsKCQkJfQoJCQlt eSBAdG1wMiA9IHNwbGl0ICgvXC4vLCAkXyk7CgkJCWZvciAoJG5leHRtYWluID0gIiIgOyAkaSA+ IDAgOyAkaS0tKSB7CgkJCQlteSAkbmV4dCA9ICRyZXZvcmRlclskaSAtIDFdOwoJCQkJbXkgQHRt cDEgPSBzcGxpdCAoL1wuLywgJG5leHQpOwoKCQkJCWlmIChAdG1wMSA8IEB0bXAyKSB7CgkJCQkJ JG5leHRtYWluID0gJG5leHQ7CgkJCQkJbGFzdDsKCQkJCX0KCgkJCQkjIE9ubHkgdGhlIGhpZ2hl c3QgdmVyc2lvbiBvbiBhIGJyYW5jaCBzaG91bGQgaGF2ZQoJCQkJIyBhIGRpZmYgZm9yIHRoZSAi bmV4dCBtYWluIi4KCQkJCWxhc3QKCQkJCSAgICBpZiAoQHRtcDEgLSAxIDw9IEB0bXAyCgkJCQkg ICAgJiYgam9pbiAoIi4iLCBAdG1wMVswIC4uICQjdG1wMSAtIDFdKSBlcQoJCQkJICAgIGpvaW4g KCIuIiwgQHRtcDJbMCAuLiAkI3RtcDEgLSAxXSkpOwoJCQl9CgoJCQlpZiAoIWRlZmluZWQoJGRp ZmZyZXZ7JG5leHRtYWlufSkpIHsKCQkJCSRkaWZmcmV2eyRuZXh0bWFpbn0gPSAxOwoKCQkJCW15 ICR1cmwgPQoJCQkJICAgIHNwcmludGYoJyVzLmRpZmY/cjE9JXMmcjI9JXMlcycsCgkJCQkJJHNj cmlwdHdoZXJlLCAkbmV4dG1haW4sICRfLAoJCQkJCSRiYXJlcXVlcnkpOwoKCQkJCXByaW50ICRk aWZmLCAiIG5leHQgbWFpbiAiOwoJCQkJJGRpZmYgPSAnJzsKCQkJCXByaW50RGlmZkxpbmtzKCRu ZXh0bWFpbiwgJHVybCk7CgkJCX0KCQl9CgoJCSMgUGx1cyBpZiB1c2VyIGhhcyBzZWxlY3RlZCBv bmx5IHIxLCB0aGVuIHByZXNlbnQgYSBsaW5rCgkJIyB0byBtYWtlIGEgZGlmZiB0byB0aGF0IHJl dmlzaW9uCgkJaWYgKGRlZmluZWQoJGlucHV0eyJyMSJ9KSAmJiAhZGVmaW5lZCgkZGlmZnJldnsk aW5wdXR7InIxIn19KSkgewoJCQkkZGlmZnJldnskaW5wdXR7InIxIn19ID0gMTsKCgkJCW15ICR1 cmwgPQoJCQkgICAgc3ByaW50ZignJXMuZGlmZj9yMT0lcyZyMj0lcyVzJywgJHNjcmlwdHdoZXJl LAoJCQkJJGlucHV0eydyMSd9LCAkXywgJGJhcmVxdWVyeSk7CgoJCQlwcmludCAkZGlmZiwgIiB0 byBzZWxlY3RlZCAiOwoJCQkkZGlmZiA9ICcnOwoJCQlwcmludERpZmZMaW5rcygkaW5wdXR7J3Ix J30sICR1cmwpOwoJCX0KCgl9CglwcmludCAiXG48L3A+XG48cHJlPlxuIjsKCXByaW50ICZodG1s aWZ5KCRsb2d7JF99LCAkYWxsb3dfbG9nX2V4dHJhKTsKCXByaW50ICI8L3ByZT5cbiI7Cn0KCiN4 aGNoZW4Kc3ViIGRvR3JhcGgoJCkgewoJbXkgKCRmdWxsbmFtZSkgPSBAXzsKCW15ICgkZGlmZnJl diwgJHVwd2hlcmUsICRmaWxlbmFtZSwgJGJhY2t1cmwpOwoKCXJlYWRMb2coJGZ1bGxuYW1lKTsK CWh0bWxfaGVhZGVyKCJDVlMgcmV2aXNpb25zIHRyZWUgZm9yICR3aGVyZSIpOwoJKCR1cHdoZXJl ICA9ICR3aGVyZSkgPX4gc3woQXR0aWMvKT9bXi9dKyR8fDsKCSgkZmlsZW5hbWUgPSAkd2hlcmUp ID0gfiBzfF4uKi98fDsKCSRiYWNrdXJsID0gJHNjcmlwdG5hbWUgLiAiLyIgLiB1cmxlbmNvZGUo JHVwd2hlcmUpIC4gJHF1ZXJ5OwoJcHJpbnQgIjxwPlxuIjsKCXByaW50ICZsaW5rKCRiYWNraWNv biwgIiRiYWNrdXJsIyRmaWxlbmFtZSIpLCAiIDxiPlVwIHRvICIsCiAgICAgICAgICAgICZjbGlj a2FibGVQYXRoKCR1cHdoZXJlLCAxKSwgIjwvYj5cbjwvcD5cbiI7CiAgICAgICAgcHJpbnQgIjxw PlxuICI7CglwcmludCAiXG48L3A+XG48aHIgbm9zaGFkZT5cbiI7CglwcmludCAiPGZvbnQgY29s b3I9cmVkPjwvZm9udD48YnI+IjsKCglteSAkc2hvd2NvZGUgPSAwOwoJbXkgJGJBZGRDb21tYTsK CglwcmludCAiPHhtcD4iIGlmICRzaG93Y29kZTsKCShteSAkZmlsZXVybCA9ICR3aGVyZSkgPX4g cy9eLipcLy8vOwoJJGZpbGV1cmwgPSB1cmxlbmNvZGUoJGZpbGV1cmwpOwoJcHJpbnQgIjxzY3Jp cHQ+XG4iOwoJcHJpbnQgInZhciBzQmFyZXF1ZXJ5ID0gXCIiLmh0bWxqcygkYmFyZXF1ZXJ5KS4i XCI7XG4iOwoJcHJpbnQgInZhciBhc0JhcmVxdWVyeSA9IHNCYXJlcXVlcnkuc3BsaXQoXCcmXCcp O1xuIjsKCXByaW50ICJzQmFyZXF1ZXJ5ID0gXCJcIjtcbiI7CglwcmludCAidmFyIHNJZ25vcmUg PSBcIm9ubHlfd2l0aF90YWc9XCI7XG4iOwoJcHJpbnQgImZvciAodmFyIGkgPSAwOyBpIDwgYXNC YXJlcXVlcnkubGVuZ3RoOyBpKyspXG4iOwoJcHJpbnQgIntcbiI7CglwcmludCAiCWlmIChhc0Jh cmVxdWVyeVtpXS5sZW5ndGggPD0gMCkgY29udGludWU7XG4iOwoJcHJpbnQgIglpZiAoYXNCYXJl cXVlcnlbaV0uc3Vic3RyKDAsIHNJZ25vcmUubGVuZ3RoKSA9PSBzSWdub3JlKSBjb250aW51ZTtc biI7CglwcmludCAiCXNCYXJlcXVlcnkgKz0gXCImXCIgKyBhc0JhcmVxdWVyeVtpXTtcbiI7Cglw cmludCAifVxuIjsKCXByaW50ICJ2YXIgYVJldiA9IFxuW1xuIjsKCSRiQWRkQ29tbWEgPSAwOwoJ Zm9yZWFjaCAoQGFsbHJldmlzaW9ucykgewoJCWlmICgkYkFkZENvbW1hID09IDApIHsKCQkJJGJB ZGRDb21tYSA9IDE7CgkJfQoJCWVsc2UgewoJCQlwcmludCAiLFxuIjsKCQl9CgkJcHJpbnQgIntc biI7CgkJcHJpbnQgIglSZXY6IFwiJF9cIixcbiI7CgkJcHJpbnQgIglMb2c6IFwiIi5odG1sanMo aHRtbGlmeSgkbG9neyRffSwgJGFsbG93X2xvZ19leHRyYSkpLiJcIlxuIjsKCQlwcmludGYgIn0i OwoJfQoJcHJpbnRmICJcbl07XG4iOwoKCXByaW50ZiAidmFyIGFTeW0gPSBcbltcbiI7CgoJZm9y ZWFjaCBteSAkaSAoa2V5cyAlc3ltcmV2KSB7CgkJcHJpbnQgIntcbiI7CgkJcHJpbnQgIglTeW06 CVwiIi5odG1sanMoaHRtbHF1b3RlKCRpKSkuIlwiLFxuIjsKCQlwcmludCAiCVJldjoJXCIkc3lt cmV2eyRpfVwiXG4iOwoJCXByaW50ICJ9LFxuIjsKCX0KCXByaW50ICJ7XG4iOwoJcHJpbnQgIglT eW06CVwiIi5odG1sanMoaHRtbHF1b3RlKCRmaWxldXJsKSkuIlwiLFxuIjsKCXByaW50ICIJUmV2 OglcIjFcIlxuIjsKCXByaW50ICJ9XG4iOwoJcHJpbnQgIl07XG4iOwoKCXByaW50ICJmb3IgKHZh ciBpID0gMDsgaSA8IGFSZXYubGVuZ3RoOyBpKyspXHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglw cmludCAiCWlmIChhUmV2W2ldLkxvZy5zdWJzdHIoYVJldltpXS5Mb2cubGVuZ3RoIC0gMSkgPT0g XCdcXG5cJylcclxuIjsNCglwcmludCAiCQlhUmV2W2ldLkxvZyA9IGFSZXZbaV0uTG9nLnN1YnN0 cigwLCBhUmV2W2ldLkxvZy5sZW5ndGggLSAxKVxyXG4iOw0KCXByaW50ICJ9XHJcbiI7DQoJcHJp bnQgInZhciBzRmlsZSA9IGFTeW1bYVN5bS5sZW5ndGggLSAxXS5TeW07XHJcbiI7DQoJcHJpbnQg IlxyXG4iOwoKCXByaW50ICJmdW5jdGlvbiBTb3J0VmVyRnVuKHNhLCBzYilcclxuIjsNCglwcmlu dCAie1xyXG4iOw0KCXByaW50ICIJdmFyIGEgPSBzYS5SZXYuc3BsaXQoXCIuXCIpO1xyXG4iOw0K CXByaW50ICIJdmFyIGIgPSBzYi5SZXYuc3BsaXQoXCIuXCIpO1xyXG4iOw0KCXByaW50ICIJdmFy IGlhLCBpYiwgbGEsIGxiO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCWxhID0gYS5s ZW5ndGg7XHJcbiI7DQoJcHJpbnQgIglsYiA9IGIubGVuZ3RoO1xyXG4iOw0KCXByaW50ICIJZm9y ICh2YXIgaSA9IDA7IGkgPCBsYSAmJiBpIDwgbGI7IGkrKylcclxuIjsNCglwcmludCAiCXtcclxu IjsNCglwcmludCAiCQlpYSA9IHBhcnNlSW50KGFbaV0sIDEwKTtcclxuIjsNCglwcmludCAiCQlp YiA9IHBhcnNlSW50KGJbaV0sIDEwKTtcclxuIjsNCglwcmludCAiCQlpZiAoaWEgPCBpYikgcmV0 dXJuIC0xO1xyXG4iOw0KCXByaW50ICIJCWVsc2UgaWYgKGlhID4gaWIpIHJldHVybiAxO1xyXG4i Ow0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCWlmIChsYSA8IGxi KSByZXR1cm4gLTE7XHJcbiI7DQoJcHJpbnQgIgllbHNlIGlmIChsYSA+IGxiKSByZXR1cm4gMTtc clxuIjsNCglwcmludCAiCWVsc2UgcmV0dXJuIDA7XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglw cmludCAiXHJcbiI7DQoJcHJpbnQgImZ1bmN0aW9uIENyZWF0ZVJldlN0cnVjdChhUmV2KVxyXG4i Ow0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQgIglhUmV2ID0gYVJldi5zb3J0KFNvcnRWZXJGdW4p O1xyXG4iOw0KCXByaW50ICIJdmFyIHNSdCA9IFxyXG4iOw0KCXByaW50ICIJe1xyXG4iOw0KCXBy aW50ICIJCVJldjogXCJcIixcclxuIjsNCglwcmludCAiCQlMb2c6IFwiXCIsXHJcbiI7DQoJcHJp bnQgIgkJaUxlbjogMCxcclxuIjsNCglwcmludCAiCQlhUmV2OiBbXVxyXG4iOw0KCXByaW50ICIJ fTtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgl2YXIgaUxlbjtcclxuIjsNCglwcmlu dCAiCXZhciBzO1xyXG4iOw0KCXByaW50ICIJdmFyIGJFeGl0O1xyXG4iOw0KCXByaW50ICIJZm9y ICh2YXIgaSA9IDA7IGkgPCBhUmV2Lmxlbmd0aDsgaSsrKVxyXG4iOw0KCXByaW50ICIJe1xyXG4i Ow0KCXByaW50ICIJCWlMZW4gPSBhUmV2W2ldLlJldi5zcGxpdChcIi5cIikubGVuZ3RoO1xyXG4i Ow0KCXByaW50ICJcclxuIjsNCglwcmludCAiCQliRXhpdCA9IGZhbHNlO1xyXG4iOw0KCXByaW50 ICIJCWZvciAodmFyIGogPSBcInNSdFwiOyAhYkV4aXQ7KVxyXG4iOw0KCXByaW50ICIJCXtcclxu IjsNCglwcmludCAiCQkJcyA9IGogKyBcIi5hUmV2XCI7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0K CXByaW50ICIJCQl2YXIgdiA9IChcclxuIjsNCglwcmludCAiCQkJCQlcImlmICggXCIgKyBzICsg XCIubGVuZ3RoID09IDAgKVxcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCVwie1xcblwiXHJcbiI7 DQoJcHJpbnQgIgkJCQkrCQlcImJFeGl0ID0gdHJ1ZTtcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJ KwkJcyArIFwiWzBdID0gYVJldltpXTtcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwkJcyArIFwi WzBdLmlMZW4gPSBpTGVuO1xcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCQlzICsgXCJbMF0uYVJl diA9IFtdO1xcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCVwifVxcblwiXHJcbiI7DQoJcHJpbnQg IgkJCQkrCVwiZWxzZSBpZiAoIFwiICsgcyArIFwiWzBdLmlMZW4gPT0gaUxlbiApXFxuXCJcclxu IjsNCglwcmludCAiCQkJCSsJXCJ7XFxuXCJcclxuIjsNCglwcmludCAiCQkJCSsJCVwiYkV4aXQg PSB0cnVlO1xcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCQlzICsgXCJbXCIgKyBzICsgXCIubGVu Z3RoXSA9IGFSZXZbaV07XFxuXCJcclxuIjsNCglwcmludCAiCQkJCSsJCXMgKyBcIltcIiArIHMg KyBcIi5sZW5ndGggLSAxXS5pTGVuID0gaUxlbjtcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwkJ cyArIFwiW1wiICsgcyArIFwiLmxlbmd0aCAtIDFdLmFSZXYgPSBbXTtcXG5cIlxyXG4iOw0KCXBy aW50ICIJCQkJKwlcIn1cXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwlcImVsc2VcXG5cIlxyXG4i Ow0KCXByaW50ICIJCQkJKwlcIntcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwkJXCJqID0gXCdc IiArIHMgKyBcIltcJyArICggXCIgKyBzICsgXCIubGVuZ3RoIC0gMSApICsgXCddXCc7XFxuXCJc clxuIjsNCglwcmludCAiCQkJCSsJXCJ9XFxuXCJcclxuIjsNCglwcmludCAiCQkJCSk7XHJcbiI7 DQoJcHJpbnQgIgkJCWV2YWwodik7XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJ fVxyXG4iOw0KCXByaW50ICIJcmV0dXJuIHNSdDtcclxuIjsNCglwcmludCAifVxyXG4iOw0KCXBy aW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gR2V0VGFnKFJldiwgYVN5bSwgYk9uZSlcclxu IjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJdmFyIHNSdCA9IFwiXCI7XHJcbiI7DQoJcHJp bnQgIglpZiAoIWJPbmUpIHNSdCA9IFtdO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAi CWZvciAodmFyIGkgPSAwOyBpIDwgYVN5bS5sZW5ndGg7IGkrKylcclxuIjsNCglwcmludCAiCXtc clxuIjsNCglwcmludCAiCQlpZiAoYVN5bVtpXS5SZXYgPT0gUmV2KVxyXG4iOw0KCXByaW50ICIJ CXtcclxuIjsNCglwcmludCAiCQkJcmV0dXJuIGFTeW1baV0uU3ltO1xyXG4iOw0KCXByaW50ICIJ CX1cclxuIjsNCglwcmludCAiCX1cclxuIjsNCglwcmludCAiCXJldHVybiBzUnQ7XHJcbiI7DQoJ cHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgImZ1bmN0aW9uIENyZWF0ZVJl dkJyY2hTdHJ1Y3Qoc1JldiwgYVN5bSlcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJ aWYgKHNSZXYuYVJldi5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XHJcbiI7DQoJcHJpbnQgIlxy XG4iOw0KCXByaW50ICIJdmFyIHNSZXZQYXIgPSBzUmV2LmFSZXZbMF0uUmV2LnN1YnN0cigwLCBz UmV2LmFSZXZbMF0uUmV2Lmxhc3RJbmRleE9mKFwiLlwiKSk7XHJcbiI7DQoJcHJpbnQgIglzUmV2 UGFyID0gc1JldlBhci5zdWJzdHIoMCwgc1JldlBhci5sYXN0SW5kZXhPZihcIi5cIikpO1xyXG4i Ow0KCXByaW50ICIJdmFyIHNSdCA9XHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJ UmV2OiBzUmV2UGFyLFxyXG4iOw0KCXByaW50ICIJCUxvZzogXCJcIixcclxuIjsNCglwcmludCAi CQlhVGFnOiBbXSxcclxuIjsNCglwcmludCAiCQlhQnJjaDogW11cclxuIjsNCglwcmludCAiCX1c clxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgl2YXIgc0JyY2ggPSBudWxsO1xyXG4iOw0K CXByaW50ICIJdmFyIHNCcjtcclxuIjsNCglwcmludCAiCXZhciBzVGhpc0JyY2g7XHJcbiI7DQoJ cHJpbnQgIglmb3IgKHZhciBpID0gMDsgaSA8IHNSZXYuYVJldi5sZW5ndGg7IGkrKylcclxuIjsN CglwcmludCAiCXtcclxuIjsNCglwcmludCAiCQlzVGhpc0JyY2ggPSBzUmV2LmFSZXZbaV0uUmV2 LnN1YnN0cigwLCBzUmV2LmFSZXZbaV0uUmV2Lmxhc3RJbmRleE9mKFwiLlwiKSk7XHJcbiI7DQoJ cHJpbnQgIgkJXHJcbiI7DQoJcHJpbnQgIgkJaWYgKHNCcmNoICE9IHNUaGlzQnJjaClcclxuIjsN CglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCXNCcmNoID0gc1RoaXNCcmNoO1xyXG4iOw0K CXByaW50ICIJCQlzUnQuYUJyY2hbc1J0LmFCcmNoLmxlbmd0aF0gPVxyXG4iOw0KCXByaW50ICIJ CQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlCcmNoOiBzQnJjaCxcclxuIjsNCglwcmludCAiCQkJCVRh ZzogR2V0VGFnKHNCcmNoLCBhU3ltLCB0cnVlKSxcclxuIjsNCglwcmludCAiCQkJCWFSZXY6IFtd XHJcbiI7DQoJcHJpbnQgIgkJCX1cclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIlxy XG4iOw0KCXByaW50ICIJCXNSdC5hQnJjaFtzUnQuYUJyY2gubGVuZ3RoIC0gMV0uYVJldltzUnQu YUJyY2hbc1J0LmFCcmNoLmxlbmd0aCAtIDFdLmFSZXYubGVuZ3RoXSA9XHJcbiI7DQoJcHJpbnQg IgkJe1xyXG4iOw0KCXByaW50ICIJCQlSZXY6IHNSZXYuYVJldltpXS5SZXYsXHJcbiI7DQoJcHJp bnQgIgkJCUxvZzogc1Jldi5hUmV2W2ldLkxvZyxcclxuIjsNCglwcmludCAiCQkJYVRhZzogR2V0 VGFnKHNSZXYuYVJldltpXS5SZXYsIGFTeW0sIGZhbHNlKSxcclxuIjsNCglwcmludCAiCQkJYUJy Y2g6IFtdXHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAi CQl2YXIgc1N1YiA9IENyZWF0ZVJldkJyY2hTdHJ1Y3Qoc1Jldi5hUmV2W2ldLCBhU3ltKTtcclxu IjsNCglwcmludCAiCQlpZiAoc1N1YiAhPSBudWxsKVxyXG4iOw0KCXByaW50ICIJCQlzUnQuYUJy Y2hbc1J0LmFCcmNoLmxlbmd0aCAtIDFdLmFSZXZbc1J0LmFCcmNoW3NSdC5hQnJjaC5sZW5ndGgg LSAxXS5hUmV2Lmxlbmd0aCAtIDFdLmFCcmNoID0gQ3JlYXRlUmV2QnJjaFN0cnVjdChzUmV2LmFS ZXZbaV0sIGFTeW0pLmFCcmNoO1xyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxu IjsNCglwcmludCAiCXJldHVybiBzUnQ7XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAi XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBDbGVhblN5bVRCKGFTeW0p XHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCXZhciBhUnQgPSBbXTtcclxuIjsNCglw cmludCAiCXZhciBpTG9vcCA9IGFTeW0ubGVuZ3RoO1xyXG4iOw0KCXByaW50ICIJdmFyIGlCcmNo LCBzQnJjaCwgc0hlYWRlcjtcclxuIjsNCglwcmludCAiCXZhciBpUFQ7XHJcbiI7DQoJcHJpbnQg Iglmb3IgKHZhciBpID0gMDsgaSA8IGlMb29wOyBpKyspXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7 DQoJcHJpbnQgIgkJaVBUID0gYVN5bVtpXS5SZXYubGFzdEluZGV4T2YoXCcuXCcpO1xyXG4iOw0K CXByaW50ICIJCWlmIChpUFQgPT0gLTEpIGNvbnRpbnVlO1xyXG4iOw0KCXByaW50ICIJCXNCcmNo ID0gYVN5bVtpXS5SZXYuc3Vic3RyKDAsIGlQVCk7XHJcbiI7DQoJcHJpbnQgIgkJaUJyY2ggPSBh U3ltW2ldLlJldi5zdWJzdHIoaVBUICsgMSk7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50 ICIJCWlQVCA9IHNCcmNoLmxhc3RJbmRleE9mKFwnLlwnKTtcclxuIjsNCglwcmludCAiCQlpZiAo c0JyY2guc3Vic3RyKGlQVCArIDEpID09IFwiMFwiKVxyXG4iOw0KCXByaW50ICIJCXtcclxuIjsN CglwcmludCAiCQkJc0hlYWRlciA9IHNCcmNoLnN1YnN0cigwLCBpUFQgKyAxKTtcclxuIjsNCglw cmludCAiCQkJYVN5bVtpXS5SZXYgPSBzSGVhZGVyICsgaUJyY2g7XHJcbiI7DQoJcHJpbnQgIgkJ fVxyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCWFTeW0g PSBhU3ltLnNvcnQoU29ydFZlckZ1bik7XHJcbiI7DQoJcHJpbnQgIgl2YXIgc1JldiA9IFwiXCI7 XHJcbiI7DQoJcHJpbnQgIglmb3IgKHZhciBpID0gMDsgaSA8IGlMb29wOyBpKyspXHJcbiI7DQoJ cHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJaWYgKGFTeW1baV0uU3ltID09IFwiSEVBRFwiIHx8 IGFTeW1baV0uU3ltID09IFwiTUFJTlwiKVxyXG4iOw0KCXByaW50ICIJCQljb250aW51ZTtcclxu IjsNCglwcmludCAiCQllbHNlIGlmIChzUmV2ICE9IGFTeW1baV0uUmV2KVxyXG4iOw0KCXByaW50 ICIJCXtcclxuIjsNCglwcmludCAiCQkJc1JldiA9IGFTeW1baV0uUmV2O1xyXG4iOw0KCXByaW50 ICIJCQlhUnRbYVJ0Lmxlbmd0aF0gPSBcclxuIjsNCglwcmludCAiCQkJe1xyXG4iOw0KCXByaW50 ICIJCQkJUmV2OiBzUmV2LFxyXG4iOw0KCXByaW50ICIJCQkJU3ltOiBhU3ltW2ldLlN5bVxyXG4i Ow0KCXByaW50ICIJCQl9XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJCWVsc2Vc clxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlmICh0eXBlb2YoYVJ0W2FSdC5s ZW5ndGggLSAxXS5TeW0pID09IFwic3RyaW5nXCIpXHJcbiI7DQoJcHJpbnQgIgkJCQlhUnRbYVJ0 Lmxlbmd0aCAtIDFdLlN5bSA9IFthUnRbYVJ0Lmxlbmd0aCAtIDFdLlN5bSwgYVN5bVtpXS5TeW1d O1xyXG4iOw0KCXByaW50ICIJCQllbHNlIGFSdFthUnQubGVuZ3RoIC0gMV0uU3ltW2FSdFthUnQu bGVuZ3RoIC0gMV0uU3ltLmxlbmd0aF0gPSBhU3ltW2ldLlN5bTtcclxuIjsNCglwcmludCAiCQl9 XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICIJZm9yICh2 YXIgaSA9IDA7IGkgPCBhUnQubGVuZ3RoOyBpKyspXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJ cHJpbnQgIgkJaUJyY2ggPSBhUnRbaV0uUmV2LnNwbGl0KFwnLlwnKS5sZW5ndGg7XHJcbiI7DQoJ cHJpbnQgIgkJaWYgKE1hdGguZmxvb3IoaUJyY2ggLyAyKSAqIDIgIT0gaUJyY2gpXHJcbiI7DQoJ cHJpbnQgIgkJe1xyXG4iOw0KCXByaW50ICIJCQlpZiAodHlwZW9mKGFSdFtpXS5TeW0pICE9IFwi c3RyaW5nXCIpIGFSdFtpXS5TeW0gPSBhUnRbaV0uU3ltWzBdO1xyXG4iOw0KCXByaW50ICIJCX1c clxuIjsNCglwcmludCAiCQllbHNlXHJcbiI7DQoJcHJpbnQgIgkJe1xyXG4iOw0KCXByaW50ICIJ CQlpZiAodHlwZW9mKGFSdFtpXS5TeW0pID09IFwic3RyaW5nXCIpIGFSdFtpXS5TeW0gPSBbYVJ0 W2ldLlN5bV07XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXBy aW50ICIJcmV0dXJuIGFSdDtcclxuIjsNCglwcmludCAifVxyXG4iOw0KCXByaW50ICJcclxuIjsN CglwcmludCAiZnVuY3Rpb24gQ3JlYXRlUmV2VHJlZShhUmV2LCBhU3ltKVxyXG4iOw0KCXByaW50 ICJ7XHJcbiI7DQoJcHJpbnQgIglhU3ltID0gQ2xlYW5TeW1UQihhU3ltKTtcclxuIjsNCglwcmlu dCAiCXZhciBzUmV2ID0gQ3JlYXRlUmV2U3RydWN0KGFSZXYpO1xyXG4iOw0KCXByaW50ICIJYUJy YW5jaE9uZSA9IENyZWF0ZVJldkJyY2hTdHJ1Y3Qoc1JldiwgYVN5bSkuYUJyY2hbMF07XHJcbiI7 DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICIJcmV0dXJuIGFCcmFuY2hPbmU7XHJcbiI7DQoJcHJp bnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgImFCcmFuY2hPbmUgPSBDcmVhdGVS ZXZUcmVlKGFSZXYsIGFTeW0pO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rp b24gR2V0QnJjaFJvd3NwYW4oQnJjaClcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJ dmFyIGlTcGFuID0gMTtcclxuIjsNCglwcmludCAiCWZvciAodmFyIGkgPSAwOyBpIDwgQnJjaC5h UmV2Lmxlbmd0aDsgaSsrKVxyXG4iOw0KCXByaW50ICIJCWlTcGFuICs9IEdldFJldlJvd3NwYW4o QnJjaC5hUmV2W2ldKTtcclxuIjsNCglwcmludCAiCXJldHVybiBpU3BhbjtcclxuIjsNCglwcmlu dCAifVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gR2V0UmV2Um93c3Bh bihSZXYpXHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCXZhciBpU3BhbiA9IFJldi5h VGFnLmxlbmd0aDtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIglpZiAoUmV2LmFCcmNo Lmxlbmd0aCAhPSAwKVxyXG4iOw0KCXByaW50ICIJe1xyXG4iOw0KCXByaW50ICIJCWZvciAodmFy IGkgPSAwIDsgaSA8IFJldi5hQnJjaC5sZW5ndGg7IGkrKylcclxuIjsNCglwcmludCAiCQkJaVNw YW4gKz0gR2V0QnJjaFJvd3NwYW4oUmV2LmFCcmNoW2ldKTtcclxuIjsNCglwcmludCAiCQl9XHJc biI7DQoJcHJpbnQgIgllbHNlIGlmIChpU3BhbiA9PSAwKSBpU3BhbiA9IDE7XHJcbiI7DQoJcHJp bnQgIglyZXR1cm4gaVNwYW47XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7 DQoJcHJpbnQgImZ1bmN0aW9uIEdldFJvd3NwYW4oQnJjaF9PUl9SZXYpXHJcbiI7DQoJcHJpbnQg IntcclxuIjsNCglwcmludCAiCWlmICh0eXBlb2YoQnJjaF9PUl9SZXYuQnJjaCkgPT0gXCJzdHJp bmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0QnJjaFJvd3NwYW4oQnJjaF9PUl9SZXYp O1xyXG4iOw0KCXByaW50ICIJZWxzZSBpZiAodHlwZW9mKEJyY2hfT1JfUmV2LlJldikgPT0gXCJz dHJpbmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0UmV2Um93c3BhbihCcmNoX09SX1Jl dik7XHJcbiI7DQoJcHJpbnQgIgllbHNlIHJldHVybiAwO1xyXG4iOw0KCXByaW50ICJ9XHJcbiI7 DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBHZXRCcmNoQ29sc3BhbihCcmNoKVxy XG4iOw0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQgIglpZiAoQnJjaC5hUmV2Lmxlbmd0aCA8PSAw KSByZXR1cm4gMTtcclxuIjsNCglwcmludCAiCWVsc2VcclxuIjsNCglwcmludCAiCXtcclxuIjsN CglwcmludCAiCQl2YXIgaU1heCA9IDA7XHJcbiI7DQoJcHJpbnQgIgkJdmFyIGlTcGFuO1xyXG4i Ow0KCXByaW50ICIJCWZvciAodmFyIGkgPSAwOyBpIDwgQnJjaC5hUmV2Lmxlbmd0aDsgaSsrKVxy XG4iOw0KCXByaW50ICIJCXtcclxuIjsNCglwcmludCAiCQkJaVNwYW4gPSBHZXRSZXZDb2xzcGFu KEJyY2guYVJldltpXSk7XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChpU3BhbiA+IGlNYXgpIGlNYXgg PSBpU3BhbjtcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIgkJcmV0dXJuIGlNYXg7 XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7 DQoJcHJpbnQgImZ1bmN0aW9uIEdldFJldkNvbHNwYW4oUmV2KVxyXG4iOw0KCXByaW50ICJ7XHJc biI7DQoJcHJpbnQgIglpZiAoUmV2LmFCcmNoLmxlbmd0aCA8PSAwICYmIFJldi5hVGFnLmxlbmd0 aCA8PSAwKSByZXR1cm4gMTtcclxuIjsNCglwcmludCAiCWVsc2UgaWYgKFJldi5hQnJjaC5sZW5n dGggPD0gMCkgcmV0dXJuIDI7XHJcbiI7DQoJcHJpbnQgIgllbHNlXHJcbiI7DQoJcHJpbnQgIgl7 XHJcbiI7DQoJcHJpbnQgIgkJdmFyIGlNYXggPSAwO1xyXG4iOw0KCXByaW50ICIJCXZhciBpU3Bh bjtcclxuIjsNCglwcmludCAiCQlmb3IgKHZhciBpID0gMDsgaSA8IFJldi5hQnJjaC5sZW5ndGg7 IGkrKylcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlTcGFuID0gR2V0QnJj aENvbHNwYW4oUmV2LmFCcmNoW2ldKTtcclxuIjsNCglwcmludCAiCQkJaWYgKGlTcGFuID4gaU1h eCkgaU1heCA9IGlTcGFuO1xyXG4iOw0KCXByaW50ICIJCX1cclxuIjsNCglwcmludCAiCQlyZXR1 cm4gMSArIGlNYXg7XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglw cmludCAiXHJcbiI7DQoJcHJpbnQgImZ1bmN0aW9uIEdldENvbHNwYW4oQnJjaF9PUl9SZXYpXHJc biI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCWlmICh0eXBlb2YoQnJjaF9PUl9SZXYuQnJj aCkgPT0gXCJzdHJpbmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0QnJjaENvbHNwYW4o QnJjaF9PUl9SZXYpO1xyXG4iOw0KCXByaW50ICIJZWxzZSBpZiAodHlwZW9mKEJyY2hfT1JfUmV2 LlJldikgPT0gXCJzdHJpbmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0UmV2Q29sc3Bh bihCcmNoX09SX1Jldik7XHJcbiI7DQoJcHJpbnQgIgllbHNlIHJldHVybiAwO1xyXG4iOw0KCXBy aW50ICJ9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBDcmVhdGVUQkFy cmF5KGlSb3dzLCBpQ29scylcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJaVJvd3Mg PSBpUm93cyAqIDIgLSAxO1xyXG4iOw0KCXByaW50ICIJaUNvbHMgPSBpQ29scyAqIDIgLSAxO1xy XG4iOw0KCXByaW50ICIJdmFyIGEgPSBuZXcgQXJyYXkoaVJvd3MpO1xyXG4iOw0KCXByaW50ICIJ Zm9yICh2YXIgaSA9IDA7IGkgPCBpUm93czsgaSsrKVxyXG4iOw0KCXByaW50ICIJCWFbaV0gPSBu ZXcgQXJyYXkoaUNvbHMpO1xyXG4iOw0KCXByaW50ICIJcmV0dXJuIGE7XHJcbiI7DQoJcHJpbnQg In1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgInZhciBhVEIgPSBDcmVhdGVUQkFycmF5 KEdldFJvd3NwYW4oYUJyYW5jaE9uZSksIEdldENvbHNwYW4oYUJyYW5jaE9uZSkpO1xyXG4iOw0K CXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gU1YoaVJvdywgaUNvbCwgcylcclxuIjsN CglwcmludCAie1xyXG4iOw0KCXByaW50ICIJaWYgKGlSb3cgPj0gYVRCLmxlbmd0aCkgYVRCW2lS b3ddID0gbmV3IEFycmF5O1xyXG4iOw0KCXByaW50ICIJYVRCW2lSb3ddW2lDb2xdID0gcztcclxu IjsNCglwcmludCAifVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gRmls bEJyY2hUQihCcmNoLCBpUm93LCBpQ29sKVxyXG4iOw0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQg Igl2YXIgc1J0ID0ge2lSb3c6IDEsIGlDb2w6IDF9O1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglw cmludCAiCVNWKGlSb3crKywgaUNvbCwgXCJCXCIgKyBCcmNoLkJyY2ggKyBcIixcIiArIEJyY2gu VGFnKTtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIglpZiAoQnJjaC5hUmV2Lmxlbmd0 aCA+IDApXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJZm9yICh2YXIgaSA9IDA7 IGkgPCBCcmNoLmFSZXYubGVuZ3RoOyBpKyspXHJcbiI7DQoJcHJpbnQgIgkJe1xyXG4iOw0KCXBy aW50ICIJCQlTVihpUm93KyssIGlDb2wsIFwifFwiKTtcclxuIjsNCglwcmludCAiCQkJc1J0LmlS b3crKztcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgkJCVNWKGlSb3csIGlDb2wsIFwi VlwiICsgQnJjaC5hUmV2W2ldLlJldiArIFwiLFwiICsgQnJjaC5hUmV2W2ldLkxvZyk7XHJcbiI7 DQoJcHJpbnQgIgkJCXZhciBzRmlsbCA9IEZpbGxSZXZUQihCcmNoLmFSZXZbaV0sIGlSb3crKywg aUNvbCArIDEpO1xyXG4iOw0KCXByaW50ICIJCQlzUnQuaVJvdyArKztcclxuIjsNCglwcmludCAi XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChzRmlsbC5pUm93ID4gMSlcclxuIjsNCglwcmludCAiCQkJ e1xyXG4iOw0KCXByaW50ICIJCQkJZm9yICh2YXIgaiA9IDE7IGogPCBzRmlsbC5pUm93OyBqKysp XHJcbiI7DQoJcHJpbnQgIgkJCQl7XHJcbiI7DQoJcHJpbnQgIgkJCQkJaWYgKGkgKyAxIDwgQnJj aC5hUmV2Lmxlbmd0aClcclxuIjsNCglwcmludCAiCQkJCQkJU1YoaVJvdysrLCBpQ29sLCBcInxc Iik7XHJcbiI7DQoJcHJpbnQgIgkJCQkJc1J0LmlSb3crKztcclxuIjsNCglwcmludCAiCQkJCX1c clxuIjsNCglwcmludCAiCQkJfVxyXG4iOw0KCXByaW50ICIJCX1cclxuIjsNCglwcmludCAiCX1c clxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIglyZXR1cm4gc1J0O1xyXG4iOw0KCXByaW50 ICJ9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBGaWxsUmV2VEIoUmV2 LCBpUm93LCBpQ29sKVxyXG4iOw0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQgIgl2YXIgc1J0ID0g e2lSb3c6IDAsIGlDb2w6IDB9O1xyXG4iOw0KCXByaW50ICIJaWYgKFJldi5hQnJjaC5sZW5ndGgg PD0gMCAmJiBSZXYuYVRhZy5sZW5ndGggPD0gMClcclxuIjsNCglwcmludCAiCXtcclxuIjsNCglw cmludCAiCQlyZXR1cm4gc1J0O1xyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxu IjsNCglwcmludCAiCXNSdC5pQ29sID0gMTtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQg Igl2YXIgaU1heENvbCA9IDA7XHJcbiI7DQoJcHJpbnQgIgl2YXIgaVJvd0xhc3QgPSBpUm93O1xy XG4iOw0KCXByaW50ICIJZm9yICh2YXIgaSA9IDA7IGkgPCBSZXYuYUJyY2gubGVuZ3RoOyBpKysp XHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJZm9yICh2YXIgaiA9IGlSb3dMYXN0 ICsgMTsgaiA8IGlSb3c7IGorKylcclxuIjsNCglwcmludCAiCQkJU1YoaiwgaUNvbCwgXCJ8XCIp O1xyXG4iOw0KCXByaW50ICIJCWlSb3dMYXN0ID0gaVJvdztcclxuIjsNCglwcmludCAiXHJcbiI7 DQoJcHJpbnQgIgkJaWYgKGkgPT0gMClcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQg IgkJCWlmIChSZXYuYUJyY2gubGVuZ3RoID4gMSB8fCBSZXYuYVRhZy5sZW5ndGggPiAwKVxyXG4i Ow0KCXByaW50ICIJCQkJU1YoaVJvdywgaUNvbCwgXCJUXCIpO1xyXG4iOw0KCXByaW50ICIJCQll bHNlIFNWKGlSb3csIGlDb2wsIFwiLVwiKTtcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJp bnQgIgkJZWxzZSBpZiAoaSArIDEgPT0gUmV2LmFCcmNoLmxlbmd0aClcclxuIjsNCglwcmludCAi CQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChSZXYuYVRhZy5sZW5ndGggPiAwKVxyXG4iOw0KCXBy aW50ICIJCQkJU1YoaVJvdywgaUNvbCwgXCJFXCIpO1xyXG4iOw0KCXByaW50ICIJCQllbHNlIFNW KGlSb3csIGlDb2wsIFwiTFwiKTtcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIgkJ ZWxzZSBTVihpUm93LCBpQ29sLCBcIkVcIik7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50 ICJcclxuIjsNCglwcmludCAiCQl2YXIgc0ZpbGwgPSBGaWxsQnJjaFRCKFJldi5hQnJjaFtpXSwg aVJvdywgaUNvbCArIDEpXHJcbiI7DQoJcHJpbnQgIgkJaVJvdyArPSBzRmlsbC5pUm93O1xyXG4i Ow0KCXByaW50ICIJCXNSdC5pUm93ICs9IHNGaWxsLmlSb3c7XHJcbiI7DQoJcHJpbnQgIlxyXG4i Ow0KCXByaW50ICIJCWlmIChpICsgMSA8IFJldi5hQnJjaC5sZW5ndGggfHwgUmV2LmFUYWcubGVu Z3RoID4gMClcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlSb3crKztcclxu IjsNCglwcmludCAiCQkJc1J0LmlSb3crKztcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJp bnQgIlxyXG4iOw0KCXByaW50ICIJCWlmIChpTWF4Q29sIDwgc0ZpbGwuaUNvbCkgaU1heENvbCA9 IHNGaWxsLmlDb2w7XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXBy aW50ICIJZm9yICh2YXIgaSA9IDA7IGkgPCBSZXYuYVRhZy5sZW5ndGg7IGkrKylcclxuIjsNCglw cmludCAiCXtcclxuIjsNCglwcmludCAiCQlmb3IgKHZhciBqID0gaVJvd0xhc3QgKyAxOyBqIDwg aVJvdzsgaisrKVxyXG4iOw0KCXByaW50ICIJCQlTVihqLCBpQ29sLCBcInxcIik7XHJcbiI7DQoJ cHJpbnQgIgkJaVJvd0xhc3QgPSBpUm93O1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAi CQlpZiAoaSA9PSAwKVxyXG4iOw0KCXByaW50ICIJCXtcclxuIjsNCglwcmludCAiCQkJaWYgKFJl di5hQnJjaC5sZW5ndGggPT0gMClcclxuIjsNCglwcmludCAiCQkJe1xyXG4iOw0KCXByaW50ICIJ CQkJaWYgKFJldi5hVGFnLmxlbmd0aCA+IDEpIFNWKGlSb3csIGlDb2wsIFwiVFwiKTtcclxuIjsN CglwcmludCAiCQkJCWVsc2UgU1YoaVJvdywgaUNvbCwgXCItXCIpO1xyXG4iOw0KCXByaW50ICIJ CQl9XHJcbiI7DQoJcHJpbnQgIgkJCWVsc2UgaWYgKFJldi5hVGFnLmxlbmd0aCA+IDEpIFNWKGlS b3csIGlDb2wsIFwiRVwiKTtcclxuIjsNCglwcmludCAiCQkJZWxzZSBTVihpUm93LCBpQ29sLCBc IkxcIik7XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJCWVsc2VcclxuIjsNCglw cmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChpICsgMSA9PSBSZXYuYVRhZy5sZW5ndGgp IFNWKGlSb3csIGlDb2wsIFwiTFwiKTtcclxuIjsNCglwcmludCAiCQkJZWxzZSBTVihpUm93LCBp Q29sLCBcIkVcIik7XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglw cmludCAiCQlTVihpUm93KyssIGlDb2wgKyAxLCBcIkdcIiArIFJldi5hVGFnW2ldICsgXCIsXCIg KyBSZXYuTG9nKTtcclxuIjsNCglwcmludCAiCQlzUnQuaVJvdysrO1xyXG4iOw0KCXByaW50ICIJ CWlmIChpICsgMSA8IFJldi5hVGFnLmxlbmd0aClcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJ cHJpbnQgIgkJCWlSb3crKztcclxuIjsNCglwcmludCAiCQkJc1J0LmlSb3crKztcclxuIjsNCglw cmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICIJCWlmIChpTWF4Q29sIDwg MSkgaU1heENvbCA9IDE7XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIglzUnQuaUNv bCArPSBpTWF4Q29sO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCXJldHVybiBzUnQ7 XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIkZpbGxCcmNo VEIoYUJyYW5jaE9uZSwgMCwgMCk7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5j dGlvbiBTaG93TG9nKHNMb2cpXHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCXdpbmRv dy5zdGF0dXMgPSB1bmVzY2FwZShzTG9nKTtcclxuIjsNCglwcmludCAifVxyXG4iOw0KCXByaW50 ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gQ3JlYXRlQlQoc1Nob3cpXHJcbiI7DQoJcHJpbnQg IntcclxuIjsNCglwcmludCAiCXZhciBzVHlwZSA9IHNTaG93LnN1YnN0cigwLCAxKTtcclxuIjsN CglwcmludCAiCXNTaG93ID0gc1Nob3cuc3Vic3RyKDEpO1xyXG4iOw0KCXByaW50ICIJXHJcbiI7 DQoJcHJpbnQgIglpZiAoc1R5cGUgPT0gXCJCXCIpXHJcbiI7CglwcmludCAiCXtcclxuIjsNCglw cmludCAiCQl2YXIgc1Jldiwgc0JyY2g7XHJcbiI7DQoJcHJpbnQgIgkJc1Nob3cgPSBzU2hvdy5z cGxpdChcIixcIiwgMik7XHJcbiI7DQoJcHJpbnQgIgkJc1JldiA9IHNTaG93WzBdO1xyXG4iOw0K CXByaW50ICIJCWlmIChzU2hvdy5sZW5ndGggPj0gMikgc0JyY2ggPSBzU2hvd1sxXTtcclxuIjsN CglwcmludCAiCQllbHNlIHNCcmNoID0gc1JldjtcclxuIjsKCXByaW50ICIJCXJldHVybiBcIjx0 YWJsZSB3aWR0aD0xMDAlIGhlaWdodD0qIGJvcmRlcj0xIGJvcmRlcmNvbG9yPSM5OWNjMDAgY2Vs bHNwYWNpbmc9MD48dHI+PHRkIGFsaWduPWNlbnRlciBiZ2NvbG9yPSNjY2ZmNjY+PG5vYnI+PEI+ PGEgaHJlZj1cJ1wiICsgc0ZpbGUgKyAoc1JldiA9PSBcJzFcJyA/IFwiP1wiOihcIj9vbmx5X3dp dGhfdGFnPVwiICsgc0JyY2gpKSArIHNCYXJlcXVlcnkgKyBcIlwnPlwiICsgc0JyY2ggKyBcIjwv YT48L0I+PC9ub2JyPjwvdGQ+PC90cj48L3RhYmxlPlwiO1xyXG4iOw0KCXByaW50ICIJfVxyXG4i OwoJcHJpbnQgIgllbHNlXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJdmFyIHNS ZXYsIHNMb2c7XHJcbiI7DQoJcHJpbnQgIgkJc1Nob3cgPSBzU2hvdy5zcGxpdChcIixcIiwgMik7 XHJcbiI7DQoJcHJpbnQgIgkJc1JldiA9IHNTaG93WzBdO1xyXG4iOw0KCXByaW50ICIJCWlmIChz U2hvdy5sZW5ndGggPj0gMikgc0xvZyA9IHNTaG93WzFdO1xyXG4iOw0KCXByaW50ICIJCWVsc2Ug c0xvZyA9IFwiXCI7XHJcbiI7DQoJcHJpbnQgIgkJc0xvZyA9IGVzY2FwZShzTG9nKTtcclxuIjsN CglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgkJaWYgKHNUeXBlID09IFwiR1wiKVxyXG4iOw0KCXBy aW50ICIJCQlyZXR1cm4gXCI8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9KiBib3JkZXI9MSBib3Jk ZXJjb2xvcj0jNjZjY2ZmIGNlbGxzcGFjaW5nPTA+PHRyPjx0ZCBhbGlnbj1jZW50ZXIgYmdjb2xv cj0jY2NmZmZmPjxub2JyPjxCPjxhIG9ubW91c2Vtb3ZlPVwnU2hvd0xvZyhcXFwiXCIgKyBzTG9n ICsgXCJcXFwiKVwnIGhyZWY9XCdcIiArIHNGaWxlICsgXCI/b25seV93aXRoX3RhZz1cIiArIHNS ZXYgKyBzQmFyZXF1ZXJ5ICsgXCJcJz5cIiArIHNSZXYgKyBcIjwvYT48L0I+PC9ub2JyPjwvdGQ+ PC90cj48L3RhYmxlPlwiO1xyXG4iOw0KCXByaW50ICIJCWVsc2UgaWYgKHNUeXBlID09IFwiVlwi KVxyXG4iOw0KCXByaW50ICIJCQlyZXR1cm4gXCI8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9KiBi b3JkZXI9MSBib3JkZXJjb2xvcj0jZmZjYzY2IGNlbGxzcGFjaW5nPTA+PHRyPjx0ZCBhbGlnbj1j ZW50ZXIgYmdjb2xvcj0jZmZmZmNjPjxub2JyPjxCPjxhIG9ubW91c2Vtb3ZlPVwnU2hvd0xvZyhc XFwiXCIgKyBzTG9nICsgXCJcXFwiKVwnIGhyZWY9XCdcIiArIHNGaWxlICsgXCI/cmV2PVwiICsg c1JldiArIFwiJmNvbnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cFwiICsgc0JhcmVxdWVy eSArIFwiXCc+XCIgKyBzUmV2ICsgXCI8L2E+PC9CPjwvbm9icj48L3RkPjwvdHI+PC90YWJsZT5c IjtcclxuIjsNCglwcmludCAiCX1cclxuIjsNCglwcmludCAifVxyXG4iOw0KCXByaW50ICJcclxu IjsNCglwcmludCAidmFyIE5UQ29sID0gNztcclxuIjsNCglwcmludCAidmFyIE5UUm93ID0gMztc clxuIjsNCglwcmludCAidmFyIHMgPSBcIlwiO1xyXG4iOw0KCXByaW50ICJmb3IgKHZhciBpID0g MDsgaSA8IGFUQi5sZW5ndGg7IGkrKylcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJ Zm9yIChuID0gMDsgbiA8IE5UUm93OyBuKyspXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJp bnQgIgkJcyArPSBcIjx0cj5cIjtcclxuIjsNCglwcmludCAiCQlmb3IgKHZhciBqID0gMDsgaiA8 IGFUQltpXS5sZW5ndGg7IGorKylcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJ CWlmICh0eXBlb2YoYVRCW2ldW2pdKSA9PSBcInVuZGVmaW5lZFwiKVxyXG4iOw0KCXByaW50ICIJ CQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlpZiAobiA9PSAwKQlzICs9IFwiPHRkIGNvbHNwYW49XCIg KyBOVENvbCArIFwiIHJvd3NwYW49XCIgKyBOVFJvdyArIFwiPjxmb250IHNpemU9MT4mbmJzcDs8 L2ZvbnQ+PC90ZD5cIjtcclxuIjsNCglwcmludCAiCQkJfVxyXG4iOw0KCXByaW50ICIJCQllbHNl IGlmIChhVEJbaV1bal0gPT0gXCItXCIpXHJcbiI7DQoJcHJpbnQgIgkJCXtcclxuIjsNCglwcmlu dCAiCQkJCWlmIChuICE9IE1hdGguZmxvb3IoTlRSb3cgLyAyKSkgcyArPSBcIjx0ZCBoZWlnaHQ9 NiBjb2xzcGFuPVwiICsgTlRDb2wgKyBcIj48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJCQkJZWxz ZSBzICs9IFwiPHRkIGhlaWdodD0zIGNvbHNwYW49XCIgKyBOVENvbCArIFwiIGJnY29sb3I9I2Zm Y2M2Nj48Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJ CX1cclxuIjsNCglwcmludCAiCQkJZWxzZSBpZiAoYVRCW2ldW2pdID09IFwifFwiKVxyXG4iOw0K CXByaW50ICIJCQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlpZiAobiA9PSAwKVxyXG4iOw0KCXByaW50 ICIJCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJCWZvciAodmFyIGsgPSAxOyBrIDwgTlRDb2wgLyAy OyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJCQkJCXMgKz0gXCI8dGQgcm93c3Bhbj1cIiArIE5UUm93 ICsgXCI+PGZvbnQgc2l6ZT0xPiZuYnNwOzwvZm9udD48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJ CQkJCXMgKz0gXCI8dGQgd2lkdGg9OCByb3dzcGFuPVwiICsgTlRSb3cgKyBcIiBiZ2NvbG9yPSNm ZmNjNjY+PGZvbnQgc2l6ZT0xPiZuYnNwOzwvZm9udD48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJ CQkJCWZvciAodmFyIGsgPSAxOyBrIDwgTlRDb2wgLyAyOyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJ CQkJCXMgKz0gXCI8dGQgcm93c3Bhbj1cIiArIE5UUm93ICsgXCI+PGZvbnQgc2l6ZT0xPiZuYnNw OzwvZm9udD48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJCQkJfVxyXG4iOw0KCXByaW50ICIJCQl9 XHJcbiI7DQoJcHJpbnQgIgkJCWVsc2UgaWYgKGFUQltpXVtqXSA9PSBcJ0VcJylcclxuIjsNCglw cmludCAiCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJaWYgKG4gIT0gTWF0aC5mbG9vcihOVFJvdyAv IDIpKVxyXG4iOw0KCXByaW50ICIJCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJCWZvciAodmFyIGsg PSAxOyBrIDwgTlRDb2wgLyAyOyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJCQkJCXMgKz0gXCI8dGQg d2lkdGg9MyBoZWlnaHQ9Nj48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJCQkJCXMgKz0gXCI8dGQg d2lkdGg9OCBoZWlnaHQ9MSBiZ2NvbG9yPSNmZmNjNjY+PC90ZD5cIjtcclxuIjsNCglwcmludCAi CQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8gMjsgaysrKVxyXG4iOw0KCXByaW50ICIJ CQkJCQlzICs9IFwiPHRkIHdpZHRoPTMgaGVpZ2h0PTY+PC90ZD5cIjtcclxuIjsNCglwcmludCAi CQkJCX1cclxuIjsNCglwcmludCAiCQkJCWVsc2VcclxuIjsNCglwcmludCAiCQkJCXtcclxuIjsN CglwcmludCAiCQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8gMjsgaysrKVxyXG4iOw0K CXByaW50ICIJCQkJCQlzICs9IFwiPHRkPjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQkJZm9y ICgtLWs7IGsgPCBOVENvbDsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIGhl aWdodD0zIGJnY29sb3I9I2ZmY2M2Nj48Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7 XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJcbiI7DQoJcHJpbnQgIgkJCX1cclxuIjsNCglwcmludCAi CQkJZWxzZSBpZiAoYVRCW2ldW2pdID09IFwnTFwnKVxyXG4iOw0KCXByaW50ICIJCQl7XHJcbiI7 DQoJcHJpbnQgIgkJCQlpZiAobiA8IE1hdGguZmxvb3IoTlRSb3cgLyAyKSlcclxuIjsNCglwcmlu dCAiCQkJCXtcclxuIjsNCglwcmludCAiCQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8g MjsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIHdpZHRoPTMgaGVpZ2h0PTY+ PC90ZD5cIjtcclxuIjsNCglwcmludCAiCQkJCQlzICs9IFwiPHRkIHdpZHRoPTggaGVpZ2h0PTEg Ymdjb2xvcj0jZmZjYzY2PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQkJZm9yICh2YXIgayA9 IDE7IGsgPCBOVENvbCAvIDI7IGsrKylcclxuIjsNCglwcmludCAiCQkJCQkJcyArPSBcIjx0ZCB3 aWR0aD0zIGhlaWdodD02PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJcbiI7DQoJcHJp bnQgIgkJCQllbHNlIGlmIChuID09IE1hdGguZmxvb3IoTlRSb3cgLyAyKSlcclxuIjsNCglwcmlu dCAiCQkJCXtcclxuIjsNCglwcmludCAiCQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8g MjsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkID48Zm9udCBzaXplPTE+Jm5i c3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQkJZm9yICgtLWs7IGsgPCBOVENv bDsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIGJnY29sb3I9I2ZmY2M2Nj48 Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJc biI7DQoJcHJpbnQgIgkJCQllbHNlXHJcbiI7DQoJcHJpbnQgIgkJCQl7XHJcbiI7DQoJcHJpbnQg IgkJCQkJZm9yICh2YXIgayA9IDA7IGsgPCBOVENvbDsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJ CQlzICs9IFwiPHRkIGhlaWdodD02PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJcbiI7 DQoJcHJpbnQgIgkJCX1cclxuIjsNCglwcmludCAiCQkJZWxzZSBpZiAoYVRCW2ldW2pdID09IFwi VFwiKVxyXG4iOw0KCXByaW50ICIJCQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlpZiAobiA8IE1hdGgu Zmxvb3IoTlRSb3cgLyAyKSlcclxuIjsNCglwcmludCAiCQkJCXtcclxuIjsNCglwcmludCAiCQkJ CQlmb3IgKHZhciBrID0gMDsgayA8IE5UQ29sOyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJCQkJCXMg Kz0gXCI8dGQgaGVpZ2h0PTY+PC90ZD5cIjtcclxuIjsNCglwcmludCAiCQkJCX1cclxuIjsNCglw cmludCAiCQkJCWVsc2UgaWYgKG4gPT0gTWF0aC5mbG9vcihOVFJvdyAvIDIpKVxyXG4iOw0KCXBy aW50ICIJCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJCWZvciAoayA9IDA7IGsgPCBOVENvbDsgaysr KVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIGhlaWd0aD0zIGJnY29sb3I9I2ZmY2M2 Nj48Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9 XHJcbiI7DQoJcHJpbnQgIgkJCQllbHNlXHJcbiI7DQoJcHJpbnQgIgkJCQl7XHJcbiI7DQoJcHJp bnQgIgkJCQkJZm9yICh2YXIgayA9IDE7IGsgPCBOVENvbCAvIDI7IGsrKylcclxuIjsNCglwcmlu dCAiCQkJCQkJcyArPSBcIjx0ZCBoZWlnaHQ9NiB3aWR0aD0zPjwvdGQ+XCI7XHJcbiI7DQoJcHJp bnQgIgkJCQkJcyArPSBcIjx0ZCB3aWR0aD04IGJnY29sb3I9I2ZmY2M2Nj48L3RkPlwiO1xyXG4i Ow0KCXByaW50ICIJCQkJCWZvciAodmFyIGsgPSAxOyBrIDwgTlRDb2wgLyAyOyBrKyspXHJcbiI7 DQoJcHJpbnQgIgkJCQkJCXMgKz0gXCI8dGQgd2lkdGg9Mz48L3RkPlwiO1xyXG4iOw0KCXByaW50 ICIJCQkJfVxyXG4iOw0KCXByaW50ICIJCQl9XHJcbiI7DQoJcHJpbnQgIgkJCWVsc2VcclxuIjsN CglwcmludCAiCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJaWYgKG4gPT0gMCkJcyArPSBcIjx0ZCBh bGlnbj1jZW50ZXIgY29sc3Bhbj1cIiArIE5UQ29sICsgXCIgcm93c3Bhbj1cIiArIE5UUm93ICsg XCI+XCIgKyBDcmVhdGVCVChhVEJbaV1bal0pICsgXCI8L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJ CQl9XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJCXMgKz0gXCI8L3RyPlwiO1xy XG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJ9XHJcbiI7DQoJcHJpbnQgImRvY3VtZW50 LndyaXRlKFwiPHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MD48Zm9y bT5cIiArIHMgKyBcIjwvZm9ybT48L3RhYmxlPlwiKTtcbiI7DQoKCXByaW50ICI8L3NjcmlwdD5c biI7CglwcmludCAiPC94bXA+IiBpZiAkc2hvd2NvZGU7CgoKCWh0bWxfZm9vdGVyKCk7Cn0KCnN1 YiBkb0xvZygkKSB7CglteSAoJGZ1bGxuYW1lKSA9IEBfOwoJbXkgKCRkaWZmcmV2LCAkdXB3aGVy ZSwgJGZpbGVuYW1lLCAkYmFja3VybCk7CgoJcmVhZExvZygkZnVsbG5hbWUpOwoKCWh0bWxfaGVh ZGVyKCJDVlMgbG9nIGZvciAkd2hlcmUiKTsKCSgkdXB3aGVyZSAgPSAkd2hlcmUpID1+IHN8KEF0 dGljLyk/W14vXSskfHw7CgkoJGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzfF4uKi98fDsKCSRiYWNr dXJsID0gJHNjcmlwdG5hbWUgLiAiLyIgLiB1cmxlbmNvZGUoJHVwd2hlcmUpIC4gJHF1ZXJ5OwoJ cHJpbnQgIjxwPlxuICI7CglwcmludCAmbGluaygkYmFja2ljb24sICIkYmFja3VybCMkZmlsZW5h bWUiKSwgIiA8Yj5VcCB0byAiLAoJICAgICZjbGlja2FibGVQYXRoKCR1cHdoZXJlLCAxKSwgIjwv Yj5cbjwvcD5cbiI7CglwcmludCAiPHA+XG4gIjsKCXByaW50ICZsaW5rKCdSZXF1ZXN0IGRpZmYg YmV0d2VlbiBhcmJpdHJhcnkgcmV2aXNpb25zJywgJyNkaWZmJyk7CglwcmludCAiXG48L3A+XG48 aHIgbm9zaGFkZT5cbiI7CgoJcHJpbnQgIjxwPlxuIjsKCWlmICgkY3VyYnJhbmNoKSB7CgkJcHJp bnQgIkRlZmF1bHQgYnJhbmNoOiAiLCAoJHJldnN5bXskY3VyYnJhbmNofSB8fCAkY3VyYnJhbmNo KTsKCX0gZWxzZSB7CgkJcHJpbnQgIk5vIGRlZmF1bHQgYnJhbmNoIjsKCX0KCXByaW50ICI8YnI+ XG4iOwoKCWlmICgkaW5wdXR7b25seV93aXRoX3RhZ30pIHsKCQlwcmludCAiQ3VycmVudCB0YWc6 ICRpbnB1dHtvbmx5X3dpdGhfdGFnfTxicj5cbiI7Cgl9CglwcmludCAiPC9wPlxuIjsKCgl1bmRl ZiAlbmFtZXByaW50ZWQ7CgoJZm9yIChteSAkaSA9IDAgOyAkaSA8PSAkI3JldmRpc3BsYXlvcmRl ciA7ICRpKyspIHsKCQlwcmludCAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT5cbiI7CgkJcHJpbnRM b2coJHJldmRpc3BsYXlvcmRlclskaV0pOwoJfQoKCXByaW50ICI8aHIgbm9zaGFkZT5cbjxwPlxu IjsKCXByaW50ICI8YSBuYW1lPVwiZGlmZlwiPlxuIjsKCXByaW50ICJUaGlzIGZvcm0gYWxsb3dz IHlvdSB0byByZXF1ZXN0IGRpZmYncyBiZXR3ZWVuIGFueSB0d29cbiI7CglwcmludCAicmV2aXNp b25zIG9mIGEgZmlsZS4gIFlvdSBtYXkgc2VsZWN0IGEgc3ltYm9saWMgcmV2aXNpb25cbiI7Cglw cmludCAibmFtZSB1c2luZyB0aGUgc2VsZWN0aW9uIGJveCBvciB5b3UgbWF5IHR5cGUgaW4gYSBu dW1lcmljXG4iOwoJcHJpbnQgIm5hbWUgdXNpbmcgdGhlIHR5cGUtaW4gdGV4dCBib3guXG4iOwoJ cHJpbnQgIjwvYT5cbjwvcD5cbiI7CglwcmludAoJICAgICI8Zm9ybSBtZXRob2Q9XCJnZXRcIiBh Y3Rpb249XCIke3NjcmlwdHdoZXJlfS5kaWZmXCIgbmFtZT1cImRpZmZfc2VsZWN0XCI+XG4iOwoK CWZvcmVhY2ggKEBzdGlja3l2YXJzKSB7CgkJcHJpbnRmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBu YW1lPSIlcyIgdmFsdWU9IiVzIj4nLCAkXywKCQkgICAgJGlucHV0eyRffSkKCQkgICAgaWYgKGRl ZmluZWQoJGlucHV0eyRffSkKCQkgICAgJiYgKCghZGVmaW5lZCgkREVGQVVMVFZBTFVFeyRffSkK CQkgICAgfHwgJGlucHV0eyRffSBuZSAkREVGQVVMVFZBTFVFeyRffSkgJiYgJGlucHV0eyRffSBu ZSAiIikpOwoJfQoJcHJpbnQgIjx0YWJsZSBzdHlsZT1cImJvcmRlcjogbm9uZVwiPlxuPHRyPlxu IjsKCXByaW50ICI8dGQgYWxpZ249XCJyaWdodFwiPiI7CglwcmludCAiPGxhYmVsIGZvcj1cInIx XCIgYWNjZXNza2V5PVwiMVwiPkRpZmZzIGJldHdlZW4gPC9sYWJlbD5cbiI7CglwcmludCAiPHNl bGVjdCBpZD1cInIxXCIgbmFtZT1cInIxXCI+XG4iOwoJcHJpbnQgIjxvcHRpb24gdmFsdWU9XCJ0 ZXh0XCIgc2VsZWN0ZWQ+VXNlIFRleHQgRmllbGQ8L29wdGlvbj5cbiI7CglwcmludCAkc2VsOwoJ cHJpbnQgIjwvc2VsZWN0PlxuIjsKCSRkaWZmcmV2ID0gJHJldmRpc3BsYXlvcmRlclskI3JldmRp c3BsYXlvcmRlcl07CgkkZGlmZnJldiA9ICRpbnB1dHsicjEifSBpZiAoZGVmaW5lZCgkaW5wdXR7 InIxIn0pKTsKCXByaW50CgkgICAgIjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIkaW5wdXRU ZXh0U2l6ZVwiIG5hbWU9XCJ0cjFcIiB2YWx1ZT1cIiRkaWZmcmV2XCIgb25jaGFuZ2U9XCJ0aGlz LmZvcm0ucjEuc2VsZWN0ZWRJbmRleD0wXCI+PC90ZD5cbiI7CglwcmludCAiPHRkPjxicj48L3Rk PlxuPC90cj5cbiI7CglwcmludCAiPHRyPlxuPHRkIGFsaWduPVwicmlnaHRcIj4iOwoJcHJpbnQg IjxsYWJlbCBmb3I9XCJyMlwiIGFjY2Vzc2tleT1cIjJcIj5hbmQgPC9sYWJlbD5cbiI7Cglwcmlu dCAiPHNlbGVjdCBpZD1cInIyXCIgbmFtZT1cInIyXCI+XG4iOwoJcHJpbnQgIjxvcHRpb24gdmFs dWU9XCJ0ZXh0XCIgc2VsZWN0ZWQ+VXNlIFRleHQgRmllbGQ8L29wdGlvbj5cbiI7CglwcmludCAk c2VsOwoJcHJpbnQgIjwvc2VsZWN0PlxuIjsKCSRkaWZmcmV2ID0gJHJldmRpc3BsYXlvcmRlclsw XTsKCSRkaWZmcmV2ID0gJGlucHV0eyJyMiJ9IGlmIChkZWZpbmVkKCRpbnB1dHsicjIifSkpOwoJ cHJpbnQKCSAgICAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIiRpbnB1dFRleHRTaXplXCIg bmFtZT1cInRyMlwiIHZhbHVlPVwiJGRpZmZyZXZcIiBvbmNoYW5nZT1cInRoaXMuZm9ybS5yMi5z ZWxlY3RlZEluZGV4PTBcIj48L3RkPlxuIjsKCXByaW50ICI8dGQ+PGlucHV0IHR5cGU9XCJzdWJt aXRcIiB2YWx1ZT1cIiAgR2V0IERpZmZzICBcIiBhY2Nlc3NrZXk9XCJHXCI+PC90ZD5cbiI7Cglw cmludCAiPC90cj5cbjwvdGFibGU+XG4iOwoJcHJpbnQgIjwvZm9ybT5cbiI7CglwcmludCAiPGhy IG5vc2hhZGU+XG4iOwoJcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdldFwiIGFjdGlvbj1cIiRzY3Jp cHR3aGVyZVwiPlxuIjsKCXByaW50ICI8dGFibGUgc3R5bGU9XCJib3JkZXI6IG5vbmVcIj5cbiI7 CglwcmludCAiPHRyPlxuPHRkIGFsaWduPVwicmlnaHRcIj4iOwoJcHJpbnQgIjxsYWJlbCBmb3I9 XCJmXCIgYWNjZXNza2V5PVwiRFwiPlByZWZlcnJlZCBEaWZmIHR5cGU6IjsKCXByaW50ICI8L2xh YmVsPjwvdGQ+XG4iOwoJcHJpbnQgIjx0ZD4iOwoJcHJpbnREaWZmU2VsZWN0KCR1c2VfamF2YV9z Y3JpcHQpOwoJcHJpbnQgIjwvdGQ+XG48dGQ+PC90ZD5cbjwvdHI+XG4iOwoKCWlmIChAYnJhbmNo bmFtZXMpIHsKCQlwcmludCAiPHRyPlxuPHRkIGFsaWduPVwicmlnaHRcIj4iOwoJCXByaW50ICI8 bGFiZWwgZm9yPVwib25seV93aXRoX3RhZ1wiIGFjY2Vzc2tleT1cIkJcIj4iOwoJCXByaW50ICJW aWV3IG9ubHkgQnJhbmNoOjwvbGFiZWw+PC90ZD5cbiI7CgkJcHJpbnQgIjx0ZD4iOwoJCXByaW50 ICI8YSBuYW1lPVwiYnJhbmNoXCI+PC9hPlxuIjsKCQlwcmludCAiPHNlbGVjdCBpZD1cIm9ubHlf d2l0aF90YWdcIiBuYW1lPVwib25seV93aXRoX3RhZ1wiIjsKCQlwcmludCAiIG9uY2hhbmdlPVwi dGhpcy5mb3JtLnN1Ym1pdCgpXCIiIGlmICR1c2VfamF2YV9zY3JpcHQ7CgkJcHJpbnQgIj5cbiI7 CgkJcHJpbnQgIjxvcHRpb24gdmFsdWU9XCJcIiI7CgkJcHJpbnQgIiBzZWxlY3RlZCIKCQkgICAg aWYgKGRlZmluZWQoJGlucHV0eyJvbmx5X3dpdGhfdGFnIn0pCgkJICAgICYmICRpbnB1dHsib25s eV93aXRoX3RhZyJ9IGVxICIiKTsKCQlwcmludCAiPlNob3cgYWxsIGJyYW5jaGVzPC9vcHRpb24+ XG4iOwoKCQlmb3JlYWNoIChyZXZlcnNlIHNvcnQgQGJyYW5jaG5hbWVzKSB7CgkJCXByaW50ICI8 b3B0aW9uIjsKCQkJcHJpbnQgIiBzZWxlY3RlZCIKCQkJICAgIGlmIChkZWZpbmVkKCRpbnB1dHsi b25seV93aXRoX3RhZyJ9KQoJCQkgICAgJiYgJGlucHV0eyJvbmx5X3dpdGhfdGFnIn0gZXEgJF8p OwoJCQlwcmludCAiPiR7X308L29wdGlvbj5cbiI7CgkJfQoJCXByaW50ICI8L3NlbGVjdD48L3Rk PlxuPHRkPjwvdGQ+XG48L3RyPlxuIjsKCX0KCglmb3JlYWNoIChAc3RpY2t5dmFycykgewoJCW5l eHQgaWYgKCRfIGVxICJmIik7CgkJbmV4dCBpZiAoJF8gZXEgIm9ubHlfd2l0aF90YWciKTsKCQlu ZXh0IGlmICgkXyBlcSAibG9nc29ydCIpOwoJCXByaW50ICI8aW5wdXQgdHlwZT1cImhpZGRlblwi IG5hbWU9XCIkX1wiIHZhbHVlPVwiJGlucHV0eyRffVwiPlxuIgoJCSAgICBpZiAoZGVmaW5lZCgk aW5wdXR7JF99KQoJCSAgICAmJiAoIWRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pCgkJICAgIHx8 ICRpbnB1dHskX30gbmUgJERFRkFVTFRWQUxVRXskX30pICYmICRpbnB1dHskX30gbmUgIiIpOwoJ fQoJcHJpbnQgIjx0cj5cbjx0ZCBhbGlnbj1cInJpZ2h0XCI+IjsKCXByaW50ICI8YSBuYW1lPVwi bG9nc29ydFwiPjwvYT5cbiI7CglwcmludCAiPGxhYmVsIGZvcj1cImxvZ3NvcnRcIiBhY2Nlc3Nr ZXk9XCJMXCI+U29ydCBsb2cgYnk6IjsKCXByaW50ICI8L2xhYmVsPjwvdGQ+XG48dGQ+IjsKCXBy aW50TG9nU29ydFNlbGVjdCgkdXNlX2phdmFfc2NyaXB0KTsKCXByaW50ICI8L3RkPlxuIjsKCXBy aW50ICI8dGQ+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIiAgU2V0ICBcIiBhY2Nlc3Nr ZXk9XCJTXCI+PC90ZD5cbiI7CglwcmludCAiPC90cj5cbjwvdGFibGU+XG4iOwoJcHJpbnQgIjwv Zm9ybT5cbiI7CglodG1sX2Zvb3RlcigpOwp9CgpzdWIgZmx1c2hfZGlmZl9yb3dzKCQkJCQpIHsK CW15ICRqOwoJbXkgKCRsZWZ0Q29sUmVmLCAkcmlnaHRDb2xSZWYsICRsZWZ0Um93LCAkcmlnaHRS b3cpID0gQF87CgoJaWYgKCFkZWZpbmVkKCRzdGF0ZSkpIHsKCQlyZXR1cm47Cgl9CgoJaWYgKCRz dGF0ZSBlcSAiUHJlQ2hhbmdlUmVtb3ZlIikgeyAgICAjIHdlIGp1c3QgZ290IHJlbW92ZS1saW5l cyBiZWZvcmUKCQlmb3IgKCRqID0gMCA7ICRqIDwgJGxlZnRSb3cgOyAkaisrKSB7CgkJCXByaW50 CgkJCSAgICAiPHRyPlxuPHRkIGNsYXNzPVwiZGlmZi1yZW1vdmVkXCI+Jm5ic3A7QCRsZWZ0Q29s UmVmWyRqXTwvdGQ+XG4iOwoJCQlwcmludAoJCQkgICAgIjx0ZCBjbGFzcz1cImRpZmYtZW1wdHlc Ij4mbmJzcDs8L3RkPlxuPC90cj5cbiI7CgkJfQoJfSBlbHNpZiAoJHN0YXRlIGVxICJQcmVDaGFu Z2UiKSB7ICAgICMgc3RhdGUgZXEgIlByZUNoYW5nZSIKCQkgICAgIyB3ZSBnb3QgcmVtb3ZlcyB3 aXRoIHN1YnNlcXVlbnQgYWRkcwoKCQlmb3IgKCRqID0gMCA7ICRqIDwgJGxlZnRSb3cgfHwgJGog PCAkcmlnaHRSb3cgOyAkaisrKQoJCXsgICAgIyBkdW1wIG91dCBib3RoIGNvbHMKCQkJcHJpbnQg Ijx0cj5cbiI7CgkJCWlmICgkaiA8ICRsZWZ0Um93KSB7CgkJCQlwcmludAoJCQkJICAgICI8dGQg Y2xhc3M9XCJkaWZmLWNoYW5nZWRcIj4mbmJzcDtAJGxlZnRDb2xSZWZbJGpdPC90ZD4iOwoJCQl9 IGVsc2UgewoJCQkJcHJpbnQKCQkJCSAgICAiPHRkIGNsYXNzPVwiZGlmZi1jaGFuZ2VkLW1pc3Np bmdcIj4mbmJzcDs8L3RkPiI7CgkJCX0KCQkJcHJpbnQgIlxuIjsKCgkJCWlmICgkaiA8ICRyaWdo dFJvdykgewoJCQkJcHJpbnQKCQkJCSAgICAiPHRkIGNsYXNzPVwiZGlmZi1jaGFuZ2VkXCI+Jm5i c3A7QCRyaWdodENvbFJlZlskal08L3RkPiI7CgkJCX0gZWxzZSB7CgkJCQlwcmludAoJCQkJICAg ICI8dGQgY2xhc3M9XCJkaWZmLWNoYW5nZWQtbWlzc2luZ1wiPiZuYnNwOzwvdGQ+IjsKCQkJfQoJ CQlwcmludCAiXG48L3RyPlxuIjsKCQl9Cgl9Cn0KCiMjCiMgRnVuY3Rpb24gdG8gZ2VuZXJhdGUg SHVtYW4gcmVhZGFibGUgZGlmZi1maWxlcwojIGh1bWFuX3JlYWRhYmxlX2RpZmYoU3RyaW5nIHJl dmlzaW9uX3RvX3JldHVybl90byk7CiMjCnN1YiBodW1hbl9yZWFkYWJsZV9kaWZmKCQpIHsKCW15 ICgkZGlmZnR4dCwgJHdoZXJlX25kLCAkZmlsZW5hbWUsICRwYXRobmFtZSwgJHNjcmlwdHdoZXJl X25kKTsKCW15ICgkZmgsICRyZXYpID0gQF87CglteSAoJGRhdGUxLCAkZGF0ZTIsICRyMWQsICRy MmQsICRyMXIsICRyMnIsICRyZXYxLCAkcmV2MiwgJHN5bTEsICRzeW0yKTsKCW15IChAcmlnaHRD b2wsIEBsZWZ0Q29sKTsKCgkoJHdoZXJlX25kICAgICAgID0gJHdoZXJlKSAgICAgICA9fiBzLy5k aWZmJC8vOwoJKCRmaWxlbmFtZSAgICAgICA9ICR3aGVyZV9uZCkgICAgPX4gcy9eLipcLy8vOwoJ KCRwYXRobmFtZSAgICAgICA9ICR3aGVyZV9uZCkgICAgPX4gcy8oQXR0aWNcLyk/W15cL10qJC8v OwoJKCRzY3JpcHR3aGVyZV9uZCA9ICRzY3JpcHR3aGVyZSkgPX4gcy8uZGlmZiQvLzsKCgluYXZp Z2F0ZUhlYWRlcigkc2NyaXB0d2hlcmVfbmQsICRwYXRobmFtZSwgJGZpbGVuYW1lLCAkcmV2LCAi ZGlmZiIpOwoKCSMgUmVhZCBoZWFkZXIgdG8gcGljayB1cCByZWFkIHJldmlzaW9uIGFuZCBkYXRl LCBpZiBwb3NzaWJsZQoJd2hpbGUgKDwkZmg+KSB7CgkJKCRyMWQsICRyMXIpID0gL1x0KC4qKVx0 KC4qKSQvIGlmICgvXi0tLSAvKTsKCQkoJHIyZCwgJHIycikgPSAvXHQoLiopXHQoLiopJC8gaWYg KC9eXCtcK1wrIC8pOwoJCWxhc3QgaWYgKC9eXCtcK1wrIC8pOwoJfQoKCWlmIChkZWZpbmVkKCRy MXIpICYmICRyMXIgPX4gL14oXGQrXC4pK1xkKyQvKSB7CgkJJHJldjEgID0gJHIxcjsKCQkkZGF0 ZTEgPSAkcjFkOwoJfQoJaWYgKGRlZmluZWQoJHIycikgJiYgJHIyciA9fiAvXihcZCtcLikrXGQr JC8pIHsKCQkkcmV2MiAgPSAkcjJyOwoJCSRkYXRlMiA9ICRyMmQ7Cgl9CgoJcHJpbnQKCSAgICAi PGgzIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+RGlmZiBmb3IgLyR3aGVyZV9uZCBiZXR3 ZWVuIHZlcnNpb24gJHJldjEgYW5kICRyZXYyPC9oMz5cbiIsCgkgICAgIyBVc2luZyBzdHlsZT1c ImJvcmRlcjogbm9uZVwiIGhlcmUgYnJlYWtzIE5TIDQueCBiYWRseS4uLgoJICAgICI8dGFibGUg Ym9yZGVyPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiIHdpZHRoPVwi MTAwJVwiPlxuIiwKCSAgICAiPHRyIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZlwi PlxuIiwgIjx0aCB3aWR0aD1cIjUwJVwiIHZhbGlnbj1cInRvcFwiPiIsCgkgICAgInZlcnNpb24g JHJldjEiOwoJcHJpbnQgIiwgJGRhdGUxIiAgICAgICAgIGlmIChkZWZpbmVkKCRkYXRlMSkpOwoJ cHJpbnQgIjxicj5UYWc6ICRzeW0xXG4iIGlmICgkc3ltMSk7CglwcmludCAiPC90aD5cbiIsICI8 dGggd2lkdGg9XCI1MCVcIiB2YWxpZ249XCJ0b3BcIj4iLCAidmVyc2lvbiAkcmV2MiI7Cglwcmlu dCAiLCAkZGF0ZTIiICAgICAgICAgaWYgKGRlZmluZWQoJGRhdGUyKSk7CglwcmludCAiPGJyPlRh ZzogJHN5bTJcbiIgaWYgKCRzeW0xKTsKCXByaW50ICI8L3RoPlxuIjsKCglteSAkbGVmdFJvdyAg PSAwOwoJbXkgJHJpZ2h0Um93ID0gMDsKCW15ICgkb2xkbGluZSwgJG5ld2xpbmUsICRmdW5uYW1l LCAkZGlmZmNvZGUsICRyZXN0KTsKCgkjIFByb2Nlc3MgZGlmZiB0ZXh0CgoJIyBwcmVmZXRjaCBz ZXZlcmFsIGxpbmVzCglteSBAYnVmID0gaGVhZCgkZmgpOwoKCW15ICVkID0gc2Nhbl9kaXJlY3Rp dmVzKEBidWYpOwoKCXdoaWxlIChAYnVmIHx8ICFlb2YoJGZoKSkgewoJCSRkaWZmdHh0ID0gQGJ1 ZiA/IHNoaWZ0IEBidWYgOiA8JGZoPjsKCgkJaWYgKCRkaWZmdHh0ID1+IC9eQEAvKSB7CgkJCSgk b2xkbGluZSwgJG5ld2xpbmUsICRmdW5uYW1lKSA9CgkJCSAgICAkZGlmZnR4dCA9fiAvQEAgXC0o WzAtOV0rKS4qXCsoWzAtOV0rKS4qQEAoLiopLzsKCQkJJGZ1bm5hbWUgPSBodG1scXVvdGUoJGZ1 bm5hbWUpOwoJCQkkZnVubmFtZSA9fiBzL1xzLyZuYnNwOy9nbzsKCQkJcHJpbnQKCQkJICAgICI8 dHIgY2xhc3M9XCJkaWZmLWhlYWRpbmdcIj5cbjx0ZCB3aWR0aD1cIjUwJVwiPiI7CgkJCXByaW50 CgkJCSAgICAiPHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1c IjVcIj5cbjx0cj5cbjx0ZD48Yj5MaW5lJm5ic3A7JG9sZGxpbmU8L2I+IjsKCQkJcHJpbnQKCQkJ ICAgICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogc21hbGxlclwiPiRmdW5uYW1lPC9z cGFuPjwvdGQ+XG48L3RyPlxuPC90YWJsZT4iOwoJCQlwcmludCAiPC90ZD5cbjx0ZCB3aWR0aD1c IjUwJVwiPiI7CgkJCXByaW50CgkJCSAgICAiPHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1c IjFcIiBjZWxscGFkZGluZz1cIjVcIj5cbjx0cj5cbjx0ZD48Yj5MaW5lJm5ic3A7JG5ld2xpbmU8 L2I+IjsKCQkJcHJpbnQKCQkJICAgICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogc21h bGxlclwiPiRmdW5uYW1lPC9zcGFuPjwvdGQ+XG48L3RyPlxuPC90YWJsZT5cbiI7CgkJCXByaW50 ICI8L3RkPlxuIjsKCQkJJHN0YXRlICAgID0gImR1bXAiOwoJCQkkbGVmdFJvdyAgPSAwOwoJCQkk cmlnaHRSb3cgPSAwOwoJCX0gZWxzZSB7CgkJCSgkZGlmZmNvZGUsICRyZXN0KSA9ICRkaWZmdHh0 ID1+IC9eKFstKyBdKSguKikvOwoJCQkkXyA9IHNwYWNlZEh0bWxUZXh0KCRyZXN0LCAkZHsndGFi c3RvcCd9KTsKCgkJCSMjIyMjIyMjIwoJCQkjIGxpdHRsZSBzdGF0ZSBtYWNoaW5lIHRvIHBhcnNl IHVuaWZpZWQtZGlmZiBvdXRwdXQgKEhlbiwgemVsbGVyQHRoaW5rLmRlKQoJCQkjIGluIG9yZGVy IHRvIGdldCBzb21lIG5pY2UgJ2VkaWZmJy1tb2RlIG91dHB1dAoJCQkjIHN0YXRlczoKCQkJIyAg ImR1bXAiICAgICAgICAgICAgIC0ganVzdCBkdW1wIHRoZSB2YWx1ZQoJCQkjICAiUHJlQ2hhbmdl UmVtb3ZlIiAgLSB3ZSBiZWdhbiB3aXRoICctJyAuLiBzbyB0aGlzIGNvdWxkIGJlIHRoZSBzdGFy dCBvZiBhICdjaGFuZ2UnIGFyZWEgb3IganVzdCByZW1vdmUKCQkJIyAgIlByZUNoYW5nZSIgICAg ICAgIC0gb2tleSwgd2UgZ290IHNldmVyYWwgJy0nIGxpbmVzIGFuZCBtb3ZlZCB0byAnKycgbGlu ZXMgLT4gdGhpcyBpcyBhIGNoYW5nZSBibG9jawoJCQkjIyMjIyMjIyMjCgoJCQlpZiAoJGRpZmZj b2RlIGVxICcrJykgewoJCQkJaWYgKCRzdGF0ZSBlcSAiZHVtcCIpCgkJCQl7ICMgJ2NoYW5nZScg bmV2ZXIgYmVnaW5zIHdpdGggJysnOiBqdXN0IGR1bXAgb3V0IHZhbHVlCgkJCQkJcHJpbnQKCQkJ CQkgICAgIjx0cj5cbjx0ZCBjbGFzcz1cImRpZmYtZW1wdHlcIj4mbmJzcDs8L3RkPlxuPHRkIGNs YXNzPVwiZGlmZi1hZGRlZFwiPiZuYnNwOyRfPC90ZD5cbjwvdHI+XG4iOwoJCQkJfSBlbHNlIHsg ICAgIyB3ZSBnb3QgbWludXMgYmVmb3JlCgkJCQkJJHN0YXRlID0gIlByZUNoYW5nZSI7CgkJCQkJ JHJpZ2h0Q29sWyRyaWdodFJvdysrXSA9ICRfOwoJCQkJfQoJCQl9IGVsc2lmICgkZGlmZmNvZGUg ZXEgJy0nKSB7CgkJCQkkc3RhdGUgPSAiUHJlQ2hhbmdlUmVtb3ZlIjsKCQkJCSRsZWZ0Q29sWyRs ZWZ0Um93KytdID0gJF87CgkJCX0gZWxzZSB7ICAgICMgZW1wdHkgZGlmZmNvZGUKCQkJCWZsdXNo X2RpZmZfcm93cyBcQGxlZnRDb2wsIFxAcmlnaHRDb2wsICRsZWZ0Um93LAoJCQkJICAgICRyaWdo dFJvdzsKCQkJCXByaW50ICI8dHI+XG48dGQgY2xhc3M9XCJkaWZmLXNhbWVcIj4mbmJzcDskXzwv dGQ+XG48dGQgY2xhc3M9XCJkaWZmLXNhbWVcIj4mbmJzcDskXzwvdGQ+XG48L3RyPlxuIjsKCQkJ CSRzdGF0ZSAgICA9ICJkdW1wIjsKCQkJCSRsZWZ0Um93ICA9IDA7CgkJCQkkcmlnaHRSb3cgPSAw OwoJCQl9CgkJfQoJfQoJY2xvc2UoJGZoKTsKCglmbHVzaF9kaWZmX3Jvd3MgXEBsZWZ0Q29sLCBc QHJpZ2h0Q29sLCAkbGVmdFJvdywgJHJpZ2h0Um93OwoKCSMgc3RhdGUgaXMgZW1wdHkgaWYgd2Ug ZGlkbid0IGhhdmUgYW55IGNoYW5nZQoJaWYgKCEkc3RhdGUpIHsKCQlwcmludCAiPHRyPlxuPHRk IGNvbHNwYW49XCIyXCI+Jm5ic3A7PC90ZD5cbjwvdHI+XG4iOwoJCXByaW50ICI8dHIgY2xhc3M9 XCJkaWZmLWVtcHR5XCI+XG4iOwoJCXByaW50CgkJICAgICI8dGQgY29sc3Bhbj1cIjJcIiBhbGln bj1cImNlbnRlclwiPjxiPi0gTm8gdmlld2FibGUgY2hhbmdlIC08L2I+PC90ZD5cbjwvdHI+XG4i OwoJfQoJcHJpbnQgIjwvdGFibGU+XG4iOwoKCXByaW50ICI8aHIgc3R5bGU9XCJ3aWR0aDogMTAw JVwiIG5vc2hhZGU+XG4iOwoJcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdldFwiIGFjdGlvbj1cIiR7 c2NyaXB0d2hlcmV9XCI+XG4iOwoJcHJpbnQgIjx0YWJsZSBzdHlsZT1cImJvcmRlcjogbm9uZVwi PlxuPHRyPlxuPHRkPlxuIjsKCgkjIHByaW50IGxlZ2VuZAoJcHJpbnQgIjx0YWJsZSBib3JkZXI9 XCIxXCI+XG48dHI+XG48dGQ+IjsKCXByaW50ICJMZWdlbmQ6PGJyPjx0YWJsZSBzdHlsZT1cImJv cmRlcjogbm9uZVwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMVwiPlxuIjsKCXBy aW50CgkgICAgIjx0cj5cbjx0ZCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwiZGlmZi1yZW1vdmVk XCI+UmVtb3ZlZCBmcm9tIHYuJHJldjE8L3RkPlxuPHRkIGNsYXNzPVwiZGlmZi1lbXB0eVwiPiZu YnNwOzwvdGQ+XG48L3RyPlxuIjsKCXByaW50CgkgICAgIjx0ciBjbGFzcz1cImRpZmYtY2hhbmdl ZFwiPlxuPHRkIGFsaWduPVwiY2VudGVyXCIgY29sc3Bhbj1cIjJcIj5jaGFuZ2VkIGxpbmVzPC90 ZD5cbjwvdHI+XG4iOwoJcHJpbnQKCSAgICAiPHRyPlxuPHRkIGNsYXNzPVwiZGlmZi1lbXB0eVwi PiZuYnNwOzwvdGQ+XG48dGQgYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cImRpZmYtYWRkZWRcIj5B ZGRlZCBpbiB2LiRyZXYyPC90ZD5cbjwvdHI+XG4iOwoJcHJpbnQgIjwvdGFibGU+XG48L3RkPlxu PC90cj5cbjwvdGFibGU+XG48L3RkPlxuPHRkPiI7CgoJIyBQcmludCBmb3JtYXQgc2VsZWN0b3IK CWZvcmVhY2ggbXkgJHZhciAoa2V5cyAlaW5wdXQpIHsKCQluZXh0IGlmICgkdmFyIGVxICJmIik7 CgkJbmV4dAoJCSAgICBpZiAoZGVmaW5lZCgkREVGQVVMVFZBTFVFeyR2YXJ9KQoJCSAgICAmJiAk REVGQVVMVFZBTFVFeyR2YXJ9IGVxICRpbnB1dHskdmFyfSk7CgkJcHJpbnQgIjxpbnB1dCB0eXBl PVwiaGlkZGVuXCIgbmFtZT1cIiIsIHVybGVuY29kZSgkdmFyKSwKCQkgICAgIlwiIHZhbHVlPVwi IiwgdXJsZW5jb2RlKCRpbnB1dHskdmFyfSksICJcIj5cbiI7Cgl9CglwcmludERpZmZTZWxlY3Qo JHVzZV9qYXZhX3NjcmlwdCk7CglwcmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1c IlNob3dcIj5cbiI7CglwcmludCAiPC90ZD5cbiI7CgoJcHJpbnQgIjwvdHI+XG48L3RhYmxlPlxu IjsKCXByaW50ICI8L2Zvcm0+XG4iOwp9CgpzdWIgbmF2aWdhdGVIZWFkZXIoJCQkJCQpIHsKCW15 ICgkc3doZXJlLCAkcGF0aCwgJGZpbGVuYW1lLCAkcmV2LCAkdGl0bGUpID0gQF87Cgkkc3doZXJl ID0gIiIgaWYgKCRzd2hlcmUgZXEgJHNjcmlwdHdoZXJlKTsKCSRzd2hlcmUgPSAnLi8nIC4gdXJs ZW5jb2RlKCRmaWxlbmFtZSkgaWYgKCRzd2hlcmUgZXEgIiIpOwoKCSMgVE9ETzogdGhpcyBzaG91 bGQgYmUgbW92ZWQgaW50byBleHRlcm5hbCBDU1MgZmlsZS4KCW15ICRjc3MgPSAnJzsKCWlmICgk dGl0bGUgZXEgJ2RpZmYnKSB7CgkgICAgJGNzcyA9ICIKPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wi PgouZGlmZi1oZWFkaW5nIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlmZmNvbG9ySGVhZGluZzsK fQouZGlmZi1zYW1lIHsKICBmb250LWZhbWlseTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6 IHNtYWxsZXI7Cn0KLmRpZmYtZW1wdHkgewogIGJhY2tncm91bmQtY29sb3I6ICRkaWZmY29sb3JF bXB0eTsKfQouZGlmZi1hZGRlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJGRpZmZjb2xvckFkZDsK ICBmb250LWZhbWlseTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KLmRp ZmYtcmVtb3ZlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJGRpZmZjb2xvclJlbW92ZTsKICBmb250 LWZhbWlseTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KLmRpZmYtY2hh bmdlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJGRpZmZjb2xvckNoYW5nZTsKICBmb250LWZhbWls eTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KLmRpZmYtY2hhbmdlZC1t aXNzaW5nIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlmZmNvbG9yRGFya0NoYW5nZTsKfQo8L3N0 eWxlPiI7Cgl9CgoJcHJpbnQgPDxFT0Y7CiRIVE1MX0RPQ1RZUEUKPGh0bWw+CjxoZWFkPgo8dGl0 bGU+JHBhdGgkZmlsZW5hbWUgLSAkdGl0bGUgLSAkcmV2PC90aXRsZT4kY3NzCiRIVE1MX01FVEE8 L2hlYWQ+CiRib2R5X3RhZ19mb3Jfc3JjCjx0YWJsZSB3aWR0aD0iMTAwJSIgc3R5bGU9ImJvcmRl cjogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogJG5hdmlnYXRpb25IZWFkZXJDb2xvciIgY2VsbHNw YWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIxIj4KPHRyIHZhbGlnbj0iYm90dG9tIj48dGQ+CkVPRgoK CXByaW50ICZsaW5rKCRiYWNraWNvbiwgIiRzd2hlcmUkcXVlcnkjcmV2JHJldiIpOwoJcHJpbnQg IjxiPlJldHVybiB0byAiLCAmbGluaygkZmlsZW5hbWUsICIkc3doZXJlJHF1ZXJ5I3JldiRyZXYi KSwKCSAgICAiIENWUyBsb2ciOwoJcHJpbnQgIjwvYj4gJGZpbGVpY29uPC90ZD4iOwoKCXByaW50 ICI8dGQgYWxpZ249XCJyaWdodFwiPiRkaXJpY29uIDxiPlVwIHRvICIsCgkgICZjbGlja2FibGVQ YXRoKCRwYXRoLCAxKSwKCSAgICAiPC9iPjwvdGQ+IjsKCXByaW50ICI8L3RyPjwvdGFibGU+IjsK fQoKc3ViIHBsdXJhbF93cml0ZSgkJCkgewoJbXkgKCRudW0sICR0ZXh0KSA9IEBfOwoJaWYgKCRu dW0gIT0gMSkgewoJCSR0ZXh0IC49ICJzIjsKCX0KCglpZiAoJG51bSA+IDApIHsKCQlyZXR1cm4g am9pbiAoJyAnLCAkbnVtLCAkdGV4dCk7Cgl9IGVsc2UgewoJCXJldHVybiAiIjsKCX0KfQoKIyMK IyBwcmludCByZWFkYWJsZSB0aW1lc3RhbXAgaW4gdGVybXMgb2YKIyAnLi50aW1lIGFnbycKIyBI LiBaZWxsZXIgPHplbGxlckB0aGluay5kZT4KIyMKc3ViIHJlYWRhYmxlVGltZSgkJCkgewoJbXkg KCRpLCAkYnJlYWssICRyZXR2YWwpOwoJbXkgKCRzZWNzLCAkbG9uZykgPSBAXzsKCgkjIHRoaXMg ZnVuY3Rpb24gd29ya3MgY29ycmVjdCBmb3IgdGltZSA+PSAyIHNlY29uZHMKCWlmICgkc2VjcyA8 IDIpIHsKCQlyZXR1cm4gInZlcnkgbGl0dGxlIHRpbWUiOwoJfQoKCW15ICVkZXNjID0gKAoJCTEs ICAgICAgICAnc2Vjb25kJywgNjAsICAgICAnbWludXRlJywgMzYwMCwgICAgJ2hvdXInLAoJCTg2 NDAwLCAgICAnZGF5JywgICAgNjA0ODAwLCAnd2VlaycsICAgMjYyODAwMCwgJ21vbnRoJywKCQkz MTUzNjAwMCwgJ3llYXInCgkpOwoJbXkgQGJyZWFrcyA9IHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlz ICVkZXNjOwoJJGkgPSAwOwoKCXdoaWxlICgkaSA8PSAkI2JyZWFrcyAmJiAkc2VjcyA+PSAyICog JGJyZWFrc1skaV0pIHsKCQkkaSsrOwoJfQoJJGktLTsKCSRicmVhayAgPSAkYnJlYWtzWyRpXTsK CSRyZXR2YWwgPSBwbHVyYWxfd3JpdGUoaW50KCRzZWNzIC8gJGJyZWFrKSwgJGRlc2N7JGJyZWFr fSk7CgoJaWYgKCRsb25nID09IDEgJiYgJGkgPiAwKSB7CgkJbXkgJHJlc3QgPSAkc2VjcyAlICRi cmVhazsKCQkkaS0tOwoJCSRicmVhayA9ICRicmVha3NbJGldOwoJCW15ICRyZXN0dGltZSA9IHBs dXJhbF93cml0ZShpbnQoJHJlc3QgLyAkYnJlYWspLCAkZGVzY3skYnJlYWt9KTsKCQlpZiAoJHJl c3R0aW1lKSB7CgkJCSRyZXR2YWwgLj0gIiwgJHJlc3R0aW1lIjsKCQl9Cgl9CgoJcmV0dXJuICRy ZXR2YWw7Cn0KCiMjCiMgY2xpY2thYmxlUGF0aChTdHJpbmcgcGF0aG5hbWUsIGJvb2xlYW4gbGFz dF9pdGVtX2NsaWNrYWJsZSkKIwojIHJldHVybnMgYSBodG1sLWlmaWVkIHBhdGggd2hlcmVhcyBl YWNoIGRpcmVjdG9yeSBpcyBhIGxpbmsgZm9yCiMgZmFzdGVyIG5hdmlnYXRpb24uIGxhc3RfaXRl bV9jbGlja2FibGUgY29udHJvbHMgd2hldGhlciB0aGUKIyBiYXNlbmFtZSAobGFzdCBkaXJlY3Rv cnkvZmlsZSkgaXMgYSBsaW5rIGFzIHdlbGwKIyMKc3ViIGNsaWNrYWJsZVBhdGgoJCQpIHsKCW15 ICgkcGF0aG5hbWUsICRjbGlja0xhc3QpID0gQF87CglteSAkcmV0dmFsID0gJyc7CgoJaWYgKCRw YXRobmFtZSBlcSAnLycpIHsKCgkJIyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gLSBjaG9vc2VD VlNSb290KCkgaXMKCQkjIGludGVuZGVkIHRvIGRvIHRoaXMKCQkkcmV0dmFsID0gIlskY3ZzdHJl ZV0iOwoJfSBlbHNlIHsKCQkkcmV0dmFsIC49ICcgJyAuICZsaW5rKCJbJGN2c3RyZWVdIiwKCQkJ c3ByaW50ZignJXMvJXMjZGlybGlzdCcsICRzY3JpcHRuYW1lLCAkcXVlcnkpKTsKCQlteSAkd2hl cmVwYXRoID0gJyc7CgkJbXkgKCRsYXN0c2xhc2gpID0gJHBhdGhuYW1lID1+IG18LyR8OwoKCQlm b3JlYWNoIChzcGxpdCAoL1wvLywgJHBhdGhuYW1lKSkgewoJCQkkcmV0dmFsIC49ICIgLyAiOwoJ CQkkd2hlcmVwYXRoIC49ICIvJF8iOwoJCQlteSAoJGxhc3QpID0gIiR3aGVyZXBhdGgvIiBlcSAi LyRwYXRobmFtZSIKCQkJICAgIHx8ICR3aGVyZXBhdGggZXEgIi8kcGF0aG5hbWUiOwoKCQkJaWYg KCRjbGlja0xhc3QgfHwgISRsYXN0KSB7CgkJCQkkcmV0dmFsIC49ICZsaW5rKCRfLAoJCQkJCWpv aW4gKCcnLCAkc2NyaXB0bmFtZSwKCQkJCQl1cmxlbmNvZGUoJHdoZXJlcGF0aCksCgkJCQkJKCEk bGFzdCB8fCAkbGFzdHNsYXNoID8gJy8nIDogJycpLAoJCQkJCSRxdWVyeSwKCQkJCQkoISRsYXN0 IHx8ICRsYXN0c2xhc2ggPyAiI2Rpcmxpc3QiIDogIiIpCgkJCQkpKTsKCQkJfSBlbHNlIHsgICAg IyBkbyBub3QgbWFrZSBhIGxpbmsgdG8gdGhlIGN1cnJlbnQgZGlyCgkJCQkkcmV0dmFsIC49ICRf OwoJCQl9CgkJfQoJfQoJcmV0dXJuICRyZXR2YWw7Cn0KCnN1YiBjaG9vc2VDVlNSb290KCkgewoK CXByaW50ICI8Zm9ybSBtZXRob2Q9XCJnZXRcIiBhY3Rpb249XCIke3NjcmlwdHdoZXJlfVwiPlxu IjsKCWlmICgyIDw9IEBDVlNST09UKSB7CgkJbXkgKCRrKTsKCQlmb3JlYWNoICRrIChrZXlzICVp bnB1dCkgewoJCQlwcmludCAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiJGtcIiB2YWx1 ZT1cIiRpbnB1dHska31cIj5cbiIKCQkJICAgIGlmICgkaW5wdXR7JGt9KSAmJiAoJGsgbmUgImN2 c3Jvb3QiKTsKCQl9CgoJCSMgRm9ybS1FbGVtZW50cyBsb29rIHdpZXJkIGluIE5ldHNjYXBlIGlm IHRoZSBiYWNrZ3JvdW5kCgkJIyBpc24ndCBncmF5IGFuZCB0aGUgZm9ybSBlbGVtZW50cyBhcmUg bm90IHBsYWNlZAoJCSMgd2l0aGluIGEgdGFibGUgLi4uCgkJcHJpbnQgIjx0YWJsZSBzdHlsZT1c ImJvcmRlcjogbm9uZVwiPlxuPHRyPlxuIjsKCQlwcmludCAiPHRkPjxsYWJlbCBmb3I9XCJjdnNy b290XCIgYWNjZXNza2V5PVwiQ1wiPkNWUyBSb290OjwvbGFiZWw+PC90ZD5cbiI7CgkJcHJpbnQg Ijx0ZD5cbjxzZWxlY3QgaWQ9XCJjdnNyb290XCIgbmFtZT1cImN2c3Jvb3RcIiI7CgkJcHJpbnQg IiBvbmNoYW5nZT1cInRoaXMuZm9ybS5zdWJtaXQoKVwiIiBpZiAkdXNlX2phdmFfc2NyaXB0OwoJ CXByaW50ICI+XG4iOwoKCQlmb3JlYWNoICRrIChAQ1ZTUk9PVCkgewoJCQlwcmludCAiPG9wdGlv biB2YWx1ZT1cIiRrXCIiOwoJCQlwcmludCAiIHNlbGVjdGVkIiBpZiAoJGsgZXEgJGN2c3RyZWUp OwoJCQlwcmludCAiPiIsKCRDVlNST09UZGVzY3J7JGt9ID8gJENWU1JPT1RkZXNjcnska30gOiAk ayksCgkJCSAgICAiPC9vcHRpb24+XG4iOwoJCX0KCQlwcmludCAiPC9zZWxlY3Q+XG48L3RkPlxu PHRkPiI7Cgl9IGVsc2UgewoKCQkjIG5vIGNob2ljZSAtLSBidXQgd2UgbmVlZCB0aGUgZm9ybSB0 byBzZWxlY3QgbW9kdWxlL3BhdGgsCgkJIyBhdCBsZWFzdCBmb3IgTmV0c2NhcGUKCQlwcmludCAi PHA+XG4iOwoJCXByaW50ICJDVlMgUm9vdDogPGI+WyRjdnN0cmVlXTwvYj4iOwoJfQoKCXByaW50 ICIgPGxhYmVsIGZvcj1cIm1wYXRoXCIgYWNjZXNza2V5PVwiTVwiPk1vZHVsZSBwYXRoIG9yIGFs aWFzOiI7CglwcmludCAiPC9sYWJlbD5cbiI7CglwcmludCAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIg aWQ9XCJtcGF0aFwiIG5hbWU9XCJwYXRoXCIgdmFsdWU9XCJcIiBzaXplPVwiMTVcIj5cbiI7Cglw cmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkdvXCIgYWNjZXNza2V5PVwiT1wi PiI7CgoJaWYgKDIgPD0gQENWU1JPT1QpIHsKCQlwcmludCAiPC90ZD5cbjwvdHI+XG48L3RhYmxl PiI7Cgl9IGVsc2UgewoJCXByaW50ICI8L3A+IjsKCX0KCXByaW50ICJcbjwvZm9ybT4iOwp9Cgpz dWIgY2hvb3NlTWlycm9yKCkgewoKCSMgVGhpcyBjb2RlIGNvbWVzIGZyb20gdGhlIG9yaWdpbmFs IEJTRC1jdnN3ZWIKCSMgYW5kIG1heSBub3QgYmUgdXNlZnVsIGZvciB5b3VyIHNpdGU7IElmIHlv dSBkb24ndAoJIyBzZXQgJU1JUlJPUlMgdGhpcyB3b24ndCBzaG93IHVwLCBhbnl3YXkuCglzY2Fs YXIoJU1JUlJPUlMpIG9yIHJldHVybjsKCgkjIFNob3VsZCBwZXJoYXBzIGV4Y2x1ZGUgdGhlIGN1 cnJlbnQgc2l0ZSBzb21laG93Li4uCglwcmludCAiXG48cD5cblRoaXMgQ1ZTd2ViIGlzIG1pcnJv cmVkIGluXG4iOwoKCW15IEB0bXAgPSBtYXAoJmxpbmsoaHRtbHF1b3RlKCRfKSwgJE1JUlJPUlN7 JF99KSwKCQkgICAgICBzb3J0IGtleXMgJU1JUlJPUlMpOwoJbXkgJHRtcCA9IHBvcChAdG1wKTsK CglpZiAoc2NhbGFyKEB0bXApKSB7CgkgICAgcHJpbnQgam9pbignLCAnLCBAdG1wKSwgJyBhbmQg JzsKCX0KCglwcmludCAiJHRtcC5cbjwvcD5cbiI7Cn0KCnN1YiBmaWxlU29ydENtcCgpIHsKCW15 ICgkY29tcCkgPSAwOwoJbXkgKCRjLCAkZCwgJGFmLCAkYmYpOwoKCSgkYWYgPSAkYSkgPX4gcy8s diQvLzsKCSgkYmYgPSAkYikgPX4gcy8sdiQvLzsKCW15ICgkcmV2MSwgJGRhdGUxLCAkbG9nMSwg JGF1dGhvcjEsICRmaWxlbmFtZTEpID0gQHskZmlsZWluZm97JGFmfX0KCSAgICBpZiAoZGVmaW5l ZCgkZmlsZWluZm97JGFmfSkpOwoJbXkgKCRyZXYyLCAkZGF0ZTIsICRsb2cyLCAkYXV0aG9yMiwg JGZpbGVuYW1lMikgPSBAeyRmaWxlaW5mb3skYmZ9fQoJICAgIGlmIChkZWZpbmVkKCRmaWxlaW5m b3skYmZ9KSk7CgoJaWYgKGRlZmluZWQoJGZpbGVuYW1lMSkgJiYgZGVmaW5lZCgkZmlsZW5hbWUy KSAmJiAkYWYgZXEgJGZpbGVuYW1lMQoJICAgICYmICRiZiBlcSAkZmlsZW5hbWUyKQoJewoKCQkj IFR3byBmaWxlcwoJCSRjb21wID0gLXJldmNtcCgkcmV2MSwgJHJldjIpIGlmICgkYnlyZXYgJiYg JHJldjEgJiYgJHJldjIpOwoJCSRjb21wID0gKCRkYXRlMiA8PT4gJGRhdGUxKSBpZiAoJGJ5ZGF0 ZSAmJiAkZGF0ZTEgJiYgJGRhdGUyKTsKCQkkY29tcCA9ICgkbG9nMSBjbXAgJGxvZzIpIGlmICgk Ynlsb2cgJiYgJGxvZzEgJiYgJGxvZzIpOwoJCSRjb21wID0gKCRhdXRob3IxIGNtcCAkYXV0aG9y MikKCQkgICAgaWYgKCRieWF1dGhvciAmJiAkYXV0aG9yMSAmJiAkYXV0aG9yMik7Cgl9CgoJaWYg KCRjb21wID09IDApIHsKCgkJIyBEaXJlY3RvcmllcyBmaXJzdCwgdGhlbiBmaWxlcyB1bmRlciB2 ZXJzaW9uIGNvbnRyb2wsCgkJIyB0aGVuIG90aGVyLCAicm9ndWUiIGZpbGVzLgoJCSMgU29ydCBi eSBmaWxlbmFtZSBpZiBubyBvdGhlciBjcml0ZXJpYSBhdmFpbGFibGUuCgoJCW15ICRhZCA9ICgo LWQgIiRmdWxsbmFtZS8kYSIpID8gJ0QnCgkJICAgIDogKGRlZmluZWQoJGZpbGVpbmZveyRhZn0p ID8gJ0YnIDogJ1InKSk7CgkJbXkgJGJkID0gKCgtZCAiJGZ1bGxuYW1lLyRiIikgPyAnRCcKCQkg ICAgOiAoZGVmaW5lZCgkZmlsZWluZm97JGJmfSkgPyAnRicgOiAnUicpKTsKCQkoJGMgPSAkYSkg PX4gc3wuKi98fDsKCQkoJGQgPSAkYikgPX4gc3wuKi98fDsKCQkkY29tcCA9ICgiJGFkJGMiIGNt cCAiJGJkJGQiKTsKCX0KCXJldHVybiAkY29tcDsKfQoKIyBtYWtlIEEgdXJsIGZvciBkb3dubG9h ZGluZwpzdWIgZG93bmxvYWRfdXJsKCQkOyQpIHsKCW15ICgkdXJsLCAkcmV2aXNpb24sICRtaW1l dHlwZSkgPSBAXzsKCgkkcmV2aXNpb24gPX4gcy9cYjBcLi8vOwoKCWlmIChkZWZpbmVkKCRjaGVj a291dE1hZ2ljKQoJICAgICYmICghZGVmaW5lZCgkbWltZXR5cGUpIHx8ICRtaW1ldHlwZSBuZSAi dGV4dC94LWN2c3dlYi1tYXJrdXAiKSkKCXsKCQlteSAkcGF0aCA9ICR3aGVyZTsKCQkkcGF0aCA9 fiBzfFteL10rJHx8OwoJCSR1cmwgPSAiJHNjcmlwdG5hbWUvJGNoZWNrb3V0TWFnaWMvJHtwYXRo fSR1cmwiOwoJfQoJJHVybCAuPSAiP3Jldj0kcmV2aXNpb24iOwoJJHVybCAuPSAnJmNvbnRlbnQt dHlwZT0nIC4gdXJsZW5jb2RlKCRtaW1ldHlwZSkgaWYgKGRlZmluZWQoJG1pbWV0eXBlKSk7CgoJ JHVybDsKfQoKIyBQcmVzZW50cyBhIGxpbmsgdG8gZG93bmxvYWQgdGhlCiMgc2VsZWN0ZWQgcmV2 aXNpb24Kc3ViIGRvd25sb2FkX2xpbmsoJCQkOyQpIHsKCW15ICgkdXJsLCAkcmV2aXNpb24sICR0 ZXh0bGluaywgJG1pbWV0eXBlKSA9IEBfOwoJbXkgKCRmdWxsdXJsKSA9IGRvd25sb2FkX3VybCgk dXJsLCAkcmV2aXNpb24sICRtaW1ldHlwZSk7CgoJJGZ1bGx1cmwgPX4gcy86L3NwcmludGYoIiUl JTAyeCIsIG9yZCgkJikpL2VnOwoKCXByaW50ZiAnPGEgaHJlZj0iJXMiJywgaHJlZnF1b3RlKCIk ZnVsbHVybCRiYXJlcXVlcnkiKTsKCglpZiAoJG9wZW5fZXh0ZXJuX3dpbmRvdwoJICAgICYmICgh ZGVmaW5lZCgkbWltZXR5cGUpIHx8ICRtaW1ldHlwZSBuZSAidGV4dC94LWN2c3dlYi1tYXJrdXAi KSkKCXsKCQlwcmludCAnIHRhcmdldD0iY3ZzX2NoZWNrb3V0Iic7CgoJCSMgd2Ugc2hvdWxkIGhh dmUKCQkjICAgJ2lmIChkb2N1bWVudC5jdnN3aW49PW51bGwpIGRvY3VtZW50LmN2c3dpbj13aW5k b3cub3BlbiguLi4nCgkJIyBpbiBvcmRlciB0byBhbGxvdyB0aGUgdXNlciB0byByZXNpemUgdGhl IHdpbmRvdzsgb3RoZXJ3aXNlCgkJIyB0aGUgdXNlciBtYXkgcmVzaXplIHRoZSB3aW5kb3csIGJ1 dCBvbiBuZXh0IGNoZWNrb3V0IC0gemFwIC0KCQkjIGl0cyBvcmlnaW5hbCAoY29uZmlndXJlZCBz LiBjdnN3ZWIuY29uZikgc2l6ZSBpcyBiYWNrIGFnYWluCgkJIyAuLiBhbm5veWluZyAoaWYgJGV4 dGVybl93aW5kb3dfKHdpZHRofGhlaWdodCkgaXMgZGVmaW5lZCkKCQkjIGJ1dCB0aGlzIGlmICgu Likgc29sdXRpb24gaXMgZmFyIGZyb20gcGVyZmVjdAoJCSMgd2hhdCB3ZSBuZWVkIHRvIGRvIGFz IHdlbGwgaXMKCQkjIDEpIHNhdmUgY3Zzd2luIGluIGFuIGludmlzaWJsZSBmcmFtZSB0aGF0IGFs d2F5cyBleGlzdHMKCQkjICAgIChkb2N1bWVudC5jdnN3aW4gd2lsbCBiZSB2b2lkIG9uIG5leHQg bG9hZCkKCQkjIDIpIG9uIGNsb3NlIG9mIHRoZSBjdnNfY2hlY2tvdXQgLSB3aW5kb3cgc2V0IHRo ZSBjdnN3aW4KCQkjICAgIHZhcmlhYmxlIHRvICdudWxsJyBhZ2FpbiAtIHNvIHRoYXQgaXQgd2ls bCBiZQoJCSMgICAgcmVvcGVuZW5kIHdpdGggdGhlIGNvbmZpZ3VyZWQgc2l6ZQoJCSMgYW55b25l IGEgSmF2YVNjcmlwdCBwcm9ncmFtbWVyID8KCQkjIC4uIHNvIGhlcmUgd2l0aG91dCBpZiAoLi4p OgoJCSMgY3VycmVudGx5LCB0aGUgYmVzdCB3YXkgaXMgdG8gY29tbWVudCBvdXQgdGhlIHNpemUg cGFyYW1ldGVycwoJCSMgKCRleHRlcm5fd2luZG93Li4uKSBpbiBjdnN3ZWIuY29uZi4KCQlpZiAo JHVzZV9qYXZhX3NjcmlwdCkgewoJCQlteSBAYXR0ciA9IHF3KHJlc2l6YWJsZSBzY3JvbGxiYXJz KTsKCgkJCXB1c2ggQGF0dHIsIHF3KHN0YXR1cyB0b29sYmFyKQoJCQkgICAgaWYgKGRlZmluZWQo JG1pbWV0eXBlKSAmJiAkbWltZXR5cGUgZXEgInRleHQvaHRtbCIpOwoKCQkJcHVzaCBAYXR0ciwg IndpZHRoPSRleHRlcm5fd2luZG93X3dpZHRoIgoJCQkgICAgaWYgKGRlZmluZWQoJGV4dGVybl93 aW5kb3dfd2lkdGgpKTsKCgkJCXB1c2ggQGF0dHIsICJoZWlnaHQ9JGV4dGVybl93aW5kb3dfaGVp Z2h0IgoJCQkgICAgaWYgKGRlZmluZWQoJGV4dGVybl93aW5kb3dfaGVpZ2h0KSk7CgoJCQkjIFdl IG5lZWQgdGhlICJyZXR1cm4gZmFsc2UiIGhlcmUgdG8gcHJldmVudCBicm93c2VycwoJCQkjIGZy b20gZm9sbG93aW5nIHRoZSBocmVmIGFmdGVyIHRoZSBvbmNsaWNrIGhhbmRsZXIuCgkJCSMgVGhp cyB3b3VsZCBlZmZlY3RpdmVseSBsb2FkIHRoZSBzYW1lIGRvY3VtZW50IGluCgkJCSMgdGhlIHNh bWUgd2luZG93ICp0d2ljZSouCgkJCXByaW50ZgoJCQkgICAgcWAgb25jbGljaz0id2luZG93Lm9w ZW4oJyVzJywnY3ZzX2NoZWNrb3V0JywnJXMnKTtyZXR1cm4gZmFsc2UiYCwKCQkJICAgIGhyZWZx dW90ZSgiJGZ1bGx1cmwkYmFyZXF1ZXJ5IiksIGpvaW4gKCcsJywgQGF0dHIpOwoJCX0KCX0KCXBy aW50ICI+PGI+JHRleHRsaW5rPC9iPjwvYT4iOwp9CgojIFJldHVybnMgYSBRdWVyeSBzdHJpbmcg d2l0aCB0aGUKIyBzcGVjaWZpZWQgcGFyYW1ldGVyIHRvZ2dsZWQKc3ViIHRvZ2dsZVF1ZXJ5KCQk KSB7CglteSAoJHRvZ2dsZSwgJHZhbHVlKSA9IEBfOwoJbXkgKCRuZXdxdWVyeSwgJHZhcik7Cglt eSAoJXZhcnMpOwoJJXZhcnMgPSAlaW5wdXQ7CgoJaWYgKGRlZmluZWQoJHZhbHVlKSkgewoJCSR2 YXJzeyR0b2dnbGV9ID0gJHZhbHVlOwoJfSBlbHNlIHsKCQkkdmFyc3skdG9nZ2xlfSA9ICR2YXJz eyR0b2dnbGV9ID8gMCA6IDE7Cgl9CgoJIyBCdWlsZCBhIG5ldyBxdWVyeSBvZiBub24tZGVmYXVs dCBwYXJhbWVudGVycwoJJG5ld3F1ZXJ5ID0gIiI7Cglmb3JlYWNoICR2YXIgKEBzdGlja3l2YXJz KSB7CgkJbXkgKCR2YWx1ZSkgPSBkZWZpbmVkKCR2YXJzeyR2YXJ9KSA/ICR2YXJzeyR2YXJ9IDog IiI7CgkJbXkgKCRkZWZhdWx0KSA9CgkJICAgIGRlZmluZWQoJERFRkFVTFRWQUxVRXskdmFyfSkg PyAkREVGQVVMVFZBTFVFeyR2YXJ9IDogIiI7CgoJCWlmICgkdmFsdWUgbmUgJGRlZmF1bHQpIHsK CQkJJG5ld3F1ZXJ5IC49ICImIiBpZiAoJG5ld3F1ZXJ5IG5lICIiKTsKCQkJJG5ld3F1ZXJ5IC49 IHVybGVuY29kZSgkdmFyKSAuICI9IiAuIHVybGVuY29kZSgkdmFsdWUpOwoJCX0KCX0KCglpZiAo JG5ld3F1ZXJ5KSB7CgkJcmV0dXJuICc/JyAuICRuZXdxdWVyeTsKCX0KCXJldHVybiAiIjsKfQoK c3ViIHVybGVuY29kZSgkKSB7Cglsb2NhbCAoJF8pID0gQF87CgoJcy9bXDAwMC0rey1cMzc3XS9z cHJpbnRmKCIlJSUwMngiLCBvcmQoJCYpKS9nZTsKCgkkXzsKfQoKc3ViIGh0bWxxdW90ZSgkKSB7 Cglsb2NhbCAoJF8pID0gQF87CgoJIyBTcGVjaWFsIENoYXJhY3RlcnM7IFJGQyAxODY2CglzLyYv JmFtcDsvZzsKCXMvXCIvJnF1b3Q7L2c7CglzLzwvJmx0Oy9nOwoJcy8+LyZndDsvZzsKCgkkXzsK fQoKc3ViIGh0bWx1bnF1b3RlKCQpIHsKCWxvY2FsICgkXykgPSBAXzsKCgkjIFNwZWNpYWwgQ2hh cmFjdGVyczsgUkZDIDE4NjYKCXMvJnF1b3Q7L1wiL2c7CglzLyZsdDsvPC9nOwoJcy8mZ3Q7Lz4v ZzsKCXMvJmFtcDsvJi9nOwoKCSRfOwp9CgpzdWIgaHJlZnF1b3RlKCQpIHsKCWxvY2FsICgkXykg PSBAXzsKCgl5LyAvKy87CgoJaHRtbHF1b3RlKCRfKQp9CgpzdWIgaHR0cF9oZWFkZXIoOyQpIHsK CW15ICRjb250ZW50X3R5cGUgPSBzaGlmdCB8fCAidGV4dC9odG1sIjsKCgkkY29udGVudF90eXBl IC49ICI7IGNoYXJzZXQ9JGNoYXJzZXQiCgkgICAgaWYgJGNvbnRlbnRfdHlwZSA9fiBtLF50ZXh0 LywgJiYgZGVmaW5lZCgkY2hhcnNldCkgJiYgJGNoYXJzZXQ7CgoJaWYgKGRlZmluZWQoJG1vZGRh dGUpKSB7CgkJaWYgKCRpc19tb2RfcGVybCkgewoJCQlBcGFjaGUtPnJlcXVlc3QtPmhlYWRlcl9v dXQoCgkJCQkiTGFzdC1Nb2RpZmllZCIgPT4gc2NhbGFyIGdtdGltZSgkbW9kZGF0ZSkKCQkJCS4g IiBHTVQiKTsKCQl9IGVsc2UgewoJCQlwcmludCAiTGFzdC1Nb2RpZmllZDogIiwgc2NhbGFyIGdt dGltZSgkbW9kZGF0ZSksCgkJCSAgICAiIEdNVFxyXG4iOwoJCX0KCX0KCglpZiAoJGlzX21vZF9w ZXJsKSB7CgkJQXBhY2hlLT5yZXF1ZXN0LT5jb250ZW50X3R5cGUoJGNvbnRlbnRfdHlwZSk7Cgl9 IGVsc2UgewoJCXByaW50ICJDb250ZW50LVR5cGU6ICRjb250ZW50X3R5cGVcclxuIjsKCX0KCglp ZiAoJGFsbG93X2NvbXByZXNzICYmICRtYXljb21wcmVzcykgewoJCWlmICgkaGFzX3psaWIKCQkg ICAgfHwgKGRlZmluZWQoJENNRHtnemlwfSkgJiYgb3BlbihHWklQLCAifCAkQ01Ee2d6aXB9IC0x IC1jIikpCgkJICAgICkKCQl7CgoJCQlpZiAoJGlzX21vZF9wZXJsKSB7CgkJCQlBcGFjaGUtPnJl cXVlc3QtPmNvbnRlbnRfZW5jb2RpbmcoIngtZ3ppcCIpOwoJCQkJQXBhY2hlLT5yZXF1ZXN0LT5o ZWFkZXJfb3V0KAoJCQkJCVZhcnkgPT4gIkFjY2VwdC1FbmNvZGluZyIpOwoJCQkJQXBhY2hlLT5y ZXF1ZXN0LT5zZW5kX2h0dHBfaGVhZGVyOwoJCQl9IGVsc2UgewoJCQkJcHJpbnQgIkNvbnRlbnQt RW5jb2Rpbmc6IHgtZ3ppcFxyXG4iOwoJCQkJcHJpbnQgIlZhcnk6IEFjY2VwdC1FbmNvZGluZ1xy XG4iCgkJCQkgICAgOyAgICAgICAgICAgICNSRkMgMjA2OCwgMTQuNDMKCQkJCXByaW50ICJcclxu IjsgICAgIyBDbG9zZSBoZWFkZXJzCgkJCX0KCQkJJHwgPSAxOwoJCQkkfCA9IDA7ICAgICMgRmx1 c2ggaGVhZGVyIG91dHB1dAoKCQkJaWYgKCRoYXNfemxpYikgewoJCQkJdGllICpHWklQLCBfX1BB Q0tBR0VfXywgXCpTVERPVVQ7CgkJCX0KCQkJc2VsZWN0KEdaSVApOwoJCQkkZ3ppcF9vcGVuID0g MTsKCgkJCSMJICAgIHByaW50ICI8IS0tIGd6aXBwZWQgLS0+IiBpZiAoJGNvbnRlbnRfdHlwZSA9 fiBtfF50ZXh0L2h0bWxcYnwpOwoJCX0gZWxzZSB7CgkJCWlmICgkaXNfbW9kX3BlcmwpIHsKCQkJ CUFwYWNoZS0+cmVxdWVzdC0+c2VuZF9odHRwX2hlYWRlcjsKCQkJfSBlbHNlIHsKCQkJCXByaW50 ICJcclxuIjsgICAgIyBDbG9zZSBoZWFkZXJzCgkJCX0KCQkJcHJpbnQKCQkJICAgICI8c3BhbiBz dHlsZT1cImZvbnQtc2l6ZTogc21hbGxlclwiPlVuYWJsZSB0byBmaW5kIGd6aXAgYmluYXJ5IGlu IHRoZSA8Yj5cJGNvbW1hbmRfcGF0aDwvYj4gKCRjb21tYW5kX3BhdGgpIHRvIGNvbXByZXNzIG91 dHB1dDwvc3Bhbj48YnI+IjsKCQl9Cgl9IGVsc2UgewoKCQlpZiAoJGlzX21vZF9wZXJsKSB7CgkJ CUFwYWNoZS0+cmVxdWVzdC0+c2VuZF9odHRwX2hlYWRlcjsKCQl9IGVsc2UgewoJCQlwcmludCAi XHJcbiI7ICAgICMgQ2xvc2UgaGVhZGVycwoJCX0KCX0KfQoKc3ViIGh0bWxfaGVhZGVyKCQpIHsK CW15ICgkdGl0bGUpID0gQF87CglodHRwX2hlYWRlcigidGV4dC9odG1sIik7CglwcmludCA8PEVP SDsKJEhUTUxfRE9DVFlQRQo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT4kdGl0bGU8L3RpdGxlPgokSFRN TF9NRVRBPC9oZWFkPgokYm9keV90YWcKJGxvZ28gPGgxIGFsaWduPSJjZW50ZXIiPiR0aXRsZTwv aDE+CkVPSAp9CgpzdWIgaHRtbF9mb290ZXIoKSB7CglwcmludCAiPGhyIG5vc2hhZGU+XG48YWRk cmVzcz4kYWRkcmVzczwvYWRkcmVzcz5cbiIgaWYgJGFkZHJlc3M7CglwcmludCAiPC9ib2R5Plxu PC9odG1sPlxuIjsKfQoKc3ViIGxpbmtfdGFncygkKSB7CglteSAoJHRhZ3MpID0gQF87CglteSAo JHJldCkgID0gIiI7CglteSAoJGZpbGV1cmwsICRmaWxlbmFtZSk7CgoJKCRmaWxlbmFtZSA9ICR3 aGVyZSkgPX4gcy9eLipcLy8vOwoJJGZpbGV1cmwgPSAnLi8nIC4gdXJsZW5jb2RlKCRmaWxlbmFt ZSk7CgoJZm9yZWFjaCBteSAkc3ltIChzcGxpdCAoIiwgIiwgJHRhZ3MpKSB7CgkJJHJldCAuPSAi LFxuIiBpZiAoJHJldCBuZSAiIik7CgkJJHJldCAuPQoJCSAgICAmbGluaygkc3ltLCAkZmlsZXVy bCAuIHRvZ2dsZVF1ZXJ5KCdvbmx5X3dpdGhfdGFnJywgJHN5bSkpOwoJfQoJcmV0dXJuICIkcmV0 XG4iOwp9CgojCiMgU2VlIGlmIGEgbW9kdWxlIGlzIGxpc3RlZCBpbiB0aGUgY29uZmlnIGZpbGUn cyBASGlkZU1vZHVsZXMgbGlzdC4KIwpzdWIgZm9yYmlkZGVuX21vZHVsZSgkKSB7CglteSAoJG1v ZHVsZSkgPSBAXzsKCWxvY2FsICRfOwoKCWZvciAoQEhpZGVNb2R1bGVzKSB7CgkJcmV0dXJuIDEg aWYgJG1vZHVsZSA9fiAkXzsKCX0KCXJldHVybiAwOwp9CgpzdWIgZm9yYmlkZGVuX2ZpbGUoJCkg ewoJbXkgKCRwYXRoKSA9IEBfOwoJJHBhdGggPSAgc3Vic3RyKCRwYXRoLCBsZW5ndGgoJGN2c3Jv b3QpICsgMSk7Cglsb2NhbCAkXzsKCWZvciAoQEZvcmJpZGRlbkZpbGVzKSB7CgkJcmV0dXJuIDEg aWYgJHBhdGggPX4gJF87Cgl9CglyZXR1cm4gMDsKfQoKIyBDbG9zZSB0aGUgR1pJUCBoYW5kbGUg cmVtb3ZlIHRoZSB0aWUuCgpzdWIgZ3ppcGNsb3NlIHsKCWlmICgkZ3ppcF9vcGVuKSB7CgkJc2Vs ZWN0KFNURE9VVCk7CgkJY2xvc2UoR1pJUCk7CgkJdW50aWUgKkdaSVA7CgkJJGd6aXBfb3BlbiA9 IDA7Cgl9Cn0KCiMgaW1wbGVtZW50IGEgZ3ppcHBlZCBmaWxlIGhhbmRsZSB2aWEgdGhlIENvbXBy ZXNzOlpsaWIgY29tcHJlc3Npb24KIyBsaWJyYXJ5LgoKc3ViIE1BR0lDMSgpIHsgMHgxZiB9CnN1 YiBNQUdJQzIoKSB7IDB4OGIgfQpzdWIgT1NDT0RFKCkgeyAzIH0KCnN1YiBUSUVIQU5ETEUgewoJ bXkgKCRjbGFzcywgJG91dCkgPSBAXzsKCW15ICgkZCkgPSBDb21wcmVzczo6WmxpYjo6ZGVmbGF0 ZUluaXQoCgkJLUxldmVsICAgICAgPT4gQ29tcHJlc3M6OlpsaWI6OlpfQkVTVF9DT01QUkVTU0lP TigpLAoJCS1XaW5kb3dCaXRzID0+IC1Db21wcmVzczo6WmxpYjo6TUFYX1dCSVRTKCkKCSkgb3Ig cmV0dXJuIHVuZGVmOwoJbXkgKCRvKSA9IHsKCQloYW5kbGUgPT4gJG91dCwKCQlkaCAgICAgPT4g JGQsCgkJY3JjICAgID0+IDAsCgkJbGVuICAgID0+IDAsCgl9OwoJbXkgKCRoZWFkZXIpID0KCSAg ICBwYWNrKCJjMTAiLCBNQUdJQzEsIE1BR0lDMiwgQ29tcHJlc3M6OlpsaWI6OlpfREVGTEFURUQo KSwgMCwgMCwgMCwKCSAgICAwLCAwLCAwLCBPU0NPREUpOwoJcHJpbnQgeyRvLT57aGFuZGxlfX0g JGhlYWRlcjsKCXJldHVybiBibGVzcygkbywgJGNsYXNzKTsKfQoKc3ViIFBSSU5UIHsKCW15ICgk bykgICA9IHNoaWZ0OwoJbXkgKCRidWYpID0gam9pbiAoZGVmaW5lZCAkLCA/ICQsIDogIiIsIEBf KTsKCW15ICgkbGVuKSA9IGxlbmd0aCgkYnVmKTsKCW15ICgkY29tcHJlc3NlZCwgJHN0YXR1cykg PSAkby0+e2RofS0+ZGVmbGF0ZSgkYnVmKTsKCXByaW50IHskby0+e2hhbmRsZX19ICRjb21wcmVz c2VkIGlmIGRlZmluZWQoJGNvbXByZXNzZWQpOwoJJG8tPntjcmN9ID0gQ29tcHJlc3M6OlpsaWI6 OmNyYzMyKCRidWYsICRvLT57Y3JjfSk7Cgkkby0+e2xlbn0gKz0gJGxlbjsKCXJldHVybiAkbGVu Owp9CgpzdWIgUFJJTlRGIHsKCW15ICgkbykgICA9IHNoaWZ0OwoJbXkgKCRmbXQpID0gc2hpZnQ7 CglteSAoJGJ1ZikgPSBzcHJpbnRmKCRmbXQsIEBfKTsKCW15ICgkbGVuKSA9IGxlbmd0aCgkYnVm KTsKCW15ICgkY29tcHJlc3NlZCwgJHN0YXR1cykgPSAkby0+e2RofS0+ZGVmbGF0ZSgkYnVmKTsK CXByaW50IHskby0+e2hhbmRsZX19ICRjb21wcmVzc2VkIGlmIGRlZmluZWQoJGNvbXByZXNzZWQp OwoJJG8tPntjcmN9ID0gQ29tcHJlc3M6OlpsaWI6OmNyYzMyKCRidWYsICRvLT57Y3JjfSk7Cgkk by0+e2xlbn0gKz0gJGxlbjsKCXJldHVybiAkbGVuOwp9CgpzdWIgV1JJVEUgewoJbXkgKCRvLCAk YnVmLCAkbGVuLCAkb2ZmKSA9IEBfOwoJbXkgKCRjb21wcmVzc2VkLCAkc3RhdHVzKSA9ICRvLT57 ZGh9LT5kZWZsYXRlKHN1YnN0cigkYnVmLCAwLCAkbGVuKSk7CglwcmludCB7JG8tPntoYW5kbGV9 fSAkY29tcHJlc3NlZCBpZiBkZWZpbmVkKCRjb21wcmVzc2VkKTsKCSRvLT57Y3JjfSA9IENvbXBy ZXNzOjpabGliOjpjcmMzMihzdWJzdHIoJGJ1ZiwgMCwgJGxlbiksICRvLT57Y3JjfSk7Cgkkby0+ e2xlbn0gKz0gJGxlbjsKCXJldHVybiAkbGVuOwp9CgpzdWIgQ0xPU0UgewoJbXkgKCRvKSA9IEBf OwoJcmV0dXJuIGlmICFkZWZpbmVkKCRvLT57ZGh9KTsKCW15ICgkYnVmKSA9ICRvLT57ZGh9LT5m bHVzaCgpOwoJJGJ1ZiAuPSBwYWNrKCJWIFYiLCAkby0+e2NyY30sICRvLT57bGVufSk7Cglwcmlu dCB7JG8tPntoYW5kbGV9fSAkYnVmOwoJdW5kZWYgJG8tPntkaH07Cn0KCnN1YiBERVNUUk9ZIHsK CW15ICgkbykgPSBAXzsKCUNMT1NFKCRvKTsKfQo= ------_=_NextPart_001_01C360B9.49C45A42-- From owner-freebsd-cvsweb@FreeBSD.ORG Tue Aug 12 03:18:36 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 6853C37B401 for ; Tue, 12 Aug 2003 03:18:36 -0700 (PDT) Received: from wehq.winbond.com.tw (wehq.winbond.com.tw [202.39.229.15]) by mx1.FreeBSD.org (Postfix) with ESMTP id 44D5443FB1 for ; Tue, 12 Aug 2003 03:18:34 -0700 (PDT) (envelope-from XHChen@Winbond.com.tw) Received: from wemlg.winbond.com.tw (wemlg [10.2.6.199]) by wehq.winbond.com.tw (8.12.6/8.12.6) with ESMTP id h7CAIVtj010814 for ; Tue, 12 Aug 2003 18:18:31 +0800 (CST) Received: from WEHQIMC02.winbond.com.tw (wehqimc02 [10.2.6.99]) by wemlg.winbond.com.tw (8.12.6/8.12.6) with ESMTP id h7CAGqD2001429 for ; Tue, 12 Aug 2003 18:18:05 +0800 (CST) Received: from WEHQIMC01.winbond.com.tw ([192.168.6.152]) by WEHQIMC02.winbond.com.tw with Microsoft SMTPSVC(5.0.2195.5329); Tue, 12 Aug 2003 18:16:28 +0800 Received: from weshml02.winbond.com.tw ([10.130.10.34]) by WEHQIMC01.winbond.com.tw with Microsoft SMTPSVC(5.0.2195.5329); Tue, 12 Aug 2003 18:16:22 +0800 content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C360BA.71667494" X-MimeOLE: Produced By Microsoft Exchange V6.0.5762.3 Date: Tue, 12 Aug 2003 18:13:57 +0800 Message-ID: X-MS-Has-Attach: yes X-MS-TNEF-Correlator: Thread-Topic: Graph of revisions for cvsweb.cgi Thread-Index: AcNguXRG6JCq/rGGSPOVilvjehLmKQAALc4A From: "PC32 XHChen" To: X-OriginalArrivalTime: 12 Aug 2003 10:16:22.0478 (UTC) FILETIME=[C78FCEE0:01C360BA] X-Content-Filtered-By: Mailman/MimeDel 2.1.1 Subject: FW: Graph of revisions for cvsweb.cgi X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Aug 2003 10:18:36 -0000 This is a multi-part message in MIME format. ------_=_NextPart_001_01C360BA.71667494 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 SSBmb3Jnb3Qgb25lIHRoaW5nOg0KCVRvIGRpc3BsYXkgdGhlICJncmFwaCIgb2YgcmV2aXNpb25z LCBjbGljayB0aGUgaWNvbiBvbiB0aGUgbGVmdCBvZiB0aGUgZmlsZW5hbWUuDQoJdGhhbmsgeW91 Lg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogUEMzMiBYSENoZW4gDQpTZW50 OiBUdWVzZGF5LCBBdWd1c3QgMTIsIDIwMDMgNjowNyBQTQ0KVG86IGZyZWVic2QtY3Zzd2ViQGZy ZWVic2Qub3JnDQpTdWJqZWN0OiBHcmFwaCBvZiByZXZpc2lvbnMgZm9yIGN2c3dlYi5jZ2kNCg0K DQpEZWFyIGFsbDoNCglJIG1vZGlmaWVkIGN2c3dlYi5jZ2kgZm9yIHN1cHBvcnRpbmcgImdyYXBo IHNlbGVjdGlvbiIgYXMgd2hhdCdzIGluIHdpbmN2cy4NCglUaGFua3MgZm9yIHRyeWluZyBpdCAh DQoNCkJlc3QgcmVnYXJkcy4NCnhoY2hlbkB3aW5ib25kLmNvbS50dw0KKDIxLTYyMzY1OTk5LTE4 MTEpDQpDaGVuIFhpYW9odWkNCg== Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1UaGUgcHJpdmlsZWdlZCBjb25maWRl bnRpYWwgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgZW1haWwgaXMgaW50ZW5kZWQgZm9y IHVzZSBvbmx5IGJ5IHRoZSBhZGRyZXNzZWVzIGFzIGluZGljYXRlZCBieSB0aGUgb3JpZ2luYWwg YXV0aG9yIG9mIHRoaXMgZW1haWwuIElmIHlvdSBhcmUgbm90IHRoZSBhZGRyZXNzZWUgaW5kaWNh dGVkIGluIHRoaXMgZW1haWwgb3IgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZGVsaXZlcnkgb2Yg dGhlIGVtYWlsIHRvIHN1Y2ggcGVyc29uLCBwbGVhc2Uga2luZGx5IHJlcGx5IHRoZSBzZW5kZXIg aW5kaWNhdGluZyBhY2NvcmRpbmdseSBhbmQgZGVsZXRlIGFsbCBjb3BpZXMgb2YgaXQgZnJvbSB5 b3VyIGNvbXB1dGVyIGFuZCBuZXR3b3JrIHNlcnZlciBpbW1lZGlhdGVseS4gV2UgdGhhbmsgeW91 IGZvciB5b3VyIGNvb3BlcmF0aW9uLiBJdCBpcyBhZHZpc2FibGUgdGhhdCBhbnkgdW5hdXRob3Jp emVkIHVzZSBvZiBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgV2luYm9uZCBpcyBzdHJpY3Rs eSBwcm9oaWJpdGVkOyBhbmQgYW55IGluZm9ybWF0aW9uIGluIHRoaXMgZW1haWwgdGhhdCBkb2Vz IG5vdCByZWxhdGUgdG8gdGhlIG9mZmljaWFsIGJ1c2luZXNzIG9mIFdpbmJvbmQgc2hhbGwgYmUg ZGVlbWVkIGFzIG5laXRoZXIgZ2l2ZW4gbm9yIGVuZG9yc2VkIGJ5IFdpbmJvbmQuPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PUlmIHlvdXIgY29tcHV0ZXIgaXMgdW5hYmxlIHRvIGRl Y29kZSBDaGluZXNlIGZvbnQsIHBsZWFzZSBpZ25vcmUgdGhlIGZvbGxvd2luZyBtZXNzYWdlLiBU aGV5IGVzc2VudGlhbGx5IHJlcGVhdCB0aGUmbmJzcDsgRW5nbGlzaCBzdGF0ZW1lbnQgYWJvdmUu pburSKXzpLqp0qd0tdioublxpGyqurBdsqOpyr73sUupyrjqsFQsILbIscLFdq3stW+rSKRIq/yp d6SnpqyrSKRIqPq+XKSnpc4uILCyqM+xeqjDq0SzUav8qXekp6asq0ikSKnOpl2l9KbzreymXaZi pby4Z7HCxXaqurGhp86kp6RVpqyo7KW7q0il8ywgvdCxeqdpqr6t7LVvq0ikSKjDpd+nWbFOq0il 87FxuXG4o7tQuvS49Kb4qkG+uaSkpKmlSK74sKMuILnvqfOxeqq6plinQCwgp9qtzKX9prmtUMHC LiCvU6a5tKO/9CwgpfSm86W8uGexwsV2vtWm26jPpc612Ki5uXGkbKq6vvexS7jqsFSquqbmrLCs T7NRxFmu5rhUpO6qui4gq0il87tQtdioublxpGzA57d+tUzD9qSnpLquZSyko7FvtfissLXYqLm5 caRspKel37P1qc63TqijLg0K ------_=_NextPart_001_01C360BA.71667494 Content-Type: application/octet-stream; name="cvsweb.cgi" Content-Transfer-Encoding: base64 Content-Description: cvsweb.cgi Content-Disposition: attachment; filename="cvsweb.cgi" IyEvdXNyL2Jpbi9wZXJsIC13VAojCiMgY3Zzd2ViIC0gYSBDR0kgaW50ZXJmYWNlIHRvIENWUyB0 cmVlcy4KIwojIFdyaXR0ZW4gaW4gdGhlaXIgc3BhcmUgdGltZSBieQojICAgICAgICAgICAgIEJp bGwgRmVubmVyICAgICAgICAgIDxmZW5uZXJARnJlZUJTRC5vcmc+ICAgKG9yaWdpbmFsIHdvcmsp CiMgZXh0ZW5kZWQgYnkgSGVubmVyIFplbGxlciAgICAgICAgPHplbGxlckB0aGluay5kZT4sCiMg ICAgICAgICAgICAgSGVucmlrIE5vcmRzdHJvbSAgICAgPGhub0BoZW0ucGFzc2FnZW4uc2U+CiMg ICAgICAgICAgICAgS2VuIENvYXIgICAgICAgICAgICAgPGNvYXJAQXBhY2hlLk9yZz4KIyAgICAg ICAgICAgICBEaWNrIEJhbGFza2EgICAgICAgICA8ZGlja0BidWNrb3NvZnQuY29tPgojICAgICAg ICAgICAgIEFraW5vcmkgTVVTSEEgICAgICAgIDxrbnVARnJlZUJTRC5vcmc+CiMgICAgICAgICAg ICAgSmVucy1Vd2UgTWFnZXIgICAgICAgPGp1bUBoZWxpb3MuZGU+CiMgICAgICAgICAgICAgVmls bGUgU2t5dHTkICAgICAgICAgPHNjb3BARnJlZUJTRC5vcmc+CiMgICAgICAgICAgICAgVmFzc2ls aWkgS2hhY2hhdHVyb3YgPHZhc3NpbGlpQHRhcnVuei5vcmc+CiMKIyBCYXNlZCBvbjoKIyAqIEJp bGwgRmVubmVycyBjdnN3ZWIuY2dpIHJldmlzaW9uIDEuMjggYXZhaWxhYmxlIGZyb206CiMgICBo dHRwOi8vd3d3LkZyZWVCU0Qub3JnL2NnaS9jdnN3ZWIuY2dpL3d3dy9lbi9jZ2kvY3Zzd2ViLmNn aQojCiMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTggQmlsbCBGZW5uZXIKIyAgICAgICAgICAgKGMp IDE5OTgtMTk5OSBIZW5uZXIgWmVsbGVyCiMgICAgICAgICAgIChjKSAxOTk5ICAgICAgSGVucmlr IE5vcmRzdHJvbQojICAgICAgICAgICAoYykgMjAwMC0yMDAyIEFraW5vcmkgTVVTSEEKIyAgICAg ICAgICAgKGMpIDIwMDIgICAgICBWaWxsZSBTa3l0dOQKIyBBbGwgcmlnaHRzIHJlc2VydmVkLgoj CiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiMgYXJlIG1ldDoKIyAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgojCiMgVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ UycnIEFORAojIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQojIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCiMgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAojIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCiMgT1IgU0VSVklDRVM7IExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiMg SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULCBTVFJJQ1QKIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCiMgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgojIFNV Q0ggREFNQUdFLgojCiMgJEZyZWVCU0Q6IHByb2plY3RzL2N2c3dlYi9jdnN3ZWIuY2dpLHYgMS4x MTkuMi42IDIwMDIvMDkvMjYgMjA6NTY6MDUgc2NvcCBFeHAgJAojICRJZDogY3Zzd2ViLmNnaSx2 IDEuMTEyIDIwMDEvMDcvMjQgMTM6MDM6MTYgaHplbGxlciBFeHAgJAojICRJZGFlbW9uczogL2hv bWUvY3ZzL2N2c3dlYi9jdnN3ZWIuY2dpLHYgMS44NCAyMDAxLzEwLzA3IDIwOjUwOjEwIGtudSBF eHAgJAojCiMjIwoKcmVxdWlyZSA1LjAwMDsKCnVzZSBzdHJpY3Q7Cgp1c2UgdmFycyBxdyAoCiAg ICAkY3Zzd2ViX3JldmlzaW9uCiAgICAkbXlkaXIgJHVuYW1lICRjb25maWcgJGFsbG93X3ZlcnNp b25fc2VsZWN0ICR2ZXJib3NlCiAgICBAQ1ZTcmVwb3NpdG9yaWVzIEBDVlNST09UICVDVlNST09U ICVDVlNST09UZGVzY3IKICAgICVNSVJST1JTICVERUZBVUxUVkFMVUUgJUlDT05TICVNVFlQRVMK ICAgIEBESUZGVFlQRVMgJURJRkZUWVBFUyBATE9HU09SVEtFWVMgJUxPR1NPUlRLRVlTCiAgICAl YWxsdGFncyBAdGFiY29sb3JzICVmaWxlaW5mbyAldGFncyBAYnJhbmNobmFtZXMgJW5hbWVwcmlu dGVkCiAgICAlc3ltcmV2ICVyZXZzeW0gQGFsbHJldmlzaW9ucyAlZGF0ZSAlYXV0aG9yIEByZXZk aXNwbGF5b3JkZXIKICAgIEByZXZpc2lvbnMgJXN0YXRlICVkaWZmbGluZXMgJWxvZyAlYnJhbmNo cG9pbnQgQHJldm9yZGVyCiAgICAkcHJjZ2kgQHByY2F0ZWdvcmllcyAkcmVfcHJjYXRlZ29yaWVz ICRwcmtleXdvcmQgJHJlX3Bya2V5d29yZCAkbWFuY2dpCiAgICAkY2hlY2tvdXRNYWdpYyAkZG9D aGVja291dCAkc2NyaXB0bmFtZSAkc2NyaXB0d2hlcmUKICAgICR3aGVyZSAkcGF0aGluZm8gJEJy b3dzZXIgJG5vZmlsZWxpbmtzICRtYXljb21wcmVzcwogICAgQHN0aWNreXZhcnMgQHVuc2FmZXZh cnMKICAgICVmdW5jbGluZV9yZWdleHAgJGlzX21vZF9wZXJsCiAgICAkaXNfbGlua3MgJGlzX2x5 bnggJGlzX3czbSAkaXNfbXNpZSAkaXNfbW96aWxsYTMgJGlzX3RleHRiYXNlZAogICAgJWlucHV0 ICRxdWVyeSAkYmFyZXF1ZXJ5ICRzb3J0YnkgJGJ5ZGF0ZSAkYnlyZXYgJGJ5YXV0aG9yCiAgICAk Ynlsb2cgJGJ5ZmlsZSAkZGVmYXVsdERpZmZUeXBlICRsb2dzb3J0ICRjdnN0cmVlICRjdnNyb290 CiAgICAkbWltZXR5cGUgJGNoYXJzZXQgJG91dHB1dF9maWx0ZXIgJGRlZmF1bHRUZXh0UGxhaW4g JGRlZmF1bHRWaWV3YWJsZQogICAgJGNvbW1hbmRfcGF0aCAlQ01EICRhbGxvd19jb21wcmVzcwog ICAgJGJhY2tpY29uICRkaXJpY29uICRmaWxlaWNvbgogICAgJGZ1bGxuYW1lICRuZXduYW1lICRj dnN0cmVlZGVmYXVsdAogICAgJGJvZHlfdGFnICRib2R5X3RhZ19mb3Jfc3JjICRsb2dvICRkZWZh dWx0dGl0bGUgJGFkZHJlc3MKICAgICRsb25nX2ludHJvICRzaG9ydF9pbnN0cnVjdGlvbiAkc2hv cnRMb2dMZW4KICAgICRzaG93X2F1dGhvciAkZGlydGFibGUgJHRhYmxlcGFkZGluZyAkY29sdW1u SGVhZGVyQ29sb3JEZWZhdWx0CiAgICAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgJGhyX2JyZWFr YWJsZSAkc2hvd2Z1bmMgJGhyX2lnbndoaXRlCiAgICAkaHJfaWdua2V5c3Vic3QgJGRpZmZjb2xv ckhlYWRpbmcgJGRpZmZjb2xvckVtcHR5ICRkaWZmY29sb3JSZW1vdmUKICAgICRkaWZmY29sb3JD aGFuZ2UgJGRpZmZjb2xvckFkZCAkZGlmZmNvbG9yRGFya0NoYW5nZSAkZGlmZmZvbnRmYWNlCiAg ICAkZGlmZmZvbnRzaXplICRpbnB1dFRleHRTaXplICRtaW1lX3R5cGVzCiAgICAkYWxsb3dfYW5u b3RhdGUgJGFsbG93X21hcmt1cAogICAgJGFsbG93X2xvZ19leHRyYSAkYWxsb3dfZGlyX2V4dHJh ICRhbGxvd19zb3VyY2VfZXh0cmEKICAgICR1c2VfamF2YV9zY3JpcHQgJG9wZW5fZXh0ZXJuX3dp bmRvdwogICAgJGV4dGVybl93aW5kb3dfd2lkdGggJGV4dGVybl93aW5kb3dfaGVpZ2h0ICRlZGl0 X29wdGlvbl9mb3JtCiAgICAkc2hvd19zdWJkaXJfbGFzdG1vZCAkc2hvd19sb2dfaW5fbWFya3Vw ICRwcmVmb3JtYXRfaW5fbWFya3VwICR2CiAgICAkbmF2aWdhdGlvbkhlYWRlckNvbG9yICR0YWJs ZUJvcmRlckNvbG9yICRtYXJrdXBMb2dDb2xvcgogICAgJHRhYnN0b3AgJHN0YXRlICRhbm5UYWJs ZSAkc2VsICRjdXJicmFuY2ggQEhpZGVNb2R1bGVzIEBGb3JiaWRkZW5GaWxlcwogICAgJG1vZHVs ZSAkdXNlX2Rlc2NyaXB0aW9ucyAlZGVzY3JpcHRpb25zIEBteXR6ICRkd2hlcmUgJG1vZGRhdGUK ICAgICR1c2VfbW9kZGF0ZSAkaGFzX3psaWIgJGd6aXBfb3BlbgogICAgJGFsbG93X3RhciBAdGFy X29wdGlvbnMgQGd6aXBfb3B0aW9ucyBAemlwX29wdGlvbnMgQGN2c19vcHRpb25zCiAgICBAYW5u b3RhdGVfb3B0aW9ucyAkTE9HX0ZJTEVTRVBBUkFUT1IgJExPR19SRVZTRVBBUkFUT1IKICAgICR0 bXBkaXIgJEhUTUxfRE9DVFlQRSAkSFRNTF9NRVRBCik7CgpzdWIgcHJpbnREaWZmU2VsZWN0KCQp OwpzdWIgcHJpbnREaWZmTGlua3MoJCQpOwpzdWIgcHJpbnRMb2dTb3J0U2VsZWN0KCQpOwpzdWIg ZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQCk7CnN1YiBodG1saWZ5X3N1YigmJCk7CnN1YiBodG1s aWZ5KCQ7JCk7CnN1YiBzcGFjZWRIdG1sVGV4dCgkOyQpOwpzdWIgbGluaygkJCk7CnN1YiByZXZj bXAoJCQpOwpzdWIgZmF0YWwoJCRAKTsKc3ViIHJlZGlyZWN0KCQpOwpzdWIgc2FmZWdsb2IoJCk7 CnN1YiBzZWFyY2hfcGF0aCgkKTsKc3ViIGdldE1pbWVUeXBlRnJvbVN1ZmZpeCgkKTsKc3ViIGhl YWQoJDskKTsKc3ViIHNjYW5fZGlyZWN0aXZlcyhAKTsKc3ViIG9wZW5PdXRwdXRGaWx0ZXIoKTsK c3ViIGRvQW5ub3RhdGUoJCQpOwpzdWIgZG9DaGVja291dCgkJCk7CnN1YiBjdnN3ZWJNYXJrdXAo JCQkKTsKc3ViIHZpZXdhYmxlKCQpOwpzdWIgZG9EaWZmKCQkJCQkJCk7CnN1YiBnZXREaXJMb2dz KCQkQCk7CnN1YiByZWFkTG9nKCQ7JCk7CnN1YiBwcmludExvZygkOyQpOwpzdWIgZG9Mb2coJCk7 CnN1YiBkb0dyYXBoKCQpOyN4aGNoZW4Kc3ViIGZsdXNoX2RpZmZfcm93cygkJCQkKTsKc3ViIGh1 bWFuX3JlYWRhYmxlX2RpZmYoJCk7CnN1YiBuYXZpZ2F0ZUhlYWRlcigkJCQkJCk7CnN1YiBwbHVy YWxfd3JpdGUoJCQpOwpzdWIgcmVhZGFibGVUaW1lKCQkKTsKc3ViIGNsaWNrYWJsZVBhdGgoJCQp OwpzdWIgY2hvb3NlQ1ZTUm9vdCgpOwpzdWIgY2hvb3NlTWlycm9yKCk7CnN1YiBmaWxlU29ydENt cCgpOwpzdWIgZG93bmxvYWRfdXJsKCQkOyQpOwpzdWIgZG93bmxvYWRfbGluaygkJCQ7JCk7CnN1 YiB0b2dnbGVRdWVyeSgkJCk7CnN1YiB1cmxlbmNvZGUoJCk7CnN1YiBodG1sanMoJCk7I3hoY2hl bgpzdWIgaHRtbHF1b3RlKCQpOwpzdWIgaHRtbHVucXVvdGUoJCk7CnN1YiBocmVmcXVvdGUoJCk7 CnN1YiBodHRwX2hlYWRlcig7JCk7CnN1YiBodG1sX2hlYWRlcigkKTsKc3ViIGh0bWxfZm9vdGVy KCk7CnN1YiBsaW5rX3RhZ3MoJCk7CnN1YiBmb3JiaWRkZW5fZmlsZSgkKTsKc3ViIGZvcmJpZGRl bl9tb2R1bGUoJCk7CgojIyMjIyBTdGFydCBvZiBDb25maWd1cmF0aW9uIEFyZWEgIyMjIyMjIyMK ZGVsZXRlICRFTlZ7UEFUSH07CgokY3Zzd2ViX3JldmlzaW9uID0gJzIuMC42JzsKCnVzZSBGaWxl OjpCYXNlbmFtZSAoKTsKCigkbXlkaXIpID0gKEZpbGU6OkJhc2VuYW1lOjpkaXJuYW1lKCQwKSA9 fiAvKC4qKS8pOyAgICAjIHVudGFpbnQKCiMgPT0gRURJVCB0aGlzID09CiMgTG9jYXRpb25zIHRv IHNlYXJjaCBmb3IgdXNlciBjb25maWd1cmF0aW9uLCBpbiBvcmRlcjoKZm9yICgiJG15ZGlyL2N2 c3dlYi5jb25mIiwgJy91c3IvbG9jYWwvZXRjL2N2c3dlYi9jdnN3ZWIuY29uZicpIHsKCWlmIChk ZWZpbmVkKCRfKSAmJiAtciAkXykgewoJCSRjb25maWcgPSAkXzsKCQlsYXN0OwoJfQp9CgojID09 IENvbmZpZ3VyYXRpb24gZGVmYXVsdHMgPT0KIyBEZWZhdWx0cyBmb3IgY29uZmlndXJhdGlvbiB2 YXJpYWJsZXMgdGhhdCBzaG91bGRuJ3QgbmVlZAojIHRvIGJlIGNvbmZpZ3VyZWQuLgokYWxsb3df dmVyc2lvbl9zZWxlY3QgPSAxOwokYWxsb3dfbG9nX2V4dHJhID0gMTsKCiMjIyMjIEVuZCBvZiBD b25maWd1cmF0aW9uIEFyZWEgICAjIyMjIyMjIwoKIyMjIyMjIyMgQ29uZmlndXJhdGlvbiB2YXJp YWJsZXMgIyMjIyMjIyMjCiMgVGhlc2UgYXJlIGRlZmluZWQgdG8gYWxsb3cgY2hlY2tpbmcgd2l0 aCBwZXJsIC1jdwpAQ1ZTcmVwb3NpdG9yaWVzID0gQENWU1JPT1QgPSAlQ1ZTUk9PVCA9ICVNSVJS T1JTID0gJURFRkFVTFRWQUxVRSA9ICVJQ09OUyA9CiAgICAlTVRZUEVTID0gJXRhZ3MgPSAlYWxs dGFncyA9IEB0YWJjb2xvcnMgPSAlZmlsZWluZm8gPSAoKTsKJGN2c3RyZWVkZWZhdWx0ID0gJGJv ZHlfdGFnID0gJGJvZHlfdGFnX2Zvcl9zcmMgPSAkbG9nbyA9ICRkZWZhdWx0dGl0bGUgPQogICAg JGFkZHJlc3MgPSAkbG9uZ19pbnRybyA9ICRzaG9ydF9pbnN0cnVjdGlvbiA9ICRzaG9ydExvZ0xl biA9ICRzaG93X2F1dGhvciA9CiAgICAkZGlydGFibGUgPSAkdGFibGVwYWRkaW5nID0gJGNvbHVt bkhlYWRlckNvbG9yRGVmYXVsdCA9CiAgICAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgPSAkaHJf YnJlYWthYmxlID0gJHNob3dmdW5jID0gJGhyX2lnbndoaXRlID0KICAgICRocl9pZ25rZXlzdWJz dCA9ICRkaWZmY29sb3JIZWFkaW5nID0gJGRpZmZjb2xvckVtcHR5ID0gJGRpZmZjb2xvclJlbW92 ZSA9CiAgICAkZGlmZmNvbG9yQ2hhbmdlID0gJGRpZmZjb2xvckFkZCAgPSAkZGlmZmNvbG9yRGFy a0NoYW5nZSA9ICRkaWZmZm9udGZhY2UgICA9CiAgICAkZGlmZmZvbnRzaXplICAgID0gJGlucHV0 VGV4dFNpemUgPSAkbWltZV90eXBlcyAgICAgICAgICA9ICRhbGxvd19hbm5vdGF0ZSA9CiAgICAk YWxsb3dfbWFya3VwICAgICAgICA9ICR1c2VfamF2YV9zY3JpcHQgICAgICA9ICRvcGVuX2V4dGVy bl93aW5kb3cgPQogICAgJGV4dGVybl93aW5kb3dfd2lkdGggPSAkZXh0ZXJuX3dpbmRvd19oZWln aHQgPSAkZWRpdF9vcHRpb25fZm9ybSAgID0KICAgICRzaG93X3N1YmRpcl9sYXN0bW9kID0gJHNo b3dfbG9nX2luX21hcmt1cCA9ICR2ID0gJG5hdmlnYXRpb25IZWFkZXJDb2xvciA9CiAgICAkdGFi bGVCb3JkZXJDb2xvciA9ICRtYXJrdXBMb2dDb2xvciA9ICR0YWJzdG9wID0gJHVzZV9tb2RkYXRl ID0gJG1vZGRhdGUgPQogICAgJGd6aXBfb3BlbiA9ICRIVE1MX0RPQ1RZUEUgPSAkSFRNTF9NRVRB ID0gdW5kZWY7CiR0bXBkaXIgPSBkZWZpbmVkKCRFTlZ7VE1QRElSfSkgPyAkRU5We1RNUERJUn0g OiAiL3Zhci90bXAiOwoKJExPR19GSUxFU0VQQVJBVE9SID0gcS9ePXs3N30kLzsKJExPR19SRVZT RVBBUkFUT1IgID0gcS9eLXsyOH0kLzsKCkBESUZGVFlQRVMgPSBxdyhoIEggdSBjIHMpOwpARElG RlRZUEVTe0BESUZGVFlQRVN9ID0gKAoJewoJCSdkZXNjcicgICA9PiAnY29sb3JlZCcsCgkJJ29w dHMnICAgID0+IFsnLXUnXSwKCQknY29sb3JlZCcgPT4gMSwKCX0sCgl7CgkJJ2Rlc2NyJyAgID0+ ICdsb25nIGNvbG9yZWQnLAoJCSdvcHRzJyAgICA9PiBbJy0tdW5pZmllZD0xNSddLAoJCSdjb2xv cmVkJyA9PiAxLAoJfSwKCXsKCQknZGVzY3InICAgPT4gJ3VuaWZpZWQnLAoJCSdvcHRzJyAgICA9 PiBbJy11J10sCgkJJ2NvbG9yZWQnID0+IDAsCgl9LAoJewoJCSdkZXNjcicgICA9PiAnY29udGV4 dCcsCgkJJ29wdHMnICAgID0+IFsnLWMnXSwKCQknY29sb3JlZCcgPT4gMCwKCX0sCgl7CgkJJ2Rl c2NyJyAgID0+ICdzaWRlIGJ5IHNpZGUnLAoJCSdvcHRzJyAgICA9PiBbJy0tc2lkZS1ieS1zaWRl JywgJy0td2lkdGg9MTY0J10sCgkJJ2NvbG9yZWQnID0+IDAsCgl9LAopOwoKQExPR1NPUlRLRVlT ID0gcXcoY3ZzIGRhdGUgcmV2KTsKQExPR1NPUlRLRVlTe0BMT0dTT1JUS0VZU30gPSAoCgl7CgkJ J2Rlc2NyJyA9PiAnTm90IHNvcnRlZCcsCgl9LAoJewoJCSdkZXNjcicgPT4gJ0NvbW1pdCBkYXRl JywKCX0sCgl7CgkJJ2Rlc2NyJyA9PiAnUmV2aXNpb24nLAoJfSwKKTsKCiRIVE1MX0RPQ1RZUEUg PQogICc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0 aW9uYWwvL0VOIj4nOwoKJEhUTUxfTUVUQSA9IDw8RU9NOwo8bWV0YSBuYW1lPSJyb2JvdHMiIGNv bnRlbnQ9Im5vZm9sbG93Ij4KPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJGcmVlQlNE LUNWU3dlYiAkY3Zzd2ViX3JldmlzaW9uIj4KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1TY3Jp cHQtVHlwZSIgY29udGVudD0idGV4dC9qYXZhc2NyaXB0Ij4KPG1ldGEgaHR0cC1lcXVpdj0iQ29u dGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+CkVPTQoKIyMjIyMgRW5kIG9mIGNv bmZpZ3VyYXRpb24gdmFyaWFibGVzICMjIyMjCgp1c2UgVGltZTo6TG9jYWwgKCk7CnVzZSBJUEM6 Ok9wZW4yIHF3KG9wZW4yKTsKCiMgQ2hlY2sgaWYgdGhlIHpsaWIgQyBsaWJyYXJ5IGludGVyZmFj ZSBpcyBpbnN0YWxsZWQsIGFuZCBpZiB5ZXMKIyB3ZSBjYW4gYXZvaWQgdXNpbmcgdGhlIGV4dHJh IGd6aXAgcHJvY2Vzcy4KZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWI7IH07CiRoYXNfemxp YiA9ICEkQDsKCiR2ZXJib3NlICAgICAgID0gJHY7CiRjaGVja291dE1hZ2ljID0gIn5jaGVja291 dH4iOwokcGF0aGluZm8gICAgICA9IGRlZmluZWQoJEVOVntQQVRIX0lORk99KSA/ICRFTlZ7UEFU SF9JTkZPfSA6ICcnOwokd2hlcmUgICAgICAgICA9ICRwYXRoaW5mbzsKJGRvQ2hlY2tvdXQgPSAo JHdoZXJlID1+IG18Xi8kY2hlY2tvdXRNYWdpYy98KTsKJHdoZXJlID1+IHN8Xi8kY2hlY2tvdXRN YWdpYy98L3w7CiR3aGVyZSA9fiBzfF4vfHw7CiRzY3JpcHRuYW1lID0gZGVmaW5lZCgkRU5We1ND UklQVF9OQU1FfSkgPyAkRU5We1NDUklQVF9OQU1FfSA6ICcnOwokc2NyaXB0bmFtZSA9fiBzfF4v KnwvfDsKCiMgTGV0J3Mgd29ya2Fyb3VuZCB0aHR0cGQncyBzdHVwaWRpdHkuLgppZiAoJHNjcmlw dG5hbWUgPX4gbXwvJHwpIHsKCSRwYXRoaW5mbyAuPSAnLyc7CglteSAkcmUgPSBxdW90ZW1ldGEg JHBhdGhpbmZvOwoJJHNjcmlwdG5hbWUgPX4gcy8kcmUkLy87Cn0KCiRzY3JpcHR3aGVyZSA9ICRz Y3JpcHRuYW1lOwokc2NyaXB0d2hlcmUgLj0gJy8nIC4gdXJsZW5jb2RlKCR3aGVyZSk7CiR3aGVy ZSA9ICcvJyBpZiAoJHdoZXJlIGVxICcnKTsKCiRpc19tb2RfcGVybCA9IGRlZmluZWQoJEVOVntN T0RfUEVSTH0pOwoKIyBpbiBseW54LCBpdCBpdCB2ZXJ5IGFubm95aW5nIHRvIGhhdmUgdHdvIGxp bmtzCiMgcGVyIGZpbGUsIHNvIGRpc2FibGUgdGhlIGxpbmsgYXQgdGhlIGljb24KIyBpbiB0aGlz IGNhc2U6CiRCcm93c2VyID0gJEVOVntIVFRQX1VTRVJfQUdFTlR9IHx8ICcnOwokaXNfbGlua3Mg ICAgPSAoJEJyb3dzZXIgPX4gbWBeTGlua3MgYCk7CiRpc19seW54ICAgICA9ICgkQnJvd3NlciA9 fiBtYF5MeW54L2BpKTsKJGlzX3czbSAgICAgID0gKCRCcm93c2VyID1+IG1gXnczbS9gaSk7CiRp c19tc2llICAgICA9ICgkQnJvd3NlciA9fiBtYE1TSUVgKTsKJGlzX21vemlsbGEzID0gKCRCcm93 c2VyID1+IG1gXk1vemlsbGEvWzMtOV1gKTsKCiRpc190ZXh0YmFzZWQgPSAoJGlzX2xpbmtzIHx8 ICRpc19seW54IHx8ICRpc193M20pOwoKJG5vZmlsZWxpbmtzID0gJGlzX3RleHRiYXNlZDsKCiMg bmV3ZXIgYnJvd3NlcnMgYWNjZXB0IGd6aXAgY29udGVudCBlbmNvZGluZwojIGFuZCBzdGF0ZSB0 aGlzIGluIGEgaGVhZGVyCiMgKG5ldHNjYXBlIGRpZCBhbHdheXMgYnV0IGRpZG4ndCBzdGF0ZSBp dCkKIyBJdCBoYXMgYmVlbiByZXBvcnRlZCB0aGF0IHRoZXNlCiMgIGJyYWluZGFtYWdlZCBNUy1J bnRlcm5ldCBFeHBsb2RlcnMgY2xhaW0gdGhhdCB0aGV5CiMgYWNjZXB0IGd6aXAgLi4gYnV0IGRv bid0IGluIGZhY3QgYW5kCiMgZGlzcGxheSBnYXJiYWdlIHRoZW4gOi0vCiMgVHVybiBvZmYgZ3pp cCBpZiBydW5uaW5nIHVuZGVyIG1vZF9wZXJsIGFuZCBubyB6bGliIGlzIGF2YWlsYWJsZSwKIyBw aXBpbmcgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZCBpbnNpZGUgdGhlIHNlcnZlci4KJG1heWNv bXByZXNzID0KICAgICgoKGRlZmluZWQoJEVOVntIVFRQX0FDQ0VQVF9FTkNPRElOR30pCiAgICAm JiAkRU5We0hUVFBfQUNDRVBUX0VOQ09ESU5HfSA9fiBtYGd6aXBgKSB8fCAkaXNfbW96aWxsYTMp ICYmICEkaXNfbXNpZQogICAgJiYgISgkaXNfbW9kX3BlcmwgJiYgISRoYXNfemxpYikpOwoKIyBw dXQgaGVyZSB0aGUgdmFyaWFibGVzIHdlIG5lZWQgaW4gb3JkZXIKIyB0byBob2xkIG91ciBzdGF0 ZSAtIHRoZXkgd2lsbCBiZSBhZGRlZCAod2l0aAojIHRoZWlyIGN1cnJlbnQgdmFsdWUpIHRvIGFu eSBsaW5rL3F1ZXJ5IHN0cmluZwojIHlvdSBjb25zdHJ1Y3QKQHN0aWNreXZhcnMgPSBxdyhjdnNy b290IGhpZGVhdHRpYyBzb3J0YnkgbG9nc29ydCBmIG9ubHlfd2l0aF90YWcpOwpAdW5zYWZldmFy cyA9IHF3KGxvZ3NvcnQgb25seV93aXRoX3RhZyByMSByMiByZXYgc29ydGJ5IHRyMSB0cjIpOwoK aWYgKC1mICRjb25maWcpIHsKCWRvICIkY29uZmlnIiBvciBmYXRhbCgiNTAwIEludGVybmFsIEVy cm9yIiwKCQkJICAgICAgJ0Vycm9yIGluIGxvYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlOiAlczxi cj48YnI+JXM8YnI+JywKCQkJICAgICAgJGNvbmZpZywgJEApOwp9IGVsc2UgewoJZmF0YWwoIjUw MCBJbnRlcm5hbCBFcnJvciIsCgkgICAgICAnQ29uZmlndXJhdGlvbiBub3QgZm91bmQuICBTZXQg dGhlIHZhcmlhYmxlIDxjb2RlPiRjb25maWc8L2NvZGU+IGluIGN2c3dlYi5jZ2kgdG8geW91ciA8 Yj5jdnN3ZWIuY29uZjwvYj4gY29uZmlndXJhdGlvbiBmaWxlIGZpcnN0LicKCSAgICAgKTsKfQoK dW5kZWYgJWlucHV0OwokcXVlcnkgPSAkRU5We1FVRVJZX1NUUklOR307CgppZiAoZGVmaW5lZCgk cXVlcnkpICYmICRxdWVyeSBuZSAnJykgewoJZm9yZWFjaCAoc3BsaXQgKC8mLywgJHF1ZXJ5KSkg ewoJCXkvKy8gLzsKCQlzLyUoLi4pL3NwcmludGYoIiVjIiwgaGV4KCQxKSkvZ2U7ICAgICMgdW5x dW90ZSAlLXF1b3RlZAoJCWlmICgvKFxTKyk9KC4qKS8pIHsKCQkJJGlucHV0eyQxfSA9ICQyIGlm ICgkMiBuZSAiIik7CgkJfSBlbHNlIHsKCQkJJGlucHV0eyRffSsrOwoJCX0KCX0KfQoKIyBGb3Ig YmFja3dhcmRzIGNvbXBhYmlsaXR5LCBzZXQgb25seV93aXRoX3RhZyB0byBvbmx5X29uX2JyYW5j aCBpZiBzZXQuCiRpbnB1dHtvbmx5X3dpdGhfdGFnfSA9ICRpbnB1dHtvbmx5X29uX2JyYW5jaH0K ICAgIGlmIChkZWZpbmVkKCRpbnB1dHtvbmx5X29uX2JyYW5jaH0pKTsKCiMgUHJldmVudCBjcm9z cy1zaXRlIHNjcmlwdGluZwpmb3JlYWNoIChAdW5zYWZldmFycykgewoJIyBDb2xvbnMgYXJlIG5l ZWRlZCBpbiBkaWZmcyBiZXR3ZWVuIHRhZ3MuCglpZiAoZGVmaW5lZCgkaW5wdXR7JF99KSAmJiAk aW5wdXR7JF99ID1+IC9bXlx3XC0uOl0vKSB7CgkJZmF0YWwoIjUwMCBJbnRlcm5hbCBFcnJvciIs CgkJICAgICAgJ01hbGZvcm1lZCBxdWVyeSAoJXM9JXMpJywKCQkgICAgICAkXywgJGlucHV0eyRf fSk7Cgl9Cn0KCmlmIChkZWZpbmVkKCRpbnB1dHsiY29udGVudC10eXBlIn0pKSB7CglmYXRhbCgi NTAwIEludGVybmFsIEVycm9yIiwgIlVuc3VwcG9ydGVkIGNvbnRlbnQtdHlwZSIpCgkgICAgaWYg KCRpbnB1dHsiY29udGVudC10eXBlIn0gIX4gL15bLTAtOUEtWmEtel0rXC9bLTAtOUEtWmEtel0r JC8pOwp9CgokREVGQVVMVFZBTFVFeydjdnNyb290J30gPSAkY3ZzdHJlZWRlZmF1bHQ7Cgpmb3Jl YWNoIChrZXlzICVERUZBVUxUVkFMVUUpIHsKCgkjIHJlcGxhY2Ugbm90IGdpdmVuIHBhcmFtZXRl cnMgd2l0aCB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzCglpZiAoIWRlZmluZWQoJGlucHV0eyRffSkg fHwgJGlucHV0eyRffSBlcSAiIikgewoKCQkjIEVtcHR5IENoZWNrYm94ZXMgaW4gZm9ybXMgcmV0 dXJuIC0tIG5vdGhpbmcuIFNvIHdlIGRlZmluZSBhIGhlbHBlcgoJCSMgdmFyaWFibGUgaW4gdGhl c2UgZm9ybXMgKGNvcHQpIHdoaWNoIGluZGljYXRlcyB0aGF0IHdlIGp1c3Qgc2V0CgkJIyBwYXJh bWV0ZXJzIHdpdGggYSBjaGVja2JveAoJCWlmICghZGVmaW5lZCgkaW5wdXR7ImNvcHQifSkpIHsK CgkJCSMgJ2NvcHQnIGlzbid0IGRlZmluZWQgLS0+IGVtcHR5IGlucHV0IGlzIG5vdCB0aGUgcmVz dWx0CgkJCSMgb2YgZW1wdHkgaW5wdXQgY2hlY2tib3ggLS0+IHNldCBkZWZhdWx0CgkJCSRpbnB1 dHskX30gPSAkREVGQVVMVFZBTFVFeyRffQoJCQkgICAgaWYgKGRlZmluZWQoJERFRkFVTFRWQUxV RXskX30pKTsKCQl9IGVsc2UgewoKCQkJIyAnY29wdCcgaXMgZGVmaW5lZCAtPiB0aGUgcmVzdWx0 IG9mIGVtcHR5IGlucHV0IGNoZWNrYm94CgkJCSMgLT4gc2V0IHRvIHplcm8gKGRpc2FibGUpIGlm IGRlZmF1bHQgaXMgYSBib29sZWFuICgwfDEpLgoJCQkkaW5wdXR7JF99ID0gMAoJCQkgICAgaWYg KGRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pCgkJCSAgICAmJiAoJERFRkFVTFRWQUxVRXskX30g ZXEgIjAiCgkJCSAgICB8fCAkREVGQVVMVFZBTFVFeyRffSBlcSAiMSIpKTsKCQl9Cgl9Cn0KCiRi YXJlcXVlcnkgPSAiIjsKbXkgQGJhcmVxdWVyeTsKZm9yZWFjaCAoQHN0aWNreXZhcnMpIHsKCgkj IGNvbnN0cnVjdCBhIHF1ZXJ5IHN0cmluZyB3aXRoIHRoZSBzdGlja3kgbm9uIGRlZmF1bHQgcGFy YW1ldGVycyBzZXQKCWlmIChkZWZpbmVkKCRpbnB1dHskX30pICYmICRpbnB1dHskX30gbmUgJycK CSAgICAmJiAhKGRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pICYmICRpbnB1dHskX30gZXEgJERF RkFVTFRWQUxVRXskX30pKQoJewoJCXB1c2ggQGJhcmVxdWVyeSwKCQkgICAgam9pbiAoJz0nLCB1 cmxlbmNvZGUoJF8pLCB1cmxlbmNvZGUoJGlucHV0eyRffSkpOwoJfQp9CgojIGlzIHRoZXJlIGFu eSBxdWVyeSA/CmlmIChAYmFyZXF1ZXJ5KSB7CgkkYmFyZXF1ZXJ5ID0gam9pbiAoJyYnLCBAYmFy ZXF1ZXJ5KTsKCSRxdWVyeSAgICAgPSAiPyRiYXJlcXVlcnkiOwoJJGJhcmVxdWVyeSA9ICImJGJh cmVxdWVyeSI7Cn0gZWxzZSB7CgkkcXVlcnkgPSAiIjsKfQp1bmRlZiBAYmFyZXF1ZXJ5OwoKaWYg KGRlZmluZWQoJGlucHV0e3BhdGh9KSkgewoJcmVkaXJlY3QoIiRzY3JpcHRuYW1lLyRpbnB1dHtw YXRofSRxdWVyeSIpOwp9CgojIGdldCBhY3R1YWwgcGFyYW1ldGVycwokc29ydGJ5ICAgPSAkaW5w dXR7InNvcnRieSJ9OwokYnlkYXRlICAgPSAwOwokYnlyZXYgICAgPSAwOwokYnlhdXRob3IgPSAw OwokYnlsb2cgICAgPSAwOwokYnlmaWxlICAgPSAwOwppZiAoJHNvcnRieSBlcSAiZGF0ZSIpIHsK CSRieWRhdGUgPSAxOwp9IGVsc2lmICgkc29ydGJ5IGVxICJyZXYiKSB7CgkkYnlyZXYgPSAxOwp9 IGVsc2lmICgkc29ydGJ5IGVxICJhdXRob3IiKSB7CgkkYnlhdXRob3IgPSAxOwp9IGVsc2lmICgk c29ydGJ5IGVxICJsb2ciKSB7CgkkYnlsb2cgPSAxOwp9IGVsc2UgewoJJGJ5ZmlsZSA9IDE7Cn0K CiRkZWZhdWx0RGlmZlR5cGUgPSAkaW5wdXR7J2YnfTsKCiRsb2dzb3J0ID0gJGlucHV0eydsb2dz b3J0J307Cgp7CglteSBAdG1wID0gQENWU3JlcG9zaXRvcmllczsKCW15IEBwYWlyOwoKCXdoaWxl IChAcGFpciA9IHNwbGljZShAdG1wLCAwLCAyKSkgewoJCW15ICgka2V5LCAgICR2YWwpICAgICA9 IEBwYWlyOwoJCW15ICgkZGVzY3IsICRjdnNyb290KSA9IEAkdmFsOwoKCQluZXh0IGlmICEtZCAk Y3Zzcm9vdDsKCgkJJENWU1JPT1RkZXNjcnska2V5fSA9ICRkZXNjcjsKCQkkQ1ZTUk9PVHska2V5 fSAgICAgID0gJGN2c3Jvb3Q7CgkJcHVzaCBAQ1ZTUk9PVCwgJGtleTsKCX0KfQoKIyMgRGVmYXVs dCBDVlMtVHJlZQppZiAoIWRlZmluZWQoJENWU1JPT1R7JGN2c3RyZWVkZWZhdWx0fSkpIHsKCWZh dGFsKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAoJICAgICAgJzxjb2RlPiRjdnN0cmVlZGVmYXVsdDwv Y29kZT4gcG9pbnRzIHRvIGEgcmVwb3NpdG9yeSAoJXMpIG5vdCBkZWZpbmVkIGluIDxjb2RlPiUl Q1ZTUk9PVDwvY29kZT4gKGVkaXQgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgJXMpJywKCSAgICAg ICRjdnN0cmVlZGVmYXVsdCwgJGNvbmZpZyk7Cn0KCiMgYWx0ZXJuYXRlIENWUy1UcmVlLCBjb25m aWd1cmVkIGluIGN2c3dlYi5jb25mCmlmICgkaW5wdXR7J2N2c3Jvb3QnfSAmJiAkQ1ZTUk9PVHsk aW5wdXR7J2N2c3Jvb3QnfX0pIHsKCSRjdnN0cmVlID0gJGlucHV0eydjdnNyb290J307Cn0gZWxz ZSB7CgkkY3ZzdHJlZSA9ICRjdnN0cmVlZGVmYXVsdDsKfQoKJGN2c3Jvb3QgPSAkQ1ZTUk9PVHsk Y3ZzdHJlZX07CgojIGNyZWF0ZSBpY29ucyBvdXQgb2YgZGVzY3JpcHRpb24KZm9yZWFjaCBteSAk ayAoa2V5cyAlSUNPTlMpIHsKCW5vIHN0cmljdCAncmVmcyc7CglteSAoJGl0eHQsICRpcGF0aCwg JGl3aWR0aCwgJGloZWlnaHQpID0gQHskSUNPTlN7JGt9fTsKCWlmICgkaXBhdGgpIHsKCQkkeyIk e2t9aWNvbiJ9ID0KCQkgICAgc3ByaW50ZigKCQkJJzxpbWcgc3JjPSIlcyIgYWx0PSIlcyIgYm9y ZGVyPSIwIiB3aWR0aD0iJWQiIGhlaWdodD0iJWQiPicsCgkJCWhyZWZxdW90ZSgkaXBhdGgpLCBo dG1scXVvdGUoJGl0eHQpLCAkaXdpZHRoLCAkaWhlaWdodCkKCX0gZWxzZSB7CgkJJHsiJHtrfWlj b24ifSA9ICRpdHh0OwoJfQp9CgpteSAkY29uZmlnX2N2c3RyZWUgPSAiJGNvbmZpZy0kY3ZzdHJl ZSI7CgojIERvIHNvbWUgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZvciBjdnN0cmVlcwppZiAoLWYg JGNvbmZpZ19jdnN0cmVlKSB7CglkbyAiJGNvbmZpZ19jdnN0cmVlIiBvcgoJICAgIGZhdGFsKCI1 MDAgSW50ZXJuYWwgRXJyb3IiLAoJCSAgJ0Vycm9yIGluIGxvYWRpbmcgY29uZmlndXJhdGlvbiBm aWxlOiAlczxicj48YnI+JXM8YnI+JywKCQkgICRjb25maWdfY3ZzdHJlZSwgJEApOwp9CnVuZGVm ICRjb25maWdfY3ZzdHJlZTsKCiRyZV9wcmNhdGVnb3JpZXMgPSAnKD86JyAuIGpvaW4gKCd8Jywg QHByY2F0ZWdvcmllcykgLiAnKScgaWYgQHByY2F0ZWdvcmllczsKJHJlX3Bya2V5d29yZCA9IHF1 b3RlbWV0YSgkcHJrZXl3b3JkKSBpZiBkZWZpbmVkKCRwcmtleXdvcmQpOwokcHJjZ2kgLj0gJyVz JyBpZiBkZWZpbmVkKCRwcmNnaSkgJiYgJHByY2dpICF+IC8lcy87CgokZnVsbG5hbWUgICAgICAg ICA9ICIkY3Zzcm9vdC8kd2hlcmUiOwokbWltZXR5cGUgICAgICAgICA9ICZnZXRNaW1lVHlwZUZy b21TdWZmaXgoJGZ1bGxuYW1lKTsKJGRlZmF1bHRUZXh0UGxhaW4gPSAoJG1pbWV0eXBlIGVxICJ0 ZXh0L3BsYWluIik7CiRkZWZhdWx0Vmlld2FibGUgID0gJGFsbG93X21hcmt1cCAmJiB2aWV3YWJs ZSgkbWltZXR5cGUpOwoKbXkgJHJld3JpdGUgPSAwOwoKaWYgKCRwYXRoaW5mbyA9fiBtfC8vfCkg ewoJJHBhdGhpbmZvID1+IHl8L3wvfHM7CgkkcmV3cml0ZSA9IDE7Cn0KCmlmICgtZCAkZnVsbG5h bWUgJiYgJHBhdGhpbmZvICF+IG18LyR8KSB7CgkkcGF0aGluZm8gLj0gJy8nOwoJJHJld3JpdGUg PSAxOwp9CgppZiAoIS1kICRmdWxsbmFtZSAmJiAkcGF0aGluZm8gPX4gbXwvJHwpIHsKCWNob3Ag JHBhdGhpbmZvOwoJJHJld3JpdGUgPSAxOwp9CgppZiAoJHJld3JpdGUpIHsKCXJlZGlyZWN0KCRz Y3JpcHRuYW1lIC4gdXJsZW5jb2RlKCRwYXRoaW5mbykgLiAkcXVlcnkpOwp9Cgp1bmRlZiAkcmV3 cml0ZTsKCmlmICghLWQgJGN2c3Jvb3QpIHsKCWZhdGFsKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAoJ ICAgICAgJyRDVlNST09UIG5vdCBmb3VuZCE8cD5UaGUgc2VydmVyIG9uIHdoaWNoIHRoZSBDVlMg dHJlZSBsaXZlcyBpcyBwcm9iYWJseSBkb3duLiAgUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIGZldyBt aW51dGVzLicpOwp9CgojCiMgU2VlIGlmIHRoZSBtb2R1bGUgaXMgaW4gb3VyIGZvcmJpZGRlbiBs aXN0LgojCiR3aGVyZSA9fiBtOihbXi9dKik6OwokbW9kdWxlID0gJDE7CmlmICgkbW9kdWxlICYm ICZmb3JiaWRkZW5fbW9kdWxlKCRtb2R1bGUpKSB7CglmYXRhbCgiNDAzIEZvcmJpZGRlbiIsCgkg ICAgICAnQWNjZXNzIHRvICVzIGZvcmJpZGRlbi4nLAoJICAgICAgJHdoZXJlKTsKfQoKIwojIEhh bmRsZSB0YXJiYWxsIGRvd25sb2FkcyBiZWZvcmUgYW55IGhlYWRlcnMgYXJlIG91dHB1dC4KIwpp ZiAoJGlucHV0e3RhcmJhbGx9KSB7CglmYXRhbCgiNDAzIEZvcmJpZGRlbiIsCgkgICAgICAnRG93 bmxvYWRpbmcgdGFyYmFsbHMgaXMgcHJvaGliaXRlZC4nKQoJICAgIHVubGVzcyAkYWxsb3dfdGFy OwoJbXkgKCRtb2R1bGUpID0gKCR3aGVyZSA9fiBtLF4vPyguKiksKTsgICAgIyB1bnRhaW50Cgkk bW9kdWxlID1+IHMsLyhbXi9dKikkLCw7CglteSAoJGV4dCkgICAgID0gKCQxICAgICAgPX4gLyhc LnRhclwuZ3p8XC56aXApJC8pOwoJbXkgKCRiYXNlZGlyKSA9ICgkbW9kdWxlID1+IG0sKFteL10r KSQsKTsKCglpZiAoJGJhc2VkaXIgZXEgJycgfHwgJG1vZHVsZSBlcSAnJykgewoJCWZhdGFsKCI1 MDAgSW50ZXJuYWwgRXJyb3IiLAoJCSAgICAgICdZb3UgY2Fubm90IGRvd25sb2FkIHRoZSB0b3Ag bGV2ZWwgZGlyZWN0b3J5LicpOwoJfQoKCW15ICR0bXBleHBvcnRkaXIgPSAiJHRtcGRpci8uY3Zz d2ViLiQkLiIgLiBpbnQodGltZSk7CgoJbWtkaXIoJHRtcGV4cG9ydGRpciwgMDcwMCkKCSAgICBv ciBmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwKCQkgICAgICdVbmFibGUgdG8gbWFrZSB0ZW1w b3JhcnkgZGlyZWN0b3J5OiAlcycsCgkJICAgICAkISk7CgoJbXkgQGZhdGFsOwoKCW15ICR0YWcg PQoJICAgIChleGlzdHMgJGlucHV0e29ubHlfd2l0aF90YWd9ICYmIGxlbmd0aCAkaW5wdXR7b25s eV93aXRoX3RhZ30pID8KCSAgICAkaW5wdXR7b25seV93aXRoX3RhZ30gOiAiSEVBRCI7CgoJaWYg KCR0YWcgZXEgJ01BSU4nKSB7CgkgICAgJHRhZyA9ICdIRUFEJzsKCX0KCglpZiAoc3lzdGVtICRD TUR7Y3ZzfSwgQGN2c19vcHRpb25zLCAnLVFkJywgJGN2c3Jvb3QsICdleHBvcnQnLCAnLXInLAoJ ICAgICR0YWcsICctZCcsICIkdG1wZXhwb3J0ZGlyLyRiYXNlZGlyIiwgJG1vZHVsZSkKCXsKCQlA ZmF0YWwgPSAoIjUwMCBJbnRlcm5hbCBFcnJvciIsCgkJCSAgJ2N2cyBjbyBmYWlsdXJlOiAlczog JXMnLAoJCQkgICQhLCAkbW9kdWxlKTsKCX0gZWxzZSB7CgkJJHwgPSAxOyAgICAjIEVzc2VudGlh bCB0byBnZXQgdGhlIGJ1ZmZlcmluZyByaWdodC4KCgkJaWYgKCRleHQgZXEgJy50YXIuZ3onKSB7 CgkJCXByaW50ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ3ppcFxyXG5cclxuIjsKCgkJ CXN5c3RlbQoJCQkgICAgIiRDTUR7dGFyfSBAdGFyX29wdGlvbnMgLWNmIC0gLUMgJHRtcGV4cG9y dGRpciAkYmFzZWRpciB8ICRDTUR7Z3ppcH0gQGd6aXBfb3B0aW9ucyAtYyIKCQkJICAgIGFuZCBA ZmF0YWwgPQoJCQkJKCI1MDAgSW50ZXJuYWwgRXJyb3IiLAoJCQkJICd0YXIgemMgZmFpbHVyZTog JXM6ICVzJywKCQkJICAgICAkISwgJGJhc2VkaXIpOwoJCX0gZWxzaWYgKCRleHQgZXEgJy56aXAn ICYmICRDTUR7emlwfSkgewoJCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi96aXBc clxuXHJcbiI7CgoJCQlzeXN0ZW0KCQkJICAgICJjZCAkdG1wZXhwb3J0ZGlyICYmICRDTUR7emlw fSBAemlwX29wdGlvbnMgLXIgLSAkYmFzZWRpciIKCQkJICAgIGFuZCBAZmF0YWwgPQoJCQkJKCI1 MDAgSW50ZXJuYWwgRXJyb3IiLAoJCQkJICd6aXAgZmFpbHVyZTogJXM6ICVzJywKCQkJCSAkISwg JGJhc2VkaXIpOwoJCX0gZWxzZSB7CgkJCUBmYXRhbCA9CgkJCSAgICAoIjUwMCBJbnRlcm5hbCBF cnJvciIsCgkJCSAgICAgJ3Vuc3VwcG9ydGVkIGZpbGUgdHlwZScpOwoJCX0KCX0KCglzeXN0ZW0g JENNRHtybX0sICctcmYnLCAkdG1wZXhwb3J0ZGlyIGlmIC1kICR0bXBleHBvcnRkaXI7CgoJJmZh dGFsKEBmYXRhbCkgaWYgQGZhdGFsOwoKCWV4aXQ7Cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwojIFZpZXcgYSBkaXJlY3RvcnkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwppZiAoLWQgJGZ1bGxuYW1lKSB7CglteSAkZGggPSBkbyB7IGxvY2FsICgqREgpOyB9OwoJb3Bl bmRpcigkZGgsICRmdWxsbmFtZSkgb3IgZmF0YWwoIjQwNCBOb3QgRm91bmQiLAoJCQkJCSAnJXM6 ICVzJywKCQkJCQkgJHdoZXJlLCAkISk7CglteSBAZGlyID0gcmVhZGRpcigkZGgpOwoJY2xvc2Vk aXIoJGRoKTsKCW15IEBzdWJMZXZlbEZpbGVzID0gZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQGRp cikKCSAgICBpZiAoJHNob3dfc3ViZGlyX2xhc3Rtb2QpOwoJZ2V0RGlyTG9ncygkY3Zzcm9vdCwg JHdoZXJlLCBAc3ViTGV2ZWxGaWxlcyk7CgoJaWYgKCR3aGVyZSBlcSAnLycpIHsKCQlodG1sX2hl YWRlcigkZGVmYXVsdHRpdGxlKTsKCQkkbG9uZ19pbnRybyA9fiBzLyEhQ1ZTUk9PVGRlc2NyISEv JENWU1JPT1RkZXNjcnskY3ZzdHJlZX0vZzsKCQlwcmludCAkbG9uZ19pbnRybzsKCX0gZWxzZSB7 CgkJaHRtbF9oZWFkZXIoJHdoZXJlKTsKCQlwcmludCAkc2hvcnRfaW5zdHJ1Y3Rpb247Cgl9CgoJ aWYgKCR1c2VfZGVzY3JpcHRpb25zICYmIG9wZW4oREVTQywgIjwkY3Zzcm9vdC9DVlNST09UL2Rl c2NyaXB0aW9ucyIpKQoJewoJCXdoaWxlICg8REVTQz4pIHsKCQkJY2hvbXA7CgkJCW15ICgkZGly LCAkZGVzY3JpcHRpb24pID0gLyhcUyspXHMrKC4qKS87CgkJCSRkZXNjcmlwdGlvbnN7JGRpcn0g PSAkZGVzY3JpcHRpb247CgkJfQoJCWNsb3NlKERFU0MpOwoJfQoKCXByaW50ICI8cD48YSBuYW1l PVwiZGlybGlzdFwiPjwvYT48L3A+XG4iOwoKCSMgZ2l2ZSBkaXJlY3QgYWNjZXNzIHRvIGRpcnMK CWlmICgkd2hlcmUgZXEgJy8nKSB7CgkJY2hvb3NlTWlycm9yICgpOwoJCWNob29zZUNWU1Jvb3Qg KCk7Cgl9IGVsc2UgewoJCXByaW50ICI8cD5DdXJyZW50IGRpcmVjdG9yeTogPGI+IiwgJmNsaWNr YWJsZVBhdGgoJHdoZXJlLCAwKSwKCQkgICAgIjwvYj48L3A+XG4iOwoKCQlwcmludCAiPHA+Q3Vy cmVudCB0YWc6IDxiPiIsICRpbnB1dHtvbmx5X3dpdGhfdGFnfSwiPC9iPjwvcD5cbiIKCQkgICAg aWYgJGlucHV0e29ubHlfd2l0aF90YWd9OwoKCX0KCglwcmludCAiPGhyIG5vc2hhZGU+XG4iOwoK CSMgVXNpbmcgPG1lbnU+IGluIHRoaXMgbWFubmVyIHZpb2xhdGVzIHRoZSBIVE1MMi4wIHNwZWMg YnV0CgkjIHByb3ZpZGVzIHRoZSByZXN1bHRzIHRoYXQgSSB3YW50IGluIG1vc3QgYnJvd3NlcnMu ICBBbm90aGVyCgkjIGNhc2Ugb2YgbGF5b3V0IHNwb29naW5nIHVwIEhUTUwuCgoJbXkgJGluZm9j b2xzID0gMDsKCWlmICgkZGlydGFibGUpIHsKCQlwcmludCAiPHRhYmxlIHN0eWxlPVwiYm9yZGVy LXdpZHRoOiAwIjsKCQlwcmludCAiOyBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFibGVCb3JkZXJDb2xv ciIKCQkgICAgaWYgKGRlZmluZWQgJHRhYmxlQm9yZGVyQ29sb3IpOwoJCXByaW50ICJcIiB3aWR0 aD1cIjEwMCVcIiBjZWxsc3BhY2luZz1cIjFcIiBjZWxscGFkZGluZz1cIiR0YWJsZXBhZGRpbmdc Ij5cbiI7CgkJJGluZm9jb2xzKys7CgkJcHJpbnRmICI8dHI+XG48dGggc3R5bGU9XCJ0ZXh0LWFs aWduOiBsZWZ0OyBiYWNrZ3JvdW5kLWNvbG9yOiAlc1wiPiIsCgkJICAgICRieWZpbGUgPyAkY29s dW1uSGVhZGVyQ29sb3JTb3J0ZWQgOgoJCSAgICAkY29sdW1uSGVhZGVyQ29sb3JEZWZhdWx0OwoK CQlpZiAoJGJ5ZmlsZSkgewoJCQlwcmludCAnRmlsZSc7CgkJfSBlbHNlIHsKCQkJcHJpbnQgJmxp bmsoCgkJCQknRmlsZScsCgkJCQlzcHJpbnRmKAoJCQkJCScuLyVzI2Rpcmxpc3QnLAoJCQkJCSZ0 b2dnbGVRdWVyeSgic29ydGJ5IiwgImZpbGUiKQoJCQkJKQoJCQkpOwoJCX0KCQlwcmludCAiPC90 aD5cbiI7CgoJCSMgZG8gbm90IGRpc3BsYXkgdGhlIG90aGVyIGNvbHVtbi1oZWFkZXJzLCBpZiB3 ZSBkbyBub3QgaGF2ZSBhbnkgZmlsZXMKCQkjIHdpdGggcmV2aXNpb24gaW5mb3JtYXRpb246CgkJ aWYgKHNjYWxhciglZmlsZWluZm8pKSB7CgkJCSRpbmZvY29scysrOwoJCQlwcmludGYgJzx0aCBz dHlsZT0idGV4dC1hbGlnbjogbGVmdDsgYmFja2dyb3VuZC1jb2xvcjogJXMiPicsCgkJCSAgICAk YnlyZXYgPyAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgOgoJCQkgICAgJGNvbHVtbkhlYWRlckNv bG9yRGVmYXVsdDsKCgkJCWlmICgkYnlyZXYpIHsKCQkJCXByaW50ICdSZXYuJzsKCQkJfSBlbHNl IHsKCQkJCXByaW50ICZsaW5rKAoJCQkJCSdSZXYuJywKCQkJCQlzcHJpbnRmKAoJCQkJCQknLi8l cyNkaXJsaXN0JywKCQkJCQkJJnRvZ2dsZVF1ZXJ5KCJzb3J0YnkiLCAicmV2IikKCQkJCQkpCgkJ CQkpOwoJCQl9CgkJCXByaW50ICI8L3RoPlxuIjsKCQkJJGluZm9jb2xzKys7CgkJCXByaW50ZiAn PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyBiYWNrZ3JvdW5kLWNvbG9yOiAlcyI+JywKCQkJ ICAgICRieWRhdGUgPyAkY29sdW1uSGVhZGVyQ29sb3JTb3J0ZWQgOgoJCQkgICAgJGNvbHVtbkhl YWRlckNvbG9yRGVmYXVsdDsKCgkJCWlmICgkYnlkYXRlKSB7CgkJCQlwcmludCAnQWdlJzsKCQkJ fSBlbHNlIHsKCQkJCXByaW50ICZsaW5rKAoJCQkJCSdBZ2UnLAoJCQkJCXNwcmludGYoCgkJCQkJ CScuLyVzI2Rpcmxpc3QnLAoJCQkJCQkmdG9nZ2xlUXVlcnkoInNvcnRieSIsICJkYXRlIikKCQkJ CQkpCgkJCQkpOwoJCQl9CgkJCXByaW50ICI8L3RoPlxuIjsKCgkJCWlmICgkc2hvd19hdXRob3Ip IHsKCQkJCSRpbmZvY29scysrOwoJCQkJcHJpbnRmICc8dGggc3R5bGU9InRleHQtYWxpZ246IGxl ZnQ7IGJhY2tncm91bmQtY29sb3I6ICVzIj4nLAoJCQkJICAgICRieWF1dGhvciA/ICRjb2x1bW5I ZWFkZXJDb2xvclNvcnRlZCA6CgkJCQkgICAgJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdDsKCgkJ CQlpZiAoJGJ5YXV0aG9yKSB7CgkJCQkJcHJpbnQgJ0F1dGhvcic7CgkJCQl9IGVsc2UgewoJCQkJ CXByaW50ICZsaW5rKAoJCQkJCQknQXV0aG9yJywKCQkJCQkJc3ByaW50ZigKCQkJCQkJCScuLyVz I2Rpcmxpc3QnLAoJCQkJCQkJJnRvZ2dsZVF1ZXJ5KAoJCQkJCQkJCSJzb3J0YnkiLAoJCQkJCQkJ CSJhdXRob3IiCgkJCQkJCQkpCgkJCQkJCSkKCQkJCQkpOwoJCQkJfQoJCQkJcHJpbnQgIjwvdGg+ XG4iOwoJCQl9CgkJCSRpbmZvY29scysrOwoJCQlwcmludGYgJzx0aCBzdHlsZT0idGV4dC1hbGln bjogbGVmdDsgYmFja2dyb3VuZC1jb2xvcjogJXMiPicsCgkJCSAgICAkYnlsb2cgPyAkY29sdW1u SGVhZGVyQ29sb3JTb3J0ZWQgOgoJCQkgICAgJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdDsKCgkJ CWlmICgkYnlsb2cpIHsKCQkJCXByaW50ICdMYXN0IGxvZyBlbnRyeSc7CgkJCX0gZWxzZSB7CgkJ CQlwcmludCAmbGluaygKCQkJCQknTGFzdCBsb2cgZW50cnknLAoJCQkJCXNwcmludGYoCgkJCQkJ CScuLyVzI2Rpcmxpc3QnLAoJCQkJCQkmdG9nZ2xlUXVlcnkoInNvcnRieSIsICJsb2ciKQoJCQkJ CSkKCQkJCSk7CgkJCX0KCQkJcHJpbnQgIjwvdGg+XG4iOwoJCX0gZWxzaWYgKCR1c2VfZGVzY3Jp cHRpb25zKSB7CgkJCXByaW50ZiAnPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyBiYWNrZ3Jv dW5kLWNvbG9yOiBzIj4nLAoJCQkgICAgJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdDsKCQkJcHJp bnQgIkRlc2NyaXB0aW9uPC90aD5cbiI7CgkJCSRpbmZvY29scysrOwoJCX0KCQlwcmludCAiPC90 cj5cbiI7Cgl9IGVsc2UgewoJCXByaW50ICI8bWVudT5cbiI7Cgl9CglteSAkZGlycm93ID0gMDsK CglteSAkaTsKCWxvb2tpbmdmb3JhdHRpYzoKCWZvciAoJGkgPSAwIDsgJGkgPD0gJCNkaXIgOyAk aSsrKSB7CgkJaWYgKCRkaXJbJGldIGVxICJBdHRpYyIpIHsKCQkJbGFzdCBsb29raW5nZm9yYXR0 aWM7CgkJfQoJfQoKCWlmICghJGlucHV0eydoaWRlYXR0aWMnfSAmJiAoJGkgPD0gJCNkaXIpCgkg ICAgJiYgb3BlbmRpcigkZGgsICRmdWxsbmFtZSAuICIvQXR0aWMiKSkKCXsKCQlzcGxpY2UoQGRp ciwgJGksIDEsIGdyZXAoKHN8XnxBdHRpYy98LCAhbXwvXC58KSwgcmVhZGRpcigkZGgpKSk7CgkJ Y2xvc2VkaXIoJGRoKTsKCX0KCglteSAkaGlkZUF0dGljVG9nZ2xlTGluayA9CgkgICAgJGlucHV0 eydoaWRlYXR0aWMnfSA/ICcnIDoKCSAgICAmbGluaygnW0hpZGVdJywgc3ByaW50ZignLi8lcyNk aXJsaXN0JywgJnRvZ2dsZVF1ZXJ5KCJoaWRlYXR0aWMiKSkpOwoKCSMgU29ydCB3aXRob3V0IHRo ZSBBdHRpYy8gcGF0aG5hbWUuCgkjIHBsYWNlIGRpcmVjdG9yaWVzIGZpcnN0CgoJbXkgJGF0dGlj OwoJbXkgJHVybDsKCW15ICRmaWxldXJsOwoJbXkgJGZpbGVzZXhpc3RzOwoJbXkgJGZpbGVzZm91 bmQ7CgoJZm9yZWFjaCBteSAkZmlsZSAoc29ydCB7ICZmaWxlU29ydENtcCB9IEBkaXIpIHsKCgkJ bmV4dCBpZiAoJGZpbGUgZXEgJy4nKTsKCgkJIyBpZ25vcmUgQ1ZTIGxvY2sgYW5kIHN0YWxlIE5G UyBmaWxlcwoJCW5leHQgaWYgKCRmaWxlID1+IC9eI2N2c1wufF4sfF5cLm5mcy8pOwoKCQkjIENo ZWNrIHdoZXRoZXIgdG8gc2hvdyB0aGUgQ1ZTUk9PVCBwYXRoCgkJbmV4dCBpZiAoJGlucHV0eydo aWRlY3Zzcm9vdCd9ICYmICRmaWxlIGVxICdDVlNST09UJyk7CgoJCSMgQ2hlY2sgd2hldGhlciB0 aGUgbW9kdWxlIGlzIGluIHRoZSByZXN0cmljdGVkIGxpc3QKCQluZXh0IGlmICgkZmlsZSAmJiAm Zm9yYmlkZGVuX21vZHVsZSgkZmlsZSkpOwoKCQkjIElnbm9yZSBub24tcmVhZGFibGUgZmlsZXMK CQluZXh0IGlmICgkaW5wdXR7J2hpZGVub25yZWFkYWJsZSd9ICYmICEoLXIgIiRmdWxsbmFtZS8k ZmlsZSIpKTsKCgkJaWYgKCRmaWxlID1+IHN8XkF0dGljL3x8KSB7CgkJCSRhdHRpYyA9ICIgKGlu IHRoZSBBdHRpYykmbmJzcDsiIC4gJGhpZGVBdHRpY1RvZ2dsZUxpbms7CgkJfSBlbHNlIHsKCQkJ JGF0dGljID0gIiI7CgkJfQoKCQlpZiAoJGZpbGUgZXEgJy4uJyB8fCAtZCAiJGZ1bGxuYW1lLyRm aWxlIikgewoJCQluZXh0IGlmICgkZmlsZSBlcSAnLi4nICYmICR3aGVyZSBlcSAnLycpOwoJCQlt eSAoJHJldiwgJGRhdGUsICRsb2csICRhdXRob3IsICRmaWxlbmFtZSkgPQoJCQkgICAgQHskZmls ZWluZm97JGZpbGV9fQoJCQkgICAgaWYgKGRlZmluZWQoJGZpbGVpbmZveyRmaWxlfSkpOwoJCQlw cmludGYgIjx0ciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICVzXCI+XG48dGQ+IiwKCQkJICAg ICAkdGFiY29sb3JzWyRkaXJyb3cgJSAyXSBpZiAkZGlydGFibGU7CgoJCQlpZiAoJGZpbGUgZXEg Jy4uJykgewoJCQkJJHVybCA9ICIuLi8kcXVlcnkiOwoJCQkJaWYgKCRub2ZpbGVsaW5rcykgewoJ CQkJCXByaW50ICRiYWNraWNvbjsKCQkJCX0gZWxzZSB7CgkJCQkJcHJpbnQgJmxpbmsoJGJhY2tp Y29uLCAkdXJsKTsKCQkJCX0KCQkJCXByaW50ICcmbmJzcDsnLCAmbGluaygiUGFyZW50IERpcmVj dG9yeSIsICR1cmwpOwoJCQl9IGVsc2UgewoJCQkJJHVybCA9ICcuLycgLiB1cmxlbmNvZGUoJGZp bGUpIC4gIi8kcXVlcnkiOwoJCQkJcHJpbnQgIjxhIG5hbWU9XCIkZmlsZVwiPjwvYT4iOwoKCQkJ CWlmICgkbm9maWxlbGlua3MpIHsKCQkJCQlwcmludCAkZGlyaWNvbjsKCQkJCX0gZWxzZSB7CgkJ CQkJcHJpbnQgJmxpbmsoJGRpcmljb24sICR1cmwpOwoJCQkJfQoJCQkJcHJpbnQgJyZuYnNwOycs ICZsaW5rKCIkZmlsZS8iLCAkdXJsKSwgJGF0dGljOwoKCQkJCWlmICgkZmlsZSBlcSAiQXR0aWMi KSB7CgkJCQkJcHJpbnQgIiZuYnNwOyAiOwoJCQkJCXByaW50ICZsaW5rKAoJCQkJCQkiW0Rvbid0 IGhpZGVdIiwKCQkJCQkJc3ByaW50ZigKCQkJCQkJCScuLyVzI2Rpcmxpc3QnLAoJCQkJCQkJJnRv Z2dsZVF1ZXJ5KAoJCQkJCQkJCSJoaWRlYXR0aWMiKQoJCQkJCQkpCgkJCQkJKTsKCQkJCX0KCQkJ fQoKCQkJIyBTaG93IGxhc3QgY2hhbmdlIGluIGRpcgoJCQlpZiAoJGZpbGVuYW1lKSB7CgkJCQlw cmludCAiPC90ZD5cbjx0ZD4mbmJzcDs8L3RkPlxuPHRkPiZuYnNwOyIKCQkJCSAgICBpZiAoJGRp cnRhYmxlKTsKCQkJCWlmICgkZGF0ZSkgewoJCQkJCXByaW50ICIgPGk+IiwKCQkJCQkgICAgcmVh ZGFibGVUaW1lKHRpbWUoKSAtICRkYXRlLCAwKSwKCQkJCQkgICAgIjwvaT4iOwoJCQkJfQoKCQkJ CWlmICgkc2hvd19hdXRob3IpIHsKCQkJCQlwcmludCAiPC90ZD5cbjx0ZD4mbmJzcDsiIGlmICgk ZGlydGFibGUpOwoJCQkJCXByaW50ICRhdXRob3I7CgkJCQl9CgkJCQlwcmludCAiPC90ZD5cbjx0 ZD4mbmJzcDsiIGlmICgkZGlydGFibGUpOwoJCQkJJGZpbGVuYW1lID1+IHMlXlteL10rLyUlOwoJ CQkJcHJpbnQgIiRmaWxlbmFtZS8kcmV2IjsKCQkJCXByaW50ICI8YnI+IiBpZiAoJGRpcnRhYmxl KTsKCgkJCQlpZiAoJGxvZykgewoJCQkJCXByaW50ICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQt c2l6ZTogc21hbGxlclwiPiIsCgkJCQkJICAmaHRtbGlmeSgKCQkJCQkJc3Vic3RyKCRsb2csIDAs ICRzaG9ydExvZ0xlbiksICRhbGxvd19kaXJfZXh0cmEpOwoJCQkJCWlmIChsZW5ndGggJGxvZyA+ IDgwKSB7CgkJCQkJCXByaW50ICIuLi4iOwoJCQkJCX0KCQkJCQlwcmludCAiPC9zcGFuPiI7CgkJ CQl9CgkJCX0gZWxzZSB7CgkJCQlteSAoJGR3aGVyZSkgPQoJCQkJICAgICgkd2hlcmUgbmUgIi8i ID8gJHdoZXJlIDogIiIpIC4gJGZpbGU7CgoJCQkJaWYgKCR1c2VfZGVzY3JpcHRpb25zCgkJCQkg ICAgJiYgZGVmaW5lZCAkZGVzY3JpcHRpb25zeyRkd2hlcmV9KQoJCQkJewoJCQkJCXByaW50ICI8 dGQgY29sc3Bhbj1cIiIsKCRpbmZvY29scyAtIDEpLAoJCQkJCSAgICAiXCI+Jm5ic3A7IgoJCQkJ CSAgICBpZiAkZGlydGFibGU7CgkJCQkJcHJpbnQgJGRlc2NyaXB0aW9uc3skZHdoZXJlfTsKCQkJ CX0gZWxzaWYgKCRkaXJ0YWJsZSAmJiAkaW5mb2NvbHMgPiAxKSB7CgoJCQkJCSMgY2xvc2UgdGhl IHJvdyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YKCQkJCQkjIGNvbHVtbnMsIHNvIHRo YXQgdGhlIHZlcnRpY2FsIHNlcGVyYXRvcnMgYXJlIHZpc2libGUKCQkJCQlteSAoJGNvbHMpID0g JGluZm9jb2xzOwoJCQkJCXdoaWxlICgkY29scyA+IDEpIHsKCQkJCQkJcHJpbnQgIjwvdGQ+XG48 dGQ+Jm5ic3A7IjsKCQkJCQkJJGNvbHMtLTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCWlmICgkZGly dGFibGUpIHsKCQkJCXByaW50ICI8L3RkPlxuPC90cj5cbiI7CgkJCX0gZWxzZSB7CgkJCQlwcmlu dCAiPGJyPlxuIjsKCQkJfQoJCQkkZGlycm93Kys7CgkJfSBlbHNpZiAoJGZpbGUgPX4gcy8sdiQv LykgewoKCQkJIyBTa2lwIGZvcmJpZGRlbiBmaWxlcyBub3cgc28gd2UnbGwgZ2l2ZSBubyBoaW50 CgkJCSMgYWJvdXQgdGhlaXIgZXhpc3RlbmNlLiAgVGhpcyBzaG91bGQgcHJvYmFibHkgaGF2ZQoJ CQkjIGJlZW4gZG9uZSBlYXJsaWVyLCBidXQgaXQncyBzdHJhaWdodGZvcndhcmQgaGVyZS4KCQkJ bmV4dCBpZiBmb3JiaWRkZW5fZmlsZSgiJGZ1bGxuYW1lLyRmaWxlIik7CgoJCQkkZmlsZXVybCA9 ICgkYXR0aWMgPyAiQXR0aWMvIiA6ICIiKSAuIHVybGVuY29kZSgkZmlsZSk7CgkJCSR1cmwgPSAn Li8nIC4gJGZpbGV1cmwgLiAkcXVlcnk7CgkJCSRmaWxlc2V4aXN0cysrOwoJCQluZXh0IGlmICgh ZGVmaW5lZCgkZmlsZWluZm97JGZpbGV9KSk7CgkJCW15ICgkcmV2LCAkZGF0ZSwgJGxvZywgJGF1 dGhvcikgPSBAeyRmaWxlaW5mb3skZmlsZX19OwoJCQkkZmlsZXNmb3VuZCsrOwoJCQlwcmludGYg Ijx0ciBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICVzXCI+XG48dGQ+IiwKCQkJICAgICR0YWJj b2xvcnNbJGRpcnJvdyAlIDJdIGlmICRkaXJ0YWJsZTsKCQkJcHJpbnQgIjxhIG5hbWU9XCIkZmls ZVwiPjwvYT4iOwoKCQkJaWYgKCRub2ZpbGVsaW5rcykgewoJCQkJcHJpbnQgJGZpbGVpY29uOwoJ CQl9IGVsc2UgewoJCQkJcHJpbnQgJmxpbmsoJGZpbGVpY29uLCAkdXJsKTsKCQkJfQoJCQlwcmlu dCAnJm5ic3A7JywgJmxpbmsoaHRtbHF1b3RlKCRmaWxlKSwgJHVybCksICRhdHRpYzsKCQkJcHJp bnQgIjwvdGQ+XG48dGQ+Jm5ic3A7IiBpZiAoJGRpcnRhYmxlKTsKCQkJZG93bmxvYWRfbGluaygk ZmlsZXVybCwgJHJldiwgJHJldiwKCQkJCSRkZWZhdWx0Vmlld2FibGUgPyAidGV4dC94LWN2c3dl Yi1tYXJrdXAiIDoKCQkJCXVuZGVmKTsKCQkJcHJpbnQgIjwvdGQ+XG48dGQ+Jm5ic3A7IiBpZiAo JGRpcnRhYmxlKTsKCgkJCWlmICgkZGF0ZSkgewoJCQkJcHJpbnQgIiA8aT4iLCByZWFkYWJsZVRp bWUodGltZSgpIC0gJGRhdGUsIDApLAoJCQkJICAgICI8L2k+IjsKCQkJfQoJCQlpZiAoJHNob3df YXV0aG9yKSB7CgkJCQlwcmludCAiPC90ZD5cbjx0ZD4mbmJzcDsiIGlmICgkZGlydGFibGUpOwoJ CQkJcHJpbnQgJGF1dGhvcjsKCQkJfQoJCQlwcmludCAiPC90ZD5cbjx0ZD4mbmJzcDsiIGlmICgk ZGlydGFibGUpOwoKCQkJaWYgKCRsb2cpIHsKCQkJCXByaW50ICIgPHNwYW4gc3R5bGU9XCJmb250 LXNpemU6IHNtYWxsZXJcIj4iLAoJCQkJICAgICZodG1saWZ5KHN1YnN0cigkbG9nLCAwLCAkc2hv cnRMb2dMZW4pLCAkYWxsb3dfZGlyX2V4dHJhKTsKCQkJCWlmIChsZW5ndGggJGxvZyA+IDgwKSB7 CgkJCQkJcHJpbnQgIi4uLiI7CgkJCQl9CgkJCQlwcmludCAiPC9zcGFuPiI7CgkJCX0KCQkJcHJp bnQgIjwvdGQ+XG4iIGlmICgkZGlydGFibGUpOwoJCQlwcmludCgoJGRpcnRhYmxlKSA/ICI8L3Ry PiIgOiAiPGJyPiIpOwoJCQkkZGlycm93Kys7CgkJfQoJCXByaW50ICJcbiI7Cgl9CgoJcHJpbnQo JGRpcnRhYmxlID8gIjwvdGFibGU+XG4iIDogIjwvbWVudT5cbiIpOwoKCWlmICgkZmlsZXNleGlz dHMgJiYgISRmaWxlc2ZvdW5kKSB7CgkJcHJpbnQKCQkgICAgIjxwPjxiPk5PVEU6PC9iPiBUaGVy ZSBhcmUgJGZpbGVzZXhpc3RzIGZpbGVzLCBidXQgbm9uZSBtYXRjaGVzIHRoZSBjdXJyZW50IHRh ZyAoJGlucHV0e29ubHlfd2l0aF90YWd9KS48L3A+XG4iOwoJfQoJaWYgKCRpbnB1dHtvbmx5X3dp dGhfdGFnfSAmJiAoISV0YWdzIHx8ICEkdGFnc3skaW5wdXR7b25seV93aXRoX3RhZ319KSkKCXsK CQkldGFncyA9ICVhbGx0YWdzCgl9CgoJaWYgKHNjYWxhciAldGFncyB8fCAkaW5wdXR7b25seV93 aXRoX3RhZ30gfHwgJGVkaXRfb3B0aW9uX2Zvcm0KCSAgICB8fCBkZWZpbmVkKCRpbnB1dHsib3B0 aW9ucyJ9KSkKCXsKCQlwcmludCAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT5cbiI7Cgl9CgoJaWYg KHNjYWxhciAldGFncyB8fCAkaW5wdXR7b25seV93aXRoX3RhZ30pIHsKCQlwcmludCAiPGZvcm0g bWV0aG9kPVwiZ2V0XCIgYWN0aW9uPVwiLi9cIj5cbiI7CgkJZm9yZWFjaCBteSAkdmFyIChAc3Rp Y2t5dmFycykgewoJCQlwcmludAoJCQkgICAgIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1c IiR2YXJcIiB2YWx1ZT1cIiRpbnB1dHskdmFyfVwiPlxuIgoJCQkgICAgaWYgKGRlZmluZWQoJGlu cHV0eyR2YXJ9KQoJCQkgICAgJiYgKCFkZWZpbmVkKCRERUZBVUxUVkFMVUV7JHZhcn0pCgkJCSAg ICB8fCAkaW5wdXR7JHZhcn0gbmUgJERFRkFVTFRWQUxVRXskdmFyfSkKCQkJICAgICYmICRpbnB1 dHskdmFyfSBuZSAiIiAmJiAkdmFyIG5lICJvbmx5X3dpdGhfdGFnIik7CgkJfQoJCXByaW50ICI8 cD48bGFiZWwgZm9yPVwib25seV93aXRoX3RhZ1wiIGFjY2Vzc2tleT1cIlRcIj4iOwoJCXByaW50 ICJTaG93IG9ubHkgZmlsZXMgd2l0aCB0YWc6PC9sYWJlbD5cbiI7CgkJcHJpbnQgIjxzZWxlY3Qg aWQ9XCJvbmx5X3dpdGhfdGFnXCIgbmFtZT1cIm9ubHlfd2l0aF90YWdcIiI7CgkJcHJpbnQgIiBv bmNoYW5nZT1cInRoaXMuZm9ybS5zdWJtaXQoKVwiIiBpZiAkdXNlX2phdmFfc2NyaXB0OwoJCXBy aW50ICI+IjsKCQlwcmludCAiPG9wdGlvbiB2YWx1ZT1cIlwiPkFsbCB0YWdzIC8gZGVmYXVsdCBi cmFuY2g8L29wdGlvbj5cbiI7CgoJCWZvcmVhY2ggbXkgJHRhZyAocmV2ZXJzZSBzb3J0IHsgbGMg JGEgY21wIGxjICRiIH0ga2V5cyAldGFncykgewoJCQlwcmludCAiPG9wdGlvbiIsCgkJCSAgICBk ZWZpbmVkKCRpbnB1dHtvbmx5X3dpdGhfdGFnfSkKCQkJICAgICYmICRpbnB1dHtvbmx5X3dpdGhf dGFnfSBlcSAkdGFnID8gIiBzZWxlY3RlZCIgOiAiIiwKCQkJICAgICI+JHRhZzwvb3B0aW9uPlxu IjsKCQl9CgkJcHJpbnQgIjwvc2VsZWN0PlxuIjsKCQlwcmludCAiIDxsYWJlbCBmb3I9XCJwYXRo XCIgYWNjZXNza2V5PVwiUFwiPiI7CgkJcHJpbnQgIk1vZHVsZSBwYXRoIG9yIGFsaWFzOjwvbGFi ZWw+XG4iOwoJCXByaW50ZiAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwYXRoXCIgbmFtZT1c InBhdGhcIiB2YWx1ZT1cIiVzXCIgc2l6ZT1cIjE1XCI+XG4iLAoJCSAgICBodG1scXVvdGUoJHdo ZXJlKTsKCQlwcmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkdvXCIgYWNjZXNz a2V5PVwiR1wiPjwvcD5cbiI7CgkJcHJpbnQgIjwvZm9ybT5cbiI7Cgl9CgoJaWYgKCRhbGxvd190 YXIpIHsKCQlteSAoJGJhc2VmaWxlKSA9ICgkd2hlcmUgPX4gbSwoPzouKi8pPyhbXi9dKyksKTsK CgkJaWYgKGRlZmluZWQoJGJhc2VmaWxlKSAmJiAkYmFzZWZpbGUgbmUgJycpIHsKCQkJcHJpbnQg IjxociBub3NoYWRlPlxuIiwKCQkJICAgICI8ZGl2IGFsaWduPVwiY2VudGVyXCI+RG93bmxvYWQg dGhpcyBkaXJlY3RvcnkgaW4gIjsKCgkJCSMgTWFuZ2xlIHRoZSBmaWxlbmFtZSBzbyBicm93c2Vy cyBzaG93IGEgcmVhc29uYWJsZQoJCQkjIGZpbGVuYW1lIHRvIGRvd25sb2FkLgoJCQlwcmludCAm bGluaygidGFyYmFsbCIsICIuLyRiYXNlZmlsZS50YXIuZ3okcXVlcnkiCgkJCQkuICgkcXVlcnkg PyAiJiIgOiAiPyIpIC4gInRhcmJhbGw9MSIpOwoJCQlpZiAoJENNRHt6aXB9KSB7CgkJCQlwcmlu dCAiIG9yICIsCgkJCQkgICAgJmxpbmsoInppcCBhcmNoaXZlIiwgIi4vJGJhc2VmaWxlLnppcCRx dWVyeSIKCQkJCQkuICgkcXVlcnkgPyAiJiIgOiAiPyIpIC4gInRhcmJhbGw9MSIpOwoJCQl9CgkJ CXByaW50ICI8L2Rpdj5cbiI7CgkJfQoJfQoKCWlmICgkZWRpdF9vcHRpb25fZm9ybSB8fCBkZWZp bmVkKCRpbnB1dHsib3B0aW9ucyJ9KSkgewoKCQlteSAkZm9ybXdoZXJlID0gJHNjcmlwdHdoZXJl OwoJCSRmb3Jtd2hlcmUgPX4gc3xBdHRpYy8/JHx8IGlmICgkaW5wdXR7J2hpZGVhdHRpYyd9KTsK CgkJcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdldFwiIGFjdGlvbj1cIiR7Zm9ybXdoZXJlfVwiPlxu IjsKCQlwcmludCAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY29wdFwiIHZhbHVlPVwi MVwiPlxuIjsKCQlpZiAoJGN2c3RyZWUgbmUgJGN2c3RyZWVkZWZhdWx0KSB7CgkJCXByaW50CgkJ CSAgICAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY3Zzcm9vdFwiIHZhbHVlPVwiJGN2 c3RyZWVcIj5cbiI7CgkJfQoJCXByaW50ICI8Y2VudGVyPlxuPHRhYmxlIGNlbGxwYWRkaW5nPVwi MFwiIGNlbGxzcGFjaW5nPVwiMFwiPiI7CgkJcHJpbnQgIlxuPHRyIHN0eWxlPVwiYmFja2dyb3Vu ZC1jb2xvcjogJGNvbHVtbkhlYWRlckNvbG9yRGVmYXVsdFwiPlxuIjsKCQlwcmludCAiPHRoIGNv bHNwYW49XCIyXCI+UHJlZmVyZW5jZXM8L3RoPlxuPC90cj5cbiI7CgkJcHJpbnQgIjx0cj5cbjx0 ZD4iOwoJCXByaW50ICI8bGFiZWwgZm9yPVwic29ydGJ5XCIgYWNjZXNza2V5PVwiRlwiPlNvcnQg ZmlsZXMgYnkgIjsKCQlwcmludCAiPC9sYWJlbD48c2VsZWN0IGlkPVwic29ydGJ5XCIgbmFtZT1c InNvcnRieVwiPlxuIjsKCQlwcmludCAiPG9wdGlvbiB2YWx1ZT1cIlwiPkZpbGU8L29wdGlvbj5c biI7CgkJcHJpbnQgIjxvcHRpb24iLCAkYnlkYXRlID8gIiBzZWxlY3RlZCIgOiAiIiwKCQkgICAg IiB2YWx1ZT1cImRhdGVcIj5BZ2U8L29wdGlvbj5cbiI7CgkJcHJpbnQgIjxvcHRpb24iLCAkYnlh dXRob3IgPyAiIHNlbGVjdGVkIiA6ICIiLAoJCSAgICAiIHZhbHVlPVwiYXV0aG9yXCI+QXV0aG9y PC9vcHRpb24+XG4iCgkJICAgIGlmICgkc2hvd19hdXRob3IpOwoJCXByaW50ICI8b3B0aW9uIiwg JGJ5cmV2ID8gIiBzZWxlY3RlZCIgOiAiIiwKCQkgICAgIiB2YWx1ZT1cInJldlwiPlJldmlzaW9u PC9vcHRpb24+XG4iOwoJCXByaW50ICI8b3B0aW9uIiwgJGJ5bG9nID8gIiBzZWxlY3RlZCIgOiAi IiwKCQkgICAgIiB2YWx1ZT1cImxvZ1wiPkxvZyBtZXNzYWdlPC9vcHRpb24+XG4iOwoJCXByaW50 ICI8L3NlbGVjdD5cbjwvdGQ+XG4iOwoJCXByaW50ICI8dGQ+PGxhYmVsIGZvcj1cImxvZ3NvcnRc IiBhY2Nlc3NrZXk9XCJMXCI+IjsKCQlwcmludCAiU29ydCBsb2cgYnk6IDwvbGFiZWw+IjsKCQlw cmludExvZ1NvcnRTZWxlY3QoMCk7CgkJcHJpbnQgIjwvdGQ+XG48L3RyPlxuIjsKCQlwcmludCAi PHRyPlxuPHRkPjxsYWJlbCBmb3I9XCJmXCIgYWNjZXNza2V5PVwiRFwiPiI7CgkJcHJpbnQgIkRp ZmYgZm9ybWF0OiA8L2xhYmVsPiI7CgkJcHJpbnREaWZmU2VsZWN0KDApOwoJCXByaW50ICI8L3Rk PlxuIjsKCQlwcmludCAiPHRkPjxsYWJlbCBmb3I9XCJoaWRlYXR0aWNcIiBhY2Nlc3NrZXk9XCJB XCI+IjsKCQlwcmludCAiU2hvdyBBdHRpYyBmaWxlczogPC9sYWJlbD4iOwoJCXByaW50ICI8aW5w dXQgaWQ9XCJoaWRlYXR0aWNcIiBuYW1lPVwiaGlkZWF0dGljXCIgdHlwZT1cImNoZWNrYm94XCIi LAoJCSAgICAkaW5wdXR7J2hpZGVhdHRpYyd9ID8gIiBjaGVja2VkIiA6ICIiLAoJCSAgICAgIj48 L3RkPlxuPC90cj5cbiI7CgkJcHJpbnQgIjx0cj5cbjx0ZCBhbGlnbj1cImNlbnRlclwiIGNvbHNw YW49XCIyXCI+IjsKCQlwcmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNoYW5n ZSBPcHRpb25zXCIgYWNjZXNza2V5PVwiQ1wiPiI7CgkJcHJpbnQgIjwvdGQ+XG48L3RyPlxuPC90 YWJsZT5cbjwvY2VudGVyPlxuPC9mb3JtPlxuIjsKCX0KCWh0bWxfZm9vdGVyKCk7Cn0KCiMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBWaWV3IEZpbGVzCiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKZWxzaWYgKC1mICRmdWxsbmFtZSAuICcsdicpIHsKCglpZiAoZm9yYmlk ZGVuX2ZpbGUoJGZ1bGxuYW1lKSkgewoJCWZhdGFsKCc0MDMgRm9yYmlkZGVuJywKCQkgICAgICAn QWNjZXNzIGZvcmJpZGRlbi4gIFRoaXMgZmlsZSBpcyBtZW50aW9uZWQgaW4gQEZvcmJpZGRlbkZp bGVzJyk7CgkJcmV0dXJuOwoJfQoKCSN4aGNoZW4KCWlmIChkZWZpbmVkKCRpbnB1dHsnZ3JhcGgn fSkpIHsKCQkmZG9HcmFwaCgkZnVsbG5hbWUpOwoJCWV4aXQ7Cgl9CgoJaWYgKGRlZmluZWQoJGlu cHV0eydyZXYnfSkgfHwgJGRvQ2hlY2tvdXQpIHsKCQkmZG9DaGVja291dCgkZnVsbG5hbWUsICRp bnB1dHsncmV2J30pOwoJCWd6aXBjbG9zZSgpOwoJCWV4aXQ7Cgl9CgoJaWYgKGRlZmluZWQoJGlu cHV0eydhbm5vdGF0ZSd9KSAmJiAkYWxsb3dfYW5ub3RhdGUpIHsKCQkmZG9Bbm5vdGF0ZSgkaW5w dXR7J2Fubm90YXRlJ30pOwoJCWd6aXBjbG9zZSgpOwoJCWV4aXQ7Cgl9CgoJaWYgKGRlZmluZWQo JGlucHV0eydyMSd9KSAmJiBkZWZpbmVkKCRpbnB1dHsncjInfSkpIHsKCQkmZG9EaWZmKAoJCQkk ZnVsbG5hbWUsICAgICAkaW5wdXR7J3IxJ30sCgkJCSRpbnB1dHsndHIxJ30sICRpbnB1dHsncjIn fSwKCQkJJGlucHV0eyd0cjInfSwgJGlucHV0eydmJ30KCQkpOwoJCWd6aXBjbG9zZSgpOwoJCWV4 aXQ7Cgl9CglwcmludCgiZ29pbmcgdG8gZG9sb2coJGZ1bGxuYW1lKVxuIikgaWYgKCR2ZXJib3Nl KTsKCSZkb0xvZygkZnVsbG5hbWUpOwoKCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoJ IyBWaWV3IERpZmYKCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp9IGVsc2lmICgkZnVs bG5hbWUgPX4gcy9cLmRpZmYkLy8gJiYgLWYgJGZ1bGxuYW1lIC4gIix2IiAmJiAkaW5wdXR7J3Ix J30KICAgICYmICRpbnB1dHsncjInfSkKewoKCSMgJHdoZXJlLWRpZmYtcmVtb3ZhbCBpZiAnY3Zz IHJkaWZmJyBpcyB1c2VkCgkjIC4uIGJ1dCAnY3ZzIHJkaWZmJ2RvZXNuJ3Qgc3VwcG9ydCBzb21l IG9wdGlvbnMKCSMgcmNzZGlmZiBkb2VzICgtdyBhbmQgLXApLCBzbyBpdCBpcyBkaXNhYmxlZAoJ IyAkd2hlcmUgPX4gcy9cLmRpZmYkLy87CgoJIyBBbGxvdyBkaWZmcyB1c2luZyB0aGUgIi5kaWZm IiBleHRlbnNpb24KCSMgc28gdGhhdCBicm93c2VycyB0aGF0IGRlZmF1bHQgdG8gdGhlIFVSTAoJ IyBmb3IgYSBzYXZlIGZpbGVuYW1lIGRvbid0IHNhdmUgZGlmZidzIGFzCgkjIGUuZy4gZm9vLmMK CSZkb0RpZmYoCgkJJGZ1bGxuYW1lLCAgICAgJGlucHV0eydyMSd9LCAkaW5wdXR7J3RyMSd9LCAk aW5wdXR7J3IyJ30sCgkJJGlucHV0eyd0cjInfSwgJGlucHV0eydmJ30KCSk7CglnemlwY2xvc2Uo KTsKCWV4aXQ7Cn0gZWxzaWYgKCgkbmV3bmFtZSA9ICRmdWxsbmFtZSkgPX4gc3wvKFteL10rKSR8 L0F0dGljLyQxfCAmJiAtZiAkbmV3bmFtZSAuICIsdiIpCnsKCgkjIFRoZSBmaWxlIGhhcyBiZWVu IHJlbW92ZWQgYW5kIGlzIGluIHRoZSBBdHRpYy4KCSMgU2VuZCBhIHJlZGlyZWN0IHBvaW50aW5n IHRvIHRoZSBmaWxlIGluIHRoZSBBdHRpYy4KCShteSAkbmV3cGxhY2UgPSAkc2NyaXB0d2hlcmUp ID1+IHN8LyhbXi9dKykkfC9BdHRpYy8kMXw7CglpZiAoJEVOVntRVUVSWV9TVFJJTkd9IG5lICIi KSB7CgkJcmVkaXJlY3QoIiR7bmV3cGxhY2V9PyRFTlZ7UVVFUllfU1RSSU5HfSIpOwoJfSBlbHNl IHsKCQlyZWRpcmVjdCgkbmV3cGxhY2UpOwoJfQoJZXhpdDsKfSBlbHNpZiAoMCAmJiAobXkgQGZp bGVzID0gJnNhZmVnbG9iKCRmdWxsbmFtZSAuICIsdiIpKSkgewoJaHR0cF9oZWFkZXIoInRleHQv cGxhaW4iKTsKCXByaW50ICJZb3UgbWF0Y2hlZCB0aGUgZm9sbG93aW5nIGZpbGVzOlxuIjsKCXBy aW50IGpvaW4gKCJcbiIsIEBmaWxlcyk7CgoJIyBGaW5kIHRoZSB0YWdzIGZyb20gZWFjaCBmaWxl CgkjIERpc3BsYXkgYSBmb3JtIG9mZmVyaW5nIGRpZmZzIGJldHdlZW4gc2FpZCB0YWdzCn0gZWxz ZSB7CglteSAkZmggPSBkbyB7IGxvY2FsICgqRkgpOyB9OwoJbXkgKCR4dHJhLCAkbW9kdWxlKTsK CgkjIEFzc3VtZSBpdCdzIGEgbW9kdWxlIG5hbWUgd2l0aCBhIHBvdGVudGlhbCBwYXRoIGZvbGxv d2luZyBpdC4KCSR4dHJhID0gKCgkbW9kdWxlID0gJHdoZXJlKSA9fiBzfC8uKnx8KSA/ICQmIDog Jyc7CgoJIyBJcyB0aGVyZSBhbiBpbmRleGVkIHZlcnNpb24gb2YgbW9kdWxlcz8KCWlmIChvcGVu KCRmaCwgIjwgJGN2c3Jvb3QvQ1ZTUk9PVC9tb2R1bGVzIikpIHsKCQl3aGlsZSAoPCRmaD4pIHsK CQkJaWYgKC9eKFxTKylccysoXFMrKS9vICYmICRtb2R1bGUgZXEgJDEKCQkJICAgICYmIC1kICIk Y3Zzcm9vdC8kMiIgJiYgJG1vZHVsZSBuZSAkMikKCQkJewoJCQkJcmVkaXJlY3QoIiRzY3JpcHRu YW1lLyQyJHh0cmEkcXVlcnkiKTsKCQkJfQoJCX0KCX0KCWZhdGFsKCI0MDQgTm90IEZvdW5kIiwK CSAgICAgICclczogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScsCgkgICAgICAkd2hlcmUpOwp9 CgpnemlwY2xvc2UoKTsKCiMjIEVuZCBNQUlOCgpzdWIgcHJpbnREaWZmU2VsZWN0KCQpIHsKCW15 ICgkdXNlX2phdmFfc2NyaXB0KSA9IEBfOwoJbXkgJGYgPSAkaW5wdXR7J2YnfTsKCglwcmludCAn PHNlbGVjdCBpZD0iZiIgbmFtZT0iZiInOwoJcHJpbnQgJyBvbmNoYW5nZT0idGhpcy5mb3JtLnN1 Ym1pdCgpIicgaWYgJHVzZV9qYXZhX3NjcmlwdDsKCXByaW50ICI+XG4iOwoKCWxvY2FsICRfOwoJ Zm9yIChARElGRlRZUEVTKSB7CgkJcHJpbnRmKCI8b3B0aW9uIHZhbHVlPVwiJXNcIiVzPiVzPC9v cHRpb24+XG4iLCAkXywKCQkgICAgJGYgZXEgJF8gPyAnIHNlbGVjdGVkJyA6ICcnLCAiXHUkRElG RlRZUEVTeyRffXsnZGVzY3InfSIpOwoJfQoKCXByaW50ICI8L3NlbGVjdD4iOwp9CgpzdWIgcHJp bnRMb2dTb3J0U2VsZWN0KCQpIHsKCW15ICgkdXNlX2phdmFfc2NyaXB0KSA9IEBfOwoKCXByaW50 ICc8c2VsZWN0IGlkPSJsb2dzb3J0IiBuYW1lPSJsb2dzb3J0Iic7CglwcmludCAnIG9uY2hhbmdl PSJ0aGlzLmZvcm0uc3VibWl0KCkiJyBpZiAkdXNlX2phdmFfc2NyaXB0OwoJcHJpbnQgIj5cbiI7 CgoJbG9jYWwgJF87Cglmb3IgKEBMT0dTT1JUS0VZUykgewoJCXByaW50ZigiPG9wdGlvbiB2YWx1 ZT1cIiVzXCIlcz4lczwvb3B0aW9uPlxuIiwgJF8sCgkJICAgICRsb2dzb3J0IGVxICRfID8gJyBz ZWxlY3RlZCcgOiAnJywKCQkgICAgIlx1JExPR1NPUlRLRVlTeyRffXsnZGVzY3InfSIpOwoJfQoK CXByaW50ICI8L3NlbGVjdD4iOwp9CgpzdWIgZmluZExhc3RNb2RpZmllZFN1YmRpcnMoQCkgewoJ bXkgKEBkaXJzKSA9IEBfOwoJbXkgKCRkaXJuYW1lLCBAZmlsZXMpOwoKCWZvcmVhY2ggJGRpcm5h bWUgKEBkaXJzKSB7CgkJbmV4dCBpZiAoJGRpcm5hbWUgZXEgIi4iKTsKCQluZXh0IGlmICgkZGly bmFtZSBlcSAiLi4iKTsKCQlteSAoJGRpcikgPSAiJGZ1bGxuYW1lLyRkaXJuYW1lIjsKCQluZXh0 IGlmICghLWQgJGRpcik7CgoJCW15ICgkbGFzdG1vZCkgICAgID0gdW5kZWY7CgkJbXkgKCRsYXN0 bW9kdGltZSkgPSB1bmRlZjsKCQlteSAkZGggPSBkbyB7IGxvY2FsICgqREgpOyB9OwoKCQlvcGVu ZGlyKCRkaCwgJGRpcikgb3IgbmV4dDsKCQlteSAoQGZpbGVuYW1lcykgPSByZWFkZGlyKCRkaCk7 CgkJY2xvc2VkaXIoJGRoKTsKCgkJZm9yZWFjaCBteSAkZmlsZW5hbWUgKEBmaWxlbmFtZXMpIHsK CQkJJGZpbGVuYW1lID0gIiRkaXJuYW1lLyRmaWxlbmFtZSI7CgkJCW15ICgkZmlsZSkgPSAiJGZ1 bGxuYW1lLyRmaWxlbmFtZSI7CgkJCW5leHQgaWYgKCRmaWxlbmFtZSAhfiAvLHYkLyB8fCAhLWYg JGZpbGUpOwoKCQkJIyBTa2lwIGZvcmJpZGRlbiBmaWxlcy4KCQkJKG15ICRmID0gJGZpbGUpID1+ IHMvLHYkLy87CgkJCW5leHQgaWYgZm9yYmlkZGVuX2ZpbGUoJGYpOwoKCQkJJGZpbGVuYW1lID1+ IHMvLHYkLy87CgkJCW15ICRtb2R0aW1lID0gLU0gJGZpbGU7CgoJCQlpZiAoIWRlZmluZWQoJGxh c3Rtb2QpIHx8ICRtb2R0aW1lIDwgJGxhc3Rtb2R0aW1lKSB7CgkJCQkkbGFzdG1vZCAgICAgPSAk ZmlsZW5hbWU7CgkJCQkkbGFzdG1vZHRpbWUgPSAkbW9kdGltZTsKCQkJfQoJCX0KCQlwdXNoIChA ZmlsZXMsICRsYXN0bW9kKSBpZiAoZGVmaW5lZCgkbGFzdG1vZCkpOwoJfQoJcmV0dXJuIEBmaWxl czsKfQoKc3ViIGh0bWxpZnlfc3ViKCYkKSB7CgkobXkgJHByb2MsIGxvY2FsICRfKSA9IEBfOwoJ bXkgQGEgPSBzcGxpdCAobWAoPGEgW14+XSs+W148XSo8L2E+KWBpKTsKCW15ICRsaW5rZWQ7Cglt eSAkcmVzdWx0ID0gJyc7CgoJd2hpbGUgKCgkXywgJGxpbmtlZCkgPSBzcGxpY2UoQGEsIDAsIDIp KSB7CgkJJiRwcm9jKCk7CgkJJHJlc3VsdCAuPSAkXyAgICAgIGlmIGRlZmluZWQoJF8pOwoJCSRy ZXN1bHQgLj0gJGxpbmtlZCBpZiBkZWZpbmVkKCRsaW5rZWQpOwoJfQoKCSRyZXN1bHQ7Cn0KCnN1 YiBodG1saWZ5KCQ7JCkgewoJKGxvY2FsICRfLCBteSAkZXh0cmEpID0gQF87CgoJJF8gPSBodG1s cXVvdGUoJF8pOwoKCSMgZ2V0IFVSTCdzIGFzIGxpbmsKCXN7CiAgICAgIChodHRwfGZ0cHxodHRw cyk6Ly9cUysKICAgICB9ewoJICZsaW5rKCQmLCBodG1sdW5xdW90ZSgkJikpCiAgICAgfWVneDsK CgkjIGdldCBlLW1haWxzIGFzIGxpbmsKCSRfID0gaHRtbGlmeV9zdWIgewoJCXM8CgkgIFtcdys9 XC0uIV0rQFtcd1wtXSsoXC5bXHdcLV0rKSsKCSAgICA+PAoJICAgICAgJmxpbmsoJCYsICJtYWls dG86JCYiKQoJCT5lZ2l4OwoJICAgIH0KCSAgICAkXzsKCglpZiAoJGV4dHJhKSB7CgoJCSMgZ2V0 IFBSICMncyBhcyBsaW5rOiAiUFIjbm5ubiIgIlBSOiBubm5uLCAuLi4iICJQUiBubm5uLCAuLi4i ICJiaW4vbm5ubiIKCQlpZiAoZGVmaW5lZCgkcHJjZ2kpICYmIGRlZmluZWQoJHJlX3Bya2V5d29y ZCkpCgkJewoJCQlteSAkcHJldjsKCgkJCWRvIHsKCQkJCSRwcmV2ID0gJF87CgoJCQkJJF8gPSBo dG1saWZ5X3N1YiB7CgkJCQkJc3sKCQkgICAgICAoXGIkcmVfcHJrZXl3b3JkWzpcI10/XHMqCgkJ ICAgICAgICg/OgoJCQlcIz8KCQkJXGQrWyxcc11ccyoKCQkgICAgICAgKSoKCQkgICAgICAgXCM/ KQoJCSAgICAgIChcZCspXGIKCQkgICAgIH17CgkJCSAkMSAuICZsaW5rKCQyLCBzcHJpbnRmKCRw cmNnaSwgJDIpKQoJCSAgICAgfWVnaXg7CgkJCQkgICAgfQoJCQkJICAgICRfOwoJCQl9IHdoaWxl ICgkXyBuZSAkcHJldik7CgoJCQlpZiAoZGVmaW5lZCgkcmVfcHJjYXRlZ29yaWVzKSkgewoJCQkJ JF8gPSBodG1saWZ5X3N1YiB7CgkJCQkJc3sKCQkJICAoXGIkcmVfcHJjYXRlZ29yaWVzLyhcZCsp XGIpCgkJCX17CgkJCQkmbGluaygkMSwgc3ByaW50ZigkcHJjZ2ksICQyKSkKCQkJfWVnb3g7CgkJ CQkgICAgfQoJCQkJICAgICRfOwoJCQl9CgkJfQoKCQkjIGdldCBtYW5wYWdlIHNwZWNzIGFzIGxp bms6ICJmb28uMSIgImZvbygxKSIKCQlpZiAoZGVmaW5lZCgkbWFuY2dpKSkgewoJCQkkXyA9IGh0 bWxpZnlfc3ViIHsKCQkJCXN7CgkJICAoXGIoW2EtekEtWl1bXHcuXSspCgkJICAgKD86CgkJICAg IFwoIChbMC05bl0pIFwpXEIKCQkgICAgfAoJCSAgICBcLihbMC05bl0pXGIKCQkgICApCgkJICAp CgkJIH17CgkJICAgICAmbGluaygkMSwgc3ByaW50ZigkbWFuY2dpLCBkZWZpbmVkKCQzKSA/ICQz IDogJDQsICQyKSkKCQkgfWVneDsKCQkJICAgIH0KCQkJICAgICRfOwoJCX0KCX0KCgkkXzsKfQoK I3hoY2hlbgpzdWIgaHRtbGpzKCQpCnsKCWxvY2FsICgkXykgPSBAXzsKCglzL1xcL1xcXFwvZzsK CXMvXCcvXFxcJy9nOwoJcy9cbi9cXG4vZzsKCXMvXC8vXFxcLy9nOwoJJF87Cn0KCnN1YiBzcGFj ZWRIdG1sVGV4dCgkOyQpIHsKCWxvY2FsICRfID0gJF9bMF07CglteSAkdHMgPSAkX1sxXSB8fCAk dGFic3RvcDsKCgkjIEN1dCB0cmFpbGluZyBzcGFjZXMgYW5kIHRhYnMKCXMvWyBcdF0rJC8vOwoK CWlmIChkZWZpbmVkKCR0cykpIHsKCgkJIyBFeHBhbmQgdGFicwoJCTEgd2hpbGUgcy9cdCsvJyAn IHggKGxlbmd0aCgkJikgKiAkdHMgLSBsZW5ndGgoJGApICUgJHRzKS9lCgl9CgoJIyByZXBsYWNl IDx0YWI+IGFuZCA8c3BhY2U+IChcMDAxIGlzIHRvIHByb3RlY3QgdXMgZnJvbSBodG1saWZ5KQoJ IyBnemlwIGNhbiBtYWtlIGV4Y2VsbGVudCB1c2Ugb2YgdGhpcyByZXBlYXRpbmcgcGF0dGVybiA6 LSkKCWlmICgkaHJfYnJlYWthYmxlKSB7CgoJCSMgbWFrZSBldmVyeSBvdGhlciBzcGFjZSAnYnJl YWthYmxlJwoJCXMvICAvIFwwMDFuYnNwOy9nOyAgICAjIDIgKiA8c3BhY2U+CgkJICAgICAgICAg ICAgICAgICAgICAgICMgbGVhdmUgc2luZ2xlIHNwYWNlIGFzIGl0IGlzCgl9IGVsc2UgewoJCXMv IC9cMDAxbmJzcDsvZzsKCX0KCgkkXyA9IGh0bWxpZnkoJF8sICRhbGxvd19zb3VyY2VfZXh0cmEp OwoKCSMgdW5lc2NhcGUKCXkvXDAwMS8mLzsKCglyZXR1cm4gJF87Cn0KCiMgTm90ZSB0aGF0IHRo aXMgZG9lc24ndCBodG1scXVvdGUgdGhlIGZpcnN0IGFyZ3VtZW50Li4uCnN1YiBsaW5rKCQkKSB7 CglteSAoJG5hbWUsICR1cmwpID0gQF87CgoJJHVybCA9fiBzLzovc3ByaW50ZigiJSUlMDJ4Iiwg b3JkKCQmKSkvZWcKCSAgICBpZiAkdXJsID1+IC9eW15hLXpdLzsgICAgIyByZWxhdGl2ZQoKCXNw cmludGYgJzxhIGhyZWY9IiVzIj4lczwvYT4nLCBocmVmcXVvdGUoJHVybCksICRuYW1lOwp9Cgpz dWIgcmV2Y21wKCQkKSB7CglteSAoJHJldjEsICRyZXYyKSA9IEBfOwoKCSMgbWFrZSBubyBjb21w YXJpc29uIGZvciBhIHRhZyBvciBhIGJyYW5jaAoJcmV0dXJuIDAgaWYgJHJldjEgPX4gL1teXGQu XS8gfHwgJHJldjIgPX4gL1teXGQuXS87CgoJbXkgKEByMSkgPSBzcGxpdCAoL1wuLywgJHJldjEp OwoJbXkgKEByMikgPSBzcGxpdCAoL1wuLywgJHJldjIpOwoJbXkgKCRhLCAkYik7CgoJd2hpbGUg KCgkYSA9IHNoaWZ0IChAcjEpKSAmJiAoJGIgPSBzaGlmdCAoQHIyKSkpIHsKCQlpZiAoJGEgIT0g JGIpIHsKCQkJcmV0dXJuICRhIDw9PiAkYjsKCQl9Cgl9CglpZiAoQHIxKSB7IHJldHVybiAxOyB9 CglpZiAoQHIyKSB7IHJldHVybiAtMTsgfQoJcmV0dXJuIDA7Cn0KCnN1YiBmYXRhbCgkJEApIHsK CW15ICgkZXJyY29kZSwgJGZvcm1hdCwgQGFyZ3MpID0gQF87CglpZiAoJGlzX21vZF9wZXJsKSB7 CgkJQXBhY2hlLT5yZXF1ZXN0LT5zdGF0dXMoKHNwbGl0ICgvIC8sICRlcnJjb2RlKSlbMF0pOwoJ fSBlbHNlIHsKCQlwcmludCAiU3RhdHVzOiAkZXJyY29kZVxyXG4iOwoJfQoJaHRtbF9oZWFkZXIo IkVycm9yIik7CglwcmludCAiPHA+RXJyb3I6ICIsCgkgIHNwcmludGYoJGZvcm1hdCwgbWFwKGh0 bWxxdW90ZSgkXyksIEBhcmdzKSksCgkgICI8L3A+XG4iOwoJaHRtbF9mb290ZXIoKTsKCWV4aXQo MSk7Cn0KCnN1YiByZWRpcmVjdCgkKSB7CglteSAoJHVybCkgPSBAXzsKCWlmICgkaXNfbW9kX3Bl cmwpIHsKCQlBcGFjaGUtPnJlcXVlc3QtPnN0YXR1cygzMDEpOwoJCUFwYWNoZS0+cmVxdWVzdC0+ aGVhZGVyX291dChMb2NhdGlvbiA9PiAkdXJsKTsKCX0gZWxzZSB7CgkJcHJpbnQgIlN0YXR1czog MzAxIE1vdmVkXHJcbiI7CgkJcHJpbnQgIkxvY2F0aW9uOiAkdXJsXHJcbiI7Cgl9CglodG1sX2hl YWRlcigiTW92ZWQiKTsKCXByaW50ICI8cD5UaGlzIGRvY3VtZW50IGlzIGxvY2F0ZWQgIiwgJmxp bmsoJ2hlcmUnLCAkdXJsKSwgIjwvcD5cbiI7CglodG1sX2Zvb3RlcigpOwoJZXhpdCgxKTsKfQoK c3ViIHNhZmVnbG9iKCQpIHsKCW15ICgkZmlsZW5hbWUpID0gQF87CglteSAoJGRpcm5hbWUpOwoJ bXkgKEByZXN1bHRzKTsKCW15ICRkaCA9IGRvIHsgbG9jYWwgKCpESCk7IH07CgoJKCRkaXJuYW1l ID0gJGZpbGVuYW1lKSA9fiBzfC9bXi9dKyR8fDsKCSRmaWxlbmFtZSA9fiBzfC4qL3x8OwoKCWlm IChvcGVuZGlyKCRkaCwgJGRpcm5hbWUpKSB7CgkJbXkgJGdsb2IgPSAkZmlsZW5hbWU7CgkJbXkg JHQ7CgoJCSMJdHJhbnNmb3JtIGZpbGVuYW1lIGZyb20gZ2xvYiB0byByZWdleC4gIERlYWwgd2l0 aDoKCQkjCVssIHssID8sICogYXMgZ2xvYiBjaGFycwoJCSMJbWFrZSBzdXJlIHRvIGVzY2FwZSBh bGwgb3RoZXIgcmVnZXggY2hhcnMKCQkkZ2xvYiA9fiBzLyhbXC5cKFwpXHxcK10pL1xcJDEvZzsK CQkkZ2xvYiA9fiBzL1wqLy4qL2c7CgkJJGdsb2IgPX4gcy9cPy8uL2c7CgkJJGdsb2IgPX4gcy97 KFtefV0rKX0vKCR0ID0gJDEpID1+IHMtLC18LWc7ICIoJHQpIi9lZzsKCQlmb3JlYWNoIChyZWFk ZGlyKCRkaCkpIHsKCgkJCWlmICgvXiR7Z2xvYn0kLykgewoJCQkJcHVzaCAoQHJlc3VsdHMsICIk ZGlybmFtZS8iIC4gJF8pOwoJCQl9CgkJfQoJCWNsb3NlZGlyKCRkaCk7Cgl9CgoJQHJlc3VsdHM7 Cn0KCnN1YiBzZWFyY2hfcGF0aCgkKSB7CglteSAoJGNvbW1hbmQpID0gQF87CglteSAkZDsKCglm b3IgJGQgKHNwbGl0ICgvOi8sICRjb21tYW5kX3BhdGgpKSB7CgkJcmV0dXJuICIkZC8kY29tbWFu ZCIgaWYgLXggIiRkLyRjb21tYW5kIjsKCX0KCgknJzsKfQoKc3ViIGdldE1pbWVUeXBlRnJvbVN1 ZmZpeCgkKSB7CglteSAoJGZ1bGxuYW1lKSA9IEBfOwoJbXkgKCRtaW1ldHlwZSwgJHN1ZmZpeCk7 CglteSAkZmggPSBkbyB7IGxvY2FsICgqRkgpOyB9OwoKCSgkc3VmZml4ID0gJGZ1bGxuYW1lKSA9 fiBzL14uKlwuKFteLl0qKSQvJDEvOwoJJG1pbWV0eXBlID0gJE1UWVBFU3skc3VmZml4fTsKCSRt aW1ldHlwZSA9ICRNVFlQRVN7JyonfSBpZiAoISRtaW1ldHlwZSk7CgoJaWYgKCEkbWltZXR5cGUg JiYgLWYgJG1pbWVfdHlwZXMpIHsKCgkJIyBva2V5LCB0aGlzIGlzIHNvbWV0aGluZyBzcGVjaWFs IC0gc2VhcmNoIHRoZQoJCSMgbWltZS50eXBlcyBkYXRhYmFzZQoJCW9wZW4oJGZoLCAiPCRtaW1l X3R5cGVzIik7CgkJd2hpbGUgKDwkZmg+KSB7CgkJCWlmICgkXyA9fiAvXlxzKihcUytcL1xTKyku KlxiJHN1ZmZpeFxiLykgewoJCQkJJG1pbWV0eXBlID0gJDE7CgkJCQlsYXN0OwoJCQl9CgkJfQoJ CWNsb3NlKCRmaCk7Cgl9CgoJIyBva2V5LCBkaWRuJ3QgZmluZCBhbnl0aGluZyB1c2VmdWwgLi4K CWlmICghKCRtaW1ldHlwZSA9fiAvXFNcL1xTLykpIHsKCQkkbWltZXR5cGUgPSAidGV4dC9wbGFp biI7Cgl9CglyZXR1cm4gJG1pbWV0eXBlOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCiMgcmVhZCBmaXJzdCBsaW5lcyBsaWtlIGhlYWQoMSkKIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwpzdWIgaGVhZCgkOyQpIHsKCW15ICRmaCAgICAgICAgPSAkX1swXTsKCW15ICRs aW5lY291bnQgPSAkX1sxXSB8fCAxMDsKCglteSBAYnVmOwoKCWlmICgkbGluZWNvdW50ID4gMCkg ewoJCW15ICRpOwoJCWZvciAoJGkgPSAwIDsgIWVvZigkZmgpICYmICRpIDwgJGxpbmVjb3VudCA7 ICRpKyspIHsKCQkJcHVzaCBAYnVmLCBzY2FsYXIgPCRmaD47CgkJfQoJfSBlbHNlIHsKCQlAYnVm ID0gPCRmaD47Cgl9CgoJQGJ1ZjsKfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoj IHNjYW4gdmltIGFuZCBFbWFjcyBkaXJlY3RpdmVzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMKc3ViIHNjYW5fZGlyZWN0aXZlcyhAKSB7CglteSAkdHMgPSB1bmRlZjsKCglmb3IgKEBf KSB7CgkJJHRzID0gJDEgaWYgL1xiKD86dHN8dGFic3RvcHx0YWItd2lkdGgpWzo9XVxzKihbMS05 XVxkKilcYi87Cgl9CgoJKCd0YWJzdG9wJyA9PiAkdHMpOwp9CgpzdWIgb3Blbk91dHB1dEZpbHRl cigpIHsKCXJldHVybiBpZiAhZGVmaW5lZCgkb3V0cHV0X2ZpbHRlcikgfHwgJG91dHB1dF9maWx0 ZXIgZXEgJyc7CgoJb3BlbihTVERPVVQsICJ8LSIpIGFuZCByZXR1cm47CgoJIyBjaGlsZCBvZiBj aGlsZAoJb3BlbihTVERFUlIsICc+L2Rldi9udWxsJyk7CglleGVjKCRvdXRwdXRfZmlsdGVyKSBv ciBleGl0IC0xOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgc2hvdyBBbm5v dGF0aW9uCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKc3ViIGRvQW5ub3RhdGUoJCQp IHsKCW15ICgkcmV2KSA9IEBfOwoJbXkgKCRwaWQpOwoJbXkgKCRwYXRobmFtZSwgJGZpbGVuYW1l KTsKCW15ICRyZWFkZXIgPSBkbyB7IGxvY2FsICgqRkgpOyB9OwoJbXkgJHdyaXRlciA9IGRvIHsg bG9jYWwgKCpGSCk7IH07CgoJIyBtYWtlIHN1cmUgdGhlIHJldmlzaW9ucyBhcmUgd2VsbGZvcm1l ZCwgZm9yIHNlY3VyaXR5CgkjIHJlYXNvbnMgLi4KCWlmICgkcmV2ID1+IC9bXlx3Ll0vKSB7CgkJ ZmF0YWwoIjQwNCBOb3QgRm91bmQiLAoJCSAgICAgICdNYWxmb3JtZWQgcXVlcnkgIiVzIicsCgkJ ICAgICAgJEVOVntRVUVSWV9TVFJJTkd9KTsKCX0KCgkoJHBhdGhuYW1lID0gJHdoZXJlKSA9fiBz LyhBdHRpY1wvKT9bXlwvXSokLy87CgkoJGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzL14uKlwvLy87 CgoJIyB0aGlzIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeQoJJHwgPSAxOwoJJHwgPSAwOyAgICAjIEZs dXNoCgoJIyBXb3JrIGFyb3VuZCBhIG1vZF9wZXJsIGJ1ZyAoPykgaW4gb3JkZXIgdG8gbWFrZSBv cGVuMigpIHdvcmsuCgkjIFNlYXJjaCBmb3IgInVudGllIFNURElOIiBpbiBtb2RfcGVybCBtYWls aW5nIGxpc3QgYXJjaGl2ZXMuCglteSAkb2xkX3N0ZGluOwoJaWYgKCRpc19tb2RfcGVybCAmJiAo JG9sZF9zdGRpbiA9IHRpZWQgKlNURElOKSkgewoJICBsb2NhbCAkXlcgPSB1bmRlZjsKCSAgdW50 aWUgKlNURElOOwoJfQoKCSMgdGhpcyBhbm5vdGF0ZSB2ZXJzaW9uIGlzIGJhc2VkIG9uIHRoZQoJ IyBjdnMgYW5ub3RhdGUtZGVtbyBQZXJsIHNjcmlwdCBieSBDeWNsaWMgU29mdHdhcmUKCSMgSXQg d2FzIHdyaXR0ZW4gYnkgQ3ljbGljIFNvZnR3YXJlLCBodHRwOi8vd3d3LmN5Y2xpYy5jb20vLCBh bmQgaXMgaW4KCSMgdGhlIHB1YmxpYyBkb21haW4uCgkjIHdlIGNvdWxkIGFiYW5kb24gdGhlIHVz ZSBvZiBybG9nLCByY3NkaWZmIGFuZCBjbyB1c2luZwoJIyB0aGUgY3Zzc2VydmVyIGluIGEgc2lt aWxpYXIgd2F5IG9uZSBkYXkgKC4uYWZ0ZXIgcmV3cml0ZSkKCSRwaWQgPSBvcGVuMigkcmVhZGVy LCAkd3JpdGVyLCAkQ01Ee2N2c30sIEBhbm5vdGF0ZV9vcHRpb25zLCAnc2VydmVyJykKCSAgICBv ciBmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwKCQkgICAgICdGYXRhbCBFcnJvciAtIHVuYWJs ZSB0byBvcGVuIGN2cyBmb3IgYW5ub3RhdGlvbicpOwoKCSMgUmUtdGllIFNURElOIGlmIHdlIGZp ZGRsZWQgYXJvdW5kIHdpdGggaXQgZWFybGllciwganVzdCB0byBiZSBzdXJlLgoJdGllKCpTVERJ TiwgcmVmKCRvbGRfc3RkaW4pLCAkb2xkX3N0ZGluKSBpZiAoJG9sZF9zdGRpbiAmJiAhdGllZCgq U1RESU4pKTsKCgkjIE9LLCBmaXJzdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuICBB IHNpbXBsaWZpZWQgZXhhbXBsZSBpczoKCSMgICAgIFJvb3QgL2hvbWUva2luZ2Rvbi96d29yay9j dnNyb290CgkjICAgICBBcmd1bWVudCBmb28veHgKCSMgICAgIERpcmVjdG9yeSBmb28KCSMgICAg IC9ob21lL2tpbmdkb24vendvcmsvY3Zzcm9vdC9mb28KCSMgICAgIERpcmVjdG9yeSAuCgkjICAg ICAvaG9tZS9raW5nZG9uL3p3b3JrL2N2c3Jvb3QKCSMgICAgIGFubm90YXRlCgkjIGFsdGhvdWdo IGFzIHlvdSBjYW4gc2VlIHRoZXJlIGFyZSBhIGZldyBtb3JlIGRldGFpbHMuCgoJcHJpbnQgJHdy aXRlciAiUm9vdCAkY3Zzcm9vdFxuIjsKCXByaW50ICR3cml0ZXIKCSAgICAiVmFsaWQtcmVzcG9u c2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIENoZWNrZWQtaW4gVXBkYXRlZCBNZXJnZWQgUmVt b3ZlZCBNIEVcbiI7CgoJIyBEb24ndCB3b3JyeSBhYm91dCBzZW5kaW5nIHZhbGlkLXJlcXVlc3Rz LCB0aGUgc2VydmVyIGp1c3QgbmVlZHMgdG8KCSMgc3VwcG9ydCAiYW5ub3RhdGUiIGFuZCBpZiBp dCBkb2Vzbid0LCB0aGVyZSBpc24ndCBhbnl0aGluZyB0byBiZSBkb25lLgoJcHJpbnQgJHdyaXRl ciAiVXNlVW5jaGFuZ2VkXG4iOwoJcHJpbnQgJHdyaXRlciAiQXJndW1lbnQgLXJcbiI7Cglwcmlu dCAkd3JpdGVyICJBcmd1bWVudCAkcmV2XG4iOwoJcHJpbnQgJHdyaXRlciAiQXJndW1lbnQgJHdo ZXJlXG4iOwoKCSMgVGhlIHByb3RvY29sIHJlcXVpcmVzIHVzIHRvIGZ1bGx5IGZha2UgYSB3b3Jr aW5nIGRpcmVjdG9yeSAoYXQKCSMgbGVhc3QgdG8gdGhlIHBvaW50IG9mIGluY2x1ZGluZyB0aGUg ZGlyZWN0b3JpZXMgZG93biB0byB0aGUgb25lCgkjIGNvbnRhaW5pbmcgdGhlIGZpbGUgaW4gcXVl c3Rpb24pLgoJIyBTbyBpZiAkd2hlcmUgaXMgImRpci9zZGlyL2ZpbGUiLCB0aGVuIEBkaXJzIHdp bGwgYmUgKCJkaXIiLCJzZGlyIiwiZmlsZSIpCglteSBAZGlycyA9IHNwbGl0ICgnLycsICR3aGVy ZSk7CglteSAkcGF0aCA9ICIiOwoJZm9yZWFjaCAoQGRpcnMpIHsKCgkJaWYgKCRwYXRoIGVxICIi KSB7CgoJCQkjIEluIG91ciBleGFtcGxlLCAkXyBpcyAiZGlyIi4KCQkJJHBhdGggPSAkXzsKCQl9 IGVsc2UgewoJCQlwcmludCAkd3JpdGVyICJEaXJlY3RvcnkgJHBhdGhcbiI7CgkJCXByaW50ICR3 cml0ZXIgIiRjdnNyb290LyRwYXRoXG4iOwoKCQkJIyBJbiBvdXIgZXhhbXBsZSwgJF8gaXMgInNk aXIiIGFuZCAkcGF0aCBiZWNvbWVzICJkaXIvc2RpciIKCQkJIyBBbmQgdGhlIG5leHQgdGltZSwg ImZpbGUiIGFuZCAiZGlyL3NkaXIvZmlsZSIgKHdoaWNoIHRoZW4gZ2V0cwoJCQkjIGlnbm9yZWQs IGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBzZW5kIERpcmVjdG9yeSBmb3IgdGhlIGZpbGUpLgoJ CQkkcGF0aCAuPSAiLyRfIjsKCQl9Cgl9CgoJIyBBbmQgdGhlIGxhc3QgIkRpcmVjdG9yeSIgYmVm b3JlICJhbm5vdGF0ZSIgaXMgdGhlIHRvcCBsZXZlbC4KCXByaW50ICR3cml0ZXIgIkRpcmVjdG9y eSAuXG4iOwoJcHJpbnQgJHdyaXRlciAiJGN2c3Jvb3RcbiI7CgoJcHJpbnQgJHdyaXRlciAiYW5u b3RhdGVcbiI7CgoJIyBPSywgd2UndmUgc2VudCBvdXIgY29tbWFuZCB0byB0aGUgc2VydmVyLiAg VGhpbmcgdG8gZG8gaXMgdG8KCSMgY2xvc2UgdGhlIHdyaXRlciBzaWRlIGFuZCBnZXQgYWxsIHRo ZSByZXNwb25zZXMuICBJZiAiY3ZzIHNlcnZlciIKCSMgd2VyZSBuaWNlciBhYm91dCBidWZmZXJp bmcsIHRoZW4gd2UgY291bGQganVzdCBsZWF2ZSBpdCBvcGVuLCBJIHRoaW5rLgoJY2xvc2UoJHdy aXRlcikgb3IgZGllICJjYW5ub3QgY2xvc2U6ICQhIjsKCglodHRwX2hlYWRlcigpOwoKCW5hdmln YXRlSGVhZGVyKCRzY3JpcHR3aGVyZSwgJHBhdGhuYW1lLCAkZmlsZW5hbWUsICRyZXYsICJhbm5v dGF0ZSIpOwoJcHJpbnQKCSAgICAiPGgzIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+QW5u b3RhdGlvbiBvZiAkcGF0aG5hbWUkZmlsZW5hbWUsIFJldmlzaW9uICRyZXY8L2gzPlxuIjsKCgkj IFJlYWR5IHRvIGdldCB0aGUgcmVzcG9uc2VzIGZyb20gdGhlIHNlcnZlci4KCSMgRm9yIGV4YW1w bGU6CgkjICAgICBFIEFubm90YXRpb25zIGZvciBmb28veHgKCSMgICAgIEUgKioqKioqKioqKioq KioqCgkjICAgICBNIDEuMyAgICAgICAgICAoa2luZ2RvbiAgMDYtU2VwLTk3KTogaGVsbG8KCSMg ICAgIG9rCglteSAoJGxpbmVOcikgPSAwOwoJbXkgKCRvbGRMcmV2LCAkb2xkTHVzcikgPSAoIiIs ICIiKTsKCW15ICgkcmV2cHJpbnQsICR1c3JwcmludCk7CgoJaWYgKCRhbm5UYWJsZSkgewoJCXBy aW50ICI8dGFibGUgc3R5bGU9XCJib3JkZXI6IG5vbmVcIiBjZWxsc3BhY2luZz1cIjBcIiBjZWxs cGFkZGluZz1cIjBcIj5cbiI7Cgl9IGVsc2UgewoJCXByaW50ICI8cHJlPiI7Cgl9CgoJIyBwcmVm ZXRjaCBzZXZlcmFsIGxpbmVzCglteSBAYnVmID0gaGVhZCgkcmVhZGVyKTsKCglteSAlZCA9IHNj YW5fZGlyZWN0aXZlcyhAYnVmKTsKCgl3aGlsZSAoQGJ1ZiB8fCAhZW9mKCRyZWFkZXIpKSB7CgkJ JF8gPSBAYnVmID8gc2hpZnQgQGJ1ZiA6IDwkcmVhZGVyPjsKCgkJbXkgQHdvcmRzID0gc3BsaXQ7 CgoJCSMgQWRkaW5nIG9uZSBpcyBmb3IgdGhlIChzaW5nbGUpIHNwYWNlIHdoaWNoIGZvbGxvd3Mg JHdvcmRzWzBdLgoJCW15ICRyZXN0ID0gc3Vic3RyKCRfLCBsZW5ndGgoJHdvcmRzWzBdKSArIDEp OwoJCWlmICgkd29yZHNbMF0gZXEgIkUiKSB7CgkJCW5leHQ7CgkJfSBlbHNpZiAoJHdvcmRzWzBd IGVxICJNIikgewoJCQkkbGluZU5yKys7CgkJCShteSAkbHJldiA9IHN1YnN0cigkXywgMiwgIDEz KSkgPX4geS8gLy9kOwoJCQkobXkgJGx1c3IgPSBzdWJzdHIoJF8sIDE2LCA5KSkgID1+IHkvIC8v ZDsKCQkJbXkgJGxpbmUgPSBzdWJzdHIoJF8sIDM2KTsKCQkJbXkgJGlzQ3VycmVudFJldiA9ICgk cmV2IGVxICRscmV2KTsKCgkJCSMgd2Ugc2hvdWxkIHBhcnNlIHRoZSBkYXRlIGhlcmUgLi4KCQkJ aWYgKCRscmV2IGVxICRvbGRMcmV2KSB7CgkJCQkkcmV2cHJpbnQgPSBzcHJpbnRmKCclLThzJywg JycpOwoJCQl9IGVsc2UgewoJCQkJJHJldnByaW50ID0gc3ByaW50ZignJS04cycsICRscmV2KTsK CQkJCSRyZXZwcmludCA9fgoJCQkJICAgIHNgXFMrYCZsaW5rKCQmLCAiJHNjcmlwdHdoZXJlJHF1 ZXJ5I3JldiQmIilgZQoJCQkJICAgIDsgICAgIyBgCgkJCQkkb2xkTHVzciA9ICcnOwoJCQl9CgoJ CQlpZiAoJGx1c3IgZXEgJG9sZEx1c3IpIHsKCQkJCSR1c3JwcmludCA9ICcnOwoJCQl9IGVsc2Ug ewoJCQkJJHVzcnByaW50ID0gJGx1c3I7CgkJCX0KCQkJJG9sZExyZXYgPSAkbHJldjsKCQkJJG9s ZEx1c3IgPSAkbHVzcjsKCgkJCSMgU2V0IGJvbGQgZm9yIHRleHQtYmFzZWQgYnJvd3NlcnMgb25s eSAtIGdyYXBoaWNhbAoJCQkjIGJyb3dzZXJzIHNob3cgYm9sZCBmb250cyBhIGJpdCB3aWRlciB0 aGFuIHJlZ3VsYXIgZm9udHMsCgkJCSMgc28gaXQgbG9va3MgaXJyZWd1bGFyLgoJCQlwcmludCAi PGI+IiBpZiAoJGlzQ3VycmVudFJldiAmJiAkaXNfdGV4dGJhc2VkKTsKCgkJCXByaW50ZiAiJXMl cyAlLThzICU0ZDoiLCAkcmV2cHJpbnQsCgkJCSAgICAkaXNDdXJyZW50UmV2ID8gJyEnIDogJyAn LCAkdXNycHJpbnQsICRsaW5lTnI7CgkJCXByaW50IHNwYWNlZEh0bWxUZXh0KCRsaW5lLCAkZHsn dGFic3RvcCd9KTsKCgkJCXByaW50ICI8L2I+IiBpZiAoJGlzQ3VycmVudFJldiAmJiAkaXNfdGV4 dGJhc2VkKTsKCQl9IGVsc2lmICgkd29yZHNbMF0gZXEgIm9rIikgewoKCQkJIyBXZSBjb3VsZCBj b21wbGFpbiBhYm91dCBhbnkgdGV4dCByZWNlaXZlZCBhZnRlciB0aGlzLCBsaWtlIHRoZQoJCQkj IENWUyBjb21tYW5kIGxpbmUgY2xpZW50LiAgQnV0IGZvciBzaW1wbGljaXR5LCB3ZSBkb24ndC4K CQl9IGVsc2lmICgkd29yZHNbMF0gZXEgImVycm9yIikgewoJCQlmYXRhbCgiNTAwIEludGVybmFs IEVycm9yIiwKCQkJICAgICAgJ0Vycm9yIG9jY3VyZWQgZHVyaW5nIGFubm90YXRlOiA8Yj4lczwv Yj4nLAoJCQkgICAgICAkXyk7CgkJfQoJfQoKCWlmICgkYW5uVGFibGUpIHsKCQlwcmludCAiPC90 YWJsZT4iOwoJfSBlbHNlIHsKCQlwcmludCAiPC9wcmU+IjsKCX0KCWh0bWxfZm9vdGVyKCk7CgoJ Y2xvc2UoJHJlYWRlcikgb3Igd2FybiAiY2Fubm90IGNsb3NlOiAkISI7Cgl3YWl0Owp9CgojIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgbWFrZSBDaGVja291dAojIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCnN1YiBkb0NoZWNrb3V0KCQkKSB7CglteSAoJGZ1bGxuYW1lLCAk cmV2KSA9IEBfOwoJbXkgKCRtaW1ldHlwZSwgJHJldm9wdCk7CglteSAkZmggPSBkbyB7IGxvY2Fs ICgqRkgpOyB9OwoKCWlmICgkcmV2IGVxICdIRUFEJyB8fCAkcmV2IGVxICcuJykgewoJCSRyZXYg PSB1bmRlZjsKCX0KCgkjIG1ha2Ugc3VyZSB0aGUgcmV2aXNpb25zIGEgd2VsbGZvcm1lZCwgZm9y IHNlY3VyaXR5CgkjIHJlYXNvbnMgLi4KCWlmIChkZWZpbmVkKCRyZXYpICYmICRyZXYgPX4gL1te XHcuXS8pIHsKCQlmYXRhbCgiNDA0IE5vdCBGb3VuZCIsCgkJICAgICAgJ01hbGZvcm1lZCBxdWVy eSAiJXMiJywKCQkgICAgICAkRU5We1FVRVJZX1NUUklOR30pOwoJfQoKCSMgZ2V0IG1pbWV0eXBl CglpZiAoZGVmaW5lZCgkaW5wdXR7ImNvbnRlbnQtdHlwZSJ9KQoJICAgICYmICgkaW5wdXR7ImNv bnRlbnQtdHlwZSJ9ID1+IC9cU1wvXFMvKSkKCXsKCQkkbWltZXR5cGUgPSAkaW5wdXR7ImNvbnRl bnQtdHlwZSJ9Cgl9IGVsc2UgewoJCSRtaW1ldHlwZSA9ICZnZXRNaW1lVHlwZUZyb21TdWZmaXgo JGZ1bGxuYW1lKTsKCX0KCglpZiAoZGVmaW5lZCgkcmV2KSkgewoJCSRyZXZvcHQgPSAiLXIkcmV2 IjsKCQlpZiAoJHVzZV9tb2RkYXRlKSB7CgkJCXJlYWRMb2coJGZ1bGxuYW1lLCAkcmV2KTsKCQkJ JG1vZGRhdGUgPSAkZGF0ZXskcmV2fTsKCQl9Cgl9IGVsc2UgewoJCSRyZXZvcHQgPSAiLXJIRUFE IjsKCgkJaWYgKCR1c2VfbW9kZGF0ZSkgewoJCQlyZWFkTG9nKCRmdWxsbmFtZSk7CgkJCSRtb2Rk YXRlID0gJGRhdGV7JHN5bXJldntIRUFEfX07CgkJfQoJfQoKCSMjIyBqdXN0IGZvciB0aGUgcmVj b3JkOgoJIyMjICdjdnMgY28nIHNlZW1zIHRvIGhhdmUgYSBidWcgcmVnYXJkaW5nIHNpbmdsZSBj aGVja291dCBvZgoJIyMjIGRpcmVjdG9yaWVzL2ZpbGVzIGhhdmluZyBzcGFjZXMgaW4gaXQ7Cgkj IyMgdGhpcyBpcyBhbiBpc3N1ZSB0aGF0IHNob3VsZCBiZSByZXNvbHZlZCBvbiBjdnMncyBzaWRl CgkjCgkjIFNhZmVseSBmb3IgYSBjaGlsZCBwcm9jZXNzIHRvIHJlYWQgZnJvbS4KCWlmICghb3Bl bigkZmgsICItfCIpKSB7ICAgICMgY2hpbGQKCQkgIyBjaGRpciB0byAkdG1wZGlyIGJlZm9yZSB0 byBhdm9pZCBub24tcmVhZGFibGUgY2dpLWJpbiBkaXJlY3RvcmllcwoJCWNoZGlyKCR0bXBkaXIp OwoJCW9wZW4oU1RERVJSLCAiPiZTVERPVVQiKTsgICAgIyBSZWRpcmVjdCBzdGRlcnIgdG8gc3Rk b3V0CgoJCSMgd29yayBhcm91bmQgYSBidWcgb2YgY3ZzIC1wOyBleHBhbmQgc3ltbGlua3MKCQl1 c2UgQ3dkICdhYnNfcGF0aCc7CgkJZXhlYygkQ01Ee2N2c30sIEBjdnNfb3B0aW9ucywKCQkgICAg ICctZCcsIGFic19wYXRoKCRjdnNyb290KSwKCQkgICAgICdjbycsICctcCcsCgkJICAgICAkcmV2 b3B0LCAkd2hlcmUpIG9yIGV4aXQgLTE7Cgl9CgoJaWYgKGVvZigkZmgpKSB7CgkJZmF0YWwoIjQw NCBOb3QgRm91bmQiLAoJCSAgICAgICclcyBpcyBub3QgKGFueSBsb25nZXIpIHBlcnRpbmVudCcs CgkJICAgICAgJHdoZXJlKTsKCX0KCgkjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJI0NoZWNraW5nIG91dCBzcXVpZC9z cmMvZnRwLmMKCSNSQ1M6ICAvdXNyL3NyYy9DVlMvc3F1aWQvc3JjL2Z0cC5jLHYKCSNWRVJTOiAx LjEuMS4yOC42LjIKCSMqKioqKioqKioqKioqKioKCgkjIFBhcnNlIENWUyBoZWFkZXIKCW15ICgk cmV2aXNpb24sICRmaWxlbmFtZSwgJGN2c2hlYWRlcik7CgkkZmlsZW5hbWUgPSAiIjsKCXdoaWxl ICg8JGZoPikgewoJCWxhc3QgaWYgKC9eXCpcKlwqXCovKTsKCQkkcmV2aXNpb24gPSAkMSBpZiAo L15WRVJTOiAoLiopJC8pOwoKCQlpZiAoL15DaGVja2luZyBvdXQgKC4qKSQvKSB7CgkJCSRmaWxl bmFtZSA9ICQxOwoJCQkkZmlsZW5hbWUgPX4gcy9eXC5cLyovLzsKCQl9CgkJJGN2c2hlYWRlciAu PSAkXzsKCX0KCglpZiAoJGZpbGVuYW1lIG5lICR3aGVyZSkgewoJCWZhdGFsKCI1MDAgSW50ZXJu YWwgRXJyb3IiLAoJCSAgICAgICdVbmV4cGVjdGVkIG91dHB1dCBmcm9tIGN2cyBjbzogJXMnLAoJ CSAgICAgICRjdnNoZWFkZXIpOwoJfQoJJHwgPSAxOwoKCWlmICgkbWltZXR5cGUgZXEgInRleHQv eC1jdnN3ZWItbWFya3VwIikgewoJCSZjdnN3ZWJNYXJrdXAoJGZoLCAkZnVsbG5hbWUsICRyZXZp c2lvbik7Cgl9IGVsc2UgewoJCWh0dHBfaGVhZGVyKCRtaW1ldHlwZSk7CgkJcHJpbnQgPCRmaD47 Cgl9CgljbG9zZSgkZmgpOwp9CgpzdWIgY3Zzd2ViTWFya3VwKCQkJCkgewoJbXkgKCRmaWxlaGFu ZGxlLCAkZnVsbG5hbWUsICRyZXZpc2lvbikgPSBAXzsKCW15ICgkcGF0aG5hbWUsICAgJGZpbGVu YW1lKTsKCgkoJHBhdGhuYW1lID0gJHdoZXJlKSA9fiBzLyhBdHRpY1wvKT9bXlwvXSokLy87Cgko JGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzL14uKlwvLy87CglteSAoJGZpbGV1cmwpID0gdXJsZW5j b2RlKCRmaWxlbmFtZSk7CgoJaHR0cF9oZWFkZXIoKTsKCgluYXZpZ2F0ZUhlYWRlcigkc2NyaXB0 d2hlcmUsICRwYXRobmFtZSwgJGZpbGVuYW1lLCAkcmV2aXNpb24sICJ2aWV3Iik7CglwcmludCAi PGhyIG5vc2hhZGU+IjsKCXByaW50ICI8dGFibGUgd2lkdGg9XCIxMDAlXCI+XG48dHI+XG48dGQg c3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAkbWFya3VwTG9nQ29sb3JcIj4iOwoJcHJpbnQgIkZp bGU6ICIsICZjbGlja2FibGVQYXRoKCR3aGVyZSwgMSk7CglwcmludCAiJm5ic3A7KCI7CgkmZG93 bmxvYWRfbGluaygkZmlsZXVybCwgJHJldmlzaW9uLCAiZG93bmxvYWQiKTsKCXByaW50ICIpIjsK CglpZiAoISRkZWZhdWx0VGV4dFBsYWluKSB7CgkJcHJpbnQgIiZuYnNwOygiOwoJCSZkb3dubG9h ZF9saW5rKCRmaWxldXJsLCAkcmV2aXNpb24sICJhcyB0ZXh0IiwgInRleHQvcGxhaW4iKTsKCQlw cmludCAiKSI7Cgl9CglwcmludCAiPGJyPlxuIjsKCglpZiAoJHNob3dfbG9nX2luX21hcmt1cCkg ewoJCXJlYWRMb2coJGZ1bGxuYW1lKTsgICAgIywkcmV2aXNpb24pOwoJCXByaW50TG9nKCRyZXZp c2lvbiwgMCk7Cgl9IGVsc2UgewoJCXByaW50ICJWZXJzaW9uOiA8Yj4kcmV2aXNpb248L2I+PGJy PlxuIjsKCQlwcmludCAiVGFnOiA8Yj4iLCAkaW5wdXR7b25seV93aXRoX3RhZ30sICI8L2I+PGJy PlxuIgoJCSAgICBpZiAkaW5wdXR7b25seV93aXRoX3RhZ307Cgl9CglwcmludCAiPC90ZD5cbjwv dHI+XG48L3RhYmxlPiI7CglteSAkdXJsID0gZG93bmxvYWRfdXJsKCRmaWxldXJsLCAkcmV2aXNp b24sICRtaW1ldHlwZSk7CglwcmludCAiPGhyIG5vc2hhZGU+IjsKCglpZiAoJG1pbWV0eXBlID1+ IC9eaW1hZ2UvKSB7CgkJcHJpbnRmICc8aW1nIHNyYz0iJXMiIGFsdD0iIj48YnI+JywgaHJlZnF1 b3RlKCIkdXJsJGJhcmVxdWVyeSIpOwoJfSBlbHNpZiAoJG1pbWV0eXBlID1+IG0lXmFwcGxpY2F0 aW9uL3BkZiUpIHsKCQlwcmludGYgJzxlbWJlZCBzcmM9IiVzIiB3aWR0aD0iMTAwJSI+PGJyPics CgkJICAgIGhyZWZxdW90ZSgiJHVybCRiYXJlcXVlcnkiKTsKCX0gZWxzaWYgKCRwcmVmb3JtYXRf aW5fbWFya3VwKSB7CgkJcHJpbnQgIjxwcmU+IjsKCgkJIyBwcmVmZXRjaCBzZXZlcmFsIGxpbmVz CgkJbXkgQGJ1ZiA9IGhlYWQoJGZpbGVoYW5kbGUpOwoKCQlteSAlZCA9IHNjYW5fZGlyZWN0aXZl cyhAYnVmKTsKCgkJd2hpbGUgKEBidWYgfHwgIWVvZigkZmlsZWhhbmRsZSkpIHsKCQkJJF8gPSBA YnVmID8gc2hpZnQgQGJ1ZiA6IDwkZmlsZWhhbmRsZT47CgoJCQlwcmludCBzcGFjZWRIdG1sVGV4 dCgkXywgJGR7J3RhYnN0b3AnfSk7CgkJfQoJCXByaW50ICI8L3ByZT4iOwoJfSBlbHNlIHsKCQlw cmludCAiPHByZT4iOwoKCQl3aGlsZSAoPCRmaWxlaGFuZGxlPikgewoJCQlwcmludCBodG1scXVv dGUoJF8pOwoJCX0KCQlwcmludCAiPC9wcmU+IjsKCX0KfQoKc3ViIHZpZXdhYmxlKCQpIHsKCW15 ICgkbWltZXR5cGUpID0gQF87CgoJJG1pbWV0eXBlID1+IG0lXigodGV4dHxpbWFnZSkvfGFwcGxp Y2F0aW9uL3BkZiklOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU2hvdyBD b2xvcmVkIERpZmYKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpzdWIgZG9EaWZmKCQk JCQkJCkgewoJbXkgKCRmdWxsbmFtZSwgJHIxLCAkdHIxLCAkcjIsICR0cjIsICRmKSA9IEBfOwoJ bXkgJGZoID0gZG8geyBsb2NhbCAoKkZIKTsgfTsKCW15ICgkcmV2MSwgJHJldjIsICRzeW0xLCAk c3ltMiwgJGYxLCAkZjIpOwoKCWlmICgmZm9yYmlkZGVuX2ZpbGUoJGZ1bGxuYW1lKSkgewoJCWZh dGFsKCI0MDMgRm9yYmlkZGVuIiwKCQkgICAgICAnQWNjZXNzIGZvcmJpZGRlbi4gIFRoaXMgZmls ZSBpcyBtZW50aW9uZWQgaW4gQEZvcmJpZGRlbkZpbGVzJyk7CgkJcmV0dXJuOwoJfQoKCWlmICgk cjEgPX4gLyhbXjpdKykoOiguKykpPy8pIHsKCQkkcmV2MSA9ICQxOwoJCSRzeW0xID0gJDM7Cgl9 CglpZiAoJHIxIGVxICd0ZXh0JykgewoJCSRyZXYxID0gJHRyMTsKCQkkc3ltMSA9ICIiOwoJfQoK CWlmICgkcjIgPX4gLyhbXjpdKykoOiguKykpPy8pIHsKCQkkcmV2MiA9ICQxOwoJCSRzeW0yID0g JDM7Cgl9CglpZiAoJHIyIGVxICd0ZXh0JykgewoJCSRyZXYyID0gJHRyMjsKCQkkc3ltMiA9ICIi OwoJfQoKCSMgbWFrZSBzdXJlIHRoZSByZXZpc2lvbnMgYSB3ZWxsZm9ybWVkLCBmb3Igc2VjdXJp dHkKCSMgcmVhc29ucyAuLgoJaWYgKCRyZXYxID1+IC9bXlx3Ll0vIHx8ICRyZXYyID1+IC9bXlx3 Ll0vKSB7CgkJZmF0YWwoIjQwNCBOb3QgRm91bmQiLAoJCSAgICAgICdNYWxmb3JtZWQgcXVlcnkg IiVzIicsCgkJICAgICAgJEVOVntRVUVSWV9TVFJJTkd9KTsKCX0KCgkjCgkjIHJldjEgYW5kIHJl djIgYXJlIG5vdyBib3RoIG51bWVyaWMgcmV2aXNpb25zLgoJIyBUaHVzIHdlIGRvIGEgRFdJTSBo ZXJlIGFuZCBzd2FwIHRoZW0gaWYgcmV2MSBpcyBhZnRlciByZXYyLgoJIyBYWFggc2hvdWxkIHdl IHdhcm4gYWJvdXQgdGhlIGZhY3QgdGhhdCB3ZSBkbyB0aGlzPwoJaWYgKCZyZXZjbXAoJHJldjEs ICRyZXYyKSA+IDApIHsKCQlteSAoJHRtcDEsICR0bXAyKSA9ICgkcmV2MSwgJHN5bTEpOwoJCSgk cmV2MSwgJHN5bTEpID0gKCRyZXYyLCAkc3ltMik7CgkJKCRyZXYyLCAkc3ltMikgPSAoJHRtcDEs ICR0bXAyKTsKCX0KCW15ICRkaWZmdHlwZSA9ICRESUZGVFlQRVN7JGZ9OwoKCWlmICghJGRpZmZ0 eXBlKSB7CgkJZmF0YWwoIjQwMCBCYWQgYXJndW1lbnRzIiwKCQkgICAgICAnRGlmZiBmb3JtYXQg JXMgbm90IHVuZGVyc3Rvb2QnLAoJCSAgICAgICRmKTsKCX0KCglteSBAZGlmZnR5cGUgICAgICAg PSBAeyRkaWZmdHlwZS0+eydvcHRzJ319OwoJbXkgJGh1bWFuX3JlYWRhYmxlID0gJGRpZmZ0eXBl LT57J2NvbG9yZWQnfTsKCgkjIGFwcGx5IHNwZWNpYWwgb3B0aW9ucwoJaWYgKCRzaG93ZnVuYykg ewoJCXB1c2ggQGRpZmZ0eXBlLCAnLXAnIGlmICRmIG5lICdzJzsKCgkJbXkgKCRyZTEsICRyZTIp OwoKCQl3aGlsZSAoKCRyZTEsICRyZTIpID0gZWFjaCAlZnVuY2xpbmVfcmVnZXhwKSB7CgkJCWlm ICgkZnVsbG5hbWUgPX4gLyRyZTEvKSB7CgkJCQlwdXNoIEBkaWZmdHlwZSwgJy1GJywgJHJlMjsK CQkJCWxhc3Q7CgkJCX0KCQl9Cgl9CgoJaWYgKCRodW1hbl9yZWFkYWJsZSkgewoJCWlmICgkaHJf aWdud2hpdGUpIHsKCQkJcHVzaCBAZGlmZnR5cGUsICctdyc7CgkJfQoJCWlmICgkaHJfaWdua2V5 c3Vic3QpIHsKCQkJcHVzaCBAZGlmZnR5cGUsICcta2snOwoJCX0KCX0KCglpZiAoIW9wZW4oJGZo LCAiLXwiKSkgeyAgICAjIGNoaWxkCgkJb3BlbihTVERFUlIsICI+JlNURE9VVCIpOyAgICAjIFJl ZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQKCQlvcGVuT3V0cHV0RmlsdGVyKCk7CgkJZXhlYygkQ01E e3Jjc2RpZmZ9LCBAZGlmZnR5cGUsICItciRyZXYxIiwgIi1yJHJldjIiLCAkZnVsbG5hbWUpIG9y IGV4aXQgLTE7Cgl9CglpZiAoJGh1bWFuX3JlYWRhYmxlKSB7CgkJaHR0cF9oZWFkZXIoKTsKCQkm aHVtYW5fcmVhZGFibGVfZGlmZigkZmgsICRyZXYyKTsKCQlodG1sX2Zvb3RlcigpOwoJCWd6aXBj bG9zZSgpOwoJCWV4aXQ7Cgl9IGVsc2UgewoJCWh0dHBfaGVhZGVyKCJ0ZXh0L3BsYWluIik7Cgl9 CgoJIwoJIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KCSNSQ1MgZmlsZTogL2hvbWUvbmN2cy9zcmMvc3lzL25ldGluZXQv dGNwX291dHB1dC5jLHYKCSNyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKCSNyZXRyaWV2aW5nIHJl dmlzaW9uIDEuMTcKCSNkaWZmIC1jIC1yMS4xNiAtcjEuMTcKCSMqKiogL2hvbWUvbmN2cy9zcmMv c3lzL25ldGluZXQvdGNwX291dHB1dC5jICAgICAxOTk1LzExLzAzIDIyOjA4OjA4ICAgICAxLjE2 CgkjLS0tIC9ob21lL25jdnMvc3JjL3N5cy9uZXRpbmV0L3RjcF9vdXRwdXQuYyAgICAgMTk5NS8x Mi8wNSAxNzo0NjozNSAgICAgMS4xNwoJIwoJIyBJZGVhczoKCSMgLSBudWtlIHRoZSBzdGRlcnIg b3V0cHV0IGlmIGl0J3Mgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUKCSMgLSBBZGQgIm5vIGRpZmZl cmVuY2VzIGZvdW5kIiBpZiB0aGUgZGlmZiBjb21tYW5kIHN1cHBsaWVkIG5vIG91dHB1dC4KCSMK CSMqKiogc3JjL3N5cy9uZXRpbmV0L3RjcF9vdXRwdXQuYyAgICAgMTk5NS8xMS8wMyAyMjowODow OCAgICAgMS4xNgoJIy0tLSBzcmMvc3lzL25ldGluZXQvdGNwX291dHB1dC5jICAgICAxOTk1LzEy LzA1IDE3OjQ2OjM1ICAgICAxLjE3IFJFTEVOR18yXzFfMAoJIyAoYm9ndXMgZXhhbXBsZSwgYnV0 Li4uKQoJIwoJaWYgKGdyZXAgeyAkXyBlcSAnLXUnIH0gQGRpZmZ0eXBlKSB7CgkJJGYxID0gJy0t LSc7CgkJJGYyID0gJ1wrXCtcKyc7Cgl9IGVsc2UgewoJCSRmMSA9ICdcKlwqXConOwoJCSRmMiA9 ICctLS0nOwoJfQoKCXdoaWxlICg8JGZoPikgewoJCWlmIChtfF4kZjEgJGN2c3Jvb3R8bykgewoJ CQlzfCRjdnNyb290L3x8bzsKCQkJaWYgKCRzeW0xKSB7CgkJCQljaG9wOwoJCQkJJF8gLj0gIiAk c3ltMVxuIjsKCQkJfQoJCX0gZWxzaWYgKG18XiRmMiAkY3Zzcm9vdHxvKSB7CgkJCXN8JGN2c3Jv b3QvfHxvOwoKCQkJaWYgKCRzeW0yKSB7CgkJCQljaG9wOwoJCQkJJF8gLj0gIiAkc3ltMlxuIjsK CQkJfQoJCX0KCQlwcmludCAkXzsKCX0KCWNsb3NlKCRmaCk7Cn0KCiMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKIyBTaG93IExvZ3MgLi4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwpzdWIgZ2V0RGlyTG9ncygkJEApIHsKCW15ICgkY3Zzcm9vdCwgJGRpcm5hbWUsIEBvdGhl ckZpbGVzKSA9IEBfOwoJbXkgKCRzdGF0ZSwgJG90aGVyRmlsZXMsICR0YWcsICRmaWxlLCAkZGF0 ZSwgJGJyYW5jaHBvaW50LCAkYnJhbmNoLAoJICAgICRsb2cpOwoJbXkgKCRyZXYsICRyZXZpc2lv biwgJHJldndhbnRlZCwgJGZpbGVuYW1lLCAkaGVhZCwgJGF1dGhvcik7CgoJJHRhZyA9ICRpbnB1 dHtvbmx5X3dpdGhfdGFnfTsKCglteSAoJERpck5hbWUpID0gIiRjdnNyb290LyR3aGVyZSI7Cglt eSAoQGZpbGVzLCBAZmlsZXRhZ3MpOwoJbXkgJGZoID0gZG8geyBsb2NhbCAoKkZIKTsgfTsKCglw dXNoIChAZmlsZXMsICZzYWZlZ2xvYigiJERpck5hbWUvKix2IikpOwoJcHVzaCAoQGZpbGVzLCAm c2FmZWdsb2IoIiREaXJOYW1lL0F0dGljLyosdiIpKQoJICAgIGlmICghJGlucHV0eydoaWRlYXR0 aWMnfSk7Cglmb3JlYWNoIG15ICRmaWxlIChAb3RoZXJGaWxlcykgewoJCXB1c2ggKEBmaWxlcywg IiREaXJOYW1lLyRmaWxlIik7Cgl9CgoJIyBqdXN0IGV4ZWN1dGUgcmxvZyBpZiB0aGVyZSBhcmUg YW55IGZpbGVzCglpZiAoJCNmaWxlcyA8IDApIHsKCQlyZXR1cm47Cgl9CgoJaWYgKGRlZmluZWQo JHRhZykpIHsKCgkJI2Nhbid0IHVzZSAtcjx0YWc+IGFzIC0gaXMgYWxsb3dlZCBpbiB0YWduYW1l cywgYnV0IG1pc2ludGVycHJlYXRlZCBieSBybG9nLi4KCQlpZiAoIW9wZW4oJGZoLCAiLXwiKSkg eyAgICAjIGNoaWxkCgkJCW9wZW4oU1RERVJSLCAnPi9kZXYvbnVsbCcpOyAjIHJsb2cgbWF5IGNv bXBsYWluOyBpZ25vcmUuCgkJCW9wZW5PdXRwdXRGaWx0ZXIoKTsKCQkJZXhlYygkQ01Ee3Jsb2d9 LCBAZmlsZXMpIG9yIGV4aXQgLTE7CgkJfQoJfSBlbHNlIHsKCgkJaWYgKCFvcGVuKCRmaCwgIi18 IikpIHsgICAgIyBjaGlsZAoJCQlvcGVuKFNUREVSUiwgJz4vZGV2L251bGwnKTsgIyBybG9nIG1h eSBjb21wbGFpbjsgaWdub3JlLgoJCQlvcGVuT3V0cHV0RmlsdGVyKCk7CgkJCWV4ZWMoJENNRHty bG9nfSwgJy1yJywgQGZpbGVzKSBvciBleGl0IC0xOwoJCX0KCX0KCSRzdGF0ZSA9ICJzdGFydCI7 CgoJd2hpbGUgKDwkZmg+KSB7CgkJaWYgKCRzdGF0ZSBlcSAic3RhcnQiKSB7CgoJCQkjTmV4dCBm aWxlLiBJbml0aWFsaXplIGZpbGUgdmFyaWFibGVzCgkJCSRyZXYgICAgICAgICA9ICcnOwoJCQkk cmV2d2FudGVkICAgPSAnJzsKCQkJJGJyYW5jaCAgICAgID0gJyc7CgkJCSRicmFuY2hwb2ludCA9 ICcnOwoJCQkkZmlsZW5hbWUgICAgPSAnJzsKCQkJJGxvZyAgICAgICAgID0gJyc7CgkJCSRyZXZp c2lvbiAgICA9ICcnOwoJCQklc3ltcmV2ICAgICAgPSAoKTsKCQkJQGZpbGV0YWdzICAgID0gKCk7 CgoJCQkjanVtcCB0byBoZWFkIHN0YXRlCgkJCSRzdGF0ZSA9ICJoZWFkIjsKCQl9CgkJcHJpbnQg IiRzdGF0ZTokXyIgaWYgKCR2ZXJib3NlKTsKCQlhZ2FpbjoKCgkJaWYgKCRzdGF0ZSBlcSAiaGVh ZCIpIHsKCgkJCSMkcmNzZmlsZSA9ICQxIGlmICgvXlJDUyBmaWxlOiAoLispJC8pOyAjbm90IHVz ZWQgKHlldCkKCgkJCWlmICgvXldvcmtpbmcgZmlsZTogKC4rKSQvKSB7CgkJCQkkZmlsZW5hbWUg PSAkMTsKCQkJfSBlbHNpZiAoL15oZWFkOiAoLispJC8pIHsKCQkJCSRoZWFkID0gJDE7CgkJCX0g ZWxzaWYgKC9eYnJhbmNoOiAoLispJC8pIHsKCQkJCSRicmFuY2ggPSAkMQoJCQl9IGVsc2lmICgv XnN5bWJvbGljIG5hbWVzOi8pIHsKCQkJCSRzdGF0ZSA9ICJ0YWdzIjsKCQkJCSgkYnJhbmNoID0g JGhlYWQpID1+IHMvXC5cZCskLy8KCQkJCSAgICBpZiAkYnJhbmNoIGVxICcnOwoJCQkJJGJyYW5j aCA9fiBzLyhcZCspJC8wLiQxLzsKCQkJCSRzeW1yZXZ7TUFJTn0gID0gJGJyYW5jaDsKCQkJCSRz eW1yZXZ7SEVBRH0gID0gJGJyYW5jaDsKCQkJCSRhbGx0YWdze01BSU59ID0gMTsKCQkJCSRhbGx0 YWdze0hFQUR9ID0gMTsKCQkJCXB1c2ggKEBmaWxldGFncywgIk1BSU4iLCAiSEVBRCIpOwoJCQl9 IGVsc2lmICgvJExPR19SRVZTRVBBUkFUT1IvbykgewoJCQkJJHN0YXRlID0gImxvZyI7CgkJCQkk cmV2ICAgPSAnJzsKCQkJCSRkYXRlICA9ICcnOwoJCQkJJGxvZyAgID0gJyc7CgoJCQkJIyBUcnkg dG8gcmVjb25zdHJ1Y3QgdGhlIHJlbGF0aXZlIGZpbGVuYW1lIGlmIFJDUyBzcGl0cyBvdXQgYSBm dWxsIHBhdGgKCQkJCSRmaWxlbmFtZSA9fiBzJV5cUSREaXJOYW1lXEUvJSU7CgkJCX0KCQkJbmV4 dDsKCQl9CgoJCWlmICgkc3RhdGUgZXEgInRhZ3MiKSB7CgkJCWlmICgvXlxzKyhbXjpdKyk6XHMr KFtcZFwuXSspXHMqJC8pIHsKCQkJCXB1c2ggKEBmaWxldGFncywgJDEpOwoJCQkJJHN5bXJldnsk MX0gID0gJDI7CgkJCQkkYWxsdGFnc3skMX0gPSAxOwoJCQkJbmV4dDsKCQkJfSBlbHNpZiAoL15c Uy8pIHsKCgkJCQlpZiAoZGVmaW5lZCgkdGFnKSkgewoJCQkJCWlmIChkZWZpbmVkKCRzeW1yZXZ7 JHRhZ30pCgkJCQkJICAgIHx8ICR0YWcgZXEgIkhFQUQiKQoJCQkJCXsKCQkJCQkJJHJldndhbnRl ZCA9CgkJCQkJCSAgICAkc3ltcmV2eyR0YWcgZXEgIkhFQUQiID8KCQkJCQkJICAgICJNQUlOIiA6 ICR0YWd9OwoJCQkJCQkoJGJyYW5jaCA9ICRyZXZ3YW50ZWQpID1+CgkJCQkJCSAgICBzL1xiMFwu Ly87CgkJCQkJCSgkYnJhbmNocG9pbnQgPSAkYnJhbmNoKSA9fgoJCQkJCQkgICAgcy9cLj9cZCsk Ly87CgkJCQkJCSRyZXZ3YW50ZWQgPSAnJwoJCQkJCQkgICAgaWYgKCRyZXZ3YW50ZWQgbmUgJGJy YW5jaCk7CgkJCQkJfSBlbHNpZiAoJHRhZyBuZSAiSEVBRCIpIHsKCQkJCQkJcHJpbnQKCQkJCQkJ ICAgICJUYWcgbm90IGZvdW5kLCBza2lwIHRoaXMgZmlsZSIKCQkJCQkJICAgIGlmICgkdmVyYm9z ZSk7CgkJCQkJCSRzdGF0ZSA9ICJza2lwIjsKCQkJCQkJbmV4dDsKCQkJCQl9CgkJCQl9CgoJCQkJ Zm9yZWFjaCBteSAkdGFnZm91bmQgKEBmaWxldGFncykgewoJCQkJCSR0YWdzeyR0YWdmb3VuZH0g PSAxOwoJCQkJfQoJCQkJJHN0YXRlID0gImhlYWQiOwoJCQkJZ290byBhZ2FpbjsKCQkJfQoJCX0K CgkJaWYgKCRzdGF0ZSBlcSAibG9nIikgewoJCQlpZiAoLyRMT0dfUkVWU0VQQVJBVE9SL28gfHwg LyRMT0dfRklMRVNFUEFSQVRPUi9vKSB7CgoJCQkJIyBFbmQgb2YgYSBsb2cgZW50cnkuCgkJCQlt eSAkcmV2YnJhbmNoID0gJHJldjsKCQkJCSRyZXZicmFuY2ggPX4gcy9cLlxkKyQvLzsKCQkJCXBy aW50ICIkZmlsZW5hbWUgJHJldiBXYW50ZWQ6ICRyZXZ3YW50ZWQgIiwKCQkJCSAgICAiUmV2YnJh bmNoOiAkcmV2YnJhbmNoIEJyYW5jaDogJGJyYW5jaCAiLAoJCQkJICAgICJCcmFuY2hwb2ludDog JGJyYW5jaHBvaW50XG4iCgkJCQkgICAgaWYgKCR2ZXJib3NlKTsKCgkJCQlpZiAoJHJldndhbnRl ZCBlcSAnJyAmJiAkYnJhbmNoIG5lICcnCgkJCQkgICAgJiYgJGJyYW5jaCBlcSAkcmV2YnJhbmNo IHx8ICFkZWZpbmVkKCR0YWcpKQoJCQkJewoJCQkJCXByaW50CgkJCQkJICAgICJGaWxlIHJldmlz aW9uICRyZXYgZm91bmQgZm9yIGJyYW5jaCAkYnJhbmNoXG4iCgkJCQkJICAgIGlmICgkdmVyYm9z ZSk7CgkJCQkJJHJldndhbnRlZCA9ICRyZXY7CgkJCQl9CgoJCQkJaWYgKCRyZXZ3YW50ZWQgbmUg JycgPyAkcmV2IGVxICRyZXZ3YW50ZWQgOgoJCQkJICAgICRicmFuY2hwb2ludCBuZSAnJyA/ICRy ZXYgZXEgJGJyYW5jaHBvaW50IDoKCQkJCSAgICAwICYmICgkcmV2IGVxICRoZWFkKSkKCQkJCXsg ICAgIyBEb24ndCB0aGluayBoZWFkIGlzIG5lZWRlZCBoZXJlLi4KCQkJCQlwcmludAoJCQkJCSAg ICAiRmlsZSBpbmZvICRyZXYgZm91bmQgZm9yICRmaWxlbmFtZVxuIgoJCQkJCSAgICBpZiAoJHZl cmJvc2UpOwoJCQkJCW15IEBmaW5mbyA9CgkJCQkJICAgICgkcmV2LCAkZGF0ZSwgJGxvZywgJGF1 dGhvciwKCQkJCQkJJGZpbGVuYW1lKTsKCQkJCQlteSAoJG5hbWUpOwoJCQkJCSgkbmFtZSA9ICRm aWxlbmFtZSkgPX4gcyUvLiolJTsKCQkJCQkkZmlsZWluZm97JG5hbWV9ID0gW0BmaW5mb107CgkJ CQkJJHN0YXRlID0gImRvbmUiIGlmICgkcmV2IGVxICRyZXZ3YW50ZWQpOwoJCQkJfQoJCQkJJHJl diAgPSAnJzsKCQkJCSRkYXRlID0gJyc7CgkJCQkkbG9nICA9ICcnOwoJCQl9IGVsc2lmICgkZGF0 ZSBlcSAnJwoJCQkgICAgJiYgbXxeZGF0ZTpccysoXGQrKS8oXGQrKS8oXGQrKVxzKyhcZCspOihc ZCspOihcZCspO3wKCQkJICAgICkKCQkJewoJCQkJbXkgJHlyID0gJDE7CgoJCQkJIyBkYW1uIDIt ZGlnaXQgeWVhciByb3V0aW5lcyA6LSkKCQkJCWlmICgkeXIgPiAxMDApIHsKCQkJCQkkeXIgLT0g MTkwMDsKCQkJCX0KCQkJCSRkYXRlID0KCQkJCSAgICAmVGltZTo6TG9jYWw6OnRpbWVnbSgkNiwg JDUsICQ0LCAkMywgJDIgLSAxLAoJCQkJCSR5cik7CgkJCQkoJGF1dGhvcikgPSAvYXV0aG9yOiAo W147XSspLzsKCQkJCSRzdGF0ZSA9ICJsb2ciOwoJCQkJJGxvZyAgID0gJyc7CgkJCQluZXh0OwoJ CQl9IGVsc2lmICgkcmV2IGVxICcnICYmIC9ecmV2aXNpb24gKFxkKyg/OlwuXGQrKSspLiokLykg ewoJCQkJJHJldiA9ICQxOyAjIC4qJCBlYXRzIHVwIHRoZSBsb2NrZXIobG9ja2Vycz8pIGluZm8s IGlmIGFueQoJCQkJbmV4dDsKCQkJfSBlbHNlIHsKCQkJCSRsb2cgLj0gJF87CgkJCX0KCQl9CgoJ CWlmICgvJExPR19GSUxFU0VQQVJBVE9SL28pIHsKCQkJJHN0YXRlID0gInN0YXJ0IjsKCQkJbmV4 dDsKCQl9Cgl9CgoJaWYgKCQuID09IDApIHsKCQlmYXRhbCgiNTAwIEludGVybmFsIEVycm9yIiwK CQkgICAgICAnRmFpbGVkIHRvIHNwYXduIEdOVSBybG9nIG9uIDxlbT4iJXMiPC9lbT4uICA8cD5E aWQgeW91IHNldCB0aGUgPGI+JGNvbW1hbmRfcGF0aDwvYj4gaW4geW91ciBjb25maWd1cmF0aW9u IGZpbGUgY29ycmVjdGx5ID8gKEN1cnJlbnRseSAiJXMiJywKCQkgICAgICBqb2luICgiLCAiLCBA ZmlsZXMpLCAkY29tbWFuZF9wYXRoKTsKCX0KCWNsb3NlKCRmaCk7Cn0KCnN1YiByZWFkTG9nKCQ7 JCkgewoJbXkgKCRmdWxsbmFtZSwgJHJldmlzaW9uKSA9IEBfOwoJbXkgKCRzeW1uYW1lcywgJGhl YWQsICRyZXYsICRiciwgJGJycCwgJGJyYW5jaCwgJGJyYW5jaHJldik7CglteSAkZmggPSBkbyB7 IGxvY2FsICgqRkgpOyB9OwoKCWlmIChkZWZpbmVkKCRyZXZpc2lvbikpIHsKCQkkcmV2aXNpb24g PSAiLXIkcmV2aXNpb24iOwoJfSBlbHNlIHsKCQkkcmV2aXNpb24gPSAiIjsKCX0KCgl1bmRlZiAl c3ltcmV2OwoJdW5kZWYgJXJldnN5bTsKCXVuZGVmIEBhbGxyZXZpc2lvbnM7Cgl1bmRlZiAlZGF0 ZTsKCXVuZGVmICVhdXRob3I7Cgl1bmRlZiAlc3RhdGU7Cgl1bmRlZiAlZGlmZmxpbmVzOwoJdW5k ZWYgJWxvZzsKCglwcmludCgiR29pbmcgdG8gcmxvZyAnJGZ1bGxuYW1lJ1xuIikgaWYgKCR2ZXJi b3NlKTsKCWlmICghb3BlbigkZmgsICItfCIpKSB7ICAgICMgY2hpbGQKCQlpZiAoJHJldmlzaW9u IG5lICcnKSB7CgkJCW9wZW5PdXRwdXRGaWx0ZXIoKTsKCQkJZXhlYygkQ01Ee3Jsb2d9LCAkcmV2 aXNpb24sICRmdWxsbmFtZSkgb3IgZXhpdCAtMTsKCQl9IGVsc2UgewoJCQlvcGVuT3V0cHV0Rmls dGVyKCk7CgkJCWV4ZWMoJENNRHtybG9nfSwgJGZ1bGxuYW1lKSBvciBleGl0IC0xOwoJCX0KCX0K Cgl3aGlsZSAoPCRmaD4pIHsKCQlwcmludCBpZiAoJHZlcmJvc2UpOwoJCWlmICgkc3ltbmFtZXMp IHsKCQkJaWYgKC9eXHMrKFteOl0rKTpccysoW1xkXC5dKykvKSB7CgkJCQkkc3ltcmV2eyQxfSA9 ICQyOwoJCQl9IGVsc2UgewoJCQkJJHN5bW5hbWVzID0gMDsKCQkJfQoJCX0gZWxzaWYgKC9eaGVh ZDpccysoW1xkXC5dKykvKSB7CgkJCSRoZWFkID0gJDE7CgkJfSBlbHNpZiAoL15icmFuY2g6XHMr KFtcZFwuXSspLykgewoJCQkkY3VyYnJhbmNoID0gJDE7CgkJfSBlbHNpZiAoL15zeW1ib2xpYyBu YW1lcy8pIHsKCQkJJHN5bW5hbWVzID0gMTsKCQl9IGVsc2lmICgvXi0tLS0tLykgewoJCQlsYXN0 OwoJCX0KCX0KCSgkY3VyYnJhbmNoID0gJGhlYWQpID1+IHMvXC5cZCskLy8gaWYgKCFkZWZpbmVk KCRjdXJicmFuY2gpKTsKCgkjIGVhY2ggbG9nIGVudHJ5IGlzIG9mIHRoZSBmb3JtOgoJIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkjIHJldmlzaW9uIDMuNy4xLjEKCSMgZGF0ZTogMTk5 NS8xMS8yOSAyMjoxNTo1MjsgIGF1dGhvcjogZmVubmVyOyAgc3RhdGU6IEV4cDsgIGxpbmVzOiAr NSAtMwoJIyBsb2cgaW5mbwoJIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJIyBGb3Ig YSBsb2NrZWQgcmV2aXNpb24sIHRoZSBmaXJzdCBsaW5lIGFmdGVyIHRoZSBzZXBhcmF0b3IgCgkj IGJlY29tZXMgc210aCBsaWtlCgkjIHJldmlzaW9uIDkuMTkJbG9ja2VkIGJ5OiB2YXNzaWxpaTsK Cglsb2dlbnRyeToKCgl3aGlsZSAoIS8kTE9HX0ZJTEVTRVBBUkFUT1IvbykgewoJCSRfID0gPCRm aD47CgkJbGFzdCBsb2dlbnRyeSBpZiAoIWRlZmluZWQoJF8pKTsgICAgIyBFT0YKCQlwcmludCAi UjoiLCAkXyBpZiAoJHZlcmJvc2UpOwoJCWlmICgvXnJldmlzaW9uIChcZCsoPzpcLlxkKykrKS8p IHsKCQkJJHJldiA9ICQxOwoJCQl1bnNoaWZ0IChAYWxscmV2aXNpb25zLCAkcmV2KTsKCQl9IGVs c2lmICgvJExPR19GSUxFU0VQQVJBVE9SL28gfHwgLyRMT0dfUkVWU0VQQVJBVE9SL28pIHsKCQkJ bmV4dCBsb2dlbnRyeTsKCQl9IGVsc2UgewoKCQkJIyBUaGUgcmxvZyBvdXRwdXQgaXMgc3ludGFj dGljYWxseSBhbWJpZ3VvdXMuICBXZSBtdXN0CgkJCSMgaGF2ZSBndWVzc2VkIHdyb25nIGFib3V0 IHdoZXJlIHRoZSBlbmQgb2YgdGhlIGxhc3QgbG9nCgkJCSMgbWVzc2FnZSB3YXMuCgkJCSMgU2lu Y2UgdGhpcyBpcyBsaWtlbHkgdG8gaGFwcGVuIHdoZW4gcGVvcGxlIHB1dCBybG9nIG91dHB1dAoJ CQkjIGluIHRoZWlyIGNvbW1pdCBtZXNzYWdlcywgZG9uJ3QgZXZlbiBib3RoZXIga2VlcGluZwoJ CQkjIHRoZXNlIGxpbmVzIHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCByZXZpc2lvbiB0aGV5IGdv IHdpdGgKCQkJIyBhbnkgbW9yZS4KCQkJbmV4dCBsb2dlbnRyeTsKCQl9CgkJJF8gPSA8JGZoPjsK CQlwcmludCAiRDoiLCAkXyBpZiAoJHZlcmJvc2UpOwoJCWlmICgKCQkgICAgbXxeZGF0ZTpccyso XGQrKS8oXGQrKS8oXGQrKVxzKyhcZCspOihcZCspOihcZCspO1xzK2F1dGhvcjpccysoXFMrKTtc cytzdGF0ZTpccysoXFMrKTtccysobGluZXM6XHMrKFswLTlccystXSspKT98CgkJICAgICkKCQl7 CgkJCW15ICR5ciA9ICQxOwoKCQkJIyBkYW1uIDItZGlnaXQgeWVhciByb3V0aW5lcyA6LSkKCQkJ aWYgKCR5ciA+IDEwMCkgewoJCQkJJHlyIC09IDE5MDA7CgkJCX0KCQkJJGRhdGV7JHJldn0gPQoJ CQkgICAgJlRpbWU6OkxvY2FsOjp0aW1lZ20oJDYsICQ1LCAkNCwgJDMsICQyIC0gMSwgJHlyKTsK CQkJJGF1dGhvcnskcmV2fSAgICA9ICQ3OwoJCQkkc3RhdGV7JHJldn0gICAgID0gJDg7CgkJCSRk aWZmbGluZXN7JHJldn0gPSAkMTA7CgkJfSBlbHNlIHsKCQkJZmF0YWwoIjUwMCBJbnRlcm5hbCBF cnJvciIsCgkJCSAgICAgICdFcnJvciBwYXJzaW5nIFJDUyBvdXRwdXQ6ICVzJywKCQkJICAgICAg JF8pOwoJCX0KCQlsaW5lOgoKCQl3aGlsZSAoPCRmaD4pIHsKCQkJcHJpbnQgIkw6IiwgJF8gaWYg KCR2ZXJib3NlKTsKCQkJbmV4dCBsaW5lIGlmICgvXmJyYW5jaGVzOlxzLyk7CgkJCWxhc3QgbGlu ZQoJCQkgICAgaWYgKC8kTE9HX0ZJTEVTRVBBUkFUT1IvbyB8fCAvJExPR19SRVZTRVBBUkFUT1Iv byk7CgkJCSRsb2d7JHJldn0gLj0gJF87CgkJfQoJCXByaW50ICJFOiIsICRfIGlmICgkdmVyYm9z ZSk7Cgl9CgljbG9zZSgkZmgpOwoJcHJpbnQgIkRvbmUgcmVhZGluZyBSQ1MgZmlsZVxuIiBpZiAo JHZlcmJvc2UpOwoKCUByZXZvcmRlciA9IHJldmVyc2Ugc29ydCB7IHJldmNtcCgkYSwgJGIpIH0g QGFsbHJldmlzaW9uczsKCXByaW50ICJEb25lIHNvcnRpbmcgcmV2aXNpb25zIiwgam9pbiAoIiAi LCBAcmV2b3JkZXIpLCAiXG4iCgkgICAgaWYgKCR2ZXJib3NlKTsKCgkjCgkjIEhFQUQgaXMgYW4g YXJ0aWZpY2lhbCB0YWcgd2hpY2ggaXMgc2ltcGx5IHRoZSBoaWdoZXN0IHRhZyBudW1iZXIgb24g dGhlIG1haW4KCSMgYnJhbmNoLCB1bmxlc3MgdGhlcmUgaXMgYSBicmFuY2ggdGFnIGluIHRoZSBS Q1MgZmlsZSBpbiB3aGljaCBjYXNlIGl0J3MgdGhlCgkjIGhpZ2hlc3QgcmV2aXNpb24gb24gdGhh dCBicmFuY2guICBGaW5kIGl0IGJ5IGxvb2tpbmcgdGhyb3VnaCBAcmV2b3JkZXI7IGl0CgkjIGlz IHRoZSBmaXJzdCBjb21taXQgbGlzdGVkIG9uIHRoZSBhcHByb3ByaWF0ZSBicmFuY2guCgkjIFRo aXMgaXMgbm90IG5lY2Nlc2FyeSB0aGUgc2FtZSByZXZpc2lvbiBhcyBtYXJrZWQgYXMgaGVhZCBp biB0aGUgUkNTIGZpbGUuCglteSAkaGVhZHJldiA9ICRjdXJicmFuY2ggfHwgIjEiOwoJKCRzeW1y ZXZ7Ik1BSU4ifSA9ICRoZWFkcmV2KSA9fiBzLyhcZCspJC8wLiQxLzsKCglmb3JlYWNoICRyZXYg KEByZXZvcmRlcikgewoJCWlmICgkcmV2ID1+IC9eKFxTKilcLlxkKyQvICYmICRoZWFkcmV2IGVx ICQxKSB7CgkJCSRzeW1yZXZ7IkhFQUQifSA9ICRyZXY7CgkJCWxhc3Q7CgkJfQoJfQoJKCRzeW1y ZXZ7IkhFQUQifSA9ICRoZWFkcmV2KSA9fiBzL1wuXGQrJC8vCgkgICAgaWYgKCFkZWZpbmVkKCRz eW1yZXZ7IkhFQUQifSkpOwoJcHJpbnQgIkRvbmUgZmluZGluZyBIRUFEXG4iIGlmICgkdmVyYm9z ZSk7CgoJIwoJIyBOb3cgdGhhdCB3ZSBrbm93IGFsbCBvZiB0aGUgcmV2aXNpb24gbnVtYmVycywg d2UgY2FuIGFzc29jaWF0ZQoJIyBhYnNvbHV0ZSByZXZpc2lvbiBudW1iZXJzIHdpdGggYWxsIG9m IHRoZSBzeW1ib2xpYyBuYW1lcywgYW5kCgkjIHBhc3MgdGhlbSB0byB0aGUgZm9ybSBzbyB0aGF0 IHRoZSBzYW1lIGFzc29jaWF0aW9uIGRvZXNuJ3QgaGF2ZQoJIyB0byBiZSBidWlsdCB0aGVuLgoJ IwoJdW5kZWYgQGJyYW5jaG5hbWVzOwoJdW5kZWYgJWJyYW5jaHBvaW50OwoJdW5kZWYgJHNlbDsK Cglmb3JlYWNoIChyZXZlcnNlIHNvcnQga2V5cyAlc3ltcmV2KSB7CgkJJHJldiA9ICRzeW1yZXZ7 JF99OwoJCWlmICgkcmV2ID1+IC9eKCguKilcLik/XGIwXC4oXGQrKSQvKSB7CgkJCXB1c2ggKEBi cmFuY2huYW1lcywgJF8pOwoKCQkJIwoJCQkjIEEgcmV2aXNpb24gbnVtYmVyIG9mIEEuQi4wLkQg cmVhbGx5IHRyYW5zbGF0ZXMgaW50bwoJCQkjICJ0aGUgaGlnaGVzdCBjdXJyZW50IHJldmlzaW9u IG9uIGJyYW5jaCBBLkIuRCIuCgkJCSMKCQkJIyBJZiB0aGVyZSBpcyBubyBicmFuY2ggQS5CLkQs IHRoZW4gaXQgdHJhbnNsYXRlcyBpbnRvCgkJCSMgdGhlIGhlYWQgQS5CIC4KCQkJIwoJCQkjIFRo aXMgcmVhc29uaW5nIGFsc28gYXBwbGllcyB0byB0aGUgbWFpbiBicmFuY2ggQS5CLAoJCQkjIHdp dGggdGhlIGJyYW5jaCBudW1iZXIgMC5BLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAoJCQkjIGl0 IGhhcyBubyBoZWFkIHRvIHRyYW5zbGF0ZSB0byBpZiB0aGVyZSBpcyBub3RoaW5nIG9uCgkJCSMg dGhlIGJyYW5jaCwgYnV0IEkgZ3Vlc3MgdGhpcyBjYW4gbmV2ZXIgaGFwcGVuPwoJCQkjCgkJCSMg KHRoZSBjb2RlIGJlbG93IGdyYWNlZnVsbHkgZm9yZ2V0cyBhYm91dCB0aGUgYnJhbmNoCgkJCSMg aWYgaXQgc2hvdWxkIGhhcHBlbikKCQkJIwoJCQkkaGVhZCA9IGRlZmluZWQoJDIpID8gJDIgOiAi IjsKCQkJJGJyYW5jaCA9ICQzOwoJCQkkYnJhbmNocmV2ID0gJGhlYWQgLiAoJGhlYWQgbmUgIiIg PyAiLiIgOiAiIikgLiAkYnJhbmNoOwoJCQlteSAkcmVnZXg7CgkJCSRyZWdleCA9IHF1b3RlbWV0 YSAkYnJhbmNocmV2OwoJCQkkcmV2ICAgPSAkaGVhZDsKCgkJCWZvcmVhY2ggbXkgJHIgKEByZXZv cmRlcikgewoJCQkJaWYgKCRyID1+IC9eJHtyZWdleH1cYi8pIHsKCQkJCQkkcmV2ID0gJGJyYW5j aHJldjsKCQkJCQlsYXN0OwoJCQkJfQoJCQl9CgkJCW5leHQgaWYgKCRyZXYgZXEgIiIpOwoKCQkJ aWYgKCRyZXYgbmUgJGhlYWQgJiYgJGhlYWQgbmUgIiIpIHsKCQkJCSRicmFuY2hwb2ludHskaGVh ZH0gLj0gIiwgIgoJCQkJICAgIGlmICgkYnJhbmNocG9pbnR7JGhlYWR9KTsKCQkJCSRicmFuY2hw b2ludHskaGVhZH0gLj0gJF87CgkJCX0KCQl9CgkJJHJldnN5bXskcmV2fSAuPSAiLCAiIGlmICgk cmV2c3lteyRyZXZ9KTsKCQkkcmV2c3lteyRyZXZ9IC49ICRfOwoJCSRzZWwgLj0gIjxvcHRpb24g dmFsdWU9XCIke3Jldn06JHtffVwiPiRfPC9vcHRpb24+XG4iOwoJfQoJcHJpbnQgIkRvbmUgYXNz b2NpYXRpbmcgcmV2aXNpb25zIHdpdGggYnJhbmNoZXNcbiIgaWYgKCR2ZXJib3NlKTsKCglteSAo JG9ubHlvbmJyYW5jaCwgJG9ubHlicmFuY2hwb2ludCk7CglpZiAoJG9ubHlvbmJyYW5jaCA9ICRp bnB1dHsnb25seV93aXRoX3RhZyd9KSB7CgkJJG9ubHlvbmJyYW5jaCA9ICRzeW1yZXZ7JG9ubHlv bmJyYW5jaH07CgkJaWYgKCRvbmx5b25icmFuY2ggPX4gcy9cYjBcLi8vKSB7CgkJCSgkb25seWJy YW5jaHBvaW50ID0gJG9ubHlvbmJyYW5jaCkgPX4gcy9cLlxkKyQvLzsKCQl9IGVsc2UgewoJCQkk b25seWJyYW5jaHBvaW50ID0gJG9ubHlvbmJyYW5jaDsKCQl9CgoJCWlmICghZGVmaW5lZCgkb25s eW9uYnJhbmNoKSB8fCAkb25seWJyYW5jaHBvaW50IGVxICIiKSB7CgkJCWZhdGFsKCI0MDQgVGFn IG5vdCBmb3VuZCIsCgkJCSAgICAgICdUYWcgJXMgbm90IGRlZmluZWQnLAoJCQkgICAgICAkaW5w dXR7J29ubHlfd2l0aF90YWcnfSk7CgkJfQoJfQoKCXVuZGVmIEByZXZpc2lvbnM7CgoJZm9yZWFj aCAoQGFsbHJldmlzaW9ucykgewoJCSgkYnIgID0gJF8pICA9fiBzL1wuXGQrJC8vOwoJCSgkYnJw ID0gJGJyKSA9fiBzL1wuXGQrJC8vOwoJCW5leHQKCQkgICAgaWYgKCRvbmx5b25icmFuY2ggJiYg JGJyIG5lICRvbmx5b25icmFuY2gKCQkgICAgJiYgJF8gbmUgJG9ubHlicmFuY2hwb2ludCk7CgkJ dW5zaGlmdCAoQHJldmlzaW9ucywgJF8pOwoJfQoKCWlmICgkbG9nc29ydCBlcSAiZGF0ZSIpIHsK CgkJIyBTb3J0IHRoZSByZXZpc2lvbnMgaW4gY29tbWl0IG9yZGVyIGFuIHNlY29uZGFyeSBzb3J0 IG9uIHJldmlzaW9uCgkJIyAoc2Vjb25kYXJ5IHNvcnQgbmVlZGVkIGZvciBpbXBvcnRlZCBzb3Vy Y2VzLCBvciB0aGUgZmlyc3QgbWFpbgoJCSMgcmV2aXNpb24gZ2V0cyBiZWZvcmUgdGhlIHNhbWUg cmV2aXNpb24gb24gdGhlIDEuMS4xIGJyYW5jaCkKCQlAcmV2ZGlzcGxheW9yZGVyID0KCQkgICAg c29ydCB7ICRkYXRleyRifSA8PT4gJGRhdGV7JGF9IHx8IC1yZXZjbXAoJGEsICRiKSB9CgkJICAg IEByZXZpc2lvbnM7Cgl9IGVsc2lmICgkbG9nc29ydCBlcSAicmV2IikgewoKCQkjIFNvcnQgdGhl IHJldmlzaW9ucyBpbiByZXZpc2lvbiBvcmRlciwgaGlnaGVzdCBmaXJzdAoJCUByZXZkaXNwbGF5 b3JkZXIgPSByZXZlcnNlIHNvcnQgeyByZXZjbXAoJGEsICRiKSB9IEByZXZpc2lvbnM7Cgl9IGVs c2UgewoKCQkjIE5vIHNvcnRpbmcuIFByZXNlbnQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcmxvZyAv IGN2cyBsb2cKCQlAcmV2ZGlzcGxheW9yZGVyID0gQHJldmlzaW9uczsKCX0KCn0KCnN1YiBwcmlu dERpZmZMaW5rcygkJCkgewoJbXkgKCR0ZXh0LCAkdXJsKSA9IEBfOwoJbXkgQGV4dHJhOwoKCWxv Y2FsICRfOwoJZm9yICgkRElGRlRZUEVTeyRkZWZhdWx0RGlmZlR5cGV9eydjb2xvcmVkJ30gPyBx dyh1KSA6IHF3KGgpKSB7CgkJbXkgJGYgPSAkXyBlcSAkZGVmYXVsdERpZmZUeXBlID8gJycgOiAk XzsKCgkJcHVzaCBAZXh0cmEsICZsaW5rKGxjICRESUZGVFlQRVN7JF99eydkZXNjcid9LCAiJHVy bCZmPSRmIik7Cgl9CgoJcHJpbnQgJmxpbmsoJHRleHQsICR1cmwpLCAnICgnLCBqb2luICgnLCAn LCBAZXh0cmEpLCAnKSc7Cn0KCnN1YiBwcmludExvZygkOyQpIHsKCW15ICgkbGluaywgJGJyLCAk YnJwKTsKCSgkXywgJGxpbmspID0gQF87CgkoJGJyICA9ICRfKSAgPX4gcy9cLlxkKyQvLzsKCSgk YnJwID0gJGJyKSA9fiBzL1wuP1xkKyQvLzsKCW15ICgkaXNEZWFkLCAkcHJldik7CgoJJGxpbmsg PSAxIGlmICghZGVmaW5lZCgkbGluaykpOwoJJGlzRGVhZCA9ICgkc3RhdGV7JF99IGVxICJkZWFk Iik7CgoJcHJpbnQgIjxwPlxuIjsKCWlmICgkbGluayAmJiAhJGlzRGVhZCkgewoJCW15ICgkZmls ZW5hbWUpOwoJCSgkZmlsZW5hbWUgPSAkd2hlcmUpID1+IHMvXi4qXC8vLzsKCQlteSAoJGZpbGV1 cmwpID0gdXJsZW5jb2RlKCRmaWxlbmFtZSk7CgkJcHJpbnQgIjxhIG5hbWU9XCJyZXYkX1wiPjwv YT4iOwoKCQlpZiAoZGVmaW5lZCgkcmV2c3lteyRffSkpIHsKCQkJZm9yZWFjaCBteSAkc3ltIChz cGxpdCAoIiwgIiwgJHJldnN5bXskX30pKSB7CgkJCQlwcmludCAiPGEgbmFtZT1cIiRzeW1cIj48 L2E+IjsKCQkJfQoJCX0KCgkJaWYgKGRlZmluZWQoJHJldnN5bXskYnJ9KSAmJiAkcmV2c3lteyRi cn0KCQkgICAgJiYgIWRlZmluZWQoJG5hbWVwcmludGVkeyRicn0pKQoJCXsKCQkJZm9yZWFjaCBt eSAkc3ltIChzcGxpdCAoIiwgIiwgJHJldnN5bXskYnJ9KSkgewoJCQkJcHJpbnQgIjxhIG5hbWU9 XCIkc3ltXCI+PC9hPiI7CgkJCX0KCQkJJG5hbWVwcmludGVkeyRicn0gPSAxOwoJCX0KCQlwcmlu dCAiXG4gUmV2aXNpb24gIjsKCQkmZG93bmxvYWRfbGluaygkZmlsZXVybCwgJF8sICRfLAoJCQkk ZGVmYXVsdFZpZXdhYmxlID8gInRleHQveC1jdnN3ZWItbWFya3VwIiA6IHVuZGVmKTsKCgkJaWYg KCRkZWZhdWx0Vmlld2FibGUpIHsKCQkJcHJpbnQgIiAvICgiOwoJCQkmZG93bmxvYWRfbGluaygk ZmlsZXVybCwgJF8sICJkb3dubG9hZCIsICRtaW1ldHlwZSk7CgkJCXByaW50ICIpIjsKCQl9CgoJ CWlmIChub3QgJGRlZmF1bHRUZXh0UGxhaW4pIHsKCQkJcHJpbnQgIiAvICgiOwoJCQkmZG93bmxv YWRfbGluaygkZmlsZXVybCwgJF8sICJhcyB0ZXh0IiwgInRleHQvcGxhaW4iKTsKCQkJcHJpbnQg IikiOwoJCX0KCgkJaWYgKCEkZGVmYXVsdFZpZXdhYmxlKSB7CgkJCXByaW50ICIgLyAoIjsKCQkJ JmRvd25sb2FkX2xpbmsoJGZpbGV1cmwsICRfLCAidmlldyIsCgkJCQkidGV4dC94LWN2c3dlYi1t YXJrdXAiKTsKCQkJcHJpbnQgIikiOwoJCX0KCgkJaWYgKCRhbGxvd19hbm5vdGF0ZSkgewoJCQlw cmludCAiIC0gIjsKCQkJcHJpbnQgJmxpbmsoCgkJCQknYW5ub3RhdGUnLAoJCQkJc3ByaW50ZigK CQkJCQknJXMvJXM/YW5ub3RhdGU9JXMlcycsICRzY3JpcHRuYW1lLAoJCQkJCXVybGVuY29kZSgk d2hlcmUpLCAgICAgJF8sCgkJCQkJJGJhcmVxdWVyeQoJCQkJKQoJCQkpOwoJCX0KCgkJIyBQbHVz IGEgc2VsZWN0IGxpbmsgaWYgZW5hYmxlZCwgYW5kIHRoaXMgdmVyc2lvbiBpc24ndCBzZWxlY3Rl ZAoJCWlmICgkYWxsb3dfdmVyc2lvbl9zZWxlY3QpIHsKCQkJaWYgKCghZGVmaW5lZCgkaW5wdXR7 InIxIn0pIHx8ICRpbnB1dHsicjEifSBuZSAkXykpIHsKCQkJCXByaW50ICIgLSAiOwoJCQkJcHJp bnQgJmxpbmsoCgkJCQkJJ1tzZWxlY3QgZm9yIGRpZmZzXScsCgkJCQkJc3ByaW50ZigKCQkJCQkJ JyVzP3IxPSVzJXMnLCAkc2NyaXB0d2hlcmUsCgkJCQkJCSRfLCAgICAgICAgICAgJGJhcmVxdWVy eQoJCQkJCSkKCQkJCSk7CgkJCX0gZWxzZSB7CgkJCQlwcmludCAiIC0gPGI+W3NlbGVjdGVkXTwv Yj4iOwoJCQl9CgkJfQoJfSBlbHNlIHsKCQlwcmludCAiUmV2aXNpb24gPGI+JF88L2I+IjsKCX0K CglpZiAoL14xXC4xXC4xXC5cZCskLykgewoJCXByaW50ICIgPGk+KHZlbmRvciBicmFuY2gpPC9p PiI7Cgl9CglpZiAoZGVmaW5lZCBAbXl0eikgewoJCW15ICgkZXN0KSA9ICRteXR6Wyhsb2NhbHRp bWUoJGRhdGV7JF99KSlbOF1dOwoJCXByaW50ICIsIDxpPiIsIHNjYWxhciBsb2NhbHRpbWUoJGRh dGV7JF99KSwgIiAkZXN0PC9pPiAoIjsKCX0gZWxzZSB7CgkJcHJpbnQgIiwgPGk+Iiwgc2NhbGFy IGdtdGltZSgkZGF0ZXskX30pLCAiIFVUQzwvaT4gKCI7Cgl9CglwcmludCByZWFkYWJsZVRpbWUo dGltZSgpIC0gJGRhdGV7JF99LCAxKSwgIiBhZ28pIjsKCXByaW50ICIgYnkgIjsKCXByaW50ICI8 aT4iLCAkYXV0aG9yeyRffSwgIjwvaT5cbiI7CglwcmludCAiPGJyPkJyYW5jaDogPGI+IiwgJGxp bmsgPyBsaW5rX3RhZ3MoJHJldnN5bXskYnJ9KSA6ICRyZXZzeW17JGJyfSwKCSAgICAiPC9iPlxu IgoJICAgIGlmICgkcmV2c3lteyRicn0pOwoJcHJpbnQgIjxicj5DVlMgVGFnczogPGI+IiwgJGxp bmsgPyBsaW5rX3RhZ3MoJHJldnN5bXskX30pIDogJHJldnN5bXskX30sCgkgICAgIjwvYj4iCgkg ICAgaWYgKCRyZXZzeW17JF99KTsKCXByaW50ICI8YnI+QnJhbmNoIHBvaW50IGZvcjogPGI+IiwK CSAgICAkbGluayA/IGxpbmtfdGFncygkYnJhbmNocG9pbnR7JF99KSA6ICRicmFuY2hwb2ludHsk X30sICI8L2I+XG4iCgkgICAgaWYgKCRicmFuY2hwb2ludHskX30pOwoKCSMgRmluZCB0aGUgcHJl dmlvdXMgcmV2aXNpb24KCW15IEBwcmV2cmV2ID0gc3BsaXQgKC9cLi8sICRfKTsKCWRvIHsKCQlp ZiAoLS0kcHJldnJldlskI3ByZXZyZXZdIDw9IDApIHsKCgkJCSMgSWYgaXQgd2FzIFguWS5aLjEs IGp1c3QgbWFrZSBpdCBYLlkKCQkJcG9wIChAcHJldnJldik7CgkJCXBvcCAoQHByZXZyZXYpOwoJ CX0KCQkkcHJldiA9IGpvaW4gKCIuIiwgQHByZXZyZXYpOwoJfSB1bnRpbCAoZGVmaW5lZCgkZGF0 ZXskcHJldn0pIHx8ICRwcmV2IGVxICIiKTsKCglpZiAoJHByZXYgbmUgIiIpIHsKCQlpZiAoJGRp ZmZsaW5lc3skX30pIHsKCQkJcHJpbnQKCQkJICAgICI8YnI+Q2hhbmdlcyBzaW5jZSA8Yj4kcHJl djogJGRpZmZsaW5lc3skX30gbGluZXM8L2I+IjsKCQl9Cgl9CgoJaWYgKCRpc0RlYWQpIHsKCQlw cmludCAiPGJyPjxiPjxpPkZJTEUgUkVNT1ZFRDwvaT48L2I+XG4iOwoJfSBlbHNpZiAoJGxpbmsp IHsKCQlteSAlZGlmZnJldiA9ICgpOwoJCSRkaWZmcmV2eyRffSA9IDE7CgkJJGRpZmZyZXZ7IiJ9 ID0gMTsKCQlwcmludCAnPGJyPic7CgkJbXkgJGRpZmYgPSAnRGlmZic7CgoJCSMKCQkjIE9mZmVy IGRpZmYgdG8gcHJldmlvdXMgcmV2aXNpb24KCQlpZiAoJHByZXYpIHsKCQkJJGRpZmZyZXZ7JHBy ZXZ9ID0gMTsKCgkJCW15ICR1cmwgPQoJCQkgICAgc3ByaW50ZignJXMuZGlmZj9yMT0lcyZyMj0l cyVzJywgJHNjcmlwdHdoZXJlLAoJCQkJJHByZXYsICRfLCAkYmFyZXF1ZXJ5KTsKCgkJCXByaW50 ICRkaWZmLCAiIHRvIHByZXZpb3VzICI7CgkJCSRkaWZmID0gJyc7CgkJCXByaW50RGlmZkxpbmtz KCRwcmV2LCAkdXJsKTsKCQl9CgoJCSMKCQkjIFBsdXMsIGlmIGl0J3Mgb24gYSBicmFuY2gsIGFu ZCBpdCdzIG5vdCBhIHZlbmRvciBicmFuY2gsCgkJIyBvZmZlciBhIGRpZmYgd2l0aCB0aGUgYnJh bmNoIHBvaW50LgoJCWlmICgkcmV2c3lteyRicnB9ICYmICEvXjFcLjFcLjFcLlxkKyQvCgkJICAg ICYmICFkZWZpbmVkKCRkaWZmcmV2eyRicnB9KSkKCQl7CgkJCW15ICR1cmwgPQoJCQkgICAgc3By aW50ZignJXMuZGlmZj9yMT0lcyZyMj0lcyVzJywgJHNjcmlwdHdoZXJlLCAkYnJwLAoJCQkJJF8s ICRiYXJlcXVlcnkpOwoKCQkJcHJpbnQgJGRpZmYsICIgdG8gYnJhbmNocG9pbnQgIjsKCQkJJGRp ZmYgPSAnJzsKCQkJcHJpbnREaWZmTGlua3MoJGJycCwgJHVybCk7CgkJfQoKCQkjCgkJIyBQbHVz LCBpZiBpdCdzIG9uIGEgYnJhbmNoLCBhbmQgaXQncyBub3QgYSB2ZW5kb3IgYnJhbmNoLAoJCSMg b2ZmZXIgdG8gZGlmZiB3aXRoIHRoZSBuZXh0IHJldmlzaW9uIG9mIHRoZSBoaWdoZXIgYnJhbmNo LgoJCSMgKGUuZy4gY2hhbmdlIGdldHMgY29tbWl0dGVkIGFuZCB0aGVuIGJyb3VnaHQKCQkjIG92 ZXIgdG8gLXN0YWJsZSkKCQlpZiAoL15cZCtcLlxkK1wuXGQrLyAmJiAhL14xXC4xXC4xXC5cZCsk LykgewoJCQlteSAoJGksICRuZXh0bWFpbik7CgoJCQlmb3IgKCRpID0gMCA7ICRpIDwgJCNyZXZv cmRlciAmJiAkcmV2b3JkZXJbJGldIG5lICRfIDsKCQkJICAgICRpKyspCgkJCXsKCQkJfQoJCQlt eSBAdG1wMiA9IHNwbGl0ICgvXC4vLCAkXyk7CgkJCWZvciAoJG5leHRtYWluID0gIiIgOyAkaSA+ IDAgOyAkaS0tKSB7CgkJCQlteSAkbmV4dCA9ICRyZXZvcmRlclskaSAtIDFdOwoJCQkJbXkgQHRt cDEgPSBzcGxpdCAoL1wuLywgJG5leHQpOwoKCQkJCWlmIChAdG1wMSA8IEB0bXAyKSB7CgkJCQkJ JG5leHRtYWluID0gJG5leHQ7CgkJCQkJbGFzdDsKCQkJCX0KCgkJCQkjIE9ubHkgdGhlIGhpZ2hl c3QgdmVyc2lvbiBvbiBhIGJyYW5jaCBzaG91bGQgaGF2ZQoJCQkJIyBhIGRpZmYgZm9yIHRoZSAi bmV4dCBtYWluIi4KCQkJCWxhc3QKCQkJCSAgICBpZiAoQHRtcDEgLSAxIDw9IEB0bXAyCgkJCQkg ICAgJiYgam9pbiAoIi4iLCBAdG1wMVswIC4uICQjdG1wMSAtIDFdKSBlcQoJCQkJICAgIGpvaW4g KCIuIiwgQHRtcDJbMCAuLiAkI3RtcDEgLSAxXSkpOwoJCQl9CgoJCQlpZiAoIWRlZmluZWQoJGRp ZmZyZXZ7JG5leHRtYWlufSkpIHsKCQkJCSRkaWZmcmV2eyRuZXh0bWFpbn0gPSAxOwoKCQkJCW15 ICR1cmwgPQoJCQkJICAgIHNwcmludGYoJyVzLmRpZmY/cjE9JXMmcjI9JXMlcycsCgkJCQkJJHNj cmlwdHdoZXJlLCAkbmV4dG1haW4sICRfLAoJCQkJCSRiYXJlcXVlcnkpOwoKCQkJCXByaW50ICRk aWZmLCAiIG5leHQgbWFpbiAiOwoJCQkJJGRpZmYgPSAnJzsKCQkJCXByaW50RGlmZkxpbmtzKCRu ZXh0bWFpbiwgJHVybCk7CgkJCX0KCQl9CgoJCSMgUGx1cyBpZiB1c2VyIGhhcyBzZWxlY3RlZCBv bmx5IHIxLCB0aGVuIHByZXNlbnQgYSBsaW5rCgkJIyB0byBtYWtlIGEgZGlmZiB0byB0aGF0IHJl dmlzaW9uCgkJaWYgKGRlZmluZWQoJGlucHV0eyJyMSJ9KSAmJiAhZGVmaW5lZCgkZGlmZnJldnsk aW5wdXR7InIxIn19KSkgewoJCQkkZGlmZnJldnskaW5wdXR7InIxIn19ID0gMTsKCgkJCW15ICR1 cmwgPQoJCQkgICAgc3ByaW50ZignJXMuZGlmZj9yMT0lcyZyMj0lcyVzJywgJHNjcmlwdHdoZXJl LAoJCQkJJGlucHV0eydyMSd9LCAkXywgJGJhcmVxdWVyeSk7CgoJCQlwcmludCAkZGlmZiwgIiB0 byBzZWxlY3RlZCAiOwoJCQkkZGlmZiA9ICcnOwoJCQlwcmludERpZmZMaW5rcygkaW5wdXR7J3Ix J30sICR1cmwpOwoJCX0KCgl9CglwcmludCAiXG48L3A+XG48cHJlPlxuIjsKCXByaW50ICZodG1s aWZ5KCRsb2d7JF99LCAkYWxsb3dfbG9nX2V4dHJhKTsKCXByaW50ICI8L3ByZT5cbiI7Cn0KCiN4 aGNoZW4Kc3ViIGRvR3JhcGgoJCkgewoJbXkgKCRmdWxsbmFtZSkgPSBAXzsKCW15ICgkZGlmZnJl diwgJHVwd2hlcmUsICRmaWxlbmFtZSwgJGJhY2t1cmwpOwoKCXJlYWRMb2coJGZ1bGxuYW1lKTsK CWh0bWxfaGVhZGVyKCJDVlMgcmV2aXNpb25zIHRyZWUgZm9yICR3aGVyZSIpOwoJKCR1cHdoZXJl ICA9ICR3aGVyZSkgPX4gc3woQXR0aWMvKT9bXi9dKyR8fDsKCSgkZmlsZW5hbWUgPSAkd2hlcmUp ID0gfiBzfF4uKi98fDsKCSRiYWNrdXJsID0gJHNjcmlwdG5hbWUgLiAiLyIgLiB1cmxlbmNvZGUo JHVwd2hlcmUpIC4gJHF1ZXJ5OwoJcHJpbnQgIjxwPlxuIjsKCXByaW50ICZsaW5rKCRiYWNraWNv biwgIiRiYWNrdXJsIyRmaWxlbmFtZSIpLCAiIDxiPlVwIHRvICIsCiAgICAgICAgICAgICZjbGlj a2FibGVQYXRoKCR1cHdoZXJlLCAxKSwgIjwvYj5cbjwvcD5cbiI7CiAgICAgICAgcHJpbnQgIjxw PlxuICI7CglwcmludCAiXG48L3A+XG48aHIgbm9zaGFkZT5cbiI7CglwcmludCAiPGZvbnQgY29s b3I9cmVkPjwvZm9udD48YnI+IjsKCglteSAkc2hvd2NvZGUgPSAwOwoJbXkgJGJBZGRDb21tYTsK CglwcmludCAiPHhtcD4iIGlmICRzaG93Y29kZTsKCShteSAkZmlsZXVybCA9ICR3aGVyZSkgPX4g cy9eLipcLy8vOwoJJGZpbGV1cmwgPSB1cmxlbmNvZGUoJGZpbGV1cmwpOwoJcHJpbnQgIjxzY3Jp cHQ+XG4iOwoJcHJpbnQgInZhciBzQmFyZXF1ZXJ5ID0gXCIiLmh0bWxqcygkYmFyZXF1ZXJ5KS4i XCI7XG4iOwoJcHJpbnQgInZhciBhc0JhcmVxdWVyeSA9IHNCYXJlcXVlcnkuc3BsaXQoXCcmXCcp O1xuIjsKCXByaW50ICJzQmFyZXF1ZXJ5ID0gXCJcIjtcbiI7CglwcmludCAidmFyIHNJZ25vcmUg PSBcIm9ubHlfd2l0aF90YWc9XCI7XG4iOwoJcHJpbnQgImZvciAodmFyIGkgPSAwOyBpIDwgYXNC YXJlcXVlcnkubGVuZ3RoOyBpKyspXG4iOwoJcHJpbnQgIntcbiI7CglwcmludCAiCWlmIChhc0Jh cmVxdWVyeVtpXS5sZW5ndGggPD0gMCkgY29udGludWU7XG4iOwoJcHJpbnQgIglpZiAoYXNCYXJl cXVlcnlbaV0uc3Vic3RyKDAsIHNJZ25vcmUubGVuZ3RoKSA9PSBzSWdub3JlKSBjb250aW51ZTtc biI7CglwcmludCAiCXNCYXJlcXVlcnkgKz0gXCImXCIgKyBhc0JhcmVxdWVyeVtpXTtcbiI7Cglw cmludCAifVxuIjsKCXByaW50ICJ2YXIgYVJldiA9IFxuW1xuIjsKCSRiQWRkQ29tbWEgPSAwOwoJ Zm9yZWFjaCAoQGFsbHJldmlzaW9ucykgewoJCWlmICgkYkFkZENvbW1hID09IDApIHsKCQkJJGJB ZGRDb21tYSA9IDE7CgkJfQoJCWVsc2UgewoJCQlwcmludCAiLFxuIjsKCQl9CgkJcHJpbnQgIntc biI7CgkJcHJpbnQgIglSZXY6IFwiJF9cIixcbiI7CgkJcHJpbnQgIglMb2c6IFwiIi5odG1sanMo aHRtbGlmeSgkbG9neyRffSwgJGFsbG93X2xvZ19leHRyYSkpLiJcIlxuIjsKCQlwcmludGYgIn0i OwoJfQoJcHJpbnRmICJcbl07XG4iOwoKCXByaW50ZiAidmFyIGFTeW0gPSBcbltcbiI7CgoJZm9y ZWFjaCBteSAkaSAoa2V5cyAlc3ltcmV2KSB7CgkJcHJpbnQgIntcbiI7CgkJcHJpbnQgIglTeW06 CVwiIi5odG1sanMoaHRtbHF1b3RlKCRpKSkuIlwiLFxuIjsKCQlwcmludCAiCVJldjoJXCIkc3lt cmV2eyRpfVwiXG4iOwoJCXByaW50ICJ9LFxuIjsKCX0KCXByaW50ICJ7XG4iOwoJcHJpbnQgIglT eW06CVwiIi5odG1sanMoaHRtbHF1b3RlKCRmaWxldXJsKSkuIlwiLFxuIjsKCXByaW50ICIJUmV2 OglcIjFcIlxuIjsKCXByaW50ICJ9XG4iOwoJcHJpbnQgIl07XG4iOwoKCXByaW50ICJmb3IgKHZh ciBpID0gMDsgaSA8IGFSZXYubGVuZ3RoOyBpKyspXHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglw cmludCAiCWlmIChhUmV2W2ldLkxvZy5zdWJzdHIoYVJldltpXS5Mb2cubGVuZ3RoIC0gMSkgPT0g XCdcXG5cJylcclxuIjsNCglwcmludCAiCQlhUmV2W2ldLkxvZyA9IGFSZXZbaV0uTG9nLnN1YnN0 cigwLCBhUmV2W2ldLkxvZy5sZW5ndGggLSAxKVxyXG4iOw0KCXByaW50ICJ9XHJcbiI7DQoJcHJp bnQgInZhciBzRmlsZSA9IGFTeW1bYVN5bS5sZW5ndGggLSAxXS5TeW07XHJcbiI7DQoJcHJpbnQg IlxyXG4iOwoKCXByaW50ICJmdW5jdGlvbiBTb3J0VmVyRnVuKHNhLCBzYilcclxuIjsNCglwcmlu dCAie1xyXG4iOw0KCXByaW50ICIJdmFyIGEgPSBzYS5SZXYuc3BsaXQoXCIuXCIpO1xyXG4iOw0K CXByaW50ICIJdmFyIGIgPSBzYi5SZXYuc3BsaXQoXCIuXCIpO1xyXG4iOw0KCXByaW50ICIJdmFy IGlhLCBpYiwgbGEsIGxiO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCWxhID0gYS5s ZW5ndGg7XHJcbiI7DQoJcHJpbnQgIglsYiA9IGIubGVuZ3RoO1xyXG4iOw0KCXByaW50ICIJZm9y ICh2YXIgaSA9IDA7IGkgPCBsYSAmJiBpIDwgbGI7IGkrKylcclxuIjsNCglwcmludCAiCXtcclxu IjsNCglwcmludCAiCQlpYSA9IHBhcnNlSW50KGFbaV0sIDEwKTtcclxuIjsNCglwcmludCAiCQlp YiA9IHBhcnNlSW50KGJbaV0sIDEwKTtcclxuIjsNCglwcmludCAiCQlpZiAoaWEgPCBpYikgcmV0 dXJuIC0xO1xyXG4iOw0KCXByaW50ICIJCWVsc2UgaWYgKGlhID4gaWIpIHJldHVybiAxO1xyXG4i Ow0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCWlmIChsYSA8IGxi KSByZXR1cm4gLTE7XHJcbiI7DQoJcHJpbnQgIgllbHNlIGlmIChsYSA+IGxiKSByZXR1cm4gMTtc clxuIjsNCglwcmludCAiCWVsc2UgcmV0dXJuIDA7XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglw cmludCAiXHJcbiI7DQoJcHJpbnQgImZ1bmN0aW9uIENyZWF0ZVJldlN0cnVjdChhUmV2KVxyXG4i Ow0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQgIglhUmV2ID0gYVJldi5zb3J0KFNvcnRWZXJGdW4p O1xyXG4iOw0KCXByaW50ICIJdmFyIHNSdCA9IFxyXG4iOw0KCXByaW50ICIJe1xyXG4iOw0KCXBy aW50ICIJCVJldjogXCJcIixcclxuIjsNCglwcmludCAiCQlMb2c6IFwiXCIsXHJcbiI7DQoJcHJp bnQgIgkJaUxlbjogMCxcclxuIjsNCglwcmludCAiCQlhUmV2OiBbXVxyXG4iOw0KCXByaW50ICIJ fTtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgl2YXIgaUxlbjtcclxuIjsNCglwcmlu dCAiCXZhciBzO1xyXG4iOw0KCXByaW50ICIJdmFyIGJFeGl0O1xyXG4iOw0KCXByaW50ICIJZm9y ICh2YXIgaSA9IDA7IGkgPCBhUmV2Lmxlbmd0aDsgaSsrKVxyXG4iOw0KCXByaW50ICIJe1xyXG4i Ow0KCXByaW50ICIJCWlMZW4gPSBhUmV2W2ldLlJldi5zcGxpdChcIi5cIikubGVuZ3RoO1xyXG4i Ow0KCXByaW50ICJcclxuIjsNCglwcmludCAiCQliRXhpdCA9IGZhbHNlO1xyXG4iOw0KCXByaW50 ICIJCWZvciAodmFyIGogPSBcInNSdFwiOyAhYkV4aXQ7KVxyXG4iOw0KCXByaW50ICIJCXtcclxu IjsNCglwcmludCAiCQkJcyA9IGogKyBcIi5hUmV2XCI7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0K CXByaW50ICIJCQl2YXIgdiA9IChcclxuIjsNCglwcmludCAiCQkJCQlcImlmICggXCIgKyBzICsg XCIubGVuZ3RoID09IDAgKVxcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCVwie1xcblwiXHJcbiI7 DQoJcHJpbnQgIgkJCQkrCQlcImJFeGl0ID0gdHJ1ZTtcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJ KwkJcyArIFwiWzBdID0gYVJldltpXTtcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwkJcyArIFwi WzBdLmlMZW4gPSBpTGVuO1xcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCQlzICsgXCJbMF0uYVJl diA9IFtdO1xcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCVwifVxcblwiXHJcbiI7DQoJcHJpbnQg IgkJCQkrCVwiZWxzZSBpZiAoIFwiICsgcyArIFwiWzBdLmlMZW4gPT0gaUxlbiApXFxuXCJcclxu IjsNCglwcmludCAiCQkJCSsJXCJ7XFxuXCJcclxuIjsNCglwcmludCAiCQkJCSsJCVwiYkV4aXQg PSB0cnVlO1xcblwiXHJcbiI7DQoJcHJpbnQgIgkJCQkrCQlzICsgXCJbXCIgKyBzICsgXCIubGVu Z3RoXSA9IGFSZXZbaV07XFxuXCJcclxuIjsNCglwcmludCAiCQkJCSsJCXMgKyBcIltcIiArIHMg KyBcIi5sZW5ndGggLSAxXS5pTGVuID0gaUxlbjtcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwkJ cyArIFwiW1wiICsgcyArIFwiLmxlbmd0aCAtIDFdLmFSZXYgPSBbXTtcXG5cIlxyXG4iOw0KCXBy aW50ICIJCQkJKwlcIn1cXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwlcImVsc2VcXG5cIlxyXG4i Ow0KCXByaW50ICIJCQkJKwlcIntcXG5cIlxyXG4iOw0KCXByaW50ICIJCQkJKwkJXCJqID0gXCdc IiArIHMgKyBcIltcJyArICggXCIgKyBzICsgXCIubGVuZ3RoIC0gMSApICsgXCddXCc7XFxuXCJc clxuIjsNCglwcmludCAiCQkJCSsJXCJ9XFxuXCJcclxuIjsNCglwcmludCAiCQkJCSk7XHJcbiI7 DQoJcHJpbnQgIgkJCWV2YWwodik7XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJ fVxyXG4iOw0KCXByaW50ICIJcmV0dXJuIHNSdDtcclxuIjsNCglwcmludCAifVxyXG4iOw0KCXBy aW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gR2V0VGFnKFJldiwgYVN5bSwgYk9uZSlcclxu IjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJdmFyIHNSdCA9IFwiXCI7XHJcbiI7DQoJcHJp bnQgIglpZiAoIWJPbmUpIHNSdCA9IFtdO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAi CWZvciAodmFyIGkgPSAwOyBpIDwgYVN5bS5sZW5ndGg7IGkrKylcclxuIjsNCglwcmludCAiCXtc clxuIjsNCglwcmludCAiCQlpZiAoYVN5bVtpXS5SZXYgPT0gUmV2KVxyXG4iOw0KCXByaW50ICIJ CXtcclxuIjsNCglwcmludCAiCQkJcmV0dXJuIGFTeW1baV0uU3ltO1xyXG4iOw0KCXByaW50ICIJ CX1cclxuIjsNCglwcmludCAiCX1cclxuIjsNCglwcmludCAiCXJldHVybiBzUnQ7XHJcbiI7DQoJ cHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgImZ1bmN0aW9uIENyZWF0ZVJl dkJyY2hTdHJ1Y3Qoc1JldiwgYVN5bSlcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJ aWYgKHNSZXYuYVJldi5sZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7XHJcbiI7DQoJcHJpbnQgIlxy XG4iOw0KCXByaW50ICIJdmFyIHNSZXZQYXIgPSBzUmV2LmFSZXZbMF0uUmV2LnN1YnN0cigwLCBz UmV2LmFSZXZbMF0uUmV2Lmxhc3RJbmRleE9mKFwiLlwiKSk7XHJcbiI7DQoJcHJpbnQgIglzUmV2 UGFyID0gc1JldlBhci5zdWJzdHIoMCwgc1JldlBhci5sYXN0SW5kZXhPZihcIi5cIikpO1xyXG4i Ow0KCXByaW50ICIJdmFyIHNSdCA9XHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJ UmV2OiBzUmV2UGFyLFxyXG4iOw0KCXByaW50ICIJCUxvZzogXCJcIixcclxuIjsNCglwcmludCAi CQlhVGFnOiBbXSxcclxuIjsNCglwcmludCAiCQlhQnJjaDogW11cclxuIjsNCglwcmludCAiCX1c clxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgl2YXIgc0JyY2ggPSBudWxsO1xyXG4iOw0K CXByaW50ICIJdmFyIHNCcjtcclxuIjsNCglwcmludCAiCXZhciBzVGhpc0JyY2g7XHJcbiI7DQoJ cHJpbnQgIglmb3IgKHZhciBpID0gMDsgaSA8IHNSZXYuYVJldi5sZW5ndGg7IGkrKylcclxuIjsN CglwcmludCAiCXtcclxuIjsNCglwcmludCAiCQlzVGhpc0JyY2ggPSBzUmV2LmFSZXZbaV0uUmV2 LnN1YnN0cigwLCBzUmV2LmFSZXZbaV0uUmV2Lmxhc3RJbmRleE9mKFwiLlwiKSk7XHJcbiI7DQoJ cHJpbnQgIgkJXHJcbiI7DQoJcHJpbnQgIgkJaWYgKHNCcmNoICE9IHNUaGlzQnJjaClcclxuIjsN CglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCXNCcmNoID0gc1RoaXNCcmNoO1xyXG4iOw0K CXByaW50ICIJCQlzUnQuYUJyY2hbc1J0LmFCcmNoLmxlbmd0aF0gPVxyXG4iOw0KCXByaW50ICIJ CQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlCcmNoOiBzQnJjaCxcclxuIjsNCglwcmludCAiCQkJCVRh ZzogR2V0VGFnKHNCcmNoLCBhU3ltLCB0cnVlKSxcclxuIjsNCglwcmludCAiCQkJCWFSZXY6IFtd XHJcbiI7DQoJcHJpbnQgIgkJCX1cclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIlxy XG4iOw0KCXByaW50ICIJCXNSdC5hQnJjaFtzUnQuYUJyY2gubGVuZ3RoIC0gMV0uYVJldltzUnQu YUJyY2hbc1J0LmFCcmNoLmxlbmd0aCAtIDFdLmFSZXYubGVuZ3RoXSA9XHJcbiI7DQoJcHJpbnQg IgkJe1xyXG4iOw0KCXByaW50ICIJCQlSZXY6IHNSZXYuYVJldltpXS5SZXYsXHJcbiI7DQoJcHJp bnQgIgkJCUxvZzogc1Jldi5hUmV2W2ldLkxvZyxcclxuIjsNCglwcmludCAiCQkJYVRhZzogR2V0 VGFnKHNSZXYuYVJldltpXS5SZXYsIGFTeW0sIGZhbHNlKSxcclxuIjsNCglwcmludCAiCQkJYUJy Y2g6IFtdXHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAi CQl2YXIgc1N1YiA9IENyZWF0ZVJldkJyY2hTdHJ1Y3Qoc1Jldi5hUmV2W2ldLCBhU3ltKTtcclxu IjsNCglwcmludCAiCQlpZiAoc1N1YiAhPSBudWxsKVxyXG4iOw0KCXByaW50ICIJCQlzUnQuYUJy Y2hbc1J0LmFCcmNoLmxlbmd0aCAtIDFdLmFSZXZbc1J0LmFCcmNoW3NSdC5hQnJjaC5sZW5ndGgg LSAxXS5hUmV2Lmxlbmd0aCAtIDFdLmFCcmNoID0gQ3JlYXRlUmV2QnJjaFN0cnVjdChzUmV2LmFS ZXZbaV0sIGFTeW0pLmFCcmNoO1xyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxu IjsNCglwcmludCAiCXJldHVybiBzUnQ7XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAi XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBDbGVhblN5bVRCKGFTeW0p XHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCXZhciBhUnQgPSBbXTtcclxuIjsNCglw cmludCAiCXZhciBpTG9vcCA9IGFTeW0ubGVuZ3RoO1xyXG4iOw0KCXByaW50ICIJdmFyIGlCcmNo LCBzQnJjaCwgc0hlYWRlcjtcclxuIjsNCglwcmludCAiCXZhciBpUFQ7XHJcbiI7DQoJcHJpbnQg Iglmb3IgKHZhciBpID0gMDsgaSA8IGlMb29wOyBpKyspXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7 DQoJcHJpbnQgIgkJaVBUID0gYVN5bVtpXS5SZXYubGFzdEluZGV4T2YoXCcuXCcpO1xyXG4iOw0K CXByaW50ICIJCWlmIChpUFQgPT0gLTEpIGNvbnRpbnVlO1xyXG4iOw0KCXByaW50ICIJCXNCcmNo ID0gYVN5bVtpXS5SZXYuc3Vic3RyKDAsIGlQVCk7XHJcbiI7DQoJcHJpbnQgIgkJaUJyY2ggPSBh U3ltW2ldLlJldi5zdWJzdHIoaVBUICsgMSk7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50 ICIJCWlQVCA9IHNCcmNoLmxhc3RJbmRleE9mKFwnLlwnKTtcclxuIjsNCglwcmludCAiCQlpZiAo c0JyY2guc3Vic3RyKGlQVCArIDEpID09IFwiMFwiKVxyXG4iOw0KCXByaW50ICIJCXtcclxuIjsN CglwcmludCAiCQkJc0hlYWRlciA9IHNCcmNoLnN1YnN0cigwLCBpUFQgKyAxKTtcclxuIjsNCglw cmludCAiCQkJYVN5bVtpXS5SZXYgPSBzSGVhZGVyICsgaUJyY2g7XHJcbiI7DQoJcHJpbnQgIgkJ fVxyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCWFTeW0g PSBhU3ltLnNvcnQoU29ydFZlckZ1bik7XHJcbiI7DQoJcHJpbnQgIgl2YXIgc1JldiA9IFwiXCI7 XHJcbiI7DQoJcHJpbnQgIglmb3IgKHZhciBpID0gMDsgaSA8IGlMb29wOyBpKyspXHJcbiI7DQoJ cHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJaWYgKGFTeW1baV0uU3ltID09IFwiSEVBRFwiIHx8 IGFTeW1baV0uU3ltID09IFwiTUFJTlwiKVxyXG4iOw0KCXByaW50ICIJCQljb250aW51ZTtcclxu IjsNCglwcmludCAiCQllbHNlIGlmIChzUmV2ICE9IGFTeW1baV0uUmV2KVxyXG4iOw0KCXByaW50 ICIJCXtcclxuIjsNCglwcmludCAiCQkJc1JldiA9IGFTeW1baV0uUmV2O1xyXG4iOw0KCXByaW50 ICIJCQlhUnRbYVJ0Lmxlbmd0aF0gPSBcclxuIjsNCglwcmludCAiCQkJe1xyXG4iOw0KCXByaW50 ICIJCQkJUmV2OiBzUmV2LFxyXG4iOw0KCXByaW50ICIJCQkJU3ltOiBhU3ltW2ldLlN5bVxyXG4i Ow0KCXByaW50ICIJCQl9XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJCWVsc2Vc clxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlmICh0eXBlb2YoYVJ0W2FSdC5s ZW5ndGggLSAxXS5TeW0pID09IFwic3RyaW5nXCIpXHJcbiI7DQoJcHJpbnQgIgkJCQlhUnRbYVJ0 Lmxlbmd0aCAtIDFdLlN5bSA9IFthUnRbYVJ0Lmxlbmd0aCAtIDFdLlN5bSwgYVN5bVtpXS5TeW1d O1xyXG4iOw0KCXByaW50ICIJCQllbHNlIGFSdFthUnQubGVuZ3RoIC0gMV0uU3ltW2FSdFthUnQu bGVuZ3RoIC0gMV0uU3ltLmxlbmd0aF0gPSBhU3ltW2ldLlN5bTtcclxuIjsNCglwcmludCAiCQl9 XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICIJZm9yICh2 YXIgaSA9IDA7IGkgPCBhUnQubGVuZ3RoOyBpKyspXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJ cHJpbnQgIgkJaUJyY2ggPSBhUnRbaV0uUmV2LnNwbGl0KFwnLlwnKS5sZW5ndGg7XHJcbiI7DQoJ cHJpbnQgIgkJaWYgKE1hdGguZmxvb3IoaUJyY2ggLyAyKSAqIDIgIT0gaUJyY2gpXHJcbiI7DQoJ cHJpbnQgIgkJe1xyXG4iOw0KCXByaW50ICIJCQlpZiAodHlwZW9mKGFSdFtpXS5TeW0pICE9IFwi c3RyaW5nXCIpIGFSdFtpXS5TeW0gPSBhUnRbaV0uU3ltWzBdO1xyXG4iOw0KCXByaW50ICIJCX1c clxuIjsNCglwcmludCAiCQllbHNlXHJcbiI7DQoJcHJpbnQgIgkJe1xyXG4iOw0KCXByaW50ICIJ CQlpZiAodHlwZW9mKGFSdFtpXS5TeW0pID09IFwic3RyaW5nXCIpIGFSdFtpXS5TeW0gPSBbYVJ0 W2ldLlN5bV07XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXBy aW50ICIJcmV0dXJuIGFSdDtcclxuIjsNCglwcmludCAifVxyXG4iOw0KCXByaW50ICJcclxuIjsN CglwcmludCAiZnVuY3Rpb24gQ3JlYXRlUmV2VHJlZShhUmV2LCBhU3ltKVxyXG4iOw0KCXByaW50 ICJ7XHJcbiI7DQoJcHJpbnQgIglhU3ltID0gQ2xlYW5TeW1UQihhU3ltKTtcclxuIjsNCglwcmlu dCAiCXZhciBzUmV2ID0gQ3JlYXRlUmV2U3RydWN0KGFSZXYpO1xyXG4iOw0KCXByaW50ICIJYUJy YW5jaE9uZSA9IENyZWF0ZVJldkJyY2hTdHJ1Y3Qoc1JldiwgYVN5bSkuYUJyY2hbMF07XHJcbiI7 DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICIJcmV0dXJuIGFCcmFuY2hPbmU7XHJcbiI7DQoJcHJp bnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgImFCcmFuY2hPbmUgPSBDcmVhdGVS ZXZUcmVlKGFSZXYsIGFTeW0pO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rp b24gR2V0QnJjaFJvd3NwYW4oQnJjaClcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJ dmFyIGlTcGFuID0gMTtcclxuIjsNCglwcmludCAiCWZvciAodmFyIGkgPSAwOyBpIDwgQnJjaC5h UmV2Lmxlbmd0aDsgaSsrKVxyXG4iOw0KCXByaW50ICIJCWlTcGFuICs9IEdldFJldlJvd3NwYW4o QnJjaC5hUmV2W2ldKTtcclxuIjsNCglwcmludCAiCXJldHVybiBpU3BhbjtcclxuIjsNCglwcmlu dCAifVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gR2V0UmV2Um93c3Bh bihSZXYpXHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCXZhciBpU3BhbiA9IFJldi5h VGFnLmxlbmd0aDtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIglpZiAoUmV2LmFCcmNo Lmxlbmd0aCAhPSAwKVxyXG4iOw0KCXByaW50ICIJe1xyXG4iOw0KCXByaW50ICIJCWZvciAodmFy IGkgPSAwIDsgaSA8IFJldi5hQnJjaC5sZW5ndGg7IGkrKylcclxuIjsNCglwcmludCAiCQkJaVNw YW4gKz0gR2V0QnJjaFJvd3NwYW4oUmV2LmFCcmNoW2ldKTtcclxuIjsNCglwcmludCAiCQl9XHJc biI7DQoJcHJpbnQgIgllbHNlIGlmIChpU3BhbiA9PSAwKSBpU3BhbiA9IDE7XHJcbiI7DQoJcHJp bnQgIglyZXR1cm4gaVNwYW47XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7 DQoJcHJpbnQgImZ1bmN0aW9uIEdldFJvd3NwYW4oQnJjaF9PUl9SZXYpXHJcbiI7DQoJcHJpbnQg IntcclxuIjsNCglwcmludCAiCWlmICh0eXBlb2YoQnJjaF9PUl9SZXYuQnJjaCkgPT0gXCJzdHJp bmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0QnJjaFJvd3NwYW4oQnJjaF9PUl9SZXYp O1xyXG4iOw0KCXByaW50ICIJZWxzZSBpZiAodHlwZW9mKEJyY2hfT1JfUmV2LlJldikgPT0gXCJz dHJpbmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0UmV2Um93c3BhbihCcmNoX09SX1Jl dik7XHJcbiI7DQoJcHJpbnQgIgllbHNlIHJldHVybiAwO1xyXG4iOw0KCXByaW50ICJ9XHJcbiI7 DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBHZXRCcmNoQ29sc3BhbihCcmNoKVxy XG4iOw0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQgIglpZiAoQnJjaC5hUmV2Lmxlbmd0aCA8PSAw KSByZXR1cm4gMTtcclxuIjsNCglwcmludCAiCWVsc2VcclxuIjsNCglwcmludCAiCXtcclxuIjsN CglwcmludCAiCQl2YXIgaU1heCA9IDA7XHJcbiI7DQoJcHJpbnQgIgkJdmFyIGlTcGFuO1xyXG4i Ow0KCXByaW50ICIJCWZvciAodmFyIGkgPSAwOyBpIDwgQnJjaC5hUmV2Lmxlbmd0aDsgaSsrKVxy XG4iOw0KCXByaW50ICIJCXtcclxuIjsNCglwcmludCAiCQkJaVNwYW4gPSBHZXRSZXZDb2xzcGFu KEJyY2guYVJldltpXSk7XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChpU3BhbiA+IGlNYXgpIGlNYXgg PSBpU3BhbjtcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIgkJcmV0dXJuIGlNYXg7 XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7 DQoJcHJpbnQgImZ1bmN0aW9uIEdldFJldkNvbHNwYW4oUmV2KVxyXG4iOw0KCXByaW50ICJ7XHJc biI7DQoJcHJpbnQgIglpZiAoUmV2LmFCcmNoLmxlbmd0aCA8PSAwICYmIFJldi5hVGFnLmxlbmd0 aCA8PSAwKSByZXR1cm4gMTtcclxuIjsNCglwcmludCAiCWVsc2UgaWYgKFJldi5hQnJjaC5sZW5n dGggPD0gMCkgcmV0dXJuIDI7XHJcbiI7DQoJcHJpbnQgIgllbHNlXHJcbiI7DQoJcHJpbnQgIgl7 XHJcbiI7DQoJcHJpbnQgIgkJdmFyIGlNYXggPSAwO1xyXG4iOw0KCXByaW50ICIJCXZhciBpU3Bh bjtcclxuIjsNCglwcmludCAiCQlmb3IgKHZhciBpID0gMDsgaSA8IFJldi5hQnJjaC5sZW5ndGg7 IGkrKylcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlTcGFuID0gR2V0QnJj aENvbHNwYW4oUmV2LmFCcmNoW2ldKTtcclxuIjsNCglwcmludCAiCQkJaWYgKGlTcGFuID4gaU1h eCkgaU1heCA9IGlTcGFuO1xyXG4iOw0KCXByaW50ICIJCX1cclxuIjsNCglwcmludCAiCQlyZXR1 cm4gMSArIGlNYXg7XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglw cmludCAiXHJcbiI7DQoJcHJpbnQgImZ1bmN0aW9uIEdldENvbHNwYW4oQnJjaF9PUl9SZXYpXHJc biI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCWlmICh0eXBlb2YoQnJjaF9PUl9SZXYuQnJj aCkgPT0gXCJzdHJpbmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0QnJjaENvbHNwYW4o QnJjaF9PUl9SZXYpO1xyXG4iOw0KCXByaW50ICIJZWxzZSBpZiAodHlwZW9mKEJyY2hfT1JfUmV2 LlJldikgPT0gXCJzdHJpbmdcIilcclxuIjsNCglwcmludCAiCQlyZXR1cm4gR2V0UmV2Q29sc3Bh bihCcmNoX09SX1Jldik7XHJcbiI7DQoJcHJpbnQgIgllbHNlIHJldHVybiAwO1xyXG4iOw0KCXBy aW50ICJ9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBDcmVhdGVUQkFy cmF5KGlSb3dzLCBpQ29scylcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJaVJvd3Mg PSBpUm93cyAqIDIgLSAxO1xyXG4iOw0KCXByaW50ICIJaUNvbHMgPSBpQ29scyAqIDIgLSAxO1xy XG4iOw0KCXByaW50ICIJdmFyIGEgPSBuZXcgQXJyYXkoaVJvd3MpO1xyXG4iOw0KCXByaW50ICIJ Zm9yICh2YXIgaSA9IDA7IGkgPCBpUm93czsgaSsrKVxyXG4iOw0KCXByaW50ICIJCWFbaV0gPSBu ZXcgQXJyYXkoaUNvbHMpO1xyXG4iOw0KCXByaW50ICIJcmV0dXJuIGE7XHJcbiI7DQoJcHJpbnQg In1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgInZhciBhVEIgPSBDcmVhdGVUQkFycmF5 KEdldFJvd3NwYW4oYUJyYW5jaE9uZSksIEdldENvbHNwYW4oYUJyYW5jaE9uZSkpO1xyXG4iOw0K CXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gU1YoaVJvdywgaUNvbCwgcylcclxuIjsN CglwcmludCAie1xyXG4iOw0KCXByaW50ICIJaWYgKGlSb3cgPj0gYVRCLmxlbmd0aCkgYVRCW2lS b3ddID0gbmV3IEFycmF5O1xyXG4iOw0KCXByaW50ICIJYVRCW2lSb3ddW2lDb2xdID0gcztcclxu IjsNCglwcmludCAifVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gRmls bEJyY2hUQihCcmNoLCBpUm93LCBpQ29sKVxyXG4iOw0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQg Igl2YXIgc1J0ID0ge2lSb3c6IDEsIGlDb2w6IDF9O1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglw cmludCAiCVNWKGlSb3crKywgaUNvbCwgXCJCXCIgKyBCcmNoLkJyY2ggKyBcIixcIiArIEJyY2gu VGFnKTtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIglpZiAoQnJjaC5hUmV2Lmxlbmd0 aCA+IDApXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJZm9yICh2YXIgaSA9IDA7 IGkgPCBCcmNoLmFSZXYubGVuZ3RoOyBpKyspXHJcbiI7DQoJcHJpbnQgIgkJe1xyXG4iOw0KCXBy aW50ICIJCQlTVihpUm93KyssIGlDb2wsIFwifFwiKTtcclxuIjsNCglwcmludCAiCQkJc1J0LmlS b3crKztcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgkJCVNWKGlSb3csIGlDb2wsIFwi VlwiICsgQnJjaC5hUmV2W2ldLlJldiArIFwiLFwiICsgQnJjaC5hUmV2W2ldLkxvZyk7XHJcbiI7 DQoJcHJpbnQgIgkJCXZhciBzRmlsbCA9IEZpbGxSZXZUQihCcmNoLmFSZXZbaV0sIGlSb3crKywg aUNvbCArIDEpO1xyXG4iOw0KCXByaW50ICIJCQlzUnQuaVJvdyArKztcclxuIjsNCglwcmludCAi XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChzRmlsbC5pUm93ID4gMSlcclxuIjsNCglwcmludCAiCQkJ e1xyXG4iOw0KCXByaW50ICIJCQkJZm9yICh2YXIgaiA9IDE7IGogPCBzRmlsbC5pUm93OyBqKysp XHJcbiI7DQoJcHJpbnQgIgkJCQl7XHJcbiI7DQoJcHJpbnQgIgkJCQkJaWYgKGkgKyAxIDwgQnJj aC5hUmV2Lmxlbmd0aClcclxuIjsNCglwcmludCAiCQkJCQkJU1YoaVJvdysrLCBpQ29sLCBcInxc Iik7XHJcbiI7DQoJcHJpbnQgIgkJCQkJc1J0LmlSb3crKztcclxuIjsNCglwcmludCAiCQkJCX1c clxuIjsNCglwcmludCAiCQkJfVxyXG4iOw0KCXByaW50ICIJCX1cclxuIjsNCglwcmludCAiCX1c clxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIglyZXR1cm4gc1J0O1xyXG4iOw0KCXByaW50 ICJ9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5jdGlvbiBGaWxsUmV2VEIoUmV2 LCBpUm93LCBpQ29sKVxyXG4iOw0KCXByaW50ICJ7XHJcbiI7DQoJcHJpbnQgIgl2YXIgc1J0ID0g e2lSb3c6IDAsIGlDb2w6IDB9O1xyXG4iOw0KCXByaW50ICIJaWYgKFJldi5hQnJjaC5sZW5ndGgg PD0gMCAmJiBSZXYuYVRhZy5sZW5ndGggPD0gMClcclxuIjsNCglwcmludCAiCXtcclxuIjsNCglw cmludCAiCQlyZXR1cm4gc1J0O1xyXG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJcclxu IjsNCglwcmludCAiCXNSdC5pQ29sID0gMTtcclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQg Igl2YXIgaU1heENvbCA9IDA7XHJcbiI7DQoJcHJpbnQgIgl2YXIgaVJvd0xhc3QgPSBpUm93O1xy XG4iOw0KCXByaW50ICIJZm9yICh2YXIgaSA9IDA7IGkgPCBSZXYuYUJyY2gubGVuZ3RoOyBpKysp XHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJZm9yICh2YXIgaiA9IGlSb3dMYXN0 ICsgMTsgaiA8IGlSb3c7IGorKylcclxuIjsNCglwcmludCAiCQkJU1YoaiwgaUNvbCwgXCJ8XCIp O1xyXG4iOw0KCXByaW50ICIJCWlSb3dMYXN0ID0gaVJvdztcclxuIjsNCglwcmludCAiXHJcbiI7 DQoJcHJpbnQgIgkJaWYgKGkgPT0gMClcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQg IgkJCWlmIChSZXYuYUJyY2gubGVuZ3RoID4gMSB8fCBSZXYuYVRhZy5sZW5ndGggPiAwKVxyXG4i Ow0KCXByaW50ICIJCQkJU1YoaVJvdywgaUNvbCwgXCJUXCIpO1xyXG4iOw0KCXByaW50ICIJCQll bHNlIFNWKGlSb3csIGlDb2wsIFwiLVwiKTtcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJp bnQgIgkJZWxzZSBpZiAoaSArIDEgPT0gUmV2LmFCcmNoLmxlbmd0aClcclxuIjsNCglwcmludCAi CQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChSZXYuYVRhZy5sZW5ndGggPiAwKVxyXG4iOw0KCXBy aW50ICIJCQkJU1YoaVJvdywgaUNvbCwgXCJFXCIpO1xyXG4iOw0KCXByaW50ICIJCQllbHNlIFNW KGlSb3csIGlDb2wsIFwiTFwiKTtcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIgkJ ZWxzZSBTVihpUm93LCBpQ29sLCBcIkVcIik7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50 ICJcclxuIjsNCglwcmludCAiCQl2YXIgc0ZpbGwgPSBGaWxsQnJjaFRCKFJldi5hQnJjaFtpXSwg aVJvdywgaUNvbCArIDEpXHJcbiI7DQoJcHJpbnQgIgkJaVJvdyArPSBzRmlsbC5pUm93O1xyXG4i Ow0KCXByaW50ICIJCXNSdC5pUm93ICs9IHNGaWxsLmlSb3c7XHJcbiI7DQoJcHJpbnQgIlxyXG4i Ow0KCXByaW50ICIJCWlmIChpICsgMSA8IFJldi5hQnJjaC5sZW5ndGggfHwgUmV2LmFUYWcubGVu Z3RoID4gMClcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlSb3crKztcclxu IjsNCglwcmludCAiCQkJc1J0LmlSb3crKztcclxuIjsNCglwcmludCAiCQl9XHJcbiI7DQoJcHJp bnQgIlxyXG4iOw0KCXByaW50ICIJCWlmIChpTWF4Q29sIDwgc0ZpbGwuaUNvbCkgaU1heENvbCA9 IHNGaWxsLmlDb2w7XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXBy aW50ICIJZm9yICh2YXIgaSA9IDA7IGkgPCBSZXYuYVRhZy5sZW5ndGg7IGkrKylcclxuIjsNCglw cmludCAiCXtcclxuIjsNCglwcmludCAiCQlmb3IgKHZhciBqID0gaVJvd0xhc3QgKyAxOyBqIDwg aVJvdzsgaisrKVxyXG4iOw0KCXByaW50ICIJCQlTVihqLCBpQ29sLCBcInxcIik7XHJcbiI7DQoJ cHJpbnQgIgkJaVJvd0xhc3QgPSBpUm93O1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAi CQlpZiAoaSA9PSAwKVxyXG4iOw0KCXByaW50ICIJCXtcclxuIjsNCglwcmludCAiCQkJaWYgKFJl di5hQnJjaC5sZW5ndGggPT0gMClcclxuIjsNCglwcmludCAiCQkJe1xyXG4iOw0KCXByaW50ICIJ CQkJaWYgKFJldi5hVGFnLmxlbmd0aCA+IDEpIFNWKGlSb3csIGlDb2wsIFwiVFwiKTtcclxuIjsN CglwcmludCAiCQkJCWVsc2UgU1YoaVJvdywgaUNvbCwgXCItXCIpO1xyXG4iOw0KCXByaW50ICIJ CQl9XHJcbiI7DQoJcHJpbnQgIgkJCWVsc2UgaWYgKFJldi5hVGFnLmxlbmd0aCA+IDEpIFNWKGlS b3csIGlDb2wsIFwiRVwiKTtcclxuIjsNCglwcmludCAiCQkJZWxzZSBTVihpUm93LCBpQ29sLCBc IkxcIik7XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJCWVsc2VcclxuIjsNCglw cmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJCWlmIChpICsgMSA9PSBSZXYuYVRhZy5sZW5ndGgp IFNWKGlSb3csIGlDb2wsIFwiTFwiKTtcclxuIjsNCglwcmludCAiCQkJZWxzZSBTVihpUm93LCBp Q29sLCBcIkVcIik7XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICJcclxuIjsNCglw cmludCAiCQlTVihpUm93KyssIGlDb2wgKyAxLCBcIkdcIiArIFJldi5hVGFnW2ldICsgXCIsXCIg KyBSZXYuTG9nKTtcclxuIjsNCglwcmludCAiCQlzUnQuaVJvdysrO1xyXG4iOw0KCXByaW50ICIJ CWlmIChpICsgMSA8IFJldi5hVGFnLmxlbmd0aClcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJ cHJpbnQgIgkJCWlSb3crKztcclxuIjsNCglwcmludCAiCQkJc1J0LmlSb3crKztcclxuIjsNCglw cmludCAiCQl9XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICIJCWlmIChpTWF4Q29sIDwg MSkgaU1heENvbCA9IDE7XHJcbiI7DQoJcHJpbnQgIgl9XHJcbiI7DQoJcHJpbnQgIglzUnQuaUNv bCArPSBpTWF4Q29sO1xyXG4iOw0KCXByaW50ICJcclxuIjsNCglwcmludCAiCXJldHVybiBzUnQ7 XHJcbiI7DQoJcHJpbnQgIn1cclxuIjsNCglwcmludCAiXHJcbiI7DQoJcHJpbnQgIkZpbGxCcmNo VEIoYUJyYW5jaE9uZSwgMCwgMCk7XHJcbiI7DQoJcHJpbnQgIlxyXG4iOw0KCXByaW50ICJmdW5j dGlvbiBTaG93TG9nKHNMb2cpXHJcbiI7DQoJcHJpbnQgIntcclxuIjsNCglwcmludCAiCXdpbmRv dy5zdGF0dXMgPSB1bmVzY2FwZShzTG9nKTtcclxuIjsNCglwcmludCAifVxyXG4iOw0KCXByaW50 ICJcclxuIjsNCglwcmludCAiZnVuY3Rpb24gQ3JlYXRlQlQoc1Nob3cpXHJcbiI7DQoJcHJpbnQg IntcclxuIjsNCglwcmludCAiCXZhciBzVHlwZSA9IHNTaG93LnN1YnN0cigwLCAxKTtcclxuIjsN CglwcmludCAiCXNTaG93ID0gc1Nob3cuc3Vic3RyKDEpO1xyXG4iOw0KCXByaW50ICIJXHJcbiI7 DQoJcHJpbnQgIglpZiAoc1R5cGUgPT0gXCJCXCIpXHJcbiI7CglwcmludCAiCXtcclxuIjsNCglw cmludCAiCQl2YXIgc1Jldiwgc0JyY2g7XHJcbiI7DQoJcHJpbnQgIgkJc1Nob3cgPSBzU2hvdy5z cGxpdChcIixcIiwgMik7XHJcbiI7DQoJcHJpbnQgIgkJc1JldiA9IHNTaG93WzBdO1xyXG4iOw0K CXByaW50ICIJCWlmIChzU2hvdy5sZW5ndGggPj0gMikgc0JyY2ggPSBzU2hvd1sxXTtcclxuIjsN CglwcmludCAiCQllbHNlIHNCcmNoID0gc1JldjtcclxuIjsKCXByaW50ICIJCXJldHVybiBcIjx0 YWJsZSB3aWR0aD0xMDAlIGhlaWdodD0qIGJvcmRlcj0xIGJvcmRlcmNvbG9yPSM5OWNjMDAgY2Vs bHNwYWNpbmc9MD48dHI+PHRkIGFsaWduPWNlbnRlciBiZ2NvbG9yPSNjY2ZmNjY+PG5vYnI+PEI+ PGEgaHJlZj1cJ1wiICsgc0ZpbGUgKyAoc1JldiA9PSBcJzFcJyA/IFwiP1wiOihcIj9vbmx5X3dp dGhfdGFnPVwiICsgc0JyY2gpKSArIHNCYXJlcXVlcnkgKyBcIlwnPlwiICsgc0JyY2ggKyBcIjwv YT48L0I+PC9ub2JyPjwvdGQ+PC90cj48L3RhYmxlPlwiO1xyXG4iOw0KCXByaW50ICIJfVxyXG4i OwoJcHJpbnQgIgllbHNlXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJpbnQgIgkJdmFyIHNS ZXYsIHNMb2c7XHJcbiI7DQoJcHJpbnQgIgkJc1Nob3cgPSBzU2hvdy5zcGxpdChcIixcIiwgMik7 XHJcbiI7DQoJcHJpbnQgIgkJc1JldiA9IHNTaG93WzBdO1xyXG4iOw0KCXByaW50ICIJCWlmIChz U2hvdy5sZW5ndGggPj0gMikgc0xvZyA9IHNTaG93WzFdO1xyXG4iOw0KCXByaW50ICIJCWVsc2Ug c0xvZyA9IFwiXCI7XHJcbiI7DQoJcHJpbnQgIgkJc0xvZyA9IGVzY2FwZShzTG9nKTtcclxuIjsN CglwcmludCAiXHJcbiI7DQoJcHJpbnQgIgkJaWYgKHNUeXBlID09IFwiR1wiKVxyXG4iOw0KCXBy aW50ICIJCQlyZXR1cm4gXCI8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9KiBib3JkZXI9MSBib3Jk ZXJjb2xvcj0jNjZjY2ZmIGNlbGxzcGFjaW5nPTA+PHRyPjx0ZCBhbGlnbj1jZW50ZXIgYmdjb2xv cj0jY2NmZmZmPjxub2JyPjxCPjxhIG9ubW91c2Vtb3ZlPVwnU2hvd0xvZyhcXFwiXCIgKyBzTG9n ICsgXCJcXFwiKVwnIGhyZWY9XCdcIiArIHNGaWxlICsgXCI/b25seV93aXRoX3RhZz1cIiArIHNS ZXYgKyBzQmFyZXF1ZXJ5ICsgXCJcJz5cIiArIHNSZXYgKyBcIjwvYT48L0I+PC9ub2JyPjwvdGQ+ PC90cj48L3RhYmxlPlwiO1xyXG4iOw0KCXByaW50ICIJCWVsc2UgaWYgKHNUeXBlID09IFwiVlwi KVxyXG4iOw0KCXByaW50ICIJCQlyZXR1cm4gXCI8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9KiBi b3JkZXI9MSBib3JkZXJjb2xvcj0jZmZjYzY2IGNlbGxzcGFjaW5nPTA+PHRyPjx0ZCBhbGlnbj1j ZW50ZXIgYmdjb2xvcj0jZmZmZmNjPjxub2JyPjxCPjxhIG9ubW91c2Vtb3ZlPVwnU2hvd0xvZyhc XFwiXCIgKyBzTG9nICsgXCJcXFwiKVwnIGhyZWY9XCdcIiArIHNGaWxlICsgXCI/cmV2PVwiICsg c1JldiArIFwiJmNvbnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cFwiICsgc0JhcmVxdWVy eSArIFwiXCc+XCIgKyBzUmV2ICsgXCI8L2E+PC9CPjwvbm9icj48L3RkPjwvdHI+PC90YWJsZT5c IjtcclxuIjsNCglwcmludCAiCX1cclxuIjsNCglwcmludCAifVxyXG4iOw0KCXByaW50ICJcclxu IjsNCglwcmludCAidmFyIE5UQ29sID0gNztcclxuIjsNCglwcmludCAidmFyIE5UUm93ID0gMztc clxuIjsNCglwcmludCAidmFyIHMgPSBcIlwiO1xyXG4iOw0KCXByaW50ICJmb3IgKHZhciBpID0g MDsgaSA8IGFUQi5sZW5ndGg7IGkrKylcclxuIjsNCglwcmludCAie1xyXG4iOw0KCXByaW50ICIJ Zm9yIChuID0gMDsgbiA8IE5UUm93OyBuKyspXHJcbiI7DQoJcHJpbnQgIgl7XHJcbiI7DQoJcHJp bnQgIgkJcyArPSBcIjx0cj5cIjtcclxuIjsNCglwcmludCAiCQlmb3IgKHZhciBqID0gMDsgaiA8 IGFUQltpXS5sZW5ndGg7IGorKylcclxuIjsNCglwcmludCAiCQl7XHJcbiI7DQoJcHJpbnQgIgkJ CWlmICh0eXBlb2YoYVRCW2ldW2pdKSA9PSBcInVuZGVmaW5lZFwiKVxyXG4iOw0KCXByaW50ICIJ CQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlpZiAobiA9PSAwKQlzICs9IFwiPHRkIGNvbHNwYW49XCIg KyBOVENvbCArIFwiIHJvd3NwYW49XCIgKyBOVFJvdyArIFwiPjxmb250IHNpemU9MT4mbmJzcDs8 L2ZvbnQ+PC90ZD5cIjtcclxuIjsNCglwcmludCAiCQkJfVxyXG4iOw0KCXByaW50ICIJCQllbHNl IGlmIChhVEJbaV1bal0gPT0gXCItXCIpXHJcbiI7DQoJcHJpbnQgIgkJCXtcclxuIjsNCglwcmlu dCAiCQkJCWlmIChuICE9IE1hdGguZmxvb3IoTlRSb3cgLyAyKSkgcyArPSBcIjx0ZCBoZWlnaHQ9 NiBjb2xzcGFuPVwiICsgTlRDb2wgKyBcIj48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJCQkJZWxz ZSBzICs9IFwiPHRkIGhlaWdodD0zIGNvbHNwYW49XCIgKyBOVENvbCArIFwiIGJnY29sb3I9I2Zm Y2M2Nj48Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJ CX1cclxuIjsNCglwcmludCAiCQkJZWxzZSBpZiAoYVRCW2ldW2pdID09IFwifFwiKVxyXG4iOw0K CXByaW50ICIJCQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlpZiAobiA9PSAwKVxyXG4iOw0KCXByaW50 ICIJCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJCWZvciAodmFyIGsgPSAxOyBrIDwgTlRDb2wgLyAy OyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJCQkJCXMgKz0gXCI8dGQgcm93c3Bhbj1cIiArIE5UUm93 ICsgXCI+PGZvbnQgc2l6ZT0xPiZuYnNwOzwvZm9udD48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJ CQkJCXMgKz0gXCI8dGQgd2lkdGg9OCByb3dzcGFuPVwiICsgTlRSb3cgKyBcIiBiZ2NvbG9yPSNm ZmNjNjY+PGZvbnQgc2l6ZT0xPiZuYnNwOzwvZm9udD48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJ CQkJCWZvciAodmFyIGsgPSAxOyBrIDwgTlRDb2wgLyAyOyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJ CQkJCXMgKz0gXCI8dGQgcm93c3Bhbj1cIiArIE5UUm93ICsgXCI+PGZvbnQgc2l6ZT0xPiZuYnNw OzwvZm9udD48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJCQkJfVxyXG4iOw0KCXByaW50ICIJCQl9 XHJcbiI7DQoJcHJpbnQgIgkJCWVsc2UgaWYgKGFUQltpXVtqXSA9PSBcJ0VcJylcclxuIjsNCglw cmludCAiCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJaWYgKG4gIT0gTWF0aC5mbG9vcihOVFJvdyAv IDIpKVxyXG4iOw0KCXByaW50ICIJCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJCWZvciAodmFyIGsg PSAxOyBrIDwgTlRDb2wgLyAyOyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJCQkJCXMgKz0gXCI8dGQg d2lkdGg9MyBoZWlnaHQ9Nj48L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJCQkJCXMgKz0gXCI8dGQg d2lkdGg9OCBoZWlnaHQ9MSBiZ2NvbG9yPSNmZmNjNjY+PC90ZD5cIjtcclxuIjsNCglwcmludCAi CQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8gMjsgaysrKVxyXG4iOw0KCXByaW50ICIJ CQkJCQlzICs9IFwiPHRkIHdpZHRoPTMgaGVpZ2h0PTY+PC90ZD5cIjtcclxuIjsNCglwcmludCAi CQkJCX1cclxuIjsNCglwcmludCAiCQkJCWVsc2VcclxuIjsNCglwcmludCAiCQkJCXtcclxuIjsN CglwcmludCAiCQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8gMjsgaysrKVxyXG4iOw0K CXByaW50ICIJCQkJCQlzICs9IFwiPHRkPjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQkJZm9y ICgtLWs7IGsgPCBOVENvbDsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIGhl aWdodD0zIGJnY29sb3I9I2ZmY2M2Nj48Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7 XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJcbiI7DQoJcHJpbnQgIgkJCX1cclxuIjsNCglwcmludCAi CQkJZWxzZSBpZiAoYVRCW2ldW2pdID09IFwnTFwnKVxyXG4iOw0KCXByaW50ICIJCQl7XHJcbiI7 DQoJcHJpbnQgIgkJCQlpZiAobiA8IE1hdGguZmxvb3IoTlRSb3cgLyAyKSlcclxuIjsNCglwcmlu dCAiCQkJCXtcclxuIjsNCglwcmludCAiCQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8g MjsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIHdpZHRoPTMgaGVpZ2h0PTY+ PC90ZD5cIjtcclxuIjsNCglwcmludCAiCQkJCQlzICs9IFwiPHRkIHdpZHRoPTggaGVpZ2h0PTEg Ymdjb2xvcj0jZmZjYzY2PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQkJZm9yICh2YXIgayA9 IDE7IGsgPCBOVENvbCAvIDI7IGsrKylcclxuIjsNCglwcmludCAiCQkJCQkJcyArPSBcIjx0ZCB3 aWR0aD0zIGhlaWdodD02PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJcbiI7DQoJcHJp bnQgIgkJCQllbHNlIGlmIChuID09IE1hdGguZmxvb3IoTlRSb3cgLyAyKSlcclxuIjsNCglwcmlu dCAiCQkJCXtcclxuIjsNCglwcmludCAiCQkJCQlmb3IgKHZhciBrID0gMTsgayA8IE5UQ29sIC8g MjsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkID48Zm9udCBzaXplPTE+Jm5i c3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQkJZm9yICgtLWs7IGsgPCBOVENv bDsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIGJnY29sb3I9I2ZmY2M2Nj48 Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJc biI7DQoJcHJpbnQgIgkJCQllbHNlXHJcbiI7DQoJcHJpbnQgIgkJCQl7XHJcbiI7DQoJcHJpbnQg IgkJCQkJZm9yICh2YXIgayA9IDA7IGsgPCBOVENvbDsgaysrKVxyXG4iOw0KCXByaW50ICIJCQkJ CQlzICs9IFwiPHRkIGhlaWdodD02PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9XHJcbiI7 DQoJcHJpbnQgIgkJCX1cclxuIjsNCglwcmludCAiCQkJZWxzZSBpZiAoYVRCW2ldW2pdID09IFwi VFwiKVxyXG4iOw0KCXByaW50ICIJCQl7XHJcbiI7DQoJcHJpbnQgIgkJCQlpZiAobiA8IE1hdGgu Zmxvb3IoTlRSb3cgLyAyKSlcclxuIjsNCglwcmludCAiCQkJCXtcclxuIjsNCglwcmludCAiCQkJ CQlmb3IgKHZhciBrID0gMDsgayA8IE5UQ29sOyBrKyspXHJcbiI7DQoJcHJpbnQgIgkJCQkJCXMg Kz0gXCI8dGQgaGVpZ2h0PTY+PC90ZD5cIjtcclxuIjsNCglwcmludCAiCQkJCX1cclxuIjsNCglw cmludCAiCQkJCWVsc2UgaWYgKG4gPT0gTWF0aC5mbG9vcihOVFJvdyAvIDIpKVxyXG4iOw0KCXBy aW50ICIJCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJCWZvciAoayA9IDA7IGsgPCBOVENvbDsgaysr KVxyXG4iOw0KCXByaW50ICIJCQkJCQlzICs9IFwiPHRkIGhlaWd0aD0zIGJnY29sb3I9I2ZmY2M2 Nj48Zm9udCBzaXplPTE+Jm5ic3A7PC9mb250PjwvdGQ+XCI7XHJcbiI7DQoJcHJpbnQgIgkJCQl9 XHJcbiI7DQoJcHJpbnQgIgkJCQllbHNlXHJcbiI7DQoJcHJpbnQgIgkJCQl7XHJcbiI7DQoJcHJp bnQgIgkJCQkJZm9yICh2YXIgayA9IDE7IGsgPCBOVENvbCAvIDI7IGsrKylcclxuIjsNCglwcmlu dCAiCQkJCQkJcyArPSBcIjx0ZCBoZWlnaHQ9NiB3aWR0aD0zPjwvdGQ+XCI7XHJcbiI7DQoJcHJp bnQgIgkJCQkJcyArPSBcIjx0ZCB3aWR0aD04IGJnY29sb3I9I2ZmY2M2Nj48L3RkPlwiO1xyXG4i Ow0KCXByaW50ICIJCQkJCWZvciAodmFyIGsgPSAxOyBrIDwgTlRDb2wgLyAyOyBrKyspXHJcbiI7 DQoJcHJpbnQgIgkJCQkJCXMgKz0gXCI8dGQgd2lkdGg9Mz48L3RkPlwiO1xyXG4iOw0KCXByaW50 ICIJCQkJfVxyXG4iOw0KCXByaW50ICIJCQl9XHJcbiI7DQoJcHJpbnQgIgkJCWVsc2VcclxuIjsN CglwcmludCAiCQkJe1xyXG4iOw0KCXByaW50ICIJCQkJaWYgKG4gPT0gMCkJcyArPSBcIjx0ZCBh bGlnbj1jZW50ZXIgY29sc3Bhbj1cIiArIE5UQ29sICsgXCIgcm93c3Bhbj1cIiArIE5UUm93ICsg XCI+XCIgKyBDcmVhdGVCVChhVEJbaV1bal0pICsgXCI8L3RkPlwiO1xyXG4iOw0KCXByaW50ICIJ CQl9XHJcbiI7DQoJcHJpbnQgIgkJfVxyXG4iOw0KCXByaW50ICIJCXMgKz0gXCI8L3RyPlwiO1xy XG4iOw0KCXByaW50ICIJfVxyXG4iOw0KCXByaW50ICJ9XHJcbiI7DQoJcHJpbnQgImRvY3VtZW50 LndyaXRlKFwiPHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MD48Zm9y bT5cIiArIHMgKyBcIjwvZm9ybT48L3RhYmxlPlwiKTtcbiI7DQoKCXByaW50ICI8L3NjcmlwdD5c biI7CglwcmludCAiPC94bXA+IiBpZiAkc2hvd2NvZGU7CgoKCWh0bWxfZm9vdGVyKCk7Cn0KCnN1 YiBkb0xvZygkKSB7CglteSAoJGZ1bGxuYW1lKSA9IEBfOwoJbXkgKCRkaWZmcmV2LCAkdXB3aGVy ZSwgJGZpbGVuYW1lLCAkYmFja3VybCk7CgoJcmVhZExvZygkZnVsbG5hbWUpOwoKCWh0bWxfaGVh ZGVyKCJDVlMgbG9nIGZvciAkd2hlcmUiKTsKCSgkdXB3aGVyZSAgPSAkd2hlcmUpID1+IHN8KEF0 dGljLyk/W14vXSskfHw7CgkoJGZpbGVuYW1lID0gJHdoZXJlKSA9fiBzfF4uKi98fDsKCSRiYWNr dXJsID0gJHNjcmlwdG5hbWUgLiAiLyIgLiB1cmxlbmNvZGUoJHVwd2hlcmUpIC4gJHF1ZXJ5OwoJ cHJpbnQgIjxwPlxuICI7CglwcmludCAmbGluaygkYmFja2ljb24sICIkYmFja3VybCMkZmlsZW5h bWUiKSwgIiA8Yj5VcCB0byAiLAoJICAgICZjbGlja2FibGVQYXRoKCR1cHdoZXJlLCAxKSwgIjwv Yj5cbjwvcD5cbiI7CglwcmludCAiPHA+XG4gIjsKCXByaW50ICZsaW5rKCdSZXF1ZXN0IGRpZmYg YmV0d2VlbiBhcmJpdHJhcnkgcmV2aXNpb25zJywgJyNkaWZmJyk7CglwcmludCAiXG48L3A+XG48 aHIgbm9zaGFkZT5cbiI7CgoJcHJpbnQgIjxwPlxuIjsKCWlmICgkY3VyYnJhbmNoKSB7CgkJcHJp bnQgIkRlZmF1bHQgYnJhbmNoOiAiLCAoJHJldnN5bXskY3VyYnJhbmNofSB8fCAkY3VyYnJhbmNo KTsKCX0gZWxzZSB7CgkJcHJpbnQgIk5vIGRlZmF1bHQgYnJhbmNoIjsKCX0KCXByaW50ICI8YnI+ XG4iOwoKCWlmICgkaW5wdXR7b25seV93aXRoX3RhZ30pIHsKCQlwcmludCAiQ3VycmVudCB0YWc6 ICRpbnB1dHtvbmx5X3dpdGhfdGFnfTxicj5cbiI7Cgl9CglwcmludCAiPC9wPlxuIjsKCgl1bmRl ZiAlbmFtZXByaW50ZWQ7CgoJZm9yIChteSAkaSA9IDAgOyAkaSA8PSAkI3JldmRpc3BsYXlvcmRl ciA7ICRpKyspIHsKCQlwcmludCAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT5cbiI7CgkJcHJpbnRM b2coJHJldmRpc3BsYXlvcmRlclskaV0pOwoJfQoKCXByaW50ICI8aHIgbm9zaGFkZT5cbjxwPlxu IjsKCXByaW50ICI8YSBuYW1lPVwiZGlmZlwiPlxuIjsKCXByaW50ICJUaGlzIGZvcm0gYWxsb3dz IHlvdSB0byByZXF1ZXN0IGRpZmYncyBiZXR3ZWVuIGFueSB0d29cbiI7CglwcmludCAicmV2aXNp b25zIG9mIGEgZmlsZS4gIFlvdSBtYXkgc2VsZWN0IGEgc3ltYm9saWMgcmV2aXNpb25cbiI7Cglw cmludCAibmFtZSB1c2luZyB0aGUgc2VsZWN0aW9uIGJveCBvciB5b3UgbWF5IHR5cGUgaW4gYSBu dW1lcmljXG4iOwoJcHJpbnQgIm5hbWUgdXNpbmcgdGhlIHR5cGUtaW4gdGV4dCBib3guXG4iOwoJ cHJpbnQgIjwvYT5cbjwvcD5cbiI7CglwcmludAoJICAgICI8Zm9ybSBtZXRob2Q9XCJnZXRcIiBh Y3Rpb249XCIke3NjcmlwdHdoZXJlfS5kaWZmXCIgbmFtZT1cImRpZmZfc2VsZWN0XCI+XG4iOwoK CWZvcmVhY2ggKEBzdGlja3l2YXJzKSB7CgkJcHJpbnRmKCc8aW5wdXQgdHlwZT0iaGlkZGVuIiBu YW1lPSIlcyIgdmFsdWU9IiVzIj4nLCAkXywKCQkgICAgJGlucHV0eyRffSkKCQkgICAgaWYgKGRl ZmluZWQoJGlucHV0eyRffSkKCQkgICAgJiYgKCghZGVmaW5lZCgkREVGQVVMVFZBTFVFeyRffSkK CQkgICAgfHwgJGlucHV0eyRffSBuZSAkREVGQVVMVFZBTFVFeyRffSkgJiYgJGlucHV0eyRffSBu ZSAiIikpOwoJfQoJcHJpbnQgIjx0YWJsZSBzdHlsZT1cImJvcmRlcjogbm9uZVwiPlxuPHRyPlxu IjsKCXByaW50ICI8dGQgYWxpZ249XCJyaWdodFwiPiI7CglwcmludCAiPGxhYmVsIGZvcj1cInIx XCIgYWNjZXNza2V5PVwiMVwiPkRpZmZzIGJldHdlZW4gPC9sYWJlbD5cbiI7CglwcmludCAiPHNl bGVjdCBpZD1cInIxXCIgbmFtZT1cInIxXCI+XG4iOwoJcHJpbnQgIjxvcHRpb24gdmFsdWU9XCJ0 ZXh0XCIgc2VsZWN0ZWQ+VXNlIFRleHQgRmllbGQ8L29wdGlvbj5cbiI7CglwcmludCAkc2VsOwoJ cHJpbnQgIjwvc2VsZWN0PlxuIjsKCSRkaWZmcmV2ID0gJHJldmRpc3BsYXlvcmRlclskI3JldmRp c3BsYXlvcmRlcl07CgkkZGlmZnJldiA9ICRpbnB1dHsicjEifSBpZiAoZGVmaW5lZCgkaW5wdXR7 InIxIn0pKTsKCXByaW50CgkgICAgIjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIkaW5wdXRU ZXh0U2l6ZVwiIG5hbWU9XCJ0cjFcIiB2YWx1ZT1cIiRkaWZmcmV2XCIgb25jaGFuZ2U9XCJ0aGlz LmZvcm0ucjEuc2VsZWN0ZWRJbmRleD0wXCI+PC90ZD5cbiI7CglwcmludCAiPHRkPjxicj48L3Rk PlxuPC90cj5cbiI7CglwcmludCAiPHRyPlxuPHRkIGFsaWduPVwicmlnaHRcIj4iOwoJcHJpbnQg IjxsYWJlbCBmb3I9XCJyMlwiIGFjY2Vzc2tleT1cIjJcIj5hbmQgPC9sYWJlbD5cbiI7Cglwcmlu dCAiPHNlbGVjdCBpZD1cInIyXCIgbmFtZT1cInIyXCI+XG4iOwoJcHJpbnQgIjxvcHRpb24gdmFs dWU9XCJ0ZXh0XCIgc2VsZWN0ZWQ+VXNlIFRleHQgRmllbGQ8L29wdGlvbj5cbiI7CglwcmludCAk c2VsOwoJcHJpbnQgIjwvc2VsZWN0PlxuIjsKCSRkaWZmcmV2ID0gJHJldmRpc3BsYXlvcmRlclsw XTsKCSRkaWZmcmV2ID0gJGlucHV0eyJyMiJ9IGlmIChkZWZpbmVkKCRpbnB1dHsicjIifSkpOwoJ cHJpbnQKCSAgICAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIiRpbnB1dFRleHRTaXplXCIg bmFtZT1cInRyMlwiIHZhbHVlPVwiJGRpZmZyZXZcIiBvbmNoYW5nZT1cInRoaXMuZm9ybS5yMi5z ZWxlY3RlZEluZGV4PTBcIj48L3RkPlxuIjsKCXByaW50ICI8dGQ+PGlucHV0IHR5cGU9XCJzdWJt aXRcIiB2YWx1ZT1cIiAgR2V0IERpZmZzICBcIiBhY2Nlc3NrZXk9XCJHXCI+PC90ZD5cbiI7Cglw cmludCAiPC90cj5cbjwvdGFibGU+XG4iOwoJcHJpbnQgIjwvZm9ybT5cbiI7CglwcmludCAiPGhy IG5vc2hhZGU+XG4iOwoJcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdldFwiIGFjdGlvbj1cIiRzY3Jp cHR3aGVyZVwiPlxuIjsKCXByaW50ICI8dGFibGUgc3R5bGU9XCJib3JkZXI6IG5vbmVcIj5cbiI7 CglwcmludCAiPHRyPlxuPHRkIGFsaWduPVwicmlnaHRcIj4iOwoJcHJpbnQgIjxsYWJlbCBmb3I9 XCJmXCIgYWNjZXNza2V5PVwiRFwiPlByZWZlcnJlZCBEaWZmIHR5cGU6IjsKCXByaW50ICI8L2xh YmVsPjwvdGQ+XG4iOwoJcHJpbnQgIjx0ZD4iOwoJcHJpbnREaWZmU2VsZWN0KCR1c2VfamF2YV9z Y3JpcHQpOwoJcHJpbnQgIjwvdGQ+XG48dGQ+PC90ZD5cbjwvdHI+XG4iOwoKCWlmIChAYnJhbmNo bmFtZXMpIHsKCQlwcmludCAiPHRyPlxuPHRkIGFsaWduPVwicmlnaHRcIj4iOwoJCXByaW50ICI8 bGFiZWwgZm9yPVwib25seV93aXRoX3RhZ1wiIGFjY2Vzc2tleT1cIkJcIj4iOwoJCXByaW50ICJW aWV3IG9ubHkgQnJhbmNoOjwvbGFiZWw+PC90ZD5cbiI7CgkJcHJpbnQgIjx0ZD4iOwoJCXByaW50 ICI8YSBuYW1lPVwiYnJhbmNoXCI+PC9hPlxuIjsKCQlwcmludCAiPHNlbGVjdCBpZD1cIm9ubHlf d2l0aF90YWdcIiBuYW1lPVwib25seV93aXRoX3RhZ1wiIjsKCQlwcmludCAiIG9uY2hhbmdlPVwi dGhpcy5mb3JtLnN1Ym1pdCgpXCIiIGlmICR1c2VfamF2YV9zY3JpcHQ7CgkJcHJpbnQgIj5cbiI7 CgkJcHJpbnQgIjxvcHRpb24gdmFsdWU9XCJcIiI7CgkJcHJpbnQgIiBzZWxlY3RlZCIKCQkgICAg aWYgKGRlZmluZWQoJGlucHV0eyJvbmx5X3dpdGhfdGFnIn0pCgkJICAgICYmICRpbnB1dHsib25s eV93aXRoX3RhZyJ9IGVxICIiKTsKCQlwcmludCAiPlNob3cgYWxsIGJyYW5jaGVzPC9vcHRpb24+ XG4iOwoKCQlmb3JlYWNoIChyZXZlcnNlIHNvcnQgQGJyYW5jaG5hbWVzKSB7CgkJCXByaW50ICI8 b3B0aW9uIjsKCQkJcHJpbnQgIiBzZWxlY3RlZCIKCQkJICAgIGlmIChkZWZpbmVkKCRpbnB1dHsi b25seV93aXRoX3RhZyJ9KQoJCQkgICAgJiYgJGlucHV0eyJvbmx5X3dpdGhfdGFnIn0gZXEgJF8p OwoJCQlwcmludCAiPiR7X308L29wdGlvbj5cbiI7CgkJfQoJCXByaW50ICI8L3NlbGVjdD48L3Rk PlxuPHRkPjwvdGQ+XG48L3RyPlxuIjsKCX0KCglmb3JlYWNoIChAc3RpY2t5dmFycykgewoJCW5l eHQgaWYgKCRfIGVxICJmIik7CgkJbmV4dCBpZiAoJF8gZXEgIm9ubHlfd2l0aF90YWciKTsKCQlu ZXh0IGlmICgkXyBlcSAibG9nc29ydCIpOwoJCXByaW50ICI8aW5wdXQgdHlwZT1cImhpZGRlblwi IG5hbWU9XCIkX1wiIHZhbHVlPVwiJGlucHV0eyRffVwiPlxuIgoJCSAgICBpZiAoZGVmaW5lZCgk aW5wdXR7JF99KQoJCSAgICAmJiAoIWRlZmluZWQoJERFRkFVTFRWQUxVRXskX30pCgkJICAgIHx8 ICRpbnB1dHskX30gbmUgJERFRkFVTFRWQUxVRXskX30pICYmICRpbnB1dHskX30gbmUgIiIpOwoJ fQoJcHJpbnQgIjx0cj5cbjx0ZCBhbGlnbj1cInJpZ2h0XCI+IjsKCXByaW50ICI8YSBuYW1lPVwi bG9nc29ydFwiPjwvYT5cbiI7CglwcmludCAiPGxhYmVsIGZvcj1cImxvZ3NvcnRcIiBhY2Nlc3Nr ZXk9XCJMXCI+U29ydCBsb2cgYnk6IjsKCXByaW50ICI8L2xhYmVsPjwvdGQ+XG48dGQ+IjsKCXBy aW50TG9nU29ydFNlbGVjdCgkdXNlX2phdmFfc2NyaXB0KTsKCXByaW50ICI8L3RkPlxuIjsKCXBy aW50ICI8dGQ+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIiAgU2V0ICBcIiBhY2Nlc3Nr ZXk9XCJTXCI+PC90ZD5cbiI7CglwcmludCAiPC90cj5cbjwvdGFibGU+XG4iOwoJcHJpbnQgIjwv Zm9ybT5cbiI7CglodG1sX2Zvb3RlcigpOwp9CgpzdWIgZmx1c2hfZGlmZl9yb3dzKCQkJCQpIHsK CW15ICRqOwoJbXkgKCRsZWZ0Q29sUmVmLCAkcmlnaHRDb2xSZWYsICRsZWZ0Um93LCAkcmlnaHRS b3cpID0gQF87CgoJaWYgKCFkZWZpbmVkKCRzdGF0ZSkpIHsKCQlyZXR1cm47Cgl9CgoJaWYgKCRz dGF0ZSBlcSAiUHJlQ2hhbmdlUmVtb3ZlIikgeyAgICAjIHdlIGp1c3QgZ290IHJlbW92ZS1saW5l cyBiZWZvcmUKCQlmb3IgKCRqID0gMCA7ICRqIDwgJGxlZnRSb3cgOyAkaisrKSB7CgkJCXByaW50 CgkJCSAgICAiPHRyPlxuPHRkIGNsYXNzPVwiZGlmZi1yZW1vdmVkXCI+Jm5ic3A7QCRsZWZ0Q29s UmVmWyRqXTwvdGQ+XG4iOwoJCQlwcmludAoJCQkgICAgIjx0ZCBjbGFzcz1cImRpZmYtZW1wdHlc Ij4mbmJzcDs8L3RkPlxuPC90cj5cbiI7CgkJfQoJfSBlbHNpZiAoJHN0YXRlIGVxICJQcmVDaGFu Z2UiKSB7ICAgICMgc3RhdGUgZXEgIlByZUNoYW5nZSIKCQkgICAgIyB3ZSBnb3QgcmVtb3ZlcyB3 aXRoIHN1YnNlcXVlbnQgYWRkcwoKCQlmb3IgKCRqID0gMCA7ICRqIDwgJGxlZnRSb3cgfHwgJGog PCAkcmlnaHRSb3cgOyAkaisrKQoJCXsgICAgIyBkdW1wIG91dCBib3RoIGNvbHMKCQkJcHJpbnQg Ijx0cj5cbiI7CgkJCWlmICgkaiA8ICRsZWZ0Um93KSB7CgkJCQlwcmludAoJCQkJICAgICI8dGQg Y2xhc3M9XCJkaWZmLWNoYW5nZWRcIj4mbmJzcDtAJGxlZnRDb2xSZWZbJGpdPC90ZD4iOwoJCQl9 IGVsc2UgewoJCQkJcHJpbnQKCQkJCSAgICAiPHRkIGNsYXNzPVwiZGlmZi1jaGFuZ2VkLW1pc3Np bmdcIj4mbmJzcDs8L3RkPiI7CgkJCX0KCQkJcHJpbnQgIlxuIjsKCgkJCWlmICgkaiA8ICRyaWdo dFJvdykgewoJCQkJcHJpbnQKCQkJCSAgICAiPHRkIGNsYXNzPVwiZGlmZi1jaGFuZ2VkXCI+Jm5i c3A7QCRyaWdodENvbFJlZlskal08L3RkPiI7CgkJCX0gZWxzZSB7CgkJCQlwcmludAoJCQkJICAg ICI8dGQgY2xhc3M9XCJkaWZmLWNoYW5nZWQtbWlzc2luZ1wiPiZuYnNwOzwvdGQ+IjsKCQkJfQoJ CQlwcmludCAiXG48L3RyPlxuIjsKCQl9Cgl9Cn0KCiMjCiMgRnVuY3Rpb24gdG8gZ2VuZXJhdGUg SHVtYW4gcmVhZGFibGUgZGlmZi1maWxlcwojIGh1bWFuX3JlYWRhYmxlX2RpZmYoU3RyaW5nIHJl dmlzaW9uX3RvX3JldHVybl90byk7CiMjCnN1YiBodW1hbl9yZWFkYWJsZV9kaWZmKCQpIHsKCW15 ICgkZGlmZnR4dCwgJHdoZXJlX25kLCAkZmlsZW5hbWUsICRwYXRobmFtZSwgJHNjcmlwdHdoZXJl X25kKTsKCW15ICgkZmgsICRyZXYpID0gQF87CglteSAoJGRhdGUxLCAkZGF0ZTIsICRyMWQsICRy MmQsICRyMXIsICRyMnIsICRyZXYxLCAkcmV2MiwgJHN5bTEsICRzeW0yKTsKCW15IChAcmlnaHRD b2wsIEBsZWZ0Q29sKTsKCgkoJHdoZXJlX25kICAgICAgID0gJHdoZXJlKSAgICAgICA9fiBzLy5k aWZmJC8vOwoJKCRmaWxlbmFtZSAgICAgICA9ICR3aGVyZV9uZCkgICAgPX4gcy9eLipcLy8vOwoJ KCRwYXRobmFtZSAgICAgICA9ICR3aGVyZV9uZCkgICAgPX4gcy8oQXR0aWNcLyk/W15cL10qJC8v OwoJKCRzY3JpcHR3aGVyZV9uZCA9ICRzY3JpcHR3aGVyZSkgPX4gcy8uZGlmZiQvLzsKCgluYXZp Z2F0ZUhlYWRlcigkc2NyaXB0d2hlcmVfbmQsICRwYXRobmFtZSwgJGZpbGVuYW1lLCAkcmV2LCAi ZGlmZiIpOwoKCSMgUmVhZCBoZWFkZXIgdG8gcGljayB1cCByZWFkIHJldmlzaW9uIGFuZCBkYXRl LCBpZiBwb3NzaWJsZQoJd2hpbGUgKDwkZmg+KSB7CgkJKCRyMWQsICRyMXIpID0gL1x0KC4qKVx0 KC4qKSQvIGlmICgvXi0tLSAvKTsKCQkoJHIyZCwgJHIycikgPSAvXHQoLiopXHQoLiopJC8gaWYg KC9eXCtcK1wrIC8pOwoJCWxhc3QgaWYgKC9eXCtcK1wrIC8pOwoJfQoKCWlmIChkZWZpbmVkKCRy MXIpICYmICRyMXIgPX4gL14oXGQrXC4pK1xkKyQvKSB7CgkJJHJldjEgID0gJHIxcjsKCQkkZGF0 ZTEgPSAkcjFkOwoJfQoJaWYgKGRlZmluZWQoJHIycikgJiYgJHIyciA9fiAvXihcZCtcLikrXGQr JC8pIHsKCQkkcmV2MiAgPSAkcjJyOwoJCSRkYXRlMiA9ICRyMmQ7Cgl9CgoJcHJpbnQKCSAgICAi PGgzIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCI+RGlmZiBmb3IgLyR3aGVyZV9uZCBiZXR3 ZWVuIHZlcnNpb24gJHJldjEgYW5kICRyZXYyPC9oMz5cbiIsCgkgICAgIyBVc2luZyBzdHlsZT1c ImJvcmRlcjogbm9uZVwiIGhlcmUgYnJlYWtzIE5TIDQueCBiYWRseS4uLgoJICAgICI8dGFibGUg Ym9yZGVyPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMFwiIHdpZHRoPVwi MTAwJVwiPlxuIiwKCSAgICAiPHRyIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZlwi PlxuIiwgIjx0aCB3aWR0aD1cIjUwJVwiIHZhbGlnbj1cInRvcFwiPiIsCgkgICAgInZlcnNpb24g JHJldjEiOwoJcHJpbnQgIiwgJGRhdGUxIiAgICAgICAgIGlmIChkZWZpbmVkKCRkYXRlMSkpOwoJ cHJpbnQgIjxicj5UYWc6ICRzeW0xXG4iIGlmICgkc3ltMSk7CglwcmludCAiPC90aD5cbiIsICI8 dGggd2lkdGg9XCI1MCVcIiB2YWxpZ249XCJ0b3BcIj4iLCAidmVyc2lvbiAkcmV2MiI7Cglwcmlu dCAiLCAkZGF0ZTIiICAgICAgICAgaWYgKGRlZmluZWQoJGRhdGUyKSk7CglwcmludCAiPGJyPlRh ZzogJHN5bTJcbiIgaWYgKCRzeW0xKTsKCXByaW50ICI8L3RoPlxuIjsKCglteSAkbGVmdFJvdyAg PSAwOwoJbXkgJHJpZ2h0Um93ID0gMDsKCW15ICgkb2xkbGluZSwgJG5ld2xpbmUsICRmdW5uYW1l LCAkZGlmZmNvZGUsICRyZXN0KTsKCgkjIFByb2Nlc3MgZGlmZiB0ZXh0CgoJIyBwcmVmZXRjaCBz ZXZlcmFsIGxpbmVzCglteSBAYnVmID0gaGVhZCgkZmgpOwoKCW15ICVkID0gc2Nhbl9kaXJlY3Rp dmVzKEBidWYpOwoKCXdoaWxlIChAYnVmIHx8ICFlb2YoJGZoKSkgewoJCSRkaWZmdHh0ID0gQGJ1 ZiA/IHNoaWZ0IEBidWYgOiA8JGZoPjsKCgkJaWYgKCRkaWZmdHh0ID1+IC9eQEAvKSB7CgkJCSgk b2xkbGluZSwgJG5ld2xpbmUsICRmdW5uYW1lKSA9CgkJCSAgICAkZGlmZnR4dCA9fiAvQEAgXC0o WzAtOV0rKS4qXCsoWzAtOV0rKS4qQEAoLiopLzsKCQkJJGZ1bm5hbWUgPSBodG1scXVvdGUoJGZ1 bm5hbWUpOwoJCQkkZnVubmFtZSA9fiBzL1xzLyZuYnNwOy9nbzsKCQkJcHJpbnQKCQkJICAgICI8 dHIgY2xhc3M9XCJkaWZmLWhlYWRpbmdcIj5cbjx0ZCB3aWR0aD1cIjUwJVwiPiI7CgkJCXByaW50 CgkJCSAgICAiPHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjFcIiBjZWxscGFkZGluZz1c IjVcIj5cbjx0cj5cbjx0ZD48Yj5MaW5lJm5ic3A7JG9sZGxpbmU8L2I+IjsKCQkJcHJpbnQKCQkJ ICAgICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogc21hbGxlclwiPiRmdW5uYW1lPC9z cGFuPjwvdGQ+XG48L3RyPlxuPC90YWJsZT4iOwoJCQlwcmludCAiPC90ZD5cbjx0ZCB3aWR0aD1c IjUwJVwiPiI7CgkJCXByaW50CgkJCSAgICAiPHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1c IjFcIiBjZWxscGFkZGluZz1cIjVcIj5cbjx0cj5cbjx0ZD48Yj5MaW5lJm5ic3A7JG5ld2xpbmU8 L2I+IjsKCQkJcHJpbnQKCQkJICAgICImbmJzcDs8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogc21h bGxlclwiPiRmdW5uYW1lPC9zcGFuPjwvdGQ+XG48L3RyPlxuPC90YWJsZT5cbiI7CgkJCXByaW50 ICI8L3RkPlxuIjsKCQkJJHN0YXRlICAgID0gImR1bXAiOwoJCQkkbGVmdFJvdyAgPSAwOwoJCQkk cmlnaHRSb3cgPSAwOwoJCX0gZWxzZSB7CgkJCSgkZGlmZmNvZGUsICRyZXN0KSA9ICRkaWZmdHh0 ID1+IC9eKFstKyBdKSguKikvOwoJCQkkXyA9IHNwYWNlZEh0bWxUZXh0KCRyZXN0LCAkZHsndGFi c3RvcCd9KTsKCgkJCSMjIyMjIyMjIwoJCQkjIGxpdHRsZSBzdGF0ZSBtYWNoaW5lIHRvIHBhcnNl IHVuaWZpZWQtZGlmZiBvdXRwdXQgKEhlbiwgemVsbGVyQHRoaW5rLmRlKQoJCQkjIGluIG9yZGVy IHRvIGdldCBzb21lIG5pY2UgJ2VkaWZmJy1tb2RlIG91dHB1dAoJCQkjIHN0YXRlczoKCQkJIyAg ImR1bXAiICAgICAgICAgICAgIC0ganVzdCBkdW1wIHRoZSB2YWx1ZQoJCQkjICAiUHJlQ2hhbmdl UmVtb3ZlIiAgLSB3ZSBiZWdhbiB3aXRoICctJyAuLiBzbyB0aGlzIGNvdWxkIGJlIHRoZSBzdGFy dCBvZiBhICdjaGFuZ2UnIGFyZWEgb3IganVzdCByZW1vdmUKCQkJIyAgIlByZUNoYW5nZSIgICAg ICAgIC0gb2tleSwgd2UgZ290IHNldmVyYWwgJy0nIGxpbmVzIGFuZCBtb3ZlZCB0byAnKycgbGlu ZXMgLT4gdGhpcyBpcyBhIGNoYW5nZSBibG9jawoJCQkjIyMjIyMjIyMjCgoJCQlpZiAoJGRpZmZj b2RlIGVxICcrJykgewoJCQkJaWYgKCRzdGF0ZSBlcSAiZHVtcCIpCgkJCQl7ICMgJ2NoYW5nZScg bmV2ZXIgYmVnaW5zIHdpdGggJysnOiBqdXN0IGR1bXAgb3V0IHZhbHVlCgkJCQkJcHJpbnQKCQkJ CQkgICAgIjx0cj5cbjx0ZCBjbGFzcz1cImRpZmYtZW1wdHlcIj4mbmJzcDs8L3RkPlxuPHRkIGNs YXNzPVwiZGlmZi1hZGRlZFwiPiZuYnNwOyRfPC90ZD5cbjwvdHI+XG4iOwoJCQkJfSBlbHNlIHsg ICAgIyB3ZSBnb3QgbWludXMgYmVmb3JlCgkJCQkJJHN0YXRlID0gIlByZUNoYW5nZSI7CgkJCQkJ JHJpZ2h0Q29sWyRyaWdodFJvdysrXSA9ICRfOwoJCQkJfQoJCQl9IGVsc2lmICgkZGlmZmNvZGUg ZXEgJy0nKSB7CgkJCQkkc3RhdGUgPSAiUHJlQ2hhbmdlUmVtb3ZlIjsKCQkJCSRsZWZ0Q29sWyRs ZWZ0Um93KytdID0gJF87CgkJCX0gZWxzZSB7ICAgICMgZW1wdHkgZGlmZmNvZGUKCQkJCWZsdXNo X2RpZmZfcm93cyBcQGxlZnRDb2wsIFxAcmlnaHRDb2wsICRsZWZ0Um93LAoJCQkJICAgICRyaWdo dFJvdzsKCQkJCXByaW50ICI8dHI+XG48dGQgY2xhc3M9XCJkaWZmLXNhbWVcIj4mbmJzcDskXzwv dGQ+XG48dGQgY2xhc3M9XCJkaWZmLXNhbWVcIj4mbmJzcDskXzwvdGQ+XG48L3RyPlxuIjsKCQkJ CSRzdGF0ZSAgICA9ICJkdW1wIjsKCQkJCSRsZWZ0Um93ICA9IDA7CgkJCQkkcmlnaHRSb3cgPSAw OwoJCQl9CgkJfQoJfQoJY2xvc2UoJGZoKTsKCglmbHVzaF9kaWZmX3Jvd3MgXEBsZWZ0Q29sLCBc QHJpZ2h0Q29sLCAkbGVmdFJvdywgJHJpZ2h0Um93OwoKCSMgc3RhdGUgaXMgZW1wdHkgaWYgd2Ug ZGlkbid0IGhhdmUgYW55IGNoYW5nZQoJaWYgKCEkc3RhdGUpIHsKCQlwcmludCAiPHRyPlxuPHRk IGNvbHNwYW49XCIyXCI+Jm5ic3A7PC90ZD5cbjwvdHI+XG4iOwoJCXByaW50ICI8dHIgY2xhc3M9 XCJkaWZmLWVtcHR5XCI+XG4iOwoJCXByaW50CgkJICAgICI8dGQgY29sc3Bhbj1cIjJcIiBhbGln bj1cImNlbnRlclwiPjxiPi0gTm8gdmlld2FibGUgY2hhbmdlIC08L2I+PC90ZD5cbjwvdHI+XG4i OwoJfQoJcHJpbnQgIjwvdGFibGU+XG4iOwoKCXByaW50ICI8aHIgc3R5bGU9XCJ3aWR0aDogMTAw JVwiIG5vc2hhZGU+XG4iOwoJcHJpbnQgIjxmb3JtIG1ldGhvZD1cImdldFwiIGFjdGlvbj1cIiR7 c2NyaXB0d2hlcmV9XCI+XG4iOwoJcHJpbnQgIjx0YWJsZSBzdHlsZT1cImJvcmRlcjogbm9uZVwi PlxuPHRyPlxuPHRkPlxuIjsKCgkjIHByaW50IGxlZ2VuZAoJcHJpbnQgIjx0YWJsZSBib3JkZXI9 XCIxXCI+XG48dHI+XG48dGQ+IjsKCXByaW50ICJMZWdlbmQ6PGJyPjx0YWJsZSBzdHlsZT1cImJv cmRlcjogbm9uZVwiIGNlbGxzcGFjaW5nPVwiMFwiIGNlbGxwYWRkaW5nPVwiMVwiPlxuIjsKCXBy aW50CgkgICAgIjx0cj5cbjx0ZCBhbGlnbj1cImNlbnRlclwiIGNsYXNzPVwiZGlmZi1yZW1vdmVk XCI+UmVtb3ZlZCBmcm9tIHYuJHJldjE8L3RkPlxuPHRkIGNsYXNzPVwiZGlmZi1lbXB0eVwiPiZu YnNwOzwvdGQ+XG48L3RyPlxuIjsKCXByaW50CgkgICAgIjx0ciBjbGFzcz1cImRpZmYtY2hhbmdl ZFwiPlxuPHRkIGFsaWduPVwiY2VudGVyXCIgY29sc3Bhbj1cIjJcIj5jaGFuZ2VkIGxpbmVzPC90 ZD5cbjwvdHI+XG4iOwoJcHJpbnQKCSAgICAiPHRyPlxuPHRkIGNsYXNzPVwiZGlmZi1lbXB0eVwi PiZuYnNwOzwvdGQ+XG48dGQgYWxpZ249XCJjZW50ZXJcIiBjbGFzcz1cImRpZmYtYWRkZWRcIj5B ZGRlZCBpbiB2LiRyZXYyPC90ZD5cbjwvdHI+XG4iOwoJcHJpbnQgIjwvdGFibGU+XG48L3RkPlxu PC90cj5cbjwvdGFibGU+XG48L3RkPlxuPHRkPiI7CgoJIyBQcmludCBmb3JtYXQgc2VsZWN0b3IK CWZvcmVhY2ggbXkgJHZhciAoa2V5cyAlaW5wdXQpIHsKCQluZXh0IGlmICgkdmFyIGVxICJmIik7 CgkJbmV4dAoJCSAgICBpZiAoZGVmaW5lZCgkREVGQVVMVFZBTFVFeyR2YXJ9KQoJCSAgICAmJiAk REVGQVVMVFZBTFVFeyR2YXJ9IGVxICRpbnB1dHskdmFyfSk7CgkJcHJpbnQgIjxpbnB1dCB0eXBl PVwiaGlkZGVuXCIgbmFtZT1cIiIsIHVybGVuY29kZSgkdmFyKSwKCQkgICAgIlwiIHZhbHVlPVwi IiwgdXJsZW5jb2RlKCRpbnB1dHskdmFyfSksICJcIj5cbiI7Cgl9CglwcmludERpZmZTZWxlY3Qo JHVzZV9qYXZhX3NjcmlwdCk7CglwcmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1c IlNob3dcIj5cbiI7CglwcmludCAiPC90ZD5cbiI7CgoJcHJpbnQgIjwvdHI+XG48L3RhYmxlPlxu IjsKCXByaW50ICI8L2Zvcm0+XG4iOwp9CgpzdWIgbmF2aWdhdGVIZWFkZXIoJCQkJCQpIHsKCW15 ICgkc3doZXJlLCAkcGF0aCwgJGZpbGVuYW1lLCAkcmV2LCAkdGl0bGUpID0gQF87Cgkkc3doZXJl ID0gIiIgaWYgKCRzd2hlcmUgZXEgJHNjcmlwdHdoZXJlKTsKCSRzd2hlcmUgPSAnLi8nIC4gdXJs ZW5jb2RlKCRmaWxlbmFtZSkgaWYgKCRzd2hlcmUgZXEgIiIpOwoKCSMgVE9ETzogdGhpcyBzaG91 bGQgYmUgbW92ZWQgaW50byBleHRlcm5hbCBDU1MgZmlsZS4KCW15ICRjc3MgPSAnJzsKCWlmICgk dGl0bGUgZXEgJ2RpZmYnKSB7CgkgICAgJGNzcyA9ICIKPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wi PgouZGlmZi1oZWFkaW5nIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlmZmNvbG9ySGVhZGluZzsK fQouZGlmZi1zYW1lIHsKICBmb250LWZhbWlseTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6 IHNtYWxsZXI7Cn0KLmRpZmYtZW1wdHkgewogIGJhY2tncm91bmQtY29sb3I6ICRkaWZmY29sb3JF bXB0eTsKfQouZGlmZi1hZGRlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJGRpZmZjb2xvckFkZDsK ICBmb250LWZhbWlseTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KLmRp ZmYtcmVtb3ZlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJGRpZmZjb2xvclJlbW92ZTsKICBmb250 LWZhbWlseTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KLmRpZmYtY2hh bmdlZCB7CiAgYmFja2dyb3VuZC1jb2xvcjogJGRpZmZjb2xvckNoYW5nZTsKICBmb250LWZhbWls eTogJGRpZmZmb250ZmFjZTsKICBmb250LXNpemU6IHNtYWxsZXI7Cn0KLmRpZmYtY2hhbmdlZC1t aXNzaW5nIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAkZGlmZmNvbG9yRGFya0NoYW5nZTsKfQo8L3N0 eWxlPiI7Cgl9CgoJcHJpbnQgPDxFT0Y7CiRIVE1MX0RPQ1RZUEUKPGh0bWw+CjxoZWFkPgo8dGl0 bGU+JHBhdGgkZmlsZW5hbWUgLSAkdGl0bGUgLSAkcmV2PC90aXRsZT4kY3NzCiRIVE1MX01FVEE8 L2hlYWQ+CiRib2R5X3RhZ19mb3Jfc3JjCjx0YWJsZSB3aWR0aD0iMTAwJSIgc3R5bGU9ImJvcmRl cjogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogJG5hdmlnYXRpb25IZWFkZXJDb2xvciIgY2VsbHNw YWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIxIj4KPHRyIHZhbGlnbj0iYm90dG9tIj48dGQ+CkVPRgoK CXByaW50ICZsaW5rKCRiYWNraWNvbiwgIiRzd2hlcmUkcXVlcnkjcmV2JHJldiIpOwoJcHJpbnQg IjxiPlJldHVybiB0byAiLCAmbGluaygkZmlsZW5hbWUsICIkc3doZXJlJHF1ZXJ5I3JldiRyZXYi KSwKCSAgICAiIENWUyBsb2ciOwoJcHJpbnQgIjwvYj4gJGZpbGVpY29uPC90ZD4iOwoKCXByaW50 ICI8dGQgYWxpZ249XCJyaWdodFwiPiRkaXJpY29uIDxiPlVwIHRvICIsCgkgICZjbGlja2FibGVQ YXRoKCRwYXRoLCAxKSwKCSAgICAiPC9iPjwvdGQ+IjsKCXByaW50ICI8L3RyPjwvdGFibGU+IjsK fQoKc3ViIHBsdXJhbF93cml0ZSgkJCkgewoJbXkgKCRudW0sICR0ZXh0KSA9IEBfOwoJaWYgKCRu dW0gIT0gMSkgewoJCSR0ZXh0IC49ICJzIjsKCX0KCglpZiAoJG51bSA+IDApIHsKCQlyZXR1cm4g am9pbiAoJyAnLCAkbnVtLCAkdGV4dCk7Cgl9IGVsc2UgewoJCXJldHVybiAiIjsKCX0KfQoKIyMK IyBwcmludCByZWFkYWJsZSB0aW1lc3RhbXAgaW4gdGVybXMgb2YKIyAnLi50aW1lIGFnbycKIyBI LiBaZWxsZXIgPHplbGxlckB0aGluay5kZT4KIyMKc3ViIHJlYWRhYmxlVGltZSgkJCkgewoJbXkg KCRpLCAkYnJlYWssICRyZXR2YWwpOwoJbXkgKCRzZWNzLCAkbG9uZykgPSBAXzsKCgkjIHRoaXMg ZnVuY3Rpb24gd29ya3MgY29ycmVjdCBmb3IgdGltZSA+PSAyIHNlY29uZHMKCWlmICgkc2VjcyA8 IDIpIHsKCQlyZXR1cm4gInZlcnkgbGl0dGxlIHRpbWUiOwoJfQoKCW15ICVkZXNjID0gKAoJCTEs ICAgICAgICAnc2Vjb25kJywgNjAsICAgICAnbWludXRlJywgMzYwMCwgICAgJ2hvdXInLAoJCTg2 NDAwLCAgICAnZGF5JywgICAgNjA0ODAwLCAnd2VlaycsICAgMjYyODAwMCwgJ21vbnRoJywKCQkz MTUzNjAwMCwgJ3llYXInCgkpOwoJbXkgQGJyZWFrcyA9IHNvcnQgeyAkYSA8PT4gJGIgfSBrZXlz ICVkZXNjOwoJJGkgPSAwOwoKCXdoaWxlICgkaSA8PSAkI2JyZWFrcyAmJiAkc2VjcyA+PSAyICog JGJyZWFrc1skaV0pIHsKCQkkaSsrOwoJfQoJJGktLTsKCSRicmVhayAgPSAkYnJlYWtzWyRpXTsK CSRyZXR2YWwgPSBwbHVyYWxfd3JpdGUoaW50KCRzZWNzIC8gJGJyZWFrKSwgJGRlc2N7JGJyZWFr fSk7CgoJaWYgKCRsb25nID09IDEgJiYgJGkgPiAwKSB7CgkJbXkgJHJlc3QgPSAkc2VjcyAlICRi cmVhazsKCQkkaS0tOwoJCSRicmVhayA9ICRicmVha3NbJGldOwoJCW15ICRyZXN0dGltZSA9IHBs dXJhbF93cml0ZShpbnQoJHJlc3QgLyAkYnJlYWspLCAkZGVzY3skYnJlYWt9KTsKCQlpZiAoJHJl c3R0aW1lKSB7CgkJCSRyZXR2YWwgLj0gIiwgJHJlc3R0aW1lIjsKCQl9Cgl9CgoJcmV0dXJuICRy ZXR2YWw7Cn0KCiMjCiMgY2xpY2thYmxlUGF0aChTdHJpbmcgcGF0aG5hbWUsIGJvb2xlYW4gbGFz dF9pdGVtX2NsaWNrYWJsZSkKIwojIHJldHVybnMgYSBodG1sLWlmaWVkIHBhdGggd2hlcmVhcyBl YWNoIGRpcmVjdG9yeSBpcyBhIGxpbmsgZm9yCiMgZmFzdGVyIG5hdmlnYXRpb24uIGxhc3RfaXRl bV9jbGlja2FibGUgY29udHJvbHMgd2hldGhlciB0aGUKIyBiYXNlbmFtZSAobGFzdCBkaXJlY3Rv cnkvZmlsZSkgaXMgYSBsaW5rIGFzIHdlbGwKIyMKc3ViIGNsaWNrYWJsZVBhdGgoJCQpIHsKCW15 ICgkcGF0aG5hbWUsICRjbGlja0xhc3QpID0gQF87CglteSAkcmV0dmFsID0gJyc7CgoJaWYgKCRw YXRobmFtZSBlcSAnLycpIHsKCgkJIyB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gLSBjaG9vc2VD VlNSb290KCkgaXMKCQkjIGludGVuZGVkIHRvIGRvIHRoaXMKCQkkcmV0dmFsID0gIlskY3ZzdHJl ZV0iOwoJfSBlbHNlIHsKCQkkcmV0dmFsIC49ICcgJyAuICZsaW5rKCJbJGN2c3RyZWVdIiwKCQkJ c3ByaW50ZignJXMvJXMjZGlybGlzdCcsICRzY3JpcHRuYW1lLCAkcXVlcnkpKTsKCQlteSAkd2hl cmVwYXRoID0gJyc7CgkJbXkgKCRsYXN0c2xhc2gpID0gJHBhdGhuYW1lID1+IG18LyR8OwoKCQlm b3JlYWNoIChzcGxpdCAoL1wvLywgJHBhdGhuYW1lKSkgewoJCQkkcmV0dmFsIC49ICIgLyAiOwoJ CQkkd2hlcmVwYXRoIC49ICIvJF8iOwoJCQlteSAoJGxhc3QpID0gIiR3aGVyZXBhdGgvIiBlcSAi LyRwYXRobmFtZSIKCQkJICAgIHx8ICR3aGVyZXBhdGggZXEgIi8kcGF0aG5hbWUiOwoKCQkJaWYg KCRjbGlja0xhc3QgfHwgISRsYXN0KSB7CgkJCQkkcmV0dmFsIC49ICZsaW5rKCRfLAoJCQkJCWpv aW4gKCcnLCAkc2NyaXB0bmFtZSwKCQkJCQl1cmxlbmNvZGUoJHdoZXJlcGF0aCksCgkJCQkJKCEk bGFzdCB8fCAkbGFzdHNsYXNoID8gJy8nIDogJycpLAoJCQkJCSRxdWVyeSwKCQkJCQkoISRsYXN0 IHx8ICRsYXN0c2xhc2ggPyAiI2Rpcmxpc3QiIDogIiIpCgkJCQkpKTsKCQkJfSBlbHNlIHsgICAg IyBkbyBub3QgbWFrZSBhIGxpbmsgdG8gdGhlIGN1cnJlbnQgZGlyCgkJCQkkcmV0dmFsIC49ICRf OwoJCQl9CgkJfQoJfQoJcmV0dXJuICRyZXR2YWw7Cn0KCnN1YiBjaG9vc2VDVlNSb290KCkgewoK CXByaW50ICI8Zm9ybSBtZXRob2Q9XCJnZXRcIiBhY3Rpb249XCIke3NjcmlwdHdoZXJlfVwiPlxu IjsKCWlmICgyIDw9IEBDVlNST09UKSB7CgkJbXkgKCRrKTsKCQlmb3JlYWNoICRrIChrZXlzICVp bnB1dCkgewoJCQlwcmludCAiPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiJGtcIiB2YWx1 ZT1cIiRpbnB1dHska31cIj5cbiIKCQkJICAgIGlmICgkaW5wdXR7JGt9KSAmJiAoJGsgbmUgImN2 c3Jvb3QiKTsKCQl9CgoJCSMgRm9ybS1FbGVtZW50cyBsb29rIHdpZXJkIGluIE5ldHNjYXBlIGlm IHRoZSBiYWNrZ3JvdW5kCgkJIyBpc24ndCBncmF5IGFuZCB0aGUgZm9ybSBlbGVtZW50cyBhcmUg bm90IHBsYWNlZAoJCSMgd2l0aGluIGEgdGFibGUgLi4uCgkJcHJpbnQgIjx0YWJsZSBzdHlsZT1c ImJvcmRlcjogbm9uZVwiPlxuPHRyPlxuIjsKCQlwcmludCAiPHRkPjxsYWJlbCBmb3I9XCJjdnNy b290XCIgYWNjZXNza2V5PVwiQ1wiPkNWUyBSb290OjwvbGFiZWw+PC90ZD5cbiI7CgkJcHJpbnQg Ijx0ZD5cbjxzZWxlY3QgaWQ9XCJjdnNyb290XCIgbmFtZT1cImN2c3Jvb3RcIiI7CgkJcHJpbnQg IiBvbmNoYW5nZT1cInRoaXMuZm9ybS5zdWJtaXQoKVwiIiBpZiAkdXNlX2phdmFfc2NyaXB0OwoJ CXByaW50ICI+XG4iOwoKCQlmb3JlYWNoICRrIChAQ1ZTUk9PVCkgewoJCQlwcmludCAiPG9wdGlv biB2YWx1ZT1cIiRrXCIiOwoJCQlwcmludCAiIHNlbGVjdGVkIiBpZiAoJGsgZXEgJGN2c3RyZWUp OwoJCQlwcmludCAiPiIsKCRDVlNST09UZGVzY3J7JGt9ID8gJENWU1JPT1RkZXNjcnska30gOiAk ayksCgkJCSAgICAiPC9vcHRpb24+XG4iOwoJCX0KCQlwcmludCAiPC9zZWxlY3Q+XG48L3RkPlxu PHRkPiI7Cgl9IGVsc2UgewoKCQkjIG5vIGNob2ljZSAtLSBidXQgd2UgbmVlZCB0aGUgZm9ybSB0 byBzZWxlY3QgbW9kdWxlL3BhdGgsCgkJIyBhdCBsZWFzdCBmb3IgTmV0c2NhcGUKCQlwcmludCAi PHA+XG4iOwoJCXByaW50ICJDVlMgUm9vdDogPGI+WyRjdnN0cmVlXTwvYj4iOwoJfQoKCXByaW50 ICIgPGxhYmVsIGZvcj1cIm1wYXRoXCIgYWNjZXNza2V5PVwiTVwiPk1vZHVsZSBwYXRoIG9yIGFs aWFzOiI7CglwcmludCAiPC9sYWJlbD5cbiI7CglwcmludCAiPGlucHV0IHR5cGU9XCJ0ZXh0XCIg aWQ9XCJtcGF0aFwiIG5hbWU9XCJwYXRoXCIgdmFsdWU9XCJcIiBzaXplPVwiMTVcIj5cbiI7Cglw cmludCAiPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkdvXCIgYWNjZXNza2V5PVwiT1wi PiI7CgoJaWYgKDIgPD0gQENWU1JPT1QpIHsKCQlwcmludCAiPC90ZD5cbjwvdHI+XG48L3RhYmxl PiI7Cgl9IGVsc2UgewoJCXByaW50ICI8L3A+IjsKCX0KCXByaW50ICJcbjwvZm9ybT4iOwp9Cgpz dWIgY2hvb3NlTWlycm9yKCkgewoKCSMgVGhpcyBjb2RlIGNvbWVzIGZyb20gdGhlIG9yaWdpbmFs IEJTRC1jdnN3ZWIKCSMgYW5kIG1heSBub3QgYmUgdXNlZnVsIGZvciB5b3VyIHNpdGU7IElmIHlv dSBkb24ndAoJIyBzZXQgJU1JUlJPUlMgdGhpcyB3b24ndCBzaG93IHVwLCBhbnl3YXkuCglzY2Fs YXIoJU1JUlJPUlMpIG9yIHJldHVybjsKCgkjIFNob3VsZCBwZXJoYXBzIGV4Y2x1ZGUgdGhlIGN1 cnJlbnQgc2l0ZSBzb21laG93Li4uCglwcmludCAiXG48cD5cblRoaXMgQ1ZTd2ViIGlzIG1pcnJv cmVkIGluXG4iOwoKCW15IEB0bXAgPSBtYXAoJmxpbmsoaHRtbHF1b3RlKCRfKSwgJE1JUlJPUlN7 JF99KSwKCQkgICAgICBzb3J0IGtleXMgJU1JUlJPUlMpOwoJbXkgJHRtcCA9IHBvcChAdG1wKTsK CglpZiAoc2NhbGFyKEB0bXApKSB7CgkgICAgcHJpbnQgam9pbignLCAnLCBAdG1wKSwgJyBhbmQg JzsKCX0KCglwcmludCAiJHRtcC5cbjwvcD5cbiI7Cn0KCnN1YiBmaWxlU29ydENtcCgpIHsKCW15 ICgkY29tcCkgPSAwOwoJbXkgKCRjLCAkZCwgJGFmLCAkYmYpOwoKCSgkYWYgPSAkYSkgPX4gcy8s diQvLzsKCSgkYmYgPSAkYikgPX4gcy8sdiQvLzsKCW15ICgkcmV2MSwgJGRhdGUxLCAkbG9nMSwg JGF1dGhvcjEsICRmaWxlbmFtZTEpID0gQHskZmlsZWluZm97JGFmfX0KCSAgICBpZiAoZGVmaW5l ZCgkZmlsZWluZm97JGFmfSkpOwoJbXkgKCRyZXYyLCAkZGF0ZTIsICRsb2cyLCAkYXV0aG9yMiwg JGZpbGVuYW1lMikgPSBAeyRmaWxlaW5mb3skYmZ9fQoJICAgIGlmIChkZWZpbmVkKCRmaWxlaW5m b3skYmZ9KSk7CgoJaWYgKGRlZmluZWQoJGZpbGVuYW1lMSkgJiYgZGVmaW5lZCgkZmlsZW5hbWUy KSAmJiAkYWYgZXEgJGZpbGVuYW1lMQoJICAgICYmICRiZiBlcSAkZmlsZW5hbWUyKQoJewoKCQkj IFR3byBmaWxlcwoJCSRjb21wID0gLXJldmNtcCgkcmV2MSwgJHJldjIpIGlmICgkYnlyZXYgJiYg JHJldjEgJiYgJHJldjIpOwoJCSRjb21wID0gKCRkYXRlMiA8PT4gJGRhdGUxKSBpZiAoJGJ5ZGF0 ZSAmJiAkZGF0ZTEgJiYgJGRhdGUyKTsKCQkkY29tcCA9ICgkbG9nMSBjbXAgJGxvZzIpIGlmICgk Ynlsb2cgJiYgJGxvZzEgJiYgJGxvZzIpOwoJCSRjb21wID0gKCRhdXRob3IxIGNtcCAkYXV0aG9y MikKCQkgICAgaWYgKCRieWF1dGhvciAmJiAkYXV0aG9yMSAmJiAkYXV0aG9yMik7Cgl9CgoJaWYg KCRjb21wID09IDApIHsKCgkJIyBEaXJlY3RvcmllcyBmaXJzdCwgdGhlbiBmaWxlcyB1bmRlciB2 ZXJzaW9uIGNvbnRyb2wsCgkJIyB0aGVuIG90aGVyLCAicm9ndWUiIGZpbGVzLgoJCSMgU29ydCBi eSBmaWxlbmFtZSBpZiBubyBvdGhlciBjcml0ZXJpYSBhdmFpbGFibGUuCgoJCW15ICRhZCA9ICgo LWQgIiRmdWxsbmFtZS8kYSIpID8gJ0QnCgkJICAgIDogKGRlZmluZWQoJGZpbGVpbmZveyRhZn0p ID8gJ0YnIDogJ1InKSk7CgkJbXkgJGJkID0gKCgtZCAiJGZ1bGxuYW1lLyRiIikgPyAnRCcKCQkg ICAgOiAoZGVmaW5lZCgkZmlsZWluZm97JGJmfSkgPyAnRicgOiAnUicpKTsKCQkoJGMgPSAkYSkg PX4gc3wuKi98fDsKCQkoJGQgPSAkYikgPX4gc3wuKi98fDsKCQkkY29tcCA9ICgiJGFkJGMiIGNt cCAiJGJkJGQiKTsKCX0KCXJldHVybiAkY29tcDsKfQoKIyBtYWtlIEEgdXJsIGZvciBkb3dubG9h ZGluZwpzdWIgZG93bmxvYWRfdXJsKCQkOyQpIHsKCW15ICgkdXJsLCAkcmV2aXNpb24sICRtaW1l dHlwZSkgPSBAXzsKCgkkcmV2aXNpb24gPX4gcy9cYjBcLi8vOwoKCWlmIChkZWZpbmVkKCRjaGVj a291dE1hZ2ljKQoJICAgICYmICghZGVmaW5lZCgkbWltZXR5cGUpIHx8ICRtaW1ldHlwZSBuZSAi dGV4dC94LWN2c3dlYi1tYXJrdXAiKSkKCXsKCQlteSAkcGF0aCA9ICR3aGVyZTsKCQkkcGF0aCA9 fiBzfFteL10rJHx8OwoJCSR1cmwgPSAiJHNjcmlwdG5hbWUvJGNoZWNrb3V0TWFnaWMvJHtwYXRo fSR1cmwiOwoJfQoJJHVybCAuPSAiP3Jldj0kcmV2aXNpb24iOwoJJHVybCAuPSAnJmNvbnRlbnQt dHlwZT0nIC4gdXJsZW5jb2RlKCRtaW1ldHlwZSkgaWYgKGRlZmluZWQoJG1pbWV0eXBlKSk7CgoJ JHVybDsKfQoKIyBQcmVzZW50cyBhIGxpbmsgdG8gZG93bmxvYWQgdGhlCiMgc2VsZWN0ZWQgcmV2 aXNpb24Kc3ViIGRvd25sb2FkX2xpbmsoJCQkOyQpIHsKCW15ICgkdXJsLCAkcmV2aXNpb24sICR0 ZXh0bGluaywgJG1pbWV0eXBlKSA9IEBfOwoJbXkgKCRmdWxsdXJsKSA9IGRvd25sb2FkX3VybCgk dXJsLCAkcmV2aXNpb24sICRtaW1ldHlwZSk7CgoJJGZ1bGx1cmwgPX4gcy86L3NwcmludGYoIiUl JTAyeCIsIG9yZCgkJikpL2VnOwoKCXByaW50ZiAnPGEgaHJlZj0iJXMiJywgaHJlZnF1b3RlKCIk ZnVsbHVybCRiYXJlcXVlcnkiKTsKCglpZiAoJG9wZW5fZXh0ZXJuX3dpbmRvdwoJICAgICYmICgh ZGVmaW5lZCgkbWltZXR5cGUpIHx8ICRtaW1ldHlwZSBuZSAidGV4dC94LWN2c3dlYi1tYXJrdXAi KSkKCXsKCQlwcmludCAnIHRhcmdldD0iY3ZzX2NoZWNrb3V0Iic7CgoJCSMgd2Ugc2hvdWxkIGhh dmUKCQkjICAgJ2lmIChkb2N1bWVudC5jdnN3aW49PW51bGwpIGRvY3VtZW50LmN2c3dpbj13aW5k b3cub3BlbiguLi4nCgkJIyBpbiBvcmRlciB0byBhbGxvdyB0aGUgdXNlciB0byByZXNpemUgdGhl IHdpbmRvdzsgb3RoZXJ3aXNlCgkJIyB0aGUgdXNlciBtYXkgcmVzaXplIHRoZSB3aW5kb3csIGJ1 dCBvbiBuZXh0IGNoZWNrb3V0IC0gemFwIC0KCQkjIGl0cyBvcmlnaW5hbCAoY29uZmlndXJlZCBz LiBjdnN3ZWIuY29uZikgc2l6ZSBpcyBiYWNrIGFnYWluCgkJIyAuLiBhbm5veWluZyAoaWYgJGV4 dGVybl93aW5kb3dfKHdpZHRofGhlaWdodCkgaXMgZGVmaW5lZCkKCQkjIGJ1dCB0aGlzIGlmICgu Likgc29sdXRpb24gaXMgZmFyIGZyb20gcGVyZmVjdAoJCSMgd2hhdCB3ZSBuZWVkIHRvIGRvIGFz IHdlbGwgaXMKCQkjIDEpIHNhdmUgY3Zzd2luIGluIGFuIGludmlzaWJsZSBmcmFtZSB0aGF0IGFs d2F5cyBleGlzdHMKCQkjICAgIChkb2N1bWVudC5jdnN3aW4gd2lsbCBiZSB2b2lkIG9uIG5leHQg bG9hZCkKCQkjIDIpIG9uIGNsb3NlIG9mIHRoZSBjdnNfY2hlY2tvdXQgLSB3aW5kb3cgc2V0IHRo ZSBjdnN3aW4KCQkjICAgIHZhcmlhYmxlIHRvICdudWxsJyBhZ2FpbiAtIHNvIHRoYXQgaXQgd2ls bCBiZQoJCSMgICAgcmVvcGVuZW5kIHdpdGggdGhlIGNvbmZpZ3VyZWQgc2l6ZQoJCSMgYW55b25l IGEgSmF2YVNjcmlwdCBwcm9ncmFtbWVyID8KCQkjIC4uIHNvIGhlcmUgd2l0aG91dCBpZiAoLi4p OgoJCSMgY3VycmVudGx5LCB0aGUgYmVzdCB3YXkgaXMgdG8gY29tbWVudCBvdXQgdGhlIHNpemUg cGFyYW1ldGVycwoJCSMgKCRleHRlcm5fd2luZG93Li4uKSBpbiBjdnN3ZWIuY29uZi4KCQlpZiAo JHVzZV9qYXZhX3NjcmlwdCkgewoJCQlteSBAYXR0ciA9IHF3KHJlc2l6YWJsZSBzY3JvbGxiYXJz KTsKCgkJCXB1c2ggQGF0dHIsIHF3KHN0YXR1cyB0b29sYmFyKQoJCQkgICAgaWYgKGRlZmluZWQo JG1pbWV0eXBlKSAmJiAkbWltZXR5cGUgZXEgInRleHQvaHRtbCIpOwoKCQkJcHVzaCBAYXR0ciwg IndpZHRoPSRleHRlcm5fd2luZG93X3dpZHRoIgoJCQkgICAgaWYgKGRlZmluZWQoJGV4dGVybl93 aW5kb3dfd2lkdGgpKTsKCgkJCXB1c2ggQGF0dHIsICJoZWlnaHQ9JGV4dGVybl93aW5kb3dfaGVp Z2h0IgoJCQkgICAgaWYgKGRlZmluZWQoJGV4dGVybl93aW5kb3dfaGVpZ2h0KSk7CgoJCQkjIFdl IG5lZWQgdGhlICJyZXR1cm4gZmFsc2UiIGhlcmUgdG8gcHJldmVudCBicm93c2VycwoJCQkjIGZy b20gZm9sbG93aW5nIHRoZSBocmVmIGFmdGVyIHRoZSBvbmNsaWNrIGhhbmRsZXIuCgkJCSMgVGhp cyB3b3VsZCBlZmZlY3RpdmVseSBsb2FkIHRoZSBzYW1lIGRvY3VtZW50IGluCgkJCSMgdGhlIHNh bWUgd2luZG93ICp0d2ljZSouCgkJCXByaW50ZgoJCQkgICAgcWAgb25jbGljaz0id2luZG93Lm9w ZW4oJyVzJywnY3ZzX2NoZWNrb3V0JywnJXMnKTtyZXR1cm4gZmFsc2UiYCwKCQkJICAgIGhyZWZx dW90ZSgiJGZ1bGx1cmwkYmFyZXF1ZXJ5IiksIGpvaW4gKCcsJywgQGF0dHIpOwoJCX0KCX0KCXBy aW50ICI+PGI+JHRleHRsaW5rPC9iPjwvYT4iOwp9CgojIFJldHVybnMgYSBRdWVyeSBzdHJpbmcg d2l0aCB0aGUKIyBzcGVjaWZpZWQgcGFyYW1ldGVyIHRvZ2dsZWQKc3ViIHRvZ2dsZVF1ZXJ5KCQk KSB7CglteSAoJHRvZ2dsZSwgJHZhbHVlKSA9IEBfOwoJbXkgKCRuZXdxdWVyeSwgJHZhcik7Cglt eSAoJXZhcnMpOwoJJXZhcnMgPSAlaW5wdXQ7CgoJaWYgKGRlZmluZWQoJHZhbHVlKSkgewoJCSR2 YXJzeyR0b2dnbGV9ID0gJHZhbHVlOwoJfSBlbHNlIHsKCQkkdmFyc3skdG9nZ2xlfSA9ICR2YXJz eyR0b2dnbGV9ID8gMCA6IDE7Cgl9CgoJIyBCdWlsZCBhIG5ldyBxdWVyeSBvZiBub24tZGVmYXVs dCBwYXJhbWVudGVycwoJJG5ld3F1ZXJ5ID0gIiI7Cglmb3JlYWNoICR2YXIgKEBzdGlja3l2YXJz KSB7CgkJbXkgKCR2YWx1ZSkgPSBkZWZpbmVkKCR2YXJzeyR2YXJ9KSA/ICR2YXJzeyR2YXJ9IDog IiI7CgkJbXkgKCRkZWZhdWx0KSA9CgkJICAgIGRlZmluZWQoJERFRkFVTFRWQUxVRXskdmFyfSkg PyAkREVGQVVMVFZBTFVFeyR2YXJ9IDogIiI7CgoJCWlmICgkdmFsdWUgbmUgJGRlZmF1bHQpIHsK CQkJJG5ld3F1ZXJ5IC49ICImIiBpZiAoJG5ld3F1ZXJ5IG5lICIiKTsKCQkJJG5ld3F1ZXJ5IC49 IHVybGVuY29kZSgkdmFyKSAuICI9IiAuIHVybGVuY29kZSgkdmFsdWUpOwoJCX0KCX0KCglpZiAo JG5ld3F1ZXJ5KSB7CgkJcmV0dXJuICc/JyAuICRuZXdxdWVyeTsKCX0KCXJldHVybiAiIjsKfQoK c3ViIHVybGVuY29kZSgkKSB7Cglsb2NhbCAoJF8pID0gQF87CgoJcy9bXDAwMC0rey1cMzc3XS9z cHJpbnRmKCIlJSUwMngiLCBvcmQoJCYpKS9nZTsKCgkkXzsKfQoKc3ViIGh0bWxxdW90ZSgkKSB7 Cglsb2NhbCAoJF8pID0gQF87CgoJIyBTcGVjaWFsIENoYXJhY3RlcnM7IFJGQyAxODY2CglzLyYv JmFtcDsvZzsKCXMvXCIvJnF1b3Q7L2c7CglzLzwvJmx0Oy9nOwoJcy8+LyZndDsvZzsKCgkkXzsK fQoKc3ViIGh0bWx1bnF1b3RlKCQpIHsKCWxvY2FsICgkXykgPSBAXzsKCgkjIFNwZWNpYWwgQ2hh cmFjdGVyczsgUkZDIDE4NjYKCXMvJnF1b3Q7L1wiL2c7CglzLyZsdDsvPC9nOwoJcy8mZ3Q7Lz4v ZzsKCXMvJmFtcDsvJi9nOwoKCSRfOwp9CgpzdWIgaHJlZnF1b3RlKCQpIHsKCWxvY2FsICgkXykg PSBAXzsKCgl5LyAvKy87CgoJaHRtbHF1b3RlKCRfKQp9CgpzdWIgaHR0cF9oZWFkZXIoOyQpIHsK CW15ICRjb250ZW50X3R5cGUgPSBzaGlmdCB8fCAidGV4dC9odG1sIjsKCgkkY29udGVudF90eXBl IC49ICI7IGNoYXJzZXQ9JGNoYXJzZXQiCgkgICAgaWYgJGNvbnRlbnRfdHlwZSA9fiBtLF50ZXh0 LywgJiYgZGVmaW5lZCgkY2hhcnNldCkgJiYgJGNoYXJzZXQ7CgoJaWYgKGRlZmluZWQoJG1vZGRh dGUpKSB7CgkJaWYgKCRpc19tb2RfcGVybCkgewoJCQlBcGFjaGUtPnJlcXVlc3QtPmhlYWRlcl9v dXQoCgkJCQkiTGFzdC1Nb2RpZmllZCIgPT4gc2NhbGFyIGdtdGltZSgkbW9kZGF0ZSkKCQkJCS4g IiBHTVQiKTsKCQl9IGVsc2UgewoJCQlwcmludCAiTGFzdC1Nb2RpZmllZDogIiwgc2NhbGFyIGdt dGltZSgkbW9kZGF0ZSksCgkJCSAgICAiIEdNVFxyXG4iOwoJCX0KCX0KCglpZiAoJGlzX21vZF9w ZXJsKSB7CgkJQXBhY2hlLT5yZXF1ZXN0LT5jb250ZW50X3R5cGUoJGNvbnRlbnRfdHlwZSk7Cgl9 IGVsc2UgewoJCXByaW50ICJDb250ZW50LVR5cGU6ICRjb250ZW50X3R5cGVcclxuIjsKCX0KCglp ZiAoJGFsbG93X2NvbXByZXNzICYmICRtYXljb21wcmVzcykgewoJCWlmICgkaGFzX3psaWIKCQkg ICAgfHwgKGRlZmluZWQoJENNRHtnemlwfSkgJiYgb3BlbihHWklQLCAifCAkQ01Ee2d6aXB9IC0x IC1jIikpCgkJICAgICkKCQl7CgoJCQlpZiAoJGlzX21vZF9wZXJsKSB7CgkJCQlBcGFjaGUtPnJl cXVlc3QtPmNvbnRlbnRfZW5jb2RpbmcoIngtZ3ppcCIpOwoJCQkJQXBhY2hlLT5yZXF1ZXN0LT5o ZWFkZXJfb3V0KAoJCQkJCVZhcnkgPT4gIkFjY2VwdC1FbmNvZGluZyIpOwoJCQkJQXBhY2hlLT5y ZXF1ZXN0LT5zZW5kX2h0dHBfaGVhZGVyOwoJCQl9IGVsc2UgewoJCQkJcHJpbnQgIkNvbnRlbnQt RW5jb2Rpbmc6IHgtZ3ppcFxyXG4iOwoJCQkJcHJpbnQgIlZhcnk6IEFjY2VwdC1FbmNvZGluZ1xy XG4iCgkJCQkgICAgOyAgICAgICAgICAgICNSRkMgMjA2OCwgMTQuNDMKCQkJCXByaW50ICJcclxu IjsgICAgIyBDbG9zZSBoZWFkZXJzCgkJCX0KCQkJJHwgPSAxOwoJCQkkfCA9IDA7ICAgICMgRmx1 c2ggaGVhZGVyIG91dHB1dAoKCQkJaWYgKCRoYXNfemxpYikgewoJCQkJdGllICpHWklQLCBfX1BB Q0tBR0VfXywgXCpTVERPVVQ7CgkJCX0KCQkJc2VsZWN0KEdaSVApOwoJCQkkZ3ppcF9vcGVuID0g MTsKCgkJCSMJICAgIHByaW50ICI8IS0tIGd6aXBwZWQgLS0+IiBpZiAoJGNvbnRlbnRfdHlwZSA9 fiBtfF50ZXh0L2h0bWxcYnwpOwoJCX0gZWxzZSB7CgkJCWlmICgkaXNfbW9kX3BlcmwpIHsKCQkJ CUFwYWNoZS0+cmVxdWVzdC0+c2VuZF9odHRwX2hlYWRlcjsKCQkJfSBlbHNlIHsKCQkJCXByaW50 ICJcclxuIjsgICAgIyBDbG9zZSBoZWFkZXJzCgkJCX0KCQkJcHJpbnQKCQkJICAgICI8c3BhbiBz dHlsZT1cImZvbnQtc2l6ZTogc21hbGxlclwiPlVuYWJsZSB0byBmaW5kIGd6aXAgYmluYXJ5IGlu IHRoZSA8Yj5cJGNvbW1hbmRfcGF0aDwvYj4gKCRjb21tYW5kX3BhdGgpIHRvIGNvbXByZXNzIG91 dHB1dDwvc3Bhbj48YnI+IjsKCQl9Cgl9IGVsc2UgewoKCQlpZiAoJGlzX21vZF9wZXJsKSB7CgkJ CUFwYWNoZS0+cmVxdWVzdC0+c2VuZF9odHRwX2hlYWRlcjsKCQl9IGVsc2UgewoJCQlwcmludCAi XHJcbiI7ICAgICMgQ2xvc2UgaGVhZGVycwoJCX0KCX0KfQoKc3ViIGh0bWxfaGVhZGVyKCQpIHsK CW15ICgkdGl0bGUpID0gQF87CglodHRwX2hlYWRlcigidGV4dC9odG1sIik7CglwcmludCA8PEVP SDsKJEhUTUxfRE9DVFlQRQo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT4kdGl0bGU8L3RpdGxlPgokSFRN TF9NRVRBPC9oZWFkPgokYm9keV90YWcKJGxvZ28gPGgxIGFsaWduPSJjZW50ZXIiPiR0aXRsZTwv aDE+CkVPSAp9CgpzdWIgaHRtbF9mb290ZXIoKSB7CglwcmludCAiPGhyIG5vc2hhZGU+XG48YWRk cmVzcz4kYWRkcmVzczwvYWRkcmVzcz5cbiIgaWYgJGFkZHJlc3M7CglwcmludCAiPC9ib2R5Plxu PC9odG1sPlxuIjsKfQoKc3ViIGxpbmtfdGFncygkKSB7CglteSAoJHRhZ3MpID0gQF87CglteSAo JHJldCkgID0gIiI7CglteSAoJGZpbGV1cmwsICRmaWxlbmFtZSk7CgoJKCRmaWxlbmFtZSA9ICR3 aGVyZSkgPX4gcy9eLipcLy8vOwoJJGZpbGV1cmwgPSAnLi8nIC4gdXJsZW5jb2RlKCRmaWxlbmFt ZSk7CgoJZm9yZWFjaCBteSAkc3ltIChzcGxpdCAoIiwgIiwgJHRhZ3MpKSB7CgkJJHJldCAuPSAi LFxuIiBpZiAoJHJldCBuZSAiIik7CgkJJHJldCAuPQoJCSAgICAmbGluaygkc3ltLCAkZmlsZXVy bCAuIHRvZ2dsZVF1ZXJ5KCdvbmx5X3dpdGhfdGFnJywgJHN5bSkpOwoJfQoJcmV0dXJuICIkcmV0 XG4iOwp9CgojCiMgU2VlIGlmIGEgbW9kdWxlIGlzIGxpc3RlZCBpbiB0aGUgY29uZmlnIGZpbGUn cyBASGlkZU1vZHVsZXMgbGlzdC4KIwpzdWIgZm9yYmlkZGVuX21vZHVsZSgkKSB7CglteSAoJG1v ZHVsZSkgPSBAXzsKCWxvY2FsICRfOwoKCWZvciAoQEhpZGVNb2R1bGVzKSB7CgkJcmV0dXJuIDEg aWYgJG1vZHVsZSA9fiAkXzsKCX0KCXJldHVybiAwOwp9CgpzdWIgZm9yYmlkZGVuX2ZpbGUoJCkg ewoJbXkgKCRwYXRoKSA9IEBfOwoJJHBhdGggPSAgc3Vic3RyKCRwYXRoLCBsZW5ndGgoJGN2c3Jv b3QpICsgMSk7Cglsb2NhbCAkXzsKCWZvciAoQEZvcmJpZGRlbkZpbGVzKSB7CgkJcmV0dXJuIDEg aWYgJHBhdGggPX4gJF87Cgl9CglyZXR1cm4gMDsKfQoKIyBDbG9zZSB0aGUgR1pJUCBoYW5kbGUg cmVtb3ZlIHRoZSB0aWUuCgpzdWIgZ3ppcGNsb3NlIHsKCWlmICgkZ3ppcF9vcGVuKSB7CgkJc2Vs ZWN0KFNURE9VVCk7CgkJY2xvc2UoR1pJUCk7CgkJdW50aWUgKkdaSVA7CgkJJGd6aXBfb3BlbiA9 IDA7Cgl9Cn0KCiMgaW1wbGVtZW50IGEgZ3ppcHBlZCBmaWxlIGhhbmRsZSB2aWEgdGhlIENvbXBy ZXNzOlpsaWIgY29tcHJlc3Npb24KIyBsaWJyYXJ5LgoKc3ViIE1BR0lDMSgpIHsgMHgxZiB9CnN1 YiBNQUdJQzIoKSB7IDB4OGIgfQpzdWIgT1NDT0RFKCkgeyAzIH0KCnN1YiBUSUVIQU5ETEUgewoJ bXkgKCRjbGFzcywgJG91dCkgPSBAXzsKCW15ICgkZCkgPSBDb21wcmVzczo6WmxpYjo6ZGVmbGF0 ZUluaXQoCgkJLUxldmVsICAgICAgPT4gQ29tcHJlc3M6OlpsaWI6OlpfQkVTVF9DT01QUkVTU0lP TigpLAoJCS1XaW5kb3dCaXRzID0+IC1Db21wcmVzczo6WmxpYjo6TUFYX1dCSVRTKCkKCSkgb3Ig cmV0dXJuIHVuZGVmOwoJbXkgKCRvKSA9IHsKCQloYW5kbGUgPT4gJG91dCwKCQlkaCAgICAgPT4g JGQsCgkJY3JjICAgID0+IDAsCgkJbGVuICAgID0+IDAsCgl9OwoJbXkgKCRoZWFkZXIpID0KCSAg ICBwYWNrKCJjMTAiLCBNQUdJQzEsIE1BR0lDMiwgQ29tcHJlc3M6OlpsaWI6OlpfREVGTEFURUQo KSwgMCwgMCwgMCwKCSAgICAwLCAwLCAwLCBPU0NPREUpOwoJcHJpbnQgeyRvLT57aGFuZGxlfX0g JGhlYWRlcjsKCXJldHVybiBibGVzcygkbywgJGNsYXNzKTsKfQoKc3ViIFBSSU5UIHsKCW15ICgk bykgICA9IHNoaWZ0OwoJbXkgKCRidWYpID0gam9pbiAoZGVmaW5lZCAkLCA/ICQsIDogIiIsIEBf KTsKCW15ICgkbGVuKSA9IGxlbmd0aCgkYnVmKTsKCW15ICgkY29tcHJlc3NlZCwgJHN0YXR1cykg PSAkby0+e2RofS0+ZGVmbGF0ZSgkYnVmKTsKCXByaW50IHskby0+e2hhbmRsZX19ICRjb21wcmVz c2VkIGlmIGRlZmluZWQoJGNvbXByZXNzZWQpOwoJJG8tPntjcmN9ID0gQ29tcHJlc3M6OlpsaWI6 OmNyYzMyKCRidWYsICRvLT57Y3JjfSk7Cgkkby0+e2xlbn0gKz0gJGxlbjsKCXJldHVybiAkbGVu Owp9CgpzdWIgUFJJTlRGIHsKCW15ICgkbykgICA9IHNoaWZ0OwoJbXkgKCRmbXQpID0gc2hpZnQ7 CglteSAoJGJ1ZikgPSBzcHJpbnRmKCRmbXQsIEBfKTsKCW15ICgkbGVuKSA9IGxlbmd0aCgkYnVm KTsKCW15ICgkY29tcHJlc3NlZCwgJHN0YXR1cykgPSAkby0+e2RofS0+ZGVmbGF0ZSgkYnVmKTsK CXByaW50IHskby0+e2hhbmRsZX19ICRjb21wcmVzc2VkIGlmIGRlZmluZWQoJGNvbXByZXNzZWQp OwoJJG8tPntjcmN9ID0gQ29tcHJlc3M6OlpsaWI6OmNyYzMyKCRidWYsICRvLT57Y3JjfSk7Cgkk by0+e2xlbn0gKz0gJGxlbjsKCXJldHVybiAkbGVuOwp9CgpzdWIgV1JJVEUgewoJbXkgKCRvLCAk YnVmLCAkbGVuLCAkb2ZmKSA9IEBfOwoJbXkgKCRjb21wcmVzc2VkLCAkc3RhdHVzKSA9ICRvLT57 ZGh9LT5kZWZsYXRlKHN1YnN0cigkYnVmLCAwLCAkbGVuKSk7CglwcmludCB7JG8tPntoYW5kbGV9 fSAkY29tcHJlc3NlZCBpZiBkZWZpbmVkKCRjb21wcmVzc2VkKTsKCSRvLT57Y3JjfSA9IENvbXBy ZXNzOjpabGliOjpjcmMzMihzdWJzdHIoJGJ1ZiwgMCwgJGxlbiksICRvLT57Y3JjfSk7Cgkkby0+ e2xlbn0gKz0gJGxlbjsKCXJldHVybiAkbGVuOwp9CgpzdWIgQ0xPU0UgewoJbXkgKCRvKSA9IEBf OwoJcmV0dXJuIGlmICFkZWZpbmVkKCRvLT57ZGh9KTsKCW15ICgkYnVmKSA9ICRvLT57ZGh9LT5m bHVzaCgpOwoJJGJ1ZiAuPSBwYWNrKCJWIFYiLCAkby0+e2NyY30sICRvLT57bGVufSk7Cglwcmlu dCB7JG8tPntoYW5kbGV9fSAkYnVmOwoJdW5kZWYgJG8tPntkaH07Cn0KCnN1YiBERVNUUk9ZIHsK CW15ICgkbykgPSBAXzsKCUNMT1NFKCRvKTsKfQo= ------_=_NextPart_001_01C360BA.71667494-- From owner-freebsd-cvsweb@FreeBSD.ORG Tue Aug 12 10:34:47 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 25C7337B401 for ; Tue, 12 Aug 2003 10:34:47 -0700 (PDT) Received: from smtp3.pp.htv.fi (smtp3.pp.htv.fi [213.243.153.135]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7CB4A43F3F for ; Tue, 12 Aug 2003 10:34:46 -0700 (PDT) (envelope-from scop@FreeBSD.org) Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by smtp3.pp.htv.fi (Postfix) with ESMTP id 2B2AB27B18C; Tue, 12 Aug 2003 20:34:45 +0300 (EEST) Received: from cs78130147.pp.htv.fi (cs78130147.pp.htv.fi [62.78.130.147]) by posti.pp.htv.fi (8.11.1/8.11.1) with ESMTP id h7CHYi519841; Tue, 12 Aug 2003 20:34:44 +0300 (EETDST) From: Ville =?ISO-8859-1?Q?Skytt=E4?= To: PC32 XHChen In-Reply-To: References: Content-Type: text/plain Organization: FreeBSD Message-Id: <1060709683.15140.87.camel@bobcat.mine.nu> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.3 (1.4.3-0.vs.1) Date: 12 Aug 2003 20:34:43 +0300 Content-Transfer-Encoding: 7bit cc: freebsd-cvsweb@FreeBSD.org Subject: Re: FW: Graph of revisions for cvsweb.cgi X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Aug 2003 17:34:47 -0000 On Tue, 2003-08-12 at 13:13, PC32 XHChen wrote: > Dear all: > I modified cvsweb.cgi for supporting "graph selection" as what's in wincvs. > Thanks for trying it ! Whoo, that's pretty impressive stuff! However, a couple of points: Your modified version is done against FreeBSD-CVSweb 2.0.6; the rel-2_0-branch has been feature frozen. CVS HEAD contains the development version, all new features should be done there. See http://www.freebsd.org/cgi/cvsweb.cgi/projects/cvsweb/ The development version already uses cvsgraph from http://www.akhphd.au.dk/~bertho/cvsgraph/ to provide similar functionality. There are some naming conflicts that need to be sorted out before your version could be applied. Submissions are better sent as unified diffs (diff -u) instead of whole modified files. And I'd rather see the JavaScript code in a separate static .js file(s) instead of embedded in the cvsweb.cgi script, as much as possible. Or ported to Perl :) Could you port your change so that it applies against HEAD of cvsweb.cgi and possibly address the other issues above and send the results as a unified diff? What level of JavaScript support does the code require? It seems to work in my Mozilla Firebird 0.6.1. -- \/ From owner-freebsd-cvsweb@FreeBSD.ORG Wed Aug 13 10:49:29 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AB28A37B401 for ; Wed, 13 Aug 2003 10:49:29 -0700 (PDT) Received: from ljcqs053.cnf.com (mailhost2.cnf.com [63.230.177.24]) by mx1.FreeBSD.org (Postfix) with ESMTP id AC01E43FBD for ; Wed, 13 Aug 2003 10:49:28 -0700 (PDT) (envelope-from Anderson.Robert@menlolog.com) Received: from cnfqs039.cnf.com (localhost [127.0.0.1]) by ljcqs053.cnf.com (Postfix) with ESMTP id E156EC00 for ; Wed, 13 Aug 2003 10:47:17 -0700 (PDT) Received: by cnfqs039.cnf.prod.cnf.com with Internet Mail Service (5.5.2653.19) id ; Wed, 13 Aug 2003 10:47:17 -0700 Message-ID: <25E622D843625C40BE0EEC150B437C1B2CCD8D@cnfqe029.cnf.prod.cnf.com> From: "Anderson, Robert H - MWT" To: "'freebsd-cvsweb@freebsd.org'" Date: Wed, 13 Aug 2003 10:47:11 -0700 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: text/plain X-Content-Filtered-By: Mailman/MimeDel 2.1.1 Subject: Version numbers not displayed in diff X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Aug 2003 17:49:30 -0000 I have freebsd-cvsweb installed on HPUX with perl 5.6.1, cvs 1.11, rcs 5.7, apache2. When I get a "Colored" or "Long Colored" diff, the version numbers that I am diffing do not appear at the top of the page. Instead, it reads... Diff for /path/to/file/in/cvs/filename between version and In the error log for apache I get the following error... Use of uninitialized value in concatenation (.) or string at cvsweb2.cgi line 3012, line 7. Use of uninitialized value in concatenation (.) or string at cvsweb2.cgi line 3012, line 7. Use of uninitialized value in concatenation (.) or string at cvsweb2.cgi line 3012, line 7. Use of uninitialized value in concatenation (.) or string at cvsweb2.cgi line 3019, line 7. Use of uninitialized value in concatenation (.) or string at cvsweb2.cgi line 3113. Use of uninitialized value in concatenation (.) or string at cvsweb2.cgi line 3117. Has anyone else experienced this issue? Robert Anderson Sr. Web Administrator Menlo Logistics (503) 450-2880 desk (503) 781-4726 cell From owner-freebsd-cvsweb@FreeBSD.ORG Wed Aug 13 14:13:48 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 851F237B401 for ; Wed, 13 Aug 2003 14:13:48 -0700 (PDT) Received: from smtp2.pp.htv.fi (smtp2.pp.htv.fi [213.243.153.6]) by mx1.FreeBSD.org (Postfix) with ESMTP id D659543FBF for ; Wed, 13 Aug 2003 14:13:47 -0700 (PDT) (envelope-from scop@FreeBSD.org) Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by smtp2.pp.htv.fi (Postfix) with ESMTP id 98592297442 for ; Thu, 14 Aug 2003 00:13:46 +0300 (EEST) Received: from cs78130147.pp.htv.fi (cs78130147.pp.htv.fi [62.78.130.147]) by posti.pp.htv.fi (8.11.1/8.11.1) with ESMTP id h7DLDk520861 for ; Thu, 14 Aug 2003 00:13:46 +0300 (EETDST) From: Ville =?ISO-8859-1?Q?Skytt=E4?= To: "'freebsd-cvsweb@freebsd.org'" In-Reply-To: <25E622D843625C40BE0EEC150B437C1B2CCD8D@cnfqe029.cnf.prod.cnf.com> References: <25E622D843625C40BE0EEC150B437C1B2CCD8D@cnfqe029.cnf.prod.cnf.com> Content-Type: text/plain Organization: FreeBSD Message-Id: <1060809225.13355.42.camel@bobcat.mine.nu> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.3 (1.4.3-0.vs.1) Date: 14 Aug 2003 00:13:45 +0300 Content-Transfer-Encoding: 7bit Subject: Re: Version numbers not displayed in diff X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Aug 2003 21:13:48 -0000 On Wed, 2003-08-13 at 20:47, Anderson, Robert H - MWT wrote: > I have freebsd-cvsweb installed on HPUX with perl 5.6.1, cvs 1.11, rcs 5.7, > apache2. When I get a "Colored" or "Long Colored" diff, the version numbers > that I am diffing do not appear at the top of the page. Instead, it reads... > > Diff > for /path/to/file/in/cvs/filename > between version and > > In the error log for apache I get the following error... [snip] What version of FreeBSD-CVSweb are you running? 2.0.6? Could you try adding the following line as the first thing inside the "while (<$fh>)" loop around line 3000 and send me the output generated in the Apache error log: warn("diff: '$_'\n"); It seems that we're not able to parse the revisions from the headers generated by your diff. What's your diff(1), BTW, GNU/HP (diff --version)? -- \/ From owner-freebsd-cvsweb@FreeBSD.ORG Wed Aug 13 01:46:48 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 712FD37B401 for ; Wed, 13 Aug 2003 01:46:48 -0700 (PDT) Received: from jive.SoftHome.net (jive.SoftHome.net [66.54.152.27]) by mx1.FreeBSD.org (Postfix) with SMTP id B019443FBD for ; Wed, 13 Aug 2003 01:46:47 -0700 (PDT) (envelope-from kgangakhedkar@softhome.net) Received: (qmail 2659 invoked by uid 417); 13 Aug 2003 08:46:47 -0000 Received: from slide-.softhome.net (HELO softhome.net) (172.16.2.21) by shunt-smtp-out-0 with SMTP; 13 Aug 2003 08:46:47 -0000 Received: from localhost (localhost [127.0.0.1]) (uid 417) by softhome.net with local; Wed, 13 Aug 2003 02:46:47 -0600 From: kgangakhedkar@softhome.net To: freebsd-cvsweb@freebsd.org Date: Wed, 13 Aug 2003 02:46:47 -0600 Mime-Version: 1.0 Content-Type: text/plain; format=flowed; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Sender: kgangakhedkar@softhome.net X-Originating-IP: [202.88.163.138] Message-ID: X-Mailman-Approved-At: Thu, 14 Aug 2003 01:37:19 -0700 Subject: Some suggestions X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Aug 2003 08:46:48 -0000 Hey guys, You've done a fantastic job in developing this software. But there is one thing missing, I feel... It does not allow you to upload/commit any files into the CVS repositories. How about adding it??? I would have loved to add it myself, but I don't know perl at all... Maybe, if you guys have a PHP version, please mail me where I can get the sources.... I'll check it out... I'm comfortable with PHP.... Thanks, -- Kunal Gangakhedkar ---------------------------- MCA Student @ VJTI kunal@vjtimca.net kgangakhedkar@softhome.net kgangakhedkar@hotpop.com ---------------------------- From owner-freebsd-cvsweb@FreeBSD.ORG Thu Aug 14 16:02:28 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B225637B401 for ; Thu, 14 Aug 2003 16:02:28 -0700 (PDT) Received: from ljcqs053.cnf.com (mailhost2.cnf.com [63.230.177.24]) by mx1.FreeBSD.org (Postfix) with ESMTP id F313643F75 for ; Thu, 14 Aug 2003 16:02:27 -0700 (PDT) (envelope-from Anderson.Robert@menlolog.com) Received: from cnfqs039.cnf.com (localhost [127.0.0.1]) by ljcqs053.cnf.com (Postfix) with ESMTP id 8A209D39 for ; Thu, 14 Aug 2003 15:58:44 -0700 (PDT) Received: by cnfqs039.cnf.prod.cnf.com with Internet Mail Service (5.5.2653.19) id ; Thu, 14 Aug 2003 15:58:44 -0700 Message-ID: <25E622D843625C40BE0EEC150B437C1B27CD7F@cnfqe029.cnf.prod.cnf.com> From: "Anderson, Robert H - MWT" To: "'freebsd-cvsweb@freebsd.org'" Date: Thu, 14 Aug 2003 15:58:40 -0700 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Subject: RE: Version numbers not displayed in diff X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Aug 2003 23:02:29 -0000 I'm running freeBSD-CVSweb 2.0.6. Using gnu diff. Here the ouput from = my apache error log... diff: = '=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D ' diff: 'RCS file: /web/pvcs/webteam_cvsroot/apps/websphere/common/properties/localhost_dev= elop ment/customerrules.properties,v ' diff: 'retrieving revision 1.3 ' diff: 'retrieving revision 1.4 ' diff: 'diff --unified=3D15 -p -r1.3 -r1.4 ' diff: '--- /tmp/T0a07367 2003-08-14 15:55:48.000000000 -0700 ' Use of uninitialized value in concatenation (.) or string at = cvsweb3.cgi line 3012, line 7. Use of uninitialized value in concatenation (.) or string at = cvsweb3.cgi line 3012, line 7. Use of uninitialized value in concatenation (.) or string at = cvsweb3.cgi line 3012, line 7. Use of uninitialized value in concatenation (.) or string at = cvsweb3.cgi line 3019, line 7. Use of uninitialized value in concatenation (.) or string at = cvsweb3.cgi line 3113. Use of uninitialized value in concatenation (.) or string at = cvsweb3.cgi line 3117. Is this the same output you get? Thanks, -Rob Anderson -----Original Message----- From: Ville Skytt=E4 [mailto:scop@freebsd.org]=20 Sent: Wednesday, August 13, 2003 2:14 PM To: 'freebsd-cvsweb@freebsd.org' Subject: Re: Version numbers not displayed in diff On Wed, 2003-08-13 at 20:47, Anderson, Robert H - MWT wrote: > I have freebsd-cvsweb installed on HPUX with perl 5.6.1, cvs 1.11, = rcs=20 > 5.7, apache2. When I get a "Colored" or "Long Colored" diff, the=20 > version numbers that I am diffing do not appear at the top of the=20 > page. Instead, it reads... >=20 > Diff > for /path/to/file/in/cvs/filename > between version and >=20 > In the error log for apache I get the following error... [snip] What version of FreeBSD-CVSweb are you running? 2.0.6? Could you try adding the following line as the first thing inside the = "while (<$fh>)" loop around line 3000 and send me the output generated in the Apache error log: warn("diff: '$_'\n"); It seems that we're not able to parse the revisions from the headers generated by your diff. What's your diff(1), BTW, GNU/HP (diff = --version)? --=20 \/ _______________________________________________ freebsd-cvsweb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-cvsweb To unsubscribe, send any mail to = "freebsd-cvsweb-unsubscribe@freebsd.org" From owner-freebsd-cvsweb@FreeBSD.ORG Thu Aug 14 17:41:11 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id B178D37B401 for ; Thu, 14 Aug 2003 17:41:11 -0700 (PDT) Received: from ljcqs053.cnf.com (mailhost2.cnf.com [63.230.177.24]) by mx1.FreeBSD.org (Postfix) with ESMTP id 19C1843F85 for ; Thu, 14 Aug 2003 17:41:11 -0700 (PDT) (envelope-from Anderson.Robert@menlolog.com) Received: from cnfqs039.cnf.com (localhost [127.0.0.1]) by ljcqs053.cnf.com (Postfix) with ESMTP id 3D60FD84 for ; Thu, 14 Aug 2003 17:40:57 -0700 (PDT) Received: by cnfqs039.cnf.prod.cnf.com with Internet Mail Service (5.5.2653.19) id ; Thu, 14 Aug 2003 17:40:57 -0700 Message-ID: <25E622D843625C40BE0EEC150B437C1B2CCD95@cnfqe029.cnf.prod.cnf.com> From: "Anderson, Robert H - MWT" To: "'freebsd-cvsweb@freebsd.org'" Date: Thu, 14 Aug 2003 17:40:51 -0700 MIME-Version: 1.0 X-Mailer: Internet Mail Service (5.5.2653.19) Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Subject: RE: Version numbers not displayed in diff X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Aug 2003 00:41:12 -0000 I figured it out. It appears that the version of rcsdiff I had was not producing the output that cvsweb was expecting. I have downloaded and compiled rcs tools and the newly compiled version seems to work as = expected. The new and old version of rcs tools are both 5.7, but I am not sure = what options the old version was compiled with. Thanks for your help. -Rob Anderson -----Original Message----- From: Anderson, Robert H - MWT [mailto:Anderson.Robert@menlolog.com]=20 Sent: Thursday, August 14, 2003 3:59 PM To: 'freebsd-cvsweb@freebsd.org' Subject: RE: Version numbers not displayed in diff I'm running freeBSD-CVSweb 2.0.6. Using gnu diff. Here the ouput from = my apache error log... diff: = '=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D ' diff: 'RCS file: /web/pvcs/webteam_cvsroot/apps/websphere/common/properties/localhost_dev= elop ment/customerrules.properties,v ' diff: 'retrieving revision 1.3 ' diff: 'retrieving revision 1.4 ' diff: 'diff --unified=3D15 -p -r1.3 -r1.4 ' diff: '--- /tmp/T0a07367 2003-08-14 15:55:48.000000000 -0700 ' Use of uninitialized value in concatenation (.) or string at = cvsweb3.cgi line 3012, line 7. Use of uninitialized value in concatenation (.) = or string at cvsweb3.cgi line 3012, line 7. Use of uninitialized = value in concatenation (.) or string at cvsweb3.cgi line 3012, line 7. Use = of uninitialized value in concatenation (.) or string at cvsweb3.cgi line = 3019, line 7. Use of uninitialized value in concatenation (.) or string = at cvsweb3.cgi line 3113. Use of uninitialized value in concatenation (.) = or string at cvsweb3.cgi line 3117. Is this the same output you get? Thanks, -Rob Anderson -----Original Message----- From: Ville Skytt=E4 [mailto:scop@freebsd.org]=20 Sent: Wednesday, August 13, 2003 2:14 PM To: 'freebsd-cvsweb@freebsd.org' Subject: Re: Version numbers not displayed in diff On Wed, 2003-08-13 at 20:47, Anderson, Robert H - MWT wrote: > I have freebsd-cvsweb installed on HPUX with perl 5.6.1, cvs 1.11, = rcs > 5.7, apache2. When I get a "Colored" or "Long Colored" diff, the=20 > version numbers that I am diffing do not appear at the top of the=20 > page. Instead, it reads... >=20 > Diff > for /path/to/file/in/cvs/filename > between version and >=20 > In the error log for apache I get the following error... [snip] What version of FreeBSD-CVSweb are you running? 2.0.6? Could you try adding the following line as the first thing inside the = "while (<$fh>)" loop around line 3000 and send me the output generated in the Apache error log: warn("diff: '$_'\n"); It seems that we're not able to parse the revisions from the headers generated by your diff. What's your diff(1), BTW, GNU/HP (diff = --version)? --=20 \/ _______________________________________________ freebsd-cvsweb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-cvsweb To unsubscribe, send any mail to = "freebsd-cvsweb-unsubscribe@freebsd.org" _______________________________________________ freebsd-cvsweb@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-cvsweb To unsubscribe, send any mail to = "freebsd-cvsweb-unsubscribe@freebsd.org" From owner-freebsd-cvsweb@FreeBSD.ORG Fri Aug 15 11:37:37 2003 Return-Path: Delivered-To: freebsd-cvsweb@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4A65F37B401 for ; Fri, 15 Aug 2003 11:37:37 -0700 (PDT) Received: from smtp1.pp.htv.fi (smtp1.pp.htv.fi [212.90.64.111]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9EE9043F85 for ; Fri, 15 Aug 2003 11:37:36 -0700 (PDT) (envelope-from scop@FreeBSD.org) Received: from posti.pp.htv.fi (posti.pp.htv.fi [212.90.64.50]) by smtp1.pp.htv.fi (Postfix) with ESMTP id 544E780083 for ; Fri, 15 Aug 2003 21:37:35 +0300 (EEST) Received: from cs78130147.pp.htv.fi (cs78130147.pp.htv.fi [62.78.130.147]) by posti.pp.htv.fi (8.11.1/8.11.1) with ESMTP id h7FIbY526166 for ; Fri, 15 Aug 2003 21:37:34 +0300 (EETDST) From: Ville =?ISO-8859-1?Q?Skytt=E4?= To: "'freebsd-cvsweb@freebsd.org'" In-Reply-To: <25E622D843625C40BE0EEC150B437C1B2CCD95@cnfqe029.cnf.prod.cnf.com> References: <25E622D843625C40BE0EEC150B437C1B2CCD95@cnfqe029.cnf.prod.cnf.com> Content-Type: text/plain Organization: FreeBSD Message-Id: <1060972653.14512.125.camel@bobcat.mine.nu> Mime-Version: 1.0 X-Mailer: Ximian Evolution 1.4.3 (1.4.3-0.vs.1) Date: 15 Aug 2003 21:37:33 +0300 Content-Transfer-Encoding: 7bit Subject: RE: Version numbers not displayed in diff X-BeenThere: freebsd-cvsweb@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS Web maintenance mailing list [restricted posting] List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Aug 2003 18:37:37 -0000 On Fri, 2003-08-15 at 03:40, Anderson, Robert H - MWT wrote: > I figured it out. It appears that the version of rcsdiff I had was not > producing the output that cvsweb was expecting. I have downloaded and > compiled rcs tools and the newly compiled version seems to work as expected. > The new and old version of rcs tools are both 5.7, but I am not sure what > options the old version was compiled with. Thanks for your help. I'm glad you got it working. And FYI, I committed some changes to the development branch for being slightly more tolerant (graceful failure) and paranoid about the output from rcsdiff. -- \/