@ihk-gfi/lux-components-update 11.5.0 → 11.9.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.
Files changed (49) hide show
  1. package/README.md +1 -2
  2. package/package.json +1 -1
  3. package/src/add-lux-components/index.js +10 -0
  4. package/src/add-lux-components/index.js.map +1 -1
  5. package/src/add-lux-components/index.ts +10 -0
  6. package/src/collection.json +20 -0
  7. package/src/update/index_spec.js +0 -6
  8. package/src/update/index_spec.js.map +1 -1
  9. package/src/update/index_spec.ts +0 -6
  10. package/src/update110600/index.d.ts +2 -0
  11. package/src/update110600/index.js +28 -0
  12. package/src/update110600/index.js.map +1 -0
  13. package/src/update110600/index.ts +28 -0
  14. package/src/update110600/index_spec.d.ts +1 -0
  15. package/src/update110600/index_spec.js +66 -0
  16. package/src/update110600/index_spec.js.map +1 -0
  17. package/src/update110600/index_spec.ts +70 -0
  18. package/src/update110600/schema.json +23 -0
  19. package/src/update110700/index.d.ts +2 -0
  20. package/src/update110700/index.js +45 -0
  21. package/src/update110700/index.js.map +1 -0
  22. package/src/update110700/index.ts +47 -0
  23. package/src/update110700/index_spec.d.ts +1 -0
  24. package/src/update110700/index_spec.js +108 -0
  25. package/src/update110700/index_spec.js.map +1 -0
  26. package/src/update110700/index_spec.ts +122 -0
  27. package/src/update110700/schema.json +23 -0
  28. package/src/update110800/index.d.ts +2 -0
  29. package/src/update110800/index.js +32 -0
  30. package/src/update110800/index.js.map +1 -0
  31. package/src/update110800/index.ts +33 -0
  32. package/src/update110800/index_spec.d.ts +1 -0
  33. package/src/update110800/index_spec.js +70 -0
  34. package/src/update110800/index_spec.js.map +1 -0
  35. package/src/update110800/index_spec.ts +75 -0
  36. package/src/update110800/schema.json +23 -0
  37. package/src/update110900/index.d.ts +4 -0
  38. package/src/update110900/index.js +111 -0
  39. package/src/update110900/index.js.map +1 -0
  40. package/src/update110900/index.ts +123 -0
  41. package/src/update110900/index_spec.d.ts +1 -0
  42. package/src/update110900/index_spec.js +311 -0
  43. package/src/update110900/index_spec.js.map +1 -0
  44. package/src/update110900/index_spec.ts +341 -0
  45. package/src/update110900/schema.json +23 -0
  46. package/src/utility/dependencies.d.ts +6 -0
  47. package/src/utility/dependencies.js +22 -1
  48. package/src/utility/dependencies.js.map +1 -1
  49. package/src/utility/dependencies.ts +26 -0
