optimizely-opal.opal-tools-sdk 0.1.37.dev0__tar.gz → 0.1.40.dev0__tar.gz
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.
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/PKG-INFO +1 -1
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/opal_tools_sdk/proteus.py +171 -6
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/optimizely_opal.opal_tools_sdk.egg-info/PKG-INFO +1 -1
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/pyproject.toml +1 -1
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/setup.py +1 -1
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/README.md +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/opal_tools_sdk/__init__.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/opal_tools_sdk/_registry.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/opal_tools_sdk/auth.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/opal_tools_sdk/decorators.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/opal_tools_sdk/logging.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/opal_tools_sdk/models.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/opal_tools_sdk/service.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/opal_tools_sdk/ui.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/optimizely_opal.opal_tools_sdk.egg-info/SOURCES.txt +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/optimizely_opal.opal_tools_sdk.egg-info/dependency_links.txt +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/optimizely_opal.opal_tools_sdk.egg-info/requires.txt +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/optimizely_opal.opal_tools_sdk.egg-info/top_level.txt +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/setup.cfg +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/tests/test_integration.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/tests/test_nested_schema.py +0 -0
- {optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/tests/test_proteus.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# generated by datamodel-codegen:
|
|
2
2
|
# filename: proteus-document-spec.json
|
|
3
|
-
# timestamp: 2026-06-
|
|
3
|
+
# timestamp: 2026-06-10T15:54:02+00:00
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
@@ -2209,6 +2209,75 @@ class ProteusMap(BaseModel):
|
|
|
2209
2209
|
)
|
|
2210
2210
|
|
|
2211
2211
|
|
|
2212
|
+
class ProteusMarkdown(BaseModel):
|
|
2213
|
+
model_config = ConfigDict(
|
|
2214
|
+
extra="forbid",
|
|
2215
|
+
)
|
|
2216
|
+
field_type: Literal["Markdown"] = Field(default="Markdown", alias="$type")
|
|
2217
|
+
alignItems: SprinklePropAlignItems | None = None
|
|
2218
|
+
alignSelf: SprinklePropAlignSelf | None = None
|
|
2219
|
+
animation: SprinklePropAnimation | None = None
|
|
2220
|
+
backgroundImage: SprinklePropBackgroundImage | None = None
|
|
2221
|
+
bg: SprinklePropBg | None = None
|
|
2222
|
+
border: SprinklePropBorder | None = None
|
|
2223
|
+
borderB: SprinklePropBorderB | None = None
|
|
2224
|
+
borderColor: SprinklePropBorderColor | None = None
|
|
2225
|
+
borderL: SprinklePropBorderL | None = None
|
|
2226
|
+
borderR: SprinklePropBorderR | None = None
|
|
2227
|
+
borderT: SprinklePropBorderT | None = None
|
|
2228
|
+
children: str | ProteusExpression | None = Field(
|
|
2229
|
+
default=None,
|
|
2230
|
+
description="Markdown source string to render (e.g. headings, paragraphs, lists, links, emphasis, code). Can be a literal string or a ProteusExpression that resolves to a string.",
|
|
2231
|
+
)
|
|
2232
|
+
color: SprinklePropColor | None = None
|
|
2233
|
+
cursor: SprinklePropCursor | None = None
|
|
2234
|
+
display: SprinklePropDisplay | None = None
|
|
2235
|
+
flex: SprinklePropFlex | None = None
|
|
2236
|
+
flexDirection: SprinklePropFlexDirection | None = None
|
|
2237
|
+
flexWrap: SprinklePropFlexWrap | None = None
|
|
2238
|
+
fontFamily: SprinklePropFontFamily | None = None
|
|
2239
|
+
fontSize: SprinklePropFontSize | None = None
|
|
2240
|
+
fontWeight: SprinklePropFontWeight | None = None
|
|
2241
|
+
gap: SprinklePropGap | None = None
|
|
2242
|
+
gridAutoRows: SprinklePropGridAutoRows | None = None
|
|
2243
|
+
gridColumn: SprinklePropGridColumn | None = None
|
|
2244
|
+
gridTemplateColumns: SprinklePropGridTemplateColumns | None = None
|
|
2245
|
+
h: SprinklePropH | None = None
|
|
2246
|
+
justifyContent: SprinklePropJustifyContent | None = None
|
|
2247
|
+
justifyItems: SprinklePropJustifyItems | None = None
|
|
2248
|
+
m: SprinklePropM | None = None
|
|
2249
|
+
maxH: SprinklePropMaxH | None = None
|
|
2250
|
+
maxW: SprinklePropMaxW | None = None
|
|
2251
|
+
mb: SprinklePropMb | None = None
|
|
2252
|
+
ml: SprinklePropMl | None = None
|
|
2253
|
+
mr: SprinklePropMr | None = None
|
|
2254
|
+
mt: SprinklePropMt | None = None
|
|
2255
|
+
mx: SprinklePropMx | None = None
|
|
2256
|
+
my: SprinklePropMy | None = None
|
|
2257
|
+
objectFit: SprinklePropObjectFit | None = None
|
|
2258
|
+
overflow: SprinklePropOverflow | None = None
|
|
2259
|
+
overflowX: SprinklePropOverflowX | None = None
|
|
2260
|
+
overflowY: SprinklePropOverflowY | None = None
|
|
2261
|
+
p: SprinklePropP | None = None
|
|
2262
|
+
pb: SprinklePropPb | None = None
|
|
2263
|
+
pl: SprinklePropPl | None = None
|
|
2264
|
+
placeItems: SprinklePropPlaceItems | None = None
|
|
2265
|
+
pointerEvents: SprinklePropPointerEvents | None = None
|
|
2266
|
+
pr: SprinklePropPr | None = None
|
|
2267
|
+
pt: SprinklePropPt | None = None
|
|
2268
|
+
px: SprinklePropPx | None = None
|
|
2269
|
+
py: SprinklePropPy | None = None
|
|
2270
|
+
rounded: SprinklePropRounded | None = None
|
|
2271
|
+
shadow: SprinklePropShadow | None = None
|
|
2272
|
+
size: SprinklePropSize | None = None
|
|
2273
|
+
textAlign: SprinklePropTextAlign | None = None
|
|
2274
|
+
textTransform: SprinklePropTextTransform | None = None
|
|
2275
|
+
transition: SprinklePropTransition | None = None
|
|
2276
|
+
w: SprinklePropW | None = None
|
|
2277
|
+
whiteSpace: SprinklePropWhiteSpace | None = None
|
|
2278
|
+
z: SprinklePropZ | None = None
|
|
2279
|
+
|
|
2280
|
+
|
|
2212
2281
|
class ProteusPillMenu(BaseModel):
|
|
2213
2282
|
model_config = ConfigDict(
|
|
2214
2283
|
extra="forbid",
|
|
@@ -2237,6 +2306,10 @@ class ProteusQuestion(BaseModel):
|
|
|
2237
2306
|
extra="forbid",
|
|
2238
2307
|
)
|
|
2239
2308
|
field_type: Literal["Question"] = Field(default="Question", alias="$type")
|
|
2309
|
+
interaction: str | ProteusExpression | None = Field(
|
|
2310
|
+
default=None,
|
|
2311
|
+
description="Name of the interaction to fire when the user finishes or cancels. When set, submit and cancel send a structured `{ questions, answers }` payload via the named interaction so a calling tool can read the answers programmatically. When omitted, a human-readable transcript is sent via the `message` event instead.",
|
|
2312
|
+
)
|
|
2240
2313
|
questions: ProteusExpression = Field(..., description="Array of questions data")
|
|
2241
2314
|
|
|
2242
2315
|
|
|
@@ -2316,6 +2389,81 @@ class ProteusRange(BaseModel):
|
|
|
2316
2389
|
z: SprinklePropZ | None = None
|
|
2317
2390
|
|
|
2318
2391
|
|
|
2392
|
+
class ProteusRichTextEditor(BaseModel):
|
|
2393
|
+
model_config = ConfigDict(
|
|
2394
|
+
extra="forbid",
|
|
2395
|
+
)
|
|
2396
|
+
field_type: Literal["RichTextEditor"] = Field(default="RichTextEditor", alias="$type")
|
|
2397
|
+
alignItems: SprinklePropAlignItems | None = None
|
|
2398
|
+
alignSelf: SprinklePropAlignSelf | None = None
|
|
2399
|
+
animation: SprinklePropAnimation | None = None
|
|
2400
|
+
backgroundImage: SprinklePropBackgroundImage | None = None
|
|
2401
|
+
bg: SprinklePropBg | None = None
|
|
2402
|
+
border: SprinklePropBorder | None = None
|
|
2403
|
+
borderB: SprinklePropBorderB | None = None
|
|
2404
|
+
borderColor: SprinklePropBorderColor | None = None
|
|
2405
|
+
borderL: SprinklePropBorderL | None = None
|
|
2406
|
+
borderR: SprinklePropBorderR | None = None
|
|
2407
|
+
borderT: SprinklePropBorderT | None = None
|
|
2408
|
+
color: SprinklePropColor | None = None
|
|
2409
|
+
cursor: SprinklePropCursor | None = None
|
|
2410
|
+
display: SprinklePropDisplay | None = None
|
|
2411
|
+
flex: SprinklePropFlex | None = None
|
|
2412
|
+
flexDirection: SprinklePropFlexDirection | None = None
|
|
2413
|
+
flexWrap: SprinklePropFlexWrap | None = None
|
|
2414
|
+
fontFamily: SprinklePropFontFamily | None = None
|
|
2415
|
+
fontSize: SprinklePropFontSize | None = None
|
|
2416
|
+
fontWeight: SprinklePropFontWeight | None = None
|
|
2417
|
+
gap: SprinklePropGap | None = None
|
|
2418
|
+
gridAutoRows: SprinklePropGridAutoRows | None = None
|
|
2419
|
+
gridColumn: SprinklePropGridColumn | None = None
|
|
2420
|
+
gridTemplateColumns: SprinklePropGridTemplateColumns | None = None
|
|
2421
|
+
h: SprinklePropH | None = None
|
|
2422
|
+
justifyContent: SprinklePropJustifyContent | None = None
|
|
2423
|
+
justifyItems: SprinklePropJustifyItems | None = None
|
|
2424
|
+
m: SprinklePropM | None = None
|
|
2425
|
+
maxH: SprinklePropMaxH | None = None
|
|
2426
|
+
maxW: SprinklePropMaxW | None = None
|
|
2427
|
+
mb: SprinklePropMb | None = None
|
|
2428
|
+
ml: SprinklePropMl | None = None
|
|
2429
|
+
mr: SprinklePropMr | None = None
|
|
2430
|
+
mt: SprinklePropMt | None = None
|
|
2431
|
+
mx: SprinklePropMx | None = None
|
|
2432
|
+
my: SprinklePropMy | None = None
|
|
2433
|
+
name: str | ProteusExpression | None = Field(
|
|
2434
|
+
default=None,
|
|
2435
|
+
description="Name of the form control element. Used by form-data integrations.",
|
|
2436
|
+
)
|
|
2437
|
+
objectFit: SprinklePropObjectFit | None = None
|
|
2438
|
+
overflow: SprinklePropOverflow | None = None
|
|
2439
|
+
overflowX: SprinklePropOverflowX | None = None
|
|
2440
|
+
overflowY: SprinklePropOverflowY | None = None
|
|
2441
|
+
p: SprinklePropP | None = None
|
|
2442
|
+
pb: SprinklePropPb | None = None
|
|
2443
|
+
pl: SprinklePropPl | None = None
|
|
2444
|
+
placeholder: str | ProteusExpression | None = Field(
|
|
2445
|
+
default=None, description="Placeholder text shown when the editor is empty."
|
|
2446
|
+
)
|
|
2447
|
+
placeItems: SprinklePropPlaceItems | None = None
|
|
2448
|
+
pointerEvents: SprinklePropPointerEvents | None = None
|
|
2449
|
+
pr: SprinklePropPr | None = None
|
|
2450
|
+
pt: SprinklePropPt | None = None
|
|
2451
|
+
px: SprinklePropPx | None = None
|
|
2452
|
+
py: SprinklePropPy | None = None
|
|
2453
|
+
readOnly: bool | ProteusExpression | None = Field(
|
|
2454
|
+
default=None, description="Whether the editor is read-only."
|
|
2455
|
+
)
|
|
2456
|
+
rounded: SprinklePropRounded | None = None
|
|
2457
|
+
shadow: SprinklePropShadow | None = None
|
|
2458
|
+
size: SprinklePropSize | None = None
|
|
2459
|
+
textAlign: SprinklePropTextAlign | None = None
|
|
2460
|
+
textTransform: SprinklePropTextTransform | None = None
|
|
2461
|
+
transition: SprinklePropTransition | None = None
|
|
2462
|
+
w: SprinklePropW | None = None
|
|
2463
|
+
whiteSpace: SprinklePropWhiteSpace | None = None
|
|
2464
|
+
z: SprinklePropZ | None = None
|
|
2465
|
+
|
|
2466
|
+
|
|
2319
2467
|
class ProteusSelect(BaseModel):
|
|
2320
2468
|
model_config = ConfigDict(
|
|
2321
2469
|
extra="forbid",
|
|
@@ -2943,9 +3091,11 @@ class ProteusElement(
|
|
|
2943
3091
|
| ProteusLink
|
|
2944
3092
|
| ProteusMap
|
|
2945
3093
|
| ProteusMapIndex
|
|
3094
|
+
| ProteusMarkdown
|
|
2946
3095
|
| ProteusPillMenu
|
|
2947
3096
|
| ProteusQuestion
|
|
2948
3097
|
| ProteusRange
|
|
3098
|
+
| ProteusRichTextEditor
|
|
2949
3099
|
| ProteusSelect
|
|
2950
3100
|
| ProteusSelectContent
|
|
2951
3101
|
| ProteusSelectTrigger
|
|
@@ -2990,9 +3140,11 @@ class ProteusElement(
|
|
|
2990
3140
|
| ProteusLink
|
|
2991
3141
|
| ProteusMap
|
|
2992
3142
|
| ProteusMapIndex
|
|
3143
|
+
| ProteusMarkdown
|
|
2993
3144
|
| ProteusPillMenu
|
|
2994
3145
|
| ProteusQuestion
|
|
2995
3146
|
| ProteusRange
|
|
3147
|
+
| ProteusRichTextEditor
|
|
2996
3148
|
| ProteusSelect
|
|
2997
3149
|
| ProteusSelectContent
|
|
2998
3150
|
| ProteusSelectTrigger
|
|
@@ -3365,7 +3517,10 @@ class SprinklePropFlex(
|
|
|
3365
3517
|
):
|
|
3366
3518
|
root: (
|
|
3367
3519
|
Literal["initial"] | Literal["none"] | Literal["auto"] | Literal["1"] | ProteusExpression
|
|
3368
|
-
) = Field(
|
|
3520
|
+
) = Field(
|
|
3521
|
+
...,
|
|
3522
|
+
description="Set the element's `flex` CSS property. `1` grows to fill available\nspace; `auto` grows and shrinks to fit content; `initial` shrinks but\ndoes not grow; `none` neither grows nor shrinks (use this instead of\n`flex-shrink: 0`).",
|
|
3523
|
+
)
|
|
3369
3524
|
|
|
3370
3525
|
|
|
3371
3526
|
class SprinklePropFlexDirection(
|
|
@@ -3491,7 +3646,8 @@ class SprinklePropGap(
|
|
|
3491
3646
|
|
|
3492
3647
|
class SprinklePropGridAutoRows(RootModel[Literal["fr"] | ProteusExpression]):
|
|
3493
3648
|
root: Literal["fr"] | ProteusExpression = Field(
|
|
3494
|
-
...,
|
|
3649
|
+
...,
|
|
3650
|
+
description="Set the element's `grid-auto-rows` CSS property. The only value `fr`\nsizes implicit rows to `minmax(0, 1fr)` (equal-height rows that can\nshrink below their content).",
|
|
3495
3651
|
)
|
|
3496
3652
|
|
|
3497
3653
|
|
|
@@ -3499,7 +3655,8 @@ class SprinklePropGridColumn(
|
|
|
3499
3655
|
RootModel[Literal["2"] | Literal["4"] | Literal["1"] | Literal["3"] | ProteusExpression]
|
|
3500
3656
|
):
|
|
3501
3657
|
root: Literal["2"] | Literal["4"] | Literal["1"] | Literal["3"] | ProteusExpression = Field(
|
|
3502
|
-
...,
|
|
3658
|
+
...,
|
|
3659
|
+
description="Set how many columns the element spans in a grid (`grid-column`). The\nvalue is the span count, e.g. `2` spans 2 columns — NOT the column it\nstarts at.",
|
|
3503
3660
|
)
|
|
3504
3661
|
|
|
3505
3662
|
|
|
@@ -3507,7 +3664,8 @@ class SprinklePropGridTemplateColumns(
|
|
|
3507
3664
|
RootModel[Literal["2"] | Literal["4"] | Literal["1"] | Literal["3"] | ProteusExpression]
|
|
3508
3665
|
):
|
|
3509
3666
|
root: Literal["2"] | Literal["4"] | Literal["1"] | Literal["3"] | ProteusExpression = Field(
|
|
3510
|
-
...,
|
|
3667
|
+
...,
|
|
3668
|
+
description='Control number of columns in a grid layout (`grid-template-columns`).\nThe value is the number of equal columns, e.g. `2` creates two equal\ncolumns (`repeat(2, minmax(0, 1fr))`) — use this instead of a raw\n`style={{ gridTemplateColumns: "1fr 1fr" }}`.',
|
|
3511
3669
|
)
|
|
3512
3670
|
|
|
3513
3671
|
|
|
@@ -4508,7 +4666,10 @@ class SprinklePropTransition(
|
|
|
4508
4666
|
| Literal["none"]
|
|
4509
4667
|
| Literal["colors"]
|
|
4510
4668
|
| ProteusExpression
|
|
4511
|
-
) = Field(
|
|
4669
|
+
) = Field(
|
|
4670
|
+
...,
|
|
4671
|
+
description="Control which CSS properties should transition. Each value is a preset:\n`colors` transitions color-related properties (background, border,\ncolor, fill, stroke, text-decoration); `opacity` and `transform`\ntransition just that property; `all` transitions everything; `none`\ndisables transitions.",
|
|
4672
|
+
)
|
|
4512
4673
|
|
|
4513
4674
|
|
|
4514
4675
|
class SprinklePropW(
|
|
@@ -4680,9 +4841,11 @@ ProteusImageCarousel.model_rebuild()
|
|
|
4680
4841
|
ProteusInput.model_rebuild()
|
|
4681
4842
|
ProteusLink.model_rebuild()
|
|
4682
4843
|
ProteusMap.model_rebuild()
|
|
4844
|
+
ProteusMarkdown.model_rebuild()
|
|
4683
4845
|
ProteusPillMenu.model_rebuild()
|
|
4684
4846
|
ProteusQuestion.model_rebuild()
|
|
4685
4847
|
ProteusRange.model_rebuild()
|
|
4848
|
+
ProteusRichTextEditor.model_rebuild()
|
|
4686
4849
|
ProteusSelect.model_rebuild()
|
|
4687
4850
|
ProteusSelectContent.model_rebuild()
|
|
4688
4851
|
ProteusSelectTrigger.model_rebuild()
|
|
@@ -4738,9 +4901,11 @@ class UI:
|
|
|
4738
4901
|
Link = ProteusLink
|
|
4739
4902
|
Map = ProteusMap
|
|
4740
4903
|
MapIndex = ProteusMapIndex
|
|
4904
|
+
Markdown = ProteusMarkdown
|
|
4741
4905
|
PillMenu = ProteusPillMenu
|
|
4742
4906
|
Question = ProteusQuestion
|
|
4743
4907
|
Range = ProteusRange
|
|
4908
|
+
RichTextEditor = ProteusRichTextEditor
|
|
4744
4909
|
Select = ProteusSelect
|
|
4745
4910
|
SelectContent = ProteusSelectContent
|
|
4746
4911
|
SelectTrigger = ProteusSelectTrigger
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "optimizely-opal.opal-tools-sdk"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.40-dev"
|
|
8
8
|
description = "SDK for creating Opal-compatible tools services"
|
|
9
9
|
authors = [{ name = "Optimizely", email = "opal-team@optimizely.com" }]
|
|
10
10
|
readme = "README.md"
|
{optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{optimizely_opal_opal_tools_sdk-0.1.37.dev0 → optimizely_opal_opal_tools_sdk-0.1.40.dev0}/setup.cfg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|