@woosh/meep-engine 2.118.4 → 2.118.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/meep.cjs +520 -479
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +520 -479
- package/package.json +4 -4
- package/src/core/binary/BitSet.d.ts +0 -5
- package/src/core/binary/BitSet.d.ts.map +1 -1
- package/src/core/binary/BitSet.js +2 -10
- package/src/core/binary/base64/Base64.d.ts.map +1 -0
- package/src/core/binary/largest_common_alignment_uint32.d.ts.map +1 -0
- package/src/core/{collection/array/typed → binary}/largest_common_alignment_uint32.js +1 -1
- package/src/core/collection/CuckooFilter.d.ts +34 -8
- package/src/core/collection/CuckooFilter.d.ts.map +1 -1
- package/src/core/collection/CuckooFilter.js +29 -1
- package/src/core/collection/array/typed/array_buffer_copy.d.ts.map +1 -1
- package/src/core/collection/array/typed/array_buffer_copy.js +3 -1
- package/src/core/collection/array/typed/is_array_buffer_equals.js +1 -1
- package/src/core/collection/array/typed/is_typed_array_equals.js +1 -1
- package/src/core/collection/map/HashMap.js +7 -7
- package/src/core/geom/2d/aabb/AABB2.d.ts.map +1 -1
- package/src/core/geom/2d/aabb/AABB2.js +43 -22
- package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.d.ts.map +1 -1
- package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.js +6 -1
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts +3 -5
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.d.ts.map +1 -1
- package/src/core/geom/2d/quad-tree/QuadTreeDatum.js +9 -19
- package/src/core/geom/2d/rectangle_to_aabb.d.ts +8 -0
- package/src/core/geom/2d/rectangle_to_aabb.d.ts.map +1 -0
- package/src/core/geom/2d/rectangle_to_aabb.js +29 -0
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +1 -1
- package/src/core/graph/graph_compute_distance_matrix.d.ts +1 -1
- package/src/core/graph/graph_compute_distance_matrix.d.ts.map +1 -1
- package/src/core/graph/graph_compute_distance_matrix.js +1 -1
- package/src/core/graph/graph_compute_laplacian_matrix.d.ts +1 -1
- package/src/core/graph/graph_compute_laplacian_matrix.d.ts.map +1 -1
- package/src/core/graph/graph_compute_laplacian_matrix.js +1 -1
- package/src/core/graph/layout/CircleLayout.js +2 -2
- package/src/core/graph/layout/box/BoxLayouter.d.ts.map +1 -1
- package/src/core/graph/layout/box/BoxLayouter.js +11 -5
- package/src/core/graph/layout/box/aabb2_force_into_container.d.ts +7 -0
- package/src/core/graph/layout/box/aabb2_force_into_container.d.ts.map +1 -0
- package/src/core/graph/layout/box/aabb2_force_into_container.js +56 -0
- package/src/core/graph/layout/box/applyCentralGravityAABB2.d.ts.map +1 -1
- package/src/core/graph/layout/box/applyCentralGravityAABB2.js +2 -8
- package/src/core/graph/layout/box/forceIntoBox.d.ts +4 -2
- package/src/core/graph/layout/box/forceIntoBox.d.ts.map +1 -1
- package/src/core/graph/layout/box/forceIntoBox.js +5 -31
- package/src/core/graph/layout/box/position_box_next_to_box.d.ts +10 -0
- package/src/core/graph/layout/box/position_box_next_to_box.d.ts.map +1 -0
- package/src/core/graph/layout/box/position_box_next_to_box.js +218 -0
- package/src/core/graph/layout/box/pullBoxTowardsPoint.d.ts.map +1 -1
- package/src/core/graph/layout/box/pullBoxTowardsPoint.js +8 -3
- package/src/core/graph/layout/box/resolveAABB2Overlap.d.ts +2 -2
- package/src/core/graph/layout/box/resolveAABB2Overlap.d.ts.map +1 -1
- package/src/core/graph/layout/box/resolveAABB2Overlap.js +12 -4
- package/src/core/graph/layout/box/resolveBoxOverlapUsingForce.d.ts +1 -0
- package/src/core/graph/layout/box/resolveBoxOverlapUsingForce.d.ts.map +1 -1
- package/src/core/graph/layout/box/resolveBoxOverlapUsingForce.js +1 -0
- package/src/core/math/hash/squirrel3.d.ts +1 -0
- package/src/core/math/hash/squirrel3.d.ts.map +1 -1
- package/src/core/math/hash/squirrel3.js +1 -0
- package/src/core/math/matrix/SquareMatrix.d.ts.map +1 -0
- package/src/core/{graph → math/matrix}/SquareMatrix.js +3 -3
- package/src/core/math/random/seededRandom_MersenneTwister.d.ts +7 -0
- package/src/core/math/random/seededRandom_MersenneTwister.d.ts.map +1 -0
- package/src/core/math/random/{seededRandomMersenneTwister.js → seededRandom_MersenneTwister.js} +4 -2
- package/src/core/math/spline/cubicCurve.d.ts +3 -8
- package/src/core/math/spline/cubicCurve.d.ts.map +1 -1
- package/src/core/math/spline/cubicCurve.js +4 -32
- package/src/core/model/reactive/js/compileReactiveToJS.d.ts.map +1 -1
- package/src/core/model/reactive/js/compileReactiveToJS.js +56 -1
- package/src/core/model/reactive/model/terminal/ReactiveReference.d.ts.map +1 -1
- package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -2
- package/src/core/model/reactive/trigger/ReactiveTrigger.d.ts +2 -2
- package/src/core/model/reactive/trigger/ReactiveTrigger.d.ts.map +1 -1
- package/src/core/model/reactive/trigger/ReactiveTrigger.js +1 -1
- package/src/core/process/BaseProcess.d.ts.map +1 -1
- package/src/core/process/BaseProcess.js +8 -7
- package/src/core/process/SimpleLifecycle.d.ts +5 -0
- package/src/core/process/SimpleLifecycle.d.ts.map +1 -1
- package/src/core/process/SimpleLifecycle.js +8 -0
- package/src/core/process/task/Task.js +1 -1
- package/src/engine/animation/clip/AnimationClip.d.ts.map +1 -1
- package/src/engine/animation/clip/AnimationClip.js +50 -8
- package/src/engine/animation/clip/AnimationClipBinding.js +1 -1
- package/src/engine/animation/clip/AnimationTrack.d.ts +11 -1
- package/src/engine/animation/clip/AnimationTrack.d.ts.map +1 -1
- package/src/engine/animation/clip/AnimationTrack.js +50 -7
- package/src/engine/animation/curve/binding/BoundPlainNumericPropertyWriter.d.ts +8 -0
- package/src/engine/animation/curve/binding/BoundPlainNumericPropertyWriter.d.ts.map +1 -0
- package/src/engine/animation/curve/binding/BoundPlainNumericPropertyWriter.js +16 -0
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +6 -6
- package/src/engine/graphics/texture/sampler/Sampler2D.js +1 -1
- package/src/engine/intelligence/optimization/optimize_cyclic_sequence_pairwise.d.ts +12 -0
- package/src/engine/intelligence/optimization/optimize_cyclic_sequence_pairwise.d.ts.map +1 -0
- package/src/engine/intelligence/optimization/optimize_cyclic_sequence_pairwise.js +90 -0
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.d.ts +3 -3
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.d.ts.map +1 -1
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +6 -6
- package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.d.ts.map +1 -1
- package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.js +35 -31
- package/src/generation/grid/generation/grid/GridTaskAddNodesFixed.d.ts.map +1 -1
- package/src/generation/grid/generation/grid/GridTaskAddNodesFixed.js +8 -11
- package/src/generation/grid/generation/road/RoadConnectionNetwork.d.ts +6 -2
- package/src/generation/grid/generation/road/RoadConnectionNetwork.d.ts.map +1 -1
- package/src/generation/grid/generation/road/RoadConnectionNetwork.js +36 -30
- package/src/generation/placement/action/GridCellAction.js +1 -1
- package/src/generation/theme/AreaTheme.d.ts.map +1 -1
- package/src/generation/theme/AreaTheme.js +0 -1
- package/src/generation/theme/TerrainLayerRule.d.ts.map +1 -1
- package/src/generation/theme/TerrainLayerRule.js +2 -1
- package/src/generation/theme/TerrainLayerRuleAggregator.d.ts +5 -1
- package/src/generation/theme/TerrainLayerRuleAggregator.d.ts.map +1 -1
- package/src/generation/theme/TerrainLayerRuleAggregator.js +7 -2
- package/src/generation/theme/ThemeEngine.d.ts +2 -2
- package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
- package/src/generation/theme/ThemeEngine.js +1 -4
- package/src/generation/theme/cell/CellProcessingRule.d.ts.map +1 -1
- package/src/generation/theme/cell/CellProcessingRule.js +10 -13
- package/src/generation/theme/cell/CellProcessingRuleSet.d.ts.map +1 -1
- package/src/generation/theme/cell/CellProcessingRuleSet.js +6 -7
- package/src/view/SVG.d.ts.map +1 -1
- package/src/view/SVG.js +0 -15
- package/src/view/html_element_to_aabb.d.ts +8 -0
- package/src/view/html_element_to_aabb.d.ts.map +1 -0
- package/src/view/html_element_to_aabb.js +29 -0
- package/src/view/tooltip/TooltipManager.d.ts.map +1 -1
- package/src/view/tooltip/TooltipManager.js +7 -9
- package/src/view/tooltip/TooltipView.d.ts +0 -1
- package/src/view/tooltip/TooltipView.d.ts.map +1 -1
- package/src/view/tooltip/TooltipView.js +10 -280
- package/src/view/tooltip/gml/TooltipParser.d.ts.map +1 -1
- package/src/view/tooltip/gml/TooltipParser.js +1 -13
- package/src/core/binary/Base64.d.ts.map +0 -1
- package/src/core/collection/array/typed/largest_common_alignment_uint32.d.ts.map +0 -1
- package/src/core/graph/SquareMatrix.d.ts.map +0 -1
- package/src/core/math/random/MersenneTwister.d.ts +0 -19
- package/src/core/math/random/MersenneTwister.d.ts.map +0 -1
- package/src/core/math/random/MersenneTwister.js +0 -212
- package/src/core/math/random/seededRandomMersenneTwister.d.ts +0 -7
- package/src/core/math/random/seededRandomMersenneTwister.d.ts.map +0 -1
- package/src/engine/simulation/DormandPrince.d.ts +0 -19
- package/src/engine/simulation/DormandPrince.d.ts.map +0 -1
- package/src/engine/simulation/DormandPrince.js +0 -242
- /package/src/core/binary/{Base64.d.ts → base64/Base64.d.ts} +0 -0
- /package/src/core/binary/{Base64.js → base64/Base64.js} +0 -0
- /package/src/core/{collection/array/typed → binary}/largest_common_alignment_uint32.d.ts +0 -0
- /package/src/core/{graph → math/matrix}/SquareMatrix.d.ts +0 -0
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
import { clamp } from "../../core/math/clamp.js";
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
File odedopri.py
|
|
5
|
-
|
|
6
|
-
Synopsis
|
|
7
|
-
double odedopri(double (*fxy)(double x, double y),
|
|
8
|
-
double x0, double y0, double x1, double tol,
|
|
9
|
-
double hmax, double hmin, int maxiter)
|
|
10
|
-
|
|
11
|
-
Parameters
|
|
12
|
-
fxy Input: derivative function y' = f(x, y)
|
|
13
|
-
y is the dependent variable, x is the independent
|
|
14
|
-
variable
|
|
15
|
-
x0, y0 Input: initial points, x0 <= x <= x1 y(x0) = y0
|
|
16
|
-
x1 Input: final value of x
|
|
17
|
-
tol Input: tolerance
|
|
18
|
-
hmax Input: maximum step size
|
|
19
|
-
hmin Input: minimum step size
|
|
20
|
-
maxiter Input: maximum number of iterations
|
|
21
|
-
flag Input: return flag
|
|
22
|
-
0 no errors
|
|
23
|
-
1 hmin exceeded
|
|
24
|
-
2 maximum iterations exceeded
|
|
25
|
-
|
|
26
|
-
Return value
|
|
27
|
-
value of y at last step x
|
|
28
|
-
|
|
29
|
-
Description
|
|
30
|
-
The routine odedopri() implements the Dormand-Prince method of
|
|
31
|
-
solving an ordinary differential equation of the first order
|
|
32
|
-
y' = f(x,y).
|
|
33
|
-
|
|
34
|
-
Reference
|
|
35
|
-
The coefficients were obtained from
|
|
36
|
-
|
|
37
|
-
E.Hairer, S.P.Norsett and G.Wanner[1991],
|
|
38
|
-
"Solving Differential Equations I, Nonstiff Problems",
|
|
39
|
-
2e, Springer-Verlag, p. 178
|
|
40
|
-
|
|
41
|
-
WARNING
|
|
42
|
-
Check the flag after calling this routine!
|
|
43
|
-
|
|
44
|
-
Revisions
|
|
45
|
-
1998.05.02 first version
|
|
46
|
-
2018.05.04 Javascript port from python
|
|
47
|
-
@source https://web.archive.org/web/20150907215914/http://adorio-research.org/wordpress/?p=6565
|
|
48
|
-
@author ? [original author]
|
|
49
|
-
@author Alex Goldring
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
|
-
// we trust that the compiler is smart enough to pre-evaluate the
|
|
53
|
-
// value of the constants.
|
|
54
|
-
|
|
55
|
-
const a21 = (1.0 / 5.0),
|
|
56
|
-
a31 = (3.0 / 40.0),
|
|
57
|
-
a32 = (9.0 / 40.0),
|
|
58
|
-
a41 = (44.0 / 45.0),
|
|
59
|
-
a42 = (-56.0 / 15.0),
|
|
60
|
-
a43 = (32.0 / 9.0),
|
|
61
|
-
a51 = (19372.0 / 6561.0),
|
|
62
|
-
a52 = (-25360.0 / 2187.0),
|
|
63
|
-
a53 = (64448.0 / 6561.0),
|
|
64
|
-
a54 = (-212.0 / 729.0),
|
|
65
|
-
a61 = (9017.0 / 3168.0),
|
|
66
|
-
a62 = (-355.0 / 33.0),
|
|
67
|
-
a63 = (46732.0 / 5247.0),
|
|
68
|
-
a64 = (49.0 / 176.0),
|
|
69
|
-
a65 = (-5103.0 / 18656.0),
|
|
70
|
-
a71 = (35.0 / 384.0),
|
|
71
|
-
a72 = (0.0),
|
|
72
|
-
a73 = (500.0 / 1113.0),
|
|
73
|
-
a74 = (125.0 / 192.0),
|
|
74
|
-
a75 = (-2187.0 / 6784.0),
|
|
75
|
-
a76 = (11.0 / 84.0),
|
|
76
|
-
|
|
77
|
-
c2 = (1.0 / 5.0),
|
|
78
|
-
c3 = (3.0 / 10.0),
|
|
79
|
-
c4 = (4.0 / 5.0),
|
|
80
|
-
c5 = (8.0 / 9.0),
|
|
81
|
-
c6 = (1.0),
|
|
82
|
-
c7 = (1.0),
|
|
83
|
-
|
|
84
|
-
b1 = (35.0 / 384.0),
|
|
85
|
-
b2 = (0.0),
|
|
86
|
-
b3 = (500.0 / 1113.0),
|
|
87
|
-
b4 = (125.0 / 192.0),
|
|
88
|
-
b5 = (-2187.0 / 6784.0),
|
|
89
|
-
b6 = (11.0 / 84.0),
|
|
90
|
-
b7 = (0.0),
|
|
91
|
-
|
|
92
|
-
b1p = (5179.0 / 57600.0),
|
|
93
|
-
b2p = (0.0),
|
|
94
|
-
b3p = (7571.0 / 16695.0),
|
|
95
|
-
b4p = (393.0 / 640.0),
|
|
96
|
-
b5p = (-92097.0 / 339200.0),
|
|
97
|
-
b6p = (187.0 / 2100.0),
|
|
98
|
-
b7p = (1.0 / 40.0);
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
export class StepResult {
|
|
102
|
-
step = 0;
|
|
103
|
-
yDelta = 0;
|
|
104
|
-
error = 0;
|
|
105
|
-
iterations = 0;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
*
|
|
110
|
-
* @param {function(x:number, y:number):number} fxy derivative function
|
|
111
|
-
* @param {number} x value of X
|
|
112
|
-
* @param {number} y value of Y
|
|
113
|
-
* @param {number} suggestedStepSize Suggested step size
|
|
114
|
-
* @param {number} tolerance tolerable error size
|
|
115
|
-
* @param {number} maxIterations maximum number of iterations allowed to find step
|
|
116
|
-
* @param {StepResult} result
|
|
117
|
-
* @returns {boolean} true if result is found, false otherwise
|
|
118
|
-
*/
|
|
119
|
-
function computeStepSize(fxy, x, y, suggestedStepSize, tolerance, maxIterations, result) {
|
|
120
|
-
let i;
|
|
121
|
-
|
|
122
|
-
let h = suggestedStepSize;
|
|
123
|
-
|
|
124
|
-
for (i = 0; i < maxIterations; i++) {
|
|
125
|
-
/* Compute the function values */
|
|
126
|
-
const K1 = fxy(x, y);
|
|
127
|
-
const K2 = fxy(x + c2 * h, y + h * (a21 * K1));
|
|
128
|
-
const K3 = fxy(x + c3 * h, y + h * (a31 * K1 + a32 * K2));
|
|
129
|
-
const K4 = fxy(x + c4 * h, y + h * (a41 * K1 + a42 * K2 + a43 * K3));
|
|
130
|
-
const K5 = fxy(x + c5 * h, y + h * (a51 * K1 + a52 * K2 + a53 * K3 + a54 * K4));
|
|
131
|
-
const K6 = fxy(x + h, y + h * (a61 * K1 + a62 * K2 + a63 * K3 + a64 * K4 + a65 * K5));
|
|
132
|
-
const K7 = fxy(x + h, y + h * (a71 * K1 + a72 * K2 + a73 * K3 + a74 * K4 + a75 * K5 + a76 * K6));
|
|
133
|
-
|
|
134
|
-
const error = Math.abs((b1 - b1p) * K1 + (b3 - b3p) * K3 + (b4 - b4p) * K4 + (b5 - b5p) * K5 + (b6 - b6p) * K6 + (b7 - b7p) * K7);
|
|
135
|
-
|
|
136
|
-
// error control
|
|
137
|
-
const delta = 0.84 * Math.pow(tolerance / error, (1.0 / 5.0));
|
|
138
|
-
|
|
139
|
-
if (error < tolerance) {
|
|
140
|
-
// error within tolerance
|
|
141
|
-
|
|
142
|
-
result.step = h;
|
|
143
|
-
result.error = error;
|
|
144
|
-
result.iterations = i + 1;
|
|
145
|
-
result.yDelta = h * (b1 * K1 + b3 * K3 + b4 * K4 + b5 * K5 + b6 * K6);
|
|
146
|
-
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
const clamped_delta = clamp(delta, 0.1, 4.0);
|
|
151
|
-
|
|
152
|
-
h = clamped_delta * h;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
//failed to compute step
|
|
156
|
-
return false;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
*
|
|
161
|
-
* @param {function(x:number, y:number):number} fxy derivative function
|
|
162
|
-
* @param {number} x0 starting X value
|
|
163
|
-
* @param {number} y0 starting Y value
|
|
164
|
-
* @param {number} x1 end X value
|
|
165
|
-
* @param {number} tol tolerance
|
|
166
|
-
* @param {number} hmax max step size
|
|
167
|
-
* @param {number} hmin min step size
|
|
168
|
-
* @param {number} max_iteration maximum number of iterations
|
|
169
|
-
* @returns {Array.<number>}
|
|
170
|
-
*/
|
|
171
|
-
function odedopri(fxy, x0, y0, x1, tol, hmax, hmin, max_iteration) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
let x = x0;
|
|
175
|
-
let y = y0;
|
|
176
|
-
//step size
|
|
177
|
-
let h = hmax;
|
|
178
|
-
|
|
179
|
-
let flag;
|
|
180
|
-
const stepResult = new StepResult();
|
|
181
|
-
|
|
182
|
-
let iterations_remaining = max_iteration;
|
|
183
|
-
|
|
184
|
-
while (iterations_remaining > 0) {
|
|
185
|
-
|
|
186
|
-
iterations_remaining--;
|
|
187
|
-
|
|
188
|
-
if (computeStepSize(fxy, x, y, h, tol, 100, stepResult)) {
|
|
189
|
-
h = stepResult.step;
|
|
190
|
-
x += h;
|
|
191
|
-
y += stepResult.yDelta;
|
|
192
|
-
} else {
|
|
193
|
-
//failed to find a good step, take a conservative smallest possible step
|
|
194
|
-
h = hmin;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
if (h > hmax) {
|
|
198
|
-
h = hmax;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
if (x >= x1) {
|
|
203
|
-
flag = 0;
|
|
204
|
-
break;
|
|
205
|
-
} else if (x + h > x1) {
|
|
206
|
-
h = x1 - x;
|
|
207
|
-
} else if (h < hmin) {
|
|
208
|
-
h = hmin;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
if (iterations_remaining <= 0) {
|
|
213
|
-
flag = 2;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return [y, x, flag, iterations_remaining];
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
function main() {
|
|
220
|
-
function fxy(x, y) {
|
|
221
|
-
return Math.abs(Math.sin(x));
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
const x0 = 0,
|
|
225
|
-
y0 = 1.24,
|
|
226
|
-
x1 = 1000.0,
|
|
227
|
-
tol = 1.0e-5,
|
|
228
|
-
hmax = 1.0,
|
|
229
|
-
hmin = 0.001,
|
|
230
|
-
maxiter = 1000000;
|
|
231
|
-
|
|
232
|
-
console.log(odedopri(fxy, x0, y0, x1, tol, hmax, hmin, maxiter));
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
console.time('solver');
|
|
236
|
-
main();
|
|
237
|
-
console.timeEnd('solver');
|
|
238
|
-
|
|
239
|
-
export {
|
|
240
|
-
StepResult,
|
|
241
|
-
computeStepSize
|
|
242
|
-
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|