@opfr/utils-lang 0.17.0 → 1.0.1
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/array.d.ts +3 -3
- package/dist/index.es.js +19 -25
- package/dist/index.umd.cjs +1 -1
- package/dist/object.d.ts +1 -1
- package/package.json +3 -6
package/dist/array.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export declare const paginate: <T>(array: T[], pageSize: number) => T[][];
|
|
2
2
|
export declare const groupBy: <T extends object, K extends string | number>(array: T[], key: (i: T) => K) => Record<K, T[]>;
|
|
3
|
-
export declare const groupByOccurrence: <T extends
|
|
3
|
+
export declare const groupByOccurrence: <T extends object | string | number, K extends string | number>(array: T[], key: (i: T) => K) => [K, number][];
|
|
4
4
|
export declare const sortBy: <T extends object, K extends string | number>(array: T[], key: (i: T) => K) => T[];
|
|
5
|
-
export declare const mutuallyInclusive: <T>(array1: T[], array2: T[], key?: (i: T) =>
|
|
6
|
-
export declare const exclude: <T>(array: T[], exclude: T[], key?: (i: T) =>
|
|
5
|
+
export declare const mutuallyInclusive: <T>(array1: T[], array2: T[], key?: (i: T) => T | string | number) => T[];
|
|
6
|
+
export declare const exclude: <T>(array: T[], exclude: T[], key?: (i: T) => T | string | number) => T[];
|
|
7
7
|
export declare const unique: <T extends object, K extends string | number>(array: T[], key: (i: T) => K) => K[];
|
|
8
8
|
export declare const uniquePreserve: <T extends object, K extends string | number>(array: T[], key: (i: T) => K) => T[];
|
|
9
9
|
export declare const shuffle: <T>(array: T[]) => T[];
|
package/dist/index.es.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import u from "moment";
|
|
2
|
-
const
|
|
2
|
+
const S = (e) => new Intl.NumberFormat("de-DE").format(e), h = (e, t, r = Math.random) => Math.floor(r() * (t - e) + e), L = (e) => {
|
|
3
3
|
let t = e;
|
|
4
4
|
const r = 2147483648, n = 1103515245, s = 12345;
|
|
5
5
|
return () => (t = (n * t + s) % r, t / (r - 1));
|
|
6
|
-
}, I = (e, t, r) => Math.max(t, Math.min(e, r)), T = (e) => typeof e == "number",
|
|
6
|
+
}, I = (e, t, r) => Math.max(t, Math.min(e, r)), T = (e) => typeof e == "number", x = (e, t) => e.reduce((r, n, s) => {
|
|
7
7
|
const o = Math.floor(s / t);
|
|
8
8
|
return (r[o] || (r[o] = [])).push(n), r;
|
|
9
|
-
}, []),
|
|
9
|
+
}, []), C = (e, t) => e.reduce(
|
|
10
10
|
(r, n) => ((r[t(n)] = r[t(n)] || []).push(n), r),
|
|
11
11
|
{}
|
|
12
|
-
),
|
|
12
|
+
), $ = (e, t) => e.reduce((r, n) => r.find(([s]) => s === t(n)) ? r.map(([s, o]) => [
|
|
13
13
|
s,
|
|
14
14
|
s === t(n) ? o + 1 : o
|
|
15
|
-
]) : [...r, [t(n), 1]], []),
|
|
15
|
+
]) : [...r, [t(n), 1]], []), A = (e, t) => [...e].sort((r, n) => t(r) < t(n) ? -1 : t(r) > t(n) ? 1 : 0), E = (e, t, r = (n) => n) => e.filter((n) => t.some((s) => r(s) === r(n))), O = (e, t, r = (n) => n) => e.filter((n) => !t.some((s) => r(s) === r(n))), P = (e, t) => [...new Set(e.map((r) => t(r)))], H = (e, t) => e.filter(
|
|
16
16
|
(r, n, s) => n === s.findIndex((o) => t(o) === t(r))
|
|
17
17
|
), W = (e) => {
|
|
18
18
|
for (let t = e.length - 1; t > 0; t--) {
|
|
@@ -36,7 +36,7 @@ const w = (e) => new Intl.NumberFormat("de-DE").format(e), h = (e, t, r = Math.r
|
|
|
36
36
|
for (let o = e; r > 0 ? o < t : o > t; o += r)
|
|
37
37
|
s.push(o);
|
|
38
38
|
return s;
|
|
39
|
-
}, U = (e) => Object.fromEntries(e),
|
|
39
|
+
}, U = (e) => Object.fromEntries(e), _ = " ", g = " ", Z = (e, t = "") => e.split(t).join(_), k = (e, t = "") => e.split(t).join(g), G = (e, t) => e.length > t ? e.slice(0, t - 3) + "..." : e, j = (e) => e && e[0].toUpperCase() + e.slice(1), f = (e) => e.split(" ").map(j).join(" "), J = (e) => /^\d+$/.test(e), K = (e) => e !== Math.round(e) || e < 1 || e === 1 / 0 || e === -1 / 0 ? null : e === 1 ? "1er" : `${e}ème`, Q = (e) => e.trim().replace(/\s+/gi, " "), V = (e) => {
|
|
40
40
|
const t = e.split(" "), n = ((s) => {
|
|
41
41
|
let o = 1 / 0;
|
|
42
42
|
for (let i = 0; i < s.length; i++) {
|
|
@@ -51,13 +51,7 @@ const w = (e) => new Intl.NumberFormat("de-DE").format(e), h = (e, t, r = Math.r
|
|
|
51
51
|
return t.length === 1 ? [t[0]] : [t.slice(0, n + 1), t.slice(n + 1)].map(
|
|
52
52
|
(s) => s.join(" ")
|
|
53
53
|
);
|
|
54
|
-
}, D = (e) => typeof e == "string", v = (e) => {
|
|
55
|
-
const t = e.replace(
|
|
56
|
-
/[^a-zA-Z0-9]+(.)/g,
|
|
57
|
-
(r, n) => n.toUpperCase()
|
|
58
|
-
);
|
|
59
|
-
return `${t.charAt(0).toLowerCase()}${t.slice(1)}`;
|
|
60
|
-
}, X = (e) => {
|
|
54
|
+
}, D = (e) => typeof e == "string", v = (e) => e.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, (t, r) => r.toUpperCase()).replace(/^[A-Z]/, (t) => t.toLowerCase()), X = (e) => {
|
|
61
55
|
const t = v(e);
|
|
62
56
|
return `${t.charAt(0).toUpperCase()}${t.slice(1)}`;
|
|
63
57
|
}, ee = (e) => e.replace(/([a-z])([A-Z])/g, "$1-$2").replace(/[^a-zA-Z0-9]+/g, "-").toLowerCase().replace(/^-+|-+$/g, ""), te = (e) => e != null, re = (e) => D(e) ? /^[\],:{}\s]*$/.test(
|
|
@@ -129,7 +123,7 @@ const w = (e) => new Intl.NumberFormat("de-DE").format(e), h = (e, t, r = Math.r
|
|
|
129
123
|
yy: "%d ans"
|
|
130
124
|
},
|
|
131
125
|
dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
|
|
132
|
-
ordinal: (e, t) => {
|
|
126
|
+
ordinal: ((e, t) => {
|
|
133
127
|
switch (t) {
|
|
134
128
|
case "D":
|
|
135
129
|
return e + (e === 1 ? "er" : "");
|
|
@@ -143,7 +137,7 @@ const w = (e) => new Intl.NumberFormat("de-DE").format(e), h = (e, t, r = Math.r
|
|
|
143
137
|
case "W":
|
|
144
138
|
return e + (e === 1 ? "re" : "e");
|
|
145
139
|
}
|
|
146
|
-
},
|
|
140
|
+
}),
|
|
147
141
|
week: {
|
|
148
142
|
dow: 1,
|
|
149
143
|
doy: 4
|
|
@@ -207,7 +201,7 @@ const ne = (e) => new Date(e).toString() !== "Invalid Date", se = (e, t) => Math
|
|
|
207
201
|
a ? n[o] = r(i, a) : n[o] = i;
|
|
208
202
|
}
|
|
209
203
|
return n;
|
|
210
|
-
},
|
|
204
|
+
}, _e = (e) => e instanceof Object, ge = (e, t) => t.reduce(
|
|
211
205
|
(r, n) => ({
|
|
212
206
|
...r,
|
|
213
207
|
[n]: e[n]
|
|
@@ -215,8 +209,8 @@ const ne = (e) => new Date(e).toString() !== "Invalid Date", se = (e, t) => Math
|
|
|
215
209
|
{}
|
|
216
210
|
), je = (e) => Object.entries(e);
|
|
217
211
|
export {
|
|
218
|
-
|
|
219
|
-
|
|
212
|
+
_ as TIGHT_SPACE,
|
|
213
|
+
g as WIDE_SPACE,
|
|
220
214
|
U as arrayToRecord,
|
|
221
215
|
V as breakWords,
|
|
222
216
|
v as camelcase,
|
|
@@ -229,14 +223,14 @@ export {
|
|
|
229
223
|
O as exclude,
|
|
230
224
|
Z as fillWithTightSpaces,
|
|
231
225
|
k as fillWithWideSpaces,
|
|
232
|
-
|
|
226
|
+
ge as filterKeys,
|
|
233
227
|
B as filterNullAndUndefined,
|
|
234
228
|
oe as formatDate,
|
|
235
229
|
ie as formatDateWithDay,
|
|
236
230
|
he as formatDuration,
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
231
|
+
S as formatNumber,
|
|
232
|
+
C as groupBy,
|
|
233
|
+
$ as groupByOccurrence,
|
|
240
234
|
ce as hasExpire,
|
|
241
235
|
F as includeArrayIf,
|
|
242
236
|
z as includeBeginIf,
|
|
@@ -248,7 +242,7 @@ export {
|
|
|
248
242
|
pe as isFunction,
|
|
249
243
|
re as isJSON,
|
|
250
244
|
T as isNumber,
|
|
251
|
-
|
|
245
|
+
_e as isObject,
|
|
252
246
|
J as isPositiveInteger,
|
|
253
247
|
D as isString,
|
|
254
248
|
ne as isValidDate,
|
|
@@ -256,7 +250,7 @@ export {
|
|
|
256
250
|
Me as mergeObjects,
|
|
257
251
|
E as mutuallyInclusive,
|
|
258
252
|
K as numberToOrdinal,
|
|
259
|
-
|
|
253
|
+
x as paginate,
|
|
260
254
|
X as pascalCase,
|
|
261
255
|
M as pickFrom,
|
|
262
256
|
N as pickFromNth,
|
|
@@ -268,7 +262,7 @@ export {
|
|
|
268
262
|
ae as sameDay,
|
|
269
263
|
L as seededRandom,
|
|
270
264
|
W as shuffle,
|
|
271
|
-
|
|
265
|
+
A as sortBy,
|
|
272
266
|
Q as trim,
|
|
273
267
|
P as unique,
|
|
274
268
|
H as uniquePreserve,
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(r,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("moment")):typeof define=="function"&&define.amd?define(["exports","moment"],o):(r=typeof globalThis<"u"?globalThis:r||self,o(r.utils={},r.moment))})(this,(function(r,o){"use strict";const v=e=>new Intl.NumberFormat("de-DE").format(e),h=(e,t,n=Math.random)=>Math.floor(n()*(t-e)+e),S=e=>{let t=e;const n=2147483648,i=1103515245,s=12345;return()=>(t=(i*t+s)%n,t/(n-1))},b=(e,t,n)=>Math.max(t,Math.min(e,n)),T=e=>typeof e=="number",p=(e,t)=>e.reduce((n,i,s)=>{const a=Math.floor(s/t);return(n[a]||(n[a]=[])).push(i),n},[]),I=(e,t)=>e.reduce((n,i)=>((n[t(i)]=n[t(i)]||[]).push(i),n),{}),Y=(e,t)=>e.reduce((n,i)=>n.find(([s])=>s===t(i))?n.map(([s,a])=>[s,s===t(i)?a+1:a]):[...n,[t(i),1]],[]),A=(e,t)=>[...e].sort((n,i)=>t(n)<t(i)?-1:t(n)>t(i)?1:0),E=(e,t,n=i=>i)=>e.filter(i=>t.some(s=>n(s)===n(i))),w=(e,t,n=i=>i)=>e.filter(i=>!t.some(s=>n(s)===n(i))),C=(e,t)=>[...new Set(e.map(n=>t(n)))],L=(e,t)=>e.filter((n,i,s)=>i===s.findIndex(a=>t(a)===t(n))),P=e=>{for(let t=e.length-1;t>0;t--){const n=Math.floor(Math.random()*(t+1));[e[t],e[n]]=[e[n],e[t]]}return e},O=e=>e.filter(t=>t!=null),W=(e,t,n)=>[...e,...l(t,n)],$=(e,t,n)=>[...l(t,n),...e],B=(e,t,n)=>[...e,...g(t,n)],l=(e,t)=>t?[e]:[],g=(e,t)=>t?e:[],_=e=>e[h(0,e.length)],H=(e,t)=>Array.from({length:t}).map(()=>_(e)).reduce((n,i)=>({...n,[i]:(n[i]??0)+1}),{}),N=({start:e=0,stop:t,step:n=1})=>{if(n===0)throw new RangeError("step cannot be equal to 0");if(n>0&&e>=t||n<0&&e<=t)return[];const s=[];for(let a=e;n>0?a<t:a>t;a+=n)s.push(a);return s},F=e=>Object.fromEntries(e),R=(e,t="")=>e.split(t).join(" "),z=(e,t="")=>e.split(t).join(" "),q=(e,t)=>e.length>t?e.slice(0,t-3)+"...":e,D=e=>e&&e[0].toUpperCase()+e.slice(1),d=e=>e.split(" ").map(D).join(" "),k=e=>/^\d+$/.test(e),G=e=>e!==Math.round(e)||e<1||e===1/0||e===-1/0?null:e===1?"1er":`${e}ème`,U=e=>e.trim().replace(/\s+/gi," "),Z=e=>{const t=e.split(" "),i=(s=>{let a=1/0;for(let u=0;u<s.length;u++){const c=Math.abs(s.slice(0,u+1).join(" ").length-s.slice(u+1).join(" ").length);if(c<=a)a=c;else return u-1}return a})(t);return t.length===1?[t[0]]:[t.slice(0,i+1),t.slice(i+1)].map(s=>s.join(" "))},M=e=>typeof e=="string",j=e=>e.toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g,(t,n)=>n.toUpperCase()).replace(/^[A-Z]/,t=>t.toLowerCase()),J=e=>{const t=j(e);return`${t.charAt(0).toUpperCase()}${t.slice(1)}`},K=e=>e.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[^a-zA-Z0-9]+/g,"-").toLowerCase().replace(/^-+|-+$/g,""),V=e=>e!=null,Q=e=>M(e)?/^[\],:{}\s]*$/.test(e.replace(/\\["\\\/bfnrtu]/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")):!1,X=/^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,x=/(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,y=/(janv\.?|févr\.?|avr\.?|juil\.?|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,m=[/^janv/i,/^févr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^août/i,/^sept/i,/^oct/i,/^nov/i,/^déc/i],ee={months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsRegex:y,monthsShortRegex:y,monthsStrictRegex:X,monthsShortStrictRegex:x,monthsParse:m,longMonthsParse:m,shortMonthsParse:m,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:((e,t)=>{switch(t){case"D":return e+(e===1?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(e===1?"er":"e");case"w":case"W":return e+(e===1?"re":"e")}}),week:{dow:1,doy:4}};o.locale("fr",ee);const te=e=>new Date(e).toString()!=="Invalid Date",ne=(e,t)=>Math.abs(Math.ceil((t.getTime()-e.getTime())/(1e3*60*60*24))),re=e=>d(o(e).format("DD MMMM YYYY")),ie=e=>d(o(e).format("dddd DD MMMM YYYY")),se=(e,t,n=!0)=>(n?e.getFullYear()===t.getFullYear():!0)&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate(),ae=()=>o().locale("fr").subtract(1,"days").toDate(),oe=e=>new Date>e,ue=(e=new Date,t=1)=>{const n=t*60*1e3;return new Date(Math.round(e.getTime()/n)*n)},ce=e=>{const t=[],n=o.duration(e);if(!(!n||n.toISOString()==="P0D")){if(n.years()>=1){const i=Math.floor(n.years());t.push(i+" "+(i>1?"années":"année"))}if(n.months()>=1){const i=Math.floor(n.months());t.push(i+" mois")}if(n.days()>=1){const i=Math.floor(n.days());t.push(i+" "+(i>1?"jours":"jour"))}if(n.hours()>=1){const i=Math.floor(n.hours());t.push(i+" "+(i>1?"heures":"heure"))}if(n.minutes()>=1){const i=Math.floor(n.minutes());t.push(i+" "+(i>1?"minutes":"minute"))}if(n.seconds()>=1){const i=Math.floor(n.seconds());t.push(i+" "+(i>1?"secondes":"seconde"))}return t.join(", ")}},f=/^([1-9][0-9]*)([hmd])$/i,le=e=>!!e&&f.test(e),de=e=>{const t=f.exec(e);if(!t)return;const[,n,i]=t,s=parseInt(n,10),a=1e3*60;if(i==="m")return a*s;if(i==="h")return a*60*s;if(i==="d")return a*60*24*s},me=e=>{const t=f.exec(e);if(!t)return null;const[,n,i]=t,s=parseInt(n,10);if(i==="m")return`${s} minute${s>1?"s":""}`;if(i==="h")return`${s} heure${s>1?"s":""}`;if(i==="d")return`${s} jour${s>1?"s":""}`},fe=e=>typeof e=="function",he=(e,t,n)=>{const i={...e},s=Object.entries(e);for(const[a,u]of s){const c=t[a];c?i[a]=n(u,c):i[a]=u}return i},ge=e=>e instanceof Object,_e=(e,t)=>t.reduce((n,i)=>({...n,[i]:e[i]}),{}),De=e=>Object.entries(e);r.TIGHT_SPACE=" ",r.WIDE_SPACE=" ",r.arrayToRecord=F,r.breakWords=Z,r.camelcase=j,r.capitalize=D,r.capitalizeAllWords=d,r.clamp=b,r.dateDiff=ne,r.durationToMs=de,r.ellipsis=q,r.exclude=w,r.fillWithTightSpaces=R,r.fillWithWideSpaces=z,r.filterKeys=_e,r.filterNullAndUndefined=O,r.formatDate=re,r.formatDateWithDay=ie,r.formatDuration=me,r.formatNumber=v,r.groupBy=I,r.groupByOccurrence=Y,r.hasExpire=oe,r.includeArrayIf=B,r.includeBeginIf=$,r.includeIf=W,r.insertArrayIf=g,r.insertIf=l,r.isDefined=V,r.isDuration=le,r.isFunction=fe,r.isJSON=Q,r.isNumber=T,r.isObject=ge,r.isPositiveInteger=k,r.isString=M,r.isValidDate=te,r.kebabCase=K,r.mergeObjects=he,r.mutuallyInclusive=E,r.numberToOrdinal=G,r.paginate=p,r.pascalCase=J,r.pickFrom=_,r.pickFromNth=H,r.precise=ce,r.randomBetween=h,r.range=N,r.recordToArray=De,r.roundDate=ue,r.sameDay=se,r.seededRandom=S,r.shuffle=P,r.sortBy=A,r.trim=U,r.unique=C,r.uniquePreserve=L,r.yesterday=ae,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})}));
|
package/dist/object.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const mergeObjects: <TKey extends string, TValue>(obj1: { [key in TKey]: TValue; }, obj2: Partial<{ [
|
|
1
|
+
export declare const mergeObjects: <TKey extends string, TValue>(obj1: { [key in TKey]: TValue; }, obj2: Partial<{ [key in TKey]: TValue; }>, mergeFn: (v1: TValue, v2: TValue) => TValue) => { [key in TKey]: TValue; };
|
|
2
2
|
export declare const isObject: (obj: unknown) => obj is Object;
|
|
3
3
|
export declare const filterKeys: <T, K extends keyof T>(data: T, keys: K[]) => Pick<T, K>;
|
|
4
4
|
export declare const recordToArray: <TKey extends string, TValue>(record: Partial<Record<TKey, TValue>>) => [TKey, TValue][];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opfr/utils-lang",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "OPFR utils-lang",
|
|
6
6
|
"author": "Matthieu VEIGA",
|
|
@@ -12,11 +12,8 @@
|
|
|
12
12
|
"test:ci": "vitest run",
|
|
13
13
|
"coverage": "vitest run --coverage"
|
|
14
14
|
},
|
|
15
|
-
"dependencies": {
|
|
16
|
-
"moment": "2.30.1"
|
|
17
|
-
},
|
|
18
15
|
"devDependencies": {
|
|
19
|
-
"
|
|
16
|
+
"moment": "2.30.1"
|
|
20
17
|
},
|
|
21
18
|
"main": "dist/index.umd.cjs",
|
|
22
19
|
"module": "dist/index.es.js",
|
|
@@ -35,5 +32,5 @@
|
|
|
35
32
|
"node_modules",
|
|
36
33
|
"dist"
|
|
37
34
|
],
|
|
38
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "dd1f758862242dd55d92fc3faff5ce7d00584fe6"
|
|
39
36
|
}
|