angular-odata 0.92.0 → 0.95.0

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.
Files changed (196) hide show
  1. package/{esm2015/angular-odata.js → esm2020/angular-odata.mjs} +0 -0
  2. package/esm2020/lib/api.mjs +303 -0
  3. package/{esm2015/lib/cache/cache.js → esm2020/lib/cache/cache.mjs} +3 -3
  4. package/{esm2015/lib/cache/index.js → esm2020/lib/cache/index.mjs} +0 -0
  5. package/{esm2015/lib/cache/memory.js → esm2020/lib/cache/memory.mjs} +1 -1
  6. package/{esm2015/lib/cache/storage.js → esm2020/lib/cache/storage.mjs} +2 -2
  7. package/esm2020/lib/client.mjs +271 -0
  8. package/{esm2015/lib/constants.js → esm2020/lib/constants.mjs} +3 -1
  9. package/esm2020/lib/helper.mjs +268 -0
  10. package/{esm2015/lib/index.js → esm2020/lib/index.mjs} +0 -0
  11. package/esm2020/lib/models/collection.mjs +741 -0
  12. package/{esm2015/lib/models/index.js → esm2020/lib/models/index.mjs} +0 -0
  13. package/esm2020/lib/models/model.mjs +453 -0
  14. package/esm2020/lib/models/options.mjs +945 -0
  15. package/{esm2015/lib/module.js → esm2020/lib/module.mjs} +7 -7
  16. package/esm2020/lib/options.mjs +32 -0
  17. package/{esm2015/lib/resources/index.js → esm2020/lib/resources/index.mjs} +0 -0
  18. package/{esm2015/lib/resources/path/handlers.js → esm2020/lib/resources/path/handlers.mjs} +1 -1
  19. package/{esm2015/lib/resources/path/index.js → esm2020/lib/resources/path/index.mjs} +0 -0
  20. package/esm2020/lib/resources/path/segments.mjs +124 -0
  21. package/esm2020/lib/resources/query/builder.mjs +590 -0
  22. package/esm2020/lib/resources/query/expressions.mjs +207 -0
  23. package/esm2020/lib/resources/query/handlers.mjs +186 -0
  24. package/{esm2015/lib/resources/query/index.js → esm2020/lib/resources/query/index.mjs} +0 -0
  25. package/esm2020/lib/resources/query/options.mjs +103 -0
  26. package/esm2020/lib/resources/query/syntax.mjs +406 -0
  27. package/esm2020/lib/resources/request.mjs +167 -0
  28. package/esm2020/lib/resources/resource.mjs +326 -0
  29. package/esm2020/lib/resources/responses/annotations.mjs +119 -0
  30. package/{esm2015/lib/resources/responses/csdl/csdl-annotation.js → esm2020/lib/resources/responses/csdl/csdl-annotation.mjs} +0 -0
  31. package/{esm2015/lib/resources/responses/csdl/csdl-entity-container.js → esm2020/lib/resources/responses/csdl/csdl-entity-container.mjs} +0 -0
  32. package/{esm2015/lib/resources/responses/csdl/csdl-entity-set.js → esm2020/lib/resources/responses/csdl/csdl-entity-set.mjs} +0 -0
  33. package/{esm2015/lib/resources/responses/csdl/csdl-enum-type.js → esm2020/lib/resources/responses/csdl/csdl-enum-type.mjs} +0 -0
  34. package/{esm2015/lib/resources/responses/csdl/csdl-function-action.js → esm2020/lib/resources/responses/csdl/csdl-function-action.mjs} +0 -0
  35. package/{esm2015/lib/resources/responses/csdl/csdl-navigation-property-binding.js → esm2020/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs} +0 -0
  36. package/{esm2015/lib/resources/responses/csdl/csdl-reference.js → esm2020/lib/resources/responses/csdl/csdl-reference.mjs} +0 -0
  37. package/{esm2015/lib/resources/responses/csdl/csdl-schema.js → esm2020/lib/resources/responses/csdl/csdl-schema.mjs} +0 -0
  38. package/{esm2015/lib/resources/responses/csdl/csdl-singleton.js → esm2020/lib/resources/responses/csdl/csdl-singleton.mjs} +0 -0
  39. package/{esm2015/lib/resources/responses/csdl/csdl-structural-property.js → esm2020/lib/resources/responses/csdl/csdl-structural-property.mjs} +0 -0
  40. package/{esm2015/lib/resources/responses/csdl/csdl-structured-type.js → esm2020/lib/resources/responses/csdl/csdl-structured-type.mjs} +0 -0
  41. package/{esm2015/lib/resources/responses/csdl/csdl-type-definition.js → esm2020/lib/resources/responses/csdl/csdl-type-definition.mjs} +0 -0
  42. package/{esm2015/lib/resources/responses/index.js → esm2020/lib/resources/responses/index.mjs} +0 -0
  43. package/esm2020/lib/resources/responses/metadata.mjs +547 -0
  44. package/{esm2015/lib/resources/responses/options.js → esm2020/lib/resources/responses/options.mjs} +0 -0
  45. package/{esm2015/lib/resources/responses/response.js → esm2020/lib/resources/responses/response.mjs} +0 -0
  46. package/{esm2015/lib/resources/responses/types.js → esm2020/lib/resources/responses/types.mjs} +0 -0
  47. package/esm2020/lib/resources/types/action.mjs +101 -0
  48. package/esm2020/lib/resources/types/batch.mjs +288 -0
  49. package/esm2020/lib/resources/types/count.mjs +27 -0
  50. package/esm2020/lib/resources/types/entity-set.mjs +94 -0
  51. package/esm2020/lib/resources/types/entity.mjs +106 -0
  52. package/esm2020/lib/resources/types/function.mjs +137 -0
  53. package/{esm2015/lib/resources/types/index.js → esm2020/lib/resources/types/index.mjs} +0 -0
  54. package/esm2020/lib/resources/types/media.mjs +41 -0
  55. package/esm2020/lib/resources/types/metadata.mjs +30 -0
  56. package/esm2020/lib/resources/types/navigation-property.mjs +226 -0
  57. package/esm2020/lib/resources/types/options.mjs +2 -0
  58. package/esm2020/lib/resources/types/property.mjs +183 -0
  59. package/esm2020/lib/resources/types/reference.mjs +85 -0
  60. package/esm2020/lib/resources/types/singleton.mjs +126 -0
  61. package/esm2020/lib/resources/types/value.mjs +41 -0
  62. package/esm2020/lib/schema/annotation.mjs +37 -0
  63. package/esm2020/lib/schema/callable.mjs +62 -0
  64. package/esm2020/lib/schema/element.mjs +51 -0
  65. package/esm2020/lib/schema/entity-container.mjs +9 -0
  66. package/esm2020/lib/schema/entity-set.mjs +9 -0
  67. package/esm2020/lib/schema/enum-type.mjs +71 -0
  68. package/{esm2015/lib/schema/index.js → esm2020/lib/schema/index.mjs} +0 -0
  69. package/esm2020/lib/schema/parsers/callable.mjs +113 -0
  70. package/{esm2015/lib/schema/parsers/edm.js → esm2020/lib/schema/parsers/edm.mjs} +2 -2
  71. package/esm2020/lib/schema/parsers/enum-type.mjs +107 -0
  72. package/{esm2015/lib/schema/parsers/index.js → esm2020/lib/schema/parsers/index.mjs} +0 -0
  73. package/esm2020/lib/schema/parsers/structured-type.mjs +412 -0
  74. package/esm2020/lib/schema/schema.mjs +61 -0
  75. package/esm2020/lib/schema/structured-type.mjs +198 -0
  76. package/esm2020/lib/services/base.mjs +29 -0
  77. package/esm2020/lib/services/entity-set.mjs +143 -0
  78. package/esm2020/lib/services/entity.mjs +12 -0
  79. package/{esm2015/lib/services/factory.js → esm2020/lib/services/factory.mjs} +3 -3
  80. package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
  81. package/{esm2015/lib/services/singleton.js → esm2020/lib/services/singleton.mjs} +1 -1
  82. package/{esm2015/lib/settings.js → esm2020/lib/settings.mjs} +1 -1
  83. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  84. package/esm2020/lib/types.mjs +37 -0
  85. package/{esm2015/lib/utils/arraybuffers.js → esm2020/lib/utils/arraybuffers.mjs} +0 -0
  86. package/{esm2015/lib/utils/dates.js → esm2020/lib/utils/dates.mjs} +0 -0
  87. package/{esm2015/lib/utils/durations.js → esm2020/lib/utils/durations.mjs} +0 -0
  88. package/{esm2015/lib/utils/enums.js → esm2020/lib/utils/enums.mjs} +0 -0
  89. package/{esm2015/lib/utils/http.js → esm2020/lib/utils/http.mjs} +0 -0
  90. package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
  91. package/{esm2015/lib/utils/objects.js → esm2020/lib/utils/objects.mjs} +0 -0
  92. package/esm2020/lib/utils/odata.mjs +22 -0
  93. package/{esm2015/lib/utils/strings.js → esm2020/lib/utils/strings.mjs} +0 -0
  94. package/{esm2015/lib/utils/types.js → esm2020/lib/utils/types.mjs} +0 -0
  95. package/{esm2015/lib/utils/urls.js → esm2020/lib/utils/urls.mjs} +0 -0
  96. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  97. package/fesm2015/{angular-odata.js → angular-odata.mjs} +849 -750
  98. package/fesm2015/angular-odata.mjs.map +1 -0
  99. package/fesm2020/angular-odata.mjs +10274 -0
  100. package/fesm2020/angular-odata.mjs.map +1 -0
  101. package/lib/api.d.ts +10 -10
  102. package/lib/cache/cache.d.ts +2 -2
  103. package/lib/cache/storage.d.ts +1 -1
  104. package/lib/client.d.ts +3 -3
  105. package/lib/constants.d.ts +1 -0
  106. package/lib/models/collection.d.ts +11 -19
  107. package/lib/models/model.d.ts +22 -18
  108. package/lib/models/options.d.ts +16 -21
  109. package/lib/module.d.ts +1 -1
  110. package/lib/options.d.ts +1 -0
  111. package/lib/resources/path/segments.d.ts +1 -1
  112. package/lib/resources/query/expressions.d.ts +37 -27
  113. package/lib/resources/query/handlers.d.ts +7 -11
  114. package/lib/resources/query/options.d.ts +2 -2
  115. package/lib/resources/query/syntax.d.ts +52 -54
  116. package/lib/resources/request.d.ts +1 -1
  117. package/lib/resources/resource.d.ts +25 -8
  118. package/lib/resources/types/action.d.ts +12 -19
  119. package/lib/resources/types/batch.d.ts +1 -3
  120. package/lib/resources/types/count.d.ts +5 -4
  121. package/lib/resources/types/entity-set.d.ts +11 -15
  122. package/lib/resources/types/entity.d.ts +12 -15
  123. package/lib/resources/types/function.d.ts +11 -18
  124. package/lib/resources/types/media.d.ts +6 -5
  125. package/lib/resources/types/metadata.d.ts +3 -5
  126. package/lib/resources/types/navigation-property.d.ts +15 -21
  127. package/lib/resources/types/property.d.ts +13 -19
  128. package/lib/resources/types/reference.d.ts +39 -6
  129. package/lib/resources/types/singleton.d.ts +12 -16
  130. package/lib/resources/types/value.d.ts +9 -5
  131. package/lib/schema/{base.d.ts → annotation.d.ts} +0 -0
  132. package/lib/schema/callable.d.ts +2 -18
  133. package/lib/schema/element.d.ts +39 -0
  134. package/lib/schema/entity-container.d.ts +2 -12
  135. package/lib/schema/entity-set.d.ts +2 -18
  136. package/lib/schema/enum-type.d.ts +2 -26
  137. package/lib/schema/parsers/enum-type.d.ts +4 -4
  138. package/lib/schema/parsers/structured-type.d.ts +4 -4
  139. package/lib/schema/schema.d.ts +2 -2
  140. package/lib/schema/structured-type.d.ts +8 -26
  141. package/lib/services/base.d.ts +2 -2
  142. package/lib/services/entity-set.d.ts +2 -2
  143. package/lib/services/entity.d.ts +1 -1
  144. package/lib/services/singleton.d.ts +2 -2
  145. package/lib/settings.d.ts +5 -5
  146. package/lib/types.d.ts +1 -0
  147. package/package.json +21 -8
  148. package/bundles/angular-odata.umd.js +0 -11861
  149. package/bundles/angular-odata.umd.js.map +0 -1
  150. package/esm2015/lib/api.js +0 -296
  151. package/esm2015/lib/client.js +0 -272
  152. package/esm2015/lib/helper.js +0 -268
  153. package/esm2015/lib/models/collection.js +0 -734
  154. package/esm2015/lib/models/model.js +0 -438
  155. package/esm2015/lib/models/options.js +0 -942
  156. package/esm2015/lib/options.js +0 -31
  157. package/esm2015/lib/resources/path/segments.js +0 -124
  158. package/esm2015/lib/resources/query/builder.js +0 -591
  159. package/esm2015/lib/resources/query/expressions.js +0 -194
  160. package/esm2015/lib/resources/query/handlers.js +0 -192
  161. package/esm2015/lib/resources/query/options.js +0 -103
  162. package/esm2015/lib/resources/query/syntax.js +0 -367
  163. package/esm2015/lib/resources/request.js +0 -168
  164. package/esm2015/lib/resources/resource.js +0 -243
  165. package/esm2015/lib/resources/responses/annotations.js +0 -121
  166. package/esm2015/lib/resources/responses/metadata.js +0 -548
  167. package/esm2015/lib/resources/types/action.js +0 -105
  168. package/esm2015/lib/resources/types/batch.js +0 -294
  169. package/esm2015/lib/resources/types/count.js +0 -33
  170. package/esm2015/lib/resources/types/entity-set.js +0 -101
  171. package/esm2015/lib/resources/types/entity.js +0 -137
  172. package/esm2015/lib/resources/types/function.js +0 -130
  173. package/esm2015/lib/resources/types/media.js +0 -47
  174. package/esm2015/lib/resources/types/metadata.js +0 -36
  175. package/esm2015/lib/resources/types/navigation-property.js +0 -205
  176. package/esm2015/lib/resources/types/options.js +0 -2
  177. package/esm2015/lib/resources/types/property.js +0 -151
  178. package/esm2015/lib/resources/types/reference.js +0 -74
  179. package/esm2015/lib/resources/types/singleton.js +0 -167
  180. package/esm2015/lib/resources/types/value.js +0 -35
  181. package/esm2015/lib/schema/base.js +0 -37
  182. package/esm2015/lib/schema/callable.js +0 -82
  183. package/esm2015/lib/schema/entity-container.js +0 -24
  184. package/esm2015/lib/schema/entity-set.js +0 -35
  185. package/esm2015/lib/schema/enum-type.js +0 -102
  186. package/esm2015/lib/schema/parsers/callable.js +0 -107
  187. package/esm2015/lib/schema/parsers/enum-type.js +0 -107
  188. package/esm2015/lib/schema/parsers/structured-type.js +0 -392
  189. package/esm2015/lib/schema/schema.js +0 -52
  190. package/esm2015/lib/schema/structured-type.js +0 -220
  191. package/esm2015/lib/services/base.js +0 -23
  192. package/esm2015/lib/services/entity-set.js +0 -146
  193. package/esm2015/lib/services/entity.js +0 -12
  194. package/esm2015/lib/types.js +0 -37
  195. package/esm2015/lib/utils/odata.js +0 -21
  196. package/fesm2015/angular-odata.js.map +0 -1
