Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vkQIp-00EtOE-1e for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Jan 2026 17:23:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vkQIo-009cg9-29 for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Jan 2026 17:23:03 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vkQIo-009cfe-0j for pgsql-hackers@lists.postgresql.org; Mon, 26 Jan 2026 17:23:02 +0000 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vkQIk-00000000Zhn-1BZx for pgsql-hackers@lists.postgresql.org; Mon, 26 Jan 2026 17:23:02 +0000 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b8871718b00so492183666b.3 for ; Mon, 26 Jan 2026 09:22:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769448177; cv=none; d=google.com; s=arc-20240605; b=bA07la9K8Qd8x62wH7LbTglnMQjBcuC4EHbjbxS5BfM1mnmMqW0zr7Iyd6D0A7LlvK Hq4qYnHuNljrUC7DklJmmL7GmLrve+Kox+Jbs5OYY2k0uasCAtQtF0EODm3PD3K7oA7g S+R0b8fCSgzYzrJDrf5DEU5l1499YW6gI4Nyx6EOocqhqkHTVL1xlr4XWuplfDVkMKuI fxCUmdclFuLafglDpAizblXHCUf5G1SLBvFDPgDBuu0xLclbVQSo4CjXsoUkWvfIlcdw CqqGm069CyYfdvIWHfQEGgdoYyMhJHYDQuiBc6vhUq0Rpli97phgu8/Y/VVu2hbMGWcb 0DHw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=rFuZrND2idLkaIwv473/9CHD6HKLNyTpkyCvm8vfcQ8=; fh=INmoGzi/9RcfXkJIyH08+eUpO5T5H8O0wKgOH2JfW3Y=; b=CMwK4iff8/nz90hQHHfH+AhsoQdSBX4xDJbi7rtoSdT4gy3FWuHMO/oVkJ6R3+P/Xi CSZla5kWqB81AO3RC13PgxAYNDEOIksgaJTk4nXX7UQQm3NLar0tAqI5IOTSe2tuhhRY 5Wc4Xy7zlpzidmEkKsn1dTTWIxFNfWlNZj+lPEQUZilcdgIYjoGjbnlO/ydDKJ+UE9Oj 5uVkvSOvEOoY3hYs4heuUm+l+J3goZ0iS14Lo1Wwpz3dnxQFWg1ZxnhbnjjQtTVFRvWZ UDHnLVP7iWXZCdBsRd55ZcxBUUSMOhdvslhhaL7EFolHdHeE9SkrXou/kbom2qVjR5AE EsaQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769448177; x=1770052977; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=rFuZrND2idLkaIwv473/9CHD6HKLNyTpkyCvm8vfcQ8=; b=YnnTF53l83Jn7Kq4opMBBqrRis30byY18mwbcFCey6pnG/3SFHB6+yAqO7dmuOfMVY sArpLjMc9HN8a6dziajuMr1fTt4lf/+impZQiBf2X6MY27DNOagaDVMD+fWojPFoHWZN o71eQ+deKayMd/YbAdpbHU7U/11L/wQWNhVpAxIOSXbP1YzlZRv88YYjM2L3gdonsExe I95cZjZ2hqLHnoRF7j/+Cp4BcUmOScKlxEQhmALRhmfyRWEDtmq0hofJ3S7u8WKI4AYd Cg0YPjYs8E7NpOoHs86AW2d4koEdgBvzdEKHwhb/F69iY5P70sBeCkvhHp5U2d07NSzc 1Ljw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769448177; x=1770052977; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rFuZrND2idLkaIwv473/9CHD6HKLNyTpkyCvm8vfcQ8=; b=JNALgHJmAdpauXIz1/sIYQBi0L9FfnyP83RiU/rJSwckUsF+2q8ju40P/4cvqQidyK forBuWV5vNDgomt7ZPYZLZfUpEIdqwkUvlDbBFMBxyTPCRZHchNtQ1mpexWCNMXAQV/u OpzbS94xaGZB0L9i1pkhFmpjPTBua3CypgouR1EkkUhfhclhSPhfmTPxDlS7LhHi3G0V go3eiNzUOwAptOVtyLBLb2ekgs314CIpDxlIFfhf6UDUNodrQw1hQ/vuqSeVcRNTMu3m 2ikKroDWcQwrOtJH7Ww2sBOHiBl3bDm/XKZGK/+xWJUNvn2FWTASeIzY/j3QoP7kK58v 2QIw== X-Gm-Message-State: AOJu0Yz0KaZe/zb5Se4WylrWqSuBEPHr3lYhfX6t+D2iF2UIJIgrFvQJ uyBO+0bpeev1MHbABXrFBnGi4ta8Z/hkEv6+Dad5HzNfE+Vc7lAjeZkVfi6n5lyoP8pHODVA4Q9 NW/s9ivOfFOe9clzGkDIyFuNbJx4iYtcKVc+/ X-Gm-Gg: AZuq6aLtYxt3bI7ogZbQVHlD/ij6gXgXzOHLn0WjI9sAGxO5iy0WpuWaax4UiXWKYbr 9lW/dsuIQrG7U+YChfNkG1UJGHiZNayx0VE0bL5hbHQ9MoJi0OqnYnVuel5oyNNfLIQr2nqdg1M EvpsJOPtincf4wv0brmuMMIcOgq4gzbWikrji9HQRIXE6dg+psUVwvIiCX+8ozLHaZeIh9NBw6n VsNtPiSsLQY0BlteR1vfJkd+vpK+vzcSONDWqZaAo23ZZrlS73Y+/ygQnLQFKMZP2Gri/P1UhMM zhZDOwcy9J4VZi+PPzTxEsqRmPkZaLrYlHTeJXssB0IrdqBs0wt5t4ooheiCG79EkaU/hJks/j4 eYLOuR5WlWcZIv3k1lecvdmEasaMEkxYbeVZ/27qR X-Received: by 2002:a17:907:c10:b0:b88:4ddf:d6f0 with SMTP id a640c23a62f3a-b8d4f723bf6mr364772966b.61.1769448176391; Mon, 26 Jan 2026 09:22:56 -0800 (PST) MIME-Version: 1.0 From: Florents Tselai Date: Mon, 26 Jan 2026 19:22:19 +0200 X-Gm-Features: AZwV_QjdGwVrMA48kV0xDgcFfW8VdeVb3tswL74u90u5hx77r1iHdDmxd66ePps Message-ID: Subject: Patch: Add tsmatch JSONPath operator for granular Full Text Search To: pgsql-hackers Content-Type: multipart/mixed; boundary="00000000000000e84106494dc297" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000000e84106494dc297 Content-Type: multipart/alternative; boundary="00000000000000e83f06494dc295" --00000000000000e83f06494dc295 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, in real-life I work a lot with json & fts search, here's a feature I've always wished I had, but never tackle it. Until yesterday that is. SELECT jsonb_path_query(doc, '$.comments[*] ? (@.user =3D=3D "Alice" && @.b= ody tsmatch "performance")'); This patch introduces a tsmatch boolean operator to the JSONPath engine. By integrating FTS natively into path expressions, this operator allows for high-precision filtering of nested JSONB structures=E2=80=94 solving issues with structural ambiguity and query complexity. Currently, users must choose between two suboptimal paths for FTS-ing nested JSON: - Imprecise Global Indexing jsonb_to_tsvector aggregates text into a flat vector. This ignores JSON boundaries, leading to false positives when the same key (e.g., "body") appears in different contexts (e.g., a "Product Description" vs. a "Customer Review"). - Complex SQL Workarounds Achieving 100% precision requires unnesting the document via jsonb_array_elements and LATERAL joins. This leads to verbose SQL and high memory overhead from generating intermediate heap tuples. One of the most significant advantages of tsmatch is its ability to participate in multi-condition predicates within the same JSON object - something jsonb_to_tsvector cannot do. SELECT jsonb_path_query(doc, '$.comments[*] ? (@.user =3D=3D "Alice" && @.b= ody tsmatch "performance")'); In a flat vector, the association between "Alice" and "performance" is lost= . tsmatch preserves this link by evaluating the FTS predicate in-place during path traversal. While the SQL/JSON standard (ISO/IEC 9075-2) does not explicitly define an FTS operator, tsmatch is architecturally modeled after the standard-defined like_regex. The implementation follows the like_regex precedent: it is a non-indexable predicate that relies on GIN path-matching for pruning and heap re-checks for precision. Caching is scoped to the JsonPathExecContext, ensuring 'compile-once' efficiency per execution without violating the stability requirements of prepared statements. This initial implementation uses plainto_tsquery. However, the grammar is designed to support a "mode" flag (similar to like_regex flags) in future iterations to toggle between to_tsquery, websearch_to_tsquery, and phraseto_tsquery. --00000000000000e83f06494dc295 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

in real-life I work a lot with json & fts search= , here's a feature I've always wished I had,
but never tackle it. Un= til yesterday that is.

SELECT jsonb_path_query(doc, '$.comments[*] ?= (@.user =3D=3D "Alice" && @.body tsmatch "performan= ce")');

This patc= h introduces a tsmatch boolean operator to the JSONPath engine.
By integrati= ng FTS natively into path expressions,
this operator allows for high-precisi= on filtering of nested JSONB structures=E2=80=94
solving issues with structu= ral ambiguity and query complexity.

