From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id EFEyNeRVFWGSOAEAgWs5BA (envelope-from ) for ; Thu, 12 Aug 2021 19:09:56 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id 4BfDMORVFWElHgAAbx9fmQ (envelope-from ) for ; Thu, 12 Aug 2021 17:09:56 +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)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 6BEDF3645 for ; Thu, 12 Aug 2021 19:09:56 +0200 (CEST) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 9EA87291A6; Thu, 12 Aug 2021 13:09:10 -0400 (EDT) Received: from fethera.tethera.net (fethera.tethera.net [IPv6:2607:5300:60:c5::1]) by mail.notmuchmail.org (Postfix) with ESMTP id D3FF82BDC9 for ; Thu, 12 Aug 2021 13:09:05 -0400 (EDT) Received: by fethera.tethera.net (Postfix, from userid 1001) id CD2E95FD5C; Thu, 12 Aug 2021 13:09:05 -0400 (EDT) Received: (nullmailer pid 1348745 invoked by uid 1000); Thu, 12 Aug 2021 17:07:43 -0000 From: David Bremner To: notmuch@notmuchmail.org Cc: David Bremner Subject: [PATCH 12/31] lib/parse-sexp: support phrase queries. Date: Thu, 12 Aug 2021 10:07:09 -0700 Message-Id: <20210812170728.1348333-13-david@tethera.net> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210812170728.1348333-1-david@tethera.net> References: <20210812170728.1348333-1-david@tethera.net> MIME-Version: 1.0 Message-ID-Hash: DYTER5WEQFQEOYGBN3BBM4UVXWESFLBI X-Message-ID-Hash: DYTER5WEQFQEOYGBN3BBM4UVXWESFLBI X-MailFrom: bremner@tethera.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header 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=1628788196; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc: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; bh=ucK64JzzW2gcAvnj9AZnU0WFPjnaSNvTRK3E2ASSTBw=; b=jju171jDpAtZjKQhWy9WIUQKOy274u9OJXvTtP6J7VbwFc/5iTh5pwZh8bLey3jdmpJlM0 pB76F61v1eOwEHB9FkeQ5CQEdP2m3VqD7U7d37DwL6jqKnKpZ1+5JrBT3wIkb+AMLGW3Mi +uUPG/PkG2fQSqZy/E3QJekHa3rteOv2nuXZgJFFZE7S8TfgtRdoiZ/zl1ZNtOiaJBaEvs vqDDuedT5T33CeK3+5R1VzmTe1RtozOxvJYfy2/HR1eYLQEAPwFvpQXCZyZu97DqeplLgM to95Iauw0D+U307fY1lXjOqfH600oVEv1vOFjwa0cuf7WmTkN7qnLn3xoL0z2A== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1628788196; a=rsa-sha256; cv=none; b=et3bBNhapHjqm9j3DcVq82owKtTdVUJNJB7PPoo9tZDDnrlWCKZbeQz+C4SJgrKVT1vYYx j280wrGDP75yxIXdf7tCu8eLQBAhCEh0FBK8oOQ84d2mXaMc1PFcUB6E0dPHemAVnvoyFf 5mCcPSDEXnTJ2inM4ppN8re3xg+6U6gjSCwwR05RgQB8uMJcav6T/4egcVyJhIfQioeLC9 PSPGIFdk0SEHJomGW0vwKoJDaLl6CALOkfMXk6dSlIc5wdIWqymgW1pIjm2GG/P1h+Pyww BtxqXfWRQTKudq7/Qp/aOdXNJfXvGdSNJyggHhKIBI0TjFm9STYrsa72mM39PA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; 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: 0.58 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; 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: 6BEDF3645 X-Spam-Score: 0.58 X-Migadu-Scanner: scn1.migadu.com X-TUID: Yg+OCAFmEAkI QW55dGhpbmcgdGhhdCBpcyBxdW90ZWQgb3Igbm90IHB1cmVseSB3b3JkIGNoYXJhY3RlcnMgaXMg Y29uc2lkZXJlZCBhDQpwaHJhc2UuICBQaHJhc2VzIGFyZSBub3Qgc3RlbW1lZCwgYmVjYXVzZSB0 aGUgc3RlbXMgZG8gbm90IGhhdmUNCnBvc2l0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlIGRhdGFi YXNlLiBJdCBpcyBsZXNzIGVmZmljaWVudCB0byBzY2FuDQp0aGUgdGVybSB0d2ljZSwgYnV0IGl0 IGF2b2lkcyBhIHNlY29uZCBwYXNzIHRvIGFkZCBwcmVmaXhlcywgc28gbWF5YmUNCml0IGJhbGFu Y2VzIG91dC4gSW4gYW55IGNhc2UsIGl0IHNlZW1zIHVubGlrZWx5IHF1ZXJ5IHBhcnNpbmcgaXMg dmVyeQ0Kb2Z0ZW4gYSBib3R0bGVuZWNrLg0KLS0tDQogZG9jL21hbjcvbm90bXVjaC1zZXhwLXF1 ZXJpZXMucnN0IHwgMzIgKysrKysrKysrKysrKysrKysrLS0tLQ0KIGxpYi9wYXJzZS1zZXhwLmNj ICAgICAgICAgICAgICAgICB8IDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0NCiB0 ZXN0L1QwODEtc2V4cHItc2VhcmNoLnNoICAgICAgICAgfCAyMSArKysrKysrKysrKysrLS0NCiAz IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQ0KDQpkaWZm IC0tZ2l0IGEvZG9jL21hbjcvbm90bXVjaC1zZXhwLXF1ZXJpZXMucnN0IGIvZG9jL21hbjcvbm90 bXVjaC1zZXhwLXF1ZXJpZXMucnN0DQppbmRleCBhZTE2MTlkYy4uZjk3NDQ5ZjAgMTAwNjQ0DQot LS0gYS9kb2MvbWFuNy9ub3RtdWNoLXNleHAtcXVlcmllcy5yc3QNCisrKyBiL2RvYy9tYW43L25v dG11Y2gtc2V4cC1xdWVyaWVzLnJzdA0KQEAgLTQwLDEwICs0MCwxMiBAQCBzdWJxdWVyaWVzLg0K ICAgICBNYXRjaCBhbGwgbWVzc2FnZXMuDQogDQogKnRlcm0qDQotICAgIE1hdGNoIGFsbCBtZXNz YWdlcyBjb250YWluaW5nICp0ZXJtKiwgcG9zc2libHkgYWZ0ZXINCi0gICAgc3RlbW1pbmcgb3Ig cGhhc2Ugc3BsaXR0aW5nLiBGb3IgZGlzY3Vzc2lvbiBvZiBzdGVtbWluZyBpbg0KLSAgICBub3Rt dWNoIHNlZSA6YW55OmBub3RtdWNoLXNlYXJjaC10ZXJtcyg3KWAuIFN0ZW1taW5nIG9ubHkgYXBw bGllcw0KLSAgICB0byB1bnF1b3RlZCB0ZXJtcyAoYmFzaWMgdmFsdWVzKSBpbiBzLWV4cHJlc3Np b24gcXVlcmllcy4NCisNCisgICAgTWF0Y2ggYWxsIG1lc3NhZ2VzIGNvbnRhaW5pbmcgKnRlcm0q LCBwb3NzaWJseSBhZnRlciBzdGVtbWluZyBvcg0KKyAgICBwaHJhc2Ugc3BsaXR0aW5nLiBGb3Ig ZGlzY3Vzc2lvbiBvZiBzdGVtbWluZyBpbiBub3RtdWNoIHNlZQ0KKyAgICA6YW55OmBub3RtdWNo LXNlYXJjaC10ZXJtcyg3KWAuIFN0ZW1taW5nIG9ubHkgYXBwbGllcyB0byB1bnF1b3RlZA0KKyAg ICB0ZXJtcyAoYmFzaWMgdmFsdWVzKSBpbiBzLWV4cHJlc3Npb24gcXVlcmllcy4gIEZvciBpbmZv cm1hdGlvbiBvbg0KKyAgICBwaHJhc2Ugc3BsaXR0aW5nIHNlZSA6YW55OmBmaWVsZHNgLg0KIA0K IGBgKGBgICpmaWVsZCogfHExfCB8cTJ8IC4uLiB8cW58IGBgKWBgDQogICAgIFJlc3RyaWN0IHRo ZSBxdWVyaWVzIHxxMXwgdG8gfHFufCB0byAqZmllbGQqLCBhbmQgY29tYmluZSB3aXRoICphbmQq DQpAQCAtNjMsNyArNjUsNyBAQCBzdWJxdWVyaWVzLg0KIEZJRUxEUw0KIGBgYGBgYA0KIA0KLSpG aWVsZHMqIChhbHNvIGNhbGxlZCAqcHJlZml4ZXMqIGluIG5vdG11Y2ggZG9jdW1lbnRhdGlvbikN CisqRmllbGRzKiBbI2FrYS1wcmVmXV8NCiBjb3JyZXNwb25kIHRvIGF0dHJpYnV0ZXMgb2YgbWFp bCBtZXNzYWdlcy4gU29tZSBhcmUgaW5oZXJlbnQgKGFuZA0KIGltbXV0YWJsZSkgbGlrZSBgYHN1 YmplY3RgYCwgd2hpbGUgb3RoZXJzIGBgdGFnYGAgYW5kIGBgcHJvcGVydHlgYCBhcmUNCiBzZXR0 YWJsZSBieSB0aGUgdXNlci4gIEVhY2ggY29uY3JldGUgZmllbGQgaW4NCkBAIC03Miw2ICs3NCwx MyBAQCBpcyBkaXNjdXNzZWQgZnVydGhlciB1bmRlciAiU2VhcmNoIHByZWZpeGVzIiBpbg0KIDph bnk6YG5vdG11Y2gtc2VhcmNoLXRlcm1zKDcpYC4gVGhlIHJvdyAqdXNlciogcmVmZXJzIHRvIHVz ZXIgZGVmaW5lZA0KIGZpZWxkcywgZGVzY3JpYmVkIGluIDphbnk6YG5vdG11Y2gtY29uZmlnKDEp YC4NCiANCitNb3N0IGZpZWxkcyBhcmUgZWl0aGVyICpwaHJhc2UgZmllbGRzKiBbI2FrYS1wcm9i XV8gKHdoaWNoIG1hdGNoDQorc2VxdWVuY2VzIG9mIHdvcmRzKSwgb3IgKnRlcm0gZmllbGRzKiBb I2FrYS1ib29sXV8gKHdoaWNoIG1hdGNoIGV4YWN0DQorc3RyaW5ncykuICpQaHJhc2Ugc3BsaXR0 aW5nKiBicmVha3MgdGhlIHRlcm0gKGJhc2ljIHZhbHVlIG9yIHF1b3RlZA0KK3N0cmluZykgaW50 byB3b3JkcywgaWdub3JlIHB1bmN0dWF0aW9uLiBQaHJhc2Ugc3BsaXR0aW5nIGlzIGFwcGxpZWQg dG8NCit0ZXJtcyBpbiBwaHJhc2UgKHByb2JhYmlsaXN0aWMpIGZpZWxkcy4gQm90aCBwaHJhc2Ug c3BsaXR0aW5nIGFuZA0KK3N0ZW1taW5nIGFwcGx5IG9ubHkgaW4gcGhyYXNlIGZpZWxkcy4NCisN CiAuLiBfZmllbGQtdGFibGU6DQogDQogLi4gdGFibGU6OiBGaWVsZHMgd2l0aCBzdXBwb3J0ZWQg bW9kaWZpZXJzDQpAQCAtMTM4LDEwICsxNDcsMjMgQEAgRVhBTVBMRVMNCiBgYChub3QgQm9iIE1h cmxleSlgYA0KICAgICBNYXRjaCBtZXNzYWdlcyBjb250YWluaW5nIG5laXRoZXIgIkJvYiIgbm9y ICJNYXJsZXkiLCBub3IgdGhlaXIgc3RlbXMsDQogDQorYGAicXVpY2sgZm94ImBgIGBgcXVpY2st Zm94YGAgYGBxdWlja0Bmb3hgYA0KKyAgICBNYXRjaCB0aGUgKnBocmFzZSogInF1aWNrIiBmb2xs b3dlZCBieSAiZm94IiBpbiBwaHJhc2UgZmllbGRzIChvcg0KKyAgICBvdXRzaWRlIGEgZmllbGQp LiBNYXRjaCB0aGUgbGl0ZXJhbCBzdHJpbmcgaW4gYSB0ZXJtIGZpZWxkLg0KKw0KIGBgKHN1Ympl Y3QgcXVpY2sgImJyb3duIGZveCIpYGANCiAgICAgTWF0Y2ggbWVzc2FnZXMgd2hvc2Ugc3ViamVj dCBjb250YWlucyAicXVpY2siIChhbnl3aGVyZSwgc3RlbW1lZCkgYW5kDQogICAgIHRoZSBwaHJh c2UgImJyb3duIGZveCIuDQogDQorTk9URVMNCis9PT09PQ0KKw0KKy4uIFsjYWthLXByZWZdIGEu ay5hLiBwcmVmaXhlcw0KKw0KKy4uIFsjYWthLXByb2JdIGEuay5hLiBwcm9iYWJpbGlzdGljIHBy ZWZpeGVzDQorDQorLi4gWyNha2EtYm9vbF0gYS5rLmEuIGJvb2xlYW4gcHJlZml4ZXMNCisNCiAu LiB8cTF8IHJlcGxhY2U6OiA6bWF0aDpgcV8xYA0KIC4uIHxxMnwgcmVwbGFjZTo6IDptYXRoOmBx XzJgDQogLi4gfHFufCByZXBsYWNlOjogOm1hdGg6YHFfbmANCmRpZmYgLS1naXQgYS9saWIvcGFy c2Utc2V4cC5jYyBiL2xpYi9wYXJzZS1zZXhwLmNjDQppbmRleCBhNWQ0MWYzMC4uNGFkZmM0YzUg MTAwNjQ0DQotLS0gYS9saWIvcGFyc2Utc2V4cC5jYw0KKysrIGIvbGliL3BhcnNlLXNleHAuY2MN CkBAIC0xLDUgKzEsNiBAQA0KICNpbmNsdWRlICJkYXRhYmFzZS1wcml2YXRlLmgiDQogI2luY2x1 ZGUgInNleHAuaCINCisjaW5jbHVkZSAidW5pY29kZS11dGlsLmgiDQogDQogI2lmIEhBVkVfU0ZT RVhQDQogDQpAQCAtNjYsNiArNjcsMzYgQEAgX3NleHBfY29tYmluZV9xdWVyeSAobm90bXVjaF9k YXRhYmFzZV90ICpub3RtdWNoLA0KIAkJCQlzeC0+bmV4dCwgb3V0cHV0KTsNCiB9DQogDQorc3Rh dGljIG5vdG11Y2hfc3RhdHVzX3QNCitfc2V4cF9wYXJzZV9waHJhc2UgKHN0ZDo6c3RyaW5nIHRl cm1fcHJlZml4LCBjb25zdCBjaGFyICpwaHJhc2UsIFhhcGlhbjo6UXVlcnkgJm91dHB1dCkNCit7 DQorICAgIFhhcGlhbjo6VXRmOEl0ZXJhdG9yIHAgKHBocmFzZSk7DQorICAgIFhhcGlhbjo6VXRm OEl0ZXJhdG9yIGVuZDsNCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRlcm1zOw0KKw0K KyAgICB3aGlsZSAocCAhPSBlbmQpIHsNCisJWGFwaWFuOjpVdGY4SXRlcmF0b3Igc3RhcnQ7DQor CXdoaWxlIChwICE9IGVuZCAmJiAhIFhhcGlhbjo6VW5pY29kZTo6aXNfd29yZGNoYXIgKCpwKSkN CisJICAgIHArKzsNCisNCisJaWYgKHAgPT0gZW5kKQ0KKwkgICAgYnJlYWs7DQorDQorCXN0YXJ0 ID0gcDsNCisNCisJd2hpbGUgKHAgIT0gZW5kICYmIFhhcGlhbjo6VW5pY29kZTo6aXNfd29yZGNo YXIgKCpwKSkNCisJICAgIHArKzsNCisNCisJaWYgKHAgIT0gc3RhcnQpIHsNCisJICAgIHN0ZDo6 c3RyaW5nIHdvcmQgKHN0YXJ0LCBwKTsNCisJICAgIHdvcmQgPSBYYXBpYW46OlVuaWNvZGU6OnRv bG93ZXIgKHdvcmQpOw0KKwkgICAgdGVybXMucHVzaF9iYWNrICh0ZXJtX3ByZWZpeCArIHdvcmQp Ow0KKwl9DQorICAgIH0NCisgICAgb3V0cHV0ID0gWGFwaWFuOjpRdWVyeSAoWGFwaWFuOjpRdWVy eTo6T1BfUEhSQVNFLCB0ZXJtcy5iZWdpbiAoKSwgdGVybXMuZW5kICgpKTsNCisgICAgcmV0dXJu IE5PVE1VQ0hfU1RBVFVTX1NVQ0NFU1M7DQorfQ0KKw0KIC8qIEhlcmUgd2UgZXhwZWN0IHRoZSBz LWV4cHJlc3Npb24gdG8gYmUgYSBwcm9wZXIgbGlzdCwgd2l0aCBmaXJzdA0KICAqIGVsZW1lbnQg ZGVmaW5pbmcgYW5kIG9wZXJhdGlvbiwgb3IgYXMgYSBzcGVjaWFsIGNhc2UgdGhlIGVtcHR5DQog ICogbGlzdCAqLw0KQEAgLTc5LDEzICsxMTAsMTIgQEAgX3NleHBfdG9feGFwaWFuX3F1ZXJ5IChu b3RtdWNoX2RhdGFiYXNlX3QgKm5vdG11Y2gsIGNvbnN0IF9zZXhwX3ByZWZpeF90ICpwYXJlbnQN CiAJc3RkOjpzdHJpbmcgdGVybSA9IFhhcGlhbjo6VW5pY29kZTo6dG9sb3dlciAoc3gtPnZhbCk7 DQogCVhhcGlhbjo6U3RlbSBzdGVtID0gKihub3RtdWNoLT5zdGVtbWVyKTsNCiAJc3RkOjpzdHJp bmcgdGVybV9wcmVmaXggPSBwYXJlbnQgPyBfZmluZF9wcmVmaXggKHBhcmVudC0+bmFtZSkgOiAi IjsNCi0JaWYgKHN4LT5hdHkgPT0gU0VYUF9CQVNJQykNCi0JICAgIHRlcm0gPSAiWiIgKyB0ZXJt X3ByZWZpeCArIHN0ZW0gKHRlcm0pOw0KLQllbHNlDQotCSAgICB0ZXJtID0gdGVybV9wcmVmaXgg KyB0ZXJtOw0KLQ0KLQlvdXRwdXQgPSBYYXBpYW46OlF1ZXJ5ICh0ZXJtKTsNCi0JcmV0dXJuIE5P VE1VQ0hfU1RBVFVTX1NVQ0NFU1M7DQorCWlmIChzeC0+YXR5ID09IFNFWFBfQkFTSUMgJiYgdW5p Y29kZV93b3JkX3V0ZjggKHN4LT52YWwpKSB7DQorCSAgICBvdXRwdXQgPSBYYXBpYW46OlF1ZXJ5 ICgiWiIgKyB0ZXJtX3ByZWZpeCArIHN0ZW0gKHRlcm0pKTsNCisJICAgIHJldHVybiBOT1RNVUNI X1NUQVRVU19TVUNDRVNTOw0KKwl9IGVsc2Ugew0KKwkgICAgcmV0dXJuIF9zZXhwX3BhcnNlX3Bo cmFzZSAodGVybV9wcmVmaXgsIHN4LT52YWwsIG91dHB1dCk7DQorCX0NCiAgICAgfQ0KIA0KICAg ICAvKiBFbXB0eSBsaXN0ICovDQpkaWZmIC0tZ2l0IGEvdGVzdC9UMDgxLXNleHByLXNlYXJjaC5z aCBiL3Rlc3QvVDA4MS1zZXhwci1zZWFyY2guc2gNCmluZGV4IDkwY2VmNTBjLi40YTA1MWE1MCAx MDA3NTUNCi0tLSBhL3Rlc3QvVDA4MS1zZXhwci1zZWFyY2guc2gNCisrKyBiL3Rlc3QvVDA4MS1z ZXhwci1zZWFyY2guc2gNCkBAIC0xMDIsMTUgKzEwMiwzMiBAQCBFT0YNCiB0ZXN0X2V4cGVjdF9l cXVhbF9maWxlIEVYUEVDVEVEIE9VVFBVVA0KIA0KIHRlc3RfYmVnaW5fc3VidGVzdCAiU2VhcmNo IGJ5ICdzdWJqZWN0JyAodXRmLTgsIHBocmFzZS10b2tlbik6Ig0KLXRlc3Rfc3VidGVzdF9rbm93 bl9icm9rZW4NCiBvdXRwdXQ9JChub3RtdWNoIHNlYXJjaCAtLXF1ZXJ5PXNleHAgJyhzdWJqZWN0 IHV0Zjgtc8O8YmrDqWN0KScgfCBub3RtdWNoX3NlYXJjaF9zYW5pdGl6ZSkNCiB0ZXN0X2V4cGVj dF9lcXVhbCAiJG91dHB1dCIgInRocmVhZDpYWFggICAyMDAwLTAxLTAxIFsxLzFdIE5vdG11Y2gg VGVzdCBTdWl0ZTsgdXRmOC1zw7xiasOpY3QgKGluYm94IHVucmVhZCkiDQogDQogdGVzdF9iZWdp bl9zdWJ0ZXN0ICJTZWFyY2ggYnkgJ3N1YmplY3QnICh1dGYtOCwgcXVvdGVkIHN0cmluZyk6Ig0K LXRlc3Rfc3VidGVzdF9rbm93bl9icm9rZW4NCiBvdXRwdXQ9JChub3RtdWNoIHNlYXJjaCAtLXF1 ZXJ5PXNleHAgJyhzdWJqZWN0ICJ1dGY4IHPDvGJqw6ljdCIpJyB8IG5vdG11Y2hfc2VhcmNoX3Nh bml0aXplKQ0KIHRlc3RfZXhwZWN0X2VxdWFsICIkb3V0cHV0IiAidGhyZWFkOlhYWCAgIDIwMDAt MDEtMDEgWzEvMV0gTm90bXVjaCBUZXN0IFN1aXRlOyB1dGY4LXPDvGJqw6ljdCAoaW5ib3ggdW5y ZWFkKSINCiANCit0ZXN0X2JlZ2luX3N1YnRlc3QgIlNlYXJjaCBieSAnc3ViamVjdCcgKGNvbWJp bmUgcGhyYXNlLCB0ZXJtKToiDQorb3V0cHV0PSQobm90bXVjaCBzZWFyY2ggLS1xdWVyeT1zZXhw ICcoc3ViamVjdCBNYWMgImNvbXBhdGliaWxpdHkgaXNzdWVzIiknIHwgbm90bXVjaF9zZWFyY2hf c2FuaXRpemUpDQordGVzdF9leHBlY3RfZXF1YWwgIiRvdXRwdXQiICJ0aHJlYWQ6WFhYICAgMjAw OS0xMS0xOCBbNC80XSBKamdvZCBKaWFuZywgQWxleGFuZGVyIEJvdGVyby1Mb3dyeTsgW25vdG11 Y2hdIE1hYyBPUyBYL0RhcndpbiBjb21wYXRpYmlsaXR5IGlzc3VlcyAoaW5ib3ggdW5yZWFkKSIN CisNCit0ZXN0X2JlZ2luX3N1YnRlc3QgIlNlYXJjaCBieSAnc3ViamVjdCcgKGNvbWJpbmUgcGhy YXNlLCB0ZXJtIDIpOiINCitub3RtdWNoIHNlYXJjaCAtLXF1ZXJ5PXNleHAgJyhzdWJqZWN0IChv ciB1dGY4ICJjb21wYXRpYmlsaXR5IGlzc3VlcyIpKScgfCBub3RtdWNoX3NlYXJjaF9zYW5pdGl6 ZSA+IE9VVFBVVA0KK2NhdCA8PEVPRiA+IEVYUEVDVEVEDQordGhyZWFkOlhYWCAgIDIwMDktMTEt MTggWzQvNF0gSmpnb2QgSmlhbmcsIEFsZXhhbmRlciBCb3Rlcm8tTG93cnk7IFtub3RtdWNoXSBN YWMgT1MgWC9EYXJ3aW4gY29tcGF0aWJpbGl0eSBpc3N1ZXMgKGluYm94IHVucmVhZCkNCit0aHJl YWQ6WFhYICAgMjAwMC0wMS0wMSBbMS8xXSBOb3RtdWNoIFRlc3QgU3VpdGU7IHV0Zjgtc8O8YmrD qWN0IChpbmJveCB1bnJlYWQpDQorRU9GDQordGVzdF9leHBlY3RfZXF1YWxfZmlsZSBFWFBFQ1RF RCBPVVRQVVQNCisNCit0ZXN0X2JlZ2luX3N1YnRlc3QgIlNlYXJjaCBieSAnc3ViamVjdCcgKGNv bWJpbmUgcGhyYXNlLCB0ZXJtIDMpOiINCitub3RtdWNoIHNlYXJjaCAtLXF1ZXJ5PXNleHAgJyhz dWJqZWN0IGlzc3VlcyBYL0RhcndpbiknIHwgbm90bXVjaF9zZWFyY2hfc2FuaXRpemUgPiBPVVRQ VVQNCitjYXQgPDxFT0YgPiBFWFBFQ1RFRA0KK3RocmVhZDpYWFggICAyMDA5LTExLTE4IFs0LzRd IEpqZ29kIEppYW5nLCBBbGV4YW5kZXIgQm90ZXJvLUxvd3J5OyBbbm90bXVjaF0gTWFjIE9TIFgv RGFyd2luIGNvbXBhdGliaWxpdHkgaXNzdWVzIChpbmJveCB1bnJlYWQpDQorRU9GDQordGVzdF9l eHBlY3RfZXF1YWxfZmlsZSBFWFBFQ1RFRCBPVVRQVVQNCisNCiB0ZXN0X2JlZ2luX3N1YnRlc3Qg IlVuYmFsYW5jZWQgcGFyZW5zIg0KICMgQSBjb2RlIDEgaW5kaWNhdGVzIHRoZSBlcnJvciB3YXMg aGFuZGxlZCAoYSBjcmFzaCB3aWxsIHJldHVybiBlLmcuIDEzOSkuDQogdGVzdF9leHBlY3RfY29k ZSAxICJub3RtdWNoIHNlYXJjaCAtLXF1ZXJ5PXNleHAgJygnIg0KLS0gDQoyLjMwLjIN