@@ -0,0 +1,406 @@
1
+ import { normalizeValue } from './builder';
2
+ //export type Field<T> = keyof T | Funcs<keyof T>;
3
+ export class Field {
4
+ constructor(name = '') {
5
+ this.name = name;
6
+ }
7
+ static factory() {
8
+ const h = new Field();
9
+ return new Proxy({ _name: '' }, h);
10
+ }
11
+ get(target, p) {
12
+ let name = target['_name'];
13
+ if (p === 'render') {
14
+ return ({ prefix }) => prefix ? `${prefix}/${name}` : name;
15
+ }
16
+ name = name ? `${name}/${p}` : p;
17
+ return new Proxy({ _name: name }, this);
18
+ }
19
+ }
20
+ function applyMixins(derivedCtor, constructors) {
21
+ constructors.forEach((baseCtor) => {
22
+ Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
23
+ Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
24
+ Object.create(null));
25
+ });
26
+ });
27
+ }
28
+ function render(value, { aliases, normalize, escape, prefix, } = {}) {
29
+ if (typeof value === 'function') {
30
+ return render(value(syntax), { aliases, normalize, prefix });
31
+ }
32
+ if (typeof value === 'object' &&
33
+ value !== null &&
34
+ value.render !== undefined) {
35
+ return render(value.render({ aliases, escape, prefix }), {
36
+ aliases,
37
+ normalize,
38
+ escape,
39
+ prefix,
40
+ });
41
+ }
42
+ return normalize ? normalizeValue(value, { aliases, escape }) : value;
43
+ }
44
+ export class Function {
45
+ constructor(name, values, normalize = true, escape = false) {
46
+ this.name = name;
47
+ this.values = values;
48
+ this.normalize = normalize;
49
+ this.escape = escape;
50
+ }
51
+ get [Symbol.toStringTag]() {
52
+ return 'Function';
53
+ }
54
+ toJSON() {
55
+ return {
56
+ name: this.name,
57
+ values: this.values,
58
+ normalize: this.normalize,
59
+ };
60
+ }
61
+ render({ aliases, escape, prefix, }) {
62
+ let [field, ...values] = this.values;
63
+ field = render(field, { aliases, escape, prefix });
64
+ let params = [
65
+ field,
66
+ ...values.map((v) => render(v, { aliases, escape, prefix, normalize: this.normalize })),
67
+ ];
68
+ return `${this.name}(${params.join(', ')})`;
69
+ }
70
+ }
71
+ export class StringAndCollectionFunctions {
72
+ concat(field, value, normalize) {
73
+ return new Function('concat', [field, value], normalize);
74
+ }
75
+ contains(field, value, normalize) {
76
+ return new Function('contains', [field, value], normalize);
77
+ }
78
+ endsWith(field, value, normalize) {
79
+ return new Function('endswith', [field, value], normalize);
80
+ }
81
+ indexOf(field, value, normalize) {
82
+ return new Function('indexof', [field, value], normalize);
83
+ }
84
+ length(value, normalize) {
85
+ return new Function('length', [value], normalize);
86
+ }
87
+ startsWith(field, value, normalize) {
88
+ return new Function('startswith', [field, value], normalize);
89
+ }
90
+ subString(field, start, length) {
91
+ let values = [field, start];
92
+ if (length !== undefined) {
93
+ values.push(length);
94
+ }
95
+ return new Function('substring', values);
96
+ }
97
+ }
98
+ export class CollectionFunctions {
99
+ hasSubset(s1, s2) {
100
+ return new Function('hassubset', [s1, s2]);
101
+ }
102
+ hasSubsequence(s1, s2) {
103
+ return new Function('hassubsequence', [s1, s2]);
104
+ }
105
+ }
106
+ export class StringFunctions {
107
+ matchesPattern(value, pattern) {
108
+ return new Function('matchesPattern', [value, pattern]);
109
+ }
110
+ toLower(value) {
111
+ return new Function('tolower', [value]);
112
+ }
113
+ toUpper(value) {
114
+ return new Function('toupper', [value]);
115
+ }
116
+ trim(value) {
117
+ return new Function('trim', [value]);
118
+ }
119
+ }
120
+ export class DateAndTimeFunctions {
121
+ date(value) {
122
+ return new Function('date', [value]);
123
+ }
124
+ day(value) {
125
+ return new Function('day', [value]);
126
+ }
127
+ fractionalseconds(value) {
128
+ return new Function('fractionalseconds', [value]);
129
+ }
130
+ hour(value) {
131
+ return new Function('hour', [value]);
132
+ }
133
+ maxdatetime(value) {
134
+ return new Function('maxdatetime', [value]);
135
+ }
136
+ mindatetime(value) {
137
+ return new Function('mindatetime', [value]);
138
+ }
139
+ minute(value) {
140
+ return new Function('minute', [value]);
141
+ }
142
+ month(value) {
143
+ return new Function('month', [value]);
144
+ }
145
+ now() {
146
+ return new Function('now', []);
147
+ }
148
+ second(value) {
149
+ return new Function('second', [value]);
150
+ }
151
+ time(value) {
152
+ return new Function('time', [value]);
153
+ }
154
+ totaloffsetminutes(value) {
155
+ return new Function('totaloffsetminutes', [value]);
156
+ }
157
+ totalseconds(value) {
158
+ return new Function('totalseconds', [value]);
159
+ }
160
+ year(value) {
161
+ return new Function('year', [value]);
162
+ }
163
+ }
164
+ export class ArithmeticFunctions {
165
+ ceiling(value) {
166
+ return new Function('ceiling', [value]);
167
+ }
168
+ floor(value) {
169
+ return new Function('floor', [value]);
170
+ }
171
+ round(value) {
172
+ return new Function('round', [value]);
173
+ }
174
+ }
175
+ export class TypeFunctions {
176
+ cast(value, type) {
177
+ return new Function('cast', [value, type]);
178
+ }
179
+ isof(value, type) {
180
+ return new Function('isof', [value, type]);
181
+ }
182
+ }
183
+ export class GeoFunctions {
184
+ geoDistance(value, point, normalize) {
185
+ return new Function('geo.distance', [value, point], normalize);
186
+ }
187
+ geoIntersects(value, polygon, normalize) {
188
+ return new Function('geo.intersects', [value, polygon], normalize);
189
+ }
190
+ geoLength(line, normalize) {
191
+ return new Function('geo.length', [line], normalize);
192
+ }
193
+ }
194
+ export class ConditionalFunctions {
195
+ case(condition, value) {
196
+ return new Function('case', [condition, value]);
197
+ }
198
+ }
199
+ export class Operator {
200
+ constructor(op, values, normalize = true) {
201
+ this.op = op;
202
+ this.values = values;
203
+ this.normalize = normalize;
204
+ }
205
+ get [Symbol.toStringTag]() {
206
+ return 'Operator';
207
+ }
208
+ toJSON() {
209
+ return {
210
+ op: this.op,
211
+ values: this.values,
212
+ normalize: this.normalize,
213
+ };
214
+ }
215
+ render({ aliases, escape, prefix, }) {
216
+ let [left, right] = this.values;
217
+ left = render(left, { aliases, escape, prefix });
218
+ if (right !== undefined) {
219
+ right = Array.isArray(right)
220
+ ? `(${right
221
+ .map((v) => render(v, {
222
+ aliases,
223
+ escape,
224
+ prefix,
225
+ normalize: this.normalize,
226
+ }))
227
+ .join(',')})`
228
+ : render(right, {
229
+ aliases,
230
+ escape,
231
+ prefix,
232
+ normalize: this.normalize,
233
+ });
234
+ return `${left} ${this.op} ${right}`;
235
+ }
236
+ return `${this.op}(${left})`;
237
+ }
238
+ }
239
+ export class LogicalOperators {
240
+ eq(left, right, normalize) {
241
+ return new Operator('eq', [left, right], normalize);
242
+ }
243
+ ne(left, right, normalize) {
244
+ return new Operator('ne', [left, right], normalize);
245
+ }
246
+ gt(left, right, normalize) {
247
+ return new Operator('gt', [left, right], normalize);
248
+ }
249
+ ge(left, right, normalize) {
250
+ return new Operator('ge', [left, right], normalize);
251
+ }
252
+ lt(left, right, normalize) {
253
+ return new Operator('lt', [left, right], normalize);
254
+ }
255
+ le(left, right, normalize) {
256
+ return new Operator('le', [left, right], normalize);
257
+ }
258
+ /*
259
+ and(left: any, right: any, normalize?: boolean) {
260
+ return new Operator('and', [left, right], normalize);
261
+ }
262
+ or(left: any, right: any, normalize?: boolean) {
263
+ return new Operator('or', [left, right], normalize);
264
+ }
265
+ */
266
+ not(value, normalize) {
267
+ return new Operator('not', [value], normalize);
268
+ }
269
+ has(left, right, normalize) {
270
+ return new Operator('has', [left, right], normalize);
271
+ }
272
+ in(left, right, normalize) {
273
+ return new Operator('in', [left, right], normalize);
274
+ }
275
+ }
276
+ export class ArithmeticOperators {
277
+ add(left, right, normalize) {
278
+ return new Operator('add', [left, right], normalize);
279
+ }
280
+ sub(left, right, normalize) {
281
+ return new Operator('sub', [left, right], normalize);
282
+ }
283
+ mul(left, right, normalize) {
284
+ return new Operator('mul', [left, right], normalize);
285
+ }
286
+ div(left, right, normalize) {
287
+ return new Operator('div', [left, right], normalize);
288
+ }
289
+ mod(left, right, normalize) {
290
+ return new Operator('mod', [left, right], normalize);
291
+ }
292
+ neg(value, normalize) {
293
+ return new Operator('-', [value], normalize);
294
+ }
295
+ }
296
+ export class Grouping {
297
+ constructor(group) {
298
+ this.group = group;
299
+ }
300
+ get [Symbol.toStringTag]() {
301
+ return 'Grouping';
302
+ }
303
+ toJSON() {
304
+ return {
305
+ group: this.group.toJSON(),
306
+ };
307
+ }
308
+ render({ aliases, escape, prefix, }) {
309
+ return `(${render(this.group, { aliases, escape, prefix })})`;
310
+ }
311
+ }
312
+ /*
313
+ export class Navigation<T, N> implements Renderable {
314
+ constructor(protected field: T, protected value: Field<N>) {}
315
+
316
+ get [Symbol.toStringTag]() {
317
+ return 'Navigation';
318
+ }
319
+
320
+ toJSON() {
321
+ return {
322
+ field: this.field,
323
+ value: this.value,
324
+ };
325
+ }
326
+
327
+ render({
328
+ aliases,
329
+ escape,
330
+ prefix,
331
+ }: {
332
+ aliases?: QueryCustomType[];
333
+ escape?: boolean;
334
+ prefix?: string;
335
+ }): string {
336
+ return `${this.field}/${render(this.value, { aliases, escape, prefix })}`;
337
+ }
338
+ }
339
+ */
340
+ export class GroupingOperators {
341
+ grouping(value) {
342
+ return new Grouping(value);
343
+ }
344
+ }
345
+ export class Lambda {
346
+ constructor(op, values, alias) {
347
+ this.op = op;
348
+ this.values = values;
349
+ this.alias = alias;
350
+ }
351
+ get [Symbol.toStringTag]() {
352
+ return 'Lambda';
353
+ }
354
+ toJSON() {
355
+ return {
356
+ op: this.op,
357
+ values: this.values,
358
+ alias: this.alias,
359
+ };
360
+ }
361
+ render({ aliases, escape, prefix, }) {
362
+ let [left, right] = this.values;
363
+ left = render(left, { aliases, escape, prefix });
364
+ let alias = this.alias || left.split('/').pop().toLowerCase()[0];
365
+ return `${left}/${this.op}(${alias}:${render(right, {
366
+ aliases,
367
+ escape,
368
+ prefix: alias,
369
+ })})`;
370
+ }
371
+ }
372
+ export class LambdaOperators {
373
+ any(field, value, alias) {
374
+ return new Lambda('any', [field, value], alias);
375
+ }
376
+ all(field, value, alias) {
377
+ return new Lambda('all', [field, value], alias);
378
+ }
379
+ }
380
+ export class ODataOperators {
381
+ }
382
+ applyMixins(ODataOperators, [
383
+ LogicalOperators,
384
+ ArithmeticOperators,
385
+ GroupingOperators,
386
+ LambdaOperators,
387
+ ]);
388
+ export const operators = new ODataOperators();
389
+ export class ODataFunctions {
390
+ }
391
+ applyMixins(ODataFunctions, [
392
+ StringAndCollectionFunctions,
393
+ CollectionFunctions,
394
+ StringFunctions,
395
+ DateAndTimeFunctions,
396
+ ArithmeticFunctions,
397
+ TypeFunctions,
398
+ GeoFunctions,
399
+ ConditionalFunctions,
400
+ ]);
401
+ export const functions = new ODataFunctions();
402
+ export class ODataSyntax {
403
+ }
404
+ applyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);
405
+ export const syntax = new ODataSyntax();
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQW1CM0Msa0RBQWtEO0FBRWxELE1BQU0sT0FBTyxLQUFLO0lBQ2hCLFlBQW1CLE9BQWUsRUFBRTtRQUFqQixTQUFJLEdBQUosSUFBSSxDQUFhO0lBQUcsQ0FBQztJQUV4QyxNQUFNLENBQUMsT0FBTztRQUNaLE1BQU0sQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFLLENBQUM7UUFDekIsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQVMsRUFBRSxDQUFrQjtRQUMvQixJQUFJLElBQUksR0FBSSxNQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBdUIsRUFBRSxFQUFFLENBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUN2QztRQUNELElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLFdBQVcsQ0FBQyxXQUFnQixFQUFFLFlBQW1CO0lBQ3hELFlBQVksQ0FBQyxPQUFPLENB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QjtJQUM1QixtQkFBbUI7SUFDbkIsZUFBZTtJQUNmLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsYUFBYTtJQUNiLFlBQVk7SUFDWixvQkFBb0I7Q0FDckIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUF3QixJQUFJLGNBQWMsRUFBTyxDQUFDO0FBRXhFLE1BQU0sT0FBTyxXQUFXO0NBQU07QUFFOUIsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBcUIsSUFBSSxXQUFXLEVBQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi9idWlsZGVyJztcbmltcG9ydCB7IG5vcm1hbGl6ZVZhbHVlIH0gZnJvbSAnLi9idWlsZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJhYmxlIHtcbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmc7XG4gIHRvU3RyaW5nKCk6IHN0cmluZztcbiAgdG9KU09OKCk6IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgRnVuY3M8VD4gPSAoXG4gIHg6IE9EYXRhU3ludGF4PFQ+XG4pID0+IEZ1bmN0aW9uPFQ+IHwgT3BlcmF0b3I8VD4gfCBHcm91cGluZzxUPjtcbi8vZXhwb3J0IHR5cGUgRmllbGQ8VD4gPSBrZXlvZiBUIHwgRnVuY3M8a2V5b2YgVD47XG5cbmV4cG9ydCBjbGFzcyBGaWVsZDxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIFByb3h5SGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcgPSAnJykge31cblxuICBzdGF0aWMgZmFjdG9yeTxUIGV4dGVuZHMgb2JqZWN0PigpIHtcbiAgICBjb25zdCBoID0gbmV3IEZpZWxkPFQ+KCk7XG4gICAgcmV0dXJuIG5ldyBQcm94eSh7IF9uYW1lOiAnJyB9IGFzIFQsIGgpO1xuICB9XG5cbiAgZ2V0KHRhcmdldDogVCwgcDogc3RyaW5nIHwgc3ltYm9sKTogYW55IHtcbiAgICBsZXQgbmFtZSA9ICh0YXJnZXQgYXMgYW55KVsnX25hbWUnXTtcbiAgICBpZiAocCA9PT0gJ3JlbmRlcicpIHtcbiAgICAgIHJldHVybiAoeyBwcmVmaXggfTogeyBwcmVmaXg/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgcHJlZml4ID8gYCR7cHJlZml4fS8ke25hbWV9YCA6IG5hbWU7XG4gICAgfVxuICAgIG5hbWUgPSBuYW1lID8gYCR7bmFtZX0vJHtwIGFzIHN0cmluZ31gIDogcDtcbiAgICByZXR1cm4gbmV3IFByb3h5KHsgX25hbWU6IG5hbWUgfSBhcyBhbnksIHRoaXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5TWl4aW5zKGRlcml2ZWRDdG9yOiBhbnksIGNvbnN0cnVjdG9yczogYW55W10pIHtcbiAgY29uc3RydWN0b3JzLmZvckVhY2goKGJhc2VDdG9yKSA9PiB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYmFzZUN0b3IucHJvdG90eXBlKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgIGRlcml2ZWRDdG9yLnByb3RvdHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihiYXNlQ3Rvci5wcm90b3R5cGUsIG5hbWUpIHx8XG4gICAgICAgICAgT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcihcbiAgdmFsdWU6IGFueSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgbm9ybWFsaXplLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgbm9ybWFsaXplPzogYm9vbGVhbjtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSA9IHt9XG4pOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlKHN5bnRheCksIHsgYWxpYXNlcywgbm9ybWFsaXplLCBwcmVmaXggfSk7XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHZhbHVlLnJlbmRlciAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiByZW5kZXIodmFsdWUucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSksIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBub3JtYWxpemUsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXgsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZSA/IG5vcm1hbGl6ZVZhbHVlKHZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSA6IHZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb248VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZSxcbiAgICBwcm90ZWN0ZWQgZXNjYXBlOiBib29sZWFuID0gZmFsc2VcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcyxcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2ZpZWxkLCAuLi52YWx1ZXNdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBmaWVsZCA9IHJlbmRlcihmaWVsZCwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KTtcbiAgICBsZXQgcGFyYW1zID0gW1xuICAgICAgZmllbGQsXG4gICAgICAuLi52YWx1ZXMubWFwKCh2KSA9PlxuICAgICAgICByZW5kZXIodiwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCwgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSB9KVxuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9KCR7cGFyYW1zLmpvaW4oJywgJyl9KWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnM8VD4ge1xuICBjb25jYXQoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NvbmNhdCcsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgY29udGFpbnMoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NvbnRhaW5zJywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBlbmRzV2l0aChmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZW5kc3dpdGgnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGluZGV4T2YoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2luZGV4b2YnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGxlbmd0aCh2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbGVuZ3RoJywgW3ZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIHN0YXJ0c1dpdGgoZmllbGQ6IGFueSwgdmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N0YXJ0c3dpdGgnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIHN1YlN0cmluZyhmaWVsZDogYW55LCBzdGFydDogbnVtYmVyLCBsZW5ndGg/OiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzID0gW2ZpZWxkLCBzdGFydF07XG4gICAgaWYgKGxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZXMucHVzaChsZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdzdWJzdHJpbmcnLCB2YWx1ZXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+IHtcbiAgaGFzU3Vic2V0KHMxOiBULCBzMjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaGFzc3Vic2V0JywgW3MxLCBzMl0pO1xuICB9XG4gIGhhc1N1YnNlcXVlbmNlKHMxOiBULCBzMjogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaGFzc3Vic2VxdWVuY2UnLCBbczEsIHMyXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0cmluZ0Z1bmN0aW9uczxUPiB7XG4gIG1hdGNoZXNQYXR0ZXJuKHZhbHVlOiBUIHwgc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtYXRjaGVzUGF0dGVybicsIFt2YWx1ZSwgcGF0dGVybl0pO1xuICB9XG4gIHRvTG93ZXIodmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b2xvd2VyJywgW3ZhbHVlXSk7XG4gIH1cbiAgdG9VcHBlcih2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdXBwZXInLCBbdmFsdWVdKTtcbiAgfVxuICB0cmltKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndHJpbScsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRlQW5kVGltZUZ1bmN0aW9uczxUPiB7XG4gIGRhdGUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RhdGUnLCBbdmFsdWVdKTtcbiAgfVxuICBkYXkodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2RheScsIFt2YWx1ZV0pO1xuICB9XG4gIGZyYWN0aW9uYWxzZWNvbmRzKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdmcmFjdGlvbmFsc2Vjb25kcycsIFt2YWx1ZV0pO1xuICB9XG4gIGhvdXIodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2hvdXInLCBbdmFsdWVdKTtcbiAgfVxuICBtYXhkYXRldGltZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWF4ZGF0ZXRpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICBtaW5kYXRldGltZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWluZGF0ZXRpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICBtaW51dGUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21pbnV0ZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1vbnRoKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtb250aCcsIFt2YWx1ZV0pO1xuICB9XG4gIG5vdygpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdub3cnLCBbXSk7XG4gIH1cbiAgc2Vjb25kKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdzZWNvbmQnLCBbdmFsdWVdKTtcbiAgfVxuICB0aW1lKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0aW1lJywgW3ZhbHVlXSk7XG4gIH1cbiAgdG90YWxvZmZzZXRtaW51dGVzKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0b3RhbG9mZnNldG1pbnV0ZXMnLCBbdmFsdWVdKTtcbiAgfVxuICB0b3RhbHNlY29uZHModmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdGFsc2Vjb25kcycsIFt2YWx1ZV0pO1xuICB9XG4gIHllYXIodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3llYXInLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY0Z1bmN0aW9uczxUPiB7XG4gIGNlaWxpbmcodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjZWlsaW5nJywgW3ZhbHVlXSk7XG4gIH1cbiAgZmxvb3IodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdmbG9vcicsIFt2YWx1ZV0pO1xuICB9XG4gIHJvdW5kKHZhbHVlOiBUIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigncm91bmQnLCBbdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwZUZ1bmN0aW9uczxUPiB7XG4gIGNhc3QodmFsdWU6IFQgfCBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjYXN0JywgW3ZhbHVlLCB0eXBlXSk7XG4gIH1cblxuICBpc29mKHZhbHVlOiBUIHwgc3RyaW5nLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaXNvZicsIFt2YWx1ZSwgdHlwZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBHZW9GdW5jdGlvbnM8VD4ge1xuICBnZW9EaXN0YW5jZSh2YWx1ZTogVCwgcG9pbnQ6IHN0cmluZywgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5kaXN0YW5jZScsIFt2YWx1ZSwgcG9pbnRdLCBub3JtYWxpemUpO1xuICB9XG4gIGdlb0ludGVyc2VjdHModmFsdWU6IFQsIHBvbHlnb246IHN0cmluZywgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5pbnRlcnNlY3RzJywgW3ZhbHVlLCBwb2x5Z29uXSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZW9MZW5ndGgobGluZTogVCwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2dlby5sZW5ndGgnLCBbbGluZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbmFsRnVuY3Rpb25zPFQ+IHtcbiAgY2FzZShjb25kaXRpb246IFQgfCBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdjYXNlJywgW2NvbmRpdGlvbiwgdmFsdWVdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgT3BlcmF0b3I8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG9wOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIHZhbHVlczogYW55W10sXG4gICAgcHJvdGVjdGVkIG5vcm1hbGl6ZTogYm9vbGVhbiA9IHRydWVcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ09wZXJhdG9yJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbbGVmdCwgcmlnaHRdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSk7XG4gICAgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJpZ2h0ID0gQXJyYXkuaXNBcnJheShyaWdodClcbiAgICAgICAgPyBgKCR7cmlnaHRcbiAgICAgICAgICAgIC5tYXAoKHYpID0+XG4gICAgICAgICAgICAgIHJlbmRlcih2LCB7XG4gICAgICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgICAgICBlc2NhcGUsXG4gICAgICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbignLCcpfSlgXG4gICAgICAgIDogcmVuZGVyKHJpZ2h0LCB7XG4gICAgICAgICAgICBhbGlhc2VzLFxuICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICAgICAgICB9KTtcbiAgICAgIHJldHVybiBgJHtsZWZ0fSAke3RoaXMub3B9ICR7cmlnaHR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMub3B9KCR7bGVmdH0pYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naWNhbE9wZXJhdG9yczxUPiB7XG4gIGVxKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2VxJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBuZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCduZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ3QobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignZ3QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGdlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2dlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBsdChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdsdCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbGUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbGUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIC8qXG4gIGFuZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdhbmQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG9yKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ29yJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICAqL1xuICBub3QodmFsdWU6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3I8VD4oJ25vdCcsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaGFzKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2hhcycsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgaW4obGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignaW4nLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcml0aG1ldGljT3BlcmF0b3JzPFQ+IHtcbiAgYWRkKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3I8VD4oJ2FkZCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgc3ViKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ3N1YicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbXVsKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ211bCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZGl2KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2RpdicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbW9kKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ21vZCcsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbmVnKHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCctJywgW3ZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR3JvdXBpbmc8VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGdyb3VwOiBSZW5kZXJhYmxlKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0dyb3VwaW5nJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAudG9KU09OKCksXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke3JlbmRlcih0aGlzLmdyb3VwLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pfSlgO1xuICB9XG59XG5cbi8qXG5leHBvcnQgY2xhc3MgTmF2aWdhdGlvbjxULCBOPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZmllbGQ6IFQsIHByb3RlY3RlZCB2YWx1ZTogRmllbGQ8Tj4pIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTmF2aWdhdGlvbic7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5maWVsZH0vJHtyZW5kZXIodGhpcy52YWx1ZSwgeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KX1gO1xuICB9XG59XG4qL1xuXG5leHBvcnQgY2xhc3MgR3JvdXBpbmdPcGVyYXRvcnM8VD4ge1xuICBncm91cGluZyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBHcm91cGluZyh2YWx1ZSk7XG4gIH1cblxuICAvKlxuICBuYXZpZ2F0aW9uPE4+KGZpZWxkOiBULCB2YWx1ZTogRmllbGQ8Tj4pIHtcbiAgICByZXR1cm4gbmV3IE5hdmlnYXRpb248VCwgTj4oZmllbGQsIHZhbHVlKTtcbiAgfVxuICAqL1xufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBhbGlhcz86IHN0cmluZ1xuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTGFtYmRhJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgYWxpYXM6IHRoaXMuYWxpYXMsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IHRoaXMudmFsdWVzO1xuXG4gICAgbGVmdCA9IHJlbmRlcihsZWZ0LCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGxldCBhbGlhcyA9IHRoaXMuYWxpYXMgfHwgbGVmdC5zcGxpdCgnLycpLnBvcCgpLnRvTG93ZXJDYXNlKClbMF07XG4gICAgcmV0dXJuIGAke2xlZnR9LyR7dGhpcy5vcH0oJHthbGlhc306JHtyZW5kZXIocmlnaHQsIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXg6IGFsaWFzLFxuICAgIH0pfSlgO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMYW1iZGFPcGVyYXRvcnM8VD4ge1xuICBhbnkoZmllbGQ6IFQsIHZhbHVlOiBhbnksIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FueScsIFtmaWVsZCwgdmFsdWVdLCBhbGlhcyk7XG4gIH1cblxuICBhbGwoZmllbGQ6IFQsIHZhbHVlOiBhbnksIGFsaWFzPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMYW1iZGEoJ2FsbCcsIFtmaWVsZCwgdmFsdWVdLCBhbGlhcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9EYXRhT3BlcmF0b3JzPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhT3BlcmF0b3JzPFQ+XG4gIGV4dGVuZHMgTG9naWNhbE9wZXJhdG9yczxUPixcbiAgICBBcml0aG1ldGljT3BlcmF0b3JzPFQ+LFxuICAgIEdyb3VwaW5nT3BlcmF0b3JzPFQ+LFxuICAgIExhbWJkYU9wZXJhdG9yczxUPiB7fVxuXG5hcHBseU1peGlucyhPRGF0YU9wZXJhdG9ycywgW1xuICBMb2dpY2FsT3BlcmF0b3JzLFxuICBBcml0aG1ldGljT3BlcmF0b3JzLFxuICBHcm91cGluZ09wZXJhdG9ycyxcbiAgTGFtYmRhT3BlcmF0b3JzLFxuXSk7XG5leHBvcnQgY29uc3Qgb3BlcmF0b3JzOiBPRGF0YU9wZXJhdG9yczxhbnk+ID0gbmV3IE9EYXRhT3BlcmF0b3JzPGFueT4oKTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhRnVuY3Rpb25zPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhRnVuY3Rpb25zPFQ+XG4gIGV4dGVuZHMgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9uczxUPixcbiAgICBDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+LFxuICAgIFN0cmluZ0Z1bmN0aW9uczxUPixcbiAgICBEYXRlQW5kVGltZUZ1bmN0aW9uczxUPixcbiAgICBBcml0aG1ldGljRnVuY3Rpb25zPFQ+LFxuICAgIFR5cGVGdW5jdGlvbnM8VD4sXG4gICAgR2VvRnVuY3Rpb25zPFQ+LFxuICAgIENvbmRpdGlvbmFsRnVuY3Rpb25zPFQ+IHt9XG5cbmFwcGx5TWl4aW5zKE9EYXRhRnVuY3Rpb25zLCBbXG4gIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIFN0cmluZ0Z1bmN0aW9ucyxcbiAgRGF0ZUFuZFRpbWVGdW5jdGlvbnMsXG4gIEFyaXRobWV0aWNGdW5jdGlvbnMsXG4gIFR5cGVGdW5jdGlvbnMsXG4gIEdlb0Z1bmN0aW9ucyxcbiAgQ29uZGl0aW9uYWxGdW5jdGlvbnMsXG5dKTtcbmV4cG9ydCBjb25zdCBmdW5jdGlvbnM6IE9EYXRhRnVuY3Rpb25zPGFueT4gPSBuZXcgT0RhdGFGdW5jdGlvbnM8YW55PigpO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFTeW50YXg8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFTeW50YXg8VD4gZXh0ZW5kcyBPRGF0YU9wZXJhdG9yczxUPiwgT0RhdGFGdW5jdGlvbnM8VD4ge31cbmFwcGx5TWl4aW5zKE9EYXRhU3ludGF4LCBbT0RhdGFPcGVyYXRvcnMsIE9EYXRhRnVuY3Rpb25zXSk7XG5cbmV4cG9ydCBjb25zdCBzeW50YXg6IE9EYXRhU3ludGF4PGFueT4gPSBuZXcgT0RhdGFTeW50YXg8YW55PigpO1xuIl19