From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id aDh+DmbqA2GFbgEAgWs5BA (envelope-from ) for ; Fri, 30 Jul 2021 14:02:46 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id gIEhCmbqA2HARAAAB5/wlQ (envelope-from ) for ; Fri, 30 Jul 2021 12:02:46 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [144.217.243.247]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id DBD37C79C for ; Fri, 30 Jul 2021 14:02:45 +0200 (CEST) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 2DA49291CF; Fri, 30 Jul 2021 08:02:39 -0400 (EDT) Received: from knopi.disroot.org (knopi.disroot.org [178.21.23.139]) by mail.notmuchmail.org (Postfix) with ESMTPS id 0208420088 for ; Tue, 17 Nov 2020 14:41:22 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id B894253451 for ; Tue, 17 Nov 2020 20:41:19 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at disroot.org Received: from knopi.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4pRDBpnb8Z06 for ; Tue, 17 Nov 2020 20:41:16 +0100 (CET) From: Jorge P. de Morais Neto DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1605642076; bh=sm8Os0LlrhWBiBe8ab7dqAhjvTBJZJm2+tel3pGGYko=; h=From:To:Subject:In-Reply-To:References:Date; b=NwsOAo1PTwu1ni8sWDQuo00enCNkfczJC4MD9lblbPS0q19yfoTq7KReL26xLx91N aOlnxax5W7a+dACqxMypI3mE5MlhAA4xPp6x74yoHaT6RHv7FF7xbSnzVw6X2gDCrC TUgsCL3Hw17yKwrwQnRg4r3HjUQq1NqEF3GcJlVdw9vxlCH/wsze2y6TXVei3VY+M0 H2qcXTl8G+awGT8a6vVIENgc7sa/yzSxOd4JWe3QFafAXb2Rtzp17rv9ouCHwDdZF9 Nsh9Vq+wnMCc7xLEetU4zGeUqlBOwAZ0sNMzvw4dj5MUII1apzAAG2N2RDqYknjtXA sLrt2ZpKoV/9Q== To: notmuch@notmuchmail.org Subject: Please disregard---Re: Corrupted database (notmuch 0.31, Emacs 27.1.50, afew 3.0.1, OfflineIMAP, Python) In-Reply-To: <87mtzfpzd3.fsf@disroot.org> References: <87mtzfpzd3.fsf@disroot.org> Mail-Followup-To: notmuch@notmuchmail.org Date: Tue, 17 Nov 2020 16:41:12 -0300 Message-ID: <87eekrpy93.fsf@disroot.org> Mime-Version: 1.0 X-MailFrom: jorge@disroot.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0 Message-ID-Hash: B6UD5KWICQL4XPY3QCNKR7J5XHXKUEDR X-Message-ID-Hash: B6UD5KWICQL4XPY3QCNKR7J5XHXKUEDR X-Mailman-Approved-At: Fri, 30 Jul 2021 12:02:34 -0400 X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1627646566; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post:dkim-signature; bh=x8hxclFTNCzPm1AMgE4xkWU6InqmYWPJN8OBX8ybOe4=; b=Mm2HO7kucdfn/kkmLi/gnk0fsXgtkx59Zfuz00B94vIdV1cz/DMRmIdpCV2Z4lImyXD5EC 4C7yDa+mwOQnqV+BeEb8OmKMntB7SXVHWGH9Glm0Iv+6IZdQgXNzgK2NgRNTgo3PMpunf2 PxOWE+APCCluKUJnEjOLuifMqL4QaTTsjU5MtcOnZKSIlQa6dNRAgwIzxtDZlO0N7r231P YqQoUrGfdlHmVKHqZDQd//Xi6si2QpzCxAIQGseBHykB4/q5yTHNMkCVMoAcS3KeOHkJAF CpyObOKjRwIp/3tSRDIkQ8V3WIsnj2T4B7izrVrh8iYS6EAP9oKc2ZocIpNoCw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1627646566; a=rsa-sha256; cv=none; b=gmdRx058EorW3c8RgG3oKWsQ/x75jnuB24cMsarlpbKc9R/3Fer0yar8gLwxXqTi6y+aJz Mk/Uz5LE13x6qIAcT2qQCtNKywjPWjWhB1kI0l4wigptU6sigAcP98ra9LyHQYrLR4EH7M MvQYuM8LxCnRMn/0KlCwkzeqBFC4XQa6pwv9VvFrFWHXSIR2iAYK72sufVcfANWiNP/hhm AAnY1FWZTSUj/HkoiiN/kYS4P6YIuS4gxgSnAoVlIr4j48cpCEfDeCBrvBHrXR/iZQkCMo eIEjXV7uDdifoxfN5TQgNaZIgw0Aygj2yw9cTRaGZ9uLFK8I5e3D9c+2C5PLqQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=disroot.org header.s=mail header.b=NwsOAo1P; dmarc=fail reason="SPF not aligned (relaxed)" header.from=disroot.org (policy=quarantine); spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 144.217.243.247 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: 6.00 X-Spam: Yes Authentication-Results: aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=disroot.org header.s=mail header.b=NwsOAo1P; dmarc=fail reason="SPF not aligned (relaxed)" header.from=disroot.org (policy=quarantine); spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 144.217.243.247 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: DBD37C79C X-Spam-Score: 6.00 X-Migadu-Spam: Yes X-Migadu-Scanner: scn1.migadu.com X-TUID: vG3XffwZwZXh TW9kZXJhdG9yLCBwbGVhc2UgZGlzcmVnYXJkIHRoZSBlbWFpbCBtZXNzYWdlIGNpdGVkIGJlbG93 IChhbmQgbWVudGlvbmVkDQppbiB0aGUgfkluLVJlcGx5LVRvfiBoZWFkZXIpLiAgSSBzZW50IGl0 IGZyb20gdGhlIHdyb25nICJGcm9tIiBhZGRyZXNzLA0KYW5kIGFmdGVyd2FyZHMgSSBzZW50IGEg Y29weSBmcm9tIHRoZSBjb3JyZWN0ICJGcm9tIiBhZGRyZXNzLiAgU28gcGxlYXNlDQpkZWxldGUg dGhlIGZpcnN0IG1lc3NhZ2UsIHRoZSBvbmUgc2VudCBmcm9tIGEgbm9uLXN1YnNjcmliZWQgYWRk cmVzcy4NCg0KUmVnYXJkcw0KDQpFbSBbMjAyMC0xMS0xNyB0ZXIgMTY6MTc6MTItMDMwMF0sIEpv cmdlIFAuIGRlIE1vcmFpcyBOZXRvIGVzY3JldmV1Og0KDQo+IEhpLiAgSSB1c2UgTm90bXVjaCAw LjMxLjIgb24gRW1hY3MgMjcuMS41MCAobWFudWFsbHkgY29tcGlsZWQgb24NCj4gMjAyMC0xMS0w Mikgd2l0aCBtYXRjaGluZyB2ZXJzaW9uLXBpbm5lZCBNRUxQQSBTdGFibGUgTm90bXVjaCBwYWNr YWdlIG9uDQo+IHVwZGF0ZWQgRGViaWFuIGJ1c3Rlci4gIEkgaGF2ZSBlbmFibGVkIGJ1c3Rlci1w cm9wb3NlZC11cGRhdGVzLA0KPiBidXN0ZXItdXBkYXRlcyBhbmQgYnVzdGVyLWJhY2twb3J0cy4g IEkgbWFudWFsbHkgYmFja3BvcnQgbm90bXVjaA0KPiBhY2NvcmRpbmcgdG8gPGh0dHBzOi8vd2lr aS5kZWJpYW4ub3JnL1NpbXBsZUJhY2twb3J0Q3JlYXRpb24+LiAgSSB1c2UNCj4gT2ZmbGluZUlN QVAgNy4zLjMgKFB5dGhvbiAyIHBpcCksIGFmZXcgMy4wLjEgKHBpcDMpLCBCb2dvZmlsdGVyIDEu Mi40DQo+IChidXN0ZXIpIGFuZCBhIGN1c3RvbSBQeXRob24gMyBzY3JpcHQgYmFzZWQgb24gdGhl IH5ub3RtdWNofiBtb2R1bGUuDQo+DQo+IFllc3RlcmRheSAod2hlbiBzdGlsbCBvbiBOb3RtdWNo IDAuMzEpIEkgbm90aWNlZCB0aGF0LCB3aGVuIEkgdGFnZ2VkIGENCj4gbWVzc2FnZSBvciB0aHJl YWQsIHRoZSBmaWRvLW1vZGUgY29tcGxldGlvbiBvZmZlcmVkIG1hbnkgd2VpcmQgY2FuZGlkYXRl DQo+IHRhZ3MgdGhhdCBzaG91bGRuJ3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlLiAgQWxzbywgb24g dGhlIE5vdG11Y2ggSGVsbG8NCj4gc2NyZWVuIHRoZSB+QWxsIHRhZ3N+IHNlY3Rpb24gd291bGQg ZXJyb3Igb3V0LiAgSSB0aGVuIGR1bXBlZCB0aGUNCj4gZGF0YWJhc2UgKH5ub3RtdWNoIGR1bXB+ KSBhbmQgbm90aWNlZCBtYW55IGxpbmVzIGFzc29jaWF0aW5nIHdlaXJkIHRhZ3MNCj4gdG8gd2Vp cmQgbWVzc2FnZSBpZHMuDQo+DQo+IEluIGFsbW9zdCBldmVyeSBjYXNlLCBib3RoIHRoZSB3ZWly ZCB0YWdzIGFuZCB0aGUgd2VpcmQgTWVzc2FnZS1JZA0KPiBjb250YWluZWQgdW5jb21tb24gY2hh cmFjdGVycywgb2Z0ZW4gQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzLiAgT25lIG9mDQo+IHRoZSB3 ZWlyZCBsaW5lcyB3YXMgIiAtLSBpZDo4Ii0tLXNwZWNpZnlpbmcgYSBtZXNzYWdlIHdpdGggTWVz c2FnZWQtSUQNCj4gIjgiIGFuZCBubyB0YWdzLiAgSSB0cmllZCB+bm90bXVjaCBzaG93IGlkOjh+ IGFuZCBnb3QgYW4gaW50ZXJuYWwNCj4gZXJyb3ItLS1zb21ldGhpbmcgbGlrZSAibWVzc2FnZSB3 aXRoIGRvY3VtZW50IElEIDxTT01FX05VTUJFUj4gaGFzIG5vDQo+IHRocmVhZCBJRCIuDQo+DQo+ IEkgdGhlbiB1cGdyYWRlZCBOb3RtdWNoIHRvIDAuMzEuMiBhbmQgY29tcGFjdGVkIHRoZSBkYXRh YmFzZSBidXQgdGhlDQo+IGVycm9yIHBlcnNpc3RlZC4gIEkgdGhlbiBtYW51YWxseSBjbGVhbmVk IHVwIHRoZSBkYXRhYmFzZSBkdW1wLCBkZWxldGVkDQo+IHRoZSB+L29mZmxpbmVpbWFwL0pvcmdl LURpc3Jvb3QvLm5vdG11Y2gveGFwaWFuLyBkaXJlY3RvcnksIGludm9rZWQNCj4gfm5vdG11Y2gg bmV3fiwgYW5kIH5ub3RtdWNoIHJlc3RvcmV+LiAgSSBjaGVja2VkIG15IGJhY2t1cHMgZnJvbQ0K PiAyMDIwLTExLTA5IChubyBjb3JydXB0aW9uKSBhbmQgMjAxMS0xMS0xNi4gIFRoYXQgbGF0ZXN0 IGJhY2t1cCB3YXMgZnJvbQ0KPiBiZWZvcmUgSSAvbm90aWNlZC8gdGhlIGNvcnJ1cHRpb24sIGJ1 dCBpdCB3YXMgYWZmZWN0ZWQgdG9vLiAgSSB0aGVuDQo+IGRpZmZlZCBiYWNrdXAgMjAyMC0xMS0w OSB3aXRoIGJhY2t1cCAyMDIwLTExLTE2OyBhbmQgdGhlbiBiYWNrdXANCj4gMjAyMC0xMS0xNiB3 aXRoIHRoZSBjdXJyZW50IGR1bXAuICBUaGUgZGlmZnMgc3VnZ2VzdCB0aGF0IHRoZSBlcnJvcg0K PiBpbnZvbHZlZCBvbmx5IHRoZSBhZGRpdGlvbiBvZiBpbnZhbGlkIGluZm9ybWF0aW9uOyBJIHN1 c3BlY3QgYW5kIGhvcGUNCj4gdGhhdCB2YWxpZCBpbmZvcm1hdGlvbiB3YXMgbm90IGxvc3QuDQo+ DQo+IEkgYXR0YWNoZWQgbXkgcG9zdC1uZXcgQmFzaCBzY3JpcHQgYW5kIHRoZSBQeXRob24gMyBz Y3JpcHQgaXQgaW52b2tlcy4NCj4gU28geW91IGNhbiBzZWUgdGhlIHdlaXJkIGxpbmVzIEkgbWVu dGlvbmVkLCBJIGFsc28gYXR0YWNoZWQgdGhlDQo+IHh6LWNvbXByZXNzZWQgb3V0cHV0IG9mIHRo ZSBjb21tYW5kOg0KPg0KPiAgICAgZGlmZiAtdSBub3RtdWNoX2R1bXAtLW1hbnVhbGx5X2ZpeGVk IG5vdG11Y2hfZHVtcC0tY29ycnVwdGVkID4gZGlmZl9ub3RtdWNoX2R1bXBfX21hbnVhbGx5X2Zp eGVkLS1jb3JydXB0ZWQNCj4NCj4gSSBoYXZlIGFsc28gc2F2ZWQgdGhlIGJpbmFyeSBjb3JydXB0 ZWQgZGF0YWJhc2UuICBJZiB5b3Ugd2FudCB0byBzZWUgaXQsDQo+IHRoZW4gdGVsbCBtZSBhbmQg SSBtYXkgdXBsb2FkIGl0IHRvIERpc3Jvb3QncyBMdWZpIGluc3RhbmNlLiAgSXQgc2hvdWxkDQo+ IHByb2JhYmx5IGJlIHNob3duIHRvIGFzIGZldyBwZW9wbGUgYXMgcG9zc2libGUgZm9yIHRoZSBz YWtlIG9mIG15DQo+IHByaXZhY3kuDQo+DQo+IEZpbmFsbHksIG15IG5vdG11Y2ggY29uZmlnIGlu Y2x1ZGVzIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlcyAodGhlIG90aGVyDQo+IGRpcmVjdGl2ZXMg YXJlIHByb2JhYmx5IGlycmVsZXZhbnQgdG8geW91KToNCj4NCj4gICAgIFtuZXddDQo+ICAgICB0 YWdzPW5ldw0KPiAgICAgaWdub3JlPQ0KPg0KPiAgICAgW3NlYXJjaF0NCj4gICAgIGV4Y2x1ZGVf dGFncz1kZWxldGVkO3NwYW07dHJhc2gNCj4NCj4gICAgIFttYWlsZGlyXQ0KPiAgICAgc3luY2hy b25pemVfZmxhZ3M9dHJ1ZQ0KPg0KPiBSZWdhcmRzDQo+DQo+ICMhL3Vzci9iaW4vZW52IHB5dGhv bjMNCj4gIiIiTWFpbCBmaWx0ZXIgKGluY2x1ZGluZyBhbnRpLXNwYW0pIGFuZCBub3RpZmllciBm b3IgTm90bXVjaC4NCj4NCj4gVHJhY2sgbWVzc2FnZXMgY2xhc3NpZmllZCBhcyBzcGFtIChvciBo YW0pIGJ5IEJvZ29maWx0ZXIgdmlhICcuYmZfc3BhbScNCj4gKHJlc3AuICcuYmZfaGFtJyApIHRh Z3MuICBTaW5jZSBhZmV3IHJlbW92ZXMgdGhlIGBuZXcnIHRhZywgd2hlbg0KPiBub3RpZnlpbmcg bWFpbCB3ZSB0cmFjayBuZXcgbWVzc2FnZXMgd2l0aCBhIHRlbXBvcmFyeSB0YWcgKG9wdGlvbg0K PiAnLS10bXAnIG9mIGBmaWx0ZXInIHN1YmNvbW1hbmQpIHdoaWNoIHdlIGFzc3VtZSBub3QgdG8g cHJlZXhpc3QgaW4gdGhlDQo+IGRhdGFiYXNlLiAgVGhlc2UgdGFncyBhbmQgdGhhdCBhZGRlZCBi eSB0aGUgdXNlciB0byBzcGFtIG1lc3NhZ2VzIGNhbiBiZQ0KPiBjdXN0b21pemVkIHZpYSBjb21t YW5kLWxpbmUgb3B0aW9ucyBvciwgZnJvbSBQeXRob24sIGJ5IG1vZGlmeWluZw0KPiBtb2R1bGUt bGV2ZWwgY29uc3RhbnRzIG9yIGJ5IHZpYSBmdW5jdGlvbiBhcmd1bWVudHMuDQo+DQo+IFRoaXMg c2NyaXB0IGlzIHBvdGVudGlhbGx5IGFmZmVjdGVkIGJ5IGVudmlyb25tZW50IHZhcmlhYmxlcywg ZmlsZXMgYW5kDQo+IGRpcmVjdG9yaWVzIHRoYXQgYWZmZWN0IGFmZXcsIEJvZ29maWx0ZXIsIE5v dG11Y2ggb3IgKG9idmlvdXNseSkNCj4gUHl0aG9uMywgaW5jbHVkaW5nOg0KPiAxLiBgTk9UTVVD SF9DT05GSUcnIOKAkyBsb2NhdGlvbiBvZiBOb3RtdWNoIGNvbmZpZ3VyYXRpb24gZmlsZSDigJMg YW5kIHRoYXQNCj4gICAgZmlsZSBpdHNlbGYuDQo+IDIuIGBCT0dPRklMVEVSX0RJUicg4oCTIGxv Y2F0aW9uIG9mIEJvZ29maWx0ZXIncyBkYXRhYmFzZSBkaXJlY3Rvcnkg4oCTIGFuZA0KPiAgICB0 aGF0IGRpcmVjdG9yeSBpdHNlbGYuDQo+IDMuIGFmZXcgY29uZmlndXJhdGlvbi4NCj4NCj4gV0lT SDogQWNjZXB0IGN1c3RvbWl6YWJsZSAibmV3IiBmbGFncyAoY3VycmVudGx5IHdlIGFzc3VtZSAi bmV3IikuDQo+ICIiIg0KPiAjIFdJU0g6IEZpbmlzaCBkb2N1bWVudGluZyB0aGUgZXhjZXB0aW9u cyBwb3NzaWJseSByYWlzZWQgYnkgZWFjaCBmdW5jdGlvbg0KPiBpbXBvcnQgbG9nZ2luZw0KPiBp bXBvcnQgc3lzDQo+IGltcG9ydCB0aW1lDQo+IGZyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50 RGVmYXVsdHNIZWxwRm9ybWF0dGVyLCBBcmd1bWVudFBhcnNlciwgTmFtZXNwYWNlDQo+IGZyb20g ZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsDQo+IGZyb20gbG9nZ2luZyBpbXBvcnQgaGFuZGxlcnMN Cj4gZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQSVBFLCBTVERPVVQsIFBvcGVuLCBydW4NCj4gZnJv bSB0eXBpbmcgaW1wb3J0IEFueSwgQ2FsbGFibGUsIEl0ZXJhYmxlLCBPcHRpb25hbCwgVHVwbGUs IFVuaW9uDQo+DQo+IGZyb20gbm90bXVjaCBpbXBvcnQgRGF0YWJhc2UsIE1lc3NhZ2UNCj4NCj4g IyBodHRwczovL3dpa2kuYXJjaGxpbnV4Lm9yZy9pbmRleC5waHAvRGVza3RvcF9ub3RpZmljYXRp b25zI1B5dGhvbg0KPiBpbXBvcnQgZ2kgICAgICAgICAgICAgICAgICAgICAgICMgaXNvcnQ6c2tp cA0KPiBnaS5yZXF1aXJlX3ZlcnNpb24oJ05vdGlmeScsICcwLjcnKQ0KPiAjIHB5bGludDogZGlz YWJsZT13cm9uZy1pbXBvcnQtcG9zaXRpb24NCj4gZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBO b3RpZnkgICMgbm9xYTogRTQwMiBpc29ydDpza2lwDQo+DQo+IFRhZ3MgPSBVbmlvbltzdHIsIEl0 ZXJhYmxlW3N0cl1dDQo+DQo+IExPRyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQ0KPiBG SUxURVJfQUNUSU9OUyA9IHsnc3BhbScsICdnZW5lcmFsJywgJ25vdGlmeSd9DQo+DQo+ICMgRGVm YXVsdHMgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zDQo+IEJGX0hBTSA9ICcuYmZfaGFtJw0KPiBC Rl9TUEFNID0gJy5iZl9zcGFtJw0KPiBVU0VSX1NQQU0gPSAnc3BhbScNCj4gVE1QID0gJ19zaW1w bGVtdWNoX3RtcCcNCj4NCj4NCj4gY2xhc3MgU2ltcGxlbXVjaEVycm9yKEV4Y2VwdGlvbik6DQo+ ICAgICAiIiJCYXNlIGNsYXNzIGZvciBzaW1wbGVtdWNoIGV4Y2VwdGlvbiBjbGFzc2VzIiIiDQo+ DQo+DQo+IGNsYXNzIE5vdG11Y2hEYXRhYmFzZU5lZWRzVXBncmFkZUVycm9yKFNpbXBsZW11Y2hF cnJvcik6DQo+ICAgICAiIiJuZWVkc191cGdyYWRlKCkgcmV0dXJuZWQgVHJ1ZS4iIiINCj4NCj4N Cj4gIyBXSVNIIENhcHR1cmUgbW9yZSBpbmZvcm1hdGlvbiwgZS5nLiByZXR1cm4gY29kZSBhbmQg Y29tbWFuZCBsaW5lDQo+IGNsYXNzIEJvZ29maWx0ZXJFcnJvcihTaW1wbGVtdWNoRXJyb3IpOg0K PiAgICAgIiIiRXJyb3IgZnJvbSBCb2dvZmlsdGVyIiIiDQo+DQo+DQo+ICMgZGVmIHRlc3RlX215 cHkoaTogaW50KSAtPiBOb25lOg0KPiAjICAgICByZXR1cm4gaSArICcnDQo+DQo+IGRlZiBhbGVy dChzdW1tYXJ5OiBzdHIsDQo+ICAgICAgICAgICBib2R5OiBzdHIsDQo+ICAgICAgICAgICAqYXJn czogQW55LA0KPiAgICAgICAgICAgZnVuOiBDYWxsYWJsZVsuLi4sIE5vbmVdID0gTE9HLndhcm5p bmcpIC0+IE5vbmU6DQo+ICAgICAiIiJTaG93IGRlc2t0b3Agbm90aWZpY2F0aW9uIC0tIGBzdW1t YXJ5JywgYGJvZHknIC0tIGFuZCBsb2cuDQo+DQo+ICAgICBMb2dzIHdpdGggZnVuKGJvZHksICph cmdzKS4NCj4gICAgICIiIg0KPiAgICAgaWYgZnVuIGluIChMT0cuZXhjZXB0aW9uLCBMT0cuZXJy b3IpOg0KPiAgICAgICAgIGt3YXJncyA9IHsnaWNvbic6ICdkaWFsb2ctZXJyb3InfQ0KPiAgICAg ZWxpZiBmdW4gaW4gKExPRy53YXJuLCBMT0cud2FybmluZyk6DQo+ICAgICAgICAga3dhcmdzID0g eydpY29uJzogJ2RpYWxvZy13YXJuaW5nJ30NCj4gICAgIGVsc2U6DQo+ICAgICAgICAga3dhcmdz ID0ge30NCj4gICAgIE5vdGlmeS5Ob3RpZmljYXRpb24ubmV3KHN1bW1hcnksIGJvZHkgJSBhcmdz LCAqKmt3YXJncykuc2hvdygpDQo+ICAgICBmdW4oYm9keSwgKmFyZ3MpDQo+DQo+DQo+IGRlZiBz YWZlX29wZW5fZGJfcncoKSAtPiBEYXRhYmFzZToNCj4gICAgICIiIk9wZW4gTm90bXVjaCBkYXRh YmFzZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBhbmQgcmV0dXJuIGl0Lg0KPg0KPiAgICAgQmVm b3JlIHJldHVybmluZywgY2hlY2sgaWYgdGhlIGRhdGFiYXNlIG5lZWRzIHVwZ3JhZGU7IGlmIHNv LCByYWlzZQ0KPiAgICAgTm90bXVjaERhdGFiYXNlTmVlZHNVcGdyYWRlRXJyb3IuDQo+ICAgICAi IiINCj4gICAgIG5tX2RiID0gRGF0YWJhc2UobW9kZT1EYXRhYmFzZS5NT0RFLlJFQURfV1JJVEUp DQo+ICAgICBpZiBubV9kYi5uZWVkc191cGdyYWRlKCk6DQo+ICAgICAgICAgcmFpc2UgTm90bXVj aERhdGFiYXNlTmVlZHNVcGdyYWRlRXJyb3IoDQo+ICAgICAgICAgICAgICdOb3RtdWNoIGRhdGFi YXNlIG5lZWRzIHVwZ3JhZGUuICBFeGl0aW5nIHdpdGhvdXQgYWN0aW9uLlxuJw0KPiAgICAgICAg ICAgICAnV0lTSCBJbXBsZW1lbnQgY29ycmVjdCBkYXRhYmFzZSB1cGdyYWRpbmcnKQ0KPiAgICAg cmV0dXJuIG5tX2RiDQo+DQo+DQo+IGRlZiB1cGRhdGUobm1fZGI6IERhdGFiYXNlLCBhcmdzOiBO YW1lc3BhY2UsIHF1ZXJ5OiBzdHIsDQo+ICAgICAgICAgICAgb3ByOiBzdHIpIC0+IFR1cGxlW2lu dCwgZmxvYXRdOg0KPiAgICAgIiIiQ2FsbCBib2dvZmlsdGVyIG9uIG1lc3NhZ2VzIG1hdGNoaW5n IGBxdWVyeScsIGNoYW5nZSB0aGVpciB0YWdzLg0KPg0KPiAgICAgQ2FsbCBgYm9nb2ZpbHRlcicg d2l0aCBjb21tYW5kLWxpbmUgb3B0aW9uIGBvcHInIChwbHVzIC1ibCkgYW5kIGZlZWQNCj4gICAg IGl0ICh2aWEgc3RkaW4pIHRoZSBmaWxlbmFtZXMgb2YgbWVzc2FnZXMgbWF0Y2hpbmcgTm90bXVj aCBxdWVyeQ0KPiAgICAgYHF1ZXJ5Jy4gIEZvciBlYWNoIHN1Y2ggbWVzc2FnZSwgYXBwbHkgdGhl IGNvcnJlc3BvbmRpbmcgdGFnIGNoYW5nZQ0KPiAgICAgKGFjY29yZGluZyB0byBgYXJncy5iZl9z cGFtJyBhbmQgYGFyZ3MuYmZfaGFtJykuICBgb3ByJyBtdXN0IGJlIGluDQo+ICAgICBzZXQoJ1Nz Tm4nKSAoc2VlIGJvZ29maWx0ZXIoMSkgZm9yIHRoZSBtZWFuaW5nKS4gIFJldHVybiB0aGUgbnVt YmVyDQo+ICAgICBvZiBtZXNzYWdlcyBvcGVyYXRlZCBvbiBhbmQgdGhlIGVsYXBzZWQgdGltZS4N Cj4NCj4gICAgIFRoaXMgZnVuY3Rpb24gaXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQgYnkgZW52aXJv bm1lbnQgdmFyaWFibGVzLA0KPiAgICAgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgYWZmZWN0 IEJvZ29maWx0ZXIgb3IgTm90bXVjaC4NCj4NCj4gICAgIFRPRE8gSGFuZGxlIGJvZ29maWx0ZXIg ZXJyb3JzDQo+ICAgICAiIiINCj4gICAgIHN0YXJ0ID0gdGltZS50aW1lKCkNCj4gICAgIGFzc2Vy dCBvcHIgaW4gc2V0KCdTc05uJykNCj4gICAgIHRhZ18gPSBhcmdzLmJmX3NwYW0gaWYgb3ByIGlu ICdzUycgZWxzZSBhcmdzLmJmX2hhbQ0KPiAgICAgaWYgb3ByIGluICdzbic6DQo+ICAgICAgICAg ZGVmIHRhZyhtc2c6IE1lc3NhZ2UpIC0+IE5vbmU6DQo+ICAgICAgICAgICAgIG1zZy5hZGRfdGFn KHRhZ18pDQo+ICAgICBlbHNlOg0KPiAgICAgICAgIGRlZiB0YWcobXNnOiBNZXNzYWdlKSAtPiBO b25lOg0KPiAgICAgICAgICAgICBtc2cucmVtb3ZlX3RhZyh0YWdfKQ0KPiAgICAgbnVtID0gMA0K PiAgICAgd2l0aCBQb3BlbigoJ2JvZ29maWx0ZXInLCAnLWJsJyArIG9wciksIHN0ZGluPVBJUEUs IHRleHQ9VHJ1ZSwNCj4gICAgICAgICAgICAgICAgYnVmc2l6ZT0xKSBhcyBib2dvOg0KPiAgICAg ICAgIGFzc2VydCBib2dvLnN0ZGluICAgICAgICMgUGxhY2F0ZSBteXB5DQo+ICAgICAgICAgZm9y IG1zZyBpbiBubV9kYi5jcmVhdGVfcXVlcnkocXVlcnkpLnNlYXJjaF9tZXNzYWdlcygpOg0KPiAg ICAgICAgICAgICBib2dvLnN0ZGluLndyaXRlKG1zZy5nZXRfZmlsZW5hbWUoKSArICdcbicpDQo+ ICAgICAgICAgICAgIHRhZyhtc2cpDQo+ICAgICAgICAgICAgIG51bSArPSAxDQo+ICAgICBpZiBi b2dvLnJldHVybmNvZGU6DQo+ICAgICAgICAgcmFpc2UgQm9nb2ZpbHRlckVycm9yKGYnQm9nb2Zp bHRlciByZXR1cm5lZCB7Ym9nby5yZXR1cm5jb2RlfScpDQo+ICAgICByZXR1cm4gbnVtLCB0aW1l LnRpbWUoKSAtIHN0YXJ0DQo+DQo+DQo+IGRlZiB0cmFpbihhcmdzOiBOYW1lc3BhY2UpIC0+IE5v bmU6DQo+ICAgICAiIiJUcmFpbiBCb2dvZmlsdGVyIG9uIHRoZSBOb3RtdWNoIGRhdGFiYXNlLg0K Pg0KPiAgICAgQWNjb3JkaW5nIHRvIGhvdyB0aGUgdXNlciBjbGFzc2lmaWVkIHRoZSBnaXZlbiBt ZXNzYWdlIChzcGFtIG9yDQo+ICAgICBoYW0pLCB1cGRhdGUgU2ltcGxlbXVjaCB0YWdzIChgYXJn cy5iZl9zcGFtJyBhbmQgYGFyZ3MuYmZfaGFtJykgYW5kDQo+ICAgICBCb2dvZmlsdGVyJ3MgZGF0 YWJhc2UuICBXZSBhc3N1bWUgdGhlIHVzZXIgY2xhc3NpZmllZCBhIG1lc3NhZ2UgYXMNCj4gICAg IHNwYW0gaWYgaXQgaXMgdGFnZ2VkIGBhcmdzLnVzZXJfc3BhbSc7IGFuZCBoZSBjbGFzc2lmaWVk IGl0IGFzIGhhbQ0KPiAgICAgaWYgaXQgaGFzIGJlZW4gcmVhZCBidXQgbm90IHRhZ2dlZCBgYXJn cy51c2VyX3NwYW0nLg0KPg0KPiAgICAgVGhlcmVmb3JlIHdlIGFzc3VtZSB0aGF0Og0KPiAgICAg MS4gIE1lc3NhZ2VzIHRhZ2dlZCBgYXJncy51c2VyX3NwYW0nIGFyZSBpbiBmYWN0IHNwYW0uDQo+ ICAgICAyLiAgU3BhbW15IHJlYWQgbWVzc2FnZXMgYXJlIHRhZ2dlZCBgYXJncy51c2VyX3NwYW0n Lg0KPiAgICAgMy4gIE1lc3NhZ2VzIHRhZ2dlZCBgYXJncy5iZl9zcGFtJyBhcmUgYWxzbyB0YWdn ZWQgYGFyZ3MudXNlcl9zcGFtJywNCj4gICAgICAgICB1bmxlc3MgdGhleSBhcmUgZmFsc2UgcG9z aXRpdmVzLg0KPg0KPiAgICAgQSBwcm9ibGVtYXRpYyBzY2VuYXJpbyBpcyB3aGVuIHRoZSB1c2Vy IHJlYWRzIHNwYW0gaW4gd2VibWFpbCBidXQNCj4gICAgIGZvcmdldHMgdG8gdGFnIGl0IGFzIHNw YW0gaW4gTm90bXVjaC4NCj4NCj4gICAgIFRoaXMgZnVuY3Rpb24gaXMgcG90ZW50aWFsbHkgYWZm ZWN0ZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGVzLA0KPiAgICAgZmlsZXMgYW5kIGRpcmVjdG9y aWVzIHRoYXQgYWZmZWN0IEJvZ29maWx0ZXIgb3IgTm90bXVjaC4NCj4gICAgICIiIg0KPiAgICAg d2l0aCBzYWZlX29wZW5fZGJfcncoKSBhcyBubV9kYjoNCj4gICAgICAgICBkZWYgdHJhaW5fKHF1 ZXJ5OiBzdHIsIG9wcjogc3RyLCBvYmo6IHN0cikgLT4gTm9uZToNCj4gICAgICAgICAgICAgYXNz ZXJ0IG9wciBpbiBzZXQoJ1NzTm4nKQ0KPiAgICAgICAgICAgICBvcHJfID0gJ1JlZ2lzdGVyJyBp ZiBvcHIgaW4gJ3NuJyBlbHNlICdVbnJlZ2lzdGVyJw0KPiAgICAgICAgICAgICBlbmQgPSBmJ3tv cHJffWVkICVkIHtvYmp9IGluICUuM2dzJw0KPiAgICAgICAgICAgICBMT0cuaW5mbygnJXMgJXMn LCBvcHJfLCBvYmopDQo+ICAgICAgICAgICAgIG51bSwgZHVyID0gdXBkYXRlKG5tX2RiLCBhcmdz LCBxdWVyeSwgb3ByKQ0KPiAgICAgICAgICAgICBMT0cuaW5mbyhlbmQsIG51bSwgZHVyKQ0KPg0K PiAgICAgICAgIGJmX3NwYW0sIGJmX2hhbSwgdXNlcl9zcGFtID0gYXJncy5iZl9zcGFtLCBhcmdz LmJmX2hhbSwgYXJncy51c2VyX3NwYW0NCj4gICAgICAgICB0cmFpbl8oZidpczp7dXNlcl9zcGFt fSBOT1QgaXM6e2JmX3NwYW19JywgJ3MnLCAnc3BhbScpDQo+ICAgICAgICAgdHJhaW5fKGYnaXM6 e2JmX3NwYW19IE5PVCBpczp7dXNlcl9zcGFtfScsICdTJywgJyhmYWxzZSkgc3BhbScpDQo+ICAg ICAgICAgdHJhaW5fKGYnTk9UIChpczp7dXNlcl9zcGFtfSBpczp1bnJlYWQgaXM6e2JmX2hhbX0p JywgJ24nLCAnaGFtJykNCj4gICAgICAgICB0cmFpbl8oZidpczp7dXNlcl9zcGFtfSBBTkQgaXM6 e2JmX2hhbX0nLCAnTicsICcoZmFsc2UpIGhhbScpDQo+DQo+DQo+IGRlZiBjb3VudChubV9kYjog RGF0YWJhc2UsIHF1ZXJ5OiBzdHIsIGV4Y2x1ZGU6IFRhZ3MgPSAoKSkgLT4gaW50Og0KPiAgICAg IiIiUmV0dXJuIFhhcGlhbuKAmXMgYmVzdCBndWVzcyBhcyB0byBob3cgbWFueSBtZXNzYWdlcyBt YXRjaCBgcXVlcnknLg0KPg0KPiAgICAgYGV4Y2x1ZGUnLCBpZiBwcm92aWRlZCwgbXVzdCBjb250 YWluIHRhZ3MgdG8gZXhjbHVkZSBmcm9tIHRoZSBjb3VudA0KPiAgICAgYnkgZGVmYXVsdC4gIEEg Z2l2ZW4gdGFnIHdpbGwgbm90IGJlIGV4Y2x1ZGVkIGlmIGl0IGFwcGVhcnMNCj4gICAgIGV4cGxp Y2l0bHkgaW4gYHF1ZXJ5Jy4NCj4NCj4gICAgIE1heSByYWlzZToNCj4gICAgIC0gYE51bGxQb2lu dGVyRXJyb3InIGlmIHRoZSBxdWVyeSBjcmVhdGlvbiBmYWlsZWQgKGUuZy4gdG9vIGxpdHRsZQ0K PiAgICAgICBtZW1vcnkpLg0KPiAgICAgLSBgTm90SW5pdGlhbGl6ZWRFcnJvcicgaWYgdGhlIHVu ZGVybHlpbmcgZGIgd2FzIG5vdCBpbml0aWFsaXplZC4NCj4NCj4gICAgIFRoaXMgZnVuY3Rpb24g aXMgcG90ZW50aWFsbHkgYWZmZWN0ZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGVzLA0KPiAgICAg ZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgYWZmZWN0IE5vdG11Y2guDQo+DQo+ICAgICBXSVNI IEZpbmQgb3V0IGFuZCBkb2N1bWVudCB3aGF0ICJiZXN0IGd1ZXNzIiBtZWFuczsgdGhpcyB3b3Jk aW5nIGlzDQo+ICAgICBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIG9mIG5vdG11Y2ggUHl0aG9uIGJp bmRpbmdzLg0KPiAgICAgIiIiDQo+ICAgICBxdWVyeV8gPSBubV9kYi5jcmVhdGVfcXVlcnkocXVl cnkpDQo+ICAgICBpZiBpc2luc3RhbmNlKGV4Y2x1ZGUsIHN0cik6DQo+ICAgICAgICAgcXVlcnlf LmV4Y2x1ZGVfdGFnKGV4Y2x1ZGUpDQo+ICAgICBlbHNlOg0KPiAgICAgICAgIGZvciB0YWcgaW4g ZXhjbHVkZToNCj4gICAgICAgICAgICAgcXVlcnlfLmV4Y2x1ZGVfdGFnKHRhZykNCj4gICAgIHJl dHVybiBxdWVyeV8uY291bnRfbWVzc2FnZXMoKQ0KPg0KPg0KPiBkZWYgZmlsdGVyX3NwYW0obm1f ZGI6IERhdGFiYXNlLCBxdWVyeTogc3RyLCBoYW06IE9wdGlvbmFsW3N0cl0gPSBOb25lLA0KPiAg ICAgICAgICAgICAgICAgc3BhbTogT3B0aW9uYWxbc3RyXSA9IE5vbmUpIC0+IE5vbmU6DQo+ICAg ICAiIiJGaWx0ZXIgKEJvZ29maWx0ZXIpIHRoZSBtZXNzYWdlcyBtYXRjaGluZyBOb3RtdWNoIHF1 ZXJ5IGBxdWVyeScuDQo+DQo+ICAgICBJZiBCb2dvZmlsdGVyIGNsYXNzaWZpZXMgYSBnaXZlbiBt ZXNzYWdlIGFzIFNwYW0vSGFtIHRoZW4gdGFnIGl0DQo+ICAgICBgc3BhbScvYGhhbScgKGRlZmF1 bHRpbmcgdG8gYEJGX1NQQU0nL2BCRl9IQU0nKS4NCj4NCj4gICAgIFRoaXMgZnVuY3Rpb24gaXMg cG90ZW50aWFsbHkgYWZmZWN0ZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGVzLA0KPiAgICAgZmls ZXMgYW5kIGRpcmVjdG9yaWVzIHRoYXQgYWZmZWN0IEJvZ29maWx0ZXIgb3IgTm90bXVjaC4NCj4g ICAgICIiIg0KPiAgICAgdGFnID0gZGljdChIPWhhbSBvciBCRl9IQU0sIFM9c3BhbSBvciBCRl9T UEFNKQ0KPiAgICAgd2l0aCBQb3BlbigoJ2JvZ29maWx0ZXInLCAnLWJsVCcpLCBzdGRpbj1QSVBF LCBzdGRvdXQ9UElQRSwgdGV4dD1UcnVlLA0KPiAgICAgICAgICAgICAgICBidWZzaXplPTEpIGFz IGJvZ286DQo+ICAgICAgICAgYXNzZXJ0IGJvZ28uc3RkaW4gYW5kIGJvZ28uc3Rkb3V0ICAjIFBs YWNhdGUgbXlweQ0KPiAgICAgICAgIGZvciBtc2cgaW4gbm1fZGIuY3JlYXRlX3F1ZXJ5KHF1ZXJ5 KS5zZWFyY2hfbWVzc2FnZXMoKToNCj4gICAgICAgICAgICAgYm9nby5zdGRpbi53cml0ZShtc2cu Z2V0X2ZpbGVuYW1lKCkgKyAnXG4nKQ0KPiAgICAgICAgICAgICBjb2RlID0gYm9nby5zdGRvdXQu cmVhZGxpbmUoKS5zcGxpdCgpWy0yXQ0KPiAgICAgICAgICAgICBpZiBjb2RlICE9ICdVJzoNCj4g ICAgICAgICAgICAgICAgIG1zZy5hZGRfdGFnKHRhZ1tjb2RlXSkNCj4gICAgICAgICAgICAgICAg IG1zZ19pZCA9IG1zZy5nZXRfbWVzc2FnZV9pZCgpDQo+ICAgICAgICAgICAgICAgICBMT0cuZGVi dWcoJ01lc3NhZ2UgJXMgbWFya2VkICVzJywgbXNnX2lkLCB0YWdbY29kZV0pDQo+DQo+DQo+IGRl ZiB0YWdfc2VhcmNoKG5tX2RiOiBEYXRhYmFzZSwgcXVlcnk6IHN0ciwgYWRkOiBUYWdzID0gKCks DQo+ICAgICAgICAgICAgICAgIHJlbW92ZTogVGFncyA9ICgpKSAtPiBOb25lOg0KPiAgICAgIiIi QWRkL3JlbW92ZSB0YWdzIGZyb20gbWVzc2FnZXMgbWF0Y2hpbmcgTm90bXVjaCBgcXVlcnknLg0K Pg0KPiAgICAgYG5tX2RiJyBtdXN0IGJlIG9wZW4gZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuICBg cXVlcnknIHNob3VsZCBiZSBhDQo+ICAgICBOb3RtdWNoIHF1ZXJ5IG9uIHdob3NlIHJlc3VsdHMg d2Ugc2hvdWxkIGFjdC4gIE9wZXJhdGUgYXRvbWljYWxseSBvbg0KPiAgICAgdGhlIHNldCBvZiBt ZXNzYWdlcyBtYXRjaGluZyBgcXVlcnknLg0KPg0KPiAgICAgTWF5IHJhaXNlOg0KPiAgICAgLSBg WGFwaWFuRXJyb3InIOKAkyBzZWUgZG9jdW1lbnRhdGlvbiBvZiBgYmVnaW5fYXRvbWljKCknIGFu ZA0KPiAgICAgICBgZW5kX2F0b21pYygpJyBtZXRob2RzIG9mIGBEYXRhYmFzZScNCj4gICAgIC0g YE51bGxQb2ludGVyRXJyb3InIGlmIG5vdG11Y2ggcXVlcnkgY3JlYXRpb24gZmFpbGVkIChlLmcu IHRvbw0KPiAgICAgICBsaXR0bGUgbWVtb3J5KSBvciBgc2VhcmNoX21lc3NhZ2VzKCknIGZhaWxl ZA0KPiAgICAgLSBgTm90SW5pdGlhbGl6ZWRFcnJvcicgaWYgdGhlIHVuZGVybHlpbmcgZGIgd2Fz IG5vdCBpbml0aWFsaXplZA0KPiAgICAgLSBgTnVsbFBvaW50ZXJFcnJvcicgaWYgYSBnaXZlbiB0 YWcgaXMgTlVMTA0KPiAgICAgLSBgVGFnVG9vTG9uZ0Vycm9yJyBpZiB0aGUgbGVuZ3RoIG9mIGEg Z2l2ZW4gdGFnIGV4Y2VlZHMNCj4gICAgICAgbm90bXVjaC5NZXNzYWdlLk5PVE1VQ0hfVEFHX01B WCkNCj4gICAgIC0gYFJlYWRPbmx5RGF0YWJhc2VFcnJvcicgaWYgdGhlIGRhdGFiYXNlIHdhcyBv cGVuZWQgaW4gcmVhZC1vbmx5DQo+ICAgICAgIG1vZGUNCj4gICAgIC0gYE5vdEluaXRpYWxpemVk RXJyb3InIGlmIG1lc3NhZ2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkDQo+DQo+ICAgICBUaGlz IGZ1bmN0aW9uIGlzIHBvdGVudGlhbGx5IGFmZmVjdGVkIGJ5IGVudmlyb25tZW50IHZhcmlhYmxl cywNCj4gICAgIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IGFmZmVjdCBOb3RtdWNoLg0KPiAg ICAgIiIiDQo+ICAgICBubV9kYi5iZWdpbl9hdG9taWMoKQ0KPiAgICAgZm9yIG1zZyBpbiBubV9k Yi5jcmVhdGVfcXVlcnkocXVlcnkpLnNlYXJjaF9tZXNzYWdlcygpOg0KPiAgICAgICAgIGlmIGlz aW5zdGFuY2UoYWRkLCBzdHIpOg0KPiAgICAgICAgICAgICBtc2cuYWRkX3RhZyhhZGQpDQo+ICAg ICAgICAgZWxzZToNCj4gICAgICAgICAgICAgZm9yIHRhZyBpbiBhZGQ6DQo+ICAgICAgICAgICAg ICAgICBtc2cuYWRkX3RhZyh0YWcpDQo+ICAgICAgICAgaWYgaXNpbnN0YW5jZShyZW1vdmUsIHN0 cik6DQo+ICAgICAgICAgICAgIG1zZy5yZW1vdmVfdGFnKHJlbW92ZSkNCj4gICAgICAgICBlbHNl Og0KPiAgICAgICAgICAgICBmb3IgdGFnIGluIHJlbW92ZToNCj4gICAgICAgICAgICAgICAgIG1z Zy5yZW1vdmVfdGFnKHRhZykNCj4gICAgIG5tX2RiLmVuZF9hdG9taWMoKQ0KPg0KPg0KPiBkZWYg ZmlsdGVyX25vdGlmeShhcmdzOiBOYW1lc3BhY2UpIC0+IE5vbmU6DQo+ICAgICAiIiJGaWx0ZXIg bWFpbCAoYWZldywgQm9nb2ZpbHRlciBhbmQgTm90bXVjaCkgYW5kIG5vdGlmeS4NCj4NCj4gICAg IC0gYGFyZ3MucmVxJyBtdXN0IGJlIGEgY29udGFpbmVyIHdpdGggZWxlbWVudHMgb2YgRklMVEVS X0FDVElPTlMgd2UNCj4gICAgICAgc2hvdWxkIGFjdCBvbiAocmVxdWVzdGVkIGFjdGlvbnMpLg0K PiAgICAgLSBJZiBcImFyZ3MucmVxWydzcGFtJ11cIiBpcyBUcnVlIHRoZW4gYGFyZ3MucXVlcnkn IG11c3QgYmUgYSBzdHJpbmcNCj4gICAgICAgcmVwcmVzZW50aW5nIGEgTm90bXVjaCBxdWVyeSAo b24gd2hvc2UgcmVzdWx0cyB0aGUgc3BhbSBmaWx0ZXINCj4gICAgICAgd2lsbCB3b3JrKSBhbmQg YGFyZ3MuYmZfaGFtJywgYGFyZ3MuYmZfc3BhbScgbXVzdCBiZSB0aGUgdGFncyB0bw0KPiAgICAg ICBhZGQgdG8gbWVzc2FnZXMgdGhhdCBCb2dvZmlsdGVyIGNsYXNzaWZpZXMgYXMgaGFtIChyZXNw LiBzcGFtKS4NCj4gICAgIC0gSWYgYGFyZ3MucmVxJyBpbmNsdWRlcyAnbm90aWZ5Jywgd2UgaW50 ZXJuYWxseSB1c2UgYSB0ZW1wb3JhcnkgdGFnDQo+ICAgICAgIOKAkyBhcmdzLnRtcCDigJMgdGhh dCB3ZSBhc3N1bWUgbm90IHRvIHByZWV4aXN0IGluIHRoZSBOb3RtdWNoIGRhdGFiYXNlLg0KPg0K PiAgICAgVGhpcyBmdW5jdGlvbiBpcyBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSBlbnZpcm9ubWVu dCB2YXJpYWJsZXMsDQo+ICAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBhZmZlY3QgYWZl dywgQm9nb2ZpbHRlciBvciBOb3RtdWNoLg0KPg0KPiAgICAgVE9ETyBEb2N1bWVudCB0aGUgcmVx dWlyZWQgTm90bXVjaCBzYXZlZCBxdWVyaWVzLg0KPiAgICAgVE9ETyBEb2N1bWVudCB0aGUgREtJ TSBmaWx0ZXJpbmcuDQo+ICAgICAiIiINCj4gICAgIGlmIGFyZ3MucmVxWydnZW5lcmFsJ10gb3Ig YXJncy5yZXFbJ25vdGlmeSddIG9yIGFyZ3MucmVxWydzcGFtJ106DQo+ICAgICAgICAgd2l0aCBz YWZlX29wZW5fZGJfcncoKSBhcyBubV9kYjoNCj4gICAgICAgICAgICAgaWYgYXJncy5yZXFbJ3Nw YW0nXToNCj4gICAgICAgICAgICAgICAgIGZpbHRlcl9zcGFtKG5tX2RiLCBhcmdzLnF1ZXJ5LCBh cmdzLmJmX2hhbSwgYXJncy5iZl9zcGFtKQ0KPiAgICAgICAgICAgICBpZiBhcmdzLnJlcVsnZ2Vu ZXJhbCddIG9yIGFyZ3MucmVxWydub3RpZnknXToNCj4gICAgICAgICAgICAgICAgICMgQWZldyB3 aWxsIHJlbW92ZSAnbmV3Jw0KPiAgICAgICAgICAgICAgICAgdGFnX3NlYXJjaChubV9kYiwgJ2lz Om5ldycsIGFyZ3MudG1wKQ0KPiAgICAgICAgICAgICAgICAgdG1wX2NvdW50ID0gY291bnQobm1f ZGIsIGYnaXM6e2FyZ3MudG1wfScpDQo+ICAgICBwaXBlID0gcGFydGlhbChydW4sIHN0ZG91dD1Q SVBFLCB0ZXh0PVRydWUpDQo+ICAgICB0cnk6DQo+ICAgICAgICAgaWYgYXJncy5yZXFbJ2dlbmVy YWwnXSBvciBhcmdzLnJlcVsnbm90aWZ5J106DQo+ICAgICAgICAgICAgIGV4Y2x1ZGUgPSBwaXBl KA0KPiAgICAgICAgICAgICAgICAgKCdub3RtdWNoJywgJ2NvbmZpZycsICdnZXQnLCAnc2VhcmNo LmV4Y2x1ZGVfdGFncycpLA0KPiAgICAgICAgICAgICAgICAgY2hlY2s9VHJ1ZSkuc3Rkb3V0LnJz dHJpcCgnXG4nKS5zcGxpdCgnXG4nKQ0KPiAgICAgICAgIGlmIGFyZ3MucmVxWydnZW5lcmFsJ106 DQo+ICAgICAgICAgICAgIGFmZXcgPSBwaXBlKCgnYWZldycsICctdG52JyksIGNoZWNrPVRydWUs IHN0ZGVycj1TVERPVVQpDQo+ICAgICAgICAgICAgIExPRy5pbmZvKCdcbiVzJywgYWZldy5zdGRv dXQpDQo+ICAgICAgICAgICAgIGV4Y2x1ZGVfZGtpbSA9ICcoJXMpJyAlICcgT1IgJy5qb2luKA0K PiAgICAgICAgICAgICAgICAgKGYnaXM6e3RhZ30nIGZvciB0YWcgaW4gZXhjbHVkZSArIFsnL2Rr aW0tLiovJ10pKQ0KPiAgICAgICAgICAgICAjIHByb2JsZW0gPSAoJzE1ODQ2MzgxODU1NTkuMWIx MGM4ODItZTFlMS00OTkzLThmMDEtYmRiY2IzYjRhZmUyQCcNCj4gICAgICAgICAgICAgIyAgICAg ICAgICAgICczMDIwMzZtLmdyYW5jdXJzb3NvbmxpbmUuY29tLmJyJykNCj4gICAgICAgICAgICAg ZGtpbV9xdWVyeSA9IGYnKGlzOnthcmdzLnRtcH0gLXtleGNsdWRlX2RraW19KScNCj4gICAgICAg ICAgICAgYWZldyA9IHBpcGUoKCdhZmV3JywgJy10dicsICctZURLSU1WYWxpZGl0eUZpbHRlcics IGRraW1fcXVlcnkpLA0KPiAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9U1RET1VUKQ0K PiAgICAgICAgICAgICBpZiBhZmV3LnJldHVybmNvZGU6DQo+ICAgICAgICAgICAgICAgICBhbGVy dCgnREtJTSBmaWx0ZXIgZXJyb3InLA0KPiAgICAgICAgICAgICAgICAgICAgICAgJ2FmZXcgREtJ TVZhbGlkaXR5RmlsdGVyIHJldHVybmVkICVkOlxuJXMnLA0KPiAgICAgICAgICAgICAgICAgICAg ICAgYWZldy5yZXR1cm5jb2RlLCBhZmV3LnN0ZG91dCkNCj4gICAgICAgICAgICAgZWxzZToNCj4g ICAgICAgICAgICAgICAgIExPRy5pbmZvKCdcbiVzJywgYWZldy5zdGRvdXQpDQo+ICAgICAgICAg aWYgYXJncy5yZXFbJ2dlbmVyYWwnXSBvciBhcmdzLnJlcVsnbm90aWZ5J106DQo+ICAgICAgICAg ICAgIHdpdGggc2FmZV9vcGVuX2RiX3J3KCkgYXMgbm1fZGI6DQo+ICAgICAgICAgICAgICAgICBp ZiBhcmdzLnJlcVsnbm90aWZ5J106DQo+ICAgICAgICAgICAgICAgICAgICAgcF9jb3VudCA9IHBh cnRpYWwoY291bnQsIG5tX2RiLCBleGNsdWRlPWV4Y2x1ZGUpDQo+ICAgICAgICAgICAgICAgICAg ICAgdG1wX25vdGlmeSA9IGYnaXM6e2FyZ3MudG1wfSBxdWVyeTpzaW1wbGVtdWNoX25vdGlmeScN Cj4gICAgICAgICAgICAgICAgICAgICBub3RpZnkgPSBwX2NvdW50KHRtcF9ub3RpZnkpDQo+ICAg ICAgICAgICAgICAgICAgICAgaWYgbm90aWZ5Og0KPiAgICAgICAgICAgICAgICAgICAgICAgICB1 bnJlYWQgPSBwX2NvdW50KCJxdWVyeTpzaW1wbGVtdWNoX3VucmVhZCIpDQo+ICAgICAgICAgICAg ICAgICAgICAgICAgIGluYm94X3VucmVhZCA9IHBfY291bnQoInF1ZXJ5OnNpbXBsZW11Y2hfSU5C T1hfdW5yZWFkIikNCj4gICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ2dlZCA9IHBfY291bnQo InF1ZXJ5OnNpbXBsZW11Y2hfZmxhZ2dlZCIpDQo+ICAgICAgICAgICAgICAgICAgICAgICAgIGJv ZHkgPSAoZidcDQo+IEluYm94OiB7dW5yZWFkfSB1bnJlYWQgKHtpbmJveF91bnJlYWR9IElOQk9Y KSwge2ZsYWdnZWR9IGZsYWdnZWRcbicgKw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdcbicuam9pbihtc2cuZ2V0X2hlYWRlcignU3ViamVjdCcpIGZvciBtc2cgaW4NCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5tX2RiLmNyZWF0ZV9xdWVyeSgNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfbm90aWZ5KS5zZWFyY2hfbWVz c2FnZXMoKSkpDQo+ICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPSBmJ3tub3RpZnl9 IG5ldyBtZXNzYWdlcy4nDQo+ICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmeS5Ob3RpZmlj YXRpb24ubmV3KA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSwgYm9keSwg J21haWwtbWVzc2FnZS1uZXcnKS5zaG93KCkNCj4gICAgICAgICAgICAgICAgIHRhZ19zZWFyY2go bm1fZGIsICdpczonICsgYXJncy50bXAsIHJlbW92ZT1hcmdzLnRtcCkNCj4gICAgICAgICAgICAg ICAgIHRtcF9jb3VudCA9IDANCj4gICAgIGZpbmFsbHk6DQo+ICAgICAgICAgaWYgKGFyZ3MucmVx Wydub3RpZnknXSBvciBhcmdzLnJlcVsnZ2VuZXJhbCddKSBhbmQgdG1wX2NvdW50Og0KPiAgICAg ICAgICAgICBib2R5X2ZtdCA9ICclZCBtZXNzYWdlcyBsZWZ0IHRhZ2dlZCAlcycNCj4gICAgICAg ICAgICAgYWxlcnQoJ0RpcnR5IG1lc3NhZ2VzJywgYm9keV9mbXQsIHRtcF9jb3VudCwgYXJncy50 bXApDQo+DQo+DQo+ICMgQ29tbWVudGVkIG91dCBzaW5jZSBJIGRvbid0IGtub3cgYSBzaW1wbGUg d2F5IHRvIG9idGFpbiB0aGUgbG9jYXRpb24gb2YgdGhlDQo+ICMgQm9nb2ZpbHRlciBkaXJlY3Rv cnkuICBJdCBtYXkgbm90IGJlIGAofi8uYm9nb2ZpbHRlciknOiBzZWUgQm9nb2ZpbHRlcg0KPiAj IG1hbiBwYWdlIHNlY3Rpb24gYEVOVklST05NRU5UJy4gIE1heWJlIHRoZSBgLXgnIGZsYWcgY2Fu IGhlbHAuDQo+ICMgZGVmIGNsZWFuKGRiLCBhcmdzKToNCj4gIyAgICAgIiIiUmVtb3ZlIEJvZ29m aWx0ZXIgdGFncyBmcm9tIGFsbCBtZXNzYWdlcyBhbmQgcmVtb3ZlIGAofi8uYm9nb2ZpbHRlcikn IiIiDQo+ICMgICAgIGlmIG5vdCBzaHV0aWwucm10cmVlLmF2b2lkc19zeW1saW5rX2F0dGFja3M6 DQo+ICMgICAgICAgICBwcmludCgiV2FybmluZzogdGhpcyBgc2h1dGlsLnJtdHJlZScgaXMgc3Vz Y2VwdGlibGUgdG8gc3ltbGluayBhdHRhY2tzLiIpDQo+ICMgICAgIHdoaWxlIFRydWU6DQo+ICMg ICAgICAgICByZXBseSA9IGlucHV0KHByb21wdD0NCj4gIyBmIiIiUmVtb3ZlIEJvZ29maWx0ZXIg ZGF0YWJhc2UgZGlyZWN0b3J5IGFuZCwgZnJvbSBhbGwgTm90bXVjaCBlbWFpbCBtZXNzYWdlcywN Cj4gIyB7YXJncy5iZl9zcGFtfSBhbmQge2FyZ3MuYmZfaGFtfSB0YWdzPyBbeS9OXSAiIiIpLmxv d2VyKCkNCj4gIyAgICAgICAgIGlmICdubycuc3RhcnRzd2l0aChyZXBseSk6DQo+ICMgICAgICAg ICAgICAgcmV0dXJuIEZhbHNlDQo+ICMgICAgICAgICBpZiAneWVzJy5zdGFydHN3aXRoKHJlcGx5 KToNCj4gIyAgICAgICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguZXhwYW5kdXNlcignfi8u Ym9nb2ZpbHRlcicpKQ0KPiAjICAgICAgICAgICAgIHRhZ19zZWFyY2goZGIsIGYnaXM6e2FyZ3Mu YmZfc3BhbX0nLCByZW1vdmU9J2Z7YXJncy5iZl9zcGFtfScpDQo+ICMgICAgICAgICAgICAgdGFn X3NlYXJjaChkYiwgZidpczp7YXJncy5iZl9oYW19JywgcmVtb3ZlPWYne2FyZ3MuYmZfaGFtfScp DQo+ICMgICAgICAgICAgICAgcmV0dXJuIFRydWUNCj4gIyAgICAgICAgIHByaW50KA0KPiAjICAg ICAgICAgICAgICdQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIGFuc3dlcjogInllcyIsICJubyIgb3Ig YSBwcmVmaXgsICcNCj4gIyAgICAgICAgICAgICAnY2FzZS1pbnNlbnNpdGl2ZScsIGZpbGU9c3lz LnN0ZGVycikNCj4NCj4gZGVmIHBhcnNlX2NvbW1hbmRfbGluZSgpIC0+IE5hbWVzcGFjZToNCj4g ICAgICIiIlBhcnNlIHN5cy5hcmd2IGludG8gYSBOYW1lc3BhY2Ugb2JqZWN0IiIiDQo+ICAgICBw YXJzZXIgPSBBcmd1bWVudFBhcnNlcigNCj4gICAgICAgICBkZXNjcmlwdGlvbj1fX2RvY19fLA0K PiAgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1Bcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcikN Cj4gICAgIHBhcnNlci5hZGRfYXJndW1lbnQoDQo+ICAgICAgICAgJy0tdmVyc2lvbicsIGFjdGlv bj0ndmVyc2lvbicsIHZlcnNpb249J1NpbXBsZW11Y2ggYWxwaGEnKQ0KPiAgICAgcGFyc2VyLmFk ZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgaGVscD0nT3V0cHV0IGxvZyBtZXNzYWdlcyBhbHNvIHRvIHN0 ZGVycicpDQo+ICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KA0KPiAgICAgICAgICctLWJmX3NwYW0n LCBkZWZhdWx0PUJGX1NQQU0sIG1ldGF2YXI9J1RBRycsDQo+ICAgICAgICAgaGVscD0nVGFnIGZv ciBib2dvZmlsdGVyLWZsYWdnZWQgc3BhbScpDQo+ICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KA0K PiAgICAgICAgICctLWJmX2hhbScsIGRlZmF1bHQ9QkZfSEFNLCBtZXRhdmFyPSdUQUcnLA0KPiAg ICAgICAgIGhlbHA9J1RhZyBmb3IgYm9nb2ZpbHRlci1mbGFnZ2VkIGhhbScpDQo+ICAgICBwYXJz ZXIuYWRkX2FyZ3VtZW50KA0KPiAgICAgICAgICctLXVzZXJfc3BhbScsIGRlZmF1bHQ9VVNFUl9T UEFNLCBtZXRhdmFyPSdUQUcnLA0KPiAgICAgICAgIGhlbHA9J1RhZyBmb3IgdXNlci1mbGFnZ2Vk IHNwYW0nKQ0KPiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgNCj4gICAgICAgICAnLS1sb2dsZXZl bCcsIGRlZmF1bHQ9J0lORk8nLCBoZWxwPSIiIlwNCj4gU2V2ZXJpdHkgdGhyZXNob2xkIGZvciBs b2dnaW5nOyBsb2dnaW5nIG1lc3NhZ2VzIGxlc3Mgc2V2ZXJlIGFyZSBkaXNjYXJkZWQuDQo+IEZv ciB0aGUgYWxsb3dlZCB2YWx1ZXMgc2VlDQo+IGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93 dG8vbG9nZ2luZy5odG1sIiIiKQ0KPiAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFy c2VycygNCj4gICAgICAgICB0aXRsZT0nU3ViY29tbWFuZHMnLCByZXF1aXJlZD1UcnVlLCBkZXNj cmlwdGlvbj0nU3BlY2lmeSBleGFjdGx5IG9uZScpDQo+ICAgICBwYXJzZXJfZmlsdGVyID0gc3Vi cGFyc2Vycy5hZGRfcGFyc2VyKA0KPiAgICAgICAgICdmaWx0ZXInLCBoZWxwPSIiIkZpbHRlciBt YWlsLiAgQnkgZGVmYXVsdCAoc2VlIGAtLXNraXAnKSwgZmlsdGVyIG91dA0KPiAgICAgICAgIHNw YW0sIHRoZW4gZG8gZ2VuZXJhbCBtYWlsIGZpbHRlcmluZyAod2l0aCBhZmV3KSBhbmQgdGhlbiwg ZGVwZW5kaW5nIG9uDQo+ICAgICAgICAgdGhlIG5ldyBtZXNzYWdlcywgbm90aWZ5LiIiIikNCj4g ICAgIHBhcnNlcl9maWx0ZXIuYWRkX2FyZ3VtZW50KA0KPiAgICAgICAgICctLXNraXAnLCBjaG9p Y2VzPUZJTFRFUl9BQ1RJT05TLCBuYXJncz0nKycsIGhlbHA9J0FjdGlvbnMgdG8gc2tpcCcsDQo+ ICAgICAgICAgZGVmYXVsdD0oKSkNCj4gICAgICMgV0lTSDogYXBwZW5kIGEgcmFuZG9tIHN1ZmZp eA0KPiAgICAgcGFyc2VyX2ZpbHRlci5hZGRfYXJndW1lbnQoDQo+ICAgICAgICAgJy0tdG1wJywg bWV0YXZhcj0nVEVNUE9SQVJZX1RBRycsIGRlZmF1bHQ9VE1QLA0KPiAgICAgICAgIGhlbHA9J1Rl bXBvcmFyeSB0YWcgZm9yIGludGVybmFsIHVzZTsgYXNzdW1lZCBieSB0aGlzIHNjcmlwdCcNCj4g ICAgICAgICAnIG5vdCB0byBwcmVleGlzdCBpbiB0aGUgZGF0YWJhc2UnKQ0KPiAgICAgcGFyc2Vy X2ZpbHRlci5hZGRfYXJndW1lbnQoDQo+ICAgICAgICAgJ3F1ZXJ5JywgbmFyZ3M9Jz8nLCBkZWZh dWx0PSdpczpuZXcnLA0KPiAgICAgICAgIGhlbHA9J1RoZSBOb3RtdWNoIHF1ZXJ5IHdob3NlIHJl c3VsdCB3aWxsIGJlIHNwYW0tZmlsdGVyZWQnKQ0KPiAgICAgcGFyc2VyX2ZpbHRlci5zZXRfZGVm YXVsdHMoZnVuYz1maWx0ZXJfbm90aWZ5KQ0KPiAgICAgcGFyc2VyX3RyYWluID0gc3VicGFyc2Vy cy5hZGRfcGFyc2VyKA0KPiAgICAgICAgICd0cmFpbicsIGhlbHA9IiIiVHJhaW4gYm9nb2ZpbHRl ci4gIFdlIGFzc3VtZSB0aGUgdXNlcg0KPiAgICAgICAgIGNsYXNzaWZpZWQgYSBtZXNzYWdlIGFz IHNwYW0gaWYgaXQgaXMgdGFnZ2VkIGBhcmdzLnVzZXJfc3BhbSc7DQo+ICAgICAgICAgYW5kIGhl IGNsYXNzaWZpZWQgYSBtZXNzYWdlIGFzIGhhbSBpZiBpdCBoYXMgYmVlbiByZWFkIGJ1dA0KPiAg ICAgICAgIG5vdCB0YWdnZWQgYGFyZ3MudXNlcl9zcGFtJy4gIFRoZXJlZm9yZSB3ZSBhc3N1bWUg dGhhdDoNCj4NCj4gICAgICAgICAxLiBNZXNzYWdlcyB0YWdnZWQgYGFyZ3MudXNlcl9zcGFtJyBh cmUgaW4gZmFjdCBzcGFtLg0KPiAgICAgICAgIDIuIFNwYW1teSByZWFkIG1lc3NhZ2VzIGFyZSB0 YWdnZWQgYGFyZ3MudXNlcl9zcGFtJy4NCj4gICAgICAgICAzLiBNZXNzYWdlcyB0YWdnZWQgYGFy Z3MuYmZfc3BhbScgYXJlIGFsc28gdGFnZ2VkIGBhcmdzLnVzZXJfc3BhbScsDQo+ICAgICAgICAg ICAgdW5sZXNzIHRoZXkgYXJlIGZhbHNlIHBvc2l0aXZlcy4NCj4NCj4gICAgICAgICBBIHByb2Js ZW1hdGljIHNjZW5hcmlvIGlzIHdoZW4gdGhlIHVzZXIgcmVhZHMgc3BhbSBpbiB3ZWJtYWlsDQo+ ICAgICAgICAgYnV0IGZvcmdldHMgdG8gdGFnIGl0IHNwYW0gaW4gTm90bXVjaC4iIiIpDQo+ICAg ICBwYXJzZXJfdHJhaW4uc2V0X2RlZmF1bHRzKGZ1bmM9dHJhaW4pDQo+ICAgICAjIHBhcnNlcl9j bGVhbiA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcigNCj4gICAgICMgICAgICdjbGVhbicsDQo+ICAg ICAjICAgICBoZWxwPSJSZW1vdmUgQm9nb2ZpbHRlciB0YWdzIGZyb20gYWxsIG1lc3NhZ2VzIGFu ZCByZW1vdmUgIg0KPiAgICAgIyAgICAgImAofi8uYm9nb2ZpbHRlciknIikNCj4gICAgICMgcGFy c2VyX2NsZWFuLnNldF9kZWZhdWx0cyhmdW5jPWNsZWFuKQ0KPiAgICAgYXJncyA9IHBhcnNlci5w YXJzZV9hcmdzKCkNCj4gICAgIGFyZ3MucmVxID0ge2E6IGFyZ3MuZnVuYyBpcyBmaWx0ZXJfbm90 aWZ5IGFuZCBhIG5vdCBpbiBhcmdzLnNraXANCj4gICAgICAgICAgICAgICAgIGZvciBhIGluIEZJ TFRFUl9BQ1RJT05TfSAgIyBSZXF1ZXN0ZWQgYWN0aW9ucw0KPiAgICAgcmV0dXJuIGFyZ3MNCj4N Cj4NCj4gZGVmIG1haW4oKSAtPiBOb25lOg0KPiAgICAgIiIiUnVuIGFzIHNjcmlwdDogc2V0IHVw IGxvZ2dpbmcsIHBhcnNlIHN5cy5hcmd2LCBleGVjdXRlLiIiIg0KPiAgICAgIyBXSVNIIE1heWJl IGNoYW5nZSB0aGUgdHlwZSBvZiBzb2NrZXQuICBTZWUgU3lzTG9nSGFuZGxlciBkb2N1bWVudGF0 aW9uDQo+ICAgICBoYW5kbGVyMSA9IGhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIoDQo+ICAgICAgICAg YWRkcmVzcz0nL2Rldi9sb2cnLCBmYWNpbGl0eT1oYW5kbGVycy5TeXNMb2dIYW5kbGVyLkxPR19N QUlMKQ0KPiAgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoDQo+ICAgICAgICAgJyUo bW9kdWxlKXNbJShwcm9jZXNzKWRdLiUoZnVuY05hbWUpczogJShsZXZlbG5hbWUpczogJShtZXNz YWdlKXMnKQ0KPiAgICAgaGFuZGxlcjEuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikNCj4gICAgIExP Ry5hZGRIYW5kbGVyKGhhbmRsZXIxKQ0KPiAgICAgdHJ5Og0KPiAgICAgICAgIGFyZ3MgPSBwYXJz ZV9jb21tYW5kX2xpbmUoKQ0KPiAgICAgICAgICMgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kZXYv cGVwcy9wZXAtMDAwOC8jcHJvZ3JhbW1pbmctcmVjb21tZW5kYXRpb25zDQo+ICAgICBleGNlcHQ6 ICAgICAgICAgICAgICAgICAgICAgIyBub3FhOiBFNzIyDQo+ICAgICAgICAgTE9HLmV4Y2VwdGlv bigNCj4gICAgICAgICAgICAgJ0V4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIGNvbW1h bmQgbGluZSAoIiVzIiknLCBzeXMuYXJndikNCj4gICAgICAgICByYWlzZQ0KPiAgICAgdHJ5Og0K PiAgICAgICAgIGlmIGFyZ3MudmVyYm9zZToNCj4gICAgICAgICAgICAgaGFuZGxlcjIgPSBsb2dn aW5nLlN0cmVhbUhhbmRsZXIoKQ0KPiAgICAgICAgICAgICBoYW5kbGVyMi5zZXRGb3JtYXR0ZXIo Zm9ybWF0dGVyKQ0KPiAgICAgICAgICAgICBMT0cuYWRkSGFuZGxlcihoYW5kbGVyMikNCj4gICAg ICAgICBsZXZlbF9udW0gPSBnZXRhdHRyKGxvZ2dpbmcsIGFyZ3MubG9nbGV2ZWwudXBwZXIoKSwg Tm9uZSkNCj4gICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShsZXZlbF9udW0sIGludCk6DQo+ICAg ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgbG9nIGxldmVsOiAlcycgJSBhcmdz LmxvZ2xldmVsKQ0KPiAgICAgICAgIExPRy5zZXRMZXZlbChsZXZlbF9udW0pDQo+ICAgICAgICAg aWYgYXJncy5yZXFbJ25vdGlmeSddOg0KPiAgICAgICAgICAgICAjIFdJU0ggQ29tcHV0ZSBuYW1l IGZyb20gc3lzLmFyZ3ZbMF0sIGxpa2UgYXJncGFyc2U/DQo+ICAgICAgICAgICAgIE5vdGlmeS5p bml0KCdTaW1wbGVtdWNoJykNCj4gICAgICAgICBhcmdzLmZ1bmMoYXJncykNCj4gICAgIGV4Y2Vw dDogICAgICAgICAgICAgICAgICAgICAjIG5vcWE6IEU3MjINCj4gICAgICAgICBhbGVydCgnRXhj ZXB0aW9uIG9jY3VycmVkJywgJ0NvbW1hbmQgbGluZTogIiVzIjsgcGFyc2VkOiAlcycsIHN5cy5h cmd2LA0KPiAgICAgICAgICAgICAgIGFyZ3MsIGZ1bj1MT0cuZXhjZXB0aW9uKQ0KPiAgICAgICAg IHJhaXNlDQo+DQo+DQo+IGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6DQo+ICAgICBtYWluKCkN Cj4NCj4gIyBMb2NhbCBWYXJpYWJsZXM6DQo+ICMgaXNwZWxsLWxvY2FsLWRpY3Rpb25hcnk6ICJl bl9VUyINCj4gIyBFbmQ6DQo+DQo+IC0tIA0KPiAtIDxodHRwczovL2pvcmdlbW9yYWlzLmdpdGxh Yi5pby9qdXN0aWNlLWZvci1ybXMvPg0KPiAtIElmIGFuIGVtYWlsIG9mIG1pbmUgYXJyaXZlcyBh dCB5b3VyIHNwYW0gYm94LCBwbGVhc2Ugbm90aWZ5IG1lLg0KPiAtIFBsZWFzZSBhZG9wdCBmcmVl L2xpYnJlIGZvcm1hdHMgbGlrZSBQREYsIE9ERiwgT3JnLCBMYVRlWCwgT3B1cywgV2ViTSBhbmQg N3ouDQo+IC0gRnJlZS9saWJyZSBzb2Z0d2FyZSBmb3IgUmVwbGljYW50LCBMaW5lYWdlT1MgYW5k IEFuZHJvaWQ6IGh0dHBzOi8vZi1kcm9pZC5vcmcNCj4gLSBbW2h0dHBzOi8vd3d3LmdudS5vcmcv cGhpbG9zb3BoeS9mcmVlLXN3Lmh0bWxdW1doYXQgaXMgZnJlZSBzb2Z0d2FyZT9dXQ==