@ez4/pgmigration 0.49.0 → 0.50.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.
- package/dist/library.cjs +12 -13
- package/dist/library.mjs +12 -12
- package/dist/main.cjs +12 -14
- package/dist/main.mjs +12 -13
- package/package.json +8 -8
package/dist/library.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
var _=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ne=Object.prototype.hasOwnProperty;var r=(e,o)=>_(e,"name",{value:o,configurable:!0});var re=(e,o)=>{for(var l in o)_(e,l,{get:o[l],enumerable:!0})},oe=(e,o,l,f)=>{if(o&&
|
|
2
2
|
typeof o=="object"||typeof o=="function")for(let y of te(o))!ne.call(e,y)&&y!==l&&
|
|
3
3
|
_(e,y,{get:()=>o[y],enumerable:!(f=ee(o,y))||f.enumerable});return e};var ie=e=>oe(_({},"__esModule",{value:!0}),e);var pe={};re(pe,{ColumnQuery:()=>Q,DatabaseQueries:()=>F,IndexQueries:()=>W,RelationQuery:()=>Z,
|
|
4
4
|
TableQuery:()=>H,getTableRepositoryChanges:()=>se});module.exports=ie(pe);var b=require("@ez4/utils"),$=require("@ez4/pgclient/library"),E=require("@ez4/schema");var se=r((e,o)=>(0,b.deepCompareObject)(e,o,{onSimilarName:r((l,f)=>{let y=new Set(
|
|
@@ -9,13 +9,13 @@ ae(l.schema,f.schema):(0,E.isAnySchema)(l)&&(0,E.isAnySchema)(f)?ce(l,f):!1,"onR
|
|
|
9
9
|
ename")}),"getTableRepositoryChanges"),ae=r((e,o)=>(0,b.deepEqual)(Object.keys(e.
|
|
10
10
|
properties),Object.keys(o.properties)),"canRenameTable"),ce=r((e,o)=>(0,b.deepEqual)(
|
|
11
11
|
e,o,{depth:1,include:{type:!0,definitions:!0,nullable:!0,format:!0}}),"canRename\
|
|
12
|
-
Column");var V=require("@ez4/pgsql");var K=r((e,o)=>{let[l]=e.select().rawColumn(
|
|
12
|
+
Column");var V=require("@ez4/pgsql");var K=r((e,o)=>{let[l]=e.select().rawColumn(1).from("pg_database").where({datname:e.
|
|
13
13
|
rawString(o)}).build();return l},"getCheckDatabaseQuery"),N=r((e,o)=>{let[l]=e.select().
|
|
14
|
-
rawColumn(
|
|
15
|
-
"getCheckConstraintQuery"),U=r((e,o,l)=>{let[f]=e.select().rawColumn(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"
|
|
14
|
+
rawColumn(1).from("pg_constraint").where({conname:e.rawString(o)}).build();return l},
|
|
15
|
+
"getCheckConstraintQuery"),U=r((e,o,l)=>{let[f]=e.select().rawColumn(1).where({NOT:{
|
|
16
|
+
exists:e.select().from(e.rawValue("information_schema.columns")).rawColumn(1).where(
|
|
17
|
+
{column_name:e.rawString(l),table_name:e.rawString(o)})}}).build();return f},"ge\
|
|
18
|
+
tCheckColumnQuery");var F;(l=>(l.prepareCreate=r(f=>{let y=new V.SqlBuilder;return{check:K(y,f),query:`\
|
|
19
19
|
CREATE DATABASE "${f}"`}},"prepareCreate"),l.prepareDelete=r(f=>({query:`DROP DA\
|
|
20
20
|
TABASE IF EXISTS "${f}" WITH (FORCE)`}),"prepareDelete")))(F||={});var G=require("@ez4/database");var S=require("@ez4/schema"),L=require("@ez4/utils");var B=r(e=>!!(e.nullable||e.optional),"isOptionalColumn"),P=r((e,o)=>{if((0,S.isScalarSchema)(
|
|
21
21
|
e)||(0,S.isObjectSchema)(e)||(0,S.isArraySchema)(e)||(0,S.isTupleSchema)(e)){let{
|
|
@@ -67,12 +67,11 @@ break}case C.Index.Unique:{let c=A(t,m),p=i.index(c).drop().existing().concurren
|
|
|
67
67
|
s.indexes.push({query:p.build()});break}case C.Index.Secondary:{let c=I(t,m),p=i.
|
|
68
68
|
index(c).drop().existing().concurrent();s.indexes.push({query:p.build()});break}}}
|
|
69
69
|
return s},"prepareDelete"),d.getValidationQuery=r((i,t)=>{let[n]=i.select().rawColumn(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
{});var X=require("@ez4/pgclient/library"),Y=require("@ez4/schema"),v=require("@ez4/database");var Z;(i=>{i.prepareCreate=r((t,n,s,a)=>{let g=[];for(let m in a){let c=a[m];if(y(
|
|
70
|
+
1).from("pg_index").where({indexrelid:i.rawValue(`${i.rawString(t).build()}::reg\
|
|
71
|
+
class`),indisvalid:i.rawValue("false"),indisready:i.rawValue("true")}).build();return n},
|
|
72
|
+
"getValidationQuery");let x=r((i,t)=>{if(i.length===1){let[n]=i;switch(t.properties[n]?.
|
|
73
|
+
type){case z.SchemaType.Object:case z.SchemaType.Union:case z.SchemaType.Array:case z.SchemaType.
|
|
74
|
+
Tuple:return"GIN"}}return"BTREE"},"getIndexType")})(W||={});var X=require("@ez4/pgclient/library"),Y=require("@ez4/schema"),v=require("@ez4/database");var Z;(i=>{i.prepareCreate=r((t,n,s,a)=>{let g=[];for(let m in a){let c=a[m];if(y(
|
|
76
75
|
c))continue;let{[c.targetColumn]:p}=s.properties,u=O(n,m),h=!!(0,Y.isNullishSchema)(
|
|
77
76
|
p);g.push({check:N(t,u),query:d(t,n,u,c,h).build()})}return g},"prepareCreate"),
|
|
78
77
|
i.prepareUpdate=r((t,n,s,a)=>{let g=[];for(let m in s){let c=s[m];if(y(c))continue;
|
package/dist/library.mjs
CHANGED
|
@@ -5,13 +5,13 @@ milarName"),onRename:r((g,f)=>!D(g)||!D(f)?!1:E(g)&&E(f)?G(g.schema,f.schema):U(
|
|
|
5
5
|
g)&&U(f)?H(g,f):!1,"onRename")}),"getTableRepositoryChanges"),G=r((e,m)=>v(Object.
|
|
6
6
|
keys(e.properties),Object.keys(m.properties)),"canRenameTable"),H=r((e,m)=>v(e,m,
|
|
7
7
|
{depth:1,include:{type:!0,definitions:!0,nullable:!0,format:!0}}),"canRenameColu\
|
|
8
|
-
mn");import{SqlBuilder as J}from"@ez4/pgsql";var M=r((e,m)=>{let[g]=e.select().rawColumn(
|
|
8
|
+
mn");import{SqlBuilder as J}from"@ez4/pgsql";var M=r((e,m)=>{let[g]=e.select().rawColumn(1).from("pg_database").where({datname:e.
|
|
9
9
|
rawString(m)}).build();return g},"getCheckDatabaseQuery"),w=r((e,m)=>{let[g]=e.select().
|
|
10
|
-
rawColumn(
|
|
11
|
-
"getCheckConstraintQuery"),_=r((e,m,g)=>{let[f]=e.select().rawColumn(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
10
|
+
rawColumn(1).from("pg_constraint").where({conname:e.rawString(m)}).build();return g},
|
|
11
|
+
"getCheckConstraintQuery"),_=r((e,m,g)=>{let[f]=e.select().rawColumn(1).where({NOT:{
|
|
12
|
+
exists:e.select().from(e.rawValue("information_schema.columns")).rawColumn(1).where(
|
|
13
|
+
{column_name:e.rawString(g),table_name:e.rawString(m)})}}).build();return f},"ge\
|
|
14
|
+
tCheckColumnQuery");var W;(g=>(g.prepareCreate=r(f=>{let x=new J;return{check:M(x,f),query:`CREATE D\
|
|
15
15
|
ATABASE "${f}"`}},"prepareCreate"),g.prepareDelete=r(f=>({query:`DROP DATABASE I\
|
|
16
16
|
F EXISTS "${f}" WITH (FORCE)`}),"prepareDelete")))(W||={});import{Index as ie}from"@ez4/database";import{isArraySchema as X,isEnumSchema as Y,isObjectSchema as Z,isScalarSchema as Q,
|
|
17
17
|
isStringSchema as ee,isTupleSchema as te,SchemaType as b}from"@ez4/schema";import{
|
|
@@ -61,12 +61,12 @@ constraint(a).drop().existing();i.constraints.push({query:p.build()});break}case
|
|
|
61
61
|
Unique:{let a=j(t,c),p=o.index(a).drop().existing().concurrent();i.indexes.push(
|
|
62
62
|
{query:p.build()});break}case C.Secondary:{let a=A(t,c),p=o.index(a).drop().existing().
|
|
63
63
|
concurrent();i.indexes.push({query:p.build()});break}}}return i},"prepareDelete"),
|
|
64
|
-
l.getValidationQuery=r((o,t)=>{let[n]=o.select().rawColumn(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
l.getValidationQuery=r((o,t)=>{let[n]=o.select().rawColumn(1).from("pg_index").where(
|
|
65
|
+
{indexrelid:o.rawValue(`${o.rawString(t).build()}::regclass`),indisvalid:o.rawValue(
|
|
66
|
+
"false"),indisready:o.rawValue("true")}).build();return n},"getValidationQuery");
|
|
67
|
+
let y=r((o,t)=>{if(o.length===1){let[n]=o;switch(t.properties[n]?.type){case z.Object:case z.
|
|
68
|
+
Union:case z.Array:case z.Tuple:return"GIN"}}return"BTREE"},"getIndexType")})(ce||=
|
|
69
|
+
{});import{getTableName as me}from"@ez4/pgclient/library";import{isNullishSchema as ue}from"@ez4/schema";
|
|
70
70
|
import{Index as K}from"@ez4/database";var pe;(o=>{o.prepareCreate=r((t,n,i,s)=>{let d=[];for(let c in s){let a=s[c];if(x(
|
|
71
71
|
a))continue;let{[a.targetColumn]:p}=i.properties,u=P(n,c),S=!!ue(p);d.push({check:w(
|
|
72
72
|
t,u),query:l(t,n,u,a,S).build()})}return d},"prepareCreate"),o.prepareUpdate=r((t,n,i,s)=>{
|
package/dist/main.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
var F=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames;var ge=Object.prototype.hasOwnProperty;var a=(e,n)=>F(e,"name",{value:n,configurable:!0});var ye=(e,n)=>{for(var y in n)F(e,y,{get:n[y],enumerable:!0})},fe=(e,n,y,h)=>{if(n&&
|
|
2
2
|
typeof n=="object"||typeof n=="function")for(let d of de(n))!ge.call(e,d)&&d!==y&&
|
|
3
3
|
F(e,d,{get:()=>n[d],enumerable:!(h=le(n,d))||h.enumerable});return e};var he=e=>fe(F({},"__esModule",{value:!0}),e);var Re={};ye(Re,{getCreateQueries:()=>me,getDeleteQueries:()=>pe,getUpdateQueries:()=>Ce});
|
|
4
4
|
module.exports=he(Re);var H=require("@ez4/pgsql");var N=require("@ez4/utils"),X=require("@ez4/pgclient/library"),Y=require("@ez4/schema");var re=a((e,n)=>(0,N.deepCompareObject)(e,n,{onSimilarName:a((y,h)=>{let d=new Set(
|
|
@@ -9,14 +9,13 @@ xe(y.schema,h.schema):(0,Y.isAnySchema)(y)&&(0,Y.isAnySchema)(h)?Se(y,h):!1,"onR
|
|
|
9
9
|
ename")}),"getTableRepositoryChanges"),xe=a((e,n)=>(0,N.deepEqual)(Object.keys(e.
|
|
10
10
|
properties),Object.keys(n.properties)),"canRenameTable"),Se=a((e,n)=>(0,N.deepEqual)(
|
|
11
11
|
e,n,{depth:1,include:{type:!0,definitions:!0,nullable:!0,format:!0}}),"canRename\
|
|
12
|
-
Column");var R=require("@ez4/schema"),z=require("@ez4/utils");var w=a((e,n)=>{let[y]=e.select().rawColumn(
|
|
12
|
+
Column");var R=require("@ez4/schema"),z=require("@ez4/utils");var w=a((e,n)=>{let[y]=e.select().rawColumn(1).from("pg_constraint").where({conname:e.
|
|
13
13
|
rawString(n)}).build();return y},"getCheckConstraintQuery"),Z=a((e,n,y)=>{let[h]=e.
|
|
14
|
-
select().rawColumn(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
y");var oe=require("@ez4/utils");var _=a((e,n)=>`${$(e,n)}_pk`,"getPrimaryKeyName"),Q=a((e,n)=>`${$(e,n)}_uk`,"ge\
|
|
14
|
+
select().rawColumn(1).where({NOT:{exists:e.select().from(e.rawValue("information\
|
|
15
|
+
_schema.columns")).rawColumn(1).where({column_name:e.rawString(y),table_name:e.rawString(
|
|
16
|
+
n)})}}).build();return h},"getCheckColumnQuery"),ee=a((e,n)=>{let[y]=e.select().
|
|
17
|
+
rawColumn(1).from("pg_constraint").where({convalidated:e.rawValue("true"),conname:e.
|
|
18
|
+
rawString(n)}).build();return y},"getCheckConstraintValidatedQuery");var oe=require("@ez4/utils");var _=a((e,n)=>`${$(e,n)}_pk`,"getPrimaryKeyName"),Q=a((e,n)=>`${$(e,n)}_uk`,"ge\
|
|
20
19
|
tUniqueKeyName"),E=a((e,n)=>`${$(e,n)}_sk`,"getSecondaryKeyName"),I=a((e,n)=>`${$(
|
|
21
20
|
e,n)}_fk`,"getRelationName"),O=a((e,n)=>`${$(e,n)}_ck`,"getConstraintName"),$=a(
|
|
22
21
|
(e,n)=>`${e}_${(0,oe.toSnakeCase)(n.replaceAll(":","_"))}`,"getName");var B;(s=>{s.prepareCreate=a((t,m,i)=>{let p={constraints:[],validations:[]};for(let c in i){
|
|
@@ -93,12 +92,11 @@ break}case k.Index.Unique:{let p=Q(r,i),c=g.index(p).drop().existing().concurren
|
|
|
93
92
|
s.indexes.push({query:c.build()});break}case k.Index.Secondary:{let p=E(r,i),c=g.
|
|
94
93
|
index(p).drop().existing().concurrent();s.indexes.push({query:c.build()});break}}}
|
|
95
94
|
return s},"prepareDelete"),f.getValidationQuery=a((g,r)=>{let[o]=g.select().rawColumn(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
{});var ne=require("@ez4/database");var q=require("@ez4/schema"),ae=require("@ez4/utils");var K=a(e=>!!(e.nullable||e.optional),"isOptionalColumn"),M=a((e,n)=>{if((0,q.isScalarSchema)(
|
|
95
|
+
1).from("pg_index").where({indexrelid:g.rawValue(`${g.rawString(r).build()}::reg\
|
|
96
|
+
class`),indisvalid:g.rawValue("false"),indisready:g.rawValue("true")}).build();return o},
|
|
97
|
+
"getValidationQuery");let u=a((g,r)=>{if(g.length===1){let[o]=g;switch(r.properties[o]?.
|
|
98
|
+
type){case V.SchemaType.Object:case V.SchemaType.Union:case V.SchemaType.Array:case V.SchemaType.
|
|
99
|
+
Tuple:return"GIN"}}return"BTREE"},"getIndexType")})(A||={});var ne=require("@ez4/database");var q=require("@ez4/schema"),ae=require("@ez4/utils");var K=a(e=>!!(e.nullable||e.optional),"isOptionalColumn"),M=a((e,n)=>{if((0,q.isScalarSchema)(
|
|
102
100
|
e)||(0,q.isObjectSchema)(e)||(0,q.isArraySchema)(e)||(0,q.isTupleSchema)(e)){let{
|
|
103
101
|
definitions:y}=e;switch(typeof y?.default){case"boolean":case"number":return`${y.
|
|
104
102
|
default}`;case"string":return`'${y.default}'`;case"object":return`'${JSON.stringify(
|
package/dist/main.mjs
CHANGED
|
@@ -6,14 +6,13 @@ f)&&ee(h)?ue(f,h):!1,"onRename")}),"getTableRepositoryChanges"),pe=i((e,c)=>te(O
|
|
|
6
6
|
keys(e.properties),Object.keys(c.properties)),"canRenameTable"),ue=i((e,c)=>te(e,
|
|
7
7
|
c,{depth:1,include:{type:!0,definitions:!0,nullable:!0,format:!0}}),"canRenameCo\
|
|
8
8
|
lumn");import{isEnumSchema as re,isScalarSchema as oe,SchemaType as v}from"@ez4/schema";
|
|
9
|
-
import{isNotNullish as E}from"@ez4/utils";var R=i((e,c)=>{let[f]=e.select().rawColumn(
|
|
9
|
+
import{isNotNullish as E}from"@ez4/utils";var R=i((e,c)=>{let[f]=e.select().rawColumn(1).from("pg_constraint").where({conname:e.
|
|
10
10
|
rawString(c)}).build();return f},"getCheckConstraintQuery"),F=i((e,c,f)=>{let[h]=e.
|
|
11
|
-
select().rawColumn(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
y");import{toSnakeCase as le}from"@ez4/utils";var D=i((e,c)=>`${Q(e,c)}_pk`,"getPrimaryKeyName"),U=i((e,c)=>`${Q(e,c)}_uk`,"ge\
|
|
11
|
+
select().rawColumn(1).where({NOT:{exists:e.select().from(e.rawValue("information\
|
|
12
|
+
_schema.columns")).rawColumn(1).where({column_name:e.rawString(f),table_name:e.rawString(
|
|
13
|
+
c)})}}).build();return h},"getCheckColumnQuery"),H=i((e,c)=>{let[f]=e.select().rawColumn(
|
|
14
|
+
1).from("pg_constraint").where({convalidated:e.rawValue("true"),conname:e.rawString(
|
|
15
|
+
c)}).build();return f},"getCheckConstraintValidatedQuery");import{toSnakeCase as le}from"@ez4/utils";var D=i((e,c)=>`${Q(e,c)}_pk`,"getPrimaryKeyName"),U=i((e,c)=>`${Q(e,c)}_uk`,"ge\
|
|
17
16
|
tUniqueKeyName"),_=i((e,c)=>`${Q(e,c)}_sk`,"getSecondaryKeyName"),A=i((e,c)=>`${Q(
|
|
18
17
|
e,c)}_fk`,"getRelationName"),N=i((e,c)=>`${Q(e,c)}_ck`,"getConstraintName"),Q=i(
|
|
19
18
|
(e,c)=>`${e}_${le(c.replaceAll(":","_"))}`,"getName");var O;(o=>{o.prepareCreate=i((t,m,s)=>{let p={constraints:[],validations:[]};for(let a in s){
|
|
@@ -86,12 +85,12 @@ constraint(p).drop().existing();o.constraints.push({query:a.build()});break}case
|
|
|
86
85
|
Unique:{let p=U(n,s),a=d.index(p).drop().existing().concurrent();o.indexes.push(
|
|
87
86
|
{query:a.build()});break}case w.Secondary:{let p=_(n,s),a=d.index(p).drop().existing().
|
|
88
87
|
concurrent();o.indexes.push({query:a.build()});break}}}return o},"prepareDelete"),
|
|
89
|
-
y.getValidationQuery=i((d,n)=>{let[r]=d.select().rawColumn(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
y.getValidationQuery=i((d,n)=>{let[r]=d.select().rawColumn(1).from("pg_index").where(
|
|
89
|
+
{indexrelid:d.rawValue(`${d.rawString(n).build()}::regclass`),indisvalid:d.rawValue(
|
|
90
|
+
"false"),indisready:d.rawValue("true")}).build();return r},"getValidationQuery");
|
|
91
|
+
let u=i((d,n)=>{if(d.length===1){let[r]=d;switch(n.properties[r]?.type){case G.Object:case G.
|
|
92
|
+
Union:case G.Array:case G.Tuple:return"GIN"}}return"BTREE"},"getIndexType")})(T||=
|
|
93
|
+
{});import{Index as ie}from"@ez4/database";import{isArraySchema as ye,isEnumSchema as fe,isObjectSchema as he,isScalarSchema as xe,
|
|
95
94
|
isStringSchema as Se,isTupleSchema as qe,SchemaType as k}from"@ez4/schema";import{
|
|
96
95
|
isAnyNumber as be}from"@ez4/utils";var $=i(e=>!!(e.nullable||e.optional),"isOptionalColumn"),I=i((e,c)=>{if(xe(e)||
|
|
97
96
|
he(e)||ye(e)||qe(e)){let{definitions:f}=e;switch(typeof f?.default){case"boolean":case"\
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ez4/pgmigration",
|
|
3
3
|
"description": "EZ4: A PostgreSQL migration library",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.50.0",
|
|
5
5
|
"author": "Silas B.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
@@ -39,17 +39,17 @@
|
|
|
39
39
|
"scripts": {
|
|
40
40
|
"lint": "eslint --cache",
|
|
41
41
|
"clean": "rm -rf dist/* *.tsbuildinfo .eslintcache",
|
|
42
|
-
"build": "tsc && node tools/bundler.mjs",
|
|
43
|
-
"test": "npm run build && tsc -p tsconfig.test.json && ez4 test",
|
|
42
|
+
"build": "tsc -p tsconfig.pack.json && node tools/bundler.mjs",
|
|
43
|
+
"test": "npm run build && tsc -p tsconfig.test.json --noEmit && ez4 test",
|
|
44
44
|
"local:publish": "npm run build && npm run clean:registry && npm publish --registry http://localhost:4873",
|
|
45
45
|
"clean:registry": "rm -rf ../../.registry/@ez4/pgmigration",
|
|
46
46
|
"live:publish": "npm run build && npm publish --access public"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@ez4/database": "^0.
|
|
50
|
-
"@ez4/pgsql": "^0.
|
|
51
|
-
"@ez4/pgclient": "^0.
|
|
52
|
-
"@ez4/schema": "^0.
|
|
53
|
-
"@ez4/utils": "^0.
|
|
49
|
+
"@ez4/database": "^0.50.0",
|
|
50
|
+
"@ez4/pgsql": "^0.50.0",
|
|
51
|
+
"@ez4/pgclient": "^0.50.0",
|
|
52
|
+
"@ez4/schema": "^0.50.0",
|
|
53
|
+
"@ez4/utils": "^0.50.0"
|
|
54
54
|
}
|
|
55
55
|
}
|