Currently, users must cho= ose between two suboptimal paths for FTS-ing nested JSON:
- Imprecise Gl= obal Indexing
jsonb_to_tsvector aggregates text into a flat vector.
This igno= res JSON boundaries, leading to false positives when the same key (e.g., &q= uot;body")
appears in different contexts (e.g., a "Product Descrip= tion" vs. a "Customer Review").

- Complex SQL Workarounds=
= Achieving 100% precision requires unnesting the document via jsonb_array_el= ements and LATERAL joins.
This leads to verbose SQL and high memory overhead= from generating intermediate heap tuples.

One of the most significant a= dvantages of tsmatch is its ability to participate in multi-condition predi= cates
within the same JSON object - something jsonb_to_tsvector cannot do.
SELECT jsonb_path_query(doc, '$.comments[*] ? (@.user =3D=3D "Al= ice" && @.body tsmatch "performance")');

In a= flat vector, the association between "Alice" and "performan= ce" is lost.
tsmatch preserves this link by evaluating the FTS predicat= e in-place during path traversal.

While the SQL/JSON standard (ISO/IEC 9= 075-2) does not explicitly define an FTS operator,
tsmatch is architecturall= y modeled after the standard-defined like_regex.

The implementation foll= ows the like_regex precedent:
it is a non-indexable predicate that relies on= GIN path-matching for pruning and heap re-checks for precision.
Caching is = scoped to the JsonPathExecContext,
ensuring 'compile-once' efficienc= y per execution without violating the stability requirements of prepared st= atements.

This initial implementation uses plainto_tsquery.
However, the = grammar is designed to support a "mode" flag (similar to like_reg= ex flags)
in future iterations to toggle between to_tsquery, websearch_to_ts= query, and phraseto_tsquery.

--00000000000000e83f06494dc295-- --00000000000000e84106494dc297 Content-Type: application/octet-stream; name="v1-0001-Add-tsmatch-JSONPath-operator-for-granular-Full-T.patch" Content-Disposition: attachment; filename="v1-0001-Add-tsmatch-JSONPath-operator-for-granular-Full-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkvfl7eo0 RnJvbSA3OWEwOWJhNjMxNzhkYjE5MjkzN2Y2ODlhYWViZWZjMTM2MGNhMGJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yZW50cyBUc2VsYWkgPGZsb3JlbnRzLnRzZWxhaUBnbWFp bC5jb20+CkRhdGU6IE1vbiwgMjYgSmFuIDIwMjYgMTk6MTc6NDEgKzAyMDAKU3ViamVjdDogW1BB VENIIHYxXSBBZGQgdHNtYXRjaCBKU09OUGF0aCBvcGVyYXRvciBmb3IgZ3JhbnVsYXIgRnVsbCBU ZXh0CiBTZWFyY2gKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBj aGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoaXMgcGF0Y2gg aW50cm9kdWNlcyB0aGUgdHNtYXRjaCBib29sZWFuIG9wZXJhdG9yIHRvIHRoZSBKU09OUGF0aCBl bmdpbmUuCkJ5IGludGVncmF0aW5nIEZUUyBuYXRpdmVseSBpbnRvIHBhdGggZXhwcmVzc2lvbnMs CnRoaXMgb3BlcmF0b3IgYWxsb3dzIGZvciBoaWdoLXByZWNpc2lvbiBmaWx0ZXJpbmcgb2YgbmVz dGVkIEpTT05CIHN0cnVjdHVyZXPigJQKc29sdmluZyBpc3N1ZXMgd2l0aCBzdHJ1Y3R1cmFsIGFt YmlndWl0eSBhbmQgcXVlcnkgY29tcGxleGl0eS4KCkN1cnJlbnRseSwgdXNlcnMgbXVzdCBjaG9v c2UgYmV0d2VlbiB0d28gc3Vib3B0aW1hbCBwYXRocyBmb3Igc2VhcmNoaW5nIG5lc3RlZCBKU09O OgotIEltcHJlY2lzZSBHbG9iYWwgSW5kZXhpbmcKanNvbmJfdG9fdHN2ZWN0b3IgYWdncmVnYXRl cyB0ZXh0IGludG8gYSBmbGF0IHZlY3Rvci4KVGhpcyBpZ25vcmVzIEpTT04gYm91bmRhcmllcywg bGVhZGluZyB0byBmYWxzZSBwb3NpdGl2ZXMgd2hlbiB0aGUgc2FtZSBrZXkgKGUuZy4sICJib2R5 IikKYXBwZWFycyBpbiBkaWZmZXJlbnQgY29udGV4dHMgKGUuZy4sIGEgIlByb2R1Y3QgRGVzY3Jp cHRpb24iIHZzLiBhICJDdXN0b21lciBSZXZpZXciKS4KCi0gQ29tcGxleCBTUUwgV29ya2Fyb3Vu ZHMKQWNoaWV2aW5nIDEwMCUgcHJlY2lzaW9uIHJlcXVpcmVzICJleHBsb2RpbmciIHRoZSBkb2N1 bWVudCB2aWEganNvbmJfYXJyYXlfZWxlbWVudHNhbmQgTEFURVJBTCBqb2lucy4KVGhpcyBsZWFk cyB0byB2ZXJib3NlIFNRTCBhbmQgaGlnaCBtZW1vcnkgb3ZlcmhlYWQgZnJvbSBnZW5lcmF0aW5n IGludGVybWVkaWF0ZSBoZWFwIHR1cGxlcy4KCk9uZSBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBh ZHZhbnRhZ2VzIG9mIHRzbWF0Y2ggaXMgaXRzIGFiaWxpdHkgdG8gcGFydGljaXBhdGUgaW4gbXVs dGktY29uZGl0aW9uIHByZWRpY2F0ZXMKd2l0aGluIHRoZSBzYW1lIEpTT04gb2JqZWN0IC0gc29t ZXRoaW5nIGpzb25iX3RvX3RzdmVjdG9yIGNhbm5vdCBkby4KClNFTEVDVCBqc29uYl9wYXRoX3F1 ZXJ5KGRvYywgJyQuY29tbWVudHNbKl0gPyAoQC51c2VyID09ICJBbGljZSIgJiYgQC5ib2R5IHRz bWF0Y2ggInBlcmZvcm1hbmNlIiknKTsKCkluIGEgZmxhdCB2ZWN0b3IsIHRoZSBhc3NvY2lhdGlv biBiZXR3ZWVuICJBbGljZSIgYW5kICJwZXJmb3JtYW5jZSIgaXMgbG9zdC4KdHNtYXRjaCBwcmVz ZXJ2ZXMgdGhpcyBsaW5rIGJ5IGV2YWx1YXRpbmcgdGhlIEZUUyBwcmVkaWNhdGUgaW4tcGxhY2Ug ZHVyaW5nIHBhdGggdHJhdmVyc2FsLgoKV2hpbGUgdGhlIFNRTC9KU09OIHN0YW5kYXJkIChJU08v SUVDIDkwNzUtMikgZG9lcyBub3QgZXhwbGljaXRseSBkZWZpbmUgYW4gRlRTIG9wZXJhdG9yLAp0 c21hdGNoIGlzIGFyY2hpdGVjdHVyYWxseSBtb2RlbGVkIGFmdGVyIHRoZSBzdGFuZGFyZC1kZWZp bmVkIGxpa2VfcmVnZXguCgpUaGUgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgbGlrZV9yZWdl eCBwcmVjZWRlbnQ6Cml0IGlzIGEgbm9uLWluZGV4YWJsZSBwcmVkaWNhdGUgdGhhdCByZWxpZXMg b24gR0lOIHBhdGgtbWF0Y2hpbmcgZm9yIHBydW5pbmcgYW5kIGhlYXAgcmUtY2hlY2tzIGZvciBw cmVjaXNpb24uCkNhY2hpbmcgaXMgc2NvcGVkIHRvIHRoZSBKc29uUGF0aEV4ZWNDb250ZXh0LApl bnN1cmluZyAnY29tcGlsZS1vbmNlJyBlZmZpY2llbmN5IHBlciBleGVjdXRpb24gd2l0aG91dCB2 aW9sYXRpbmcgdGhlIHN0YWJpbGl0eSByZXF1aXJlbWVudHMgb2YgcHJlcGFyZWQgc3RhdGVtZW50 cy4KClRoaXMgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiB1c2VzIHBsYWludG9fdHNxdWVyeS4KSG93 ZXZlciwgdGhlIGdyYW1tYXIgaXMgZGVzaWduZWQgdG8gc3VwcG9ydCBhICJtb2RlIiBmbGFnIChz aW1pbGFyIHRvIGxpa2VfcmVnZXggZmxhZ3MpCmluIGZ1dHVyZSBpdGVyYXRpb25zIHRvIHRvZ2ds ZSBiZXR3ZWVuIHRvX3RzcXVlcnksIHdlYnNlYXJjaF90b190c3F1ZXJ5LCBhbmQgcGhyYXNldG9f dHNxdWVyeS4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYyAgICAgICAgICAg ICB8IDkwICsrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBh dGhfZXhlYy5jICAgICAgICB8IDg4ICsrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9qc29ucGF0aF9ncmFtLnkgICAgICAgIHwgNjYgKysrKysrKysrKysrKy0KIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9zY2FuLmwgICAgICAgIHwgIDIgKwogc3JjL2luY2x1 ZGUvdXRpbHMvanNvbnBhdGguaCAgICAgICAgICAgICAgICAgfCAxNSArKysrCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL2pzb25iX2pzb25wYXRoLm91dCB8IDQ2ICsrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbnBhdGgub3V0ICAgICAgIHwgNDIgKysrKysrKysrCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9qc29ucGF0aC5zcWwgICAgICB8ICA4ICsrCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29ucGF0aC5zcWwgICAgICAgICAgICB8IDE0ICsrKwogOSBmaWxl cyBjaGFuZ2VkLCAzNjkgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9qc29ucGF0aC5jCmluZGV4IDE4YTgwNDZkNmNmLi44N2MyNmY3YWRjZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25wYXRoLmMKQEAgLTM0OSw2ICszNDksNTAgQEAgZmxhdHRlbkpzb25QYXRoUGFyc2VJ dGVtKFN0cmluZ0luZm8gYnVmLCBpbnQgKnJlc3VsdCwgc3RydWN0IE5vZGUgKmVzY29udGV4dCwK IAkJCQkqKGludDMyICopIChidWYtPmRhdGEgKyBvZmZzKSA9IGNobGQgLSBwb3M7CiAJCQl9CiAJ CQlicmVhazsKKwkJY2FzZSBqcGlUc01hdGNoOgorCQkJeworCQkJCWludDMyCQlleHByX29mZjsK KwkJCQlpbnQzMgkJY29uZmlnX29mZjsKKworCQkJCWV4cHJfb2ZmID0gcmVzZXJ2ZVNwYWNlRm9y SXRlbVBvaW50ZXIoYnVmKTsgLyogU2xvdCBmb3IgJ0AnICovCisJCQkJY29uZmlnX29mZiA9IHJl c2VydmVTcGFjZUZvckl0ZW1Qb2ludGVyKGJ1Zik7CS8qIFNsb3QgZm9yICd0c2NvbmZpZycgKi8K KworCQkJCS8qIFdyaXRlIHRoZSB0c3F1ZXJ5IFN0cmluZyAqLworCQkJCWFwcGVuZEJpbmFyeVN0 cmluZ0luZm8oYnVmLAorCQkJCQkJCQkJICAgJml0ZW0tPnZhbHVlLnRzbWF0Y2gudHNxdWVyeWxl biwKKwkJCQkJCQkJCSAgIHNpemVvZihpdGVtLT52YWx1ZS50c21hdGNoLnRzcXVlcnlsZW4pKTsK KwkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwKKwkJCQkJCQkJCSAgIGl0ZW0tPnZhbHVl LnRzbWF0Y2gudHNxdWVyeSwKKwkJCQkJCQkJCSAgIGl0ZW0tPnZhbHVlLnRzbWF0Y2gudHNxdWVy eWxlbik7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXDAnKTsJLyogU2FmZXR5IE51 bGwgVGVybWluYXRvciAqLworCisJCQkJLyogRmxhdHRlbiBDaGlsZCAxOiBFeHByZXNzaW9uIChA KSAqLworCQkJCWlmICghZmxhdHRlbkpzb25QYXRoUGFyc2VJdGVtKGJ1ZiwgJmNobGQsIGVzY29u dGV4dCwKKwkJCQkJCQkJCQkJICBpdGVtLT52YWx1ZS50c21hdGNoLmRvYywKKwkJCQkJCQkJCQkJ ICBuZXN0aW5nTGV2ZWwsCisJCQkJCQkJCQkJCSAgaW5zaWRlQXJyYXlTdWJzY3JpcHQpKQorCQkJ CQlyZXR1cm4gZmFsc2U7CisJCQkJLyogUGF0Y2ggdGhlIGZpcnN0IHNsb3QgKi8KKwkJCQkqKGlu dDMyICopIChidWYtPmRhdGEgKyBleHByX29mZikgPSBjaGxkIC0gcG9zOworCisJCQkJLyogRmxh dHRlbiBDaGlsZCAyOiBUU0NvbmZpZyAoT3B0aW9uYWwpICovCisJCQkJaWYgKGl0ZW0tPnZhbHVl LnRzbWF0Y2gudHNjb25maWcpCisJCQkJeworCQkJCQlpZiAoIWZsYXR0ZW5Kc29uUGF0aFBhcnNl SXRlbShidWYsICZjaGxkLCBlc2NvbnRleHQsCisJCQkJCQkJCQkJCQkgIGl0ZW0tPnZhbHVlLnRz bWF0Y2gudHNjb25maWcsCisJCQkJCQkJCQkJCQkgIG5lc3RpbmdMZXZlbCwKKwkJCQkJCQkJCQkJ CSAgaW5zaWRlQXJyYXlTdWJzY3JpcHQpKQorCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQkvKiBQ YXRjaCB0aGUgc2Vjb25kIHNsb3QgKi8KKwkJCQkJKihpbnQzMiAqKSAoYnVmLT5kYXRhICsgY29u ZmlnX29mZikgPSBjaGxkIC0gcG9zOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvKiBJ ZiBubyBjb25maWcsIHdyaXRlIDAgdG8gdGhlIHNsb3QgKE51bGwgcHRyKSAqLworCQkJCQkqKGlu dDMyICopIChidWYtPmRhdGEgKyBjb25maWdfb2ZmKSA9IDA7CisJCQkJfQorCQkJfQorCQkJYnJl YWs7CiAJCWNhc2UganBpRmlsdGVyOgogCQkJYXJnTmVzdGluZ0xldmVsKys7CiAJCQkvKiBGQUxM VEhST1VHSCAqLwpAQCAtNzU5LDYgKzgwMywzOCBAQCBwcmludEpzb25QYXRoSXRlbShTdHJpbmdJ bmZvIGJ1ZiwgSnNvblBhdGhJdGVtICp2LCBib29sIGluS2V5LAogCQkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGJ1ZiwgJyInKTsKIAkJCX0KIAorCQkJaWYgKHByaW50QnJhY2tldGVzKQorCQkJCWFw cGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKKwkJCWJyZWFrOworCQljYXNlIGpwaVRzTWF0 Y2g6CisJCQlpZiAocHJpbnRCcmFja2V0ZXMpCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVm LCAnKCcpOworCisJCQlqc3BJbml0QnlCdWZmZXIoJmVsZW0sIHYtPmJhc2UsIHYtPmNvbnRlbnQu dHNtYXRjaC5kb2MpOworCQkJcHJpbnRKc29uUGF0aEl0ZW0oYnVmLCAmZWxlbSwgZmFsc2UsCisJ CQkJCQkJICBvcGVyYXRpb25Qcmlvcml0eShlbGVtLnR5cGUpIDw9CisJCQkJCQkJICBvcGVyYXRp b25Qcmlvcml0eSh2LT50eXBlKSk7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAi IHRzbWF0Y2ggIik7CisKKwkJCWVzY2FwZV9qc29uX3dpdGhfbGVuKGJ1ZiwKKwkJCQkJCQkJIHYt PmNvbnRlbnQudHNtYXRjaC50c3F1ZXJ5LAorCQkJCQkJCQkgdi0+Y29udGVudC50c21hdGNoLnRz cXVlcnlsZW4pOworCisJCQlpZiAodi0+Y29udGVudC50c21hdGNoLnRzY29uZmlnKQorCQkJewor CQkJCUpzb25QYXRoSXRlbSBjb25maWdfaXRlbTsKKwkJCQlpbnQzMgkJY29uZmlnX2xlbjsKKwkJ CQljaGFyCSAgICpjb25maWdfc3RyOworCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYs ICIgdHNjb25maWcgIik7CisJCQkJanNwSW5pdEJ5QnVmZmVyKCZjb25maWdfaXRlbSwgdi0+YmFz ZSwgdi0+Y29udGVudC50c21hdGNoLnRzY29uZmlnKTsKKwkJCQljb25maWdfc3RyID0ganNwR2V0 U3RyaW5nKCZjb25maWdfaXRlbSwgJmNvbmZpZ19sZW4pOworCQkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGJ1ZiwgJyInKTsKKwkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwgY29uZmlnX3N0 ciwgY29uZmlnX2xlbik7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnIicpOworCQkJ fQorCiAJCQlpZiAocHJpbnRCcmFja2V0ZXMpCiAJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVm LCAnKScpOwogCQkJYnJlYWs7CkBAIC05MTQsNiArOTkwLDggQEAganNwT3BlcmF0aW9uTmFtZShK c29uUGF0aEl0ZW1UeXBlIHR5cGUpCiAJCQlyZXR1cm4gInRpbWVzdGFtcCI7CiAJCWNhc2UganBp VGltZXN0YW1wVHo6CiAJCQlyZXR1cm4gInRpbWVzdGFtcF90eiI7CisJCWNhc2UganBpVHNNYXRj aDoKKwkJCXJldHVybiAidHNtYXRjaCI7CiAJCWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5y ZWNvZ25pemVkIGpzb25wYXRoIGl0ZW0gdHlwZTogJWQiLCB0eXBlKTsKIAkJCXJldHVybiBOVUxM OwpAQCAtMTA3Miw2ICsxMTUwLDEyIEBAIGpzcEluaXRCeUJ1ZmZlcihKc29uUGF0aEl0ZW0gKnYs IGNoYXIgKmJhc2UsIGludDMyIHBvcykKIAkJCXJlYWRfaW50MzIodi0+Y29udGVudC5saWtlX3Jl Z2V4LnBhdHRlcm5sZW4sIGJhc2UsIHBvcyk7CiAJCQl2LT5jb250ZW50Lmxpa2VfcmVnZXgucGF0 dGVybiA9IGJhc2UgKyBwb3M7CiAJCQlicmVhazsKKwkJY2FzZSBqcGlUc01hdGNoOgorCQkJcmVh ZF9pbnQzMih2LT5jb250ZW50LnRzbWF0Y2guZG9jLCBiYXNlLCBwb3MpOworCQkJcmVhZF9pbnQz Mih2LT5jb250ZW50LnRzbWF0Y2gudHNjb25maWcsIGJhc2UsIHBvcyk7CisJCQlyZWFkX2ludDMy KHYtPmNvbnRlbnQudHNtYXRjaC50c3F1ZXJ5bGVuLCBiYXNlLCBwb3MpOworCQkJdi0+Y29udGVu dC50c21hdGNoLnRzcXVlcnkgPSBiYXNlICsgcG9zOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJ CQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGpzb25wYXRoIGl0ZW0gdHlwZTogJWQiLCB2LT50 eXBlKTsKIAl9CkBAIC0xMTQyLDYgKzEyMjYsNyBAQCBqc3BHZXROZXh0KEpzb25QYXRoSXRlbSAq diwgSnNvblBhdGhJdGVtICphKQogCQkJICAgdi0+dHlwZSA9PSBqcGlMYXN0IHx8CiAJCQkgICB2 LT50eXBlID09IGpwaVN0YXJ0c1dpdGggfHwKIAkJCSAgIHYtPnR5cGUgPT0ganBpTGlrZVJlZ2V4 IHx8CisJCQkgICB2LT50eXBlID09IGpwaVRzTWF0Y2ggfHwKIAkJCSAgIHYtPnR5cGUgPT0ganBp QmlnaW50IHx8CiAJCQkgICB2LT50eXBlID09IGpwaUJvb2xlYW4gfHwKIAkJCSAgIHYtPnR5cGUg PT0ganBpRGF0ZSB8fApAQCAtMTQ3NCw2ICsxNTU5LDExIEBAIGpzcElzTXV0YWJsZVdhbGtlcihK c29uUGF0aEl0ZW0gKmpwaSwgc3RydWN0IEpzb25QYXRoTXV0YWJsZUNvbnRleHQgKmN4dCkKIAkJ CQlqc3BJbml0QnlCdWZmZXIoJmFyZywganBpLT5iYXNlLCBqcGktPmNvbnRlbnQubGlrZV9yZWdl eC5leHByKTsKIAkJCQlqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKIAkJCQlicmVhazsK KwkJCWNhc2UganBpVHNNYXRjaDoKKwkJCQlBc3NlcnQoc3RhdHVzID09IGpwZHNOb25EYXRlVGlt ZSk7CisJCQkJanNwSW5pdEJ5QnVmZmVyKCZhcmcsIGpwaS0+YmFzZSwganBpLT5jb250ZW50LnRz bWF0Y2guZG9jKTsKKwkJCQlqc3BJc011dGFibGVXYWxrZXIoJmFyZywgY3h0KTsKKwkJCQlicmVh azsKIAogCQkJCS8qIGxpdGVyYWxzICovCiAJCQljYXNlIGpwaU51bGw6CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25wYXRoX2V4ZWMuYwppbmRleCA1MmFlMGJhNGNmNy4uMzViMjkxNDgzMTYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYwpAQCAtMTIzLDYgKzEyMywxMiBAQCB0eXBl ZGVmIHN0cnVjdCBKc29uTGlrZVJlZ2V4Q29udGV4dAogCWludAkJCWNmbGFnczsKIH0gSnNvbkxp a2VSZWdleENvbnRleHQ7CiAKK3R5cGVkZWYgc3RydWN0IEpzb25Uc01hdGNoQ29udGV4dAorewor CXRleHQJICAgKnZlYzsKKwlPaWQJCQl0c0NmZ19pZDsKK30JCQlKc29uVHNNYXRjaENvbnRleHQ7 CisKIC8qIFJlc3VsdCBvZiBqc29ucGF0aCBwcmVkaWNhdGUgZXZhbHVhdGlvbiAqLwogdHlwZWRl ZiBlbnVtIEpzb25QYXRoQm9vbAogewpAQCAtMzA2LDYgKzMxMiw3IEBAIHN0YXRpYyBKc29uUGF0 aEV4ZWNSZXN1bHQgZXhlY3V0ZUtleVZhbHVlTWV0aG9kKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4 dCwKIAkJCQkJCQkJCQkJCUpzb25QYXRoSXRlbSAqanNwLCBKc29uYlZhbHVlICpqYiwgSnNvblZh bHVlTGlzdCAqZm91bmQpOwogc3RhdGljIEpzb25QYXRoRXhlY1Jlc3VsdCBhcHBlbmRCb29sUmVz dWx0KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwKIAkJCQkJCQkJCQkgICBKc29uUGF0aEl0ZW0g KmpzcCwgSnNvblZhbHVlTGlzdCAqZm91bmQsIEpzb25QYXRoQm9vbCByZXMpOworc3RhdGljIEpz b25QYXRoQm9vbCBleGVjdXRlVHNNYXRjaChKc29uUGF0aEl0ZW0gKmpzcCwgSnNvbmJWYWx1ZSAq c3RyLCBKc29uYlZhbHVlICpyYXJnLCB2b2lkICpwYXJhbSk7CiBzdGF0aWMgdm9pZCBnZXRKc29u UGF0aEl0ZW0oSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LCBKc29uUGF0aEl0ZW0gKml0ZW0sCiAJ CQkJCQkJSnNvbmJWYWx1ZSAqdmFsdWUpOwogc3RhdGljIEpzb25iVmFsdWUgKkdldEpzb25QYXRo VmFyKHZvaWQgKmN4dCwgY2hhciAqdmFyTmFtZSwgaW50IHZhck5hbWVMZW4sCkBAIC04MDAsNiAr ODA3LDcgQEAgZXhlY3V0ZUl0ZW1PcHRVbndyYXBUYXJnZXQoSnNvblBhdGhFeGVjQ29udGV4dCAq Y3h0LCBKc29uUGF0aEl0ZW0gKmpzcCwKIAkJY2FzZSBqcGlFeGlzdHM6CiAJCWNhc2UganBpU3Rh cnRzV2l0aDoKIAkJY2FzZSBqcGlMaWtlUmVnZXg6CisJCWNhc2UganBpVHNNYXRjaDoKIAkJCXsK IAkJCQlKc29uUGF0aEJvb2wgc3QgPSBleGVjdXRlQm9vbEl0ZW0oY3h0LCBqc3AsIGpiLCB0cnVl KTsKIApAQCAtMTg2OCw2ICsxODc2LDE2IEBAIGV4ZWN1dGVCb29sSXRlbShKc29uUGF0aEV4ZWND b250ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAqanNwLAogCQkJCXJldHVybiBleGVjdXRlUHJlZGlj YXRlKGN4dCwganNwLCAmbGFyZywgTlVMTCwgamIsIGZhbHNlLAogCQkJCQkJCQkJCWV4ZWN1dGVM aWtlUmVnZXgsICZscmN4dCk7CiAJCQl9CisJCWNhc2UganBpVHNNYXRjaDoKKwkJCXsKKwkJCQlK c29uVHNNYXRjaENvbnRleHQgbHJjeHQgPSB7MH07CisKKwkJCQlqc3BJbml0QnlCdWZmZXIoJmxh cmcsIGpzcC0+YmFzZSwKKwkJCQkJCQkJanNwLT5jb250ZW50LnRzbWF0Y2guZG9jKTsKKworCQkJ CXJldHVybiBleGVjdXRlUHJlZGljYXRlKGN4dCwganNwLCAmbGFyZywgTlVMTCwgamIsIGZhbHNl LAorCQkJCQkJCQkJCWV4ZWN1dGVUc01hdGNoLCAmbHJjeHQpOworCQkJfQogCiAJCWNhc2UganBp RXhpc3RzOgogCQkJanNwR2V0QXJnKGpzcCwgJmxhcmcpOwpAQCAtMTg5OSw3ICsxOTE3LDYgQEAg ZXhlY3V0ZUJvb2xJdGVtKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICpq c3AsCiAKIAkJCQlyZXR1cm4gcmVzID09IGpwZXJPayA/IGpwYlRydWUgOiBqcGJGYWxzZTsKIAkJ CX0KLQogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYm9vbGVhbiBqc29ucGF0 aCBpdGVtIHR5cGU6ICVkIiwganNwLT50eXBlKTsKIAkJCXJldHVybiBqcGJVbmtub3duOwpAQCAt MjkyMiw2ICsyOTM5LDc1IEBAIGV4ZWN1dGVLZXlWYWx1ZU1ldGhvZChKc29uUGF0aEV4ZWNDb250 ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAqanNwLAogCiAJcmV0dXJuIHJlczsKIH0KKyNpbmNsdWRl ICJ0c2VhcmNoL3RzX3V0aWxzLmgiCisjaW5jbHVkZSAidHNlYXJjaC90c19jYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL3JlZ3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgor CitzdGF0aWMgSnNvblBhdGhCb29sCitleGVjdXRlVHNNYXRjaChKc29uUGF0aEl0ZW0gKmpzcCwg SnNvbmJWYWx1ZSAqc3RyLCBKc29uYlZhbHVlICpyYXJnLAorCQkJICAgdm9pZCAqcGFyYW0pCit7 CisJSnNvblRzTWF0Y2hDb250ZXh0ICpjeHQgPSBwYXJhbTsKKwl0ZXh0CSAgICpkb2M7CisJRGF0 dW0JCXRzcXVlcnk7CisJRGF0dW0JCXRzdmVjdG9yOworCWJvb2wJCW1hdGNoOworCisJaWYgKCEo c3RyID0gZ2V0U2NhbGFyKHN0ciwgamJ2U3RyaW5nKSkpCisJCXJldHVybiBqcGJVbmtub3duOwor CisJLyogU2V0dXAgdGhlIENvbnRleHQgKFJ1biBvbmx5IG9uY2UgcGVyIHByZWRpY2F0ZSkgKi8K KwlpZiAoIWN4dC0+dmVjKQorCXsKKwkJLyogQ2FjaGUgdGhlIHRzcXVlcnkgKi8KKwkJY3h0LT52 ZWMgPSBjc3RyaW5nX3RvX3RleHRfd2l0aF9sZW4oanNwLT5jb250ZW50LnRzbWF0Y2gudHNxdWVy eSwKKwkJCQkJCQkJCQkJanNwLT5jb250ZW50LnRzbWF0Y2gudHNxdWVyeWxlbik7CisKKwkJLyog UmVzb2x2ZSB0aGUgdHNjb25maWcgT0lEIGZyb20gdGhlIG9mZnNldCAqLworCQlpZiAoanNwLT5j b250ZW50LnRzbWF0Y2gudHNjb25maWcgIT0gMCkKKwkJeworCQkJSnNvblBhdGhJdGVtIGNvbmZp Z19pdGVtOworCQkJaW50MzIJCWNvbmZpZ19sZW47CisJCQljaGFyCSAgICpjb25maWdfc3RyOwor CisJCQlqc3BJbml0QnlCdWZmZXIoJmNvbmZpZ19pdGVtLCBqc3AtPmJhc2UsIGpzcC0+Y29udGVu dC50c21hdGNoLnRzY29uZmlnKTsKKwkJCWNvbmZpZ19zdHIgPSBqc3BHZXRTdHJpbmcoJmNvbmZp Z19pdGVtLCAmY29uZmlnX2xlbik7OworCisJCQljeHQtPnRzQ2ZnX2lkID0gZ2V0X3RzX2NvbmZp Z19vaWQoc3RyaW5nVG9RdWFsaWZpZWROYW1lTGlzdChjb25maWdfc3RyLCBOVUxMKSwgdHJ1ZSk7 CisJCX0KKwkJZWxzZQorCQl7CisJCQljeHQtPnRzQ2ZnX2lkID0gZ2V0VFNDdXJyZW50Q29uZmln KHRydWUpOworCQl9CisJfQorCisJLyoKKwkgKiBlbG9nKE5PVElDRSwgInRzX2NvbmZpZz1bJXNd IGNmZ0lkPVsldV0gdmVjdG9yPVslLipzXSBxdWVyeT1bJXNdIiwKKwkgKiBjb25maWdfbmFtZSwg Y3h0LT5jZmdJZCwgc3RyLT52YWwuc3RyaW5nLmxlbiwgc3RyLT52YWwuc3RyaW5nLnZhbCwKKwkg KiBqc3AtPmNvbnRlbnQudHNtYXRjaC5xdWVyeSk7CisJICovCisKKworCWRvYyA9IGNzdHJpbmdf dG9fdGV4dF93aXRoX2xlbihzdHItPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCQkgICBzdHItPnZh bC5zdHJpbmcubGVuKTsKKworCXRzdmVjdG9yID0gRGlyZWN0RnVuY3Rpb25DYWxsMih0b190c3Zl Y3Rvcl9ieWlkLAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKGN4dC0+dHNDZmdfaWQpLAor CQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0oZG9jKSk7CisKKwl0c3F1ZXJ5ID0gRGlyZWN0RnVu Y3Rpb25DYWxsMihwbGFpbnRvX3RzcXVlcnlfYnlpZCwKKwkJCQkJCQkJICBPYmplY3RJZEdldERh dHVtKGN4dC0+dHNDZmdfaWQpLAorCQkJCQkJCQkgIFBvaW50ZXJHZXREYXR1bShjeHQtPnZlYykp OworCisKKwltYXRjaCA9IERhdHVtR2V0Qm9vbChEaXJlY3RGdW5jdGlvbkNhbGwyKHRzX21hdGNo X3ZxLAorCQkJCQkJCQkJCQkgdHN2ZWN0b3IsCisJCQkJCQkJCQkJCSB0c3F1ZXJ5KSk7CisKKwly ZXR1cm4gbWF0Y2ggPyBqcGJUcnVlIDoganBiRmFsc2U7Cit9CisKIAogLyoKICAqIENvbnZlcnQg Ym9vbGVhbiBleGVjdXRpb24gc3RhdHVzICdyZXMnIHRvIGEgYm9vbGVhbiBKU09OIGl0ZW0gYW5k IGV4ZWN1dGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9ncmFt LnkgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZ3JhbS55CmluZGV4IDQ1NDM2MjZm ZmM4Li44OTQwMDdhZDk5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25w YXRoX2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZ3JhbS55CkBA IC00Myw2ICs0MywxMSBAQCBzdGF0aWMgYm9vbCBtYWtlSXRlbUxpa2VSZWdleChKc29uUGF0aFBh cnNlSXRlbSAqZXhwciwKIAkJCQkJCQkgIEpzb25QYXRoU3RyaW5nICpmbGFncywKIAkJCQkJCQkg IEpzb25QYXRoUGFyc2VJdGVtICoqIHJlc3VsdCwKIAkJCQkJCQkgIHN0cnVjdCBOb2RlICplc2Nv bnRleHQpOworc3RhdGljIGJvb2wgbWFrZUl0ZW1Uc01hdGNoKEpzb25QYXRoUGFyc2VJdGVtICpk b2MsCisJCQkJCQkJICBKc29uUGF0aFN0cmluZyAqdHNxdWVyeSwKKwkJCQkJCQkgIEpzb25QYXRo U3RyaW5nICp0c2NvbmZpZywKKwkJCQkJCQkgIEpzb25QYXRoUGFyc2VJdGVtICoqIHJlc3VsdCwK KwkJCQkJCQkgIHN0cnVjdCBOb2RlICplc2NvbnRleHQpOwogCiAvKgogICogQmlzb24gZG9lc24n dCBhbGxvY2F0ZSBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGxpdmUgYWNyb3NzIHBhcnNlciBjYWxs cywKQEAgLTgxLDcgKzg2LDcgQEAgc3RhdGljIGJvb2wgbWFrZUl0ZW1MaWtlUmVnZXgoSnNvblBh dGhQYXJzZUl0ZW0gKmV4cHIsCiAldG9rZW4JPHN0cj4JCUlERU5UX1AgU1RSSU5HX1AgTlVNRVJJ Q19QIElOVF9QIFZBUklBQkxFX1AKICV0b2tlbgk8c3RyPgkJT1JfUCBBTkRfUCBOT1RfUAogJXRv a2VuCTxzdHI+CQlMRVNTX1AgTEVTU0VRVUFMX1AgRVFVQUxfUCBOT1RFUVVBTF9QIEdSRUFURVJF UVVBTF9QIEdSRUFURVJfUAotJXRva2VuCTxzdHI+CQlBTllfUCBTVFJJQ1RfUCBMQVhfUCBMQVNU X1AgU1RBUlRTX1AgV0lUSF9QIExJS0VfUkVHRVhfUCBGTEFHX1AKKyV0b2tlbgk8c3RyPgkJQU5Z X1AgU1RSSUNUX1AgTEFYX1AgTEFTVF9QIFNUQVJUU19QIFdJVEhfUCBMSUtFX1JFR0VYX1AgRkxB R19QIFRTTUFUQ0hfUCBUU0NPTkZJR19QCiAldG9rZW4JPHN0cj4JCUFCU19QIFNJWkVfUCBUWVBF X1AgRkxPT1JfUCBET1VCTEVfUCBDRUlMSU5HX1AgS0VZVkFMVUVfUAogJXRva2VuCTxzdHI+CQlE QVRFVElNRV9QCiAldG9rZW4JPHN0cj4JCUJJR0lOVF9QIEJPT0xFQU5fUCBEQVRFX1AgREVDSU1B TF9QIElOVEVHRVJfUCBOVU1CRVJfUApAQCAtMTg3LDYgKzE5MiwyMCBAQCBwcmVkaWNhdGU6CiAJ CQlZWUFCT1JUOwogCQkkJCA9IGpwcGl0ZW07CiAJfQorCXwgZXhwciBUU01BVENIX1AgU1RSSU5H X1AKKwl7CisJCUpzb25QYXRoUGFyc2VJdGVtICpqcHBpdGVtOworCQlpZiAoISBtYWtlSXRlbVRz TWF0Y2goJDEsICYkMywgTlVMTCwgJmpwcGl0ZW0sIGVzY29udGV4dCkpCisJCQlZWUFCT1JUOwor CQkkJCA9IGpwcGl0ZW07CisJfQorCXwgZXhwciBUU01BVENIX1AgU1RSSU5HX1AgVFNDT05GSUdf UCBTVFJJTkdfUAorCXsKKwkJSnNvblBhdGhQYXJzZUl0ZW0gKmpwcGl0ZW07CisJCWlmICghIG1h a2VJdGVtVHNNYXRjaCgkMSwgJiQzLCAmJDUsICZqcHBpdGVtLCBlc2NvbnRleHQpKQorCQkJWVlB Qk9SVDsKKwkJJCQgPSBqcHBpdGVtOworCX0KIAk7CiAKIHN0YXJ0c193aXRoX2luaXRpYWw6CkBA IC0zNTcsNiArMzc2LDggQEAga2V5X25hbWU6CiAJfCBUSU1FX1RaX1AKIAl8IFRJTUVTVEFNUF9Q CiAJfCBUSU1FU1RBTVBfVFpfUAorCXwgVFNDT05GSUdfUAorCXwgVFNNQVRDSF9QCiAJOwogCiBt ZXRob2Q6CkBAIC02ODMsMyArNzA0LDQ2IEBAIGpzcENvbnZlcnRSZWdleEZsYWdzKHVpbnQzMiB4 ZmxhZ3MsIGludCAqcmVzdWx0LCBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KQogCiAJcmV0dXJuIHRy dWU7CiB9CisKKworc3RhdGljIGJvb2wKK21ha2VJdGVtVHNNYXRjaChKc29uUGF0aFBhcnNlSXRl bSAqZG9jLAorCQkJCUpzb25QYXRoU3RyaW5nICp0c3F1ZXJ5LAorCQkJCUpzb25QYXRoU3RyaW5n ICp0c2NvbmZpZywKKwkJCQlKc29uUGF0aFBhcnNlSXRlbSAqKnJlc3VsdCwKKwkJCQlzdHJ1Y3Qg Tm9kZSAqZXNjb250ZXh0KQoreworCS8qIEFsbG9jYXRlIHRoZSBwYXJlbnQgbm9kZSAqLworCUpz b25QYXRoUGFyc2VJdGVtICp2ID0gbWFrZUl0ZW1UeXBlKGpwaVRzTWF0Y2gpOworCisJLyogQXR0 YWNoIHRoZSBjaGlsZCBleHByZXNzaW9uIChAKSAqLworCXYtPnZhbHVlLnRzbWF0Y2guZG9jID0g ZG9jOworCisJLyogQXR0YWNoIHRoZSBQYXR0ZXJuIChTdG9yZWQgYXMgcmF3IGNoYXIqIGJlY2F1 c2UgaXQncyBhbHdheXMgYSBsZWFmKSAqLworCXYtPnZhbHVlLnRzbWF0Y2gudHNxdWVyeSA9IHRz cXVlcnktPnZhbDsKKwl2LT52YWx1ZS50c21hdGNoLnRzcXVlcnlsZW4gPSB0c3F1ZXJ5LT5sZW47 CisKKwkvKiBIYW5kbGUgdGhlIENvbmZpZ3VyYXRpb24gKFN0b3JlZCBhcyBhIE5vZGUpICovCisJ aWYgKHRzY29uZmlnKQorCXsKKwkJLyoKKwkJICogVGhlIGZsYXR0ZW5lciBleHBlY3RzIHRzY29u ZmlnIHRvIGJlIGEgSnNvblBhdGhQYXJzZUl0ZW0qLgorCQkgKiBTbyB3ZSB3cmFwIHRoZSByYXcg c3RyaW5nIGluIGEganBpU3RyaW5nIG5vZGUuCisJCSAqLworCQlKc29uUGF0aFBhcnNlSXRlbSAq Y29uZiA9IG1ha2VJdGVtVHlwZShqcGlTdHJpbmcpOworCisJCWNvbmYtPnZhbHVlLnN0cmluZy52 YWwgPSB0c2NvbmZpZy0+dmFsOworCQljb25mLT52YWx1ZS5zdHJpbmcubGVuID0gdHNjb25maWct PmxlbjsKKworCQkvKiBBc3NpZ24gdGhlIHBvaW50ZXIgKi8KKwkJdi0+dmFsdWUudHNtYXRjaC50 c2NvbmZpZyA9IGNvbmY7CisJfQorCWVsc2UKKwl7CisJCXYtPnZhbHVlLnRzbWF0Y2gudHNjb25m aWcgPSBOVUxMOworCX0KKworCS8qIFN1Y2Nlc3MgKi8KKwkqcmVzdWx0ID0gdjsKKwlyZXR1cm4g dHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9zY2Fu LmwgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfc2Nhbi5sCmluZGV4IDM4YzU4NDFl ODc5Li44NmE5YzAzNDM2YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25w YXRoX3NjYW4ubAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfc2Nhbi5sCkBA IC00MjcsOSArNDI3LDExIEBAIHN0YXRpYyBjb25zdCBKc29uUGF0aEtleXdvcmQga2V5d29yZHNb XSA9IHsKIAl7NywgZmFsc2UsIERFQ0lNQUxfUCwgImRlY2ltYWwifSwKIAl7NywgZmFsc2UsIElO VEVHRVJfUCwgImludGVnZXIifSwKIAl7NywgZmFsc2UsIFRJTUVfVFpfUCwgInRpbWVfdHoifSwK Kwl7NywgZmFsc2UsIFRTTUFUQ0hfUCwgInRzbWF0Y2gifSwKIAl7NywgZmFsc2UsIFVOS05PV05f UCwgInVua25vd24ifSwKIAl7OCwgZmFsc2UsIERBVEVUSU1FX1AsICJkYXRldGltZSJ9LAogCXs4 LCBmYWxzZSwgS0VZVkFMVUVfUCwgImtleXZhbHVlIn0sCisJezgsIGZhbHNlLCBUU0NPTkZJR19Q LCAidHNjb25maWcifSwKIAl7OSwgZmFsc2UsIFRJTUVTVEFNUF9QLCAidGltZXN0YW1wIn0sCiAJ ezEwLCBmYWxzZSwgTElLRV9SRUdFWF9QLCAibGlrZV9yZWdleCJ9LAogCXsxMiwgZmFsc2UsIFRJ TUVTVEFNUF9UWl9QLCAidGltZXN0YW1wX3R6In0sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91 dGlscy9qc29ucGF0aC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaAppbmRleCA2ZjUy OWQ3NGRjZC4uMTI4OTllMGM0OTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25w YXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaApAQCAtMTA0LDYgKzEwNCw3 IEBAIHR5cGVkZWYgZW51bSBKc29uUGF0aEl0ZW1UeXBlCiAJanBpTGFzdCwJCQkJCS8qIExBU1Qg YXJyYXkgc3Vic2NyaXB0ICovCiAJanBpU3RhcnRzV2l0aCwJCQkJLyogU1RBUlRTIFdJVEggcHJl ZGljYXRlICovCiAJanBpTGlrZVJlZ2V4LAkJCQkvKiBMSUtFX1JFR0VYIHByZWRpY2F0ZSAqLwor CWpwaVRzTWF0Y2gsCQkJCQkvKiBUU01BVENIIHByZWRpY2F0ZSAqLwogCWpwaUJpZ2ludCwJCQkJ CS8qIC5iaWdpbnQoKSBpdGVtIG1ldGhvZCAqLwogCWpwaUJvb2xlYW4sCQkJCQkvKiAuYm9vbGVh bigpIGl0ZW0gbWV0aG9kICovCiAJanBpRGF0ZSwJCQkJCS8qIC5kYXRlKCkgaXRlbSBtZXRob2Qg Ki8KQEAgLTE4OCw2ICsxODksMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvblBhdGhJdGVtCiAJCQlp bnQzMgkJcGF0dGVybmxlbjsKIAkJCXVpbnQzMgkJZmxhZ3M7CiAJCX0JCQlsaWtlX3JlZ2V4Owor CQlzdHJ1Y3QKKwkJeworCQkJaW50MzIJCWRvYzsKKwkJCWNoYXIJICAgKnRzcXVlcnk7CisJCQl1 aW50MzIJCXRzcXVlcnlsZW47CisJCQlpbnQzMgkJdHNjb25maWc7CisJCX0JCQl0c21hdGNoOwog CX0JCQljb250ZW50OwogfSBKc29uUGF0aEl0ZW07CiAKQEAgLTI2Niw2ICsyNzQsMTMgQEAgc3Ry dWN0IEpzb25QYXRoUGFyc2VJdGVtCiAJCQl1aW50MzIJCWxlbjsKIAkJCWNoYXIJICAgKnZhbDsJ LyogY291bGQgbm90IGJlIG5vdCBudWxsLXRlcm1pbmF0ZWQgKi8KIAkJfQkJCXN0cmluZzsKKwkJ c3RydWN0CisJCXsKKwkJCUpzb25QYXRoUGFyc2VJdGVtICpkb2M7CisJCQljaGFyCSAgICp0c3F1 ZXJ5OworCQkJdWludDMyCQl0c3F1ZXJ5bGVuOworCQkJSnNvblBhdGhQYXJzZUl0ZW0gKnRzY29u ZmlnOworCQl9CQkJdHNtYXRjaDsKIAl9CQkJdmFsdWU7CiB9OwogCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25iX2pzb25wYXRoLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvanNvbmJfanNvbnBhdGgub3V0CmluZGV4IDRiY2Q0ZTkxYTI5Li5lZGM4MTJi OWEzMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9qc29ucGF0 aC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9qc29ucGF0aC5vdXQK QEAgLTQ1MTAsMyArNDUxMCw0OSBAQCBPUkRFUiBCWSBzMS5udW0sIHMyLm51bTsKICB7InMiOiAi QiJ9ICAgIHwgeyJzIjogIkIifSAgICB8IGZhbHNlIHwgdHJ1ZSAgfCB0cnVlICB8IHRydWUgIHwg ZmFsc2UKICgxNDQgcm93cykKIAorc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tudWxsLCAxLCAi cnVubmluZyIsICJydW5zIiwgInJhbiIsICJydW4iLCAicnVubmVyIiwgImpvZ2dpbmciXScsICds YXggJFsqXSA/IChAIHRzbWF0Y2ggImZseSIgdHNjb25maWcgImVuZ2xpc2giKScpOworIGpzb25i X3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKygwIHJvd3MpCisKK3NlbGVjdCBqc29u Yl9wYXRoX3F1ZXJ5KCdbbnVsbCwgMSwgInJ1bm5pbmciLCAicnVucyIsICJyYW4iLCAicnVuIiwg InJ1bm5lciIsICJqb2dnaW5nIl0nLCAnbGF4ICRbKl0gPyAoQCB0c21hdGNoICJydW4iIHRzY29u ZmlnICJlbmdsaXNoIiknKTsKKyBqc29uYl9wYXRoX3F1ZXJ5IAorLS0tLS0tLS0tLS0tLS0tLS0t CisgInJ1bm5pbmciCisgInJ1bnMiCisgInJ1biIKKygzIHJvd3MpCisKK3NlbGVjdCBqc29uYl9w YXRoX3F1ZXJ5KCdbbnVsbCwgMSwgInJ1bm5pbmciLCAicnVucyIsICJyYW4iLCAicnVuIiwgInJ1 bm5lciIsICJqb2dnaW5nIl0nLCAnbGF4ICRbKl0gPyAoQCB0c21hdGNoICJydW4iIHRzY29uZmln ICJzaW1wbGUiKScpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAi cnVuIgorKDEgcm93KQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW251bGwsIDEsICJQb3N0 Z3JlU1FMIiwgInBvc3RncmVzIiwgIlBPU1RHUkVTIiwgImRhdGFiYXNlIl0nLCAnbGF4ICRbKl0g PyAoQCB0c21hdGNoICJQb3N0Z3JlcyIgdHNjb25maWcgImVuZ2xpc2giKScpOworIGpzb25iX3Bh dGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAicG9zdGdyZXMiCisgIlBPU1RHUkVTIgor KDIgcm93cykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tudWxsLCAxLCAiUG9zdGdyZVNR TCIsICJwb3N0Z3JlcyIsICJQT1NUR1JFUyIsICJkYXRhYmFzZSJdJywgJ2xheCAkWypdID8gKEAg dHNtYXRjaCAiUG9zdGdyZXMiIHRzY29uZmlnICJzaW1wbGUiKScpOworIGpzb25iX3BhdGhfcXVl cnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAicG9zdGdyZXMiCisgIlBPU1RHUkVTIgorKDIgcm93 cykKKworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1siZmFzdCBjYXIiLCAic3VwZXIgZmFzdCBj YXIiLCAiZmFzdCBhbmQgZnVyaW91cyIsICJzbG93IGNhciJdJywgJ2xheCAkWypdID8gKEAgdHNt YXRjaCAiZmFzdCBjYXIiIHRzY29uZmlnICJlbmdsaXNoIiknKTsKKyBqc29uYl9wYXRoX3F1ZXJ5 IAorLS0tLS0tLS0tLS0tLS0tLS0tCisgImZhc3QgY2FyIgorICJzdXBlciBmYXN0IGNhciIKKygy IHJvd3MpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbImZhdCBjYXQiLCAiY2F0IGZhdCIs ICJmYXQgcmF0cyJdJywgJ2xheCAkWypdID8gKEAgdHNtYXRjaCAiZmF0ICYgcmF0IiB0c2NvbmZp ZyAiZW5nbGlzaCIpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQor ICJmYXQgcmF0cyIKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9qc29ucGF0aC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25wYXRoLm91 dAppbmRleCBmZDliZDc1NWY1Mi4uODRhMTFhM2ViZWIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvanNvbnBhdGgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvanNvbnBhdGgub3V0CkBAIC0xMjk0LDMgKzEyOTQsNDUgQEAgRlJPTSB1bm5lc3QoQVJSQVlb JyQgPyAoQCBsaWtlX3JlZ2V4ICJwYXR0ZXJuIiBmbGFnICJzbWl4cSIpJzo6dGV4dCwKICAxYSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGYgIHwgNDI2MDEgICAgICAg ICAgfCB0cmFpbGluZyBqdW5rIGFmdGVyIG51bWVyaWMgbGl0ZXJhbCBhdCBvciBuZWFyICIxYSIg b2YganNvbnBhdGggaW5wdXQgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8IAogKDUgcm93cykKIAorLS0gdHNtYXRjaCAoRnVsbCBUZXh0 IFNlYXJjaCkKKy0tIGJhc2ljIHN1Y2Nlc3MKK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2ggInNpbXBs ZSIpJzo6anNvbnBhdGg7CisgICAgICAgIGpzb25wYXRoICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICQ/KEAgdHNtYXRjaCAic2ltcGxlIikKKygxIHJvdykKKworc2VsZWN0ICck ID8gKEAgdHNtYXRjaCAicnVubmluZyIgdHNjb25maWcgImVuZ2xpc2giKSc6Ompzb25wYXRoOwor ICAgICAgICAgICAgICAgICAganNvbnBhdGggICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJD8oQCB0c21hdGNoICJydW5uaW5n IiB0c2NvbmZpZyAiZW5nbGlzaCIpCisoMSByb3cpCisKK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2gg ImZhc3QgJiBmdXJpb3VzIiB0c2NvbmZpZyAic2ltcGxlIiknOjpqc29ucGF0aDsKKyAgICAgICAg ICAgICAgICAgICAgIGpzb25wYXRoICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICQ/KEAgdHNtYXRjaCAiZmFz dCAmIGZ1cmlvdXMiIHRzY29uZmlnICJzaW1wbGUiKQorKDEgcm93KQorCitzZWxlY3QgJyRbKl0g PyAoQC50aXRsZSB0c21hdGNoICJnb2QiICYmIEAucmF0aW5nID4gNSknOjpqc29ucGF0aDsKKyAg ICAgICAgICAgICAgICAgICAgIGpzb25wYXRoICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICRbKl0/KEAuInRp dGxlIiB0c21hdGNoICJnb2QiICYmIEAuInJhdGluZyIgPiA1KQorKDEgcm93KQorCitzZWxlY3Qg JyQgPyAoQCB0c21hdGNoICRwYXR0ZXJuKSc6Ompzb25wYXRoOworRVJST1I6ICBzeW50YXggZXJy b3IgYXQgb3IgbmVhciAiJHBhdHRlcm4iIG9mIGpzb25wYXRoIGlucHV0CitMSU5FIDE6IHNlbGVj dCAnJCA/IChAIHRzbWF0Y2ggJHBhdHRlcm4pJzo6anNvbnBhdGg7CisgICAgICAgICAgICAgICBe CistLSBvbmx5IHN0cmluZyBsaXRlcmFscyAobm8gdmFyaWFibGVzKSBhcmUgYWxsb3dlZCBmb3Ig dHNxdWVyeQorc2VsZWN0ICckID8gKEAgdHNtYXRjaCAkdmFyIHRzY29uZmlnICJlbmdsaXNoIikn Ojpqc29ucGF0aDsKK0VSUk9SOiAgc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIiR2YXIiIG9mIGpz b25wYXRoIGlucHV0CitMSU5FIDE6IHNlbGVjdCAnJCA/IChAIHRzbWF0Y2ggJHZhciB0c2NvbmZp ZyAiZW5nbGlzaCIpJzo6anNvbnBhdGg7CisgICAgICAgICAgICAgICBeCistLSBpZiBhIHRzY29u ZmlnIGRvZXNuJ3QgZXhpc3QgaXQgc2hvdWxkIHBhcnNlIG5vbmV0aGVsZXNzIChleGVjdXRvciB3 aWxsIGZhaWwgaXQpCitzZWxlY3QgJyQgPyAoQCB0c21hdGNoICJydW5uaW5nIiB0c2NvbmZpZyAi d3Jvbmdjb25maWciKSc6Ompzb25wYXRoOworICAgICAgICAgICAgICAgICAgICBqc29ucGF0aCAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAkPyhAIHRzbWF0Y2ggInJ1bm5pbmciIHRzY29uZmlnICJ3cm9uZ2NvbmZp ZyIpCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX2pz b25wYXRoLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iX2pzb25wYXRoLnNxbAppbmRl eCAzZTg5MjlhNTI2OS4uZjlhZTU4ODllZTIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2pzb25iX2pzb25wYXRoLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29uYl9q c29ucGF0aC5zcWwKQEAgLTExNDcsMyArMTE0NywxMSBAQCBTRUxFQ1QKIAlqc29uYl9wYXRoX3F1 ZXJ5X2ZpcnN0KHMxLmosICckLnMgPiAkcycsIHZhcnMgPT4gczIuaikgZ3QKIEZST00gc3RyIHMx LCBzdHIgczIKIE9SREVSIEJZIHMxLm51bSwgczIubnVtOworCitzZWxlY3QganNvbmJfcGF0aF9x dWVyeSgnW251bGwsIDEsICJydW5uaW5nIiwgInJ1bnMiLCAicmFuIiwgInJ1biIsICJydW5uZXIi LCAiam9nZ2luZyJdJywgJ2xheCAkWypdID8gKEAgdHNtYXRjaCAiZmx5IiB0c2NvbmZpZyAiZW5n bGlzaCIpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW251bGwsIDEsICJydW5uaW5nIiwg InJ1bnMiLCAicmFuIiwgInJ1biIsICJydW5uZXIiLCAiam9nZ2luZyJdJywgJ2xheCAkWypdID8g KEAgdHNtYXRjaCAicnVuIiB0c2NvbmZpZyAiZW5nbGlzaCIpJyk7CitzZWxlY3QganNvbmJfcGF0 aF9xdWVyeSgnW251bGwsIDEsICJydW5uaW5nIiwgInJ1bnMiLCAicmFuIiwgInJ1biIsICJydW5u ZXIiLCAiam9nZ2luZyJdJywgJ2xheCAkWypdID8gKEAgdHNtYXRjaCAicnVuIiB0c2NvbmZpZyAi c2ltcGxlIiknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbbnVsbCwgMSwgIlBvc3RncmVT UUwiLCAicG9zdGdyZXMiLCAiUE9TVEdSRVMiLCAiZGF0YWJhc2UiXScsICdsYXggJFsqXSA/IChA IHRzbWF0Y2ggIlBvc3RncmVzIiB0c2NvbmZpZyAiZW5nbGlzaCIpJyk7CitzZWxlY3QganNvbmJf cGF0aF9xdWVyeSgnW251bGwsIDEsICJQb3N0Z3JlU1FMIiwgInBvc3RncmVzIiwgIlBPU1RHUkVT IiwgImRhdGFiYXNlIl0nLCAnbGF4ICRbKl0gPyAoQCB0c21hdGNoICJQb3N0Z3JlcyIgdHNjb25m aWcgInNpbXBsZSIpJyk7CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnWyJmYXN0IGNhciIsICJz dXBlciBmYXN0IGNhciIsICJmYXN0IGFuZCBmdXJpb3VzIiwgInNsb3cgY2FyIl0nLCAnbGF4ICRb Kl0gPyAoQCB0c21hdGNoICJmYXN0IGNhciIgdHNjb25maWcgImVuZ2xpc2giKScpOworc2VsZWN0 IGpzb25iX3BhdGhfcXVlcnkoJ1siZmF0IGNhdCIsICJjYXQgZmF0IiwgImZhdCByYXRzIl0nLCAn bGF4ICRbKl0gPyAoQCB0c21hdGNoICJmYXQgJiByYXQiIHRzY29uZmlnICJlbmdsaXNoIiknKTsK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25wYXRoLnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL2pzb25wYXRoLnNxbAppbmRleCA2MWE1MjcwZDRlOC4uZWRiNTE1MjA0YmEg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25wYXRoLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9qc29ucGF0aC5zcWwKQEAgLTI2NSwzICsyNjUsMTcgQEAgRlJPTSB1 bm5lc3QoQVJSQVlbJyQgPyAoQCBsaWtlX3JlZ2V4ICJwYXR0ZXJuIiBmbGFnICJzbWl4cSIpJzo6 dGV4dCwKICAgICAgICAgICAgICAgICAgICcwMCcsCiAgICAgICAgICAgICAgICAgICAnMWEnXSkg c3RyLAogICAgICBMQVRFUkFMIHBnX2lucHV0X2Vycm9yX2luZm8oc3RyLCAnanNvbnBhdGgnKSBh cyBlcnJpbmZvOworCistLSB0c21hdGNoIChGdWxsIFRleHQgU2VhcmNoKQorCistLSBiYXNpYyBz dWNjZXNzCitzZWxlY3QgJyQgPyAoQCB0c21hdGNoICJzaW1wbGUiKSc6Ompzb25wYXRoOworc2Vs ZWN0ICckID8gKEAgdHNtYXRjaCAicnVubmluZyIgdHNjb25maWcgImVuZ2xpc2giKSc6Ompzb25w YXRoOworc2VsZWN0ICckID8gKEAgdHNtYXRjaCAiZmFzdCAmIGZ1cmlvdXMiIHRzY29uZmlnICJz aW1wbGUiKSc6Ompzb25wYXRoOworc2VsZWN0ICckWypdID8gKEAudGl0bGUgdHNtYXRjaCAiZ29k IiAmJiBALnJhdGluZyA+IDUpJzo6anNvbnBhdGg7CitzZWxlY3QgJyQgPyAoQCB0c21hdGNoICRw YXR0ZXJuKSc6Ompzb25wYXRoOworCistLSBvbmx5IHN0cmluZyBsaXRlcmFscyAobm8gdmFyaWFi bGVzKSBhcmUgYWxsb3dlZCBmb3IgdHNxdWVyeQorc2VsZWN0ICckID8gKEAgdHNtYXRjaCAkdmFy IHRzY29uZmlnICJlbmdsaXNoIiknOjpqc29ucGF0aDsKKy0tIGlmIGEgdHNjb25maWcgZG9lc24n dCBleGlzdCBpdCBzaG91bGQgcGFyc2Ugbm9uZXRoZWxlc3MgKGV4ZWN1dG9yIHdpbGwgZmFpbCBp dCkKK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2ggInJ1bm5pbmciIHRzY29uZmlnICJ3cm9uZ2NvbmZp ZyIpJzo6anNvbnBhdGg7Ci0tIAoyLjUyLjAKCg== --00000000000000e84106494dc297 Content-Type: application/octet-stream; name="tsmatch_bench.out" Content-Disposition: attachment; filename="tsmatch_bench.out" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkvfnhpw1 U0VUIGVuYWJsZV9tZW1vaXplID0gT0ZGOwpTRVQKVGltaW5nIGlzIG9uLgpEUk9QIFRBQkxFIElG IEVYSVNUUyBmdHNfanNvbl90ZXN0OwpEUk9QIFRBQkxFClRpbWU6IDEwNzQuOTMyIG1zICgwMDow MS4wNzUpCkNSRUFURSBUQUJMRSBmdHNfanNvbl90ZXN0IChpZCBzZXJpYWwgUFJJTUFSWSBLRVks IGRvYyBqc29uYik7CkNSRUFURSBUQUJMRQpUaW1lOiA4LjA4MiBtcwpJTlNFUlQgSU5UTyBmdHNf anNvbl90ZXN0IChkb2MpClNFTEVDVCBqc29uYl9idWlsZF9vYmplY3QoCiAgICAgICAgICAgICAg ICd0aXRsZScsIENBU0UgV0hFTiBpICUgMTAgPSAwIFRIRU4gJ2RhdGFiYXNlIHBlcmZvcm1hbmNl IG9wdGltaXphdGlvbicgRUxTRSAnc3RhbmRhcmQgZGF0YWJhc2UnIEVORCwKICAgICAgICAgICAg ICAgJ21ldGFkYXRhJywganNvbmJfYnVpbGRfb2JqZWN0KCd0YWdzJywganNvbmJfYnVpbGRfYXJy YXkoJ3RlY2gnLCAnc3FsJykpLAogICAgICAgICAgICAgICAnY29tbWVudHMnLCBqc29uYl9idWls ZF9hcnJheSgKICAgICAgICAgICAgICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoJ2JvZHkn LCAndGhpcyBpcyBhIGNvbW1lbnQnKSwKICAgICAgICAgICAgICAgICAgICAgICBqc29uYl9idWls ZF9vYmplY3QoJ2JvZHknLCBDQVNFIFdIRU4gaSAlIDIwID0gMCBUSEVOICdpIHNhdyBhIHBlcmZv cm1hbmNlIGdhaW4nIEVMU0UgJ25vIGdhaW4nIEVORCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQogICAgICAgKQpGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDAwKSBpOwpJTlNFUlQg MCAxMDAwMDAwClRpbWU6IDUxNTMuNzc4IG1zICgwMDowNS4xNTQpClZBQ1VVTSBBTkFMWVpFIGZ0 c19qc29uX3Rlc3Q7ClZBQ1VVTQpUaW1lOiA3MTUuMjU4IG1zClNFTEVDVCAnLS0tIFRFU1QgMTog dHNtYXRjaCAoVGFyZ2V0ZWQgYXQgJC5jb21tZW50c1sqXS5ib2R5KSAtLS0nIGFzIG1zZzsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgbXNnICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAtLS0gVEVTVCAxOiB0c21hdGNoIChUYXJnZXRlZCBhdCAkLmNvbW1lbnRzWypdLmJvZHkpIC0t LQooMSByb3cpCgpUaW1lOiAwLjEyMSBtcwpFWFBMQUlOIChBTkFMWVpFLCBCVUZGRVJTKQpTRUxF Q1QgY291bnQoKikKRlJPTSBmdHNfanNvbl90ZXN0CldIRVJFIGRvYyBAPyAnJC5jb21tZW50c1sq XSA/IChALmJvZHkgdHNtYXRjaCAicGVyZm9ybWFuY2UiIHRzY29uZmlnICJlbmdsaXNoIiknOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIEZpbmFsaXplIEFnZ3JlZ2F0ZSAgKGNvc3Q9MzI1NzcuMDUuLjMyNTc3LjA2 IHJvd3M9MSB3aWR0aD04KSAoYWN0dWFsIHRpbWU9MTMyMy41MTEuLjEzMjQuNTA4IHJvd3M9MS4w MCBsb29wcz0xKQogICBCdWZmZXJzOiBzaGFyZWQgaGl0PTE0OTI4IHJlYWQ9MTE1OTggd3JpdHRl bj05NwogICAtPiAgR2F0aGVyICAoY29zdD0zMjU3Ni44My4uMzI1NzcuMDQgcm93cz0yIHdpZHRo PTgpIChhY3R1YWwgdGltZT0xMzIzLjQxMy4uMTMyNC41MDQgcm93cz0zLjAwIGxvb3BzPTEpCiAg ICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMgogICAgICAgICBXb3JrZXJzIExhdW5jaGVkOiAyCiAg ICAgICAgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MTQ5MjggcmVhZD0xMTU5OCB3cml0dGVuPTk3CiAg ICAgICAgIC0+ICBQYXJ0aWFsIEFnZ3JlZ2F0ZSAgKGNvc3Q9MzE1NzYuODMuLjMxNTc2Ljg0IHJv d3M9MSB3aWR0aD04KSAoYWN0dWFsIHRpbWU9MTMxNi4xODguLjEzMTYuMTg4IHJvd3M9MS4wMCBs b29wcz0zKQogICAgICAgICAgICAgICBCdWZmZXJzOiBzaGFyZWQgaGl0PTE0OTI4IHJlYWQ9MTE1 OTggd3JpdHRlbj05NwogICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZnRz X2pzb25fdGVzdCAgKGNvc3Q9MC4wMC4uMzE1MjQuMzMgcm93cz0yMTAwMCB3aWR0aD0wKSAoYWN0 dWFsIHRpbWU9MC44MTAuLjEzMTUuMzc5IHJvd3M9MTY2NjYuNjcgbG9vcHM9MykKICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyOiAoZG9jIEA/ICckLiJjb21tZW50cyJbKl0/KEAuImJvZHkiIHRz bWF0Y2ggInBlcmZvcm1hbmNlIiB0c2NvbmZpZyAiZW5nbGlzaCIpJzo6anNvbnBhdGgpCiAgICAg ICAgICAgICAgICAgICAgIFJvd3MgUmVtb3ZlZCBieSBGaWx0ZXI6IDMxNjY2NwogICAgICAgICAg ICAgICAgICAgICBCdWZmZXJzOiBzaGFyZWQgaGl0PTE0OTI4IHJlYWQ9MTE1OTggd3JpdHRlbj05 NwogUGxhbm5pbmc6CiAgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MTkgcmVhZD0yNAogUGxhbm5pbmcg VGltZTogNS4yOTIgbXMKIEV4ZWN1dGlvbiBUaW1lOiAxMzI0LjU0MCBtcwooMTYgcm93cykKClRp bWU6IDEzMzQuNDE2IG1zICgwMDowMS4zMzQpClNFTEVDVCAnLS0tIFRFU1QgMjoganNvbmJfdG9f dHN2ZWN0b3IgKFdob2xlIERvY3VtZW50KSAtLS0nIGFzIG1zZzsKICAgICAgICAgICAgICAgICAg ICAgICAgbXNnICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLS0gVEVTVCAyOiBqc29uYl90b190c3Zl Y3RvciAoV2hvbGUgRG9jdW1lbnQpIC0tLQooMSByb3cpCgpUaW1lOiAwLjA3MyBtcwpFWFBMQUlO IChBTkFMWVpFLCBCVUZGRVJTKQpTRUxFQ1QgY291bnQoKikKRlJPTSBmdHNfanNvbl90ZXN0CldI RVJFIGpzb25iX3RvX3RzdmVjdG9yKCdlbmdsaXNoJywgZG9jLCAnWyJhbGwiXScpIEBAIHRvX3Rz cXVlcnkoJ2VuZ2xpc2gnLCAncGVyZm9ybWFuY2UnKTsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGaW5hbGl6ZSBB Z2dyZWdhdGUgIChjb3N0PTEzNjY5Ni40Mi4uMTM2Njk2LjQzIHJvd3M9MSB3aWR0aD04KSAoYWN0 dWFsIHRpbWU9MjExMi4wOTcuLjIxMTIuNzI2IHJvd3M9MS4wMCBsb29wcz0xKQogICBCdWZmZXJz OiBzaGFyZWQgaGl0PTE0OTM4IHJlYWQ9MTE1Nzggd3JpdHRlbj0xCiAgIC0+ICBHYXRoZXIgIChj b3N0PTEzNjY5Ni4yMS4uMTM2Njk2LjQyIHJvd3M9MiB3aWR0aD04KSAoYWN0dWFsIHRpbWU9MjEx Mi4wOTMuLjIxMTIuNzI0IHJvd3M9My4wMCBsb29wcz0xKQogICAgICAgICBXb3JrZXJzIFBsYW5u ZWQ6IDIKICAgICAgICAgV29ya2VycyBMYXVuY2hlZDogMgogICAgICAgICBCdWZmZXJzOiBzaGFy ZWQgaGl0PTE0OTM4IHJlYWQ9MTE1Nzggd3JpdHRlbj0xCiAgICAgICAgIC0+ICBQYXJ0aWFsIEFn Z3JlZ2F0ZSAgKGNvc3Q9MTM1Njk2LjIxLi4xMzU2OTYuMjIgcm93cz0xIHdpZHRoPTgpIChhY3R1 YWwgdGltZT0yMTEwLjQ1OS4uMjExMC40NjAgcm93cz0xLjAwIGxvb3BzPTMpCiAgICAgICAgICAg ICAgIEJ1ZmZlcnM6IHNoYXJlZCBoaXQ9MTQ5MzggcmVhZD0xMTU3OCB3cml0dGVuPTEKICAgICAg ICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGZ0c19qc29uX3Rlc3QgIChjb3N0PTAu MDAuLjEzNTY5MS4wMCByb3dzPTIwODMgd2lkdGg9MCkgKGFjdHVhbCB0aW1lPTAuMjI5Li4yMTA5 LjY1OSByb3dzPTMzMzMzLjMzIGxvb3BzPTMpCiAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KGpzb25iX3RvX3RzdmVjdG9yKCdlbmdsaXNoJzo6cmVnY29uZmlnLCBkb2MsICdbImFsbCJdJzo6 anNvbmIpIEBAICcnJ3BlcmZvcm0nJyc6OnRzcXVlcnkpCiAgICAgICAgICAgICAgICAgICAgIFJv d3MgUmVtb3ZlZCBieSBGaWx0ZXI6IDMwMDAwMAogICAgICAgICAgICAgICAgICAgICBCdWZmZXJz OiBzaGFyZWQgaGl0PTE0OTM4IHJlYWQ9MTE1Nzggd3JpdHRlbj0xCiBQbGFubmluZyBUaW1lOiAw LjAzMiBtcwogRXhlY3V0aW9uIFRpbWU6IDIxMTIuNzU3IG1zCigxNCByb3dzKQoKVGltZTogMjEx My42MjUgbXMgKDAwOjAyLjExNCkKU0VMRUNUICctLS0gVEVTVCAzOiBMYXRlcmFsIEpvaW4gKFBy ZWNpc2lvbiBhdCBoaWdoIFNRTCBjb21wbGV4aXR5KSAtLS0nIGFzIG1zZzsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1zZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIC0tLSBURVNUIDM6IExhdGVyYWwgSm9pbiAoUHJlY2lzaW9uIGF0IGhpZ2ggU1FMIGNv bXBsZXhpdHkpIC0tLQooMSByb3cpCgpUaW1lOiAwLjA3OSBtcwpFWFBMQUlOIChBTkFMWVpFLCBC VUZGRVJTKQpTRUxFQ1QgY291bnQoKikKRlJPTSBmdHNfanNvbl90ZXN0IHQsCiAgICAganNvbmJf YXJyYXlfZWxlbWVudHModC5kb2MtPidjb21tZW50cycpIEFTIGMKV0hFUkUgdG9fdHN2ZWN0b3Io J2VuZ2xpc2gnLCBjLT4+J2JvZHknKSBAQCB0b190c3F1ZXJ5KCdlbmdsaXNoJywgJ3BlcmZvcm1h bmNlJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBGaW5hbGl6ZSBBZ2dyZWdh dGUgIChjb3N0PTExMDc4MzY2LjcyLi4xMTA3ODM2Ni43MyByb3dzPTEgd2lkdGg9OCkgKGFjdHVh bCB0aW1lPTEwNTQuNjA1Li4xMDU1LjQ5NSByb3dzPTEuMDAgbG9vcHM9MSkKICAgQnVmZmVyczog c2hhcmVkIGhpdD0xNDk0NiByZWFkPTExNTcwIHdyaXR0ZW49MTM3CiAgIC0+ICBHYXRoZXIgIChj b3N0PTExMDc4MzY2LjUxLi4xMTA3ODM2Ni43MiByb3dzPTIgd2lkdGg9OCkgKGFjdHVhbCB0aW1l PTEwNTQuNTk3Li4xMDU1LjQ5MiByb3dzPTMuMDAgbG9vcHM9MSkKICAgICAgICAgV29ya2VycyBQ bGFubmVkOiAyCiAgICAgICAgIFdvcmtlcnMgTGF1bmNoZWQ6IDIKICAgICAgICAgQnVmZmVyczog c2hhcmVkIGhpdD0xNDk0NiByZWFkPTExNTcwIHdyaXR0ZW49MTM3CiAgICAgICAgIC0+ICBQYXJ0 aWFsIEFnZ3JlZ2F0ZSAgKGNvc3Q9MTEwNzczNjYuNTEuLjExMDc3MzY2LjUyIHJvd3M9MSB3aWR0 aD04KSAoYWN0dWFsIHRpbWU9MTA1My4xNDguLjEwNTMuMTQ4IHJvd3M9MS4wMCBsb29wcz0zKQog ICAgICAgICAgICAgICBCdWZmZXJzOiBzaGFyZWQgaGl0PTE0OTQ2IHJlYWQ9MTE1NzAgd3JpdHRl bj0xMzcKICAgICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wICAoY29zdD0wLjAxLi4xMTA3NjMy NC44NCByb3dzPTQxNjY2NyB3aWR0aD0wKSAoYWN0dWFsIHRpbWU9MC4yMzUuLjEwNTIuNjQxIHJv d3M9MTY2NjYuNjcgbG9vcHM9MykKICAgICAgICAgICAgICAgICAgICAgQnVmZmVyczogc2hhcmVk IGhpdD0xNDk0NiByZWFkPTExNTcwIHdyaXR0ZW49MTM3CiAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBmdHNfanNvbl90ZXN0IHQgIChjb3N0PTAuMDAuLjMwNDgy LjY3IHJvd3M9NDE2NjY3IHdpZHRoPTE4MSkgKGFjdHVhbCB0aW1lPTAuMDU4Li4xNC44NDYgcm93 cz0zMzMzMzMuMzMgbG9vcHM9MykKICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyczog c2hhcmVkIGhpdD0xNDc0NiByZWFkPTExNTcwIHdyaXR0ZW49MTM3CiAgICAgICAgICAgICAgICAg ICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGpzb25iX2FycmF5X2VsZW1lbnRzIGMgIChjb3N0PTAu MDEuLjI2LjUwIHJvd3M9MSB3aWR0aD0wKSAoYWN0dWFsIHRpbWU9MC4wMDMuLjAuMDAzIHJvd3M9 MC4wNSBsb29wcz0xMDAwMDAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh0 b190c3ZlY3RvcignZW5nbGlzaCc6OnJlZ2NvbmZpZywgKHZhbHVlIC0+PiAnYm9keSc6OnRleHQp KSBAQCAnJydwZXJmb3JtJycnOjp0c3F1ZXJ5KQogICAgICAgICAgICAgICAgICAgICAgICAgICBS b3dzIFJlbW92ZWQgYnkgRmlsdGVyOiAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZl cnM6IHNoYXJlZCBoaXQ9MjAwCiBQbGFubmluZzoKICAgQnVmZmVyczogc2hhcmVkIGhpdD0zCiBQ bGFubmluZyBUaW1lOiAwLjA1NyBtcwogRXhlY3V0aW9uIFRpbWU6IDEwNTUuNTE4IG1zCigyMCBy b3dzKQoKVGltZTogMTA1Ny4wNTcgbXMgKDAwOjAxLjA1NykK --00000000000000e84106494dc297 Content-Type: application/octet-stream; name="tsmatch_bench.sql" Content-Disposition: attachment; filename="tsmatch_bench.sql" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkvfnhqd2 LS0gRGlzYWJsZSBtZW1vaXphdGlvbiB0byBzZWUgdHJ1ZSBleGVjdXRpb24gY29zdCBvbiB1bmlx dWUtaXNoIGRhdGEKU0VUIGVuYWJsZV9tZW1vaXplID0gT0ZGOwpcdGltaW5nIG9uCgotLSAxLiBT ZXR1cDogQ3JlYXRlIGEgZGF0YXNldCB3aGVyZSBzdHJ1Y3R1cmUgbWF0dGVycwpEUk9QIFRBQkxF IElGIEVYSVNUUyBmdHNfanNvbl90ZXN0OwpDUkVBVEUgVEFCTEUgZnRzX2pzb25fdGVzdCAoaWQg c2VyaWFsIFBSSU1BUlkgS0VZLCBkb2MganNvbmIpOwoKLS0gMTAwMDAwMCByb3dzLgotLSAncGVy Zm9ybWFuY2UnIGlzIGluIHRoZSBUSVRMRSAod3JvbmcgcGxhY2UpIGZvciByb3dzICUgMTAuCi0t ICdwZXJmb3JtYW5jZScgaXMgaW4gYSBDT01NRU5UIChyaWdodCBwbGFjZSkgZm9yIHJvd3MgJSAy MC4KSU5TRVJUIElOVE8gZnRzX2pzb25fdGVzdCAoZG9jKQpTRUxFQ1QganNvbmJfYnVpbGRfb2Jq ZWN0KAogICAgICAgICAgICAgICAndGl0bGUnLCBDQVNFIFdIRU4gaSAlIDEwID0gMCBUSEVOICdk YXRhYmFzZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24nIEVMU0UgJ3N0YW5kYXJkIGRhdGFiYXNl JyBFTkQsCiAgICAgICAgICAgICAgICdtZXRhZGF0YScsIGpzb25iX2J1aWxkX29iamVjdCgndGFn cycsIGpzb25iX2J1aWxkX2FycmF5KCd0ZWNoJywgJ3NxbCcpKSwKICAgICAgICAgICAgICAgJ2Nv bW1lbnRzJywganNvbmJfYnVpbGRfYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAganNvbmJf YnVpbGRfb2JqZWN0KCdib2R5JywgJ3RoaXMgaXMgYSBjb21tZW50JyksCiAgICAgICAgICAgICAg ICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KCdib2R5JywgQ0FTRSBXSEVOIGkgJSAyMCA9IDAg VEhFTiAnaSBzYXcgYSBwZXJmb3JtYW5jZSBnYWluJyBFTFNFICdubyBnYWluJyBFTkQpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICkKRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwMDAwMCkgaTsKClZBQ1VVTSBBTkFMWVpFIGZ0c19qc29uX3Rlc3Q7CgotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotLSBURVNUIDE6IFRoZSBOZXcgYHRzbWF0Y2hgIChQcmVjaXNpb24gKyBVc2Fi aWxpdHkpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNFTEVDVCAnLS0tIFRFU1QgMTogdHNtYXRj aCAoVGFyZ2V0ZWQgYXQgJC5jb21tZW50c1sqXS5ib2R5KSAtLS0nIGFzIG1zZzsKLS0gQ29ycmVj dCBSZXN1bHQ6IDUwMCByb3dzCkVYUExBSU4gKEFOQUxZWkUsIEJVRkZFUlMpClNFTEVDVCBjb3Vu dCgqKQpGUk9NIGZ0c19qc29uX3Rlc3QKV0hFUkUgZG9jIEA/ICckLmNvbW1lbnRzWypdID8gKEAu Ym9keSB0c21hdGNoICJwZXJmb3JtYW5jZSIgdHNjb25maWcgImVuZ2xpc2giKSc7CgoKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KLS0gVEVTVCAyOiBUaGUgU2xlZGdlaGFtbWVyIChqc29uYl90b190 c3ZlY3RvcikKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU0VMRUNUICctLS0gVEVTVCAyOiBqc29u Yl90b190c3ZlY3RvciAoV2hvbGUgRG9jdW1lbnQpIC0tLScgYXMgbXNnOwotLSBSZXN1bHQ6IDE1 MDAwIHJvd3MgKElOQ09SUkVDVCAtIGluY2x1ZGVzIHRpdGxlcykKRVhQTEFJTiAoQU5BTFlaRSwg QlVGRkVSUykKU0VMRUNUIGNvdW50KCopCkZST00gZnRzX2pzb25fdGVzdApXSEVSRSBqc29uYl90 b190c3ZlY3RvcignZW5nbGlzaCcsIGRvYywgJ1siYWxsIl0nKSBAQCB0b190c3F1ZXJ5KCdlbmds aXNoJywgJ3BlcmZvcm1hbmNlJyk7CgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0gVEVTVCAz OiBUaGUgTWFudWFsIFdheSAoTGF0ZXJhbCBKb2luKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpT RUxFQ1QgJy0tLSBURVNUIDM6IExhdGVyYWwgSm9pbiAoUHJlY2lzaW9uIGF0IGhpZ2ggU1FMIGNv bXBsZXhpdHkpIC0tLScgYXMgbXNnOwotLSBSZXN1bHQ6IDUwMCByb3dzIChDb3JyZWN0LCBidXQg Y29tcGxleCBTUUwpCkVYUExBSU4gKEFOQUxZWkUsIEJVRkZFUlMpClNFTEVDVCBjb3VudCgqKQpG Uk9NIGZ0c19qc29uX3Rlc3QgdCwKICAgICBqc29uYl9hcnJheV9lbGVtZW50cyh0LmRvYy0+J2Nv bW1lbnRzJykgQVMgYwpXSEVSRSB0b190c3ZlY3RvcignZW5nbGlzaCcsIGMtPj4nYm9keScpIEBA IHRvX3RzcXVlcnkoJ2VuZ2xpc2gnLCAncGVyZm9ybWFuY2UnKTsK --00000000000000e84106494dc297--