mrpj 0.0.6 → 0.0.7
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/.jsii +11 -2
- package/lib/construct-project.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +3 -1
- package/lib/projen-project.js +1 -1
- package/lib/typescript-project.js +1 -1
- package/lib/utils.d.ts +12 -0
- package/lib/utils.js +30 -8
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -74,6 +74,15 @@
|
|
|
74
74
|
"url": "git@github.com:mrgrain/projen-projects.git"
|
|
75
75
|
},
|
|
76
76
|
"schema": "jsii/0.10.0",
|
|
77
|
+
"submodules": {
|
|
78
|
+
"mrpj.utils": {
|
|
79
|
+
"locationInModule": {
|
|
80
|
+
"filename": "src/index.ts",
|
|
81
|
+
"line": 7
|
|
82
|
+
},
|
|
83
|
+
"symbolId": "src/utils:"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
77
86
|
"targets": {
|
|
78
87
|
"js": {
|
|
79
88
|
"npm": "mrpj"
|
|
@@ -8038,6 +8047,6 @@
|
|
|
8038
8047
|
"symbolId": "src/typescript-project-options:TypeScriptProjectOptions"
|
|
8039
8048
|
}
|
|
8040
8049
|
},
|
|
8041
|
-
"version": "0.0.
|
|
8042
|
-
"fingerprint": "
|
|
8050
|
+
"version": "0.0.7",
|
|
8051
|
+
"fingerprint": "EeX4uYV3DNUrA7YUTXvkYzE/GD9rQ1T6xaRw1IEdDSw="
|
|
8043
8052
|
}
|
package/lib/construct-project.js
CHANGED
|
@@ -10,6 +10,6 @@ const projen_1 = require("projen");
|
|
|
10
10
|
class ConstructProject extends projen_1.awscdk.AwsCdkConstructLibrary {
|
|
11
11
|
}
|
|
12
12
|
_a = JSII_RTTI_SYMBOL_1;
|
|
13
|
-
ConstructProject[_a] = { fqn: "mrpj.ConstructProject", version: "0.0.
|
|
13
|
+
ConstructProject[_a] = { fqn: "mrpj.ConstructProject", version: "0.0.7" };
|
|
14
14
|
exports.ConstructProject = ConstructProject;
|
|
15
15
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LXByb2plY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3RydWN0LXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBZ0M7QUFFaEM7O0dBRUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLGVBQU0sQ0FBQyxzQkFBc0I7Ozs7QUFBdEQsNENBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzY2RrIH0gZnJvbSAncHJvamVuJztcblxuLyoqXG4gKiBAcGppZCBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGNsYXNzIENvbnN0cnVjdFByb2plY3QgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrQ29uc3RydWN0TGlicmFyeSB7XG59Il19
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -14,10 +14,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.utils = void 0;
|
|
17
18
|
__exportStar(require("./construct-project"), exports);
|
|
18
19
|
__exportStar(require("./construct-project-options"), exports);
|
|
19
20
|
__exportStar(require("./projen-project"), exports);
|
|
20
21
|
__exportStar(require("./projen-project-options"), exports);
|
|
21
22
|
__exportStar(require("./typescript-project"), exports);
|
|
22
23
|
__exportStar(require("./typescript-project-options"), exports);
|
|
23
|
-
|
|
24
|
+
exports.utils = require("./utils");
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBb0M7QUFDcEMsOERBQTRDO0FBQzVDLG1EQUFpQztBQUNqQywyREFBeUM7QUFDekMsdURBQXFDO0FBQ3JDLCtEQUE2QztBQUM3QyxtQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdC1wcm9qZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0LXByb2plY3Qtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb2plbi1wcm9qZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vcHJvamVuLXByb2plY3Qtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzY3JpcHQtcHJvamVjdCc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzY3JpcHQtcHJvamVjdC1vcHRpb25zJztcbmV4cG9ydCAqIGFzIHV0aWxzIGZyb20gJy4vdXRpbHMnOyJdfQ==
|
package/lib/projen-project.js
CHANGED
|
@@ -62,7 +62,7 @@ class ProjenProject extends projen_1.cdk.JsiiProject {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
_a = JSII_RTTI_SYMBOL_1;
|
|
65
|
-
ProjenProject[_a] = { fqn: "mrpj.ProjenProject", version: "0.0.
|
|
65
|
+
ProjenProject[_a] = { fqn: "mrpj.ProjenProject", version: "0.0.7" };
|
|
66
66
|
exports.ProjenProject = ProjenProject;
|
|
67
67
|
function packageInfo(repo) {
|
|
68
68
|
const githubUser = repo.split('/')[0];
|
|
@@ -10,6 +10,6 @@ const projen_1 = require("projen");
|
|
|
10
10
|
class TypeScriptProject extends projen_1.typescript.TypeScriptProject {
|
|
11
11
|
}
|
|
12
12
|
_a = JSII_RTTI_SYMBOL_1;
|
|
13
|
-
TypeScriptProject[_a] = { fqn: "mrpj.TypeScriptProject", version: "0.0.
|
|
13
|
+
TypeScriptProject[_a] = { fqn: "mrpj.TypeScriptProject", version: "0.0.7" };
|
|
14
14
|
exports.TypeScriptProject = TypeScriptProject;
|
|
15
15
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3R5cGVzY3JpcHQtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFvQztBQUVwQzs7R0FFRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsbUJBQVUsQ0FBQyxpQkFBaUI7Ozs7QUFBdEQsOENBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZXNjcmlwdCB9IGZyb20gJ3Byb2plbic7XG5cbi8qKlxuICogQHBqaWQgdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVTY3JpcHRQcm9qZWN0IGV4dGVuZHMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdCB7XG59Il19
|
package/lib/utils.d.ts
CHANGED
|
@@ -11,3 +11,15 @@ export declare function noEmpties(list: any[]): any[];
|
|
|
11
11
|
* User options take precedence.
|
|
12
12
|
*/
|
|
13
13
|
export declare function deepDefaults<T>(options?: Partial<T>, defaults?: Partial<T>): T;
|
|
14
|
+
/**
|
|
15
|
+
* Immutable deep merging objects.
|
|
16
|
+
*/
|
|
17
|
+
export declare function deepMerge(...data: any[]): any;
|
|
18
|
+
/**
|
|
19
|
+
* Is this thing an object
|
|
20
|
+
*/
|
|
21
|
+
export declare function isObject(x: any): x is object;
|
|
22
|
+
/**
|
|
23
|
+
* Is this thing a plain object (i.e. `{a: 1}`)
|
|
24
|
+
*/
|
|
25
|
+
export declare function isPlainObject(x: any): x is object;
|
package/lib/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.deepDefaults = exports.noEmpties = exports.ifSet = void 0;
|
|
3
|
+
exports.isPlainObject = exports.isObject = exports.deepMerge = exports.deepDefaults = exports.noEmpties = exports.ifSet = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Return a value if the check value is truthy, undefined otherwise.
|
|
6
6
|
*/
|
|
@@ -23,28 +23,50 @@ exports.noEmpties = noEmpties;
|
|
|
23
23
|
* User options take precedence.
|
|
24
24
|
*/
|
|
25
25
|
function deepDefaults(options = {}, defaults = {}) {
|
|
26
|
-
return
|
|
26
|
+
return deepMerge(defaults, options);
|
|
27
27
|
}
|
|
28
28
|
exports.deepDefaults = deepDefaults;
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Immutable deep merging objects.
|
|
31
|
+
*/
|
|
32
|
+
function deepMerge(...data) {
|
|
33
|
+
return [{}, ...data].reduce((result, current) => {
|
|
31
34
|
Object.keys(current).forEach(key => {
|
|
32
35
|
const resultValue = result[key];
|
|
33
36
|
const currentValue = current[key];
|
|
34
37
|
if (Array.isArray(resultValue) && Array.isArray(currentValue)) {
|
|
35
38
|
result[key] = resultValue.concat(...currentValue);
|
|
36
39
|
}
|
|
37
|
-
else if (
|
|
38
|
-
result[key] =
|
|
40
|
+
else if (Array.isArray(currentValue)) {
|
|
41
|
+
result[key] = [...currentValue];
|
|
42
|
+
}
|
|
43
|
+
else if (isPlainObject(resultValue) && isPlainObject(currentValue)) {
|
|
44
|
+
result[key] = deepMerge(resultValue, currentValue);
|
|
45
|
+
}
|
|
46
|
+
else if (isPlainObject(currentValue)) {
|
|
47
|
+
result[key] = deepMerge({}, currentValue);
|
|
39
48
|
}
|
|
40
49
|
else {
|
|
41
50
|
result[key] = currentValue;
|
|
42
51
|
}
|
|
52
|
+
;
|
|
43
53
|
});
|
|
44
54
|
return result;
|
|
45
55
|
}, {});
|
|
46
56
|
}
|
|
57
|
+
exports.deepMerge = deepMerge;
|
|
58
|
+
/**
|
|
59
|
+
* Is this thing an object
|
|
60
|
+
*/
|
|
47
61
|
function isObject(x) {
|
|
48
|
-
return (x && typeof x === 'object' && !Array.isArray(x));
|
|
62
|
+
return Boolean(x && typeof x === 'object' && !Array.isArray(x));
|
|
63
|
+
}
|
|
64
|
+
exports.isObject = isObject;
|
|
65
|
+
/**
|
|
66
|
+
* Is this thing a plain object (i.e. `{a: 1}`)
|
|
67
|
+
*/
|
|
68
|
+
function isPlainObject(x) {
|
|
69
|
+
return Boolean(isObject(x) && Object.getPrototypeOf(x) === Object.prototype);
|
|
49
70
|
}
|
|
50
|
-
|
|
71
|
+
exports.isPlainObject = isPlainObject;
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0E7O0dBRUc7QUFDSCxTQUFnQixLQUFLLENBQUMsS0FBVSxFQUFFLElBQVM7SUFDekMsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUxELHNCQUtDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixTQUFTLENBQUMsSUFBVztJQUNuQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRkQsOEJBRUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixZQUFZLENBQUksVUFBc0IsRUFBUyxFQUFFLFdBQXVCLEVBQVM7SUFDL0YsT0FBTyxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFGRCxvQ0FFQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLEdBQUcsSUFBVztJQUN0QyxPQUFPLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFbEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzdELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7YUFDbkQ7aUJBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO2FBQ2pDO2lCQUFNLElBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDcEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDcEQ7aUJBQU0sSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO2FBQzNDO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7YUFDNUI7WUFBQSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDO0FBckJELDhCQXFCQztBQUdEOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLENBQU07SUFDN0IsT0FBTyxPQUFPLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRkQsNEJBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxDQUFNO0lBQ2xDLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRkQsc0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogUmV0dXJuIGEgdmFsdWUgaWYgdGhlIGNoZWNrIHZhbHVlIGlzIHRydXRoeSwgdW5kZWZpbmVkIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlmU2V0KGNoZWNrOiBhbnksIHRoZW46IGFueSk6IGFueSB7XG4gIGlmIChjaGVjaykge1xuICAgIHJldHVybiB0aGVuO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0IHdpdGhvdXQgdW5kZWZpbmVkIG9yIG51bGwgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub0VtcHRpZXMobGlzdDogYW55W10pOiBhbnlbXSB7XG4gIHJldHVybiBsaXN0LmZpbHRlcihlID0+IGUgIT09IHVuZGVmaW5lZCAmJiBlICE9PSBudWxsKTtcbn1cblxuLyoqXG4gKiBEZWVwIG1lcmdlIGEgdXNlciBwcm92aWRlZCBvcHRpb25zIG9iamVjdCB3aXRoIGRlZmF1bHRzLlxuICogVXNlciBvcHRpb25zIHRha2UgcHJlY2VkZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBEZWZhdWx0czxUPihvcHRpb25zOiBQYXJ0aWFsPFQ+ID0ge30gYXMgYW55LCBkZWZhdWx0czogUGFydGlhbDxUPiA9IHt9IGFzIGFueSk6IFQge1xuICByZXR1cm4gZGVlcE1lcmdlKGRlZmF1bHRzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBJbW11dGFibGUgZGVlcCBtZXJnaW5nIG9iamVjdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwTWVyZ2UoLi4uZGF0YTogYW55W10pOiBhbnkge1xuICByZXR1cm4gW3t9LCAuLi5kYXRhXS5yZWR1Y2UoKHJlc3VsdCwgY3VycmVudCkgPT4ge1xuICAgIE9iamVjdC5rZXlzKGN1cnJlbnQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gcmVzdWx0W2tleV07XG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBjdXJyZW50W2tleV07XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdFZhbHVlKSAmJiBBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSByZXN1bHRWYWx1ZS5jb25jYXQoLi4uY3VycmVudFZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gWy4uLmN1cnJlbnRWYWx1ZV07XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0VmFsdWUpICYmIGlzUGxhaW5PYmplY3QoY3VycmVudFZhbHVlKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IGRlZXBNZXJnZShyZXN1bHRWYWx1ZSwgY3VycmVudFZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gZGVlcE1lcmdlKHt9LCBjdXJyZW50VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBjdXJyZW50VmFsdWU7XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xufVxuXG5cbi8qKlxuICogSXMgdGhpcyB0aGluZyBhbiBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHg6IGFueSk6IHggaXMgb2JqZWN0IHtcbiAgcmV0dXJuIEJvb2xlYW4oeCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoeCkpO1xufVxuXG4vKipcbiAqIElzIHRoaXMgdGhpbmcgYSBwbGFpbiBvYmplY3QgKGkuZS4gYHthOiAxfWApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHg6IGFueSk6IHggaXMgb2JqZWN0IHtcbiAgcmV0dXJuIEJvb2xlYW4oaXNPYmplY3QoeCkgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHgpID09PSBPYmplY3QucHJvdG90eXBlKTtcbn0iXX0=
|