@dbx-tools/search 0.6.211 → 0.6.212

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,202 @@
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/search";
6
- export const PACKAGE_VERSION = "0.6.211";
6
+ export const PACKAGE_VERSION = "0.6.212";
7
7
  export * as client from "./src/client.ts";
8
8
  export * as config from "./src/config.ts";
9
9
  export * as indexTools from "./src/index-tools.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/search";
2
- export declare const PACKAGE_VERSION = "0.6.211";
2
+ export declare const PACKAGE_VERSION = "0.6.212";
3
3
  export * as client from "./src/client.ts";
4
4
  export * as config from "./src/config.ts";
5
5
  export * as indexTools from "./src/index-tools.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/search";
5
- export const PACKAGE_VERSION = "0.6.211";
5
+ export const PACKAGE_VERSION = "0.6.212";
6
6
  export * as client from "./src/client.js";
7
7
  export * as config from "./src/config.js";
8
8
  export * as indexTools from "./src/index-tools.js";
@@ -20,4 +20,4 @@ export { LakebaseSearchBackend } from "./src/lakebase.js";
20
20
  export { LakebaseAiSearchPlugin, lakebaseAiSearch } from "./src/lakebase-plugin.js";
21
21
  export { SearchPlugin, search } from "./src/plugin.js";