@@ -0,0 +1,123 @@
1
+ import { chain, Rule, SchematicContext, Tree } from '@angular-devkit/schematics';
2
+ import * as chalk from 'chalk';
3
+ import { applyEdits, findNodeAtLocation, modify } from 'jsonc-parser';
4
+ import { updateDependency } from '../utility/dependencies';
5
+ import { jsonFormattingOptions, readJson, readJsonAsString } from '../utility/json';
6
+ import { logError, logInfo, logWarn } from '../utility/logging';
7
+ import { finish, messageInfoRule, messageSuccessRule } from '../utility/util';
8
+
9
+ export function update110900(options: any): Rule {
10
+ return (tree: Tree, context: SchematicContext) => {
11
+ const fontawesomeCss = {
12
+ glob: 'all.css',
13
+ input: './node_modules/@fortawesome/fontawesome-free/css',
14
+ output: './assets/icons/fontawesome/css'
15
+ };
16
+ const fontawesomeIcons = {
17
+ glob: '*(*.eot|*.ttf|*.woff|*.woff2)',
18
+ input: './node_modules/@fortawesome/fontawesome-free/webfonts',
19
+ output: './assets/icons/fontawesome/webfonts'
20
+ };
21
+ const materialCss = {
22
+ glob: 'material-design-icons.css',
23
+ input: './node_modules/material-design-icons-iconfont/dist',
24
+ output: './assets/icons/material-icons'
25
+ };
26
+ const materialIcons = {
27
+ glob: '*(*.eot|*.ttf|*.woff|*.woff2)',
28
+ input: './node_modules/material-design-icons-iconfont/dist/fonts',
29
+ output: './assets/icons/material-icons/fonts'
30
+ };
31
+
32
+ return chain([
33
+ messageInfoRule(`Die LUX-Components werden auf die Version 11.9.0 aktualisiert...`),
34
+
35
+ messageInfoRule(`Die Datei "package.json" wird angepasst...`),
36
+ updateDependencies(),
37
+ messageSuccessRule(`Die Datei "package.json" wurde angepasst.`),
38
+
39
+ messageInfoRule(`Die Datei "angular.json" wird angepasst...`),
40
+ addIconAssets(options, materialIcons),
41
+ addIconAssets(options, materialCss),
42
+ addIconAssets(options, fontawesomeIcons),
43
+ addIconAssets(options, fontawesomeCss),
44
+ messageSuccessRule(`Die Datei "angular.json" wurde angepasst.`),
45
+
46
+ messageInfoRule(`Die Datei "index.html" wird angepasst...`),
47
+ addIconsToIndexHtml(options),
48
+ messageSuccessRule(`Die Datei "index.html" wurde angepasst.`),
49
+
50
+ messageSuccessRule(`Die LUX-Components wurden auf die Version 11.9.0 aktualisiert.`),
51
+ finish(`${chalk.yellowBright('Fertig!')}`)
52
+ ]);
53
+ };
54
+
55
+ function updateDependencies() {
56
+ return (tree: Tree, _context: SchematicContext) => {
57
+ updateDependency(tree, '@ihk-gfi/lux-components', '11.9.0');
58
+ updateDependency(tree, '@ihk-gfi/lux-components-theme', '11.11.0');
59
+
60
+ return tree;
61
+ };
62
+ }
63
+ }
64
+
65
+ export function addIconsToIndexHtml(options: any): Rule {
66
+ return chain([
67
+ (tree: Tree, context: SchematicContext) => {
68
+ const newValue =
69
+ '<link rel="stylesheet" href="assets/icons/fontawesome/css/all.css">\n' +
70
+ '<link rel="stylesheet" href="assets/icons/material-icons/material-design-icons.css">\n' +
71
+ '<link rel="icon"';
72
+
73
+ const errorMessage =
74
+ 'Die folgenden Einträge konnten NICHT automatisiert eingetragen werden. Diese müssen jetzt manuell im <head>-Tag nachgetragen werden: ' +
75
+ '\n' +
76
+ newValue.replace('<link rel="icon"', '');
77
+
78
+ const filePath = 'src/index.html';
79
+ if (tree.read(filePath)) {
80
+ const content = (tree.read(filePath) as Buffer).toString();
81
+ const modifiedContent = content.replace('<link rel="icon"', newValue);
82
+
83
+ if (modifiedContent !== content) {
84
+ logInfo('Folgender Einträge wurden ergänzt: ' + newValue);
85
+ tree.overwrite(filePath, modifiedContent);
86
+ } else {
87
+ logError(errorMessage);
88
+ }
89
+ } else {
90
+ logError(errorMessage);
91
+ }
92
+ }
93
+ ]);
94
+ }
95
+
96
+ export function addIconAssets(options: any, value: any): Rule {
97
+ return (tree: Tree, context: SchematicContext) => {
98
+ const filePath = '/angular.json';
99
+
100
+ let contentAsNode = readJson(tree, filePath);
101
+ const buildAssetsNode = findNodeAtLocation(contentAsNode, [
102
+ 'projects',
103
+ options.project,
104
+ 'architect',
105
+ 'build',
106
+ 'options',
107
+ 'assets'
108
+ ]);
109
+ if (buildAssetsNode) {
110
+ const angularJson = readJsonAsString(tree, filePath);
111
+ const edits = modify(
112
+ angularJson,
113
+ ['projects', options.project, 'architect', 'build', 'options', 'assets', 0],
114
+ value,
115
+ { formattingOptions: jsonFormattingOptions, isArrayInsertion: true }
116
+ );
117
+ if (edits) {
118
+ tree.overwrite(filePath, applyEdits(angularJson, edits));
119
+ logInfo('Folgender Eintrag wurden ergänzt: ' + JSON.stringify(value));
120
+ }
121
+ }
122
+ };
123
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const schematics_1 = require("@angular-devkit/schematics");
13
+ const testing_1 = require("@angular-devkit/schematics/testing");
14
+ const path = require("path");
15
+ const rxjs_1 = require("rxjs");
16
+ const dependencies_1 = require("../utility/dependencies");
17
+ const test_1 = require("../utility/test");
18
+ const util_1 = require("../utility/util");
19
+ const index_1 = require("./index");
20
+ const collectionPath = path.join(__dirname, '../collection.json');
21
+ describe('update110900', () => {
22
+ let appTree;
23
+ let runner;
24
+ let context;
25
+ const testOptions = {};
26
+ beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
27
+ runner = new testing_1.SchematicTestRunner('schematics', collectionPath);
28
+ appTree = yield runner.runExternalSchematicAsync('@schematics/angular', 'workspace', test_1.workspaceOptions).toPromise();
29
+ appTree = yield runner
30
+ .runExternalSchematicAsync('@schematics/angular', 'application', test_1.appOptions, appTree)
31
+ .toPromise();
32
+ util_1.UtilConfig.defaultWaitMS = 0;
33
+ const collection = runner.engine.createCollection(collectionPath);
34
+ const schematic = runner.engine.createSchematic('update-11.9.0', collection);
35
+ context = runner.engine.createContext(schematic);
36
+ testOptions.project = test_1.appOptions.name;
37
+ testOptions.path = test_1.workspaceOptions.newProjectRoot + '/' + test_1.appOptions.name;
38
+ testOptions.verbose = true;
39
+ }));
40
+ describe('[Rule] update110900', () => {
41
+ it('Sollte die Abhängigkeiten aktualisieren', (done) => {
42
+ appTree.overwrite('/package.json', `
43
+ {
44
+ "name": "Lorem ipsum",
45
+ "version": "0.0.32",
46
+ "scripts": {
47
+ "build": "tsc -p tsconfig.json",
48
+ "test": "npm run build && jasmine src/**/*_spec.js"
49
+ },
50
+ "dependencies": {
51
+ "@ihk-gfi/lux-components": "11.0.0",
52
+ },
53
+ "devDependencies": {
54
+ "@angular-devkit/build-angular": "0.1102.14"
55
+ }
56
+ }
57
+ `);
58
+ appTree.overwrite('/angular.json', `{
59
+ "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
60
+ "version": 1,
61
+ "newProjectRoot": "projects",
62
+ "projects": {
63
+ "bar": {
64
+ "root": "",
65
+ "sourceRoot": "src",
66
+ "projectType": "application",
67
+ "i18n": {
68
+ "sourceLocale": {
69
+ "code": "de",
70
+ "baseHref": "/"
71
+ },
72
+ "locales": {
73
+ "en": "src/locale/messages.en.xlf"
74
+ }
75
+ },
76
+ "architect": {
77
+ "build": {
78
+ "builder": "ngx-build-plus:browser",
79
+ "options": {
80
+ "outputPath": "dist",
81
+ "index": "src/index.html",
82
+ "main": "src/main.ts",
83
+ "tsConfig": "src/tsconfig.app.json",
84
+ "polyfills": "src/polyfills.ts",
85
+ "assets": [
86
+ "src/assets",
87
+ {
88
+ "glob": "*(*min.css|*min.css.map)",
89
+ "input": "./node_modules/@ihk-gfi/lux-components-theme/prebuilt-themes",
90
+ "output": "./assets/themes"
91
+ }
92
+ ],
93
+ "styles": [
94
+ "src/styles.scss"
95
+ ],
96
+ "scripts": [
97
+ {
98
+ "bundleName": "polyfill-webcomp",
99
+ "input": "node_modules/@webcomponents/webcomponentsjs/bundles/webcomponents-sd-ce-pf.js"
100
+ },
101
+ {
102
+ "bundleName": "polyfill-webcomp-es5",
103
+ "input": "node_modules/@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js"
104
+ }
105
+ ],
106
+ "allowedCommonJsDependencies": [
107
+ "hammerjs",
108
+ "ng2-pdf-viewer"
109
+ ],
110
+ "localize": [
111
+ "de"
112
+ ],
113
+ "i18nMissingTranslation": "error",
114
+ "extraWebpackConfig": "webpack.config.js"
115
+ },
116
+ "configurations": {
117
+ "production": {
118
+ "budgets": [
119
+ {
120
+ "type": "anyComponentStyle",
121
+ "maximumWarning": "6kb"
122
+ }
123
+ ],
124
+ "optimization": true,
125
+ "outputHashing": "all",
126
+ "sourceMap": false,
127
+ "namedChunks": false,
128
+ "aot": true,
129
+ "extractLicenses": true,
130
+ "vendorChunk": false,
131
+ "buildOptimizer": true,
132
+ "fileReplacements": [
133
+ {
134
+ "replace": "src/environments/environment.ts",
135
+ "with": "src/environments/environment.prod.ts"
136
+ }
137
+ ]
138
+ },
139
+ "es5": {
140
+ "budgets": [
141
+ {
142
+ "type": "anyComponentStyle",
143
+ "maximumWarning": "6kb"
144
+ }
145
+ ],
146
+ "tsConfig": "src/tsconfig.app.ie.json"
147
+ },
148
+ "en": {
149
+ "localize": [
150
+ "en"
151
+ ],
152
+ "aot": true,
153
+ "outputPath": "dist/en",
154
+ "i18nMissingTranslation": "error"
155
+ }
156
+ }
157
+ },
158
+ "serve": {
159
+ "builder": "ngx-build-plus:dev-server",
160
+ "options": {
161
+ "browserTarget": "bar:build"
162
+ },
163
+ "configurations": {
164
+ "production": {
165
+ "browserTarget": "bar:build:production"
166
+ },
167
+ "es5": {
168
+ "browserTarget": "bar:build:es5"
169
+ },
170
+ "en": {
171
+ "browserTarget": "bar:build:en"
172
+ }
173
+ }
174
+ },
175
+ "extract-i18n": {
176
+ "builder": "@angular-devkit/build-angular:extract-i18n",
177
+ "options": {
178
+ "browserTarget": "bar:build"
179
+ }
180
+ },
181
+ "test": {
182
+ "builder": "ngx-build-plus:karma",
183
+ "options": {
184
+ "main": "src/test.ts",
185
+ "karmaConfig": "./karma.conf.js",
186
+ "polyfills": "src/polyfills.ts",
187
+ "tsConfig": "src/tsconfig.spec.json",
188
+ "scripts": [],
189
+ "styles": [
190
+ "src/styles.scss"
191
+ ],
192
+ "assets": [
193
+ "src/assets",
194
+ {
195
+ "glob": "**/*",
196
+ "input": "./node_modules/pdfjs-dist/cmaps/",
197
+ "output": "./assets/cmaps"
198
+ },
199
+ {
200
+ "glob": "*.css",
201
+ "input": "./node_modules/@ihk-gfi/lux-components-theme/prebuilt-themes",
202
+ "output": "./assets/themes"
203
+ }
204
+ ]
205
+ }
206
+ },
207
+ "lint": {
208
+ "builder": "@angular-eslint/builder:lint",
209
+ "options": {
210
+ "lintFilePatterns": [
211
+ "src/**/*.ts",
212
+ "src/**/*.html"
213
+ ]
214
+ }
215
+ }
216
+ }
217
+ },
218
+ "bar-e2e": {
219
+ "root": "e2e",
220
+ "sourceRoot": "e2e",
221
+ "projectType": "application",
222
+ "architect": {
223
+ "e2e": {
224
+ "builder": "@angular-devkit/build-angular:protractor",
225
+ "options": {
226
+ "protractorConfig": "./protractor.conf.js",
227
+ "devServerTarget": "bar:serve"
228
+ }
229
+ }
230
+ }
231
+ }
232
+ },
233
+ "defaultProject": "bar",
234
+ "cli": {
235
+ "defaultCollection": "@angular-eslint/schematics"
236
+ },
237
+ "schematics": {
238
+ "@schematics/angular:component": {
239
+ "prefix": "bp",
240
+ "style": "scss"
241
+ },
242
+ "@schematics/angular:directive": {
243
+ "prefix": "bp"
244
+ }
245
+ }
246
+ }
247
+ `);
248
+ schematics_1.callRule(index_1.update110900(testOptions), rxjs_1.of(appTree), context).subscribe((success) => {
249
+ var _a;
250
+ expect(dependencies_1.getPackageJsonDependency(appTree, '@ihk-gfi/lux-components').version).toEqual('11.9.0');
251
+ expect(dependencies_1.getPackageJsonDependency(appTree, '@ihk-gfi/lux-components-theme').version).toEqual('11.11.0');
252
+ const angularJson = (_a = success.read('/angular.json')) === null || _a === void 0 ? void 0 : _a.toString();
253
+ expect(angularJson).toContain(`{
254
+ "glob": "all.css",
255
+ "input": "./node_modules/@fortawesome/fontawesome-free/css",
256
+ "output": "./assets/icons/fontawesome/css"
257
+ },`);
258
+ expect(angularJson).toContain(`{
259
+ "glob": "*(*.eot|*.ttf|*.woff|*.woff2)",
260
+ "input": "./node_modules/@fortawesome/fontawesome-free/webfonts",
261
+ "output": "./assets/icons/fontawesome/webfonts"
262
+ },`);
263
+ expect(angularJson).toContain(`{
264
+ "glob": "material-design-icons.css",
265
+ "input": "./node_modules/material-design-icons-iconfont/dist",
266
+ "output": "./assets/icons/material-icons"
267
+ },`);
268
+ expect(angularJson).toContain(`{
269
+ "glob": "*(*.eot|*.ttf|*.woff|*.woff2)",
270
+ "input": "./node_modules/material-design-icons-iconfont/dist/fonts",
271
+ "output": "./assets/icons/material-icons/fonts"
272
+ },`);
273
+ done();
274
+ }, (reason) => expect(reason).toBeUndefined());
275
+ });
276
+ });
277
+ describe('[Rule] addIconsToIndexHtml', () => {
278
+ it('Sollte die Datei "index.html" angepasst haben', (done) => {
279
+ appTree.create('src/index.html', `
280
+ <!doctype html>
281
+ <html lang="de">
282
+ <head>
283
+ <meta charset="utf-8">
284
+ <title>LUX Blueprint</title>
285
+ <base href="/">
286
+ <meta name="viewport" content="width=device-width, initial-scale=1">
287
+ <link rel="icon" type="image/x-icon" href="favicon.ico">
288
+ </head>
289
+ <body style="margin: 0">
290
+ <noscript>
291
+ <div id="no-js" class="lux-no-js">
292
+ <p><b>Achtung, Javascript ist deaktiviert.</b></p>
293
+ <p>Bitte aktivieren Sie Javascript in Ihrem Browser, damit die Applikation funktionsf&auml;hig ist.</p>
294
+ </div>
295
+ </noscript>
296
+ <app-root></app-root>
297
+ </body>
298
+ </html>
299
+ `);
300
+ schematics_1.callRule(index_1.addIconsToIndexHtml(testOptions), rxjs_1.of(appTree), context).subscribe((success) => {
301
+ var _a;
302
+ const content = (_a = success.read('src/index.html')) === null || _a === void 0 ? void 0 : _a.toString();
303
+ expect(content).toContain('<link rel="icon" type="image/x-icon" href="favicon.ico">');
304
+ expect(content).toContain('<link rel="stylesheet" href="assets/icons/material-icons/material-design-icons.css">');
305
+ expect(content).toContain('<link rel="stylesheet" href="assets/icons/fontawesome/css/all.css">');
306
+ done();
307
+ }, (reason) => expect(reason).toBeUndefined());
308
+ });
309
+ });
310
+ });
311
+ //# sourceMappingURL=index_spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index_spec.js","sourceRoot":"","sources":["index_spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,2DAAwE;AACxE,gEAAuF;AACvF,6BAA6B;AAC7B,+BAA0C;AAC1C,0DAAmE;AACnE,0CAA+D;AAC/D,0CAA6C;AAC7C,mCAA4D;AAE5D,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAElE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,OAAqB,CAAC;IAC1B,IAAI,MAA2B,CAAC;IAChC,IAAI,OAAyB,CAAC;IAE9B,MAAM,WAAW,GAAQ,EAAE,CAAC;IAE5B,UAAU,CAAC,GAAS,EAAE;QACpB,MAAM,GAAG,IAAI,6BAAmB,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAE/D,OAAO,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,qBAAqB,EAAE,WAAW,EAAE,uBAAgB,CAAC,CAAC,SAAS,EAAE,CAAC;QACnH,OAAO,GAAG,MAAM,MAAM;aACnB,yBAAyB,CAAC,qBAAqB,EAAE,aAAa,EAAE,iBAAU,EAAE,OAAO,CAAC;aACpF,SAAS,EAAE,CAAC;QAEf,iBAAU,CAAC,aAAa,GAAG,CAAC,CAAC;QAE7B,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAC7E,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAEjD,WAAW,CAAC,OAAO,GAAG,iBAAU,CAAC,IAAI,CAAC;QACtC,WAAW,CAAC,IAAI,GAAG,uBAAgB,CAAC,cAAc,GAAG,GAAG,GAAG,iBAAU,CAAC,IAAI,CAAC;QAC3E,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;IAC7B,CAAC,CAAA,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,yCAAyC,EAAE,CAAC,IAAI,EAAE,EAAE;YACrD,OAAO,CAAC,SAAS,CACf,eAAe,EACf;;;;;;;;;;;;;;;SAeC,CACF,CAAC;YAEF,OAAO,CAAC,SAAS,CACf,eAAe,EACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA6LC,CACF,CAAC;YAEF,qBAAQ,CAAC,oBAAY,CAAC,WAAW,CAAC,EAAE,SAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,SAAS,CAC3E,CAAC,OAAO,EAAE,EAAE;;gBACV,MAAM,CAAC,uCAAwB,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC/F,MAAM,CAAC,uCAAwB,CAAC,OAAO,EAAE,+BAA+B,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAEtG,MAAM,WAAW,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,0CAAE,QAAQ,EAAE,CAAC;gBAC9D,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAC3B;;;;iBAIK,CACN,CAAC;gBAEF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAC3B;;;;iBAIK,CACN,CAAC;gBAEF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAC3B;;;;iBAIK,CACN,CAAC;gBAEF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAC3B;;;;iBAIK,CACN,CAAC;gBAEF,IAAI,EAAE,CAAC;YACT,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAC3C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,+CAA+C,EAAE,CAAC,IAAI,EAAE,EAAE;YAC3D,OAAO,CAAC,MAAM,CACZ,gBAAgB,EAChB;;;;;;;;;;;;;;;;;;;;SAoBC,CACF,CAAC;YAGF,qBAAQ,CAAC,2BAAmB,CAAC,WAAW,CAAC,EAAE,SAAY,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,SAAS,CAClF,CAAC,OAAO,EAAE,EAAE;;gBACV,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,0CAAE,QAAQ,EAAE,CAAC;gBAE3D,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC;gBACtF,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,sFAAsF,CAAC,CAAC;gBAClH,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qEAAqE,CAAC,CAAC;gBAEjG,IAAI,EAAE,CAAC;YACT,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAC3C,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}