@devx-commerce/plugin-discounts-svaraa 0.0.2-beta.9 → 0.0.2

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 (65) hide show
  1. package/.medusa/server/src/api/admin/discounts/freebie-rules/[id]/route.js +2 -2
  2. package/.medusa/server/src/api/admin/discounts/freebie-rules/route.js +2 -2
  3. package/.medusa/server/src/api/admin/discounts/price-rules/[id]/route.js +2 -2
  4. package/.medusa/server/src/api/admin/discounts/price-rules/route.js +2 -2
  5. package/.medusa/server/src/api/admin/discounts/validators.js +5 -2
  6. package/.medusa/server/src/api/middlewares.js +4 -1
  7. package/.medusa/server/src/api/pos/discounts/apply/route.js +159 -0
  8. package/.medusa/server/src/api/pos/discounts/apply-freebie/route.js +20 -0
  9. package/.medusa/server/src/api/pos/discounts/auto-apply/route.js +207 -0
  10. package/.medusa/server/src/api/pos/discounts/cart-eligible-coupons/[cart_id]/route.js +39 -0
  11. package/.medusa/server/src/api/pos/discounts/coupons/[id]/route.js +25 -0
  12. package/.medusa/server/src/api/pos/discounts/middlewares.js +91 -0
  13. package/.medusa/server/src/api/pos/discounts/offers-on-product/[variant_id]/route.js +19 -0
  14. package/.medusa/server/src/api/pos/discounts/price-rules/route.js +68 -0
  15. package/.medusa/server/src/api/pos/discounts/price-rules-list/route.js +46 -0
  16. package/.medusa/server/src/api/pos/discounts/remove/route.js +42 -0
  17. package/.medusa/server/src/api/pos/discounts/remove-store-discount/route.js +58 -0
  18. package/.medusa/server/src/api/pos/discounts/validators.js +356 -0
  19. package/.medusa/server/src/api/pos/discounts/verify-store-discount/route.js +262 -0
  20. package/.medusa/server/src/api/store/discounts/apply/route.js +105 -4
  21. package/.medusa/server/src/api/store/discounts/auto-apply/route.js +30 -11
  22. package/.medusa/server/src/api/store/discounts/coupons/[id]/route.js +1 -1
  23. package/.medusa/server/src/api/store/discounts/middlewares.js +6 -4
  24. package/.medusa/server/src/api/store/discounts/price-rules/route.js +6 -5
  25. package/.medusa/server/src/api/store/discounts/remove/route.js +16 -1
  26. package/.medusa/server/src/lib/constant.js +138 -2
  27. package/.medusa/server/src/lib/helper.js +17 -10
  28. package/.medusa/server/src/lib/send-otp-helper.js +37 -0
  29. package/.medusa/server/src/lib/utils.js +1 -1
  30. package/.medusa/server/src/links/mtm-freebie-rule-with-customers.js +1 -1
  31. package/.medusa/server/src/links/mtm-price-rule-with-customers.js +1 -1
  32. package/.medusa/server/src/modules/discounts/migrations/Migration20250708062404.js +1 -1
  33. package/.medusa/server/src/modules/discounts/migrations/Migration20250822052209.js +1 -1
  34. package/.medusa/server/src/modules/discounts/migrations/Migration20250825073038.js +1 -1
  35. package/.medusa/server/src/modules/discounts/migrations/Migration20250901083847.js +1 -1
  36. package/.medusa/server/src/modules/discounts/migrations/Migration20250918095658.js +14 -0
  37. package/.medusa/server/src/modules/discounts/models/price-rule.js +5 -2
  38. package/.medusa/server/src/modules/discounts/service.js +11 -5
  39. package/.medusa/server/src/subscribers/promocode-subscriber.js +32 -9
  40. package/.medusa/server/src/workflows/discount/add-more-code-in-price-rule/index.js +1 -1
  41. package/.medusa/server/src/workflows/discount/apply-coupon/index.js +2 -2
  42. package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step-backup.js +1 -1
  43. package/.medusa/server/src/workflows/discount/apply-coupon/steps/apply-coupon-step.js +4 -6
  44. package/.medusa/server/src/workflows/discount/apply-coupon/steps/generate-adjustment-line-item.js +4 -2
  45. package/.medusa/server/src/workflows/discount/apply-coupon/steps/validate-coupon-step.js +10 -6
  46. package/.medusa/server/src/workflows/discount/apply-freebie/steps/add-freebie-items-to-cart.js +7 -5
  47. package/.medusa/server/src/workflows/discount/auto-apply-coupon/steps/auto-apply-coupon.js +11 -6
  48. package/.medusa/server/src/workflows/discount/calculate-coupon-discount/step/fetch-price-rule-by-code.js +1 -1
  49. package/.medusa/server/src/workflows/discount/create-discount-price-rule/index.js +2 -2
  50. package/.medusa/server/src/workflows/discount/create-discount-price-rule/steps/validate-customer-exists.js +2 -2
  51. package/.medusa/server/src/workflows/discount/create-subscriber-to-discount-price-rule.js +1 -1
  52. package/.medusa/server/src/workflows/discount/get-cart-eligible-coupons/step/get-cart-eligible-coupon.js +3 -2
  53. package/.medusa/server/src/workflows/discount/get-product-offers/step/calculate-product-offers.js +1 -2
  54. package/.medusa/server/src/workflows/discount/index.js +1 -1
  55. package/.medusa/server/src/workflows/discount/remove-coupon/index.js +10 -2
  56. package/.medusa/server/src/workflows/discount/remove-coupon/step/remove-coupon-step.js +1 -1
  57. package/.medusa/server/src/workflows/discount/steps/validate-cart-exists.js +1 -1
  58. package/.medusa/server/src/workflows/discount/update-coupon-code-stats/step/update-coupon-code-stats.js +1 -1
  59. package/.medusa/server/src/workflows/discount/update-discount-price-rule/index.js +1 -1
  60. package/.medusa/server/src/workflows/discount/update-discount-price-rule/steps/update-discount-price-rule-step.js +7 -3
  61. package/.medusa/server/src/workflows/discount/update-discount-price-rule/steps/validate-discount-price-rule-update-step.js +1 -1
  62. package/.medusa/server/src/workflows/locking/acquire-lock.js +1 -1
  63. package/.medusa/server/src/workflows/locking/index.js +1 -1
  64. package/.medusa/server/src/workflows/locking/release-lock.js +1 -1
  65. package/package.json +4 -2
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PosVerifyStoreDiscountInputValidator = exports.PosRemoveStoreDiscountInputValidator = exports.PosApplyStoreDiscountInputValidator = exports.PosApplyFreebieInputValidator = exports.PosAutoApplyDiscountInputValidator = exports.PosRemoveDiscountInputValidator = exports.PosApplyDiscountInputValidator = exports.PosGetDiscountPriceRulesParams = exports.PosListDiscountPriceRulesParams = exports.PosListDiscountPriceRulesParamsFields = exports.PosListDiscountPriceRulesDirectFields = exports.posDefaultDiscountPriceRuleFields = exports.PosCreateDiscountDetailsInputValidator = void 0;
4
+ const common_1 = require("@medusajs/medusa/api/utils/common-validators/common");
5
+ const validators_1 = require("@medusajs/medusa/api/utils/validators");
6
+ const zod_1 = require("zod");
7
+ // Import shared enums from admin validators
8
+ const validators_2 = require("../../admin/discounts/validators");
9
+ // ##################### POS DISCOUNT VALIDATORS #####################
10
+ // Extract the base object schema for reuse
11
+ const PosCreateDiscountDetailsBaseSchema = zod_1.z.object({
12
+ title: zod_1.z.string().optional(),
13
+ description: zod_1.z.string().optional(),
14
+ type: validators_2.DiscountType,
15
+ starts_at: zod_1.z.string().datetime(),
16
+ ends_at: zod_1.z.string().datetime().optional(),
17
+ applies_on: validators_2.DiscountAppliesOn.optional().default(validators_2.DiscountAppliesOn.Values.PRICE),
18
+ applies_on_components: zod_1.z.array(validators_2.DiscountAppliesOnComponents).optional(),
19
+ min_order_value: zod_1.z.number().optional(),
20
+ promocode_type_id: zod_1.z.number().optional(),
21
+ is_all_branch: zod_1.z.boolean().default(false),
22
+ code_count: zod_1.z.number().default(0).optional(),
23
+ is_category: zod_1.z.boolean().default(false),
24
+ is_make_type: zod_1.z.boolean().default(false),
25
+ is_style: zod_1.z.boolean().default(false),
26
+ is_stock_type: zod_1.z.boolean().default(false),
27
+ is_birthday: zod_1.z.boolean().default(false),
28
+ is_anniversary: zod_1.z.boolean().default(false),
29
+ assign_branch_nos: zod_1.z.string().optional(),
30
+ min_order_qty: zod_1.z.number().optional(),
31
+ max_discount: zod_1.z.number().optional(),
32
+ usage_limit_per_customer_type: validators_2.DiscountUsageLimitPerCustomerType.optional().default(validators_2.DiscountUsageLimitPerCustomerType.Values.UNLIMITED),
33
+ usage_limit_per_customer_specific: zod_1.z.number().optional(),
34
+ usage_limit: validators_2.DiscountUsageLimitType.optional().default(validators_2.DiscountUsageLimitType.Values.UNLIMITED),
35
+ usage_limit_specific: zod_1.z.number().optional(),
36
+ usage_limit_per_cart_type: validators_2.DiscountUsageLimitPerCartType.optional().default(validators_2.DiscountUsageLimitPerCartType.Values.ONLY_ONCE),
37
+ usage_limit_per_cart_specific: zod_1.z.number().optional(),
38
+ get_percent: zod_1.z.number().optional(),
39
+ get_flat_discount: zod_1.z.number().optional(),
40
+ visibility: zod_1.z.boolean().default(false),
41
+ only_for_new_customer: zod_1.z.boolean().default(false),
42
+ auto_apply: zod_1.z.boolean().default(false),
43
+ applicable_on_bundle: zod_1.z.boolean().default(false),
44
+ buy_x: zod_1.z.number().optional(),
45
+ get_y: zod_1.z.number().optional(),
46
+ at_y: zod_1.z.number().optional(),
47
+ applicable_product_variant_ids: zod_1.z.array(zod_1.z.string()).optional(),
48
+ applicable_category_ids: zod_1.z.array(zod_1.z.string()).optional(),
49
+ applicable_make_types: zod_1.z.array(zod_1.z.string()).optional(),
50
+ applicable_styles: zod_1.z.array(zod_1.z.string()).optional(),
51
+ applicable_stock_types: zod_1.z.array(zod_1.z.string()).optional(),
52
+ applicable_customer_ids: zod_1.z.array(zod_1.z.string()).optional(),
53
+ code: zod_1.z.string(),
54
+ });
55
+ const posCreatePriceRuleSuperRefine = (data, ctx) => {
56
+ if (data.usage_limit_per_customer_type ===
57
+ validators_2.DiscountUsageLimitPerCustomerType.Values.SPECIFIC &&
58
+ (data.usage_limit_per_customer_specific == null ||
59
+ data.usage_limit_per_customer_specific == undefined)) {
60
+ ctx.addIssue({
61
+ code: zod_1.z.ZodIssueCode.custom,
62
+ message: "usage_limit_per_customer_specific is required when usage_limit_per_customer_type is SPECIFIC",
63
+ path: ["usage_limit_per_customer_specific"],
64
+ });
65
+ }
66
+ if (data.usage_limit === validators_2.DiscountUsageLimitType.Values.SPECIFIC &&
67
+ (data.usage_limit_specific == null ||
68
+ data.usage_limit_specific == undefined)) {
69
+ ctx.addIssue({
70
+ code: zod_1.z.ZodIssueCode.custom,
71
+ message: "usage_limit_specific is required when usage_limit is SPECIFIC",
72
+ path: ["usage_limit_specific"],
73
+ });
74
+ }
75
+ if (data.usage_limit_per_cart_type ===
76
+ validators_2.DiscountUsageLimitPerCartType.Values.SPECIFIC &&
77
+ (data.usage_limit_per_cart_specific == null ||
78
+ data.usage_limit_per_cart_specific == undefined)) {
79
+ ctx.addIssue({
80
+ code: zod_1.z.ZodIssueCode.custom,
81
+ message: "usage_limit_per_cart_specific is required when usage_limit_per_cart_type is SPECIFIC",
82
+ path: ["usage_limit_per_cart_specific"],
83
+ });
84
+ }
85
+ if (data.type === validators_2.DiscountType.Values.FIXED &&
86
+ (data.get_flat_discount == null || data.get_flat_discount == undefined)) {
87
+ ctx.addIssue({
88
+ code: zod_1.z.ZodIssueCode.custom,
89
+ message: "get_flat_discount is required for FIXED discount type",
90
+ path: ["get_flat_discount"],
91
+ });
92
+ }
93
+ if (data.type === validators_2.DiscountType.Values.PERCENTAGE) {
94
+ if (data.get_percent == null ||
95
+ data.get_percent > 100 ||
96
+ data.get_percent < 0) {
97
+ ctx.addIssue({
98
+ code: zod_1.z.ZodIssueCode.custom,
99
+ message: "get_percent is required for PERCENTAGE discount type and must be between 0-100",
100
+ path: ["get_percent"],
101
+ });
102
+ }
103
+ }
104
+ if (data.ends_at &&
105
+ data.starts_at &&
106
+ new Date(data.ends_at) <= new Date(data.starts_at)) {
107
+ ctx.addIssue({
108
+ code: zod_1.z.ZodIssueCode.custom,
109
+ message: "ends_at must be later than starts_at",
110
+ path: ["ends_at"],
111
+ });
112
+ }
113
+ if (data.usage_limit_per_cart_type) {
114
+ if ([
115
+ validators_2.DiscountType.Values.FIXED,
116
+ validators_2.DiscountType.Values.BXGY,
117
+ validators_2.DiscountType.Values.BXAY,
118
+ ].includes(data.type)) {
119
+ // For FIXED, BXGY, BXAY: all usage_limit_per_cart_type values allowed
120
+ }
121
+ else if (data.type === validators_2.DiscountType.Values.PERCENTAGE) {
122
+ if (data.usage_limit_per_cart_type !== "ONLY_ONCE") {
123
+ ctx.addIssue({
124
+ code: zod_1.z.ZodIssueCode.custom,
125
+ message: "usage_limit_per_cart_type can only be 'ONLY_ONCE' when discount type is PERCENTAGE",
126
+ path: ["usage_limit_per_cart_type"],
127
+ });
128
+ }
129
+ }
130
+ else {
131
+ ctx.addIssue({
132
+ code: zod_1.z.ZodIssueCode.custom,
133
+ message: `usage_limit_per_cart_type is not valid for discount type '${data.type}'`,
134
+ path: ["usage_limit_per_cart_type"],
135
+ });
136
+ }
137
+ }
138
+ if (data.type === validators_2.DiscountType.Values.BXGY) {
139
+ if (data.buy_x == null || data.get_y == null) {
140
+ ctx.addIssue({
141
+ code: zod_1.z.ZodIssueCode.custom,
142
+ message: "buy_x and get_y are required for BXGY discounts",
143
+ path: ["buy_x"],
144
+ });
145
+ }
146
+ }
147
+ if (data.type === validators_2.DiscountType.Values.BXAY) {
148
+ if (data.buy_x == null || data.at_y == null) {
149
+ ctx.addIssue({
150
+ code: zod_1.z.ZodIssueCode.custom,
151
+ message: "buy_x and at_y are required for BXAY discounts",
152
+ path: ["buy_x"],
153
+ });
154
+ }
155
+ }
156
+ if (data.applicable_product_variant_ids?.length &&
157
+ data.applicable_category_ids?.length) {
158
+ ctx.addIssue({
159
+ code: zod_1.z.ZodIssueCode.custom,
160
+ message: "You should provide either applicable_product_variant_ids or applicable_category_ids",
161
+ path: ["applicable_product_variant_ids"],
162
+ });
163
+ }
164
+ if (data.min_order_value != null && data.min_order_value < 0) {
165
+ ctx.addIssue({
166
+ code: zod_1.z.ZodIssueCode.custom,
167
+ message: "min_order_value cannot be negative",
168
+ path: ["min_order_value"],
169
+ });
170
+ }
171
+ if (data.min_order_qty != null && data.min_order_qty < 0) {
172
+ ctx.addIssue({
173
+ code: zod_1.z.ZodIssueCode.custom,
174
+ message: "min_order_qty cannot be negative",
175
+ path: ["min_order_qty"],
176
+ });
177
+ }
178
+ if (data.max_discount != null && data.max_discount < 0) {
179
+ ctx.addIssue({
180
+ code: zod_1.z.ZodIssueCode.custom,
181
+ message: "max_discount cannot be negative",
182
+ path: ["max_discount"],
183
+ });
184
+ }
185
+ if (data.type === validators_2.DiscountType.Values.FIXED) {
186
+ ["get_percent", "buy_x", "get_y", "at_y"].forEach((fld) => {
187
+ if (data[fld] != null) {
188
+ ctx.addIssue({
189
+ code: zod_1.z.ZodIssueCode.custom,
190
+ message: `${fld} must be null when discount type is FIXED`,
191
+ path: [fld],
192
+ });
193
+ }
194
+ });
195
+ }
196
+ if (data.type === validators_2.DiscountType.Values.PERCENTAGE) {
197
+ ["get_flat_discount", "buy_x", "get_y", "at_y"].forEach((fld) => {
198
+ if (data[fld] != null) {
199
+ ctx.addIssue({
200
+ code: zod_1.z.ZodIssueCode.custom,
201
+ message: `${fld} must be null when discount type is PERCENTAGE`,
202
+ path: [fld],
203
+ });
204
+ }
205
+ });
206
+ }
207
+ if (data.type === validators_2.DiscountType.Values.BXGY) {
208
+ ["get_percent", "get_flat_discount", "at_y"].forEach((fld) => {
209
+ if (data[fld] != null) {
210
+ ctx.addIssue({
211
+ code: zod_1.z.ZodIssueCode.custom,
212
+ message: `${fld} must be null when discount type is BXGY`,
213
+ path: [fld],
214
+ });
215
+ }
216
+ });
217
+ }
218
+ if (data.type === validators_2.DiscountType.Values.BXAY) {
219
+ ["get_percent", "get_flat_discount", "get_y"].forEach((fld) => {
220
+ if (data[fld] != null) {
221
+ ctx.addIssue({
222
+ code: zod_1.z.ZodIssueCode.custom,
223
+ message: `${fld} must be null when discount type is BXAY`,
224
+ path: [fld],
225
+ });
226
+ }
227
+ });
228
+ }
229
+ return data;
230
+ };
231
+ const posCreatePriceRulePreprocessor = (input) => {
232
+ if (typeof input === "object" && input !== null && "type" in input) {
233
+ if (!("usage_limit_per_cart_type" in input) ||
234
+ input.usage_limit_per_cart_type === undefined) {
235
+ if (["FIXED", "BXGY", "BXAY"].includes(input.type)) {
236
+ return { ...input, usage_limit_per_cart_type: "UNLIMITED" };
237
+ }
238
+ if (input.type === "PERCENTAGE") {
239
+ return { ...input, usage_limit_per_cart_type: "ONLY_ONCE" };
240
+ }
241
+ }
242
+ }
243
+ return input;
244
+ };
245
+ exports.PosCreateDiscountDetailsInputValidator = zod_1.z.preprocess(posCreatePriceRulePreprocessor, PosCreateDiscountDetailsBaseSchema.superRefine(posCreatePriceRuleSuperRefine));
246
+ exports.posDefaultDiscountPriceRuleFields = [
247
+ "id",
248
+ "title",
249
+ "description",
250
+ "type",
251
+ "starts_at",
252
+ "ends_at",
253
+ "status",
254
+ "applies_on",
255
+ "min_order_value",
256
+ "min_order_qty",
257
+ "max_discount",
258
+ "usage_limit_per_customer_type",
259
+ "usage_limit_per_customer_specific",
260
+ "usage_limit",
261
+ "usage_limit_specific",
262
+ "usage_limit_per_cart_type",
263
+ "usage_limit_per_cart_specific",
264
+ "get_percent",
265
+ "get_flat_discount",
266
+ "visibility",
267
+ "only_for_new_customer",
268
+ "auto_apply",
269
+ "applicable_on_bundle",
270
+ "buy_x",
271
+ "get_y",
272
+ "at_y",
273
+ "created_at",
274
+ "updated_at",
275
+ "code_count",
276
+ "prefix",
277
+ "discount_code",
278
+ ];
279
+ exports.PosListDiscountPriceRulesDirectFields = (0, common_1.applyAndAndOrOperators)(zod_1.z.object({
280
+ id: (0, validators_1.createOperatorMap)().optional(),
281
+ title: (0, validators_1.createOperatorMap)().optional(),
282
+ description: (0, validators_1.createOperatorMap)().optional(),
283
+ type: (0, validators_1.createOperatorMap)().optional(),
284
+ starts_at: (0, validators_1.createOperatorMap)().optional(),
285
+ ends_at: (0, validators_1.createOperatorMap)().optional(),
286
+ status: (0, validators_1.createOperatorMap)().optional(),
287
+ applies_on: (0, validators_1.createOperatorMap)().optional(),
288
+ min_order_value: (0, validators_1.createOperatorMap)().optional(),
289
+ min_order_qty: (0, validators_1.createOperatorMap)().optional(),
290
+ max_discount: (0, validators_1.createOperatorMap)().optional(),
291
+ usage_limit_per_customer_type: (0, validators_1.createOperatorMap)().optional(),
292
+ usage_limit_per_customer_specific: (0, validators_1.createOperatorMap)().optional(),
293
+ usage_limit: (0, validators_1.createOperatorMap)().optional(),
294
+ usage_limit_specific: (0, validators_1.createOperatorMap)().optional(),
295
+ usage_limit_per_cart_type: (0, validators_1.createOperatorMap)().optional(),
296
+ usage_limit_per_cart_specific: (0, validators_1.createOperatorMap)().optional(),
297
+ get_percent: (0, validators_1.createOperatorMap)().optional(),
298
+ get_flat_discount: (0, validators_1.createOperatorMap)().optional(),
299
+ visibility: (0, validators_1.createOperatorMap)().optional(),
300
+ only_for_new_customer: (0, validators_1.createOperatorMap)().optional(),
301
+ auto_apply: (0, validators_1.createOperatorMap)().optional(),
302
+ applicable_on_bundle: (0, validators_1.createOperatorMap)().optional(),
303
+ buy_x: (0, validators_1.createOperatorMap)().optional(),
304
+ get_y: (0, validators_1.createOperatorMap)().optional(),
305
+ at_y: (0, validators_1.createOperatorMap)().optional(),
306
+ prefix: (0, validators_1.createOperatorMap)().optional(),
307
+ code_count: (0, validators_1.createOperatorMap)().optional(),
308
+ created_at: (0, validators_1.createOperatorMap)().optional(),
309
+ updated_at: (0, validators_1.createOperatorMap)().optional(),
310
+ }));
311
+ exports.PosListDiscountPriceRulesParamsFields = zod_1.z.object({
312
+ q: zod_1.z.string().optional(),
313
+ title: zod_1.z.string().optional(),
314
+ id: zod_1.z.string().optional(),
315
+ });
316
+ exports.PosListDiscountPriceRulesParams = (0, validators_1.createFindParams)({
317
+ limit: 10,
318
+ offset: 0,
319
+ order: "-created_at",
320
+ })
321
+ .merge(exports.PosListDiscountPriceRulesDirectFields)
322
+ .merge(exports.PosListDiscountPriceRulesParamsFields);
323
+ exports.PosGetDiscountPriceRulesParams = (0, validators_1.createFindParams)({
324
+ offset: 0,
325
+ limit: 50,
326
+ });
327
+ exports.PosApplyDiscountInputValidator = zod_1.z.object({
328
+ code: zod_1.z.string(),
329
+ cart_id: zod_1.z.string(),
330
+ customerId: zod_1.z.string().optional(),
331
+ });
332
+ exports.PosRemoveDiscountInputValidator = zod_1.z.object({
333
+ cart_id: zod_1.z.string(),
334
+ code: zod_1.z.string().optional(),
335
+ });
336
+ exports.PosAutoApplyDiscountInputValidator = zod_1.z.object({
337
+ cart_id: zod_1.z.string(),
338
+ });
339
+ exports.PosApplyFreebieInputValidator = zod_1.z.object({
340
+ cart_id: zod_1.z.string(),
341
+ });
342
+ // Store discount (manual staff discount) for POS
343
+ exports.PosApplyStoreDiscountInputValidator = zod_1.z.object({
344
+ cart_id: zod_1.z.string(),
345
+ amount: zod_1.z.number().positive(),
346
+ });
347
+ exports.PosRemoveStoreDiscountInputValidator = zod_1.z.object({
348
+ cart_id: zod_1.z.string(),
349
+ });
350
+ // Verify store discount (OTP-based approval) for POS
351
+ exports.PosVerifyStoreDiscountInputValidator = zod_1.z.object({
352
+ cart_id: zod_1.z.string(),
353
+ amount: zod_1.z.number().positive(),
354
+ otp: zod_1.z.string().optional(),
355
+ });
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvcG9zL2Rpc2NvdW50cy92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGdGQUE2RjtBQUM3RixzRUFHK0M7QUFDL0MsNkJBQXdCO0FBRXhCLDRDQUE0QztBQUM1QyxpRUFPMEM7QUFFMUMsc0VBQXNFO0FBRXRFLDJDQUEyQztBQUMzQyxNQUFNLGtDQUFrQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDbEQsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbEMsSUFBSSxFQUFFLHlCQUFZO0lBQ2xCLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRXpDLFVBQVUsRUFBRSw4QkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQzlDLDhCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQy9CO0lBQ0QscUJBQXFCLEVBQUUsT0FBQyxDQUFDLEtBQUssQ0FBQyx3Q0FBMkIsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN0RSxlQUFlLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxpQkFBaUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3hDLGFBQWEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6QyxVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDNUMsV0FBVyxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLFlBQVksRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN4QyxRQUFRLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDcEMsYUFBYSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3pDLFdBQVcsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN2QyxjQUFjLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDMUMsaUJBQWlCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUV4QyxhQUFhLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxZQUFZLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyw2QkFBNkIsRUFDM0IsOENBQWlDLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUNsRCw4Q0FBaUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUNuRDtJQUNILGlDQUFpQyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFFeEQsV0FBVyxFQUFFLG1DQUFzQixDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FDcEQsbUNBQXNCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDeEM7SUFDRCxvQkFBb0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRTNDLHlCQUF5QixFQUFFLDBDQUE2QixDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FDekUsMENBQTZCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDL0M7SUFDRCw2QkFBNkIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRXBELFdBQVcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2xDLGlCQUFpQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFFeEMsVUFBVSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3RDLHFCQUFxQixFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ2pELFVBQVUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN0QyxvQkFBb0IsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUVoRCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUUzQiw4QkFBOEIsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUM5RCx1QkFBdUIsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN2RCxxQkFBcUIsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNyRCxpQkFBaUIsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNqRCxzQkFBc0IsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN0RCx1QkFBdUIsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUV2RCxJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtDQUNqQixDQUFDLENBQUM7QUFFSCxNQUFNLDZCQUE2QixHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQ2xELElBQ0UsSUFBSSxDQUFDLDZCQUE2QjtRQUNoQyw4Q0FBaUMsQ0FBQyxNQUFNLENBQUMsUUFBUTtRQUNuRCxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsSUFBSSxJQUFJO1lBQzdDLElBQUksQ0FBQyxpQ0FBaUMsSUFBSSxTQUFTLENBQUMsRUFDdEQsQ0FBQztRQUNELEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDWCxJQUFJLEVBQUUsT0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzNCLE9BQU8sRUFDTCw4RkFBOEY7WUFDaEcsSUFBSSxFQUFFLENBQUMsbUNBQW1DLENBQUM7U0FDNUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQ0UsSUFBSSxDQUFDLFdBQVcsS0FBSyxtQ0FBc0IsQ0FBQyxNQUFNLENBQUMsUUFBUTtRQUMzRCxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJO1lBQ2hDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLENBQUMsRUFDekMsQ0FBQztRQUNELEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDWCxJQUFJLEVBQUUsT0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzNCLE9BQU8sRUFBRSwrREFBK0Q7WUFDeEUsSUFBSSxFQUFFLENBQUMsc0JBQXNCLENBQUM7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQ0UsSUFBSSxDQUFDLHlCQUF5QjtRQUM1QiwwQ0FBNkIsQ0FBQyxNQUFNLENBQUMsUUFBUTtRQUMvQyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxJQUFJO1lBQ3pDLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxTQUFTLENBQUMsRUFDbEQsQ0FBQztRQUNELEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDWCxJQUFJLEVBQUUsT0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzNCLE9BQU8sRUFDTCxzRkFBc0Y7WUFDeEYsSUFBSSxFQUFFLENBQUMsK0JBQStCLENBQUM7U0FDeEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQ0UsSUFBSSxDQUFDLElBQUksS0FBSyx5QkFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1FBQ3ZDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksU0FBUyxDQUFDLEVBQ3ZFLENBQUM7UUFDRCxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ1gsSUFBSSxFQUFFLE9BQUMsQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUMzQixPQUFPLEVBQUUsdURBQXVEO1lBQ2hFLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDO1NBQzVCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUsseUJBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakQsSUFDRSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUk7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUNwQixDQUFDO1lBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDWCxJQUFJLEVBQUUsT0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO2dCQUMzQixPQUFPLEVBQ0wsZ0ZBQWdGO2dCQUNsRixJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUM7YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUNFLElBQUksQ0FBQyxPQUFPO1FBQ1osSUFBSSxDQUFDLFNBQVM7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUNsRCxDQUFDO1FBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNYLElBQUksRUFBRSxPQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDM0IsT0FBTyxFQUFFLHNDQUFzQztZQUMvQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUM7U0FDbEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDbkMsSUFDRTtZQUNFLHlCQUFZLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDekIseUJBQVksQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUN4Qix5QkFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1NBQ3pCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFXLENBQUMsRUFDNUIsQ0FBQztZQUNELHNFQUFzRTtRQUN4RSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLHlCQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hELElBQUksSUFBSSxDQUFDLHlCQUF5QixLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNuRCxHQUFHLENBQUMsUUFBUSxDQUFDO29CQUNYLElBQUksRUFBRSxPQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07b0JBQzNCLE9BQU8sRUFDTCxvRkFBb0Y7b0JBQ3RGLElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDO2lCQUNwQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUNYLElBQUksRUFBRSxPQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07Z0JBQzNCLE9BQU8sRUFBRSw2REFBNkQsSUFBSSxDQUFDLElBQUksR0FBRztnQkFDbEYsSUFBSSxFQUFFLENBQUMsMkJBQTJCLENBQUM7YUFDcEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUsseUJBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0MsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdDLEdBQUcsQ0FBQyxRQUFRLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLE9BQUMsQ0FBQyxZQUFZLENBQUMsTUFBTTtnQkFDM0IsT0FBTyxFQUFFLGlEQUFpRDtnQkFDMUQsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLHlCQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUNYLElBQUksRUFBRSxPQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07Z0JBQzNCLE9BQU8sRUFBRSxnREFBZ0Q7Z0JBQ3pELElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQ0UsSUFBSSxDQUFDLDhCQUE4QixFQUFFLE1BQU07UUFDM0MsSUFBSSxDQUFDLHVCQUF1QixFQUFFLE1BQU0sRUFDcEMsQ0FBQztRQUNELEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDWCxJQUFJLEVBQUUsT0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQzNCLE9BQU8sRUFDTCxxRkFBcUY7WUFDdkYsSUFBSSxFQUFFLENBQUMsZ0NBQWdDLENBQUM7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM3RCxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ1gsSUFBSSxFQUFFLE9BQUMsQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUMzQixPQUFPLEVBQUUsb0NBQW9DO1lBQzdDLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekQsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUNYLElBQUksRUFBRSxPQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07WUFDM0IsT0FBTyxFQUFFLGtDQUFrQztZQUMzQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLENBQUM7U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2RCxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ1gsSUFBSSxFQUFFLE9BQUMsQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUMzQixPQUFPLEVBQUUsaUNBQWlDO1lBQzFDLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLHlCQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVDLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBd0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUMzQyxHQUFHLENBQUMsUUFBUSxDQUFDO29CQUNYLElBQUksRUFBRSxPQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07b0JBQzNCLE9BQU8sRUFBRSxHQUFHLEdBQUcsMkNBQTJDO29CQUMxRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUM7aUJBQ1osQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyx5QkFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNqRCxDQUFDLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDOUQsSUFBSSxJQUFJLENBQUMsR0FBd0IsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUMzQyxHQUFHLENBQUMsUUFBUSxDQUFDO29CQUNYLElBQUksRUFBRSxPQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07b0JBQzNCLE9BQU8sRUFBRSxHQUFHLEdBQUcsZ0RBQWdEO29CQUMvRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUM7aUJBQ1osQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyx5QkFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMzRCxJQUFJLElBQUksQ0FBQyxHQUF3QixDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzNDLEdBQUcsQ0FBQyxRQUFRLENBQUM7b0JBQ1gsSUFBSSxFQUFFLE9BQUMsQ0FBQyxZQUFZLENBQUMsTUFBTTtvQkFDM0IsT0FBTyxFQUFFLEdBQUcsR0FBRywwQ0FBMEM7b0JBQ3pELElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQztpQkFDWixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLHlCQUFZLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNDLENBQUMsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVELElBQUksSUFBSSxDQUFDLEdBQXdCLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDM0MsR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDWCxJQUFJLEVBQUUsT0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO29CQUMzQixPQUFPLEVBQUUsR0FBRyxHQUFHLDBDQUEwQztvQkFDekQsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDO2lCQUNaLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUMvQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNuRSxJQUNFLENBQUMsQ0FBQywyQkFBMkIsSUFBSSxLQUFLLENBQUM7WUFDdEMsS0FBYSxDQUFDLHlCQUF5QixLQUFLLFNBQVMsRUFDdEQsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBRSxLQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDNUQsT0FBTyxFQUFFLEdBQUksS0FBYSxFQUFFLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3ZFLENBQUM7WUFDRCxJQUFLLEtBQWEsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQ3pDLE9BQU8sRUFBRSxHQUFJLEtBQWEsRUFBRSx5QkFBeUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUN2RSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVXLFFBQUEsc0NBQXNDLEdBQUcsT0FBQyxDQUFDLFVBQVUsQ0FDaEUsOEJBQThCLEVBQzlCLGtDQUFrQyxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUM5RSxDQUFDO0FBTVcsUUFBQSxpQ0FBaUMsR0FBRztJQUMvQyxJQUFJO0lBQ0osT0FBTztJQUNQLGFBQWE7SUFDYixNQUFNO0lBQ04sV0FBVztJQUNYLFNBQVM7SUFDVCxRQUFRO0lBQ1IsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsY0FBYztJQUNkLCtCQUErQjtJQUMvQixtQ0FBbUM7SUFDbkMsYUFBYTtJQUNiLHNCQUFzQjtJQUN0QiwyQkFBMkI7SUFDM0IsK0JBQStCO0lBQy9CLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLHVCQUF1QjtJQUN2QixZQUFZO0lBQ1osc0JBQXNCO0lBQ3RCLE9BQU87SUFDUCxPQUFPO0lBQ1AsTUFBTTtJQUNOLFlBQVk7SUFDWixZQUFZO0lBQ1osWUFBWTtJQUNaLFFBQVE7SUFDUixlQUFlO0NBQ2hCLENBQUM7QUFFVyxRQUFBLHFDQUFxQyxHQUFHLElBQUEsK0JBQXNCLEVBQ3pFLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDUCxFQUFFLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUNsQyxLQUFLLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxXQUFXLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQyxJQUFJLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxTQUFTLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUN6QyxPQUFPLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUN2QyxNQUFNLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxVQUFVLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUMxQyxlQUFlLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUMvQyxhQUFhLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxZQUFZLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUM1Qyw2QkFBNkIsRUFBRSxJQUFBLDhCQUFpQixHQUFFLENBQUMsUUFBUSxFQUFFO0lBQzdELGlDQUFpQyxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakUsV0FBVyxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0Msb0JBQW9CLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUNwRCx5QkFBeUIsRUFBRSxJQUFBLDhCQUFpQixHQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3pELDZCQUE2QixFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDN0QsV0FBVyxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0MsaUJBQWlCLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUNqRCxVQUFVLEVBQUUsSUFBQSw4QkFBaUIsR0FBRSxDQUFDLFFBQVEsRUFBRTtJQUMxQyxxQkFBcUIsRUFBRSxJQUFBLDhCQUFpQixHQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JELFVBQVUsRUFBRSxJQUFBLDhCQUFpQixHQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFDLG9CQUFvQixFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEQsS0FBSyxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsS0FBSyxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsSUFBSSxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsTUFBTSxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsVUFBVSxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsVUFBVSxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsVUFBVSxFQUFFLElBQUEsOEJBQWlCLEdBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDM0MsQ0FBQyxDQUNILENBQUM7QUFFVyxRQUFBLHFDQUFxQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDNUQsQ0FBQyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDeEIsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUIsRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDMUIsQ0FBQyxDQUFDO0FBRVUsUUFBQSwrQkFBK0IsR0FBRyxJQUFBLDZCQUFnQixFQUFDO0lBQzlELEtBQUssRUFBRSxFQUFFO0lBQ1QsTUFBTSxFQUFFLENBQUM7SUFDVCxLQUFLLEVBQUUsYUFBYTtDQUNyQixDQUFDO0tBQ0MsS0FBSyxDQUFDLDZDQUFxQyxDQUFDO0tBQzVDLEtBQUssQ0FBQyw2Q0FBcUMsQ0FBQyxDQUFDO0FBTW5DLFFBQUEsOEJBQThCLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQztJQUM3RCxNQUFNLEVBQUUsQ0FBQztJQUNULEtBQUssRUFBRSxFQUFFO0NBQ1YsQ0FBQyxDQUFDO0FBTVUsUUFBQSw4QkFBOEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3JELElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2hCLE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ25CLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2xDLENBQUMsQ0FBQztBQU1VLFFBQUEsK0JBQStCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM1QixDQUFDLENBQUM7QUFNVSxRQUFBLGtDQUFrQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDekQsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDcEIsQ0FBQyxDQUFDO0FBTVUsUUFBQSw2QkFBNkIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3BELE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0NBQ3BCLENBQUMsQ0FBQztBQU1ILGlEQUFpRDtBQUNwQyxRQUFBLG1DQUFtQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDMUQsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbkIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDOUIsQ0FBQyxDQUFDO0FBTVUsUUFBQSxvQ0FBb0MsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNELE9BQU8sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0NBQ3BCLENBQUMsQ0FBQztBQU1ILHFEQUFxRDtBQUN4QyxRQUFBLG9DQUFvQyxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDM0QsT0FBTyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDbkIsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDN0IsR0FBRyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDM0IsQ0FBQyxDQUFDIn0=