22
22
  export { SEARCH_TOOL_DESCRIPTION, UNIVERSAL_SEARCH_TOOL_DESCRIPTION, ADD_DOCUMENTS_TOOL_DESCRIPTION, CREATE_INDEX_TOOL_DESCRIPTION, SYNC_INDEX_TOOL_DESCRIPTION, searchToolSchema, universalSearchToolSchema, searchResultSchema, createIndexToolSchema, indexInfoSchema, syncIndexToolSchema } from "./src/schema.js";
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLGNBQWMsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5SyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQ0FBaUMsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvc2VhcmNoXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjYuMjExXCI7XG5leHBvcnQgKiBhcyBjbGllbnQgZnJvbSBcIi4vc3JjL2NsaWVudC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGluZGV4VG9vbHMgZnJvbSBcIi4vc3JjL2luZGV4LXRvb2xzLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUGx1Z2luIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIG5hdGl2ZSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcXVlcnkgZnJvbSBcIi4vc3JjL3F1ZXJ5LnRzXCI7XG5leHBvcnQgKiBhcyBydW50aW1lIGZyb20gXCIuL3NyYy9ydW50aW1lLnRzXCI7XG5leHBvcnQgKiBhcyBzY2hlbWEgZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgdG9vbCBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuZXhwb3J0IHsgU2VhcmNoSW5kZXgsIFNlYXJjaENsaWVudCB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUmVhZEJhY2tlbmQsIFNlYXJjaE9wdGlvbnMsIFVuaXZlcnNhbFNlYXJjaE9wdGlvbnMsIEluZGV4SW5mbywgQ3JlYXRlSW5kZXhPcHRpb25zLCBFbnN1cmVFbmRwb2ludE9wdGlvbnMsIFByb3Zpc2lvbk9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgeyBJTkRFWF9FTlYsIERBVEFCUklDS1NfSU5ERVhfRU5WLCBFTkRQT0lOVF9FTlYsIERFRkFVTFRfTU9ERSwgREVGQVVMVF9QQUdFX1NJWkUsIERFRkFVTFRfVElNRU9VVF9NUywgREVGQVVMVF9CQVNFX1BBVEgsIFNFQVJDSF9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hJbmRleENvbmZpZywgU2VhcmNoUGx1Z2luQ29uZmlnLCBFbnN1cmVPblNldHVwQ29uZmlnLCBSZXNvbHZlZEluZGV4Q29uZmlnLCBSZXNvbHZlZFNlYXJjaENvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlU2VhcmNoQmFja2VuZCB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVNlYXJjaE9wdGlvbnMsIExha2ViYXNlU2VhcmNoUG9vbCwgTGFrZWJhc2VQcm92aXNpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLnRzXCI7XG5leHBvcnQgeyBMYWtlYmFzZUFpU2VhcmNoUGx1Z2luLCBsYWtlYmFzZUFpU2VhcmNoIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXBsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWcsIExha2ViYXNlQWlTZWFyY2hDb25maWcgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcGx1Z2luLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpU2VhcmNoUHJvdmlkZXIgfSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgeyBTZWFyY2hQbHVnaW4sIHNlYXJjaCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUnVudGltZU9wdGlvbnMsIFNlYXJjaFJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0IHsgU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiwgQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLCBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTiwgU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLCBzZWFyY2hUb29sU2NoZW1hLCB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLCBzZWFyY2hSZXN1bHRTY2hlbWEsIGNyZWF0ZUluZGV4VG9vbFNjaGVtYSwgaW5kZXhJbmZvU2NoZW1hLCBzeW5jSW5kZXhUb29sU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hUb29sT3B0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG4iXX0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLGNBQWMsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5SyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQ0FBaUMsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSwyQkFBMkIsRUFBRSxnQkFBZ0IsRUFBRSx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvc2VhcmNoXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjYuMjEyXCI7XG5leHBvcnQgKiBhcyBjbGllbnQgZnJvbSBcIi4vc3JjL2NsaWVudC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGluZGV4VG9vbHMgZnJvbSBcIi4vc3JjL2luZGV4LXRvb2xzLnRzXCI7XG5leHBvcnQgKiBhcyBsYWtlYmFzZSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UudHNcIjtcbmV4cG9ydCAqIGFzIGxha2ViYXNlUGx1Z2luIGZyb20gXCIuL3NyYy9sYWtlYmFzZS1wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIG5hdGl2ZSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcXVlcnkgZnJvbSBcIi4vc3JjL3F1ZXJ5LnRzXCI7XG5leHBvcnQgKiBhcyBydW50aW1lIGZyb20gXCIuL3NyYy9ydW50aW1lLnRzXCI7XG5leHBvcnQgKiBhcyBzY2hlbWEgZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgdG9vbCBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuZXhwb3J0IHsgU2VhcmNoSW5kZXgsIFNlYXJjaENsaWVudCB9IGZyb20gXCIuL3NyYy9jbGllbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUmVhZEJhY2tlbmQsIFNlYXJjaE9wdGlvbnMsIFVuaXZlcnNhbFNlYXJjaE9wdGlvbnMsIEluZGV4SW5mbywgQ3JlYXRlSW5kZXhPcHRpb25zLCBFbnN1cmVFbmRwb2ludE9wdGlvbnMsIFByb3Zpc2lvbk9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2xpZW50LnRzXCI7XG5leHBvcnQgeyBJTkRFWF9FTlYsIERBVEFCUklDS1NfSU5ERVhfRU5WLCBFTkRQT0lOVF9FTlYsIERFRkFVTFRfTU9ERSwgREVGQVVMVF9QQUdFX1NJWkUsIERFRkFVTFRfVElNRU9VVF9NUywgREVGQVVMVF9CQVNFX1BBVEgsIFNFQVJDSF9DT05GSUdfU0NIRU1BIH0gZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hJbmRleENvbmZpZywgU2VhcmNoUGx1Z2luQ29uZmlnLCBFbnN1cmVPblNldHVwQ29uZmlnLCBSZXNvbHZlZEluZGV4Q29uZmlnLCBSZXNvbHZlZFNlYXJjaENvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IExha2ViYXNlU2VhcmNoQmFja2VuZCB9IGZyb20gXCIuL3NyYy9sYWtlYmFzZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZVNlYXJjaE9wdGlvbnMsIExha2ViYXNlU2VhcmNoUG9vbCwgTGFrZWJhc2VQcm92aXNpb25PcHRpb25zIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLnRzXCI7XG5leHBvcnQgeyBMYWtlYmFzZUFpU2VhcmNoUGx1Z2luLCBsYWtlYmFzZUFpU2VhcmNoIH0gZnJvbSBcIi4vc3JjL2xha2ViYXNlLXBsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYmFzZUFpU2VhcmNoSW5kZXhDb25maWcsIExha2ViYXNlQWlTZWFyY2hDb25maWcgfSBmcm9tIFwiLi9zcmMvbGFrZWJhc2UtcGx1Z2luLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpU2VhcmNoUHJvdmlkZXIgfSBmcm9tIFwiLi9zcmMvbmF0aXZlLnRzXCI7XG5leHBvcnQgeyBTZWFyY2hQbHVnaW4sIHNlYXJjaCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VhcmNoUnVudGltZU9wdGlvbnMsIFNlYXJjaFJ1bnRpbWUgfSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0IHsgU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTiwgQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLCBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTiwgU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLCBzZWFyY2hUb29sU2NoZW1hLCB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLCBzZWFyY2hSZXN1bHRTY2hlbWEsIGNyZWF0ZUluZGV4VG9vbFNjaGVtYSwgaW5kZXhJbmZvU2NoZW1hLCBzeW5jSW5kZXhUb29sU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3NjaGVtYS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTZWFyY2hUb29sT3B0aW9ucyB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG4iXX0=
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared request-to-client option mapping for Search adapters.
3
+ *
4
+ * @module
5
+ */
6
+ import type { SearchRequest, UniversalSearchRequest } from "@dbx-tools/shared-search";
7
+ import type { SearchOptions, UniversalSearchOptions } from "./client.ts";
8
+ /** Translate a validated single-index request into client options. */
9
+ export declare function toSearchOptions(request: SearchRequest, signal?: AbortSignal): SearchOptions & {
10
+ index?: string;
11
+ };
12
+ /** Translate a validated federated request into client options. */
13
+ export declare function toUniversalSearchOptions(request: UniversalSearchRequest, signal?: AbortSignal): UniversalSearchOptions;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Shared request-to-client option mapping for Search adapters.
3
+ *
4
+ * @module
5
+ */
6
+ /** Translate a validated single-index request into client options. */
7
+ export function toSearchOptions(request, signal) {
8
+ return {
9
+ ...(request.index ? { index: request.index } : {}),
10
+ ...(request.limit ? { limit: request.limit } : {}),
11
+ ...(request.mode ? { mode: request.mode } : {}),
12
+ ...(request.columns ? { columns: request.columns } : {}),
13
+ ...(request.filter ? { filter: request.filter } : {}),
14
+ ...(request.scoreThreshold !== undefined ? { scoreThreshold: request.scoreThreshold } : {}),
15
+ ...(signal ? { signal } : {}),
16
+ };
17
+ }
18
+ /** Translate a validated federated request into client options. */
19
+ export function toUniversalSearchOptions(request, signal) {
20
+ return {
21
+ ...(request.indexes ? { indexes: request.indexes } : {}),
22
+ ...(request.limit ? { limit: request.limit } : {}),
23
+ ...(request.mode ? { mode: request.mode } : {}),
24
+ ...(signal ? { signal } : {}),
25
+ };
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3NlYXJjaC1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL19zZWFyY2gtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBS0gsc0VBQXNFO0FBQ3RFLE1BQU0sVUFBVSxlQUFlLENBQzdCLE9BQXNCLEVBQ3RCLE1BQW9CO0lBRXBCLE9BQU87UUFDTCxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xELEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JELEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQzlCLENBQUM7QUFDSixDQUFDO0FBRUQsbUVBQW1FO0FBQ25FLE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsT0FBK0IsRUFDL0IsTUFBb0I7SUFFcEIsT0FBTztRQUNMLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUM5QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2hhcmVkIHJlcXVlc3QtdG8tY2xpZW50IG9wdGlvbiBtYXBwaW5nIGZvciBTZWFyY2ggYWRhcHRlcnMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB0eXBlIHsgU2VhcmNoUmVxdWVzdCwgVW5pdmVyc2FsU2VhcmNoUmVxdWVzdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB0eXBlIHsgU2VhcmNoT3B0aW9ucywgVW5pdmVyc2FsU2VhcmNoT3B0aW9ucyB9IGZyb20gXCIuL2NsaWVudC50c1wiO1xuXG4vKiogVHJhbnNsYXRlIGEgdmFsaWRhdGVkIHNpbmdsZS1pbmRleCByZXF1ZXN0IGludG8gY2xpZW50IG9wdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TZWFyY2hPcHRpb25zKFxuICByZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFNlYXJjaE9wdGlvbnMgJiB7IGluZGV4Pzogc3RyaW5nIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLihyZXF1ZXN0LmluZGV4ID8geyBpbmRleDogcmVxdWVzdC5pbmRleCB9IDoge30pLFxuICAgIC4uLihyZXF1ZXN0LmxpbWl0ID8geyBsaW1pdDogcmVxdWVzdC5saW1pdCB9IDoge30pLFxuICAgIC4uLihyZXF1ZXN0Lm1vZGUgPyB7IG1vZGU6IHJlcXVlc3QubW9kZSB9IDoge30pLFxuICAgIC4uLihyZXF1ZXN0LmNvbHVtbnMgPyB7IGNvbHVtbnM6IHJlcXVlc3QuY29sdW1ucyB9IDoge30pLFxuICAgIC4uLihyZXF1ZXN0LmZpbHRlciA/IHsgZmlsdGVyOiByZXF1ZXN0LmZpbHRlciB9IDoge30pLFxuICAgIC4uLihyZXF1ZXN0LnNjb3JlVGhyZXNob2xkICE9PSB1bmRlZmluZWQgPyB7IHNjb3JlVGhyZXNob2xkOiByZXF1ZXN0LnNjb3JlVGhyZXNob2xkIH0gOiB7fSksXG4gICAgLi4uKHNpZ25hbCA/IHsgc2lnbmFsIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBUcmFuc2xhdGUgYSB2YWxpZGF0ZWQgZmVkZXJhdGVkIHJlcXVlc3QgaW50byBjbGllbnQgb3B0aW9ucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1VuaXZlcnNhbFNlYXJjaE9wdGlvbnMoXG4gIHJlcXVlc3Q6IFVuaXZlcnNhbFNlYXJjaFJlcXVlc3QsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogVW5pdmVyc2FsU2VhcmNoT3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgLi4uKHJlcXVlc3QuaW5kZXhlcyA/IHsgaW5kZXhlczogcmVxdWVzdC5pbmRleGVzIH0gOiB7fSksXG4gICAgLi4uKHJlcXVlc3QubGltaXQgPyB7IGxpbWl0OiByZXF1ZXN0LmxpbWl0IH0gOiB7fSksXG4gICAgLi4uKHJlcXVlc3QubW9kZSA/IHsgbW9kZTogcmVxdWVzdC5tb2RlIH0gOiB7fSksXG4gICAgLi4uKHNpZ25hbCA/IHsgc2lnbmFsIH0gOiB7fSksXG4gIH07XG59XG4iXX0=
package/lib/src/plugin.js CHANGED
@@ -30,6 +30,7 @@ import { toCreateIndexOptions } from "./index-tools.js";
30
30
  import { nativeAiSearchBackend } from "./native.js";
31
31
  import { toDocumentArray } from "./query.js";
32
32
  import { getSearchRuntime, resetSearchRuntime } from "./runtime.js";
33
+ import { toSearchOptions, toUniversalSearchOptions } from "./_search-options.js";
33
34
  import { ADD_DOCUMENTS_TOOL_DESCRIPTION, CREATE_INDEX_TOOL_DESCRIPTION, SEARCH_TOOL_DESCRIPTION, SYNC_INDEX_TOOL_DESCRIPTION, UNIVERSAL_SEARCH_TOOL_DESCRIPTION, } from "./schema.js";
34
35
  const logger = log.logger("search");
35
36
  /** Mount-relative route for a universal (federated) search across indexes. */
@@ -372,25 +373,12 @@ export class SearchPlugin extends Plugin {
372
373
  async runSearch(args, signal) {
373
374
  const request = sharedSearch.searchRequestSchema.parse(args);
374
375
  const { client } = getSearchRuntime();
375
- return client.search(request.query, {
376
- ...(request.index ? { index: request.index } : {}),
377
- ...(request.limit ? { limit: request.limit } : {}),
378
- ...(request.mode ? { mode: request.mode } : {}),
379
- ...(request.columns ? { columns: request.columns } : {}),
380
- ...(request.filter ? { filter: request.filter } : {}),
381
- ...(request.scoreThreshold !== undefined ? { scoreThreshold: request.scoreThreshold } : {}),
382
- ...(signal ? { signal } : {}),
383
- });
376
+ return client.search(request.query, toSearchOptions(request, signal));
384
377
  }
385
378
  async runUniversalSearch(args, signal) {
386
379
  const request = sharedSearch.universalSearchRequestSchema.parse(args);
387
380
  const { client } = getSearchRuntime();
388
- return client.universalSearch(request.query, {
389
- ...(request.indexes ? { indexes: request.indexes } : {}),
390
- ...(request.limit ? { limit: request.limit } : {}),
391
- ...(request.mode ? { mode: request.mode } : {}),
392
- ...(signal ? { signal } : {}),
393
- });
381
+ return client.universalSearch(request.query, toUniversalSearchOptions(request, signal));
394
382
  }
395
383
  async runAddDocuments(args, signal) {
396
384
  const record = (args ?? {});
@@ -436,4 +424,4 @@ export class SearchPlugin extends Plugin {
436
424
  * ```
437
425
  */
438
426
  export const search = toPlugin(SearchPlugin);
439
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXdDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUYsT0FBTyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGlCQUFpQixHQUlsQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssSUFBSSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUEyQixNQUFNLDBCQUEwQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBMkIsTUFBTSxhQUFhLENBQUM7QUFDakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsNkJBQTZCLEVBQzdCLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0IsaUNBQWlDLEdBQ2xDLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFcEMsOEVBQThFO0FBQzlFLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQztBQUVyQywyRUFBMkU7QUFD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TSxPQUFPLEdBQUcsWUFBWSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFhLEVBQUUsTUFBb0I7UUFDNUQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDOUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUN6RCxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7O0FBR0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgZXh0ZW5zaW9uIHBsdWdpbiAocmVnaXN0ZXJlZCBuYW1lOiBgc2VhcmNoYCkgYXJvdW5kIGEgc2libGluZ1xuICogYGFpU2VhcmNoYCBwcm92aWRlci4gTmF0aXZlIEFwcEtpdCBvd25zIFZlY3RvciBTZWFyY2ggcXVlcnkgZXhlY3V0aW9uOyB0aGlzXG4gKiBwbHVnaW4gYWRkcyB0aGUgc3VyZmFjZXMgdGhhdCByZW1haW4gdXNlZnVsIGFjcm9zcyBuYXRpdmUgYW5kIExha2ViYXNlXG4gKiBwcm92aWRlcnM6XG4gKlxuICogICAtIGEgYHNlYXJjaGAgLyBgdW5pdmVyc2FsX3NlYXJjaGAgLyAob3B0LWluKSBgYWRkX2RvY3VtZW50c2AgdG9vbCBzZXQgZm9yXG4gKiAgICAgYm90aCBNYXN0cmEgYW5kIEFwcEtpdCBhZ2VudHMgKGF1dG9jb21wbGV0ZSBpcyBhIHNtYWxsLWBsaW1pdGAgc2VhcmNoKTtcbiAqICAgLSBjb21wYXRpYmlsaXR5IGFuZCBleHRlbnNpb24gcm91dGVzIHVuZGVyIGAvYXBpL3NlYXJjaGBcbiAqICAgICAoYFBPU1QgL2Agc2VhcmNoLCBgUE9TVCAvdW5pdmVyc2FsYCBmZWRlcmF0ZWQsIGBHRVQgL2luZGV4ZXNgIGNhdGFsb2d1ZSxcbiAqICAgICBhbmQgYFBPU1QgL2RvY3VtZW50c2Agd2hlbiB3cml0ZXMgYXJlIGVuYWJsZWQpO1xuICogICAtIGEgYGNsaWVudENvbmZpZygpYCBwYXlsb2FkIHNvIGEgVUkga25vd3MgdGhlIGluZGV4ZXMsIGRlZmF1bHQsIGFuZCBwYWdlXG4gKiAgICAgc2l6ZSBhdCBib290IHdpdGggbm8gcm91bmQtdHJpcDtcbiAqICAgLSBgZXhwb3J0cygpYCBzbyBhcHAgY29kZSBjYW4gYGFwcGtpdC5zZWFyY2guc2VhcmNoKC4uLilgIGRpcmVjdGx5LlxuICpcbiAqIFZlY3RvciBTZWFyY2ggcmVhZHMgZGVsZWdhdGUgdG8gdGhlIHJlZ2lzdGVyZWQgbmF0aXZlIEFwcEtpdCBgYWlTZWFyY2hgXG4gKiBwbHVnaW4sIHByZXNlcnZpbmcgaXRzIE9CTywgY2FjaGluZywgcmVyYW5raW5nLCBhbmQgcmVzcG9uc2UgaGFuZGxpbmcuIFRoZVxuICogYWx0ZXJuYXRpdmUgYGxha2ViYXNlQWlTZWFyY2hgIHByb3ZpZGVyIHN1cHBsaWVzIHRoZSBzYW1lIHF1ZXJ5IGNvbnRyYWN0XG4gKiBvdmVyIFBvc3RncmVTUUwgZnVsbC10ZXh0IHNlYXJjaC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgUGx1Z2luLCB0b1BsdWdpbiwgdHlwZSBJQXBwUm91dGVyLCB0eXBlIFBsdWdpbk1hbmlmZXN0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgYWlTZWFyY2gsXG4gIGRlZmluZVRvb2wsXG4gIGV4ZWN1dGVGcm9tUmVnaXN0cnksXG4gIHRvb2xzRnJvbVJlZ2lzdHJ5LFxuICB0eXBlIEFnZW50VG9vbERlZmluaXRpb24sXG4gIHR5cGUgVG9vbFByb3ZpZGVyLFxuICB0eXBlIFRvb2xSZWdpc3RyeSxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBwbHVnaW4gYXMgYXBwa2l0UGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvciBhcyBzaGFyZWRFcnJvciwgbG9nLCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgc2VhcmNoIGFzIHNoYXJlZFNlYXJjaCwgdHlwZSBTZWFyY2hDbGllbnRDb25maWcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQgeyBTRUFSQ0hfQ09ORklHX1NDSEVNQSwgcmVzb2x2ZVNlYXJjaENvbmZpZywgdHlwZSBTZWFyY2hQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IHRvQ3JlYXRlSW5kZXhPcHRpb25zIH0gZnJvbSBcIi4vaW5kZXgtdG9vbHMudHNcIjtcbmltcG9ydCB7IG5hdGl2ZUFpU2VhcmNoQmFja2VuZCB9IGZyb20gXCIuL25hdGl2ZS50c1wiO1xuaW1wb3J0IHsgdG9Eb2N1bWVudEFycmF5IH0gZnJvbSBcIi4vcXVlcnkudHNcIjtcbmltcG9ydCB7IGdldFNlYXJjaFJ1bnRpbWUsIHJlc2V0U2VhcmNoUnVudGltZSB9IGZyb20gXCIuL3J1bnRpbWUudHNcIjtcbmltcG9ydCB7XG4gIEFERF9ET0NVTUVOVFNfVE9PTF9ERVNDUklQVElPTixcbiAgQ1JFQVRFX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBTWU5DX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbn0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2hcIik7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSBmb3IgYSB1bml2ZXJzYWwgKGZlZGVyYXRlZCkgc2VhcmNoIGFjcm9zcyBpbmRleGVzLiAqL1xuY29uc3QgVU5JVkVSU0FMX1JPVVRFID0gXCIvdW5pdmVyc2FsXCI7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSBzZXJ2aW5nIHRoZSBpbmRleCBjYXRhbG9ndWUgYSBzZWFyY2ggYm94IHJlYWRzLiAqL1xuY29uc3QgSU5ERVhFU19ST1VURSA9IFwiL2luZGV4ZXNcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlIGZvciBhZGRpbmcgZG9jdW1lbnRzIHRvIGEgZGlyZWN0LWFjY2VzcyBpbmRleC4gKi9cbmNvbnN0IERPQ1VNRU5UU19ST1VURSA9IFwiL2RvY3VtZW50c1wiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgZm9yIGNyZWF0aW5nIGEgVmVjdG9yIFNlYXJjaCBpbmRleC4gKi9cbmNvbnN0IElOREVYX1JPVVRFID0gXCIvaW5kZXhcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlIGZvciBzeW5jaW5nIGEgRGVsdGEgU3luYyBpbmRleCBmcm9tIGl0cyBzb3VyY2UgdGFibGUuICovXG5jb25zdCBJTkRFWF9TWU5DX1JPVVRFID0gXCIvaW5kZXgvc3luY1wiO1xuXG4vKipcbiAqIEFwcEtpdCBleHRlbnNpb24gcGx1Z2luIGZvciBhZ2VudCB0b29scywgZmVkZXJhdGVkIHNlYXJjaCwgYW5kIG9wdGlvbmFsXG4gKiBWZWN0b3IgU2VhcmNoIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBSZWdpc3RlciBgYWlTZWFyY2goKWAgb3JcbiAqIGBsYWtlYmFzZUFpU2VhcmNoKClgIGJlZm9yZSB0aGlzIHBsdWdpbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgYWlTZWFyY2ggfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyBzZWFyY2hQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9zZWFyY2hcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgYWlTZWFyY2goe1xuICogICAgICAgaW5kZXhlczoge1xuICogICAgICAgICBkb2NzOiB7XG4gKiAgICAgICAgICAgaW5kZXhOYW1lOiBcIm1haW4uc3VwcG9ydC5kb2NzXCIsXG4gKiAgICAgICAgICAgY29sdW1uczogW1wiaWRcIiwgXCJ0aXRsZVwiLCBcImJvZHlcIl0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9LFxuICogICAgIH0pLFxuICogICAgIHNlYXJjaFBsdWdpbi5zZWFyY2goe1xuICogICAgICAgaW5kZXg6IFwibWFpbi5zdXBwb3J0LmRvY3NcIixcbiAqICAgICAgIGluZGV4ZXM6IFt7IG5hbWU6IFwibWFpbi5zdXBwb3J0LmRvY3NcIiwgYWxpYXM6IFwiZG9jc1wiIH1dLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNlYXJjaFBsdWdpbiBleHRlbmRzIFBsdWdpbjxTZWFyY2hQbHVnaW5Db25maWc+IGltcGxlbWVudHMgVG9vbFByb3ZpZGVyIHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwic2VhcmNoXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiQUkgU2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlNlYXJjaCBEYXRhYnJpY2tzIEFJIFNlYXJjaCAoVmVjdG9yIFNlYXJjaCkgaW5kZXhlczogYWdlbnQgdG9vbHMsIEhUVFAgcm91dGVzIGZvciBhIFwiICtcbiAgICAgIFwic2VhcmNoIGJveCwgdW5pdmVyc2FsIHNlYXJjaCBhY3Jvc3MgaW5kZXhlcywgYW5kIGFuIG9wdC1pbiBkb2N1bWVudCB3cml0ZSBzdXJmYWNlLlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7XG4gICAgICByZXF1aXJlZDogW10sXG4gICAgICBvcHRpb25hbDogW10sXG4gICAgfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBTRUFSQ0hfQ09ORklHX1NDSEVNQSB9LFxuICB9IHNhdGlzZmllcyBQbHVnaW5NYW5pZmVzdDxcInNlYXJjaFwiPjtcblxuICAvKiogVGhlIGJhc2UgcGF0aCBBcHBLaXQgbW91bnRzIHRoaXMgcGx1Z2luJ3Mgcm91dGVzIHVuZGVyLiAqL1xuICBwcml2YXRlIGdldCBiYXNlUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgL2FwaS8ke1NlYXJjaFBsdWdpbi5tYW5pZmVzdC5uYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRvb2xzIHRoaXMgcGx1Z2luIG9mZmVycyB0byBhbiBBcHBLaXQgYWdlbnQuIGBzZWFyY2hgIC9cbiAgICogYHVuaXZlcnNhbF9zZWFyY2hgIGFyZSByZWFkczsgYGFkZF9kb2N1bWVudHNgIC8gYGNyZWF0ZV9pbmRleGAgL1xuICAgKiBgc3luY19pbmRleGAgYXJlIG9ubHkgb2ZmZXJlZCB3aGVuIHRoZSB3cml0ZSBzdXJmYWNlIGlzIGVuYWJsZWQuIE5vbmUgaXNcbiAgICogYXV0b0luaGVyaXRhYmxlOiBldmVyeSB0b29sIHJ1bnMgdW5kZXIgdGhlIGNhbGxlcidzIGlkZW50aXR5LCBzbyBpdCBtdXN0IGJlXG4gICAqIGdyYW50ZWQgZXhwbGljaXRseS5cbiAgICovXG4gIHByaXZhdGUgZ2V0IHRvb2xzKCk6IFRvb2xSZWdpc3RyeSB7XG4gICAgY29uc3QgeyBjb25maWcsIHJlYWRCYWNrZW5kIH0gPSBnZXRTZWFyY2hSdW50aW1lKHsgY29uZmlnOiB0aGlzLmNvbmZpZyB9KTtcbiAgICBjb25zdCByZWdpc3RyeTogVG9vbFJlZ2lzdHJ5ID0ge1xuICAgICAgc2VhcmNoOiBkZWZpbmVUb29sKHtcbiAgICAgICAgZGVzY3JpcHRpb246IFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICBzY2hlbWE6IHNoYXJlZFNlYXJjaC5zZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuU2VhcmNoKGFyZ3MsIHNpZ25hbCksXG4gICAgICB9KSxcbiAgICAgIHVuaXZlcnNhbF9zZWFyY2g6IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjogVU5JVkVSU0FMX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICBzY2hlbWE6IHNoYXJlZFNlYXJjaC51bml2ZXJzYWxTZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuVW5pdmVyc2FsU2VhcmNoKGFyZ3MsIHNpZ25hbCksXG4gICAgICB9KSxcbiAgICB9O1xuICAgIGlmIChjb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgcmVnaXN0cnkuYWRkX2RvY3VtZW50cyA9IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjogQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICBzY2hlbWE6IHNoYXJlZFNlYXJjaC5zZWFyY2hSZXF1ZXN0U2NoZW1hXG4gICAgICAgICAgLnBpY2soeyBpbmRleDogdHJ1ZSB9KVxuICAgICAgICAgIC5leHRlbmQoeyBkb2N1bWVudHM6IHNoYXJlZFNlYXJjaC5zZWFyY2hEb2N1bWVudFNjaGVtYS5hcnJheSgpIH0pLFxuICAgICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwid3JpdGVcIiwgcmVxdWlyZXNVc2VyQ29udGV4dDogdHJ1ZSB9LFxuICAgICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PiB0aGlzLnJ1bkFkZERvY3VtZW50cyhhcmdzLCBzaWduYWwpLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVhZEJhY2tlbmQ/LnN1cHBvcnRzTGlmZWN5Y2xlKSB7XG4gICAgICAgIHJlZ2lzdHJ5LmNyZWF0ZV9pbmRleCA9IGRlZmluZVRvb2woe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICAgICAgICBzY2hlbWE6IHNoYXJlZFNlYXJjaC5jcmVhdGVJbmRleFJlcXVlc3RTY2hlbWEsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcIndyaXRlXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuQ3JlYXRlSW5kZXgoYXJncywgc2lnbmFsKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlZ2lzdHJ5LnN5bmNfaW5kZXggPSBkZWZpbmVUb29sKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICAgIHNjaGVtYTogc2hhcmVkU2VhcmNoLnN5bmNJbmRleFJlcXVlc3RTY2hlbWEsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcIndyaXRlXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuU3luY0luZGV4KGFyZ3MsIHNpZ25hbCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVnaXN0cnk7XG4gIH1cblxuICAvKiogUHJpbWUgdGhlIHNoYXJlZCBydW50aW1lIGZyb20gY29uZmlnIGFuZCBsb2cgdGhlIGVmZmVjdGl2ZSBwb2xpY3kgYXQgYm9vdC4gKi9cbiAgb3ZlcnJpZGUgYXN5bmMgc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVhZEJhY2tlbmQgPSB0aGlzLnJlc29sdmVQcm92aWRlckJhY2tlbmQoKTtcbiAgICAvLyBUaGUgcnVudGltZSBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gYnVpbHQgKGNvbmZpZy1vbmx5KSB3aGVuIGB0b29scygpYCByYW5cbiAgICAvLyBkdXJpbmcgcmVnaXN0cmF0aW9uOyByZWJ1aWxkIGl0IHNvIGl0IGNhcnJpZXMgdGhlIGNob3NlbiBiYWNrZW5kLlxuICAgIHJlc2V0U2VhcmNoUnVudGltZSgpO1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRTZWFyY2hSdW50aW1lKHtcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICByZWFkQmFja2VuZCxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGJhY2tlbmQ6IHJlYWRCYWNrZW5kLnN1cHBvcnRzTGlmZWN5Y2xlID8gXCJhcHBraXQtYWktc2VhcmNoXCIgOiBcImxha2ViYXNlLWFpLXNlYXJjaFwiLFxuICAgICAgZGVmYXVsdEluZGV4OiBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiKG5vbmUgLSBwYXNzIHBlciByZXF1ZXN0KVwiLFxuICAgICAgaW5kZXhlczogY29uZmlnLmluZGV4ZXMubWFwKChpKSA9PiBpLmFsaWFzKSxcbiAgICAgIHBhZ2VTaXplOiBjb25maWcucGFnZVNpemUsXG4gICAgICBtb2RlOiBjb25maWcubW9kZSxcbiAgICAgIGFsbG93V3JpdGU6IGNvbmZpZy5hbGxvd1dyaXRlLFxuICAgICAgYmFzZVBhdGg6IHRoaXMuYmFzZVBhdGgsXG4gICAgICBlbnN1cmVPblNldHVwOiBjb25maWcuZW5zdXJlT25TZXR1cFxuICAgICAgICA/IChjb25maWcuZW5zdXJlT25TZXR1cC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4KVxuICAgICAgICA6IFwib2ZmXCIsXG4gICAgfSk7XG4gICAgLy8gUHJvdmlzaW9uIGEgcmVhbCBpbmRleCBpbiB0aGUgQkFDS0dST1VORCBzbyBhIHNsb3cgZmlyc3QtdGltZSBlbmRwb2ludCBvclxuICAgIC8vIGluZGV4IGJ1aWxkIG5ldmVyIGJsb2NrcyB0aGUgc2VydmVyIGZyb20gY29taW5nIHVwLlxuICAgIGlmIChjb25maWcuZW5zdXJlT25TZXR1cCAmJiByZWFkQmFja2VuZC5zdXBwb3J0c0xpZmVjeWNsZSkge1xuICAgICAgdm9pZCB0aGlzLnJ1bkVuc3VyZU9uU2V0dXAoY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzb2x2ZSB0aGUgcmVnaXN0ZXJlZCBBcHBLaXQtY29tcGF0aWJsZSBBSSBTZWFyY2ggcHJvdmlkZXIuICovXG4gIHByaXZhdGUgcmVzb2x2ZVByb3ZpZGVyQmFja2VuZCgpOiBSZXR1cm5UeXBlPHR5cGVvZiBuYXRpdmVBaVNlYXJjaEJhY2tlbmQ+IHtcbiAgICBjb25zdCBwcm92aWRlciA9IGFwcGtpdFBsdWdpbi5yZXF1aXJlKHRoaXMuY29udGV4dCwgYWlTZWFyY2gsIHRoaXMpLmV4cG9ydHMoKTtcbiAgICByZXR1cm4gbmF0aXZlQWlTZWFyY2hCYWNrZW5kKHByb3ZpZGVyLCByZXNvbHZlU2VhcmNoQ29uZmlnKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoZSBlbmRwb2ludCArIGluZGV4IGV4aXN0IGFuZCBzZWVkIHRoZW0sIGhvbm9yaW5nIGBlbnN1cmVPblNldHVwYC5cbiAgICogVXNlcyBib290LXRpbWUgU0RLIGF1dGggKGVudiAvIGNvbmZpZyBwcm9maWxlKSB2aWEgdGhlIGNsaWVudCdzXG4gICAqIG91dC1vZi1yZXF1ZXN0IGZhbGxiYWNrLiBGYWlsdXJlcyBhcmUgbG9nZ2VkLCBuZXZlciB0aHJvd24gLSBhIHNlYXJjaCBhcHBcbiAgICogc2hvdWxkIHN0aWxsIHN0YXJ0IGV2ZW4gaWYgcHJvdmlzaW9uaW5nIGlzIHNsb3cgb3IgYSBwZXJtaXNzaW9uIGlzIG1pc3NpbmcuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkVuc3VyZU9uU2V0dXAoXG4gICAgY29uZmlnOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRTZWFyY2hSdW50aW1lPltcImNvbmZpZ1wiXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3BlYyA9IGNvbmZpZy5lbnN1cmVPblNldHVwO1xuICAgIGlmICghc3BlYykgcmV0dXJuO1xuICAgIGNvbnN0IGluZGV4ID0gc3RyaW5nLnRyaW1Ub051bGwoc3BlYy5pbmRleCkgPz8gY29uZmlnLmRlZmF1bHRJbmRleDtcbiAgICBpZiAoIWluZGV4KSB7XG4gICAgICBsb2dnZXIud2FybihcImVuc3VyZS1za2lwcGVkXCIsIHtcbiAgICAgICAgcmVhc29uOiBcIm5vIGluZGV4IG5hbWUgKHNldCBgaW5kZXhgIG9yIGBlbnN1cmVPblNldHVwLmluZGV4YClcIixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb2N1bWVudHMgPSBzcGVjLmRvY3VtZW50cyA/PyBbXTtcbiAgICAvLyBJbmZlciBhIG1hbmFnZWQtZGlyZWN0LWFjY2VzcyBzY2hlbWEgZnJvbSB0aGUgZmlyc3Qgc2VlZCByb3cgd2hlbiBub3QgZ2l2ZW4uXG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIHNwZWMuc2NoZW1hID8/XG4gICAgICAoZG9jdW1lbnRzLmxlbmd0aCA+IDAgJiYgIXNwZWMuc291cmNlVGFibGVcbiAgICAgICAgPyB0aGlzLmluZmVyU2NoZW1hKGRvY3VtZW50c1swXSwgc3BlYy5wcmltYXJ5S2V5ID8/IFwiaWRcIiwgc3BlYy50ZXh0Q29sdW1uID8/IFwidGV4dFwiKVxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwiZW5zdXJlLXN0YXJ0XCIsIHsgaW5kZXggfSk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IGNsaWVudC5wcm92aXNpb24oaW5kZXgsIHtcbiAgICAgICAgLi4uKHNwZWMuZW5kcG9pbnQgPyB7IGVuZHBvaW50OiBzcGVjLmVuZHBvaW50IH0gOiB7fSksXG4gICAgICAgIC4uLihzcGVjLnByaW1hcnlLZXkgPyB7IHByaW1hcnlLZXk6IHNwZWMucHJpbWFyeUtleSB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy50ZXh0Q29sdW1uID8geyBlbWJlZGRpbmdTb3VyY2VDb2x1bW46IHNwZWMudGV4dENvbHVtbiB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy5lbWJlZGRpbmdNb2RlbCA/IHsgZW1iZWRkaW5nTW9kZWw6IHNwZWMuZW1iZWRkaW5nTW9kZWwgfSA6IHt9KSxcbiAgICAgICAgLi4uKHNwZWMuc291cmNlVGFibGUgPyB7IHNvdXJjZVRhYmxlOiBzcGVjLnNvdXJjZVRhYmxlIH0gOiB7fSksXG4gICAgICAgIC4uLihzY2hlbWEgPyB7IHNjaGVtYSB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy50aW1lb3V0TXMgPyB7IHRpbWVvdXRNczogc3BlYy50aW1lb3V0TXMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGRvY3VtZW50cy5sZW5ndGggPiAwID8geyBzZWVkOiBkb2N1bWVudHMgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oXCJlbnN1cmUtcmVhZHlcIiwge1xuICAgICAgICBpbmRleDogaW5mby5uYW1lLFxuICAgICAgICByZWFkeTogaW5mby5yZWFkeSxcbiAgICAgICAgcm93Q291bnQ6IGluZm8ucm93Q291bnQgPz8gMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICBsb2dnZXIud2FybihcImVuc3VyZS1mYWlsZWRcIiwgeyBpbmRleCwgbWVzc2FnZTogc2hhcmVkRXJyb3IuZXJyb3JNZXNzYWdlKGNhdXNlKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQnVpbGQgYSBWZWN0b3IgU2VhcmNoIGBzY2hlbWFfanNvbmAgbWFwIGZyb20gYSBzZWVkIGRvY3VtZW50J3MgdmFsdWUgdHlwZXMuICovXG4gIHByaXZhdGUgaW5mZXJTY2hlbWEoXG4gICAgZG9jOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBwcmltYXJ5S2V5OiBzdHJpbmcsXG4gICAgdGV4dENvbHVtbjogc3RyaW5nLFxuICApOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzY2hlbWE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IFtwcmltYXJ5S2V5XTogXCJzdHJpbmdcIiwgW3RleHRDb2x1bW5dOiBcInN0cmluZ1wiIH07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZG9jKSkge1xuICAgICAgaWYgKGtleSBpbiBzY2hlbWEpIGNvbnRpbnVlO1xuICAgICAgc2NoZW1hW2tleV0gPVxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICA/IE51bWJlci5pc0ludGVnZXIodmFsdWUpXG4gICAgICAgICAgICA/IFwiaW50XCJcbiAgICAgICAgICAgIDogXCJkb3VibGVcIlxuICAgICAgICAgIDogdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIlxuICAgICAgICAgICAgPyBcImJvb2xlYW5cIlxuICAgICAgICAgICAgOiBcInN0cmluZ1wiO1xuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIHNoYXJlZCBydW50aW1lIHNvIGEgcmVzdGFydGVkIGFwcCByZS1yZXNvbHZlcyBjb25maWcuICovXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc2V0U2VhcmNoUnVudGltZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk6IHZvaWQge1xuICAgIHN1cGVyLmFib3J0QWN0aXZlT3BlcmF0aW9ucygpO1xuICAgIHZvaWQgdGhpcy5zaHV0ZG93bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdW50IGV4dGVuc2lvbiByb3V0ZXMgdW5kZXIgYC9hcGkvc2VhcmNoYC4gU2luZ2xlLWluZGV4IHF1ZXJpZXMgc3RheSBvblxuICAgKiB0aGUgcHJvdmlkZXIncyBuYXRpdmUgYC9hcGkvYWktc2VhcmNoLzphbGlhcy9xdWVyeWAgc3VyZmFjZS5cbiAgICovXG4gIG92ZXJyaWRlIGluamVjdFJvdXRlcyhyb3V0ZXI6IElBcHBSb3V0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJ1bml2ZXJzYWxTZWFyY2hcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBVTklWRVJTQUxfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNwb25kKHJlcywgXCJ1bml2ZXJzYWxTZWFyY2hcIiwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBzaGFyZWRTZWFyY2gudW5pdmVyc2FsU2VhcmNoUmVxdWVzdFNjaGVtYS5wYXJzZShyZXEuYm9keSA/PyB7fSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXNVc2VyKHJlcSkucnVuVW5pdmVyc2FsU2VhcmNoKHJlcXVlc3QpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiaW5kZXhlc1wiLFxuICAgICAgbWV0aG9kOiBcImdldFwiLFxuICAgICAgcGF0aDogSU5ERVhFU19ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmpzb24odGhpcy5jbGllbnRDb25maWcoKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcImRvY3VtZW50c1wiLFxuICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgIHBhdGg6IERPQ1VNRU5UU19ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1dyaXRlKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDMpLmpzb24oeyBlcnJvcjogXCJ0aGUgZG9jdW1lbnQgd3JpdGUgc3VyZmFjZSBpcyBkaXNhYmxlZFwiIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlc3BvbmQocmVzLCBcImFkZERvY3VtZW50c1wiLCAoKSA9PlxuICAgICAgICAgIHRoaXMuYXNVc2VyKHJlcSkucnVuQWRkRG9jdW1lbnRzKHJlcS5ib2R5ID8/IHt9KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiY3JlYXRlSW5kZXhcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBJTkRFWF9ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZywgcmVhZEJhY2tlbmQgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgICAgaWYgKCFjb25maWcuYWxsb3dXcml0ZSB8fCAhcmVhZEJhY2tlbmQ/LnN1cHBvcnRzTGlmZWN5Y2xlKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDMpLmpzb24oeyBlcnJvcjogXCJ0aGUgaW5kZXggd3JpdGUgc3VyZmFjZSBpcyBkaXNhYmxlZFwiIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlc3BvbmQocmVzLCBcImNyZWF0ZUluZGV4XCIsICgpID0+XG4gICAgICAgICAgdGhpcy5hc1VzZXIocmVxKS5ydW5DcmVhdGVJbmRleChyZXEuYm9keSA/PyB7fSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcInN5bmNJbmRleFwiLFxuICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgIHBhdGg6IElOREVYX1NZTkNfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWcsIHJlYWRCYWNrZW5kIH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICAgIGlmICghY29uZmlnLmFsbG93V3JpdGUgfHwgIXJlYWRCYWNrZW5kPy5zdXBwb3J0c0xpZmVjeWNsZSkge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDAzKS5qc29uKHsgZXJyb3I6IFwidGhlIGluZGV4IHdyaXRlIHN1cmZhY2UgaXMgZGlzYWJsZWRcIiB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yZXNwb25kKHJlcywgXCJzeW5jSW5kZXhcIiwgKCkgPT4gdGhpcy5hc1VzZXIocmVxKS5ydW5TeW5jSW5kZXgocmVxLmJvZHkgPz8ge30pKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGEgcm91dGUgYm9keSwgdHVybmluZyBhIGZhaWx1cmUgaW50byBhIEpTT04gZXJyb3IgcmVzcG9uc2UuXG4gICAqXG4gICAqIEFwcEtpdCdzIGByb3V0ZSgpYCByZWdpc3RlcnMgdGhlIGhhbmRsZXIgYXMtaXMsIHNvIGEgcmVqZWN0aW9uIGVzY2FwZXMgYXNcbiAgICogYW4gdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIGFuZCB0YWtlcyB0aGUgd2hvbGUgcHJvY2VzcyBkb3duIHJhdGhlciB0aGFuXG4gICAqIGZhaWxpbmcgdGhlIG9uZSByZXF1ZXN0LiBFdmVyeSByb3V0ZSBoZXJlIGdvZXMgdGhyb3VnaCB0aGlzLCBzbyBhIGJhZCBpbmRleFxuICAgKiBuYW1lIG9yIGEgVmVjdG9yIFNlYXJjaCBBUEkgZXJyb3IgcmV0dXJucyA1MDAgd2l0aCBhIG1lc3NhZ2UgaW5zdGVhZCBvZlxuICAgKiBraWxsaW5nIHRoZSBzZXJ2ZXIuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc3BvbmQoXG4gICAgcmVzOiBQYXJhbWV0ZXJzPFBhcmFtZXRlcnM8SUFwcFJvdXRlcltcInBvc3RcIl0+WzFdPlsxXSxcbiAgICBvcGVyYXRpb246IHN0cmluZyxcbiAgICBydW46ICgpID0+IFByb21pc2U8dW5rbm93bj4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICByZXMuanNvbihhd2FpdCBydW4oKSk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBzaGFyZWRFcnJvci5lcnJvck1lc3NhZ2UoY2F1c2UpO1xuICAgICAgbG9nZ2VyLndhcm4oXCJyb3V0ZS1mYWlsZWRcIiwgeyBvcGVyYXRpb24sIG1lc3NhZ2UgfSk7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiBtZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdXJmYWNlIHRoZSBpbmRleCBjYXRhbG9ndWUgKyBkZWZhdWx0cyBzbyBhIHNlYXJjaCBib3ggbmVlZHMgbm8gcm91bmQtdHJpcC4gKi9cbiAgb3ZlcnJpZGUgY2xpZW50Q29uZmlnKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSh7IGNvbmZpZzogdGhpcy5jb25maWcgfSk7XG4gICAgY29uc3QgcGF5bG9hZDogU2VhcmNoQ2xpZW50Q29uZmlnID0ge1xuICAgICAgaW5kZXhlczogY29uZmlnLmluZGV4ZXMubWFwKChpbmRleCkgPT4gKHtcbiAgICAgICAgbmFtZTogaW5kZXgubmFtZSxcbiAgICAgICAgYWxpYXM6IGluZGV4LmFsaWFzLFxuICAgICAgICAuLi4oaW5kZXgucHJpbWFyeUtleSA/IHsgcHJpbWFyeUtleTogaW5kZXgucHJpbWFyeUtleSB9IDoge30pLFxuICAgICAgICAuLi4oaW5kZXguY29sdW1ucyA/IHsgY29sdW1uczogaW5kZXguY29sdW1ucyB9IDoge30pLFxuICAgICAgICAuLi4oaW5kZXgubmFtZSA9PT0gY29uZmlnLmRlZmF1bHRJbmRleCA/IHsgaXNEZWZhdWx0OiB0cnVlIH0gOiB7fSksXG4gICAgICB9KSksXG4gICAgICAuLi4oY29uZmlnLmRlZmF1bHRJbmRleCA/IHsgZGVmYXVsdEluZGV4OiBjb25maWcuZGVmYXVsdEluZGV4IH0gOiB7fSksXG4gICAgICBwYWdlU2l6ZTogY29uZmlnLnBhZ2VTaXplLFxuICAgICAgYmFzZVBhdGg6IHRoaXMuYmFzZVBhdGgsXG4gICAgfTtcbiAgICByZXR1cm4gcGF5bG9hZCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgLyoqIEFwcEtpdCBgVG9vbFByb3ZpZGVyYDogdGhlIHRvb2wgZGVmaW5pdGlvbnMgb2ZmZXJlZCB0byBhbiBhZ2VudC4gKi9cbiAgZ2V0QWdlbnRUb29scygpOiBBZ2VudFRvb2xEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0b29sc0Zyb21SZWdpc3RyeSh0aGlzLnRvb2xzKTtcbiAgfVxuXG4gIC8qKiBBcHBLaXQgYFRvb2xQcm92aWRlcmA6IHJ1biBvbmUgdG9vbCBjYWxsLCB2YWxpZGF0aW5nIGlucHV0IGFnYWluc3QgaXRzIHNjaGVtYS4gKi9cbiAgYXN5bmMgZXhlY3V0ZUFnZW50VG9vbChuYW1lOiBzdHJpbmcsIGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGV4ZWN1dGVGcm9tUmVnaXN0cnkodGhpcy50b29scywgbmFtZSwgYXJncywgc2lnbmFsKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGV4cG9ydHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKiBTZWFyY2ggb25lIGluZGV4IChkZWZhdWx0IHdoZW4gb21pdHRlZCkuIFJ1bnMgYXMgdGhlIGN1cnJlbnQgY29udGV4dCB1c2VyLiAqL1xuICAgICAgc2VhcmNoOiAocmVxdWVzdDogc2hhcmVkU2VhcmNoLlNlYXJjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1blNlYXJjaChyZXF1ZXN0LCBzaWduYWwpLFxuICAgICAgLyoqIFNlYXJjaCBhY3Jvc3MgZXZlcnkgY29uZmlndXJlZCBpbmRleCBhbmQgbWVyZ2UgdGhlIGhpdHMuICovXG4gICAgICB1bml2ZXJzYWxTZWFyY2g6IChyZXF1ZXN0OiBzaGFyZWRTZWFyY2guVW5pdmVyc2FsU2VhcmNoUmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpID0+XG4gICAgICAgIHRoaXMucnVuVW5pdmVyc2FsU2VhcmNoKHJlcXVlc3QsIHNpZ25hbCksXG4gICAgICAvKiogQWRkIG9yIHVwZGF0ZSBkb2N1bWVudHMgaW4gYSBkaXJlY3QtYWNjZXNzIGluZGV4ICh0aHJvd3Mgd2hlbiB3cml0ZXMgYXJlIGRpc2FibGVkKS4gKi9cbiAgICAgIGFkZERvY3VtZW50czogKHJlcXVlc3Q6IHsgaW5kZXg/OiBzdHJpbmc7IGRvY3VtZW50czogdW5rbm93biB9LCBzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT5cbiAgICAgICAgdGhpcy5ydW5BZGREb2N1bWVudHMocmVxdWVzdCwgc2lnbmFsKSxcbiAgICAgIC8qKiBDcmVhdGUgYSBWZWN0b3IgU2VhcmNoIGluZGV4ICh0aHJvd3Mgd2hlbiB3cml0ZXMgYXJlIGRpc2FibGVkKS4gKi9cbiAgICAgIGNyZWF0ZUluZGV4OiAocmVxdWVzdDogc2hhcmVkU2VhcmNoLkNyZWF0ZUluZGV4UmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpID0+XG4gICAgICAgIHRoaXMucnVuQ3JlYXRlSW5kZXgocmVxdWVzdCwgc2lnbmFsKSxcbiAgICAgIC8qKiBTeW5jIGEgRGVsdGEgU3luYyBpbmRleCBmcm9tIGl0cyBzb3VyY2UgdGFibGUgKHRocm93cyB3aGVuIHdyaXRlcyBhcmUgZGlzYWJsZWQpLiAqL1xuICAgICAgc3luY0luZGV4OiAocmVxdWVzdDogc2hhcmVkU2VhcmNoLlN5bmNJbmRleFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1blN5bmNJbmRleChyZXF1ZXN0LCBzaWduYWwpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1blNlYXJjaChhcmdzOiB1bmtub3duLCBzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBzaGFyZWRTZWFyY2guc2VhcmNoUmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKTtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgIHJldHVybiBjbGllbnQuc2VhcmNoKHJlcXVlc3QucXVlcnksIHtcbiAgICAgIC4uLihyZXF1ZXN0LmluZGV4ID8geyBpbmRleDogcmVxdWVzdC5pbmRleCB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3QubGltaXQgPyB7IGxpbWl0OiByZXF1ZXN0LmxpbWl0IH0gOiB7fSksXG4gICAgICAuLi4ocmVxdWVzdC5tb2RlID8geyBtb2RlOiByZXF1ZXN0Lm1vZGUgfSA6IHt9KSxcbiAgICAgIC4uLihyZXF1ZXN0LmNvbHVtbnMgPyB7IGNvbHVtbnM6IHJlcXVlc3QuY29sdW1ucyB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3QuZmlsdGVyID8geyBmaWx0ZXI6IHJlcXVlc3QuZmlsdGVyIH0gOiB7fSksXG4gICAgICAuLi4ocmVxdWVzdC5zY29yZVRocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyBzY29yZVRocmVzaG9sZDogcmVxdWVzdC5zY29yZVRocmVzaG9sZCB9IDoge30pLFxuICAgICAgLi4uKHNpZ25hbCA/IHsgc2lnbmFsIH0gOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1blVuaXZlcnNhbFNlYXJjaChhcmdzOiB1bmtub3duLCBzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBzaGFyZWRTZWFyY2gudW5pdmVyc2FsU2VhcmNoUmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKTtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgIHJldHVybiBjbGllbnQudW5pdmVyc2FsU2VhcmNoKHJlcXVlc3QucXVlcnksIHtcbiAgICAgIC4uLihyZXF1ZXN0LmluZGV4ZXMgPyB7IGluZGV4ZXM6IHJlcXVlc3QuaW5kZXhlcyB9IDoge30pLFxuICAgICAgLi4uKHJlcXVlc3QubGltaXQgPyB7IGxpbWl0OiByZXF1ZXN0LmxpbWl0IH0gOiB7fSksXG4gICAgICAuLi4ocmVxdWVzdC5tb2RlID8geyBtb2RlOiByZXF1ZXN0Lm1vZGUgfSA6IHt9KSxcbiAgICAgIC4uLihzaWduYWwgPyB7IHNpZ25hbCB9IDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW5BZGREb2N1bWVudHMoYXJnczogdW5rbm93biwgc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCByZWNvcmQgPSAoYXJncyA/PyB7fSkgYXMgeyBpbmRleD86IHN0cmluZzsgZG9jdW1lbnRzOiB1bmtub3duIH07XG4gICAgY29uc3QgeyBjbGllbnQsIGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgIGNvbnN0IGRvY3VtZW50cyA9IHRvRG9jdW1lbnRBcnJheShyZWNvcmQuZG9jdW1lbnRzKTtcbiAgICBjb25zdCBpbmRleCA9IHJlY29yZC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiXCI7XG4gICAgcmV0dXJuIGNsaWVudC5hZGREb2N1bWVudHMoaW5kZXgsIGRvY3VtZW50cywgc2lnbmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuQ3JlYXRlSW5kZXgoYXJnczogdW5rbm93biwgc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gc2hhcmVkU2VhcmNoLmNyZWF0ZUluZGV4UmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKTtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgIHJldHVybiBjbGllbnQuY3JlYXRlSW5kZXgocmVxdWVzdC5uYW1lLCB0b0NyZWF0ZUluZGV4T3B0aW9ucyhyZXF1ZXN0LCBzaWduYWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuU3luY0luZGV4KGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHNoYXJlZFNlYXJjaC5zeW5jSW5kZXhSZXF1ZXN0U2NoZW1hLnBhcnNlKGFyZ3MpO1xuICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICBjb25zdCBpbmRleCA9IHJlcXVlc3QuaW5kZXggPz8gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBcIlwiO1xuICAgIGF3YWl0IGNsaWVudC5zeW5jSW5kZXgoaW5kZXgsIHNpZ25hbCk7XG4gICAgcmV0dXJuIHsgaW5kZXgsIHN5bmNlZDogdHJ1ZSB9O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIEFJIFNlYXJjaCBwbHVnaW4gd2l0aCBBcHBLaXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyBzZWFyY2hQbHVnaW4sIHRvb2wgYXMgc2VhcmNoVG9vbEFwaSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NlYXJjaFwiO1xuICogaW1wb3J0IHsgYWdlbnRzLCBwbHVnaW4gYXMgbWFzdHJhUGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuICpcbiAqIGNvbnN0IHN1cHBvcnQgPSBhZ2VudHMuY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiQW5zd2VyIGZyb20gdGhlIGRvY3M7IHVzZSBgc2VhcmNoYCB0byBmaW5kIHRoZW0uXCIsXG4gKiAgIHRvb2xzOiAoKSA9PiAoeyBzZWFyY2g6IHNlYXJjaFRvb2xBcGkuc2VhcmNoVG9vbCgpIH0pLFxuICogfSk7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW1xuICogICAgIHNlcnZlcigpLFxuICogICAgIHNlYXJjaFBsdWdpbi5zZWFyY2goeyBpbmRleDogXCJtYWluLnN1cHBvcnQuZG9jc1wiIH0pLFxuICogICAgIG1hc3RyYVBsdWdpbi5tYXN0cmEoeyBhZ2VudHM6IHN1cHBvcnQgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3Qgc2VhcmNoID0gdG9QbHVnaW4oU2VhcmNoUGx1Z2luKTtcbiJdfQ==
427
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQXdDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUYsT0FBTyxFQUNMLFFBQVEsRUFDUixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGlCQUFpQixHQUlsQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssSUFBSSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLElBQUksWUFBWSxFQUEyQixNQUFNLDBCQUEwQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBMkIsTUFBTSxhQUFhLENBQUM7QUFDakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRixPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIsMkJBQTJCLEVBQzNCLGlDQUFpQyxHQUNsQyxNQUFNLGFBQWEsQ0FBQztBQUVyQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXBD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Q3RDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQWEsRUFBRSxNQUFvQjtRQUM1RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQ3pELE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQzs7QUFHSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBleHRlbnNpb24gcGx1Z2luIChyZWdpc3RlcmVkIG5hbWU6IGBzZWFyY2hgKSBhcm91bmQgYSBzaWJsaW5nXG4gKiBgYWlTZWFyY2hgIHByb3ZpZGVyLiBOYXRpdmUgQXBwS2l0IG93bnMgVmVjdG9yIFNlYXJjaCBxdWVyeSBleGVjdXRpb247IHRoaXNcbiAqIHBsdWdpbiBhZGRzIHRoZSBzdXJmYWNlcyB0aGF0IHJlbWFpbiB1c2VmdWwgYWNyb3NzIG5hdGl2ZSBhbmQgTGFrZWJhc2VcbiAqIHByb3ZpZGVyczpcbiAqXG4gKiAgIC0gYSBgc2VhcmNoYCAvIGB1bml2ZXJzYWxfc2VhcmNoYCAvIChvcHQtaW4pIGBhZGRfZG9jdW1lbnRzYCB0b29sIHNldCBmb3JcbiAqICAgICBib3RoIE1hc3RyYSBhbmQgQXBwS2l0IGFnZW50cyAoYXV0b2NvbXBsZXRlIGlzIGEgc21hbGwtYGxpbWl0YCBzZWFyY2gpO1xuICogICAtIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVuc2lvbiByb3V0ZXMgdW5kZXIgYC9hcGkvc2VhcmNoYFxuICogICAgIChgUE9TVCAvYCBzZWFyY2gsIGBQT1NUIC91bml2ZXJzYWxgIGZlZGVyYXRlZCwgYEdFVCAvaW5kZXhlc2AgY2F0YWxvZ3VlLFxuICogICAgIGFuZCBgUE9TVCAvZG9jdW1lbnRzYCB3aGVuIHdyaXRlcyBhcmUgZW5hYmxlZCk7XG4gKiAgIC0gYSBgY2xpZW50Q29uZmlnKClgIHBheWxvYWQgc28gYSBVSSBrbm93cyB0aGUgaW5kZXhlcywgZGVmYXVsdCwgYW5kIHBhZ2VcbiAqICAgICBzaXplIGF0IGJvb3Qgd2l0aCBubyByb3VuZC10cmlwO1xuICogICAtIGBleHBvcnRzKClgIHNvIGFwcCBjb2RlIGNhbiBgYXBwa2l0LnNlYXJjaC5zZWFyY2goLi4uKWAgZGlyZWN0bHkuXG4gKlxuICogVmVjdG9yIFNlYXJjaCByZWFkcyBkZWxlZ2F0ZSB0byB0aGUgcmVnaXN0ZXJlZCBuYXRpdmUgQXBwS2l0IGBhaVNlYXJjaGBcbiAqIHBsdWdpbiwgcHJlc2VydmluZyBpdHMgT0JPLCBjYWNoaW5nLCByZXJhbmtpbmcsIGFuZCByZXNwb25zZSBoYW5kbGluZy4gVGhlXG4gKiBhbHRlcm5hdGl2ZSBgbGFrZWJhc2VBaVNlYXJjaGAgcHJvdmlkZXIgc3VwcGxpZXMgdGhlIHNhbWUgcXVlcnkgY29udHJhY3RcbiAqIG92ZXIgUG9zdGdyZVNRTCBmdWxsLXRleHQgc2VhcmNoLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBQbHVnaW4sIHRvUGx1Z2luLCB0eXBlIElBcHBSb3V0ZXIsIHR5cGUgUGx1Z2luTWFuaWZlc3QgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBhaVNlYXJjaCxcbiAgZGVmaW5lVG9vbCxcbiAgZXhlY3V0ZUZyb21SZWdpc3RyeSxcbiAgdG9vbHNGcm9tUmVnaXN0cnksXG4gIHR5cGUgQWdlbnRUb29sRGVmaW5pdGlvbixcbiAgdHlwZSBUb29sUHJvdmlkZXIsXG4gIHR5cGUgVG9vbFJlZ2lzdHJ5LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbmltcG9ydCB7IHBsdWdpbiBhcyBhcHBraXRQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGVycm9yIGFzIHNoYXJlZEVycm9yLCBsb2csIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBzZWFyY2ggYXMgc2hhcmVkU2VhcmNoLCB0eXBlIFNlYXJjaENsaWVudENvbmZpZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1zZWFyY2hcIjtcbmltcG9ydCB7IFNFQVJDSF9DT05GSUdfU0NIRU1BLCByZXNvbHZlU2VhcmNoQ29uZmlnLCB0eXBlIFNlYXJjaFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgdG9DcmVhdGVJbmRleE9wdGlvbnMgfSBmcm9tIFwiLi9pbmRleC10b29scy50c1wiO1xuaW1wb3J0IHsgbmF0aXZlQWlTZWFyY2hCYWNrZW5kIH0gZnJvbSBcIi4vbmF0aXZlLnRzXCI7XG5pbXBvcnQgeyB0b0RvY3VtZW50QXJyYXkgfSBmcm9tIFwiLi9xdWVyeS50c1wiO1xuaW1wb3J0IHsgZ2V0U2VhcmNoUnVudGltZSwgcmVzZXRTZWFyY2hSdW50aW1lIH0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHsgdG9TZWFyY2hPcHRpb25zLCB0b1VuaXZlcnNhbFNlYXJjaE9wdGlvbnMgfSBmcm9tIFwiLi9fc2VhcmNoLW9wdGlvbnMudHNcIjtcbmltcG9ydCB7XG4gIEFERF9ET0NVTUVOVFNfVE9PTF9ERVNDUklQVElPTixcbiAgQ1JFQVRFX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBTWU5DX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbn0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJzZWFyY2hcIik7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSBmb3IgYSB1bml2ZXJzYWwgKGZlZGVyYXRlZCkgc2VhcmNoIGFjcm9zcyBpbmRleGVzLiAqL1xuY29uc3QgVU5JVkVSU0FMX1JPVVRFID0gXCIvdW5pdmVyc2FsXCI7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSBzZXJ2aW5nIHRoZSBpbmRleCBjYXRhbG9ndWUgYSBzZWFyY2ggYm94IHJlYWRzLiAqL1xuY29uc3QgSU5ERVhFU19ST1VURSA9IFwiL2luZGV4ZXNcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlIGZvciBhZGRpbmcgZG9jdW1lbnRzIHRvIGEgZGlyZWN0LWFjY2VzcyBpbmRleC4gKi9cbmNvbnN0IERPQ1VNRU5UU19ST1VURSA9IFwiL2RvY3VtZW50c1wiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgZm9yIGNyZWF0aW5nIGEgVmVjdG9yIFNlYXJjaCBpbmRleC4gKi9cbmNvbnN0IElOREVYX1JPVVRFID0gXCIvaW5kZXhcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlIGZvciBzeW5jaW5nIGEgRGVsdGEgU3luYyBpbmRleCBmcm9tIGl0cyBzb3VyY2UgdGFibGUuICovXG5jb25zdCBJTkRFWF9TWU5DX1JPVVRFID0gXCIvaW5kZXgvc3luY1wiO1xuXG4vKipcbiAqIEFwcEtpdCBleHRlbnNpb24gcGx1Z2luIGZvciBhZ2VudCB0b29scywgZmVkZXJhdGVkIHNlYXJjaCwgYW5kIG9wdGlvbmFsXG4gKiBWZWN0b3IgU2VhcmNoIGxpZmVjeWNsZSBvcGVyYXRpb25zLiBSZWdpc3RlciBgYWlTZWFyY2goKWAgb3JcbiAqIGBsYWtlYmFzZUFpU2VhcmNoKClgIGJlZm9yZSB0aGlzIHBsdWdpbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgYWlTZWFyY2ggfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyBzZWFyY2hQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9zZWFyY2hcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgYWlTZWFyY2goe1xuICogICAgICAgaW5kZXhlczoge1xuICogICAgICAgICBkb2NzOiB7XG4gKiAgICAgICAgICAgaW5kZXhOYW1lOiBcIm1haW4uc3VwcG9ydC5kb2NzXCIsXG4gKiAgICAgICAgICAgY29sdW1uczogW1wiaWRcIiwgXCJ0aXRsZVwiLCBcImJvZHlcIl0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9LFxuICogICAgIH0pLFxuICogICAgIHNlYXJjaFBsdWdpbi5zZWFyY2goe1xuICogICAgICAgaW5kZXg6IFwibWFpbi5zdXBwb3J0LmRvY3NcIixcbiAqICAgICAgIGluZGV4ZXM6IFt7IG5hbWU6IFwibWFpbi5zdXBwb3J0LmRvY3NcIiwgYWxpYXM6IFwiZG9jc1wiIH1dLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFNlYXJjaFBsdWdpbiBleHRlbmRzIFBsdWdpbjxTZWFyY2hQbHVnaW5Db25maWc+IGltcGxlbWVudHMgVG9vbFByb3ZpZGVyIHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwic2VhcmNoXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiQUkgU2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlNlYXJjaCBEYXRhYnJpY2tzIEFJIFNlYXJjaCAoVmVjdG9yIFNlYXJjaCkgaW5kZXhlczogYWdlbnQgdG9vbHMsIEhUVFAgcm91dGVzIGZvciBhIFwiICtcbiAgICAgIFwic2VhcmNoIGJveCwgdW5pdmVyc2FsIHNlYXJjaCBhY3Jvc3MgaW5kZXhlcywgYW5kIGFuIG9wdC1pbiBkb2N1bWVudCB3cml0ZSBzdXJmYWNlLlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7XG4gICAgICByZXF1aXJlZDogW10sXG4gICAgICBvcHRpb25hbDogW10sXG4gICAgfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBTRUFSQ0hfQ09ORklHX1NDSEVNQSB9LFxuICB9IHNhdGlzZmllcyBQbHVnaW5NYW5pZmVzdDxcInNlYXJjaFwiPjtcblxuICAvKiogVGhlIGJhc2UgcGF0aCBBcHBLaXQgbW91bnRzIHRoaXMgcGx1Z2luJ3Mgcm91dGVzIHVuZGVyLiAqL1xuICBwcml2YXRlIGdldCBiYXNlUGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgL2FwaS8ke1NlYXJjaFBsdWdpbi5tYW5pZmVzdC5uYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRvb2xzIHRoaXMgcGx1Z2luIG9mZmVycyB0byBhbiBBcHBLaXQgYWdlbnQuIGBzZWFyY2hgIC9cbiAgICogYHVuaXZlcnNhbF9zZWFyY2hgIGFyZSByZWFkczsgYGFkZF9kb2N1bWVudHNgIC8gYGNyZWF0ZV9pbmRleGAgL1xuICAgKiBgc3luY19pbmRleGAgYXJlIG9ubHkgb2ZmZXJlZCB3aGVuIHRoZSB3cml0ZSBzdXJmYWNlIGlzIGVuYWJsZWQuIE5vbmUgaXNcbiAgICogYXV0b0luaGVyaXRhYmxlOiBldmVyeSB0b29sIHJ1bnMgdW5kZXIgdGhlIGNhbGxlcidzIGlkZW50aXR5LCBzbyBpdCBtdXN0IGJlXG4gICAqIGdyYW50ZWQgZXhwbGljaXRseS5cbiAgICovXG4gIHByaXZhdGUgZ2V0IHRvb2xzKCk6IFRvb2xSZWdpc3RyeSB7XG4gICAgY29uc3QgeyBjb25maWcsIHJlYWRCYWNrZW5kIH0gPSBnZXRTZWFyY2hSdW50aW1lKHsgY29uZmlnOiB0aGlzLmNvbmZpZyB9KTtcbiAgICBjb25zdCByZWdpc3RyeTogVG9vbFJlZ2lzdHJ5ID0ge1xuICAgICAgc2VhcmNoOiBkZWZpbmVUb29sKHtcbiAgICAgICAgZGVzY3JpcHRpb246IFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICBzY2hlbWE6IHNoYXJlZFNlYXJjaC5zZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuU2VhcmNoKGFyZ3MsIHNpZ25hbCksXG4gICAgICB9KSxcbiAgICAgIHVuaXZlcnNhbF9zZWFyY2g6IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjogVU5JVkVSU0FMX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICBzY2hlbWE6IHNoYXJlZFNlYXJjaC51bml2ZXJzYWxTZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICAgICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwicmVhZFwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuVW5pdmVyc2FsU2VhcmNoKGFyZ3MsIHNpZ25hbCksXG4gICAgICB9KSxcbiAgICB9O1xuICAgIGlmIChjb25maWcuYWxsb3dXcml0ZSkge1xuICAgICAgcmVnaXN0cnkuYWRkX2RvY3VtZW50cyA9IGRlZmluZVRvb2woe1xuICAgICAgICBkZXNjcmlwdGlvbjogQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICBzY2hlbWE6IHNoYXJlZFNlYXJjaC5zZWFyY2hSZXF1ZXN0U2NoZW1hXG4gICAgICAgICAgLnBpY2soeyBpbmRleDogdHJ1ZSB9KVxuICAgICAgICAgIC5leHRlbmQoeyBkb2N1bWVudHM6IHNoYXJlZFNlYXJjaC5zZWFyY2hEb2N1bWVudFNjaGVtYS5hcnJheSgpIH0pLFxuICAgICAgICBhbm5vdGF0aW9uczogeyBlZmZlY3Q6IFwid3JpdGVcIiwgcmVxdWlyZXNVc2VyQ29udGV4dDogdHJ1ZSB9LFxuICAgICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PiB0aGlzLnJ1bkFkZERvY3VtZW50cyhhcmdzLCBzaWduYWwpLFxuICAgICAgfSk7XG4gICAgICBpZiAocmVhZEJhY2tlbmQ/LnN1cHBvcnRzTGlmZWN5Y2xlKSB7XG4gICAgICAgIHJlZ2lzdHJ5LmNyZWF0ZV9pbmRleCA9IGRlZmluZVRvb2woe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICAgICAgICBzY2hlbWE6IHNoYXJlZFNlYXJjaC5jcmVhdGVJbmRleFJlcXVlc3RTY2hlbWEsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcIndyaXRlXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuQ3JlYXRlSW5kZXgoYXJncywgc2lnbmFsKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJlZ2lzdHJ5LnN5bmNfaW5kZXggPSBkZWZpbmVUb29sKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICAgICAgICAgIHNjaGVtYTogc2hhcmVkU2VhcmNoLnN5bmNJbmRleFJlcXVlc3RTY2hlbWEsXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcIndyaXRlXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IHRoaXMucnVuU3luY0luZGV4KGFyZ3MsIHNpZ25hbCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVnaXN0cnk7XG4gIH1cblxuICAvKiogUHJpbWUgdGhlIHNoYXJlZCBydW50aW1lIGZyb20gY29uZmlnIGFuZCBsb2cgdGhlIGVmZmVjdGl2ZSBwb2xpY3kgYXQgYm9vdC4gKi9cbiAgb3ZlcnJpZGUgYXN5bmMgc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVhZEJhY2tlbmQgPSB0aGlzLnJlc29sdmVQcm92aWRlckJhY2tlbmQoKTtcbiAgICAvLyBUaGUgcnVudGltZSBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gYnVpbHQgKGNvbmZpZy1vbmx5KSB3aGVuIGB0b29scygpYCByYW5cbiAgICAvLyBkdXJpbmcgcmVnaXN0cmF0aW9uOyByZWJ1aWxkIGl0IHNvIGl0IGNhcnJpZXMgdGhlIGNob3NlbiBiYWNrZW5kLlxuICAgIHJlc2V0U2VhcmNoUnVudGltZSgpO1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRTZWFyY2hSdW50aW1lKHtcbiAgICAgIGNvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICByZWFkQmFja2VuZCxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGJhY2tlbmQ6IHJlYWRCYWNrZW5kLnN1cHBvcnRzTGlmZWN5Y2xlID8gXCJhcHBraXQtYWktc2VhcmNoXCIgOiBcImxha2ViYXNlLWFpLXNlYXJjaFwiLFxuICAgICAgZGVmYXVsdEluZGV4OiBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiKG5vbmUgLSBwYXNzIHBlciByZXF1ZXN0KVwiLFxuICAgICAgaW5kZXhlczogY29uZmlnLmluZGV4ZXMubWFwKChpKSA9PiBpLmFsaWFzKSxcbiAgICAgIHBhZ2VTaXplOiBjb25maWcucGFnZVNpemUsXG4gICAgICBtb2RlOiBjb25maWcubW9kZSxcbiAgICAgIGFsbG93V3JpdGU6IGNvbmZpZy5hbGxvd1dyaXRlLFxuICAgICAgYmFzZVBhdGg6IHRoaXMuYmFzZVBhdGgsXG4gICAgICBlbnN1cmVPblNldHVwOiBjb25maWcuZW5zdXJlT25TZXR1cFxuICAgICAgICA/IChjb25maWcuZW5zdXJlT25TZXR1cC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4KVxuICAgICAgICA6IFwib2ZmXCIsXG4gICAgfSk7XG4gICAgLy8gUHJvdmlzaW9uIGEgcmVhbCBpbmRleCBpbiB0aGUgQkFDS0dST1VORCBzbyBhIHNsb3cgZmlyc3QtdGltZSBlbmRwb2ludCBvclxuICAgIC8vIGluZGV4IGJ1aWxkIG5ldmVyIGJsb2NrcyB0aGUgc2VydmVyIGZyb20gY29taW5nIHVwLlxuICAgIGlmIChjb25maWcuZW5zdXJlT25TZXR1cCAmJiByZWFkQmFja2VuZC5zdXBwb3J0c0xpZmVjeWNsZSkge1xuICAgICAgdm9pZCB0aGlzLnJ1bkVuc3VyZU9uU2V0dXAoY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzb2x2ZSB0aGUgcmVnaXN0ZXJlZCBBcHBLaXQtY29tcGF0aWJsZSBBSSBTZWFyY2ggcHJvdmlkZXIuICovXG4gIHByaXZhdGUgcmVzb2x2ZVByb3ZpZGVyQmFja2VuZCgpOiBSZXR1cm5UeXBlPHR5cGVvZiBuYXRpdmVBaVNlYXJjaEJhY2tlbmQ+IHtcbiAgICBjb25zdCBwcm92aWRlciA9IGFwcGtpdFBsdWdpbi5yZXF1aXJlKHRoaXMuY29udGV4dCwgYWlTZWFyY2gsIHRoaXMpLmV4cG9ydHMoKTtcbiAgICByZXR1cm4gbmF0aXZlQWlTZWFyY2hCYWNrZW5kKHByb3ZpZGVyLCByZXNvbHZlU2VhcmNoQ29uZmlnKHRoaXMuY29uZmlnKSk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoZSBlbmRwb2ludCArIGluZGV4IGV4aXN0IGFuZCBzZWVkIHRoZW0sIGhvbm9yaW5nIGBlbnN1cmVPblNldHVwYC5cbiAgICogVXNlcyBib290LXRpbWUgU0RLIGF1dGggKGVudiAvIGNvbmZpZyBwcm9maWxlKSB2aWEgdGhlIGNsaWVudCdzXG4gICAqIG91dC1vZi1yZXF1ZXN0IGZhbGxiYWNrLiBGYWlsdXJlcyBhcmUgbG9nZ2VkLCBuZXZlciB0aHJvd24gLSBhIHNlYXJjaCBhcHBcbiAgICogc2hvdWxkIHN0aWxsIHN0YXJ0IGV2ZW4gaWYgcHJvdmlzaW9uaW5nIGlzIHNsb3cgb3IgYSBwZXJtaXNzaW9uIGlzIG1pc3NpbmcuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkVuc3VyZU9uU2V0dXAoXG4gICAgY29uZmlnOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRTZWFyY2hSdW50aW1lPltcImNvbmZpZ1wiXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3BlYyA9IGNvbmZpZy5lbnN1cmVPblNldHVwO1xuICAgIGlmICghc3BlYykgcmV0dXJuO1xuICAgIGNvbnN0IGluZGV4ID0gc3RyaW5nLnRyaW1Ub051bGwoc3BlYy5pbmRleCkgPz8gY29uZmlnLmRlZmF1bHRJbmRleDtcbiAgICBpZiAoIWluZGV4KSB7XG4gICAgICBsb2dnZXIud2FybihcImVuc3VyZS1za2lwcGVkXCIsIHtcbiAgICAgICAgcmVhc29uOiBcIm5vIGluZGV4IG5hbWUgKHNldCBgaW5kZXhgIG9yIGBlbnN1cmVPblNldHVwLmluZGV4YClcIixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkb2N1bWVudHMgPSBzcGVjLmRvY3VtZW50cyA/PyBbXTtcbiAgICAvLyBJbmZlciBhIG1hbmFnZWQtZGlyZWN0LWFjY2VzcyBzY2hlbWEgZnJvbSB0aGUgZmlyc3Qgc2VlZCByb3cgd2hlbiBub3QgZ2l2ZW4uXG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIHNwZWMuc2NoZW1hID8/XG4gICAgICAoZG9jdW1lbnRzLmxlbmd0aCA+IDAgJiYgIXNwZWMuc291cmNlVGFibGVcbiAgICAgICAgPyB0aGlzLmluZmVyU2NoZW1hKGRvY3VtZW50c1swXSwgc3BlYy5wcmltYXJ5S2V5ID8/IFwiaWRcIiwgc3BlYy50ZXh0Q29sdW1uID8/IFwidGV4dFwiKVxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgdHJ5IHtcbiAgICAgIGxvZ2dlci5pbmZvKFwiZW5zdXJlLXN0YXJ0XCIsIHsgaW5kZXggfSk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IGNsaWVudC5wcm92aXNpb24oaW5kZXgsIHtcbiAgICAgICAgLi4uKHNwZWMuZW5kcG9pbnQgPyB7IGVuZHBvaW50OiBzcGVjLmVuZHBvaW50IH0gOiB7fSksXG4gICAgICAgIC4uLihzcGVjLnByaW1hcnlLZXkgPyB7IHByaW1hcnlLZXk6IHNwZWMucHJpbWFyeUtleSB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy50ZXh0Q29sdW1uID8geyBlbWJlZGRpbmdTb3VyY2VDb2x1bW46IHNwZWMudGV4dENvbHVtbiB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy5lbWJlZGRpbmdNb2RlbCA/IHsgZW1iZWRkaW5nTW9kZWw6IHNwZWMuZW1iZWRkaW5nTW9kZWwgfSA6IHt9KSxcbiAgICAgICAgLi4uKHNwZWMuc291cmNlVGFibGUgPyB7IHNvdXJjZVRhYmxlOiBzcGVjLnNvdXJjZVRhYmxlIH0gOiB7fSksXG4gICAgICAgIC4uLihzY2hlbWEgPyB7IHNjaGVtYSB9IDoge30pLFxuICAgICAgICAuLi4oc3BlYy50aW1lb3V0TXMgPyB7IHRpbWVvdXRNczogc3BlYy50aW1lb3V0TXMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGRvY3VtZW50cy5sZW5ndGggPiAwID8geyBzZWVkOiBkb2N1bWVudHMgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oXCJlbnN1cmUtcmVhZHlcIiwge1xuICAgICAgICBpbmRleDogaW5mby5uYW1lLFxuICAgICAgICByZWFkeTogaW5mby5yZWFkeSxcbiAgICAgICAgcm93Q291bnQ6IGluZm8ucm93Q291bnQgPz8gMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGNhdXNlKSB7XG4gICAgICBsb2dnZXIud2FybihcImVuc3VyZS1mYWlsZWRcIiwgeyBpbmRleCwgbWVzc2FnZTogc2hhcmVkRXJyb3IuZXJyb3JNZXNzYWdlKGNhdXNlKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogQnVpbGQgYSBWZWN0b3IgU2VhcmNoIGBzY2hlbWFfanNvbmAgbWFwIGZyb20gYSBzZWVkIGRvY3VtZW50J3MgdmFsdWUgdHlwZXMuICovXG4gIHByaXZhdGUgaW5mZXJTY2hlbWEoXG4gICAgZG9jOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBwcmltYXJ5S2V5OiBzdHJpbmcsXG4gICAgdGV4dENvbHVtbjogc3RyaW5nLFxuICApOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBzY2hlbWE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IFtwcmltYXJ5S2V5XTogXCJzdHJpbmdcIiwgW3RleHRDb2x1bW5dOiBcInN0cmluZ1wiIH07XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZG9jKSkge1xuICAgICAgaWYgKGtleSBpbiBzY2hlbWEpIGNvbnRpbnVlO1xuICAgICAgc2NoZW1hW2tleV0gPVxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICA/IE51bWJlci5pc0ludGVnZXIodmFsdWUpXG4gICAgICAgICAgICA/IFwiaW50XCJcbiAgICAgICAgICAgIDogXCJkb3VibGVcIlxuICAgICAgICAgIDogdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIlxuICAgICAgICAgICAgPyBcImJvb2xlYW5cIlxuICAgICAgICAgICAgOiBcInN0cmluZ1wiO1xuICAgIH1cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIHNoYXJlZCBydW50aW1lIHNvIGEgcmVzdGFydGVkIGFwcCByZS1yZXNvbHZlcyBjb25maWcuICovXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc2V0U2VhcmNoUnVudGltZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk6IHZvaWQge1xuICAgIHN1cGVyLmFib3J0QWN0aXZlT3BlcmF0aW9ucygpO1xuICAgIHZvaWQgdGhpcy5zaHV0ZG93bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdW50IGV4dGVuc2lvbiByb3V0ZXMgdW5kZXIgYC9hcGkvc2VhcmNoYC4gU2luZ2xlLWluZGV4IHF1ZXJpZXMgc3RheSBvblxuICAgKiB0aGUgcHJvdmlkZXIncyBuYXRpdmUgYC9hcGkvYWktc2VhcmNoLzphbGlhcy9xdWVyeWAgc3VyZmFjZS5cbiAgICovXG4gIG92ZXJyaWRlIGluamVjdFJvdXRlcyhyb3V0ZXI6IElBcHBSb3V0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJ1bml2ZXJzYWxTZWFyY2hcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBVTklWRVJTQUxfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNwb25kKHJlcywgXCJ1bml2ZXJzYWxTZWFyY2hcIiwgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBzaGFyZWRTZWFyY2gudW5pdmVyc2FsU2VhcmNoUmVxdWVzdFNjaGVtYS5wYXJzZShyZXEuYm9keSA/PyB7fSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXNVc2VyKHJlcSkucnVuVW5pdmVyc2FsU2VhcmNoKHJlcXVlc3QpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiaW5kZXhlc1wiLFxuICAgICAgbWV0aG9kOiBcImdldFwiLFxuICAgICAgcGF0aDogSU5ERVhFU19ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLmpzb24odGhpcy5jbGllbnRDb25maWcoKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcImRvY3VtZW50c1wiLFxuICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgIHBhdGg6IERPQ1VNRU5UU19ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgICBpZiAoIWNvbmZpZy5hbGxvd1dyaXRlKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDMpLmpzb24oeyBlcnJvcjogXCJ0aGUgZG9jdW1lbnQgd3JpdGUgc3VyZmFjZSBpcyBkaXNhYmxlZFwiIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlc3BvbmQocmVzLCBcImFkZERvY3VtZW50c1wiLCAoKSA9PlxuICAgICAgICAgIHRoaXMuYXNVc2VyKHJlcSkucnVuQWRkRG9jdW1lbnRzKHJlcS5ib2R5ID8/IHt9KSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiY3JlYXRlSW5kZXhcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBJTkRFWF9ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZywgcmVhZEJhY2tlbmQgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgICAgaWYgKCFjb25maWcuYWxsb3dXcml0ZSB8fCAhcmVhZEJhY2tlbmQ/LnN1cHBvcnRzTGlmZWN5Y2xlKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDMpLmpzb24oeyBlcnJvcjogXCJ0aGUgaW5kZXggd3JpdGUgc3VyZmFjZSBpcyBkaXNhYmxlZFwiIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJlc3BvbmQocmVzLCBcImNyZWF0ZUluZGV4XCIsICgpID0+XG4gICAgICAgICAgdGhpcy5hc1VzZXIocmVxKS5ydW5DcmVhdGVJbmRleChyZXEuYm9keSA/PyB7fSksXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcInN5bmNJbmRleFwiLFxuICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgIHBhdGg6IElOREVYX1NZTkNfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWcsIHJlYWRCYWNrZW5kIH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICAgIGlmICghY29uZmlnLmFsbG93V3JpdGUgfHwgIXJlYWRCYWNrZW5kPy5zdXBwb3J0c0xpZmVjeWNsZSkge1xuICAgICAgICAgIHJlcy5zdGF0dXMoNDAzKS5qc29uKHsgZXJyb3I6IFwidGhlIGluZGV4IHdyaXRlIHN1cmZhY2UgaXMgZGlzYWJsZWRcIiB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5yZXNwb25kKHJlcywgXCJzeW5jSW5kZXhcIiwgKCkgPT4gdGhpcy5hc1VzZXIocmVxKS5ydW5TeW5jSW5kZXgocmVxLmJvZHkgPz8ge30pKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIGEgcm91dGUgYm9keSwgdHVybmluZyBhIGZhaWx1cmUgaW50byBhIEpTT04gZXJyb3IgcmVzcG9uc2UuXG4gICAqXG4gICAqIEFwcEtpdCdzIGByb3V0ZSgpYCByZWdpc3RlcnMgdGhlIGhhbmRsZXIgYXMtaXMsIHNvIGEgcmVqZWN0aW9uIGVzY2FwZXMgYXNcbiAgICogYW4gdW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIGFuZCB0YWtlcyB0aGUgd2hvbGUgcHJvY2VzcyBkb3duIHJhdGhlciB0aGFuXG4gICAqIGZhaWxpbmcgdGhlIG9uZSByZXF1ZXN0LiBFdmVyeSByb3V0ZSBoZXJlIGdvZXMgdGhyb3VnaCB0aGlzLCBzbyBhIGJhZCBpbmRleFxuICAgKiBuYW1lIG9yIGEgVmVjdG9yIFNlYXJjaCBBUEkgZXJyb3IgcmV0dXJucyA1MDAgd2l0aCBhIG1lc3NhZ2UgaW5zdGVhZCBvZlxuICAgKiBraWxsaW5nIHRoZSBzZXJ2ZXIuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc3BvbmQoXG4gICAgcmVzOiBQYXJhbWV0ZXJzPFBhcmFtZXRlcnM8SUFwcFJvdXRlcltcInBvc3RcIl0+WzFdPlsxXSxcbiAgICBvcGVyYXRpb246IHN0cmluZyxcbiAgICBydW46ICgpID0+IFByb21pc2U8dW5rbm93bj4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICByZXMuanNvbihhd2FpdCBydW4oKSk7XG4gICAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBzaGFyZWRFcnJvci5lcnJvck1lc3NhZ2UoY2F1c2UpO1xuICAgICAgbG9nZ2VyLndhcm4oXCJyb3V0ZS1mYWlsZWRcIiwgeyBvcGVyYXRpb24sIG1lc3NhZ2UgfSk7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiBtZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdXJmYWNlIHRoZSBpbmRleCBjYXRhbG9ndWUgKyBkZWZhdWx0cyBzbyBhIHNlYXJjaCBib3ggbmVlZHMgbm8gcm91bmQtdHJpcC4gKi9cbiAgb3ZlcnJpZGUgY2xpZW50Q29uZmlnKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSh7IGNvbmZpZzogdGhpcy5jb25maWcgfSk7XG4gICAgY29uc3QgcGF5bG9hZDogU2VhcmNoQ2xpZW50Q29uZmlnID0ge1xuICAgICAgaW5kZXhlczogY29uZmlnLmluZGV4ZXMubWFwKChpbmRleCkgPT4gKHtcbiAgICAgICAgbmFtZTogaW5kZXgubmFtZSxcbiAgICAgICAgYWxpYXM6IGluZGV4LmFsaWFzLFxuICAgICAgICAuLi4oaW5kZXgucHJpbWFyeUtleSA/IHsgcHJpbWFyeUtleTogaW5kZXgucHJpbWFyeUtleSB9IDoge30pLFxuICAgICAgICAuLi4oaW5kZXguY29sdW1ucyA/IHsgY29sdW1uczogaW5kZXguY29sdW1ucyB9IDoge30pLFxuICAgICAgICAuLi4oaW5kZXgubmFtZSA9PT0gY29uZmlnLmRlZmF1bHRJbmRleCA/IHsgaXNEZWZhdWx0OiB0cnVlIH0gOiB7fSksXG4gICAgICB9KSksXG4gICAgICAuLi4oY29uZmlnLmRlZmF1bHRJbmRleCA/IHsgZGVmYXVsdEluZGV4OiBjb25maWcuZGVmYXVsdEluZGV4IH0gOiB7fSksXG4gICAgICBwYWdlU2l6ZTogY29uZmlnLnBhZ2VTaXplLFxuICAgICAgYmFzZVBhdGg6IHRoaXMuYmFzZVBhdGgsXG4gICAgfTtcbiAgICByZXR1cm4gcGF5bG9hZCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgLyoqIEFwcEtpdCBgVG9vbFByb3ZpZGVyYDogdGhlIHRvb2wgZGVmaW5pdGlvbnMgb2ZmZXJlZCB0byBhbiBhZ2VudC4gKi9cbiAgZ2V0QWdlbnRUb29scygpOiBBZ2VudFRvb2xEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0b29sc0Zyb21SZWdpc3RyeSh0aGlzLnRvb2xzKTtcbiAgfVxuXG4gIC8qKiBBcHBLaXQgYFRvb2xQcm92aWRlcmA6IHJ1biBvbmUgdG9vbCBjYWxsLCB2YWxpZGF0aW5nIGlucHV0IGFnYWluc3QgaXRzIHNjaGVtYS4gKi9cbiAgYXN5bmMgZXhlY3V0ZUFnZW50VG9vbChuYW1lOiBzdHJpbmcsIGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGV4ZWN1dGVGcm9tUmVnaXN0cnkodGhpcy50b29scywgbmFtZSwgYXJncywgc2lnbmFsKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGV4cG9ydHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKiBTZWFyY2ggb25lIGluZGV4IChkZWZhdWx0IHdoZW4gb21pdHRlZCkuIFJ1bnMgYXMgdGhlIGN1cnJlbnQgY29udGV4dCB1c2VyLiAqL1xuICAgICAgc2VhcmNoOiAocmVxdWVzdDogc2hhcmVkU2VhcmNoLlNlYXJjaFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1blNlYXJjaChyZXF1ZXN0LCBzaWduYWwpLFxuICAgICAgLyoqIFNlYXJjaCBhY3Jvc3MgZXZlcnkgY29uZmlndXJlZCBpbmRleCBhbmQgbWVyZ2UgdGhlIGhpdHMuICovXG4gICAgICB1bml2ZXJzYWxTZWFyY2g6IChyZXF1ZXN0OiBzaGFyZWRTZWFyY2guVW5pdmVyc2FsU2VhcmNoUmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpID0+XG4gICAgICAgIHRoaXMucnVuVW5pdmVyc2FsU2VhcmNoKHJlcXVlc3QsIHNpZ25hbCksXG4gICAgICAvKiogQWRkIG9yIHVwZGF0ZSBkb2N1bWVudHMgaW4gYSBkaXJlY3QtYWNjZXNzIGluZGV4ICh0aHJvd3Mgd2hlbiB3cml0ZXMgYXJlIGRpc2FibGVkKS4gKi9cbiAgICAgIGFkZERvY3VtZW50czogKHJlcXVlc3Q6IHsgaW5kZXg/OiBzdHJpbmc7IGRvY3VtZW50czogdW5rbm93biB9LCBzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT5cbiAgICAgICAgdGhpcy5ydW5BZGREb2N1bWVudHMocmVxdWVzdCwgc2lnbmFsKSxcbiAgICAgIC8qKiBDcmVhdGUgYSBWZWN0b3IgU2VhcmNoIGluZGV4ICh0aHJvd3Mgd2hlbiB3cml0ZXMgYXJlIGRpc2FibGVkKS4gKi9cbiAgICAgIGNyZWF0ZUluZGV4OiAocmVxdWVzdDogc2hhcmVkU2VhcmNoLkNyZWF0ZUluZGV4UmVxdWVzdCwgc2lnbmFsPzogQWJvcnRTaWduYWwpID0+XG4gICAgICAgIHRoaXMucnVuQ3JlYXRlSW5kZXgocmVxdWVzdCwgc2lnbmFsKSxcbiAgICAgIC8qKiBTeW5jIGEgRGVsdGEgU3luYyBpbmRleCBmcm9tIGl0cyBzb3VyY2UgdGFibGUgKHRocm93cyB3aGVuIHdyaXRlcyBhcmUgZGlzYWJsZWQpLiAqL1xuICAgICAgc3luY0luZGV4OiAocmVxdWVzdDogc2hhcmVkU2VhcmNoLlN5bmNJbmRleFJlcXVlc3QsIHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnJ1blN5bmNJbmRleChyZXF1ZXN0LCBzaWduYWwpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJ1blNlYXJjaChhcmdzOiB1bmtub3duLCBzaWduYWw/OiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBzaGFyZWRTZWFyY2guc2VhcmNoUmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKTtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgIHJldHVybiBjbGllbnQuc2VhcmNoKHJlcXVlc3QucXVlcnksIHRvU2VhcmNoT3B0aW9ucyhyZXF1ZXN0LCBzaWduYWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuVW5pdmVyc2FsU2VhcmNoKGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHNoYXJlZFNlYXJjaC51bml2ZXJzYWxTZWFyY2hSZXF1ZXN0U2NoZW1hLnBhcnNlKGFyZ3MpO1xuICAgIGNvbnN0IHsgY2xpZW50IH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgcmV0dXJuIGNsaWVudC51bml2ZXJzYWxTZWFyY2gocmVxdWVzdC5xdWVyeSwgdG9Vbml2ZXJzYWxTZWFyY2hPcHRpb25zKHJlcXVlc3QsIHNpZ25hbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBydW5BZGREb2N1bWVudHMoYXJnczogdW5rbm93biwgc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCByZWNvcmQgPSAoYXJncyA/PyB7fSkgYXMgeyBpbmRleD86IHN0cmluZzsgZG9jdW1lbnRzOiB1bmtub3duIH07XG4gICAgY29uc3QgeyBjbGllbnQsIGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgIGNvbnN0IGRvY3VtZW50cyA9IHRvRG9jdW1lbnRBcnJheShyZWNvcmQuZG9jdW1lbnRzKTtcbiAgICBjb25zdCBpbmRleCA9IHJlY29yZC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiXCI7XG4gICAgcmV0dXJuIGNsaWVudC5hZGREb2N1bWVudHMoaW5kZXgsIGRvY3VtZW50cywgc2lnbmFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuQ3JlYXRlSW5kZXgoYXJnczogdW5rbm93biwgc2lnbmFsPzogQWJvcnRTaWduYWwpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gc2hhcmVkU2VhcmNoLmNyZWF0ZUluZGV4UmVxdWVzdFNjaGVtYS5wYXJzZShhcmdzKTtcbiAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgIHJldHVybiBjbGllbnQuY3JlYXRlSW5kZXgocmVxdWVzdC5uYW1lLCB0b0NyZWF0ZUluZGV4T3B0aW9ucyhyZXF1ZXN0LCBzaWduYWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcnVuU3luY0luZGV4KGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHNoYXJlZFNlYXJjaC5zeW5jSW5kZXhSZXF1ZXN0U2NoZW1hLnBhcnNlKGFyZ3MpO1xuICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICBjb25zdCBpbmRleCA9IHJlcXVlc3QuaW5kZXggPz8gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBcIlwiO1xuICAgIGF3YWl0IGNsaWVudC5zeW5jSW5kZXgoaW5kZXgsIHNpZ25hbCk7XG4gICAgcmV0dXJuIHsgaW5kZXgsIHN5bmNlZDogdHJ1ZSB9O1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIEFJIFNlYXJjaCBwbHVnaW4gd2l0aCBBcHBLaXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyBzZWFyY2hQbHVnaW4sIHRvb2wgYXMgc2VhcmNoVG9vbEFwaSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NlYXJjaFwiO1xuICogaW1wb3J0IHsgYWdlbnRzLCBwbHVnaW4gYXMgbWFzdHJhUGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuICpcbiAqIGNvbnN0IHN1cHBvcnQgPSBhZ2VudHMuY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiQW5zd2VyIGZyb20gdGhlIGRvY3M7IHVzZSBgc2VhcmNoYCB0byBmaW5kIHRoZW0uXCIsXG4gKiAgIHRvb2xzOiAoKSA9PiAoeyBzZWFyY2g6IHNlYXJjaFRvb2xBcGkuc2VhcmNoVG9vbCgpIH0pLFxuICogfSk7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW1xuICogICAgIHNlcnZlcigpLFxuICogICAgIHNlYXJjaFBsdWdpbi5zZWFyY2goeyBpbmRleDogXCJtYWluLnN1cHBvcnQuZG9jc1wiIH0pLFxuICogICAgIG1hc3RyYVBsdWdpbi5tYXN0cmEoeyBhZ2VudHM6IHN1cHBvcnQgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3Qgc2VhcmNoID0gdG9QbHVnaW4oU2VhcmNoUGx1Z2luKTtcbiJdfQ==
package/lib/src/tool.js CHANGED
@@ -19,6 +19,7 @@ import { z } from "zod";
19
19
  import { toCreateIndexOptions } from "./index-tools.js";
20
20
  import { toDocumentArray } from "./query.js";
21
21
  import { getSearchRuntime } from "./runtime.js";
22
+ import { toSearchOptions, toUniversalSearchOptions } from "./_search-options.js";
22
23
  import { ADD_DOCUMENTS_TOOL_DESCRIPTION, CREATE_INDEX_TOOL_DESCRIPTION, SEARCH_TOOL_DESCRIPTION, SYNC_INDEX_TOOL_DESCRIPTION, UNIVERSAL_SEARCH_TOOL_DESCRIPTION, createIndexToolSchema, indexInfoSchema, searchResultSchema, searchToolSchema, syncIndexToolSchema, universalSearchToolSchema, } from "./schema.js";
23
24
  /**
24
25
  * Build the `search` tool. Spread it into any agent that should be able to look
@@ -44,15 +45,7 @@ export function searchTool(options = {}) {
44
45
  execute: async (input, context) => {
45
46
  const request = searchToolSchema.parse(input);
46
47
  const { client } = getSearchRuntime();
47
- return client.search(request.query, {
48
- ...(request.index ? { index: request.index } : {}),
49
- ...(request.limit ? { limit: request.limit } : {}),
50
- ...(request.mode ? { mode: request.mode } : {}),
51
- ...(request.columns ? { columns: request.columns } : {}),
52
- ...(request.filter ? { filter: request.filter } : {}),
53
- ...(request.scoreThreshold !== undefined ? { scoreThreshold: request.scoreThreshold } : {}),
54
- ...(context?.abortSignal ? { signal: context.abortSignal } : {}),
55
- });
48
+ return client.search(request.query, toSearchOptions(request, context?.abortSignal));
56
49
  },
57
50
  });
58
51
  }
@@ -66,12 +59,7 @@ export function universalSearchTool(options = {}) {
66
59
  execute: async (input, context) => {
67
60
  const request = universalSearchToolSchema.parse(input);
68
61
  const { client } = getSearchRuntime();
69
- return client.universalSearch(request.query, {
70
- ...(request.indexes ? { indexes: request.indexes } : {}),
71
- ...(request.limit ? { limit: request.limit } : {}),
72
- ...(request.mode ? { mode: request.mode } : {}),
73
- ...(context?.abortSignal ? { signal: context.abortSignal } : {}),
74
- });
62
+ return client.universalSearch(request.query, toUniversalSearchOptions(request, context?.abortSignal));
75
63
  },
76
64
  });
77
65
  }
@@ -142,4 +130,4 @@ export function syncIndexTool(options = {}) {
142
130
  },
143
131
  });
144
132
  }
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxZQUFZLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixpQ0FBaUMsRUFDakMscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQix5QkFBeUIsR0FDMUIsTUFBTSxhQUFhLENBQUM7QUFRckI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLFVBQTZCLEVBQUU7SUFDeEQsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksUUFBUTtRQUMxQixXQUFXLEVBQUUsdUJBQXVCO1FBQ3BDLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0IsWUFBWSxFQUFFLGtCQUFrQjtRQUNoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixF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LE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBzZWFyY2hgLCBgdW5pdmVyc2FsX3NlYXJjaGAsIGFuZCAob3B0LWluKSBgYWRkX2RvY3VtZW50c2AsXG4gKiBgY3JlYXRlX2luZGV4YCwgYW5kIGBzeW5jX2luZGV4YCBNYXN0cmEgdG9vbHMuXG4gKlxuICogQWxsIHRocmVlIHJlYWQgdGhlIHNoYXJlZCBydW50aW1lIHByaW1lZCBieSB0aGUgcGx1Z2luLCBzbyBhIHRvb2wgc3ByZWFkXG4gKiBpbnRvIGFuIGFnZW50IHVzZXMgdGhlIGRlcGxveW1lbnQncyBkZWZhdWx0IGluZGV4LCBjb2x1bW5zLCBwYWdlIHNpemUsIGFuZFxuICogbW9kZSB3aXRob3V0IGFueSBwZXItdG9vbCB3aXJpbmcuIFRoZXkgcnVuIHVuZGVyIHRoZSBjYWxsZXIncyBPQk8gc2NvcGUgKHRoZVxuICogY2xpZW50IHJlc29sdmVzIHRoZSBleGVjdXRpb24gY29udGV4dCdzIHdvcmtzcGFjZSBjbGllbnQpLCBzbyBzZWFyY2ggcnVucyBhc1xuICogdGhlIHJlcXVlc3RpbmcgdXNlciBhbmQgVW5pdHkgQ2F0YWxvZyBBQ0xzIGFwcGx5LlxuICpcbiAqIFRoZSBzYW1lIHRvb2xzIGFyZSBleHBvc2VkIHRvIEFwcEtpdCdzIG93biBhZ2VudHMgdGhyb3VnaCB0aGUgcGx1Z2luJ3NcbiAqIGBUb29sUHJvdmlkZXJgIChzZWUgYHBsdWdpbi50c2ApOyB0aGlzIG1vZHVsZSBpcyB0aGUgTWFzdHJhIGhhbGYuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNlYXJjaCBhcyBzaGFyZWRTZWFyY2gsIHR5cGUgVXBzZXJ0UmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXNlYXJjaFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9vbCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvdG9vbHNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyB0b0NyZWF0ZUluZGV4T3B0aW9ucyB9IGZyb20gXCIuL2luZGV4LXRvb2xzLnRzXCI7XG5pbXBvcnQgeyB0b0RvY3VtZW50QXJyYXkgfSBmcm9tIFwiLi9xdWVyeS50c1wiO1xuaW1wb3J0IHsgZ2V0U2VhcmNoUnVudGltZSB9IGZyb20gXCIuL3J1bnRpbWUudHNcIjtcbmltcG9ydCB7XG4gIEFERF9ET0NVTUVOVFNfVE9PTF9ERVNDUklQVElPTixcbiAgQ1JFQVRFX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBTWU5DX0lOREVYX1RPT0xfREVTQ1JJUFRJT04sXG4gIFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgY3JlYXRlSW5kZXhUb29sU2NoZW1hLFxuICBpbmRleEluZm9TY2hlbWEsXG4gIHNlYXJjaFJlc3VsdFNjaGVtYSxcbiAgc2VhcmNoVG9vbFNjaGVtYSxcbiAgc3luY0luZGV4VG9vbFNjaGVtYSxcbiAgdW5pdmVyc2FsU2VhcmNoVG9vbFNjaGVtYSxcbn0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5cbi8qKiBDb21tb24gb3B0aW9uIGFjY2VwdGVkIGJ5IGV2ZXJ5IHRvb2wgZmFjdG9yeTogb3ZlcnJpZGUgdGhlIHRvb2wgaWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFRvb2xPcHRpb25zIHtcbiAgLyoqIE92ZXJyaWRlIHRoZSB0b29sIGlkIChkZWZhdWx0cyBwZXIgdG9vbCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBgc2VhcmNoYCB0b29sLiBTcHJlYWQgaXQgaW50byBhbnkgYWdlbnQgdGhhdCBzaG91bGQgYmUgYWJsZSB0byBsb29rXG4gKiB0aGluZ3MgdXAgaW4gYW4gaW5kZXguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzZWFyY2hUb29sIH0gZnJvbSBcIkBkYngtdG9vbHMvc2VhcmNoXCI7XG4gKiBpbXBvcnQgeyBjcmVhdGVBZ2VudCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIjtcbiAqXG4gKiBjb25zdCBzdXBwb3J0ID0gY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiQW5zd2VyIGZyb20gdGhlIGRvY3MuIFVzZSBgc2VhcmNoYCB0byBmaW5kIHRoZW0uXCIsXG4gKiAgIHRvb2xzOiAoKSA9PiAoeyBzZWFyY2g6IHNlYXJjaFRvb2woKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hUb29sKG9wdGlvbnM6IFNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IFwic2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246IFNFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzZWFyY2hUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogc2VhcmNoUmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHNlYXJjaFRvb2xTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgIHJldHVybiBjbGllbnQuc2VhcmNoKHJlcXVlc3QucXVlcnksIHtcbiAgICAgICAgLi4uKHJlcXVlc3QuaW5kZXggPyB7IGluZGV4OiByZXF1ZXN0LmluZGV4IH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0LmxpbWl0ID8geyBsaW1pdDogcmVxdWVzdC5saW1pdCB9IDoge30pLFxuICAgICAgICAuLi4ocmVxdWVzdC5tb2RlID8geyBtb2RlOiByZXF1ZXN0Lm1vZGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QuY29sdW1ucyA/IHsgY29sdW1uczogcmVxdWVzdC5jb2x1bW5zIH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0LmZpbHRlciA/IHsgZmlsdGVyOiByZXF1ZXN0LmZpbHRlciB9IDoge30pLFxuICAgICAgICAuLi4ocmVxdWVzdC5zY29yZVRocmVzaG9sZCAhPT0gdW5kZWZpbmVkID8geyBzY29yZVRocmVzaG9sZDogcmVxdWVzdC5zY29yZVRocmVzaG9sZCB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dD8uYWJvcnRTaWduYWwgPyB7IHNpZ25hbDogY29udGV4dC5hYm9ydFNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBCdWlsZCB0aGUgYHVuaXZlcnNhbF9zZWFyY2hgIHRvb2wgKGZlZGVyYXRlZCBzZWFyY2ggYWNyb3NzIGV2ZXJ5IGluZGV4KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bml2ZXJzYWxTZWFyY2hUb29sKG9wdGlvbnM6IFNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IFwidW5pdmVyc2FsX3NlYXJjaFwiLFxuICAgIGRlc2NyaXB0aW9uOiBVTklWRVJTQUxfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IHVuaXZlcnNhbFNlYXJjaFRvb2xTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBzZWFyY2hSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gdW5pdmVyc2FsU2VhcmNoVG9vbFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgcmV0dXJuIGNsaWVudC51bml2ZXJzYWxTZWFyY2gocmVxdWVzdC5xdWVyeSwge1xuICAgICAgICAuLi4ocmVxdWVzdC5pbmRleGVzID8geyBpbmRleGVzOiByZXF1ZXN0LmluZGV4ZXMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QubGltaXQgPyB7IGxpbWl0OiByZXF1ZXN0LmxpbWl0IH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0Lm1vZGUgPyB7IG1vZGU6IHJlcXVlc3QubW9kZSB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dD8uYWJvcnRTaWduYWwgPyB7IHNpZ25hbDogY29udGV4dC5hYm9ydFNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG9wdC1pbiBgYWRkX2RvY3VtZW50c2AgdG9vbCAod3JpdGUgaW50byBhIGRpcmVjdC1hY2Nlc3MgaW5kZXgpLlxuICogT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERvY3VtZW50c1Rvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpbnB1dFNjaGVtYSA9IHNoYXJlZFNlYXJjaC5zZWFyY2hEb2N1bWVudFNjaGVtYVxuICAgIC5hcnJheSgpXG4gICAgLmRlc2NyaWJlKFwiRG9jdW1lbnRzIHRvIGFkZCBvciB1cGRhdGUuIEVhY2ggbXVzdCBpbmNsdWRlIHRoZSBpbmRleCBwcmltYXJ5IGtleS5cIik7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcImFkZF9kb2N1bWVudHNcIixcbiAgICBkZXNjcmlwdGlvbjogQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzaGFyZWRTZWFyY2guc2VhcmNoUmVxdWVzdFNjaGVtYVxuICAgICAgLnBpY2soeyBpbmRleDogdHJ1ZSB9KVxuICAgICAgLmV4dGVuZCh7IGRvY3VtZW50czogaW5wdXRTY2hlbWEgfSksXG4gICAgb3V0cHV0U2NoZW1hOiBzaGFyZWRTZWFyY2gudXBzZXJ0UmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCk6IFByb21pc2U8VXBzZXJ0UmVzdWx0PiA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudCwgY29uZmlnIH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICBjb25zdCByZWNvcmQgPSBpbnB1dCBhcyB7IGluZGV4Pzogc3RyaW5nOyBkb2N1bWVudHM6IHVua25vd24gfTtcbiAgICAgIGNvbnN0IGRvY3VtZW50cyA9IHRvRG9jdW1lbnRBcnJheShyZWNvcmQuZG9jdW1lbnRzKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVjb3JkLmluZGV4ID8/IGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gXCJcIjtcbiAgICAgIHJldHVybiBjbGllbnQuYWRkRG9jdW1lbnRzKGluZGV4LCBkb2N1bWVudHMsIGNvbnRleHQ/LmFib3J0U2lnbmFsKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBjcmVhdGVfaW5kZXhgIHRvb2wgKHByb3Zpc2lvbiBhIFZlY3RvciBTZWFyY2ggaW5kZXgpLlxuICogT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgU2VhcmNoQ2xpZW50LmNyZWF0ZUluZGV4fSwgaW5mZXJyaW5nIHRoZSBlbmRwb2ludCwgZW1iZWRkaW5nIG1vZGVsLFxuICoga2V5LCBhbmQgY29sdW1ucyBmcm9tIHRoZSByZXF1ZXN0ICsgcGx1Z2luIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZGV4VG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcImNyZWF0ZV9pbmRleFwiLFxuICAgIGRlc2NyaXB0aW9uOiBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogY3JlYXRlSW5kZXhUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogaW5kZXhJbmZvU2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGNyZWF0ZUluZGV4VG9vbFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgcmV0dXJuIGNsaWVudC5jcmVhdGVJbmRleChyZXF1ZXN0Lm5hbWUsIHRvQ3JlYXRlSW5kZXhPcHRpb25zKHJlcXVlc3QsIGNvbnRleHQ/LmFib3J0U2lnbmFsKSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBPdXRwdXQgc2NoZW1hIGZvciB0aGUgYHN5bmNfaW5kZXhgIHRvb2wuICovXG5jb25zdCBzeW5jSW5kZXhSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGluZGV4OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIGluZGV4IHRoYXQgd2FzIHN5bmNlZC5cIiksXG4gIHN5bmNlZDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJUcnVlIG9uY2UgdGhlIHN5bmMgd2FzIHRyaWdnZXJlZC5cIiksXG59KTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBzeW5jX2luZGV4YCB0b29sIChyZWZyZXNoIGEgRGVsdGEgU3luYyBpbmRleCBmcm9tIGl0c1xuICogc291cmNlIHRhYmxlKS4gT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNJbmRleFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJzeW5jX2luZGV4XCIsXG4gICAgZGVzY3JpcHRpb246IFNZTkNfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogc3luY0luZGV4VG9vbFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IHN5bmNJbmRleFJlc3VsdFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBzeW5jSW5kZXhUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiXCI7XG4gICAgICBhd2FpdCBjbGllbnQuc3luY0luZGV4KGluZGV4LCBjb250ZXh0Py5hYm9ydFNpZ25hbCk7XG4gICAgICByZXR1cm4geyBpbmRleCwgc3luY2VkOiB0cnVlIH07XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxZQUFZLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsNkJBQTZCLEVBQzdCLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0IsaUNBQWlDLEVBQ2pDLHFCQUFxQixFQUNyQixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIseUJBQXlCLEdBQzFCLE1BQU0sYUFBYSxDQUFDO0FBUXJCOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxVQUE2QixFQUFFO0lBQ3hELE9BQU8sVUFBVSxDQUFDO1FBQ2hCLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLFFBQVE7UUFDMUIsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxXQUFXLEVBQUUsZ0JBQWdCO1FBQzdCLFlBQVksRUFBRSxrQkFBa0I7UUFDaEMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFD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IjpbIi8qKlxuICogVGhlIGBzZWFyY2hgLCBgdW5pdmVyc2FsX3NlYXJjaGAsIGFuZCAob3B0LWluKSBgYWRkX2RvY3VtZW50c2AsXG4gKiBgY3JlYXRlX2luZGV4YCwgYW5kIGBzeW5jX2luZGV4YCBNYXN0cmEgdG9vbHMuXG4gKlxuICogQWxsIHRocmVlIHJlYWQgdGhlIHNoYXJlZCBydW50aW1lIHByaW1lZCBieSB0aGUgcGx1Z2luLCBzbyBhIHRvb2wgc3ByZWFkXG4gKiBpbnRvIGFuIGFnZW50IHVzZXMgdGhlIGRlcGxveW1lbnQncyBkZWZhdWx0IGluZGV4LCBjb2x1bW5zLCBwYWdlIHNpemUsIGFuZFxuICogbW9kZSB3aXRob3V0IGFueSBwZXItdG9vbCB3aXJpbmcuIFRoZXkgcnVuIHVuZGVyIHRoZSBjYWxsZXIncyBPQk8gc2NvcGUgKHRoZVxuICogY2xpZW50IHJlc29sdmVzIHRoZSBleGVjdXRpb24gY29udGV4dCdzIHdvcmtzcGFjZSBjbGllbnQpLCBzbyBzZWFyY2ggcnVucyBhc1xuICogdGhlIHJlcXVlc3RpbmcgdXNlciBhbmQgVW5pdHkgQ2F0YWxvZyBBQ0xzIGFwcGx5LlxuICpcbiAqIFRoZSBzYW1lIHRvb2xzIGFyZSBleHBvc2VkIHRvIEFwcEtpdCdzIG93biBhZ2VudHMgdGhyb3VnaCB0aGUgcGx1Z2luJ3NcbiAqIGBUb29sUHJvdmlkZXJgIChzZWUgYHBsdWdpbi50c2ApOyB0aGlzIG1vZHVsZSBpcyB0aGUgTWFzdHJhIGhhbGYuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNlYXJjaCBhcyBzaGFyZWRTZWFyY2gsIHR5cGUgVXBzZXJ0UmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXNlYXJjaFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9vbCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvdG9vbHNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyB0b0NyZWF0ZUluZGV4T3B0aW9ucyB9IGZyb20gXCIuL2luZGV4LXRvb2xzLnRzXCI7XG5pbXBvcnQgeyB0b0RvY3VtZW50QXJyYXkgfSBmcm9tIFwiLi9xdWVyeS50c1wiO1xuaW1wb3J0IHsgZ2V0U2VhcmNoUnVudGltZSB9IGZyb20gXCIuL3J1bnRpbWUudHNcIjtcbmltcG9ydCB7IHRvU2VhcmNoT3B0aW9ucywgdG9Vbml2ZXJzYWxTZWFyY2hPcHRpb25zIH0gZnJvbSBcIi4vX3NlYXJjaC1vcHRpb25zLnRzXCI7XG5pbXBvcnQge1xuICBBRERfRE9DVU1FTlRTX1RPT0xfREVTQ1JJUFRJT04sXG4gIENSRUFURV9JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICBTRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICBVTklWRVJTQUxfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gIGNyZWF0ZUluZGV4VG9vbFNjaGVtYSxcbiAgaW5kZXhJbmZvU2NoZW1hLFxuICBzZWFyY2hSZXN1bHRTY2hlbWEsXG4gIHNlYXJjaFRvb2xTY2hlbWEsXG4gIHN5bmNJbmRleFRvb2xTY2hlbWEsXG4gIHVuaXZlcnNhbFNlYXJjaFRvb2xTY2hlbWEsXG59IGZyb20gXCIuL3NjaGVtYS50c1wiO1xuXG4vKiogQ29tbW9uIG9wdGlvbiBhY2NlcHRlZCBieSBldmVyeSB0b29sIGZhY3Rvcnk6IG92ZXJyaWRlIHRoZSB0b29sIGlkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hUb29sT3B0aW9ucyB7XG4gIC8qKiBPdmVycmlkZSB0aGUgdG9vbCBpZCAoZGVmYXVsdHMgcGVyIHRvb2wpLiAqL1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYHNlYXJjaGAgdG9vbC4gU3ByZWFkIGl0IGludG8gYW55IGFnZW50IHRoYXQgc2hvdWxkIGJlIGFibGUgdG8gbG9va1xuICogdGhpbmdzIHVwIGluIGFuIGluZGV4LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc2VhcmNoVG9vbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NlYXJjaFwiO1xuICogaW1wb3J0IHsgY3JlYXRlQWdlbnQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG4gKlxuICogY29uc3Qgc3VwcG9ydCA9IGNyZWF0ZUFnZW50KHtcbiAqICAgaW5zdHJ1Y3Rpb25zOiBcIkFuc3dlciBmcm9tIHRoZSBkb2NzLiBVc2UgYHNlYXJjaGAgdG8gZmluZCB0aGVtLlwiLFxuICogICB0b29sczogKCkgPT4gKHsgc2VhcmNoOiBzZWFyY2hUb29sKCkgfSksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoVG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcInNlYXJjaFwiLFxuICAgIGRlc2NyaXB0aW9uOiBTRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogc2VhcmNoVG9vbFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IHNlYXJjaFJlc3VsdFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBzZWFyY2hUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICByZXR1cm4gY2xpZW50LnNlYXJjaChyZXF1ZXN0LnF1ZXJ5LCB0b1NlYXJjaE9wdGlvbnMocmVxdWVzdCwgY29udGV4dD8uYWJvcnRTaWduYWwpKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBgdW5pdmVyc2FsX3NlYXJjaGAgdG9vbCAoZmVkZXJhdGVkIHNlYXJjaCBhY3Jvc3MgZXZlcnkgaW5kZXgpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXZlcnNhbFNlYXJjaFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJ1bml2ZXJzYWxfc2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246IFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogdW5pdmVyc2FsU2VhcmNoVG9vbFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IHNlYXJjaFJlc3VsdFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICByZXR1cm4gY2xpZW50LnVuaXZlcnNhbFNlYXJjaChcbiAgICAgICAgcmVxdWVzdC5xdWVyeSxcbiAgICAgICAgdG9Vbml2ZXJzYWxTZWFyY2hPcHRpb25zKHJlcXVlc3QsIGNvbnRleHQ/LmFib3J0U2lnbmFsKSxcbiAgICAgICk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIG9wdC1pbiBgYWRkX2RvY3VtZW50c2AgdG9vbCAod3JpdGUgaW50byBhIGRpcmVjdC1hY2Nlc3MgaW5kZXgpLlxuICogT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERvY3VtZW50c1Rvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpbnB1dFNjaGVtYSA9IHNoYXJlZFNlYXJjaC5zZWFyY2hEb2N1bWVudFNjaGVtYVxuICAgIC5hcnJheSgpXG4gICAgLmRlc2NyaWJlKFwiRG9jdW1lbnRzIHRvIGFkZCBvciB1cGRhdGUuIEVhY2ggbXVzdCBpbmNsdWRlIHRoZSBpbmRleCBwcmltYXJ5IGtleS5cIik7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcImFkZF9kb2N1bWVudHNcIixcbiAgICBkZXNjcmlwdGlvbjogQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzaGFyZWRTZWFyY2guc2VhcmNoUmVxdWVzdFNjaGVtYVxuICAgICAgLnBpY2soeyBpbmRleDogdHJ1ZSB9KVxuICAgICAgLmV4dGVuZCh7IGRvY3VtZW50czogaW5wdXRTY2hlbWEgfSksXG4gICAgb3V0cHV0U2NoZW1hOiBzaGFyZWRTZWFyY2gudXBzZXJ0UmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCk6IFByb21pc2U8VXBzZXJ0UmVzdWx0PiA9PiB7XG4gICAgICBjb25zdCB7IGNsaWVudCwgY29uZmlnIH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICBjb25zdCByZWNvcmQgPSBpbnB1dCBhcyB7IGluZGV4Pzogc3RyaW5nOyBkb2N1bWVudHM6IHVua25vd24gfTtcbiAgICAgIGNvbnN0IGRvY3VtZW50cyA9IHRvRG9jdW1lbnRBcnJheShyZWNvcmQuZG9jdW1lbnRzKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVjb3JkLmluZGV4ID8/IGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gXCJcIjtcbiAgICAgIHJldHVybiBjbGllbnQuYWRkRG9jdW1lbnRzKGluZGV4LCBkb2N1bWVudHMsIGNvbnRleHQ/LmFib3J0U2lnbmFsKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBjcmVhdGVfaW5kZXhgIHRvb2wgKHByb3Zpc2lvbiBhIFZlY3RvciBTZWFyY2ggaW5kZXgpLlxuICogT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC4gRGVsZWdhdGVzIHRvXG4gKiB7QGxpbmsgU2VhcmNoQ2xpZW50LmNyZWF0ZUluZGV4fSwgaW5mZXJyaW5nIHRoZSBlbmRwb2ludCwgZW1iZWRkaW5nIG1vZGVsLFxuICoga2V5LCBhbmQgY29sdW1ucyBmcm9tIHRoZSByZXF1ZXN0ICsgcGx1Z2luIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZGV4VG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcImNyZWF0ZV9pbmRleFwiLFxuICAgIGRlc2NyaXB0aW9uOiBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogY3JlYXRlSW5kZXhUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogaW5kZXhJbmZvU2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGNyZWF0ZUluZGV4VG9vbFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgcmV0dXJuIGNsaWVudC5jcmVhdGVJbmRleChyZXF1ZXN0Lm5hbWUsIHRvQ3JlYXRlSW5kZXhPcHRpb25zKHJlcXVlc3QsIGNvbnRleHQ/LmFib3J0U2lnbmFsKSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKiBPdXRwdXQgc2NoZW1hIGZvciB0aGUgYHN5bmNfaW5kZXhgIHRvb2wuICovXG5jb25zdCBzeW5jSW5kZXhSZXN1bHRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGluZGV4OiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVGhlIGluZGV4IHRoYXQgd2FzIHN5bmNlZC5cIiksXG4gIHN5bmNlZDogei5ib29sZWFuKCkuZGVzY3JpYmUoXCJUcnVlIG9uY2UgdGhlIHN5bmMgd2FzIHRyaWdnZXJlZC5cIiksXG59KTtcblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBzeW5jX2luZGV4YCB0b29sIChyZWZyZXNoIGEgRGVsdGEgU3luYyBpbmRleCBmcm9tIGl0c1xuICogc291cmNlIHRhYmxlKS4gT25seSBpbnN0YWxsIGl0IHdoZW4gdGhlIHBsdWdpbidzIHdyaXRlIHN1cmZhY2UgaXMgZW5hYmxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNJbmRleFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJzeW5jX2luZGV4XCIsXG4gICAgZGVzY3JpcHRpb246IFNZTkNfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogc3luY0luZGV4VG9vbFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IHN5bmNJbmRleFJlc3VsdFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBzeW5jSW5kZXhUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgIGNvbnN0IGluZGV4ID0gcmVxdWVzdC5pbmRleCA/PyBjb25maWcuZGVmYXVsdEluZGV4ID8/IFwiXCI7XG4gICAgICBhd2FpdCBjbGllbnQuc3luY0luZGV4KGluZGV4LCBjb250ZXh0Py5hYm9ydFNpZ25hbCk7XG4gICAgICByZXR1cm4geyBpbmRleCwgc3luY2VkOiB0cnVlIH07XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"root":["../src/client.ts","../src/config.ts","../src/index-tools.ts","../src/lakebase-plugin.ts","../src/lakebase.ts","../src/native.ts","../src/plugin.ts","../src/query.ts","../src/runtime.ts","../src/schema.ts","../src/tool.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/_search-options.ts","../src/client.ts","../src/config.ts","../src/index-tools.ts","../src/lakebase-plugin.ts","../src/lakebase.ts","../src/native.ts","../src/plugin.ts","../src/query.ts","../src/runtime.ts","../src/schema.ts","../src/tool.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "@dbx-tools/search",
3
+ "description": "Agent tools, federated search, index lifecycle, and Lakebase full-text extensions for AppKit AI Search",
3
4
  "repository": {
4
5
  "type": "git",
5
6
  "url": "git+https://github.com/reggie-db/dbx-tools.git",
@@ -28,18 +29,18 @@
28
29
  "dependencies": {
29
30
  "@databricks/appkit": "^0.60.0",
30
31
  "@databricks/sdk-experimental": "^0.17.0",
31
- "@dbx-tools/appkit": "0.6.211",
32
- "@dbx-tools/core": "0.6.211",
33
- "@dbx-tools/model": "0.6.211",
34
- "@dbx-tools/shared-core": "0.6.211",
35
- "@dbx-tools/shared-model": "0.6.211",
36
- "@dbx-tools/shared-search": "0.6.211",
32
+ "@dbx-tools/appkit": "0.6.212",
33
+ "@dbx-tools/core": "0.6.212",
34
+ "@dbx-tools/model": "0.6.212",
35
+ "@dbx-tools/shared-core": "0.6.212",
36
+ "@dbx-tools/shared-model": "0.6.212",
37
+ "@dbx-tools/shared-search": "0.6.212",
37
38
  "@mastra/core": "1.47.0",
38
39
  "pg": "^8.22.0",
39
40
  "zod": "4.3.6"
40
41
  },
41
42
  "main": "./lib/index.js",
42
- "license": "UNLICENSED",
43
+ "license": "Apache-2.0",
43
44
  "publishConfig": {
44
45
  "access": "public",
45
46
  "main": "./lib/index.js",
@@ -52,7 +53,7 @@
52
53
  "./package.json": "./package.json"
53
54
  }
54
55
  },
55
- "version": "0.6.211",
56
+ "version": "0.6.212",
56
57
  "types": "./lib/index.d.ts",
57
58
  "type": "module",
58
59
  "exports": {
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared request-to-client option mapping for Search adapters.
3
+ *
4
+ * @module
5
+ */
6
+
7
+ import type { SearchRequest, UniversalSearchRequest } from "@dbx-tools/shared-search";
8
+ import type { SearchOptions, UniversalSearchOptions } from "./client.ts";
9
+
10
+ /** Translate a validated single-index request into client options. */
11
+ export function toSearchOptions(
12
+ request: SearchRequest,
13
+ signal?: AbortSignal,
14
+ ): SearchOptions & { index?: string } {
15
+ return {
16
+ ...(request.index ? { index: request.index } : {}),
17
+ ...(request.limit ? { limit: request.limit } : {}),
18
+ ...(request.mode ? { mode: request.mode } : {}),
19
+ ...(request.columns ? { columns: request.columns } : {}),
20
+ ...(request.filter ? { filter: request.filter } : {}),
21
+ ...(request.scoreThreshold !== undefined ? { scoreThreshold: request.scoreThreshold } : {}),
22
+ ...(signal ? { signal } : {}),
23
+ };
24
+ }
25
+
26
+ /** Translate a validated federated request into client options. */
27
+ export function toUniversalSearchOptions(
28
+ request: UniversalSearchRequest,
29
+ signal?: AbortSignal,
30
+ ): UniversalSearchOptions {
31
+ return {
32
+ ...(request.indexes ? { indexes: request.indexes } : {}),
33
+ ...(request.limit ? { limit: request.limit } : {}),
34
+ ...(request.mode ? { mode: request.mode } : {}),
35
+ ...(signal ? { signal } : {}),
36
+ };
37
+ }
package/src/plugin.ts CHANGED
@@ -39,6 +39,7 @@ import { toCreateIndexOptions } from "./index-tools.ts";
39
39
  import { nativeAiSearchBackend } from "./native.ts";
40
40
  import { toDocumentArray } from "./query.ts";
41
41
  import { getSearchRuntime, resetSearchRuntime } from "./runtime.ts";
42
+ import { toSearchOptions, toUniversalSearchOptions } from "./_search-options.ts";
42
43
  import {
43
44
  ADD_DOCUMENTS_TOOL_DESCRIPTION,
44
45
  CREATE_INDEX_TOOL_DESCRIPTION,
@@ -426,26 +427,13 @@ export class SearchPlugin extends Plugin<SearchPluginConfig> implements ToolProv
426
427
  private async runSearch(args: unknown, signal?: AbortSignal) {
427
428
  const request = sharedSearch.searchRequestSchema.parse(args);
428
429
  const { client } = getSearchRuntime();
429
- return client.search(request.query, {
430
- ...(request.index ? { index: request.index } : {}),
431
- ...(request.limit ? { limit: request.limit } : {}),
432
- ...(request.mode ? { mode: request.mode } : {}),
433
- ...(request.columns ? { columns: request.columns } : {}),
434
- ...(request.filter ? { filter: request.filter } : {}),
435
- ...(request.scoreThreshold !== undefined ? { scoreThreshold: request.scoreThreshold } : {}),
436
- ...(signal ? { signal } : {}),
437
- });
430
+ return client.search(request.query, toSearchOptions(request, signal));
438
431
  }
439
432
 
440
433
  private async runUniversalSearch(args: unknown, signal?: AbortSignal) {
441
434
  const request = sharedSearch.universalSearchRequestSchema.parse(args);
442
435
  const { client } = getSearchRuntime();
443
- return client.universalSearch(request.query, {
444
- ...(request.indexes ? { indexes: request.indexes } : {}),
445
- ...(request.limit ? { limit: request.limit } : {}),
446
- ...(request.mode ? { mode: request.mode } : {}),
447
- ...(signal ? { signal } : {}),
448
- });
436
+ return client.universalSearch(request.query, toUniversalSearchOptions(request, signal));
449
437
  }
450
438
 
451
439
  private async runAddDocuments(args: unknown, signal?: AbortSignal) {
package/src/tool.ts CHANGED
@@ -20,6 +20,7 @@ import { z } from "zod";
20
20
  import { toCreateIndexOptions } from "./index-tools.ts";
21
21
  import { toDocumentArray } from "./query.ts";
22
22
  import { getSearchRuntime } from "./runtime.ts";
23
+ import { toSearchOptions, toUniversalSearchOptions } from "./_search-options.ts";
23
24
  import {
24
25
  ADD_DOCUMENTS_TOOL_DESCRIPTION,
25
26
  CREATE_INDEX_TOOL_DESCRIPTION,
@@ -64,15 +65,7 @@ export function searchTool(options: SearchToolOptions = {}) {
64
65
  execute: async (input, context) => {
65
66
  const request = searchToolSchema.parse(input);
66
67
  const { client } = getSearchRuntime();
67
- return client.search(request.query, {
68
- ...(request.index ? { index: request.index } : {}),
69
- ...(request.limit ? { limit: request.limit } : {}),
70
- ...(request.mode ? { mode: request.mode } : {}),
71
- ...(request.columns ? { columns: request.columns } : {}),
72
- ...(request.filter ? { filter: request.filter } : {}),
73
- ...(request.scoreThreshold !== undefined ? { scoreThreshold: request.scoreThreshold } : {}),
74
- ...(context?.abortSignal ? { signal: context.abortSignal } : {}),
75
- });
68
+ return client.search(request.query, toSearchOptions(request, context?.abortSignal));
76
69
  },
77
70
  });
78
71
  }
@@ -87,12 +80,10 @@ export function universalSearchTool(options: SearchToolOptions = {}) {
87
80
  execute: async (input, context) => {
88
81
  const request = universalSearchToolSchema.parse(input);
89
82
  const { client } = getSearchRuntime();
90
- return client.universalSearch(request.query, {
91
- ...(request.indexes ? { indexes: request.indexes } : {}),
92
- ...(request.limit ? { limit: request.limit } : {}),
93
- ...(request.mode ? { mode: request.mode } : {}),
94
- ...(context?.abortSignal ? { signal: context.abortSignal } : {}),
95
- });
83
+ return client.universalSearch(
84
+ request.query,
85
+ toUniversalSearchOptions(request, context?.abortSignal),
86
+ );
96
87
  },
97
88
  });
98
89
  }