From 5c29d65754a869f5e8949a370c02912c4f1da5a1 Mon Sep 17 00:00:00 2001 From: risadmin_prod Date: Mon, 16 Sep 2024 05:00:58 +0000 Subject: [PATCH] base_project --- .../authsec_node/Backend/.DS_Store | Bin 0 -> 6148 bytes pro118njsac-back-b/authsec_node/Backend/.env | 21 + .../Functions/buildExtensionByFormCode.js | 59 + .../Backend/Functions/generateRandomHash.js | 13 + .../authsec_node/Backend/README.md | 1 + .../Backend/api/BuilderService.js | 449 + .../Backend/api/cns.controller.js | 2758 +++ .../authsec_node/Backend/api/controller.js | 389 + .../authsec_node/Backend/api/output.json | 68 + .../Backend/api/user.controller.js | 176 + .../authsec_node/Backend/app.js | 52 + .../Backend/auth/token_validation.js | 28 + .../authsec_node/Backend/config/database.js | 25 + .../authsec_node/Backend/dockerize.sh | 32 + .../Backend/listBuilder/controller.js | 109 + .../Backend/logs/sysadmin/2024-07-27.log | 3 + .../Backend/logs/sysadmin/2024-09-03.log | 54 + .../Backend/logs/sysadmin/2024-09-04.log | 46 + .../Backend/logs/sysadmin/2024-09-07.log | 58 + .../Backend/logs/sysadmin/2024-09-10.log | 54 + .../Backend/middleware/authenticateJWT.js | 38 + .../Backend/middleware/uploadMiddleware.js | 7 + .../Backend/middleware/userLogger.js | 31 + .../authsec_node/Backend/package-lock.json | 2056 +++ .../authsec_node/Backend/package.json | 28 + .../authsec_node/Backend/routes/cns.router.js | 365 + .../authsec_node/Backend/routes/router.js | 46 + .../Backend/routes/user.router.js | 31 + .../Backend/routes/user.routes.js | 11 + ...ofile-pic-10007658-2024-01-09T11-04-01.png | Bin 0 -> 67057 bytes ...ofile-pic-10007658-2024-01-09T11-11-24.png | Bin 0 -> 40318 bytes .../authsec_mysql/mysql/loginandmenu.sql | 569 + .../authsec_angular/.gitignore | 3 + .../angular-clarity-master/.editorconfig | 16 + .../.github/workflows/blank.yml | 17 + .../angular-clarity-master/.gitignore | 42 + .../.vscode/settings.json | 2 + .../frontend/angular-clarity-master/README.md | 52 + .../angular-clarity-master/SECURITY.md | 21 + .../angular-clarity-master/angular.json | 134 + .../angular-clarity-master/browserslist | 12 + .../e2e/protractor.conf.js | 32 + .../e2e/src/app.e2e-spec.ts | 23 + .../angular-clarity-master/e2e/src/app.po.ts | 11 + .../angular-clarity-master/e2e/tsconfig.json | 13 + .../angular-clarity-master/karma.conf.js | 32 + .../angular-clarity-master/package-lock.json | 14670 ++++++++++++++++ .../angular-clarity-master/package.json | 87 + .../src/app/app-config.ts | 42 + .../src/app/app-routing.module.ts | 14 + .../src/app/app.component.html | 1 + .../src/app/app.component.scss | 0 .../src/app/app.component.spec.ts | 35 + .../src/app/app.component.ts | 10 + .../src/app/app.module.ts | 79 + .../src/app/global.model.ts | 169 + .../src/app/models/admin/role.ts | 4 + .../src/app/models/admin/systemparameter.ts | 30 + .../src/app/models/admin/user.ts | 14 + .../src/app/models/admin/userdepartment.ts | 12 + .../src/app/models/admin/usergrpma.ts | 10 + .../src/app/models/admin/usermaintaince.ts | 38 + .../src/app/models/admin/userposition.ts | 9 + .../app/models/builder/ActiveTechnology.ts | 4 + .../src/app/models/builder/AdhocParam.ts | 13 + .../src/app/models/builder/Audit.ts | 9 + .../app/models/builder/Bcf_TechnologyStack.ts | 9 + .../src/app/models/builder/ColumnList.ts | 4 + .../src/app/models/builder/DateParam.ts | 11 + .../src/app/models/builder/FileData.ts | 10 + .../src/app/models/builder/FileDetails.ts | 4 + .../src/app/models/builder/Module_Setup.ts | 14 + .../src/app/models/builder/Project_setup.ts | 22 + .../src/app/models/builder/RbColumns.ts | 12 + .../src/app/models/builder/RbTables.ts | 7 + .../src/app/models/builder/ReportBuilder.ts | 8 + .../app/models/builder/ReportBuilderQuery.ts | 4 + .../builder/Rn_Cff_ActionBuilder_Header.ts | 14 + .../builder/Rn_Cff_ActionBuilder_Line.ts | 18 + .../src/app/models/builder/Rn_Fb_Header.ts | 22 + .../src/app/models/builder/Rn_Fb_Lines.ts | 49 + .../src/app/models/builder/Rn_Main_Menu.ts | 17 + .../src/app/models/builder/Rn_Sub_Menu.ts | 16 + .../src/app/models/builder/StdParam.ts | 12 + .../src/app/models/builder/WhereParam.ts | 14 + .../src/app/models/builder/WireFrame.ts | 29 + .../src/app/models/builder/dashboard.ts | 114 + .../src/app/models/builder/gitfile.ts | 9 + .../src/app/models/builder/rptBuilder.ts | 14 + .../src/app/models/builder/suregit.ts | 9 + .../src/app/models/builder/surename.ts | 9 + .../src/app/models/builder/surestar.ts | 9 + .../src/app/models/builder/webpagebuilder.ts | 55 + .../models/fnd/Bcf_Exception_Rule_Library .ts | 10 + .../src/app/models/fnd/Bcf_Extractor.ts | 17 + .../app/models/fnd/Bcf_Extractor_Params.ts | 20 + .../src/app/models/fnd/Bcf_Rule_Library.ts | 16 + .../src/app/models/fnd/BiDashHeader.ts | 13 + .../src/app/models/fnd/BiDashLine.ts | 17 + .../src/app/models/fnd/BiWidget.ts | 10 + .../src/app/models/fnd/DynamicForm.ts | 37 + .../src/app/models/fnd/ExtensionField.ts | 47 + .../src/app/models/fnd/Mapping.ts | 4 + .../models/fnd/Rn_Forms_Component_Setup.ts | 12 + .../src/app/models/fnd/Rn_Forms_Setup.ts | 11 + .../src/app/models/fnd/RuleCopy.ts | 20 + .../src/app/models/fnd/Studentadd.ts | 10 + .../src/app/models/fnd/TableList.ts | 4 + .../src/app/models/fnd/ValidationError.ts | 4 + .../src/app/models/fnd/book.ts | 10 + .../src/app/models/fnd/department.ts | 10 + .../src/app/models/fnd/health_checkup.ts | 10 + .../src/app/models/fnd/play.ts | 9 + .../src/app/models/fnd/table-setup.ts | 4 + .../src/app/models/fnd/university.ts | 11 + .../login/about-work/about-work.component.css | 45 + .../about-work/about-work.component.css.map | 1 + .../about-work/about-work.component.html | 261 + .../about-work/about-work.component.scss | 122 + .../about-work/about-work.component.spec.ts | 25 + .../login/about-work/about-work.component.ts | 301 + .../login/about-work/customer.service.ts | 152 + .../login/addguest/addguest.component.html | 142 + .../login/addguest/addguest.component.scss | 86 + .../login/addguest/addguest.component.spec.ts | 25 + .../login/addguest/addguest.component.ts | 68 + .../emailverification.component.css | 95 + .../emailverification.component.css.map | 1 + .../emailverification.component.html | 78 + .../emailverification.component.scss | 121 + .../emailverification.component.spec.ts | 25 + .../emailverification.component.ts | 195 + .../forgotpassword.component.html | 38 + .../forgotpassword.component.scss | 75 + .../forgotpassword.component.spec.ts | 25 + .../forgotpassword.component.ts | 67 + .../forgotresetpassword.component.html | 50 + .../forgotresetpassword.component.scss | 83 + .../forgotresetpassword.component.spec.ts | 25 + .../forgotresetpassword.component.ts | 103 + .../forgotresetpassword1.component.html | 142 + .../forgotresetpassword1.component.scss | 86 + .../forgotresetpassword1.component.spec.ts | 25 + .../forgotresetpassword1.component.ts | 67 + .../login-page/login-page.component.html | 146 + .../login-page/login-page.component.scss | 23 + .../login-page/login-page.component.spec.ts | 25 + .../login/login-page/login-page.component.ts | 108 + .../login/login-page/login_environment.ts | 15 + .../app/modules/login/login-routing.module.ts | 27 + .../src/app/modules/login/login.module.ts | 30 + .../src/app/modules/logo/logo.component.html | 26 + .../src/app/modules/logo/logo.component.scss | 0 .../src/app/modules/logo/logo.component.ts | 17 + .../modules/main/BuilderComponents/test.html | 20 + .../modules/main/about/about.component.html | 13 + .../modules/main/about/about.component.scss | 15 + .../main/about/about.component.spec.ts | 25 + .../app/modules/main/about/about.component.ts | 14 + .../main/admin/about/about.component.html | 14 + .../main/admin/about/about.component.scss | 0 .../main/admin/about/about.component.spec.ts | 25 + .../main/admin/about/about.component.ts | 14 + .../accesstype/accesstype.component.html | 213 + .../accesstype/accesstype.component.scss | 62 + .../accesstype/accesstype.component.spec.ts | 25 + .../admin/accesstype/accesstype.component.ts | 182 + .../documentmaster.component.html | 128 + .../documentmaster.component.scss | 1 + .../documentmaster.component.spec.ts | 25 + .../documentmaster.component.ts | 30 + .../documentreference.component.html | 180 + .../documentreference.component.scss | 1 + .../documentreference.component.spec.ts | 25 + .../documentreference.component.ts | 30 + .../documentstructure.component.html | 56 + .../documentstructure.component.scss | 0 .../documentstructure.component.spec.ts | 25 + .../documentstructure.component.ts | 15 + .../all/all-menu-group.component.html | 1057 ++ .../all/all-menu-group.component.scss | 65 + .../all/all-menu-group.component.ts | 506 + .../edit/edit-menu-group.component.html | 99 + .../edit/edit-menu-group.component.ts | 97 + .../menu-group/edit/edit-menu-group.scss | 51 + .../menu-group/menu-group.component.html | 1 + .../menu-group/menu-group.component.scss | 0 .../admin/menu-group/menu-group.component.ts | 16 + .../readonly-menu-group.component.html | 94 + .../readonly-menu-group.component.ts | 44 + .../read-only/readonly-menu-group.scss | 23 + .../add-menur/add-menur.component.html | 1 + .../add-menur/add-menur.component.scss | 0 .../add-menur/add-menur.component.spec.ts | 25 + .../add-menur/add-menur.component.ts | 15 + .../all-menur/all-menur.component.html | 203 + .../all-menur/all-menur.component.scss | 14 + .../all-menur/all-menur.component.spec.ts | 25 + .../all-menur/all-menur.component.ts | 187 + .../edit-menur/edit-menur.component.html | 1 + .../edit-menur/edit-menur.component.scss | 0 .../edit-menur/edit-menur.component.spec.ts | 25 + .../edit-menur/edit-menur.component.ts | 15 + .../menu-register.component.html | 1 + .../menu-register.component.scss | 0 .../menu-register.component.spec.ts | 25 + .../menu-register/menu-register.component.ts | 15 + .../readonly-menur.component.html | 1 + .../readonly-menur.component.scss | 0 .../readonly-menur.component.spec.ts | 25 + .../readonly-menur.component.ts | 15 + .../menuaccesscontrol.component.html | 278 + .../menuaccesscontrol.component.scss | 99 + .../menuaccesscontrol.component.spec.ts | 25 + .../menuaccesscontrol.component.ts | 232 + .../menumaintance.component.html | 412 + .../menumaintance.component.scss | 62 + .../menumaintance.component.spec.ts | 25 + .../menumaintance/menumaintance.component.ts | 207 + .../main/admin/modules/modules.component.html | 146 + .../main/admin/modules/modules.component.scss | 62 + .../admin/modules/modules.component.spec.ts | 25 + .../main/admin/modules/modules.component.ts | 116 + .../password-reset.component.html | 43 + .../password-reset.component.scss | 83 + .../password-reset.component.spec.ts | 25 + .../password-reset.component.ts | 109 + .../profile-setting.component.html | 266 + .../profile-setting.component.scss | 10 + .../profile-setting.component.spec.ts | 25 + .../profile-setting.component.ts | 223 + .../sessionlogger.component.html | 99 + .../sessionlogger.component.scss | 4 + .../sessionlogger.component.spec.ts | 25 + .../sessionlogger/sessionlogger.component.ts | 69 + .../main/admin/submenu/submenu.component.html | 250 + .../main/admin/submenu/submenu.component.scss | 62 + .../admin/submenu/submenu.component.spec.ts | 25 + .../main/admin/submenu/submenu.component.ts | 138 + .../systemparameters.component.html | 678 + .../systemparameters.component.scss | 86 + .../systemparameters.component.spec.ts | 25 + .../systemparameters.component.ts | 114 + .../user-registration.component.html | 42 + .../user-registration.component.scss | 143 + .../user-registration.component.spec.ts | 25 + .../user-registration.component.ts | 93 + .../main/admin/user/user.component.html | 606 + .../main/admin/user/user.component.scss | 40 + .../main/admin/user/user.component.spec.ts | 25 + .../modules/main/admin/user/user.component.ts | 369 + .../usergrpmaintenance.component.html | 217 + .../usergrpmaintenance.component.scss | 8 + .../usergrpmaintenance.component.spec.ts | 25 + .../usergrpmaintenance.component.ts | 199 + .../usermaintance.component.html | 124 + .../usermaintance.component.scss | 4 + .../usermaintance.component.spec.ts | 25 + .../usermaintance/usermaintance.component.ts | 155 + .../usermaintanceadd.component.html | 319 + .../usermaintanceadd.component.scss | 8 + .../usermaintanceadd.component.spec.ts | 25 + .../usermaintanceadd.component.ts | 198 + .../usermaintanceedit.component.html | 348 + .../usermaintanceedit.component.scss | 1 + .../usermaintanceedit.component.spec.ts | 25 + .../usermaintanceedit.component.ts | 133 + .../addnewdash/addnewdash.component.html | 40 + .../addnewdash/addnewdash.component.scss | 81 + .../addnewdash/addnewdash.component.spec.ts | 21 + .../addnewdash/addnewdash.component.ts | 125 + .../allnewdash/allnewdash.component.html | 145 + .../allnewdash/allnewdash.component.scss | 83 + .../allnewdash/allnewdash.component.spec.ts | 21 + .../allnewdash/allnewdash.component.ts | 124 + .../dashboardnew/dashboardnew.component.html | 1 + .../dashboardnew/dashboardnew.component.scss | 0 .../dashboardnew.component.spec.ts | 21 + .../dashboardnew/dashboardnew.component.ts | 10 + .../editformnewdash.component.html | 54 + .../editformnewdash.component.scss | 81 + .../editformnewdash.component.spec.ts | 21 + .../editformnewdash.component.ts | 93 + .../editnewdash/editnewdash.component.html | 198 + .../editnewdash/editnewdash.component.scss | 51 + .../editnewdash/editnewdash.component.spec.ts | 21 + .../editnewdash/editnewdash.component.ts | 617 + .../gadgets/bar-chart/bar-chart.component.css | 1 + .../bar-chart/bar-chart.component.css.map | 1 + .../bar-chart/bar-chart.component.html | 9 + .../bar-chart/bar-chart.component.scss | 0 .../bar-chart/bar-chart.component.spec.ts | 25 + .../gadgets/bar-chart/bar-chart.component.ts | 33 + .../bubble-chart/bubble-chart.component.css | 1 + .../bubble-chart.component.css.map | 1 + .../bubble-chart/bubble-chart.component.html | 9 + .../bubble-chart/bubble-chart.component.scss | 0 .../bubble-chart.component.spec.ts | 25 + .../bubble-chart/bubble-chart.component.ts | 98 + .../doughnut-chart.component.css | 1 + .../doughnut-chart.component.css.map | 1 + .../doughnut-chart.component.html | 8 + .../doughnut-chart.component.scss | 0 .../doughnut-chart.component.spec.ts | 25 + .../doughnut-chart.component.ts | 30 + .../dynamic-chart/dynamic-chart.component.css | 1 + .../dynamic-chart.component.css.map | 1 + .../dynamic-chart.component.html | 10 + .../dynamic-chart.component.scss | 0 .../dynamic-chart.component.spec.ts | 25 + .../dynamic-chart/dynamic-chart.component.ts | 70 + .../financial-chart.component.css | 1 + .../financial-chart.component.css.map | 1 + .../financial-chart.component.html | 1 + .../financial-chart.component.scss | 0 .../financial-chart.component.spec.ts | 25 + .../financial-chart.component.ts | 15 + .../gadgets/grid-view/grid-view.component.css | 72 + .../grid-view/grid-view.component.css.map | 1 + .../grid-view/grid-view.component.html | 69 + .../grid-view/grid-view.component.scss | 12 + .../grid-view/grid-view.component.spec.ts | 25 + .../gadgets/grid-view/grid-view.component.ts | 54 + .../line-chart/line-chart.component.css | 1 + .../line-chart/line-chart.component.css.map | 1 + .../line-chart/line-chart.component.html | 12 + .../line-chart/line-chart.component.scss | 0 .../line-chart/line-chart.component.spec.ts | 25 + .../line-chart/line-chart.component.ts | 71 + .../gadgets/pie-chart/pie-chart.component.css | 1 + .../pie-chart/pie-chart.component.css.map | 1 + .../pie-chart/pie-chart.component.html | 9 + .../pie-chart/pie-chart.component.scss | 0 .../pie-chart/pie-chart.component.spec.ts | 25 + .../gadgets/pie-chart/pie-chart.component.ts | 27 + .../polar-chart/polar-chart.component.css | 1 + .../polar-chart/polar-chart.component.css.map | 1 + .../polar-chart/polar-chart.component.html | 10 + .../polar-chart/polar-chart.component.scss | 0 .../polar-chart/polar-chart.component.spec.ts | 25 + .../polar-chart/polar-chart.component.ts | 37 + .../radar-chart/radar-chart.component.css | 1 + .../radar-chart/radar-chart.component.css.map | 1 + .../radar-chart/radar-chart.component.html | 8 + .../radar-chart/radar-chart.component.scss | 0 .../radar-chart/radar-chart.component.spec.ts | 25 + .../radar-chart/radar-chart.component.ts | 39 + .../scatter-chart/scatter-chart.component.css | 1 + .../scatter-chart.component.css.map | 1 + .../scatter-chart.component.html | 8 + .../scatter-chart.component.scss | 0 .../scatter-chart.component.spec.ts | 25 + .../scatter-chart/scatter-chart.component.ts | 77 + .../to-do-chart/to-do-chart.component.css | 1 + .../to-do-chart/to-do-chart.component.css.map | 1 + .../to-do-chart/to-do-chart.component.html | 27 + .../to-do-chart/to-do-chart.component.scss | 0 .../to-do-chart/to-do-chart.component.spec.ts | 25 + .../to-do-chart/to-do-chart.component.ts | 27 + .../schedule/schedule.component.html | 1 + .../schedule/schedule.component.scss | 0 .../schedule/schedule.component.spec.ts | 21 + .../schedule/schedule.component.ts | 10 + .../dashboardrunner.component.html | 1 + .../dashboardrunner.component.scss | 0 .../dashboardrunner.component.spec.ts | 25 + .../dashboardrunner.component.ts | 15 + .../dashrunnerall/dashrunnerall.component.css | 90 + .../dashrunnerall.component.css.map | 1 + .../dashrunnerall.component.html | 116 + .../dashrunnerall.component.scss | 93 + .../dashrunnerall.component.spec.ts | 25 + .../dashrunnerall/dashrunnerall.component.ts | 125 + .../bar-runner/bar-runner.component.html | 38 + .../bar-runner/bar-runner.component.scss | 102 + .../bar-runner/bar-runner.component.spec.ts | 25 + .../bar-runner/bar-runner.component.ts | 101 + .../bubble-runner.component.html | 11 + .../bubble-runner.component.scss | 0 .../bubble-runner.component.spec.ts | 25 + .../bubble-runner/bubble-runner.component.ts | 140 + .../dashrunnerline/dashrunner.service.spec.ts | 16 + .../dashrunnerline/dashrunner.service.ts | 212 + .../dashrunnerline.component.html | 40 + .../dashrunnerline.component.scss | 49 + .../dashrunnerline.component.spec.ts | 25 + .../dashrunnerline.component.ts | 291 + .../doughnut-runner.component.html | 10 + .../doughnut-runner.component.scss | 76 + .../doughnut-runner.component.spec.ts | 25 + .../doughnut-runner.component.ts | 99 + .../grid-runner/grid-runner.component.html | 54 + .../grid-runner/grid-runner.component.scss | 12 + .../grid-runner/grid-runner.component.spec.ts | 25 + .../grid-runner/grid-runner.component.ts | 111 + .../line-runner/line-runner.component.html | 14 + .../line-runner/line-runner.component.scss | 76 + .../line-runner/line-runner.component.spec.ts | 25 + .../line-runner/line-runner.component.ts | 169 + .../pie-runner/pie-runner.component.html | 11 + .../pie-runner/pie-runner.component.scss | 0 .../pie-runner/pie-runner.component.spec.ts | 25 + .../pie-runner/pie-runner.component.ts | 92 + .../polar-runner/polar-runner.component.html | 10 + .../polar-runner/polar-runner.component.scss | 0 .../polar-runner.component.spec.ts | 25 + .../polar-runner/polar-runner.component.ts | 93 + .../radar-runner/radar-runner.component.html | 10 + .../radar-runner/radar-runner.component.scss | 0 .../radar-runner.component.spec.ts | 25 + .../radar-runner/radar-runner.component.ts | 102 + .../scatter-runner.component.html | 12 + .../scatter-runner.component.scss | 0 .../scatter-runner.component.spec.ts | 25 + .../scatter-runner.component.ts | 121 + .../todo-runner/todo-runner.component.html | 30 + .../todo-runner/todo-runner.component.scss | 0 .../todo-runner/todo-runner.component.spec.ts | 25 + .../todo-runner/todo-runner.component.ts | 103 + .../report-build/report-build.component.css | 1 + .../report-build.component.css.map | 1 + .../report-build/report-build.component.html | 1 + .../report-build/report-build.component.scss | 0 .../report-build.component.spec.ts | 25 + .../report-build/report-build.component.ts | 14 + .../reportbuildadd.component.css | 75 + .../reportbuildadd.component.css.map | 1 + .../reportbuildadd.component.html | 48 + .../reportbuildadd.component.scss | 80 + .../reportbuildadd.component.spec.ts | 25 + .../reportbuildadd.component.ts | 60 + .../reportbuildall.component.css | 90 + .../reportbuildall.component.css.map | 1 + .../reportbuildall.component.html | 112 + .../reportbuildall.component.scss | 83 + .../reportbuildall.component.spec.ts | 25 + .../reportbuildall.component.ts | 92 + .../reportbuildedit.component.css | 56 + .../reportbuildedit.component.css.map | 1 + .../reportbuildedit.component.html | 66 + .../reportbuildedit.component.scss | 58 + .../reportbuildedit.component.spec.ts | 25 + .../reportbuildedit.component.ts | 144 + .../reportbuildquery.component.css | 146 + .../reportbuildquery.component.css.map | 1 + .../reportbuildquery.component.html | 670 + .../reportbuildquery.component.scss | 161 + .../reportbuildquery.component.spec.ts | 25 + .../reportbuildquery.component.ts | 656 + .../report-build2.component.html | 1 + .../report-build2.component.scss | 0 .../report-build2.component.spec.ts | 25 + .../report-build2/report-build2.component.ts | 15 + .../report-build2add.component.html | 79 + .../report-build2add.component.scss | 80 + .../report-build2add.component.spec.ts | 25 + .../report-build2add.component.ts | 71 + .../report-build2all.component.html | 109 + .../report-build2all.component.scss | 83 + .../report-build2all.component.spec.ts | 25 + .../report-build2all.component.ts | 91 + .../report-build2edit.component.html | 95 + .../report-build2edit.component.scss | 58 + .../report-build2edit.component.spec.ts | 25 + .../report-build2edit.component.ts | 159 + .../report-runner/report-runner.component.css | 1 + .../report-runner.component.css.map | 1 + .../report-runner.component.html | 1 + .../report-runner.component.scss | 0 .../report-runner.component.spec.ts | 25 + .../report-runner/report-runner.component.ts | 15 + .../reportrunnerall.component.css | 90 + .../reportrunnerall.component.css.map | 1 + .../reportrunnerall.component.html | 109 + .../reportrunnerall.component.scss | 93 + .../reportrunnerall.component.spec.ts | 25 + .../reportrunnerall.component.ts | 90 + .../reportrunneredit.component.css | 76 + .../reportrunneredit.component.css.map | 1 + .../reportrunneredit.component.html | 266 + .../reportrunneredit.component.scss | 80 + .../reportrunneredit.component.spec.ts | 25 + .../reportrunneredit.component.ts | 611 + .../reportrunneredit2.component.html | 305 + .../reportrunneredit2.component.scss | 81 + .../reportrunneredit2.component.spec.ts | 25 + .../reportrunneredit2.component.ts | 831 + .../setupicon/setupicon.component.html | 374 + .../setupicon/setupicon.component.scss | 47 + .../setupicon/setupicon.component.spec.ts | 21 + .../builder/setupicon/setupicon.component.ts | 85 + .../bulkimport/bulkimport.component.html | 1 + .../bulkimport/bulkimport.component.scss | 0 .../bulkimport/bulkimport.component.spec.ts | 25 + .../bulkimport/bulkimport.component.ts | 15 + .../bulkimportadd.component.html | 183 + .../bulkimportadd.component.scss | 81 + .../bulkimportadd.component.spec.ts | 25 + .../bulkimportadd/bulkimportadd.component.ts | 236 + .../bulkimportall.component.html | 81 + .../bulkimportall.component.scss | 4 + .../bulkimportall.component.spec.ts | 25 + .../bulkimportall/bulkimportall.component.ts | 87 + .../bulkimportedit.component.html | 116 + .../bulkimportedit.component.scss | 81 + .../bulkimportedit.component.spec.ts | 25 + .../bulkimportedit.component.ts | 200 + .../bulkimporteditline.component.html | 73 + .../bulkimporteditline.component.scss | 51 + .../bulkimporteditline.component.spec.ts | 25 + .../bulkimporteditline.component.ts | 172 + .../bulkimportline.component.html | 73 + .../bulkimportline.component.scss | 51 + .../bulkimportline.component.spec.ts | 25 + .../bulkimportline.component.ts | 175 + .../datamanagement.component.html | 173 + .../datamanagement.component.scss | 84 + .../datamanagement.component.spec.ts | 25 + .../datamanagement.component.ts | 189 + .../datamananementworkflow.component.html | 449 + .../datamananementworkflow.component.scss | 110 + .../datamananementworkflow.component.spec.ts | 25 + .../datamananementworkflow.component.ts | 558 + .../mappingrule/mappingrule.component.html | 1 + .../mappingrule/mappingrule.component.scss | 0 .../mappingrule/mappingrule.component.spec.ts | 25 + .../mappingrule/mappingrule.component.ts | 15 + .../mappingruleadd.component.html | 149 + .../mappingruleadd.component.scss | 81 + .../mappingruleadd.component.spec.ts | 25 + .../mappingruleadd.component.ts | 249 + .../mappingruleall.component.html | 85 + .../mappingruleall.component.scss | 4 + .../mappingruleall.component.spec.ts | 25 + .../mappingruleall.component.ts | 85 + .../mappingruleedit.component.html | 100 + .../mappingruleedit.component.scss | 81 + .../mappingruleedit.component.spec.ts | 25 + .../mappingruleedit.component.ts | 161 + .../addapiregistery.component.html | 1 + .../addapiregistery.component.scss | 0 .../addapiregistery.component.spec.ts | 21 + .../addapiregistery.component.ts | 10 + .../allapiregistery.component.html | 102 + .../allapiregistery.component.scss | 5 + .../allapiregistery.component.spec.ts | 21 + .../allapiregistery.component.ts | 244 + .../apiregistery/apiregistery.component.html | 1 + .../apiregistery/apiregistery.component.scss | 0 .../apiregistery.component.spec.ts | 21 + .../apiregistery/apiregistery.component.ts | 214 + .../editapiregistery.component.html | 1 + .../editapiregistery.component.scss | 0 .../editapiregistery.component.spec.ts | 21 + .../editapiregistery.component.ts | 10 + .../fnd/dashboard/dashboard.component.html | 375 + .../fnd/dashboard/dashboard.component.scss | 73 + .../fnd/dashboard/dashboard.component.spec.ts | 25 + .../main/fnd/dashboard/dashboard.component.ts | 106 + .../addextension/addextension.component.css | 39 + .../addextension.component.css.map | 1 + .../addextension/addextension.component.html | 52 + .../addextension/addextension.component.scss | 39 + .../addextension.component.spec.ts | 25 + .../addextension/addextension.component.ts | 94 + .../allextension/allextension.component.css | 64 + .../allextension.component.css.map | 1 + .../allextension/allextension.component.html | 101 + .../allextension/allextension.component.scss | 5 + .../allextension.component.spec.ts | 25 + .../allextension/allextension.component.ts | 204 + .../editextension/editextension.component.css | 39 + .../editextension.component.css.map | 1 + .../editextension.component.html | 40 + .../editextension.component.scss | 39 + .../editextension.component.spec.ts | 25 + .../editextension/editextension.component.ts | 71 + .../fnd/extension/extension.component.css | 1 + .../fnd/extension/extension.component.css.map | 1 + .../fnd/extension/extension.component.html | 1 + .../fnd/extension/extension.component.scss | 0 .../fnd/extension/extension.component.spec.ts | 25 + .../main/fnd/extension/extension.component.ts | 15 + .../fnd/main-page/main-page.component.html | 3 + .../fnd/main-page/main-page.component.scss | 0 .../fnd/main-page/main-page.component.spec.ts | 25 + .../main/fnd/main-page/main-page.component.ts | 15 + .../sequencegenarator.component.html | 238 + .../sequencegenarator.component.scss | 72 + .../sequencegenarator.component.spec.ts | 25 + .../sequencegenarator.component.ts | 189 + .../modules/main/layout/layout.component.html | 205 + .../modules/main/layout/layout.component.scss | 21 + .../main/layout/layout.component.spec.ts | 25 + .../modules/main/layout/layout.component.ts | 301 + .../main/main-page/main-page.component.html | 3 + .../main/main-page/main-page.component.scss | 0 .../main-page/main-page.component.spec.ts | 25 + .../main/main-page/main-page.component.ts | 15 + .../app/modules/main/main-routing.module.ts | 259 + .../src/app/modules/main/main.module.ts | 181 + .../page-not-found.component.html | 5 + .../page-not-found.component.scss | 11 + .../page-not-found.component.spec.ts | 25 + .../page-not-found.component.ts | 15 + .../src/app/pipes/helpers.module.ts | 31 + .../src/app/pipes/remove-commas.pipe.ts | 8 + .../src/app/pipes/sanitize.pipe.ts | 10 + .../src/app/pipes/search-filter.pipe.ts | 58 + .../src/app/pipes/thai-date-abbr.pipe.ts | 20 + .../src/app/pipes/thai-date-full.pipe.ts | 20 + .../src/app/pipes/thai-date.pipe.ts | 17 + .../src/app/pipes/time-pipe.pipe.ts | 36 + .../app/services/admin/accesstype.service.ts | 64 + .../app/services/admin/auditreport.service.ts | 38 + .../admin/connector-mapping.service.ts | 37 + .../admin/deploymentprofile.service.ts | 47 + .../services/admin/health-checkup.service.ts | 74 + .../app/services/admin/logconfig.service.ts | 28 + .../app/services/admin/menu-group.service.ts | 76 + .../services/admin/menu-register.service.ts | 33 + .../services/admin/menumaintance.service.ts | 69 + .../app/services/admin/myworkspace.service.ts | 98 + .../services/admin/outgoingwebhook.service.ts | 51 + .../services/admin/sessionlogger.service.ts | 17 + .../services/admin/sure-connector.service.ts | 25 + .../admin/sure-opsscriptmaster.service.ts | 86 + .../src/app/services/admin/sureapi.service.ts | 23 + .../app/services/admin/sureconnect.service.ts | 35 + .../services/admin/sysparameter.service.ts | 33 + .../app/services/admin/university.service.ts | 44 + .../app/services/admin/user-list.service.ts | 33 + .../services/admin/user-profile.service.ts | 120 + .../admin/user-registration.service.ts | 290 + .../admin/usergrpmaintaince.service.ts | 46 + .../services/admin/usermaintance.service.ts | 42 + .../src/app/services/alert.service.ts | 70 + .../src/app/services/alerts.service.ts | 39 + .../src/app/services/api/addemails.service.ts | 26 + .../app/services/api/api-request.service.ts | 172 + .../app/services/api/audittrail.service.ts | 30 + .../app/services/api/billingdemo.service.ts | 17 + .../app/services/api/department.service.ts | 48 + .../app/services/api/diputesemo.service.ts | 17 + .../app/services/api/forgotpass.service.ts | 44 + .../src/app/services/api/helper.ts | 5 + .../src/app/services/api/itemdemo.service.ts | 16 + .../src/app/services/api/login.service.ts | 113 + .../app/services/api/query-runner.service.ts | 20 + .../app/services/api/realnet-menu.service.ts | 43 + .../services/api/report-builder.service.ts | 287 + .../src/app/services/api/sequence.service.ts | 30 + .../app/services/api/table-setup.service.ts | 29 + .../src/app/services/api/translate.service.ts | 19 + .../src/app/services/auth_guard.service.ts | 40 + .../additionalcontainer.service.spec.ts | 16 + .../builder/additionalcontainer.service.ts | 75 + .../builder/dashboard.service.spec.ts | 16 + .../app/services/builder/dashboard.service.ts | 116 + .../builder/dashboard3.service.spec.ts | 16 + .../services/builder/dashboard3.service.ts | 308 + .../src/app/services/builder/icon.service.ts | 63 + .../services/builder/modulesetup.service.ts | 172 + .../builder/project-setup.service.spec.ts | 16 + .../services/builder/project-setup.service.ts | 237 + .../builder/technology-stack.service.ts | 80 + .../builder/wireframe-line.service.ts | 60 + .../app/services/builder/wireframe.service.ts | 273 + .../src/app/services/csv.service.ts | 136 + .../src/app/services/excel.service.ts | 30 + .../src/app/services/fnd/alerts.service.ts | 68 + .../app/services/fnd/bulkimport.service.ts | 160 + .../fnd/code-extraction.service.spec.ts | 16 + .../services/fnd/code-extraction.service.ts | 184 + .../src/app/services/fnd/dataflow.service.ts | 123 + .../services/fnd/datamanagement.service.ts | 111 + .../src/app/services/fnd/datastore.service.ts | 109 + .../exception-rule-library.service.spec.ts | 16 + .../fnd/exception-rule-library.service.ts | 42 + .../src/app/services/fnd/extension.service.ts | 78 + .../services/fnd/rule-library.service.spec.ts | 16 + .../app/services/fnd/rule-library.service.ts | 87 + .../fnd/workflow-data.service.spec.ts | 16 + .../app/services/fnd/workflow-data.service.ts | 63 + .../src/app/services/jwt.interceptor.ts | 22 + .../src/app/services/main.service.spec.ts | 12 + .../src/app/services/main.service.ts | 36 + .../src/app/services/notification.service.ts | 36 + .../src/app/services/user-info.service.ts | 122 + .../src/assets/.gitkeep | 0 .../assets/fonts/THSarabun Bold Italic.ttf | Bin 0 -> 117644 bytes .../src/assets/fonts/THSarabun Bold.ttf | Bin 0 -> 118964 bytes .../src/assets/fonts/THSarabun BoldItalic.ttf | Bin 0 -> 102916 bytes .../src/assets/fonts/THSarabun Italic.ttf | Bin 0 -> 104352 bytes .../src/assets/fonts/THSarabun.ttf | Bin 0 -> 99980 bytes .../images/2021-12-24_1662642503238.png | Bin 0 -> 753683 bytes .../src/assets/images/403.webp | Bin 0 -> 81216 bytes .../src/assets/images/Header.png | Bin 0 -> 3512 bytes .../src/assets/images/HeaderLines.png | Bin 0 -> 4539 bytes .../src/assets/images/MultipleLines.png | Bin 0 -> 4751 bytes .../src/assets/images/OnlyLines.png | Bin 0 -> 4194 bytes .../images/Web-Page-Background-Color.jpg | Bin 0 -> 22549 bytes .../src/assets/images/copyfromPrj.png | Bin 0 -> 17363 bytes .../src/assets/images/copytemplate.png | Bin 0 -> 17937 bytes .../src/assets/images/database.png | Bin 0 -> 19576 bytes .../src/assets/images/fromscratch.png | Bin 0 -> 21230 bytes .../src/assets/images/git.png | Bin 0 -> 1184 bytes .../src/assets/images/icon/cradiant.png | Bin 0 -> 7636 bytes .../src/assets/images/icon/logo.ico | Bin 0 -> 5430 bytes .../src/assets/images/icon/micrologo.png | Bin 0 -> 3603 bytes .../src/assets/images/icon/sitelogo.png | Bin 0 -> 34912 bytes .../src/assets/images/images.png | Bin 0 -> 5911 bytes .../src/assets/images/logo.svg | 28 + .../src/assets/images/micro logo.png | Bin 0 -> 3603 bytes .../src/assets/images/new.png | Bin 0 -> 156249 bytes .../src/assets/images/profile-icon.png | Bin 0 -> 2534 bytes .../src/assets/images/profile1.jpg | Bin 0 -> 10118 bytes .../src/assets/images/profile3.jpg | Bin 0 -> 7979 bytes .../src/assets/images/qr-code.png | Bin 0 -> 40397 bytes .../src/assets/images/view.jpg | Bin 0 -> 196 bytes .../src/assets/images/who.png | Bin 0 -> 3708 bytes .../src/environments/environment.prod.ts | 17 + .../src/environments/environment.ts | 16 + .../angular-clarity-master/src/favicon.ico | Bin 0 -> 948 bytes .../angular-clarity-master/src/index.html | 24 + .../angular-clarity-master/src/main.ts | 12 + .../angular-clarity-master/src/polyfills.ts | 53 + .../angular-clarity-master/src/server/app.js | 30 + .../angular-clarity-master/src/server/db.json | 8 + .../src/server/package-lock.json | 537 + .../src/server/package.json | 18 + .../angular-clarity-master/src/styles.scss | 198 + .../angular-clarity-master/src/styles1.scss | 54 + .../angular-clarity-master/src/test.ts | 16 + .../angular-clarity-master/tsconfig.app.json | 15 + .../angular-clarity-master/tsconfig.json | 21 + .../angular-clarity-master/tsconfig.spec.json | 18 + .../angular-clarity-master/tslint.json | 152 + 738 files changed, 66125 insertions(+) create mode 100644 pro118njsac-back-b/authsec_node/Backend/.DS_Store create mode 100644 pro118njsac-back-b/authsec_node/Backend/.env create mode 100644 pro118njsac-back-b/authsec_node/Backend/Functions/buildExtensionByFormCode.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/Functions/generateRandomHash.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/README.md create mode 100644 pro118njsac-back-b/authsec_node/Backend/api/BuilderService.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/api/cns.controller.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/api/controller.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/api/output.json create mode 100644 pro118njsac-back-b/authsec_node/Backend/api/user.controller.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/app.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/auth/token_validation.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/config/database.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/dockerize.sh create mode 100644 pro118njsac-back-b/authsec_node/Backend/listBuilder/controller.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-07-27.log create mode 100644 pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-03.log create mode 100644 pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-04.log create mode 100644 pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-07.log create mode 100644 pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-10.log create mode 100644 pro118njsac-back-b/authsec_node/Backend/middleware/authenticateJWT.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/middleware/uploadMiddleware.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/middleware/userLogger.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/package-lock.json create mode 100644 pro118njsac-back-b/authsec_node/Backend/package.json create mode 100644 pro118njsac-back-b/authsec_node/Backend/routes/cns.router.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/routes/router.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/routes/user.router.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/routes/user.routes.js create mode 100644 pro118njsac-back-b/authsec_node/Backend/uploaded-picture/rajeev+1@dekatc.com/profile-pic-10007658-2024-01-09T11-04-01.png create mode 100644 pro118njsac-back-b/authsec_node/Backend/uploaded-picture/rajeev+1@dekatc.com/profile-pic-10007658-2024-01-09T11-11-24.png create mode 100644 pro118njsac-db-d/authsec_mysql/mysql/loginandmenu.sql create mode 100644 pro118njsac-front-f/authsec_angular/.gitignore create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.editorconfig create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.github/workflows/blank.yml create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.gitignore create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.vscode/settings.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/README.md create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/SECURITY.md create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/angular.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/browserslist create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/protractor.conf.js create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/src/app.e2e-spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/src/app.po.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/tsconfig.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/karma.conf.js create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/package-lock.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/package.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app-config.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app-routing.module.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.module.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/global.model.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/role.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/systemparameter.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/user.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/userdepartment.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/usergrpma.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/usermaintaince.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/userposition.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ActiveTechnology.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/AdhocParam.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Audit.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Bcf_TechnologyStack.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ColumnList.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/DateParam.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/FileData.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/FileDetails.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Module_Setup.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Project_setup.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/RbColumns.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/RbTables.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ReportBuilder.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ReportBuilderQuery.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Cff_ActionBuilder_Header.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Cff_ActionBuilder_Line.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Fb_Header.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Fb_Lines.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Main_Menu.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Sub_Menu.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/StdParam.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/WhereParam.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/WireFrame.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/dashboard.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/gitfile.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/rptBuilder.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/suregit.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/surename.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/surestar.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/webpagebuilder.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Exception_Rule_Library .ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Extractor.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Extractor_Params.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Rule_Library.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiDashHeader.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiDashLine.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiWidget.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/DynamicForm.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/ExtensionField.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Mapping.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Rn_Forms_Component_Setup.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Rn_Forms_Setup.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/RuleCopy.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Studentadd.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/TableList.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/ValidationError.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/book.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/department.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/health_checkup.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/play.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/table-setup.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/university.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/customer.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login_environment.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-routing.module.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login.module.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/test.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunner.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunner.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.css create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.css.map create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main.module.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/helpers.module.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/remove-commas.pipe.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/sanitize.pipe.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/search-filter.pipe.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date-abbr.pipe.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date-full.pipe.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date.pipe.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/time-pipe.pipe.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/accesstype.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/auditreport.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/connector-mapping.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/deploymentprofile.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/health-checkup.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/logconfig.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menu-group.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menu-register.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menumaintance.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/myworkspace.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/outgoingwebhook.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sessionlogger.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sure-connector.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sure-opsscriptmaster.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sureapi.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sureconnect.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sysparameter.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/university.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-list.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-profile.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-registration.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/usergrpmaintaince.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/usermaintance.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/alert.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/alerts.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/addemails.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/api-request.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/audittrail.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/billingdemo.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/department.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/diputesemo.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/forgotpass.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/helper.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/itemdemo.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/login.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/query-runner.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/realnet-menu.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/report-builder.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/sequence.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/table-setup.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/translate.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/auth_guard.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/additionalcontainer.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/additionalcontainer.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard3.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard3.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/icon.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/modulesetup.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/project-setup.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/project-setup.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/technology-stack.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/wireframe-line.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/wireframe.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/csv.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/excel.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/alerts.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/bulkimport.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/code-extraction.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/code-extraction.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/dataflow.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/datamanagement.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/datastore.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/exception-rule-library.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/exception-rule-library.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/extension.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/rule-library.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/rule-library.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/workflow-data.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/workflow-data.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/jwt.interceptor.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/main.service.spec.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/main.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/notification.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/user-info.service.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/.gitkeep create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun Bold Italic.ttf create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun Bold.ttf create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun BoldItalic.ttf create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun Italic.ttf create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun.ttf create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/2021-12-24_1662642503238.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/403.webp create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/Header.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/HeaderLines.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/MultipleLines.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/OnlyLines.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/Web-Page-Background-Color.jpg create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/copyfromPrj.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/copytemplate.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/database.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/fromscratch.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/git.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/icon/cradiant.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/icon/logo.ico create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/icon/micrologo.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/icon/sitelogo.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/images.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/logo.svg create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/micro logo.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/new.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/profile-icon.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/profile1.jpg create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/profile3.jpg create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/qr-code.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/view.jpg create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/who.png create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/environments/environment.prod.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/environments/environment.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/favicon.ico create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/index.html create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/main.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/polyfills.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/app.js create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/db.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/package-lock.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/package.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/styles.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/styles1.scss create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/test.ts create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.app.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.spec.json create mode 100644 pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tslint.json diff --git a/pro118njsac-back-b/authsec_node/Backend/.DS_Store b/pro118njsac-back-b/authsec_node/Backend/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ffe0926e27faf9fec072c8af8fd39393e5991698 GIT binary patch literal 6148 zcmeHKOKQU~5Pj3QA&^a$UFr(GfiUR_a)A~ST0?M((-gYX(fdX-E!g$Cq-6$1Z!{lS zeqhN1K-$ax9@qd_Q58jv8BzCa=*E+8iK1%^{qfX4+stFv4!ZXRp74t9eK*>FL+=G| zc$xT@IH0G$qkc?cYaHo6Gt#oQ<806DVUo4PfKy%jfb%4F?R>@lf`MQl7zhUbJ_Ee7 zRaR@m7=wXeAQ<>&K+lInRm_gXupS*8Y70PY=&nLrdkL*cj@hvoGC~n6C0eO?iy>A{ zfAYNSSPZQk;?0NnlfRl5sZZznsis4+VT{2*Ffe9dVbhJ?{}23RW}EzRNz8(QVBnuI zAkB8SZTV7uxBhrNy=xQok*cD3MGXq=(N6#;dXC)Hpv9Bg%*&3&P*+iZEhom0KqVxG JVBi-R_ynMUDtQ0^ literal 0 HcmV?d00001 diff --git a/pro118njsac-back-b/authsec_node/Backend/.env b/pro118njsac-back-b/authsec_node/Backend/.env new file mode 100644 index 0000000..c0ce960 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/.env @@ -0,0 +1,21 @@ +LOCAL_HOST1=43.205.154.152 +FRONTEND_PORT_9191=30165 + +# **** BACKPORT **** +PORT=9292 + +# **** MY SQL DATABASE CONNECTION **** +DATABASE_HOST=realnet.cdas4e08uugj.us-east-1.rds.amazonaws.com +DATABASE_NAME=realnet_CNSBENEW +DATABASE_USERNAME=cnsdev +DATABASE_PASSWORD=cnsdev2407 +DATABASE_PORT=3306 + +# **** MAIL SENDER +NODEMAILER_HOST=smtp.gmail.com +NODEMAILER_USER=realitmailsender@gmail.com +NODEMAILER_PASSWORD=epnmhzsccotnyozf +NODEMAILER_PORT=587 + +# **** BASEPATH **** +BASE_PATH=/baseurl \ No newline at end of file diff --git a/pro118njsac-back-b/authsec_node/Backend/Functions/buildExtensionByFormCode.js b/pro118njsac-back-b/authsec_node/Backend/Functions/buildExtensionByFormCode.js new file mode 100644 index 0000000..5edd4e5 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/Functions/buildExtensionByFormCode.js @@ -0,0 +1,59 @@ +const db = require("../config/database") + +async function executeQuery(sql, values) { + const connection = await db.getConnection() + try { + const [rows] = await connection.execute(sql, values) + return rows + } finally { + connection.release() + } +} + +async function buildExtensionByFormCode(acc_id, formId) { + const sql = `SELECT * FROM rn_ext_field_t WHERE account_id='${acc_id}' AND id='${formId}'` + const extension = await executeQuery(sql) + // console.log(extension) + let extension_entry_form = [] + let extension_grid_form = [] + + if (!extension || extension.length === 0) { + return { message: "Extension Fields Not Found" } + } else { + // for (const extension of extensions) { + const data_type = extension[0].data_type + const mapping = extension[0].mapping + const f_code = extension[0].form_code + // console.log(mapping) + const field_name = extension[0].field_name + + const ext = `,\"extValue\":\"${mapping}\"` + let fieldInfo = {} + + if (data_type === "textfield") { + fieldInfo = `{\"fieldName\":\"" + ${field_name} + "\",\"fieldType\":\"text\",\"fieldValue\":\"\",\"formCode\":\"" + ${f_code} + "\"" + ${ext} + "},` + } else if (data_type === "date") { + fieldInfo = `{\"fieldName\":\"" + ${field_name} + "\",\"fieldType\":\"date\",\"fieldValue\":\"\",\"formCode\":\"" + ${f_code} + "\"" + ${ext} + "},` + } else if (data_type === "l_textfield") { + fieldInfo = `{\"fieldName\":\"" + ${field_name} + "\",\"fieldType\":\"textarea\",\"fieldValue\":\"\",\"formCode\":\"" + ${f_code} + "\"" + ${ext} + "},` + } else if (data_type === "checkbox") { + fieldInfo = `{\"fieldName\":\"" + ${field_name} + "\",\"fieldType\":\"checkbox\",\"fieldValue\":\"\",\"formCode\":\"" + ${f_code} + "\"" + ${ext} + "},` + } else if (data_type === "autocomplete") { + fieldInfo = `{\"fieldName\":\"" + ${field_name} + "\",\"fieldType\":\"text\",\"fieldValue\":\"\",\"formCode\":\"" + ${f_code} + "\"" + ${ext} + "},` + } else if (data_type === "text") { + fieldInfo = `{\"fieldName\":\"" + ${field_name} + "\",\"fieldType\":\"text\",\"fieldValue\":\"\",\"formCode\":\"" + ${f_code} + "\"" + ${ext} + "},` + } + + extension_entry_form.push(fieldInfo) + + // Extension grid-view code + extension_grid_form.push( + `{prop: \"" + ${mapping} + "\", name: \"" + ${field_name} + "\", width: 200},\n` + ) + // } + } + + return extension_entry_form +} + +module.exports = { buildExtensionByFormCode } diff --git a/pro118njsac-back-b/authsec_node/Backend/Functions/generateRandomHash.js b/pro118njsac-back-b/authsec_node/Backend/Functions/generateRandomHash.js new file mode 100644 index 0000000..2149eb5 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/Functions/generateRandomHash.js @@ -0,0 +1,13 @@ +const crypto = require("crypto") + +function generateRandomHash(length = 32) { + // Generate random bytes + const randomBytes = crypto.randomBytes(length) + + // Convert bytes to hexadecimal representation + const hash = randomBytes.toString("hex") + + return hash +} + +module.exports = generateRandomHash diff --git a/pro118njsac-back-b/authsec_node/Backend/README.md b/pro118njsac-back-b/authsec_node/Backend/README.md new file mode 100644 index 0000000..891a49d --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/README.md @@ -0,0 +1 @@ +"# rajeevrepo" diff --git a/pro118njsac-back-b/authsec_node/Backend/api/BuilderService.js b/pro118njsac-back-b/authsec_node/Backend/api/BuilderService.js new file mode 100644 index 0000000..52d0ba5 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/api/BuilderService.js @@ -0,0 +1,449 @@ +const { pool, db } = require("../config/database") + + + + +// Insert menu +const customSecMenuAdd = async (tablename, menuId) => { + try { + // Replace "_" with " " in the tablename + const origTableName = tablename.replace(/_/g, " "); + + // Construct the new MenuDet object + const menuDet = { + menuId: menuId, + itemSeq: 8001, + main_menu_icon_name: tablename, + menuItemDesc: origTableName, + moduleName: tablename, + main_menu_action_name: tablename, + status: "Enable" + }; + + // Insert the new record into the sec_menu_det table + const insertQuery = ` + INSERT INTO sec_menu_det + (menu_id, item_seq, main_menu_icon_name, menu_item_desc, module_name, main_menu_action_name, status) + VALUES (?, ?, ?, ?, ?, ?, ?) + `; + + const result = await executeQuery(insertQuery, [ + menuDet.menuId, + menuDet.itemSeq, + menuDet.main_menu_icon_name, + menuDet.menuItemDesc, + menuDet.moduleName, + menuDet.main_menu_action_name, + menuDet.status + ]); + + // Call the sync function (implement this based on your requirement) + await sync(menuId, { /* pass necessary params if needed */ }); + + // Return the inserted record or some indication of success + return result; + } catch (error) { + console.error("Error in customSecMenuAdd:", error); + throw error; + } +}; + +// Insert dashboard +const createDashboard = (req, res) => { + const body = req.body; + + // Get current date and time in the format YYYY-MM-DD HH:MM:SS + const today = new Date(); + const date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate(); + const time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); + const dateTime = date + " " + time; + + // Step 1: Check if the entity already exists in builder_entity_t table + const existingEntityQuery = `SELECT * FROM builder_entity_t WHERE job_name = ? AND job_type = ?`; + + pool.query( + existingEntityQuery, + [body.dashboard_name, "Dashboard"], + (err, existingEntity) => { + if (err) { + console.error("Error checking existing entity:", err); + return res.status(500).json({ + success: 0, + message: "Error checking existing entity", + }); + } + + if (existingEntity.length > 0) { + console.log(`${body.dashboard_name} dashboard already exists`); + return res.status(409).json({ + success: 0, + message: "Dashboard already exists", + }); + } + + // Step 2: Insert into dashbord_header + const insertHeaderQuery = ` + INSERT INTO dashbord_header SET + created_at = ?, + updated_at = ?, + is_build = ?, + dashboard_name = ?, + description = ?, + menu_name = ?, + module_id = ?, + secuirity_profile = ?, + tech_stack = ?, + is_updated = ?, + object_type = ?, + sub_object_type = ?, + testing = ? + `; + + const headerValues = [ + dateTime, + dateTime, + body.is_build || null, + body.dashboard_name || null, + body.description || null, + body.menu_name || null, + body.module_id || 0, // Provide a default value for module_id + body.secuirity_profile || null, + body.tech_stack || null, + body.is_updated || null, + body.object_type || null, + body.sub_object_type || null, + body.testing || false, + ]; + + pool.query(insertHeaderQuery, headerValues, (headerError, headerResults) => { + if (headerError) { + console.error("Error inserting dashboard header:", headerError); + return res.status(500).json({ + success: 0, + message: "Failed to create dashboard", + }); + } + + if (!headerResults.insertId) { + return res.status(500).json({ + success: 0, + message: "Failed to create dashboard", + }); + } + + const dashboardId = headerResults.insertId; + + // Step 3: Insert into dashbord1_line + const insertLineQuery = ` + INSERT INTO dashbord1_line SET + created_at = ?, + updated_at = ?, + model = ?, + header_id = ?, + dashbord_header_id = ? + `; + + const lineValues = [ + dateTime, + dateTime, + body.model || null, // Assuming 'model' is in the request body + body.header_id || null, // Assuming 'header_id' is in the request body + dashboardId, + ]; + + pool.query(insertLineQuery, lineValues, (lineError, lineResults) => { + if (lineError) { + console.error("Error inserting dashboard line:", lineError); + // Optionally, rollback the previous dashboard_header insertion + return res.status(500).json({ + success: 0, + message: "Failed to create dashboard and line", + }); + } + + // Return success response + return res.status(201).json({ + success: 1, + message: "Dashboard and line created successfully", + }); + }); + }); + } + ); +}; + +// save report +const saveReport = (req, res) => { + const body = req.body; + + // Get the current date and time + const today = new Date(); + const date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate(); + const time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); + const dateTime = date + " " + time; + + // Step 1: Check if the report with the given name already exists in builder_entity_t + const existingEntityQuery = `SELECT * FROM builder_entity_t WHERE job_name = ? AND job_type = ?`; + + pool.query( + existingEntityQuery, + [body.reportName, "Report"], + (err, existingEntity) => { + if (err) { + console.error("Error checking existing report:", err); + return res.status(500).json({ + success: 0, + message: "Error checking existing report", + }); + } + + if (existingEntity.length > 0) { + console.log(`${body.reportName} report already exists`); + return res.status(409).json({ + success: 0, + message: "Report already exists", + }); + } + + // Step 2: Insert into rpt_builder2_t table + const insertReportQuery = ` + INSERT INTO rpt_builder2_t SET + created_at = ?, + updated_at = ?, + report_name = ?, + description = ?, + is_sql = ? + `; + + const reportValues = [ + dateTime, + dateTime, + body.reportName || null, + body.description || null, + body.isSql || false, // Boolean field + ]; + + pool.query(insertReportQuery, reportValues, (reportError, reportResults) => { + if (reportError) { + console.error("Error inserting report:", reportError); + return res.status(500).json({ + success: 0, + message: "Failed to create report", + }); + } + + if (!reportResults.insertId) { + return res.status(500).json({ + success: 0, + message: "Failed to create report", + }); + } + + const reportId = reportResults.insertId; + + // Step 3: Insert into rpt_builder2_lines_t table + const insertLineQuery = ` + INSERT INTO rpt_builder2_lines_t SET + created_at = ?, + updated_at = ?, + model = ?, + header_id = ? + `; + + const lineValues = [ + dateTime, + dateTime, + body.model || null, // Assuming 'model' is part of the request body + reportId, + ]; + + pool.query(insertLineQuery, lineValues, (lineError, lineResults) => { + if (lineError) { + console.error("Error inserting report line:", lineError); + return res.status(500).json({ + success: 0, + message: "Failed to create report and line", + }); + } + + // Step 4: Save the builder entity into builder_entity_t table + const saveEntityQuery = ` + INSERT INTO builder_entity_t SET + job_name = ?, + job_type = ? + `; + + pool.query( + saveEntityQuery, + [body.reportName, "Report"], + (entityError, entityResults) => { + if (entityError) { + console.error("Error saving builder entity:", entityError); + return res.status(500).json({ + success: 0, + message: "Failed to save builder entity", + }); + } + + // Return success response after all operations + return res.status(201).json({ + success: 1, + message: "Report and line created successfully", + }); + } + ); + }); + }); + } + ); +}; + +// Sync +const sync = async (gmenuid, gr) => { + const list = []; + + try { + // Step 1: Find MenuDet by gmenuid + const formenuQuery = `SELECT * FROM sec_menu_det WHERE menu_item_id = ?`; + const [formenu] = await executeQuery(formenuQuery, [gmenuid]); + + if (!formenu) { + throw new Error(`MenuDet with id ${gmenuid} not found.`); + } + + // Step 2: Get all GrpMenuAccess records for the found MenuDet + const grpMenuAccessQuery = `SELECT * FROM sec_grp_menu_access WHERE menu_item_id = ?`; + const all = await executeQuery(grpMenuAccessQuery, [formenu.menu_item_id]); + + // Step 3: Update GrpMenuAccess records with data from MenuDet + for (let a of all) { + const updateQuery = ` + UPDATE sec_grp_menu_access + SET item_seq = ?, menu_item_desc = ?, module_name = ?, status = ?, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ? + WHERE id = ? + `; + await executeQuery(updateQuery, [ + formenu.item_seq, + formenu.menu_item_desc, + formenu.module_name, + formenu.status, + formenu.main_menu_action_name, + formenu.main_menu_icon_name, + formenu.menu_id, + a.id + ]); + + // Add updated record to the list + list.push(a); + } + + // Step 4: Find all submenus related to the given menu + const submenuQuery = `SELECT * FROM sec_menu_det WHERE menu_id = ?`; + const submenu = await executeQuery(submenuQuery, [gmenuid]); + + // Step 5: Iterate through submenus and update or insert GrpMenuAccess records + for (let i = 0; i < submenu.length; i++) { + const m = submenu[i]; + + // Step 6: Find GrpMenuAccess for this submenu + const findAccessQuery = `SELECT * FROM sec_grp_menu_access WHERE menu_item_id = ?`; + const li = await executeQuery(findAccessQuery, [m.menu_item_id]); + + if (li.length === 0) { + // Step 7: If no access found, insert new GrpMenuAccess records + const findGroupQuery = `SELECT * FROM sec_grp_menu_access WHERE menu_item_id = ?`; + const grp = await executeQuery(findGroupQuery, [gmenuid]); + + for (let a of grp) { + const findRoleQuery = `SELECT * FROM sec_user_group WHERE usr_grp = ?`; + const app = await executeQuery(findRoleQuery, [a.usr_grp]); + + // Set the fields in the GrpMenuAccess object + gr.usr_grp = app[0].usr_grp; + gr.menu_item_id = m.menu_item_id; + gr.item_seq = m.item_seq; + gr.menu_item_desc = m.menu_item_desc; + gr.module_name = m.module_name; + gr.status = m.status; + gr.main_menu_action_name = m.main_menu_action_name; + gr.main_menu_icon_name = m.main_menu_icon_name; + gr.menu_id = m.menu_id; + gr.m_create = "true"; + gr.m_delete = "true"; + gr.m_edit = "true"; + gr.m_query = "true"; + gr.m_visible = "true"; + gr.is_disable = "true"; + gr.m_export = "true"; + gr.created_at = new Date(); + gr.updated_at = new Date(); + + // Insert new GrpMenuAccess + const insertAccessQuery = ` + INSERT INTO sec_grp_menu_access + (usr_grp, menu_item_id, item_seq, menu_item_desc, module_name, status, main_menu_action_name, main_menu_icon_name, menu_id, m_create, m_delete, m_edit, m_query, m_visible, is_disable, m_export, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `; + await executeQuery(insertAccessQuery, [ + gr.usr_grp, + gr.menu_item_id, + gr.item_seq, + gr.menu_item_desc, + gr.module_name, + gr.status, + gr.main_menu_action_name, + gr.main_menu_icon_name, + gr.menu_id, + gr.m_create, + gr.m_delete, + gr.m_edit, + gr.m_query, + gr.m_visible, + gr.is_disable, + gr.m_export, + gr.created_at, + gr.updated_at, + ]); + + list.push(gr); + } + } else { + // Step 8: If access exists, update the records + for (let g of li) { + const updateAccessQuery = ` + UPDATE sec_grp_menu_access + SET item_seq = ?, menu_item_desc = ?, module_name = ?, status = ?, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ? + WHERE id = ? + `; + await executeQuery(updateAccessQuery, [ + m.item_seq, + m.menu_item_desc, + m.module_name, + m.status, + m.main_menu_action_name, + m.main_menu_icon_name, + m.menu_id, + g.id + ]); + + list.push(g); + } + } + } + return list; + } catch (error) { + console.error("Error in sync:", error); + throw error; + } +}; + + +module.exports = { + customSecMenuAdd, + createDashboard, + saveReport +} diff --git a/pro118njsac-back-b/authsec_node/Backend/api/cns.controller.js b/pro118njsac-back-b/authsec_node/Backend/api/cns.controller.js new file mode 100644 index 0000000..c8a951b --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/api/cns.controller.js @@ -0,0 +1,2758 @@ +const { genSaltSync, hashSync, compareSync } = require("bcrypt") +const { sign } = require("jsonwebtoken") +const otpGenerator = require("otp-generator") +const nodemailer = require("nodemailer") +const bcrypt = require("bcrypt") +const { pool, db } = require("../config/database") +const fs = require("fs") +const path = require("path") +const generateRandomHash = require("../Functions/generateRandomHash") +const { execArgv, env } = require("process") +const { + buildExtensionByFormCode, +} = require("../Functions/buildExtensionByFormCode") +const { exec } = require("child_process") +const { v4: uuidv4 } = require("uuid") +const multer = require("multer") +const { promisify } = require("util") +const readFileAsync = promisify(require("fs").readFile) + +const transporter = nodemailer.createTransport({ + service: "gmail", // e.g., 'Gmail' + host: process.env.NODEMAILER_HOST, + port: process.env.NODEMAILER_PORT, + secure: false, + auth: { + user: process.env.NODEMAILER_USER, + pass: process.env.NODEMAILER_PASSWORD, + }, +}) + +async function dateAndTime() { + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + return dateTime +} + +async function executeQuery(sql, values) { + const connection = await db.getConnection() + // console.log("connection..",connection); + try { + const [rows] = await connection.execute(sql, values) + return rows + } finally { + connection.release() + } +} + +const login = async (req, res) => { + const body = req.body + + pool.query( + "SELECT * FROM sec_users WHERE email = ?", + [body.email], + (err, results) => { + if (err) { + console.error(err) + return res.json({ + success: 0, + data: "Error during login", + }) + } + + if (!results || results.length === 0) { + return res.json({ + success: 0, + data: "Invalid email or password", + }) + } + + const isValidPassword = compareSync(body.password, results[0].user_passw) + + if (isValidPassword) { + // console.log(results[0].usr_grp) + + const jsontoken = sign(results[0], "secret", { + algorithm: "HS256", // Use a shorter signing algorithm + expiresIn: "5h", // Set a shorter expiration time if appropriate + }) + + return res.json({ + operationStatus: "SUCCESS", + operationMessage: "Login Success", + item: { + token: jsontoken, + userId: results[0].user_id, + fullname: results[0].full_name, + username: results[0].user_name, + email: results[0].email, + firstName: results[0].full_name, + roles: ["ProjectManager", "Developer", "ROLE ADMIN"], + }, + }) + } else { + res.json({ + success: 0, + data: "Invalid email or password", + }) + } + } + ) +} + +// logout + +const logout = (req, res) => { + res.json({ + success: 1, + message: "Logout successful", + }) +} + +// reset password + +const sendEmailForResetPassword = async (req, res) => { + const userEmail = req.body.email + // console.log(userEmail) + try { + const [userRows] = await executeQuery( + "SELECT * FROM sec_users WHERE email = ?", + [userEmail] + ) + // console.log(userRows.email) + const user = userRows + + if (user) { + const email = user.email + const subject = "Password Reset" + const hash = generateRandomHash() + const link = + "http://" + + process.env.LOCAL_HOST + + ":" + + process.env.FRONTEND_PORT_9191 + + "/#/forgotresetpassword/" + + hash + + // Store the reset token in the database + const resetTokenData = { + expiry_date: calculateExpiryDate(), // You need to implement a function to calculate the expiry date + token: hash, + user_user_id: user.user_id, + } + + // Assuming you have a database model for password_reset_token + await createPasswordResetToken(resetTokenData) + + // req.user.resetHash = hash + + const mailOptions = { + from: process.env.NODEMAILER_USER, + to: userEmail, + subject: subject, + text: `${link}`, + } + + transporter.sendMail(mailOptions, (error) => { + if (error) { + console.log(error) + return res.status(500).json({ message: "Error sending email" }) + } + + return res.status(200).json({ message: "Email sent successfully" }) + }) + } else { + return res.status(400).json({ message: "User not found" }) + } + } catch (error) { + console.error(error) + return res + .status(500) + .json({ message: "Error sending email for password reset" }) + } +} + +const createPasswordResetToken = async (resetTokenData) => { + try { + // Obtain the maximum ID from the password_reset_token table + const sql = `SELECT MAX(id) AS maxId FROM password_reset_token` + const [record] = await executeQuery(sql) + // console.log(record) + + // Increment the maxId by 1 to get the new primary key value + const newId = record.maxId + 1 + + // Insert the record into the password_reset_token table with the new ID + const insertSql = ` + INSERT INTO password_reset_token (id, expiry_date, token, user_user_id) + VALUES (?, ?, ?, ?) + ` + + const results = await executeQuery(insertSql, [ + newId, + resetTokenData.expiry_date, + resetTokenData.token, + resetTokenData.user_user_id, + ]) + + return results + } catch (error) { + console.error(error) + throw error + } +} + +// Function to calculate expiry date (you may customize this as per your requirements) +const calculateExpiryDate = () => { + const expiryDate = new Date() + expiryDate.setDate(expiryDate.getDate() + 1) // Set expiry date to 1 day from now + return expiryDate +} + +const savePassword = async (req, res) => { + const token = req.params.token + // console.log(token) + const { newPassword, confirmPassword } = req.body + + try { + // Fetch user by token from the database + const [rows] = await executeQuery( + "SELECT * FROM password_reset_token WHERE token = ?", + [token] + ) + + if (rows.length === 0) { + return res.status(400).json({ message: "Token expired" }) + } + + // console.log(rows) + const user_id = rows.user_user_id + + // Fetch user by email from the database + const [userRows] = await executeQuery( + "SELECT * FROM sec_users WHERE user_id = ?", + [user_id] + ) + + // console.log(userRows) + + if (userRows.length === 0) { + return res.status(400).json({ message: "User not found" }) + } + + const a = userRows + + if (newPassword === confirmPassword) { + // Update user password + const hashedPassword = await bcrypt.hash(newPassword, 10) + + a.user_passw = hashedPassword + a.pwd_changed_cnt = a.pwd_changed_cnt ? a.pwd_changed_cnt + 1 : 1 + a.last_pwd_changed_date = new Date() + a.change_passw = newPassword + + // Fetch the maximum id from password_reset_token + // const sql = `SELECT MAX(id) AS maxId FROM password_reset_token` + // const [record] = await executeQuery(sql) + // // console.log(record) + + // // Increment the maxId by 1 to get the new primary key value + // const newId = record.maxId + 1 + + // Save the updated user details to the database with the new id + await executeQuery( + "UPDATE sec_users SET user_passw = ?, pwd_changed_cnt = ?, last_pwd_changed_date = ?, change_passw = ? WHERE user_id = ?", + [ + a.user_passw, + a.pwd_changed_cnt, + a.last_pwd_changed_date, + a.change_passw, + a.user_id, + ] + ) + + // Delete the password reset token + await executeQuery("DELETE FROM password_reset_token WHERE token = ?", [ + token, + ]) + + return res.status(200).json(a) + } + + return res + .status(400) + .json({ message: "Password and confirm password do not match" }) + } catch (error) { + console.error(error) + return res.status(500).json({ message: "Internal Server Error" }) + } +} + +const resetPassword = async (req, res) => { + try { + const { oldPassword, newPassword, confirmPassword } = req.body + + console.log(oldPassword, newPassword, confirmPassword) + + // Check if newPassword and confirmPassword match + if (newPassword !== confirmPassword) { + return res + .status(400) + .json({ message: "New password and confirm password do not match" }) + } + + const user = req.user + // console.log(user) + if (!user) { + return res.status(400).json({ message: "User not found" }) + } + + // Validate old password + const isValidOldPassword = compareSync(oldPassword, user.user_passw) + + if (!isValidOldPassword) { + return res.status(400).json({ message: "Invalid old password" }) + } + + // Update the password in the database + await updatePasswordAndUserData(user.user_id, newPassword) + + // Optionally, remove the hash from your local storage or mark it as used + // removeHashFromStorage(hash); + + return res.status(200).json({ message: "Password reset successful" }) + } catch (error) { + console.error(error) + return res.status(500).json({ message: "Error resetting password" }) + } +} + +// Update Password Controller + +const updatePasswordAndUserData = async (userId, newPassword) => { + return new Promise(async (resolve, reject) => { + try { + // Retrieve user details + const [userRows] = await executeQuery( + "SELECT * FROM sec_users WHERE user_id = ?", + [userId] + ) + + if (userRows.length === 0) { + reject({ message: "User not found" }) + return + } + + // Hash the new password + const hashedPassword = await bcrypt.hash(newPassword, 10) + + // Update user details + const updatedUser = { + user_passw: hashedPassword, + pwd_changed_cnt: userRows.pwd_changed_cnt + ? userRows.pwd_changed_cnt + 1 + : 1, + last_pwd_changed_date: new Date(), + change_passw: newPassword, + user_id: userId, + } + + // Update password and user data in a single query + await executeQuery( + "UPDATE sec_users SET user_passw = ?, pwd_changed_cnt = ?, last_pwd_changed_date = ?, change_passw = ? WHERE user_id = ?", + [ + updatedUser.user_passw, + updatedUser.pwd_changed_cnt, + updatedUser.last_pwd_changed_date, + updatedUser.change_passw, + updatedUser.user_id, + ] + ) + + resolve({ message: "Password updated successfully" }) + } catch (error) { + console.error(error) + reject({ message: "Internal Server Error" }) + } + }) +} + +// Controllers for User grp maintenance + +const getUsersUserGrpMaintenance = (req, res) => { + // pool.query(`SELECT * FROM sec_user_group`, [], (error, results, fields) => { + // if (error) { + // console.log(error) + // return res.json({ + // success: 0, + // message: "Table is empty", + // }) + // } + // return res.status(200).json(results) + // }) + // } + + pool.query( + `SELECT * FROM sec_user_group`, + [], + (error, results, fields) => { + if (error) { + console.log(error); + return res.json({ + success: 0, + message: "Table is empty", + }); + } + + // Map the results to the desired format + const formattedResults = results.map((item) => { + // Convert updatedate to a timestamp in milliseconds and a human-readable format + const updatedateTimestamp = item.updatedate ? new Date(item.updatedate).getTime() : null; + const updateDateFormated = item.updatedate + ? new Date(item.updatedate).toLocaleString("en-GB", { + day: "2-digit", + month: "short", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + }) + : null; + + // Re-map the fields + return { + usrGrp: item.usr_grp, + groupName: item.group_name, + groupDesc: item.group_desc, + createby: item.createby, + createdate: item.createdate, + updatedate: updatedateTimestamp, // Converted to timestamp in milliseconds + updateby: item.updateby, + status: item.status, + groupLevel: item.group_level, + createDateFormated: item.createdate, // Keeping it as null or format if needed + updateDateFormated: updateDateFormated, // Human-readable date format + }; + }); + + // Return the newly formatted result + return res.status(200).json(formattedResults); + } + ); +}; + + +const getUsersByUserIdUserGrpMaintenance = (req, res) => { + const id = req.params.id + pool.query( + `SELECT * FROM sec_user_group WHERE usr_grp = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + if (!results) { + return res.json({ + success: 0, + message: "Record not found", + }) + } + return res.status(200).json(results) + } + ) +} + +const updateUsersUserGrpMaintenance = (req, res) => { + const body = req.body + const id = req.params + pool.query( + `UPDATE INTO sec_user_group SET createby = ?, createdate = ?, group_desc = ?, group_level = ?, group_name = ?, status = ?, updateby = ? WHERE usr_grp = ?`, + [ + body.createby, + body.createdate, + body.group_desc, + body.group_level, + body.password, + body.group_name, + body.status, + body.updateby, + id, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + if (!results) { + return res.json({ + success: 0, + message: "Failed to update user", + }) + } + return res.json({ + success: 1, + data: "updated succesfully", + }) + } + ) +} + +const createUsersUserGrpMaintenance = (req, res) => { + const body = req.body + pool.query( + `INSERT sec_user_group SET createby = ?,createdate = ?,group_desc = ?,group_level = ?,group_name = ?, status = ?, updateby = ? usr_grp = ?`, + [ + body.createby, + body.createdate, + body.groupDesc, + body.group_level, + body.password, + body.groupName, + body.status, + body.updateby, + body.usrGrp, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + if (!results) { + return res.json({ + success: 0, + message: "Failed to update user", + }) + } + return res.json({ + success: 1, + data: "updated succesfully", + }) + } + ) +} + +const deleteUsersUserGrpMaintenance = (req, res) => { + const id = req.params.id + pool.query( + `delete from registration where id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + return res.json({ + success: 1, + data: "user deleted succesfully", + }) + } + ) +} + +// Controllers for Menu maintainence + +const getUsersMenuMaintainence = (req, res) => { + pool.query(`SELECT * FROM sec_menu_det`, [], (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + }) +} +const getUsersByUserIdMenuMaintainence = (req, res) => { + const id = req.params.id; + + pool.query( + `SELECT * FROM sec_grp_menu_access WHERE usr_grp = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error); + return res.json({ + success: 0, + message: "Table is empty", + }); + } + if (!results || results.length === 0) { + return res.json({ + success: 0, + message: "Record not found", + }); + } + + // Map the results to the desired format + const formattedResults = results.map((item) => { + // Convert created_at and updated_at to timestamps in milliseconds + const createdAtTimestamp = item.created_at ? new Date(item.created_at).getTime() : null; + const updatedAtTimestamp = item.updated_at ? new Date(item.updated_at).getTime() : null; + + return { + usrGrp: item.usr_grp, // Adding usrGrp + menuItemId: item.menu_item_id, + mexport: item.mexport, + menuId: item.menu_id, + createby: item.createby, + createdAt: createdAtTimestamp, // Convert to timestamp + updateby: item.updateby, + updatedAt: updatedAtTimestamp, // Convert to timestamp + isdisable: item.isdisable, + itemSeq: item.item_seq, + menuItemDesc: item.menu_item_desc, + status: item.status, + moduleName: item.module_name, + main_menu_action_name: item.main_menu_action_name, + main_menu_icon_name: item.main_menu_icon_name, + subMenus: [], // Empty array as requested + grpid: null, // Placeholder for grpid, assuming no equivalent field in the database + gmenuid: null, // Placeholder for gmenuid, assuming no equivalent field in the database + mcreate: item.m_create, + mdelete: item.m_delete, + mquery: item.m_query, + mvisible: item.m_visible, + medit: item.m_edit, + }; + }); + + return res.status(200).json(formattedResults); + } + ); +}; + + +const updateUsersMenuMaintainence = (req, res) => { + const body = req.body + const { id } = req.params + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + pool.query( + `UPDATE sec_menu_det SET item_seq = ?, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ?, menu_item_desc = ?, module_name = ?, status = ?, updated_at = ? WHERE menu_item_id = ?`, + [ + body.itemSeq, + body.main_menu_action_name, + body.main_menu_icon_name, + body.menuId, + body.menuItemDesc, + body.moduleName, + body.status, + dateTime, + id, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + if (!results) { + return res.json({ + success: 0, + message: "Failed to update user", + }) + } + return res.json({ + success: 1, + data: "updated succesfully", + }) + } + ) +} + +const createUsersMenuMaintainence = (req, res) => { + const body = req.body + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + pool.query( + `INSERT sec_menu_det SET menu_item_id = ?, item_seq = ?, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ?, menu_item_desc = ?, module_name = ?, status = ?, created_at = ?, updated_at = ?`, + [ + body.menuItemId, + body.itemSeq, + body.main_menu_action_name, + body.main_menu_icon_name, + body.menuId, + body.menuItemDesc, + body.moduleName, + body.status, + body.createdAt, + dateTime, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + if (!results) { + return res.json({ + success: 0, + message: "Failed to create user", + }) + } + return res.json({ + success: 1, + data: "created succesfully", + }) + } + ) +} + +const deleteUsersMenuMaintainence = (req, res) => { + const id = req.params.id + pool.query( + `DELETE FROM sec_menu_det WHERE menu_item_id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + return res.json({ + success: 1, + data: "user deleted succesfully", + }) + } + ) +} + +// Controller for Sub Menu maintainence + +const getUsersSubMenuMaintainence = (req, res) => { } + +// by rajeev +// const getUsersByIdSubMenuMaintainence = (req, res) => { +// const id = req.params.id +// pool.query( +// `SELECT * FROM sec_menu_det WHERE menu_id = ? ORDER BY item_seq ASC`, +// [id], +// (error, results, fields) => { +// if (error) { +// console.log(error) +// return res.json({ +// success: 0, +// message: "Table is empty", +// }) +// } +// if (!results) { +// return res.json({ +// success: 0, +// message: "Record not found", +// }) +// } +// // console.log(results) +// return res.status(200).json(results) +// } +// ) +// } + +// by Gk +const getUsersByIdSubMenuMaintainence = (req, res) => { + const id = req.params.id; + pool.query( + `SELECT * FROM sec_menu_det WHERE menu_id = ? ORDER BY item_seq ASC`, + [id], + (error, results) => { + if (error) { + console.log(error); + return res.json({ + success: 0, + message: "Table is empty", + }); + } + if (!results || results.length === 0) { + return res.json({ + success: 0, + message: "Record not found", + }); + } + + // Map the results to the desired format + const formattedResults = results.map((item) => { + return { + createdAt: new Date(item.created_at).getTime(), + updatedAt: new Date(item.updated_at).getTime(), + menuItemId: item.menu_item_id, + itemSeq: item.item_seq, + menuItemDesc: item.menu_item_desc, + status: item.status, + menuId: item.menu_id, + moduleName: item.module_name, + main_menu_action_name: item.main_menu_action_name, + main_menu_icon_name: item.main_menu_icon_name, + subMenus: [], // Empty array as required + }; + }); + + return res.status(200).json(formattedResults); + } + ); +}; + + +const updateUsersSubMenuMaintainence = (req, res) => { } + +const createUsersSubMenuMaintainence = (req, res) => { } + +const deleteUsersSubMenuMaintainence = (req, res) => { } + +// Controller for MENU ACCESS CONTROL + +const getUsersMenuAccessControl = (req, res) => { + pool.query( + `SELECT * FROM sec_grp_menu_access`, + [], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + } + ) +} + + +const getUsersByMenuAccessControl = (req, res) => { } + +const createUsersMenuAccessControl = async (req, res) => { + const { id } = req.params + const sql = `SELECT * FROM sec_menu_det WHERE menu_item_id = ?` + const values = [id] + + try { + const [record] = await executeQuery(sql, values) + if (!record) { + return res.status(404).json({ message: "Record not found" }) + } + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + + const sqlIn = `INSERT INTO sec_grp_menu_access SET menu_item_id = ?, usr_grp = 41, created_at = ?, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ?, menu_item_desc = ?, module_name = ?, status = ?, item_seq = ?, updated_at = ?, isdisable = 'true', m_create = 'true', m_delete = 'true', m_edit = 'true' , m_query = 'true', m_visible = 'true'` + const valuesIn = [ + record.menu_item_id, + record.created_at, + record.main_menu_action_name, + record.main_menu_icon_name, + record.menu_id, + record.menu_item_desc, + record.module_name, + record.status, + record.item_seq, + dateTime, + ] + try { + const [recordIn] = await executeQuery(sqlIn, valuesIn) + } catch (errorIn) { + console.error("inside", errorIn) + } + } catch (error) { + console.error(error) + res.status(500).json({ message: "error fetching record Outside" }) + } + return res.json({ + success: 1, + data: "created succesfully", + }) +} + +// Controller for User maintenance + +const getUserMaintainence = (req, res) => { + pool.query(`SELECT * FROM sec_users`, [], (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + }) +} + +const getByIdUserMaintainence = (req, res) => { + const { id } = req.params + pool.query( + `SELECT * FROM sec_users WHERE user_id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + } + ) +} + +const getLoggedInUser = async (req, res) => { + const user = req.user + res.json(user) +} + +const updateUserMaintainence = async (req, res) => { + try { + const updatedFields = { + full_name: req.body.fullName || null, + pronounce: req.body.pronounce || null, + // role: req.body.role || null, + // department: req.body.department || null, + about: req.body.about || null, + email: req.body.email || null, // Add email field + // Add other fields to update as needed + } + + // console.log(updatedFields) + + const user = req.user // Assuming req.user contains the user details, adjust accordingly + + // Filter out fields with null values + const filteredFields = Object.fromEntries( + Object.entries(updatedFields).filter(([_, value]) => value !== null) + ) + + // If no fields are provided for update, return a response + if (Object.keys(filteredFields).length === 0) { + return res.json({ success: 1, message: "No fields to update" }) + } + + // Construct the SQL query dynamically based on the provided filteredFields + const updateFieldsSql = Object.keys(filteredFields) + .map((key) => `${key} = ?`) + .join(", ") + + // Add the user_id to the filteredFields + filteredFields.user_id = user.user_id + + // Construct the parameters array for the query + const queryParams = Object.values(filteredFields) + + // Update the specified non-null fields, including the updateDate, in sec_users + await executeQuery( + `UPDATE sec_users SET ${updateFieldsSql} WHERE user_id = ?`, + queryParams + ) + + res.json({ success: 1, message: "User profile updated successfully" }) + } catch (error) { + console.error(error) + res.status(500).json({ success: 0, message: "Internal Server Error" }) + } +} + +const uploadPath = path.join(process.cwd(), "uploaded-picture") + +// Create the 'uploaded-picture' directory if it doesn't exist +if (!fs.existsSync(uploadPath)) { + fs.mkdirSync(uploadPath) +} + +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, uploadPath) + }, + filename: (req, file, cb) => { + const userId = req.user.user_id + const ext = path.extname(file.originalname) + const fileName = `profile-pic-${userId}-${uuidv4()}${ext}` + cb(null, fileName) + }, +}) + +const upload = multer({ storage: storage }) + +const uploadProfilePhoto = (req, res) => { + try { + const userId = req.user.user_id + const usernameFolder = req.user.user_name + + const userFolderPath = path.join( + process.cwd(), + "uploaded-picture", + usernameFolder + ) + + if (!fs.existsSync(userFolderPath)) { + fs.mkdirSync(userFolderPath) + } + + const currentDate = new Date() + .toISOString() + .replace(/:/g, "-") + .substring(0, 19) + const fileNewName = `profile-pic-${userId}-${currentDate}.png` + const destinationPath = path.join( + userFolderPath, + fileNewName.replace(/ /g, "_") + ) + + const updateQuery = "UPDATE sec_users SET photo_name = ? WHERE user_id = ?" + + pool.query(updateQuery, [fileNewName, userId], (error, results) => { + if (error) { + console.error(error) + return res + .status(500) + .json({ success: false, message: "Internal Server Error" }) + } + + // Use req.file.path to get the temporary path of the uploaded file + // console.log(req) + // console.log("Request body:", req.body) // Log the entire request body + // console.log("Request file:", req.file.path) // Log the uploaded file information + // fs.renameSync(req.file.path, destinationPath) + fs.writeFileSync(destinationPath, req.file.buffer) + + res.json({ + success: true, + message: "Profile picture uploaded successfully", + }) + }) + } catch (error) { + console.error(error) + res.status(500).json({ success: false, message: "Internal Server Error" }) + } +} + +const retrieveProfilePhoto = async (req, res) => { + try { + const userId = req.user.user_id.toString() + const usernameFolder = req.user.user_name + + // Retrieve the file name from the database + const selectQuery = "SELECT photo_name FROM sec_users WHERE user_id = ?" + + const [results] = await executeQuery(selectQuery, [userId]) + + // console.log(results) + + if (results.length === 0 || !results.photo_name) { + return res.status(404).json({ + success: false, + message: "Profile picture not found. First try uploading one...!!", + }) + } + + const fileName = results.photo_name + const filePath = path.join( + process.cwd(), + "uploaded-picture", + usernameFolder, + fileName + ) + + const imageBuffer = await readFileAsync(filePath) + + // Convert the image buffer to a base64-encoded string + const encodeBase64 = imageBuffer.toString("base64") + const ext = path.extname(filePath).substring(1) + + // Construct the data URL + const dataURL = `data:image/${ext};base64,${encodeBase64}` + + // Send the data URL as a JSON response + res.json({ + success: true, + message: "Profile picture retrieved successfully", + image: dataURL, + }) + } catch (error) { + console.error(error) + res.status(500).json({ success: false, message: "Internal Server Error" }) + } +} + +const createUserMaintainence = (req, res) => { + const body = req.body + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + pool.query( + `INSERT sec_users SET user_id = ?, change_passw = ?, email = ?, full_name = ?, is_blocked = ?, mob_no = ?, user_passw = ?, user_name = ?, usr_grp_id = ?, account_id = ?, usr_grp = ?, createdate = ?`, + [ + body.user_id, + body.is_complete, + body.change_passw, + body.email, + body.full_name, + body.is_blocked, + body.mob_no, + body.user_passw, + body.user_name, + body.usr_grp_id, + body.account_id, + body.usr_grp, + dateTime, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + if (!results) { + return res.json({ + success: 0, + message: "Failed to create user", + }) + } + return res.json({ + success: 1, + data: "created succesfully", + }) + } + ) +} + +const deleteUserMaintainence = (req, res) => { + const id = req.params.id + pool.query( + `DELETE FROM sec_menu_det WHERE menu_item_id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + return res.json({ + success: 1, + data: "user deleted succesfully", + }) + } + ) +} + + +// By Rajeev +// const loadMenuByUser = async (req, res) => { +// try { +// // Simulate getting the logged-in user's group (usrGrp) +// const usrgrp = req.user.usr_grp // Replace this with your actual logic to get the user's group + +// // Find root menu items where menu_id is 0 +// let sql = `SELECT * FROM sec_grp_menu_access WHERE menu_id = 0 AND status= 'Enable' AND usr_grp = ${usrgrp} ORDER BY item_seq` +// const root = await executeQuery(sql) + +// const renameFields = (obj) => { +// const newObj = {} +// for (const key in obj) { +// switch (key) { +// case "usr_grp": +// newObj["usrGrp"] = obj[key] +// break +// case "menu_item_id": +// newObj["menuItemId"] = obj[key] +// break +// case "item_seq": +// newObj["itemSec"] = obj[key] +// break +// case "menu_id": +// newObj["menuId"] = obj[key] +// break +// case "menu_item_desc": +// newObj["menuItemDesc"] = obj[key] +// break +// case "m_create": +// newObj["mcreate"] = obj[key] +// break +// case "m_delete": +// newObj["mdelete"] = obj[key] +// break +// case "m_edit": +// newObj["medit"] = obj[key] +// break +// case "m_query": +// newObj["mquery"] = obj[key] +// break +// case "m_visible": +// newObj["mvisible"] = obj[key] +// break +// default: +// newObj[key] = obj[key] +// } +// } +// return newObj +// } + +// const renameSubmenuFields = (submenu) => { +// const newSubmenu = {} +// for (const key in submenu) { +// switch (key) { +// case "usr_grp": +// newSubmenu["usrGrp"] = submenu[key] +// break +// case "menu_item_id": +// newSubmenu["menuItemId"] = submenu[key] +// break +// case "item_seq": +// newSubmenu["itemSec"] = submenu[key] +// break +// case "menu_id": +// newSubmenu["menuId"] = submenu[key] +// break +// case "menu_item_desc": +// newSubmenu["menuItemDesc"] = submenu[key] +// break +// case "m_create": +// newSubmenu["mcreate"] = submenu[key] +// break +// case "m_delete": +// newSubmenu["mdelete"] = submenu[key] +// break +// case "m_edit": +// newSubmenu["medit"] = submenu[key] +// break +// case "m_query": +// newSubmenu["mquery"] = submenu[key] +// break +// case "m_visible": +// newSubmenu["mvisible"] = submenu[key] +// break +// default: +// newSubmenu[key] = submenu[key] +// } +// } +// return newSubmenu +// } + +// // for (let i = 0; i < root.length; i++) { +// // const rootMenuItem = root[i] + +// // // Find menu items by menu_id (rootMenuItemId) and usrGrp +// // let sql1 = `SELECT * FROM sec_grp_menu_access a WHERE a.usr_grp =${usrgrp} and a.menu_item_id=${rootMenuItem.menu_item_id}` +// // const menu = await executeQuery(sql1) + +// for (const menuItem of root) { +// // Find all submenu items with status +// let sql2 = `SELECT * FROM sec_grp_menu_access a where a.status= 'Enable' and a.menu_id=${menuItem.menu_item_id} and a.usr_grp =${usrgrp} ORDER BY item_seq` +// const allSubmenu = await executeQuery(sql2) + +// for (const subMenus of allSubmenu) { +// let sqlNew = `SELECT * FROM sec_user_group where usr_grp=${usrgrp}` +// const sqlNewResult = await executeQuery(sqlNew) + +// let sqlMenuItemId = `SELECT * FROM sec_menu_det where menu_item_id=${menuItem.menu_item_id}` +// const sqlMenuItemIdResult = await executeQuery(sqlMenuItemId) + +// subMenus.usrGrp = sqlNewResult[0] +// subMenus.menuItemId = sqlMenuItemIdResult[0] +// } + +// let sqlNew = `SELECT * FROM sec_user_group where usr_grp=${usrgrp}` +// const sqlNewResult = await executeQuery(sqlNew) + +// let sqlMenuItemId = `SELECT * FROM sec_menu_det where menu_item_id=${menuItem.menu_item_id}` +// const sqlMenuItemIdResult = await executeQuery(sqlMenuItemId) + +// menuItem.subMenus = allSubmenu.map(renameSubmenuFields) +// menuItem.usrGrp = sqlNewResult[0] +// // updatedUsrGrp = menuItem.usrGrp +// // menuItem.usrGrp = updatedUsrGrp.map(renameSubmenuFields) +// menuItem.menuItemId = sqlMenuItemIdResult[0] +// } + +// // rootMenuItem.subMenus = menu +// // } +// for (let i = 0; i < root.length; i++) { +// const rootMenuItem = root[i] +// root[i] = renameFields(rootMenuItem) +// } + +// res.status(200).json(root) +// console.log(root); +// } catch (error) { +// console.error(error) +// res.status(500).json({ message: "Internal server error" }) +// } +// } + +// By Gk +const loadMenuByUser = async (req, res) => { + try { + const usrgrp = req.user.usr_grp; // Get the logged-in user's group + + // Batch query to fetch root menu items along with the necessary details + const rootQuery = ` + SELECT + a.*, + b.group_name, + c.menu_item_desc AS menu_item_desc_det, + c.main_menu_icon_name, + c.main_menu_action_name + + FROM + sec_grp_menu_access a + LEFT JOIN + sec_user_group b ON a.usr_grp = b.usr_grp + LEFT JOIN + sec_menu_det c ON a.menu_item_id = c.menu_item_id + WHERE + a.menu_id = 0 AND a.status = 'Enable' AND a.usr_grp = ? + ORDER BY + a.item_seq; + `; + + const root = await executeQuery(rootQuery, [usrgrp]); + + // Prepare a map of root menu items to fetch submenus in a single query + const menuItemIds = root.map(item => item.menu_item_id); + + if (menuItemIds.length > 0) { + const submenuQuery = ` + SELECT + a.*, + b.group_name, + c.menu_item_desc AS menu_item_desc_det, + c.main_menu_icon_name, + c.main_menu_action_name + FROM + sec_grp_menu_access a + LEFT JOIN + sec_user_group b ON a.usr_grp = b.usr_grp + LEFT JOIN + sec_menu_det c ON a.menu_item_id = c.menu_item_id + WHERE + a.status = 'Enable' + AND a.menu_id IN (${menuItemIds.join(',')}) + AND a.usr_grp = ? + ORDER BY + a.item_seq; + `; + + const submenus = await executeQuery(submenuQuery, [usrgrp]); + + // Organize submenus under their respective root menu items + const submenuMap = {}; + submenus.forEach(submenu => { + if (!submenuMap[submenu.menu_id]) { + submenuMap[submenu.menu_id] = []; + } + submenuMap[submenu.menu_id].push(renameSubmenuFields(submenu)); + }); + + // Assign submenus to their corresponding root menu items + root.forEach(item => { + item.subMenus = submenuMap[item.menu_item_id] || []; + }); + } else { + // If no root items, set subMenus to empty arrays + root.forEach(item => { + item.subMenus = []; + }); + } + + // Rename fields for root menu items + const formattedRoot = root.map(renameFields); + + res.status(200).json(formattedRoot); + console.log(formattedRoot); + } catch (error) { + console.error(error); + res.status(500).json({ message: "Internal server error" }); + } +}; + +const renameFields = (obj) => { + return { + usrGrp: obj.usr_grp, + menuItemId: obj.menu_item_id, + itemSec: obj.item_seq, + menuId: obj.menu_id, + menuItemDesc: obj.menu_item_desc, + mcreate: obj.m_create, + mdelete: obj.m_delete, + medit: obj.m_edit, + mquery: obj.m_query, + mvisible: obj.m_visible, + main_menu_action_name: obj.main_menu_action_name, + main_menu_icon_name: obj.main_menu_icon_name, // Include the main_menu_icon_name + subMenus: obj.subMenus || [] + }; +}; + +const renameSubmenuFields = (submenu) => { + return { + usrGrp: submenu.usr_grp, + menuItemId: submenu.menu_item_id, + itemSec: submenu.item_seq, + menuId: submenu.menu_id, + menuItemDesc: submenu.menu_item_desc, + mcreate: submenu.m_create, + mdelete: submenu.m_delete, + medit: submenu.m_edit, + mquery: submenu.m_query, + mvisible: submenu.m_visible, + main_menu_action_name: submenu.main_menu_action_name, + main_menu_icon_name: submenu.main_menu_icon_name // Include the main_menu_icon_name + }; +}; + + + + +// Report + + +const createReport = async (req, res) => { + const body = req.body + try { + const params = [body.reportName, + body.description, + body.active, + body.isSql + ] + + // Replace undefined with null in parameters + const sanitizedParams = params.map((param) => + param !== undefined ? param : null + ) + + await executeQuery( + ` + INSERT INTO rpt_builder2_t (report_name, description, active,is_sql) + VALUES (?, ?, ?,?); + `, + sanitizedParams + ); + + + return res.json({ + success: 1, + content: "Report created successfully", + }) + } catch (error) { + console.error(error) + return res.status(500).json({ + success: 0, + message: "Error creating report", + error: error.message, + }) + } +} + +const getAllReportBuilder = async (req, res) => { + pool.query( + `SELECT + r.id as reportId, + r.report_name as reportName, + r.description, + r.active, + l.id as lineId, + l.header_id, + l.model + FROM rpt_builder2_t r + LEFT JOIN rpt_builder2_lines_t l ON r.id = l.rpt_builder2_t_id`, + [], + (error, results, fields) => { + if (error) { + console.error("Error executing SQL query:", error) + return res.status(500).json({ + success: 0, + message: "Internal Server Error", + }) + } + + if (results.length === 0) { + return res.json({ + success: 0, + message: "No data found", + }) + } + + // console.log("Data retrieved successfully:", results) + + // Group results by report ID + const groupedResults = results.reduce((acc, result) => { + const existingReport = acc.find((item) => item.id === result.reportId) + if (existingReport) { + existingReport.rpt_builder2_lines.push({ + id: result.lineId, + header_id: result.header_id, + model: result.model, + }) + } else { + acc.push({ + id: result.reportId, + reportName: result.reportName, + description: result.description, + active: result.active, + rpt_builder2_lines: [ + { + id: result.lineId, + header_id: result.header_id, + model: result.model, + }, + ], + }) + } + return acc + }, []) + + return res.status(200).json(groupedResults) + } + ) +} + +const getAllReportBuilderById = async (req, res) => { + const id = req.params.id + + pool.query( + `SELECT + r.id as reportId, + r.report_name as reportName, + r.description, + r.active, + l.id as lineId, + l.header_id, + l.model + FROM rpt_builder2_t r + LEFT JOIN rpt_builder2_lines_t l ON r.id = l.rpt_builder2_t_id + WHERE r.id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.error("Error executing SQL query:", error) + return res.status(500).json({ + success: 0, + message: "Internal Server Error", + }) + } + + if (results.length === 0) { + return res.status(404).json({ + success: 0, + message: "No data found for the given ID", + }) + } + + // Group results by report ID + const groupedResults = results.reduce((acc, result) => { + const existingReport = acc.find((item) => item.id === result.reportId) + if (existingReport) { + existingReport.rpt_builder2_lines.push({ + id: result.lineId, + header_id: result.header_id, + model: result.model, + }) + } else { + acc.push({ + id: result.reportId, + reportName: result.reportName, + description: result.description, + active: result.active, + rpt_builder2_lines: [ + { + id: result.lineId, + header_id: result.header_id, + model: result.model, + }, + ], + }) + } + return acc + }, []) + + return res.status(200).json(groupedResults) + } + ) +} + +const getAllReportBuilderByQuery = async (req, res) => { + const query = req.params.query + // console.log(query); + pool.query(query, (error, results, fields) => { + if (error) { + console.log(error) + return res.status(500).json({ + success: 0, + message: "Error fetching data from the database", + }) + } + if (results.length === 0) { + return res.status(404).json({ + success: 0, + message: "No data found", + }) + } + return res.status(200).json(results) + }) +} + +const updateReportBuilder = async (req, res) => { + const id = req.params.id + const body = req.body + + pool.query( + `UPDATE rpt_builder2_t SET + report_name = ?, + description = ?, + active = ?, + is_sql = ? + WHERE id = ?`, + [body.report_name, body.description, body.active, body.is_sql, id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.status(500).json({ + success: 0, + message: "Error updating record in the database", + }) + } + if (results.affectedRows === 0) { + return res.status(404).json({ + success: 0, + message: "Record not found", + }) + } + return res.status(200).json({ + success: 1, + message: "Record updated successfully", + }) + } + ) +} + +const deleteReportBuilder = async (req, res) => { + const id = req.params.id + pool.query( + `DELETE FROM rpt_builder2_t WHERE id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.status(500).json({ + success: 0, + message: "Error deleting record from the database", + }) + } + if (results.affectedRows === 0) { + return res.status(404).json({ + success: 0, + message: "Record not found", + }) + } + return res.status(200).json({ + success: 1, + message: "Record deleted successfully", + }) + } + ) +} + +// Report Line + +const getReportLine = async (req, res) => { + pool.query( + `SELECT * FROM rpt_builder2_lines_t `, + [], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + } + ) +} + +const getReportLineById = async (req, res) => { + const id = req.params.id + pool.query( + `SELECT * FROM rpt_builder2_lines_t WHERE rpt_builder2_t_id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + } + ) +} + +const updateReportLine = async (req, res) => { + const id = req.params.id + const body = req.body + + pool.query( + `UPDATE rpt_builder2_lines_t SET header_id = ?, model = ? WHERE rpt_builder2_t_id = ?`, + [body.header_id, body.model, id], + (error, results, fields) => { + if (error) { + console.log(error) + } + if (!results) { + return res.status(400).json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json({ + success: 1, + message: "Record updated succesfully", + }) + } + ) +} + +// Dashboard + +const getAllDashboard = async (req, res) => { + + pool.query( + `SELECT + h.id, + h.account_id, + h.created_at AS createdAt, + h.created_by AS createdBy, + h.updated_at AS updatedAt, + h.updated_by AS updatedBy, + CAST(h.is_build AS UNSIGNED) AS build, + CAST(h.testing AS UNSIGNED) AS testing, + h.dashboard_name, + h.module_id, + h.description, + h.menu_name, + h.object_type, + h.secuirity_profile, + h.sub_object_type, + h.tech_stack, + h.is_updated, + l.id AS lineId, + l.created_at AS lineCreatedAt, + l.created_by AS lineCreatedBy, + l.updated_at AS lineUpdatedAt, + l.updated_by AS lineUpdatedBy, + l.account_id AS lineAccountId, + l.header_id, + l.model + FROM dashbord_header h + LEFT JOIN dashbord1_line l ON h.id = l.dashbord_header_id + `, + + async (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Error fetching data from the database", + }) + } + + // If there are no results, return an empty array + if (results.length === 0) { + return res.status(200).json([]) + } + + // Organize the data into the desired structure + const dashboards = results.map((dashboardHeader) => { + return { + createdAt: dashboardHeader.createdAt, + createdBy: dashboardHeader.createdBy, + updatedBy: dashboardHeader.updatedBy, + updatedAt: dashboardHeader.updatedAt, + accountId: dashboardHeader.account_id, + id: dashboardHeader.id, + menuName: dashboardHeader.menu_name, + updated: dashboardHeader.is_updated === 1, + techStack: dashboardHeader.tech_stack, + object_type: dashboardHeader.object_type, + sub_object_type: dashboardHeader.sub_object_type, + build: !!dashboardHeader.build, // Convert to boolean + testing: !!dashboardHeader.testing, // Convert to boolean + dashboard_name: dashboardHeader.dashboard_name, + module_id: dashboardHeader.module_id, + description: dashboardHeader.description, + secuirity_profile: dashboardHeader.secuirity_profile, + dashbord1_Line: dashboardHeader.lineId + ? [ + { + createdAt: dashboardHeader.lineCreatedAt, + createdBy: dashboardHeader.lineCreatedBy, + updatedBy: dashboardHeader.lineUpdatedBy, + updatedAt: dashboardHeader.lineUpdatedAt, + accountId: dashboardHeader.lineAccountId, + id: dashboardHeader.lineId, + header_id: dashboardHeader.header_id, + model: dashboardHeader.model, // Parse the JSON model + }, + ] + : [], + } + }) + + return res.status(200).json(dashboards) + } + ) +} + + +const getDashboardByModuleId = async (req, res) => { + const module_id = req.query.module_id + + pool.query( + `SELECT + h.id, + h.account_id, + h.created_at AS createdAt, + h.created_by AS createdBy, + h.updated_at AS updatedAt, + h.updated_by AS updatedBy, + CAST(h.is_build AS UNSIGNED) AS build, + CAST(h.testing AS UNSIGNED) AS testing, + h.dashboard_name, + h.module_id, + h.description, + h.menu_name, + h.object_type, + h.secuirity_profile, + h.sub_object_type, + h.tech_stack, + h.is_updated, + l.id AS lineId, + l.created_at AS lineCreatedAt, + l.created_by AS lineCreatedBy, + l.updated_at AS lineUpdatedAt, + l.updated_by AS lineUpdatedBy, + l.account_id AS lineAccountId, + l.header_id, + l.model + FROM dashbord_header h + LEFT JOIN dashbord1_line l ON h.id = l.dashbord_header_id + WHERE h.module_id = ?`, + [module_id], + async (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Error fetching data from the database", + }) + } + + // If there are no results, return an empty array + if (results.length === 0) { + return res.status(200).json([]) + } + + // Organize the data into the desired structure + const dashboards = results.map((dashboardHeader) => { + return { + createdAt: dashboardHeader.createdAt, + createdBy: dashboardHeader.createdBy, + updatedBy: dashboardHeader.updatedBy, + updatedAt: dashboardHeader.updatedAt, + accountId: dashboardHeader.account_id, + id: dashboardHeader.id, + menuName: dashboardHeader.menu_name, + updated: dashboardHeader.is_updated === 1, + techStack: dashboardHeader.tech_stack, + object_type: dashboardHeader.object_type, + sub_object_type: dashboardHeader.sub_object_type, + build: !!dashboardHeader.build, // Convert to boolean + testing: !!dashboardHeader.testing, // Convert to boolean + dashboard_name: dashboardHeader.dashboard_name, + module_id: dashboardHeader.module_id, + description: dashboardHeader.description, + secuirity_profile: dashboardHeader.secuirity_profile, + dashbord1_Line: dashboardHeader.lineId + ? [ + { + createdAt: dashboardHeader.lineCreatedAt, + createdBy: dashboardHeader.lineCreatedBy, + updatedBy: dashboardHeader.lineUpdatedBy, + updatedAt: dashboardHeader.lineUpdatedAt, + accountId: dashboardHeader.lineAccountId, + id: dashboardHeader.lineId, + header_id: dashboardHeader.header_id, + model: dashboardHeader.model, // Parse the JSON model + }, + ] + : [], + } + }) + + return res.status(200).json(dashboards) + } + ) +} + +const getAllDashboardHeaderById = async (req, res) => { + const dashboardId = req.params.id + const moduleId = req.query.module_id + + pool.query( + `SELECT + h.id, + h.account_id, + h.created_at AS createdAt, + h.created_by AS createdBy, + h.updated_at AS updatedAt, + h.updated_by AS updatedBy, + CAST(h.is_build AS UNSIGNED) AS build, + CAST(h.testing AS UNSIGNED) AS testing, + h.dashboard_name, + h.module_id, + h.description, + h.menu_name, + h.object_type, + h.secuirity_profile, + h.sub_object_type, + h.tech_stack, + h.is_updated, + l.id AS lineId, + l.created_at AS lineCreatedAt, + l.created_by AS lineCreatedBy, + l.updated_at AS lineUpdatedAt, + l.updated_by AS lineUpdatedBy, + l.account_id AS lineAccountId, + l.header_id, + l.model + FROM dashbord_header h + LEFT JOIN dashbord1_line l ON h.id = l.dashbord_header_id + WHERE h.id = ?`, + [dashboardId], + async (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Error fetching data from the database", + }) + } + + // If there are no results, return a 404 response + if (results.length === 0) { + return res.status(404).json({ + success: 0, + message: "No data found for the given ID and module ID", + }) + } + + // Organize the data into the desired structure + const dashboardHeader = results[0] // Assuming there's only one record + + const dashboard = { + createdAt: dashboardHeader.createdAt, + createdBy: dashboardHeader.createdBy, + updatedBy: dashboardHeader.updatedBy, + updatedAt: dashboardHeader.updatedAt, + accountId: dashboardHeader.account_id, + id: dashboardHeader.id, + menuName: dashboardHeader.menu_name, + updated: dashboardHeader.is_updated === 1, + techStack: dashboardHeader.tech_stack, + object_type: dashboardHeader.object_type, + sub_object_type: dashboardHeader.sub_object_type, + build: !!dashboardHeader.build, // Convert to boolean + testing: !!dashboardHeader.testing, // Convert to boolean + dashboard_name: dashboardHeader.dashboard_name, + module_id: dashboardHeader.module_id, + description: dashboardHeader.description, + secuirity_profile: dashboardHeader.secuirity_profile, + dashbord1_Line: dashboardHeader.lineId + ? [ + { + createdAt: dashboardHeader.lineCreatedAt, + createdBy: dashboardHeader.lineCreatedBy, + updatedBy: dashboardHeader.lineUpdatedBy, + updatedAt: dashboardHeader.lineUpdatedAt, + accountId: dashboardHeader.lineAccountId, + id: dashboardHeader.lineId, + header_id: dashboardHeader.header_id, + model: dashboardHeader.model, // Parse the JSON model + }, + ] + : [], + } + + return res.status(200).json(dashboard) + } + ) +} + +const createDashboard = (req, res) => { + const body = req.body + + var today = new Date() + + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + + // Insert into dashbord_header + pool.query( + `INSERT dashbord_header SET + created_at = ?, + updated_at = ?, + is_build = ?, + dashboard_name = ?, + description = ?, + menu_name = ?, + module_id = ?, + secuirity_profile = ?, + tech_stack = ?, + is_updated = ?, + object_type = ?, + sub_object_type = ?, + testing = ?`, + [ + dateTime, + dateTime, + body.is_build || null, + body.dashboard_name || null, + body.description || null, + body.menu_name || null, + body.module_id || 0, // Provide a default value for module_id + body.secuirity_profile || null, + body.tech_stack || null, + body.is_updated || null, + body.object_type || null, + body.sub_object_type || null, + body.testing || false, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Failed to create dashboard", + }) + } + if (!results.insertId) { + return res.json({ + success: 0, + message: "Failed to create dashboard", + }) + } + + const dashboardId = results.insertId + + // Insert into dashbord1_line + pool.query( + `INSERT dashbord1_line SET + created_at = ?, + updated_at = ?, + model = ?, + header_id = ?, + dashbord_header_id = ?`, + [ + dateTime, + dateTime, + body.model || null, // Assuming you have 'model' in your request body + body.header_id || null, // Assuming you have 'header_id' in your request body + dashboardId, + ], + (lineError, lineResults, lineFields) => { + if (lineError) { + console.log(lineError) + // Handle error, you might want to rollback the dashboard_header insertion + return res.json({ + success: 0, + message: "Failed to create dashboard and line", + }) + } + + return res.json({ + success: 1, + data: "created successfully", + }) + } + ) + } + ) +} + +const updateDashboard = (req, res) => { + const { id } = req.params + const body = req.body + + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + + pool.query( + `UPDATE dashbord_header SET + updated_at = ?, + is_build = ?, + dashboard_name = ?, + description = ?, + menu_name = ?, + module_id = ?, + secuirity_profile = ?, + tech_stack = ?, + is_updated = ?, + object_type = ?, + sub_object_type = ?, + testing = ? + WHERE id = ?`, + [ + dateTime, + body.is_build || null, + body.dashboard_name || null, + body.description || null, + body.menu_name || null, + body.module_id || null, + body.secuirity_profile || null, + body.tech_stack || null, + body.is_updated || null, + body.object_type || null, + body.sub_object_type || null, + body.testing || null, + id, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Failed to update dashboard", + }) + } + if (results.affectedRows === 0) { + return res.json({ + success: 0, + message: "No records found for the given ID", + }) + } + return res.json({ + success: 1, + data: "updated successfully", + }) + } + ) +} + +const deleteDashboard = async (req, res) => { + const id = req.params.id + pool.query( + `DELETE FROM dashbord_header WHERE id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + return res.json({ + success: 1, + data: "Deleted succesfully", + }) + } + ) +} + +//// Dashboard Line + +const getDashboardLine = async (req, res) => { + const id = req.params.id + pool.query(`SELECT * FROM dashbord1_line`, [id], (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + }) +} + +const getDashboardLineById = async (req, res) => { + const id = req.params.id + pool.query( + `SELECT * FROM dashbord1_line WHERE id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + } + ) +} + +const updateDashboardLineById = async (req, res) => { + const id = req.params.id + const body = req.body + + var today = new Date() + + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + + pool.query( + `UPDATE dashbord1_line SET updated_at = ?, created_by = ?, updated_by = ?, model = ? WHERE id = ${id}`, + [dateTime, body.created_by, body.updated_by, body.model, id], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + if (!results) { + return res.json({ + success: 0, + message: "Failed to update dashboard", + }) + } + return res.json({ + success: 1, + data: "Updated succesfully", + }) + } + ) +} + +//// System Parameter + +const getSystemParameter = async (req, res) => { + pool.query(`SELECT * FROM system_paramaters`, (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + }) +} + +const getSystemParameterById = async (req, res) => { + var id = req.params.id + if (id == null) { + id = 1 + } + pool.query( + `SELECT * FROM system_paramaters WHERE id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + } + ) +} + +const createSystemParameter = async (req, res) => { + const body = req.body + pool.query( + `INSERT system_paramaters SET edi_mae_scheduler_onoff = ?, edi_scheduler_onoff = ?, base_price_list = ?, billing_department_code = ?, cn_billing_frequency = ?, default_department = ?, default_position = ?, first_dayof_the_week = ?, hour_per_shift = ?, lease_tax_code = ?, link_to_display = ?, lov_link_to_display = ?, lov_row_to_display = ?, noncontainer_serviceorder_auto_appdepcode = ?, oid_admin_user = ?, oid_base = ?, oid_server_port = ?, oid_server_name = ?, row_to_add = ?, row_to_display = ?, scheduler_time = ?, single_charge = ?, user_default_group = ?, vessel_conf_processlimit = ?, company_display_name = ?, upload_logo = ?, upload_logo_name = ?, upload_logo_path = ?`, + [ + body.edi_mae_scheduler_onoff, + body.edi_scheduler_onoff, + body.base_price_list, + body.billing_department_code, + body.cn_billing_frequency, + body.default_department, + body.default_position, + body.first_dayof_the_week, + body.hour_per_shift, + body.lease_tax_code, + body.link_to_display, + body.lov_link_to_display, + body.lov_row_to_display, + body.noncontainer_serviceorder_auto_appdepcode, + body.oid_admin_user, + body.oid_base, + body.oid_server_port, + body.oid_server_name, + body.row_to_add, + body.row_to_display, + body.scheduler_time, + body.single_charge, + body.user_default_group, + body.vessel_conf_processlimit, + body.company_display_name, + body.upload_logo, + body.upload_logo_name, + body.upload_logo_path, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + if (!results) { + return res.json({ + success: 0, + message: "Failed to create dashboard", + }) + } + return res.json({ + success: 1, + data: "created succesfully", + }) + } + ) +} + +const updateSystemParameter = async (req, res) => { + const id = req.params.id + const body = req.body + + pool.query( + `UPDATE system_paramaters SET edi_mae_scheduler_onoff = ?, edi_scheduler_onoff = ?, base_price_list = ?, billing_department_code = ?, cn_billing_frequency = ?, default_department = ?, default_position = ?, first_dayof_the_week = ?, hour_per_shift = ?, lease_tax_code = ?, link_to_display = ?, lov_link_to_display = ?, lov_row_to_display = ?, noncontainer_serviceorder_auto_appdepcode = ?, oid_admin_user = ?, oid_base = ?, oid_server_port = ?, oid_server_name = ?, row_to_add = ?, row_to_display = ?, scheduler_time = ?, single_charge = ?, user_default_group = ?, vessel_conf_processlimit = ?, company_display_name = ?, upload_logo = ?, upload_logo_name = ?, upload_logo_path = ? where id = ${id}`, + [ + body.edi_mae_scheduler_onoff, + body.edi_scheduler_onoff, + body.base_price_list, + body.billing_department_code, + body.cn_billing_frequency, + body.default_department, + body.default_position, + body.first_dayof_the_week, + body.hour_per_shift, + body.lease_tax_code, + body.link_to_display, + body.lov_link_to_display, + body.lov_row_to_display, + body.noncontainer_serviceorder_auto_appdepcode, + body.oid_admin_user, + body.oid_base, + body.oid_server_port, + body.oid_server_name, + body.row_to_add, + body.row_to_display, + body.scheduler_time, + body.single_charge, + body.user_default_group, + body.vessel_conf_processlimit, + body.company_display_name, + body.upload_logo, + body.upload_logo_name, + body.upload_logo_path, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + if (!results) { + return res.json({ + success: 0, + message: "Failed to update Parameter", + }) + } + return res.json({ + success: 1, + data: "Updated succesfully", + }) + } + ) +} + +const deleteSystemParameter = async (req, res) => { + const id = req.params.id + pool.query( + `DELETE FROM system_paramaters WHERE id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + return res.json({ + success: 1, + data: "Deleted succesfully", + }) + } + ) +} + +// const test = async (req, res) => { +// try { +// // Simulate getting the logged-in user's group (usrGrp) +// const usrgrp = 1 // Replace this with your actual logic to get the user's group + +// // Find root menu items where menu_id is 0 +// let sql = `SELECT * FROM sec_grp_menu_access WHERE menu_id = 0 AND status= 'Enable' AND usr_grp = ${usrgrp} ORDER BY item_seq` +// const root = await executeQuery(sql) + +// for (let i = 0; i < root.length; i++) { +// const rootMenuItemId = root[i] + +// // Find menu items by menu_id (rootMenuItemId) and usrGrp +// let sql1 = `SELECT * FROM sec_grp_menu_access a WHERE a.usr_grp = ${usrgrp} and a.menu_item_id= ${rootMenuItemId.menu_item_id}` +// const menu = await executeQuery(sql1) + +// for (const menuItem of menu) { +// // Find all submenu items with status +// let sql2 = `SELECT * FROM sec_grp_menu_access a where a.status= 'Enable' and a.menu_id=${menuItem.menu_item_id} and a.usr_grp =${usrgrp} ORDER BY item_seq` +// const allSubmenu = await executeQuery(sql2) + +// menuItem.subMenus = allSubmenu +// } +// } + +// res.status(200).json(root) +// } catch (error) { +// console.error(error) +// res.status(500).json({ message: "Internal server error" }) +// } +// } + +const getLogs = (req, res) => { + const { userName } = req.params // Adjust this to your specific user identification method + + // Define the directory where the user's logs are stored + const logDir = path.join(__dirname, "../logs", userName) + + try { + // Read log files in the user's directory + const logFiles = fs.readdirSync(logDir) + + // Read the content of each log file + const logs = logFiles.map((file) => { + const logFilePath = path.join(logDir, file) + const logData = fs.readFileSync(logFilePath, "utf-8") + return { date: file, data: logData } + }) + + res.status(200).json({ logs }) + } catch (err) { + console.error(`Error while reading logs: ${err}`) + res.status(500).json({ error: "Internal Server Error" }) + } +} + +const addColumns = (req, res) => { + const { columnName, dataType } = req.body + + if (!Array.isArray(columnName) || !Array.isArray(dataType)) { + return res.send("Please provide multiple column names and data types.") + } + + if (columnName.length !== dataType.length) { + return res.send( + "Number of column names must match the number of data types." + ) + } + + const columnsToAdd = [] + for (let i = 0; i < columnName.length; i++) { + columnsToAdd.push(`${columnName[i]} ${dataType[i]}`) + } + + // Construct the SQL query + const sql = `ALTER TABLE your_table_name ADD COLUMN ${columnsToAdd.join( + ", " + )}` + + connection.query(sql, (err) => { + if (err) { + res.send(`Error: ${err.message}`) + } else { + res.send("Columns added successfully.") + } + }) +} + +//// Form Extension controller + +const getAllFormExtension = (req, res) => { + pool.query(`SELECT * FROM rn_ext_field_t`, (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + }) +} + +const getByIdFormExtension = (req, res) => { + const id = req.params.id + pool.query( + `SELECT * FROM rn_ext_field_t WHERE id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + } + ) +} + +const createFormExtension = async (req, res) => { + const body = req.body + // const currentDate = new Date().toISOString().slice(0, 10) // Get YYYY-MM-DD format + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + const user = req.user + console.log(req.user.user_name) + const email = req.user.email + + const sql = `SELECT account_id FROM sec_users WHERE email = ?` + const account_id = await executeQuery(sql, [email]) + // console.log(account_id[0].account_id) + + pool.query( + `INSERT INTO rn_ext_field_t SET created_at = ?, created_by = ?, account_id = ?, data_type = ?, field_name = ?, form_code = ?, is_active = ?, mapping = ?, type = ?`, + [ + dateTime, + req.user.user_name, + account_id[0].account_id, + body.data_type, + body.field_name, + body.form_code, + body.is_active, + body.mapping, + body.type, + ], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Some error occured", + }) + } + return res.json({ + success: 1, + data: "created succesfully", + }) + } + ) + + // console.log(account_id) +} + +const updateFormExtension = async (req, res) => { + const id = req.params.id + const body = req.body + // const currentDate = new Date().toISOString().slice(0, 10) // Get YYYY-MM-DD format + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + const email = req.user.email + const sql = `SELECT account_id FROM sec_users WHERE email = ?` + const account_id = await executeQuery(sql, [email]) + pool.query( + `UPDATE rn_ext_field_t SET updated_at = ?, updated_at = ?, account_id = ?, data_type = '${body.data_type}', field_name = '${body.field_name}', form_code = '${body.form_code}', is_active = '${body.is_active}', mapping = '${body.mapping}', type = '${body.type}' WHERE id = '${id}'`, + [dateTime, req.user.user_name, account_id[0].account_id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Some error occured", + }) + } + return res.json({ + success: 1, + data: "created succesfully", + }) + } + ) +} + +const deleteFormExtension = async (req, res) => { + const id = req.params.id + const body = req.body + pool.query( + `DELETE FROM rn_ext_field_t WHERE id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return + } + return res.json({ + success: 1, + data: "Deleted succesfully", + }) + } + ) +} + +const buildExtension = async (req, res) => { + const email = req.user.email + const sql = `SELECT account_id FROM sec_users WHERE email = ?` + const result = await executeQuery(sql, [email]) + const account_id = result[0].account_id + const formId = req.params.formId + + const sql2 = `SELECT field_name FROM rn_ext_field_t WHERE id = ?` + const field_name = await executeQuery(sql, [formId]) + console.log(field_name) + const formCode = await buildExtensionByFormCode(account_id, formId) + if (!formCode) { + res.status(500).json({ success: 0, message: "Some error occured!" }) + } + + const mailOptions = { + from: "example.com", + to: email, + subject: "Email for informing about form Extension", + text: `Your form with form id ${formId} is extended with FieldName ${field_name}`, + } + + transporter.sendMail(mailOptions, (error) => { + if (error) { + console.log(error) + console.log({ message: "Error sending Email" }) + } + console.log({ message: "Email sent successfully" }) + }) + + console.log(formCode) + res.status(200).json(formCode[0]) +} + +const userMenu = (req, res) => { + pool.query(`SELECT * FROM accesstype`, (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + }) +} + +const test = (req, res) => { + const id = req.params.id + pool.query( + `SELECT field_name FROM rn_ext_field_t WHERE id = ?`, + [id], + (error, results, fields) => { + if (error) { + console.log(error) + return res.json({ + success: 0, + message: "Table is empty", + }) + } + return res.status(200).json(results) + } + ) +} + +module.exports = { + getUsersUserGrpMaintenance, + getUsersByUserIdUserGrpMaintenance, + updateUsersUserGrpMaintenance, + createUsersUserGrpMaintenance, + deleteUsersUserGrpMaintenance, + getUsersMenuMaintainence, + getUsersByUserIdMenuMaintainence, + createUsersMenuMaintainence, + updateUsersMenuMaintainence, + deleteUsersMenuMaintainence, + getUsersByIdSubMenuMaintainence, + createUsersMenuAccessControl, + getUsersMenuAccessControl, + getUserMaintainence, + getByIdUserMaintainence, + createUserMaintainence, + updateUserMaintainence, + loadMenuByUser, + userMenu, + createReport, + getAllReportBuilder, + getAllReportBuilderById, + getAllReportBuilderByQuery, + updateReportBuilder, + deleteReportBuilder, + getReportLine, + getReportLineById, + updateReportLine, + + getAllDashboard, + getDashboardByModuleId, + getAllDashboardHeaderById, + createDashboard, + updateDashboard, + deleteDashboard, + getDashboardLine, + getDashboardLineById, + updateDashboardLineById, + getSystemParameter, + getSystemParameterById, + createSystemParameter, + updateSystemParameter, + deleteSystemParameter, + getLogs, + getAllFormExtension, + getByIdFormExtension, + createFormExtension, + updateFormExtension, + deleteFormExtension, + buildExtension, + login, + logout, + sendEmailForResetPassword, + resetPassword, + savePassword, + getLoggedInUser, + uploadProfilePhoto, + retrieveProfilePhoto, + test, +} diff --git a/pro118njsac-back-b/authsec_node/Backend/api/controller.js b/pro118njsac-back-b/authsec_node/Backend/api/controller.js new file mode 100644 index 0000000..3ae30cd --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/api/controller.js @@ -0,0 +1,389 @@ +const { pool, db } = require("../config/database") + +async function executeQuery(sql, values) { + const connection = await db.getConnection() + try { + const [rows] = await connection.execute(sql, values) + return rows + } finally { + connection.release() + } +} + +// Create a new record +const createDataInTable = async (req, res) => { + const { tableName } = req.params + const { data } = req.body + + const sql = `INSERT INTO ${tableName} SET ?` + + try { + const result = await executeQuery(sql, data) + res.json({ + message: "Record added successfully", + insertId: result.insertId, + }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error adding record" }) + } +} + +// Get all records from a table +const getTable = async (req, res) => { + const { tableName } = req.params + + const sql = `SELECT * FROM ${tableName}` + + try { + const records = await executeQuery(sql) + res.json(records) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error fetching records" }) + } +} + +// Get a record by ID +const getTableById = async (req, res) => { + const { tableName, id } = req.params + + const sql = `SELECT * FROM ${tableName} WHERE id = ?` + const values = [id] + + try { + const [record] = await executeQuery(sql, values) + if (!record) { + return res.status(404).json({ message: "Record not found" }) + } + res.json(record) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error fetching record" }) + } +} + +// Update a record by ID +const updateDataInTable = async (req, res) => { + const { tableName, id } = req.params + const body = req.body + + const sql = `UPDATE ${tableName} SET ? WHERE id = ?` + const values = [ + body.first_name, + body.last_name, + body.role, + body.email, + body.password, + body.number, + id, + ] + + try { + await executeQuery(sql, values) + res.json({ message: "Record updated successfully" }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error updating record" }) + } +} + +// Delete a record by ID +const deleteDataInTable = async (req, res) => { + const { tableName, id } = req.params + + const sql = `DELETE FROM ${tableName} WHERE id = ?` + const values = [id] + + try { + await executeQuery(sql, values) + res.json({ message: "Record deleted successfully" }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error deleting record" }) + } +} + +// Controllers for sec_menu_det and sec_grp_menu_access +const getTableByIdSec_Menu_Det = async (req, res) => { + const { id } = req.params + + const sql = `SELECT * FROM sec_menu_det WHERE menu_item_id = ?` + const values = [id] + + try { + const [record] = await executeQuery(sql, values) + if (!record) { + return res.status(404).json({ message: "Record not found" }) + } + res.json(record) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error fetching record" }) + } +} + +const addMenu = async (req, res) => { + const { id } = req.params + const sql = `SELECT * FROM sec_menu_det WHERE menu_item_id = ?` + const values = [id] + + try { + const [record] = await executeQuery(sql, values) + if (!record) { + return res.status(404).json({ message: "Record not found" }) + } + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + + const sqlIn = `INSERT INTO sec_grp_menu_access SET menu_item_id = ?, usr_grp = 41, created_at = ?, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ?, menu_item_desc = ?, module_name = ?, status = ?, item_seq = ?, updated_at = ?, isdisable = 'true', m_create = 'true', m_delete = 'true', m_edit = 'true' , m_query = 'true', m_visible = 'true'` + const valuesIn = [ + record.menu_item_id, + record.created_at, + record.main_menu_action_name, + record.main_menu_icon_name, + record.menu_id, + record.menu_item_desc, + record.module_name, + record.status, + record.item_seq, + dateTime, + ] + try { + const [recordIn] = await executeQuery(sqlIn, valuesIn) + } catch (errorIn) { + console.error("inside", errorIn) + } + res.json(record) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error fetching record Outside" }) + } +} + +const deleteMenu = async (req, res) => { + const { id } = req.params + const sql = `DELETE FROM sec_grp_menu_access WHERE menu_item_id = ?` + const values = [id] + try { + await executeQuery(sql, values) + res.json({ message: "Record deleted successfully" }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error deleting record" }) + } +} + +const updateMenu = async (req, res) => { + const { id } = req.params + const data = req.body + var today = new Date() + var date = + today.getFullYear() + "-" + (today.getMonth() + 1) + "-" + today.getDate() + var time = + today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds() + var dateTime = date + " " + time + const sql = `UPDATE sec_grp_menu_access SET usr_grp = 41, main_menu_action_name = ?, main_menu_icon_name = ?, menu_id = ?, menu_item_desc = ?, module_name = ?, status = ?, updated_at = ? WHERE menu_item_id = ?, isdisable = ?, item_seq= = ?, m_create= = ?, m_delete= = ?, m_edit= = ? , m_query= = ?, m_visible= = ?,` + const values = [ + data.main_menu_action_name, + data.main_menu_icon_name, + data.menu_id, + data.menu_item_desc, + data.module_name, + data.status, + dateTime, + id, + data.isdisable, + data.m_create, + data.m_delete, + data.m_edit, + data.m_query, + data.m_visible, + ] + try { + await executeQuery(sql, values) + res.json({ message: "Record updated successfully" }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error updating record" }) + } +} + +// Controller for Role table get and get id works from default one +const createDataInTableRole = async (req, res) => { + const data = req.body + + const sql = `INSERT INTO role SET description = ?, name = ?` + const values = [data.description, data.name] + + try { + const result = await executeQuery(sql, values) + res.json({ + message: "Record added successfully", + insertId: result.insertId, + }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error adding record" }) + } +} + +// Update a record by ID +const updateDataInTableRole = async (req, res) => { + const { id } = req.params + const body = req.body + + const sql = `UPDATE role SET description = ?, name = ? WHERE id = ?` + const values = [body.description, body.name, id] + + try { + await executeQuery(sql, values) + res.json({ message: "Record updated successfully" }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error updating record" }) + } +} + +// Delete a record by ID +const deleteDataInTableRole = async (req, res) => { + const { id } = req.params + + const sql = `DELETE FROM role WHERE id = ?` + const values = [id] + + try { + await executeQuery(sql, values) + res.json({ message: "Record deleted successfully" }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error deleting record" }) + } +} + +// CRUD for student table + +// Create a new record +const createDataInStudentTable = async (req, res) => { + const data = req.body + + const sql = `INSERT INTO student SET username = ?, password = ?, email = ?, full_name = ?, date_of_birth = ?, gender = ?, address = ?, department = ?` + const values = [ + data.username, + data.password, + data.email, + data.full_name, + data.date_of_birth, + data.gender, + data.address, + data.department, + ] + + try { + const result = await executeQuery(sql, values) + res.json({ + message: "Record added successfully", + insertId: result.insertId, + }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error adding record" }) + } +} + +// Get all records from a table +const getStudentTable = async (req, res) => { + const sql = `SELECT * FROM student` + + try { + const records = await executeQuery(sql) + res.json(records) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error fetching records" }) + } +} + +// Get a record by ID +const getStudentTableById = async (req, res) => { + const { id } = req.params + + const sql = `SELECT * FROM student WHERE id = ?` + const values = [id] + + try { + const [record] = await executeQuery(sql, values) + if (!record) { + return res.status(404).json({ message: "Record not found" }) + } + res.json(record) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error fetching record" }) + } +} + +// Update a record by ID +const updateDataInStudentTable = async (req, res) => { + const { id } = req.params + const data = req.body + + const sql = `UPDATE student SET username = ?, password = ?, email = ?, full_name = ?, date_of_birth = ?, gender = ?, address = ?, department = ? WHERE id = ?` + const values = [ + data.username, + data.password, + data.email, + data.full_name, + data.date_of_birth, + data.gender, + data.address, + data.department, + id, + ] + + try { + await executeQuery(sql, values) + res.json({ message: "Record updated successfully" }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error updating record" }) + } +} + +// Delete a record by ID +const deleteDataInStudentTable = async (req, res) => { + const sql = `DELETE FROM student WHERE id = ?` + const values = [id] + + try { + await executeQuery(sql, values) + res.json({ message: "Record deleted successfully" }) + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error deleting record" }) + } +} + +module.exports = { + getTable, + getTableById, + createDataInTable, + updateDataInTable, + deleteDataInTable, + addMenu, + deleteMenu, + updateMenu, + getTableByIdSec_Menu_Det, + createDataInTableRole, + updateDataInTableRole, + deleteDataInTableRole, + createDataInStudentTable, + getStudentTable, + getStudentTableById, + updateDataInStudentTable, + deleteDataInStudentTable, +} diff --git a/pro118njsac-back-b/authsec_node/Backend/api/output.json b/pro118njsac-back-b/authsec_node/Backend/api/output.json new file mode 100644 index 0000000..ce43bda --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/api/output.json @@ -0,0 +1,68 @@ +[ + { + "menu_item_id": 1527, + "usr_grp": 1, + "createby": null, + "created_at": "2023-02-10T04:37:57.000Z", + "isdisable": "true", + "item_seq": 1000, + "m_create": "true", + "m_delete": "true", + "m_edit": "true", + "m_query": "true", + "m_visible": "true", + "main_menu_action_name": "incidents", + "main_menu_icon_name": "incident", + "menu_id": 0, + "menu_item_desc": "Incidents", + "mexport": "true", + "module_name": "I1000", + "status": "Enable", + "updateby": null, + "updated_at": "2023-02-10T04:37:57.000Z" + }, + { + "menu_item_id": 1116, + "usr_grp": 1, + "createby": null, + "created_at": "2023-02-04T12:02:03.000Z", + "isdisable": "true", + "item_seq": 3000, + "m_create": "true", + "m_delete": "true", + "m_edit": "true", + "m_query": "true", + "m_visible": "true", + "main_menu_action_name": "security", + "main_menu_icon_name": "lock", + "menu_id": 0, + "menu_item_desc": "Security", + "mexport": "true", + "module_name": "sec3000", + "status": "Enable", + "updateby": null, + "updated_at": "2023-02-04T12:02:03.000Z" + }, + { + "menu_item_id": 1542, + "usr_grp": 1, + "createby": null, + "created_at": "2023-02-16T05:31:03.000Z", + "isdisable": "true", + "item_seq": 4000, + "m_create": "true", + "m_delete": "true", + "m_edit": "true", + "m_query": "true", + "m_visible": "true", + "main_menu_action_name": "admin", + "main_menu_icon_name": "user", + "menu_id": 0, + "menu_item_desc": "Admin", + "mexport": "true", + "module_name": "se4000", + "status": "Enable", + "updateby": null, + "updated_at": "2023-02-16T05:31:03.000Z" + } +] diff --git a/pro118njsac-back-b/authsec_node/Backend/api/user.controller.js b/pro118njsac-back-b/authsec_node/Backend/api/user.controller.js new file mode 100644 index 0000000..3f3d840 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/api/user.controller.js @@ -0,0 +1,176 @@ +const { pool, db } = require("../config/database") +const { genSaltSync, hashSync, compareSync } = require("bcrypt") +const { sign } = require("jsonwebtoken") +const bcrypt = require("bcrypt") +const otpGenerator = require("otp-generator") +const nodemailer = require("nodemailer") + +const transporter = nodemailer.createTransport({ + service: "gmail", // e.g., 'Gmail' + host: process.env.NODEMAILER_HOST, + port: process.env.NODEMAILER_PORT, + secure: false, + auth: { + user: process.env.NODEMAILER_USER, + pass: process.env.NODEMAILER_PASSWORD, + }, +}) + +async function executeQuery(sql, values) { + const connection = await pool.getConnection() + try { + const [rows] = await connection.execute(sql, values) + return rows + } finally { + connection.release() + } +} + +// path = /addOneAppUser +// const registerOld = async (req, res) => { +// const { email } = req.body + +// try { +// const rows = await pool.execute("SELECT * FROM sec_users WHERE email = ?", [ +// email, +// ]) +// if (rows.length > 0) { +// return res.status(400).json({ message: "Email already exists" }) +// } +// // Generate and save OTP +// const otp = Math.floor(1000 + Math.random() * 9000).toString() +// const result = await pool.execute( +// "INSERT INTO sec_users (email, password1) VALUES (?, ?)", +// [email, otp] +// ) +// if (result) { +// // Send OTP via email +// const mailOptions = { +// from: "example.com", +// to: email, +// subject: "OTP for registration", +// text: `Your OTP is: ${otp}`, +// } +// transporter.sendMail(mailOptions, (error) => { +// if (error) { +// console.log(error) +// return res.status(500).json({ message: "Error sending OTP" }) +// } + +// return res.status(200).json({ message: "OTP sent successfully" }) +// }) +// } else { +// return res.status(500).json({ message: "Failed to create user" }) +// } +// } catch (error) { +// console.error(error) +// res.status(400).json({ message: "Some error occured" }) +// } +// } + +var count = 0 + +const register = async (req, res) => { + const body = req.body + // console.log(email) + try { + let sql = `SELECT * FROM sec_users WHERE email = ?` + const rows = await executeQuery(sql, [body.email]) + if (rows.length > 0) { + return res.status(400).json({ message: "Email already exists" }) + } + count++ + // Generate and save OTP + const otp = Math.floor(1000 + Math.random() * 9000).toString() + let user_id = 10007589 + count + const password = bcrypt.hashSync(body.user_passw, 10) + let sql2 = `INSERT INTO sec_users (email, random_no, user_id, user_name, full_name, user_passw, change_passw, first_name, country, is_blocked, is_complete, active) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)` + const result = await executeQuery(sql2, [ + body.email, + otp, + user_id, + body.user_name, + body.full_name, + password, + body.change_passw, + body.first_name, + body.country, + false, + true, + true, + ]) + if (result) { + // Send OTP via email + const mailOptions = { + from: "example.com", + to: body.email, + subject: "OTP for registration", + text: `Your OTP is: ${otp}`, + } + transporter.sendMail(mailOptions, (error) => { + if (error) { + console.log(error) + return res.status(500).json({ message: "Error sending OTP" }) + } + return res.status(200).json({ message: "OTP sent successfully" }) + }) + } else { + return res.status(500).json({ message: "Failed to create user" }) + } + } catch (error) { + console.error(error) + res.status(400).json({ message: "Some error occured" }) + } +} + +const verifyOTP = async (req, res) => { + const { email, otp } = req.body + + try { + let sql = `SELECT * FROM sec_users WHERE email = ?` + const rows = await executeQuery(sql, [email]) + + if (rows.length === 0) { + return res.status(400).json({ message: "User not found" }) + } + + const user = rows[0] + + if (user.random_no === otp) { + // OTP is valid, you can update the user's status to verified or perform any necessary actions. + // For example: Update the 'is_complete' field to true. + let updateSql = `UPDATE sec_users SET status = ? WHERE email = ?` + await executeQuery(updateSql, [true, email]) + + return res.status(200).json({ message: "OTP verified successfully" }) + } else { + return res.status(400).json({ message: "Invalid OTP" }) + } + } catch (error) { + console.error(error) + res.status(500).json({ message: "Error verifying OTP" }) + } +} + +const deleteUser = async (req, res) => { + const email = req.body.email + + const sql = `SELECT * FROM sec_users WHERE email = ?` + const rows = await executeQuery(sql, [email]) + + if (rows.length === 0) { + return res.status(400).json({ message: "User not found" }) + } else { + const sql2 = `DELETE FROM sec_users WHERE email = ?` + const result = await executeQuery(sql2, [email]) + res + .status(200) + .json({ message: `User with ${email} deleted successfully...!!! ` }) + } +} + +module.exports = { + register, + verifyOTP, + deleteUser, +} diff --git a/pro118njsac-back-b/authsec_node/Backend/app.js b/pro118njsac-back-b/authsec_node/Backend/app.js new file mode 100644 index 0000000..939a100 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/app.js @@ -0,0 +1,52 @@ +global.__rootdir = __dirname +require("dotenv").config() +const express = require("express") +const app = express() +const bodyParser = require("body-parser") +const router = require("./routes/cns.router") +const userRouter = require("./routes/user.routes") + +const cors = require("cors") + +app.use(express.json()) + +// Set the base path from the .env file +const basePath = process.env.BASE_PATH || "/" +app.base = basePath + +// app.use("/api/tables/v1", router) +// app.use("/api/users/v1", userRouter) +// app.use("", router) +// app.use("", userRouter) +app.use( + cors({ + origin: "*", + }) +) + +router.use(function (req, res, next) { + console.log("%s %s %s", req.method, req.url, req.path) + next() +}) + + +app.use(`${basePath}`, router) +app.use(`${basePath}`, userRouter) +app.use(bodyParser.json()) + +// buildercomponents + + + +const port = process.env.PORT || 9292 + +app.get(`${basePath}/test`, (req, res) => { + res.json({ + success: 1, + message: "This is hello from auth backend", + }) +}) + +app.listen(port, () => { + console.log(`Server is up and running on port ${port}`) +}) \ No newline at end of file diff --git a/pro118njsac-back-b/authsec_node/Backend/auth/token_validation.js b/pro118njsac-back-b/authsec_node/Backend/auth/token_validation.js new file mode 100644 index 0000000..4bf1cbb --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/auth/token_validation.js @@ -0,0 +1,28 @@ +const { verify } = require("jsonwebtoken") + +const checkToken = async (req, res, next) => { + let token = req.get("authorization") + if (token) { + token = token.slice(7) + verify(token, "secret", (err, decoded) => { + if (err) { + console.log(err) + res.json({ + success: 0, + message: "Invalid token", + }) + } else { + next() + } + }) + } else { + res.json({ + success: 0, + message: "Access denied unauthorized user", + }) + } +} + +module.exports = { + checkToken, +} diff --git a/pro118njsac-back-b/authsec_node/Backend/config/database.js b/pro118njsac-back-b/authsec_node/Backend/config/database.js new file mode 100644 index 0000000..5663c17 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/config/database.js @@ -0,0 +1,25 @@ +const mysql = require("mysql2") +const mysqlProm = require("mysql2/promise") + +const pool = mysql.createConnection({ + host: process.env.DATABASE_HOST, + port: process.env.DATABASE_PORT, + database: process.env.DATABASE_NAME, + user: process.env.DATABASE_USERNAME, + password: process.env.DATABASE_PASSWORD, +}) + +const db = mysqlProm.createPool({ + host: process.env.DATABASE_HOST, + port: process.env.DATABASE_PORT, + database: process.env.DATABASE_NAME, + user: process.env.DATABASE_USERNAME, + password: process.env.DATABASE_PASSWORD, +}) + +pool.connect(function (err) { + if (err) throw err + console.log("Connected!") +}) + +module.exports = { pool, db } diff --git a/pro118njsac-back-b/authsec_node/Backend/dockerize.sh b/pro118njsac-back-b/authsec_node/Backend/dockerize.sh new file mode 100644 index 0000000..57189a2 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/dockerize.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +sudo yum -y install node +sudo yum -y install git +sudo yum -y install docker +sudo systemctl start docker +sudo systemctl enable docker +sudo usermod -aG docker $USER +newgrp docker + +git clone https://github.com/rajeev-007-glitch/Task-Manager-API.git +cd Task-Manager-API +echo "MONGO_URI=mongodb+srv://RajeevSinghJadon:MongoDb@nodeandexpressprojects.ocu9ube.mongodb.net/TASK-MANAGER?retryWrites=true&w=majority" >> .env +echo "FROM node:18 +# Create app directory +WORKDIR /usr/src/app +# Install app dependencies +# A wildcard is used to ensure both package.json AND package-lock.json are copied +# where available (npm@5+) +COPY package*.json ./ +RUN npm install +# If you are building your code for production +# RUN npm ci --omit=dev +# Bundle app source +COPY . . +EXPOSE 3000 +CMD [ "node", "app.js" ]" >> Dockerfile +echo "node_modules +npm-debug.log" >> .dockerignore + +docker build . -t rajeev/node-web-app +docker run -p 49160:8080 -d rajeev/node-web-app \ No newline at end of file diff --git a/pro118njsac-back-b/authsec_node/Backend/listBuilder/controller.js b/pro118njsac-back-b/authsec_node/Backend/listBuilder/controller.js new file mode 100644 index 0000000..c50a793 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/listBuilder/controller.js @@ -0,0 +1,109 @@ +const { genSaltSync, hashSync, compareSync } = require("bcrypt") +const { sign } = require("jsonwebtoken") +const otpGenerator = require("otp-generator") +const nodemailer = require("nodemailer") +const bcrypt = require("bcrypt") +const { pool, db } = require("../config/database") +const fs = require("fs") +const path = require("path") +const { execArgv } = require("process") +const { + buildExtensionByFormCode, +} = require("../Functions/buildExtensionByFormCode") +const { exec } = require("child_process") + +// const transporter = nodemailer.createTransport({ +// host: "smtp.ethereal.email", +// port: 587, +// auth: { +// user: "maynard.skiles@ethereal.email", +// pass: "E36dmz2ceNJV5eFvC4", +// }, +// }) + +const transporter = nodemailer.createTransport({ + service: "gmail", // e.g., 'Gmail' + host: "smtp.gmail.com", + port: 587, + secure: false, + auth: { + user: "randomaff8@gmail.com", + pass: "fnnq tisa alvh uyre", + }, +}) + +async function executeQuery(sql, values) { + const connection = await db.getConnection() + try { + const [rows] = await connection.execute(sql, values) + return rows + } finally { + connection.release() + } +} + +const getAllUserNode = async (req, res) => { + try { + const sql = "SELECT name, email FROM users_node" + const result = await executeQuery(sql) + + // Check if any data is fetched + if (result.length > 0) { + res.status(200).json({ users: result }) + } else { + res.status(404).json({ message: "No users found" }) + } + } catch (error) { + console.error("Error fetching users:", error) + res.status(500).json({ error: "Internal server error" }) + } +} + +const getByNameUserNode = async (req, res) => { + try { + const name = req.params.name + const sql = "SELECT name, email FROM users_node WHERE name = ?" + const result = await executeQuery(sql, [name]) + + // Check if any data is fetched + if (result.length > 0) { + res.status(200).json({ users: result }) + } else { + res.status(404).json({ message: "No users found" }) + } + } catch (error) { + console.error("Error fetching users:", error) + res.status(500).json({ error: "Internal server error" }) + } +} + +const addUserUserNode = async (req, res) => { + const body = req.body + const email = body.email + const password = body.password + const name = body.name + + try { + const sql = + "INSERT INTO users_node (name, password, email) VALUES (?, ?, ?)" + const values = [name, password, email] + + const result = await executeQuery(sql, values) + + // Check if the user was successfully added + if (result.affectedRows > 0) { + res.status(200).json({ message: "User added successfully" }) + } else { + res.status(400).json({ message: "Failed to add user" }) + } + } catch (error) { + console.error("Error adding user:", error) + res.status(500).json({ error: "Internal server error" }) + } +} + +module.exports = { + getAllUserNode, + addUserUserNode, + getByNameUserNode, +} diff --git a/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-07-27.log b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-07-27.log new file mode 100644 index 0000000..835aa1b --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-07-27.log @@ -0,0 +1,3 @@ +[Sat Jul 27 2024 16:12:53 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Jul 27 2024 16:12:53 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Sat Jul 27 2024 16:12:53 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser diff --git a/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-03.log b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-03.log new file mode 100644 index 0000000..37dda62 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-03.log @@ -0,0 +1,54 @@ +[Tue Sep 03 2024 15:30:28 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Tue Sep 03 2024 15:30:28 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 15:30:28 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 17:27:02 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 18:41:28 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 18:41:29 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Tue Sep 03 2024 18:41:29 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 18:41:29 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 18:43:38 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 18:53:11 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 18:56:02 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 18:58:51 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 18:59:16 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:00:18 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:01:17 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:01:59 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:07:22 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:07:43 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 19:07:43 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:07:43 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Tue Sep 03 2024 19:07:43 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:08:56 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:09:07 GMT+0530 (India Standard Time)] GET /baseurl/token/logout +[Tue Sep 03 2024 19:09:22 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 19:09:22 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Tue Sep 03 2024 19:09:22 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:10:48 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:12:21 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:15:32 GMT+0530 (India Standard Time)] GET /baseurl/token/logout +[Tue Sep 03 2024 19:15:41 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 19:15:41 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Tue Sep 03 2024 19:15:41 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:18:43 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:18:47 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 19:18:50 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:19:00 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:19:04 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:19:09 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 19:19:11 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:19:18 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 19:19:18 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 19:19:27 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:19:45 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 19:19:55 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:20:54 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:29:19 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:29:25 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 03 2024 19:31:04 GMT+0530 (India Standard Time)] GET /baseurl/api/user-profile +[Tue Sep 03 2024 19:31:04 GMT+0530 (India Standard Time)] GET /baseurl/api/retrieve-image +[Tue Sep 03 2024 19:31:42 GMT+0530 (India Standard Time)] POST /baseurl/api/reset_password +[Tue Sep 03 2024 19:32:17 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 03 2024 19:32:17 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 03 2024 19:32:17 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Tue Sep 03 2024 19:32:35 GMT+0530 (India Standard Time)] POST /baseurl/api/reset_password diff --git a/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-04.log b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-04.log new file mode 100644 index 0000000..751a17e --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-04.log @@ -0,0 +1,46 @@ +[Wed Sep 04 2024 12:34:32 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 12:36:35 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 12:36:51 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 12:36:51 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 12:36:51 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Wed Sep 04 2024 12:37:06 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 12:38:37 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllAppUser +[Wed Sep 04 2024 12:38:43 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 12:38:44 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Wed Sep 04 2024 12:38:51 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 12:38:53 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1 +[Wed Sep 04 2024 12:39:50 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 12:39:51 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 15:29:36 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 15:29:47 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 15:29:48 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Wed Sep 04 2024 15:29:48 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:29:53 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 15:33:21 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:33:39 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 15:33:39 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:33:39 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Wed Sep 04 2024 15:33:40 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 15:38:05 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:38:19 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 15:38:19 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Wed Sep 04 2024 15:38:19 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:38:20 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 15:47:03 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:47:36 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:47:51 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 15:47:51 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Wed Sep 04 2024 15:47:51 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:47:51 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Wed Sep 04 2024 15:49:08 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:49:30 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:50:49 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 15:51:02 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 15:51:03 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Wed Sep 04 2024 15:51:03 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 17:32:27 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 17:32:27 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Wed Sep 04 2024 17:32:27 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 17:32:54 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Wed Sep 04 2024 17:32:54 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Wed Sep 04 2024 17:32:54 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu diff --git a/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-07.log b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-07.log new file mode 100644 index 0000000..c0f4382 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-07.log @@ -0,0 +1,58 @@ +[Sat Sep 07 2024 18:48:36 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 18:48:36 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Sat Sep 07 2024 18:48:36 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Sat Sep 07 2024 18:49:06 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Sat Sep 07 2024 18:49:12 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 18:49:12 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 18:49:21 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 18:49:34 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 18:57:11 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 18:57:46 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2/1 +[Sat Sep 07 2024 19:02:56 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2/1 +[Sat Sep 07 2024 19:03:03 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:04:02 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:04:27 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:04:28 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:04:45 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:04:46 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:05:04 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:05:19 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:05:41 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:05:41 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:05:48 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:06:22 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:06:34 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:06:35 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:09:49 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:09:50 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:12:08 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:12:09 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:12:35 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:15:53 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:16:01 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:16:01 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:17:38 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:17:39 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:18:02 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:18:22 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:18:30 GMT+0530 (India Standard Time)] POST /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:18:31 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:18:45 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:18:54 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:19:16 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:25:45 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Sat Sep 07 2024 19:25:59 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:25:59 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Sat Sep 07 2024 19:26:01 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Sat Sep 07 2024 19:26:07 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Sat Sep 07 2024 19:26:22 GMT+0530 (India Standard Time)] POST /baseurl/Savedata +[Sat Sep 07 2024 19:26:23 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Sat Sep 07 2024 19:26:42 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Sat Sep 07 2024 19:26:46 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Sat Sep 07 2024 19:26:48 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Sat Sep 07 2024 19:27:22 GMT+0530 (India Standard Time)] POST /baseurl/Savedata +[Sat Sep 07 2024 19:27:22 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Sat Sep 07 2024 19:30:07 GMT+0530 (India Standard Time)] POST /baseurl/Savedata +[Sat Sep 07 2024 19:30:08 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Sat Sep 07 2024 19:30:37 GMT+0530 (India Standard Time)] POST /baseurl/Savedata +[Sat Sep 07 2024 19:30:38 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header diff --git a/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-10.log b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-10.log new file mode 100644 index 0000000..b4c24e1 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/logs/sysadmin/2024-09-10.log @@ -0,0 +1,54 @@ +[Tue Sep 10 2024 12:40:10 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 10 2024 12:40:10 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 10 2024 12:40:10 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Tue Sep 10 2024 12:40:10 GMT+0530 (India Standard Time)] GET /baseurl/get_Dashboard_header +[Tue Sep 10 2024 12:40:16 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 10 2024 12:40:20 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/1 +[Tue Sep 10 2024 12:40:20 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 12:40:23 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 10 2024 12:40:27 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1 +[Tue Sep 10 2024 12:40:33 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 10 2024 12:40:35 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 12:40:35 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/1 +[Tue Sep 10 2024 12:40:50 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 10 2024 12:40:55 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 12:40:55 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/1 +[Tue Sep 10 2024 12:41:45 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 10 2024 12:41:45 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Tue Sep 10 2024 12:41:45 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 10 2024 12:41:45 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 12:41:45 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/1 +[Tue Sep 10 2024 12:42:07 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 10 2024 12:42:15 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 12:42:15 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/1 +[Tue Sep 10 2024 12:44:26 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 12:55:23 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 12:55:28 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 12:56:18 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 12:57:56 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 13:00:11 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 13:00:26 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 13:03:43 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 13:04:44 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 13:08:44 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 13:08:53 GMT+0530 (India Standard Time)] GET /baseurl/api1/submenu1/1116 +[Tue Sep 10 2024 13:08:55 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/1 +[Tue Sep 10 2024 13:08:55 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 13:09:04 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:09:30 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:26:15 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:26:37 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:29:51 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:30:04 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:33:38 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:33:46 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:38:17 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:39:23 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:39:30 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/41 +[Tue Sep 10 2024 13:39:48 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/61 +[Tue Sep 10 2024 13:40:04 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/1 +[Tue Sep 10 2024 13:40:13 GMT+0530 (India Standard Time)] GET /baseurl/Rpt_builder2/Rpt_builder2 +[Tue Sep 10 2024 13:40:13 GMT+0530 (India Standard Time)] GET /baseurl/api/realnet-menu/user-menu +[Tue Sep 10 2024 13:40:13 GMT+0530 (India Standard Time)] GET /baseurl/fndMenu/menuloadbyuser +[Tue Sep 10 2024 13:40:13 GMT+0530 (India Standard Time)] GET /baseurl/api/getAllUsrGrp +[Tue Sep 10 2024 13:40:13 GMT+0530 (India Standard Time)] GET /baseurl/api1/getusracces1/1 diff --git a/pro118njsac-back-b/authsec_node/Backend/middleware/authenticateJWT.js b/pro118njsac-back-b/authsec_node/Backend/middleware/authenticateJWT.js new file mode 100644 index 0000000..1ec74ce --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/middleware/authenticateJWT.js @@ -0,0 +1,38 @@ +const { verify } = require("jsonwebtoken") + +// Middleware for verifying JWT and extracting user information +function authenticateJWT(req, res, next) { + + let token = req.headers.authorization + // console.log("Authorization header:", req.headers.authorization) +// console.log("token is..",token); + +console.log("Database Host:", process.env.DATABASE_HOST); +console.log("Database User:", process.env.DATABASE_USERNAME); +console.log("Database Port:", process.env.DATABASE_PORT); + + if (!token || !token.startsWith("Bearer ")) { + return res.sendStatus(403) + } + + // console.log("Original token:", token) + + // Remove the "Bearer " prefix + token = token.slice(7) + + // console.log("Modified token:", token) + + const secret = "secret" // Use the same secret key as in the login controller + + verify(token, secret, (err, user) => { + if (err) { + console.log(err) + return res.sendStatus(403) + } + + req.user = user // Attach user information to the request object + next() + }) +} + +module.exports = { authenticateJWT } diff --git a/pro118njsac-back-b/authsec_node/Backend/middleware/uploadMiddleware.js b/pro118njsac-back-b/authsec_node/Backend/middleware/uploadMiddleware.js new file mode 100644 index 0000000..1963ba4 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/middleware/uploadMiddleware.js @@ -0,0 +1,7 @@ +// uploadMiddleware.js +const multer = require("multer") + +const storage = multer.memoryStorage() +const upload = multer({ storage: storage }) + +module.exports = upload.single("imageFile") diff --git a/pro118njsac-back-b/authsec_node/Backend/middleware/userLogger.js b/pro118njsac-back-b/authsec_node/Backend/middleware/userLogger.js new file mode 100644 index 0000000..e63240d --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/middleware/userLogger.js @@ -0,0 +1,31 @@ +const fs = require("fs") +const path = require("path") + +function userLogger(req, res, next) { + const { user_id, user_name, email } = req.user + + // Create a directory for the user if it doesn't exist + const userDir = path.join(__dirname, "../logs", user_name) + if (!fs.existsSync(userDir)) { + fs.mkdirSync(userDir, { recursive: true }) + } + + // Create a log file with the current date + const currentDate = new Date().toISOString().slice(0, 10) // Get YYYY-MM-DD format + const logFile = path.join(userDir, `${currentDate}.log`) + + // Log data to the console + console.log(`[${user_name}] Request to ${req.originalUrl}`) + + // Log data to the user-specific log file + const logMessage = `[${new Date()}] ${req.method} ${req.originalUrl}\n` + fs.appendFile(logFile, logMessage, (err) => { + if (err) { + console.error(`Failed to log data to ${logFile}: ${err}`) + } + }) + + next() +} + +module.exports = userLogger diff --git a/pro118njsac-back-b/authsec_node/Backend/package-lock.json b/pro118njsac-back-b/authsec_node/Backend/package-lock.json new file mode 100644 index 0000000..1a5e547 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/package-lock.json @@ -0,0 +1,2056 @@ +{ + "name": "expressjs", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "expressjs", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "crypto": "^1.0.1", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "jsonwebtoken": "^9.0.2", + "multer": "^1.4.5-lts.1", + "mysql2": "^3.6.1", + "nodemailer": "^6.9.5", + "nodemon": "^3.0.1", + "otp-generator": "^4.0.1", + "util": "^0.12.5", + "uuid": "^9.0.1" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==", + "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in." + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "engines": { + "node": ">=16.14" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/multer/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mysql2": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.6.1.tgz", + "integrity": "sha512-O7FXjLtNkjcMBpLURwkXIhyVbX9i4lq4nNRCykPNOXfceq94kJ0miagmTEGCZieuO8JtwtXaZ41U6KT4eF9y3g==", + "dependencies": { + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru-cache": "^8.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodemailer": { + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.5.tgz", + "integrity": "sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", + "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/otp-generator": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/otp-generator/-/otp-generator-4.0.1.tgz", + "integrity": "sha512-2TJ52vUftA0+J3eque4wwVtpaL4/NdIXDL0gFWFJFVUAZwAN7+9tltMhL7GCNYaHJtuONoier8Hayyj4HLbSag==", + "engines": { + "node": ">=14.10.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/pro118njsac-back-b/authsec_node/Backend/package.json b/pro118njsac-back-b/authsec_node/Backend/package.json new file mode 100644 index 0000000..b58c098 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/package.json @@ -0,0 +1,28 @@ +{ + "name": "expressjs", + "version": "1.0.0", + "description": "CRUD for fetching two fields", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "nodemon --ext js,env --watch .env --watch . app.js" + }, + "author": "", + "license": "ISC", + "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "crypto": "^1.0.1", + "dotenv": "^16.3.1", + "express": "^4.18.2", + "jsonwebtoken": "^9.0.2", + "multer": "^1.4.5-lts.1", + "mysql2": "^3.6.1", + "nodemailer": "^6.9.5", + "nodemon": "^3.0.1", + "otp-generator": "^4.0.1", + "util": "^0.12.5", + "uuid": "^9.0.1" + } +} diff --git a/pro118njsac-back-b/authsec_node/Backend/routes/cns.router.js b/pro118njsac-back-b/authsec_node/Backend/routes/cns.router.js new file mode 100644 index 0000000..fb6dd78 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/routes/cns.router.js @@ -0,0 +1,365 @@ +const { + login, + getUsersUserGrpMaintenance, + getUsersByUserIdUserGrpMaintenance, + updateUsersUserGrpMaintenance, + createUsersUserGrpMaintenance, + deleteUsersUserGrpMaintenance, + getUsersMenuMaintainence, + getUsersByUserIdMenuMaintainence, + createUsersMenuMaintainence, + updateUsersMenuMaintainence, + deleteUsersMenuMaintainence, + getUsersByIdSubMenuMaintainence, + createUsersMenuAccessControl, + getUsersMenuAccessControl, + getUserMaintainence, + getByIdUserMaintainence, + createUserMaintainence, + updateUserMaintainence, + loadMenuByUser, + userMenu, + createReport, + getAllReportBuilder, + getAllReportBuilderById, + getAllReportBuilderByQuery, + updateReportBuilder, + deleteReportBuilder, + getReportLine, + getReportLineById, + updateReportLine, + getAllDashboard, + getDashboardByModuleId, + getAllDashboardHeaderById, + createDashboard, + updateDashboard, + deleteDashboard, + getDashboardLine, + getDashboardLineById, + updateDashboardLineById, + getSystemParameterById, + getSystemParameter, + createSystemParameter, + updateSystemParameter, + deleteSystemParameter, + getLogs, + getAllFormExtension, + getByIdFormExtension, + createFormExtension, + updateFormExtension, + deleteFormExtension, + buildExtension, + logout, + sendEmailForResetPassword, + resetPassword, + savePassword, + getLoggedInUser, + uploadProfilePhoto, + retrieveProfilePhoto, + test, +} = require("../api/cns.controller") + +const { + getAllUserNode, + addUserUserNode, + getByNameUserNode, +} = require("../listBuilder/controller") + +// const { checkToken } = require("../auth/token_validation") +const { authenticateJWT } = require("../middleware/authenticateJWT") +const userLogger = require("../middleware/userLogger") +const uploadMiddleware = require("../middleware/uploadMiddleware") +const router = require("express").Router() + +router.get("/test/:id", test) + +router.post("/token/session", login) + +router.post("/api/resources/forgotpassword", sendEmailForResetPassword) +router.post("/api/resources/savePassword/:token", savePassword) +router.post("/api/reset_password", authenticateJWT, userLogger, resetPassword) +router.get("/api/user-profile", authenticateJWT, userLogger, getLoggedInUser) +router.put( + "/api/user-profile", + authenticateJWT, + userLogger, + updateUserMaintainence +) + +// profile photo upload and retrieve +router + .post( + "/api/upload", + authenticateJWT, + userLogger, + uploadMiddleware, + uploadProfilePhoto + ) + .get("/api/retrieve-image", authenticateJWT, userLogger, retrieveProfilePhoto) + +router.get("/token/logout", authenticateJWT, userLogger, logout) + +// Api for sec user group +router + .get( + "/api/getAllUsrGrp", + authenticateJWT, + userLogger, + getUsersUserGrpMaintenance + ) + // .get( + // "/api1/getusracces1/:id", + // authenticateJWT, + // userLogger, + // getUsersByUserIdUserGrpMaintenance + // ) + .put( + "/api/updateOneUsrGrp/:id", + authenticateJWT, + userLogger, + updateUsersUserGrpMaintenance + ) + .post( + "/api/addOneUsrGrp", + authenticateJWT, + userLogger, + createUsersUserGrpMaintenance + ) + .delete( + "/api/delete_usrgrp/:id", + authenticateJWT, + userLogger, + deleteUsersUserGrpMaintenance + ) + +router + .get("/api1/submenu1", authenticateJWT, userLogger, getUsersMenuMaintainence) + .get( + "/api1/getusracces1/:id", + authenticateJWT, + userLogger, + getUsersByUserIdMenuMaintainence + ) + .post( + "/api1/Sec_menuDet", + authenticateJWT, + userLogger, + createUsersMenuMaintainence + ) + .put( + "/api1/submenu1/:id", + authenticateJWT, + userLogger, + updateUsersMenuMaintainence + ) + .delete( + "/api1/menu/:id", + authenticateJWT, + userLogger, + deleteUsersMenuMaintainence + ) + +// // Report Builder Controller + +router + .post( + "/Rpt_builder2/Rpt_builder2", + authenticateJWT, + userLogger, + createReport + ) +router + .get( + "/Rpt_builder2/Rpt_builder2", + authenticateJWT, + userLogger, + getAllReportBuilder + ) + .get( + "/Rpt_builder2/Rpt_builder2/:id", + authenticateJWT, + userLogger, + getAllReportBuilderById + ) + .get( + "/api/master-query-data/:query", + authenticateJWT, + userLogger, + getAllReportBuilderByQuery + ) + .put( + "/Rpt_builder2/Rpt_builder2/:id", + authenticateJWT, + userLogger, + updateReportBuilder + ) + .delete( + "/Rpt_builder2/Rpt_builder2/:id", + authenticateJWT, + userLogger, + deleteReportBuilder + ) + +// // Report Line Controller + +router + .get( + "/Rpt_builder2_lines/Rpt_builder2_lines", + authenticateJWT, + userLogger, + getReportLine + ) + .get( + "/Rpt_builder2_lines/Rpt_builder2_lines/:id", + authenticateJWT, + userLogger, + getReportLineById + ) + .put( + "/Rpt_builder2_lines/update/:id", + authenticateJWT, + userLogger, + updateReportLine + ) + +// // Dashboard Controller + +router + .get("/get_Dashboard_header", authenticateJWT, userLogger, getAllDashboard) + + .get("/get_module_id", authenticateJWT, userLogger, getDashboardByModuleId) + .get( + "/get_dashboard_headerbyid/:id", + authenticateJWT, + userLogger, + getAllDashboardHeaderById + ) + .post("/Savedata", authenticateJWT, userLogger, createDashboard) + .put( + "/update_dashboard_header/:id", + authenticateJWT, + userLogger, + updateDashboard + ) + .delete( + "/delete_by_header_id/:id", + authenticateJWT, + userLogger, + deleteDashboard + ) + +// // Dashboard Line Controller + +router + .get("/get_Dashboard1_line", authenticateJWT, userLogger, getDashboardLine) + .get( + "/get_dashboard_headerbyid/:id", + authenticateJWT, + userLogger, + getDashboardLineById + ) + .put( + "/update_Dashbord1_Lineby_id/:id", + authenticateJWT, + userLogger, + updateDashboardLineById + ) + +// // System Parameter router + +router + .get( + "/sysparam/getSysParams", + authenticateJWT, + userLogger, + getSystemParameter + ) + .get( + "/sysparam/getSysParams/:id", + authenticateJWT, + userLogger, + getSystemParameterById + ) + .post( + "/sysparam/addSysParams", + authenticateJWT, + userLogger, + createSystemParameter + ) + .put( + "/sysparam/updateSysParams/:id", + authenticateJWT, + userLogger, + updateSystemParameter + ) + .delete( + "/sysparam/deleteSysParams/:id", + authenticateJWT, + userLogger, + deleteSystemParameter + ) + +// // Form extension router + +router + .get("/api/extension", authenticateJWT, userLogger, getAllFormExtension) + .get("/api/extension/:id", authenticateJWT, userLogger, getByIdFormExtension) + .get("/extension_build/:formId", authenticateJWT, userLogger, buildExtension) + .post("/api/extension/", authenticateJWT, userLogger, createFormExtension) + .put("/api/extension/:id", authenticateJWT, userLogger, updateFormExtension) + .delete( + "/api/extension/:id", + authenticateJWT, + userLogger, + deleteFormExtension + ) + +//// User Node Table router +router + .get("/user/node", authenticateJWT, userLogger, getAllUserNode) + .get("/user/node/:name", authenticateJWT, userLogger, getByNameUserNode) + .post("/user/node", authenticateJWT, userLogger, addUserUserNode) + +router.get( + "/api1/submenu1/:id", + authenticateJWT, + userLogger, + getUsersByIdSubMenuMaintainence +) + +// api for sec group menu access +router + .get( + "/api/getAllUsrGrp", + authenticateJWT, + userLogger, + getUsersMenuAccessControl + ) + .post( + "/api1/addgrpwithsubmenu/:id", + authenticateJWT, + userLogger, + createUsersMenuAccessControl + ) + +router + .get("/api/getAllAppUser", authenticateJWT, userLogger, getUserMaintainence) + .get( + "/api/getOneAppUser/:id", + authenticateJWT, + userLogger, + getByIdUserMaintainence + ) + .post("/api/addOneAppUser", createUserMaintainence) + +router.get( + "/fndMenu/menuloadbyuser", + authenticateJWT, + userLogger, + loadMenuByUser +) +router.get("/api/realnet-menu/user-menu", authenticateJWT, userLogger, userMenu) + +router.get("/getLogs/:userName", authenticateJWT, userLogger, getLogs) + +module.exports = router diff --git a/pro118njsac-back-b/authsec_node/Backend/routes/router.js b/pro118njsac-back-b/authsec_node/Backend/routes/router.js new file mode 100644 index 0000000..93135a4 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/routes/router.js @@ -0,0 +1,46 @@ +const { + getTable, + getTableById, + getTableByIdSec_Menu_Det, + createDataInTable, + updateDataInTable, + deleteDataInTable, + addMenu, + deleteMenu, + updateMenu, + createDataInTableRole, + updateDataInTableRole, + deleteDataInTableRole, + createDataInStudentTable, + getStudentTable, + getStudentTableById, + updateDataInStudentTable, + deleteDataInStudentTable, +} = require("../api/controller") + +const { checkToken } = require("../auth/token_validation") +const router = require("express").Router() + +router + .get("/student", checkToken, getStudentTable) + .get("/student/:id", checkToken, getStudentTableById) + .post("/student", checkToken, createDataInStudentTable) + .patch("/student/:id", checkToken, updateDataInStudentTable) + .delete("/student:id", checkToken, deleteDataInStudentTable) + .post("/role", checkToken, createDataInTableRole) + .patch("/role/:id", checkToken, updateDataInTableRole) + .delete("/role/:id", checkToken, deleteDataInTableRole) + .post("/:id", checkToken, addMenu) + .delete("/:id", checkToken, deleteMenu) + .patch("/:id", checkToken, updateMenu) +router + .get("/sec_menu_det/:id", checkToken, getTableByIdSec_Menu_Det) + .get("/sec_grp_menu_access/:id", checkToken, getTableByIdSec_Menu_Det) + .get("/:tableName/:id", checkToken, getTableById) + .patch("/:tableName/:id", checkToken, updateDataInTable) + .delete("/:tableName/:id", checkToken, deleteDataInTable) +router + .get("/:tableName", checkToken, getTable) + .post("/:tableName", checkToken, createDataInTable) + +module.exports = router diff --git a/pro118njsac-back-b/authsec_node/Backend/routes/user.router.js b/pro118njsac-back-b/authsec_node/Backend/routes/user.router.js new file mode 100644 index 0000000..fddb9f6 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/routes/user.router.js @@ -0,0 +1,31 @@ +const { + getUsers, + getUsersByUserId, + updateUsers, + deleteUsers, + login, + registerUser, + verifyOTP, +} = require("../api/user.controller") + +const { checkToken } = require("../auth/token_validation") +const router = require("express").Router() + +// router.get("/", checkToken, getUsers) +// router +// .get("/:id", checkToken, getUsersByUserId) +// .patch("/:id", checkToken, updateUsers) +// .delete("/:id", checkToken, deleteUsers) +// router.post("/login", login) +// router.post("/register", registerUser).post("/verify", verifyOTP) + +router.get("/", checkToken, getUsers) +router + .get("/:id", checkToken, getUsersByUserId) + .patch("/:id", checkToken, updateUsers) + .delete("/:id", checkToken, deleteUsers) +router.post("/token/session", login) +// router.post("/login", login) +router.post("/register", registerUser).post("/verify", verifyOTP) + +module.exports = router diff --git a/pro118njsac-back-b/authsec_node/Backend/routes/user.routes.js b/pro118njsac-back-b/authsec_node/Backend/routes/user.routes.js new file mode 100644 index 0000000..aa520f1 --- /dev/null +++ b/pro118njsac-back-b/authsec_node/Backend/routes/user.routes.js @@ -0,0 +1,11 @@ +const { register, verifyOTP, deleteUser } = require("../api/user.controller") + +const { checkToken } = require("../auth/token_validation") +const router = require("express").Router() + +router + .post("/addOneAppUser", register) + .post("/verify", verifyOTP) + .delete("/deleteUser", deleteUser) + +module.exports = router diff --git a/pro118njsac-back-b/authsec_node/Backend/uploaded-picture/rajeev+1@dekatc.com/profile-pic-10007658-2024-01-09T11-04-01.png b/pro118njsac-back-b/authsec_node/Backend/uploaded-picture/rajeev+1@dekatc.com/profile-pic-10007658-2024-01-09T11-04-01.png new file mode 100644 index 0000000000000000000000000000000000000000..93345098e5a313e643f8eaa54561a1dc208cf7a6 GIT binary patch literal 67057 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 literal 0 HcmV?d00001 diff --git a/pro118njsac-back-b/authsec_node/Backend/uploaded-picture/rajeev+1@dekatc.com/profile-pic-10007658-2024-01-09T11-11-24.png b/pro118njsac-back-b/authsec_node/Backend/uploaded-picture/rajeev+1@dekatc.com/profile-pic-10007658-2024-01-09T11-11-24.png new file mode 100644 index 0000000000000000000000000000000000000000..052e25ec74ad0ba6196477a58efde86c2d11d668 GIT binary patch literal 40318 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%0A5VgNzMfO32U(Xxy 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 literal 0 HcmV?d00001 diff --git a/pro118njsac-db-d/authsec_mysql/mysql/loginandmenu.sql b/pro118njsac-db-d/authsec_mysql/mysql/loginandmenu.sql new file mode 100644 index 0000000..5279e3d --- /dev/null +++ b/pro118njsac-db-d/authsec_mysql/mysql/loginandmenu.sql @@ -0,0 +1,569 @@ + +CREATE TABLE `app_user_log` ( + `log_id` bigint NOT NULL, + `created_on` datetime DEFAULT NULL, + `generate_log` varchar(255) DEFAULT NULL, + `log_file_name` varchar(255) DEFAULT NULL, + `log_level` varchar(255) DEFAULT NULL, + `user_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`log_id`), + UNIQUE KEY `UK_tl3or0c0pxxdvigxponlgee18` (`user_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `app_user_log` +-- + +LOCK TABLES `app_user_log` WRITE; +/*!40000 ALTER TABLE `app_user_log` DISABLE KEYS */; +/*!40000 ALTER TABLE `app_user_log` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `password_reset_token` +-- + +DROP TABLE IF EXISTS `password_reset_token`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `password_reset_token` ( + `id` bigint NOT NULL, + `expiry_date` datetime DEFAULT NULL, + `token` varchar(255) DEFAULT NULL, + `user_user_id` bigint DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `FK4rtktv88xrvfli5jx9yst5arn` (`user_user_id`), + CONSTRAINT `FK4rtktv88xrvfli5jx9yst5arn` FOREIGN KEY (`user_user_id`) REFERENCES `sec_users` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `password_reset_token` +-- + +LOCK TABLES `password_reset_token` WRITE; +/*!40000 ALTER TABLE `password_reset_token` DISABLE KEYS */; +/*!40000 ALTER TABLE `password_reset_token` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `role` +-- + +DROP TABLE IF EXISTS `role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `role` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `description` varchar(255) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `role` +-- + +LOCK TABLES `role` WRITE; +/*!40000 ALTER TABLE `role` DISABLE KEYS */; +INSERT INTO `role` VALUES (1,NULL,'ROLE_Developer'),(2,'web','web developer'),(3,'front','frontend developer'),(4,'back','backend developer'),(5,'dev','devops '); +/*!40000 ALTER TABLE `role` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sec_grp_menu_access` +-- + +DROP TABLE IF EXISTS `sec_grp_menu_access`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sec_grp_menu_access` ( + `menu_item_id` bigint NOT NULL, + `usr_grp` bigint NOT NULL, + `createby` varchar(255) DEFAULT NULL, + `created_at` datetime DEFAULT NULL, + `isdisable` varchar(255) DEFAULT NULL, + `item_seq` bigint DEFAULT NULL, + `m_create` varchar(255) DEFAULT NULL, + `m_delete` varchar(255) DEFAULT NULL, + `m_edit` varchar(255) DEFAULT NULL, + `m_query` varchar(255) DEFAULT NULL, + `m_visible` varchar(255) DEFAULT NULL, + `main_menu_action_name` varchar(255) DEFAULT NULL, + `main_menu_icon_name` varchar(255) DEFAULT NULL, + `menu_id` bigint DEFAULT NULL, + `menu_item_desc` varchar(255) DEFAULT NULL, + `mexport` varchar(255) DEFAULT NULL, + `module_name` varchar(255) DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + `updateby` varchar(255) DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + PRIMARY KEY (`menu_item_id`,`usr_grp`), + KEY `FKtj8mtsrhc4m4acbrvjnnyvglm` (`usr_grp`), + CONSTRAINT `FKmkev6w9umgp6fg2afatibhq1x` FOREIGN KEY (`menu_item_id`) REFERENCES `sec_menu_det` (`menu_item_id`), + CONSTRAINT `FKtj8mtsrhc4m4acbrvjnnyvglm` FOREIGN KEY (`usr_grp`) REFERENCES `sec_user_group` (`usr_grp`) ON DELETE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sec_grp_menu_access` +-- + +LOCK TABLES `sec_grp_menu_access` WRITE; +/*!40000 ALTER TABLE `sec_grp_menu_access` DISABLE KEYS */; +INSERT INTO `sec_grp_menu_access` VALUES (1116,1,NULL,'2023-02-04 17:32:03','true',3000,'true','true','true','true','true','security','lock',0,'Security','true','sec3000','Enable',NULL,'2023-02-04 17:32:03'),(1117,1,NULL,'2023-02-04 17:32:03','true',3010,'true','true','true','true','true','usermaintance',NULL,1116,'User Maintance','true','U1000','Enable',NULL,'2023-02-04 17:32:03'),(1118,1,NULL,'2023-02-04 17:32:04','true',3020,'true','true','true','true','true','usergrpmaintance',NULL,1116,'User Group Maintance','true','U2000','Enable',NULL,'2023-02-04 17:32:04'),(1523,1,NULL,'2023-02-04 17:32:04','true',3030,'true','true','true','true','true','menumaintance',NULL,1116,'Menu Maintance','true','M3000','Enable',NULL,'2023-02-04 17:32:04'),(1524,1,NULL,'2023-02-04 17:32:04','true',3040,'true','true','true','true','true','menuaccess',NULL,1116,'Menu Access Control','true','MA4000','Enable',NULL,'2023-02-04 17:32:04'),(1525,1,NULL,'2023-02-04 17:32:04','true',3050,'true','true','true','true','true','systemparameters',NULL,1116,'System Parameters','true','SP5000','Enable',NULL,'2023-02-04 17:32:04'),(1526,1,NULL,'2023-02-04 17:32:04','true',3060,'true','true','true','true','true','accesstype',NULL,1116,'Access Type','true','A6000','Enable',NULL,'2023-02-04 17:32:04'),(1527,1,NULL,'2023-02-10 10:07:57','true',1000,'true','true','true','true','true','incidents','incident',0,'Incidents','true','I1000','Enable',NULL,'2023-02-10 10:07:57'),(1527,41,NULL,'2023-04-18 15:51:51','true',1000,'true','true','true','true','true','incidents','incident',0,'Incidents','true','I1000','Enable',NULL,'2023-04-18 15:51:51'),(1528,1,NULL,'2023-02-10 10:07:58','true',1010,'true','true','true','true','true','incident-new',NULL,1527,'Incident','true','I1000','Enable',NULL,'2023-02-10 10:07:58'),(1528,41,NULL,'2023-04-18 15:51:55','true',1010,'true','true','true','true','true','incident-new',NULL,1527,'Incident','true','I1000','Enable',NULL,'2023-04-18 15:51:55'),(1529,1,NULL,'2023-02-10 10:07:59','true',1020,'true','true','true','true','true','incident-overview',NULL,1527,'Overview','true','O2000','Enable',NULL,'2023-02-10 10:07:59'),(1529,41,NULL,'2023-04-18 15:51:57','true',1020,'true','true','true','true','true','incident-overview',NULL,1527,'Overview','true','O2000','Enable',NULL,'2023-04-18 15:51:57'),(1530,1,NULL,'2023-02-10 10:07:59','true',1030,'true','true','true','true','true','sureboard2',NULL,1527,'Issueboard','true','I3000','Enable',NULL,'2023-02-10 10:07:59'),(1530,41,NULL,'2023-04-18 15:52:00','true',1030,'true','true','true','true','true','sureboard2',NULL,1527,'Issueboard','true','I3000','Enable',NULL,'2023-04-18 15:52:00'),(1531,1,NULL,'2023-02-10 10:07:59','true',1040,'true','true','true','true','true','change-request',NULL,1527,'Change Request','true','C4000','Enable',NULL,'2023-02-10 10:07:59'),(1531,41,NULL,'2023-04-18 15:52:03','true',1040,'true','true','true','true','true','change-request',NULL,1527,'Change Request','true','C4000','Enable',NULL,'2023-04-18 15:52:03'),(1532,1,NULL,'2023-02-10 10:07:59','true',1050,'true','true','true','true','true','problem-creation',NULL,1527,'Problem Request','true','P5000','Enable',NULL,'2023-02-10 10:07:59'),(1532,41,NULL,'2023-04-18 15:52:07','true',1050,'true','true','true','true','true','problem-creation',NULL,1527,'Problem Request','true','P5000','Enable',NULL,'2023-04-18 15:52:07'),(1533,1,NULL,'2023-03-01 06:11:23','true',2000,'true','true','true','true','true','master','users',0,'Masters','true','M2000','Enable',NULL,'2023-03-01 06:11:23'),(1534,1,NULL,'2023-03-01 06:11:23','true',2010,'true','true','true','true','true','Sr_priority2_t',NULL,1533,'Priority','true','P1000','Enable',NULL,'2023-03-01 06:11:23'),(1535,1,NULL,'2023-03-01 06:11:23','true',2020,'true','true','true','true','true','Sr_urgency_t',NULL,1533,'Urgency','true','Su2000','Enable',NULL,'2023-03-01 06:11:23'),(1536,1,NULL,'2023-03-01 06:11:23','true',2030,'true','true','true','true','true','Sr_impact2_t',NULL,1533,'Impact','true','Sm3000','Enable',NULL,'2023-03-01 06:11:23'),(1537,1,NULL,'2023-03-01 06:11:23','true',2040,'true','true','true','true','true','Sr_category2_t',NULL,1533,'Category','true','Sc4000','Enable',NULL,'2023-03-01 06:11:23'),(1538,1,NULL,'2023-03-01 06:11:23','true',2050,'true','true','true','true','true','Sr_State_t',NULL,1533,'State','true','S5000','Enable',NULL,'2023-03-01 06:11:23'),(1539,1,NULL,'2023-03-01 06:11:23','true',2070,'true','true','true','true','true','Sr_customer_t',NULL,1533,'Customer','true','c7000','Enable',NULL,'2023-03-01 06:11:23'),(1540,1,NULL,'2023-03-01 06:11:23','true',2060,'true','true','true','true','true','Sr_Contact_type_t',NULL,1533,'Contact','true','C6000','Enable',NULL,'2023-03-01 06:11:23'),(1541,1,NULL,'2023-03-01 06:11:23','true',2080,'true','true','true','true','true','Sr_handler_t',NULL,1533,'Handler','true','H8000','Enable',NULL,'2023-03-01 06:11:23'),(1542,1,NULL,'2023-02-16 11:01:03','true',4000,'true','true','true','true','true','admin','user',0,'Admin','true','se4000','Enable',NULL,'2023-02-16 11:01:03'),(1543,1,NULL,'2023-02-16 11:01:03','true',4010,'true','true','true','true','true','sequence',NULL,1542,'Define Sequence','true','SE1000','Enable',NULL,'2023-02-16 11:01:03'),(1544,1,NULL,'2023-02-16 11:01:03','true',4020,'true','true','true','true','true','bugtracker',NULL,1542,'Bug Tracker','true','B1000','Enable',NULL,'2023-02-16 11:01:03'),(1545,1,NULL,'2023-02-16 11:01:04','true',4030,'true','true','true','true','true','datamanagemennt',NULL,1542,'Data Management','true','M3000','Enable',NULL,'2023-02-16 11:01:04'),(1550,1,NULL,'2023-03-01 06:11:23','true',2090,'true','true','true','true','true','projects',NULL,1533,'Projects','true','P2000','Enable',NULL,'2023-03-01 06:11:23'),(1551,1,NULL,'2023-04-18 16:22:41','true',4040,'true','true','true','true','true','applysequence',NULL,1542,'Apply Sequence','true','As3000','Enable',NULL,'2023-04-18 16:22:41'); +/*!40000 ALTER TABLE `sec_grp_menu_access` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sec_menu_det` +-- + +DROP TABLE IF EXISTS `sec_menu_det`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sec_menu_det` ( + `menu_item_id` bigint NOT NULL, + `created_at` datetime NOT NULL, + `updated_at` datetime NOT NULL, + `item_seq` bigint DEFAULT NULL, + `main_menu_action_name` varchar(255) DEFAULT NULL, + `main_menu_icon_name` varchar(255) DEFAULT NULL, + `menu_id` bigint DEFAULT NULL, + `menu_item_desc` varchar(255) DEFAULT NULL, + `module_name` varchar(255) DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + PRIMARY KEY (`menu_item_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sec_menu_det` +-- + +LOCK TABLES `sec_menu_det` WRITE; +/*!40000 ALTER TABLE `sec_menu_det` DISABLE KEYS */; +INSERT INTO `sec_menu_det` VALUES (1116,'2023-01-25 10:25:50','2023-01-25 10:25:50',3000,'security','lock',0,'Security','sec3000','Enable'),(1117,'2023-01-25 10:42:02','2023-02-04 15:34:25',3010,'usermaintance',NULL,1116,'User Maintance','U1000','Enable'),(1118,'2023-01-25 11:12:27','2023-02-04 15:34:36',3020,'usergrpmaintance',NULL,1116,'User Group Maintance','U2000','Enable'),(1523,'2023-02-04 11:15:57','2023-02-04 15:34:45',3030,'menumaintance',NULL,1116,'Menu Maintance','M3000','Enable'),(1524,'2023-02-04 11:16:52','2023-02-04 15:34:54',3040,'menuaccess',NULL,1116,'Menu Access Control','MA4000','Enable'),(1525,'2023-02-04 11:17:31','2023-02-04 15:35:06',3050,'systemparameters',NULL,1116,'System Parameters','SP5000','Enable'),(1526,'2023-02-04 11:18:04','2023-02-04 15:35:14',3060,'accesstype',NULL,1116,'Access Type','A6000','Enable'),(1527,'2023-02-04 13:25:11','2023-02-04 13:25:11',1000,'incidents','incident',0,'Incidents','I1000','Enable'),(1528,'2023-02-04 13:31:48','2023-02-04 15:33:02',1010,'incident-new',NULL,1527,'Incident','I1000','Enable'),(1529,'2023-02-04 13:33:03','2023-02-04 15:33:12',1020,'incident-overview',NULL,1527,'Overview','O2000','Enable'),(1530,'2023-02-04 13:34:42','2023-02-04 15:33:21',1030,'sureboard2',NULL,1527,'Issueboard','I3000','Enable'),(1531,'2023-02-04 13:35:27','2023-02-04 15:33:36',1040,'change-request',NULL,1527,'Change Request','C4000','Enable'),(1532,'2023-02-04 13:36:01','2023-02-10 02:25:13',1050,'problem-creation',NULL,1527,'Problem Request','P5000','Enable'),(1533,'2023-02-04 13:55:32','2023-02-04 13:55:32',2000,'master','users',0,'Masters','M2000','Enable'),(1534,'2023-02-04 13:56:22','2023-02-04 15:34:07',2010,'Sr_priority2_t',NULL,1533,'Priority','P1000','Enable'),(1535,'2023-02-04 17:12:27','2023-02-04 17:12:27',2020,'Sr_urgency_t',NULL,1533,'Urgency','Su2000','Enable'),(1536,'2023-02-04 17:13:22','2023-02-04 17:13:22',2030,'Sr_impact2_t',NULL,1533,'Impact','Sm3000','Enable'),(1537,'2023-02-04 17:14:01','2023-02-04 17:14:01',2040,'Sr_category2_t',NULL,1533,'Category','Sc4000','Enable'),(1538,'2023-02-04 17:14:31','2023-02-04 17:14:31',2050,'Sr_State_t',NULL,1533,'State','S5000','Enable'),(1539,'2023-02-04 17:15:12','2023-02-09 13:25:27',2070,'Sr_customer_t',NULL,1533,'Customer','c7000','Enable'),(1540,'2023-02-04 17:16:23','2023-02-14 13:15:27',2060,'Sr_Contact_type_t',NULL,1533,'Contact','C6000','Enable'),(1541,'2023-02-04 17:17:22','2023-02-04 17:17:22',2080,'Sr_handler_t',NULL,1533,'Handler','H8000','Enable'),(1542,'2023-02-08 15:06:20','2023-02-08 15:06:20',4000,'admin','user',0,'Admin','se4000','Enable'),(1543,'2023-02-08 15:07:14','2023-03-01 05:51:41',4010,'sequence',NULL,1542,'Define Sequence','SE1000','Enable'),(1544,'2023-02-16 10:14:33','2023-02-16 10:14:33',4020,'bugtracker',NULL,1542,'Bug Tracker','B1000','Enable'),(1545,'2023-02-16 11:00:25','2023-02-16 11:00:25',4030,'datamanagemennt',NULL,1542,'Data Management','M3000','Enable'),(1550,'2023-03-01 06:10:35','2023-03-01 06:10:35',2090,'projects',NULL,1533,'Projects','P2000','Enable'),(1551,'2023-03-01 07:14:27','2023-03-01 07:14:27',4040,'applysequence',NULL,1542,'Apply Sequence','As3000','Enable'),(1553,'2023-04-18 14:12:24','2023-04-18 14:12:56',5000,'T1',NULL,1542,'T1','T1','Enable'); +/*!40000 ALTER TABLE `sec_menu_det` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sec_type` +-- + +DROP TABLE IF EXISTS `sec_type`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sec_type` ( + `id` int NOT NULL, + `description` varchar(255) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sec_type` +-- + +LOCK TABLES `sec_type` WRITE; +/*!40000 ALTER TABLE `sec_type` DISABLE KEYS */; +/*!40000 ALTER TABLE `sec_type` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sec_user_group` +-- + +DROP TABLE IF EXISTS `sec_user_group`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sec_user_group` ( + `usr_grp` bigint NOT NULL, + `createby` varchar(255) DEFAULT NULL, + `createdate` datetime DEFAULT NULL, + `group_desc` varchar(255) DEFAULT NULL, + `group_level` bigint DEFAULT NULL, + `group_name` varchar(255) DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + `updateby` varchar(255) DEFAULT NULL, + `updatedate` datetime DEFAULT NULL, + PRIMARY KEY (`usr_grp`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sec_user_group` +-- + +LOCK TABLES `sec_user_group` WRITE; +/*!40000 ALTER TABLE `sec_user_group` DISABLE KEYS */; +INSERT INTO `sec_user_group` VALUES (1,NULL,NULL,'add',30,'sysadmin','E',NULL,'2023-03-01 05:54:10'),(41,NULL,'2023-02-28 13:05:54','check',20,'users','Disable',NULL,'2023-02-28 13:30:14'); +/*!40000 ALTER TABLE `sec_user_group` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sec_user_group_id` +-- + +DROP TABLE IF EXISTS `sec_user_group_id`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sec_user_group_id` ( + `next_val` bigint DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sec_user_group_id` +-- + +LOCK TABLES `sec_user_group_id` WRITE; +/*!40000 ALTER TABLE `sec_user_group_id` DISABLE KEYS */; +INSERT INTO `sec_user_group_id` VALUES (59),(59),(40),(40),(40),(40); +/*!40000 ALTER TABLE `sec_user_group_id` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sec_user_sessions` +-- + +DROP TABLE IF EXISTS `sec_user_sessions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sec_user_sessions` ( + `client_ip` varchar(255) NOT NULL, + `session_id` varchar(255) NOT NULL, + `user_id` bigint NOT NULL, + `last_access_date` datetime DEFAULT NULL, + PRIMARY KEY (`client_ip`,`session_id`,`user_id`), + KEY `FKp9jm02b501ugvjvfhas5sskfq` (`user_id`), + CONSTRAINT `FKp9jm02b501ugvjvfhas5sskfq` FOREIGN KEY (`user_id`) REFERENCES `sec_users` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sec_user_sessions` +-- + +LOCK TABLES `sec_user_sessions` WRITE; +/*!40000 ALTER TABLE `sec_user_sessions` DISABLE KEYS */; +INSERT INTO `sec_user_sessions` VALUES ('10.244.0.0','00DA27B83BD05496302A6FE89196D35D',10007304,'2023-02-09 04:16:22'),('10.244.0.0','01C6D31F93F0EB2008755455951BFCE3',10007304,'2023-02-09 04:24:40'),('10.244.0.0','01F3C40A4E4F679427F1A77E6CCA96BD',10007304,'2023-01-23 09:22:51'),('10.244.0.0','07955ABB453B8F78E48098ACB2CCA3B4',10007304,'2023-01-07 05:18:31'),('10.244.0.0','07FC7AA4A44DAF847DACD2ADF00E21D0',10007304,'2023-03-02 07:02:35'),('10.244.0.0','097910BB627E1B076F5EB532B6DF56F6',10007304,'2023-02-20 07:15:09'),('10.244.0.0','09A12677690FCDD1DFE3AE75B357D5FA',10007304,'2023-01-27 12:59:00'),('10.244.0.0','0B30FE6A7E3EC275FB942EF1AC77959C',10007304,'2023-02-27 04:31:59'),('10.244.0.0','0DBA11EAE43B527CFF0B2C8714E6FCBC',10007304,'2023-02-27 05:18:07'),('10.244.0.0','0E0DD3C09635D1512642C6A8DC777399',10007304,'2023-01-04 07:26:44'),('10.244.0.0','12634E52F1A03951CF7F714CA2CD35D0',10007304,'2022-12-22 12:47:54'),('10.244.0.0','126D331BC32A0B05D4E98809A69F1129',10007304,'2023-01-21 05:54:12'),('10.244.0.0','13267C7653BF669807FCC1553A250FCA',10007304,'2023-01-21 10:58:45'),('10.244.0.0','13791D67042F4E6D5D108828C313E4E2',10007304,'2023-02-03 06:43:41'),('10.244.0.0','14B7F54DD7D935EBBA23729BFF12D944',10007304,'2023-01-25 06:57:06'),('10.244.0.0','15718FEAD0B1C125C216D29DEB4BF59D',10007304,'2023-02-28 10:02:33'),('10.244.0.0','17187D32D460241B4B16E38281CD2663',10007304,'2023-02-04 11:08:48'),('10.244.0.0','18A08D81FE506EE81AF4C94CB30A6D3A',10007304,'2023-02-21 05:27:55'),('10.244.0.0','19C65A7A787E9D9A9087261B8A2DEFDE',10007304,'2023-02-16 05:11:11'),('10.244.0.0','1A5FC0C4AA02AF7AF3404165F1A93985',10007304,'2023-01-03 12:02:01'),('10.244.0.0','1CABFE5D7BB047B750A74A9C74F5CB44',10007304,'2023-01-25 07:01:51'),('10.244.0.0','1D02DCEA4AA242C714EC71F70741C07E',10007304,'2023-02-21 04:56:28'),('10.244.0.0','1D6B0DB624E86D9FD70507F6189569AD',10007304,'2023-02-21 05:32:41'),('10.244.0.0','1E328CEE4E5A777173F8A432AA25364F',10007304,'2023-02-14 10:51:58'),('10.244.0.0','1E3E9C55C6C6D5AAC309E13C30B958C5',10007304,'2022-12-24 13:19:10'),('10.244.0.0','1E4F2D8802BDFABCF9D3B41AB1BF3D8E',10007304,'2023-03-02 10:14:13'),('10.244.0.0','1EDADDB590C0C98FFB9362ACAFDD0EC8',10007304,'2023-02-28 08:28:39'),('10.244.0.0','1EE6204F652E211A35B560813E1AFDF5',10007304,'2023-02-13 05:38:28'),('10.244.0.0','1F4809657FAC225E67C10488887FF026',10007304,'2023-01-25 08:42:39'),('10.244.0.0','212824F8CFE4C79EEC23414DD60BDB1A',10007304,'2023-02-04 11:07:49'),('10.244.0.0','2285C8A80B97A9CEB33BA0E83AAE7CDE',10007304,'2023-02-28 05:39:09'),('10.244.0.0','23D17570F776EBE86B3E28ED24A2E2F0',10007304,'2022-12-22 05:37:54'),('10.244.0.0','258BC76ACED65982DB38FFA3E5607665',10007304,'2023-01-27 04:23:24'),('10.244.0.0','26A0AC8653F477F1A82841DFFAD45E60',10007304,'2023-02-08 04:41:02'),('10.244.0.0','272AA522FF452893D3469597326AFA21',10007304,'2023-02-11 10:57:48'),('10.244.0.0','279523463C4F47198956861731BE1886',10007304,'2023-03-02 07:17:25'),('10.244.0.0','2A500041815A443624570903FDC1B703',10007304,'2023-01-05 11:28:15'),('10.244.0.0','2A5256B60B473E59C7F3033185D6BCFE',10007304,'2023-01-30 07:28:49'),('10.244.0.0','2BAA723E999C81FDC312C1478EE23B64',10007304,'2022-12-28 17:42:55'),('10.244.0.0','2E06BF822B35B70B869D34A2591FEA19',10007304,'2023-02-13 06:09:41'),('10.244.0.0','30D3D3F09BBB4C24FE812BE091CF28C7',10007304,'2023-02-08 13:09:58'),('10.244.0.0','33D439C74F9C34631C7C28E6712D901A',10007304,'2023-02-06 06:49:38'),('10.244.0.0','34029224A1742E10AEEEE5D8CC33594E',10007304,'2023-02-13 07:55:18'),('10.244.0.0','35F492D2BB13889531ABDDFDF0A367C3',10007304,'2022-12-24 06:14:28'),('10.244.0.0','36FB6C688F068D09D1EFB99CABE5412A',10007304,'2023-01-27 06:11:46'),('10.244.0.0','36FFDC97570687C4ECF39A89E6F11A0D',10007304,'2023-01-05 05:10:46'),('10.244.0.0','37975FDB03DDC18FE039CFF74059D971',10007304,'2023-02-13 06:20:48'),('10.244.0.0','37CDA8C88836B0A96D1D5524B5B43961',10007304,'2023-02-14 04:38:06'),('10.244.0.0','3842C1EB2E93DCEB1AF928CDCDD79AB4',10007304,'2023-02-24 04:51:48'),('10.244.0.0','3898BA12B0A677023CA6CE3E9FFCE1F8',10007304,'2023-03-02 07:17:41'),('10.244.0.0','3965E8234EC00188B218C35C2778C6CB',10007304,'2023-02-09 17:26:12'),('10.244.0.0','3A3B65EC3B497E489981EF9C510A77B9',10007304,'2023-02-04 06:17:28'),('10.244.0.0','3A4650E064985A33620EA4B2B17B05B3',10007304,'2023-01-10 13:17:16'),('10.244.0.0','3AB4A6AA0A043A4632D87ED0E3249160',10007304,'2023-02-16 04:58:21'),('10.244.0.0','3B23C62B9E4BA76DC713F617EBB4594C',10007304,'2023-02-15 04:52:29'),('10.244.0.0','3B74E96FA5D19EB3014EFCCE8BE8F666',10007304,'2023-02-27 04:31:23'),('10.244.0.0','3BB07C01384C27442F72D47E3CEC5A12',10007304,'2023-02-22 04:24:47'),('10.244.0.0','3C3E6803B1BA5CC39F672D5B0D857D74',10007304,'2023-03-01 04:20:09'),('10.244.0.0','3DFEFA1D21599FE476F2E1BA59BD9EAA',10007304,'2023-02-13 06:29:53'),('10.244.0.0','3E004B5F590EA457404AC52B50210A29',10007304,'2023-01-03 04:19:31'),('10.244.0.0','402EA30AA9A4B5D9E2888DF4D9327301',10007304,'2023-01-28 07:51:35'),('10.244.0.0','43371F4FDB08897CC0BB2A090A126FB3',10007304,'2023-01-07 12:13:33'),('10.244.0.0','471A11977BA434B3D311A51FA7F68B3C',10007304,'2023-02-24 04:17:58'),('10.244.0.0','4759C7C3DF1A23F94A55BA7B40428838',10007304,'2023-02-13 06:05:37'),('10.244.0.0','47A01A3E14B7F77AAFDF67254C63493C',10007304,'2023-02-06 04:07:39'),('10.244.0.0','4CB13B5C9B2F9AE6E9A2A0198ECE5DBE',10007304,'2023-02-21 06:51:30'),('10.244.0.0','4DCD20AD816D9080E00ECB163B688E4D',10007304,'2023-01-04 06:59:36'),('10.244.0.0','4DD3B7DFA118D5076A5465F9BBA2AF55',10007304,'2023-02-09 17:21:56'),('10.244.0.0','4F020C44EBB668BA92176C297D8DF270',10007304,'2023-01-10 05:08:07'),('10.244.0.0','501FFB8654751FB7B0F5E11DD7793C39',10007304,'2022-12-23 12:25:25'),('10.244.0.0','523FC707BA0646DDB84DA790EF87820A',10007304,'2023-01-23 08:30:22'),('10.244.0.0','54268D6CC5747B55C4CBBAADA10F0AA0',10007304,'2023-02-28 08:53:42'),('10.244.0.0','54895473F03C143BF00F72ACAD7A94D2',10007304,'2023-02-27 04:49:34'),('10.244.0.0','55586473AB9CF8B2556151723E51BBB7',10007304,'2023-02-13 06:02:14'),('10.244.0.0','560BD1E9B94656C1440FB876359F6C3F',10007304,'2023-02-18 04:39:11'),('10.244.0.0','56695A8A4F6857C98F3516B229746F7C',10007304,'2023-02-13 09:44:54'),('10.244.0.0','56A9680F7457F59FFB32B8FF0770AD2A',10007304,'2023-02-21 05:28:43'),('10.244.0.0','58CB39E04E393D8151F0582571D22D33',10007304,'2022-12-21 04:14:05'),('10.244.0.0','58E7FD348EEEC8D77FCAE7352FE04497',10007304,'2023-03-01 07:13:28'),('10.244.0.0','5BD71E188A9F0EC43A6CC43867ACB6D4',10007304,'2023-02-22 13:17:46'),('10.244.0.0','5BEE5E86DD9121186A1CA43D835C8854',10007304,'2023-02-21 05:32:57'),('10.244.0.0','5C3F8B0AFEE5B1579156CE8A9F4EEED8',10007304,'2023-02-14 05:10:45'),('10.244.0.0','5D0CD0B13B750B93479C35DFFBACCD03',10007304,'2023-02-08 01:03:29'),('10.244.0.0','5D4D1DEF340F3CDFF250163E7D9D4D5D',10007304,'2023-02-27 07:46:31'),('10.244.0.0','5EDB2B24E90C72C9CE0899813FB781F5',10007304,'2023-01-21 11:19:22'),('10.244.0.0','61C70093706116D8A9DEA7868A06D205',10007304,'2023-01-24 10:47:00'),('10.244.0.0','61E97DE6029A46282C16A904E0958FCD',10007304,'2023-02-12 07:39:29'),('10.244.0.0','6206A103E4BCB92C80EE955A2A169AB8',10007304,'2023-02-17 04:05:40'),('10.244.0.0','646C7D28A4C367B6D9364E1D5058982C',10007304,'2023-02-03 06:47:25'),('10.244.0.0','66972D7E2B88E5FCF073FFA7F56FCEBC',10007304,'2023-01-27 17:49:07'),('10.244.0.0','66FC988C4F90DF4C6195623F8B1392CF',10007304,'2023-01-21 12:53:16'),('10.244.0.0','68FB6DBD7EB59BAFF481755C89790B9E',10007304,'2023-02-27 06:29:35'),('10.244.0.0','69DF3045DFFD449DF0078036A479C53C',10007304,'2023-01-14 08:41:42'),('10.244.0.0','6A4799F6727C0F9585EDCEEED0E5BBFE',10007304,'2023-03-01 06:09:36'),('10.244.0.0','6A56F1D01FEE7EF57E5FD9234852F58C',10007304,'2023-01-25 14:14:35'),('10.244.0.0','6A84F5A35FDD924700894D5158D7727C',10007304,'2023-02-14 05:17:07'),('10.244.0.0','6BA6DBD1F2756B528971D787FF98497E',10007304,'2022-12-24 13:05:42'),('10.244.0.0','6BE3B9843AE8939CB8805D76DBDB1794',10007304,'2023-02-28 05:03:05'),('10.244.0.0','6C3FFD6284E5CA1BCCBBB1BAA504C96A',10007304,'2023-02-21 05:30:04'),('10.244.0.0','6D6238A7E59F2A82AF97C66E9F95BE84',10007304,'2023-01-27 12:55:03'),('10.244.0.0','71AF7210258E6544370513A03511386E',10007304,'2023-02-21 06:51:49'),('10.244.0.0','71F9485BB29A4D34C4D581C81F99273B',10007304,'2023-01-08 14:51:38'),('10.244.0.0','72E42A63C941DA3E07645CDC6D06FE69',10007304,'2023-03-02 06:24:33'),('10.244.0.0','7315B7B1A785F187975C91B20FD69239',10007304,'2023-01-03 12:01:12'),('10.244.0.0','73D73EADFBC46BA5D8188093E36F0D80',10007304,'2023-01-23 08:24:58'),('10.244.0.0','7501BB02CC2418F7AD8D60F6A2EE1AA8',10007304,'2022-12-22 10:34:35'),('10.244.0.0','760A153BFAB708C933325E89F43869E5',10007304,'2023-01-04 07:27:00'),('10.244.0.0','77B3917F3CDD9F6F73423FBECA518517',10007304,'2023-02-09 17:09:56'),('10.244.0.0','77EA291DFDDE1E4A07F8AA1C193E9527',10007304,'2023-02-28 03:53:34'),('10.244.0.0','78FD1129C57998C3C775F631CADEC55B',10007304,'2023-01-10 04:07:15'),('10.244.0.0','78FDDE13756DAFB6122CFB03CD50A585',10007304,'2023-02-15 12:25:41'),('10.244.0.0','799BD8495F27A7D2CB88CC7D205BA651',10007304,'2023-01-03 12:01:12'),('10.244.0.0','799EEAC341FD43E707AFF6CDD4170C24',10007304,'2022-12-24 04:59:52'),('10.244.0.0','7CF3C635864A03F4672021708D3012F5',10007304,'2023-02-21 05:36:47'),('10.244.0.0','7D9F6042AB3928D88F613C4B544940F0',10007304,'2023-01-03 12:01:12'),('10.244.0.0','7F894E1B1FEE46ED5D66F24FA06E9955',10007304,'2023-01-19 04:35:07'),('10.244.0.0','811EA958BEA61D1D8C70DE8EBDD7E376',10007304,'2023-02-14 04:39:06'),('10.244.0.0','8277CBCB52C8819CE06B5FAF9ACF5A97',10007304,'2023-01-27 12:43:40'),('10.244.0.0','82F7FF625EBDAA710A510C1287928A2C',10007304,'2023-01-25 11:09:25'),('10.244.0.0','84777DBF129C0B72A379AE0C1A99CA51',10007304,'2023-02-13 06:22:44'),('10.244.0.0','84FEB5098B8AEDA8EAA18F8455AE59C8',10007304,'2023-03-02 05:07:37'),('10.244.0.0','854B2C436B2E9A67366845868B43AC63',10007304,'2023-02-14 04:53:32'),('10.244.0.0','876DA44F02E24385E6FB9911D02EC163',10007304,'2023-02-09 04:04:36'),('10.244.0.0','8BBE112CF13094F10BF0DBE719C39DF3',10007304,'2023-01-04 11:52:06'),('10.244.0.0','8BEAD1A7D4B9CB41A25C1AD4EFD1AF8B',10007304,'2023-01-14 08:41:42'),('10.244.0.0','8CF1FC18A2A4BA0D50284324F89D7A9B',10007304,'2023-02-10 02:02:21'),('10.244.0.0','8DDEEFB8E944D41AD19B144159EE618B',10007304,'2023-02-10 05:22:33'),('10.244.0.0','8E9DF28E4B77308468339628877B7EB6',10007304,'2023-01-10 08:18:16'),('10.244.0.0','902A3E38FF7182E341A753DEEC754291',10007304,'2023-02-08 04:10:45'),('10.244.0.0','913BA1924A9ADF6B9486A1B8C2781411',10007304,'2023-02-14 06:35:58'),('10.244.0.0','93F6ABF82E797F5D3D6568AFB7E71421',10007304,'2022-12-23 23:49:44'),('10.244.0.0','9608D1C9135F9E64561AE33A8DA715DC',10007304,'2023-01-27 12:56:42'),('10.244.0.0','9987E0780DE93F53D253F30BCF86F644',10007304,'2023-02-17 04:29:07'),('10.244.0.0','9993CB6F762A60E2F3C40AE6DDC529E1',10007304,'2022-12-22 13:23:56'),('10.244.0.0','9C6B6804449A8A1C26F3CE4FA97D3BB6',10007304,'2023-02-08 09:51:44'),('10.244.0.0','A134FA3FB58424876A3E742554D6E7A8',10007304,'2023-01-03 04:16:02'),('10.244.0.0','A3DDB625C8B724A36D0AD77870B190C6',10007304,'2023-01-04 06:09:32'),('10.244.0.0','A5069D5E2C4519620587FD027F89DB9F',10007304,'2023-02-23 09:12:42'),('10.244.0.0','A53DE30567FD2C90F686E7F58035A7EC',10007304,'2023-02-21 04:53:05'),('10.244.0.0','A5BDC4E8CC75700FF31D309A58CC0DED',10007304,'2023-02-13 06:41:01'),('10.244.0.0','A77B5C7DDECF0B19DE83B0413FAF3322',10007304,'2023-02-18 04:11:46'),('10.244.0.0','A7A366FC110549CEC5C2B88AF363553C',10007304,'2023-02-21 04:27:37'),('10.244.0.0','A8429BEF52258313017BA44C9A16F29C',10007304,'2022-12-23 12:40:03'),('10.244.0.0','A94A726EF1B8A296A01F56CF75E1F338',10007304,'2023-01-23 13:24:22'),('10.244.0.0','AA7B2229CA1CC433B23856E17DA02757',10007304,'2023-02-07 15:44:12'),('10.244.0.0','AB05B3A0AE60C3C57A59C04761A2DB08',10007304,'2023-02-09 03:45:02'),('10.244.0.0','ABD29712288E918E0F73967E12FCFD75',10007304,'2023-02-13 06:29:14'),('10.244.0.0','ACE38356883EF7F3781F3ACE2C5E9F8A',10007304,'2023-02-17 04:57:46'),('10.244.0.0','AD00EAE5325CC835C02B9177B58A4C53',10007304,'2023-01-08 15:12:44'),('10.244.0.0','AEF14C4EA01060B4AD4A92CD34BDB5E8',10007304,'2023-02-16 04:52:24'),('10.244.0.0','B07163F46174BF28CA3B9361B9A0B695',10007304,'2023-02-16 04:52:24'),('10.244.0.0','B07AA38B4FC4ADA53A9A3063E8776061',10007304,'2023-02-27 11:38:10'),('10.244.0.0','B2661376ED722B8F0AE6981FC62B920D',10007304,'2023-02-27 05:20:57'),('10.244.0.0','B28BAFF203AC98D638A84CB514EF25B6',10007304,'2023-03-01 05:43:28'),('10.244.0.0','B335709F727CE4A6AC0D6E7703FAA7A5',10007304,'2023-02-14 07:23:40'),('10.244.0.0','B474C69E7AFE4CA66FC2CF70821AEBFD',10007304,'2023-01-04 07:34:06'),('10.244.0.0','B6FD5A61A873CA37F3C4E4A72EF38E5D',10007304,'2023-02-13 07:34:35'),('10.244.0.0','B7ECF13F7EDA63C7F29803BA6A6DF737',10007304,'2023-01-14 08:41:42'),('10.244.0.0','B89AAA33253A6622BC9C15A69776A4D1',10007304,'2022-12-27 14:46:46'),('10.244.0.0','BA87017E2236D5A01B2AE1CF21823841',10007304,'2023-01-25 11:55:03'),('10.244.0.0','BADB021BDDB3347A2B531CF09647D4C7',10007304,'2023-01-27 05:16:28'),('10.244.0.0','BE41CC9EF11DCF26FE99E3A48850C263',10007304,'2023-01-02 14:37:43'),('10.244.0.0','C0A699F8F97A89E8D14ECFD819E575C2',10007304,'2023-02-14 07:49:59'),('10.244.0.0','C1D1B5338C2B4EF6D541922CA49567B4',10007304,'2022-12-22 14:27:21'),('10.244.0.0','C24665C67F65F629B2538948DFB04A45',10007304,'2023-02-13 06:08:39'),('10.244.0.0','C2563744D040F42797D7A0D3C713E45D',10007304,'2023-02-27 09:22:39'),('10.244.0.0','C2792C7FE0934BA1183C8A086D6694A2',10007304,'2023-01-02 07:19:12'),('10.244.0.0','C3A1B31C8E479056C9A89175AB71E17D',10007304,'2023-02-13 05:37:36'),('10.244.0.0','C4C4AC6CB5020405A4ECCB1293861E5C',10007304,'2023-01-09 06:14:16'),('10.244.0.0','C666E9A2815908D94A6B7ABCA3A3D094',10007304,'2023-02-22 05:10:04'),('10.244.0.0','C81980E45C04913E3BE28984A1D3FE8A',10007304,'2023-01-02 05:34:12'),('10.244.0.0','CD8D3F9E091565DC09EC05BF29A16F99',10007304,'2022-12-24 13:18:04'),('10.244.0.0','CE63A8BDE30D9C01ECEED1E6237B7D4E',10007304,'2023-01-04 05:40:04'),('10.244.0.0','D0F9C4398FF7905306C54481688EA0DA',10007304,'2023-02-13 12:15:57'),('10.244.0.0','D1079CC20C1BAC5F070AD2215DFD2DB5',10007304,'2023-02-15 05:03:11'),('10.244.0.0','D177734BD962A6E400A36113AAE2F42D',10007304,'2023-02-08 05:17:37'),('10.244.0.0','D2BBA6868648D260C740C55E47645ABC',10007304,'2023-01-23 06:32:27'),('10.244.0.0','D2CF30546FE0991C247DEB86E1982D03',10007304,'2023-02-13 14:49:25'),('10.244.0.0','D684978E7B83BEDC4D11AFF98B1D9C8A',10007304,'2023-02-04 05:24:23'),('10.244.0.0','D8929ABB4E88E83466D9F1E4E8E86965',10007304,'2023-02-16 16:49:18'),('10.244.0.0','D9C532D41CAC8A577DD05E64ADAAC499',10007304,'2023-02-13 06:22:14'),('10.244.0.0','DDB4281EC0FAE547E339FD58E2076B0C',10007304,'2023-01-04 05:42:21'),('10.244.0.0','DE23D1F07594A6066B3C377FE0DFAB4B',10007304,'2023-02-04 04:46:58'),('10.244.0.0','E092CBF361EF9F26DD676FFB9A79A5AE',10007304,'2023-02-22 13:20:24'),('10.244.0.0','E2BEBBA798227474ADF30E669E37AD64',10007304,'2023-02-23 03:39:22'),('10.244.0.0','E350BC0431688307A6530EFD33F9326C',10007304,'2023-02-20 04:33:01'),('10.244.0.0','E42CCE430D000A1DE8F05BF479D14318',10007304,'2023-02-03 06:56:35'),('10.244.0.0','E4EE2915CDF4192B34B6B92FC9DC08F5',10007304,'2023-02-28 13:24:15'),('10.244.0.0','E548267B1E509DFE2221173D41A1C672',10007304,'2023-01-25 13:32:30'),('10.244.0.0','E54F6B8DDF6070E261C1EF13801166A9',10007304,'2023-01-25 12:44:33'),('10.244.0.0','E9B37EFD5BF350E3C60D7C91CF496714',10007304,'2023-02-11 04:46:52'),('10.244.0.0','E9B843AD4FCF9DF59D2C4D53C1A9B0E0',10007304,'2023-02-11 09:37:30'),('10.244.0.0','EAA50AAC424E61A849DE91406E00DAF6',10007304,'2023-02-03 11:19:24'),('10.244.0.0','EAACE21233011ECF7E0F3A220007E66D',10007304,'2023-01-23 11:44:38'),('10.244.0.0','EC0252212C762F51DCDF876F991B45BF',10007304,'2023-02-15 15:54:47'),('10.244.0.0','EC208817C1F63017C8A23D6EF0505DD5',10007304,'2023-02-13 09:46:59'),('10.244.0.0','EE18561214C45F0604FDF9CCE7766634',10007304,'2023-02-03 05:07:27'),('10.244.0.0','EEDA15E5A19F739D0BA2EA07D7CCC077',10007304,'2023-02-25 04:40:09'),('10.244.0.0','EEF2099646C6D98D70137154888E8A38',10007304,'2023-02-15 05:03:13'),('10.244.0.0','EF7BF24AB5E769016AA4AF821B1B7673',10007304,'2023-02-11 05:33:45'),('10.244.0.0','EFD997DF4EE142387AEEB458E79B8516',10007304,'2023-02-21 04:35:11'),('10.244.0.0','F0804439A63A5C2BEF04A94182895FE6',10007304,'2023-03-02 10:15:12'),('10.244.0.0','F0C8347B5DF2CD52B5799D0569061816',10007304,'2022-12-30 06:44:06'),('10.244.0.0','F1D3C48D9660713F3764BB905FDBBC98',10007304,'2023-02-04 10:37:39'),('10.244.0.0','F227C17DF43F0124F2748230E68E67FD',10007304,'2023-02-13 07:08:04'),('10.244.0.0','F2EEC2D9DA998940D77EB69A5E87C908',10007304,'2023-02-28 09:48:15'),('10.244.0.0','F3CCB262A1704720C7B8B9D2D94BACA8',10007304,'2023-02-13 06:37:49'),('10.244.0.0','F41DA4DB177B1EE246F3C453DC6A0791',10007304,'2023-02-13 11:13:31'),('10.244.0.0','F4BA334A7AF4630FB9356F53E57F7FCC',10007304,'2023-02-13 09:52:42'),('10.244.0.0','F6C81285AA13649FD761F0EA5673F2B3',10007304,'2023-02-16 05:10:04'),('10.244.0.0','F81FFED9E985649C40B20E6543C43F1C',10007304,'2023-02-04 11:13:32'),('10.244.0.0','F98C543849C8BA1E98ADFAFD416BE1D9',10007304,'2023-01-14 08:41:42'),('10.244.0.0','F9E60AE8BF7EA7C21B23E241A576E32C',10007304,'2023-02-27 05:18:07'),('10.244.0.0','FB16B0BBEACAC5E76353B97B39F250C0',10007304,'2023-02-14 11:47:13'),('10.244.0.0','FD69362A16A61A67603B7BDC056E6F80',10007304,'2023-02-08 05:15:18'),('10.244.0.0','FE699CE2CC8753BCCF563A84E23B55D6',10007304,'2023-03-01 09:09:19'),('10.244.0.0','FE8CF28A5E6F241B1BFFB6A2C9C2BEA7',10007304,'2023-02-14 06:11:44'),('10.244.0.0','FF8B6761168A05DF259DA193EAA8C7CB',10007304,'2023-03-02 04:26:04'),('103.109.14.30','0B2D054741015E6EB3F5C6331F11C6A9',10007304,'2023-04-22 07:28:52'),('103.163.91.7','72CA624DE5A0CEE50983F4D9928649D1',10007304,'2023-04-20 12:31:25'),('103.186.133.3','4C615BA72820C1B7295A536D5262B321',10007304,'2023-04-22 07:44:18'),('103.186.133.3','5EAD80069AE42922075454080D94F4B5',10007304,'2023-04-22 07:07:32'),('152.57.196.42','4031CEAA2E5A36187D3352784FE74142',10007304,'2023-04-14 06:22:39'),('157.35.16.232','404E1FEA07E36531024F5D020B7B82CA',10007304,'2023-04-18 08:21:40'),('157.35.16.232','4C6C681441680480FC60A0E31DE20305',10007304,'2023-04-18 13:44:47'),('157.35.16.232','EB3F8A26937A79A8C68D9A6BAEF9ACC1',10007304,'2023-04-18 13:51:51'),('157.35.16.232','F4AEFEA5BE7F8EC4593086BF0D73498A',10007304,'2023-04-18 08:01:52'),('157.35.16.232','FB78E042E69B1C79FAB689A186637C10',10007304,'2023-04-18 06:58:47'),('157.35.16.232','FE55C479CB1EE1E032C99E28384539E1',10007304,'2023-04-18 14:10:04'),('157.35.17.179','21CF61F4CCDFFA41B187E2784749C814',10007304,'2023-04-17 08:16:14'),('157.35.5.211','01A9B428C185ED8318C8D6CF1B6A1F54',10007304,'2023-04-15 07:18:46'),('157.35.6.79','0079CECC8A5F7755B8E1369AD62FB619',10007304,'2023-04-14 06:12:26'),('157.35.6.79','2B29B14BDD261314EA101C45F24B9FB0',10007304,'2023-04-14 06:12:26'),('157.35.6.79','39527693B3686F32C94AB5931E72662B',10007304,'2023-04-14 06:09:34'),('157.35.6.79','55D89E92AB6FA71BC916389C14B3F008',10007304,'2023-04-14 06:12:26'),('157.35.6.79','5A3F874FE8B1781E0F856566F060FCF0',10007304,'2023-04-14 06:09:37'),('157.35.6.79','5A7DDA1B002A0BEDF208CF89FFFD9CCE',10007304,'2023-04-14 06:09:37'),('157.35.6.79','700DA6AFDE088173B9E01FA57748D0CF',10007304,'2023-04-14 06:09:29'),('157.35.6.79','7AEDBD0981F29FE9B102003E441DCE21',10007304,'2023-04-14 06:12:27'),('157.35.6.79','CC25F074DE733339D6B8B6DC2D927000',10007304,'2023-04-14 06:12:27'),('157.35.6.79','DF03EFA873C7D33E47CDACB0B61812BC',10007304,'2023-04-14 06:12:27'),('157.35.6.79','E887593374296C8B093120C1FFFEC0F7',10007304,'2023-04-14 06:12:27'),('157.42.4.245','66FB1FB5EF06BE61F9F8B7E9EC9689CE',10007304,'2023-04-22 07:57:43'),('157.42.4.245','73DFC7EC556898CE17E7D952CF6ADBED',10007304,'2023-04-22 07:33:50'),('157.42.4.245','978B1F21F675C97FCB1634E3C41A11C5',10007304,'2023-04-22 06:41:55'),('157.42.4.245','CCDCCA17978851A526436BD3B438BA6B',10007304,'2023-04-22 07:06:57'),('192.168.0.144','3721ADE292F95EF01F704DAE502EA8E8',10007312,'2023-02-07 18:13:58'),('192.168.0.144','72F89E95E1C8AE30007C6703AFDB671D',10007312,'2023-02-07 17:59:26'),('192.168.1.10','0432F219EDEA8DE4FBF670BCBE240AA2',10007304,'2023-03-01 10:17:52'),('192.168.1.10','3694A02E63DD89F04886DAFA13FFD782',10007304,'2023-03-03 11:00:10'),('192.168.1.10','3904D4F6635C25829DDA5339C34C0699',10007304,'2023-02-28 14:53:05'),('192.168.1.10','45710FFE0461613D7B18B9439F1F46FA',10007304,'2023-02-28 16:00:36'),('192.168.1.10','4ACCD9874820685DFB7FD3B79058C4D6',10007304,'2023-03-03 11:18:37'),('192.168.1.10','547F05D45F211BF76D054103F2C45BA4',10007304,'2023-03-01 15:46:51'),('192.168.1.10','6ACD10FE3498B328F02B05ED51EBCC82',10007304,'2023-02-28 13:53:32'),('192.168.1.10','6B12314ADA2E1ABAF3E06D3A5AD90CBB',10007304,'2023-03-01 15:35:13'),('192.168.1.10','77FD85790E4B22E0BAC4195D56FCC0A9',10007304,'2023-03-02 14:15:20'),('192.168.1.10','7A91F0867B149ED7B4D91598D8519D64',10007304,'2023-03-01 15:14:03'),('192.168.1.10','7FEC693935870A2906B7D2EAB783DAC8',10007304,'2023-03-02 12:01:41'),('192.168.1.10','AD7BEF791842957239E3994A26DA9F1C',10007304,'2023-03-01 11:07:55'),('192.168.1.10','B154ADE48478EFDB7CABD40D87832F34',10007304,'2023-02-28 17:02:49'),('192.168.1.10','C0361FC4CE6D8B37BB025259006B4122',10007304,'2023-03-02 17:14:20'),('192.168.1.10','C292E38A7DA0113CECCBD949C8B0F276',10007304,'2023-03-01 10:51:45'),('192.168.1.10','C88E1BA9E8463C20550E864701DBC6D4',10007304,'2023-03-01 15:14:03'),('192.168.1.10','CD80BE9D36421970CD2453B35CE44066',10007304,'2023-03-02 10:41:59'),('192.168.1.10','E6945D0DF6FA3790807AE697693B1705',10007304,'2023-02-28 15:56:36'),('192.168.1.10','EACED29FA5F8D85D20C760FFAF69EF68',10007304,'2023-02-28 15:55:08'),('192.168.1.10','F09C7C6CE426E815089A8AED1745082A',10007304,'2023-03-02 10:31:46'),('192.168.1.106','1885D0C5711F1B27F061F8DD1BA48B8D',10007304,'2023-02-14 10:53:32'),('192.168.1.106','5A339547655DAA4AB6E95AF13535DDC2',10007304,'2023-02-17 11:05:18'),('192.168.1.106','5E7F4AEFB700B2FC25D8F7EE16A1178B',10007304,'2023-01-12 15:47:32'),('192.168.1.106','7AA1F3309DA2B440AF01C2B0FD74975B',10007304,'2023-02-17 14:42:49'),('192.168.1.106','879D92C98D3FF16AFAE2D00B615E5F64',10007304,'2023-01-12 15:17:10'),('192.168.1.106','A93CDC6496BEA1DC03C49294916EA202',10007304,'2023-01-12 18:23:22'),('192.168.1.106','B085E8C6CCFC7441E12DE0CA13EDC833',10007304,'2023-02-14 15:59:18'),('192.168.1.106','B79F8FF2F8F3534B9E30F0A7F8A8F7E9',10007304,'2023-02-18 10:22:57'),('192.168.1.106','BF4F3F00B48C9CCC976073C453BDF4D6',10007304,'2023-02-16 10:48:28'),('192.168.1.106','E8D0FEE6C7D2A5CB885A145561B374D9',10007304,'2023-02-16 10:01:21'),('192.168.1.106','F139D3B4FA84E80906D04C528214C40B',10007304,'2023-02-16 14:36:42'),('192.168.1.106','FE7B95C3AB22BEB8021864DEAECABB73',10007304,'2023-02-22 16:24:42'),('192.168.1.107','44FACF8F4C49CC12EC4FF6F7E8ED8673',10007304,'2023-03-02 16:10:19'),('192.168.1.107','661B9B9784B338581EE7FA6BF2C04A3D',10007304,'2023-02-11 17:08:50'),('192.168.1.107','878F00B4C6353A1C6C7783F48C46F307',10007304,'2023-02-11 17:08:50'),('192.168.1.107','8CBEB8F4BC2483531EF043ACB1C5C348',10007304,'2023-02-11 10:28:36'),('192.168.1.107','98C7E02C0E250A837AE656B9D5AECAB2',10007304,'2023-02-11 17:27:15'),('192.168.1.107','D019E8785A4CD8FFAD709ACEF5A3668F',10007304,'2023-02-11 16:32:40'),('192.168.1.108','19545C3906C56DFCC91A2B7D8BFF76A2',10007304,'2023-01-19 10:09:48'),('192.168.1.108','252AC40AEE5595B469D736F2E704193E',10007304,'2023-01-16 15:16:09'),('192.168.1.108','3E62F2C1586A3165307561C923792A39',10007304,'2023-01-14 16:27:01'),('192.168.1.108','410A38A791EFA960EA9411DD149BD905',10007304,'2023-01-16 15:15:18'),('192.168.1.108','58B22ECDB9B512C09AB6230EB3A1C96C',10007304,'2023-01-17 14:51:08'),('192.168.1.108','74523B280A64EAF6F7D67B381950692A',10007304,'2023-01-14 15:21:23'),('192.168.1.108','8A8907341156C3BA9C111586FEB5F835',10007304,'2023-01-17 14:52:10'),('192.168.1.108','92AF1E6567B72BC485785F4DECD82A38',10007304,'2023-01-16 12:35:43'),('192.168.1.108','92F55BE2F0CB3DB260FD5DED2F3D8BA1',10007304,'2023-01-16 09:55:13'),('192.168.1.108','B1D5413096DE13A3F2C35BC298685D59',10007304,'2023-01-17 10:00:43'),('192.168.1.108','C4DCD456BA49A5C3E89D8BC2BC5A5AD8',10007304,'2023-01-16 15:10:16'),('192.168.1.108','C5172A5659D45DC0DFB68781E0A09DAD',10007304,'2023-01-17 14:09:51'),('192.168.1.108','E786264659F968FA8E819CFAF9234F5D',10007304,'2023-01-20 10:01:53'),('192.168.1.108','FBE68586E2699443EF160A733A98BE70',10007304,'2023-01-17 14:53:11'),('192.168.1.109','79F71882DB4AF1CABADC1F1D576EB6E9',10007304,'2022-12-17 11:22:52'),('192.168.1.109','AF01DB17AF291E4B908C05FDF0620B90',10007304,'2022-12-17 11:24:53'),('192.168.1.109','CE170F441DC76C7DB7D510196F965D3A',10007304,'2022-12-17 11:23:14'),('192.168.1.109','F04032636102C5A97BBF77ED41C7AE0D',10007304,'2022-12-17 11:33:31'),('192.168.1.109','F07D1C463B1AB73F9D2BDFB976A1B02F',10007304,'2022-12-17 17:21:28'),('192.168.1.109','FACBCE645E987F370213258A0E46C9A3',10007304,'2022-12-17 10:44:50'),('192.168.1.111','01AAA82DB694DCF6BB07919F005741C8',10007312,'2023-02-03 13:03:02'),('192.168.1.111','09B11EAA4CC62CD333148C6ACBC6B2C5',10007312,'2023-02-02 16:56:10'),('192.168.1.111','109B76E9D0528C5327C9AD2D983319EE',10007312,'2023-02-02 14:31:24'),('192.168.1.111','22633697879A9F5812E6C98F571DC03A',10007312,'2023-02-01 17:56:03'),('192.168.1.111','24D98474F9C2AA04D3895F7082C8094F',10007312,'2023-01-28 11:01:54'),('192.168.1.111','2B3E778C1F3BBE665DAAB386EF21797C',10007312,'2023-01-25 11:16:54'),('192.168.1.111','2F1291CA08AAFF4F6459CACA2078F6B8',10007312,'2023-02-02 15:57:17'),('192.168.1.111','3336E8610CC478485E9F73CCEB1E0A74',10007312,'2023-01-31 18:37:29'),('192.168.1.111','3B7393055AFE7B91A0595F0B303295C1',10007312,'2023-01-27 10:39:10'),('192.168.1.111','3DBC9D727926F672C705FDB050EED5B1',10007312,'2023-01-31 14:25:36'),('192.168.1.111','3FF7C9179EE9AE1CF1EB69D63B97CB18',10007312,'2023-02-02 11:27:13'),('192.168.1.111','473D44AA3D963741A7C4824CAE57D934',10007312,'2023-02-03 12:31:39'),('192.168.1.111','4B5083B1739B735C5E9A4A0C43D93012',10007312,'2023-01-25 19:32:20'),('192.168.1.111','501B5DCD5578E57596442B5A1567239F',10007312,'2023-01-25 12:03:21'),('192.168.1.111','5710639BE81C415CB75DF1DC6D7A020C',10007312,'2023-01-27 10:37:01'),('192.168.1.111','5D9CBA6241157E5B90A68C8122CEEF06',10007312,'2023-01-27 16:55:56'),('192.168.1.111','5DD445FFDD4142B9AD5C3BF88471A5A2',10007312,'2023-01-25 10:13:48'),('192.168.1.111','5DFCF9DA73A3FB6BC1E4E2FCB826E37C',10007312,'2023-01-25 14:35:50'),('192.168.1.111','5ED83A72746C70B071E2AA4F048950CC',10007312,'2023-01-31 12:06:54'),('192.168.1.111','5F4631D7078D0276911A2E10F6573060',10007312,'2023-01-25 14:29:04'),('192.168.1.111','68CBDD8B619C023E48F10386711E37D8',10007312,'2023-02-03 14:33:55'),('192.168.1.111','68DF4FD966ADF8009D309A1146BD1D98',10007312,'2023-02-03 11:53:08'),('192.168.1.111','735041092808DEA6E4FC68BBFE672CC7',10007312,'2023-02-01 12:52:12'),('192.168.1.111','7B06BDA0F46847108F0049969943D0EE',10007312,'2023-01-30 18:25:53'),('192.168.1.111','7DCA029FA1E0381A7869017F5061AFD0',10007312,'2023-01-25 13:03:04'),('192.168.1.111','82DA225D4039AF2A0A5C470987DE27AA',10007312,'2023-01-30 12:18:53'),('192.168.1.111','831FAAC65BA353AA3B29EA1AF019B656',10007312,'2023-01-27 12:01:25'),('192.168.1.111','86FB0624C5E08A5E35E2D173101F9635',10007312,'2023-01-28 18:39:04'),('192.168.1.111','8A42BB7652489642077E3643F820B62F',10007312,'2023-02-01 10:44:59'),('192.168.1.111','93B669FFA933E77C63E570E063A9761A',10007312,'2023-01-30 15:55:26'),('192.168.1.111','9A735A6500830D4334A0C62EE86FC3C0',10007312,'2023-02-01 13:47:22'),('192.168.1.111','9D9FE091C118E18007E5CE1295D7F274',10007304,'2023-01-24 13:34:44'),('192.168.1.111','A04DC4C5B75BB3E895FC3B5966BE5672',10007312,'2023-01-25 19:16:21'),('192.168.1.111','A0EEA4CB5B6721B3769FF3271567C1D2',10007312,'2023-01-28 17:41:45'),('192.168.1.111','A7D066BAE7573D38CE943FF6733B640D',10007312,'2023-01-25 21:51:45'),('192.168.1.111','A9C7B0328B92CA2E17F01ADD9B297E0F',10007312,'2023-02-03 14:25:44'),('192.168.1.111','AB886DBD541620BBFD17BC88C3FD0AA4',10007312,'2023-01-25 15:07:24'),('192.168.1.111','B48F614FC59726BD84982137827F5109',10007312,'2023-01-30 11:46:01'),('192.168.1.111','BED07FAE39B907495372B0CFB328509E',10007312,'2023-01-31 17:07:50'),('192.168.1.111','BF3AE9858788F21475A94402DA7B5E56',10007312,'2023-01-31 10:07:34'),('192.168.1.111','CA29548ED42EB21E366AC84CC233FCE4',10007312,'2023-01-27 14:45:25'),('192.168.1.111','CD84712F574DC2D706A0E26E53B47741',10007312,'2023-01-30 10:13:55'),('192.168.1.111','DAF369E655238D19D50D13075A349B48',10007312,'2023-01-31 09:45:33'),('192.168.1.111','DB28D7E881D89AA235096DE6F00D6138',10007312,'2023-02-03 13:39:53'),('192.168.1.111','DE30C71477D8F315A9D9914708250E78',10007312,'2023-01-25 16:43:52'),('192.168.1.111','ED46C15CFB13DC7CCDA89CC57022DC82',10007312,'2023-01-27 09:53:49'),('192.168.1.111','EF7CF09E88F1CA35276B78A2B54D7B04',10007312,'2023-01-25 15:32:55'),('192.168.1.111','EF914917EB727ABF796E9DA33ED8A2F7',10007312,'2023-02-03 14:22:17'),('192.168.1.111','F43EF5AFE249C013DFDB7937298DD174',10007312,'2023-02-03 10:36:18'),('192.168.1.114','02EBD7B0D66AF7464A578BBC7CD3797E',10007304,'2023-02-08 10:00:35'),('192.168.1.114','06B6911209D8E578E67C5594E351C261',10007304,'2023-02-08 15:04:47'),('192.168.1.114','2028584B474161DAB4C4870F4C52BE1E',10007304,'2023-02-10 09:55:32'),('192.168.1.114','283EE2D00B0DE42BCBF51039ADDD0EFA',10007304,'2023-02-09 14:52:07'),('192.168.1.114','2B3649785CA506486E8A4F55DF3D29BA',10007304,'2023-02-04 09:35:31'),('192.168.1.114','62FE9D3166A669C3BAFB3FD16930C254',10007304,'2023-02-04 13:31:05'),('192.168.1.114','65ADE98CEDD476B8C9CE2390A58B3FAC',10007304,'2023-02-04 17:22:37'),('192.168.1.114','682C0DDC89CBC3303F80CEA3181C20CE',10007304,'2023-02-04 13:28:58'),('192.168.1.114','6BBC6E7246353BFF0ECDC0E9AAB5DA36',10007304,'2023-02-07 10:33:41'),('192.168.1.114','81193E28E3790A70A5EADD17BBED8D8E',10007304,'2023-02-09 09:50:23'),('192.168.1.114','8A21AAAEF1BB85F1637892CD3F7D537C',10007304,'2023-02-11 09:53:27'),('192.168.1.114','8AEC21A56D76FE506E7EDF95F721C4C0',10007304,'2023-02-04 17:25:51'),('192.168.1.114','901B58C5DEFAA2A1824E40D3AE0C1300',10007304,'2023-02-10 15:17:45'),('192.168.1.114','95C3B3D1343CFDBE2668A059220E33CB',10007304,'2023-02-07 10:26:59'),('192.168.1.114','F3BE024E91F2DB71749C43F00A892CD9',10007304,'2023-02-09 14:45:15'),('192.168.1.114','F86AF11DD97637E2DA0913521596D7DB',10007304,'2023-02-04 13:26:41'),('192.168.1.114','F9EBBE90C1EEC21D33068A84B08D6624',10007304,'2023-02-06 16:06:34'),('192.168.1.30','368407AEFE69F8638C20DB31BA99D57E',10007304,'2023-04-21 13:33:43'),('192.168.1.37','18BFA1C90F15B26B3BDB7DE8D4FAB7BC',10007304,'2023-04-18 15:30:16'),('192.168.1.37','546918838966F94CFBF741A2C2DAD6EF',10007304,'2023-04-18 15:38:48'),('192.168.1.41','301EBC7D762628A7FE8E57AE6BB58368',10007304,'2022-12-15 15:23:22'),('192.168.1.41','3783D8586EA48625E5F237CB95B9C821',10007304,'2022-12-15 15:21:59'),('192.168.1.41','3E38832E276B49390A516CE5AC43B92F',10007304,'2022-12-15 14:54:03'),('192.168.1.41','87E5101877F68B9330431C57AB6BBF69',10007304,'2022-12-15 12:46:31'),('192.168.1.41','C3689D094E4C78947B63D0B895A5E00C',10007304,'2022-12-15 14:04:09'),('192.168.1.41','E8E1BD813F7A23C7210AC9B458CCFC8D',10007304,'2022-12-15 16:15:39'),('192.168.1.42','087EC3CDF6431D39006F53F1338084D9',10007304,'2023-03-06 18:18:01'),('192.168.1.42','1C05FE7ED5CDB52B9D5564F11EAEFDB5',10007304,'2023-03-03 10:05:27'),('192.168.1.42','28BED98F7C36F07803685DFCEC9E1D23',10007304,'2023-03-01 13:40:04'),('192.168.1.42','3E53F92E0845B460D9F3BA4945BB2FB9',10007304,'2023-03-02 17:13:00'),('192.168.1.42','6A74B6CA8C6B526771444FE056443F39',10007304,'2023-03-03 18:11:22'),('192.168.1.42','9633BF81FCBC48951F99C77AF228E793',10007304,'2023-03-01 09:57:57'),('192.168.1.42','983D4FB1EBD7CE26C0493D6EF51AD47F',10007304,'2023-03-04 09:50:31'),('192.168.1.42','B25D8A7D04C753302F5D04A5DEC60563',10007304,'2023-03-02 13:43:50'),('192.168.1.42','BD3509E0F310B9BDD8776E94ABB91176',10007304,'2023-02-28 16:27:18'),('192.168.1.42','BDCE3920A546AE43647CF257BDBCF5FF',10007304,'2023-03-02 17:54:51'),('192.168.1.42','D710439665276296EA46B268404FA31E',10007304,'2023-03-06 10:10:56'),('192.168.1.42','DDC639586F065C439483CBE8E92ABC3F',10007304,'2023-03-01 13:55:53'),('192.168.1.42','ED6929DABF7AB6930AA1555AD848F371',10007304,'2023-03-07 09:42:27'),('192.168.1.42','F2515DF92EC67A7986C89C9C8E3BCF05',10007304,'2023-03-02 11:13:27'),('192.168.1.8','567BC54E04BBC0641FC9955524FBE885',10007304,'2023-04-21 12:17:07'),('192.168.1.8','E0A023FC624D6628D5D7AEDE273144CE',10007304,'2023-04-21 12:54:31'),('192.168.105.144','19A4DB3BC2227767281DAD6C38434800',10007312,'2023-03-04 14:58:50'),('192.168.105.144','3EBBE84BF3211967F5B6C8398A218D53',10007312,'2023-03-04 19:06:35'),('192.168.117.144','632348FF1EF402EA085552A2F502E652',10007312,'2023-02-08 12:48:53'),('192.168.121.144','1D4C65DBA5CD72D1FF11213888056C43',10007312,'2023-02-07 09:47:39'),('192.168.121.144','3DA77F1662DDE12C707CEB05B77CEB38',10007312,'2023-02-07 09:43:48'),('192.168.121.144','3FA06AE7B7E8B6774E9088F9EFBEDE29',10007312,'2023-02-07 13:27:58'),('192.168.121.144','4131A1AA6EC9A7EDB16135DDDEA7BFAE',10007312,'2023-02-07 11:34:46'),('192.168.121.144','6A349F51BE0DA0C94AEA59EA6BDC05F1',10007312,'2023-02-07 12:05:45'),('192.168.121.144','7EC973902A36A66281876DC5D950D2C8',10007312,'2023-02-07 12:22:04'),('192.168.121.144','979A9E315A7D68BD6B6976716352EF0B',10007312,'2023-02-07 09:38:15'),('192.168.121.144','A77A3FE155A33CF6804E1F46BF77D689',10007312,'2023-02-07 09:31:04'),('192.168.121.144','C2CD50159A4D66C7941DCCFDC7E22B81',10007312,'2023-02-07 09:47:09'),('192.168.121.144','F77E50E940CCB445DE9EDD7986F0686D',10007312,'2023-02-07 10:15:55'),('192.168.134.33','4A9BAD369CC202EF5B369C63D1FC6571',10007304,'2023-01-11 12:58:37'),('192.168.146.1','003EB861F23EEC95DCB09D1D7C18867C',10007304,'2023-02-11 15:33:29'),('192.168.146.1','00F453B166108A1A265E0CBD9DCCC8AE',10007304,'2023-01-03 17:58:20'),('192.168.146.1','013197B978DC9E2183F415B3A1741960',10007304,'2023-01-06 10:48:18'),('192.168.146.1','02FEBCB3807C00242131BB13845E3AED',10007304,'2023-01-18 10:23:01'),('192.168.146.1','07B7D0E19539A912B45CB10D9D33CD8B',10007304,'2023-02-20 09:40:26'),('192.168.146.1','0BA39F29BD09FC27F4627EE3941590DF',10007304,'2023-01-17 15:44:52'),('192.168.146.1','0D41EB73D8BC1A17D770ACF891034024',10007304,'2022-12-31 10:43:09'),('192.168.146.1','10D671B2D158CE7CC3B60E181CB2F9D2',10007304,'2023-01-28 12:04:20'),('192.168.146.1','1135624262000F9902D43E76C9BB89C4',10007304,'2023-02-11 09:58:49'),('192.168.146.1','129E4B12ADB76F823E60E6DC15AF7612',10007304,'2022-12-31 10:41:44'),('192.168.146.1','15C325B992F7082EB46F300E46501EE2',10007304,'2023-02-10 09:47:49'),('192.168.146.1','17EF752AEEF0D4F709ED547BE1A33D15',10007304,'2023-02-09 10:52:11'),('192.168.146.1','1ACFA26EAE1207867835886EC8F4AA13',10007304,'2023-01-24 15:32:15'),('192.168.146.1','23E26D18DC07689346565C5D6C62D45E',10007304,'2023-02-07 13:50:13'),('192.168.146.1','245A5E17D629C06F92855EEA1A351534',10007304,'2023-02-17 10:53:49'),('192.168.146.1','26FCB171B4926F752080C8FCCB805425',10007304,'2023-01-25 09:54:21'),('192.168.146.1','2877FCD7F02794C84968C65272093804',10007304,'2023-01-17 11:21:00'),('192.168.146.1','28B1B072E9071BEB386E08FD137B257C',10007304,'2023-01-22 15:20:19'),('192.168.146.1','2AAF086E31245D0448048946F2091065',10007304,'2023-02-16 09:51:31'),('192.168.146.1','2AD782784E78A2CA37392635344DB490',10007304,'2023-02-10 10:46:37'),('192.168.146.1','2F22B3E8EBE210243CA21B416C00506E',10007304,'2023-01-25 17:02:08'),('192.168.146.1','31E57387FD678AE2917F7A1F298B2F52',10007304,'2023-01-18 16:35:40'),('192.168.146.1','34B7959D0F6F39C1E82A271A1D156961',10007304,'2023-01-19 10:46:37'),('192.168.146.1','353C96B2DCEA52422AF8759B5FA5C737',10007304,'2023-01-16 10:49:12'),('192.168.146.1','37302A7326EEA0C34F1C4995729AA2E3',10007304,'2023-01-16 18:54:24'),('192.168.146.1','3F2731798CA5DE62C0296216DF937CBD',10007304,'2022-12-30 17:27:54'),('192.168.146.1','422A5ECB3614A6551A46698A4207EA2F',10007304,'2023-02-17 09:46:50'),('192.168.146.1','46CB2D73B2994C10BB8034A2DF08ED11',10007304,'2023-02-11 10:24:40'),('192.168.146.1','496AF66B4203CEF2D445967C7F184844',10007304,'2023-02-15 09:47:07'),('192.168.146.1','49BA20FB520A3001392CD822673FE5F9',10007304,'2023-01-16 12:17:51'),('192.168.146.1','4C464292F3BAF318D08E26A5B07D864C',10007304,'2022-12-30 16:57:20'),('192.168.146.1','4C755A84970F06E3071F57927EA4BBB6',10007304,'2023-02-07 09:46:28'),('192.168.146.1','5097332EC89E65B5D744263C44244B6A',10007304,'2023-01-21 10:45:41'),('192.168.146.1','51B7A388E7D3319D1F2545017C21D554',10007304,'2023-02-15 10:57:37'),('192.168.146.1','57BBA048A0FCB0592F82636C4248C3A0',10007304,'2023-01-18 10:23:51'),('192.168.146.1','59647738150F75EC659460FB549A8E77',10007304,'2023-01-21 10:02:43'),('192.168.146.1','5A57A0DEAD964063478161E7B6894A73',10007304,'2023-01-23 10:05:24'),('192.168.146.1','5FFBE4AE0027D0440317C11C1A581644',10007304,'2023-02-14 09:49:36'),('192.168.146.1','61A1E93688F4B04BE7B511DCC4DB2855',10007304,'2022-12-31 14:36:16'),('192.168.146.1','62490FE52BD10AD5393628538D55C206',10007304,'2023-02-13 10:18:36'),('192.168.146.1','631E0AA0FC5B8B2DE57DBE1F196CA411',10007304,'2023-02-09 16:43:24'),('192.168.146.1','6722CEC0216B65CC255D989B9DF4A591',10007304,'2023-01-20 10:02:04'),('192.168.146.1','6904222F9345530F71CCFD712C49F0E0',10007304,'2023-01-03 17:43:59'),('192.168.146.1','6F9173D0C991C80975FEE9F1BBCCC261',10007304,'2023-02-09 16:42:26'),('192.168.146.1','6FC56759EE0D40C9199360101F4E5957',10007304,'2023-01-18 12:16:58'),('192.168.146.1','7329F0B89E7587A0CBB15D47C981EA29',10007304,'2023-01-24 09:51:32'),('192.168.146.1','7336949F77885D422ED4D0EE5351A4C2',10007304,'2023-01-17 09:54:46'),('192.168.146.1','77C8F1E54A42BF9BBE49E04A794A83CA',10007304,'2023-01-10 10:02:53'),('192.168.146.1','790E440D65BAFBD29828EE577F6BC8AB',10007304,'2023-01-16 19:10:38'),('192.168.146.1','7BDCD0603E102352D69D0CA03DA15742',10007304,'2023-01-06 11:01:31'),('192.168.146.1','7BEE83EB8BAF97B2861732AC3F5960D4',10007304,'2023-01-17 18:56:14'),('192.168.146.1','820D07D267FFC8C2FA8D6A5CDF1420A6',10007304,'2023-01-10 10:14:46'),('192.168.146.1','834E216293F5013E45EAA3243F48333D',10007304,'2023-01-16 19:04:44'),('192.168.146.1','863BEE409C1B148C5384676039A2BE90',10007304,'2023-02-10 16:31:04'),('192.168.146.1','86C18AF2D5523404013770B6191587C3',10007304,'2023-02-16 11:32:41'),('192.168.146.1','8CBB5F82E6FADF8BB5E48D35CB9A7249',10007304,'2023-02-09 09:53:47'),('192.168.146.1','8EE81463EE73B69180AF52673845C975',10007304,'2023-01-24 17:08:56'),('192.168.146.1','8F6DE6F9B3B318CE789EE4CEA4160598',10007304,'2023-02-28 11:32:08'),('192.168.146.1','906D24F94ED95E55DE0BA1BE142F7F69',10007304,'2023-01-27 10:01:53'),('192.168.146.1','90D7C0D3B444D372043E264C4724A848',10007304,'2023-01-19 10:45:59'),('192.168.146.1','90FF2987C6AD2DD1B08809286571751C',10007304,'2023-01-17 15:46:42'),('192.168.146.1','92ECF6571031EA0AD64A721E3512365E',10007304,'2023-02-09 18:48:10'),('192.168.146.1','94913E7CE8FC7978D61B37F8DB414D38',10007304,'2023-01-16 17:39:23'),('192.168.146.1','9E6BFA582D472ABDAA02891E7A94E30C',10007304,'2023-02-18 10:04:04'),('192.168.146.1','9F892E7ADFB7F15D9FFC0D71126FCB9B',10007304,'2023-01-17 10:30:04'),('192.168.146.1','9F9805052F70614E2106FA2B78AE99A5',10007304,'2023-01-25 11:59:12'),('192.168.146.1','A2DC81891FFFA6B04688A6C5B659D863',10007304,'2023-02-13 16:04:26'),('192.168.146.1','A6C4B8C96F5E30AE089938E42089E797',10007304,'2023-01-17 15:46:05'),('192.168.146.1','A7DE6CF46BCCDBC44EC2376D8CAC1E3D',10007304,'2023-02-16 17:35:58'),('192.168.146.1','AE39EFA22394F8FDF394B60D1CD14C0B',10007304,'2023-02-08 10:50:02'),('192.168.146.1','AFBD4609CB5D34DF9E39BDEA7A2D550D',10007304,'2022-12-31 09:29:59'),('192.168.146.1','B2734E9BBE7EE889992D8CC5A94B3317',10007304,'2023-01-16 11:30:11'),('192.168.146.1','B2847CF4AE23EECAC54855E85396D9FE',10007304,'2022-12-31 15:39:38'),('192.168.146.1','B66C9C4BDF822B03D066253510DFD0F5',10007304,'2023-01-16 11:26:46'),('192.168.146.1','B6C7F2654ED90699FDD9034066C44B79',10007304,'2023-01-20 15:52:01'),('192.168.146.1','B71B6B332548F1468330A968485BFBB6',10007304,'2023-01-07 11:19:51'),('192.168.146.1','B80FC9E1AA932BF599800FFE46410483',10007304,'2023-01-17 09:58:00'),('192.168.146.1','BBCE1CECCCAFB0B489AEE928DA6B1CB4',10007304,'2022-12-30 18:32:04'),('192.168.146.1','BCB8C943D66FB6750B356163A5140B9C',10007304,'2022-12-31 11:00:55'),('192.168.146.1','C04D7BD31C8B7E4E600CD58440B8E81B',10007304,'2023-02-09 16:42:32'),('192.168.146.1','C11A87A3BE40D81A0A201315802FBEC6',10007304,'2022-12-30 16:58:33'),('192.168.146.1','C1BC0658DDE8193EBBF66BB74E134C00',10007304,'2023-02-16 11:30:58'),('192.168.146.1','C3AE7021BD85157C6D1741009F09123F',10007304,'2023-01-17 18:56:19'),('192.168.146.1','C53CB27C440E07AC45DF8491FF6CD6AE',10007304,'2022-12-30 16:56:45'),('192.168.146.1','C6058C33ACA21A61F1F204DF7D57E8D2',10007304,'2023-01-21 15:51:52'),('192.168.146.1','CA8832AF9C28AAE3F0B7AAAD93E65C4A',10007304,'2023-02-08 10:06:38'),('192.168.146.1','D0D316656E0BA53FD0ED8ABA3D3D3D0B',10007304,'2023-01-17 15:47:04'),('192.168.146.1','D3DD947A64BD9461E1F5766C95E2A3D2',10007304,'2023-02-15 10:49:17'),('192.168.146.1','D3F1EDE349F76E7911338DF05090E8AE',10007304,'2023-01-17 15:44:07'),('192.168.146.1','D6641FB93DC7EDCE1B7F84897E26514C',10007304,'2023-02-22 10:06:36'),('192.168.146.1','E29AC3122EF30B119251F63D4572EE4D',10007304,'2023-02-07 15:00:22'),('192.168.146.1','E3A0F3AB899BF4E384FE954C95516E22',10007304,'2023-01-19 10:04:08'),('192.168.146.1','E7071C0CBA3155C8A14CDBCD8D15DBEE',10007304,'2023-01-19 15:48:16'),('192.168.146.1','ED8202478E5A25D3C99D5EBE5716EFEB',10007304,'2023-01-17 15:44:11'),('192.168.146.1','F0B731A1B7DF426136DCAB9F7CD767F6',10007304,'2023-01-17 15:44:31'),('192.168.146.1','F3D003848A81861ACA4FCCE1B2CED04D',10007304,'2023-01-16 11:22:29'),('192.168.146.1','F6FFD844763DE01434B7FE613BAA129A',10007304,'2023-02-04 11:02:13'),('192.168.146.1','FC03E4C081D8E4DC52327D66BF90D973',10007304,'2023-02-08 15:56:27'),('192.168.146.1','FCEC70E56273E44640DB6B6074A385BF',10007304,'2023-01-06 10:47:12'),('192.168.146.1','FF3E1FE998A83EC7B0BD45F59765A29C',10007304,'2023-01-28 12:37:53'),('192.168.146.1','FF456D7112CDF2E5F7C77DCE2AC9931C',10007304,'2023-02-21 09:48:49'),('192.168.148.33','2C825B7E6B70941084CAF10B71391C27',10007304,'2023-04-14 11:39:28'),('192.168.16.144','47FC3CBDFD78343C584A1690CE409777',10007312,'2023-02-07 16:01:44'),('192.168.16.144','4A438E506AFA0681F87A004A4B50D856',10007312,'2023-02-07 15:24:32'),('192.168.16.144','5B7BEFCB105E3B589573984B14F84394',10007312,'2023-02-07 16:49:09'),('192.168.161.189','1FAF59CFAA6B27A12D8FE7E7B2413119',10007304,'2022-12-23 21:53:09'),('192.168.161.189','6135B5CDA04161E01B94861B82ECDE35',10007304,'2023-01-05 10:10:40'),('192.168.161.189','816E2512692D67E056255287CE9ACEC5',10007304,'2022-12-23 21:53:03'),('192.168.161.189','D37282180CB519CB463EE5A2998FABAE',10007304,'2022-12-23 21:54:03'),('192.168.167.144','1F033E0E1A8B23B543221BE56EACACB7',10007312,'2023-02-11 13:23:12'),('192.168.167.144','9F5F0881B453A8E6683CFE80C3A03FEC',10007312,'2023-02-11 11:51:21'),('192.168.167.189','000B60B77DFF91675CF09EF64EF4FF6C',10007304,'2023-01-11 10:05:46'),('192.168.167.189','010E486C0C2629254222D44CB33D9805',10007304,'2022-12-20 10:26:31'),('192.168.167.189','026151EB9757E555DF031CB21C4774F3',10007304,'2022-12-26 16:44:13'),('192.168.167.189','043FB0BDA292DF9F43D4F8D8DBD768A0',10007304,'2023-01-14 15:25:04'),('192.168.167.189','044B94302EFCBCB53AC06BA43EE69BE3',10007304,'2023-02-21 14:26:06'),('192.168.167.189','04A707A5EE36B003D3F4CA15262B1235',10007304,'2023-02-21 18:24:52'),('192.168.167.189','060C51C75709FF5E5F9890A615A3CDFE',10007304,'2022-12-22 17:25:32'),('192.168.167.189','0698BE45332BEEE07F5163E0AB2C1979',10007304,'2023-02-20 18:29:28'),('192.168.167.189','070EFA14F6AEF5472F79938456B17523',10007304,'2023-02-22 11:17:59'),('192.168.167.189','07A156286AEA961655B225BFF49BE09C',10007304,'2023-01-02 18:31:07'),('192.168.167.189','07D0DBAF4E35AE60E2EFBDB036B9C7AB',10007304,'2023-01-24 18:08:25'),('192.168.167.189','086C9D42296CD9859FACD1D0726F672F',10007304,'2022-12-28 13:57:09'),('192.168.167.189','08E276AC17CE4EF10DCCA1148860F733',10007304,'2023-02-02 13:54:29'),('192.168.167.189','09A05A170EC5C6AB7E0BCC4192671F3E',10007304,'2023-01-03 15:34:34'),('192.168.167.189','0B501EE53F68BB7940B9F9C5B7267133',10007304,'2023-02-08 09:40:41'),('192.168.167.189','0B8ADA685A8E75FDB60ED9E1D6905E0E',10007304,'2022-12-20 09:37:49'),('192.168.167.189','0B9FE3EDE8A96952DF9E396BAC3929D7',10007304,'2023-02-04 09:41:56'),('192.168.167.189','0CF128FA31194D602E0D6DDDDFB577F7',10007304,'2023-02-03 17:17:02'),('192.168.167.189','0D1D427F36D0ED4FD5FB4C30778ED351',10007304,'2022-12-24 14:27:55'),('192.168.167.189','0D31DF1C40B96E953F77D9AFB3FA3EEC',10007304,'2022-12-24 15:38:10'),('192.168.167.189','0DD8561AF844F1554FFC0A03036F7D4C',10007304,'2023-02-20 13:32:14'),('192.168.167.189','0E6C9ECB2E6C53230F755AC0389184F1',10007304,'2023-01-24 17:43:56'),('192.168.167.189','0E91AACFB7EEF227827B4F9998CAF53A',10007304,'2023-01-05 16:32:02'),('192.168.167.189','0EB2E8F0B08CA041A27F9CA8DFA5E7B7',10007304,'2023-01-13 13:26:59'),('192.168.167.189','0F301B69576118B43454508411BA2546',10007304,'2022-12-21 13:53:18'),('192.168.167.189','0F5726FA7BC053B4A78137D6B7322F4F',10007304,'2023-02-17 17:05:22'),('192.168.167.189','0F61EC5265EAD393B55CE4E80ADCB9A5',10007304,'2023-02-27 09:33:31'),('192.168.167.189','0FBAF40AAD3A72AA66249C1972D4ED8F',10007304,'2022-12-22 17:19:56'),('192.168.167.189','129C69AF19A8258F8772E18B3B48BA71',10007304,'2023-02-15 15:12:36'),('192.168.167.189','1367AA064D35C9D61593BC616E267F08',10007304,'2022-12-19 17:02:45'),('192.168.167.189','14C3E0364E298F81C47227ECD523F52E',10007304,'2023-02-14 10:03:14'),('192.168.167.189','151BDE67396291F7C3706F552893E20D',10007304,'2023-02-03 09:47:10'),('192.168.167.189','169007EEE2E6D5C8866B8C058DCBA936',10007304,'2023-02-16 12:33:34'),('192.168.167.189','172DC07B671F0A643FCBD8D9B16A9C3B',10007304,'2023-01-30 12:59:51'),('192.168.167.189','1761619DFDE1A1AE4192B691E17EE395',10007304,'2023-01-05 15:09:17'),('192.168.167.189','1942038005CA480E95017B36E3F3F4C0',10007304,'2023-01-04 12:22:10'),('192.168.167.189','1984F49A1378EB5294FD190A8EFC41D5',10007304,'2023-01-28 12:29:31'),('192.168.167.189','1A109CBB8BD677892401A43ED92222D3',10007304,'2023-02-16 11:04:22'),('192.168.167.189','1B292D068AFCDBFAC76FD54654245CA3',10007304,'2023-01-28 11:29:34'),('192.168.167.189','1C1C7B003E9E51A95933D170FDB98504',10007304,'2022-12-22 17:26:15'),('192.168.167.189','1C3BE9813B87D43898BFBD0FD7FE9D0A',10007304,'2023-01-23 12:06:53'),('192.168.167.189','1D69AB94AE4B8CE8055637FBB64F4A5C',10007304,'2023-01-12 15:31:53'),('192.168.167.189','1D8F231FFF021E304CEE91177850FFCE',10007304,'2022-12-19 16:35:21'),('192.168.167.189','1DD80CC1F4C8970528B99A9A25FE5CAA',10007304,'2023-01-05 12:35:02'),('192.168.167.189','1E111FEBE58B831249A51817CFA4BEEA',10007304,'2023-02-17 18:50:07'),('192.168.167.189','1E1E855F3CDF89A81F780ADCE26344FD',10007304,'2022-12-23 10:08:07'),('192.168.167.189','1E5EA6C710BF055D5BF4B3C81A55E4EB',10007304,'2023-03-02 18:21:16'),('192.168.167.189','1FAB9FD7CA8496A71BD0E1ADB1281F6F',10007304,'2022-12-23 18:55:25'),('192.168.167.189','20B8FDF7A517FE44609CC43DEFA90FF9',10007304,'2022-12-28 17:10:35'),('192.168.167.189','20E3030A5D0154E577318E95A580118A',10007304,'2023-02-13 17:32:21'),('192.168.167.189','21006E557F15633B823515811EBA8402',10007304,'2023-03-04 13:35:11'),('192.168.167.189','215A414C73C5C3AE353E4AF034F6AABE',10007304,'2022-12-30 09:34:40'),('192.168.167.189','22AEC65C325C97D8AD1D9B80486E95FC',10007304,'2023-01-05 16:00:44'),('192.168.167.189','246E49CD35AE3BB05515011014728265',10007304,'2022-12-30 11:41:01'),('192.168.167.189','25E27C4658CFD8F56E4D02E9176A708B',10007304,'2023-01-24 10:19:31'),('192.168.167.189','26AAF0DBAB292DD74A208B57A449B0DA',10007304,'2022-12-19 16:37:00'),('192.168.167.189','26B5B1F698F4016B9EE53E6F6AE466E1',10007304,'2023-01-11 13:51:36'),('192.168.167.189','27B66372D76C6FDB57D91D032E9A6AD6',10007304,'2023-01-27 11:24:54'),('192.168.167.189','27C5A587503FE1F446D6DB9DE00B0448',10007304,'2023-01-28 11:21:31'),('192.168.167.189','27DCF600897720376AE20AC252AEE5C5',10007304,'2022-12-19 14:50:41'),('192.168.167.189','28B6B40847D128761175404E821FFFD4',10007304,'2023-01-24 10:09:19'),('192.168.167.189','291695430EAB525AEC1EDD6EFCAA8578',10007304,'2023-01-23 17:17:20'),('192.168.167.189','2928666CD643BFD2EA50FA8D484C7AAB',10007304,'2022-12-22 17:07:43'),('192.168.167.189','2B8A483BC38F30B17958B6627D4EA56F',10007304,'2022-12-20 18:34:14'),('192.168.167.189','2D997C14403E8309671EF77341A4A9CB',10007304,'2023-01-02 11:58:12'),('192.168.167.189','2F7116A6CC8D5152FAA8B1AE0BA52AEE',10007304,'2023-01-31 13:51:27'),('192.168.167.189','2FEAE27B8DE0FE6597681733E5C750BC',10007304,'2022-12-28 14:54:25'),('192.168.167.189','3016097656D776F1EF45B4D760A536DF',10007304,'2023-01-10 15:37:41'),('192.168.167.189','315A3176E5197774016A14AD219D3C4D',10007304,'2023-02-13 14:54:43'),('192.168.167.189','33D4E993D121CB2E2DD3A9ECDC323358',10007304,'2023-01-11 15:38:02'),('192.168.167.189','33EE49CFD0A748D69B49A956B07CE429',10007304,'2022-12-28 09:41:30'),('192.168.167.189','33FEC21567469FAA316C9FE5E6724160',10007304,'2022-12-26 10:42:09'),('192.168.167.189','340A71E1FDBEC657BE8B64F696A990CB',10007304,'2023-01-05 09:41:11'),('192.168.167.189','3498703D2F0838B8F8968CF1A36E88E6',10007304,'2022-12-21 11:13:43'),('192.168.167.189','34CFD269E0FF2EC577F0A281561DF33D',10007304,'2023-02-16 12:35:04'),('192.168.167.189','34FAA8B6351DFFF1D79803D3242AA0AA',10007304,'2023-01-24 17:00:01'),('192.168.167.189','351567E7B2415BDF089D651C023C72FA',10007304,'2023-01-11 15:26:36'),('192.168.167.189','35B77DEF08E0EC45D8E768D2B61F99B5',10007304,'2023-02-02 09:36:18'),('192.168.167.189','368CBC552EFF560DDF0B0428807D8D64',10007304,'2023-01-23 12:50:31'),('192.168.167.189','36B71717D154ADFBC0097216AD2E31B2',10007304,'2022-12-19 09:38:30'),('192.168.167.189','36E3C1F009B287EF9838BF9C037608BF',10007304,'2023-02-03 17:25:30'),('192.168.167.189','380054623E593A4C02BC7EEF532E1FAC',10007304,'2023-01-12 13:50:55'),('192.168.167.189','389386AC049CF8C6C3E7BD3E5B8485A8',10007308,'2023-01-23 17:10:46'),('192.168.167.189','389962D5F08385F07ADA827ECFAD9391',10007304,'2023-02-24 15:37:43'),('192.168.167.189','3A06CF538351953984E629974C605CD1',10007304,'2023-01-03 17:48:26'),('192.168.167.189','3A9B0F190381385722EFA703AFA1D997',10007304,'2023-02-15 09:36:37'),('192.168.167.189','3C41629BEECE8CC51D2360910837F164',10007304,'2023-02-15 18:32:37'),('192.168.167.189','3C916F36BF8800A73160155EBEF25700',10007304,'2023-01-11 09:37:11'),('192.168.167.189','3CBDC6BB34B2B1B426BCEF59C1708DC9',10007304,'2023-01-03 17:43:44'),('192.168.167.189','3CC497B5F5D5162F484470B629D897E0',10007304,'2023-01-28 16:41:14'),('192.168.167.189','3D15F9F869EA234797316D1FACE91D20',10007304,'2023-02-11 11:31:28'),('192.168.167.189','3D1891FB254817627E5EB3FBE9E48EDB',10007304,'2022-12-24 10:47:56'),('192.168.167.189','3D24193117709891DDA231D20AA89AA3',10007304,'2022-12-23 17:12:09'),('192.168.167.189','3EF99034B39DEDCABB050C1B1A4158D4',10007304,'2022-12-24 11:48:51'),('192.168.167.189','3F407CF8062272B3F4222656516A83A1',10007304,'2022-12-24 09:37:28'),('192.168.167.189','40E9D3864F470C325DB7AF3342DC4D7B',10007304,'2023-02-21 17:54:23'),('192.168.167.189','40FBCF0D0415AEAA408FA47523AF58ED',10007304,'2023-01-03 11:30:37'),('192.168.167.189','42725848FC7B607FF14F6331B600D273',10007304,'2023-02-13 10:11:52'),('192.168.167.189','42994F969F56B7EBEE396B237BC4FE14',10007304,'2023-03-04 14:37:47'),('192.168.167.189','46C099A278887709D1EBC9FBF8B3E9EE',10007304,'2023-02-14 11:08:49'),('192.168.167.189','46F2E2AB0326FCBA7D4F84DBDC15392F',10007304,'2022-12-22 15:56:33'),('192.168.167.189','47ACAB31C390F603D12A464D8EFBC2FA',10007304,'2023-02-11 10:34:08'),('192.168.167.189','47FF42AB0F2E06D78368DADF221C1077',10007304,'2023-01-05 12:24:39'),('192.168.167.189','48D9BBB11F80620E87417A3450D3390B',10007304,'2023-02-23 09:37:36'),('192.168.167.189','4B3460FF63B2606583A6D4C6AF703FBA',10007304,'2023-01-05 12:39:12'),('192.168.167.189','4B620EC02412B3950F28FA82753CE764',10007304,'2023-01-05 15:56:49'),('192.168.167.189','4BFD45C22AC7CF87BE0D7579BB3D4C1D',10007304,'2023-01-13 14:32:05'),('192.168.167.189','4C2234CCD2CE1F8BD64824EBAA51B676',10007304,'2023-02-21 20:06:45'),('192.168.167.189','4C626362D1408CB4CFD0A2BEA39ED0DA',10007304,'2023-01-02 16:31:25'),('192.168.167.189','4CEB8C11C34DF5141E405D1BFAE46379',10007304,'2023-01-27 09:56:42'),('192.168.167.189','4E66661262A13BEC2C73E98CFF347303',10007304,'2023-02-13 09:45:27'),('192.168.167.189','4E9F020F6CF66C206DAC7F24F54365F7',10007304,'2023-01-31 10:45:09'),('192.168.167.189','4ED4C1B631B332DACA8C1D2AD7E03861',10007304,'2023-01-02 16:26:43'),('192.168.167.189','4F9E2BEBEEEBB62FF392780F5CF33B16',10007304,'2022-12-28 10:53:21'),('192.168.167.189','50C31BEF8663147FC33F856712674CA6',10007304,'2023-02-24 15:37:45'),('192.168.167.189','5273358009BD3E212C0812093B267793',10007304,'2022-12-22 17:25:29'),('192.168.167.189','54DD13972B8F63C7F90FB318C7817ED3',10007304,'2023-01-30 13:27:43'),('192.168.167.189','55D3D281B36323945C694367955175AC',10007304,'2023-01-14 15:39:49'),('192.168.167.189','55DFEDCB5A4D122A524AE59BE2CC16DC',10007304,'2023-01-23 11:52:41'),('192.168.167.189','5606D41A2996C78F05FBAF0BAD2348C4',10007304,'2023-01-24 16:59:44'),('192.168.167.189','565890D57314E23D381E2210DF664E74',10007304,'2023-01-03 15:27:02'),('192.168.167.189','56E5F6D7EF22EA9BD2FD3D471FD476E8',10007304,'2022-12-24 10:45:56'),('192.168.167.189','57F92CD11D97D8B6869147A69E40299E',10007304,'2023-01-04 12:31:14'),('192.168.167.189','58047193DF8ABEC88CB0B244E4322051',10007304,'2023-01-11 15:41:12'),('192.168.167.189','59033685A4E19648644CDB3DE6991C36',10007304,'2023-01-05 12:58:38'),('192.168.167.189','5970384018FC63064A19F3A2F3A95EA4',10007304,'2022-12-24 15:06:18'),('192.168.167.189','5A02A7C7B6F7DC596DA7BBEA418F7DC9',10007304,'2022-12-19 16:07:12'),('192.168.167.189','5A9E00E908021E0D65DBD96D792C33D1',10007304,'2022-12-24 12:18:31'),('192.168.167.189','5AA738E61F9419A5A2562C9B6BF996AC',10007304,'2023-02-17 11:57:20'),('192.168.167.189','5DB10509FDAFA074BC267F283AD04E09',10007304,'2023-01-11 15:38:00'),('192.168.167.189','5DD332F7CC8A073BF0EF918D3F4E7EDD',10007304,'2023-02-14 18:00:33'),('192.168.167.189','60272854F154FB833F53293DC5E2DDA9',10007304,'2023-02-22 09:55:31'),('192.168.167.189','60343EB2EBCAD9CCA22936DB2AF12417',10007304,'2022-12-21 09:39:11'),('192.168.167.189','60F08BCACBB93FAF3D35AA49FAFD375C',10007304,'2022-12-26 01:11:45'),('192.168.167.189','61313356A9BB98DCE968B9A89D8A5BA0',10007312,'2023-01-23 18:29:00'),('192.168.167.189','618807A13352AB0B4E150D23100DE11C',10007304,'2022-12-24 15:15:21'),('192.168.167.189','62A9D0E7859327394E0592798E99923D',10007304,'2022-12-24 12:16:29'),('192.168.167.189','63442317A278317529D48625801A55CD',10007304,'2023-02-16 17:36:42'),('192.168.167.189','636D5E0F9E8F88977FB9B83CCC075A7C',10007304,'2023-01-05 15:56:47'),('192.168.167.189','63F563B07FE79E2417AB7AC84BB51D2B',10007304,'2023-01-13 16:18:02'),('192.168.167.189','6471E618614F22A37007CD18EC4E3507',10007304,'2023-02-21 12:21:13'),('192.168.167.189','64CBC0254BF38F20292C94D97A59D04B',10007304,'2022-12-26 16:14:25'),('192.168.167.189','64EBD6E1FC4CE5568A6B43462CB1EA47',10007304,'2023-01-31 10:55:32'),('192.168.167.189','650874930DADAB7CE4C4583A5E3BB1C9',10007304,'2023-01-23 12:06:59'),('192.168.167.189','66228753363A07776E2064AE74A9CF46',10007304,'2023-01-03 14:07:47'),('192.168.167.189','66D15A821564C03D3DA48C1CAC2FE10D',10007304,'2023-01-03 11:30:34'),('192.168.167.189','66E61782A677EC80598C3E661A7B33FE',10007304,'2023-01-28 12:29:40'),('192.168.167.189','6857EB19867A1DFE1809B9FF359EF36B',10007304,'2022-12-24 15:16:55'),('192.168.167.189','692B0BB7B984486E066EDAF5BD0F9F15',10007304,'2023-01-03 17:09:58'),('192.168.167.189','69F6BDB890C30B2478F120A590F84EE3',10007304,'2023-02-20 09:23:00'),('192.168.167.189','6B5A5347E1C44E64F19C12568995B539',10007304,'2022-12-19 18:01:34'),('192.168.167.189','6BD074973FBD857A1CA90B4A6BFEDA9F',10007304,'2023-01-31 09:41:28'),('192.168.167.189','6BDF89CE5CC1636A0B5109675AC02646',10007304,'2023-01-23 11:57:04'),('192.168.167.189','6C93B8E76DF1250A0CC4FD1C02CB7F31',10007304,'2022-12-30 10:11:33'),('192.168.167.189','6D28E2E8D77719A64A4F0D0717A52B99',10007304,'2022-12-27 09:36:10'),('192.168.167.189','6E95908C97E4072ADDD5D20C62E2DA20',10007304,'2023-02-21 10:47:08'),('192.168.167.189','6F8A856931D6CFD34A88EA732D8583F6',10007304,'2023-01-03 13:53:22'),('192.168.167.189','6FAF12E8F3B51E2289BE29955985404F',10007304,'2023-02-28 16:53:43'),('192.168.167.189','6FF77E41FC41F768A89FA337E1F36845',10007304,'2023-01-10 17:12:49'),('192.168.167.189','7059F83CB9ECBD01F1FACF827AA4990D',10007304,'2023-02-11 10:42:23'),('192.168.167.189','70CBFA6663C7910B3FC8236F577D7B43',10007304,'2022-12-30 15:51:26'),('192.168.167.189','71A96A2BD219D272DCB080817726F240',10007304,'2022-12-31 11:44:28'),('192.168.167.189','72507B8A56BC7D09D6A935CEDAA7F926',10007304,'2023-01-02 16:31:21'),('192.168.167.189','74B05A3D60A2B867F9103FC92F3AFECF',10007304,'2023-01-13 13:22:52'),('192.168.167.189','7556FA3A42A0B275F831D5FD95CD03E3',10007304,'2023-02-22 11:12:34'),('192.168.167.189','757DA1F4F818CFA84EDE9EC2E51A61F2',10007304,'2023-01-11 15:00:00'),('192.168.167.189','75B4875A977B56285A302B18E396D87C',10007304,'2023-01-23 12:07:06'),('192.168.167.189','76385CD7B012325141D667C327F1BFB9',10007304,'2023-01-11 15:57:09'),('192.168.167.189','768E6E8658314506B9AF4156CD65B560',10007304,'2023-01-12 13:19:31'),('192.168.167.189','773BBF30B37EF825D88C62E7F56CBE89',10007304,'2023-01-05 15:47:24'),('192.168.167.189','77F723EA89C1DCF1B3E5D144502E308A',10007304,'2023-01-11 10:04:48'),('192.168.167.189','79686951E6B9A26A76829C362FB1E349',10007304,'2023-03-01 18:15:15'),('192.168.167.189','79C12B384556537492EB41A1998C60A7',10007304,'2022-12-31 13:29:00'),('192.168.167.189','7AB3D4017DFB8FE1E152AAA8B1A8FAE2',10007304,'2023-03-01 09:40:17'),('192.168.167.189','7B4404B14A44E5FA796955D2AC667AE6',10007304,'2023-01-13 14:23:56'),('192.168.167.189','7BA24E1CB07A11162CA39DA26BAFCFF8',10007304,'2023-01-24 16:24:22'),('192.168.167.189','7BA773DC1445469E98E525FE85ECC8AE',10007304,'2023-02-01 14:46:28'),('192.168.167.189','7D1E89F7FCD784E8694BDDF04ACB7C48',10007304,'2023-01-27 18:30:33'),('192.168.167.189','7D636352DFF42E49249D1BEB5A94A79D',10007304,'2023-01-02 11:51:27'),('192.168.167.189','7DB46EF4E17D90226D5443F595407ADA',10007304,'2023-02-01 09:31:20'),('192.168.167.189','7E58C1958F5E4E857A36A4CFCFD6ED39',10007304,'2022-12-28 18:06:01'),('192.168.167.189','7EA54274B44B9A93551F1E77E4F3EBDE',10007304,'2023-02-15 13:12:50'),('192.168.167.189','7FAF3B7FBA137DC8BA5F0BF9EBBDEF05',10007312,'2023-01-23 17:45:51'),('192.168.167.189','7FDDB9CB9468F2A60061E44700C3034B',10007304,'2023-01-27 18:28:30'),('192.168.167.189','7FE294876C44BDFBB656017F888795FC',10007304,'2023-01-31 13:51:31'),('192.168.167.189','8068C3095B3C869E39929267DEBA62D5',10007304,'2022-12-31 09:38:23'),('192.168.167.189','806B55965745974F03B8902B35B2D083',10007304,'2023-03-01 10:50:23'),('192.168.167.189','810185795A5FBB216ED6F42D700E7B85',10007304,'2023-02-23 17:39:07'),('192.168.167.189','8104CAE5209D6F5F393269F2E54D19BA',10007304,'2023-01-23 14:34:19'),('192.168.167.189','835CBD14F31F46374FA214E895D0E872',10007304,'2023-01-24 13:10:08'),('192.168.167.189','8403EED95DD293BB02DAD5F947BF05A3',10007304,'2023-02-25 17:14:02'),('192.168.167.189','84787BD63F7B07AC643215C91FC42FA0',10007304,'2023-01-05 12:09:31'),('192.168.167.189','847D513772021579A0DD72A2E354E7FD',10007304,'2023-01-03 15:42:21'),('192.168.167.189','8483E158EFE49E5E80949BEDB885101D',10007304,'2023-03-01 11:58:55'),('192.168.167.189','864E510BCF1EF190B39DAFE944382249',10007304,'2023-01-05 15:40:50'),('192.168.167.189','8656ED4A9EA8F428F6D3CFD6F44FC7DD',10007304,'2023-01-03 12:29:45'),('192.168.167.189','886510DAFDD9837020C3B89648FDD342',10007304,'2023-02-16 10:14:58'),('192.168.167.189','89D8643D21A3BCBB7B353B89B5CDFBE6',10007304,'2023-01-30 12:59:01'),('192.168.167.189','89F2898FD3B4A5FF0980850DA56493A3',10007304,'2023-02-03 12:16:20'),('192.168.167.189','8B74F04ED587432A695A3BEC1512D43E',10007304,'2022-12-26 01:10:41'),('192.168.167.189','8B9AD9090D88A522CF499806913B538C',10007304,'2023-02-20 09:23:00'),('192.168.167.189','8C119DFC063B4B7CFD1D397CD21976D8',10007304,'2022-12-24 10:41:49'),('192.168.167.189','8CA1AD73CE4593CFE04715E0AC83B407',10007304,'2023-01-27 13:28:42'),('192.168.167.189','8CFEB9260A40E148FF9E116051A62F0A',10007304,'2023-01-24 17:00:01'),('192.168.167.189','8D82650F6EAB4B091289AA8F76EA314A',10007304,'2023-01-02 09:33:49'),('192.168.167.189','8DF5FDEA041486FD3DE65C51C5D0B9F9',10007316,'2023-01-24 11:49:45'),('192.168.167.189','8E3E994BD26D1EA5C93FC210CBB286D4',10007304,'2023-02-28 17:59:50'),('192.168.167.189','8ECA0EA9F0DD7BBDD777901FD045DC54',10007304,'2022-12-24 10:48:05'),('192.168.167.189','8F66DF1D0FB0004ACA486D59F7735DBF',10007304,'2023-01-23 13:30:38'),('192.168.167.189','906E66ECAB9786E3AA1B05E735EF7B82',10007304,'2022-12-24 12:54:34'),('192.168.167.189','90B78A4EA1F69C027DCEBC2B8B9CE138',10007304,'2023-02-25 12:02:44'),('192.168.167.189','90DCB7773F0FE93A7AD65727310A0867',10007304,'2023-01-31 16:21:34'),('192.168.167.189','91007E2FBDCB754D0C00058F76AB30E1',10007304,'2023-01-27 09:57:13'),('192.168.167.189','91FAE45FA69D32EB26AE8668051CA7F7',10007304,'2022-12-23 10:09:41'),('192.168.167.189','923DFFC34ECC21542FE1896263EF2E31',10007304,'2023-03-01 12:16:16'),('192.168.167.189','926AC2F92290B3BF546EBEAAB69D5099',10007304,'2023-02-04 16:34:07'),('192.168.167.189','94C260CD1C34513207D1DA620C48DB94',10007304,'2022-12-27 13:19:40'),('192.168.167.189','9552EF1C013B64D0C3E37F7D62DCA2EE',10007304,'2022-12-24 11:50:47'),('192.168.167.189','9748B450F79EC10172007DA2BD9000A3',10007304,'2023-01-10 10:49:32'),('192.168.167.189','975FD464669381E4B1121FF61AB8B818',10007304,'2023-01-27 13:50:31'),('192.168.167.189','976B24D596A10011CAC8F044C9717019',10007304,'2023-02-01 10:09:46'),('192.168.167.189','979355E6F9BDE3918F3B2CC0130DB400',10007304,'2023-01-05 16:07:58'),('192.168.167.189','979A0E65409F250F52E67AF5FB6ECA86',10007304,'2023-01-05 12:24:37'),('192.168.167.189','97DFBAED2018C575AD19FEA505C095C4',10007304,'2023-01-24 12:20:37'),('192.168.167.189','9820A3F1E7A1201AAB4665C90BC19A83',10007304,'2023-02-22 11:09:40'),('192.168.167.189','992C2B309A8861C24E585B12485F1041',10007304,'2023-01-27 18:34:44'),('192.168.167.189','99837C5D27E9DCF014DD59992DE7EDD2',10007304,'2022-12-20 11:49:31'),('192.168.167.189','99AE348B6C1FAC7767A94C822C7AD900',10007304,'2023-01-04 09:39:38'),('192.168.167.189','9A5E6EF6B47FA2D2D9BD1F6B3E15C920',10007304,'2022-12-20 18:57:21'),('192.168.167.189','9A96332F085015D846E73B5C50C7F5DB',10007304,'2023-01-23 11:54:17'),('192.168.167.189','9AC712C73804C58D82CABB728B1903EC',10007304,'2023-01-24 15:30:10'),('192.168.167.189','9AE572D9C3BAE3A3B47E69B04DDAE7CA',10007304,'2023-01-30 09:45:11'),('192.168.167.189','9B03489DFE9A2FCEC4C5A0445192AEAA',10007304,'2022-12-24 14:35:38'),('192.168.167.189','9B3F5E5C589C6B362179DC8FF1BFF95D',10007304,'2023-01-10 09:49:57'),('192.168.167.189','9BD1C0E7C19E00AB6B0C993E81CBD9C7',10007304,'2023-02-16 11:14:13'),('192.168.167.189','9D0D7DB5FB73BB50E89D994FF6835E7C',10007304,'2023-02-11 10:12:51'),('192.168.167.189','9E7B4CE03DD372F61330A84E9683C24B',10007311,'2023-01-23 17:43:07'),('192.168.167.189','9F434269BA57F4CE874CEEC943B2ED10',10007304,'2023-01-05 12:37:18'),('192.168.167.189','9F9BA8B8187B5D3383D6D6FA927982B8',10007304,'2023-02-06 15:59:18'),('192.168.167.189','A0A4DEAA8E48466CB94F965BF273BC98',10007304,'2023-01-24 18:21:38'),('192.168.167.189','A20962DEB8A7881D3A80FB1E2981E098',10007304,'2022-12-24 15:39:00'),('192.168.167.189','A221034BB8EDA22EC8405E0C3FB00D3D',10007304,'2023-01-24 17:21:48'),('192.168.167.189','A282312578D70F75EA4948AEEAC0A44B',10007304,'2023-01-11 12:06:18'),('192.168.167.189','A2CAFD59C5815F0FC5C4A62E617A0BA8',10007304,'2023-02-23 09:48:55'),('192.168.167.189','A520D27D5257AA5F63DB6C33F73FD306',10007304,'2023-01-13 13:32:35'),('192.168.167.189','A5326308271531305BA9A9E927949412',10007304,'2023-02-17 09:44:35'),('192.168.167.189','A55050B4908D1FE10A9A376BC000A895',10007304,'2023-01-05 12:32:46'),('192.168.167.189','A5D1383B5199FECA4669D733D6948484',10007304,'2022-12-24 15:36:34'),('192.168.167.189','A6ED302480CF4DA7CF43F1AE13B649CB',10007304,'2022-12-30 13:40:47'),('192.168.167.189','A6FA1967DCC500B6D265EFE56AA8A9EB',10007304,'2023-01-11 17:37:30'),('192.168.167.189','A7A13C23A40BD66F6602BACE93680AAE',10007304,'2023-01-05 09:51:53'),('192.168.167.189','A8949C9544DA8D8105107480937A8461',10007304,'2022-12-26 01:14:11'),('192.168.167.189','A8ED7C1DF4D3322A543478B0471B7A45',10007304,'2022-12-21 13:53:18'),('192.168.167.189','A9B96B19B74D7D9E4158959ECDA35131',10007304,'2023-01-23 14:53:22'),('192.168.167.189','A9DDEC35C61B72377C984F9CD43A6BF6',10007304,'2022-12-23 11:50:44'),('192.168.167.189','AA7F836C98E8EC57D4D453159A0C9F4C',10007304,'2023-02-24 09:34:05'),('192.168.167.189','AB32038CDC95EEDEE4F05E386D1ED096',10007304,'2023-02-27 11:48:45'),('192.168.167.189','AD555EF424EDB0BF7F3E4B6575615EC6',10007304,'2023-01-02 11:03:54'),('192.168.167.189','AD8A732AE30B2845FC6673E3D3B1C190',10007304,'2023-01-10 09:40:03'),('192.168.167.189','ADEC3969AA2E34EF78207B465ED20DD2',10007304,'2023-02-13 15:01:05'),('192.168.167.189','AE1542F71F4292FAE08F5BC16125DADB',10007304,'2023-01-05 16:11:48'),('192.168.167.189','AEC3FE1B7981DFD9AAE9632EE2194D32',10007304,'2022-12-26 02:29:59'),('192.168.167.189','AF0B9866E5C36F81CDBC134E102B69B3',10007304,'2023-02-16 11:12:59'),('192.168.167.189','AFFE18E48527D358EF67536277DBD4A7',10007304,'2023-01-05 16:32:33'),('192.168.167.189','B07FAA08B489F1AA660355590429D4A4',10007304,'2023-01-24 14:17:58'),('192.168.167.189','B082284AD81284109E4B1C798BB752ED',10007304,'2022-12-23 10:07:13'),('192.168.167.189','B43C8D0C0ED442C3932BCE71F86A9FC4',10007304,'2023-01-05 12:24:39'),('192.168.167.189','B4B9F6D577437D623F36D56AF1ADE6B3',10007304,'2023-02-21 17:42:05'),('192.168.167.189','B4DE0C1B3E83032DB82F7254E461F90A',10007304,'2023-01-10 18:03:57'),('192.168.167.189','B4F760EF18D961EFEDB1093399DA0828',10007304,'2022-12-20 10:27:59'),('192.168.167.189','B64A4B338227D46261870352AFF2D270',10007304,'2022-12-27 17:39:34'),('192.168.167.189','B662F4670EA70C0CB3D745965A5350D1',10007304,'2023-02-24 16:10:18'),('192.168.167.189','B6A6716D1438F0627483BF6445A231F2',10007304,'2022-12-24 15:48:38'),('192.168.167.189','B762580A89C679713E090C257421B409',10007304,'2022-12-20 13:02:51'),('192.168.167.189','B78DBF25BCA3A8C02227A5932F95F0AE',10007304,'2023-02-23 12:29:27'),('192.168.167.189','B86F2327535BE5FB6CA7AB3249C0A5C2',10007304,'2023-01-23 15:43:24'),('192.168.167.189','B8B4D8376B9A807D464A456985153255',10007304,'2023-01-04 12:38:50'),('192.168.167.189','B9B3D44AA83AC2B92665E6297C3975D3',10007304,'2022-12-27 13:18:25'),('192.168.167.189','BAAAE29842F7EDAEDDB6D81DC5709255',10007304,'2023-01-05 09:37:30'),('192.168.167.189','BD470317B4B72F47D7E6262BA8E1F785',10007304,'2023-02-14 11:02:28'),('192.168.167.189','BD4C7ABA2F5EF3FFB9DA6A939831C79B',10007304,'2023-02-16 10:38:18'),('192.168.167.189','BDB99535CBB4477FF0EED5D6F63E215F',10007304,'2022-12-20 15:07:20'),('192.168.167.189','BDC2ABDFD2523537321A13FE3A6C532A',10007304,'2023-02-22 11:14:25'),('192.168.167.189','BE8EBE496E53E9A4BC3145BD204FBD96',10007304,'2023-01-31 10:45:07'),('192.168.167.189','C0C019914F68EB7BB283C6A55C4D76E0',10007304,'2023-02-06 12:19:42'),('192.168.167.189','C0C028640532BC533851CD7815BDF89C',10007308,'2023-01-23 17:10:47'),('192.168.167.189','C19A2518F6323C61FC6F84A63720D5ED',10007304,'2023-01-11 11:47:20'),('192.168.167.189','C1DC935342E3CDC8E272B4B6F3311B70',10007304,'2023-03-01 17:19:24'),('192.168.167.189','C1F275A371AA676AC13D3CBE9D32329B',10007304,'2022-12-20 18:35:26'),('192.168.167.189','C3B907B240921A420B863460CBA730C4',10007304,'2023-02-21 10:38:32'),('192.168.167.189','C4CB9653BF2A2DAD8A201545D8A21E99',10007304,'2023-01-05 12:12:30'),('192.168.167.189','C517AA6C1A35AB99898171576444AFF1',10007304,'2022-12-24 14:33:45'),('192.168.167.189','C538FC4C69DED20D6AB6CE47208AC727',10007304,'2023-01-28 11:44:30'),('192.168.167.189','C547F17EF44CDA65B83A1DC88958763D',10007304,'2022-12-19 16:35:21'),('192.168.167.189','C6AC20CA09D1F54E41C4B6322374DBE8',10007304,'2022-12-30 10:12:35'),('192.168.167.189','C6C6613D936894976ADEDE4B985158F0',10007304,'2023-02-21 12:16:20'),('192.168.167.189','C8D090CFDF465C9C4161FA0F601B7E7A',10007304,'2023-02-21 09:59:09'),('192.168.167.189','CC5228FAA5EA7AAC19702CB4C87B0417',10007304,'2023-02-17 11:24:07'),('192.168.167.189','CC6622D28C5411C5DFE4C68765E6413F',10007304,'2023-02-21 17:54:21'),('192.168.167.189','CCB132F8982CFD3F733D139DF3CB2B33',10007304,'2023-01-24 17:30:17'),('192.168.167.189','CD8A0D2A8B17C3751FBD49F3AED7A2D1',10007304,'2023-01-05 12:49:57'),('192.168.167.189','CD95D6F2C787F526A79C6F045DD71A0E',10007304,'2023-02-28 09:36:02'),('192.168.167.189','CDFA5330A215B53AE5CC179EC1DC974A',10007304,'2023-01-12 11:14:31'),('192.168.167.189','CE568F69CDDA5B8B568AC896EC933D2E',10007304,'2023-01-03 09:47:43'),('192.168.167.189','CF548E39CFD61CCBD2304EA7B1C36632',10007304,'2023-01-24 17:27:18'),('192.168.167.189','CF97B42FB92CEFCC709F32072FC1E24B',10007304,'2023-01-05 10:26:15'),('192.168.167.189','CFEA534CDAF3EAD83659C8C4EC8E206B',10007304,'2022-12-27 14:40:19'),('192.168.167.189','D0025BCC4A6D8ED2959FC981B3682B6B',10007304,'2023-02-21 13:34:48'),('192.168.167.189','D07C13C5AED43756D1ACC28825E065E7',10007304,'2023-01-23 12:06:52'),('192.168.167.189','D12F48853CB05C29FD5B954ADF03AC9B',10007304,'2022-12-26 09:41:01'),('192.168.167.189','D1592AE54D7972CB4499119E2D9C4367',10007304,'2022-12-22 10:32:10'),('192.168.167.189','D1A2C699CC01539B5F14836E5FFA03BE',10007304,'2023-01-24 16:59:53'),('192.168.167.189','D1C4804B698E3D6FEBFDB5B3818249A6',10007304,'2023-01-24 17:42:17'),('192.168.167.189','D1FE6086FE4445D934301DE2FC8E3C55',10007304,'2022-12-24 15:15:13'),('192.168.167.189','D482729AC3151D83917DC0F87F777BDA',10007304,'2023-02-06 09:40:01'),('192.168.167.189','D4C7C07CFD39595F7C23CA46E9BFB0C7',10007304,'2023-01-23 17:17:17'),('192.168.167.189','D4E0C053D20A415F12E470CEAF123A84',10007304,'2023-02-22 09:47:50'),('192.168.167.189','D5D8D5EEB33FC3064756F943DD95D7D3',10007304,'2023-03-02 18:02:24'),('192.168.167.189','D65F556DAC4272525CCF65259353092C',10007304,'2023-01-05 15:11:28'),('192.168.167.189','D678C2EDA6722CF2A659D2E94361550B',10007304,'2023-01-14 12:08:25'),('192.168.167.189','D681A72CFCBD12D173592D5FEF93CCE9',10007304,'2023-03-01 15:05:39'),('192.168.167.189','D777EA3F44EBF66A915075A673AB8A67',10007304,'2023-01-24 12:02:07'),('192.168.167.189','D78976F1AC81384441384C2D8F6296F9',10007304,'2023-02-16 17:41:22'),('192.168.167.189','D7FFC91E572A82116007CE9DB419B21C',10007304,'2023-01-27 14:23:34'),('192.168.167.189','D8ACA9DFD0D1CFD2A458C359195BA1FB',10007304,'2023-01-03 14:30:41'),('192.168.167.189','DA980069202A1D238FAABA5D4DCF1A19',10007304,'2023-03-02 18:21:41'),('192.168.167.189','DB2EDF5E29EA2DD3372A8B7B40044CDF',10007304,'2023-02-02 09:51:49'),('192.168.167.189','DBECAD15E72D358CE8C8A71641AAD8AF',10007304,'2023-01-24 17:43:54'),('192.168.167.189','DCFBD430E75A79235708CDF0B7DC3DFC',10007304,'2023-01-12 09:43:49'),('192.168.167.189','DDA6FAEF0A46136CBE68B312328B5FF3',10007304,'2023-02-24 15:01:09'),('192.168.167.189','DE5CD149BFE52C4C9F24050429D49B6C',10007304,'2023-02-21 18:53:20'),('192.168.167.189','DF2E7606AECBE043FE0319958F77FEF7',10007304,'2023-03-02 09:25:17'),('192.168.167.189','DF8E2C37791B72B5EA32E2C7991EA090',10007304,'2023-02-06 18:46:52'),('192.168.167.189','E09225662900B95C26EBF1AD56DC55DC',10007304,'2023-01-11 12:06:28'),('192.168.167.189','E2660CC425A96F088324E245368AB367',10007304,'2023-03-01 18:44:31'),('192.168.167.189','E348FF9CB68F8A52DA1FD7B80E5A64DF',10007304,'2022-12-30 16:02:46'),('192.168.167.189','E4959646223454EC3909E88D437D089B',10007304,'2022-12-24 11:48:49'),('192.168.167.189','E4F76A0DB129AE6D9AE2B9111A9B5677',10007304,'2022-12-22 17:25:14'),('192.168.167.189','E501102CDC2E8237DE08F30898CED2E4',10007304,'2023-01-10 10:25:40'),('192.168.167.189','E58486DDFC22F8DD06E9BF6586636203',10007304,'2023-02-21 18:24:53'),('192.168.167.189','E5BC61863681B5F1FFCF4EC95EC7B220',10007304,'2023-01-12 13:41:02'),('192.168.167.189','E6540F8DAB72824165AAE39E28598518',10007304,'2023-02-22 09:30:06'),('192.168.167.189','E788DED5C5FB8591A43203D364BE3C36',10007304,'2023-01-24 16:59:46'),('192.168.167.189','E83AAA46E2BB32A42791DF6AEC5CCDA3',10007304,'2023-02-21 16:53:04'),('192.168.167.189','E969A3C6C64E4DE7CF98113690D0F07F',10007304,'2023-02-06 12:21:23'),('192.168.167.189','E986DCD5342A62EC897D5280BFB12D10',10007304,'2023-01-24 17:00:00'),('192.168.167.189','EA2548D89564970E038992B7A616F986',10007304,'2023-02-15 14:58:10'),('192.168.167.189','EB40725D6E36C03F00373918B0676285',10007304,'2022-12-24 09:36:33'),('192.168.167.189','EB64DFC152FE2EC71224266852CB92B1',10007304,'2023-02-21 17:03:33'),('192.168.167.189','EBABAFDEA380F5AB60E5BCDF49FA51DE',10007304,'2023-01-27 13:00:44'),('192.168.167.189','EC0275847BF935616105472F48F0AC15',10007304,'2023-02-22 18:00:10'),('192.168.167.189','EC1DEFF379810E0387DF483BA4070AA1',10007304,'2023-02-16 11:13:06'),('192.168.167.189','EC2C0B557A0641D2354BBBB29392513A',10007304,'2023-02-14 10:01:46'),('192.168.167.189','EEE6FC4631CA096D595D41B151721542',10007304,'2022-12-24 14:40:05'),('192.168.167.189','F2CBB4402CEA631F403C9F59C39C2419',10007304,'2023-01-04 11:39:08'),('192.168.167.189','F2E8D9954E72C85CB7A0D57E873A6D34',10007304,'2022-12-30 09:34:40'),('192.168.167.189','F33C259DEE4097989C02C3F7A1939967',10007304,'2023-02-28 09:36:02'),('192.168.167.189','F3A36167D12607D33E09F3E1B92854DE',10007304,'2022-12-22 17:24:52'),('192.168.167.189','F3B4691A858D28FF922C5836FB8AE88B',10007304,'2023-01-03 14:07:45'),('192.168.167.189','F47D505465E1BEF672FF619B70724338',10007304,'2023-02-06 12:23:34'),('192.168.167.189','F532F4709BBC555DD1F7E256BCC6829A',10007304,'2022-12-23 09:35:05'),('192.168.167.189','F5AC9562A1823BAA9BB44C13AE5B91EA',10007304,'2023-01-30 09:45:11'),('192.168.167.189','F66173FC48D612131FE1F0A097BDA1E5',10007304,'2022-12-20 18:44:51'),('192.168.167.189','F67EEFC16F0B8F4B56A9CD3461F0EF2E',10007304,'2023-03-02 15:42:31'),('192.168.167.189','F6B99C2C19F41C927334CC7EA67FE0F3',10007304,'2023-02-04 17:16:51'),('192.168.167.189','F87DAC7276BE25923BE6CA0351A92425',10007304,'2023-01-24 09:34:15'),('192.168.167.189','F8B35180720FB9923997540B27535082',10007304,'2023-01-03 17:07:08'),('192.168.167.189','FA67227BD2949261513476D851CBFE0C',10007304,'2023-01-04 10:52:32'),('192.168.167.189','FACFB39BA64E348AA66B54A7F80ED9FF',10007304,'2022-12-29 19:45:04'),('192.168.167.189','FAED2445C58DB594A4784658B2837FC9',10007304,'2023-02-24 15:37:44'),('192.168.167.189','FB3014F77FCAF90F038670EAB5D37B0B',10007304,'2022-12-31 12:27:04'),('192.168.167.189','FB63BC9FA02C16906C5345DC43621C5E',10007304,'2023-01-02 11:09:49'),('192.168.167.189','FB73E63C3372CA13ECE56475F481F131',10007304,'2023-01-24 12:20:28'),('192.168.167.189','FC496913A010931ED3B06E63B7574F2E',10007304,'2023-02-28 18:00:21'),('192.168.167.189','FC5ED3963DDDE39D064D7B7F4FA4E30E',10007304,'2023-02-23 18:45:24'),('192.168.167.189','FC8BFD05E5E503CE28A597B6484FD829',10007304,'2023-01-24 17:42:15'),('192.168.167.189','FCA1C7CDD551B07589A13D4E2D83453A',10007304,'2023-02-14 10:03:13'),('192.168.167.189','FCF5694D7A2BF2CB1A067E02041D78DD',10007304,'2023-01-05 16:03:00'),('192.168.167.189','FCF9CFBEDC9CDF586CF25CE693425F83',10007304,'2023-01-04 17:59:34'),('192.168.167.189','FD084C5182D169E76DDD0DEB0AC648C8',10007304,'2023-01-12 14:54:41'),('192.168.167.189','FEFE9B640DDD26A0B77E2EA8B91F026C',10007304,'2023-02-20 09:31:30'),('192.168.167.189','FFDBA69FDE184695AEC3A9E10970E497',10007304,'2022-12-24 10:45:46'),('192.168.178.144','78C3D94F9E6DEFA037094BD9F53E30EE',10007312,'2023-03-01 10:29:26'),('192.168.178.144','9E7DFCF05CFA492DA0E83274EC38933C',10007312,'2023-03-01 12:24:26'),('192.168.180.144','C12A9824A5AC439ED5F52F45A39D50AB',10007312,'2023-03-02 13:08:11'),('192.168.194.33','4F6375AC8E128984F82ED1424654D655',10007304,'2023-01-05 17:02:16'),('192.168.194.33','658DA2E3D2986370A6FE5E790196F9EF',10007304,'2023-01-02 11:53:27'),('192.168.194.33','827B98907D7B466BFE039AB88E515799',10007304,'2023-01-03 12:31:04'),('192.168.194.33','F0F13E048FA8B049812D68EB5117FD67',10007304,'2023-01-10 17:05:09'),('192.168.202.144','2D19E40D9E68007ADFE7A3C2975D5872',10007312,'2023-02-25 12:47:34'),('192.168.221.144','49E44BF22D33551F0DEFF1B89C50961E',10007312,'2023-03-01 14:00:54'),('192.168.221.144','CBC5A9F3A723DD41405A2EA2646F53D3',10007312,'2023-03-01 14:02:56'),('192.168.223.144','344186ED122E4289EE68A8F2B2F9CE25',10007312,'2023-02-10 17:51:15'),('192.168.223.144','8F8D9890DFFF67A57CA29DD83520C2B9',10007312,'2023-02-10 16:26:04'),('192.168.223.144','9469BD47B1463BF20BE5C0A2D673A8F2',10007312,'2023-02-10 16:02:02'),('192.168.223.144','BDC5C89E74A171C070E19A42442EAB89',10007312,'2023-02-10 15:23:27'),('192.168.228.118','1A9BD01D73C420ED568512B16BC085DA',10007304,'2023-04-22 09:46:41'),('192.168.228.118','3EFE66E6518F0FEB41E749BE98482A35',10007304,'2023-04-21 12:23:23'),('192.168.228.118','4A843CBAA7E6242AA021202E3B87071C',10007304,'2023-04-21 11:06:41'),('192.168.228.118','D9423B615BAC3DBA396FB3CEFD366EE9',10007304,'2023-04-21 12:23:23'),('192.168.228.118','E64FB118A39223B5EFEFE35D9DE7BD21',10007304,'2023-04-21 20:29:59'),('192.168.230.144','7E39C3D17C02D014684C9ACBC3655811',10007312,'2023-02-10 12:08:39'),('192.168.236.33','D4601A3C4879944B9640BE60185928EC',10007304,'2022-12-14 18:28:06'),('192.168.241.144','0E4E862A15FC5FE778AEB48B87D3E7AA',10007312,'2023-02-06 17:33:25'),('192.168.243.144','1B7BF1C9D29C7AEC97949D8207DE9813',10007312,'2023-02-06 10:22:21'),('192.168.243.144','50CBAAE0EA02758C512F80667471C423',10007312,'2023-02-06 12:24:00'),('192.168.243.144','BF74C9D6271E81157A9C85EC3F321FDF',10007312,'2023-02-06 13:10:33'),('192.168.244.189','28B94FAFAA29F95B4F5D0EA49299A0AD',10007304,'2023-03-06 10:07:18'),('192.168.244.189','468533E27BAA60DB6D8E96DCD525D59E',10007304,'2023-03-06 15:42:06'),('192.168.244.189','B033491190F0A949279C7E2A7AE18110',10007304,'2023-03-06 17:39:54'),('192.168.244.189','E3D161767C0E9089027E57BECA086616',10007304,'2023-03-06 09:53:33'),('192.168.253.144','16D99D8DB8BAB8CC7F829784A0DB856D',10007312,'2023-03-01 16:54:21'),('192.168.253.144','731805F530E9D163AADAE5FFAAFB4D76',10007312,'2023-03-01 17:01:10'),('192.168.253.144','7C270E49180E4BFAF33EB889303199D3',10007312,'2023-02-09 11:04:48'),('192.168.253.144','7EC08707E33DB114BC6451A46BB84CCE',10007312,'2023-03-01 17:03:34'),('192.168.253.144','A207166A92539F71DB43F22B80091A19',10007312,'2023-03-01 16:19:43'),('192.168.253.144','B417547970C7C29B5782C39B3FA016D7',10007312,'2023-03-01 17:29:13'),('192.168.253.33','13DA12C5034974F0F8C3E475CD7CBC2E',10007304,'2023-02-08 10:40:52'),('192.168.253.33','168CBAA440D150D0119B188F4490FC8C',10007307,'2023-02-06 13:23:16'),('192.168.253.33','55DDA88F10DC9BB1C5E5ECE4EAC6ACE2',10007307,'2023-02-07 13:34:49'),('192.168.253.33','B2C737AA8F9AEDF146B72A9B628B0CDB',10007304,'2023-02-04 13:00:14'),('192.168.253.33','EF17EEA5BE5CF5ABD66A2C65D325AD61',10007307,'2023-02-04 14:12:51'),('192.168.254.189','04122B6F98DC36CA3D947019A048AFBA',10007304,'2022-12-17 10:45:17'),('192.168.254.189','04222CF2755E01EBF7E8ADEFF8D0C2E2',10007304,'2022-12-19 01:07:35'),('192.168.254.189','13E29D1A9D7A57DCF407B5995A4DFA2A',10007304,'2022-12-17 13:57:02'),('192.168.254.189','322F900422101BBE7DA771DE1BB3A501',10007304,'2022-12-14 18:30:37'),('192.168.254.189','3E4E36172E3F2B3115358245057D127B',10007304,'2022-12-14 18:30:38'),('192.168.254.189','44EF2DDA0FFFC030B0642188C31C73FA',10007304,'2022-12-14 18:30:38'),('192.168.254.189','46E7F184FE17077036CCC1A5D28CBF99',10007304,'2022-12-18 23:00:44'),('192.168.254.189','535BABECBD0092071EF7E58737EF417C',10007304,'2022-12-14 19:26:58'),('192.168.254.189','5B2456E9B5519611768F81B1951A9867',10007304,'2022-12-16 09:35:28'),('192.168.254.189','62B25D51FF626F39DACD68421D123F0C',10007304,'2022-12-17 12:42:47'),('192.168.254.189','6FA3B3F2F0BFCF13FABFF226322D459C',10007304,'2022-12-17 16:36:08'),('192.168.254.189','7D9036A7EB8FA50390120D77AE074D29',10007304,'2022-12-14 18:30:38'),('192.168.254.189','8502127A9304DA1998CBFC05729868F2',10007304,'2022-12-14 18:30:38'),('192.168.254.189','93ADB3D32045143B64B20426E98BDF43',10007304,'2022-12-15 09:45:01'),('192.168.254.189','B54446975373A723166BABD5C6FE120E',10007304,'2022-12-16 12:23:35'),('192.168.254.189','BD18892DC3BF02C8F9ADD3128AE52009',10007304,'2022-12-17 09:48:46'),('192.168.254.189','C0CD822E28BBFB45F6BC7A45986C9FAC',10007304,'2022-12-18 22:53:52'),('192.168.254.189','CE50C2818BE59F144FF50FB0946E0D26',10007304,'2022-12-16 14:55:09'),('192.168.254.189','D45D6C90BA2A4C475EA3C2C22CD23738',10007304,'2022-12-17 17:55:16'),('192.168.254.189','F87E9566003C15B7A3714DE2284C75CB',10007304,'2022-12-14 18:30:38'),('192.168.29.6','0A3D55EC07B91CF4E7EB9607D0D9C59E',10007312,'2023-02-20 09:27:38'),('192.168.29.6','0BF19292B9746C40A2CC393D6851D466',10007312,'2023-02-24 22:32:02'),('192.168.29.6','0DC0CE39402B019B681461F20AC3EF1D',10007312,'2023-02-17 12:23:08'),('192.168.29.6','1C577E7D97BAE9EDE8FBC17D9998BE1D',10007312,'2023-02-18 16:49:53'),('192.168.29.6','2266D9B7C318243D9CDE0CCF3BA86F3C',10007312,'2023-02-20 10:52:56'),('192.168.29.6','2A80B1BBE928BBA6C801BB05026CECDD',10007312,'2023-02-18 11:48:08'),('192.168.29.6','3B31F2A443B760B4D3E822DD76C22B27',10007312,'2023-02-19 21:40:48'),('192.168.29.6','4157BC03F3BE320E774A959431218AAB',10007312,'2023-02-16 23:04:53'),('192.168.29.6','43E858F8312BD8468EE4CD0DD6ACAD9E',10007312,'2023-02-19 22:17:47'),('192.168.29.6','49371A151D2F7DAB7D3C7507DA9D3297',10007312,'2023-02-19 22:16:26'),('192.168.29.6','4D82EA95957624F48FEF8F7E0454F2B6',10007312,'2023-02-18 12:47:24'),('192.168.29.6','4DDE4542AEA516A49F13ECB6C6C2EE81',10007312,'2023-02-17 17:13:37'),('192.168.29.6','55A86489C17B422F7488FC47FFC09CEC',10007312,'2023-02-14 17:43:31'),('192.168.29.6','67567759C5C8A56F6EC2E52F39148EA7',10007312,'2023-02-16 10:19:25'),('192.168.29.6','680A961527AF767BD21801F6AD28D440',10007312,'2023-02-23 15:40:43'),('192.168.29.6','715174D86580F41EEE895B3B0CCE4ED0',10007312,'2023-02-18 16:15:51'),('192.168.29.6','777D275CF407DF7EEDC4BD24C09E0A05',10007312,'2023-02-15 14:25:01'),('192.168.29.6','78DBEFD24B2B463C0E94CC8B2DB6FF63',10007312,'2023-02-15 12:21:30'),('192.168.29.6','79FBDD3A163D5666A2F122C20F82B4DA',10007312,'2023-02-16 18:36:32'),('192.168.29.6','7CD6BE7D97ED3E4423A5BA64F12A3596',10007312,'2023-02-20 09:45:23'),('192.168.29.6','901A7455D551947E08D53B449507C2E9',10007307,'2023-04-21 13:49:56'),('192.168.29.6','9B399CD127C72FF26B2F0807A9E549C4',10007312,'2023-02-18 15:16:22'),('192.168.29.6','9B88E62DC5B0C1107A24A71FCB2A9314',10007307,'2023-04-21 11:42:32'),('192.168.29.6','A541B47A1DA5FCA4ACECAD59B52D70C1',10007312,'2023-02-14 23:49:26'),('192.168.29.6','A55D3A978858B724706632C9B4E2B399',10007312,'2023-02-15 13:28:45'),('192.168.29.6','ABB9602854617201DC2C07181F8BB4EE',10007312,'2023-02-18 17:49:40'),('192.168.29.6','B1EA61778DFAE3585EEBBD8E8072F998',10007312,'2023-02-20 10:29:26'),('192.168.29.6','B436F4698FCAAF9C35F145ABCFB9CB26',10007312,'2023-02-22 18:17:12'),('192.168.29.6','BCBA8E2C4223FC41B3BFE24AD6EDA9A8',10007312,'2023-02-18 17:11:14'),('192.168.29.6','CC8137F49513D395AA0F9EB7B4B38E12',10007312,'2023-02-18 17:14:57'),('192.168.29.6','CD695123F470556E8F68B544CE3DA129',10007312,'2023-02-15 16:49:13'),('192.168.29.6','ECF1BAE4E0235E8F6DBEEA1809D50E7A',10007312,'2023-02-16 17:43:29'),('192.168.29.6','EF2B6E4A72612120B6E34D1DF5FB6B26',10007312,'2023-02-15 15:59:07'),('192.168.29.6','F0EEAC036D4725BEDF287BA64E7810BC',10007312,'2023-02-22 17:02:12'),('192.168.29.6','F65119A254725AE65AC42B4C337E57B9',10007312,'2023-02-14 18:34:04'),('192.168.29.6','FB4A13122F02CF52DC7C8F7D399F3C97',10007312,'2023-02-18 18:30:19'),('192.168.31.144','7CA02D7BCD5E298D38006496D069316D',10007312,'2023-02-27 12:02:17'),('192.168.31.33','5D44DADE37BC20627DE6C4AB393CC33F',10007307,'2023-02-17 11:20:17'),('192.168.38.33','DFCA9A302928769171716AC9145787DD',10007304,'2023-01-14 17:11:06'),('192.168.39.144','8A42BB7652489642077E3643F820B62F',10007312,'2023-02-01 10:21:14'),('192.168.43.174','3EBAE8D7A946E39CFBCECF7B22BDB6B2',10007304,'2023-02-28 22:14:43'),('192.168.43.6','2ED44F6CD0E2CCB9874493D21413BFB4',10007312,'2023-01-31 12:55:51'),('192.168.43.6','8AED3CCC33EBEF7CFFFE79983E36C6D6',10007312,'2023-01-31 13:01:48'),('192.168.43.6','95255F539A9572DB9EEC6541D4381106',10007312,'2023-01-31 13:07:32'),('192.168.43.6','B51CFBE1B27ACC2A67FF955C981C79A5',10007312,'2023-03-01 13:06:40'),('192.168.43.7','04E4F89E1B5C92180B6B3330D12342F1',10007304,'2023-01-13 18:14:51'),('192.168.43.7','70D5F7818B82E4E557EF7CE0CAF5D6D9',10007304,'2023-01-13 18:14:53'),('192.168.43.82','1574E9DF24606BE8BF220E4A5ABBE0A0',10007304,'2023-02-03 10:21:23'),('192.168.43.82','23DA70D354A4B1A1547991AAF8AA9BA4',10007304,'2023-02-03 09:50:21'),('192.168.43.82','2BF735C734AA56EDF4A0790B7D377EE2',10007304,'2023-01-31 15:09:19'),('192.168.43.82','2CDEF5BC4EFF9E17B73D7491605BAF7E',10007304,'2023-01-25 16:57:55'),('192.168.43.82','35E49CA36014797BEC77D389D9CDB7BD',10007304,'2023-01-30 17:43:52'),('192.168.43.82','399C9AAD90960C8A8325FA3A25DE78ED',10007304,'2023-01-27 17:03:04'),('192.168.43.82','3D2962153097C9C88B6E18608BFF320D',10007304,'2023-02-01 09:41:19'),('192.168.43.82','55D64F3C317F8DED5B2938A8F70235B4',10007304,'2023-01-24 10:02:07'),('192.168.43.82','57A593B8CF50969E3E902EE5CBEEF01F',10007304,'2023-01-31 10:06:34'),('192.168.43.82','7C13F20A58C179742C2BE5DFA81990BD',10007304,'2023-01-30 18:00:12'),('192.168.43.82','7D5002FEA2662C6E53261040B79125E8',10007304,'2023-02-02 09:48:43'),('192.168.43.82','D80ADAE96DB095A612D26D1AA1B10BA9',10007304,'2023-01-27 17:28:39'),('192.168.43.82','E4405C719440D9743CB828680E26BDA9',10007304,'2023-01-24 16:40:19'),('192.168.43.82','E7647A8502157937F025F8C6D7B8795E',10007304,'2023-01-25 09:42:31'),('192.168.43.82','FEE8E0870070BEF7DFE1BF77A03CB8AA',10007304,'2023-02-01 14:59:32'),('192.168.45.144','0196A890A4416717CB04CABF3A482B40',10007312,'2023-01-31 13:40:20'),('192.168.47.144','CF305229D4662432B1F9A10793BCB65D',10007312,'2023-03-06 09:42:49'),('192.168.59.144','7F8B20D82EF2BA09AACED7F1EE417E1C',10007312,'2023-03-05 18:34:27'),('192.168.64.33','104314AE6FA696610708DF789E8D866B',10007304,'2023-04-18 00:19:09'),('192.168.64.33','1D45ABA5C7FAA87D8799A6A628F394CB',10007304,'2023-04-18 11:42:12'),('192.168.64.33','40139763B588E80151D13E00F04D3B54',10007304,'2023-04-17 23:55:49'),('192.168.64.33','4AE3BD2D62C1F00B68B35B76B3AD6322',10007304,'2023-04-18 12:07:07'),('192.168.64.33','79A700514FE1F14A88BA4A64D4E3E01F',10007304,'2023-04-18 11:27:32'),('192.168.64.33','86FD7C2D6E88D2B587DAB0F583E7842E',10007304,'2023-04-18 16:07:42'),('192.168.64.33','C18C5EF42D3E7BCBA9246BB6D4F9DECE',10007304,'2023-04-18 12:01:48'),('192.168.64.33','CCBABCCE68CCBD3D62867491EC0273BE',10007304,'2023-04-18 15:28:54'),('192.168.64.33','DD88CAA3DB6B42179275FBC5BEF64165',10007304,'2023-04-18 15:26:32'),('192.168.64.33','F6193521096384CFB7C612F8686DFA8C',10007304,'2023-04-17 23:54:51'),('192.168.76.13','4ABC95ECBAECBE244AC5FCE9C5B6BCFB',10007304,'2023-02-02 14:06:13'),('192.168.76.13','6E33F48254348A6AAB432CC05C7BF56B',10007304,'2023-02-01 10:52:04'),('192.168.76.13','C43D83EDE88DDF52F2450C0B2D8AA768',10007304,'2023-01-30 22:09:22'),('192.168.78.144','7A8CAF355FA7E9183554AA952D146444',10007312,'2023-03-04 13:01:42'),('192.168.78.144','CCFE8980EBC7637D98834AC4733C448E',10007312,'2023-03-04 13:59:24'),('192.168.83.144','66AB54BEE27BFB058BA6FD1DC563B878',10007312,'2023-01-31 12:30:07'),('192.168.83.144','EEC9B6DBF7256D79178FC06830611EEC',10007312,'2023-01-31 12:25:04'),('192.168.85.33','86A19A7E871FCC5C464C1AE588B27485',10007304,'2023-01-24 12:56:36'),('192.168.88.2','03E586DB2EACFDF4C5C030614A8AC294',10007304,'2023-02-06 17:13:15'),('192.168.88.2','08F6E1B80811C64B2AAAB00CA14A04DD',10007304,'2023-02-08 10:09:24'),('192.168.88.2','0B30072518BDC0E2537DDC55F205BD42',10007304,'2023-02-07 13:21:26'),('192.168.88.2','45776CD76D50E4F1DEA99E9C5E0EF01F',10007304,'2023-02-08 10:44:29'),('192.168.88.2','49F2044ED562398EE0C532925CCE9C2D',10007304,'2023-02-04 01:54:26'),('192.168.88.2','4E4910FE050DF3A28FFD6F74391903C6',10007304,'2023-02-06 18:47:46'),('192.168.88.2','6B52033EEDF2B23122CD9B6C9E8D479B',10007304,'2023-02-07 15:53:43'),('192.168.88.2','B1AC8EC418365614936193BAA4BA669D',10007304,'2023-02-04 12:36:34'),('192.168.88.2','F5E96D74301143596352504DC7571FAB',10007304,'2023-02-06 18:07:16'),('192.168.92.144','5ABD8FF70ED112BA6816DE907E10A7FC',10007312,'2023-02-09 15:25:16'),('192.168.92.144','A3753F90A67068952E4986C6DD2C5590',10007312,'2023-02-09 13:48:22'),('192.168.92.144','CAC3F93DBC7F4503A67036FD28E6093B',10007312,'2023-02-09 18:29:52'),('192.168.95.121','C8D680FF30143A68ED79E97FE69D565D',10007304,'2023-04-22 10:51:10'),('210.16.92.0','796FC928BBDA0F4EC19324D211ACC32A',10007304,'2023-04-18 13:58:42'),('210.16.92.0','DA6469F51FBFA5A93F6DE9485B3ABFF8',10007304,'2023-04-19 06:08:14'),('49.248.197.50','219DE66BCBE7B30CCEB26BFDEEC949E6',10007304,'2023-04-20 12:28:36'),('49.248.197.50','AE7A5DF9E2B2CCEF09A5557583963F32',10007304,'2023-04-21 08:40:42'),('49.37.117.176','AE4F0C383248D61BC414CBA1F7DB26F4',10007304,'2023-04-19 06:08:27'); +/*!40000 ALTER TABLE `sec_user_sessions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sec_users` +-- + +DROP TABLE IF EXISTS `sec_users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sec_users` ( + `user_id` bigint NOT NULL, + `is_complete` bit(1) NOT NULL, + `about` varchar(255) DEFAULT NULL, + `access_duration` bigint DEFAULT NULL, + `change_passw` varchar(255) DEFAULT NULL, + `checknumber` bigint DEFAULT NULL, + `country` varchar(255) DEFAULT NULL, + `createby` varchar(255) DEFAULT NULL, + `createdate` datetime DEFAULT NULL, + `customer_id` bigint DEFAULT NULL, + `days_mth` varchar(255) DEFAULT NULL, + `dep_string` varchar(255) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `expiry_date` datetime DEFAULT NULL, + `first_login` varchar(255) DEFAULT NULL, + `full_name` varchar(255) DEFAULT NULL, + `is_blocked` bit(1) NOT NULL, + `lang_code` varchar(255) DEFAULT NULL, + `last_pwd_changed_date` datetime DEFAULT NULL, + `mob_no` bigint DEFAULT NULL, + `no_days_mth` bigint DEFAULT NULL, + `notification` varchar(255) DEFAULT NULL, + `password1` varchar(255) DEFAULT NULL, + `password2` varchar(255) DEFAULT NULL, + `password3` varchar(255) DEFAULT NULL, + `password4` varchar(255) DEFAULT NULL, + `photo` longblob, + `photo_name` varchar(255) DEFAULT NULL, + `provider` varchar(255) DEFAULT NULL, + `pwd_changed_cnt` bigint DEFAULT NULL, + `random_no` varchar(255) DEFAULT NULL, + `short_name` varchar(255) DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `updateby` varchar(255) DEFAULT NULL, + `updatedate` datetime DEFAULT NULL, + `user_passw` varchar(255) DEFAULT NULL, + `user_name` varchar(255) DEFAULT NULL, + `usr_grp_id` bigint DEFAULT NULL, + `working` varchar(255) DEFAULT NULL, + `account_id` bigint DEFAULT NULL, + `department_code` varchar(255) DEFAULT NULL, + `position_code` varchar(255) DEFAULT NULL, + `usr_grp` bigint DEFAULT NULL, + PRIMARY KEY (`user_id`), + UNIQUE KEY `UK_fw34bx9q2ss6bto160uppxg9t` (`user_name`), + KEY `FKs6u4j3tx3oafeuph5ou29qwd9` (`account_id`), + KEY `FK755v9w0tyoeq5v61egs6jsvv8` (`department_code`), + KEY `FKnuiei3fcu2t6k16v1dthw5bvh` (`position_code`), + KEY `FKl26vrpflaga4edp953i7c7i7` (`usr_grp`), + CONSTRAINT `FK755v9w0tyoeq5v61egs6jsvv8` FOREIGN KEY (`department_code`) REFERENCES `department` (`department_code`), + CONSTRAINT `FKl26vrpflaga4edp953i7c7i7` FOREIGN KEY (`usr_grp`) REFERENCES `sec_user_group` (`usr_grp`), + CONSTRAINT `FKnuiei3fcu2t6k16v1dthw5bvh` FOREIGN KEY (`position_code`) REFERENCES `position` (`position_code`), + CONSTRAINT `FKs6u4j3tx3oafeuph5ou29qwd9` FOREIGN KEY (`account_id`) REFERENCES `sys_accounts` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sec_users` +-- + +LOCK TABLES `sec_users` WRITE; +/*!40000 ALTER TABLE `sec_users` DISABLE KEYS */; +INSERT INTO `sec_users` VALUES (10007304,_binary '',NULL,NULL,'test',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'admin',NULL,NULL,'admin',_binary '\0',NULL,NULL,123,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$10$Z/qB46BXJC.15psWvLA6wuRsKhnDyHgHNLzOs9tlE70AnCZTjo4IW','admin123',1,NULL,1,NULL,NULL,1),(10007307,_binary '',NULL,NULL,'test3',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'sysadmin',NULL,NULL,'piya khose',_binary '\0',NULL,NULL,76756765,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$10$y0hwswpMqYRtlMJoNzpYBe45VDI8SQX/4K4OjzKYX9NHmN1HPZmIu','sysadmin',NULL,NULL,1,NULL,NULL,1),(10007308,_binary '',NULL,NULL,'test5',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'sysadmin',NULL,NULL,'siya jfhjd',_binary '\0',NULL,NULL,7654645784,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$10$CBo5GAvkdD6p/rUmUDcd6uRVLEyw104hl3RJ72KfU6uDiwGZG/itu','siya@gmail.com',NULL,NULL,1,NULL,NULL,1),(10007311,_binary '',NULL,NULL,'ash1',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ash@gmail.com',NULL,NULL,'ash1 ka',_binary '\0',NULL,NULL,7649345683,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$10$7C48mZGQwGEtY.6UzyABA.D1CB3Tj75DChkEYhrWrLMihyfit6bLG','ash@gmail.com',NULL,NULL,1,NULL,NULL,1),(10007312,_binary '',NULL,NULL,'gaurav',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'gaurav@gmail.com',NULL,NULL,'gaurav kumar',_binary '\0',NULL,NULL,9856875635,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$10$WmNZeqBaDJJu0KaIFc01g.tVuIDe5XXFvKY.MrI1PYSIfwf/PqeJq','gaurav@gmail.com',NULL,NULL,1,NULL,NULL,1),(10007316,_binary '',NULL,NULL,'ashwini',NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ashwini@gmail.com',NULL,NULL,'ashwini kad',_binary '\0',NULL,NULL,8796456785,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'$2a$10$T0kd.0Z3a3I7IZwgRN65RO7EJWLmNT2CFuXN7aPojXq/GVYsC0152','ashwini@gmail.com',NULL,NULL,1,NULL,NULL,1); +/*!40000 ALTER TABLE `sec_users` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sec_users_sequencs` +-- + +DROP TABLE IF EXISTS `sec_users_sequencs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sec_users_sequencs` ( + `next_val` bigint DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sec_users_sequencs` +-- + +LOCK TABLES `sec_users_sequencs` WRITE; +/*!40000 ALTER TABLE `sec_users_sequencs` DISABLE KEYS */; +INSERT INTO `sec_users_sequencs` VALUES (10007317),(10007300),(10007300),(10007300),(10007300),(10007300); +/*!40000 ALTER TABLE `sec_users_sequencs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `secuser_roles` +-- + +DROP TABLE IF EXISTS `secuser_roles`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `secuser_roles` ( + `secuser_id` bigint NOT NULL, + `role_id` bigint NOT NULL, + PRIMARY KEY (`secuser_id`,`role_id`), + KEY `FKqori0nm574l1ipruo5f47crex` (`role_id`), + CONSTRAINT `FK321c4ykolkm3cy98bxmf4kn05` FOREIGN KEY (`secuser_id`) REFERENCES `sec_users` (`user_id`), + CONSTRAINT `FKqori0nm574l1ipruo5f47crex` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `secuser_roles` +-- + +LOCK TABLES `secuser_roles` WRITE; +/*!40000 ALTER TABLE `secuser_roles` DISABLE KEYS */; +INSERT INTO `secuser_roles` VALUES (10007304,1),(10007307,1),(10007308,1),(10007311,1),(10007316,1); +/*!40000 ALTER TABLE `secuser_roles` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sys_accounts` +-- + +DROP TABLE IF EXISTS `sys_accounts`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_accounts` ( + `id` bigint NOT NULL AUTO_INCREMENT, + `company_name` varchar(255) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `gst_no` varchar(255) DEFAULT NULL, + `mobile` varchar(255) DEFAULT NULL, + `pancard` varchar(255) DEFAULT NULL, + `working` varchar(255) DEFAULT NULL, + `workspace` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sys_accounts` +-- + +LOCK TABLES `sys_accounts` WRITE; +/*!40000 ALTER TABLE `sys_accounts` DISABLE KEYS */; +INSERT INTO `sys_accounts` VALUES (1,NULL,NULL,NULL,NULL,NULL,NULL,NULL); +/*!40000 ALTER TABLE `sys_accounts` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `sys_accounts_users` +-- + +DROP TABLE IF EXISTS `sys_accounts_users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `sys_accounts_users` ( + `sys_accounts_id` bigint NOT NULL, + `users_user_id` bigint NOT NULL, + UNIQUE KEY `UK_8dxppqkque5ehofdy83bntgks` (`users_user_id`), + KEY `FKs9o1t4hyiyq2y330p0d2evf2a` (`sys_accounts_id`), + CONSTRAINT `FKdkc60wy8v55ylspegueinngjx` FOREIGN KEY (`users_user_id`) REFERENCES `sec_users` (`user_id`), + CONSTRAINT `FKs9o1t4hyiyq2y330p0d2evf2a` FOREIGN KEY (`sys_accounts_id`) REFERENCES `sys_accounts` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `sys_accounts_users` +-- + +LOCK TABLES `sys_accounts_users` WRITE; +/*!40000 ALTER TABLE `sys_accounts_users` DISABLE KEYS */; +/*!40000 ALTER TABLE `sys_accounts_users` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `user_list` +-- + +DROP TABLE IF EXISTS `user_list`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `user_list` ( + `id` bigint NOT NULL, + `about` varchar(255) DEFAULT NULL, + `account_id` varchar(255) DEFAULT NULL, + `address1` varchar(255) DEFAULT NULL, + `address2` varchar(255) DEFAULT NULL, + `checknumber` varchar(255) DEFAULT NULL, + `company` varchar(255) DEFAULT NULL, + `country` varchar(255) DEFAULT NULL, + `created_at` varchar(255) DEFAULT NULL, + `created_by` varchar(255) DEFAULT NULL, + `default_customer_id` varchar(255) DEFAULT NULL, + `department` varchar(255) DEFAULT NULL, + `dob` varchar(255) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `enable_beta_testing` bit(1) NOT NULL, + `enable_renewal` bit(1) NOT NULL, + `firstname` varchar(255) DEFAULT NULL, + `fullname` varchar(255) DEFAULT NULL, + `gender` varchar(255) DEFAULT NULL, + `is_active` bit(1) NOT NULL, + `is_blocked` bit(1) NOT NULL, + `lastname` varchar(255) DEFAULT NULL, + `managing_work` varchar(255) DEFAULT NULL, + `menu_group` int NOT NULL, + `name` varchar(255) DEFAULT NULL, + `other_roles` varchar(255) DEFAULT NULL, + `pancard` varchar(255) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, + `phone` varchar(255) DEFAULT NULL, + `photos` varchar(255) DEFAULT NULL, + `postal` varchar(255) DEFAULT NULL, + `role` varchar(255) DEFAULT NULL, + `secret_answer` varchar(255) DEFAULT NULL, + `secret_question` varchar(255) DEFAULT NULL, + `security_provider_id` varchar(255) DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + `updated_at` varchar(255) DEFAULT NULL, + `updated_by` varchar(255) DEFAULT NULL, + `user_id` varchar(255) DEFAULT NULL, + `username` varchar(255) DEFAULT NULL, + `working` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `user_list` +-- + +LOCK TABLES `user_list` WRITE; +/*!40000 ALTER TABLE `user_list` DISABLE KEYS */; +/*!40000 ALTER TABLE `user_list` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `userloginhist` +-- + +DROP TABLE IF EXISTS `userloginhist`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `userloginhist` ( + `create_by` varchar(255) DEFAULT NULL, + `create_date` datetime DEFAULT NULL, + `expiry_reminder` bigint DEFAULT NULL, + `last_login_date` datetime DEFAULT NULL, + `last_password_chg_date` datetime DEFAULT NULL, + `last_password_fail_no` bigint DEFAULT NULL, + `update_by` varchar(255) DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + `user_id` bigint NOT NULL, + PRIMARY KEY (`user_id`), + CONSTRAINT `FK2a2xifc15js82mjl20honhdfr` FOREIGN KEY (`user_id`) REFERENCES `sec_users` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `userloginhist` +-- + +LOCK TABLES `userloginhist` WRITE; +/*!40000 ALTER TABLE `userloginhist` DISABLE KEYS */; +/*!40000 ALTER TABLE `userloginhist` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `userpasswlog` +-- + +DROP TABLE IF EXISTS `userpasswlog`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `userpasswlog` ( + `create_date` datetime NOT NULL, + `user_id` bigint NOT NULL, + `user_passw` varchar(255) NOT NULL, + `create_by` varchar(255) DEFAULT NULL, + `update_by` varchar(255) DEFAULT NULL, + `update_date` datetime DEFAULT NULL, + PRIMARY KEY (`create_date`,`user_id`,`user_passw`), + KEY `FKpd759n25auh4bw5ri0xikikia` (`user_id`), + CONSTRAINT `FKpd759n25auh4bw5ri0xikikia` FOREIGN KEY (`user_id`) REFERENCES `sec_users` (`user_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `userpasswlog` +-- + +LOCK TABLES `userpasswlog` WRITE; +/*!40000 ALTER TABLE `userpasswlog` DISABLE KEYS */; +/*!40000 ALTER TABLE `userpasswlog` ENABLE KEYS */; +UNLOCK TABLES; +SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2023-04-22 18:52:13 diff --git a/pro118njsac-front-f/authsec_angular/.gitignore b/pro118njsac-front-f/authsec_angular/.gitignore new file mode 100644 index 0000000..1670403 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/.gitignore @@ -0,0 +1,3 @@ + +frontend/.DS_Store +.DS_Store diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.editorconfig b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.github/workflows/blank.yml b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.github/workflows/blank.yml new file mode 100644 index 0000000..b2340b2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.github/workflows/blank.yml @@ -0,0 +1,17 @@ +name: CI + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: Run a one-line script + run: echo Hello, world! + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.gitignore b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.gitignore new file mode 100644 index 0000000..f5445e8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc + +# dependencies +/node_modules + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.angular/cache +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.vscode/settings.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.vscode/settings.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/README.md b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/README.md new file mode 100644 index 0000000..c3d97fe --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/README.md @@ -0,0 +1,52 @@ +# Angular-Clarity + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.0.4 [Angular.io](https://angular.io/) version 16.0.4 and [Clarity Design System](https://vmware.github.io/clarity/news) by VMware version 6.4.5/15.5.0 + +## Install +- clone project `git clone https://github.com/superpck/angular-clarity` +- goto project folder `cd angular-clarity` +- install necessary package `npm install` +- Fix some vulnerabilities (if founded) `npm audit fix --force` +- Run application with command `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. +- or Run `ng serve --port 8080 --open` with another port and open web browser. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +- Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. +- or `ng build --base-href ./ --prod --output-hashing none` + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). + +## Screenshot +About Page +![About](1.png) + +Login Page +![Datagrid](6.png) + +Datagrid +![Datagrid](2.png) + +Datagrid expand row and single action +![expand](3.png) + +Modal +![modal](4.png) + +sweetalert2 +![sweetalert2](5.png) + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/SECURITY.md b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/SECURITY.md new file mode 100644 index 0000000..034e848 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/SECURITY.md @@ -0,0 +1,21 @@ +# Security Policy + +## Supported Versions + +Use this section to tell people about which versions of your project are +currently being supported with security updates. + +| Version | Supported | +| ------- | ------------------ | +| 5.1.x | :white_check_mark: | +| 5.0.x | :x: | +| 4.0.x | :white_check_mark: | +| < 4.0 | :x: | + +## Reporting a Vulnerability + +Use this section to tell people how to report a vulnerability. + +Tell them where to go, how often they can expect to get an update on a +reported vulnerability, what to expect if the vulnerability is accepted or +declined, etc. diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/angular.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/angular.json new file mode 100644 index 0000000..d9b66a6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/angular.json @@ -0,0 +1,134 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "angularclarity": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "allowedCommonJsDependencies": [ + "lodash", "xlsx", "file-saver","@swimlane/ngx-datatable","@swimlane/ngx-charts","jquery","highcharts","chart.js", + "clone-deep","@ckeditor/ckeditor5-build-classic","@ctrl/ngx-codemirror" + ], + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "node_modules/@clr/icons/clr-icons.min.css", + "node_modules/@clr/ui/clr-ui.min.css", + "src/styles.scss", + "node_modules/ngx-toastr/toastr.css" + ], + "scripts": [ + "node_modules/@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js", + "node_modules/@webcomponents/webcomponentsjs/webcomponents-bundle.js", + "node_modules/@clr/icons/clr-icons.min.js" + ], + "vendorChunk": true, + "extractLicenses": false, + "buildOptimizer": false, + "sourceMap": true, + "optimization": false, + "namedChunks": true + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "10mb", + "maximumError": "10mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "200kb", + "maximumError": "4mb" + } + ] + } + }, + "defaultConfiguration": "" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "angularclarity:build" + }, + "configurations": { + "production": { + "browserTarget": "angularclarity:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "angularclarity:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "angularclarity:serve" + }, + "configurations": { + "production": { + "devServerTarget": "angularclarity:serve:production" + } + } + } + } + } + }, + "cli": { + "analytics": "6e7a3b23-d894-47dd-8b4b-7fdeba9a5abd" + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/browserslist b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/browserslist new file mode 100644 index 0000000..8084853 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/browserslist @@ -0,0 +1,12 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/protractor.conf.js b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/protractor.conf.js new file mode 100644 index 0000000..7c798cf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/protractor.conf.js @@ -0,0 +1,32 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + browserName: 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/src/app.e2e-spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..98d296a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/src/app.e2e-spec.ts @@ -0,0 +1,23 @@ +import { AppPage } from './app.po'; +import { browser, logging } from 'protractor'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getTitleText()).toEqual('angularclarity app is running!'); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/src/app.po.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/src/app.po.ts new file mode 100644 index 0000000..b68475e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo(): Promise { + return browser.get(browser.baseUrl) as Promise; + } + + getTitleText(): Promise { + return element(by.css('app-root .content span')).getText() as Promise; + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/tsconfig.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/tsconfig.json new file mode 100644 index 0000000..39b800f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/e2e/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/karma.conf.js b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/karma.conf.js new file mode 100644 index 0000000..26cf885 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, './coverage/ang'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/package-lock.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/package-lock.json new file mode 100644 index 0000000..4d904c4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/package-lock.json @@ -0,0 +1,14670 @@ +{ + "name": "angular-clarity", + "version": "16.0.4", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "angular-clarity", + "version": "16.0.4", + "dependencies": { + "@angular/animations": "^16.0.4", + "@angular/cdk": "^16.2.4", + "@angular/common": "^16.0.4", + "@angular/compiler": "^16.0.4", + "@angular/core": "^16.0.4", + "@angular/forms": "^16.0.4", + "@angular/platform-browser": "^16.0.4", + "@angular/platform-browser-dynamic": "^16.0.4", + "@angular/router": "^16.0.4", + "@auth0/angular-jwt": "^5.1.2", + "@cds/core": "^6.9.0", + "@ckeditor/ckeditor5-angular": "^7.0.1", + "@ckeditor/ckeditor5-build-classic": "^40.0.0", + "@clr/angular": "^15.5.0", + "@clr/core": "^4.0.15", + "@clr/icons": "^13.0.2", + "@clr/ui": "^15.5.0", + "@ctrl/ngx-codemirror": "^7.0.0", + "@swimlane/ngx-charts": "^20.4.1", + "@webcomponents/custom-elements": "^1.6.0", + "@webcomponents/webcomponentsjs": "^2.8.0", + "angular-gridster2": "^16.0.0", + "angularx-qrcode": "^16.0.2", + "chart.js": "^4.4.0", + "dom-to-image": "^2.6.0", + "express": "^4.18.2", + "file-saver": "^2.0.5", + "highcharts": "^11.1.0", + "highcharts-angular": "^3.1.2", + "jquery": "^3.7.1", + "jspdf": "^2.5.1", + "jszip": "^3.10.1", + "lit-html": "^3.1.0", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "ng-dynamic-component": "^10.1.1", + "ng2-charts": "^5.0.3", + "ng2-ckeditor": "^1.3.7", + "ng2-search-filter": "^0.5.1", + "ngx-captcha": "^13.0.0", + "ngx-chips": "^3.0.0", + "ngx-cookie-service": "^16.0.0", + "ngx-drag-drop": "^16.1.0", + "ngx-image-cropper": "^7.0.2", + "ngx-toastr": "^17.0.2", + "numeral": "^2.0.6", + "rxjs": "^7.8.1", + "sweetalert2": "^11.4.8", + "tslib": "^2.5.2", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.0.4", + "@angular/cli": "^16.0.4", + "@angular/compiler-cli": "^16.0.4", + "@types/jasmine": "~4.3.2", + "@types/jasminewd2": "~2.0.10", + "@types/node": "^20.2.5", + "jasmine-core": "~5.0.0", + "jasmine-spec-reporter": "~7.0.0", + "karma": "~6.4.2", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage-istanbul-reporter": "~3.0.3", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "^2.0.0", + "ts-node": "^10.9.1", + "tslint": "~6.1.3", + "typescript": "^5.1.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1602.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.9.tgz", + "integrity": "sha512-U3vfb/e2sFfg0D9FyyRBXRPP7g4FBFtGK8Q3JPmvAVsHHwi5AUFRNR7YBChB/T5TMNY077HcTyEirVh2FeUpdA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.2.9", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.9.tgz", + "integrity": "sha512-S1C4UYxRVyNt3C0wCxbT2jZ1dN5i37kS0mol3PQjbR8gQ0GQzHmzhjTBl1oImo8aouET9yhrk9etk65oat4mBQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1602.9", + "@angular-devkit/build-webpack": "0.1602.9", + "@angular-devkit/core": "16.2.9", + "@babel/core": "7.22.9", + "@babel/generator": "7.22.9", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.6", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.9", + "@babel/preset-env": "7.22.9", + "@babel/runtime": "7.22.6", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.2.9", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.3", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.21.5", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.20", + "css-loader": "6.8.1", + "esbuild-wasm": "0.18.17", + "fast-glob": "3.3.1", + "guess-parser": "0.4.22", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.1", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "4.0.0", + "postcss": "8.4.31", + "postcss-loader": "7.3.3", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.64.1", + "sass-loader": "13.3.2", + "semver": "7.5.4", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.19.2", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.6.1", + "vite": "4.4.7", + "webpack": "5.88.2", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.1", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.18.17" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0", + "@angular/localize": "^16.0.0", + "@angular/platform-server": "^16.0.0", + "@angular/service-worker": "^16.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1602.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.9.tgz", + "integrity": "sha512-+3IxovfBPR2Vy730mGa0SVKkd5LQVom85gjXOs7WcnnnZmfc1q/BtFlqTgW1UWvTxP8IQdm7UYWVclQfL/WExw==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1602.9", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.9.tgz", + "integrity": "sha512-dcHWjHBNGm3yCeNz19y8A1At4KgyC6XHNnbFL0y+nnZYiaESXjUoXJYKASedI6A+Bpl0HNq2URhH6bL6Af3+4w==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "picomatch": "2.3.1", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.9.tgz", + "integrity": "sha512-lB51CGCILpcSI37CwKUAGDLxMqh7zmuRbiPo9s9mSkCM4ccqxFlaL+VFTq2/laneARD6aikpOHnkVm5myNzQPw==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.2.9", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.1", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.12.tgz", + "integrity": "sha512-MD0ElviEfAJY8qMOd6/jjSSvtqER2RDAi0lxe6EtUacC1DHCYkaPrKW4vLqY+tmZBg1yf+6n+uS77pXcHHcA3w==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.2.12" + } + }, + "node_modules/@angular/cdk": { + "version": "16.2.11", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.11.tgz", + "integrity": "sha512-FcJ9xd9ptjULdScnBNg7YkVnY9NKePFfmvvs2zt841Hd489L8BUkTUdbvtCLhMJTTSN+k+D+RYFhevZuhPKVVg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@angular/common": "^16.0.0 || ^17.0.0", + "@angular/core": "^16.0.0 || ^17.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.9.tgz", + "integrity": "sha512-wkpV/Ni26LUeDmhee2TPXXEq3feEdZMSG8+nkfUK9kqIcxm0IjI1GLPeiVOX7aQobuKNe2cCAFNwsrXWjj+2og==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1602.9", + "@angular-devkit/core": "16.2.9", + "@angular-devkit/schematics": "16.2.9", + "@schematics/angular": "16.2.9", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.4", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.12.tgz", + "integrity": "sha512-B+WY/cT2VgEaz9HfJitBmgdk4I333XG/ybC98CMC4Wz8E49T8yzivmmxXB3OD6qvjcOB6ftuicl6WBqLbZNg2w==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.2.12", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.12.tgz", + "integrity": "sha512-6SMXUgSVekGM7R6l1Z9rCtUGtlg58GFmgbpMCsGf+VXxP468Njw8rjT2YZkf5aEPxEuRpSHhDYjqz7n14cwCXQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.2.12" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.12.tgz", + "integrity": "sha512-pWSrr152562ujh6lsFZR8NfNc5Ljj+zSTQO44DsuB0tZjwEpnRcjJEgzuhGXr+CoiBf+jTSPZKemtSktDk5aaA==", + "dev": true, + "dependencies": { + "@babel/core": "7.23.2", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.2.12", + "typescript": ">=4.9.3 <5.2" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.0", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular/core": { + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.12.tgz", + "integrity": "sha512-GLLlDeke/NjroaLYOks0uyzFVo6HyLl7VOm0K1QpLXnYvW63W9Ql/T3yguRZa7tRkOAeFZ3jw+1wnBD4O8MoUA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.12.tgz", + "integrity": "sha512-1Eao89hlBgLR3v8tU91vccn21BBKL06WWxl7zLpQmG6Hun+2jrThgOE4Pf3os4fkkbH4Apj0tWL2fNIWe/blbw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.2.12", + "@angular/core": "16.2.12", + "@angular/platform-browser": "16.2.12", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.12.tgz", + "integrity": "sha512-NnH7ju1iirmVEsUq432DTm0nZBGQsBrU40M3ZeVHMQ2subnGiyUs3QyzDz8+VWLL/T5xTxWLt9BkDn65vgzlIQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.2.12", + "@angular/common": "16.2.12", + "@angular/core": "16.2.12" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.12.tgz", + "integrity": "sha512-ya54jerNgreCVAR278wZavwjrUWImMr2F8yM5n9HBvsMBbFaAQ83anwbOEiHEF2BlR+gJiEBLfpuPRMw20pHqw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.2.12", + "@angular/compiler": "16.2.12", + "@angular/core": "16.2.12", + "@angular/platform-browser": "16.2.12" + } + }, + "node_modules/@angular/router": { + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.12.tgz", + "integrity": "sha512-aU6QnYSza005V9P3W6PpkieL56O0IHps96DjqI1RS8yOJUl3THmokqYN4Fm5+HXy4f390FN9i6ftadYQDKeWmA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.2.12", + "@angular/core": "16.2.12", + "@angular/platform-browser": "16.2.12", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@auth0/angular-jwt": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@auth0/angular-jwt/-/angular-jwt-5.2.0.tgz", + "integrity": "sha512-9FS2L0QwGNlxA/zgeehCcsR9CZscouyXkoIj1fODM36A8BLfdzg9k9DWAXUQ2Drjk0AypGAFzeNZR4vsLMhdeQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=14.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", + "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", + "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", + "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", + "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", + "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", + "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", + "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", + "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", + "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", + "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", + "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", + "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", + "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", + "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", + "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", + "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", + "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", + "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz", + "integrity": "sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.9.tgz", + "integrity": "sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.7", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.6", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.4", + "babel-plugin-polyfill-corejs3": "^0.8.2", + "babel-plugin-polyfill-regenerator": "^0.5.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cds/city": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cds/city/-/city-1.1.0.tgz", + "integrity": "sha512-S9K+Q39BGOghyLHmR0Wdcmu1i1noSUk8HcvMj+3IaohZw02WFd99aPTQDHJeseXrXZP3CNovaSlePI0R11NcFg==", + "optional": true + }, + "node_modules/@cds/core": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@cds/core/-/core-6.9.0.tgz", + "integrity": "sha512-+vvGmgRsbW9mak+OVBHPZEuFaBO6fX7yuaSmiU32LRpjmuqU1F2SmIZqmQGbFjjyipI93N0J0mvl4m75Ov8iAQ==", + "dependencies": { + "lit": "^2.1.3", + "ramda": "^0.29.0", + "tslib": "^2.3.1" + }, + "optionalDependencies": { + "@cds/city": "^1.1.0", + "modern-normalize": "1.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-adapter-ckfinder": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-40.1.0.tgz", + "integrity": "sha512-tvwgkMNgXnFqTOlv/uV8iUs5tzf68o5fcE0HNZn+5WG9j04deGeQ160d1CAhtnAGN11BnJShlkk0/YcQ+4OQiw==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-angular": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-angular/-/ckeditor5-angular-7.0.1.tgz", + "integrity": "sha512-bHBmBMa9PAXk1MMjeq+9nV/HVWdwv36kRjpOr4JUiYYxRFdtPBXWj+3Jb9TUymyWchhxMA440iYJVoYgVw3lOA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=13.0.0", + "@angular/core": ">=13.0.0", + "@angular/forms": ">=13.0.0", + "@ckeditor/ckeditor5-core": ">=37.0.0", + "@ckeditor/ckeditor5-engine": ">=37.0.0", + "@ckeditor/ckeditor5-utils": ">=37.0.0", + "@ckeditor/ckeditor5-watchdog": ">=37.0.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ckeditor/ckeditor5-autoformat": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-40.1.0.tgz", + "integrity": "sha512-ZSzrUQRbluUIlz2vwyDaQDUhboTsGK6UqPsuZQfO+GJGnOaD8JKu8Sun2KzWCzSdRhbEm5ioyJmlLOOuPsPBSQ==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-basic-styles": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-40.1.0.tgz", + "integrity": "sha512-+WcZPUqCAW1ABzAGFkuXZ8M72LtrmTXFdyK9KjHu9bJN7OGxN2WmVvMVX/ENU598ajM7kdHgbQedAbUa45A4AA==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-block-quote": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-40.1.0.tgz", + "integrity": "sha512-3kKhIlfdhwXgnwzU4Nur74fbGcSS5kwKqVrm3bDlMlGKzoyoqbtPppGEsdTcuq8EovTkS57/hWgyAXeJiUtA+Q==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-build-classic": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-40.1.0.tgz", + "integrity": "sha512-QiQJrQkZOwfSED20j1oCM0EU+gk9F1GccnNs1/TOufufcMJ0k+dWO/3Cw12dmfQT5uY6AtL+5uoPXHsMez9l4w==", + "dependencies": { + "@ckeditor/ckeditor5-adapter-ckfinder": "40.1.0", + "@ckeditor/ckeditor5-autoformat": "40.1.0", + "@ckeditor/ckeditor5-basic-styles": "40.1.0", + "@ckeditor/ckeditor5-block-quote": "40.1.0", + "@ckeditor/ckeditor5-ckbox": "40.1.0", + "@ckeditor/ckeditor5-ckfinder": "40.1.0", + "@ckeditor/ckeditor5-cloud-services": "40.1.0", + "@ckeditor/ckeditor5-easy-image": "40.1.0", + "@ckeditor/ckeditor5-editor-classic": "40.1.0", + "@ckeditor/ckeditor5-essentials": "40.1.0", + "@ckeditor/ckeditor5-heading": "40.1.0", + "@ckeditor/ckeditor5-image": "40.1.0", + "@ckeditor/ckeditor5-indent": "40.1.0", + "@ckeditor/ckeditor5-link": "40.1.0", + "@ckeditor/ckeditor5-list": "40.1.0", + "@ckeditor/ckeditor5-media-embed": "40.1.0", + "@ckeditor/ckeditor5-paragraph": "40.1.0", + "@ckeditor/ckeditor5-paste-from-office": "40.1.0", + "@ckeditor/ckeditor5-table": "40.1.0", + "@ckeditor/ckeditor5-typing": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-ckbox": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-40.1.0.tgz", + "integrity": "sha512-j4IBFq3Scrj/SwUKxkgk8NyarbomSGOVqMa5iI2NP9ggGeSr9uESMSBRJo8kfG3szIs6whIoWGGfDQjBy+FXKQ==", + "dependencies": { + "blurhash": "^2.0.5", + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-ckfinder": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-40.1.0.tgz", + "integrity": "sha512-wNkf4RbZTvp3y269Xatv4ohv28c00Y+jrDplU4UhavEYhpk2b6F44XiUulaRd8jDBuzaYc8uWp9rN87uEFVZqA==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-clipboard": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-40.1.0.tgz", + "integrity": "sha512-Zk1wCJbxhFygfEE8QHFiF4IRO9Ufl5lKaYtCq31dniex4XGyQ4x9LJz6YLhMzfhWKIrfBwpUiStXQ3GxgVgP1w==", + "dependencies": { + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-engine": "40.1.0", + "@ckeditor/ckeditor5-ui": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0", + "@ckeditor/ckeditor5-widget": "40.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-cloud-services": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-40.1.0.tgz", + "integrity": "sha512-zxfvo2jDwzvsFqNmDa0PTyKb1zyKn1KHckqyB+1SiLZZRIN6Y5HQBgJr0kAiSvhih2bHQdNaVFalJhP1iMl94w==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-core": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-40.1.0.tgz", + "integrity": "sha512-VTPANdgrPvCshACLElgHF+ELLpoMvNoa/Y+dfnI5tNuX8hbALpmFm/rNzDIYGzNWBOjBq9WLWcvYLSrIgb3f8A==", + "dependencies": { + "@ckeditor/ckeditor5-engine": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-easy-image": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-40.1.0.tgz", + "integrity": "sha512-uZikiStRFG07bxMn78TSQyHi4qvEp2/oWQ2XoLR4C7tvVrTj4aEJOfYp5dOKgjTsFYYurkTWrvBj4Z/b3dIfIQ==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-classic": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-40.1.0.tgz", + "integrity": "sha512-A1nJE+bGNcfWIw9O0JHNjXe5T3zwqE42wb7vZFznGEIc9OoG6yHmkpo5wV/DZVy9zia7Y5f6EdLdEaHLx3VzUg==", + "dependencies": { + "ckeditor5": "40.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-engine": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-40.1.0.tgz", + "integrity": "sha512-z4UD6ncjgtpqlcCzfSaAX5uro6TNiJVuW0hUv2WH4WGt1cBWjvNZ9kkcaJAANJhDXxNDA+jgRAeRkowaxUGXIg==", + "dependencies": { + "@ckeditor/ckeditor5-utils": "40.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-enter": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-40.1.0.tgz", + "integrity": "sha512-8X9+Lsc9pDUfmXjcZCQfEvp5YTs22x3FsOPAi8JEE/9aO2n0dB/zSNn2O8oJ1u5hf/9N8EYkyYiowI9cYEl9ww==", + "dependencies": { + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-engine": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-essentials": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-40.1.0.tgz", + "integrity": "sha512-buTY8ATSM42EWMkwrsvpHyntfzvtn+2DvbrRIYm0w50GDchlmVRczR4axv7snLRKLsSB3yjGbodaVvtl9MFTXA==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-heading": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-40.1.0.tgz", + "integrity": "sha512-klULKRRcoNk+JhJaREp6GEX/b99CHlyShL8vR3v01EBpfvwGglzqF0xVetig9yyfWPe4R4I7OEkIQ/3nR+jSBw==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-image": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-40.1.0.tgz", + "integrity": "sha512-n4ZyOE6JvZXqbDA0tg5Y3QchxQb0XCPipL/EXfnJAU6fo2/vzDcflYDKWGQ7s7WjWx2rNRjlfXgzVW5RTNByKw==", + "dependencies": { + "@ckeditor/ckeditor5-ui": "40.1.0", + "ckeditor5": "40.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-indent": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-40.1.0.tgz", + "integrity": "sha512-V23OcynvjSIavbnjaBwvB76AeTizkARRzttlK85FyGd/DyExYxnIyYY1yOMVjyj3xCZzKDq9B4GRVOoumMmWiQ==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-link": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-40.1.0.tgz", + "integrity": "sha512-giy2TNk6l/fjn/q4M5JFQcbAnSpln5KqBhXAUfgkstLanNhReA4yIxuRmDY4MiV5cAc6juF6l7gAcxKgXG7HJw==", + "dependencies": { + "@ckeditor/ckeditor5-ui": "40.1.0", + "ckeditor5": "40.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-list": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-40.1.0.tgz", + "integrity": "sha512-jpBQrCqn2F4tTp8BYA5dKWl3cBRhgpklumOwP34XdWoIg4EYdGYOXc/XkZqdNokYRzNouWzS6+UyeL+va9Q8yw==", + "dependencies": { + "@ckeditor/ckeditor5-ui": "40.1.0", + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-media-embed": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-40.1.0.tgz", + "integrity": "sha512-k7IjKkL818ujbO1tLOzUz8ahPRosBXY/yeoeCaiDr8dfZ3EMDUH0jqWpV5ty7OMv5AzKl/pfVDVNM/R5MHKCSQ==", + "dependencies": { + "@ckeditor/ckeditor5-ui": "40.1.0", + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-paragraph": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-40.1.0.tgz", + "integrity": "sha512-R1bGbLF4tiA4SQtDHVBqqgrmAOyA9bj0q9ssVtQpn4/dew5sffnvQIDhgc+GlIT3Z1HQT3rH4JLEJE9sOid0VA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-ui": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-paste-from-office": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-40.1.0.tgz", + "integrity": "sha512-TgxhOMnSu0Dk/3orPaWap7DyfJO0Mcy13tFiv7lMmjwORBtweHCAENom1n0XZw8fscENl6ua9PkaA6hCh80kew==", + "dependencies": { + "ckeditor5": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-select-all": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-40.1.0.tgz", + "integrity": "sha512-6EA36HT9ZDFU9cInVo512lUkE6AMWKp2p7zCWTyHCtvA3vATAendxw0lgyY2EX+LIwD/gisWsyWts6OMFk/PmQ==", + "dependencies": { + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-ui": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-table": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-40.1.0.tgz", + "integrity": "sha512-iUrOsa150JmH9xhV8UUF2tH1UcFcvtWJ4cpE3l6iPjPTv4mp7ZvMUuB0GC8Qt/ES9+BR4I+7LKbOEmKe5wuvBQ==", + "dependencies": { + "ckeditor5": "40.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-typing": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-40.1.0.tgz", + "integrity": "sha512-Ro7+vGQPqZm38n2v6r5azliZrkos+8nA1tTDgXdNgmzpr53CdLB8rX/DQRTNY+xAwujgKy9y3P+uVmV5HigqnQ==", + "dependencies": { + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-engine": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-ui": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-40.1.0.tgz", + "integrity": "sha512-ROq/as1YnlfwPtqqWU8u+bw8pCFbqUhOU4Xq1VuFqN4dhrecz2NIkSHU8ht+vD4YmPqXTDa8GOwaBKnCjX7pZA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0", + "color-convert": "2.0.1", + "color-parse": "1.4.2", + "lodash-es": "4.17.21", + "vanilla-colorful": "0.7.2" + } + }, + "node_modules/@ckeditor/ckeditor5-ui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@ckeditor/ckeditor5-ui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@ckeditor/ckeditor5-undo": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-40.1.0.tgz", + "integrity": "sha512-j07Zs4NHWSEcBHcye28InssE8S3ryMcwEWTYDr0/L3LYnBs5b1fCyGCJYchH3yLlrQTL88yX+SQKmwZE0f0wYw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-engine": "40.1.0", + "@ckeditor/ckeditor5-ui": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-upload": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-40.1.0.tgz", + "integrity": "sha512-uTaP36PskRdBn2XvWTWPUm+D9xlXvzuD2OvbxLP2kAiU10c43KKPXdukf0N2ujStYcj/hwdPc6ZLt1otImazKw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-ui": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0" + } + }, + "node_modules/@ckeditor/ckeditor5-utils": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-40.1.0.tgz", + "integrity": "sha512-QTpgbuPbQa88AMCOlDdlgK8fPg/IpPuxSU5QDVGR1rmuZRgC7fWCN027aLsJ2t1ppLfKjA/O49dhydm6mKgO9w==", + "dependencies": { + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-watchdog": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-40.1.0.tgz", + "integrity": "sha512-E8+1zC6dnDR0wQnZD88ligKY7pxBcxz953eUdijHmBcVrbECMKJ4VrORIT37LVgstDUYJhHYgxMOQ0TwO/uSKQ==", + "dependencies": { + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-widget": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-40.1.0.tgz", + "integrity": "sha512-3nmDx6cQzDmuc7F0s1c967GK5cSHzsOAnBFlCkz/Om00It5wHFz2VASXA0LHo1gsma2XoO9MJtZjgUkHQUag3g==", + "dependencies": { + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-engine": "40.1.0", + "@ckeditor/ckeditor5-enter": "40.1.0", + "@ckeditor/ckeditor5-typing": "40.1.0", + "@ckeditor/ckeditor5-ui": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@clr/angular": { + "version": "15.12.4", + "resolved": "https://registry.npmjs.org/@clr/angular/-/angular-15.12.4.tgz", + "integrity": "sha512-CgJnIZyKGfYYRzfI6HLtQ82zgZkzYR0sm/HgjDXB1cN2rmthRfHgMZTTUO1QXLShujgmzk3dNjxq2GYG/s9dlQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": "15 || 16", + "@angular/common": "15 || 16", + "@angular/core": "15 || 16", + "@cds/core": "^5.6.0 || ^6.0.0", + "@clr/ui": "15.12.4" + } + }, + "node_modules/@clr/city": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@clr/city/-/city-1.1.0.tgz", + "integrity": "sha512-R+C4uywmXoTD01LINOt3O0cBRviQdbAVNxdVvOyuO3+rM9bvFroF7UZY0R1ue/xvKXlqJrEkNKZQODeKjzaAhA==", + "optional": true + }, + "node_modules/@clr/core": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@clr/core/-/core-4.0.15.tgz", + "integrity": "sha512-KnUxZGCMcfRu7GdSihHRQPbElYcGwfTey5HkZnIw3KM+o02Ru1cH0jJn7St5+dF9V3RVYryTEdZ66gHQrstFzw==", + "dependencies": { + "@types/resize-observer-browser": "^0.1.3", + "lit-element": "^2.3.1", + "lit-html": "^1.2.1", + "ramda": "^0.27.0", + "tslib": "^2.0.0" + }, + "optionalDependencies": { + "@clr/city": "^1.1.0", + "@webcomponents/custom-elements": "^1.4.2", + "@webcomponents/shadycss": "^1.10.1", + "@webcomponents/webcomponentsjs": "^2.4.4", + "css-vars-ponyfill": "^2.3.2", + "normalize.css": "^8.0.1" + } + }, + "node_modules/@clr/core/node_modules/lit-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", + "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" + }, + "node_modules/@clr/core/node_modules/ramda": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz", + "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==" + }, + "node_modules/@clr/icons": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/@clr/icons/-/icons-13.0.2.tgz", + "integrity": "sha512-bdcSuFvQAbIIp8Q2Fm55BjHW5cawP4xEOkZf2IEIin0d9ViRcAJNjACBCOMDhx2up7nPZsXwN2gL8zJhL7TSZQ==", + "peerDependencies": { + "@webcomponents/custom-elements": "^1.0.0" + } + }, + "node_modules/@clr/ui": { + "version": "15.12.4", + "resolved": "https://registry.npmjs.org/@clr/ui/-/ui-15.12.4.tgz", + "integrity": "sha512-uGfJeO1gnIYT9WdrmT0w1qiNWsNU47YtMpxlFHZ7/LFO6Zd2kIClWMWpTwDvYgPsh0v4YNriRpy/VOMtjPaMyQ==" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@ctrl/ngx-codemirror": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ctrl/ngx-codemirror/-/ngx-codemirror-7.0.0.tgz", + "integrity": "sha512-qvIWtSTw/8fdXDnofBTX6LmTW9646HhawG2+Qyagf1vH40jCy0ZbHnkC20UYOVpUX+QCd1e/PQpkvWQ/1iGFzQ==", + "dependencies": { + "@types/codemirror": "^5.60.7", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/core": ">=16.0.0-0", + "@angular/forms": ">=16.0.0-0", + "codemirror": "^5.65.9" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", + "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", + "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", + "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", + "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", + "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", + "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", + "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", + "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", + "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", + "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", + "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", + "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", + "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", + "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", + "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", + "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", + "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", + "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", + "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", + "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", + "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", + "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz", + "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==" + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.9.tgz", + "integrity": "sha512-rOclD7FfT4OSwVA0nDnULbJS6TORJ0+sQiuT2ebaNFErYr3LOm6Zut05tnmzFw8q1cePrILbG+xpnbggNr9Pyw==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@schematics/angular": { + "version": "16.2.9", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.9.tgz", + "integrity": "sha512-uiU2YbZRVHgk1N1DDsek/5CKhfpZ8myJYNJk8eHV5LswnXOP3aqvH23VhneaAgOYwK5fISC7eMG0pLVKMvFfZQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.2.9", + "@angular-devkit/schematics": "16.2.9", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@sigstore/sign/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@sigstore/sign/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@swimlane/ngx-charts": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@swimlane/ngx-charts/-/ngx-charts-20.5.0.tgz", + "integrity": "sha512-PNBIHdu/R3ceD7jnw1uCBVOj4k3T6IxfdW6xsDsglGkZyoWMEEq4tLoEurjLEKzmDtRv9c35kVNOXy0lkOuXeA==", + "dependencies": { + "d3-array": "^3.1.1", + "d3-brush": "^3.0.0", + "d3-color": "^3.1.0", + "d3-ease": "^3.0.1", + "d3-format": "^3.1.0", + "d3-hierarchy": "^3.1.0", + "d3-interpolate": "^3.0.1", + "d3-sankey": "^0.12.3", + "d3-scale": "^4.0.2", + "d3-selection": "^3.0.0", + "d3-shape": "^3.2.0", + "d3-time-format": "^3.0.0", + "d3-transition": "^3.0.1", + "rfdc": "^1.3.0", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/animations": ">=12.0.0", + "@angular/cdk": ">=12.0.0", + "@angular/common": ">=12.0.0", + "@angular/core": ">=12.0.0", + "@angular/forms": ">=12.0.0", + "@angular/platform-browser": ">=12.0.0", + "@angular/platform-browser-dynamic": ">=12.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.4", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.4.tgz", + "integrity": "sha512-N7UDG0/xiPQa2D/XrVJXjkWbpqHCd2sBaB32ggRF2l83RhPfamgKGF8gwwqyksS95qUS5ZYF9aF+lLPRlwI2UA==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.12.tgz", + "integrity": "sha512-ky0kWSqXVxSqgqJvPIkgFkcn4C8MnRog308Ou8xBBIVo39OmUFy+jqNe0nPwLCDFxUpmT9EvT91YzOJgkDRcFg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ckeditor": { + "version": "4.9.10", + "resolved": "https://registry.npmjs.org/@types/ckeditor/-/ckeditor-4.9.10.tgz", + "integrity": "sha512-dcOPCXM0Cr5Z0i6eF/aW5LvECrS+cdl2Gi7lU+rEUNWby0w9Yl6mBubjrs29OVAducpuZjB4mfDayE+o4/gGdQ==", + "peer": true + }, + "node_modules/@types/codemirror": { + "version": "5.60.15", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.15.tgz", + "integrity": "sha512-dTOvwEQ+ouKJ/rE9LT1Ue2hmP6H1mZv5+CCnNWu2qtiOe2LQa9lCprEY20HxiDmV/Bxh+dXjywmy5aKvoGjULA==", + "dependencies": { + "@types/tern": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.37.tgz", + "integrity": "sha512-zBUSRqkfZ59OcwXon4HVxhx5oWCJmc0OtBTK05M+p0dYjgN6iTwIL2T/WbsQZrEsdnwaF9cWQ+azOnpPvIqY3Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.2.tgz", + "integrity": "sha512-gX2j9x+NzSh4zOhnRPSdPPmTepS4DfxES0AvIFv3jGv5QyeAJf6u6dY5/BAoAJU9Qq1uTvwOku8SSC2GnCRl6Q==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.15", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz", + "integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.6.tgz", + "integrity": "sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.6.tgz", + "integrity": "sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.4.tgz", + "integrity": "sha512-2JwWnHK9H+wUZNorf2Zr6ves96WHoWDJIftkcxPKsS7Djta6Zu519LarhRNljPXkpsZR2ZMwNCPeW7omW07BJw==" + }, + "node_modules/@types/express": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.20.tgz", + "integrity": "sha512-rOaqlkgEvOW495xErXMsmyX3WKBInbhG5eqojXYi3cGUaLoRDlXa5d52fkfWZT963AZ3v2eZ4MbKE6WpDAGVsw==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.39", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.39.tgz", + "integrity": "sha512-BiEUfAiGCOllomsRAZOiMFP7LAnrifHpt56pc4Z7l9K6ACyN06Ns1JLMBxwkfLOjJRlSf06NwWsT7yzfpaVpyQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.3.tgz", + "integrity": "sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.13", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.13.tgz", + "integrity": "sha512-GkhdWcMNiR5QSQRYnJ+/oXzu0+7JJEPC8vkWXK351BkhjraZF+1W13CUYARUvX9+NqIU2n6YHA4iwywsc/M6Sw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.6.tgz", + "integrity": "sha512-3N0FpQTeiWjm+Oo1WUYWguUS7E6JLceiGTriFrG8k5PU7zRLJCzLcWURU3wjMbZGS//a2/LgjsnO3QxIlwxt9g==", + "dev": true + }, + "node_modules/@types/jasminewd2": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.12.tgz", + "integrity": "sha512-C4rXKMnGqLqTw4mgfiT0fL91g5oFAUhreR8jeeYk4xYcgh1/CImqgn5pWcErnpJJS43XFUfHGit0sSPQ39G1Pg==", + "dev": true, + "dependencies": { + "@types/jasmine": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", + "integrity": "sha512-1Gjee59G25MrQGk8bsNvC6fxNiRgUlGn2wlhGf95a59DrprnnHk80FIMMFG9XHMdrfsuA119ht06QPDXA1Z7tw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.8.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", + "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.8.tgz", + "integrity": "sha512-vGXshY9vim9CJjrpcS5raqSjEfKlJcWy2HNdgUasR66fAnVEYarrf1ULV4nfvpC1nZq/moA9qyqBcu83x+Jlrg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.9", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.9.tgz", + "integrity": "sha512-wYLxw35euwqGvTDx6zfY1vokBFnsK0HNrzc6xNHchxfO2hpuRg74GbkEW7e3sSmPvj0TjCDT1VCa6OtHXnubsg==", + "dev": true + }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "optional": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.6.tgz", + "integrity": "sha512-+0autS93xyXizIYiyL02FCY8N+KkKPhILhcUSA276HxzreZ16kl+cmwvV2qAM/PuCCwPXzOXOWhiPcw20uSFcA==", + "dev": true + }, + "node_modules/@types/resize-observer-browser": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@types/resize-observer-browser/-/resize-observer-browser-0.1.9.tgz", + "integrity": "sha512-ZwouFyOzXjycRUA+30EJM+8f8OPjKtrod8g0NY27v07r3IxDFG+3Ux3LMOajX8/hxUwOmS50duuPEe3+P9SKDQ==" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.3.tgz", + "integrity": "sha512-/7fKxvKUoETxjFUsuFlPB9YndePpxxRAOfGC/yJdc9kTjTeP5kRCTzfnE8kPUKCeyiyIZu0YQ76s50hCedI1ug==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.3.tgz", + "integrity": "sha512-4KG+yMEuvDPRrYq5fyVm/I2uqAJSAwZK9VSa+Zf+zUq9/oxSSvy3kkIqyL+jjStv6UCVi8/Aho0NHtB1Fwosrg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.4.tgz", + "integrity": "sha512-aqqNfs1XTF0HDrFdlY//+SGUxmdSUbjeRXb5iaZc3x0/vMbYmdw9qvOgHWOyyLFxSSRnUuP5+724zBgfw8/WAw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.35", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.35.tgz", + "integrity": "sha512-tIF57KB+ZvOBpAQwSaACfEu7htponHXaFzP7RfKYgsOS0NoYnn+9+jzp7bbq4fWerizI3dTB4NfAZoyeQKWJLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/tern": { + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.9.tgz", + "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.5.tgz", + "integrity": "sha512-I3pkr8j/6tmQtKV/ZzHtuaqYSQvyjGRKH4go60Rr0IDLlFxuRT5V32uvB1mecM5G1EVAUyF/4r4QZ1GHgz+mxA==" + }, + "node_modules/@types/ws": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.8.tgz", + "integrity": "sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", + "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webcomponents/custom-elements": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webcomponents/custom-elements/-/custom-elements-1.6.0.tgz", + "integrity": "sha512-CqTpxOlUCPWRNUPZDxT5v2NnHXA4oox612iUGnmTUGQFhZ1Gkj8kirtl/2wcF6MqX7+PqqicZzOCBKKfIn0dww==" + }, + "node_modules/@webcomponents/shadycss": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.2.tgz", + "integrity": "sha512-vRq+GniJAYSBmTRnhCYPAPq6THYqovJ/gzGThWbgEZUQaBccndGTi1hdiUP15HzEco0I6t4RCtXyX0rsSmwgPw==", + "optional": true + }, + "node_modules/@webcomponents/webcomponentsjs": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.8.0.tgz", + "integrity": "sha512-loGD63sacRzOzSJgQnB9ZAhaQGkN7wl2Zuw7tsphI5Isa0irijrRo6EnJii/GgjGefIFO8AIO7UivzRhFaEk9w==" + }, + "node_modules/@wessberg/ts-evaluator": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/@wessberg/ts-evaluator/-/ts-evaluator-0.0.27.tgz", + "integrity": "sha512-7gOpVm3yYojUp/Yn7F4ZybJRxyqfMNf0LXK5KJiawbPfL0XTsJV+0mgrEDjOIR6Bi0OYk2Cyg4tjFu1r8MCZaA==", + "deprecated": "this package has been renamed to ts-evaluator. Please install ts-evaluator instead", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "jsdom": "^16.4.0", + "object-path": "^0.11.5", + "tslib": "^2.0.3" + }, + "engines": { + "node": ">=10.1.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/wessberg/ts-evaluator?sponsor=1" + }, + "peerDependencies": { + "typescript": ">=3.2.x || >= 4.x" + } + }, + "node_modules/@wessberg/ts-evaluator/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@wessberg/ts-evaluator/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@wessberg/ts-evaluator/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@wessberg/ts-evaluator/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@wessberg/ts-evaluator/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wessberg/ts-evaluator/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/angular-gridster2": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/angular-gridster2/-/angular-gridster2-16.0.0.tgz", + "integrity": "sha512-Us6nwxS+84W49nRXk/Dcm7KxgVmJNzkMwLDN2/FfoRlV1nhcv8j7kM2llhSpelwGPDyw/T64BePFw2Dx03QaTQ==", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@angular/common": "^16.0.0", + "@angular/core": "^16.0.0", + "rxjs": "^7.0.0" + } + }, + "node_modules/angularx-qrcode": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-16.0.2.tgz", + "integrity": "sha512-FztOM7vjNu88sGxUU5jG2I+A9TxZBXXYBWINjpwIBbTL+COMgrtzXnScG7TyQeNknv5w3WFJWn59PcngRRYVXA==", + "dependencies": { + "qrcode": "1.5.3", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/core": "^16.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", + "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.3", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", + "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.33.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", + "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.3" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "devOptional": true + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "optional": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blurhash": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", + "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001559", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001559.tgz", + "integrity": "sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chart.js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz", + "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=7" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ckeditor5": { + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-40.1.0.tgz", + "integrity": "sha512-AMWr8dPWowaj1EvT8pFrkDZ7FioBG96gEP85RrDQm0f8aF8ifJN9vwbX4iAxvX/uL5R90ye2as9+mflm8D+1wQ==", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "40.1.0", + "@ckeditor/ckeditor5-core": "40.1.0", + "@ckeditor/ckeditor5-engine": "40.1.0", + "@ckeditor/ckeditor5-enter": "40.1.0", + "@ckeditor/ckeditor5-paragraph": "40.1.0", + "@ckeditor/ckeditor5-select-all": "40.1.0", + "@ckeditor/ckeditor5-typing": "40.1.0", + "@ckeditor/ckeditor5-ui": "40.1.0", + "@ckeditor/ckeditor5-undo": "40.1.0", + "@ckeditor/ckeditor5-upload": "40.1.0", + "@ckeditor/ckeditor5-utils": "40.1.0", + "@ckeditor/ckeditor5-watchdog": "40.1.0", + "@ckeditor/ckeditor5-widget": "40.1.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/codemirror": { + "version": "5.65.16", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.16.tgz", + "integrity": "sha512-br21LjYmSlVL0vFCPWPfhzUCT34FM/pAdK7rRIZwa0rrtrIdotvP4Oh4GUHsu2E3IrQMCfRkL/fN3ytMNxVQvg==", + "peer": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-parse": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", + "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js": { + "version": "3.33.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz", + "integrity": "sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==", + "hasInstallScript": true, + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz", + "integrity": "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==", + "dev": true, + "dependencies": { + "browserslist": "^4.22.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/critters": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.20.tgz", + "integrity": "sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "optional": true, + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-vars-ponyfill": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/css-vars-ponyfill/-/css-vars-ponyfill-2.4.8.tgz", + "integrity": "sha512-4/j4AX4htytYHWyHVZ2BFQ+NoCGZEcOH2h4/2mmgE4SkrFg4Xq6tGYR77DtvvUIDsaXuJN+sj41bbgauA0Gfmg==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.2", + "get-css-data": "^2.0.2" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "dependencies": { + "d3-time": "1 - 2" + } + }, + "node_modules/d3-time-format/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-time-format/node_modules/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "dependencies": { + "d3-array": "2" + } + }, + "node_modules/d3-time-format/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-to-image": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/dom-to-image/-/dom-to-image-2.6.0.tgz", + "integrity": "sha512-Dt0QdaHmLpjURjU7Tnu3AgYSF2LuOmksSGsUcE6ItvJoCWTBEmiMXcqBdNSAm9+QbbwD7JMoVsuuKX6ZVQv1qA==" + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", + "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==", + "optional": true + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.575", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.575.tgz", + "integrity": "sha512-kY2BGyvgAHiX899oF6xLXSIf99bAvvdPhDoJwG77nxCSyWYuRH6e9a9a3gpXBvCs6lj4dQZJkfnW2hdKWHEISg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz", + "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "devOptional": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", + "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.17", + "@esbuild/android-arm64": "0.18.17", + "@esbuild/android-x64": "0.18.17", + "@esbuild/darwin-arm64": "0.18.17", + "@esbuild/darwin-x64": "0.18.17", + "@esbuild/freebsd-arm64": "0.18.17", + "@esbuild/freebsd-x64": "0.18.17", + "@esbuild/linux-arm": "0.18.17", + "@esbuild/linux-arm64": "0.18.17", + "@esbuild/linux-ia32": "0.18.17", + "@esbuild/linux-loong64": "0.18.17", + "@esbuild/linux-mips64el": "0.18.17", + "@esbuild/linux-ppc64": "0.18.17", + "@esbuild/linux-riscv64": "0.18.17", + "@esbuild/linux-s390x": "0.18.17", + "@esbuild/linux-x64": "0.18.17", + "@esbuild/netbsd-x64": "0.18.17", + "@esbuild/openbsd-x64": "0.18.17", + "@esbuild/sunos-x64": "0.18.17", + "@esbuild/win32-arm64": "0.18.17", + "@esbuild/win32-ia32": "0.18.17", + "@esbuild/win32-x64": "0.18.17" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.18.17.tgz", + "integrity": "sha512-9OHGcuRzy+I8ziF9FzjfKLWAPbvi0e/metACVg9k6bK+SI4FFxeV6PcZsz8RIVaMD4YNehw+qj6UMR3+qj/EuQ==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-css-data": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/get-css-data/-/get-css-data-2.1.0.tgz", + "integrity": "sha512-HtPrzGk8aBF9rLeQNuImcXci7YVqsMEKzVflEWaCJu25ehxyDNiZRWoSxqSFUBfma8LERqKo70t/TcaGjIsM9g==", + "optional": true + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/guess-parser": { + "version": "0.4.22", + "resolved": "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz", + "integrity": "sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==", + "dev": true, + "dependencies": { + "@wessberg/ts-evaluator": "0.0.27" + }, + "peerDependencies": { + "typescript": ">=3.7.5" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/highcharts": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.2.0.tgz", + "integrity": "sha512-9i650YK7ZBA1Mgtr3avMkLVCAI45RQvYnwi+eHsdFSaBGuQN6BHoa4j4lMkSJLv0V4LISTK1z7J7G82Lzd7zwg==" + }, + "node_modules/highcharts-angular": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/highcharts-angular/-/highcharts-angular-3.1.2.tgz", + "integrity": "sha512-f168ZhRVVlV7vJ2g0gDH3IaTNv84c91z6GYRWuER0Ep5kLalAUH0KDtFhrTOb6+sjue7BK8M7aPY74fiC4bGXA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=11.0.0", + "@angular/core": ">=11.0.0", + "highcharts": ">=9.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "optional": true, + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.0.1.tgz", + "integrity": "sha512-D4bRej8CplwNtNGyTPD++cafJlZUphzZNV+MSAnbD3er4D0NjL4x9V+mu/SI+5129utnCBen23JwEuBZA9vlpQ==", + "dev": true + }, + "node_modules/jasmine-spec-reporter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", + "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", + "dev": true, + "dependencies": { + "colors": "1.4.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.4.8" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "html2canvas": "^1.0.0-rc.5" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/karma": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", + "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage-istanbul-reporter": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", + "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^3.0.2", + "minimatch": "^3.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/mattlewis92" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", + "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", + "dev": true + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-element": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", + "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", + "dependencies": { + "lit-html": "^1.1.1" + } + }, + "node_modules/lit-element/node_modules/lit-html": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", + "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" + }, + "node_modules/lit-html": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.0.tgz", + "integrity": "sha512-FwAjq3iNsaO6SOZXEIpeROlJLUlrbyMkn4iuv4f4u1H40Jw8wkeR/OUXZUHUoiYabGk8Y4Y0F/rgq+R4MrOLmA==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/lit/node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit/node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", + "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/modern-normalize": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "optional": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/ng-dynamic-component": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ng-dynamic-component/-/ng-dynamic-component-10.7.0.tgz", + "integrity": "sha512-shkht4L2nA632qo5GNendZdQXoHUBuKz6SLLh20qi5oESBm3b5AWyhHu0fb/7tb+f+zAcwtVVe1M0819/bnK9A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=14.1.3", + "@angular/core": ">=14.1.3", + "rxjs": ">=6.0.0" + } + }, + "node_modules/ng2-charts": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-5.0.3.tgz", + "integrity": "sha512-/lTY64tiCN/pJPx+oIWRWOhtCk+ZbAU9yAUDNnRJwhe+a8ajcO5yS0tVOm5k7pj3doVp9+UdBRahyt6woJ95Rw==", + "dependencies": { + "lodash-es": "^4.17.15", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": ">=16.0.0", + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@angular/platform-browser": ">=16.0.0", + "chart.js": "^3.4.0 || ^4.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/ng2-ckeditor": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ng2-ckeditor/-/ng2-ckeditor-1.3.7.tgz", + "integrity": "sha512-3VdJLc/MUlFBbLg0rDwO3L+G3ofIn/zulV8rz/L4QVScQHpbJXGLJe6hIYNnAWOPaYFoGpczPC03YR+px3oJdQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@types/ckeditor": "^4.9.10" + } + }, + "node_modules/ng2-material-dropdown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ng2-material-dropdown/-/ng2-material-dropdown-1.0.0.tgz", + "integrity": "sha512-waKgEkKQwGZT0dqRAd3ZW+wueYs5Xw9owiPBSMdg5jru5DcKDpUqFaADMqqI7HPuzJCxNJSln6nXX1tMYDbXGA==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/ng2-search-filter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/ng2-search-filter/-/ng2-search-filter-0.5.1.tgz", + "integrity": "sha512-noN8R+Gyxo5ZuboEOvq+u0zKio6pEf1IVYQTCZfAfXm6ONmzWu/M2xK0di9oVUprDbPBQXCGUuvD5i2GD+35HA==" + }, + "node_modules/ngx-captcha": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/ngx-captcha/-/ngx-captcha-13.0.0.tgz", + "integrity": "sha512-WmT0p0C1iaR4PT7etFdpuQ5rS8EILkizBJhgbP9Prc14jfwYsLTfAsevYPxZPwlU4Dd02osH1//a37Qb93wTWg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">= 15.0.0", + "@angular/core": ">= 15.0.0" + } + }, + "node_modules/ngx-chips": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ngx-chips/-/ngx-chips-3.0.0.tgz", + "integrity": "sha512-hBJg4m9kCtCfersQef7vr2Ve6j9ntFSoB5ktF8MyOQnpONAriIp46c3Tb2wdf/lMEB2Xmc45snfJKnxKh3zimg==", + "dependencies": { + "ng2-material-dropdown": ">=1.0.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": ">=10.1.5", + "@angular/common": ">=10.1.5", + "@angular/compiler": ">=10.1.5", + "@angular/core": ">=10.1.5", + "@angular/forms": ">=10.1.5" + } + }, + "node_modules/ngx-cookie-service": { + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-16.0.2.tgz", + "integrity": "sha512-6u1111XD8wR/VqfE7GdN4F2Vg5QKYFwuRr47hGnqZ2If0XDYXOSSrGXPJWSfEnWUjFrWHcebEAjPZDYZ4dutKg==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "^16.0.0", + "@angular/core": "^16.0.0" + } + }, + "node_modules/ngx-drag-drop": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/ngx-drag-drop/-/ngx-drag-drop-16.1.0.tgz", + "integrity": "sha512-y2l9pJGD7OupsIRkCElN/JqTgzjg2V9ZxymKGQR7ZjjcdjaP1wKkiFWIgVEvLNtb8wgm10U+9tkGwLClGaHkQA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^16.0.0", + "@angular/core": "^16.0.0" + } + }, + "node_modules/ngx-image-cropper": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ngx-image-cropper/-/ngx-image-cropper-7.1.1.tgz", + "integrity": "sha512-7QCsxop8TtfEDr/rUXty0TuhSC6UlZcu+piGskVRucvhIZNMx7SYgBr0sdJ1M9rsAnBDUhvTSjn/UVMKb4w4YA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=13.0.0", + "@angular/core": ">=13.0.0" + } + }, + "node_modules/ngx-toastr": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-17.0.2.tgz", + "integrity": "sha512-KehiPx6bkbiUyJbabf0ZA04+ASumS8r/y4wPsUOMI9OrBvBcfq27UQmWuQKoVR8E+9y4Pq7eZkSg2kvxNvpxTA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0-0", + "@angular/core": ">=16.0.0-0", + "@angular/platform-browser": ">=16.0.0-0" + } + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", + "optional": true + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/npm-registry-fetch/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/numeral": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", + "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==", + "engines": { + "node": "*" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-path": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", + "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==", + "dev": true, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "devOptional": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "optional": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.0.0.tgz", + "integrity": "sha512-641nAmJS4k4iqpNUqfggqUBUMmlw0ZoM5VZKdQkV2e970Inn3Tk9kroCc1wpsYLD07vCwpys5iY0d3xI/9WkTg==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", + "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.2.0", + "jiti": "^1.18.2", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qrcode/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/qrcode/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/qrcode/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/ramda": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", + "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/read-package-json/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", + "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "dev": true, + "optional": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sigstore/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sigstore/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/sigstore/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/stackblur-canvas": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.6.0.tgz", + "integrity": "sha512-8S1aIA+UoF6erJYnglGPug6MaHYGo1Ot7h5fuXx4fUPvcvQfcdw2o/ppCse63+eZf8PPidSu4v1JnmEVtEDnpg==", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sweetalert2": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.9.0.tgz", + "integrity": "sha512-PA3qinKZMNGAhA+AUu2wU7yQOpeZCgOaYWRcg26f4cZN6f7M9iPBuobsxOhR9EHs7ihUIxT6vhAMiB4kcmk1SA==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/limonte" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/terser": { + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "optional": true, + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" + } + }, + "node_modules/tslint/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tslint/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tuf-js/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tuf-js/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz", + "integrity": "sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "optional": true, + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vanilla-colorful": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/vanilla-colorful/-/vanilla-colorful-0.7.2.tgz", + "integrity": "sha512-z2YZusTFC6KnLERx1cgoIRX2CjPRP0W75N+3CC6gbvdX5Ch47rZkEMGO2Xnf+IEmi3RiFLxS18gayMA27iU7Kg==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.7.tgz", + "integrity": "sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.26", + "rollup": "^3.25.2" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xlsx": { + "version": "0.19.3", + "resolved": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "integrity": "sha512-8IfgFctB7fkvqkTGF2MnrDrC6vzE28Wcc1aSbdDQ+4/WFtzfS73YuapbuaPZwGqpR2e0EeDMIrFOJubQVLWFNA==", + "license": "Apache-2.0", + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.3.tgz", + "integrity": "sha512-MKPbmZie6fASC/ps4dkmIhaT5eonHkEt6eAy80K42tAm0G2W+AahLJjbfi6X9NPdciOE9GRFTTM8u2IiF6O3ww==", + "dependencies": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/package.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/package.json new file mode 100644 index 0000000..6b8451f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/package.json @@ -0,0 +1,87 @@ +{ + "name": "angular-clarity", + "version": "16.0.4", + "subVersion": "2023.06.02-01", + "scripts": { + "ng": "ng", + "start": "node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng serve --port 4201 -o", + "start:https": "ng serve --port 4201 --ssl -o", + "build-prod": "node --max_old_space_size=64384 ./node_modules/@angular/cli/bin/ng build --prod ", + "build": "node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --base-href ./ --configuration production --aot --build-optimizer", + "test": "ng test", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "^16.0.4", + "@angular/cdk": "^16.2.4", + "@angular/common": "^16.0.4", + "@angular/compiler": "^16.0.4", + "@angular/core": "^16.0.4", + "@angular/forms": "^16.0.4", + "@angular/platform-browser": "^16.0.4", + "@angular/platform-browser-dynamic": "^16.0.4", + "@angular/router": "^16.0.4", + "@auth0/angular-jwt": "^5.1.2", + "@cds/core": "^6.9.0", + "@ckeditor/ckeditor5-angular": "^7.0.1", + "@ckeditor/ckeditor5-build-classic": "^40.0.0", + "@clr/angular": "^15.5.0", + "@clr/core": "^4.0.15", + "@clr/icons": "^13.0.2", + "@clr/ui": "^15.5.0", + "@ctrl/ngx-codemirror": "^7.0.0", + "@swimlane/ngx-charts": "^20.4.1", + "@webcomponents/custom-elements": "^1.6.0", + "@webcomponents/webcomponentsjs": "^2.8.0", + "angular-gridster2": "^16.0.0", + "angularx-qrcode": "^16.0.2", + "chart.js": "^4.4.0", + "dom-to-image": "^2.6.0", + "express": "^4.18.2", + "file-saver": "^2.0.5", + "highcharts": "^11.1.0", + "highcharts-angular": "^3.1.2", + "jquery": "^3.7.1", + "jspdf": "^2.5.1", + "jszip": "^3.10.1", + "lit-html": "^3.1.0", + "lodash": "^4.17.21", + "moment": "^2.29.4", + "ng-dynamic-component": "^10.1.1", + "ng2-charts": "^5.0.3", + "ng2-ckeditor": "^1.3.7", + "ng2-search-filter": "^0.5.1", + "ngx-captcha": "^13.0.0", + "ngx-chips": "^3.0.0", + "ngx-cookie-service": "^16.0.0", + "ngx-drag-drop": "^16.1.0", + "ngx-image-cropper": "^7.0.2", + "ngx-toastr": "^17.0.2", + "numeral": "^2.0.6", + "rxjs": "^7.8.1", + "sweetalert2": "^11.4.8", + "tslib": "^2.5.2", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.0.4", + "@angular/cli": "^16.0.4", + "@angular/compiler-cli": "^16.0.4", + "@types/jasmine": "~4.3.2", + "@types/jasminewd2": "~2.0.10", + "@types/node": "^20.2.5", + "jasmine-core": "~5.0.0", + "jasmine-spec-reporter": "~7.0.0", + "karma": "~6.4.2", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage-istanbul-reporter": "~3.0.3", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "^2.0.0", + "ts-node": "^10.9.1", + "tslint": "~6.1.3", + "typescript": "^5.1.0" + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app-config.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app-config.ts new file mode 100644 index 0000000..37bf97e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app-config.ts @@ -0,0 +1,42 @@ +import { Injectable } from '@angular/core'; +import{environment} from 'src/environments/environment'; +/** + * This is a singleton class + */ +@Injectable() +export class AppConfig { + //Provide all the Application Configs here + + public version: string = "1.0.0"; + public locale: string = "en-US"; + public currencyFormat = { style: "currency", currency: "USD" }; + public dateFormat = { year: 'numeric', month: 'short', day: 'numeric' }; +// port in enviroment + // API Related configs + public apiPort: string; // this.apiURL //9191 to pc used and 8080/billingback to jboss + public apiProtocol: string; + public apiHostName: string; + public baseApiPath: string; + public backendURL: string = environment.backendUrl; + + constructor() { + if (this.apiProtocol === undefined) { + this.apiProtocol = window.location.protocol; + } + if (this.apiHostName === undefined) { + this.apiHostName = window.location.hostname; + } + if (this.apiPort === undefined) { + this.apiPort = window.location.port; + } + if (this.apiHostName.includes("infomud") || this.apiHostName.includes("heroku")) { + this.baseApiPath = this.apiProtocol + "//" + this.apiHostName + "/"; + } + else { + this.baseApiPath = this.backendURL + "/"; + } + if (this.locale === undefined) { + this.locale = navigator.language; + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app-routing.module.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app-routing.module.ts new file mode 100644 index 0000000..16371b5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app-routing.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + + +const routes: Routes = [ + {path: '', redirectTo: 'login', pathMatch: 'full'} + +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.spec.ts new file mode 100644 index 0000000..30e49af --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.spec.ts @@ -0,0 +1,35 @@ +import { TestBed, async } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + RouterTestingModule + ], + declarations: [ + AppComponent + ], + }).compileComponents(); + })); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'angularclarity'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('angularclarity'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement; + expect(compiled.querySelector('.content span').textContent).toContain('angularclarity app is running!'); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.ts new file mode 100644 index 0000000..c90bac6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent { + title = 'angularclarity'; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.module.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.module.ts new file mode 100644 index 0000000..048f674 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/app.module.ts @@ -0,0 +1,79 @@ +import { ExcelService } from './services/excel.service'; +import { BrowserModule } from '@angular/platform-browser'; + +import { ToastrModule } from 'ngx-toastr'; + +import { AppRoutingModule } from './app-routing.module'; +import { AppComponent } from './app.component'; +import { ClarityModule } from '@clr/angular'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { HashLocationStrategy, LocationStrategy } from '@angular/common'; +import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { MainModule } from './modules/main/main.module'; +import { LoginModule } from './modules/login/login.module'; +import { MainService } from './services/main.service'; +import { AlertService } from './services/alert.service'; +import { HelperModule } from './pipes/helpers.module'; +import { LogoComponent } from './modules/logo/logo.component'; +import { AppConfig } from './app-config'; +import { JwtInterceptor } from './services/jwt.interceptor'; +import { UserInfoService } from './services/user-info.service'; +import { AuthGuard } from './services/auth_guard.service'; +import { LoginService } from './services/api/login.service'; +import { ApiRequestService } from './services/api/api-request.service'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import {CUSTOM_ELEMENTS_SCHEMA, NgModule } from "@angular/core"; +import { TranslateService } from './services/api/translate.service'; +import { RealnetMenuService } from './services/api/realnet-menu.service'; +import { UserProfileService } from './services/admin/user-profile.service'; +import { DragDropModule } from '@angular/cdk/drag-drop'; + +import '@clr/icons'; +import '@clr/icons/shapes/all-shapes'; + +@NgModule({ + declarations: [ + AppComponent, + LogoComponent, + + + ], + imports: [ + BrowserModule, + AppRoutingModule, + ClarityModule, + HttpClientModule, + BrowserAnimationsModule, + ToastrModule.forRoot(), + HelperModule, + MainModule, + LoginModule, + FormsModule, + ReactiveFormsModule, + DragDropModule, + + ], + providers: [ + MainService, + AlertService, + ExcelService, + UserInfoService, + LoginService, + ApiRequestService, + TranslateService, + RealnetMenuService, + UserProfileService, + // ProjectSetupService, + // TechnologyStackService, + // DropdownService, + // WireframeService, + // SuregitService, + AuthGuard, + AppConfig, + { provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true }, + { provide: LocationStrategy, useClass: HashLocationStrategy } // HashLocationStrategy to use # and remove # PathLocationStrategy + ], + bootstrap: [AppComponent], + schemas: [CUSTOM_ELEMENTS_SCHEMA ] +}) +export class AppModule { } diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/global.model.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/global.model.ts new file mode 100644 index 0000000..74382c6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/global.model.ts @@ -0,0 +1,169 @@ +export class field{ + _id?:any; + name?:any; + type?:any; + icon?:any; + toggle?:any; + required?:any; + regex?:any; + errorText?:any; + label?:any; + description?:any; + placeholder?:any; + className?:any; + subtype?:any; + handle?:any; + min?:number; + max?:number; + inline?:any; + value?:any; + size?:any; + values?:Array; + div_name?:any; + gridLine_name?:any; + children?: field[]; + tooltipmsg?:any; + maxcharacters?:any; + visibilty?:any; + duplicateVal?:any; + encryptData?:any; + personalHealthInfo?:any; + descriptionText?:any; + heightpx?:any; + showDescription?:boolean; + personalInfo?:boolean; + readOnly?:any; + sessionVar?:any; + allowedDays?:any; + allowedHrsFrom?:any; + allowedHrsTo?:any; + showSeconds?:boolean; + datePicker?:any; + alphabeticalOrdering?:boolean; + fieldLayout?:any; + otherChoice?:boolean; + dynamicList?:any; + iconType?:any; + target?:any; + defaultCamera?:any; + imgoption?:Array; + questions?:Array; + maxDuration?:any; + maxNo?:number; + decimalPlaces?:number; + currencyType?:any; + formatNo?:any; + providersData?:any; + apikey?:any; + expanded?:boolean; + files?:Array; + password?:any; + content?:any; + theme?:any; + norows?:number; + nocolumns?:number; + editordata?:any; +} +export class value{ + label?:any=""; + value?:any=""; +} +export class value1{ + label1?:any=""; + value1?:any=""; +} +export interface IProperty { + url?: string; + loading?: boolean; + itemsPerPage?: number; + total?: number; + p?: number; + sizeLimit?: number; + title?: string; + text?: string; + items?: any[]; + sub?: any; + isBlocked?: boolean; + isDeleted?: boolean; + isEmailVerified?: string; + successMsg?: string; + msg?: string; + userId?: string; + status?: number; + userPlaceholder?: string; + searchKey?: string; + fullName?: string; + email?: string; + countryCode?: string; + dialCode?: string; + phoneNumber?: string; + value?: Date; + data?: any; + name_es?: string; + name_en?: string; + countries?: any; + states?: any; + cities?: any; + countries1?: any; + states1?: any; + cities1?: any; + countries2?: any; + states2?: any; + cities2?: any; + localities?: any; + buildings?: any; + country_id?: string; + state_id?: string; + city_id?: string; + locality_id?: string; + building_id?: string; + countryCount?: number; + stateCount?: number; + cityCount?: number; + stateCityCount?: number; + localityCount?: number; + buildingCount?: number; + countriesAdd?: any; + statesAdd?: any; + citiesAdd?: any; + localitiesAdd?: any; + country_idAdd?: string; + state_idAdd?: string; + city_idAdd?: string; + locality_idAdd?: string; + countryCountAdd?: number; + stateCountAdd?: number; + cityCountAdd?: number; + localityCountAdd?: number; + successText?: string; + propertyTypes?: any; + propertyTypesCount?: number; + amenities?: any; + amenitiesCount?: number; + projectTypes?: any; + projectTypesCount?: number; + routeName?: string; + icon?: any; + userType?: string; + overlay?: any; + is_broker_seller_dev?: number; + is_buyer_renter?: number; + is_broker?: number; + is_data_collector?: number; + image?: any; + index?: number; + name?: string; + phone?: string; + type?: number; + property_id?: string; + banks?: any; + bankCount?: string; + flag?: number; + page?: number; + property_for?: any; + status_id?:any; + type_id?:any; + post_type?:any; + developer_id?:any; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/role.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/role.ts new file mode 100644 index 0000000..abf5370 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/role.ts @@ -0,0 +1,4 @@ +export enum Role { + // User = 'User', + Admin = 'Admin' +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/systemparameter.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/systemparameter.ts new file mode 100644 index 0000000..73e6b22 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/systemparameter.ts @@ -0,0 +1,30 @@ +export class Systemparameter{ + + + public schedulerTime: number; + public leaseTaxCode: String; + public vesselConfProcessLimit: number; + public rowToDisplay: any; + public linkToDisplay: any; + public rowToAdd: any; + public lovRowToDisplay:any; + public lovLinkToDisplay: any; + public oidserverName: any; + public oidBase: any; + public oidAdminUser: any; + public oidServerPort: any; + public userDefaultGroup: any; + public defaultDepartment: any; + public defaultPosition: any; + public singleCharge: any; + public firstDayOftheWeek:any; + public hourPerShift: any; + public cnBillingFrequency: any; + public billingDepartmentCode: any; + public basePriceList: any; + public nonContainerServiceOrder: any; + public ediMaeSchedulerONOFF: any; + public ediSchedulerONOFF: any; +public company_Display_Name:any; +public upload_Logo:any; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/user.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/user.ts new file mode 100644 index 0000000..15072a8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/user.ts @@ -0,0 +1,14 @@ +export class User { + public id: number; + public name: string; + public gender: string; + public dob: string; + public email: string; + public picture:Blob; + public location:string; + public address1:string; + public country:string; + public phone:number; + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/userdepartment.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/userdepartment.ts new file mode 100644 index 0000000..d53f135 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/userdepartment.ts @@ -0,0 +1,12 @@ +export class userdepartment{ + public departmentCode:String; + public active:String; + public description:String; + public createdOn:Date; + public createdBy:String; + public updatedOn:Date; + public updatedBy:String; + public id:number; + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/usergrpma.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/usergrpma.ts new file mode 100644 index 0000000..349ad24 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/usergrpma.ts @@ -0,0 +1,10 @@ +export class Usergrpmain { + public usrGrp: number; + public groupName:string; + public groupDesc:string; + public createby:string; + public createdate:Date; + public groupLevel:string; + public status:string; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/usermaintaince.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/usermaintaince.ts new file mode 100644 index 0000000..3d1d806 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/usermaintaince.ts @@ -0,0 +1,38 @@ +import { userdepartment } from "./userdepartment"; +import { userposition } from "./userposition"; + +export class Usermain { + public userId: number; + public changePassw:string; + public confirmPassword:string; + public createby:string; + public createdate:Date; + public customerId:number; + public customerNumer:String; + public departmentCode:string; + public departmentCodeString:string; + public email:string; + public firstLogin:String; + public fullName:String; + public langCode: String; + public notification:String; + public password1: String; + public password2: String; + public password3: String; + public password4: String; + public positionCodeString:String; + public pwdChangedCnt:string; + public shortName: string; + public status:string; + public updateby:string; + public updatedate:Date; + public username: string; + public userPassw: string; + public usrGrpId:number; + public title: string; + public expiryDate: Date; + public lastPwdChangedDate:Date; + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/userposition.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/userposition.ts new file mode 100644 index 0000000..7b36d9a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/admin/userposition.ts @@ -0,0 +1,9 @@ +export class userposition{ + public positionCode:String; + public active:String; + public description:String; + public createdOn:Date; + public createdBy:String; + public updatedOn:Date; + public updatedBy:String; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ActiveTechnology.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ActiveTechnology.ts new file mode 100644 index 0000000..fa99e85 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ActiveTechnology.ts @@ -0,0 +1,4 @@ +export interface ActiveTechnology { + id; +name; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/AdhocParam.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/AdhocParam.ts new file mode 100644 index 0000000..e25d168 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/AdhocParam.ts @@ -0,0 +1,13 @@ + + +export class AdhocParam{ + + + public id: number; + public table_allias_name: string; + public column_name: string; + public column_allias_name: string; + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Audit.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Audit.ts new file mode 100644 index 0000000..1a38432 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Audit.ts @@ -0,0 +1,9 @@ +export class Audit { + public accountId: number; + public createdAt: Date; + public createdBy: string; + public updatedAt: Date; + public updatedBy: string; + + +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Bcf_TechnologyStack.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Bcf_TechnologyStack.ts new file mode 100644 index 0000000..9c7537e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Bcf_TechnologyStack.ts @@ -0,0 +1,9 @@ +import { Audit } from "./Audit"; +export class Bcf_TechnologyStack extends Audit { + public id: number; + public tech_stack: string; + public tech_stack_key: string; + public tags: string; + public base_prj_file_name: string; + public active: boolean; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ColumnList.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ColumnList.ts new file mode 100644 index 0000000..a84c0a8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ColumnList.ts @@ -0,0 +1,4 @@ +export interface ColumnList { + // id: number; + table_name: string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/DateParam.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/DateParam.ts new file mode 100644 index 0000000..786ad6c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/DateParam.ts @@ -0,0 +1,11 @@ +export class DateParam{ + + + public date_id: number; + public col_table_alies_name_date: string; + public col_date_query: string; + public column_alias_date_query: string; + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/FileData.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/FileData.ts new file mode 100644 index 0000000..b7b379d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/FileData.ts @@ -0,0 +1,10 @@ +export interface FileData { + id: number; + text: string; + /* public id: number; + public text: string; */ + /* constructor(id: number, text: string) { + this.id = id; + this.text = text; + } */ +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/FileDetails.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/FileDetails.ts new file mode 100644 index 0000000..6eac3c4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/FileDetails.ts @@ -0,0 +1,4 @@ +export interface FileDetails { + id: number; + text: string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Module_Setup.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Module_Setup.ts new file mode 100644 index 0000000..ecc0fcf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Module_Setup.ts @@ -0,0 +1,14 @@ +import { Audit } from "./Audit"; +import { ProjectSetup } from "./Project_setup"; +import { Rn_Fb_Header } from "./Rn_Fb_Header"; + +export class ModuleSetup extends Audit { + public id: number; + public moduleName: string; + public description: string; + public modulePrefix: string; + public copyTo?: string; + public technologyStack: string; + public project: ProjectSetup; + public rn_fb_headers: Rn_Fb_Header[]; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Project_setup.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Project_setup.ts new file mode 100644 index 0000000..1173df2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Project_setup.ts @@ -0,0 +1,22 @@ +import { Audit } from "./Audit"; +import { ModuleSetup } from "./Module_Setup"; + +export class ProjectSetup extends Audit { + public id: number; + public projectName: string; + public description: string; + public copyTo?: string; + public technologyStack: string; + public techStackId: number; + public projectPrefix: string; + public dbName: string; + public dbUserName: string; + public dbPassword: string; + public portNumber: string; + public namespace: string; + public tags:string; + public category:string; + public accessibility:boolean; + public modules: ModuleSetup[]; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/RbColumns.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/RbColumns.ts new file mode 100644 index 0000000..13b372a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/RbColumns.ts @@ -0,0 +1,12 @@ +export class RbColumns{ + + + public id: number; + public column_name: string; + public functions: string; + public column_allias_name: string; + public table_allies_name: string; + public asc_desc: string; + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/RbTables.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/RbTables.ts new file mode 100644 index 0000000..5603a7e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/RbTables.ts @@ -0,0 +1,7 @@ +export class RbTables{ + public table_id: number; + public table_name: string; + public table_allias_name: string; + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ReportBuilder.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ReportBuilder.ts new file mode 100644 index 0000000..0c6ee59 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ReportBuilder.ts @@ -0,0 +1,8 @@ +export class ReportBuilder { + public report_id: number; +public report_name:string; +public description: string; +public report_tags: string; +public servicename:string; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ReportBuilderQuery.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ReportBuilderQuery.ts new file mode 100644 index 0000000..9064f25 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/ReportBuilderQuery.ts @@ -0,0 +1,4 @@ +export class ReportBuilderQuery { + public master_select: string; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Cff_ActionBuilder_Header.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Cff_ActionBuilder_Header.ts new file mode 100644 index 0000000..6654bae --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Cff_ActionBuilder_Header.ts @@ -0,0 +1,14 @@ +import { Audit } from "./Audit"; +import { Rn_Cff_ActionBuilder_Line } from "./Rn_Cff_ActionBuilder_Line"; +import { Rn_Fb_Header } from "./Rn_Fb_Header"; + +export class Rn_Cff_ActionBuilder_Header extends Audit { + public id: number; + public rn_fb_header: Rn_Fb_Header; + public technologyStack: string; + public controllerName: string; + public methodName: string; + public actionName: string; + public fileLocation: string; + public actionBuilderLines: Rn_Cff_ActionBuilder_Line[]; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Cff_ActionBuilder_Line.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Cff_ActionBuilder_Line.ts new file mode 100644 index 0000000..7e9be6b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Cff_ActionBuilder_Line.ts @@ -0,0 +1,18 @@ +import { Audit } from "./Audit"; +import { Rn_Cff_ActionBuilder_Header } from "./Rn_Cff_ActionBuilder_Header"; + +export class Rn_Cff_ActionBuilder_Line extends Audit { + public id: number; + public actionType1: string; + public actionType2: string; + public dataType: string; + public variableName: string; + public assignment: string; + public message: string; + public conditions: string; + public forward: string; + public equation: string; + public seq: number; + public action: string; + public rn_cff_actionBuilderHeader: Rn_Cff_ActionBuilder_Header; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Fb_Header.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Fb_Header.ts new file mode 100644 index 0000000..2423279 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Fb_Header.ts @@ -0,0 +1,22 @@ +import { Audit } from "./Audit"; +import { Rn_Fb_Lines } from "./Rn_Fb_Lines"; + +export class Rn_Fb_Header extends Audit { + public id: number; + public techStack: string; + public objectType: string; + public subObjectType: string; + public uiName: string; + public formType: string; + public tableName: string; + public lineTableName: string; + public multilineTableName: string; + public formCode: string; + public build: boolean; + public updated: boolean; + public menuName: string; + public headerName: string; + public convertedTableName: string; + public rn_fb_lines: Rn_Fb_Lines[]; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Fb_Lines.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Fb_Lines.ts new file mode 100644 index 0000000..da08a69 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Fb_Lines.ts @@ -0,0 +1,49 @@ +import { Audit } from "./Audit"; + +export class Rn_Fb_Lines extends Audit { + public id: number; + public fieldName: string; + public mapping: string; + public dataType: string; + public formCode: string; + public key1: string; + public type1: string; + public mandatory: boolean; + public hidden: boolean; + public readonly: boolean; + public dependent: boolean; + public dependent_on: string; + public dependent_sp: string; + public dependent_sp_param: string; + public validation_1: boolean; + public val_type: string; + public val_sp: string; + public val_sp_param: string; + public sequence: boolean; + public seq_name: string; + public seq_sp: string; + public seq_sp_param: string; + public default_1: boolean; + public default_type: string; + public default_value: string; + public default_sp: string; + public default_sp_param: string; + public calculated_field: boolean; + public cal_sp: string; + public cal_sp_param: string; + public add_to_grid: boolean; + public sp_for_autocomplete: boolean; + public sp_name_for_autocomplete: string; + public sp_for_dropdown: boolean; + public sp_name_for_dropdown: string; + public type_field: string; + public methodName: string; + public seq: number; + public form_type: string; + public section_num: number; + public button_num: string; + public type2: string; + public table_name?: string; + public line_table_name: string; + public line_table_no: number; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Main_Menu.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Main_Menu.ts new file mode 100644 index 0000000..cd002e0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Main_Menu.ts @@ -0,0 +1,17 @@ +import { Audit } from "./Audit"; +import { Rn_Sub_Menu } from './Rn_Sub_Menu'; + +export class Rn_Main_Menu extends Audit { + public menuItemId: number; + public menuItemDesc: string; + public mainMenuActionName : string; + public mainMenuIconName: string; + public menu_type: string; + public mcreate:String; + public mdelete:String; + public medit:String; + public menuId:Number; + public mquery:String; + public mvisible:String; + public subMenus: Rn_Sub_Menu[]; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Sub_Menu.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Sub_Menu.ts new file mode 100644 index 0000000..bcbc9b2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/Rn_Sub_Menu.ts @@ -0,0 +1,16 @@ +import { Audit } from "./Audit"; + +export class Rn_Sub_Menu extends Audit { + public menuItemId: number; + public menuItemDesc: string; + public mainMenuActionName : string; + public mainMenuIconName: string; + public menu_type: string; + public mcreate:String; + public mdelete:String; + public medit:String; + public menuId:Number; + public mquery:String; + public mvisible:String; + //public menu_icon: string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/StdParam.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/StdParam.ts new file mode 100644 index 0000000..015c577 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/StdParam.ts @@ -0,0 +1,12 @@ +export class StdParam{ + + + public std_id: number; + public col_table_alies_name_std_para: string; + public col_std_para_query: string; + public field_type: string; + public sp_for_dd: string; + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/WhereParam.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/WhereParam.ts new file mode 100644 index 0000000..c98b3be --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/WhereParam.ts @@ -0,0 +1,14 @@ +export class WhereParam{ + + + public where_id: number; + public explecity: string; + public where_coloumn1_tbl_alias_name: string; + public where_coloumn: string; + public where_condition: string; + public switch_control: string; + public where_coloumn2_tbl_alias_name:string; + public where_coloumn2:string; + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/WireFrame.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/WireFrame.ts new file mode 100644 index 0000000..c1dce53 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/WireFrame.ts @@ -0,0 +1,29 @@ +export interface WireFrame { + header: Header; + line: Line; +} +export interface Header { +section: Section[]; +} +export interface Line { +section: Section[]; +} +export interface Section { +id: number; +fieldName: string; +mapping: string; +dataType: string; +type_field: string; +section_num: number; +fields: Field[]; +} + +export interface Field { +id: number; +fieldName: string; +mapping: string; +dataType: string; +type_field: string; +section_num: number; +seq: number; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/dashboard.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/dashboard.ts new file mode 100644 index 0000000..36e89e4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/dashboard.ts @@ -0,0 +1,114 @@ +export interface WidgetModel { + name: string; + identifier: string; +} +export interface SubmenuItem { + name: string; + identifier: string; +} + +export interface WidgetModel1 { + name: string; + submenu?: SubmenuItem[]; + showSubmenu?: boolean; // Optional property to control submenu visibility + identifier: string; +} + +export interface DashboardContentModel { + cols: number; + rows: number; + y: number; + x: number; + chartid: number; + component?: any; + name: string; + type?:string; +} + +export interface DashboardModel { + id: number; + username: string; + dashboard: Array; +} + + +export interface DashboardContentModel2 { + cols: number; + rows: number; + y: number; + x: number; + chartid: number; + charttitle?: string; + component?: any; + name: string; + type?: string; + values?:Array; + imgoption?:Array; + keyValue?:string; + fieldtext?:any; + dropdown_type?:string; + imageURL?:string; +} + +export interface DashboardModel2 { + id: number; + username: string; + dashboard: Array; +} + +export class value{ + label?:any=""; + value?:any=""; +} +export class value1{ + label1?:any=""; + value1?:any=""; +} + + +export const WidgetsMock: WidgetModel[] = [ + { + name: 'Radar Chart', + identifier: 'radar_chart' + }, + { + name: 'Doughnut Chart', + identifier: 'doughnut_chart' + }, + { + name: 'Line Chart', + identifier: 'line_chart' + }, + { + name: 'Bar Chart', + identifier: 'bar_chart' + }, + { + name: 'Pie Chart', + identifier: 'pie_chart' + }, + { + name: 'Polar Area Chart', + identifier: 'polar_area_chart' + }, + { + name: 'Bubble Chart', + identifier: 'bubble_chart' + }, + { + name: 'Scatter Chart', + identifier: 'scatter_chart' + }, + { + name: 'Dynamic Chart', + identifier: 'dynamic_chart' + }, + { + name: 'Financial Chart', + identifier: 'financial_chart' + }, + { + name: 'To Do', + identifier: 'to_do_chart' + } +] diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/gitfile.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/gitfile.ts new file mode 100644 index 0000000..1279faf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/gitfile.ts @@ -0,0 +1,9 @@ +export class Gitfile { + + public content :String; + public url :String; + public sha:String; + public encoding:String; + public size:String; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/rptBuilder.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/rptBuilder.ts new file mode 100644 index 0000000..d55ca79 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/rptBuilder.ts @@ -0,0 +1,14 @@ +export class RptBuilder{ + + public id:number; + public name; + public folder: string; + public query: string; + public date_param_flag:boolean; + public adhoc_param_flag:boolean; + public adhoc_param_string: string; + public std_param_json: string; + + + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/suregit.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/suregit.ts new file mode 100644 index 0000000..5e721a6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/suregit.ts @@ -0,0 +1,9 @@ +export class Suregit { + public path :String; + public sha :String; + public url :String; + public type:Number; + public mode:String; + public size:String; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/surename.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/surename.ts new file mode 100644 index 0000000..e57af9c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/surename.ts @@ -0,0 +1,9 @@ +export class Surename { + public id :number; + public message :String; + public name :String; + public timestamp:Number; + public email:String; + public username:String; +public sha:any; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/surestar.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/surestar.ts new file mode 100644 index 0000000..42eaf13 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/surestar.ts @@ -0,0 +1,9 @@ +export class Surestar { + public id :number; + public email :String; + public watchers_count :number; + public forks_count:Number; + public stars_count:number; + public size:String; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/webpagebuilder.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/webpagebuilder.ts new file mode 100644 index 0000000..12c47b1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/builder/webpagebuilder.ts @@ -0,0 +1,55 @@ +export interface WidgetModel { + name: string; + identifier: string; +} + +export interface DashboardContentModel { + cols: number; + rows: number; + y: number; + x: number; + chartid: number; + component?: any; + name: string; +} + +export interface DashboardModel { + id: number; + username: string; + dashboard: Array; +} + +export const WidgetsMock: WidgetModel[] = [ + // { + // name: 'Text field', + // identifier: 'text_field' + // }, + { + name: 'Text area', + identifier: 'text_area' + }, + { + name: 'Table field', + identifier: 'table_field' + }, + // { + // name: 'Background Color', + // identifier: 'background_color' + // }, + // { + // name: 'Box field', + // identifier: 'box_field' + // }, + { + name: 'Image field', + identifier: 'img_field' + }, + { + name: 'Line field', + identifier: 'line_field' + }, + { + name: 'QR code', + identifier: 'qr_code' + } +] diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Exception_Rule_Library .ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Exception_Rule_Library .ts new file mode 100644 index 0000000..bfa5d5d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Exception_Rule_Library .ts @@ -0,0 +1,10 @@ +import { Audit } from "../builder/Audit"; + +export class Bcf_Exception_Rule_Library extends Audit { + id: number; + tech_stack: string; + object_type: string; + sub_object_type: string; + object_name_variable: string; + object_name_dynamic_string: string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Extractor.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Extractor.ts new file mode 100644 index 0000000..b86c5fe --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Extractor.ts @@ -0,0 +1,17 @@ +import { Audit } from "../builder/Audit"; +import { Bcf_Extractor_Params } from "./Bcf_Extractor_Params"; + +export class Bcf_Extractor extends Audit { + id: number; + tech_stack: string; + tech_stack_key: string; + object_type: string; + sub_object_type: string; + form_type_name: string; + std_wf_name: string; + icon_file_name: string; + sample_file_name: string; + extractor_stage: string; + rn_bcf_extractor_Params: Bcf_Extractor_Params[]; +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Extractor_Params.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Extractor_Params.ts new file mode 100644 index 0000000..c2d20b2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Extractor_Params.ts @@ -0,0 +1,20 @@ +import { Audit } from "../builder/Audit"; + +export class Bcf_Extractor_Params extends Audit { + id: number; + tech_stack: string; + object_type: string; + sub_object_type: string; + file_code: any; + name_string: string; + address_string: string; + moved_address_string: string; + reference_address_string: string; + description: string; + file_name_var: string; + file_name_dynamic_string: string; + is_extraction_enabled: boolean; + is_creation_enabled: boolean; + total_project_path_dynamic_string:string; +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Rule_Library.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Rule_Library.ts new file mode 100644 index 0000000..44428f8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Bcf_Rule_Library.ts @@ -0,0 +1,16 @@ +import { Audit } from "../builder/Audit"; + +export class Bcf_Rule_Library extends Audit { + id: number; + group_id: number; + rule_name: string; + tech_stack: string; + object_type: string; + sub_object_type: string; + file_code: string; + rule_type: string; + identifier_start_string: string; + identifier_end_string: string; + replacement_string: string; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiDashHeader.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiDashHeader.ts new file mode 100644 index 0000000..f1dc31b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiDashHeader.ts @@ -0,0 +1,13 @@ +import { BiDashLine } from './BiDashLine'; + +export class BiDashHeader{ + + + public header_id: number; + public dashboard_name: string; + public components: BiDashLine[]; + + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiDashLine.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiDashLine.ts new file mode 100644 index 0000000..2e49b8f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiDashLine.ts @@ -0,0 +1,17 @@ +export class BiDashLine{ + + + + public section_type: string; + public widgets1: string; + public widgets2: string; + public widgets3: string; + public widgets4: string; + public widgets5: string; + public widgets6: string; + + + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiWidget.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiWidget.ts new file mode 100644 index 0000000..52f1b7b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/BiWidget.ts @@ -0,0 +1,10 @@ +export class BiWidget { + public id: number; +public widget_name: string; +public widget_description: string; + public chart_type: string; + public sql_query:string; + public label:string; + public color_scheme:string; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/DynamicForm.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/DynamicForm.ts new file mode 100644 index 0000000..6861694 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/DynamicForm.ts @@ -0,0 +1,37 @@ +//import { Audit } from "./Audit"; +import { Audit } from "../builder/Audit"; +export class DynamicForm extends Audit { + public id: number; + public form_id: number; + public form_version: number; + public comp1: string; + public comp2: string; + public comp3: string; + public comp4: string; + public comp5: string; + public comp6: string; + public comp7: string; + public comp8: string; + public comp9: string; + public comp10: string; + public comp11: string; + public comp12: string; + public comp13: string; + public comp14: string; + public comp15: string; + public comp16: string; + public comp17: string; + public comp18: string; + public comp19: string; + public comp20: string; + public comp21: string; + public comp22: string; + public comp23: string; + public comp24: string; + public comp25: string; + public comp_l26: string; + public comp_l27: string; + public comp_l28: string; + public comp_l29: string; + public comp_l30: string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/ExtensionField.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/ExtensionField.ts new file mode 100644 index 0000000..3becca0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/ExtensionField.ts @@ -0,0 +1,47 @@ +import { Audit } from "../builder/Audit"; + +export class ExtensionField extends Audit { + public id: number; + public field_name: string; + public mapping: string; + public data_type: string; + public form_code: string; + public type: string; + public isActive: boolean; + + /* public mandatory: string; + public hidden: string; + public readonly: string; + public dependent: string; + public dependent_on: string; + public dependent_sp: string; + public dependent_sp_param: string; + public validation_1: string; + public val_type: string; + public val_sp: string; + public val_sp_param: string; + public sequence: string; + public seq_name: string; + public seq_sp: string; + public seq_sp_param: string; + public default1: string; + public default_type: string; + public default_value: string; + public default_sp: string; + public default_sp_param: string; + public calculated_field: string; + public cal_sp: string; + public cal_sp_param: string; + public add_to_grid: string; + public attr1: string; + public attr2: string; + public attr3: string; + public drop_value: string; + public dropdown: string; + public sp_name: string; + public ext_dd_id: string; + public sp_name_forautocomplete: string; + public ext_dependent_id: string; + public radio: string; + public radio_option: string; */ +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Mapping.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Mapping.ts new file mode 100644 index 0000000..385fdd6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Mapping.ts @@ -0,0 +1,4 @@ +export interface Mapping { + label: string; + value: string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Rn_Forms_Component_Setup.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Rn_Forms_Component_Setup.ts new file mode 100644 index 0000000..41378c8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Rn_Forms_Component_Setup.ts @@ -0,0 +1,12 @@ +import { Audit } from "../builder/Audit"; +export class Rn_Forms_Component_Setup extends Audit { + public component_id: number; + public label: string; + public type: string; + public mapping: string; + public mandatory: string; + public readonly: string; + public drop_values: string; + public sp: string; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Rn_Forms_Setup.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Rn_Forms_Setup.ts new file mode 100644 index 0000000..872efee --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Rn_Forms_Setup.ts @@ -0,0 +1,11 @@ +import { Rn_Forms_Component_Setup } from "./Rn_Forms_Component_Setup"; +import { Audit } from "../builder/Audit"; +export class Rn_Forms_Setup extends Audit { + public form_id: number; + public form_name: string; + public form_desc: string; + public related_to: string; + public page_event: string; + public button_caption: string; + public components: Rn_Forms_Component_Setup[]; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/RuleCopy.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/RuleCopy.ts new file mode 100644 index 0000000..0b905a4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/RuleCopy.ts @@ -0,0 +1,20 @@ +export class RuleCopy { + public from_tech_stack: string; +public from_object_type: string; +public from_sub_object_type: string; +public to_tech_stack: string; +public to_object_type: string; +public to_sub_object_type: string; + +} + +export interface Rule { + tech_stack: string; + object_type: string; + sub_object_type: string; + version: string; + replacement_string: string; + keyword: string; + priority: number; + service: string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Studentadd.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Studentadd.ts new file mode 100644 index 0000000..25927d4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/Studentadd.ts @@ -0,0 +1,10 @@ + + +export class student { + public id: number; + public wf_id:number; + public current_json: string; + public status: string; + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/TableList.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/TableList.ts new file mode 100644 index 0000000..8f66129 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/TableList.ts @@ -0,0 +1,4 @@ +export interface TableList { + // id: number; + table_name: string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/ValidationError.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/ValidationError.ts new file mode 100644 index 0000000..a72bfd6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/ValidationError.ts @@ -0,0 +1,4 @@ +export class ValidationError { + field: any; + message: any; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/book.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/book.ts new file mode 100644 index 0000000..3f9f0de --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/book.ts @@ -0,0 +1,10 @@ +export class book { + public id: number; + public booktype: string; + public bookname: string; + public price: number; + public writer: string; + public code:number; + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/department.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/department.ts new file mode 100644 index 0000000..5da15cf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/department.ts @@ -0,0 +1,10 @@ +export class Department { + public id: number; + public department_code: string; + public description: string; + public active: string; + public created_by:string; + public created_on:string; + public updated_by:string; + public updated_on:string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/health_checkup.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/health_checkup.ts new file mode 100644 index 0000000..6cff663 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/health_checkup.ts @@ -0,0 +1,10 @@ +export class HealthCheckup { + public id: number; + public ip: string; + public port: number; + public serviceName: string; + public createProject: boolean; + public buildProject: boolean; + public createDeployment: boolean; + public deployApp: boolean; +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/play.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/play.ts new file mode 100644 index 0000000..3c5b927 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/play.ts @@ -0,0 +1,9 @@ +export class College { + public studentid: number; + public wf_instance_id:number; + public studentname: string; + public department: string; + public joiningDate: string; + public phone: number; + public emailId:string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/table-setup.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/table-setup.ts new file mode 100644 index 0000000..8f66129 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/table-setup.ts @@ -0,0 +1,4 @@ +export interface TableList { + // id: number; + table_name: string; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/university.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/university.ts new file mode 100644 index 0000000..16e9a12 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/models/fnd/university.ts @@ -0,0 +1,11 @@ +import {book} from '../../models/fnd/book'; + +export class university { + public id: number; + public name: string; + public email: string; + public subject: string; + public phone: number; + public books: book[]; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.css new file mode 100644 index 0000000..1d2e597 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.css @@ -0,0 +1,45 @@ +.clr-input { + color: #212529; + padding: 0.75rem 0.75rem; + margin-top: 10px; + margin-bottom: 10px; +} + +input[type=text], [type=password], [type=number], [type=email], [type=date], textarea { + width: 80%; + padding: 15px 15px; + background-color: rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.eye { + position: absolute; +} + +#hide1 { + display: none; +} + +.container { + align-content: center; +} + +.center { + width: auto; + margin: 0 auto; +} + +.required-field, .error_mess { + color: red; +} + +select { + margin: 15px 0px; + width: 80%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +}/*# sourceMappingURL=about-work.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.css.map new file mode 100644 index 0000000..f40c4d1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["about-work.component.scss","about-work.component.css"],"names":[],"mappings":"AAAA;EACE,cAAA;EAGA,wBAAA;EACA,gBAAA;EACA,mBAAA;ACDF;;ADGA;EACE,UAAA;EACA,kBAAA;EACA,oCAAA;EAEA,qBAAA;EACA,sBAAA;EACA,kBAAA;EACA,sBAAA;ACDF;;ADGA;EACE,kBAAA;ACAF;;ADGA;EACE,aAAA;ACAF;;ADGA;EACE,qBAAA;ACAF;;ADGA;EACE,WAAA;EACA,cAAA;ACAF;;ADGA;EACE,UAAA;ACAF;;ADGA;EACE,gBAAA;EACA,UAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACAF","file":"about-work.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.html new file mode 100644 index 0000000..5faf200 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.html @@ -0,0 +1,261 @@ + + + + +

+

Welcome to cloudnsure!

+
Tell Us More About You
+
Tell Us About Your Work!
+ +
+
+
+
+ + +
+
*This field is Required
+
+
+
+
+ + +
+
*This field is Required
+
+
+
+
+ + +
+
*This field is Required
+
*Number must be 10 digit.
+
*Invalid mobile number
+
+
+
+
+ + +
+
*This field is Required
+
+
+
+
+ + +
+
*This field is Required
+
+
+
+
+ + + +
+
*This field is Required
+
*Password must be 6 characters or longer.
+
+
+
+
+ + +
+
*This field is Required
+
* Password and Confirm Password must be match.
+
+
+
+
+ +
+ +
+

Wrong account? Log in instead.

+
+
+
+ + +
+
+ + +
+
*This field is Required
+
+
+
+
+ + +
+
*This field is Required
+
+
+
+
+ + +
+
*This field is Required
+
+
+ + + + + + + +
+
+ + +
+
*This field is Required
+
+
+ + +
+
+ + +
+
*This field is Required
+
+
+
+
+ + +
+
*This field is Required
+
+
+
+
+ + +
+
*This field is Required
+
+
+
+
+ + +
+
*This field is Required
+
+
+
+
+ + +
+
*This field is Required
+
+
+ + + +
+
+ +
+ +
+

Wrong account? Log in instead.

+
+ + +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.scss new file mode 100644 index 0000000..a3a8aee --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.scss @@ -0,0 +1,122 @@ +// .clr-input { +// color: #212529; +// // border: 1px solid #ced4da; +// // border-radius: 0.25rem; +// padding: 0.75rem 0.75rem; +// margin-top: 10px; +// margin-bottom: 10px; +// } +// input[type=text],[type=password],[type=number],[type=email],[type=date],textarea { +// width: 80%; +// padding: 15px 15px; +// background-color:rgb(255, 255, 255); +// // margin: 8px 0; +// display: inline-block; +// border: 1px solid #ccc; +// border-radius: 4px; +// box-sizing: border-box; +// } +// .eye { +// position: absolute; +// } + +// #hide1 { +// display: none; +// } + +// .container { +// align-content: center; +// } + +// .center { +// width: auto; +// margin: 0 auto; +// } + +.required-field,.error_mess{ + color:indianred; + font-weight: bold; + + } + // select{ + // margin:15px 0px; + // width: 80%; + // padding: 5px 5px; + // border: 1px solid #ccc; + // border-radius: 4px; + // } + + + + + + + $background: #f5f6fa; + $text: #9c9c9c; + $input-bg-color: #fff; + $input-text-color: #a3a3a3; + $button-bg-color: #7f8ff4; + $button-text-color: #fff; + $google-button-bg-color: #7f8ff4; + $linkedin-button-bg-color: #4b76eb; + + + :root { + background: $background; + color: $text; + font: 1rem "PT Sans", sans-serif; + } + + //** helper + .display_msg { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + .form { + &__field { + width: 360px; + padding: 7px 9px; + margin: 0 12px; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + } + + .btn { + display: inline-block; + background: transparent; + color: inherit; + font: inherit; + border: 0; + outline: 0; + padding: 0; + transition: all 200ms ease-in; + cursor: pointer; + + &--primary { + background: $button-bg-color; + color: $button-text-color; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + width: 100%; + + &:hover { + background: darken($button-bg-color, 4%); + } + + &:active { + background: $button-bg-color; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } + } + // form { + // margin-left: 8%; + // } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.spec.ts new file mode 100644 index 0000000..fcd9bd1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AboutWorkComponent } from './about-work.component'; + +describe('AboutWorkComponent', () => { + let component: AboutWorkComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AboutWorkComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AboutWorkComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.ts new file mode 100644 index 0000000..953b3b6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/about-work.component.ts @@ -0,0 +1,301 @@ +import {Component, OnInit} from '@angular/core'; +import {AbstractControl, FormBuilder, FormControl, FormGroup, ValidationErrors, Validators} from '@angular/forms'; +import {ActivatedRoute, Router} from '@angular/router'; +import { UserProfileService } from 'src/app/services/admin/user-profile.service'; +import { UserRegistrationService } from 'src/app/services/admin/user-registration.service'; +import { environment } from 'src/environments/environment'; +import { CustomerService } from './customer.service'; +import { ToastrService } from 'ngx-toastr'; + +@Component({ + selector: 'app-about-work', + templateUrl: './about-work.component.html', + styleUrls: ['./about-work.component.scss'] +}) + + + +export class AboutWorkComponent implements OnInit { + + // LoginUrl = environment.portalurl; + public entryForm: FormGroup; + public custentryForm: FormGroup; // user + public customerentryForm: FormGroup; + aboutdata; + id: number; + checknumberId: number; + data1: boolean; + name:string; + email: string; + submitted = false; + custsubmitted = false; + constructor( + private router: Router, + private route: ActivatedRoute, + private userRegistration: UserRegistrationService, + private _fb: FormBuilder, + private userprofile: UserProfileService, + private customerservice: CustomerService, + private toastr: ToastrService + ) { + } + companyid = 1; + ngOnInit(): void { + this.route.queryParams.subscribe(params => { + this.email = params['email']; + console.log(this.email) + }); + this.id = this.route.snapshot.params['id']; + this.checknumberId = this.route.snapshot.params['checknumberId']; + this.name = this.userRegistration.getStoredName(); + console.log(this.id, this.checknumberId); + this.userRegistration.removeStoredName(); + + // this.data1 = this.route.snapshot.data['data1']; + // if (this.id >= 0) { + // this.onCheck(); + + // } + // else { + // this.router.navigate(['../about-work']); + // } + + + this.onCheck(); + // this.email = this.userRegistration.getStoredEmail(); + + this.custentryForm = this._fb.group({ + first_name: [null, [Validators.required]], + last_name:[null, [Validators.required]], + mob_no:[null,[Validators.required,Validators.pattern('^[0-9]{10}$')]], + email:[this.email], + usrGrpId:[41], + new_password: [null, [Validators.required,Validators.minLength(6),Validators.maxLength(40)]], + confirm_password: [null, [Validators.required]], + account_id:[this.companyid], + + date_of_birth:[null, [Validators.required]], + gender:[null,Validators.required] + + }, { + validator: ConfirmedValidator('new_password', 'confirm_password') + }); + + + this.entryForm = this._fb.group({ + companyName:[null, [Validators.required]], + pancard:[null,[Validators.required]], + workspace:[null,[Validators.required]], + email: [this.email,[Validators.required,Validators.email]], + gstNumber:[null,[Validators.required]], + mobile: [this.custentryForm.value.mob_no, [Validators.pattern('^[0-9]{10}$')]], + + country:[null,[Validators.required]], + state:[null,[Validators.required]], + city:[null], + street_address:[null], + street_address2:[null], + + }, { + }); + + this.customerentryForm = this._fb.group({ + first_name: [null], + last_name:[null], + date_of_birth:[null], + gender:[null], + companyId:[null], + time_zone:[null,], + gst_state:[null], + email:[null], + entity_name:[this.companyid], + + }); + } + + companyForm:boolean = false; + oncustSubmit(){ + console.log(this.custentryForm.value); + // this.custentryForm.value.entity_name = this.companyid; + if (this.custentryForm.invalid) { + this.custsubmitted = true; + return; + }else{ + // this.companyForm = true; + // this.oncustContinue(); + this.onContinue(); + } + + } + selectedFile; + oncustContinue() { + + + + console.log(this.custentryForm.value); + + this.customerservice.saveCustomer(this.custentryForm.value, this.selectedFile).subscribe((data => { + console.log(data); + console.log(data.id, "User id"); + console.log("Roles", data.role); + console.log(data.checknumberId, "checknumber"); + this.aboutdata = data; + if (data.role == "USER") { + this.router.navigate(["../login/"]); + // window.location.href = `${this.LoginUrl}/#/login`; + } else { + this.router.navigate(["../pricing/" + data.id]); + } + + })) + } + + + +userId; + +onSubmit(){ + this.entryForm.value.email = this.email + if (this.entryForm.invalid) { + this.submitted = true; + return; + }else{ + this.onContinue(); + } + +} + onContinue() { + + + // this.entryForm.value.mobile = this.custentryForm.value.mob_no; + console.log(this.custentryForm.value); + + // this.userprofile.addUserinSignUP(this.entryForm.value).subscribe(data => { + // console.log(data); + // this.companyid = data.account_id; + // console.log(this.companyid, "company id"); + // this.aboutdata = data; + // this.custentryForm.value.account_id = data?.account_id + // // this.custentryForm.value.new_password = + // console.log(this.custentryForm.value); + this.userprofile.adduserData(this.custentryForm.value).subscribe(cdata => { + console.log(cdata); + this.userId = cdata.userId; + + if (cdata) { + this.toastr.success("Registrated Successfully"); + this.router.navigate(["../login/"]); + } else { + this.router.navigate(["../login/"]); + } + // this.customerentryForm.get('companyId').setValue(this.companyid); + // this.customerentryForm.get('gst_state').setValue(this.entryForm.value.state); + // this.customerentryForm.get('entity_name').setValue(this.entryForm.value.companyName); + // this.customerentryForm.get('first_name').setValue(this.custentryForm.value.first_name); + // this.customerentryForm.get('last_name').setValue(this.custentryForm.value.last_name); + // this.customerentryForm.get('date_of_birth').setValue(this.custentryForm.value.date_of_birth); + // this.customerentryForm.get('gender').setValue(this.custentryForm.value.gender); + // this.customerentryForm.get('email').setValue(this.email); + + + // this.customerservice.saveCustomer(this.customerentryForm.value, this.selectedFile).subscribe(data => { + // console.log(data); + // console.log(data.id, "User id"); + // this.aboutdata = data; + // if (data.status >= 200 && data.status <= 299) { + // console.log(data?.body) + // this.router.navigate(["../pricing/" + this.companyid +"/" +this.userId]); + // } + // }) + },(error)=>{ + console.log(error); + this.toastr.error(error?.error.message); + }) + // }) + } + + + + + + + + + onCheck() { + + this.userprofile.getUser(this.id, this.checknumberId).subscribe((data => { + // console.log(data.userId, "User id"); + console.log("data", data.email); + console.log(data); + this.data1 = data; + this.email = data.email; + this.name=data.fullName; + (this.entryForm.controls['email']).setValue(data.email); + (this.entryForm.controls['name']).setValue(data.fullName); + console.log(this.name) + + })) + + + } + + + onCountryChange(event) { + console.log(event.dialCode); + console.log(event.name); + console.log(event.iso2); + } + + back() { + this.router.navigate(["../../all"], {relativeTo: this.route}); + } + + + newpHide: boolean = true; + newIcon: string = "eye"; + newShapeChanger() { + this.newpHide = !this.newpHide; + if(this.newpHide){ + this.newIcon = 'eye' + } else { + this.newIcon = 'eye-hide' + } + } + + + cnewpHide: boolean = true; + cnewIcon: string = "eye"; + cnewShapeChanger() { + this.cnewpHide = !this.cnewpHide; + if(this.cnewpHide){ + this.cnewIcon = 'eye' + } else { + this.cnewIcon = 'eye-hide' + } + } + +} +// export function passwordMatchValidator(control: AbstractControl): ValidationErrors | null { +// const password = control.get('password'); +// const confirmPassword = control.get('confirmPassword'); + +// if (password.value !== confirmPassword.value) { +// return { passwordMismatch: true }; +// } + +// return null; +// } +export function ConfirmedValidator(controlName: string, matchingControlName: string){ + return (formGroup: FormGroup) => { + const control = formGroup.controls[controlName]; + const matchingControl = formGroup.controls[matchingControlName]; + if (matchingControl.errors && !matchingControl.errors.confirmedValidator) { + return; + } + if (control.value !== matchingControl.value) { + matchingControl.setErrors({ confirmedValidator: true }); + } else { + matchingControl.setErrors(null); + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/customer.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/customer.service.ts new file mode 100644 index 0000000..a0db265 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/about-work/customer.service.ts @@ -0,0 +1,152 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from 'src/app/services/api/api-request.service'; + +@Injectable({ + providedIn: 'root' +}) +export class CustomerService { + + constructor(private apiRequest: ApiRequestService) { } + + saveCustomer(data: any, file?: any): Observable { + const url = `token/Customer_master/Customer_master`; + const formData = new FormData(); + formData.append('body', JSON.stringify(data)); + formData.append('file', file); + + return this.apiRequest.postFormData(url, formData); + } + + updateCustomer(data: any, file: any,id: number): Observable { + const url = `token/Customer_master/Customer_master/${id}`; + + const formData = new FormData(); + formData.append('body', JSON.stringify(data)); + formData.append('file', file); + + return this.apiRequest.postFormData(url, formData); + } + + getAllCustomers(): Observable { + const url = `token/Customer_master/Customer_master`; + return this.apiRequest.get(url); + } + + getCustomerById(id: number): Observable { + const url = `token/Customer_master/Customer_master/${id}`; + return this.apiRequest.get(url); + } + + deleteCustomerById(id: number): Observable { + const url = `token/Customer_master/Customer_master/${id}`; + return this.apiRequest.delete(url); + } + + + + + ////////site + + // saveCustomersite(data: any, file: any): Observable { + // const url = `Sites/Sites`; + // const formData = new FormData(); + // formData.append('body', JSON.stringify(data)); + // formData.append('file', file); + + // return this.apiRequest.postFormData(url, formData); + // } + saveCustomersite(data: any): Observable { + const url = `Sites/Sites`; + return this.apiRequest.postFormData(url, data); + } + + // updateCustomersite(data: any, file: any,id: number): Observable { + // const url = `Sites/Sites/${id}`; + + // const formData = new FormData(); + // formData.append('body', JSON.stringify(data)); + // formData.append('file', file); + + // return this.apiRequest.postFormData(url, formData); + // } + + updateCustomersite(data: any,id: number): Observable { + const url = `Sites/Sites/${id}`; + return this.apiRequest.put(url, data); + } + + getAllCustomerssite(): Observable { + const url = `Sites/Sites`; + return this.apiRequest.get(url); + } + + getCustomersiteById(id: number): Observable { + const url = `Sites/Sites/${id}`; + return this.apiRequest.get(url); + } + + deleteCustomersiteById(id: number): Observable { + const url = `Sites/Sites/${id}`; + return this.apiRequest.delete(url); + } + + + getsiteBycustId(id: number): Observable { + const url = `Sites/getSitesByCustomer/${id}`; + return this.apiRequest.get(url); + } + + + + ////// custom package + + public savecustompkgeData(data: any): Observable { + return this.apiRequest.post(`Billing/CustomPackage/CustomPackage`, data); + } + + public getcustompkgDetails(): Observable { + return this.apiRequest.get(`Billing/CustomPackage/CustomPackage`); + } + + public getcustompkgDetailsById(id: number): Observable { + return this.apiRequest.get(`Billing/CustomPackage/CustomPackage/${id}`); + } + + public deletecustompkgById(id: number): Observable { + return this.apiRequest.delete(`Billing/CustomPackage/CustomPackage/${id}`); + } + + public updatecustompkgData(data: any, id: number): Observable { + return this.apiRequest.put(`Billing/CustomPackage/CustomPackage/${id}`, data); + } + + + ///biiling total + public billingTotal(invoiceId: number, creditNoteId:number,paymentId): Observable { + return this.apiRequest.get(`Billing/Payments/alltotall/${invoiceId}/${creditNoteId}/${paymentId}`); + } + + public getdatabycustID(customerId: any): Observable { + return this.apiRequest.get(`token/Customer_master/getReceiptApplication/${customerId}`); + } + + + ////// list of items + //generate + getServicesBycustId(customerId: any): Observable { + return this.apiRequest.get(`token/Customer_master/getAllservices/${customerId}`); + } + + //generate 2 + getServices2BycustId(customerId: any): Observable { + return this.apiRequest.get(`token/Customer_master/getAllservicesWithDisc/${customerId}`); + } + + //discount and charges + //generate + getdiscountchargesBycustId(customerId: any): Observable { + return this.apiRequest.get(`token/Customer_master/getAllservicesWithDiscOrderlevel/${customerId}`); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.html new file mode 100644 index 0000000..9709774 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.html @@ -0,0 +1,142 @@ + + +
+ + +
+ +
+ cloudnSure + +
+
+ + + + + + + + +
+
+

Welcome to cloudnsure!

+
You're signing up as {{email}}
+
+
+
+ +
+
First Name is required
+
+
+
+ +
+
Last Name is required
+
+
+
+ +
+
Mobile Number is required
+
Mobile Number is 10 numbers
+
+
+
+ + +
+
password is required
+
Password must be Minimum 6 Characters
+
+
+
+ + +
+
Password is required.
+
Password and Confirm Password must be match.
+
+ + +
+
+

User Info Is Added Please Login

+

Wrong account? Log in instead.

+
+
+ + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.scss new file mode 100644 index 0000000..4408425 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.scss @@ -0,0 +1,86 @@ +//@import '../../../../../styles1.scss'; + + +//** variables +$background: #f5f6fa; +$text: #9c9c9c; +$input-bg-color: #fff; +$input-text-color: #a3a3a3; +$button-bg-color: #7f8ff4; +$button-text-color: #fff; +$google-button-bg-color: #7f8ff4; +$linkedin-button-bg-color: #4b76eb; + +//** root +:root { + background: $background; + color: $text; + font: 1rem "PT Sans", sans-serif; +} + +//** helper +.display_msg { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.form { + /* margin-left: auto; + margin-right: auto; */ + &__field { + // width: 360px; + // //background: #fff; + // color: $input-text-color; + // font: inherit; + // //box-shadow: 0 6px 10px 0 rgba(0, 0, 0 , .1); + // border: 1 solid rgb(235, 230, 230); + // background-color:rgb(255, 255, 255); + // display: inline-block; + // border-radius: 4px; + // box-sizing: border-box; + // //outline: 0; + // padding: 6px 9px; + width: 360px; + padding: 7px 9px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } +} + +.btn { + display: inline-block; + background: transparent; + color: inherit; + font: inherit; + border: 0; + outline: 0; + padding: 0; + transition: all 200ms ease-in; + cursor: pointer; + + &--primary { + background: $button-bg-color; + color: $button-text-color; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + width: 100%; + + &:hover { + background: darken($button-bg-color, 4%); + } + + &:active { + background: $button-bg-color; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } +} +form { + margin-left: 8%; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.spec.ts new file mode 100644 index 0000000..562261f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddguestComponent } from './addguest.component'; + +describe('AddguestComponent', () => { + let component: AddguestComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddguestComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AddguestComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.ts new file mode 100644 index 0000000..655c889 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/addguest/addguest.component.ts @@ -0,0 +1,68 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; +import { MyworkspaceService } from 'src/app/services/admin/myworkspace.service'; +@Component({ + selector: 'app-addguest', + templateUrl: './addguest.component.html', + styleUrls: ['./addguest.component.scss'] +}) +export class AddguestComponent implements OnInit { + + public form: FormGroup; + submitted = false; + passchange; + newpHide: boolean = true; + newIcon: string = "eye"; + newShapeChanger() { + this.newpHide = !this.newpHide; + if(this.newpHide){ + this.newIcon = 'eye' + } else { + this.newIcon = 'eye-hide' + } + } + cpHide: boolean = true; + conIcon: string = "eye"; + comfShapeChanger() { + this.cpHide = !this.cpHide; + if(this.cpHide){ + this.conIcon = 'eye' + } else { + this.conIcon = 'eye-hide' + } + } + get f() { return this.form.controls; } + email: string; + token; + constructor(private _fb: FormBuilder, + private route: ActivatedRoute, + private mywork:MyworkspaceService) { } + + ngOnInit(): void { + this.email = this.mywork.getStoredEmail(); + console.log(this.email) + this.token = this.route.snapshot.params["id"]; + console.log("token is ", this.token); + //form validation + this.form = this._fb.group( + { + first_name: ['', Validators.required], + last_name: ['', Validators.required], + mob_no: ['', [Validators.required,Validators.minLength(10)]], + password: ['',[ Validators.required, Validators.minLength(6), Validators.maxLength(40)]], + confirm_passwordS: ['', Validators.required], + + }, ); + } + onsubmit(){ +this.mywork.addguestdetails(this.form.value,this.token).subscribe((data)=>{ + console.log(data); + this.passchange=data; + console.log('success ', data); + },(err) => { + console.log('failure ', err); +}) + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.css new file mode 100644 index 0000000..0100f0b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.css @@ -0,0 +1,95 @@ +.header-6 { + background-color: #0072a3; +} + +:root { + background: #f5f6fa; + color: #9c9c9c; + font: 1rem "PT Sans", sans-serif; +} + +html, +body, +.container { + height: 100%; +} + +a { + color: inherit; +} +a:hover { + color: #7f8ff4; +} + +.email_check { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.uppercase { + text-transform: uppercase; +} + +.new { + display: inline-block; + background: transparent; + color: inherit; + font: inherit; + border: 0; + outline: 0; + padding: 0; + transition: all 200ms ease-in; + cursor: pointer; +} +.new--newprimary { + background: #7f8ff4; + color: #fff; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.1); + border-radius: 2px; + width: 100%; +} +.new--newprimary:hover { + background: #6c7ff2; +} +.new--newprimary:active { + background: #7f8ff4; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, 0.2); +} +.new--primary1 { + background: #4CAF50; + color: #fff; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, 0.1); + border-radius: 2px; + width: 100%; +} +.new--primary1:hover { + background: #6c7ff2; +} +.new--primary1:active { + background: #7f8ff4; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, 0.2); +} + +/* &--inside { + margin-left: -96px; +} */ +.form { + /* margin-left: auto; + margin-right: auto; */ +} +.form__field { + width: 360px; + background: #fff; + color: #626161; + font: inherit; + box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.1); + border: 0; + outline: 0; + padding: 10px 18px; +} + +.form__field { + border: 2px solid #7f8ff4; +}/*# sourceMappingURL=emailverification.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.css.map new file mode 100644 index 0000000..c07827b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["emailverification.component.scss","emailverification.component.css"],"names":[],"mappings":"AAAA;EACE,yBAAA;ACCF;;ADUA;EACC,mBATY;EAUZ,cATM;EAUN,gCAAA;ACPD;;ADUA;;;EAGC,YAAA;ACPD;;ADUA;EACC,cAAA;ACPD;ADSC;EACC,cApBgB;ACalB;;ADYA;EACC,aAAA;EACA,sBAAA;EACA,mBAAA;EACA,uBAAA;ACTD;;ADYA;EACC,yBAAA;ACTD;;ADaA;EACC,qBAAA;EACA,uBAAA;EACA,cAAA;EACA,aAAA;EACA,SAAA;EACA,UAAA;EACA,UAAA;EACA,6BAAA;EACA,eAAA;ACVD;ADYC;EACC,mBAjDgB;EAkDhB,WAjDkB;EAkDlB,2CAAA;EACA,kBAAA;EAGA,WAAA;ACZF;ADeE;EACC,mBAAA;ACbH;ADgBE;EACC,mBA/De;EAgEf,iDAAA;ACdH;ADiBC;EACC,mBAAA;EACA,WApEkB;EAqElB,2CAAA;EACA,kBAAA;EAGA,WAAA;ACjBF;ADoBE;EACC,mBAAA;AClBH;ADqBE;EACC,mBAlFe;EAmFf,iDAAA;ACnBH;;ADwBC;;GAAA;AAMD;EACC;uBAAA;ACvBD;ADyBC;EACC,YAAA;EAEA,gBAAA;EACA,cAtGiB;EAuGjB,aAAA;EACA,2CAAA;EACA,SAAA;EACA,UAAA;EACA,kBAAA;ACxBF;;AD2BA;EACE,yBAAA;ACxBF","file":"emailverification.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.html new file mode 100644 index 0000000..91b7132 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.html @@ -0,0 +1,78 @@ + + + +
+
+ + +
+ +
+ CloudnSure + +
+
+
+ +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.scss new file mode 100644 index 0000000..b18586e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.scss @@ -0,0 +1,121 @@ +.header-6{ + background-color: #0072a3; +} +//** variables +$background: #f5f6fa; +$text: #9c9c9c; +$input-bg-color: #fff; +$input-text-color: #626161; +$button-bg-color: #7f8ff4; +$button-text-color: #fff; + +//** root +:root { + background: $background; + color: $text; + font: 1rem "PT Sans", sans-serif; +} + +html, +body, +.container { + height: 100%; +} + +a { + color: inherit; + + &:hover { + color: $button-bg-color; + } +} + +//** helper +.email_check { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.uppercase { + text-transform: uppercase; +} + +//** button +.new { + display: inline-block; + background: transparent; + color: inherit; + font: inherit; + border: 0; + outline: 0; + padding: 0; + transition: all 200ms ease-in; + cursor: pointer; + + &--newprimary { + background: $button-bg-color; + color: $button-text-color; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + //padding: 12px 36px; + //padding: 7px 158px; + width: 100%; + + + &:hover { + background: darken($button-bg-color, 4%); + } + + &:active { + background: $button-bg-color; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } + &--primary1{ + background: #4CAF50; + color: $button-text-color; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + //padding: 12px 36px; + //padding: 7px 158px; + width: 100%; + + + &:hover { + background: darken($button-bg-color, 4%); + } + + &:active { + background: $button-bg-color; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } +} + + /* &--inside { + margin-left: -96px; + } */ + + +//** form +.form { + /* margin-left: auto; + margin-right: auto; */ + &__field { + width: 360px; + //width: 450px; + background: #fff; + color: $input-text-color; + font: inherit; + box-shadow: 0 6px 10px 0 rgba(0, 0, 0 , .1); + border: 0; + outline: 0; + padding: 10px 18px; + } +} +.form__field{ + border: 2px solid #7f8ff4 ; +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.spec.ts new file mode 100644 index 0000000..220c3b5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EmailverificationComponent } from './emailverification.component'; + +describe('EmailverificationComponent', () => { + let component: EmailverificationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ EmailverificationComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(EmailverificationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.ts new file mode 100644 index 0000000..440e5b6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/emailverification/emailverification.component.ts @@ -0,0 +1,195 @@ +import {Component, OnInit, ViewEncapsulation} from '@angular/core'; +import {HttpClient, HttpErrorResponse} from "@angular/common/http"; + +import {FormBuilder, FormGroup, Validators} from "@angular/forms"; +import {ActivatedRoute, Router} from "@angular/router"; + + +import { UserRegistrationService } from 'src/app/services/admin/user-registration.service'; +import{environment} from 'src/environments/environment'; +import { ToastrService } from 'ngx-toastr'; +export interface EmailRequest { + email: string; +} +@Component({ + selector: 'app-emailverification', + templateUrl: './emailverification.component.html', + styleUrls: ['./emailverification.component.scss'] +}) +export class EmailverificationComponent implements OnInit { + + + // baseUrl= environment.portalurl; + submitted = false; + conditions = { + condition1:true, + condition2:true, + condition3:true, + } + + siteKey = environment.captchaSiteKey; + // siteKey: string = "6Le7ayYpAAAAAL76n79XlVJCg1jbXZGbnzGNJ1rt"; + constructor(private _fb: FormBuilder, + private router: Router, + private route: ActivatedRoute, + private userRegistrationService: UserRegistrationService, + private http: HttpClient, + private toastr: ToastrService) { + } + + ngOnInit() + : + void { + this.userRegistrationService.removeSignedUpUserInfo(); + this.userRegistrationService.removeStoredEmail(); + this.emailCheckForm = this._fb.group({ + email: [null, [Validators.email, Validators.required]], + recaptcha: ['', Validators.required], + first_name:[null], + last_name:[null], + mob_no:[null], + account_id:[null], + usrGrpId:[null], + new_password:[null], + confirm_password:[null], + accesstype:[null], + }); + } + + model: any = {}; + EmailRequest: EmailRequest; + emailErrMsg: string = "" + + emailExistCheck() { + console.log('input email: ', this.model.email); + this.userRegistrationService.emailCheck(this.model.email) + .subscribe((res) => { + console.log('email check Res : ', res); + }, (err) => { + console.log(err); + }); + } + + emailCheckForm: FormGroup; + + get f() { + return this.emailCheckForm.controls; + } + +// onSubmit() { +// console.log('this.emailCheckForm.value : ', this.emailCheckForm.value); +// this.userRegistrationService.emailCheck(this.emailCheckForm.value) +// .subscribe((res) => { +// console.log('success: ', res); +// let email: string = res.message; +// console.log(email); +// this.userRegistrationService.storeEmail(email); +// this.router.navigate(["/selfregistration"]); +// }, (err: HttpErrorResponse) => { +// console.log(err); +// console.log(err.error.message); +// if (err.status === 409) { +// this.emailErrMsg = 'Email Already Exists'; +// } else { +// this.emailErrMsg = 'Server error'; +// } +// }); +// } +verifyButton= false; +handleSuccess(e) { + console.log("ReCaptcha", e); + console.log(this.emailCheckForm.controls); + const data:any = this.emailCheckForm.controls; + if(data.recaptcha.status == "VALID"){ + this.verifyButton = true; + } +} + + result: any; + otpfromuser:string = ''; + otpshow = false; + onSubmit() { + if (this.emailCheckForm.invalid) { + this.submitted = true; + return; + } + + + let email = this.emailCheckForm.value.email; + console.log( this.emailCheckForm.value); + delete this.emailCheckForm.value.recaptcha + this.userRegistrationService.sendEmail(this.emailCheckForm.value).subscribe((res) => { + // this.userService.storeEmail(email); + // this.router.navigate(["/verify-account"]) + console.log(res); + this.emailErrMsg = ''; + + if(res){ + this.otpshow = true; + } + }, (err: HttpErrorResponse) => { + console.log(err) + if (err.status >= 400 && err.status <= 499) { + this.emailErrMsg = 'Email Already Exists or Enter Correct Email'; + } else { + this.emailErrMsg = 'Server error'; + } + }) + } + + + sendOTP(): void { + this.userRegistrationService.sendOTP(this.emailCheckForm.value.email).subscribe( + (response) => { + const email = this.emailCheckForm.value.email + console.log(`"${email}", please check and enter OTP from your email`, response); + // this.toastr.success(`"${email}", please check and enter OTP from your email`) + // Handle the response as needed + this.otpfromuser = '' + this.toastr.success(response?.msg.toString()); + }, + (error) => { + console.error('Failed to send OTP:', error); + // Handle errors + if(error.status >=400 && error.status <=499) { + this.toastr.error(error?.message.toString()); + }else if(error.status >= 500 && error.status <= 599) { + this.toastr.error("server error"); + } + } + ); + } + emailotpMsg: string = ""; + verifyOTP(): void { + this.userRegistrationService.verifyOTP(this.emailCheckForm.value.email, this.otpfromuser).subscribe( + (response) => { + console.log('OTP verification result:', response); + // Handle the verification result as needed + this.toastr.success(response?.msg.toString()); + setTimeout(() => { + this.router.navigate(["../about-work"], { relativeTo: this.route ,queryParams:{email:this.emailCheckForm.value.email}}); + },500); + }, + (error) => { + console.error('OTP verification failed:', error); + // Handle errors + if(error.status >=400 && error.status <=499) { + // this.toastr.error(error?.error?.msg.toString()); + this.emailotpMsg = error?.error?.msg; + }else if(error.status >= 500 && error.status <= 599) { + this.emailotpMsg = 'Server error'; + } + } + ); + } + + + onSignUp() { + this.router.navigate(["signup"]); + } + + goToLogin() { + // window.location.href = `${this.baseUrl}/#/login`; + this.router.navigate(["login"]) + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.html new file mode 100644 index 0000000..c7dbdff --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.html @@ -0,0 +1,38 @@ + + +
+ + +
+ +
+ cloudnSure + +
+
+ +
+ + +
+
+ + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.scss new file mode 100644 index 0000000..546c22b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.scss @@ -0,0 +1,75 @@ +.email_check { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} +.form { + /* margin-left: auto; + margin-right: auto; */ + &__field { + width: 370px; + //width: 450px; + background: #fff; + color: #a3a3a3; + font: inherit; + box-shadow: 0 6px 10px 0 rgba(0, 0, 0 , .1); + border: 0; + outline: 0; + padding: 10px 18px; + } +} +.form__field{ + border: 2px solid #7f8ff4 ; +} + +.btn { + display: inline-block; + background: transparent; + color: inherit; + font: inherit; + border: 0; + outline: 0; + padding: 0; + transition: all 200ms ease-in; + cursor: pointer; + + &--primary { + background: #7f8ff4; + color: #fff; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + //padding: 12px 36px; + //padding: 7px 158px; + width: 100%; + + + &:hover { + background: darken(#7f8ff4, 4%); + } + + &:active { + //background: $button-bg-color; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } + &--primary1{ + background: #4CAF50; + color: #fff; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + //padding: 12px 36px; + //padding: 7px 158px; + width: 100%; + + + &:hover { + background: darken(#7f8ff4, 4%); + } + + &:active { + background: #7f8ff4; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.spec.ts new file mode 100644 index 0000000..5b02d71 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ForgotpasswordComponent } from './forgotpassword.component'; + +describe('ForgotpasswordComponent', () => { + let component: ForgotpasswordComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ForgotpasswordComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ForgotpasswordComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.ts new file mode 100644 index 0000000..5888101 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotpassword/forgotpassword.component.ts @@ -0,0 +1,67 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import {ForgotpassService} from '../../../services/api/forgotpass.service'; +@Component({ + selector: 'app-forgotpassword', + templateUrl: './forgotpassword.component.html', + styleUrls: ['./forgotpassword.component.scss'] +}) +export class ForgotpasswordComponent implements OnInit { + public emailCheckForm: FormGroup; + emailErrMsg: string = "" +emailsend; + constructor(private _fb: FormBuilder, + private router: Router, + private route:ActivatedRoute, + private toastr:ToastrService, + private forgotpassservice:ForgotpassService) { } + + ngOnInit(): void { + this.emailCheckForm = this._fb.group({ + email: ['', Validators.email] + }); + } + onsubmit(){ + let email = this.emailCheckForm.value.email; + console.log(email); + this.forgotpassservice.sendemail(email).subscribe((data)=>{ + this.forgotpassservice.storeEmail(email); + console.log(data); + + // if(data=200){ + // this.toastr.success('Email Send successfully'); + // } + }, + (err: HttpErrorResponse) => { + console.log(err) + if (err.status === 200) { + this.emailsend=err.status; + //this.emailErrMsg = 'Email send please check mail'; + } + + } + ); + this.emailCheckForm.reset(); + } + onSubmit() { + let email = this.emailCheckForm.value.email; + console.log(email); + this.forgotpassservice.sendemail(email).subscribe((res) => { + this.forgotpassservice.storeEmail(email); + //this.router.navigate(["/varify-account"]) + }, (err: HttpErrorResponse) => { + console.log(err) + if (err.status === 409) { + this.emailErrMsg = 'Email Already Exists'; + } else { + this.emailErrMsg = 'Server error'; + } + }) + } + gotoreset(){ + this.router.navigate(["../forgotresetpassword"], { relativeTo: this.route }); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.html new file mode 100644 index 0000000..7f51910 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.html @@ -0,0 +1,50 @@ + + +
+ + +
+ +
+ cloudnSure + +
+
+ +
+
+

Please Reset Your Password

+

you're signed in as {{ email }}

+
+ +
+ +
+ + +
+
password is required
+
Password must be Minimum 3 Characters
+
+
+
+ + +
+
Password is required.
+
Password and Confirm Password must be match.
+
+
+ +
+
+

Email Is Reset Please Login

+

Wrong account? Log in instead.

+
+
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.scss new file mode 100644 index 0000000..3ee7d64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.scss @@ -0,0 +1,83 @@ +//@import '../../../../../styles1.scss'; + + +//** variables +$background: #f5f6fa; +$text: #9c9c9c; +$input-bg-color: #fff; +$input-text-color: #a3a3a3; +$button-bg-color: #7f8ff4; +$button-text-color: #fff; +$google-button-bg-color: #7f8ff4; +$linkedin-button-bg-color: #4b76eb; + +//** root +:root { + background: $background; + color: $text; + font: 1rem "PT Sans", sans-serif; +} + +//** helper +.display_msg { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.form { + /* margin-left: auto; + margin-right: auto; */ + &__field { + // width: 360px; + // //background: #fff; + // color: $input-text-color; + // font: inherit; + // //box-shadow: 0 6px 10px 0 rgba(0, 0, 0 , .1); + // border: 1 solid rgb(235, 230, 230); + // background-color:rgb(255, 255, 255); + // display: inline-block; + // border-radius: 4px; + // box-sizing: border-box; + // //outline: 0; + // padding: 6px 9px; + width: 360px; + padding: 9px 11px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } +} + +.btn { + display: inline-block; + background: transparent; + color: inherit; + font: inherit; + border: 0; + outline: 0; + padding: 0; + transition: all 200ms ease-in; + cursor: pointer; + + &--primary { + background: $button-bg-color; + color: $button-text-color; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + width: 100%; + + &:hover { + background: darken($button-bg-color, 4%); + } + + &:active { + background: $button-bg-color; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.spec.ts new file mode 100644 index 0000000..d6988e6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ForgotresetpasswordComponent } from './forgotresetpassword.component'; + +describe('ForgotresetpasswordComponent', () => { + let component: ForgotresetpasswordComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ForgotresetpasswordComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ForgotresetpasswordComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.ts new file mode 100644 index 0000000..c61c0a8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword/forgotresetpassword.component.ts @@ -0,0 +1,103 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import {ForgotpassService} from '../../../services/api/forgotpass.service'; +@Component({ + selector: 'app-forgotresetpassword', + templateUrl: './forgotresetpassword.component.html', + styleUrls: ['./forgotresetpassword.component.scss'] +}) +export class ForgotresetpasswordComponent implements OnInit { + emailErrMsg: string = "" + oldpHide: boolean = true; + oldIcon: string = "eye"; + passchange; + + oldShapeChanger() { + this.oldpHide = !this.oldpHide; + if(this.oldpHide){ + this.oldIcon = 'eye' + } else { + this.oldIcon = 'eye-hide' + } + } + newpHide: boolean = true; + newIcon: string = "eye"; + newShapeChanger() { + this.newpHide = !this.newpHide; + if(this.newpHide){ + this.newIcon = 'eye' + } else { + this.newIcon = 'eye-hide' + } + } + cpHide: boolean = true; + conIcon: string = "eye"; + comfShapeChanger() { + this.cpHide = !this.cpHide; + if(this.cpHide){ + this.conIcon = 'eye' + } else { + this.conIcon = 'eye-hide' + } + } + email: string; + resetPasswordForm: FormGroup; + token; + constructor( private _fb: FormBuilder, + private router: Router, + private route: ActivatedRoute, + private forgotpassservice:ForgotpassService) { } + + ngOnInit(): void { + this.email = this.forgotpassservice.getStoredEmail(); + console.log(this.email) + //token + this.token = this.route.snapshot.params["id"]; + console.log("token is ", this.token); + this.resetPasswordForm = this._fb.group({ + email:this.email, + newPassword: ['', [Validators.required, Validators.minLength(3)]], + confirmPassword: ['', [Validators.required]] + }, { + validator: ConfirmedValidator('newPassword', 'confirmPassword') + }); + } + + get f() { return this.resetPasswordForm.controls; } + + submitted = false; + onSubmit() { + console.log('this.resetPasswordForm.value : ', this.resetPasswordForm.value); + this.submitted = true; + if(this.resetPasswordForm.invalid){ + return; + } + this.resetPassword(); + } + + resetPassword() { + this.forgotpassservice.resetpass(this.resetPasswordForm.value,this.token) + .subscribe((res) => { + this.passchange=res; + console.log('success ', res); + },(err) => { + console.log('failure ', err); + }); + this.resetPasswordForm.reset(); + } +} +export function ConfirmedValidator(controlName: string, matchingControlName: string){ + return (formGroup: FormGroup) => { + const control = formGroup.controls[controlName]; + const matchingControl = formGroup.controls[matchingControlName]; + if (matchingControl.errors && !matchingControl.errors.confirmedValidator) { + return; + } + if (control.value !== matchingControl.value) { + matchingControl.setErrors({ confirmedValidator: true }); + } else { + matchingControl.setErrors(null); + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.html new file mode 100644 index 0000000..42fa1be --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.html @@ -0,0 +1,142 @@ + + +
+ + +
+ +
+ cloudnSure + +
+
+ + + + + + + + +
+
+

Welcome to cloudnsure!

+
You're signing up as {{email}}
+
+
+
+ +
+
First Name is required
+
+
+
+ +
+
Last Name is required
+
+
+
+ +
+
Mobile Number is required
+
Mobile Number is 10 numbers
+
+
+
+ + +
+
password is required
+
Password must be Minimum 6 Characters
+
+
+
+ + +
+
Password is required.
+
Password and Confirm Password must be match.
+
+ + +
+
+

User Info Is Added Please Login

+

Wrong account? Log in instead.

+
+
+ + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.scss new file mode 100644 index 0000000..4408425 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.scss @@ -0,0 +1,86 @@ +//@import '../../../../../styles1.scss'; + + +//** variables +$background: #f5f6fa; +$text: #9c9c9c; +$input-bg-color: #fff; +$input-text-color: #a3a3a3; +$button-bg-color: #7f8ff4; +$button-text-color: #fff; +$google-button-bg-color: #7f8ff4; +$linkedin-button-bg-color: #4b76eb; + +//** root +:root { + background: $background; + color: $text; + font: 1rem "PT Sans", sans-serif; +} + +//** helper +.display_msg { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.form { + /* margin-left: auto; + margin-right: auto; */ + &__field { + // width: 360px; + // //background: #fff; + // color: $input-text-color; + // font: inherit; + // //box-shadow: 0 6px 10px 0 rgba(0, 0, 0 , .1); + // border: 1 solid rgb(235, 230, 230); + // background-color:rgb(255, 255, 255); + // display: inline-block; + // border-radius: 4px; + // box-sizing: border-box; + // //outline: 0; + // padding: 6px 9px; + width: 360px; + padding: 7px 9px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } +} + +.btn { + display: inline-block; + background: transparent; + color: inherit; + font: inherit; + border: 0; + outline: 0; + padding: 0; + transition: all 200ms ease-in; + cursor: pointer; + + &--primary { + background: $button-bg-color; + color: $button-text-color; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + width: 100%; + + &:hover { + background: darken($button-bg-color, 4%); + } + + &:active { + background: $button-bg-color; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } +} +form { + margin-left: 8%; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.spec.ts new file mode 100644 index 0000000..04d1708 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { Forgotresetpassword1Component } from './forgotresetpassword1.component'; + +describe('Forgotresetpassword1Component', () => { + let component: Forgotresetpassword1Component; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ Forgotresetpassword1Component ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(Forgotresetpassword1Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.ts new file mode 100644 index 0000000..6e1b397 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/forgotresetpassword1/forgotresetpassword1.component.ts @@ -0,0 +1,67 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; +import { MyworkspaceService } from 'src/app/services/admin/myworkspace.service'; + +@Component({ + selector: 'app-forgotresetpassword1', + templateUrl: './forgotresetpassword1.component.html', + styleUrls: ['./forgotresetpassword1.component.scss'] +}) +export class Forgotresetpassword1Component implements OnInit { + public form: FormGroup; + submitted = false; + passchange; + newpHide: boolean = true; + newIcon: string = "eye"; + newShapeChanger() { + this.newpHide = !this.newpHide; + if(this.newpHide){ + this.newIcon = 'eye' + } else { + this.newIcon = 'eye-hide' + } + } + cpHide: boolean = true; + conIcon: string = "eye"; + comfShapeChanger() { + this.cpHide = !this.cpHide; + if(this.cpHide){ + this.conIcon = 'eye' + } else { + this.conIcon = 'eye-hide' + } + } + get f() { return this.form.controls; } + email: string; + token; + constructor(private _fb: FormBuilder, + private route: ActivatedRoute, + private mywork:MyworkspaceService) { } + + ngOnInit(): void { + this.email = this.mywork.getStoredEmail(); + console.log(this.email) + this.token = this.route.snapshot.params["id"]; + console.log("token is ", this.token); + //form validation + this.form = this._fb.group( + { + first_name: ['', Validators.required], + last_name: ['', Validators.required], + mob_no: ['', [Validators.required,Validators.minLength(10)]], + password: ['',[ Validators.required, Validators.minLength(6), Validators.maxLength(40)]], + confirm_passwordS: ['', Validators.required], + + }, ); + } + onsubmit(){ +this.mywork.adduserdetails(this.form.value,this.token).subscribe((data)=>{ + console.log(data); + this.passchange=data; + console.log('success ', data); + },(err) => { + console.log('failure ', err); +}) + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.html new file mode 100644 index 0000000..df4eba9 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.html @@ -0,0 +1,146 @@ + + + + +
+ +
+ + + +
+ +
+ + + + +
+ +
+ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.scss new file mode 100644 index 0000000..221d360 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.scss @@ -0,0 +1,23 @@ + .tamplate1 { + background-image: url(../../../../assets/images/new.png); + background-repeat: no-repeat; + background-size: 60%; + background-position: right center; + border: 1px solid #000; + } + + .tamplate2 { + background-image: url(../../../../assets/images/new.png); + background-repeat: no-repeat; + background-size: 60%; + background-position: left center; + display: flex; + justify-content: flex-end; + align-items: center; + border: 1px solid #000; + } + .signup { + cursor: pointer; + // color:#80b0ff; + } + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.spec.ts new file mode 100644 index 0000000..fe42df4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoginPageComponent } from './login-page.component'; + +describe('LoginPageComponent', () => { + let component: LoginPageComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ LoginPageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LoginPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.ts new file mode 100644 index 0000000..be82326 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login-page.component.ts @@ -0,0 +1,108 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { LoginService } from '../../../services/api/login.service'; +import { ActivatedRoute} from '@angular/router'; +import { HttpErrorResponse } from '@angular/common/http'; +import { ToastrService } from 'ngx-toastr'; +import{environment} from 'src/environments/environment'; +// import { ExtendedLoginEnvironment, LoginEnvironment } from './login_environment'; +//import { UserRegistrationService } from 'src/app/services/api/user-registration.service'; +import { LoginEnvironment } from './login_environment'; + + +@Component({ + selector: 'app-login-page', + templateUrl: './login-page.component.html', + styleUrls: ['./login-page.component.scss'] +}) +export class LoginPageComponent implements OnInit { + + loginEnvironment = LoginEnvironment; + showLogin2 = true; + + + // loginEnvironment: LoginEnvironment = { + // companyName: 'io8.dev', + // imagePath: '../../../../assets/images/new.png', + // fpass: 'forgot password', + // isSignup: true, + // // template:'', + // }; + + + // loginEnvironment: ExtendedLoginEnvironment = { + // companyName: 'io8.dev', + // imagePath: '../../../../assets/images/new.png', + // fpass: 'Forgot Password?', + // isSignup: true // or false based on your requirement + // }; + + + email = ''; + password = ''; + isError = false; + + model: any = {}; + errMsg: string = ''; + constructor( + private router: Router, + private route:ActivatedRoute, + private loginService: LoginService, + private toastr: ToastrService, + ) { } + + ngOnInit() { + this.loginService.logout(false); + + this.loginEnvironment["imagePath"] = !this.loginEnvironment.loginImageURL ? "../../../../assets/images/new.png" : this.loginEnvironment.loginImageURL; + + console.log('Login Environment:', this.loginEnvironment); + } + + getWrapperClass(): string { + if (this.loginEnvironment.templateNo === 'Template 1') { + return 'login-wrapper tamplate1'; + + } else if (this.loginEnvironment.templateNo === 'Template 2') { + return 'login-wrapper tamplate2'; + } else if (this.loginEnvironment.templateNo === '') { + return 'login-wrapper tamplate1'; // Default class or empty string if no match + } + } + + onLogin() { + // tslint:disable-next-line:max-line-length + this.loginService.getToken(this.model.email, this.model.password) + .subscribe(resp => { + if (resp.user === undefined || resp.user.token === undefined || resp.user.token === "INVALID") { + this.errMsg = 'Checking Email or password'; + return; + } + this.router.navigate([resp.landingPage]);// add , {skipLocationChange: true} + }, + (errResponse: HttpErrorResponse) => { + switch (errResponse.status) { + case 401: + this.errMsg = 'Email or password is incorrect'; + break; + case 404: + this.errMsg = 'Service not found'; + case 408: + this.errMsg = 'Request Timedout'; + case 500: + this.errMsg = 'Internal Server Error'; + default: + this.errMsg = 'Server Error'; + } + } + ); + + } + goaccount(){ + } + goforgotpass(){ + this.router.navigate(["../forgotpass"], { relativeTo: this.route }); + } + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login_environment.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login_environment.ts new file mode 100644 index 0000000..231b3a1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-page/login_environment.ts @@ -0,0 +1,15 @@ + + +export const LoginEnvironment = { + + "templateNo": "", + "loginHeading": "", + "loginHeading2": "", + "isSignup": "", + "loginSignup": " ", + "loginSignup2": "", + "loginForgotpass": "", + "loginImage": "", + "loginImageURL": "" + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-routing.module.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-routing.module.ts new file mode 100644 index 0000000..d0e2a2f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login-routing.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { AddguestComponent } from './addguest/addguest.component'; +import { ForgotpasswordComponent } from './forgotpassword/forgotpassword.component'; +import { ForgotresetpasswordComponent } from './forgotresetpassword/forgotresetpassword.component'; +import { Forgotresetpassword1Component } from './forgotresetpassword1/forgotresetpassword1.component'; + +import { LoginPageComponent } from './login-page/login-page.component'; +import { EmailverificationComponent } from './emailverification/emailverification.component'; +import { AboutWorkComponent } from './about-work/about-work.component'; + +const routes: Routes = [ + { path: 'login', component: LoginPageComponent }, + {path: 'forgotpass', component:ForgotpasswordComponent}, + {path:'forgotresetpassword/:id', component:ForgotresetpasswordComponent}, + {path:'adduser/:id', component:Forgotresetpassword1Component}, + {path:'addguest/:id', component:AddguestComponent}, + + { path: 'email-verification', component: EmailverificationComponent }, + {path: 'about-work', component:AboutWorkComponent}, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class LoginRoutingModule { } diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login.module.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login.module.ts new file mode 100644 index 0000000..afc5e7d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/login/login.module.ts @@ -0,0 +1,30 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ClarityModule } from '@clr/angular'; +import { NgxCaptchaModule } from 'ngx-captcha'; + +import { LoginRoutingModule } from './login-routing.module'; +import { LoginPageComponent } from './login-page/login-page.component'; +import { ForgotpasswordComponent } from './forgotpassword/forgotpassword.component'; +import { ForgotresetpasswordComponent } from './forgotresetpassword/forgotresetpassword.component'; +import { Forgotresetpassword1Component } from './forgotresetpassword1/forgotresetpassword1.component'; +import { AddguestComponent } from './addguest/addguest.component'; + +import { EmailverificationComponent } from './emailverification/emailverification.component'; +import { AboutWorkComponent } from './about-work/about-work.component'; +import { SanitizePipe } from 'src/app/pipes/sanitize.pipe'; + +@NgModule({ + declarations: [LoginPageComponent, ForgotpasswordComponent, ForgotresetpasswordComponent, Forgotresetpassword1Component, AddguestComponent, + EmailverificationComponent, AboutWorkComponent,SanitizePipe], + imports: [ + CommonModule, + FormsModule, + ClarityModule, + LoginRoutingModule, + ReactiveFormsModule, + NgxCaptchaModule, + ] +}) +export class LoginModule { } diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.html new file mode 100644 index 0000000..2ce72ee --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.ts new file mode 100644 index 0000000..cb0dad1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/logo/logo.component.ts @@ -0,0 +1,17 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-logo', + templateUrl: './logo.component.html', + styleUrls: ['./logo.component.scss'] +}) +export class LogoComponent implements OnInit { + + + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/test.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/test.html new file mode 100644 index 0000000..815da4a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/BuilderComponents/test.html @@ -0,0 +1,20 @@ + + + + +gaurav + + + + +

this is h1

+

this is h1

+

this is h1

+

this is h1

+

Lorem ipsum, dolor sit amet consectetur adipisicing elit. Ipsa fuga, asperiores mollitia iste vitae repellendus adipisci atque eum corrupti ad placeat unde voluptatum quia perferendis neque expedita, sequi iure quo. Ut error adipisci ex cum sint, suscipit, voluptatem repellat nemo dolorum unde dolores quasi aut. A earum quo mollitia voluptatibus!

+ + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.html new file mode 100644 index 0000000..552bb52 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.html @@ -0,0 +1,13 @@ + + +
+ Angular Logo +

+ Angular {{ version.full }} + and Clarity Design System 15.2.0 +

+ UX guidelines, HTML/CSS framework, and Angular components working together to craft exceptional experiences +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.scss new file mode 100644 index 0000000..e6d686a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.scss @@ -0,0 +1,15 @@ +a:link { + text-decoration: none; +} + +a:visited { + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a:active { + text-decoration: none; +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.spec.ts new file mode 100644 index 0000000..6b77344 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AboutComponent } from './about.component'; + +describe('AboutComponent', () => { + let component: AboutComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AboutComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AboutComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.ts new file mode 100644 index 0000000..07e4283 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/about/about.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit, VERSION } from '@angular/core'; + +@Component({ + selector: 'app-about', + templateUrl: './about.component.html', + styleUrls: ['./about.component.scss'] +}) +export class AboutComponent implements OnInit { + version: any = VERSION; + constructor() { } + + ngOnInit() {} + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.html new file mode 100644 index 0000000..5dfe29f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.html @@ -0,0 +1,14 @@ + + +
+ Image +

+ +

About Us

+ + create new project to new user if you have accesss,if dont have access then contact admin. +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.spec.ts new file mode 100644 index 0000000..6b77344 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AboutComponent } from './about.component'; + +describe('AboutComponent', () => { + let component: AboutComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AboutComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AboutComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.ts new file mode 100644 index 0000000..07e4283 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/about/about.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit, VERSION } from '@angular/core'; + +@Component({ + selector: 'app-about', + templateUrl: './about.component.html', + styleUrls: ['./about.component.scss'] +}) +export class AboutComponent implements OnInit { + version: any = VERSION; + constructor() { } + + ngOnInit() {} + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.html new file mode 100644 index 0000000..98212b5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.html @@ -0,0 +1,213 @@ + + + + + +
+
+

Access Type

+
+
+ + +
+
+ + + + Loading ... +
{{error}}
+ + + Name + + + Default + + + Description + + + + + + {{user.name}} + + {{user.description}} + + + + + + + + + + + + + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.scss new file mode 100644 index 0000000..d3cd6e7 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.scss @@ -0,0 +1,62 @@ +input[type=text],[type=date],[type=password] { + width: 100%; + padding: 15px 20px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} +.required-field{ + color: red; +font-size: 18px; + +} +.green{ + background-color: rgb(156, 231, 156); + color: black; +} +.blue{ + background-color: #57abcf;//rgb(82, 87, 161); + color: black; +} +.td-title { + text-align: center; + width: 150px; +color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + //color: rgb(24, 13, 13); +} +th{ + //background-color:rgb(170, 169, 169); + font-weight: bold; +} +.td-content{ + text-align: left; +} +.delete,.heading{ + text-align: center; + color: red; +} +.section p { +background-color: rgb(206, 201, 201); + padding: 10px; + font-size: 18px; +} + +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + +input.ng-invalid.ng-touched { + border-color: red; +} + +.error_mess { + color: red; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.spec.ts new file mode 100644 index 0000000..5c4bf19 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AccesstypeComponent } from './accesstype.component'; + +describe('AccesstypeComponent', () => { + let component: AccesstypeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AccesstypeComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AccesstypeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.ts new file mode 100644 index 0000000..f70cf1c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/accesstype/accesstype.component.ts @@ -0,0 +1,182 @@ +import { Component, OnInit } from '@angular/core'; +import { Form, FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { AccesstypeService } from 'src/app/services/admin/accesstype.service'; + +@Component({ + selector: 'app-accesstype', + templateUrl: './accesstype.component.html', + styleUrls: ['./accesstype.component.scss'] +}) +export class AccesstypeComponent implements OnInit { + loading = false; + selected: any[] = []; + rowSelected :any= {}; + modaldelete=false; + modalAdd= false; + modaledit=false; + moduleAdd=false; + error; + data; + module; + moduledata; + submitted=false; + selected1 = "true"; + public entryForm: FormGroup; + public mentryForm:FormGroup; + constructor( private _fb: FormBuilder,private toastr:ToastrService, + private router: Router,private accesstype:AccesstypeService, + private route: ActivatedRoute, + ) { } + + ngOnInit(): void { + this.entryForm = this._fb.group({ + + name:['',[Validators.required]], + defaultvalue:['',[Validators.required]] , + description:['',[Validators.required]] , + + }); + this.mentryForm=this._fb.group({ + modulename:[null], + }) + this.getdata(); + this.getdata1(); + } + getdata(){ + this.accesstype.getAll().subscribe(resp => { + this.data = resp; + console.log('menus: ', this.data); + if(this.data.length==0){ + this.error="No data Available"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }) + } + getdata1(){ + this.accesstype.getAll1().subscribe(resp => { + this.moduledata = resp; + console.log('menus: ', this.moduledata); + if(this.moduledata.length==0){ + this.error="No data Available"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }) + } + goToAdd(){ + this.modalAdd=true; + } + onSubmit(){ + console.log(this.entryForm.value); + this.submitted=true; + if (this.entryForm.invalid) { + return; + } + console.log(this.entryForm.value); + this.accesstype.create(this.entryForm.value).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Added successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not added Data Getting Some Error'); + } + + }); + this.modalAdd=false; + } + goToEdit(row) { + this.rowSelected = row; + console.log(row) + this.modaledit=true; + //this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id) + { + this.modaldelete = false; + console.log("in delete "+id); + this.accesstype.delete(id).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Deleted successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Deleted Data Getting Some Error'); + } + }); + + } + onUpdate(id){ + this.modaledit=false; +this.accesstype.update(id,this.rowSelected).subscribe((data)=>{ +console.log(data); +if (data) { + this.toastr.success('Updated successfully'); + } +}, +(error) => { +console.log('Error in adding data...',+error); +if(error){ + this.toastr.error('Not updated Data Getting Some Error'); +} +}); + } + goTomodules(){ + this.router.navigate(["../acmodules"], { relativeTo: this.route }); + } + accessid; + gomodules(row){ + this.rowSelected = row; + this.moduleAdd=true; + this.accessid=row.id + this.getallidmodules(this.accessid) + } + moduledata1; + getallidmodules(id){ + this.accesstype.getById(id).subscribe((data)=>{ + console.log(data); + this.moduledata1=data; + if(this.moduledata1.length==0){ + this.error="No data Available"; + console.log(this.error) + } + }) + } + addmodules(id){ + console.log(this.mentryForm.value); +this.accesstype.addById(id,this.mentryForm.value).subscribe((data)=>{ + console.log(data); + if(data){ + this.toastr.success("Added Successfully"); + } +},(error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Added Data Getting Some Error'); + } + }) +this.moduleAdd=false; + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.html new file mode 100644 index 0000000..fce1d94 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.html @@ -0,0 +1,128 @@ + + + + +
+
+ +
+ + +
+
+ + + + + + + + + data not found! + + + NO + + + Structure ID + + + Structure Name + + + Structure Seq + + + + + + {{i+1}} + {{user.StructureID}} + {{user.StructureName}} + {{user.StructureSeq}} + + + + + + + + + + + + + + + + +
StructureName{{user.StructureName}}
+
+
+ + + + Record per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} Records + + +
+
+ + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.scss new file mode 100644 index 0000000..36abb8c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.scss @@ -0,0 +1 @@ +@import '../../../../../styles1.scss'; diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.spec.ts new file mode 100644 index 0000000..7fde7a8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DocumentmasterComponent } from './documentmaster.component'; + +describe('DocumentmasterComponent', () => { + let component: DocumentmasterComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DocumentmasterComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DocumentmasterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.ts new file mode 100644 index 0000000..4779866 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentmaster/documentmaster.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup } from '@angular/forms'; +import { ExcelService } from '../../../../services/excel.service'; +import * as moment from 'moment'; +@Component({ + selector: 'app-documentmaster', + templateUrl: './documentmaster.component.html', + styleUrls: ['./documentmaster.component.scss'] +}) +export class DocumentmasterComponent implements OnInit { + loading = false; + public entryForm: FormGroup; + givendata; + orders; + modalAdd= false; + modaledit=false; + rowSelected :any= {}; + constructor(private excel: ExcelService,) { } + + ngOnInit(): void { + } + onExport() { + this.excel.exportAsExcelFile(this.givendata, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + goToAdd() { + this.modalAdd=true; + //this.router.navigate(["../usermaintanceadd"],{relativeTo:this.route}); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.html new file mode 100644 index 0000000..db3c0eb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.html @@ -0,0 +1,180 @@ + + + + +
+
+ +
+ + +
+
+ + + + + + + + + data not found! + + + NO + + + Document Code + + + Pad Zero + + + Start With + + + Last Number + + + Max Length + + + Structure ID + + + + + {{i+1}} + {{user. DocumentCode}} + {{user. PadZero}} + {{user. StartWith}} + {{user. LastNumber}} + {{user. MaxLength}} + {{user. StructureID}} + + + + + + + + + + + + + + + + +
StructureID{{user. StructureID}}
+
+
+ + + + Record per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} Records + + +
+
+ + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.scss new file mode 100644 index 0000000..36abb8c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.scss @@ -0,0 +1 @@ +@import '../../../../../styles1.scss'; diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.spec.ts new file mode 100644 index 0000000..18b137e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DocumentreferenceComponent } from './documentreference.component'; + +describe('DocumentreferenceComponent', () => { + let component: DocumentreferenceComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DocumentreferenceComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DocumentreferenceComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.ts new file mode 100644 index 0000000..5678564 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentreference/documentreference.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup } from '@angular/forms'; +import { ExcelService } from '../../../../services/excel.service'; +import * as moment from 'moment'; +@Component({ + selector: 'app-documentreference', + templateUrl: './documentreference.component.html', + styleUrls: ['./documentreference.component.scss'] +}) +export class DocumentreferenceComponent implements OnInit { + loading = false; + public entryForm: FormGroup; + givendata; + orders; + modalAdd= false; + modaledit=false; + rowSelected :any= {}; + constructor(private excel: ExcelService,) { } + + ngOnInit(): void { + } + onExport() { + this.excel.exportAsExcelFile(this.givendata, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + goToAdd() { + this.modalAdd=true; + //this.router.navigate(["../usermaintanceadd"],{relativeTo:this.route}); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.html new file mode 100644 index 0000000..dae85a6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.html @@ -0,0 +1,56 @@ + +
+
+
+ +
+ For Structure ID + +
+
+ + + + + + No Result Found + No + Seq + Prefix + Type + Delete + + + + + + + + + users + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.spec.ts new file mode 100644 index 0000000..0f200c4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DocumentstructureComponent } from './documentstructure.component'; + +describe('DocumentstructureComponent', () => { + let component: DocumentstructureComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DocumentstructureComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DocumentstructureComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.ts new file mode 100644 index 0000000..2117853 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/documentstructure/documentstructure.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-documentstructure', + templateUrl: './documentstructure.component.html', + styleUrls: ['./documentstructure.component.scss'] +}) +export class DocumentstructureComponent implements OnInit { + loading = false; + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.html new file mode 100644 index 0000000..4b1d101 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.html @@ -0,0 +1,1057 @@ + + +
+
+
+

User list

+
+
+ + + +
+
+ + + user not found! + + + Menu Name + + + + + Description + + + + + Enabled + + + + + Start Date + + + + + End Date + + + + + + {{user.menu_name}} + {{user.description}} + {{user.active}} + {{user.start_date_1}} + {{user.end_date_1}} + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Menu Name: {{user.menu_name}} +
Description: {{user.description}}
Enabled: {{user.active}}
Default End Date: 10/03/2001 Start Date: {{user.start_date_1}}
Default End Date: 10/03/2001 End Date: {{user.end_date_1}}
+ + + + + + + + + + + + + + + + + + + +
Sr. NoNameTypeMenu NameActive
{{ i + 1 }}{{ line.name }}{{ line.type }} {{ line.menu_name }} {{ line.active }}
+ + +
+
+ + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.scss new file mode 100644 index 0000000..76ae2bd --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.scss @@ -0,0 +1,65 @@ +// // @import '../../../../assets/scss/var'; +// .s-info-bar { +// display: flex; +// flex-direction: row; +// justify-content: space-between; +// button { +// outline: none; +// } +// } + +// .grid-pg { +// width:750px; +// } + + +// #add { +// position: absolute; +// //position: fixed; +// transition: .5s ease; +// top: 16%; +// left: 79%; +// } + +input[type=text],[type=date], select { + width: 100%; + padding: 12px 20px; + margin: 8px 0; + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + .required-field{ + color: red; + + } + .horizontal{ + width: 50%; + padding: 10px; + } + + .td-title { + text-align: center; + color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + //color: rgb(24, 13, 13); + } + th{ + background-color:rgb(170, 169, 169); + font-weight: bold; + } + .td-content{ + text-align: left; + } + .delete,.heading{ + text-align: center; + color: red; + } + .section p { + background-color: rgb(206, 201, 201); + padding: 10px; + font-size: 18px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.ts new file mode 100644 index 0000000..83594c5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/all/all-menu-group.component.ts @@ -0,0 +1,506 @@ +import { Component, OnInit, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core'; +import { MenuGroupService } from '../../../../../services/admin/menu-group.service'; +import { MenuRegisterService } from '../../../../../services/admin/menu-register.service'; + +import { ToastrService } from 'ngx-toastr'; +import { university } from '../../../../../models/fnd/university'; +import { AlertService } from '../../../../../services/alert.service'; +import { UniversityService } from 'src/app/services/admin/university.service'; +import { ExcelService } from '../../../../../services/excel.service'; +import * as moment from 'moment'; +import { FormArray, FormBuilder, FormGroup } from '@angular/forms'; +import { HttpErrorResponse } from '@angular/common/http'; +import { ActivatedRoute, Router } from '@angular/router'; + +@Component({ + selector: 'app-all-menu-group', + templateUrl: './all-menu-group.component.html', + styleUrls: ['./all-menu-group.component.scss'], +}) +export class AllMenuGroupComponent implements OnInit { + + rowSelected: any = {}; + modaldelete = false; + modalEdit = false; + modalAdd = false; + public entryForm: FormGroup; + + loading = false; + university; + modalOpenedforNewLine = false; + newLine: university = new university(); + + hname = ['ashwini', 'akash', 'satyam', 'ganesh', 'krishna']; + + email = ['a@gmail.com', 'b@gmail.com', 'c@gmail.com', 'd@gmail.com', 'k@gmail.com']; + + subject = ['marathi', 'hindi', 'english']; + + booktype = ['maths', 'language', 'science']; + + bookname: string[] = ['rich dad poor dad', 'The one thing', 'The momb who head farai', 'trump', 'lucky', 'syamchi aai', + 'aai', 'ek hota karwar', 'chawa', 'mutunjay', 'duniyadari', 'dad', + 'story book', 'horror story', 'poem']; + + writer = ['true', 'false']; + + + price = ['100', '200']; + + basic: boolean = false; + + id: number; + submitted = false; + currentUrl = ""; + selected: any[] = []; + + constructor( + private _mg: MenuGroupService, + private _mr: MenuRegisterService, + private mainService: UniversityService, + private alertService: AlertService, + private toastr: ToastrService, + private excel: ExcelService, + private _fb: FormBuilder, + private router: Router, + private route: ActivatedRoute, + ) { + + } + + ngOnInit() { + + this.getData(); + + } + getData() { + this._mg.getAll().subscribe((data) => { + console.log(data); + this.university = data; + this.university = this.university.items; + console.log(this.university); + + }); + + this.entryForm = this._fb.group({ + menu_name: [null], + description: [null], + active: [null], + start_date_1: [null], + end_date_1: [null], + start_date: [null], + end_date: [null], + + + menu_group_lines: this._fb.array([this.initLinesForm()]), + + + + }); + + } + + initLinesForm() { + return this._fb.group({ + + menu_id: 23, + menu_name: [null], + name: [null], + active: [null], + seq: 32, + type: [null], + + }); + } + + onEdit(row) { + this.rowSelected = row; + console.log(this.rowSelected); + + this.modalEdit = true; + } + + onDelete(row) { + this.rowSelected = row; + this.modaldelete = true; + } + + delete(id) { + this.modaldelete = false; + console.log("in delete " + id); + // this.mainService.delete(id).subscribe( + // (data) => { + // console.log(data); + + // this.ngOnInit(); + + // }, + // ); + + this._mg.deleteById(id).subscribe( + (data: any)=>{ + console.log('Deletion success...'); + this.ngOnInit(); + } + ); + if (id) { + this.toastr.success('Deleted successfully'); + } + + } + + onUpdate(id) { + this.modalEdit = false; + //console.log("in update"); + console.log("id " + id); + console.log(this.rowSelected); + //console.log("out update"); + // this.mainService.update(id, this.rowSelected).subscribe( + // (data) => { + // console.log(data); + + // }, + + // ); + this._mg.updateGroupHeader(id, this.rowSelected).subscribe( + (data: any)=>{ + console.log(data); + console.log('Update Success...'); + this.modalEdit = false; + this.ngOnInit(); + + }, + (error: any)=>{ + console.log(error); + + } + ); + if (id) { + this.toastr.success('Updated successfully'); + } + + } + onExport() { + this.excel.exportAsExcelFile(this.university, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + goToAdd(row) { + + this.modalAdd = true; + + } + onSubmit() { + + + + //console.warn("calling submit"); + + //console.log(this.entryForm.value); + this.submitted = true; + if (this.entryForm.invalid) { + return; + } + this.onCreate(); + } + + + + onCreate() { + this.modalAdd = false; + + this._mg.addToDb(this.entryForm.value).subscribe( + (data: any)=>{ + console.log(data); + this.ngOnInit(); + }, + (error: any)=>{ + console.log(error); + + } + ); + if (this.entryForm.value) { + this.toastr.success('Added successfully'); + + } + } + + get controls() { + return (this.entryForm.get("menu_group_lines") as FormArray).controls; + } + + onRemoveLines(index: number) { + (this.entryForm.get("menu_group_lines")).removeAt(index); + } + onAddLines() { + (this.entryForm.get("menu_group_lines")).push(this.initLinesForm()); + } + update() { + this.mainService.update(this.id, this.university).subscribe( + (data) => { + console.log(data); + + }, + (error: HttpErrorResponse) => { + console.log(error.message); + } + ); + } + +} + + + + + + +// import { Component, OnInit, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core'; +// import { MenuGroupService } from 'src/app/services/api/menu-group.service'; +// import { MenuRegisterService } from 'src/app/services/api/menu-register.service'; + + +// @Component({ +// selector: 'app-all-menu-group', +// templateUrl: './all-menu-group.component.html', +// styleUrls: ['./all-menu-group.component.scss'], +// encapsulation: ViewEncapsulation.Emulated +// }) +// export class AllMenuGroupComponent implements OnInit { +// @ViewChild('getById') selectById: TemplateRef; +// @ViewChild('txId') txId: TemplateRef; +// basic: boolean = false; +// columns: any[]; +// rows: any[]; +// temp = []; + +// filterData: string; +// isLoading: boolean = false; + +// modalEdit: false; +// loading = false; +// openEdit = false; +// openAdd = false; +// openAddLine = false; +// openEditHeader = false; + +// mgdata: any; +// linesData: Array; +// lines = []; + +// updata = { +// id: '', +// active: '', +// createdAt: '', +// createdBy: '', +// description: '', +// end_date: '', +// end_date_1: '', +// menu_name: '', +// start_date: '', +// start_date_1: '', +// updatedAt: '', +// updatedBy: '', +// menu_group_lines: [ +// { +// id: '', +// active: '', +// createdAt: '', +// createdBy: '', +// menu_id: '', +// manu_name: '', +// name: '', +// seq: '', +// type: '', +// updatedAt: '', +// updatedBy: '' +// }, +// ], +// } + +// updateHeader = { +// id: '', +// active: '', +// createdAt: '', +// createdBy: '', +// description: '', +// end_date: '', +// end_date_1: '', +// menu_name: '', +// start_date: '', +// start_date_1: '', +// updatedAt: '', +// updatedBy: '', +// } + +// menu_group_line = +// { +// id: '', +// menu_id: '', +// menu_name: '', +// name: '', +// active: '', +// seq: '', +// type: '', +// menu_group_header: { +// id: '' +// } +// } + +// headerAdd = { +// menu_name: '', +// description: '', +// active: false, +// start_date_1: '', +// end_date_1: '' +// } + +// lineAdd = { +// name: '', +// menu_name: '', +// active: false, +// type: '', +// menu_group_header: { +// id: '' +// } +// } + +// constructor( +// private _mg: MenuGroupService, +// private _mr: MenuRegisterService +// ) { +// this.linesData = new Array(); +// } + +// ngOnInit() { + +// this._mg.getAll().subscribe( +// (data: any) => { +// this.mgdata = data; +// console.log(this.mgdata); + +// } +// ); + +// } + +// addData() { +// console.log(this.headerAdd); +// this._mg.addToDb(this.headerAdd).subscribe( +// (data: any) => { +// console.log('Data addedd successfully...'); +// this.openAdd = false; +// this.ngOnInit(); +// }, +// (error: any) => { +// console.log(error); + +// } + +// ); +// } + +// openAddLinef(id: any) { +// this.openAddLine = true; +// console.log(id); +// this.lineAdd.menu_group_header.id = id; + + +// } +// saveD() { +// console.log(this.lineAdd); +// this._mg.addLineToDb(this.lineAdd).subscribe( +// (data: any) => { +// console.log('data added success...'); +// this.openAddLine = false; +// this.ngOnInit(); +// }, +// (error: any) => { +// console.log(error); + +// } +// ); +// } + +// openEditGroup(id: any) { +// this.openEdit = true; +// console.log(id); +// this._mg.getOneById(id).subscribe( +// (data: any) => { +// this.updata = data; +// this.lines = this.updata.menu_group_lines; +// for(let val of this.updata.menu_group_lines){ +// this.linesData.push(val); +// } +// console.log('New Data of Lines : '); +// console.log(this.lines); +// }, +// (error: any) => { +// console.log(error); + +// } +// ); + +// } + +// perfUpdate(){ +// console.log(this.updata); +// this.updateHeader.id = this.updata.id; +// this.updateHeader.active = this.updata.active; +// this.updateHeader.createdAt = this.updata.createdAt; +// this.updateHeader.createdBy = this.updata.createdBy; +// this.updateHeader.description = this.updata.description; +// this.updateHeader.end_date = this.updata.end_date; +// this.updateHeader.end_date_1 = this.updata.end_date_1; +// this.updateHeader.menu_name = this.updata.menu_name; +// this.updateHeader.start_date = this.updata.start_date; +// this.updateHeader.start_date_1 = this.updata.start_date_1; +// this.updateHeader.updatedAt = this.updata.updatedAt; +// this.updateHeader.updatedBy = this.updata.updatedBy; + +// this._mg.updateGroupHeader(this.updateHeader.id, this.updateHeader).subscribe( +// (datah: any)=>{ +// console.log('Data(header) updated successsfully...'); +// console.log(datah); + +// for(let val of this.lines){ +// this.menu_group_line.id = val.id; +// this.menu_group_line.menu_id = val.menu_id; +// this.menu_group_line.menu_name = val.menu_name; +// this.menu_group_line.name = val.name; +// this.menu_group_line.seq = val.seq; +// this.menu_group_line.type = val.type; +// // this.menu_group_line.menu_group_header.id = datah.id; +// this.menu_group_line.menu_group_header.id = this.updateHeader.id; + +// this._mg.updateLineById(this.menu_group_line).subscribe( +// (data: any)=>{ +// console.log('Data(Line) Updated Successfully...'); +// console.log(data); +// this.linesData = []; +// this.openEdit = false; +// this.ngOnInit(); +// console.log(this.linesData); + +// }, +// (error: any)=>{ +// console.log(error); + +// } +// ); +// } +// }, +// (error: any)=>{ +// console.log(error); + +// } +// ); +// } + +// closeM(){ +// this.openEdit = false; +// this.linesData = []; +// } + + + +// } + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.component.html new file mode 100644 index 0000000..75220a5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.component.html @@ -0,0 +1,99 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.component.ts new file mode 100644 index 0000000..2ba68dc --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.component.ts @@ -0,0 +1,97 @@ +import { Component, OnInit } from "@angular/core"; +import { ActivatedRoute, Router } from "@angular/router"; +import { HttpClient, HttpErrorResponse } from "@angular/common/http"; +// import { Rn_Menu_Group_Line } from "src/app/models/Rn_Menu_Group_Line"; +// import { Rn_Menu_Group_Header } from "src/app/models/Rn_Menu_Group_Header"; +// import { MenuGroupService } from "src/app/services/api/menu-group.service"; +// import { MenuRegisterService } from "src/app/services/api/menu-register.service"; + +@Component({ + selector: "edit-menu-group", + templateUrl: "./edit-menu-group.component.html", + styleUrls: ["./edit-menu-group.scss"], +}) +export class EditMenuGroupComponent implements OnInit { + updated = false; + // rn_menu_group_header: Rn_Menu_Group_Header; + // rn_menu_group_line: Rn_Menu_Group_Line[]; + id: number; + + types = ['user', 'admin', 'mis report', 'bi report']; + + constructor( + private router: Router, + private route: ActivatedRoute, + // private menuRegisterService: MenuRegisterService, + // private menuGroupService: MenuGroupService + ) {} + + ngOnInit() { + //this.getMapings(); + + // this.rn_menu_group_header = new Rn_Menu_Group_Header(); + // this.id = this.route.snapshot.params["id"]; + // console.log("update with id = ", this.id); + // this.getById(this.id); + } + +// getById(id: number) { +// this.menuGroupService.getById(id).subscribe((data) => { +// this.rn_menu_group_header = data; +// this.rn_menu_group_line = data.menu_group_lines; +// }); +// } + +// update() { +// this.menuGroupService.update(this.id, this.rn_menu_group_header).subscribe( +// (resp) => { +// console.log(resp); +// this.router.navigate(["../../all"], { relativeTo: this.route }); +// }, +// (error: HttpErrorResponse) => { +// console.log(error.message); +// } +// ); +// this.rn_menu_group_header = new Rn_Menu_Group_Header(); +// } + +// onSubmit() { +// this.updated = true; +// this.update(); +// } + +// /* getMapings() { +// this.httpService +// .get('./assets/json/form-setup-mapping.json') +// .subscribe(data => { +// console.log(data); +// this.mappings = data; +// }, err => console.log(err) +// ) +// } */ + +// menuDate: any[]; +// menuDropDown: any[]; +// getMenuData() { +// //this.menuRegisterService.getAll().subscribe((data) => { +// this.menuRegisterService.getByAccountId().subscribe((data) => { +// this.menuDate = data; +// console.log('Menu List by Account Id : ', this.menuDate); +// const keys = this.menuDate.map((item) => { +// const container = {id: '', name: ''}; +// container.id = item.id; +// container.name = item.main_menu_name; +// return container; +// }); +// console.log('Menu dropdown: ', keys); +// this.menuDropDown = keys; +// }, (err) => { +// console.log(err) +// } +// ); +// } + +// back() { +// this.router.navigate(["../../all"], { relativeTo: this.route }); +// } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.scss new file mode 100644 index 0000000..ffe3733 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/edit/edit-menu-group.scss @@ -0,0 +1,51 @@ +// @import '../../../../assets/scss/var'; + +.s-info-bar{ + display:flex; + flex-direction: row; + justify-content:space-between; + button{outline:none;} +} + +.edit-pg { + width:750px; +} + +#lines { + table, th, td { + border: 0.5px solid #f1f0f0; + border-collapse: collapse; + } + input, input :focus { + //-webkit-appearance: none; + outline: none; + border-width:0px; + border:none; + } +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.center { + text-align: center; +} + +$bg-color: #dddddd; +.section { + background-color: $bg-color; + height: 40px; +} + +.section p { + //color: white; + padding: 10px; + font-size: 18px; +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.html new file mode 100644 index 0000000..0680b43 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.html @@ -0,0 +1 @@ + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.ts new file mode 100644 index 0000000..fb6833d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/menu-group.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector: 'app-menu-group', + templateUrl: './menu-group.component.html', + styleUrls: ['./menu-group.component.scss'], + // encapsulation: ViewEncapsulation.Emulated +}) +export class MenuGroupComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.component.html new file mode 100644 index 0000000..54ee5b7 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.component.html @@ -0,0 +1,94 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.component.ts new file mode 100644 index 0000000..9d0ad17 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.component.ts @@ -0,0 +1,44 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +// import { Rn_Forms_Setup } from 'src/app/models/Rn_Forms_Setup'; +// import { FormSetupService } from 'src/app/services/api/form-setup.service'; +// import { Rn_Menu_Group_Header } from 'src/app/models/Rn_Menu_Group_Header'; +// import { MenuGroupService } from 'src/app/services/api/menu-group.service'; + +@Component({ + selector: 'readonly-menu-group', + templateUrl: './readonly-menu-group.component.html', + styleUrls: [ './readonly-menu-group.scss'], +}) +export class ReadOnlyMenuGroupComponent implements OnInit { + basic: boolean = false; + id: number; + // rn_menu_group_header: Rn_Menu_Group_Header; + constructor( + private router: Router, + private route: ActivatedRoute, + // private menuGroupService: MenuGroupService + ) { } + + ngOnInit() { + // this.getById(); + } + + // getById() { + // this.rn_menu_group_header = new Rn_Menu_Group_Header(); + // this.id = this.route.snapshot.params['id']; + // this.menuGroupService.getById(this.id) + // .subscribe(data => { + // console.log(data); + // this.rn_menu_group_header = data; + // }); + // } + + // goToWhoColumns() { + // this.basic = !this.basic; + // } + + // back() { + // this.router.navigate(['../../all'], {relativeTo: this.route}); + // } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.scss new file mode 100644 index 0000000..3036f69 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-group/read-only/readonly-menu-group.scss @@ -0,0 +1,23 @@ +// @import '../../../../assets/scss/var'; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } +} + +.read-only-pg { + width:750px; +} + + + +#build_btn { + position: absolute; + transition: .5s ease; + top: 404px; + left: 644px; +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.html new file mode 100644 index 0000000..0e3e30e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.html @@ -0,0 +1 @@ +

add-menur works!

diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.spec.ts new file mode 100644 index 0000000..fccbe61 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddMenurComponent } from './add-menur.component'; + +describe('AddMenurComponent', () => { + let component: AddMenurComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddMenurComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AddMenurComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.ts new file mode 100644 index 0000000..c24e5f3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/add-menur/add-menur.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-add-menur', + templateUrl: './add-menur.component.html', + styleUrls: ['./add-menur.component.scss'] +}) +export class AddMenurComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.html new file mode 100644 index 0000000..6c134ab --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.html @@ -0,0 +1,203 @@ + + +
+
+
+

menu register

+
+
+ + +
+
+ + user not found! + + + Sr. No + + + + + Menu Name + + + + + Action Link + + + + + Menu Icon + + + + + Flag + + + + + End Date + + + + + {{i + 1}} + {{user.main_menu_name}} + {{user.main_menu_action_name}} + {{user.main_menu_icon}} + {{user.enable_flag}} + {{user.end_date_1}} + + + + ˝ + + + + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + + +
+ + + + + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.scss new file mode 100644 index 0000000..4f6d7c9 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.scss @@ -0,0 +1,14 @@ +input[type=text],[type=date], select { + width: 100%; + padding: 12px 20px; + margin: 8px 0; + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .delete,.heading{ + text-align: center; + color: red; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.spec.ts new file mode 100644 index 0000000..620106c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AllMenurComponent } from './all-menur.component'; + +describe('AllMenurComponent', () => { + let component: AllMenurComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AllMenurComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AllMenurComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.ts new file mode 100644 index 0000000..67ea77d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/all-menur/all-menur.component.ts @@ -0,0 +1,187 @@ +import { Component, OnInit } from '@angular/core'; +import { ToastrService } from 'ngx-toastr'; +import { MenuGroupService } from '../../../../../services/admin/menu-group.service'; +import { MenuRegisterService } from '../../../../../services/admin/menu-register.service'; + +@Component({ + selector: 'app-all-menur', + templateUrl: './all-menur.component.html', + styleUrls: ['./all-menur.component.scss'] +}) +export class AllMenurComponent implements OnInit { + + basic: boolean = false; + columns: any[]; + rows: any[]; + temp = []; + selected: any[] = []; + filterData: string; + isLoading: boolean = false; + + modalEdit: false; + loading = false; + + openEdit = false; + openAdd = false; + + modaldelete = false; + tempid: any; + + regData: any; + + addReg = { + main_menu_name: '', + main_menu_action_name: '', + main_menu_icon: '', + enable_flag: false, + end_date_1: '' + } + + upReg = { + id: '', + main_menu_name: '', + main_menu_action_name: '', + main_menu_icon: '', + enable_flag: '', + end_date_1: '' + } + + line = { + id: '', + menu_id: '', + menu_name: '', + name: '', + active: true, + seq: '', + type: '', + menu_group_header: { + id: 5, + } + }; + + lenReg: any; + + constructor( + private _mr: MenuRegisterService, + private _mg: MenuGroupService, + private toastr: ToastrService, + ) { } + + ngOnInit(): void { + + this._mr.getd().subscribe( + (data: any) => { + this.regData = data.items; + this.lenReg = this.regData.length; + console.log(this.regData); + console.log(this.lenReg); + + + } + ); + + + } + + saveData() { + console.log(this.addReg); + + this._mr.add(this.addReg).subscribe( + (data: any) => { + console.log('Data Success...'); + + this.line.menu_id = data.id; + this.line.active = true; + this.line.type = 'admin'; + // this.line.menu_group_header.id = '5'; + + this._mr.getd().subscribe( + (data: any)=>{ + this.lenReg = data.length; + } + ); + + this.line.seq = this.lenReg + 1; + + this._mg.addLineToDb(this.line).subscribe( + (data: any)=>{ + console.log('both success..'); + + }, + (error: any)=>{ + console.log(error); + + } + ); + + this.openAdd = false; + this.addReg = { + main_menu_name: '', + main_menu_action_name: '', + main_menu_icon: '', + enable_flag: false, + end_date_1: '' + }; + this.ngOnInit(); + this.toastr.success('Added successfully'); + }, + (error: any) => { + console.log(error); + + } + ); + } + + editReg(id: any) { + this.openEdit = true; + console.log(id); + this._mr.getById(id).subscribe( + (data: any) => { + this.upReg = data; + console.log(this.upReg); + }, + (error: any) => { + console.log(error); + } + ); + } + + performup() { + this._mr.update(this.upReg.id, this.upReg).subscribe( + (data: any) => { + console.log('updation success...'); + this.toastr.success('Updated successfully'); + this.openEdit = false; + this.ngOnInit(); + + }, + (error: any) => { + console.log(error); + + } + ); + } + + delete(id: any) { + this.tempid = id; + this.modaldelete = true; + + } + + del() { + console.log('Id of row u clicked is : ' + this.tempid); + this._mr.deleteById(this.tempid).subscribe( + (data: any) => { + console.log('Deletion successful..'); + this.ngOnInit(); + this.modaldelete = false; + this.toastr.success('Deleted successfully'); + }, + (error: any) => { + console.log(error); + + } + ); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.html new file mode 100644 index 0000000..862db5a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.html @@ -0,0 +1 @@ +

edit-menur works!

diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.spec.ts new file mode 100644 index 0000000..cf744ca --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditMenurComponent } from './edit-menur.component'; + +describe('EditMenurComponent', () => { + let component: EditMenurComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ EditMenurComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(EditMenurComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.ts new file mode 100644 index 0000000..7f5dcf8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/edit-menur/edit-menur.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-edit-menur', + templateUrl: './edit-menur.component.html', + styleUrls: ['./edit-menur.component.scss'] +}) +export class EditMenurComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.html new file mode 100644 index 0000000..0680b43 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.html @@ -0,0 +1 @@ + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.spec.ts new file mode 100644 index 0000000..3b21b1f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MenuRegisterComponent } from './menu-register.component'; + +describe('MenuRegisterComponent', () => { + let component: MenuRegisterComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MenuRegisterComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(MenuRegisterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.ts new file mode 100644 index 0000000..e8e3459 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/menu-register.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-menu-register', + templateUrl: './menu-register.component.html', + styleUrls: ['./menu-register.component.scss'] +}) +export class MenuRegisterComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.html new file mode 100644 index 0000000..2c0eda0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.html @@ -0,0 +1 @@ +

readonly-menur works!

diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.spec.ts new file mode 100644 index 0000000..efe0482 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReadonlyMenurComponent } from './readonly-menur.component'; + +describe('ReadonlyMenurComponent', () => { + let component: ReadonlyMenurComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReadonlyMenurComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReadonlyMenurComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.ts new file mode 100644 index 0000000..bf58eb2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menu-register/readonly-menur/readonly-menur.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-readonly-menur', + templateUrl: './readonly-menur.component.html', + styleUrls: ['./readonly-menur.component.scss'] +}) +export class ReadonlyMenurComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.html new file mode 100644 index 0000000..c25c564 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.html @@ -0,0 +1,278 @@ + + + + + +
+
+
+

Menu Access Control

+
+
+ Edit Mode +
+
+
+ For + + Show All Only Main Menu + +
+
+
+ +
+
+ +
+ +
+
+ + + + + + + + Loading ... +
No data available
+
+ + + NO + + + Menu Item Name + + + View + + + Create + + + Edit + + + Delete + + + + Query + + + Export + + + + {{i+1}} + {{all.menuItemDesc}} +    {{all.menuItemDesc}} + + + + + + + + + + + + + + + + + + + + + + +
Menuname
+
+
+ + + + Record per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} Records + + +
+ + + + Loading ... +
No data available
+
+ + + NO + + + Menu Item Name + + + View + + + Create + + + Edit + + + Delete + + + + Query + + + Export + + + + {{i+1}} + {{all.menuItemDesc}} + + + + + + + + + + + + + + + +
Menuname
+
+
+
+ + + Record per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} Records + + +
+ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.scss new file mode 100644 index 0000000..1b7ad42 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.scss @@ -0,0 +1,99 @@ +input[type=text],[type=date],[type=password],[type=checkbox] { + width: 100%; + padding: 15px 20px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} +.required-field{ + color: red; +font-size: 18px; + +} +// select{ +// width: 100%; +// padding: 5px 5px; +// border: 1px solid #ccc; +// border-radius: 4px; +// } +.td-title { + text-align: center; + width: 150px; +color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + //color: rgb(24, 13, 13); +} +th{ + //background-color:rgb(170, 169, 169); + font-weight: bold; +} +.td-content{ + text-align: left; +} +.delete,.heading{ + text-align: center; + color: red; +} +//toggle button +.switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; +} + +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; +} + +.slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; +} + +input:checked + .slider { + background-color: #0072a3; +} + +input:focus + .slider { + box-shadow: 0 0 1px #0072a3; +} + +input:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); +} + + .slider.round { + border-radius: 34px; + } + + .slider.round:before { + border-radius: 50%; + } diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.spec.ts new file mode 100644 index 0000000..46c2323 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MenuaccesscontrolComponent } from './menuaccesscontrol.component'; + +describe('MenuaccesscontrolComponent', () => { + let component: MenuaccesscontrolComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MenuaccesscontrolComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(MenuaccesscontrolComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.ts new file mode 100644 index 0000000..7d1073c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menuaccesscontrol/menuaccesscontrol.component.ts @@ -0,0 +1,232 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { MenuGroupService } from 'src/app/services/admin/menu-group.service'; +import { MenumaintanceService } from 'src/app/services/admin/menumaintance.service'; +import { UsergrpmaintainceService } from 'src/app/services/admin/usergrpmaintaince.service'; +import { UsermaintanceService } from '../../../../services/admin/usermaintance.service'; +@Component({ + selector: 'app-menuaccesscontrol', + templateUrl: './menuaccesscontrol.component.html', + styleUrls: ['./menuaccesscontrol.component.scss'] +}) +export class MenuaccesscontrolComponent implements OnInit { + loading = false; + givendata; + alldata; + colvalue="true"; + usergrpid=1; + secmenuaccessdata; + modalAdd= false; + modaledit=false; + modaldelete=false; + modaldelete1=false; + rowSelected :any= {}; + public entryForm: FormGroup; + selected = "true"; + menudata; + menus; + menuselectid=1; + msg; + error; + mcreate; + medit; + mdelete; + toggle: boolean = false; + maindata; + showdata; + constructor(private mainservice:UsermaintanceService, + private _fb: FormBuilder, + private toastr:ToastrService, + private route:ActivatedRoute, + private usergrpservice:UsergrpmaintainceService, + private menuGroupService: MenuGroupService, + private menuservice:MenumaintanceService,) { } + + ngOnInit(): void { + this.showdata = this.menuGroupService.getdata(); + console.log(this.showdata); + this.mcreate=this.showdata.mcreate; + console.log(this.mcreate); + this.mdelete=this.showdata.mdelete + console.log(this.mdelete); + this.medit=this.showdata.medit + console.log(this.medit); + this.dropddowngetdata(); + // this.getall(); +this.getbyuseriddata(); + +this.entryForm=this._fb.group({ + grpid:this.usergrpid , + gmenuid:this.menuselectid , + }); + +} +dropddowngetdata(){ + this.usergrpservice.getAll().subscribe((data) => { + console.log(data); + this.givendata = data; + }); +} +getdata(){ + this.menuservice.getByCurrentUserMenuGroupId1().subscribe(resp => { + this.menus = resp; + console.log('menus: ', this.menus); +}) +} +getall(){ + this.usergrpservice.getall().subscribe((data)=>{ + this.secmenuaccessdata=data + console.log(data); + }) +} +idofselected(val){ + console.log(val); + this.usergrpid=val; + +} +idselected(val){ + console.log(val) + this.menuselectid=val; +} +getbyuseriddata(){ + this.usergrpservice.getbyusergrpid(this.usergrpid).subscribe((data)=>{ + this.alldata=data; + console.log(this.alldata); + if(this.alldata.array?.length === 0){ + this.msg='No Data Availabel' + } + for(this.alldata; this.alldata>=100;this.alldata++){ + this.maindata=this.alldata.menuId === 0 + console.log(this.maindata) + } + + // console.log(this.menudata) + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.error="No data Available" + } + }); +} +modaladd(){ + this.modalAdd=true; + this.getdata(); +} +onSubmit(){ + this.modalAdd=false; + this.entryForm.value.grpid=this.usergrpid; + this.entryForm.value.gmenuid=this.menuselectid; + console.log(this.entryForm.value); + this.menuservice.create2(this.entryForm.value).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Added successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not added Data Getting Some Error'); + } + }); + +} +modalEdit(row){ +this.rowSelected=row; +console.log(this.rowSelected); +this.modaledit=true; +} +modalDelete(row){ + this.rowSelected=row; + console.log(this.rowSelected) +this.modaldelete=true; +} +delete(id,usrgrp){ + this.modaldelete=false; +this.usergrpservice.delete(id,usrgrp).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Deleted successfully'); + } +},(error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Deleted Data Getting Some Error'); + } +}); +} +modaldeletemainmenu(row){ +this.rowSelected=row; +console.log(this.rowSelected) +this.modaldelete1=true; +} +delete1(id,usrgrp){ + this.modaldelete1=false; +this.usergrpservice.deletemain(id,usrgrp).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Deleted successfully'); + } +},(error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Deleted Data Getting Some Error'); + } +}); +} +onUpdate(id:any,usrgrp:any){ + this.modaledit=false; + console.log(id,usrgrp); + this.menuservice.update2(id,usrgrp,this.rowSelected).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Updated successfully'); + } + }, (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Updated Data Getting Some Error'); + } + }); +} +onChecked(value){ + if(value=="y") + { + this.selected="y" + console.log(this.selected); // make a call for checked + } + else + { + this.selected="n"// make a call for unchecked + } +} +changedelete(val){ + console.log(val); + val=this.colvalue=val; + console.log(val); +} +data:{}; +Sync(id:any,row){ + this.rowSelected = row; + console.log(id); +if(this.rowSelected.subMenus!=0){ +this.rowSelected.subMenus=[] +}console.log(this.rowSelected); +this.menuservice.sink(id,this.rowSelected).subscribe((data)=>{ +console.log(data); +if (data) { + this.toastr.success('SYNC successfully'); + } +},(error) => { console.log(error); + if(error){ + this.toastr.error('Not SYNC Data Getting Some Error'); + } }) +} +toggleCheckbox() { + this.toggle = !this.toggle; + //this.dataService.setDivToggler(this.toggler); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.html new file mode 100644 index 0000000..2c14c90 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.html @@ -0,0 +1,412 @@ + + + + + +
+
+

Menu Maintenance

+ Main Menu
+ +
+ +
+
+ + +
+ + + + + +
+
+ + + Loading ... +
{{error}}
+ + + + + NO. + + + Menu Item Name + + + ID + + + Sequence + + + Module Name + + + Menu Action Link + + + Status + + + Sub Menu + + + Action + + + + + + + {{i+1}} + {{user.menuItemDesc}} + {{user.menuId}} + {{user.itemSeq}} + {{user.moduleName}} + {{user.main_menu_action_name}} + {{user.status}} + + + + + + +
Who Column
+
Account ID: {{user.accountId}}
+
Created At: {{user.createdAt| date}}
+
Created By: {{user.createdBy}}
+
Updated At: {{user.updatedAt | date}}
+
Updated By: {{user.updatedBy}}
+
+
+
+ + + + + + + + +
Menu Name: {{user.menuItemDesc}}
+
+
+ + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.scss new file mode 100644 index 0000000..ab11a3c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.scss @@ -0,0 +1,62 @@ +input[type=text],[type=date],[type=password] { + width: 100%; + padding: 15px 20px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} +.required-field{ + color: red; +font-size: 18px; + +} +.green{ + background-color: rgb(156, 231, 156); + color: black; +} +.blue{ + background-color: #57abcf;//rgb(82, 87, 161); + color: black; +} +input.ng-invalid.ng-touched { + border-color: red; +} + +.error_mess { + color: red; +} +.td-title { + text-align: center; + width: 150px; +color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + //color: rgb(24, 13, 13); +} +th{ + //background-color:rgb(170, 169, 169); + font-weight: bold; +} +.td-content{ + text-align: left; +} +.delete,.heading{ + text-align: center; + color: red; +} +.section p { +background-color: rgb(206, 201, 201); + padding: 10px; + font-size: 18px; +} + +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.spec.ts new file mode 100644 index 0000000..4024471 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MenumaintanceComponent } from './menumaintance.component'; + +describe('MenumaintanceComponent', () => { + let component: MenumaintanceComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MenumaintanceComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(MenumaintanceComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.ts new file mode 100644 index 0000000..6a84908 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/menumaintance/menumaintance.component.ts @@ -0,0 +1,207 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ToastrService } from 'ngx-toastr'; +import {MenumaintanceService} from '../../../../services/admin/menumaintance.service'; +import { Rn_Main_Menu } from '../../../../models/builder/Rn_Main_Menu'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MenuGroupService } from 'src/app/services/admin/menu-group.service'; +import { CsvService } from 'src/app/services/csv.service'; +import { ExcelService } from 'src/app/services/excel.service'; +import * as moment from 'moment'; +@Component({ + selector: 'app-menumaintance', + templateUrl: './menumaintance.component.html', + styleUrls: ['./menumaintance.component.scss'] +}) +export class MenumaintanceComponent implements OnInit { + loading = false; + selected: any[] = []; + rowSelected :any= {}; + modaldelete=false; + modalAdd= false; + modaledit=false; + givendata; + menus: Rn_Main_Menu[]; + mainid=0; + public entryForm: FormGroup; + mcreate; + mdelete; + medit; + showdata; + error; + submitted=false; + constructor(private menuservice:MenumaintanceService, + private toastr:ToastrService, + private excel: ExcelService, + private _fb: FormBuilder, + private route:ActivatedRoute, + private menuGroupService: MenuGroupService, + private csvService: CsvService, + private router: Router,) { } + + ngOnInit(): void { + this.showdata = this.menuGroupService.getdata(); + console.log(this.showdata); + this.mcreate=this.showdata.mcreate; + console.log(this.mcreate); + this.mdelete=this.showdata.mdelete + console.log(this.mdelete); + this.medit=this.showdata.medit + console.log(this.medit); + + // this.menuservice.getAll().subscribe((data) => { + // console.log(data); + // this.givendata = data; + // }); + + this.entryForm = this._fb.group({ + // menuItemId:[null], + menuId:[null], + menuItemDesc:['',[Validators.required]] , + itemSeq:['',[Validators.required, Validators.pattern(/^-?(0|[1-9]\d*)?$/)]] , + moduleName:['',[Validators.required]] , + status:['',[Validators.required]] , + main_menu_action_name:['',[Validators.required]], + main_menu_icon_name:['',[Validators.required]] + }); + this.getdata(); + } + getdata(){ + this.menuservice.getByCurrentUserMenuGroupId1().subscribe(resp => { + this.menus = resp; + console.log('menus: ', this.menus); + if(this.menus.length==0){ + this.error="No data Available"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }) + } + onSubmit(){ + this.submitted=true; + if (this.entryForm.invalid) { + return; + } +this.menuservice.create1(this.entryForm.value).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Added successfully'); + } + this.ngOnInit(); +}, +(error) => { +console.log('Error in adding data...',+error); +if(error){ + this.toastr.error('Not added Data Getting Some Error'); +} +this.getdata(); +}); +this.modalAdd=false; + } + goToAdd() { + this.modalAdd=true; + } + submenu(id:any){ + this.router.navigate(["../submenu/" +id], { relativeTo: this.route }) + } + data:{}; + shrink(id:any,row){ + this.rowSelected = row; + console.log(this.rowSelected); +if(this.rowSelected.subMenus!=0){ + this.rowSelected.subMenus=[] +}console.log(this.rowSelected); +this.menuservice.sink(id,this.rowSelected).subscribe((data)=>{ + console.log(data); +}) + } + goToEdit(row) { + this.rowSelected = row; + console.log(row) + this.modaledit=true; + //this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id) + { + this.modaldelete = false; + console.log("in delete "+id); + this.menuservice.delete1(id).subscribe((data)=>{ + console.log(data); + this.toastr.success('Deleted successfully'); + this.ngOnInit(); + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Deleted Data Getting Some Error'); + } + }); + + } + onUpdate(id){ + this.modaledit=false; +this.menuservice.update1(id,this.rowSelected).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Updated successfully'); + } +}, +(error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not updated Data Getting Some Error'); + } +}); + } + + onExport() { + this.excel.exportAsExcelFile(this.givendata, 'menumaintanance_', + moment().format('YYYYMMDD_HHmmss')) + } + + // csv + + modalCsv = false; + selectedFiles: File; + fileList; + ttype = 'menumaintenance'; + + + // Import CSV + public selectFile(event) { + this.selectedFiles = event.target.files[0]; + // this.saveCsv(); + } + + csvImport() { + console.log("import CSV"); + this.modalCsv = true; + } + saveCsv() { + this.csvService.importCsv(this.selectedFiles, this.ttype).subscribe(data => { + console.log(data); + this.fileList = data; + this.modalCsv = false; + }, + (error) => { + console.log(error); + if (error.status == 202) { + this.toastr.success(error.error.text) + } + }); + } + + downloadFiles() { + this.csvService.downloadCsvs(this.ttype); + + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.html new file mode 100644 index 0000000..c74922e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.html @@ -0,0 +1,146 @@ + + + + + +
+
+

Modules

+
+
+ + +
+
+ + + + Loading ... +
{{error}}
+ + + Modules + + + Description + + + Access Exclusive + + + + + + {{user.modules}} + {{user.description}} + {{user.access_exclusive}} + + + + + + + + + + + + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+ + + + + + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.scss new file mode 100644 index 0000000..ab11a3c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.scss @@ -0,0 +1,62 @@ +input[type=text],[type=date],[type=password] { + width: 100%; + padding: 15px 20px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} +.required-field{ + color: red; +font-size: 18px; + +} +.green{ + background-color: rgb(156, 231, 156); + color: black; +} +.blue{ + background-color: #57abcf;//rgb(82, 87, 161); + color: black; +} +input.ng-invalid.ng-touched { + border-color: red; +} + +.error_mess { + color: red; +} +.td-title { + text-align: center; + width: 150px; +color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + //color: rgb(24, 13, 13); +} +th{ + //background-color:rgb(170, 169, 169); + font-weight: bold; +} +.td-content{ + text-align: left; +} +.delete,.heading{ + text-align: center; + color: red; +} +.section p { +background-color: rgb(206, 201, 201); + padding: 10px; + font-size: 18px; +} + +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.spec.ts new file mode 100644 index 0000000..cf10dbf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ModulesComponent } from './modules.component'; + +describe('ModulesComponent', () => { + let component: ModulesComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ModulesComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ModulesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.ts new file mode 100644 index 0000000..fcb005c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/modules/modules.component.ts @@ -0,0 +1,116 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ToastrService } from 'ngx-toastr'; +import { AccesstypeService } from 'src/app/services/admin/accesstype.service'; + +@Component({ + selector: 'app-modules', + templateUrl: './modules.component.html', + styleUrls: ['./modules.component.scss'] +}) +export class ModulesComponent implements OnInit { + loading = false; + selected: any[] = []; + rowSelected :any= {}; + modaldelete=false; + modalAdd= false; + modaledit=false; + error; + data; + submitted=false; + public entryForm: FormGroup; + constructor(private _fb: FormBuilder,private accesstype:AccesstypeService, + private toastr:ToastrService,) { } + + ngOnInit(): void { + this.entryForm = this._fb.group({ + modules:['',[Validators.required]], + description:['',[Validators.required]] , + access_exclusive:['',[Validators.required]], + }); + this.getdata(); + } + getdata(){ + this.accesstype.getAll1().subscribe(resp => { + this.data = resp; + console.log('menus: ', this.data); + if(this.data.length==0){ + this.error="No data Available"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }) + } + goToAdd(){ + this.modalAdd=true; + } + onSubmit(){ + console.log(this.entryForm.value); + this.submitted=true; + if (this.entryForm.invalid) { + return; + } + this.accesstype.create1(this.entryForm.value).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Added successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not added Data Getting Some Error'); + } + + }); + this.modalAdd=false; + } + goToEdit(row) { + this.rowSelected = row; + console.log(row) + this.modaledit=true; + //this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id) + { + this.modaldelete = false; + console.log("in delete "+id); + this.accesstype.delete1(id).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Deleted successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Deleted Data Getting Some Error'); + } + }); + + } + onUpdate(id){ + this.modaledit=false; +this.accesstype.update1(id,this.rowSelected).subscribe((data)=>{ +console.log(data); +if (data) { + this.toastr.success('Updated successfully'); + } +}, +(error) => { +console.log('Error in adding data...',+error); +if(error){ + this.toastr.error('Not updated Data Getting Some Error'); +} +}); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.html new file mode 100644 index 0000000..472d4bb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.html @@ -0,0 +1,43 @@ +
+
+

Please Reset Your Password

+

you're signed in as {{ email }}

+
+ +
+
+ + +
+
Password is required
+
+
+
+ + +
+
password is required
+
Password must be Minimum 3 Characters
+
+
+
+ + +
+
Password is required.
+
Password and Confirm Password must be match.
+
+
+ +
+
+
+

Wrong account? Log in instead.

+
+
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.scss new file mode 100644 index 0000000..3ee7d64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.scss @@ -0,0 +1,83 @@ +//@import '../../../../../styles1.scss'; + + +//** variables +$background: #f5f6fa; +$text: #9c9c9c; +$input-bg-color: #fff; +$input-text-color: #a3a3a3; +$button-bg-color: #7f8ff4; +$button-text-color: #fff; +$google-button-bg-color: #7f8ff4; +$linkedin-button-bg-color: #4b76eb; + +//** root +:root { + background: $background; + color: $text; + font: 1rem "PT Sans", sans-serif; +} + +//** helper +.display_msg { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.form { + /* margin-left: auto; + margin-right: auto; */ + &__field { + // width: 360px; + // //background: #fff; + // color: $input-text-color; + // font: inherit; + // //box-shadow: 0 6px 10px 0 rgba(0, 0, 0 , .1); + // border: 1 solid rgb(235, 230, 230); + // background-color:rgb(255, 255, 255); + // display: inline-block; + // border-radius: 4px; + // box-sizing: border-box; + // //outline: 0; + // padding: 6px 9px; + width: 360px; + padding: 9px 11px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } +} + +.btn { + display: inline-block; + background: transparent; + color: inherit; + font: inherit; + border: 0; + outline: 0; + padding: 0; + transition: all 200ms ease-in; + cursor: pointer; + + &--primary { + background: $button-bg-color; + color: $button-text-color; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + width: 100%; + + &:hover { + background: darken($button-bg-color, 4%); + } + + &:active { + background: $button-bg-color; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.spec.ts new file mode 100644 index 0000000..e6bd9ac --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PasswordResetComponent } from './password-reset.component'; + +describe('PasswordResetComponent', () => { + let component: PasswordResetComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PasswordResetComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PasswordResetComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.ts new file mode 100644 index 0000000..d17961f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/password-reset/password-reset.component.ts @@ -0,0 +1,109 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { UserRegistrationService } from 'src/app/services/admin/user-registration.service'; +import { UserInfoService } from 'src/app/services/user-info.service'; + +export interface ResetPasswordRequest { + oldPassword: string; + newPassword: string; +} +@Component({ + selector: 'app-password-reset', + templateUrl: './password-reset.component.html', + styleUrls: ['./password-reset.component.scss'] +}) +export class PasswordResetComponent implements OnInit { + + emailErrMsg: string = "" + oldpHide: boolean = true; + oldIcon: string = "eye"; + oldShapeChanger() { + this.oldpHide = !this.oldpHide; + if(this.oldpHide){ + this.oldIcon = 'eye' + } else { + this.oldIcon = 'eye-hide' + } + } + newpHide: boolean = true; + newIcon: string = "eye"; + newShapeChanger() { + this.newpHide = !this.newpHide; + if(this.newpHide){ + this.newIcon = 'eye' + } else { + this.newIcon = 'eye-hide' + } + } + cpHide: boolean = true; + conIcon: string = "eye"; + comfShapeChanger() { + this.cpHide = !this.cpHide; + if(this.cpHide){ + this.conIcon = 'eye' + } else { + this.conIcon = 'eye-hide' + } + } + + constructor( private _fb: FormBuilder, + private router: Router, + private route: ActivatedRoute, + private userRegistrationService: UserRegistrationService, + private userInfoService: UserInfoService) { } + + email: string; + resetPasswordForm: FormGroup; +userid; + ngOnInit(): void { + this.email = this.userInfoService.getEmail(); + this.userid=this.userInfoService.getUserId(); + console.log(this.userid); + + this.resetPasswordForm = this._fb.group({ + userId:this.userid, + oldPassword: ['', Validators.required], + newPassword: ['', [Validators.required, Validators.minLength(3)]], + confirmPassword: ['', [Validators.required]] + }, { + validator: ConfirmedValidator('newPassword', 'confirmPassword') + }); + } + get f() { return this.resetPasswordForm.controls; } + + submitted = false; + onSubmit() { + console.log('this.resetPasswordForm.value : ', this.resetPasswordForm.value); + this.submitted = true; + if(this.resetPasswordForm.invalid){ + return; + } + this.resetPassword(); + } + + resetPassword() { + this.userRegistrationService.resetPassword(this.resetPasswordForm.value) + .subscribe((res) => { + console.log('success ', res); + this.router.navigate(["../user-account"], { relativeTo: this.route }); + },(err) => { + console.log('failure ', err); + }); + } +} + +export function ConfirmedValidator(controlName: string, matchingControlName: string){ + return (formGroup: FormGroup) => { + const control = formGroup.controls[controlName]; + const matchingControl = formGroup.controls[matchingControlName]; + if (matchingControl.errors && !matchingControl.errors.confirmedValidator) { + return; + } + if (control.value !== matchingControl.value) { + matchingControl.setErrors({ confirmedValidator: true }); + } else { + matchingControl.setErrors(null); + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.html new file mode 100644 index 0000000..37105ea --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.html @@ -0,0 +1,266 @@ + +
+ + + + + + +
+

My Profile Settings

+ +
+ Avatar +
+ + Avatar + +
{{ message }}
+ + + + + + + +
+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+ + + + +
+
+ +
+ +
+
+ +
+ +
+ + +
+ + + +
Password: Change Password for your account Change password
+
+
+ + +
+ + +
+ + +
Security: Logout of all sessions except this current browser Logout other + sessions
+
+
+ + +
+ + +
+ + +
Deactivation: Remove access to all organizations and workspace in cloudnsure Deactivate account
+
+ +
+ + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.scss new file mode 100644 index 0000000..ec6f039 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.scss @@ -0,0 +1,10 @@ +input[type=text],[type=date],textarea,[type=number] { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.spec.ts new file mode 100644 index 0000000..c4570be --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ProfileSettingComponent } from './profile-setting.component'; + +describe('ProfileSettingComponent', () => { + let component: ProfileSettingComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ProfileSettingComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ProfileSettingComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.ts new file mode 100644 index 0000000..5483ddb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/profile-setting/profile-setting.component.ts @@ -0,0 +1,223 @@ + +import { HttpClient, HttpEventType } from '@angular/common/http'; +import { Component, OnInit, ViewChild, ViewEncapsulation } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { UserProfile, UserProfileService } from '../../../../services/admin/user-profile.service'; +import { DomSanitizer } from '@angular/platform-browser'; +import { AlertService } from '../../../../services/alert.service'; +import { ToastrService } from 'ngx-toastr'; +import { Dimensions, ImageCroppedEvent, ImageTransform } from 'ngx-image-cropper'; +//import { ImageCroppedEvent } from '../image-cropper/interfaces/image-cropped-event.interface'; +//import { ImageCropperComponent } from '../image-cropper/component/image-cropper/image-cropper.component'; +@Component({ + selector: 'app-profile-setting', + templateUrl: './profile-setting.component.html', + styleUrls: ['./profile-setting.component.scss'] +}) +export class ProfileSettingComponent implements OnInit { + updated = false; + userProfile: UserProfile; + roles = ['user', 'admin', 'mis report', 'bi report']; + transform: ImageTransform = {}; + model=false; + constructor( + private router: Router, + private route: ActivatedRoute, + private userProfileService: UserProfileService, + private http: HttpClient, + private alertService: AlertService, + private _sanitizer: DomSanitizer, + private toastr: ToastrService, + ) { } + + ngOnInit(): void { + + this.getUserProfile(); + this.getProfilePic(); + } + getUserProfile() { + this.userProfileService.getUserProfile().subscribe(res => { + console.log(res); + this.userProfile = res; + }) + } + + update() { + this.userProfileService.updateUserProfile(this.userProfile).subscribe( + (resp) => { + console.log(resp); + //this.router.navigate(["../../all"], { relativeTo: this.route }); + }, + (error) => { + console.log(error); + } + ); + //this.picUpload(); + } + + public profilePic: File = null; + onSelectFile(event) { + let flag = 0; + const mimeType = event.target.files[0].type; + if(mimeType.match(/image\/*/) === null ){ + this.message = 'Only Image Type Is Supported'; + flag = flag + 1; + return; + } + const size = event.target.files[0].size; + if(size > 5000000) { + flag = flag + 1; + this.message = 'Plese Select image file under 2 MB'; + return; + } + console.log('flag value = ', flag); + if(flag === 0) { + this.profilePic = event.target.files[0]; + console.log(this.profilePic); + const reader = new FileReader(); + this.image = this.profilePic; + reader.readAsDataURL(this.profilePic); + reader.onload = (_event) => { + this.image = reader.result; + } + this.picUpload(); + } + + } + + message: string; + picUpload() { + this.userProfileService.uploadUserProfilePic(this.profilePic).subscribe(res => { + console.log(res); + if(res.type === HttpEventType.UploadProgress){ + console.log('Upload Progress : ', + Math.round(res.loaded / res.total * 100) + '%'); + } else if(res.type === HttpEventType.Response) { + if (res.status === 200) { + this.alertService.success('Image uploaded successfully'); + //this.message = 'Image uploaded successfully'; + } else { + this.message = 'Image not uploaded'; + } + } + }, err => {console.log(err); + }); + } + image: any; + getProfilePic() { + this.userProfileService.getProfilePic().subscribe(res => { + console.log(res); + this.image = this._sanitizer.bypassSecurityTrustResourceUrl(res.image); + }, err => {console.log(err);} + ); + } + + /*picUpload() { + const uploadImageData = new FormData(); + uploadImageData.append('imageFile', this.profilePic, this.profilePic.name); + this.http.post('http://localhost:9119/api/upload', uploadImageData, { observe: 'response' }) + .subscribe((res) => { + console.log(res); + if (res.status === 200) { + this.message = 'Image uploaded successfully'; + } else { + this.message = 'Image not uploaded successfully'; + } + } + ); + }*/ + + + onSubmit() { + this.updated = true; + this.update(); + } + imageChangedEvent: any = ''; + croppedImage: any = ''; + canvasRotation = 0; + rotation = 0; + scale = 1; + showCropper = false; + containWithinAspectRatio = false; + fileChangeEvent(event: any): void { + this.imageChangedEvent = event; + } + imageCropped(event: ImageCroppedEvent) { + this.croppedImage = event.base64; + this.profilePic=this.croppedImage; + + } + imageLoaded() { + this.showCropper = true; + console.log('Image loaded'); + } + + cropperReady(sourceImageDimensions: Dimensions) { + console.log('Cropper ready', sourceImageDimensions); + } + loadImageFailed() { + // show message + } + rotateLeft() { + this.canvasRotation--; + this.flipAfterRotate(); + } + + rotateRight() { + this.canvasRotation++; + this.flipAfterRotate(); + } + + private flipAfterRotate() { + const flippedH = this.transform.flipH; + const flippedV = this.transform.flipV; + this.transform = { + ...this.transform, + flipH: flippedV, + flipV: flippedH + }; + } + + + flipHorizontal() { + this.transform = { + ...this.transform, + flipH: !this.transform.flipH + }; + } + + flipVertical() { + this.transform = { + ...this.transform, + flipV: !this.transform.flipV + }; + } + zoomOut() { + this.scale -= .1; + this.transform = { + ...this.transform, + scale: this.scale + }; +} + +zoomIn() { + this.scale += .1; + this.transform = { + ...this.transform, + scale: this.scale + }; +} + +toggleContainWithinAspectRatio() { + this.containWithinAspectRatio = !this.containWithinAspectRatio; +} + +updateRotation() { + this.transform = { + ...this.transform, + rotate: this.rotation + }; +} +openmodal(){ + this.model=true; +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.html new file mode 100644 index 0000000..c287cb4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.html @@ -0,0 +1,99 @@ + + + + +
+
+
+

Session Logger

+
+
+ + + +
+
+ + + + + + + + + Loading ... +
{{error}}
+ + + Client Ip + + + lastAccessDate + + + Log In Time + + + Log Out Time + + + Session Id + + + User Id + + + User Name + + + + + + + + {{user.clientIp}} + {{user.lastAccessDate}} + {{user.logintime}} + {{user.logouttime}} + {{user.sessionId}} + {{user.userId.userId}} + {{user.userId.username}} + + + + + + + + + + + + + Record per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} Records + + +
+
+ + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.scss new file mode 100644 index 0000000..76ab29b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.scss @@ -0,0 +1,4 @@ +.delete,.heading{ + text-align: center; + color: red; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.spec.ts new file mode 100644 index 0000000..149e2eb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SessionloggerComponent } from './sessionlogger.component'; + +describe('SessionloggerComponent', () => { + let component: SessionloggerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SessionloggerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SessionloggerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.ts new file mode 100644 index 0000000..4ffab36 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/sessionlogger/sessionlogger.component.ts @@ -0,0 +1,69 @@ +import { Component, OnInit } from '@angular/core'; +import { SessionloggerService } from 'src/app/services/admin/sessionlogger.service'; +import * as moment from 'moment'; +import { ExcelService } from 'src/app/services/excel.service'; +import { ToastrService } from 'ngx-toastr'; +import { HttpErrorResponse } from '@angular/common/http'; +@Component({ + selector: 'app-sessionlogger', + templateUrl: './sessionlogger.component.html', + styleUrls: ['./sessionlogger.component.scss'] +}) +export class SessionloggerComponent implements OnInit { + loading = false; + error; + data; + modaldelete=false; + rowSelected :any= {}; + constructor(private sessionservice:SessionloggerService,private excel: ExcelService, + private toastr: ToastrService,) { } + + ngOnInit(): void { + this.getdata(); + } + getdata(){ + this.sessionservice.getAll().subscribe((data)=>{ + this.data=data; + console.log(this.data); + if(this.data.length==0){ + this.error="No data Available plz add if Required"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="server Error"; + } + }); + + + } + onExport(){ + this.excel.exportAsExcelFile(this.data, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + modaldel(row){ + this.rowSelected = row; + this.modaldelete=true; + console.log(this.rowSelected); + } + delete(id) + { + console.log("in delete "+id); + this.sessionservice.delete(id).subscribe( + (data) => { + console.log(data); + //this.ngOnInit(); + },(error:HttpErrorResponse) => { + console.log(error); + if(error.status==200){ + this.toastr.success(error.error.text); + } + if(error.status==404){ + this.toastr.error(error.error); + } + + }); + this.modaldelete=false; + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.html new file mode 100644 index 0000000..a685d03 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.html @@ -0,0 +1,250 @@ + + + + + +
+
+

Sub-Menu Maintenance

+ Sub Menu
+ +
+
+ +
+
+ + + + + Loading ... + + + NO. + + + Sub-Menu Item Name + + + ID + + + Sequence + + + Module Name + + + Menu Action Link + + + Status + + + + {{i+1}} + {{user.menuItemDesc}} + {{user.menuId}} + {{user.itemSeq}} + {{user.moduleName}} + {{user.main_menu_action_name}} + {{user.status}} + + + + + + + + + + + + +
Menu Name: {{user.menuItemDesc}}
+
+
+ + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+ + + + + + + + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.scss new file mode 100644 index 0000000..aad7811 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.scss @@ -0,0 +1,62 @@ +input[type=text],[type=date],[type=password],[type=number] { + width: 100%; + padding: 15px 20px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.required-field{ + color: red; +font-size: 18px; + +} +.green{ + background-color: rgb(156, 231, 156); + color: black; +} +.blue{ + background-color: #57abcf;//rgb(82, 87, 161); + color: black; +} +.td-title { + text-align: center; + width: 150px; +color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + //color: rgb(24, 13, 13); +} +th{ + //background-color:rgb(170, 169, 169); + font-weight: bold; +} +.td-content{ + text-align: left; +} +.delete,.heading{ + text-align: center; + color: red; +} +.section p { +background-color: rgb(206, 201, 201); + padding: 10px; + font-size: 18px; +} + +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} +input.ng-invalid.ng-touched { + border-color: red; +} + +.error_mess { + color: red; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.spec.ts new file mode 100644 index 0000000..6d85802 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SubmenuComponent } from './submenu.component'; + +describe('SubmenuComponent', () => { + let component: SubmenuComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SubmenuComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SubmenuComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.ts new file mode 100644 index 0000000..ae45378 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/submenu/submenu.component.ts @@ -0,0 +1,138 @@ +import { Component, OnInit } from '@angular/core'; +import {MenumaintanceService} from '../../../../services/admin/menumaintance.service'; +import { Rn_Main_Menu } from '../../../../models/builder/Rn_Main_Menu'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AbstractControl, FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ToastrService } from 'ngx-toastr'; + + +function numberValidator(control: AbstractControl): { [key: string]: any } | null { + const value = control.value; + return isNaN(value) ? { 'notANumber': { value } } : null; +} + +@Component({ + selector: 'app-submenu', + templateUrl: './submenu.component.html', + styleUrls: ['./submenu.component.scss'] +}) +export class SubmenuComponent implements OnInit { + loading = false; + modalAdd= false; + modaledit=false; + modaldelete=false; + selected: any[] = []; + rowSelected :any= {}; + givendata; + menus: Rn_Main_Menu[]; + sub; + id; + mainid; + submitted=false; + public entryForm: FormGroup; + constructor(private menuservice:MenumaintanceService, + private toastr:ToastrService, + private _fb: FormBuilder, + private route:ActivatedRoute, + private router: Router,) { } + + ngOnInit(): void { + this.id = this.route.snapshot.params["id"]; + console.log("project mainmenu with id = ", this.id); + this.getById(this.id); +this.mainid=this.id + this.entryForm = this._fb.group({ + // menuItemId:[null], + menuId:[this.mainid], + menuItemDesc:['',[Validators.required]] , + // itemSeq:['',[Validators.required]] , + // itemSeq: ['', [Validators.required, numberValidator]], + itemSeq: ['', [Validators.required, Validators.pattern('^[0-9]*$')]], + moduleName:['',[Validators.required]] , + status:['',[Validators.required]] , + main_menu_action_name:['',[Validators.required]] + }); + + // this.getdata(); + } + getById(id:any){ + this.menuservice.getbyid(id).subscribe((data)=>{ + this.sub=data; + console.log(this.sub) + }) + } + getdata(){ + this.menuservice.getByCurrentUserMenuGroupId1().subscribe(resp => { + this.menus = resp; + console.log('menus: ', this.menus); + }) + } + goToAdd() { + this.modalAdd=true; + } + onSubmit(){ + this.submitted=true; + if (this.entryForm.invalid) { + return; + } + this.menuservice.create1(this.entryForm.value).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Added successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not added Data Getting Some Error'); + } + + }); + this.modalAdd=false; + } + + goToEdit(row) { + this.rowSelected = row; + console.log(row) + this.modaledit=true; + //this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id) + { + this.modaldelete = false; + console.log("in delete "+id); + this.menuservice.delete1(id).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Deleted successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Deleted Data Getting Some Error'); + } + }); + + } + onUpdate(id){ + this.modaledit=false; + this.menuservice.update1(id,this.rowSelected).subscribe((data)=>{ + console.log(data); + if (data) { + this.toastr.success('Updated successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not updated Data Getting Some Error'); + } + }); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.html new file mode 100644 index 0000000..22e9a4f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.html @@ -0,0 +1,678 @@ + + + + + + + + + + +

Edit Mode

+
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ + + + + + +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+ +
+
+ + +
+
+ +
+
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ + +
+
+
+
+ +
+
+ +
+
+ + + +
+
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.scss new file mode 100644 index 0000000..5037b31 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.scss @@ -0,0 +1,86 @@ +.name{ + background-color:#c5c9b0; + color: white; + font-size: 15px; +} +// input[type=text],[type=date],[type=datetime-local],textarea { +// height: 30px; +// width: 100%; +// // padding: 15px 15px; +// // //margin: 2px 0; +// // display: inline-block; +// // border: 1px solid #ccc; +// // border-radius: 4px; +// // box-sizing: border-box; +// } +clr-icon{ + margin-left: 5px; +} +.one-line { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 300px; +} +input[type=text], select, textarea { + width: 100%; + padding: 5px; + border: 1px solid #ccc; + border-radius: 4px; + resize: vertical; +} + +label { + padding: 12px 12px 12px 0; + display: inline-block; +} + +input[type=submit] { + // background-color: #04AA6D; + color: white; + padding: 12px 20px; + border: none; + border-radius: 4px; + cursor: pointer; + float: right; +} + +input[type=submit]:hover { + background-color: #45a049; +} + +.container { + border-radius: 5px; + //background-color: #f2f2f2; + padding: 20px; +} + +.col-25 { + float: left; + width: 25%; + margin-top: 5px; +} + +.col-75 { + float: left; + width: 75%; + margin-top: 5px; +} + +/* Clear floats after the columns */ +.row:after { + content: ""; + display: table; + clear: both; +} + +/* Responsive layout - when the screen is less than 600px wide, make the two columns stack on top of each other instead of next to each other */ +@media screen and (max-width: 600px) { + .col-25, .col-75, input[type=submit] { + width: 100%; + margin-top: 0; + } +} +.btn{ + float: right; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.spec.ts new file mode 100644 index 0000000..6eff4ca --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SystemparametersComponent } from './systemparameters.component'; + +describe('SystemparametersComponent', () => { + let component: SystemparametersComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SystemparametersComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SystemparametersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.ts new file mode 100644 index 0000000..107b8ba --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/systemparameters/systemparameters.component.ts @@ -0,0 +1,114 @@ +import { HttpEventType } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { AlertService } from 'src/app/services/alert.service'; +import {SysparameterService} from 'src/app/services/admin/sysparameter.service'; +import { FormBuilder, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import {Systemparameter} from 'src/app/models/admin/systemparameter' +import { ToastrService } from 'ngx-toastr'; + +@Component({ + selector: 'app-systemparameters', + templateUrl: './systemparameters.component.html', + styleUrls: ['./systemparameters.component.scss'], + +}) +export class SystemparametersComponent implements OnInit { + public profilePic: File = null; + message: string; + image: any; + selectedFile: File[]=[]; + public entryForm: FormGroup; + project: Systemparameter; + id=1; + constructor(private alertService: AlertService, + private sysparaservice:SysparameterService, + private _fb: FormBuilder, + private router: Router, + private route: ActivatedRoute, + private toastr: ToastrService,) { } + + ngOnInit(): void { + this.project = new Systemparameter(); + this.getById(this.id); + + this.entryForm = this._fb.group({ + schedulerTime: [null], + leaseTaxCode: [null], + vesselConfProcessLimit: [null], + rowToDisplay: [null], + linkToDisplay: [null], + rowToAdd: [null], + lovRowToDisplay: [null], + lovLinkToDisplay: [null], + oidserverName: [null], + oidBase: [null], + oidAdminUser: [null], + oidServerPort: [null], + userDefaultGroup: [null], + defaultDepartment: [null], + defaultPosition: [null], + singleCharge: [null], + firstDayOftheWeek: [null], + hourPerShift: [null], + cnBillingFrequency: [null], + billingDepartmentCode: [null], + basePriceList: [null], + nonContainerServiceOrder: [null], + ediMaeSchedulerONOFF: [null], + ediSchedulerONOFF: [null], + upload_Logo:[null], + Company_Display_Name:[null] + }); + + } + public onFileChanged(event) { + for (var i = 0; i < event.target.files.length; i++) { + this.selectedFile.push(event.target.files[i]); + } + } + // onSubmit(){ + // this.userObj.status='P'; + // console.log(this.entryForm.value); + // this.mainService.createall(this.entryForm.value,this.selectedFile).subscribe(data => { + // console.log(data) + + // }, + // (error) => { + // console.log(error); + // } + + // ); + // } + adddata(){ + this.sysparaservice.create(this.entryForm.value).subscribe( + (data) => { + console.log(data); + // this.router.navigate(["../../project/all"], { relativeTo: this.route }); + }, + + ); + } + getById(id: number) { + this.sysparaservice.getById(id).subscribe((data) => { + this.project = data; + console.log("getbyiddata",this.project); + }, + (err) => { + console.log(err); + } + ); + } + updatedata(){ + this.sysparaservice.update(this.id, this.project,this.selectedFile).subscribe( + (data) => { + console.log(data); + //this.router.navigate(["../../../project/all"], { relativeTo: this.route }); + }, + + ); + if (this.id) { + this.toastr.success('Updated successfully'); + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.html new file mode 100644 index 0000000..d8c3c77 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.html @@ -0,0 +1,42 @@ + + + +
+
+ CloudnSure +
+
+
+ + +
+ + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.scss new file mode 100644 index 0000000..dbaa7f7 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.scss @@ -0,0 +1,143 @@ +//@import "../../../assets/scss/var"; +/* :host { + display: flex; + flex-direction: row; + justify-content: center; +} */ + +/* .s-login-pg { + width:400px; + display:flex; + padding:0; + margin:48px 16px 16px 16px; + flex-direction: column; + align-items: center; + background-color: white; + border: 1px solid #ccc; + border-radius: 2px; + box-shadow: 0 1px 3px rgba(0,0,0,0.05), 0 1px 2px rgba(0,0,0,0.15); + .s-login-pg-head{ + width:100%; + height:220px; + display:flex; + flex-direction: column; + align-items: center; + background-color: #998; + padding:16px; + color:white; + } + .s-login-pg-form { + width:100%; + height:200px; + display:flex; + flex-direction: column; + align-items: center; + margin:24px 16px; + input{ + margin: 16px; + } + } + .s-login-pg-foot { + width:100%; + min-height:40px; + display:flex; + flex-direction: column; + align-items: center; + } + + +} */ + +//** variables +$background: #f5f6fa; +$text: #9c9c9c; +$input-bg-color: #fff; +$input-text-color: #a3a3a3; +$button-bg-color: #7f8ff4; +$button-text-color: #fff; + +//** root +:root { + background: $background; + color: $text; + font: 1rem "PT Sans", sans-serif; +} + +html, +body, +.container { + height: 100%; +} + +a { + color: inherit; + + &:hover { + color: $button-bg-color; + } +} + +//** helper +.email_check { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.uppercase { + text-transform: uppercase; +} + +//** button +.btn { + display: inline-block; + background: transparent; + color: inherit; + font: inherit; + border: 0; + outline: 0; + padding: 0; + transition: all 200ms ease-in; + cursor: pointer; + + &--primary { + background: $button-bg-color; + color: $button-text-color; + box-shadow: 0 0 10px 2px rgba(0, 0, 0, .1); + border-radius: 2px; + //padding: 12px 36px; + //padding: 7px 158px; + width: 100%; + + &:hover { + background: darken($button-bg-color, 4%); + } + + &:active { + background: $button-bg-color; + box-shadow: inset 0 0 10px 2px rgba(0, 0, 0, .2); + } + } + + /* &--inside { + margin-left: -96px; + } */ +} + +//** form +.form { + /* margin-left: auto; + margin-right: auto; */ + &__field { + width: 360px; + //width: 450px; + background: #fff; + color: $input-text-color; + font: inherit; + box-shadow: 0 6px 10px 0 rgba(0, 0, 0 , .1); + border: 0; + outline: 0; + padding: 22px 18px; + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.spec.ts new file mode 100644 index 0000000..692a6ca --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UserRegistrationComponent } from './user-registration.component'; + +describe('UserRegistrationComponent', () => { + let component: UserRegistrationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ UserRegistrationComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(UserRegistrationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.ts new file mode 100644 index 0000000..52e1126 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user-registration/user-registration.component.ts @@ -0,0 +1,93 @@ + +import { HttpErrorResponse } from "@angular/common/http"; +import { Component, OnInit, ViewEncapsulation } from "@angular/core"; +import { FormArray, FormBuilder, FormGroup, Validators } from "@angular/forms"; +import { ActivatedRoute, Router } from "@angular/router"; + + +import { UserRegistrationService } from "src/app/services/admin/user-registration.service"; + + +export interface EmailRequest { + email: string; +} +@Component({ + selector: 'app-user-registration', + templateUrl: './user-registration.component.html', + styleUrls: ['./user-registration.component.scss'] +}) +export class UserRegistrationComponent implements OnInit { + + model: any = {}; + EmailRequest: EmailRequest; + emailErrMsg: string = "" + emailCheckForm: FormGroup; + constructor(private _fb: FormBuilder, + private router: Router, + private route: ActivatedRoute, + private userRegistrationService: UserRegistrationService) { } + + ngOnInit(): void { + this.userRegistrationService.removeSignedUpUserInfo(); + this.userRegistrationService.removeStoredEmail(); + this.emailCheckForm = this._fb.group({ + email: ['', Validators.email] + }); + } + emailExistCheck() { + console.log('input email: ', this.model.email); + this.userRegistrationService.emailCheck(this.model.email) + .subscribe((res) => { + console.log('email check Res : ', res); + /* if(res == 202) { + this.emailErrMsg = res.body; + // redirect to next page + //this.router.navigate([""]) + } else if(res.status == 409){ + this.emailErrMsg = res.body; + } */ + }, (err) => { + console.log(err); + }); + } + + + get f() { return this.emailCheckForm.controls; } + onSubmit() { + console.log('this.emailCheckForm.value : ', this.emailCheckForm.value); + /* let headers = new HttpHeaders().set("Content-Type", "application/json"); + this.httpService.post('http://localhost:9119/token/email-exists', + JSON.stringify(this.emailCheckForm.value), { headers: headers, responseType: 'text' }) + .subscribe(data => { + console.log('success ', data); + this.router.navigate(["/varify-account"]); + }, err => { + console.log('failure ', err); + //location.reload; + this.emailErrMsg = "Email is Already Exist"; + } + ); */ + this.userRegistrationService.emailCheck(this.emailCheckForm.value) + .subscribe((res) => { + console.log('success ', res); + let email: string = res.message; + email = email.substring(16); + console.log(email); + this.userRegistrationService.storeEmail(email); + this.router.navigate(["/varify-account"]); + },(err: HttpErrorResponse) => { + console.log(err); + console.log(err.error.message); + if(err.status === 409) { + this.emailErrMsg = 'Email Already Exists'; + } else { + this.emailErrMsg = 'Server error'; + } + }); + } + + onSignUp() { + this.router.navigate(["signup"]); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.html new file mode 100644 index 0000000..4d02174 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.html @@ -0,0 +1,606 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

User list

+
+
+ + +
+
+ + user not found! + + + User Id + + + + + Name + + + + + Username + + + + + Role + + + + + email + + + + + {{user1.userId}} + {{user1.firstName}} {{user1.lastName}} + {{user1.username}} + {{user1.role}} + {{user1.email}} + + + + + ˝ + + + + + + + + + + + + + + + + + + + + +
picture
ID{{user1.userId}}
Updated{{user1.updatedAt | date}}
Register{{user1.createdAt | date}}
+
+
+ + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.scss new file mode 100644 index 0000000..62edce4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.scss @@ -0,0 +1,40 @@ +.td-title { + text-align: right; + width: 150px; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + color: white; +} + +.td-content { + text-align: left; +} + +img { + border: 2px solid #245; + border-radius: 5px; +} +.img-class{ + height: 100px; + width: 100px; +} + +input[type=text],[type=date],[type=password] { + width: 100%; + padding: 12px 20px; + margin: 8px 0; + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.delete,.heading{ + text-align: center; + color: red; +} + +.add-pop,.heading{ + text-align: center; + color: green; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.spec.ts new file mode 100644 index 0000000..dd3b1d7 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UserComponent } from './user.component'; + +describe('UserComponent', () => { + let component: UserComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ UserComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UserComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.ts new file mode 100644 index 0000000..f7530c4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/user/user.component.ts @@ -0,0 +1,369 @@ +import { Component, OnInit } from '@angular/core'; +import { AlertService } from '../../../../services/alert.service'; +import { ToastrService } from 'ngx-toastr'; +import { ExcelService } from './../../../../services/excel.service'; +import { MainService } from './../../../../services/main.service'; +import * as moment from 'moment'; +import { ActivatedRoute, Router } from '@angular/router'; +import { UserListService } from '../../../../services/admin/user-list.service'; +import { HttpClient } from '@angular/common/http'; +import { MenuGroupService } from '../../../../services/admin/menu-group.service'; +import { UserInfoService } from '../../../../services/user-info.service'; +import { User } from '../../../../models/admin/user'; + +@Component({ + selector: 'app-user', + templateUrl: './user.component.html', + styleUrls: ['./user.component.scss'] +}) +export class UserComponent implements OnInit { + users: any[] = []; + rowSelected: any = {}; + loading = false; + modalEdit = false; + allusers: any; + // allusers: user; + userst: User; + openAddUser = false; + modaldelete = false; + modalcreate = false; + modalup = false; + tempid: any; + assign = false; + + user = { + id: '', + user_id: '', + name: '', + gender: '', + dob: '', + email: '', + username: '', + password: '' + } + updateU = { + id: '', + user_id: '', + name: '', + gender: '', + dob: '', + email: '', + username: '', + password: '' + } + + updateU1 = { + userId: '', + email: '', + firstName: '', + lastName: '', + username: '', + password: '' + } + + // image related variables + selectedFile: File; + retrievedImage: any; + base64Data: any; + retrieveResonse: any; + message: string; + // imageName: any; + imageName = 'index.jpg'; + + groupData: any; + + userData = { + id: '', + user_id: '', + name: '', + gender: '', + dob: '', + email: '', + username: '', + password: '', + menu_group: '' + } + + constructor( + private _mg: MenuGroupService, + private mainService: MainService, + private alertService: AlertService, + private toastr: ToastrService, + private excel: ExcelService, + private router: Router, + private route: ActivatedRoute, + private _user: UserListService, + private httpClient: HttpClient, + private _ut: UserInfoService + ) { } + + ngOnInit() { + this.getUsersT(); + this.getUser(); + this.getUsers(); + + // this.getImage(); + + this._mg.getAll().subscribe( + (data: any) => { + this.groupData = data.items; + // console.log(this.groupData); + } + ); + } + + openAssignModal(id: any) { + // console.log(id); + this._user.getOne(id).subscribe( + (data: any) => { + this.userData = data; + } + ); + this.assign = true; + } + + saveAssign() { + // console.log(this.userData.menu_group); + this._user.update(this.userData).subscribe( + (data: any) => { + console.log('Assign Updated Successfully...'); + this.assign = false; + this.ngOnInit(); + } + ); + } + + async getUser() { + this.loading = true; + const result = await this.mainService.getUserTest(); + if (result.results) { + this.users = result.results; + } + this.loading = false; + } + + onEdit(row) { + + console.log(row); + this._user.getOne(row).subscribe( + (data: any) => { + this.updateU = data; + console.log(this.updateU); + + } + ); + this.modalEdit = true; + } + + del(id: any) { + this.tempid = id; + this.modaldelete = true; + } + + async onDelete() { + // const confirmed: any = await this.alertService.confirm('', 'Delete confirm?'); + // if (confirmed.value) { + // this.toastr.success('Deleted successfully'); + // // .... + // } + + this._user.deleteById(this.tempid).subscribe( + (data: any) => { + console.log('Success....'); + this.toastr.success('User deleted successfully...'); + this.modaldelete = false; + this.ngOnInit(); + + } + ); + } + + async onSave() { + const confirmed: any = await this.alertService.confirm('', 'Save confirm?'); + if (confirmed.value) { + this.toastr.success('Save successfully'); + // .... + this.modalEdit = false; + } + } + + onExport() { + this.excel.exportAsExcelFile(this.allusers, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + goToAdd() { + this.openAddUser = true; + } + + getUsers() { + this._user.getAll().subscribe( + (data: any) => { + this.allusers = data; + + this.allusers.forEach((i: any) => { + i['imgData'] = ''; + // this.getImage(i.id); + // i['imgData'] = this.retrievedImage; + + this.httpClient.get('http://localhost:9191/user_list/get/' + i.id) + .subscribe( + res => { + this.retrieveResonse = res; + this.base64Data = this.retrieveResonse.picByte; + this.retrievedImage = 'data:image/jpeg;base64,' + this.base64Data; + i['imgData'] = 'data:image/jpeg;base64,' + this.base64Data; + // console.log(this.retrievedImage); + } + ); + }); + + console.log(this.allusers); + }, + (error: any) => { + console.log('Error in loading users from server...'); + + } + ); + } + + createUserHere() { + console.log('add button clicked....'); + + this._user.add(this.user).subscribe( + (data: any) => { + this.onUpload(data.id); + console.log('added...'); + this.toastr.success('User added successfully...'); + + this.openAddUser = false; + this.ngOnInit(); + + }, + (error: any) => { + console.log(error); + + } + ); + } + + updateUser() { + console.log('button clicked: update'); + this._user.update(this.updateU).subscribe( + (data: any) => { + console.log('success...'); + this.toastr.success('User updated successfully...'); + this.modalEdit = false; + this.ngOnInit(); + }, + (error: any) => { + console.log(error); + + } + ); + } + + public onFileChanged(event) { + //Select File + this.selectedFile = event.target.files[0]; + } + + //Gets called when the user clicks on submit to upload the image + onUpload(user: any) { + console.log(this.selectedFile); + + //FormData API provides methods and properties to allow us easily prepare form data to be sent with POST HTTP requests. + const uploadImageData = new FormData(); + uploadImageData.append('imageFile', this.selectedFile, this.selectedFile.name); + uploadImageData.append('user_id', user); + + //Make a call to the Spring Boot Application to save the image + this.httpClient.post('http://localhost:9191/user_list/upload', uploadImageData, { observe: 'response' }) + .subscribe((response) => { + if (response.status === 200) { + this.message = 'Document uploaded successfully'; + } else { + this.message = 'Document not uploaded successfully'; + } + } + ); + + + } + + //Gets called when the user clicks on retieve image button to get the image from back end + getImage(id: any) { + //Make a call to Sprinf Boot to get the Image Bytes. + this.httpClient.get('http://localhost:9191/user_list/get/' + id) + .subscribe( + res => { + this.retrieveResonse = res; + this.base64Data = this.retrieveResonse.picByte; + this.retrievedImage = 'data:image/jpeg;base64,' + this.base64Data; + // console.log(this.retrievedImage); + } + ); + } + + onEditNew(id: any) { + console.log(id); + this.getOneUser(id); + this.modalEdit = true; + } + + delNew(id: any) { + this.tempid = id; + console.log(id); + + } + + openAssignModalNew(id: any) { + console.log(id); + + } + + getUsersT() { + + this.httpClient.get('http://localhost:9191/api/all-users').subscribe( + (data: any) => { + this.userst = data; + console.log(this.userst); + }, + (error: any) => { + console.log(error); + } + ); + } + + getOneUser(id: any) { + + this.httpClient.get('http://localhost:9191/api/org-users/' + id).subscribe( + (data: any) => { + this.updateU1 = data; + console.log(this.updateU1); + + }, + (er: any) => { + console.log(er); + + } + ); + } + + updateUserNew() { + this.httpClient.put('http://localhost:9191/api/org-users/' + this.updateU1.userId, this.updateU1).subscribe( + (data: any) => { + console.log('success...'); + this.toastr.success('User updated successfully...'); + this.modalEdit = false; + console.log(data); + this.ngOnInit(); + + }, + (error: any) => { + console.log(error); + + } + ); + } +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.html new file mode 100644 index 0000000..ca36f5b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.html @@ -0,0 +1,217 @@ + + + + +
+
+
+

User Group Maintenance

+
+
+
+ + +
+ + + + +
+
+ + + + + + + + + Loading ... +
{{error}}
+ + + User Group No + + + Group Name + + + Description + + + Group Level + + + Status + + + + Updated Date + + + + + {{user.usrGrp}} + {{user.groupName}} + {{user.groupDesc}} + {{user.groupLevel}} + {{user.status}} + + {{user.updateDateFormated}} + + + + + + + + + + + + + + + +
username{{user.groupName}}
+
+
+ + + + Record per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} Records + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.scss new file mode 100644 index 0000000..c871274 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.scss @@ -0,0 +1,8 @@ +@import '../../../../../styles1.scss'; +input.ng-invalid.ng-touched { + border-color: red; +} + +.error_mess { + color: red; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.spec.ts new file mode 100644 index 0000000..945eb38 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UsergrpmaintenanceComponent } from './usergrpmaintenance.component'; + +describe('UsergrpmaintenanceComponent', () => { + let component: UsergrpmaintenanceComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ UsergrpmaintenanceComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(UsergrpmaintenanceComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.ts new file mode 100644 index 0000000..3b531b6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usergrpmaintenance/usergrpmaintenance.component.ts @@ -0,0 +1,199 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ExcelService } from '../../../../services/excel.service'; +import * as moment from 'moment'; +import { UsergrpmaintainceService } from '../../../../services/admin/usergrpmaintaince.service'; +import { ToastrService } from 'ngx-toastr'; +import { MenuGroupService } from 'src/app/services/admin/menu-group.service'; +import { CsvService } from 'src/app/services/csv.service'; +@Component({ + selector: 'app-usergrpmaintenance', + templateUrl: './usergrpmaintenance.component.html', + styleUrls: ['./usergrpmaintenance.component.scss'] +}) +export class UsergrpmaintenanceComponent implements OnInit { + loading = false; + public entryForm: FormGroup; + givendata; + orders; + error; + modalAdd= false; + modaledit=false; + modaldelete=false; + rowSelected :any= {}; + mcreate; + medit; + showdata; + submitted=false; + + constructor( + private excel: ExcelService, + private toastr:ToastrService, + private _fb: FormBuilder, + private router: Router, + private route: ActivatedRoute, + private menuGroupService: MenuGroupService, + private mainservice:UsergrpmaintainceService, + private csvService: CsvService, + ) { } + + ngOnInit(): void { + this.showdata = this.menuGroupService.getdata(); + console.log(this.showdata); + this.mcreate=this.showdata.mcreate; + console.log(this.mcreate); + this.medit=this.showdata.medit + console.log(this.medit); + + this.mainservice.getAll().subscribe((data) => { + console.log(data); + this.givendata = data; + if(this.givendata.length==0){ + this.error="No data Available"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }); + + this.entryForm = this._fb.group({ + groupName:['',[Validators.required]] , + groupDesc:['',[Validators.required]] , + groupLevel:['',[Validators.required]] , + status:['',[Validators.required]] , + + }); + } + onExport() { + this.excel.exportAsExcelFile(this.givendata, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + goToAdd() { + this.modalAdd=true; + //this.router.navigate(["../usermaintanceadd"],{relativeTo:this.route}); + } + goToEdit(row){ + this.rowSelected = row; + this.modaledit=true; + //this.router.navigate(["../usermaintanceedit/"+ id], { relativeTo: this.route }); + } + onUpdate(id) { + this.modaledit = false; + //console.log("in update"); + console.log("id "+id); + console.log( this.rowSelected ); + //console.log("out update"); + this.mainservice.update(this.rowSelected).subscribe( + (data) => { + console.log(data); + if (data) { + this.toastr.success('Updated successfully'); + } + }, (error) => { + console.log(error); + if(error){ + this.toastr.error('Not Updated Data Getting Some Error'); + } + } + ); + } + onSubmit() { + console.log(this.entryForm.value); + this.submitted=true; + if (this.entryForm.invalid) { + return; + } + this.onCreate(); + } + onCreate() { + this.modalAdd=false; + this.mainservice.create(this.entryForm.value).subscribe(data => { + console.log(data) + this.ngOnInit(); + if (data) { + this.toastr.success('Added successfully'); + } + }, + (error) => { + console.log(error); + if(error){ + this.toastr.error('Not Added Data Getting Some Error'); + } + } + ); + // if (this.entryForm.value) { + // this.toastr.success('Added successfully'); + + // } + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id) + { + this.modaldelete = false; + console.log("in delete "+id); + this.mainservice.deleteusr(id).subscribe( + (data) => { + console.log(data); + this.ngOnInit(); + if (data) { + this.toastr.success('Deleted successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Deleted Data Getting Some Error'); + } + } + ); + + + } + + + + // csv + + modalCsv = false; + selectedFiles: File; + fileList; + ttype = 'usergroupmaintenance'; + + + // Import CSV + public selectFile(event) { + this.selectedFiles = event.target.files[0]; + // this.saveCsv(); + } + + csvImport() { + console.log("import CSV"); + this.modalCsv = true; + } + saveCsv() { + this.csvService.importCsv(this.selectedFiles, this.ttype).subscribe(data => { + console.log(data); + this.fileList = data; + this.modalCsv = false; + }, + (error) => { + console.log(error); + if (error.status == 202) { + this.toastr.success(error.error.text) + } + }); + } + + downloadFiles() { + this.csvService.downloadCsvs(this.ttype); + + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.html new file mode 100644 index 0000000..1fc2694 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.html @@ -0,0 +1,124 @@ + + + + +
+
+
+

User Maintenance

+
+
+
+ + +
+ + + +
+
+ + + + + + + + + + Loading ... +
{{error}}
+
+ + + + User Id + + + + Full Name + + + Email + + + User Group Name + + + + + + + {{user.userId}} + + {{user.fullName}} + {{user.email}} + {{user.usrGrpName}} + + + + + + + + + + + + + + + + + +
username{{user.username}}
+
+
+ + + + Record per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} Records + + +
+
+ + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.scss new file mode 100644 index 0000000..76ab29b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.scss @@ -0,0 +1,4 @@ +.delete,.heading{ + text-align: center; + color: red; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.spec.ts new file mode 100644 index 0000000..881f48f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UsermaintanceComponent } from './usermaintance.component'; + +describe('UsermaintanceComponent', () => { + let component: UsermaintanceComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ UsermaintanceComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(UsermaintanceComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.ts new file mode 100644 index 0000000..51dcf34 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintance/usermaintance.component.ts @@ -0,0 +1,155 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ExcelService } from '../../../../services/excel.service'; +import * as moment from 'moment'; +import { UsermaintanceService } from '../../../../services/admin/usermaintance.service'; +import { MenuGroupService } from 'src/app/services/admin/menu-group.service'; +import { ToastrService } from 'ngx-toastr'; +import { CsvService } from 'src/app/services/csv.service'; + +@Component({ + selector: 'app-usermaintance', + templateUrl: './usermaintance.component.html', + styleUrls: ['./usermaintance.component.scss'] +}) +export class UsermaintanceComponent implements OnInit { + loading = false; + loading1=false; + public entryForm: FormGroup; + givendata; + orders; + modalAdd= false; + modaledit=false; +mcreate; +medit; +mdelete; +showdata; +error; +modaldelete=false; +rowSelected :any= {}; + constructor(private excel: ExcelService, + private _fb: FormBuilder, + private router: Router, private toastr:ToastrService, + private route: ActivatedRoute, + private menuGroupService: MenuGroupService, + private mainservice:UsermaintanceService, + private csvService: CsvService, + ) {this.loading1 = true; + setTimeout(() => { + this.loading1 = false; + }, 1000); } + + ngOnInit(): void { + this.showdata = this.menuGroupService.getdata(); + console.log(this.showdata); + this.mcreate=this.showdata.mcreate; + console.log(this.mcreate); + this.mdelete=this.showdata.mdelete + console.log(this.mdelete); + this.medit=this.showdata.medit + console.log(this.medit); + this.getData(); + + } + getData(){ + this.mainservice.getAll().subscribe((data) => { + console.log(data); + this.givendata = data; + if(this.givendata.length==0){ + this.error="No data Available"; + console.log(this.error) + } + // for(let i =0;i { + console.log(error); + if(error){ + this.error="Server Error"; + } + }); + } + + + // csv + + modalCsv = false; + selectedFiles: File; + fileList; + ttype = 'usermaintenance'; + + + // Import CSV + public selectFile(event) { + this.selectedFiles = event.target.files[0]; + // this.saveCsv(); + } + + csvImport() { + console.log("import CSV"); + this.modalCsv = true; + } + saveCsv() { + this.csvService.importCsv(this.selectedFiles, this.ttype).subscribe(data => { + console.log(data); + this.fileList = data; + this.modalCsv = false; + }, + (error) => { + console.log(error); + if (error.status == 202) { + this.toastr.success(error.error.text) + } + }); + } + + downloadFiles() { + this.csvService.downloadCsvs(this.ttype); + + } + + + onExport() { + this.excel.exportAsExcelFile(this.givendata, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + goToAdd() { + this.router.navigate(["../usermaintanceadd"],{relativeTo:this.route}); + } + goToEdit(id: number){ + this.router.navigate(["../usermaintancedit/"+ id], { relativeTo: this.route }); + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id) + { + this.modaldelete = false; + console.log("in delete "+id); + this.mainservice.deleteusr(id).subscribe( + (data) => { + console.log(data); + this.ngOnInit(); + if (data) { + this.toastr.success('Deleted successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(error){ + this.toastr.error('Not Deleted Data Getting Some Error'); + } + } + ); + + + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.html new file mode 100644 index 0000000..44bcb19 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.html @@ -0,0 +1,319 @@ + +

User Maintenance

+ Add Mode
+
+
+
+ +
+
+ + +
+
*This field is Required
+
+
+
+ + +
+
*This field is Required
+
+
+
+ + +
+
*This field is Required
+
* Please Follow your pattern,+91 Enter 10 digit Mobile Number. +
+ +
+
+
+ + +
+
*Password is required
+
* Password must be at least 6 characters
+ +
+
+
+ + +
+
* Confirm Password is required
+
* Password and Confirm Password must be match.
+ +
+
+ + + +
+ + +
+
*This field is Required
+
+
+ + +
+ + +
+
*This field is Required
+ +
*Email must be a valid email address
+ +
+
+
+ + +
+
*This field is Required
+
+
+ + +
+ +
+ + +
+ + + + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.scss new file mode 100644 index 0000000..c871274 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.scss @@ -0,0 +1,8 @@ +@import '../../../../../styles1.scss'; +input.ng-invalid.ng-touched { + border-color: red; +} + +.error_mess { + color: red; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.spec.ts new file mode 100644 index 0000000..3a520a3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UsermaintanceaddComponent } from './usermaintanceadd.component'; + +describe('UsermaintanceaddComponent', () => { + let component: UsermaintanceaddComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ UsermaintanceaddComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(UsermaintanceaddComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.ts new file mode 100644 index 0000000..02ced90 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceadd/usermaintanceadd.component.ts @@ -0,0 +1,198 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AccesstypeService } from 'src/app/services/admin/accesstype.service'; +import { UsergrpmaintainceService } from 'src/app/services/admin/usergrpmaintaince.service'; +import { UsermaintanceService } from '../../../../services/admin/usermaintance.service'; + +@Component({ + selector: 'app-usermaintanceadd', + templateUrl: './usermaintanceadd.component.html', + styleUrls: ['./usermaintanceadd.component.scss'] +}) +export class UsermaintanceaddComponent implements OnInit { + public entryForm: FormGroup; + customer:boolean=false; + department:boolean=false; + position:boolean=false; + custdata: any; + loading = false; + clickedID:number; + custiddata: any; + userobjcust={ + customerName:'', + customerCode:'', + } + departmentdata: any; + positiondata: any; + deptiddata: any; + userobjdept={ + departmentCode:'', + } + userobjpos={ + positionCode:'', + } + posiddata: any; + usergrpdata; + accessdata; + error; + submitted=false; + + constructor( private _fb: FormBuilder, + private mainservice:UsermaintanceService, + private router: Router,private accesstype:AccesstypeService, + private route: ActivatedRoute, + private usergrpservice: UsergrpmaintainceService + ) { } + + ngOnInit(): void { + this.entryForm = this._fb.group({ + first_name :['',[Validators.required]], + last_name:['',[Validators.required]], + email:['',[Validators.required,Validators.email]], + mob_no:['',[Validators.required]], + new_password:['',[Validators.required,Validators.minLength(6)]], + confirm_passwordS:['',[Validators.required]], + usrGrpId:['',[Validators.required]], + account_id:1, + accesstype:['',[Validators.required]], + // status:[null], + // username:[null] , + // userPassw:[null] , + // confirmPassword:[null], + // title:[null], + // shortName:[null], + // fullName:[null], + // status:[null], + // positionCodeString:[null], + // departmentCodeString:[null], + // usrGrpId:[null], + // customerId:[null], + // email:[null], + // notification:[null], + + //departmentCode: this._fb.array([this.department()]), + // positionCode: this._fb.array([this.position()]), + //usrGrp: this._fb.array([this.user()]), + + }, { + validator: ConfirmedValidator('new_password', 'confirm_passwordS') + }); + this.usergrp(); + this.getdata(); + } + getdata(){ + this.accesstype.getAll().subscribe(resp => { + this.accessdata = resp; + console.log('accessdata: ', this.accessdata); + if(this.accessdata.length==0){ + this.error="No data Available"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }) + } + usergrp(){ + this.usergrpservice.getAll().subscribe((data) => { + console.log(data); + this.usergrpdata = data; + }); + } + // department(){ + // return this._fb.group({ + // departmentCode:[null] , + + // }); + // } + // position(){ + // return this._fb.group({ + // positionCode:[null] , + + // }); + // } + // user(){ + // return this._fb.group({ + // usrGrp:[null] , + + // }); + //} + onSubmit(){ + this.submitted=true + if (this.entryForm.invalid) { + return; + } + console.log(this.entryForm.value); + this.mainservice.create(this.entryForm.value).subscribe(data => { + console.log(data) + }, + (error) => { + console.log(error); + } + ); + this.router.navigate(["../usermaintance"], { relativeTo: this.route }); + } + +goback(){ + this.router.navigate(["../usermaintance"], { relativeTo: this.route }); +} + gotodepartmet(){ + this.department=!this.department; + this.mainservice.getalldepartment().subscribe((data)=>{ + console.log(data); + this.departmentdata=data; + }); + } + getdepid(id:number){ + this.clickedID=id; + console.log("clicked by id"+ id); + this.mainservice.getbydepartmentid(id).subscribe((data) => { + console.log(data); + this.deptiddata= data; + // this.userObj= this.custiddata; + this.userobjdept =this.deptiddata; + + + }); + this.department=false; + } + gotoposition(){ + this.position=!this.position; + this.mainservice.getallposition().subscribe((data)=>{ + console.log(data); + this.positiondata=data; + }) + } + getposid(id:number){ + this.clickedID=id; + console.log("clicked by id"+ id); + this.mainservice.getbypositionid(id).subscribe((data) => { + console.log(data); + this.posiddata= data; + // this.userObj= this.custiddata; + this.userobjpos =this.posiddata; + + + }); + this.position=false; + } + + +} +export function ConfirmedValidator(controlName: string, matchingControlName: string){ + return (formGroup: FormGroup) => { + const control = formGroup.controls[controlName]; + const matchingControl = formGroup.controls[matchingControlName]; + if (matchingControl.errors && !matchingControl.errors.confirmedValidator) { + return; + } + if (control.value !== matchingControl.value) { + matchingControl.setErrors({ confirmedValidator: true }); + } else { + matchingControl.setErrors(null); + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.html new file mode 100644 index 0000000..64d92fe --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.html @@ -0,0 +1,348 @@ + +

User Maintenance

+ Edit Mode
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + +
+ + +
+ + +
+ + +
+
+ + +
+ + +
+ +
+ + +
+ + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.scss new file mode 100644 index 0000000..36abb8c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.scss @@ -0,0 +1 @@ +@import '../../../../../styles1.scss'; diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.spec.ts new file mode 100644 index 0000000..4173d29 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UsermaintanceeditComponent } from './usermaintanceedit.component'; + +describe('UsermaintanceeditComponent', () => { + let component: UsermaintanceeditComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ UsermaintanceeditComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(UsermaintanceeditComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.ts new file mode 100644 index 0000000..2f33378 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/admin/usermaintanceedit/usermaintanceedit.component.ts @@ -0,0 +1,133 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AccesstypeService } from 'src/app/services/admin/accesstype.service'; +import { UsergrpmaintainceService } from 'src/app/services/admin/usergrpmaintaince.service'; +import { UsermaintanceService } from '../../../../services/admin/usermaintance.service'; +//import { Usermain } from 'src/app/models/usermaintaince'; + +@Component({ + selector: 'app-usermaintanceedit', + templateUrl: './usermaintanceedit.component.html', + styleUrls: ['./usermaintanceedit.component.scss'] +}) +export class UsermaintanceeditComponent implements OnInit { + id:number; + data1:any={}; + customer:boolean=false; + custdata: any; + clickedID:number; + custiddata: any; + loading = false; + userobjcust={ + customerName:'', + customerCode:'', + } + accessdata; + department:boolean=false; + departmentdata: any; + positiondata: any; + deptiddata: any; + userobjdept={ + departmentCode:'', + } + userobjpos={ + positionCode:'', + } + posiddata: any; + position:boolean=false; + usergrpdata; + error; + constructor(private route:ActivatedRoute, + private mainservice:UsermaintanceService, + private router: Router,private accesstype:AccesstypeService, + private usergrpservice: UsergrpmaintainceService + + ) { } + + ngOnInit(): void { + this.id = this.route.snapshot.params["id"]; + console.log("update with id = ", this.id); + this.getById(this.id); + // + this.usergrp(); + this.getdata(); + } + getdata(){ + this.accesstype.getAll().subscribe(resp => { + this.accessdata = resp; + console.log('accessdata: ', this.accessdata); + if(this.accessdata.length==0){ + this.error="No data Available"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }) + } + usergrp(){ + this.usergrpservice.getAll().subscribe((data) => { + console.log(data); + this.usergrpdata = data; + }); + } +getById(id:number){ +this.mainservice.getbyid(id).subscribe((data)=>{ + this.data1=data; + // this.data1=this.data3; + console.log(this.data1); +}); +} +update(){ + console.log(this.data1); + this.mainservice.updatenew(this.id,this.data1).subscribe((data)=>{ +console.log(data); + }); + +} +goback(){ + this.router.navigate(["../../usermaintance"], { relativeTo: this.route }); +} + gotodepartmet(){ + this.department=!this.department; + this.mainservice.getalldepartment().subscribe((data)=>{ + console.log(data); + this.departmentdata=data; + }); + } + getdepid(id:number){ + this.clickedID=id; + console.log("clicked by id"+ id); + this.mainservice.getbydepartmentid(id).subscribe((data) => { + console.log(data); + this.deptiddata= data; + // this.userObj= this.custiddata; + this.userobjdept =this.deptiddata; + + + }); + this.department=false; + } + gotoposition(){ + this.position=!this.position; + this.mainservice.getallposition().subscribe((data)=>{ + console.log(data); + this.positiondata=data; + }) + } + getposid(id:number){ + this.clickedID=id; + console.log("clicked by id"+ id); + this.mainservice.getbypositionid(id).subscribe((data) => { + console.log(data); + this.posiddata= data; + // this.userObj= this.custiddata; + this.userobjpos =this.posiddata; + + + }); + this.position=false; + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.html new file mode 100644 index 0000000..1e6f041 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.html @@ -0,0 +1,40 @@ + +

Define Dashboard

+Add Mode +

+ +
+ + + + + + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+ + +
+ +
+
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.scss new file mode 100644 index 0000000..4a7ff75 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.scss @@ -0,0 +1,81 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .entry-pg { + width: 750px; + } + + .button1::after { + content: none; + } + .button1:hover::after { + content: "ADD ROWS"; + } + + $bg-color: #dddddd; + + .section { + background-color: $bg-color; + height: 40px; + } + + .section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + input[type=text],[type=date],textarea { + width: 100%; + padding: 15px 15px; + margin-top: 3px; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .required-field{ + color: red; + + } + select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.spec.ts new file mode 100644 index 0000000..d4993fe --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddnewdashComponent } from './addnewdash.component'; + +describe('AddnewdashComponent', () => { + let component: AddnewdashComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [AddnewdashComponent] + }); + fixture = TestBed.createComponent(AddnewdashComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.ts new file mode 100644 index 0000000..4ab52f6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/addnewdash/addnewdash.component.ts @@ -0,0 +1,125 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { DashboardService } from 'src/app/services/builder/dashboard.service'; + +@Component({ + selector: 'app-addnewdash', + templateUrl: './addnewdash.component.html', + styleUrls: ['./addnewdash.component.scss'] +}) +export class AddnewdashComponent implements OnInit { + public entryForm: FormGroup; + addToDashboard: boolean = false; + submitted = false; + moduleId:any; + tech_stacks=[]; + object_types = ["form", "bi", "report", "api"]; + sub_object_types = [ + "only header", + "only line", + "header line", + "header multiline", + "wrokflow", + "setup", + "std report", + "bi report", + "rest api", + ]; + jsonString:any; + + fieldModels= + { + + "dashboard": [ + { + "cols": 4, + "rows": 5, + "x": 0, + "y": 0, + "name": "Radar Chart", + "component": "Radar Chart" + + } + ] + } + + wfline = { + model: 'this.fieldModels' + } + dashboard: any; + constructor( private _fb:FormBuilder, + private router: Router, + private route: ActivatedRoute, + private dashboardService : DashboardService, + private toastr : ToastrService, + + ) { } + + ngOnInit(): void { + // this.moduleId = this.wireframeService.getModuleId(); + console.log(this.moduleId); + + this.entryForm = this._fb.group({ + dashboard_name : [null], + description: [null], + secuirity_profile : [null], + module_id:[null], + tech_Stack:[null], + object_type:[null], + sub_object_type:[null], + testing:[null], + build:[null], + add_to_home:[true], + + dashbord1_Line: this._fb.array([this.initLinesForm()]), + // dashbord1_Line: this.fieldModels + }); + + + } + initLinesForm() { + return this._fb.group({ + + model:JSON.stringify(this.fieldModels) + }); + } + + onSubmit() { + console.log("In onSubmit method"); + console.log(this.entryForm.value); + if(this.entryForm.invalid) + { + return; + } + this.onCreate() + + } + onBack(){ + this.router.navigate(["../all"],{relativeTo:this.route}); + } + + onCreate() + { + console.log("in oncreate method"); + this.entryForm.value.module_id=this.moduleId; + + console.log(typeof this.fieldModels) + + this.dashboardService.create(this.entryForm.value).subscribe((data)=>{ + console.log(data); + this.router.navigate(["../all"],{relativeTo:this.route}); + }, + (error) => { + console.log(error); + } + ); + if(this.entryForm.value) + { + this.toastr.success('Added successfully'); + } + } + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.html new file mode 100644 index 0000000..c68f9ca --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.html @@ -0,0 +1,145 @@ + + +
+ +
+
+
+

Dashboard Builder

+
+
+ + + +
+
+ + + Loading ... +
{{error}}
+ + + + Go To + + + + + Dashboard Name + + + + + Description + + + + + Security Profile + + + + + Add to home + + + + + Action + + + + SET UP + {{user.dashboard_name}} + {{user.description}} + {{user.secuirity_profile}} + {{user.add_to_home}} + + + + + + + Delete + + + + + +
Who Column
+
Account ID: {{user.accountId}}
+
Created At: {{user.createdAt| date}}
+
Created By: {{user.createdBy}}
+
Updated At: {{user.updatedAt | date}}
+
Updated By: {{user.updatedBy}}
+
+
+ +
+ + + + +
+ + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.scss new file mode 100644 index 0000000..140a8d4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.scss @@ -0,0 +1,83 @@ +.td-title { + text-align: right; + width: 150px; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + color: white; + } + .td-content{ + text-align: left; + } + .delete,.heading{ + text-align: center; + color: red; + } + input[type='radio']{ + width: 14px !important; + height: 14px !important; + margin: 5px; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + appearance: none; + outline: 1px solid gray; + box-shadow: none; + font-size: 0.8em; + text-align: center; + line-height: 1em; + background: red; + } + .dots + { + width: 100px; + height:100px; + border: 1px solid; + border-radius: 50%; + //background-color: #f00; + } + h4{margin-top: 16px;} + .s-order-dash-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + } + } + #word1{ + width: 190px; + height: 180px; + + } + .center{ + text-align: center; + margin-top: 5px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + .heading{ + text-align: center; + color: red; + } + + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.spec.ts new file mode 100644 index 0000000..9e5246b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AllnewdashComponent } from './allnewdash.component'; + +describe('AllnewdashComponent', () => { + let component: AllnewdashComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [AllnewdashComponent] + }); + fixture = TestBed.createComponent(AllnewdashComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.ts new file mode 100644 index 0000000..b907dae --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/allnewdash/allnewdash.component.ts @@ -0,0 +1,124 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +// import { WireframeService } from 'src/app/services/builder/wireframe.service'; +import { ExcelService } from 'src/app/services/excel.service'; +import * as moment from 'moment'; +import { ModulesetupService } from 'src/app/services/builder/modulesetup.service'; +import { DashboardService } from 'src/app/services/builder/dashboard.service'; +@Component({ + selector: 'app-allnewdash', + templateUrl: './allnewdash.component.html', + styleUrls: ['./allnewdash.component.scss'] +}) +export class AllnewdashComponent implements OnInit { + addModall:boolean = false; + selected:any[] = []; + loading = false; + data:any; + id:any; + moduleId:any; + modalDelete = false; + rowSelected :any= {}; + rows: any[]; + projectname; + projectId; + error; + constructor( + private router : Router, + private route: ActivatedRoute,private dashboardService : DashboardService, + // private wireframeservice : WireframeService, + private excel: ExcelService,private mainService: ModulesetupService, + private toastr: ToastrService,) { } + + ngOnInit(): void { + // this.projectId=this.wireframeservice.getProjectId(); + console.log(this.projectId); + this.id = this.route.snapshot.params["id"]; // fb_header_id + // this.moduleId = this.wireframeservice.getModuleId(); // get from session storage + console.log(this.moduleId); + + this.getdashboard(); + // this.getprojectName(this.projectId); + } + + getprojectName(id){ + this.mainService.getProjectModules(id).subscribe((data) => { + console.log(data); + this.projectname=data.items[0]['projectName']; + console.log(this.projectname); + }); + } + + + getdashboard() + { + this.dashboardService.getAllDash().subscribe((data) =>{ + this.data = data; + this.rows = this.data; + console.log(data); + this.error="No data Available"; + console.log(this.error); + }); + } + + openModal() + { + this.addModall = true; + } + gotoadd() + { + this.router.navigate(['../adddata'],{relativeTo:this.route}); + } + goToEdit(id:number) + { + this.router.navigate(['../editdashn/'+id],{relativeTo:this.route}); + } + + goToEditData(id: number){ + this.router.navigate(['../editdata/'+id],{relativeTo:this.route}); + } + + onExport() { + this.excel.exportAsExcelFile(this.rows, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + + gotoAction(){ + this.router.navigate(["../../actions"], { relativeTo: this.route, queryParams: { m_id: this.moduleId,pname:this.projectname } }); + } + gotoRepo(){ + this.router.navigate(["../../modulecard"], { relativeTo: this.route, queryParams: { p_id: this.projectId } }); + } + + onDelete(row){ + this.rowSelected = row; + console.log(this.rowSelected); + this.modalDelete = true; + } + delete(id) + { + this.modalDelete = false; + console.log("in delete "+id); + this.dashboardService.deleteField(id).subscribe((data)=>{ + console.log(data); + this.ngOnInit(); + }); + if (id) { + this.toastr.success('Deleted successfully'); + } + } + // openModal() + // { + // this.addModall = true; + // } + gotorunner() + { + this.router.navigate(['../../dashboardrunner'],{relativeTo:this.route}); + } + // goToEdit() + // { + // this.router.navigate(['../editdashn'],{relativeTo:this.route}); + // } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.spec.ts new file mode 100644 index 0000000..c7c3d2e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DashboardnewComponent } from './dashboardnew.component'; + +describe('DashboardnewComponent', () => { + let component: DashboardnewComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [DashboardnewComponent] + }); + fixture = TestBed.createComponent(DashboardnewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.ts new file mode 100644 index 0000000..3078dd2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/dashboardnew.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-dashboardnew', + templateUrl: './dashboardnew.component.html', + styleUrls: ['./dashboardnew.component.scss'] +}) +export class DashboardnewComponent { + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.html new file mode 100644 index 0000000..530e940 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.html @@ -0,0 +1,54 @@ +

Dashboard

+Edit Mode +

+ +
+ + + + + + +
+
+
+ + +
+
+ + +
+ + +
+ + +
+
+ + +
+
+
+ +
+ + +
+ +
+
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.scss new file mode 100644 index 0000000..4a7ff75 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.scss @@ -0,0 +1,81 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .entry-pg { + width: 750px; + } + + .button1::after { + content: none; + } + .button1:hover::after { + content: "ADD ROWS"; + } + + $bg-color: #dddddd; + + .section { + background-color: $bg-color; + height: 40px; + } + + .section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + input[type=text],[type=date],textarea { + width: 100%; + padding: 15px 15px; + margin-top: 3px; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .required-field{ + color: red; + + } + select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.spec.ts new file mode 100644 index 0000000..9872c96 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditformnewdashComponent } from './editformnewdash.component'; + +describe('EditformnewdashComponent', () => { + let component: EditformnewdashComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [EditformnewdashComponent] + }); + fixture = TestBed.createComponent(EditformnewdashComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.ts new file mode 100644 index 0000000..6e46676 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editformnewdash/editformnewdash.component.ts @@ -0,0 +1,93 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { DashboardService } from 'src/app/services/builder/dashboard.service'; +// import { TechnologyStackService } from 'src/app/services/builder/technology-stack.service'; +// import { WireframeService } from 'src/app/services/builder/wireframe.service'; + +@Component({ + selector: 'app-editformnewdash', + templateUrl: './editformnewdash.component.html', + styleUrls: ['./editformnewdash.component.scss'] +}) +export class EditformnewdashComponent implements OnInit { + updated = false; + Header; + id: number; + moduleId; + tech_stacks=[]; + object_types = ["form", "bi", "report", "api"]; + sub_object_types = [ + "only header", + "only line", + "header line", + "header multiline", + "wrokflow", + "setup", + "std report", + "bi report", + "rest api", + ]; + constructor(private router: Router, + private route: ActivatedRoute, private dashboardService : DashboardService, + // private technologyStackService:TechnologyStackService, + private toastr: ToastrService, + // private wireframeService :WireframeService, + ) { } + + ngOnInit(): void { + // this.moduleId = this.wireframeService.getModuleId(); + this.id = this.route.snapshot.params["id"]; + console.log("update with id = ", this.id); + this.getById(this.id); + // this.technologyStackService.getAll().subscribe((data)=>{ + // console.log(data) + // this.tech_stacks=data; + // }); + } + + getById(id: number) { + this.dashboardService.getById(id).subscribe( + (data) => { + console.log(data); + this.Header = data; + }, + (err) => { + console.log(err); + } + ); + } + update() { + this.dashboardService.updateDash(this.Header).subscribe( + (data) => { + console.log(data); + if (data) { + this.toastr.success('Update successfully'); + } + this.router.navigate(["../../all"], { relativeTo: this.route }); + //this.router.navigate(["../../all"],{ relativeTo: this.route, queryParams: { p_id: this.projectId } }); + }, + (error) => { + // console.log(error); + // const objectArray = Object.entries(error.error.fieldErrors); + // objectArray.forEach(([k, v]) => { + // console.log(k); + // console.log(v); + // this.fieldErors.push({ field: k, message: v }); + // }); + console.log(error); // this will come from backend + } + ); + // this.lineBuilder_Header = new Rn_Cff_ActionBuilder_Header(); + } + + onSubmit() { + this.updated = true; + this.update(); + } + + onBack() { + this.router.navigate(["../../all"], { relativeTo: this.route }); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.html new file mode 100644 index 0000000..02dce20 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.html @@ -0,0 +1,198 @@ + + +
+ +
+ {{dashboardName}} +
+
+ +
+ +
+ +
+ +
+ + + + + + + + + + + +

{{item.name}}

+ + +
+
+
+
+
+ + +
+ + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.scss new file mode 100644 index 0000000..2c08e48 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.scss @@ -0,0 +1,51 @@ +.componentbtn{ + color: white; + background-color: #03AC13; + border: none; + } + .content-container { + min-height: 100vh; + height: initial; + } + a:hover { + text-decoration: none; + cursor: pointer; + } + .clr-checkbox{ + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + // padding: 0.75rem 0.75rem; + // margin-top: 3px; + width: 100%; + margin-left: 20px; + margin-bottom: 18px; + } + .clr-input, .clr-dropdown { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + select{ + width: 100%; + padding: 5px 5px; + margin-top: 3px; + border: 1px solid #ccc; + border-radius: 4px; + } + + input[type=text],[type=date],textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.spec.ts new file mode 100644 index 0000000..82dc288 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditnewdashComponent } from './editnewdash.component'; + +describe('EditnewdashComponent', () => { + let component: EditnewdashComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [EditnewdashComponent] + }); + fixture = TestBed.createComponent(EditnewdashComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.ts new file mode 100644 index 0000000..5104759 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/editnewdash/editnewdash.component.ts @@ -0,0 +1,617 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { GridsterConfig } from 'angular-gridster2'; +import { ToastrService } from 'ngx-toastr'; +import { DashboardContentModel, DashboardModel, WidgetModel } from '../../../../../models/builder/dashboard'; +import { Dashboard3Service } from '../../../../../services/builder/dashboard3.service'; +import { BarChartComponent } from '../gadgets/bar-chart/bar-chart.component'; +import { BubbleChartComponent } from '../gadgets/bubble-chart/bubble-chart.component'; +import { DoughnutChartComponent } from '../gadgets/doughnut-chart/doughnut-chart.component'; +import { DynamicChartComponent } from '../gadgets/dynamic-chart/dynamic-chart.component'; +import { FinancialChartComponent } from '../gadgets/financial-chart/financial-chart.component'; +import { LineChartComponent } from '../gadgets/line-chart/line-chart.component'; +import { PieChartComponent } from '../gadgets/pie-chart/pie-chart.component'; +import { PolarChartComponent } from '../gadgets/polar-chart/polar-chart.component'; +import { RadarChartComponent } from '../gadgets/radar-chart/radar-chart.component'; +import { ScatterChartComponent } from '../gadgets/scatter-chart/scatter-chart.component'; +import { ToDoChartComponent } from '../gadgets/to-do-chart/to-do-chart.component'; +import { GridViewComponent } from '../gadgets/grid-view/grid-view.component'; +import { DatastoreService } from 'src/app/services/fnd/datastore.service'; +import { AlertsService } from 'src/app/services/fnd/alerts.service'; +import { isArray } from 'highcharts'; +// import { ChartItem } from '../chartitem'; + +function isNullArray(arr) { + return !Array.isArray(arr) || arr.length === 0; +} + +@Component({ + selector: 'app-editnewdash', + templateUrl: './editnewdash.component.html', + styleUrls: ['./editnewdash.component.scss'] +}) + + + +export class EditnewdashComponent implements OnInit { + + editId:number; + toggle:boolean; + modeledit:boolean = false; + public entryForm: FormGroup; + + WidgetsMock: WidgetModel[] = [ + { + name: 'Radar Chart', + identifier: 'radar_chart' + }, + { + name: 'Doughnut Chart', + identifier: 'doughnut_chart' + }, + { + name: 'Line Chart', + identifier: 'line_chart' + }, + { + name: 'Bar Chart', + identifier: 'bar_chart' + }, + { + name: 'Pie Chart', + identifier: 'pie_chart' + }, + { + name: 'Polar Area Chart', + identifier: 'polar_area_chart' + }, + { + name: 'Bubble Chart', + identifier: 'bubble_chart' + }, + { + name: 'Scatter Chart', + identifier: 'scatter_chart' + }, + // { + // name: 'Dynamic Chart', + // identifier: 'dynamic_chart' + // }, + // { + // name: 'Financial Chart', + // identifier: 'financial_chart' + // }, + { + name: 'To Do', + identifier: 'to_do_chart' + }, + { + name: 'Grid View', + identifier: 'grid_view' + } +] + + public options: GridsterConfig; + protected dashboardId: number; + protected dashboardCollection: DashboardModel; + //dashboardCollection:any; + protected dashboardCollection1: DashboardModel[]; + public dashboardArray: DashboardContentModel[]; + public dashArr:[]; + + protected componentCollection = [ + { name: "Line Chart", componentInstance: LineChartComponent }, + { name: "Doughnut Chart", componentInstance: DoughnutChartComponent }, + { name: "Radar Chart", componentInstance: RadarChartComponent }, + { name: "Bar Chart", componentInstance: BarChartComponent }, + { name: "Pie Chart", componentInstance: PieChartComponent }, + { name: "Polar Area Chart", componentInstance: PolarChartComponent }, + { name: "Bubble Chart", componentInstance: BubbleChartComponent }, + { name: "Scatter Chart", componentInstance: ScatterChartComponent }, + { name: "Dynamic Chart", componentInstance: DynamicChartComponent }, + { name: "Financial Chart", componentInstance: FinancialChartComponent }, + { name: "To Do Chart", componentInstance: ToDoChartComponent }, + { name: "Grid View", componentInstance: GridViewComponent }, + ]; + model:any; + linesdata:any; + id:any; + gadgetsEditdata = { + donut : '', + chartlegend: '', + showlabel : '', + charturl: '', + chartparameter : '', + datastore : '', + table:'', + datasource : '', + charttitle:'', + id:'', + fieldName:'', + chartcolor:'', + slices:'', + yAxis:'', + xAxis:'' + +}; + constructor(private route: ActivatedRoute, + private router : Router, + private dashboardService: Dashboard3Service, + private toastr:ToastrService, + private _fb: FormBuilder, + private datastoreService: DatastoreService, + private alertService:AlertsService,) { } + + ngOnInit(): void { + + // Grid options + this.options = { + gridType: "fit", + enableEmptyCellDrop: true, + emptyCellDropCallback: this.onDrop, + pushItems: true, + swap: true, + pushDirections: { north: true, east: true, south: true, west: true }, + resizable: { enabled: true }, + itemChangeCallback: this.itemChange.bind(this), + draggable: { + enabled: true, + ignoreContent: true, + dropOverItems: true, + dragHandleClass: "drag-handler", + ignoreContentClass: "no-drag", + }, + displayGrid: "always", + minCols: 10, + minRows: 10 + }; + this.getData(); + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log("ngOnInit",data); + this.linesdata = data; + this.id = data.dashbord1_Line[0].id; + console.log("this.id ",this.id); + }, + (error: any)=>{ + + } + ); + + this.entryForm = this._fb.group({ + donut : [null], + chartlegend: [null], + showlabel : [null], + charturl: [null], + chartparameter : [null], + datastore:[null], + table:[null], + fieldName: [null], + datasource : [null], + charttitle:[null], + id:[null], + chartcolor:[null], + slices:[null], + yAxis:[null], + xAxis: [null], + }); + } + + toggleMenu() { + this.toggle = !this.toggle; + } + + onDrag(event, identifier) { + console.log("on drag",identifier); + console.log("on drag ",event); + event.dataTransfer.setData('widgetIdentifier', identifier); + } + datagadgets:any; + dashboardLine:any; + dashboardName:any; + getData() { + // We get the id in get current router dashboard/:id + this.route.params.subscribe(params => { + // + is used to cast string to int + this.dashboardId = +params["id"]; + // We make a get request with the dashboard id + this.dashboardService.getById(this.dashboardId).subscribe(dashboard => { + // We fill our dashboardCollection with returned Observable + this.dashboardName = dashboard.dashboard_name; + this.datagadgets = dashboard; + this.dashboardLine = dashboard.dashbord1_Line; + //this.dashboardCollection = dashboard.dashbord1_Line.model; + console.log("this.datagadgets",this.datagadgets); + console.log("this.dashboardLine",this.dashboardLine); + this.dashboardCollection =JSON.parse(this.dashboardLine[0].model) ; + //this.dashboardCollection =this.dashboardLine[0].model ; + console.log("this.dasboard ",this.dashboardCollection ); + console.log(this.dashboardCollection); + // We parse serialized Json to generate components on the fly + this.parseJson(this.dashboardCollection); + // We copy array without reference + this.dashboardArray = this.dashboardCollection.dashboard.slice(); + console.log("this.dashboardArray",this.dashboardArray); + }); + }); + + + } + + // Super TOKENIZER 2.0 POWERED BY NATCHOIN + parseJson(dashboardCollection: DashboardModel) { + // We loop on our dashboardCollection + dashboardCollection.dashboard.forEach(dashboard => { + // We loop on our componentCollection + this.componentCollection.forEach(component => { + // We check if component key in our dashboardCollection + // is equal to our component name key in our componentCollection + if (dashboard.component === component.name) { + // If it is, we replace our serialized key by our component instance + dashboard.component = component.componentInstance; + } + }); + }); + } + + serialize(dashboardCollection) { + // We loop on our dashboardCollection + dashboardCollection.forEach(dashboard => { + // We loop on our componentCollection + this.componentCollection.forEach(component => { + // We check if component key in our dashboardCollection + // is equal to our component name key in our componentCollection + if (dashboard.name === component.name) { + dashboard.component = component.name; + } + }); + }); + } + + itemChange() { + this.dashboardCollection.dashboard = this.dashboardArray; + console.log("itemChange this.dashboardCollection.dashboard ",this.dashboardCollection.dashboard); + console.log("itemChange this.dashboardCollection ",this.dashboardCollection); + console.log("itemChange this.dashboardCollection type",typeof this.dashboardCollection); + console.log("itemChange this.dashboardArray ",this.dashboardArray); + let tmp = JSON.stringify(this.dashboardCollection); + console.log("temp data",tmp); + let parsed: DashboardModel = JSON.parse(tmp); + console.log("parsed data",parsed); + console.log("let parsed ",typeof parsed); + this.serialize(parsed.dashboard); + console.log("item chnage function ", typeof this.dashboardArray); + //this._ds.updateDashboard(this.dashboardId, parsed).subscribe(); + } + + onDrop(ev) { + const componentType = ev.dataTransfer.getData("widgetIdentifier"); + let maxChartId = this.dashboardArray?.reduce((maxId, item) => Math.max(maxId, item.chartid), 0); + switch (componentType) { + case "radar_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 6, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: RadarChartComponent, + name: "Radar Chart" + }); + case "line_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 7, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: LineChartComponent, + name: "Line Chart" + }); + case "doughnut_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 6, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: DoughnutChartComponent, + name: "Doughnut Chart" + }); + case "bar_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 6, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: BarChartComponent, + name: "Bar Chart" + }); + case "pie_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 6, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: PieChartComponent, + name: "Pie Chart" + }); + case "polar_area_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 6, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: PolarChartComponent, + name: "Polar Area Chart" + }); + case "bubble_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 6, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: BubbleChartComponent, + name: "Bubble Chart" + }); + case "scatter_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 6, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: ScatterChartComponent, + name: "Scatter Chart" + }); + case "dynamic_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 6, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: DynamicChartComponent, + name: "Dynamic Chart" + }); + case "financial_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 6, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: FinancialChartComponent, + name: "Financial Chart" + }); + case "to_do_chart": + return this.dashboardArray.push({ + cols: 5, + rows: 5, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: ToDoChartComponent, + name: "To Do Chart" + }); + case "grid_view": + return this.dashboardArray.push({ + cols: 5, + rows: 5, + x: 0, + y: 0, + chartid:maxChartId + 1, + component: GridViewComponent, + name: "Grid View" + }); + } + } + removeItem(item) { + this.dashboardArray.splice( + this.dashboardArray.indexOf(item), + 1 + ); + this.itemChange(); + } + + changedOptions() { + this.options.api.optionsChanged(); + } + + modelid:number ; + editGadget(item) + { + this.modeledit = true; + this.modelid = item.chartid; + console.log(this.modelid); + this.gadgetsEditdata = item; + this.gadgetsEditdata.fieldName = item.name; + if(item.showlabel === undefined){ item.showlabel = true; } + if(item.chartcolor === undefined ){ item.chartcolor = true;} + if(item.chartlegend === undefined){ item.chartlegend = true; } + this.getStores(); + if(item.datastore !== undefined || '' || null){ + const datastore = item.datastore; + this.getTables(datastore); + const table = item.table; + this.getColumns(datastore,table); + console.log(item.yAxis); + if(isArray(item.yAxis)){ + this.selectedyAxis = item.yAxis; + console.log( this.selectedyAxis); + } + }else{ + this.selectedyAxis = []; + } + console.log(item); + } + + dashbord1_Line = { + //model:JSON.stringify(this.da), + model:'' + } + + + UpdateLine() + { + console.log('Add button clicked.......'); + console.log(this.dashboardArray); + console.log(this.dashboardCollection); + console.log(typeof this.dashboardCollection); + console.log(this.id); + //this.dashbord1_Line.model = JSON.stringify(this.dashboardCollection); + + //https://www.w3schools.com/js/tryit.asp?filename=tryjson_stringify_function_tostring + +let cmp=this.dashboardCollection.dashboard.forEach(dashboard=>{ + this.componentCollection.forEach(component=>{ + if (dashboard.name === component.name) { + dashboard.component = component.name; + } }) +}) +console.log(cmp); + + let tmp = JSON.stringify(this.dashboardCollection); + // var merged = this.dashboardArray.reduce((current, value, index) => { + // if(index > 0) + // current += ','; + + // return current + value.component; + // }, ''); + + //console.log(merged); + console.log("temp data",typeof tmp); + console.log(tmp); + let parsed= JSON.parse(tmp); + this.serialize(parsed.dashboard); + this.dashbord1_Line.model = tmp; + + // let obj = this.dashboardCollection; + // obj[1].component = obj[1].component.toString(); + // let myJSON = JSON.stringify(obj); + // this.dashbord1_Line.model = myJSON; + + console.log("line data in addgadget ",this.dashbord1_Line); + console.log("line data in addgadget type ",typeof this.dashbord1_Line); + console.log("line model data ",this.dashbord1_Line.model); + console.log("line model data type",typeof this.dashbord1_Line.model); + this.dashboardService.UpdateLineData(this.id,this.dashbord1_Line).subscribe( + (data: any)=>{ + console.log('Updation Successful...'); + this.ngOnInit(); + console.log(data); + this.router.navigate(["../../all"], { relativeTo: this.route }) + } + ); + // if (data) { + // this.toastr.success('Updated successfully'); + // } + } + + onSubmit(id) + { + console.log(id); + if (!isNullArray(this.selectedyAxis)) { + console.log("get y-axis array", this.selectedyAxis); + this.entryForm.patchValue({ yAxis: this.selectedyAxis }); + } + let formdata = this.entryForm.value; + let num = id; + console.log(this.entryForm.value); + this.dashboardCollection.dashboard = this.dashboardCollection.dashboard.map(item => { + if(item.chartid == num) + { + //item["product_id"] = "thisistest"; + const xyz = {...item,...formdata} + console.log(xyz); + return xyz; + } + return item + }); + console.log(this.dashboardCollection.dashboard); + this.modeledit = false; + + // this.entryForm.reset(); + + } + goBack(){ + this.router.navigate(["../../all"], { relativeTo: this.route }) + } + + onSchedule(){ + this.router.navigate(['../../schedule/'+ this.editId],{relativeTo:this.route}); + } + + + /////// + storedata; + getStores(){ + this.datastoreService.getAll().subscribe((data) => { + console.log(data); + this.storedata = data; + },(error) => { + console.log(error); + }); + } + + selectedStoreId; + storename(val){ + console.log(val); + this.selectedStoreId = val; + this.getTables(this.selectedStoreId); + } + + TableData; + getTables(id){ + this.alertService.getTablefromstore(id).subscribe(gateway =>{ + console.log(gateway); + this.TableData = gateway; + },(error)=>{ + console.log(error); + }); + } + + tablename(val){ + console.log(val); + this.getColumns(this.selectedStoreId,val); + } + selectedyAxis; + columnData; + getColumns(id,table){ + this.alertService.getColumnfromurl(table).subscribe(data =>{ + console.log(data); + this.columnData = data; + },(error)=>{ + console.log(error); + }); + } + + + // toggleAddToDashboard(item) { + // item.addToDashboard = item.addToDashboard; + // } + + // getChartDataForToggleSwitchTrue() { + // for (let i = 0; i < this.dashArr.length; i++) { + // if (this.dashArr[i].addToDashboard) { + // this.dashboardService.getChartData( + // this.dashArr[i].charturl, // Assuming charturl is the correct property to pass as a string + // true // Pass true to indicate fetching charts with toggle switch set to true + // ).subscribe(tData => { + // console.log(tData); + // // this.dashArr[i].featchData = tData; + // }); + // } + // } + // } + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.css new file mode 100644 index 0000000..dc9ed07 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=bar-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.css.map new file mode 100644 index 0000000..e0b82da --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"bar-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.html new file mode 100644 index 0000000..0fa4df5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.html @@ -0,0 +1,9 @@ +
+ + +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.spec.ts new file mode 100644 index 0000000..0fd6253 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BarChartComponent } from './bar-chart.component'; + +describe('BarChartComponent', () => { + let component: BarChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BarChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BarChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.ts new file mode 100644 index 0000000..1d2c277 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bar-chart/bar-chart.component.ts @@ -0,0 +1,33 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-bar-chart', + templateUrl: './bar-chart.component.html', + styleUrls: ['./bar-chart.component.scss'] +}) +export class BarChartComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + barChartLabels: string[] = ['Apple', 'Banana', 'Kiwifruit', 'Blueberry', 'Orange', 'Grapes']; + barChartType: string = 'bar'; + // barChartLegend = true; + barChartPlugins = []; + barChartData: any[] = [ + { data: [45, 37, 60, 70, 46, 33], label: 'Best Fruits' } + ]; + + + + // events + public chartClicked(e: any): void { + console.log(e); + } + + public chartHovered(e: any): void { + console.log(e); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.css new file mode 100644 index 0000000..68bf163 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=bubble-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.css.map new file mode 100644 index 0000000..ca59a26 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"bubble-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.html new file mode 100644 index 0000000..5f6157d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.html @@ -0,0 +1,9 @@ +
+ + +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.spec.ts new file mode 100644 index 0000000..6f37403 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BubbleChartComponent } from './bubble-chart.component'; + +describe('BubbleChartComponent', () => { + let component: BubbleChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BubbleChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BubbleChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.ts new file mode 100644 index 0000000..b01a8b0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component.ts @@ -0,0 +1,98 @@ +import { Component, OnInit } from '@angular/core'; +import { ChartConfiguration, ChartDataset, ChartOptions } from 'chart.js'; +@Component({ + selector: 'app-bubble-chart', + templateUrl: './bubble-chart.component.html', + styleUrls: ['./bubble-chart.component.scss'] +}) +export class BubbleChartComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + public bubbleChartOptions: ChartConfiguration['options'] = { + // scales: { + // x: { + // min: 0, + // max: 30, + // ticks: {} + // }, + // y: { + // min: 0, + // max: 30, + // ticks: {} + // }, + // plugins: { + // title: { + // display: true, + // text: 'Bubble Chart' + // } + // } + // } + }; + + public bubbleChartType: string = 'bubble'; + // public bubbleChartLegend = true; + public bubbleChartData: ChartDataset[] = [ + { + data: [ + { x: 10, y: 10, r: 10 }, + { x: 15, y: 5, r: 15 }, + { x: 26, y: 12, r: 23 }, + { x: 7, y: 8, r: 8 }, + ], + label: 'Investment Equities', + backgroundColor: 'rgba(255, 0, 0, 0.6)', // Red + borderColor: 'blue', + hoverBackgroundColor: 'purple', + hoverBorderColor: 'red', + }, + { + data: [ + { x: 5, y: 15, r: 12 }, + { x: 20, y: 7, r: 8 }, + { x: 12, y: 18, r: 15 }, + { x: 8, y: 6, r: 10 }, + ], + label: 'Investment Bonds', + backgroundColor: 'rgba(0, 255, 0, 0.6)', // Green + borderColor: 'green', + hoverBackgroundColor: 'yellow', + hoverBorderColor: 'blue', + }, + // { + // data: [ + // { x: 10, y: 10, r: 10 }, + // { x: 15, y: 5, r: 15 }, + // { x: 26, y: 12, r: 23 }, + // { x: 7, y: 8, r: 8 }, + // ], + // label: 'Investment Equities', + // backgroundColor: [ + // 'red', + // 'green', + // 'blue', + // 'purple', + // 'yellow', + // 'brown', + // 'magenta', + // 'cyan', + // 'orange', + // 'pink' + // ], + // borderColor: 'blue', + // hoverBackgroundColor: 'purple', + // hoverBorderColor: 'red', + // }, + ]; + + // events + public chartClicked(e: any): void { + console.log(e); + } + + public chartHovered(e: any): void { + console.log(e); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.css new file mode 100644 index 0000000..f7a6815 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=doughnut-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.css.map new file mode 100644 index 0000000..b06f027 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"doughnut-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.html new file mode 100644 index 0000000..cab5b29 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.html @@ -0,0 +1,8 @@ +
+ +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.spec.ts new file mode 100644 index 0000000..6730967 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DoughnutChartComponent } from './doughnut-chart.component'; + +describe('DoughnutChartComponent', () => { + let component: DoughnutChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DoughnutChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DoughnutChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.ts new file mode 100644 index 0000000..137455b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-doughnut-chart', + templateUrl: './doughnut-chart.component.html', + styleUrls: ['./doughnut-chart.component.scss'] +}) +export class DoughnutChartComponent implements OnInit { + public doughnutChartLabels: string[] = [ + "Download Sales", + "In-Store Sales", + "Mail-Order Sales" + ]; + public doughnutChartData: number[] = [350, 450, 100]; + public doughnutChartType: string = "doughnut"; + + // events + public chartClicked(e: any): void { + console.log(e); + } + + public chartHovered(e: any): void { + console.log(e); + } + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.css new file mode 100644 index 0000000..c95881a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=dynamic-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.css.map new file mode 100644 index 0000000..0d29454 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"dynamic-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.html new file mode 100644 index 0000000..e00b379 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.html @@ -0,0 +1,10 @@ +
+ + +
+ diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.spec.ts new file mode 100644 index 0000000..fc47783 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DynamicChartComponent } from './dynamic-chart.component'; + +describe('DynamicChartComponent', () => { + let component: DynamicChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DynamicChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DynamicChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.ts new file mode 100644 index 0000000..2173924 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component.ts @@ -0,0 +1,70 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { ChartConfiguration, ChartData, } from 'chart.js'; +import { BaseChartDirective } from 'ng2-charts'; +@Component({ + selector: 'app-dynamic-chart', + templateUrl: './dynamic-chart.component.html', + styleUrls: ['./dynamic-chart.component.scss'] +}) +export class DynamicChartComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + @ViewChild(BaseChartDirective) chart: BaseChartDirective | undefined; + + public barChartOptions: ChartConfiguration['options'] = { + elements: { + line: { + tension: 0.4 + } + }, + // We use these empty structures as placeholders for dynamic theming. + // scales: { + // x: {}, + // y: { + // min: 10 + // } + // }, + plugins: { + legend: { display: true }, + } + }; + public dynamicChartLabels: string[] = [ '2006', '2007', '2008', '2009', '2010', '2011', '2012' ]; + public barChartType: string = 'bar'; + + // public barChartData: ChartData<'bar'> = { + // labels: this.barChartLabels, + // datasets: [ + // { data: [ 65, 59, 80, 81, 56, 55, 40 ], label: 'Series A' }, + // { data: [ 28, 48, 40, 19, 86, 27, 90 ], label: 'Series B' } + // ] + // }; + + + public dynamicChartData: any = [ + { data: [65, 59, 90, 81, 56, 55, 40], label: "Series A" }, + { data: [28, 48, 40, 19, 96, 27, 100], label: "Series B" } + ]; + + // events + public chartClicked(e: any): void { + console.log(e); + } + + public chartHovered(e: any): void { + console.log(e); + } + // public chartClicked({ event, active }: { event?: ChartEvent, active?: {}[] }): void { + // console.log(event, active); + // } + + // public chartHovered({ event, active }: { event?: ChartEvent, active?: {}[] }): void { + // console.log(event, active); + // } + + public randomize(): void { + this.barChartType = this.barChartType === 'bar' ? 'line' : 'bar'; + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.css new file mode 100644 index 0000000..ac86a4e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=financial-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.css.map new file mode 100644 index 0000000..b2642ea --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"financial-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.html new file mode 100644 index 0000000..56547d5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.html @@ -0,0 +1 @@ +

financial-chart works!

diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.spec.ts new file mode 100644 index 0000000..8b12e17 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FinancialChartComponent } from './financial-chart.component'; + +describe('FinancialChartComponent', () => { + let component: FinancialChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ FinancialChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(FinancialChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.ts new file mode 100644 index 0000000..664e7cd --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/financial-chart/financial-chart.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-financial-chart', + templateUrl: './financial-chart.component.html', + styleUrls: ['./financial-chart.component.scss'] +}) +export class FinancialChartComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.css new file mode 100644 index 0000000..62b150c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.css @@ -0,0 +1,72 @@ +input[type=text], [type=date], [type=password] { + width: 100%; + padding: 15px 20px; + background-color: rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.required-field { + color: red; + font-size: 18px; +} + +.green { + background-color: rgb(156, 231, 156); + color: black; +} + +.blue { + background-color: #57abcf; + color: black; +} + +.td-title { + text-align: center; + width: 150px; + color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); +} + +th { + background-color: rgb(170, 169, 169); + font-weight: bold; +} + +.td-content { + text-align: left; +} + +.delete, .heading { + text-align: center; + color: red; +} + +.section p { + background-color: rgb(206, 201, 201); + padding: 10px; + font-size: 18px; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + +input.ng-invalid.ng-touched { + border-color: red; +} + +.error_mess { + color: red; +} + +clr-datagrid { + height: 400px; /* Adjust the height as needed */ + overflow-y: auto; +}/*# sourceMappingURL=grid-view.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.css.map new file mode 100644 index 0000000..b6dcdc3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../../../../../styles1.scss","grid-view.component.css","grid-view.component.scss"],"names":[],"mappings":"AAAA;EACE,WAAA;EACA,kBAAA;EAED,oCAAA;EACC,qBAAA;EACA,sBAAA;EACA,kBAAA;EACA,sBAAA;ACAF;;ADEA;EACE,UAAA;EACF,eAAA;ACCA;;ADEA;EACE,oCAAA;EACA,YAAA;ACCF;;ADCA;EACE,yBAAA;EACA,YAAA;ACEF;;ADAA;EACE,kBAAA;EACA,YAAA;EACF,YAAA;EACE,iBAAA;EACA,2CAAA;ACGF;;ADAA;EACE,oCAAA;EACA,iBAAA;ACGF;;ADDA;EACE,gBAAA;ACIF;;ADFA;EACE,kBAAA;EACA,UAAA;ACKF;;ADHA;EACA,oCAAA;EACE,aAAA;EACA,eAAA;ACMF;;ADHA;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACMF;;ACzDA;EACE,iBAAA;AD4DF;;ACzDA;EACE,UAAA;AD4DF;;AC1DA;EACI,aAAA,EAAA,gCAAA;EACF,gBAAA;AD6DF","file":"grid-view.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.html new file mode 100644 index 0000000..94c1edc --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.html @@ -0,0 +1,69 @@ +
+
+
+
+

User Group Maintenance

+
+
+ + Loading ... +
{{error}}
+ + + User Group No + + + Group Name + + + Description + + + Group Level + + + Status + + + + Updated Date + + + + + {{user.usrGrp}} + {{user.groupName}} + {{user.groupDesc}} + {{user.groupLevel}} + {{user.status}} + + {{user.updateDateFormated}} + + + + + + + + + Record per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} Records + + +
+
+
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.scss new file mode 100644 index 0000000..99c5f44 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.scss @@ -0,0 +1,12 @@ +@import '../../../../../../../styles1.scss'; +input.ng-invalid.ng-touched { + border-color: red; +} + +.error_mess { + color: red; +} +clr-datagrid{ + height: 400px; /* Adjust the height as needed */ + overflow-y: auto; +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.spec.ts new file mode 100644 index 0000000..0353984 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GridViewComponent } from './grid-view.component'; + +describe('GridViewComponent', () => { + let component: GridViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ GridViewComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(GridViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.ts new file mode 100644 index 0000000..dfb2de1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/grid-view/grid-view.component.ts @@ -0,0 +1,54 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ExcelService } from 'src/app/services/excel.service'; +import * as moment from 'moment'; +import { UsergrpmaintainceService } from 'src/app/services/admin/usergrpmaintaince.service'; +import { ToastrService } from 'ngx-toastr'; +import { MenuGroupService } from 'src/app/services/admin/menu-group.service'; +@Component({ + selector: 'app-grid-view', + templateUrl: './grid-view.component.html', + styleUrls: ['./grid-view.component.scss'] +}) +export class GridViewComponent implements OnInit { + loading = false; + public entryForm: FormGroup; + givendata; + orders; + error; + modalAdd= false; + modaledit=false; + modaldelete=false; + rowSelected :any= {}; + mcreate; + medit; + showdata; + submitted=false; + + constructor( + private excel: ExcelService, + private toastr:ToastrService, + private _fb: FormBuilder, + private router: Router, + private route: ActivatedRoute, + private menuGroupService: MenuGroupService, + private mainservice:UsergrpmaintainceService, + ) { } + + ngOnInit(): void { + this.mainservice.getAll().subscribe((data) => { + console.log(data); + this.givendata = data; + if(this.givendata.length==0){ + this.error="No data Available"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.css new file mode 100644 index 0000000..630d4cd --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=line-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.css.map new file mode 100644 index 0000000..36b4be5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"line-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.html new file mode 100644 index 0000000..18c620d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.html @@ -0,0 +1,12 @@ +
+ +
+ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.spec.ts new file mode 100644 index 0000000..0c5e7ef --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LineChartComponent } from './line-chart.component'; + +describe('LineChartComponent', () => { + let component: LineChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LineChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(LineChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.ts new file mode 100644 index 0000000..3eaad81 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/line-chart/line-chart.component.ts @@ -0,0 +1,71 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-line-chart', + templateUrl: './line-chart.component.html', + styleUrls: ['./line-chart.component.scss'] +}) +export class LineChartComponent implements OnInit { + public lineChartData:Array = [ + {data: [65, 59, 80, 81, 56, 55, 40], label: 'Series A'}, + {data: [28, 48, 40, 19, 86, 27, 90], label: 'Series B'}, + {data: [18, 48, 77, 9, 100, 27, 40], label: 'Series C'} + ]; + public lineChartLabels:Array = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; + public lineChartOptions:any = { + responsive: true + }; + public lineChartColors:Array = [ + { // grey + backgroundColor: 'rgba(148,159,177,0.2)', + borderColor: 'rgba(148,159,177,1)', + pointBackgroundColor: 'rgba(148,159,177,1)', + pointBorderColor: '#fff', + pointHoverBackgroundColor: '#fff', + pointHoverBorderColor: 'rgba(148,159,177,0.8)' + }, + { // dark grey + backgroundColor: 'rgba(77,83,96,0.2)', + borderColor: 'rgba(77,83,96,1)', + pointBackgroundColor: 'rgba(77,83,96,1)', + pointBorderColor: '#fff', + pointHoverBackgroundColor: '#fff', + pointHoverBorderColor: 'rgba(77,83,96,1)' + }, + { // grey + backgroundColor: 'rgba(148,159,177,0.2)', + borderColor: 'rgba(148,159,177,1)', + pointBackgroundColor: 'rgba(148,159,177,1)', + pointBorderColor: '#fff', + pointHoverBackgroundColor: '#fff', + pointHoverBorderColor: 'rgba(148,159,177,0.8)' + } + ]; + public lineChartLegend:boolean = true; + public lineChartType:string = 'line'; + + public randomize():void { + let _lineChartData:Array = new Array(this.lineChartData.length); + for (let i = 0; i < this.lineChartData.length; i++) { + _lineChartData[i] = {data: new Array(this.lineChartData[i].data.length), label: this.lineChartData[i].label}; + for (let j = 0; j < this.lineChartData[i].data.length; j++) { + _lineChartData[i].data[j] = Math.floor((Math.random() * 100) + 1); + } + } + this.lineChartData = _lineChartData; + } + + // events + public chartClicked(e:any):void { + console.log(e); + } + + public chartHovered(e:any):void { + console.log(e); + } + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.css new file mode 100644 index 0000000..973bd02 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=pie-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.css.map new file mode 100644 index 0000000..a06051f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"pie-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.html new file mode 100644 index 0000000..ef42eed --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.html @@ -0,0 +1,9 @@ +
+ + +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.spec.ts new file mode 100644 index 0000000..64f36b7 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PieChartComponent } from './pie-chart.component'; + +describe('PieChartComponent', () => { + let component: PieChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PieChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PieChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.ts new file mode 100644 index 0000000..a6647a6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/pie-chart/pie-chart.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-pie-chart', + templateUrl: './pie-chart.component.html', + styleUrls: ['./pie-chart.component.scss'] +}) +export class PieChartComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + public pieChartLabels: string[] = ['SciFi', 'Drama', 'Comedy']; + public pieChartData: number[] = [30, 50, 20]; + public pieChartType: string = 'pie'; + + // events + public chartClicked(e: any): void { + console.log(e); + } + + public chartHovered(e: any): void { + console.log(e); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.css new file mode 100644 index 0000000..1e3f682 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=polar-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.css.map new file mode 100644 index 0000000..7c2253e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"polar-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.html new file mode 100644 index 0000000..421e078 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.html @@ -0,0 +1,10 @@ + +
+ + +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.spec.ts new file mode 100644 index 0000000..8501fbc --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PolarChartComponent } from './polar-chart.component'; + +describe('PolarChartComponent', () => { + let component: PolarChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PolarChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PolarChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.ts new file mode 100644 index 0000000..56652fe --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/polar-chart/polar-chart.component.ts @@ -0,0 +1,37 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-polar-chart', + templateUrl: './polar-chart.component.html', + styleUrls: ['./polar-chart.component.scss'] +}) +export class PolarChartComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + public polarAreaChartLabels: string[] = [ 'Download Sales', 'In-Store Sales', 'Mail Sales', 'Telesales', 'Corporate Sales' ]; + public polarAreaChartData: any = [ + { data: [ 300, 500, 100, 40, 120 ], label: 'Series 1'} + ]; + + public polarAreaChartType: string = 'polarArea'; + + + + // public radarChartData: any = [ + // { data: [65, 59, 90, 81, 56, 55, 40], label: "Series A" }, + // { data: [28, 48, 40, 19, 96, 27, 100], label: "Series B" } + // ]; + + // events + public chartClicked(e: any): void { + console.log(e); + } + + public chartHovered(e: any): void { + console.log(e); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.css new file mode 100644 index 0000000..b255a4d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=radar-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.css.map new file mode 100644 index 0000000..0e85db2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"radar-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.html new file mode 100644 index 0000000..3b26b0a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.html @@ -0,0 +1,8 @@ +
+ +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.spec.ts new file mode 100644 index 0000000..a5d9784 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RadarChartComponent } from './radar-chart.component'; + +describe('RadarChartComponent', () => { + let component: RadarChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ RadarChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(RadarChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.ts new file mode 100644 index 0000000..3c23092 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/radar-chart/radar-chart.component.ts @@ -0,0 +1,39 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-radar-chart', + templateUrl: './radar-chart.component.html', + styleUrls: ['./radar-chart.component.scss'] +}) +export class RadarChartComponent implements OnInit { +// Radar +public radarChartLabels: string[] = [ + "Eating", + "Drinking", + "Sleeping", + "Designing", + "Coding", + "Cycling", + "Running" +]; + +public radarChartData: any = [ + { data: [65, 59, 90, 81, 56, 55, 40], label: "Series A" }, + { data: [28, 48, 40, 19, 96, 27, 100], label: "Series B" } +]; +public radarChartType: string = "radar"; + +// events +public chartClicked(e: any): void { + console.log(e); +} + +public chartHovered(e: any): void { + console.log(e); +} + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.css new file mode 100644 index 0000000..2b5057d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=scatter-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.css.map new file mode 100644 index 0000000..4007ce6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"scatter-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.html new file mode 100644 index 0000000..e0b67e3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.html @@ -0,0 +1,8 @@ +
+ + +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.spec.ts new file mode 100644 index 0000000..70c8481 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ScatterChartComponent } from './scatter-chart.component'; + +describe('ScatterChartComponent', () => { + let component: ScatterChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ScatterChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ScatterChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.ts new file mode 100644 index 0000000..1af87bc --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component.ts @@ -0,0 +1,77 @@ +import { Component, OnInit } from '@angular/core'; +import { ChartData,ChartDataset } from 'chart.js'; + +@Component({ + selector: 'app-scatter-chart', + templateUrl: './scatter-chart.component.html', + styleUrls: ['./scatter-chart.component.scss'] +}) +export class ScatterChartComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + public scatterChartLabels: string[] = [ 'Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running' ]; + + public scatterChartData: ChartDataset[] = [ + // { + // data: [ + // { x: 1, y: 1 }, + // { x: 2, y: 3 }, + // { x: 3, y: -2 }, + // { x: 4, y: 4 }, + // { x: 5, y: -3, r: 20 }, + // ], + // label: 'Series A', + // pointRadius: 10, + // backgroundColor: 'red', + // }, + // { + // data: [ + // { x: 2, y: 2 }, + // { x: 3, y: 1 }, + // { x: 4, y: 3 }, + // { x: 5, y: 2 }, + // { x: 6, y: 4, r: 15 }, + // ], + // label: 'Series B', + // pointRadius: 8, + // backgroundColor: 'green', + // }, + { + data: [ + { x: 1, y: 1 }, + { x: 2, y: 3 }, + { x: 3, y: -2 }, + { x: 4, y: 4 }, + { x: 5, y: -3, r: 20 }, + ], + label: 'Series A', + pointRadius: 10, + backgroundColor: [ + 'red', + 'green', + 'blue', + 'purple', + 'yellow', + 'brown', + 'magenta', + 'cyan', + 'orange', + 'pink' + ], + }, + ]; + public scatterChartType: string = 'scatter'; + + + // events + public chartClicked(e: any): void { + console.log(e); + } + + public chartHovered(e: any): void { + console.log(e); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.css new file mode 100644 index 0000000..1a0ea87 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=to-do-chart.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.css.map new file mode 100644 index 0000000..5fe3143 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"to-do-chart.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.html new file mode 100644 index 0000000..c9e47d0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.html @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + +
#Item
{{i + 1}}{{todo}} + + + +
+ + + + + +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.spec.ts new file mode 100644 index 0000000..a489ab6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ToDoChartComponent } from './to-do-chart.component'; + +describe('ToDoChartComponent', () => { + let component: ToDoChartComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ToDoChartComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ToDoChartComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.ts new file mode 100644 index 0000000..481fcca --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-to-do-chart', + templateUrl: './to-do-chart.component.html', + styleUrls: ['./to-do-chart.component.scss'] +}) +export class ToDoChartComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + data: any; + todo: string; + todoList = ['todo 1']; + + public addTodo(todo: string) { + this.todoList.push(todo); +} + +public removeTodo(todoIx: number) { + if (this.todoList.length) { + this.todoList.splice(todoIx, 1); + } +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.html new file mode 100644 index 0000000..0b4b913 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.html @@ -0,0 +1 @@ +

schedule works!

diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.spec.ts new file mode 100644 index 0000000..74a139d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ScheduleComponent } from './schedule.component'; + +describe('ScheduleComponent', () => { + let component: ScheduleComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ScheduleComponent] + }); + fixture = TestBed.createComponent(ScheduleComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.ts new file mode 100644 index 0000000..5848b8b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardnew/schedule/schedule.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-schedule', + templateUrl: './schedule.component.html', + styleUrls: ['./schedule.component.scss'] +}) +export class ScheduleComponent { + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.spec.ts new file mode 100644 index 0000000..f034e08 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DashboardrunnerComponent } from './dashboardrunner.component'; + +describe('DashboardrunnerComponent', () => { + let component: DashboardrunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DashboardrunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DashboardrunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.ts new file mode 100644 index 0000000..f18f267 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashboardrunner.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-dashboardrunner', + templateUrl: './dashboardrunner.component.html', + styleUrls: ['./dashboardrunner.component.scss'] +}) +export class DashboardrunnerComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.css new file mode 100644 index 0000000..802d40f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.css @@ -0,0 +1,90 @@ +.td-title { + text-align: right; + width: 150px; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + color: white; +} + +.td-content { + text-align: left; +} + +.delete, .heading { + text-align: center; + color: red; +} + +input[type=radio] { + width: 14px !important; + height: 14px !important; + margin: 5px; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + appearance: none; + outline: 1px solid gray; + box-shadow: none; + font-size: 0.8em; + text-align: center; + line-height: 1em; + background: red; +} + +.dots { + width: 100px; + height: 100px; + bordeR: 1px solid; + border-radius: 50%; +} + +h4 { + margin-top: 16px; +} + +.s-order-dash-pg { + margin: 0px; + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: center; +} +.s-order-dash-pg .chart-box { + margin: 16px; + padding: 0 16px; + background-color: #fff; + border: 1px solid #ccc; + border-radius: 2px; +} + +#word1 { + width: 190px; + height: 180px; +} + +.center { + text-align: center; + margin-top: 5px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.heading { + text-align: center; + color: red; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +}/*# sourceMappingURL=dashrunnerall.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.css.map new file mode 100644 index 0000000..d4abb49 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["dashrunnerall.component.scss","dashrunnerall.component.css"],"names":[],"mappings":"AAAA;EACI,iBAAA;EACA,YAAA;EACA,iBAAA;EACA,2CAAA;EACA,YAAA;ACCJ;;ADCE;EACE,gBAAA;ACEJ;;ADAE;EACE,kBAAA;EACA,UAAA;ACGJ;;ADDE;EACE,sBAAA;EACA,uBAAA;EACA,WAAA;EACA,wBAAA;EACA,qBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,gBAAA;EACA,eAAA;ACIJ;;ADFE;EAEE,YAAA;EACA,aAAA;EACA,iBAAA;EACA,kBAAA;ACIJ;;ADDI;EAAG,gBAAA;ACKP;;ADJI;EACE,WAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,uBAAA;ACON;ADNM;EACE,YAAA;EACA,eAAA;EACA,sBAAA;EACA,sBAAA;EACA,kBAAA;ACQR;;ADLI;EACC,YAAA;EACC,aAAA;ACQN;;ADLI;EACE,kBAAA;EACA,eAAA;ACQN;;ADLI;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,wBAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;ACQN;;ADNM;EACE,kBAAA;EACA,UAAA;ACSR;;ADNM;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACSR","file":"dashrunnerall.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.html new file mode 100644 index 0000000..ca793c7 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.html @@ -0,0 +1,116 @@ + + +
+ +
+
+
+

All Dashboard

+
+
+ +
+
+ + + + + + +
+
+
+
+
+
+
+
+ +
+
+
+
+ {{app.dashboard_name}} +
+
+ +
+
+ {{app.description}} +
+
+
+ + +
+ + + + +
+
+
+
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.scss new file mode 100644 index 0000000..48905e0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.scss @@ -0,0 +1,93 @@ +.td-title { + text-align: right; + width: 150px; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + color: white; + } + .td-content{ + text-align: left; + } + .delete,.heading{ + text-align: center; + color: red; + } + input[type='radio']{ + width: 14px !important; + height: 14px !important; + margin: 5px; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + appearance: none; + outline: 1px solid gray; + box-shadow: none; + font-size: 0.8em; + text-align: center; + line-height: 1em; + background: red; + } + .dots + { + width: 100px; + height:100px; + border: 1px solid; + border-radius: 50%; + //background-color: #f00; + } + h4{margin-top: 16px;} + .s-order-dash-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + } + } + #word1{ + width: 190px; + height: 180px; + + } + .center{ + text-align: center; + margin-top: 5px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + .heading{ + text-align: center; + color: red; + } + + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + + + #word { + display: inline-block; + width: 320px; + white-space: nowrap; + overflow: hidden !important; + text-overflow: ellipsis; + font-weight: bold; + + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.spec.ts new file mode 100644 index 0000000..0b6bc3a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DashrunnerallComponent } from './dashrunnerall.component'; + +describe('DashrunnerallComponent', () => { + let component: DashrunnerallComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DashrunnerallComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DashrunnerallComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.ts new file mode 100644 index 0000000..ba27793 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerall/dashrunnerall.component.ts @@ -0,0 +1,125 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +// import { WireframeService } from 'src/app/services/builder/wireframe.service'; +import { ExcelService } from 'src/app/services/excel.service'; +import { Dashboard3Service } from '../../../../../services/builder/dashboard3.service'; +import * as moment from 'moment'; +import { ModulesetupService } from 'src/app/services/builder/modulesetup.service'; +@Component({ + selector: 'app-dashrunnerall', + templateUrl: './dashrunnerall.component.html', + styleUrls: ['./dashrunnerall.component.scss'] +}) +export class DashrunnerallComponent implements OnInit { + addModall:boolean = false; + selected:any[] = []; + loading = false; + data:any; + id:any; + moduleId:any; + modalDelete = false; + rowSelected :any= {}; + rows: any[]; + projectname; + projectId; + error; + constructor( + private router : Router, + private route: ActivatedRoute,private dashboardService : Dashboard3Service, + // private wireframeservice : WireframeService, + private excel: ExcelService,private mainService: ModulesetupService, + private toastr: ToastrService,) { } + + ngOnInit(): void { + // this.projectId=this.wireframeservice.getProjectId(); + console.log(this.projectId); + this.id = this.route.snapshot.params["id"]; // fb_header_id + // this.moduleId = this.wireframeservice.getModuleId(); // get from session storage + console.log(this.moduleId); + + this.getdashboard(); + // this.getprojectName(this.projectId); + } + + getprojectName(id){ + this.mainService.getProjectModules(id).subscribe((data) => { + console.log(data); + this.projectname=data.items[0]['projectName']; + console.log(this.projectname); + }); + } + + + getdashboard() + { + this.dashboardService.getAllDash().subscribe((data) =>{ + this.data = data; + this.rows = this.data; + console.log(data); + this.error="No data Available"; + console.log(this.error); + }); + } + + openModal() + { + this.addModall = true; + } + gotoadd() + { + this.router.navigate(['../../dashboardbuilder'],{relativeTo:this.route}); + } + goToEdit(id:number) + { + this.router.navigate(['../dashrunner/'+id],{relativeTo:this.route}); + } + + goToEditData(id: number){ + this.router.navigate(['../editdata/'+id],{relativeTo:this.route}); + } + + onExport() { + this.excel.exportAsExcelFile(this.rows, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + + gotoAction(){ + this.router.navigate(["../../actions"], { relativeTo: this.route, queryParams: { m_id: this.moduleId,pname:this.projectname } }); + } + gotoRepo(){ + this.router.navigate(["../../modulecard"], { relativeTo: this.route, queryParams: { p_id: this.projectId } }); + } + + onDelete(row){ + this.rowSelected = row; + console.log(this.rowSelected); + this.modalDelete = true; + } + delete(id) + { + this.modalDelete = false; + console.log("in delete "+id); + this.dashboardService.deleteField(id).subscribe((data)=>{ + console.log(data); + this.ngOnInit(); + }); + if (id) { + this.toastr.success('Deleted successfully'); + } + } + // openModal() + // { + // this.addModall = true; + // } + // gotoadd() + // { + // this.router.navigate(['../adddata'],{relativeTo:this.route}); + // } + // goToEdit() + // { + // this.router.navigate(['../editdashn'],{relativeTo:this.route}); + // } + +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.html new file mode 100644 index 0000000..1e6cc60 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.html @@ -0,0 +1,38 @@ +
+
+ + + +
+ + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.scss new file mode 100644 index 0000000..3b78b91 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.scss @@ -0,0 +1,102 @@ +//@import '../../../assets/scss/var'; + + +//common +h4{margin-top: 16px;} +.s-order-Dashtest-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + overflow: auto; +// overflow-x: hidden; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + max-width: 400px auto; + overflow: auto; + max-height: 300px auto; + + + } +} +#word{ + // width: 270px; + width:500px; +} +.center{ + text-align: center; + font-weight: 500; +} +.s{ + color: blue; +} + +li{ + list-style-type: none; +} +.progress-bar{ + margin-bottom: 5px; + height: 15px; +} + + +.chart-container { + position: relative; + width: 400px; /* Adjust width as needed */ + height: 300px; /* Adjust height as needed */ +} + +.chart-canvas { + width: 100%; + height: 100%; +} +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + background-color:rgb(255, 255, 255); + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} +.center { + text-align: center; +} + + +// .progress-bar { +// margin-bottom: 5px; +// height: 15px; +// border: 1px solid #ccc; /* Optional: Add a border to the progress bar */ +// } + +// .progress-meter { +// height: 100%; +// background-color: #007bff; /* Set the background color of the progress bar */ +// color: #fff; /* Set the text color of the percentage */ +// text-align: center; +// line-height: 15px; +// } + +// .progress-text { +// position: absolute; +// top: 0; +// left: 0; +// width: 100%; +// height: 100%; +// display: flex; +// align-items: center; +// justify-content: center; +// } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.spec.ts new file mode 100644 index 0000000..4bf541a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BarRunnerComponent } from './bar-runner.component'; + +describe('BarRunnerComponent', () => { + let component: BarRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BarRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BarRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.ts new file mode 100644 index 0000000..2781144 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component.ts @@ -0,0 +1,101 @@ +import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; +import { DashrunnerService } from '../dashrunner.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; + +@Component({ + selector: 'app-bar-runner', + templateUrl: './bar-runner.component.html', + styleUrls: ['./bar-runner.component.scss'] +}) +export class BarRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + @Output() buttonClicked = new EventEmitter(); + editId; + public DashtestboardArray: DashboardContentModel[] = [ + ]; + workflowLine; + TableName; + XAxis; + YAxis; + showlabel; + lineChartNoLabels:any[] = []; + JsonData; + + barData; + constructor(private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router,) { } + + barChartLabels: any[] = []; + barChartType: string = 'bar'; + barChartLegend = false; + barChartPlugins = []; + barChartData: any[] = []; + + CharData = { + "barChartData": [ + { data: [45, 37, 60, 70, 46, 33], label: 'Best Fruits' }, + ], + "barChartLabels":['Apple', 'Banana', 'Kiwifruit', 'Blueberry', 'Orange', 'Grapes'] + } + + ngOnInit(): void { + this.barChartData = this.CharData.barChartData; + this.barChartLabels = this.CharData.barChartLabels; + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + // this.DashtestboardArray = dash.dashboard; + // console.log(this.DashtestboardArray); + + const ChartObject = dash.dashboard.filter(obj => obj.name === "Bar Chart"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.getbarchart(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.setbarchart(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + this.showlabel = ChartObject[i].showlabel; + this.barChartLegend = ChartObject[i].chartlegend; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"Bar Chart",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.JsonData = Ldata; + this.barChartData = this.JsonData.barChartData; + this.barChartLabels = this.JsonData.barChartLabels; + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + } + + generatePDFFile(){ + this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'barchart.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.html new file mode 100644 index 0000000..c5682e6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.html @@ -0,0 +1,11 @@ +
+
+ + +
+ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.spec.ts new file mode 100644 index 0000000..fdd5925 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BubbleRunnerComponent } from './bubble-runner.component'; + +describe('BubbleRunnerComponent', () => { + let component: BubbleRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BubbleRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BubbleRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.ts new file mode 100644 index 0000000..5bb9632 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component.ts @@ -0,0 +1,140 @@ +import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ChartConfiguration, ChartDataset, ChartOptions } from 'chart.js'; +// import { Label } from 'ng2-charts'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; +import { DashrunnerService } from '../dashrunner.service'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; + +@Component({ + selector: 'app-bubble-runner', + templateUrl: './bubble-runner.component.html', + styleUrls: ['./bubble-runner.component.scss'] +}) +export class BubbleRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + @Output() buttonClicked = new EventEmitter(); + editId; + public DashtestboardArray: DashboardContentModel[] = [ + ]; + workflowLine; + TableName; + XAxis; + YAxis; + showlabel; + JsonData; + lineChartNoLabels: [] = []; + ChartLegend = false; + + constructor(private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router,) { } + + public bubbleChartOptions: ChartConfiguration['options'] = { + // scales: { + // x: { + // min: 0, + // max: 30, + // ticks: {} + // }, + // y: { + // min: 0, + // max: 30, + // ticks: {} + // }, + // plugins: { + // title: { + // display: true, + // text: 'Bubble Chart' + // } + // } + // } + }; + + public bubbleChartType: string = 'bubble'; + // public bubbleChartLegend = true; + public bubbleChartData: ChartDataset[] = [ + { + data: [ + { x: 10, y: 10, r: 10 }, + { x: 15, y: 5, r: 15 }, + { x: 26, y: 12, r: 23 }, + { x: 7, y: 8, r: 8 }, + ], + label: 'Investment Equities', + backgroundColor: 'rgba(255, 0, 0, 0.6)', // Red + borderColor: 'blue', + hoverBackgroundColor: 'purple', + hoverBorderColor: 'red', + }, + { + data: [ + { x: 5, y: 15, r: 12 }, + { x: 20, y: 7, r: 8 }, + { x: 12, y: 18, r: 15 }, + { x: 8, y: 6, r: 10 }, + ], + label: 'Investment Bonds', + backgroundColor: 'rgba(0, 255, 0, 0.6)', // Green + borderColor: 'green', + hoverBackgroundColor: 'yellow', + hoverBorderColor: 'blue', + }, + ]; + ngOnInit(): void { + // this.pieChartData = this.CharData.pieChartData; + // this.pieChartLabels = this.CharData.pieChartLabels; + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + + const ChartObject = dash.dashboard.filter(obj => obj.name === "Bubble Chart"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.getbubblechart(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.setbubblechart(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + this.showlabel = ChartObject[i].showlabel; + this.ChartLegend = ChartObject[i].chartlegend; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"Bubble Chart",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.JsonData = Ldata; + this.bubbleChartData = this.JsonData.bubbleChartData; + // this.radarChartLabels = this.JsonData.radarChartLabels; + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + } + + generatePDFFile(){ + this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'bubblechart.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); + } + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunner.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunner.service.spec.ts new file mode 100644 index 0000000..596cd13 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunner.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { DashrunnerService } from './dashrunner.service'; + +describe('DashrunnerService', () => { + let service: DashrunnerService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(DashrunnerService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunner.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunner.service.ts new file mode 100644 index 0000000..5c814f6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunner.service.ts @@ -0,0 +1,212 @@ +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from 'src/app/services/api/api-request.service'; +import baseUrl from 'src/app/services/api/helper'; +import { jsPDF } from 'jspdf'; +import domtoimage from 'dom-to-image'; +import { saveAs } from 'file-saver'; + +@Injectable({ + providedIn: 'root' +}) +export class DashrunnerService { + constructor(private apirequest:ApiRequestService,private _http: HttpClient) { } + + + + + getJsonData(api: string, jobType: string): Observable { + const url = `${baseUrl}/fnd/dashboardbuilder/getdashjson/${jobType}`; + let params: HttpParams = new HttpParams(); + params =params.append("api",api); + return this._http.get(url, { params }); + } + + updateDashboardLine(dashName: any, dashboardLine: any): Observable { + return this._http.put(`${baseUrl}/fnd/dashboardbuilder/update_Dashbord_json/${dashName}`, dashboardLine); + } + + getDashboardByName(dashname: any, json: any): Observable { + const params = new HttpParams() + .set('dashname', dashname) + .set('json', json); + + return this._http.get(`${baseUrl}/fnd/dashboardbuilder/get_dashboard`, { params }); + } + + getAxisDetails(): Observable { + return this._http.get(`${baseUrl}/token/Dashboardaxis`); + } + + ////////// + + resetConditions() { + this.lineChartIds = []; // Reset the ids array to an empty array + this.barChartIds = []; + this.doughnutChartIds = []; + this.pieChartIds = []; + this.polarareaChartIds = []; + this.radarChartIds = []; + this.scatterChartIds = []; + this.bubbleChartIds = []; + this.gridviewIds = []; + this.todoIds = []; +} + ////////// Line Chart +lineChartIds: any[] = []; +setlinechart(id: any) { + this.lineChartIds.push(id); +} + +getlinechart(): any[] { + return this.lineChartIds; +} + + ////////// Bar Chart + barChartIds: any[] = []; + setbarchart(id: any) { + this.barChartIds.push(id); + } + + getbarchart(): any[] { + return this.barChartIds; + } + + ////////// Doughnut Chart + doughnutChartIds: any[] = []; + setdoughnutchart(id: any) { + this.doughnutChartIds.push(id); + } + + getdoughnutchart(): any[] { + return this.doughnutChartIds; + } + + ////////// Pie Chart + pieChartIds: any[] = []; + setpiechart(id: any) { + this.pieChartIds.push(id); + } + + getpiechart(): any[] { + return this.pieChartIds; + } + + ////////// Poral Area Chart + polarareaChartIds: any[] = []; + setpolarareachart(id: any) { + this.polarareaChartIds.push(id); + } + + getpolarareachart(): any[] { + return this.polarareaChartIds; + } + + ////////// Radar Chart + radarChartIds: any[] = []; + setradarchart(id: any) { + this.radarChartIds.push(id); + } + + getradarchart(): any[] { + return this.radarChartIds; + } + + ////////// Scatter Chart + scatterChartIds: any[] = []; + setscatterchart(id: any) { + this.scatterChartIds.push(id); + } + + getscatterchart(): any[] { + return this.scatterChartIds; + } + + ////////// Bubble Chart + bubbleChartIds: any[] = []; + setbubblechart(id: any) { + this.bubbleChartIds.push(id); + } + + getbubblechart(): any[] { + return this.bubbleChartIds; + } + ////////// Grid View + gridviewIds: any[] = []; + setgridview(id: any) { + this.gridviewIds.push(id); + } + + getgridview(): any[] { + return this.gridviewIds; + } + ////////// To do + todoIds: any[] = []; + settodo(id: any) { + this.todoIds.push(id); + } + + gettodo(): any[] { + return this.todoIds; + } + + + + //////////////////////////////////////////////////////////////// + + public getChartData(tableName: string, jobType: string, xAxis:any,yAxes:any ): Observable { + const url = `${baseUrl}/chart/getdashjson/${jobType}?tableName=${tableName}&xAxis=${xAxis}&yAxes=${yAxes}`; + return this._http.get(url); + } + + + + ////////////////////////////////////////////// + + async generatePDF(content: HTMLElement, filename: string) { + // Wait for the charts to render (adjust the delay as needed) + await new Promise((resolve) => setTimeout(resolve, 1000)); + + try { + // Convert the content to a data URL + const dataUrl = await domtoimage.toPng(content); + + // Convert data URL to image + const img = new Image(); + img.src = dataUrl; + + img.onload = () => { + const pdf = new jsPDF(); + const imgWidth = 210; // A4 size (width in mm) + const imgHeight = (img.height * imgWidth) / img.width; + + // Add the image to the PDF + pdf.addImage(img, 'PNG', 0, 0, imgWidth, imgHeight); + + // Save the PDF with the custom filename + pdf.save(filename); + }; + } catch (error) { + console.error('Error generating PDF:', error); + } + } + + // async generatePDF(content: HTMLElement, filename: string) { + // await new Promise((resolve) => setTimeout(resolve, 1000)); + + // try { + // // Convert the content to a data URL + // const dataUrl = await domtoimage.toPng(content); + + // // Send a request to the server to generate the PDF + // const pdfData = await this._http.post('/api/generate-pdf', { dataUrl, filename }).toPromise(); + + // // Save the PDF on the client-side + // saveAs(pdfData, filename); + // } catch (error) { + // console.error('Error generating PDF:', error); + // } + // } + +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.html new file mode 100644 index 0000000..4a68f73 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.html @@ -0,0 +1,40 @@ +
+ + +
+
+
+ + + + + + + + +

{{ item.charttitle }}

+
+ + + + +
+
+
+
+ +
+ + +
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.scss new file mode 100644 index 0000000..66f63a6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.scss @@ -0,0 +1,49 @@ +.componentbtn{ + color: white; + background-color: #03AC13; + border: none; +} +.content-container { + min-height: 100vh; + height: initial; +} +a:hover { +text-decoration: none; +cursor: pointer; +} +.clr-checkbox{ +color: #212529; +border: 1px solid #ced4da; +border-radius: 0.25rem; +// padding: 0.75rem 0.75rem; +// margin-top: 3px; +width: 100%; +margin-left: 20px; +margin-bottom: 18px; +} +.clr-input, .clr-dropdown { +color: #212529; +border: 1px solid #ced4da; +border-radius: 0.25rem; +padding: 0.75rem 0.75rem; +margin-top: 3px; +width: 100%; +margin-bottom: 10px; +} + +.circle { + width: 25px; + height: 25px; + border: 0.5px solid black; + border-radius: 25px; + // background-color: #235255; + display: flex; + align-items: center; + justify-content: center; + opacity: 0.4; +} +.circle b, clr-icon { + // color: #fff; + font-size: 15px; + //opacity: 0.5; +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.spec.ts new file mode 100644 index 0000000..dc29447 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DashrunnerlineComponent } from './dashrunnerline.component'; + +describe('DashrunnerlineComponent', () => { + let component: DashrunnerlineComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DashrunnerlineComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DashrunnerlineComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.ts new file mode 100644 index 0000000..61f9a3c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/dashrunnerline.component.ts @@ -0,0 +1,291 @@ +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { ChartDataset, ChartType } from 'chart.js'; +import { DashrunnerService } from './dashrunner.service'; +import { GridsterConfig, GridsterItem, GridsterItemComponentInterface } from 'angular-gridster2'; +import { DoughnutRunnerComponent } from './doughnut-runner/doughnut-runner.component'; +import { LineRunnerComponent } from './line-runner/line-runner.component'; +import { BarRunnerComponent } from './bar-runner/bar-runner.component'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; +import { GridRunnerComponent } from './grid-runner/grid-runner.component'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; +import { TodoRunnerComponent } from './todo-runner/todo-runner.component'; +import { jsPDF } from 'jspdf'; +import domtoimage from 'dom-to-image'; +import { PieRunnerComponent } from './pie-runner/pie-runner.component'; +import { BubbleRunnerComponent } from './bubble-runner/bubble-runner.component'; +import { ScatterRunnerComponent } from './scatter-runner/scatter-runner.component'; +import { PolarRunnerComponent } from './polar-runner/polar-runner.component'; +import { RadarRunnerComponent } from './radar-runner/radar-runner.component'; + +@Component({ + selector: 'app-dashrunnerline', + templateUrl: './dashrunnerline.component.html', + styleUrls: ['./dashrunnerline.component.scss'] +}) +export class DashrunnerlineComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + // @ViewChild('contentContainer', {static:false}) el!: ElementRef; + public options: GridsterConfig; + workflowLine:any; + editId; + public DashtestboardArray: DashboardContentModel[] = [ + + + ]; + componentCollection = [ + { name: "Line Chart", componentInstance: LineRunnerComponent }, + { name: "Doughnut Chart", componentInstance: DoughnutRunnerComponent }, + { name: "Bar Chart", componentInstance: BarRunnerComponent }, + { name: "Pie Chart", componentInstance: PieRunnerComponent }, + { name: "Bubble Chart", componentInstance: BubbleRunnerComponent }, + { name: "Scatter Chart", componentInstance: ScatterRunnerComponent }, + { name: "Polar Area Chart", componentInstance: PolarRunnerComponent }, + { name: "Radar Chart", componentInstance: RadarRunnerComponent }, + { name: "Grid View", componentInstance: GridRunnerComponent }, + { name: "To Do Chart", componentInstance: TodoRunnerComponent }, +]; + + constructor(private Dashtestservive:DashrunnerService, private dashboardService: Dashboard3Service,private route: ActivatedRoute, + private router : Router,) { } + + ngOnInit(): void { + + + this.router.events.subscribe((event) => { + if (event instanceof NavigationEnd) { + // Reset conditions when navigation changes + this.Dashtestservive.resetConditions(); + } + }); + + this.options = { + gridType: 'fit', + enableEmptyCellDrop: true, + pushItems: true, + swap: true, + pushDirections: { north: true, east: true, south: true, west: true }, + resizable: { enabled: true }, + draggable: { + enabled: true, + ignoreContent: true, + dropOverItems: true, + dragHandleClass: 'drag-handler', + ignoreContentClass: 'no-drag', + }, + displayGrid: 'onDrag&Resize', //always + minCols: 10, + minRows: 10, + }; + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + this.getbyId(this.editId); + } +//getbyname +dashboard_name = "Dashtest"; + getbyId(id){ + this.dashboardService.getById(id).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + this.dashboard_name = data.dashboard_name; + if(this.workflowLine == "" || this.workflowLine == null){ + console.log("default json"); + const defaultJson = [ + { + cols: 3, + rows: 5, + x: 0, + y: 0, + chartid: 3, + name: 'Doughnut Chart', + component: 'Doughnut Chart', + }, + { + cols: 3, + rows: 5, + x: 0, + y: 0, + chartid: 3, + name: 'Line Chart', + component: 'Line Chart', + }, + { + cols: 3, + rows: 5, + x: 0, + y: 0, + chartid: 3, + name: 'Bar Chart', + component: 'Bar Chart', + }, + { + cols: 3, + rows: 5, + x: 0, + y: 0, + chartid: 3, + name: 'Grid View', + component: 'Grid View', + }, + { + cols: 3, + rows: 5, + x: 0, + y: 0, + chartid: 3, + name: 'To Do Chart', + component: 'To Do Chart', + } + ] + this.workflowLine = JSON.stringify(defaultJson); + } + console.log(this.workflowLine); + if(this.workflowLine) + { + console.log(this.workflowLine); + const dash = JSON.parse(this.workflowLine) ; + this.DashtestboardArray = dash.dashboard; + console.log(this.DashtestboardArray); + this.parseJson(this.DashtestboardArray); + } + + },(error)=>{ + console.log(error); + }); + } + + parseJson(DashtestboardArray: any) { + DashtestboardArray.forEach(dashboard => { + this.componentCollection.forEach(component => { + if (dashboard.component === component.name) { + dashboard.component = component.componentInstance; + } + }); + }); + } + + + dashbord1_Line = { + model:'' + } + + update(){ + console.log(this.DashtestboardArray); + + let cmp=this.DashtestboardArray.forEach(dashboard=>{ + this.componentCollection.forEach(component=>{ + if (dashboard.name === component.name) { + dashboard.component = component.name; + } }) + }) + + console.log(cmp); + + let tmp = JSON.stringify(this.DashtestboardArray); + this.dashbord1_Line.model = tmp; + + this.Dashtestservive.updateDashboardLine(this.dashboard_name, this.dashbord1_Line).subscribe((data)=>{ + console.log(data); + }); + + window.location.reload(); + // this.parseJson(this.DashtestboardArray); + } + + + //Resizabel and drag + resizable: boolean = false; + toggleResizable() { + this.resizable = !this.resizable; + if (this.resizable == true) { + this.options = { + resizable: { enabled: false }, + }; + } else { + this.options = { + resizable: { enabled: true }, + }; + } + } + + // generatePDF(){ + // let pdf = new jsPDF('p','pt','a4'); + // pdf.html(this.el.nativeElement,{ + // callback: (pdf)=>{ + // pdf.save("demo.pdf"); + // } + // }) + // } + + + // async generatePDF() { + // const content = this.contentContainerRef.nativeElement; + + // // Wait for the charts to render (adjust the delay as needed) + // await new Promise((resolve) => setTimeout(resolve, 1000)); + + // try { + // // Convert the content to canvas (using html2canvas) + // const canvas = await html2canvas(content); + + // const pdf = new html2pdf.default(); + // const options = { + // margin: 10, + // filename: 'dashboard.pdf', + // image: { type: 'jpeg', quality: 0.98 }, + // jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' } + // }; + + // // Convert the canvas to PDF and save + // await pdf.from(canvas).set(options).outputPdf().then((pdfOutput: any) => { + // // Convert the PDF output to a Blob + // const pdfBlob = new Blob([pdfOutput], { type: 'application/pdf' }); + + // // Save the Blob as a file using FileSaver.js + // saveAs(pdfBlob, 'dashboard.pdf'); + // }); + // } catch (error) { + // console.error('Error generating PDF:', error); + // } + // } + + async generatePDF() { + const content = this.contentContainerRef.nativeElement; + + // Wait for the charts to render (adjust the delay as needed) + await new Promise((resolve) => setTimeout(resolve, 1000)); + + try { + // Convert the content to a data URL (using dom-to-image) + const dataUrl = await domtoimage.toPng(content); + + // Convert data URL to image + const img = new Image(); + img.src = dataUrl; + + img.onload = () => { + const pdf = new jsPDF(); + const imgWidth = 210; // A4 size (width in mm) + const imgHeight = (img.height * imgWidth) / img.width; + + // Add the image to the PDF + pdf.addImage(img, 'PNG', 0, 0, imgWidth, imgHeight); + // pdf.save('dashboard.pdf'); + const pdfName = this.dashboard_name + '.pdf' + pdf.save(pdfName) + }; + } catch (error) { + console.error('Error generating PDF:', error); + } + } + + // Export(name){ + // console.log(name); + // this.dashboardService.setName(name); + // } + + onButtonClicked(): void { + console.log('Button clicked in SomeComponent'); + // Add your custom logic here when the button is clicked in SomeComponent + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.html new file mode 100644 index 0000000..5dd1f44 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.html @@ -0,0 +1,10 @@ +
+
+ + +
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.scss new file mode 100644 index 0000000..ac9ae54 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.scss @@ -0,0 +1,76 @@ +//@import '../../../assets/scss/var'; + + +//common +h4{margin-top: 16px;} +.s-order-Dashtest-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + overflow: auto; +// overflow-x: hidden; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + max-width: 400px auto; + overflow: auto; + max-height: 300px auto; + + + } +} +#word{ + // width: 270px; + width:500px; +} +.center{ + text-align: center; + font-weight: 500; +} +.s{ + color: blue; +} + +li{ + list-style-type: none; +} +.progress-bar{ + margin-bottom: 5px; + height: 15px; +} + + +.chart-container { + position: relative; + width: 400px; /* Adjust width as needed */ + height: 300px; /* Adjust height as needed */ +} + +.chart-canvas { + width: 100%; + height: 100%; +} +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + background-color:rgb(255, 255, 255); + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} +.center { + text-align: center; +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.spec.ts new file mode 100644 index 0000000..46fa1b6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DoughnutRunnerComponent } from './doughnut-runner.component'; + +describe('DoughnutRunnerComponent', () => { + let component: DoughnutRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DoughnutRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DoughnutRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.ts new file mode 100644 index 0000000..f92400c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component.ts @@ -0,0 +1,99 @@ +import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { DashrunnerService } from '../dashrunner.service'; +import {baseColors } from 'ng2-charts'; +import { ChartDataset, ChartType, } from 'chart.js'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; + +@Component({ + selector: 'app-doughnut-runner', + templateUrl: './doughnut-runner.component.html', + styleUrls: ['./doughnut-runner.component.scss'] +}) +export class DoughnutRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + editId; + public DashtestboardArray: DashboardContentModel[] = [ + ]; + workflowLine; + TableName; + XAxis; + YAxis; + showlabel; + lineChartNoLabels:any[] = []; + JsonData; + + doughnutD; + doughnutChartData:any = []; + doughnutChartLabels: any[] = []; + doughnutChartLegend = false; + doughnutData ={ + "chartData": [[55, 25, 20]], + "chartLabels": ["Project", "Repository", "Wireframe"] + } + doughnutChartType: ChartType = 'doughnut'; + + + constructor(private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router,) { } + ngOnInit(): void { + this.doughnutChartData = this.doughnutData.chartData; + this.doughnutChartLabels = this.doughnutData.chartLabels; + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + // this.DashtestboardArray = dash.dashboard; + // console.log(this.DashtestboardArray); + + const ChartObject = dash.dashboard.filter(obj => obj.name === "Doughnut Chart"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.getdoughnutchart(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.setdoughnutchart(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + this.showlabel = ChartObject[i].showlabel; + this.doughnutChartLegend = ChartObject[i].chartlegend; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"Doughnut Chart",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.JsonData = Ldata; + this.doughnutChartData = this.JsonData.chartData; + this.doughnutChartLabels = this.JsonData.chartLabels; + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + } + + generatePDFFile(){ + // this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'doughnut.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); + } + + + +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.html new file mode 100644 index 0000000..4761acc --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.html @@ -0,0 +1,54 @@ + +
+
+ + + + + + + + + + + +
{{co}}
{{item[key]}}
+
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.scss new file mode 100644 index 0000000..bbed2c9 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.scss @@ -0,0 +1,12 @@ +input.ng-invalid.ng-touched { + border-color: red; + } + + .error_mess { + color: red; + } + clr-datagrid{ + height: 400px; /* Adjust the height as needed */ + overflow-y: auto; + + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.spec.ts new file mode 100644 index 0000000..57bca9f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GridRunnerComponent } from './grid-runner.component'; + +describe('GridRunnerComponent', () => { + let component: GridRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ GridRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(GridRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.ts new file mode 100644 index 0000000..9e1f6ac --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component.ts @@ -0,0 +1,111 @@ +import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; +import { DashrunnerService } from '../dashrunner.service'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; + +@Component({ + selector: 'app-grid-runner', + templateUrl: './grid-runner.component.html', + styleUrls: ['./grid-runner.component.scss'] +}) +export class GridRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + @Output() buttonClicked = new EventEmitter(); + loading = false; + givendata; + error; + XAxis; + YAxis; + + rows:any[]; + columns: any[]; + rowdata; + + editId; + public DashtestboardArray: DashboardContentModel[] = []; + workflowLine; + TableName; + + constructor( + private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router + ) { } + + ngOnInit(): void { + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + // this.getbyId(); + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + // this.DashtestboardArray = dash.dashboard; + // console.log(this.DashtestboardArray); + + const ChartObject = dash.dashboard.filter(obj => obj.name === "Grid View"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.getgridview(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.setgridview(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"Grid View",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.rows = Ldata; + this.rowdata = this.rows + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + } + + + +//dynamic table + + +getTableData(id){ +} +getHeaders() { +let headers: string[] = []; +if(this.rows) { + this.rows.forEach((value) => { + Object.keys(value).forEach((key) => { + if(!headers.find((header) => header == key)){ + headers.push(key) + } + + }) + + }) +} +return headers; +} + +generatePDFFile(){ + this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'gridview.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); +} +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.html new file mode 100644 index 0000000..5f5da80 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.html @@ -0,0 +1,14 @@ +
+
+ + + +
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.scss new file mode 100644 index 0000000..ac9ae54 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.scss @@ -0,0 +1,76 @@ +//@import '../../../assets/scss/var'; + + +//common +h4{margin-top: 16px;} +.s-order-Dashtest-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + overflow: auto; +// overflow-x: hidden; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + max-width: 400px auto; + overflow: auto; + max-height: 300px auto; + + + } +} +#word{ + // width: 270px; + width:500px; +} +.center{ + text-align: center; + font-weight: 500; +} +.s{ + color: blue; +} + +li{ + list-style-type: none; +} +.progress-bar{ + margin-bottom: 5px; + height: 15px; +} + + +.chart-container { + position: relative; + width: 400px; /* Adjust width as needed */ + height: 300px; /* Adjust height as needed */ +} + +.chart-canvas { + width: 100%; + height: 100%; +} +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + background-color:rgb(255, 255, 255); + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} +.center { + text-align: center; +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.spec.ts new file mode 100644 index 0000000..7785dba --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LineRunnerComponent } from './line-runner.component'; + +describe('LineRunnerComponent', () => { + let component: LineRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LineRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(LineRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.ts new file mode 100644 index 0000000..93d621b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component.ts @@ -0,0 +1,169 @@ +import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; +import { baseColors } from 'ng2-charts'; +import { ChartDataset, ChartType } from 'chart.js'; +import { DashrunnerService } from '../dashrunner.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; +import { jsPDF } from 'jspdf'; +import domtoimage from 'dom-to-image'; +@Component({ + selector: 'app-line-runner', + templateUrl: './line-runner.component.html', + styleUrls: ['./line-runner.component.scss'] +}) +export class LineRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + @Output() buttonClicked = new EventEmitter(); + editId; + public DashtestboardArray: DashboardContentModel[] = [ + ]; + workflowLine; + TableName; + XAxis; + YAxis; + showlabel; + + JsonData; + lineChartData: ChartDataset[] = []; + lineChartLabels:any[] = []; + lineChartNoLabels: any[] = []; + lineCharData = + { + "chartData": [ + { "data": [85, 72, 78, 75, 77, 75, 43,85, 72, 78, 75, 77, 75, 43], "label": "Test Projects" } + ], + "chartLabels": ["Jan", "Feb", "March", "April", "May", "June","july","Jan", "Feb", "March", "April", "May", "June","july"] + } + + lineChartOptions = { + // plugins: { + // colors: { + // forceOverride: true + // } + // }, + responsive: true, + }; + lineChartColors:any[] = [ + { + borderColor: 'black', + backgroundColor: 'rgba(255,255,0,0.28)', + }, + ]; + + lineChartLegend = false; + lineChartPlugins = []; + lineChartType = 'line'; + constructor(private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router,) { } + + ngOnInit(): void { + + this.lineChartData = this.lineCharData.chartData; + this.lineChartLabels = this.lineCharData.chartLabels; + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + // this.DashtestboardArray = dash.dashboard; + // console.log(this.DashtestboardArray); + + const ChartObject = dash.dashboard.filter(obj => obj.name === "Line Chart"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.getlinechart(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.setlinechart(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + this.showlabel = ChartObject[i].showlabel; + this.lineChartLegend = ChartObject[i].chartlegend; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"Line Chart",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.JsonData = Ldata; + this.lineChartData = this.JsonData.chartData; + this.lineChartLabels = this.JsonData.chartLabels; + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + + // setTimeout(() => { + // // this.Dashtestservive.getJsonData("http://localhost:9292/token/Dashboardaxis/7","Line Chart").subscribe(Ldata => { + // this.Dashtestservive.getChartData(this.TableName,"Line Chart",this.XAxis,this.YAxis).subscribe((Ldata) => { + // console.log(Ldata); + // this.JsonData = Ldata; + // this.lineChartData = this.JsonData.chartData; + // this.lineChartLabels = this.JsonData.chartLabels; + + // },(error) => { + // console.log(error); + // }); + + // }, 500); + + // const name = this.dashboardService.getName() + // // Here, you can execute the method based on the received name + // if (name === 'Line Chart') { + // this.generatePDF(); + // } + } + + generatePDFFile(){ + this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'linechart.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); + } + + // async generatePDF() { + // const content = this.contentContainerRef.nativeElement; + + // // Wait for the charts to render (adjust the delay as needed) + // await new Promise((resolve) => setTimeout(resolve, 1000)); + + // try { + // // Convert the content to a data URL (using dom-to-image) + // const dataUrl = await domtoimage.toPng(content); + + // // Convert data URL to image + // const img = new Image(); + // img.src = dataUrl; + + // img.onload = () => { + // const pdf = new jsPDF(); + // const imgWidth = 210; // A4 size (width in mm) + // const imgHeight = (img.height * imgWidth) / img.width; + + // // Add the image to the PDF + // pdf.addImage(img, 'PNG', 0, 0, imgWidth, imgHeight); + // pdf.save('linechart.pdf'); + // // const pdfName = this.dashboard_name + '.pdf' + // // pdf.save(pdfName) + // }; + // } catch (error) { + // console.error('Error generating PDF:', error); + // } + // } + +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.html new file mode 100644 index 0000000..59cb87b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.html @@ -0,0 +1,11 @@ +
+
+ + + +
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.spec.ts new file mode 100644 index 0000000..8384566 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PieRunnerComponent } from './pie-runner.component'; + +describe('PieRunnerComponent', () => { + let component: PieRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PieRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PieRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.ts new file mode 100644 index 0000000..c1a64d1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component.ts @@ -0,0 +1,92 @@ +import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; +import { DashrunnerService } from '../dashrunner.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; + + +@Component({ + selector: 'app-pie-runner', + templateUrl: './pie-runner.component.html', + styleUrls: ['./pie-runner.component.scss'] +}) +export class PieRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + @Output() buttonClicked = new EventEmitter(); + editId; + public DashtestboardArray: DashboardContentModel[] = [ + ]; + workflowLine; + TableName; + XAxis; + YAxis; + showlabel; + JsonData; + lineChartNoLabels: any[] = []; + + constructor(private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router,) { } + + public pieChartLabels: string[] = ['SciFi', 'Drama', 'Comedy']; + public pieChartData: number[] = [30, 50, 20]; + public pieChartType: string = 'pie'; + ChartLegend = false; + + ngOnInit(): void { + // this.pieChartData = this.CharData.pieChartData; + // this.pieChartLabels = this.CharData.pieChartLabels; + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + // this.DashtestboardArray = dash.dashboard; + // console.log(this.DashtestboardArray); + + const ChartObject = dash.dashboard.filter(obj => obj.name === "Pie Chart"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.getpiechart(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.setpiechart(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + this.showlabel = ChartObject[i].showlabel; + this.ChartLegend = ChartObject[i].chartlegend; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"Pie Chart",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.JsonData = Ldata; + this.pieChartData = this.JsonData.pieChartData; + this.pieChartLabels = this.JsonData.pieChartLabels; + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + } + + generatePDFFile(){ + this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'piechart.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.html new file mode 100644 index 0000000..34754a6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.html @@ -0,0 +1,10 @@ +
+
+ + +
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.spec.ts new file mode 100644 index 0000000..5f95ce3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PolarRunnerComponent } from './polar-runner.component'; + +describe('PolarRunnerComponent', () => { + let component: PolarRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PolarRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PolarRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.ts new file mode 100644 index 0000000..fdbe17a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component.ts @@ -0,0 +1,93 @@ +import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; +import { DashrunnerService } from '../dashrunner.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; +// import { Label } from 'ng2-charts'; + +@Component({ + selector: 'app-polar-runner', + templateUrl: './polar-runner.component.html', + styleUrls: ['./polar-runner.component.scss'] +}) +export class PolarRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + @Output() buttonClicked = new EventEmitter(); + editId; + public DashtestboardArray: DashboardContentModel[] = [ + ]; + workflowLine; + TableName; + XAxis; + YAxis; + showlabel; + JsonData; + lineChartNoLabels: any[] = []; + + constructor(private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router,) { } + + public polarAreaChartLabels: string[] = [ 'Download Sales', 'In-Store Sales', 'Mail Sales', 'Telesales', 'Corporate Sales' ]; + public polarAreaChartData: any = [ + { data: [ 300, 500, 100, 40, 120 ], label: 'Series 1'} + ]; + + public polarAreaChartType: string = 'polarArea'; + ChartLegend = false; + ngOnInit(): void { + // this.pieChartData = this.CharData.pieChartData; + // this.pieChartLabels = this.CharData.pieChartLabels; + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + + const ChartObject = dash.dashboard.filter(obj => obj.name === "Polar Area Chart"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.getpolarareachart(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.setpolarareachart(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + this.showlabel = ChartObject[i].showlabel; + this.ChartLegend = ChartObject[i].chartlegend; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"PolarArea Chart",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.JsonData = Ldata; + this.polarAreaChartData = this.JsonData.polarAreaChartData; + this.polarAreaChartLabels = this.JsonData.polarAreaChartLabels; + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + } + + generatePDFFile(){ + this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'polarareachart.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.html new file mode 100644 index 0000000..009d6b5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.html @@ -0,0 +1,10 @@ +
+
+ + +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.spec.ts new file mode 100644 index 0000000..d461a81 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RadarRunnerComponent } from './radar-runner.component'; + +describe('RadarRunnerComponent', () => { + let component: RadarRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ RadarRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(RadarRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.ts new file mode 100644 index 0000000..e1a901e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component.ts @@ -0,0 +1,102 @@ +import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; +import { DashrunnerService } from '../dashrunner.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; +// import { Label } from 'ng2-charts'; + +@Component({ + selector: 'app-radar-runner', + templateUrl: './radar-runner.component.html', + styleUrls: ['./radar-runner.component.scss'] +}) +export class RadarRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + @Output() buttonClicked = new EventEmitter(); + editId; + public DashtestboardArray: DashboardContentModel[] = [ + ]; + workflowLine; + TableName; + XAxis; + YAxis; + showlabel; + JsonData; + lineChartNoLabels: any[] = []; + ChartLegend = false; + + constructor(private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router,) { } + + public radarChartLabels: string[] = [ + "Eating", + "Drinking", + "Sleeping", + "Designing", + "Coding", + "Cycling", + "Running" + ]; + + public radarChartData: any = [ + { data: [65, 59, 90, 81, 56, 55, 40], label: "Series A" }, + { data: [28, 48, 40, 19, 96, 27, 100], label: "Series B" } + ]; + public radarChartType: string = "radar"; + ngOnInit(): void { + // this.pieChartData = this.CharData.pieChartData; + // this.pieChartLabels = this.CharData.pieChartLabels; + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + + const ChartObject = dash.dashboard.filter(obj => obj.name === "Radar Chart"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.getradarchart(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.setradarchart(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + this.showlabel = ChartObject[i].showlabel; + this.ChartLegend = ChartObject[i].chartlegend; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"Radar Chart",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.JsonData = Ldata; + this.radarChartData = this.JsonData.radarChartData; + this.radarChartLabels = this.JsonData.radarChartLabels; + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + } + + generatePDFFile(){ + this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'radarchart.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.html new file mode 100644 index 0000000..5229e6b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.html @@ -0,0 +1,12 @@ +
+
+ + +
+ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.spec.ts new file mode 100644 index 0000000..67dde75 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ScatterRunnerComponent } from './scatter-runner.component'; + +describe('ScatterRunnerComponent', () => { + let component: ScatterRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ScatterRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ScatterRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.ts new file mode 100644 index 0000000..2f36596 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component.ts @@ -0,0 +1,121 @@ +import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; +import { DashrunnerService } from '../dashrunner.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; +// import { Label } from 'ng2-charts'; +import { ChartDataset } from 'chart.js'; + +@Component({ + selector: 'app-scatter-runner', + templateUrl: './scatter-runner.component.html', + styleUrls: ['./scatter-runner.component.scss'] +}) +export class ScatterRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + @Output() buttonClicked = new EventEmitter(); + editId; + public DashtestboardArray: DashboardContentModel[] = [ + ]; + workflowLine; + TableName; + XAxis; + YAxis; + showlabel; + JsonData; + lineChartNoLabels: any[] = []; + ChartLegend = false; + + constructor(private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router,) { } + + public scatterChartLabels: string[] = [ 'Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running' ]; + + public scatterChartData: ChartDataset[] = [ + { + data: [ + { x: 1, y: 1 }, + { x: 2, y: 3 }, + { x: 3, y: -2 }, + { x: 4, y: 4 }, + { x: 5, y: -3, r: 20 }, + ], + label: 'Series A', // This label will be displayed on hover + pointRadius: 10, + backgroundColor: 'red', + }, + { + data: [ + { x: 2, y: 2 }, + { x: 3, y: 4 }, + { x: 4, y: -1 }, + { x: 5, y: 5 }, + { x: 6, y: -2, r: 20 }, + ], + label: 'Series B', // This label will be displayed on hover + pointRadius: 10, + backgroundColor: 'blue', + }, + ]; + public scatterChartType: string = 'scatter'; + ChartOptions = { + aspectRatio:2.5, + responsive: true, + }; + ngOnInit(): void { + // this.pieChartData = this.CharData.pieChartData; + // this.pieChartLabels = this.CharData.pieChartLabels; + + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + + const ChartObject = dash.dashboard.filter(obj => obj.name === "Scatter Chart"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.getscatterchart(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.setscatterchart(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + this.showlabel = ChartObject[i].showlabel; + this.ChartLegend = ChartObject[i].chartlegend; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"Scatter Chart",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.JsonData = Ldata; + this.scatterChartData = this.JsonData.scatterChartData; + this.scatterChartLabels = this.JsonData.scatterChartLabels; + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + } + + generatePDFFile(){ + this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'scatterchart.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.html new file mode 100644 index 0000000..139a1d5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.html @@ -0,0 +1,30 @@ +
+
+ + + + + + + + + + + + + + + + +
#{{todoList.listName}}
{{i + 1}}{{todo}} + + + +
+ + + + + +
+
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.spec.ts new file mode 100644 index 0000000..3ac8ed3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TodoRunnerComponent } from './todo-runner.component'; + +describe('TodoRunnerComponent', () => { + let component: TodoRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TodoRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TodoRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.ts new file mode 100644 index 0000000..cb264cb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component.ts @@ -0,0 +1,103 @@ +import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; +import { DashrunnerService } from '../dashrunner.service'; +import { DashboardContentModel } from 'src/app/models/builder/dashboard'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; + +@Component({ + selector: 'app-todo-runner', + templateUrl: './todo-runner.component.html', + styleUrls: ['./todo-runner.component.scss'] +}) +export class TodoRunnerComponent implements OnInit { + @ViewChild('contentContainer') contentContainerRef!: ElementRef; + @Output() buttonClicked = new EventEmitter(); + constructor( private Dashtestservive:DashrunnerService,private route: ActivatedRoute,private dashboardService: Dashboard3Service, + private router : Router) { } + + loading = false; + givendata; + error; + XAxis; + YAxis; + + editId; + public DashtestboardArray: DashboardContentModel[] = []; + workflowLine; + TableName; + + list; + data: any; + todo: string = ''; + // todoList = ['todo 1']; + todoList = { + listName: "title123", + List:['todo 1','todo 2'], + } + ngOnInit(): void { + this.editId = this.route.snapshot.params.id; + console.log(this.editId); + // this.getbyId(); + + this.dashboardService.getById(this.editId).subscribe((data)=>{ + console.log(data); + this.workflowLine = data.dashbord1_Line[0].model; + const dash = JSON.parse(this.workflowLine) ; + // this.DashtestboardArray = dash.dashboard; + // console.log(this.DashtestboardArray); + + const ChartObject = dash.dashboard.filter(obj => obj.name === "To Do Chart"); + console.log(ChartObject); + for (let i = 0; i < ChartObject.length; i++) { + const ids = this.Dashtestservive.gettodo(); + // console.log(ids); + if (ids.includes(ChartObject[i].chartid)) { + // If the chartid is already in the ids array, continue to the next iteration + continue; + } + this.Dashtestservive.settodo(ChartObject[i].chartid); + const id = ids[i]; + console.log(id); + + if (ChartObject[i].chartid === id) { + this.TableName = ChartObject[i].table; + this.XAxis = ChartObject[i].xAxis; + this.YAxis = ChartObject[i].yAxis; + console.log(this.TableName); + this.Dashtestservive.getChartData(this.TableName,"Todo List",this.XAxis,this.YAxis).subscribe((Ldata) => { + console.log(Ldata); + this.todoList.listName = Ldata.listName; + this.todoList.List = Ldata.List; + + },(error) => { + console.log(error); + }); + break; // No need to continue the loop once the correct placeholder is found + } + } + }); + } + + + + + + public addTodo(todo: string) { + this.todoList.List.push(todo); + this.todo = ''; // Clear the input field after adding a todo +} + +public removeTodo(todoIx: number) { + if (this.todoList.List.length) { + this.todoList.List.splice(todoIx, 1); + } +} + +generatePDFFile(){ + this.buttonClicked.emit(); + const content = this.contentContainerRef.nativeElement; + const filename = 'Todolist.pdf'; // You can provide any desired filename here + + this.Dashtestservive.generatePDF(content, filename); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.css new file mode 100644 index 0000000..a3722b6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=report-build.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.css.map new file mode 100644 index 0000000..c4b7c9a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"report-build.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.spec.ts new file mode 100644 index 0000000..da80cc9 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportBuildComponent } from './report-build.component'; + +describe('ReportBuildComponent', () => { + let component: ReportBuildComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportBuildComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportBuildComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.ts new file mode 100644 index 0000000..0583dca --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/report-build.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-report-build', + templateUrl: './report-build.component.html', + styleUrls: ['./report-build.component.scss'] +}) +export class ReportBuildComponent implements OnInit { + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.css new file mode 100644 index 0000000..5a8298a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.css @@ -0,0 +1,75 @@ +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; +} +.s-info-bar button { + outline: none; +} + +.entry-pg { + width: 750px; +} + +.button1::after { + content: none; +} + +.button1:hover::after { + content: "ADD ROWS"; +} + +.section { + background-color: #dddddd; + height: 40px; +} + +.section p { + font-weight: bold; + padding: 10px; + font-size: 18px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.center { + text-align: center; +} + +input[type=text], [type=date], textarea { + width: 100%; + padding: 15px 15px; + background-color: rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.required-field { + color: red; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +}/*# sourceMappingURL=reportbuildadd.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.css.map new file mode 100644 index 0000000..002810c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["reportbuildadd.component.scss","reportbuildadd.component.css"],"names":[],"mappings":"AACA;EACI,aAAA;EACA,mBAAA;EACA,8BAAA;ACAJ;ADCI;EACE,aAAA;ACCN;;ADGE;EACE,YAAA;ACAJ;;ADGE;EACE,aAAA;ACAJ;;ADEE;EACE,mBAAA;ACCJ;;ADIE;EACE,yBAHS;EAIT,YAAA;ACDJ;;ADIE;EAEE,iBAAA;EACA,aAAA;EACA,eAAA;ACFJ;;ADKE;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,wBAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;ACFJ;;ADKE;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EAEA,eAAA;EACA,WAAA;EACA,mBAAA;ACHJ;;ADME;EACE,kBAAA;ACHJ;;ADKE;EACE,WAAA;EACA,kBAAA;EAED,oCAAA;EACC,qBAAA;EACA,sBAAA;EACA,kBAAA;EACA,sBAAA;ACHJ;;ADME;EACE,UAAA;ACHJ;;ADME;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACHJ","file":"reportbuildadd.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.html new file mode 100644 index 0000000..113c716 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.html @@ -0,0 +1,48 @@ +

Create New Report

+Add Mode
+
+ + + + + + + + +
+ + + + + +
+ +
+
+ + + +
+
+ + +
+
+ + +
+
+ + + +
+
+
+ + +
+
+ +
+
+
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.scss new file mode 100644 index 0000000..39de1cb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.scss @@ -0,0 +1,80 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .entry-pg { + width: 750px; + } + + .button1::after { + content: none; + } + .button1:hover::after { + content: "ADD ROWS"; + } + + $bg-color: #dddddd; + + .section { + background-color: $bg-color; + height: 40px; + } + + .section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + input[type=text],[type=date],textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .required-field{ + color: red; + + } + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.spec.ts new file mode 100644 index 0000000..e94fb3b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportbuildaddComponent } from './reportbuildadd.component'; + +describe('ReportbuildaddComponent', () => { + let component: ReportbuildaddComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportbuildaddComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportbuildaddComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.ts new file mode 100644 index 0000000..39929f2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildadd/reportbuildadd.component.ts @@ -0,0 +1,60 @@ +import { HttpErrorResponse, HttpHeaderResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; + +@Component({ + selector: 'app-reportbuildadd', + templateUrl: './reportbuildadd.component.html', + styleUrls: ['./reportbuildadd.component.scss'] +}) +export class ReportbuildaddComponent implements OnInit { + + public entryForm: FormGroup; + constructor(private _fb: FormBuilder, private router: Router,private toastr: ToastrService, + private route: ActivatedRoute,private reportBuilderService: ReportBuilderService) { } + + ngOnInit(): void { + this.entryForm = this._fb.group({ + reportName: [null], + description:[null], + active:[null], + isSql:[true], + Rpt_builder2_lines: this._fb.array([this.initLinesFormReport()]), + }); + + } + + initLinesFormReport() { + return this._fb.group({ + model: '' + }); + } + + toastrShown: boolean = false; + onSubmit(){ + console.log(this.entryForm.value); + this.reportBuilderService.saverbData(this.entryForm.value).subscribe((data)=>{ + console.log(data); + if (data || data.status >= 200 && data.status <= 209) { + this.toastr.success('Report save successfully'); + } + },(error:HttpErrorResponse) => { + console.log(error); + if(error.status==404){ + this.toastr.error(error.error); + } + if(error.status==200){ this.toastr.success('Report save successfully'); } + if(error.status==400){ this.toastr.error('Report Save Unsuccessful'); } + }); + setTimeout(()=>{ + this.router.navigate(["../all"], { relativeTo: this.route }); + },500); + } + goback(){ + this.router.navigate(["../all"], { relativeTo: this.route }); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.css new file mode 100644 index 0000000..720f9da --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.css @@ -0,0 +1,90 @@ +.td-title { + text-align: right; + width: 150px; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + color: white; +} + +.td-content { + text-align: left; +} + +.delete, .heading { + text-align: center; + color: red; +} + +input[type=radio] { + width: 14px !important; + height: 14px !important; + margin: 5px; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + appearance: none; + outline: 1px solid gray; + box-shadow: none; + font-size: 0.8em; + text-align: center; + line-height: 1em; + background: red; +} + +.dots { + width: 100px; + height: 100px; + bordeR: 1px solid; + border-radius: 50%; +} + +h4 { + margin-top: 16px; +} + +.s-order-dash-pg { + margin: 0px; + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: center; +} +.s-order-dash-pg .chart-box { + margin: 16px; + padding: 0 16px; + background-color: #fff; + border: 1px solid #ccc; + border-radius: 2px; +} + +#word1 { + width: 190px; + height: 180px; +} + +.center { + text-align: center; + margin-top: 5px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.heading { + text-align: center; + color: red; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +}/*# sourceMappingURL=reportbuildall.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.css.map new file mode 100644 index 0000000..3cc1526 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["reportbuildall.component.scss","reportbuildall.component.css"],"names":[],"mappings":"AAAA;EACI,iBAAA;EACA,YAAA;EACA,iBAAA;EACA,2CAAA;EACA,YAAA;ACCJ;;ADCE;EACE,gBAAA;ACEJ;;ADAE;EACE,kBAAA;EACA,UAAA;ACGJ;;ADDE;EACE,sBAAA;EACA,uBAAA;EACA,WAAA;EACA,wBAAA;EACA,qBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,gBAAA;EACA,eAAA;ACIJ;;ADFE;EAEE,YAAA;EACA,aAAA;EACA,iBAAA;EACA,kBAAA;ACIJ;;ADDI;EAAG,gBAAA;ACKP;;ADJI;EACE,WAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,uBAAA;ACON;ADNM;EACE,YAAA;EACA,eAAA;EACA,sBAAA;EACA,sBAAA;EACA,kBAAA;ACQR;;ADLI;EACC,YAAA;EACC,aAAA;ACQN;;ADLI;EACE,kBAAA;EACA,eAAA;ACQN;;ADLI;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,wBAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;ACQN;;ADNM;EACE,kBAAA;EACA,UAAA;ACSR;;ADNM;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACSR","file":"reportbuildall.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.html new file mode 100644 index 0000000..67a5003 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.html @@ -0,0 +1,112 @@ + +
+ + +
+
+
+

Report

+
+
+ + +
+
+ + + + + + + + + Loading ... +
{{error}}
+ + + + Go To + + + Report Name + + + Report Description + + + Active + + + Folder Name + + + Action + + + + SET UP + {{user.reportName}} + {{user.description}} + {{user.active}} + {{user.folderName}} + + + + Delete + + + + +
Who Column
+
Account ID: {{user.accountId}}
+
Created At: {{user.createdAt| date}}
+
Created By: {{user.createdBy}}
+
Updated At: {{user.updatedAt | date}}
+
Updated By: {{user.updatedBy}}
+
+
+ + +
+ + + + + +
+ + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+
+ + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.scss new file mode 100644 index 0000000..aec3e9d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.scss @@ -0,0 +1,83 @@ +.td-title { + text-align: right; + width: 150px; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + color: white; + } + .td-content{ + text-align: left; + } + .delete,.heading{ + text-align: center; + color: red; + } + input[type='radio']{ + width: 14px !important; + height: 14px !important; + margin: 5px; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + appearance: none; + outline: 1px solid gray; + box-shadow: none; + font-size: 0.8em; + text-align: center; + line-height: 1em; + background: red; + } + .dots + { + width: 100px; + height:100px; + border: 1px solid; + border-radius: 50%; + //background-color: #f00; + } + h4{margin-top: 16px;} + .s-order-dash-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + } + } + #word1{ + width: 190px; + height: 180px; + + } + .center{ + text-align: center; + margin-top: 5px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + .heading{ + text-align: center; + color: red; + } + + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.spec.ts new file mode 100644 index 0000000..fce8821 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportbuildallComponent } from './reportbuildall.component'; + +describe('ReportbuildallComponent', () => { + let component: ReportbuildallComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportbuildallComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportbuildallComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.ts new file mode 100644 index 0000000..25c291b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildall/reportbuildall.component.ts @@ -0,0 +1,92 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; +import { ToastrService } from 'ngx-toastr'; + +@Component({ + selector: 'app-reportbuildall', + templateUrl: './reportbuildall.component.html', + styleUrls: ['./reportbuildall.component.scss'] +}) +export class ReportbuildallComponent implements OnInit { + gridData; + loading = false; + error; + selected: any[] = []; + rowSelected :any= {}; + modaldelete=false; + isLoading: boolean = false; + projectId; + moduleId; + projectname; + constructor(private router: Router, + private route: ActivatedRoute,private reportBuilderService: ReportBuilderService, + private toastr:ToastrService, ) { } + + ngOnInit(): void { + + this.getAll(); + } + + + getAll() { + this.isLoading = true; + this.reportBuilderService.getrbDetails().subscribe((data) => { + this.isLoading = false; + console.log(data); + + const filteredData = data.filter(item => item.isSql === true); + this.gridData = filteredData; + if(this.gridData.length == 0){ + this.error="No data Available"; + console.log(this.error); + } + }); + } + + gotorunner() + { + this.router.navigate(['../../rerunner'],{relativeTo:this.route}); + } + + + goToAdd() { + this.router.navigate(["../add"], { relativeTo: this.route, }); + } + + goToEdit(id: number) { + this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + enid; + modelData:any[]=[]; + goToLines(val) { + console.log(val); +this.enid=val.id; +// this.modelData = val.Rpt_builder2_lines[0].model; + + if(val.Rpt_builder2_lines[0].model !== '' ){ + this.router.navigate(["../edit/" + this.enid], { relativeTo: this.route }); + } + else{ + this.router.navigate(["../reportQuery/" + this.enid], { relativeTo: this.route, }); + } + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + delete(id){ + this.modaldelete = false; + this.reportBuilderService.deletrbById(id).subscribe((data) => { + console.log(data); + if(data || data == null || data.status >= 200 && data.status <= 209){ + this.toastr.success("Deleted successfully"); + } + this.ngOnInit(); + },(error) => { + console.log(error); + this.toastr.error("getting error in deleting data"); + }) + } + +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.css new file mode 100644 index 0000000..e938509 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.css @@ -0,0 +1,56 @@ +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; +} +.s-info-bar button { + outline: none; +} + +.edit-pg { + width: 750px; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + +#lines table, +#lines th, +#lines td { + border: 0.5px solid #f1f0f0; + border-collapse: collapse; +} +#lines input, +#lines input :focus { + outline: none; + border-width: 0px; + border: none; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.center { + text-align: center; +} + +textarea { + width: 100%; + padding: 15px 15px; + background-color: rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +}/*# sourceMappingURL=reportbuildedit.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.css.map new file mode 100644 index 0000000..576b0f3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["reportbuildedit.component.scss","reportbuildedit.component.css"],"names":[],"mappings":"AACA;EACI,aAAA;EACA,mBAAA;EACA,8BAAA;ACAJ;ADCI;EACE,aAAA;ACCN;;ADGE;EACE,YAAA;ACAJ;;ADEE;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACCJ;;ADEI;;;EAGE,2BAAA;EACA,yBAAA;ACCN;ADCI;;EAGE,aAAA;EACA,iBAAA;EACA,YAAA;ACAN;;ADIE;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,wBAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;ACDJ;;ADIE;EACE,kBAAA;ACDJ;;ADGE;EACE,WAAA;EACA,kBAAA;EAEA,oCAAA;EACA,qBAAA;EACA,sBAAA;EACA,kBAAA;EACA,sBAAA;ACDJ","file":"reportbuildedit.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.html new file mode 100644 index 0000000..f05be3b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.html @@ -0,0 +1,66 @@ +
+

REPORT SET UP - Project Details Report ({{ReportData.id}})

+ Edit Mode +
+
+
+
+
+
+
+
+ + +

+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+
+
+
+
+ + +
+ +
+ + +
+
+
+
+ + +
+
+
+ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.scss new file mode 100644 index 0000000..9893e7c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.scss @@ -0,0 +1,58 @@ +// @import "../../../../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .edit-pg { + width: 750px; + } + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + #lines { + table, + th, + td { + border: 0.5px solid #f1f0f0; + border-collapse: collapse; + } + input, + input :focus { + //-webkit-appearance: none; + outline: none; + border-width: 0px; + border: none; + } + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.spec.ts new file mode 100644 index 0000000..011630a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportbuildeditComponent } from './reportbuildedit.component'; + +describe('ReportbuildeditComponent', () => { + let component: ReportbuildeditComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportbuildeditComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportbuildeditComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.ts new file mode 100644 index 0000000..8bd117c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildedit/reportbuildedit.component.ts @@ -0,0 +1,144 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; + + + +@Component({ + selector: 'app-reportbuildedit', + templateUrl: './reportbuildedit.component.html', + styleUrls: ['./reportbuildedit.component.scss'] +}) +export class ReportbuildeditComponent implements OnInit { + public entryForm: FormGroup; + updated = false; + ReportData:any = {}; + id: number; + nodeEditProperties = { + std_param_html:'', + adhoc_param_html:'', + column_str:'', + conn_name:'', + date_param_req:'', + // folderName:'', + sql_str:'', + +}; + constructor(private router: Router, + private route: ActivatedRoute,private reportBuilderService: ReportBuilderService, + private toastr: ToastrService, private _fb: FormBuilder) { } + + ngOnInit(): void { + this.id = this.route.snapshot.params["id"]; + console.log("update with id = ", this.id); + + this.entryForm = this._fb.group({ + std_param_html : [null], + adhoc_param_html:[null], + column_str:[null], + conn_name:[null], + date_param_req:[null], + // folderName:[null], + sql_str:[null], + }); + + this.getById(this.id); + this.listoddatabase(); + } + databaselist; + listoddatabase(){ + this.reportBuilderService.getdatabse().subscribe((data)=>{ + this.databaselist=data; + console.log(this.databaselist) + },(error) => { + console.log(error); + if(error){ + } + }); + + } + builderLine; + lineId; + builderLineData; + getById(id: number) { + this.reportBuilderService.getrbDetailsById(id).subscribe( + (data) => { + console.log(data); + this.ReportData = data; + + + this.builderLine = this.ReportData.rpt_builder2_lines; + this.lineId = this.builderLine[0].id + console.log("line data ",this.lineId, this.builderLine); + if(this.builderLine[0].model != '') + { + this.builderLineData = JSON.parse(this.builderLine[0].model) ; + console.log(this.builderLineData); + + this.nodeEditProperties.std_param_html = this.builderLineData.std_param_html; + this.nodeEditProperties.adhoc_param_html = this.builderLineData.adhoc_param_html; + this.nodeEditProperties.column_str = this.builderLineData.column_str; + this.nodeEditProperties.conn_name = this.builderLineData.conn_name; + this.nodeEditProperties.date_param_req = this.builderLineData.date_param_req; + this.nodeEditProperties.sql_str = this.builderLineData.sql_str; + } + }, + (err) => { + console.log(err); + } + ); + } + + listBuilder_Lines = { + model:{} + } + update() { + + this.builderLineData.std_param_html = this.nodeEditProperties.std_param_html; + this.builderLineData.adhoc_param_html = this.nodeEditProperties.adhoc_param_html; + this.builderLineData.column_str = this.nodeEditProperties.column_str; + this.builderLineData.conn_name = this.nodeEditProperties.conn_name ; + this.builderLineData.date_param_req = this.nodeEditProperties.date_param_req; + this.builderLineData.sql_str = this.nodeEditProperties.sql_str; + console.log(this.builderLineData); + // this.builderLineData.splice(1); + console.log(this.builderLineData); + let tmp = JSON.stringify(this.builderLineData); //.replace(/\\/g, '') + this.listBuilder_Lines.model = tmp; +console.log(this.listBuilder_Lines); + + this.reportBuilderService.updaterbLineData(this.listBuilder_Lines, this.lineId).subscribe( + (data) => { + console.log(data); + if (data) { + this.toastr.success('Update successfully'); + } + this.router.navigate(["../../all"], { relativeTo: this.route }); + //this.router.navigate(["../../all"],{ relativeTo: this.route, queryParams: { p_id: this.projectId } }); + }, + (error) => { + // console.log(error); + // const objectArray = Object.entries(error.error.fieldErrors); + // objectArray.forEach(([k, v]) => { + // console.log(k); + // console.log(v); + // this.fieldErors.push({ field: k, message: v }); + // }); + console.log(error); // this will come from backend + } + ); + // this.lineBuilder_Header = new Rn_Cff_ActionBuilder_Header(); + } + + onSubmit() { + this.updated = true; + this.update(); + } + + back() { + this.router.navigate(["../../all"], { relativeTo: this.route }); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.css new file mode 100644 index 0000000..f328a84 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.css @@ -0,0 +1,146 @@ +@import '@swimlane/ngx-datatable/index.css'; +@import '@swimlane/ngx-datatable/themes/bootstrap.css'; +@import '@swimlane/ngx-datatable/assets/icons.css'; +.button1::after { + content: none; +} + +.button1:hover::after { + content: "ADD ROWS"; +} + +.delete, .heading { + text-align: center; + color: red; +} + +.bold { + font-weight: bold; +} + +.section p { + padding: 10px; + font-size: 18px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.required-field { + color: red; + font-size: 18px; +} + +input[type=text], textarea { + width: 100%; + padding: 15px 15px; + background-color: rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +html { + /* make sure we use up the whole viewport */ + width: 100%; + min-height: 100vh; +} + +body { + width: 100%; + background-color: gray; +} + +ngx-datatable { + font-family: Metropolis, Avenir Next, Helvetica Neue, Arial, sans-serif; + font-size: 13px; + border: 1px solid #ccc; + border-radius: 2px; + padding: 0; + background-color: #fff; +} +ngx-datatable .datatable-header, ngx-datatable .datatable-footer { + font-size: 11px; + line-height: 18px; + font-weight: bold; + background-color: #fafafa; +} +ngx-datatable .datatable-header { + box-shadow: 0 2px 4px 0px #ccc; +} +ngx-datatable .datatable-header .datatable-header-cell { + line-height: 22px; + padding-left: 10px; + height: 22px; +} +ngx-datatable .datatable-header .datatable-header-cell:not(:first-child) { + border-left: 1px solid #ccc; +} +ngx-datatable .datatable-footer { + border-top: 1px solid #ccc; +} +ngx-datatable .datatable-footer .page-count { + margin: 10px; +} +ngx-datatable .datatable-footer .pages a { + padding: 8px; + color: inherit; +} +ngx-datatable .datatable-footer .pages.active a { + padding: 8px; + color: #007cbb; + background-color: rgb(221, 221, 221); + text-align: center; +} +ngx-datatable .datatable-header-inner { + padding: 12px; +} +ngx-datatable .datatable-body-cell { + padding: 8px 0 10px 20px; + border-top: 1px solid #ddd; +} +ngx-datatable .pager i { + font-size: 18px; + vertical-align: middle; +} + +.postColumn { + border: 1px solid #ccc; + width: 78%; + margin-left: 15px; +} + +.colName { + text-align: center; + padding: 5px; +} + +.colfields { + border: 1px solid black; + margin: 17px; + text-align: center; + padding: 3px; +} + +.fieldWrapper { + margin-top: 20px; +} + +.center { + text-align: center; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +}/*# sourceMappingURL=reportbuildquery.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.css.map new file mode 100644 index 0000000..ec63f0f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["reportbuildquery.component.scss","reportbuildquery.component.css"],"names":[],"mappings":"AA8JQ,2CAAA;AACA,sDAAA;AACC,kDAAA;AA9JT;EACE,aAAA;ACEF;;ADAA;EACE,mBAAA;ACGF;;ADAA;EACE,kBAAA;EACA,UAAA;ACGF;;ADAA;EACE,iBAAA;ACGF;;ADCA;EAEE,aAAA;EACA,eAAA;ACCF;;ADEA;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,wBAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;ACCF;;ADWA;EACE,UAAA;EACF,eAAA;ACRA;;ADYA;EACE,WAAA;EACA,kBAAA;EAED,oCAAA;EACC,qBAAA;EACA,sBAAA;EACA,kBAAA;EACA,sBAAA;ACVF;;ADcA;EACI,2CAAA;EACA,WAAA;EACA,iBAAA;ACXJ;;ADaA;EACI,WAAA;EACA,sBAAA;ACVJ;;ADeA;EACE,uEAAA;EACA,eAAA;EACA,sBAAA;EACA,kBAAA;EACA,UAAA;EACA,sBAAA;ACZF;ADaE;EACE,eAAA;EACA,iBAAA;EACA,iBAAA;EACA,yBAAA;ACXJ;ADaE;EAEE,8BAAA;ACZJ;ADaI;EACE,iBAAA;EACA,kBAAA;EACA,YAAA;ACXN;ADcE;EACI,2BAAA;ACZN;ADeE;EACE,0BAAA;ACbJ;ADcI;EACE,YAAA;ACZN;ADcI;EACE,YAAA;EACA,cAAA;ACZN;ADcI;EACE,YAAA;EACA,cAAA;EACA,oCAAA;EACA,kBAAA;ACZN;ADgBE;EACE,aAAA;ACdJ;ADgBE;EACE,wBAAA;EACA,0BAAA;ACdJ;ADgBE;EACE,eAAA;EACA,sBAAA;ACdJ;;ADkBA;EACE,sBAAA;EACA,UAAA;EACA,iBAAA;ACfF;;ADiBA;EACE,kBAAA;EACA,YAAA;ACdF;;ADgBA;EACE,uBAAA;EACA,YAAA;EACA,kBAAA;EACA,YAAA;ACbF;;ADeA;EACE,gBAAA;ACZF;;ADcA;EACE,kBAAA;ACXF;;ADcA;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACXF","file":"reportbuildquery.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.html new file mode 100644 index 0000000..723cd1c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.html @@ -0,0 +1,670 @@ + + +
+ + +
+
+

SQL Worksheet- + connection name + {{databaseName}} + switch + Add New +

+ +
+ +
+ + +
+
+ + + + + + +
+
+ +
+
+ + + + + + + + + {{selected}} {{ getAliasedColumn(selected) }} + + + + {{state}} + + + + +
+

+ +
+
+
+ + + + + + + + + {{ selected.substr(0, selected.indexOf('.')) }}{{ selected.substr(selected.indexOf('.')) }} + + + {{selected}} + + + + + {{state}} + + + + +
+

+

{{msg}}

+
+
+
+ + + + + + {{data.andor}}  + + {{ selected.substr(0, selected.indexOf('.')) }}{{ selected.substr(selected.indexOf('.')) }} + + + {{selected}} + + + {{data.condition}} {{data.value}} + + + + + {{state}} + + + + +
+

+

{{msg}}

+
+ +
+
+ + + + + + + + + {{ selected.substr(0, selected.indexOf('.')) }}{{ selected.substr(selected.indexOf('.')) }} + + + {{selected}} + + + + + {{state}} + + + + +
+

+

{{msg}}

+
+ +
+
+ + +
+
+ + +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+ + + +
+
+
+ + + +
+
+

Response

+
+
+
+
+
+

+
+
+
+
+ + + + + + + + + + + + + +
{{co}}
{{item[key]}}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.scss new file mode 100644 index 0000000..3ee5c25 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.scss @@ -0,0 +1,161 @@ +$bg-color: #dddddd; + +.button1::after { + content: none; +} +.button1:hover::after { + content: "ADD ROWS"; +} + +.delete,.heading{ + text-align: center; + color: red; +} + +.bold{ + font-weight: bold; +} + + +.section p { + //color: white; + padding: 10px; + font-size: 18px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} +// input[type=text],[type=date],textarea { +// width: 60%; +// padding: 15px 15px; +// // margin: 8px 0; +// background-color:rgb(255, 255, 255); +// display: inline-block; +// border: 1px solid #ccc; +// border-radius: 4px; +// box-sizing: border-box; +// } +.required-field{ + color: red; +font-size: 18px; + +} + +input[type=text],textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + + +html { + /* make sure we use up the whole viewport */ + width: 100%; + min-height: 100vh; +} +body { + width: 100%; + background-color: gray; + //min-height: 100vh; /* this helps with the sticky footer */ +} + +//Import classes from swimlane datatable +ngx-datatable { + font-family: Metropolis,Avenir Next,Helvetica Neue,Arial,sans-serif; + font-size:13px; + border:1px solid #ccc; + border-radius: 2px; + padding:0; + background-color: #fff; + .datatable-header, .datatable-footer { + font-size:11px; + line-height:18px; + font-weight:bold; + background-color:#fafafa; + } + .datatable-header{ + //border-bottom: 2px solid #ccc; + box-shadow: 0 2px 4px 0px #ccc; + .datatable-header-cell{ + line-height:22px; + padding-left:10px; + height:22px; + } + } + .datatable-header .datatable-header-cell:not(:first-child) { + border-left:1px solid #ccc; + } + + .datatable-footer{ + border-top: 1px solid #ccc; + .page-count{ + margin: 10px; + } + .pages a{ + padding:8px; + color:inherit; + } + .pages.active a{ + padding:8px; + color:#007cbb; + background-color:rgb(221, 221, 221); + text-align: center; + } + } + + .datatable-header-inner{ + padding:12px; + } + .datatable-body-cell{ + padding:8px 0 10px 20px; + border-top: 1px solid #ddd; + } + .pager i { + font-size:18px; + vertical-align: middle; + } +} + +.postColumn{ + border: 1px solid #ccc; + width: 78%; + margin-left: 15px; +} +.colName{ + text-align: center; + padding: 5px; +} +.colfields{ + border: 1px solid black; + margin: 17px; + text-align: center; + padding: 3px; +} +.fieldWrapper{ + margin-top: 20px; +} +.center { + text-align: center; +} + +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} +// @import '@swimlane/ngx-datatable/index.css'; +// @import '@swimlane/ngx-datatable/themes/bootstrap.css'; +// @import '@swimlane/ngx-datatable/assets/icons.css'; diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.spec.ts new file mode 100644 index 0000000..96b95f4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportbuildqueryComponent } from './reportbuildquery.component'; + +describe('ReportbuildqueryComponent', () => { + let component: ReportbuildqueryComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportbuildqueryComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportbuildqueryComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.ts new file mode 100644 index 0000000..48aaa7c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build/reportbuildquery/reportbuildquery.component.ts @@ -0,0 +1,656 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; +import { TableList } from '../../../../../models/fnd/table-setup'; +import { HttpClient, HttpErrorResponse } from '@angular/common/http'; +import { ToastrService } from 'ngx-toastr'; +import { ActivatedRoute, Router } from '@angular/router'; + +@Component({ + selector: 'app-reportbuildquery', + templateUrl: './reportbuildquery.component.html', + styleUrls: ['./reportbuildquery.component.scss'] +}) +export class ReportbuildqueryComponent implements OnInit { + searchtable:any; + searchcol:any; + columns: any[]; + table:boolean=false; + database:boolean=false; + query:boolean=false; + public entryForm: FormGroup; + public addForm: FormGroup; + public saveReportForm: FormGroup; + addmodal:boolean =false; + query2:string; + rows:any[]; + loading = false; + tableList: TableList[]; + databaselist; + collist; + search:any; + selectedtable:any[]; + selectedcol:any[]; + selectedcol1:any[]; + selectedParamter:any[]; + selectedtablequery; + selectcolquery; + selectedquery; + backQuery = true; + searchquery; + col:boolean=false; + col1:boolean=false; + searchdatabase; + selecteddatabase; + msg; + id; + querydata; + errorco; + errortb; + errorcl; + loadingIndicator = true; reorderable = true; + columnModal = false; + reportModal = false; + filterModel = false; + conditionData = []; + stdParamters = []; + columnData = []; + andor = ['AND', 'OR','NOT']; + fieldname = ['name1', 'name2']; + condition = ['=','!=','<','>','<=','>=','LIKE','BETWEEN','IN']; + alias = ['a','b','c','d','e','f']; + tabs = ['Tab', 'Tab',]; + selected = new FormControl(0); + constructor( private _fb: FormBuilder,private router: Router, + private route: ActivatedRoute, + private reportBuilderService: ReportBuilderService,private toastr:ToastrService,) { } + + ngOnInit(): void { + this.id = this.route.snapshot.params["id"]; + console.log("update with id = ", this.id); + this.entryForm = this._fb.group({ + sql_query: [null], + }); + this.addForm =this._fb.group({ + conn_string:[null], + username:[null], + password:[null], + driver_class_name:[null], + }) + + this.saveReportForm = this._fb.group({ + conn_name:[null], + // reportName: [null], + folderName:[null], + // description:[null], + // active:[null], + sql_str:[null], + date_param_req:[null], + column_str:[null], + adhoc_param_html:[null], + std_param_html:[null], + }); + // this.listofTables(); + this.getById(this.id); + + } + ReportBuilder_Header; + ReportBuilder_Line; + lineId; + getById(id: number) { + this.reportBuilderService.getrbDetailsById(id).subscribe( + (data) => { + console.log(data); + this.ReportBuilder_Header = data; + console.log(data.Rpt_builder2_lines[0].model); + this.ReportBuilder_Line = data.Rpt_builder2_lines + this.lineId = data.Rpt_builder2_lines[0].id; + }, + (err) => { + console.log(err); + } + ); + } + + +listoddatabase(){ + this.reportBuilderService.getdatabse().subscribe((data)=>{ + this.databaselist=data; + console.log(this.databaselist) + },(error) => { + console.log(error); + if(error){ + this.errorco="No data Available"; + } + }); + +} + listofTables(val) { + this.reportBuilderService.getTableListn(val).subscribe(data => { + // console.log("table list "+data); + this.tableList = data; + console.log(this.tableList); + },(error) => { + console.log(error); + if(error){ + this.errortb="No data Available"; + } + }) + } + msg1; + finalColList: any[] = []; + listofcol(val){ + console.log(this.selectedtable); + console.log(this.selectedcol); + console.log(this.selectedcol1); + const tableString = JSON.stringify(val); + console.log(tableString); + const array = Array.of(val); // Using the Array constructor +console.log(array); + console.log(val); + // this.reportBuilderService.getcolListn(this.name[1],val).subscribe((data)=>{ + // this.reportBuilderService.getColumnList(this.name[1],array).subscribe((data)=>{ + this.reportBuilderService.getAllColumnsFromAllTables(array).subscribe((data)=>{ + console.log(data); + this.collist=data; + // this.finalColList.push(data); + // this.finalColList.push(this.collist) + if(this.selectedtable==null){ + this.msg='Plz First Select Table' + }else{ + this.msg=""; + } + + //console.log(this.collist); + },(error) => { + console.log(error); + if(error){ + this.errorcl="No data Available"; + } + }) + } + listofquery(){ + this.reportBuilderService.getall().subscribe((data)=>{ + this.querydata=data; + console.log(this.querydata) + }) + } + rowdata; + onSubmit(){ + // this.backQuery = false; + + this.query2=this.entryForm.value.sql_query; + console.log(this.query2); + this.reportBuilderService.getMasterData(this.query2).subscribe((data) => { + this.rows = data; + console.log(this.rows); +this.rowdata= [this.rows]; + console.log(typeof this.rows); + if(data){ + this.toastr.success("Run Successfully") + } + var j; + var cart = []; + + for(var i = 0; i < data.length; i++) + { + var columnsIn = data[i]; + if(i==1) + { + for(var key in columnsIn) + { + j={prop:key , name: key}; + cart.push(j) + + } + } + } + this.columns = cart; + + }); +} +getHeaders() { + let headers: string[] = []; + if(this.rows) { + this.rows.forEach((value) => { + Object.keys(value).forEach((key) => { + if(!headers.find((header) => header == key)){ + headers.push(key) + } + + }) + + }) + } + return headers; +} +savequery(){ + //this.query2=this.entryForm.value.sql_query; + console.log(this.entryForm.value); + this.reportBuilderService.saveq(this.entryForm.value).subscribe((data)=>{ + console.log(data); + }) + +} + +//tab +addTab(selectAfterAdding: boolean) { + this.tabs.push('Tab'); + + if (selectAfterAdding) { + this.selected.setValue(this.tabs.length - 1); + } +} + +removeTab(index: number) { + this.tabs.splice(index, 1); +} +opendatabsemo(){ + this.database=true; + this.listoddatabase(); +} +name; +databaseName; +databasename(val){ + console.log(val); + this.databaseName = val.name; + this.selecteddatabase=val.conn_string; + console.log(this.selecteddatabase); + // this.selecteddatabase.substring(0,this.selecteddatabase.indexOf(':3306/')) + // console.log(this.selecteddatabase); + this.name=this.selecteddatabase.split(":3306/"); + console.log(this.name[1]); + this.database=false; + this.listofTables(this.name[1]) +} +opentablemod(){ +this.table=true; +// this.listofTables(); +} +tablename(value){ + console.log(value); + this.selectedtable=value; + this.table=false; +} +tableModal = false; +TableData; +opentcolmod(){ + // this.col=true; + + if(this.selectedtable==null){ + this.msg='Plz First Select Table' + }else{ + this.msg=""; + // this.tableModal = true; + } + this.listofcol(this.selectedtable) + + if (Array.isArray(this.selectedtable) || this.selectedtable === undefined) { + const selectedTables = this.selectedtable.map((table, index) => { + const alias = String.fromCharCode(97 + (index % 26)); // Generate aliases starting from 'a' + console.log(alias, table); + return `${table} ${alias}`; + }).join(','); + console.log(selectedTables); + // const selectedTables = this.TableData.map(({ alias, tables }) => `${tables} ${alias}`).join(','); + // console.log(selectedTables); + + this.selectedtablequery = `SELECT * FROM ${selectedTables} WHERE 1=1`; + console.log(this.selectedtablequery); + // You can perform further actions with the generated SQL query + } else { + this.selectedtablequery = ''; + console.log(this.selectedtablequery); + // You can perform further actions with the generated SQL query + } + + this.selectedquery = this.selectedtablequery; + + // const defaultObject = { + // alias: "", + // } + // const objectArray = this.selectedtable.map(value => ({ + // ...defaultObject, + // tables: value, + // })); + // console.log(objectArray); + // const data = JSON.stringify(objectArray); + // try { + // this.TableData = JSON.parse(data); + // console.log('Received data:', this.TableData ); + // } catch (e) { console.error('Invalid JSON:', data);} +} +opentcolmod1(){ + // this.col1=true; + this.listofcol(this.selectedtable) + + +} +colname(){ + + this.columnModal = true; + + //column filter + const defaultObject = { + alias: "", + } + const valuesOnly = this.selectedcol.map(item => item.split('.').pop()); +const objectArray = this.selectedcol.map((value, index) => ({ + // ...defaultObject, + alias: valuesOnly[index], + columns: value, +})); +console.log(objectArray); +const data = JSON.stringify(objectArray); + try { + this.columnData = JSON.parse(data); + console.log('Received data:', this.columnData ); + } catch (e) { console.error('Invalid JSON:', data);} + } +onAddColLines(){ + this.columnData.push({ + columns: "", + alias: "", + }); +} +deleteColRow(index) { + this.columnData.splice(index, 1); +} + // console.log(col); + // this.selectedcol=col; + + onColSelected(){ + // console.log(col); + // this.selectedcol=col; + this.col=false; + this.columnModal = false; + if (Array.isArray(this.columnData)) { + // const selectedColumns = this.columnData.join(','); + //for column + const selectedColumns = this.columnData.map(({ alias, columns }) => `${columns} as ${alias}`).join(','); + console.log(selectedColumns); + //for table + const selectedTables = this.selectedtable.map((table, index) => { + const alias = String.fromCharCode(97 + (index % 26)); // Generate aliases starting from 'a' + console.log(alias, table); + return `${table} ${alias}`; + }).join(','); + console.log(selectedTables); + + // const selectedTables = this.TableData.map(({ alias, tables }) => `${tables} ${alias}`).join(','); + // console.log(selectedTables); + + this.selectcolquery = `SELECT ${selectedColumns} FROM ${selectedTables} WHERE 1=1`; + console.log(this.selectcolquery); + // You can perform further actions with the generated SQL query + } else if (Array.isArray(this.selectedtable)) { + //for table + const selectedTables = this.selectedtable.map((table, index) => { + const alias = String.fromCharCode(97 + (index % 26)); // Generate aliases starting from 'a' + console.log(alias, table); + return `${table} ${alias}`; + }).join(','); + console.log(selectedTables); + this.selectcolquery = `SELECT * FROM ${selectedTables} WHERE 1=1`; + console.log(this.selectcolquery); + // You can perform further actions with the generated SQL query + }else{ + // if(this.selectedtable==null){ + // this.msg1='Plz First Select Table' + // }else{ + // this.msg1=""; + // } + } + this.selectedquery = this.selectcolquery; + } + +// onColSelected(){ +// this.col=false; +// this.columnModal = false; +// console.log(this.selectedcol); +// if (Array.isArray(this.selectedcol)) { +// const selectedColumns = this.selectedcol.join(','); +// this.selectcolquery = `SELECT ${selectedColumns} FROM ${this.selectedtable} WHERE 1=1`; +// console.log(this.selectcolquery); +// // You can perform further actions with the generated SQL query +// } else { +// this.selectcolquery = `SELECT * FROM ${this.selectedtable} WHERE 1=1`; +// console.log(this.selectcolquery); +// // You can perform further actions with the generated SQL query +// } +// this.selectedquery = this.selectcolquery; + +// //std pramameter +// const defaultObject = { +// label: "", +// dataType: "", +// list: "", +// } +// const objectArray = this.selectedcol.map(value => ({ +// ...defaultObject, +// column: value, +// })); +// console.log(objectArray); +// const data = JSON.stringify(objectArray); +// try { +// this.stdParamters = JSON.parse(data); +// console.log('Received data:', this.stdParamters ); +// } catch (e) { console.error('Invalid JSON:', data);} +// } +onAddstdLines(){ + this.stdParamters.push({ + column: "", + label: "", + dataType: "", + list: "" + }); +} +deletestdRow(index) { + this.stdParamters.splice(index, 1); +} +colname1(){ + // console.log(col); + // this.selectedcol1=col; + // this.col1=false; + // this.listofquery(); +} +openquerymod(){ + this.query=true; + this.listofquery(); +} +selectquery(val){ +console.log(val); +this.selectedquery=val; +this.query=false; +} +opencopym(){ + this.router.navigate(["../queryadd"], { relativeTo: this.route }); +} +onCreate(){ + console.log(this.addForm.value); +this.reportBuilderService.createdb(this.addForm.value).subscribe((data)=>{ + console.log(data); +}) +} + +// onSelectedChanged(selected){ +// this.selectedTableData = this.tableList.filter(item => item.selected); +// } +conditionVal; +filter(val){ + + this.filterModel = true; + this.conditionVal = val; + + const defaultObject = { + andor: "AND", + // alias: "", + condition: "=", + value: "", + } + const objectArray = this.conditionVal.map(value => ({ + ...defaultObject, + fields_name: value, + })); + console.log(objectArray); + const data = JSON.stringify(objectArray); + try { + this.conditionData = JSON.parse(data); + console.log('Received data:', this.conditionData ); + } catch (e) { console.error('Invalid JSON:', data);} +} + +onAddLines(){ + this.conditionData.push({ + andor: "AND", + fields_name: "", + condition: "=", + value: "" + }); +} +deleteRow(index) { + this.conditionData.splice(index, 1); +} +filteredConditionData; +filterAndor; +filtercondlvalue; +onSelected(){ + this.filterModel = false; + console.log(this.conditionData); + let formattedString = ''; + for (const condition of this.conditionData) { + const { andor, fields_name, condition: cond, value } = condition; + formattedString += `${andor} ${fields_name} ${cond} '${value}'`; + this.filterAndor = andor; + this.filtercondlvalue = cond +' '+value; + } + // this.getConditionBeforeColumn(this.selectedcol1) + // this.getConditionAfterColumn(this.selectedcol1); + console.log(formattedString); + this.filteredConditionData = formattedString + if(this.selectcolquery !== undefined){ + const mQuery = this.selectcolquery + ' ' + formattedString; + console.log(mQuery); + this.selectedquery = mQuery; + }else{ + const mQuery = this.selectedtablequery + ' ' + formattedString; + console.log(mQuery); + this.selectedquery = mQuery; + } +} + +// getConditionBeforeColumn(selected: any){ + +// return this.filterAndor; + + +// } +// getConditionAfterColumn(selected: any){ +// return this.filtercondlvalue + + +// } +onBack(){ + // this.backQuery = true; +} + +getAliasedColumn(selected: string){ + const index = this.selectedtable.findIndex(item => item === selected); + const alphabet = 'abcdefghijklmnopqrstuvwxyz'; + const aliasIndex = index % alphabet.length; // Calculate the index based on the remainder + const repeatedAlias = alphabet.charAt(aliasIndex); + return repeatedAlias; +} + +goToEdit(id) { + this.router.navigate(["../queryedit/" + id], { relativeTo: this.route }); +} + +rowSelected :any= {}; + modaldelete=false; +onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; +} + +delete(id){ + this.modaldelete = false; + console.log("in delete "+id); + this.reportBuilderService.deleteSqlModel(id).subscribe( + (data) => { + console.log(data); + this.listoddatabase(); + if (data) { + this.toastr.success('Deleted successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(isNaN(error)){ + this.toastr.success('Deleted successfully'); + }else{ + this.toastr.error('Not Deleted Data Getting Some Error'); + } + this.listoddatabase(); + } + ); +} + + +workflow_Lines = { + model:{} +} +foldername; +dataParameter; + +saveReport(){ + // this.reportModal = true; + this.rpt_builder(); +} + +rpt_builder(){ + + + + + +this.onSaveBuidler(); +} +onSaveBuidler(){ + this.reportModal = false; + this.saveReportForm.value.sql_str = this.selectedquery; + this.saveReportForm.value.date_param_req = this.dataParameter; + this.saveReportForm.value.folderName = this.foldername; + this.saveReportForm.value.conn_name = this.databaseName; + const col_str = JSON.stringify(this.selectedcol); + this.saveReportForm.value.column_str = col_str; + const colList = JSON.stringify(this.collist); + this.saveReportForm.value.adhoc_param_html = colList; + const table_str = JSON.stringify(this.selectedtable); + // this.saveReportForm.value.std_param_html = table_str; + this.saveReportForm.value.std_param_html = col_str; + + console.log(this.saveReportForm.value); + let tmp = JSON.stringify(this.saveReportForm.value); //.replace(/\\/g, '') + this.workflow_Lines.model = tmp; + // this.ReportBuilder_Header.Rpt_builder2_lines[0].model = tmp +console.log( this.workflow_Lines); + + this.reportBuilderService.updaterbLineData(this.workflow_Lines, this.lineId).subscribe((data)=>{ + console.log(data); + if (data || data.status >= 200 && data.status <= 209) { + this.toastr.success('Report save successfully'); + this.router.navigate(["../../all"], { relativeTo: this.route }); + } + },(error:HttpErrorResponse) => { + console.log(error); + if(error.status==404){ + this.toastr.error(error.error); + } + if(error.status==200){ this.toastr.success('Report save successfully'); } + if(error.status==400){ this.toastr.error('Report Save Unsuccessful'); } + }); + // this.router.navigate(["../../all"], { relativeTo: this.route }); +} + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.spec.ts new file mode 100644 index 0000000..1b0545d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportBuild2Component } from './report-build2.component'; + +describe('ReportBuild2Component', () => { + let component: ReportBuild2Component; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportBuild2Component ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportBuild2Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.ts new file mode 100644 index 0000000..e29256b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-report-build2', + templateUrl: './report-build2.component.html', + styleUrls: ['./report-build2.component.scss'] +}) +export class ReportBuild2Component implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.html new file mode 100644 index 0000000..9d474d8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.html @@ -0,0 +1,79 @@ +

Create New Report

+Add Mode
+
+
+ + + + + +
+ +
+
+ + + +
+
+ + +
+
+ + +
+ +
+ + + +
+
+
+ + +
+
+ +
+
+
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.scss new file mode 100644 index 0000000..39de1cb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.scss @@ -0,0 +1,80 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .entry-pg { + width: 750px; + } + + .button1::after { + content: none; + } + .button1:hover::after { + content: "ADD ROWS"; + } + + $bg-color: #dddddd; + + .section { + background-color: $bg-color; + height: 40px; + } + + .section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + input[type=text],[type=date],textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .required-field{ + color: red; + + } + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.spec.ts new file mode 100644 index 0000000..ae3b340 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportBuild2addComponent } from './report-build2add.component'; + +describe('ReportBuild2addComponent', () => { + let component: ReportBuild2addComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportBuild2addComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportBuild2addComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.ts new file mode 100644 index 0000000..5007d44 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2add/report-build2add.component.ts @@ -0,0 +1,71 @@ +import { HttpErrorResponse, HttpHeaderResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; +@Component({ + selector: 'app-report-build2add', + templateUrl: './report-build2add.component.html', + styleUrls: ['./report-build2add.component.scss'] +}) +export class ReportBuild2addComponent implements OnInit { + public entryForm: FormGroup; + constructor(private _fb: FormBuilder, private router: Router,private toastr: ToastrService, + private route: ActivatedRoute,private reportBuilderService: ReportBuilderService) { } + + ngOnInit(): void { + this.entryForm = this._fb.group({ + reportName: [null], + description:[null], + active:[null], + isSql:[false], + Rpt_builder2_lines: this._fb.array([this.initLinesFormReport()]), + }); + + } + + initLinesFormReport() { + return this._fb.group({ + model: '' + }); + } + stdparams; + keysfromurl; + getkeys(){ + if(this.entryForm.value.url !== null){ + this.reportBuilderService.getcolumnDetailsByurl(this.entryForm.value.url).subscribe(data =>{ + console.log(data); + this.keysfromurl = data; + }) + }else{ + this.toastr.error("URL is required"); + } + } + + + toastrShown: boolean = false; + onSubmit(){ + console.log(this.entryForm.value); + this.reportBuilderService.saverbData(this.entryForm.value).subscribe((data)=>{ + console.log(data); + if (data || data.status >= 200 && data.status <= 209) { + this.toastr.success('Report save successfully'); + } + },(error:HttpErrorResponse) => { + console.log(error); + if(error.status==404){ + this.toastr.error(error.error); + } + if(error.status==200){ this.toastr.success('Report save successfully'); } + if(error.status==400){ this.toastr.error('Report Save Unsuccessful'); } + }); + setTimeout(()=>{ + this.router.navigate(["../all"], { relativeTo: this.route }); + },500); + } + goback(){ + this.router.navigate(["../all"], { relativeTo: this.route }); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.html new file mode 100644 index 0000000..0778b74 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.html @@ -0,0 +1,109 @@ + +
+ + +
+
+
+

Report Builder 2

+
+
+ + + +
+
+ + + + + + + + + Loading ... +
{{error}}
+ + + + Go To + + + Report Name + + + Report Description + + + Active + + + Action + + + + SET UP + {{user.reportName}} + {{user.description}} + {{user.active}} + + + + Delete + + + + +
Who Column
+
Account ID: {{user.accountId}}
+
Created At: {{user.createdAt| date}}
+
Created By: {{user.createdBy}}
+
Updated At: {{user.updatedAt | date}}
+
Updated By: {{user.updatedBy}}
+
+
+ + +
+ + + + + +
+ + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+
+ + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.scss new file mode 100644 index 0000000..aec3e9d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.scss @@ -0,0 +1,83 @@ +.td-title { + text-align: right; + width: 150px; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + color: white; + } + .td-content{ + text-align: left; + } + .delete,.heading{ + text-align: center; + color: red; + } + input[type='radio']{ + width: 14px !important; + height: 14px !important; + margin: 5px; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + appearance: none; + outline: 1px solid gray; + box-shadow: none; + font-size: 0.8em; + text-align: center; + line-height: 1em; + background: red; + } + .dots + { + width: 100px; + height:100px; + border: 1px solid; + border-radius: 50%; + //background-color: #f00; + } + h4{margin-top: 16px;} + .s-order-dash-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + } + } + #word1{ + width: 190px; + height: 180px; + + } + .center{ + text-align: center; + margin-top: 5px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + .heading{ + text-align: center; + color: red; + } + + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.spec.ts new file mode 100644 index 0000000..5ee51ec --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportBuild2allComponent } from './report-build2all.component'; + +describe('ReportBuild2allComponent', () => { + let component: ReportBuild2allComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportBuild2allComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportBuild2allComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.ts new file mode 100644 index 0000000..9371ab2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2all/report-build2all.component.ts @@ -0,0 +1,91 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; +import { ToastrService } from 'ngx-toastr'; + +@Component({ + selector: 'app-report-build2all', + templateUrl: './report-build2all.component.html', + styleUrls: ['./report-build2all.component.scss'] +}) +export class ReportBuild2allComponent implements OnInit { + + gridData; + loading = false; + error; + selected: any[] = []; + rowSelected :any= {}; + modaldelete=false; + isLoading: boolean = false; + projectId; + moduleId; + projectname; + constructor(private router: Router, + private route: ActivatedRoute,private reportBuilderService: ReportBuilderService, + private toastr:ToastrService, ) { } + + ngOnInit(): void { + + this.getAll(); + } + + + getAll() { + this.isLoading = true; + this.reportBuilderService.getrbDetails().subscribe((data) => { + this.isLoading = false; + console.log(data); + const filteredData = data.filter(item => item.isSql === false); + this.gridData = filteredData; + if(this.gridData.length == 0){ + this.error="No data Available"; + console.log(this.error); + } + }); + } + + gotorunner() + { + this.router.navigate(['../../rerunner'],{relativeTo:this.route}); + } + + goToAdd() { + this.router.navigate(["../add"], { relativeTo: this.route, }); + } + + goToEdit(id: number) { + this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + enid; + modelData:any[]=[]; + goToLines(val) { + console.log(val); +this.enid=val.id; +// this.modelData = val.Rpt_builder2_lines[0].model; + + // if(val.Rpt_builder2_lines[0].model !== '' ){ + this.router.navigate(["../edit/" + this.enid], { relativeTo: this.route }); + // } + // else{ + // this.router.navigate(["../reportQuery/" + this.enid], { relativeTo: this.route, }); + // } + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + delete(id){ + this.modaldelete = false; + this.reportBuilderService.deletrbById(id).subscribe((data) => { + console.log(data); + if(data || data == null || data.status >= 200 && data.status <= 209){ + this.toastr.success("Deleted successfully"); + } + this.ngOnInit(); + },(error) => { + console.log(error); + this.toastr.error("getting error in deleting data"); + }) + } + +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.html new file mode 100644 index 0000000..ea3a267 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.html @@ -0,0 +1,95 @@ +
+

REPORT SET UP - Project Details Report ({{ReportData.id}})

+ Edit Mode +
+
+
+
+
+
+ +
+ +
 
+
+
+ + +
+
+ + + + + + {{selected}} + + + + {{state}} + + + + + +
+
+ + + +
+ +
+
+
+
+
+ +
+
+ + +
+
+
+ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.scss new file mode 100644 index 0000000..9893e7c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.scss @@ -0,0 +1,58 @@ +// @import "../../../../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .edit-pg { + width: 750px; + } + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + #lines { + table, + th, + td { + border: 0.5px solid #f1f0f0; + border-collapse: collapse; + } + input, + input :focus { + //-webkit-appearance: none; + outline: none; + border-width: 0px; + border: none; + } + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.spec.ts new file mode 100644 index 0000000..104e81a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportBuild2editComponent } from './report-build2edit.component'; + +describe('ReportBuild2editComponent', () => { + let component: ReportBuild2editComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportBuild2editComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportBuild2editComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.ts new file mode 100644 index 0000000..7fe97f8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-build2/report-build2edit/report-build2edit.component.ts @@ -0,0 +1,159 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; + + +@Component({ + selector: 'app-report-build2edit', + templateUrl: './report-build2edit.component.html', + styleUrls: ['./report-build2edit.component.scss'] +}) +export class ReportBuild2editComponent implements OnInit { + public entryForm: FormGroup; + updated = false; + ReportData:any = {}; + id: number; + nodeEditProperties = { + std_param_html:'', + adhoc_param_html:'', + // column_str:'', + // conn_name:'', + date_param_req:'', + // folderName:'', + url:'', + +}; + constructor(private router: Router, + private route: ActivatedRoute,private reportBuilderService: ReportBuilderService, + private toastr: ToastrService, private _fb: FormBuilder) { } + + ngOnInit(): void { + this.id = this.route.snapshot.params["id"]; + console.log("update with id = ", this.id); + + this.entryForm = this._fb.group({ + std_param_html : [null], + adhoc_param_html:[null], + // column_str:[null], + // conn_name:[null], + date_param_req:[null], + // folderName:[null], + url:[null], + }); + + this.getById(this.id); + this.listoddatabase(); + } + databaselist; + listoddatabase(){ + this.reportBuilderService.getdatabse().subscribe((data)=>{ + this.databaselist=data; + console.log(this.databaselist) + },(error) => { + console.log(error); + if(error){ + } + }); + + } + builderLine; + lineId; + builderLineData:any[] = []; + getById(id: number) { + this.reportBuilderService.getrbDetailsById(id).subscribe( + (data) => { + console.log(data); + this.ReportData = data; + + + this.builderLine = this.ReportData.rpt_builder2_lines; + this.lineId = this.builderLine[0].id + console.log("line data ",this.lineId, this.builderLine); + if(this.builderLine[0].model != '') + { + this.builderLineData = JSON.parse(this.builderLine[0].model) ; + console.log(this.builderLineData); + + this.nodeEditProperties.std_param_html = this.builderLineData[0].std_param_html; + this.nodeEditProperties.adhoc_param_html = this.builderLineData[0].adhoc_param_html; + // this.nodeEditProperties.column_str = this.builderLineData.column_str; + // this.nodeEditProperties.conn_name = this.builderLineData.conn_name; + this.nodeEditProperties.date_param_req = this.builderLineData[0].date_param_req; + this.nodeEditProperties.url = this.builderLineData[0].url; + } + }, + (err) => { + console.log(err); + } + ); + } + + stdparams; + keysfromurl; + getkeys(){ + if(this.nodeEditProperties.url !== null){ + this.reportBuilderService.getcolumnDetailsByurl(this.nodeEditProperties.url).subscribe(data =>{ + console.log(data); + this.keysfromurl = data; + this.nodeEditProperties.adhoc_param_html = this.keysfromurl; + }) + }else{ + this.toastr.error("URL is required"); + } + } + + + listBuilder_Lines = { + model:{} + } + update() { + + + this.builderLineData[0] = { + std_param_html: this.nodeEditProperties.std_param_html, + adhoc_param_html: this.nodeEditProperties.adhoc_param_html, + date_param_req: this.nodeEditProperties.date_param_req, + url: this.nodeEditProperties.url, + }; + + this.builderLineData[0].std_param_html = this.nodeEditProperties.std_param_html; + this.builderLineData[0].adhoc_param_html = this.nodeEditProperties.adhoc_param_html; + // this.builderLineData.column_str = this.nodeEditProperties.column_str; + // this.builderLineData.conn_name = this.nodeEditProperties.conn_name ; + this.builderLineData[0].date_param_req = this.nodeEditProperties.date_param_req; + this.builderLineData[0].url = this.nodeEditProperties.url; + console.log(this.builderLineData); + // this.builderLineData.splice(1); + console.log(this.builderLineData); + let tmp = JSON.stringify(this.builderLineData); //.replace(/\\/g, '') + this.listBuilder_Lines.model = tmp; +console.log(this.listBuilder_Lines); + + this.reportBuilderService.updaterbLineData(this.listBuilder_Lines, this.lineId).subscribe( + (data) => { + console.log(data); + if (data) { + this.toastr.success('Update successfully'); + } + this.router.navigate(["../../all"], { relativeTo: this.route }); + //this.router.navigate(["../../all"],{ relativeTo: this.route, queryParams: { p_id: this.projectId } }); + }, + (error) => { + console.log(error); // this will come from backend + } + ); + // this.lineBuilder_Header = new Rn_Cff_ActionBuilder_Header(); + } + + onSubmit() { + this.updated = true; + this.update(); + } + + back() { + this.router.navigate(["../../all"], { relativeTo: this.route }); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.css new file mode 100644 index 0000000..b844a72 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=report-runner.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.css.map new file mode 100644 index 0000000..756b30e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"report-runner.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.spec.ts new file mode 100644 index 0000000..3f7c7ea --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportRunnerComponent } from './report-runner.component'; + +describe('ReportRunnerComponent', () => { + let component: ReportRunnerComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportRunnerComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportRunnerComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.ts new file mode 100644 index 0000000..1256607 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/report-runner.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-report-runner', + templateUrl: './report-runner.component.html', + styleUrls: ['./report-runner.component.scss'] +}) +export class ReportRunnerComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.css new file mode 100644 index 0000000..5c4087a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.css @@ -0,0 +1,90 @@ +.td-title { + text-align: right; + width: 150px; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + color: white; +} + +.td-content { + text-align: left; +} + +.delete, .heading { + text-align: center; + color: red; +} + +input[type=radio] { + width: 14px !important; + height: 14px !important; + margin: 5px; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + appearance: none; + outline: 1px solid gray; + box-shadow: none; + font-size: 0.8em; + text-align: center; + line-height: 1em; + background: red; +} + +.dots { + width: 100px; + height: 100px; + bordeR: 1px solid; + border-radius: 50%; +} + +h4 { + margin-top: 16px; +} + +.s-order-dash-pg { + margin: 0px; + display: flex; + flex-wrap: wrap; + flex-direction: row; + justify-content: center; +} +.s-order-dash-pg .chart-box { + margin: 16px; + padding: 0 16px; + background-color: #fff; + border: 1px solid #ccc; + border-radius: 2px; +} + +#word1 { + width: 190px; + height: 180px; +} + +.center { + text-align: center; + margin-top: 5px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.heading { + text-align: center; + color: red; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +}/*# sourceMappingURL=reportrunnerall.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.css.map new file mode 100644 index 0000000..b30f804 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["reportrunnerall.component.scss","reportrunnerall.component.css"],"names":[],"mappings":"AAAA;EACI,iBAAA;EACA,YAAA;EACA,iBAAA;EACA,2CAAA;EACA,YAAA;ACCJ;;ADCE;EACE,gBAAA;ACEJ;;ADAE;EACE,kBAAA;EACA,UAAA;ACGJ;;ADDE;EACE,sBAAA;EACA,uBAAA;EACA,WAAA;EACA,wBAAA;EACA,qBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,gBAAA;EACA,eAAA;ACIJ;;ADFE;EAEE,YAAA;EACA,aAAA;EACA,iBAAA;EACA,kBAAA;ACIJ;;ADDI;EAAG,gBAAA;ACKP;;ADJI;EACE,WAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,uBAAA;ACON;ADNM;EACE,YAAA;EACA,eAAA;EACA,sBAAA;EACA,sBAAA;EACA,kBAAA;ACQR;;ADLI;EACC,YAAA;EACC,aAAA;ACQN;;ADLI;EACE,kBAAA;EACA,eAAA;ACQN;;ADLI;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,wBAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;ACQN;;ADNM;EACE,kBAAA;EACA,UAAA;ACSR;;ADNM;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACSR","file":"reportrunnerall.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.html new file mode 100644 index 0000000..688093d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.html @@ -0,0 +1,109 @@ + +
+ + +
+
+
+

All Reports

+
+
+ + +
+
+ + + + + + + + +
+
+
+
+
+
+
+
+ + SQLitems in a light blue badge + URLitems in an orange badge +
+
+ +
+
+
+
+ {{app.reportName}} +
+
+ +
+
+ {{app.description}} +
+
+
+ + +
+ + + + +
+
+
+
+
+ + + + +
+ + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.scss new file mode 100644 index 0000000..48905e0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.scss @@ -0,0 +1,93 @@ +.td-title { + text-align: right; + width: 150px; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + color: white; + } + .td-content{ + text-align: left; + } + .delete,.heading{ + text-align: center; + color: red; + } + input[type='radio']{ + width: 14px !important; + height: 14px !important; + margin: 5px; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + appearance: none; + outline: 1px solid gray; + box-shadow: none; + font-size: 0.8em; + text-align: center; + line-height: 1em; + background: red; + } + .dots + { + width: 100px; + height:100px; + border: 1px solid; + border-radius: 50%; + //background-color: #f00; + } + h4{margin-top: 16px;} + .s-order-dash-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + } + } + #word1{ + width: 190px; + height: 180px; + + } + .center{ + text-align: center; + margin-top: 5px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + .heading{ + text-align: center; + color: red; + } + + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + + + #word { + display: inline-block; + width: 320px; + white-space: nowrap; + overflow: hidden !important; + text-overflow: ellipsis; + font-weight: bold; + + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.spec.ts new file mode 100644 index 0000000..3887e78 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportrunnerallComponent } from './reportrunnerall.component'; + +describe('ReportrunnerallComponent', () => { + let component: ReportrunnerallComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportrunnerallComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportrunnerallComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.ts new file mode 100644 index 0000000..c4bfbb1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunnerall/reportrunnerall.component.ts @@ -0,0 +1,90 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; +import { ToastrService } from 'ngx-toastr'; + +@Component({ + selector: 'app-reportrunnerall', + templateUrl: './reportrunnerall.component.html', + styleUrls: ['./reportrunnerall.component.scss'] +}) +export class ReportrunnerallComponent implements OnInit { + gridData; + loading = false; + error; + selected: any[] = []; + rowSelected :any= {}; + modaldelete=false; + isLoading: boolean = false; + projectId; + moduleId; + projectname; + constructor(private router: Router, + private route: ActivatedRoute,private reportBuilderService: ReportBuilderService, + private toastr:ToastrService, ) { } + + ngOnInit(): void { + + this.getAll(); + } + + + getAll() { + this.isLoading = true; + this.reportBuilderService.getrbDetails().subscribe((data) => { + this.isLoading = false; + console.log(data); + this.gridData = data; + if(this.gridData.length == 0){ + this.error="No data Available"; + console.log(this.error); + } + }); + } + + goToAdd2() { + this.router.navigate(["../../reportbuild2/"], { relativeTo: this.route, }); + } + + goToAdd() { + this.router.navigate(["../../reportbuild/"], { relativeTo: this.route, }); + } + + goToEdit(id: number) { + this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + goToRunner(user) { + const id = user.id; + const isSql = user.isSql; + if(isSql == true) { + this.router.navigate(["../runner/" + id], { relativeTo: this.route, }); + }else if(isSql == false){ + this.router.navigate(["../runner2/" + id], { relativeTo: this.route, }); + } + + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + delete(id){ + this.modaldelete = false; + this.reportBuilderService.deletrbById(id).subscribe((data) => { + console.log(data); + if(data || data == null || data.status >= 200 && data.status <= 209){ + this.toastr.success("Deleted successfully"); + } + this.ngOnInit(); + },(error) => { + console.log(error); + this.toastr.error("getting error in deleting data"); + }) + } + + gotoAction(){ + this.router.navigate(["../../actions"], { relativeTo: this.route, queryParams: { m_id: this.moduleId,pname:this.projectname } }); + } + gotoRepo(){ + this.router.navigate(["../../modulecard"], { relativeTo: this.route, queryParams: { p_id: this.projectId } }); + } +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.css new file mode 100644 index 0000000..dae91f0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.css @@ -0,0 +1,76 @@ +input[type=text], [type=date], [type=password] { + width: 100%; + padding: 15px 20px; + background-color: rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.section { + background-color: #dddddd; + height: 40px; +} + +.section p { + padding: 10px; + font-size: 18px; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.35rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +input[type=text], textarea { + width: 100%; + padding: 15px 15px; + background-color: rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.required-field { + color: red; +} + +.postColumn { + border: 1px solid #ccc; + width: 78%; + margin-left: 15px; +} + +.colName { + text-align: center; + padding: 5px; +} + +.colfields { + border: 1px solid black; + margin: 17px; + text-align: center; + padding: 3px; +} + +.fieldWrapper { + margin-top: 20px; +} + +.center { + text-align: center; +}/*# sourceMappingURL=reportrunneredit.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.css.map new file mode 100644 index 0000000..4d6ee07 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["reportrunneredit.component.scss","reportrunneredit.component.css"],"names":[],"mappings":"AAAA;EACI,WAAA;EACA,kBAAA;EAED,oCAAA;EACC,qBAAA;EACA,sBAAA;EACA,kBAAA;EACA,sBAAA;ACAJ;;ADEE;EACE,yBAAA;EACA,YAAA;ACCJ;;ADCE;EAEE,aAAA;EACA,eAAA;ACCJ;;ADCE;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACEJ;;ADCE;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,wBAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;ACEJ;;ADAE;EACE,WAAA;EACA,kBAAA;EAED,oCAAA;EACC,qBAAA;EACA,sBAAA;EACA,kBAAA;EACA,sBAAA;ACEJ;;ADAE;EACE,UAAA;ACGJ;;ADAE;EACE,sBAAA;EACA,UAAA;EACA,iBAAA;ACGJ;;ADDE;EACE,kBAAA;EACA,YAAA;ACIJ;;ADFE;EACE,uBAAA;EACA,YAAA;EACA,kBAAA;EACA,YAAA;ACKJ;;ADHE;EACE,gBAAA;ACMJ;;ADJE;EACE,kBAAA;ACOJ","file":"reportrunneredit.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.html new file mode 100644 index 0000000..8d778b1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.html @@ -0,0 +1,266 @@ + +

Report Name - {{reportName}}

+
+
+
+
+
Date Range
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+
Standard Parameters
+ +
+
+
+ + + + + +
+
+
+ +
+
+
+
+
+
Adhoc Parameters
+
+
+
+
+ + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + +
+
+

Report Output

+
+
+ + + + + + + + + + +
+
+
+
+ + + + + + + + + + + + +
{{co}}
+ + + {{ formatDate(item[key]) }} + + + {{ item[key] }} + +
+
+ + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.scss new file mode 100644 index 0000000..2075896 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.scss @@ -0,0 +1,80 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } +} + +.entry-pg { + width: 750px; +} + +.button1::after { + content: none; +} +.button1:hover::after { + content: "ADD ROWS"; +} + +$bg-color: #dddddd; + +.section { + background-color: $bg-color; + height: 40px; +} + +.section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.center { + text-align: center; +} +input[type=text],[type=password],[type=date],textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.required-field{ + color: red; + +} +select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.spec.ts new file mode 100644 index 0000000..6563a07 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportrunnereditComponent } from './reportrunneredit.component'; + +describe('ReportrunnereditComponent', () => { + let component: ReportrunnereditComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportrunnereditComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ReportrunnereditComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.ts new file mode 100644 index 0000000..ac51541 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit/reportrunneredit.component.ts @@ -0,0 +1,611 @@ +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { DomSanitizer } from '@angular/platform-browser'; +import { ActivatedRoute, Router } from '@angular/router'; +import * as moment from 'moment'; +import { ToastrService } from 'ngx-toastr'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; +import { ExcelService } from 'src/app/services/excel.service'; +import { saveAs } from 'file-saver'; +@Component({ + selector: 'app-reportrunneredit', + templateUrl: './reportrunneredit.component.html', + styleUrls: ['./reportrunneredit.component.scss'], + encapsulation: ViewEncapsulation.None +}) +export class ReportrunnereditComponent implements OnInit { + dynamicForm: FormGroup; + modalselect:boolean=false; + serverData = [{"andor": "AND", + "fields_name": "", + "condition": "=", + "value": ""}]; + andor = ['AND', 'OR','NOT']; + fieldname = ['name1', 'name2']; + condition = ['=','!=','<','>','<=','>=','LIKE','BETWEEN','IN']; + header_id; + public array=[ + { + "id": 1, + "name": "Jack", + "fromDate": "19-05-2023", + "toDate": "03-06-2023" + }, + { + "id": 2, + "name": "Allen", + "fromDate": "18-05-2023", + "toDate": "12-08-2023" + }, + { + "id": 3, + "name": "Annie", + "fromDate": "11-05-2023",//2023-11-05 + "toDate": "19-05-2023" + }, + { + "id": 4, + "name": "ashok", + "fromDate": "08-05-2023", + "toDate": "02-02-2023" + }, + { + "id": 5, + "name": "Anu", + "fromDate": "29-11-2020", + "toDate": "01-06-2021" + }, + { + "id": 6, + "name": "thrymr", + "fromDate": "04-04-2023", + "toDate": "15-05-2023" + }, + { + "id": 7, + "name": "Ab", + "fromDate": "29-11-2022", + "toDate": "01-06-2023" + }, + { + "id": 8, + "name": "thakur", + "fromDate": "04-04-2022", + "toDate": "15-05-2022" + } + ] + selectedfrom; + selectedto; + constructor(private router: Router, + private route: ActivatedRoute,private _fb: FormBuilder, + private reportBuilderService: ReportBuilderService,private toastr:ToastrService,private sanitizer: DomSanitizer,private excel: ExcelService) + { + this.dynamicForm = this._fb.group({ + }); + } +todayDate; + ngOnInit(): void { + this.todayDate = new Date().toISOString().slice(0, 10); + this.header_id = this.route.snapshot.params["id"]; + console.log(" id = ", this.header_id); + // this.duplicateArray=this.array; + this.getById(this.header_id); + + this.select('Today') + setTimeout(() => { + this.runtheQuery(); + }, 2000); + + + } + reportName; + builderLine; + builderLineData; + lineId; + adhocList; + SQLQuery; + stdParamfields; + date_param_req; + getById(id: number) { + this.reportBuilderService.getrbDetailsById(id).subscribe( + (data) => { + console.log(data); + this.reportName = data.reportName; + this.builderLine = data.rpt_builder2_lines; + this.lineId = this.builderLine[0].id + this.builderLineData = JSON.parse(this.builderLine[0].model) ; + console.log(this.lineId,this.builderLineData); + const adhocList = this.builderLineData.adhoc_param_html; + this.adhocList = JSON.parse(adhocList); + console.log(this.adhocList) + this.date_param_req = this.builderLineData.date_param_req; + this.SQLQuery = this.builderLineData.sql_str; + this.getStdParam(this.header_id); + }); + + } + + dynamicHtml:any = []; + dynamicHtmlFlag = false; + stdParmas; + stdParamFlag = false; + getStdParam(id: any){ + console.log(this.builderLineData.std_param_html); + this.dynamicHtml = JSON.parse(this.builderLineData.std_param_html); + // this.dynamicHtml = ['a.abc','b.abcde'] + if (this.dynamicHtml) { + for (const field of this.dynamicHtml) { + if (!this.dynamicForm.get(field)) { + this.dynamicForm.addControl(field, this._fb.control(null)); + } + } + console.log(this.dynamicForm.value); + } + if(this.dynamicHtml == undefined || this.dynamicHtml == ''){ + this.dynamicHtmlFlag = false; + }else{ + this.dynamicHtmlFlag = true; + } + + // this.reportBuilderService.getStdParamById(id).subscribe(data => { + // console.log(data); + // this.stdParmas = data; + // },(error)=>{ + // console.log(error.error.text) + // this.stdParmas = this.sanitizer.bypassSecurityTrustHtml(error.error.text); + + // if(this.stdParmas == undefined || this.stdParmas == ''){ + // this.stdParamFlag = false; + // }else{ + // this.stdParamFlag = true; + // } + // }); + } + modo2(val){ + console.log(val); + this.selectedfrom=val; + } + modo3(val){ + console.log(val); +this.selectedto=val; + } + duplicateArray=[]; + myDateValue: Date; + toDate:Date; + reverseAndTimeStamp(dateString) { + const reverse = new Date(dateString.split("-").reverse().join("-")); + return reverse.getTime(); + } + filterDate() { + let fromdate=moment(this.myDateValue).format('DD-MM-YYYY'); +console.log(fromdate) +let todate=moment(this.toDate).format('DD-MM-YYYY'); +if(this.myDateValue && this.toDate){ +const selectedMembers = this.array.filter(m => { + return this.reverseAndTimeStamp(m.fromDate) >= this.reverseAndTimeStamp(fromdate) && this.reverseAndTimeStamp(m.fromDate) <= this.reverseAndTimeStamp(todate) + } + ); + this.duplicateArray=selectedMembers +}else{ +this.duplicateArray=this.array +} + console.log(this.duplicateArray); // the result objects + this.modalselect=false; +} + + dateParameter: string; + from_date: Date; + to_date: Date; + + calculateThisWeek(): void { + // Calculate the current date + const currentDate = new Date(); + console.log(currentDate) + // Get the day of the week (0-6, where 0 is Sunday) + const currentDayOfWeek = currentDate.getDay(); + + // Calculate the number of days to subtract to get to Monday + const daysToMonday = currentDayOfWeek === 0 ? 6 : currentDayOfWeek - 1; + + // Calculate the date of Monday of the current week + this.from_date = new Date(currentDate); + this.from_date.setDate(currentDate.getDate() - daysToMonday); + + // Calculate the date of Sunday of the current week + this.to_date = new Date(this.from_date); + this.to_date.setDate(this.from_date.getDate() + 6); + console.log(this.from_date); + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=this.to_date; + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + calculateLastWeek(): void { + // Calculate the current date + const currentDate = new Date(); + + // Get the day of the week (0-6, where 0 is Sunday) + const currentDayOfWeek = currentDate.getDay(); + + // Calculate the number of days to subtract to get to Monday + const daysToMonday = currentDayOfWeek === 0 ? 6 : currentDayOfWeek - 1; + + // Calculate the date of Monday of the previous week + this.from_date = new Date(currentDate); + this.from_date.setDate(currentDate.getDate() - daysToMonday - 7); + + // Calculate the date of Sunday of the previous week + this.to_date = new Date(this.from_date); + this.to_date.setDate(this.from_date.getDate() + 6); + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=this.to_date; + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + calculateThisMonth(): void { + // Calculate the current date + const currentDate = new Date(); + + // Calculate the date of the first day of the current month + this.from_date = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1); + + // Calculate the date of the last day of the current month + this.to_date = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0); + + this.to_date.setDate(this.from_date.getDate() + 6); + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=currentDate; + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + + calculateLastMonth(): void { + // Calculate the current date + const currentDate = new Date(); + + // Calculate the date of the first day of the previous month + this.from_date = new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1); + + // Calculate the date of the last day of the previous month + this.to_date = new Date(currentDate.getFullYear(), currentDate.getMonth(), 0); + + this.to_date.setDate(this.from_date.getDate() + 6); + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=this.to_date; + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + calculateThisYear(): void { + // Calculate the current date + const currentDate = new Date(); + + // Calculate the date of the first day of the current year + this.from_date = new Date(currentDate.getFullYear(), 0, 1); + + // Calculate the date of the last day of the current year + this.to_date = new Date(currentDate.getFullYear(), 11, 31); + + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=this.to_date; + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + + calculateLastYear(): void { + // Calculate the current date + const currentDate = new Date(); + + // Calculate the date of the first day of the previous year + this.from_date = new Date(currentDate.getFullYear() - 1, 0, 1); + + // Calculate the date of the last day of the previous year + this.to_date = new Date(currentDate.getFullYear() - 1, 11, 31); + + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=this.to_date; + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + SelectdateType; + select(val:any){ + console.log(val); + this.SelectdateType = val; + if(val === 'This Week'){ + this.calculateThisWeek() + }else if(val === 'Last Week'){ + this.calculateLastWeek() + }else if(val === 'This Month'){ + this.calculateThisMonth() + }else if(val === 'Last Month'){ + this.calculateLastMonth() + // }else if(val === 'To Specific FromDate To To Date'){ + // this.openmodel() + } + else if(val === 'This Year'){ + this.calculateThisYear() + }else if(val === 'Last Year'){ + this.calculateLastYear() + } + else if(val === 'Today'){ + this.FromDatequery = null; + this.ToDatequery = null; + this.myDateValue = this.todayDate; + this.toDate = this.todayDate; + + this.FromDatequery = this.myDateValue; + this.ToDatequery = this.toDate; + } + else if(val === ''){ + this.myDateValue = null; + this.toDate = null; + this.FromDatequery = null; + this.ToDatequery = null; + } + + + } + openmodel(){ + this.modalselect=true; + } + + onExport() { + const reportNameWithUnderscore = this.reportName + '_'; + this.excel.exportAsExcelFile(this.rows, reportNameWithUnderscore, + moment().format('YYYYMMDD_HHmmss')) + } + + downloadFile(format: string) { + const date = moment().format('YYYYMMDD_HHmmss') + const reportNameWithUnderscore = this.reportName + '_' + date; + this.reportBuilderService.downloadFile(format, this.rows,reportNameWithUnderscore) + // this.reportBuilderService.downloadFile(format, this.rows).subscribe( + // (data) => { + // // Handle the file data received from the service + // const blob = new Blob([data], { type: 'application/octet-stream' }); + // const reportNameWithUnderscore = this.reportName + '_'; + // saveAs(blob, `${reportNameWithUnderscore}.${format}`); // Save the file using file-saver library + // }, + // (error) => { + // console.error('File download failed:', error); + // const date = moment().format('YYYYMMDD_HHmmss') + // const reportNameWithUnderscore = this.reportName + '_' + date; + // if (format === 'csv') { + // const blob = new Blob([error.error.text], { type: 'text/csv' }); + // saveAs(blob, `${reportNameWithUnderscore}.csv`); + // } else if (format === 'pdf') { + // const blob = new Blob([error.error.text], { type: 'application/pdf' }); + // saveAs(blob,`${reportNameWithUnderscore}.pdf`); + // // const pdf = new jsPDF(); + // // pdf.text(error.error.text, 10, 10); // Assuming 'data' is the PDF content, adjust as needed + + // // pdf.save(`${reportNameWithUnderscore}.pdf`); + // } + // }); + } + back(){ + this.router.navigate(["../../all"], { relativeTo: this.route }); + } +FormattedAdhocparameters; +adocdata; +// showPlusIconRow: number | null = 0; + onAddLines(){ + console.log(this.serverData); + const lastRow = this.serverData[this.serverData.length - 1]; + if (lastRow && lastRow.fields_name !== '') { + let formattedString = ''; + for (const condition of this.serverData) { + const { andor, fields_name, condition: cond, value } = condition; + formattedString += ` ${andor} ${fields_name} ${cond} '${value}' `; + // console.log(formattedString); + this.FormattedAdhocparameters = formattedString + } + this.serverData.push({ + andor: "AND", + fields_name: "", + condition: "=", + value: "" + }); + } + // this.showPlusIconRow = this.serverData.length - 1; + + } + deleteRow(index) { + // this.serverData.splice(index, 1); + // if (index === this.showPlusIconRow) { + // this.showPlusIconRow = null; + // } + if (this.serverData.length > 1) { + this.serverData.splice(index, 1); + } + } + + + rows:any[]; + columns: any[]; + rowdata; + FromDatequery; + ToDatequery; + + newfrom; + newto; + + dateKey; +runtheQuery(){ + console.log(this.dynamicForm.value); + console.log(this.myDateValue , this.toDate); + console.log(this.SQLQuery); + let query = this.SQLQuery; +// let query + if(this.dynamicForm.value){ + // for(let i = 0; i < this.dynamicForm.value.length; i++){ + // // const query = this.SQLQuery + " AND " + this.dynamicForm.controls[i] + " = " + this.dynamicForm.value[i] + + // } + + + // Iterate over the keys in dynamicForm.value + Object.keys(this.dynamicForm.value).forEach((key) => { + // Append the condition for each key to the query + if (this.dynamicForm.value[key] !== null && this.dynamicForm.value[key] !== '') { + query += ` AND ${key} = '${this.dynamicForm.value[key]}'`; + } + // const regex = /FROM/i; + // const match = query.match(regex); + // if (this.dynamicForm.value[key] !== null && this.dynamicForm.value[key] !== '') { + // // query += ` AND ${key} = '${this.dynamicForm.value[key]}'`; + // const columnName = key.split('.').pop(); + // let coalesceExpression = `, COALESCE(${key}, '${this.dynamicForm.value[key]}') as ${columnName}`; + // if (match) { + // // Insert the COALESCE expression before the FROM keyword + // query = query.slice(0, match.index) + coalesceExpression +' '+ query.slice(match.index); + // } + // } + }); + if(this.date_param_req == 'Yes'){ + this.dateKey = 'createdat'; + this.adhocList.forEach(key => { + if (key.includes("a.created_at")) { + this.dateKey ="created_at" ; + } + }); + this.adhocList.forEach(key => { + if (key.includes("a.createdAt")) { + this.dateKey ="createdAt" ; + } +}); +// if (this.adhocList.includes('created_at')) { +// dateKey = 'created_at'; +// } + + if(this.FromDatequery && this.ToDatequery){ + query += ` AND ${this.dateKey} BETWEEN '${this.FromDatequery}' AND '${this.ToDatequery}'`; + + }else if(this.myDateValue && this.toDate){ + if(this.myDateValue){ + const inputDate = new Date(this.myDateValue); + const year = inputDate.getFullYear(); + const month = String(inputDate.getMonth() + 1).padStart(2, "0"); // Months are zero-based, so add 1 + const day = String(inputDate.getDate()).padStart(2, "0"); + this.newfrom = `${year}-${month}-${day}`; + } + if(this.toDate){ + const inputDate = new Date(this.toDate); + const year = inputDate.getFullYear(); + const month = String(inputDate.getMonth() + 1).padStart(2, "0"); // Months are zero-based, so add 1 + const day = String(inputDate.getDate()).padStart(2, "0"); + this.newto = `${year}-${month}-${day}`; + + } + query += ` AND ${this.dateKey} BETWEEN '${this.newfrom}' AND '${this.newto}'`; + +} + } + // `SELECT * FROM abc where cretaedat BETWEEN '2023-04-04' AND '2023-05-19';` + `COALESCE(b.description, 'checking') as description` + // if(this.myDateValue && this.toDate){ + // query += ` AND from_date = NVL(${this.myDateValue}from_date, 'from_date') AND to_date = NVL(${this.toDate}to_date, 'to_date')`; + // } + console.log(query); + } + if(this.FormattedAdhocparameters){ + query += this.FormattedAdhocparameters + } +// query = `SELECT a.name AS name, b.dob AS dob FROM abc a, abcde b WHERE a.name = 'gaurav' AND a.abc = NVL(b.abc, 'name') AND a.abcde = NVL(b.abcde, 'test');` + console.log(query); + this.reportBuilderService.getMasterData(query).subscribe((data) => { + this.rows = data; + console.log(this.rows); +this.rowdata= [this.rows]; + console.log(typeof this.rows); + if(data){ + this.toastr.success("Run Successfully") + } + var j; + var cart = []; + + for(var i = 0; i < data.length; i++) + { + var columnsIn = data[i]; + if(i==1) + { + for(var key in columnsIn) + { + j={prop:key , name: key}; + cart.push(j) + + } + } + } + this.columns = cart; + +}); +// if(this.FromDatequery && this.ToDatequery){ +// this.FromDatequery = null; +// this.ToDatequery = null; +// }else if(this.myDateValue && this.toDate){ +// this.newfrom = null; +// this.toDate = null; +// } +} +getHeaders() { +let headers: string[] = []; +if(this.rows) { + this.rows.forEach((value) => { + Object.keys(value).forEach((key) => { + if(!headers.find((header) => header == key)){ + headers.push(key) + } + + }) + + }) +} +return headers; +} + +formatDate(dateObj: any): string { + // Extract individual date properties + const { year, monthValue, dayOfMonth, hour, minute, second } = dateObj; + + // Create a JavaScript Date object using the extracted properties + const formattedDate = new Date(year, monthValue - 1, dayOfMonth, hour, minute, second); + + // Format the date as needed (e.g., using built-in JavaScript date formatting) + return formattedDate.toLocaleString(); // Or any other desired formatting +} + +isDate(value: any): boolean { + return ( + value instanceof Date || + (value && + value.year !== undefined && + value.monthValue !== undefined && + value.dayOfMonth !== undefined) + ); +} + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.html new file mode 100644 index 0000000..3fc204b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.html @@ -0,0 +1,305 @@ + +

Report Name - {{reportName}}

+
+
+
+
+
Date Range
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+
+
Standard Parameters
+ +
+
+
+ + + + +
+
+
+ +
+
+
+
+
+
Adhoc Parameters
+
+
+
+
+ + + + + + + + + + + + + +
+ + + + + + + + + + +
+
+
+
+
+ + +
+
+

Report Output

+
+
+ + + + + + + + + + + + +
+
+
+
+ + + + + + + + + + + +
{{co}}
+ + + {{ item[key] }} + + + + {{ item[key] | date:'medium' }} + +
+
+
+ + + + + + + + + + + +
{{co}}
+ + + {{ item[key] }} + + + + {{ item[key] | date:'medium' }} + + + + +
+
+ + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.scss new file mode 100644 index 0000000..008d21a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.scss @@ -0,0 +1,81 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .entry-pg { + width: 750px; + } + + .button1::after { + content: none; + } + .button1:hover::after { + content: "ADD ROWS"; + } + + $bg-color: #dddddd; + + .section { + background-color: $bg-color; + height: 40px; + } + + .section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + input[type=text],[type=password],[type=date],textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .required-field{ + color: red; + + } + select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.spec.ts new file mode 100644 index 0000000..e22611d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { Reportrunneredit2Component } from './reportrunneredit2.component'; + +describe('Reportrunneredit2Component', () => { + let component: Reportrunneredit2Component; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ Reportrunneredit2Component ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(Reportrunneredit2Component); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.ts new file mode 100644 index 0000000..1f78b64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/report-runner/reportrunneredit2/reportrunneredit2.component.ts @@ -0,0 +1,831 @@ +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { DomSanitizer } from '@angular/platform-browser'; +import { ActivatedRoute, Router } from '@angular/router'; +import * as moment from 'moment'; +import { ToastrService } from 'ngx-toastr'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; +import { ExcelService } from 'src/app/services/excel.service'; + +@Component({ + selector: 'app-reportrunneredit2', + templateUrl: './reportrunneredit2.component.html', + styleUrls: ['./reportrunneredit2.component.scss'] +}) +export class Reportrunneredit2Component implements OnInit { + dynamicForm: FormGroup; + modalselect:boolean=false; + serverData = [{"andor": "AND", + "fields_name": "", + "condition": "=", + "value": ""}]; + andor = ['AND', 'OR','NOT']; + fieldname = ['name1', 'name2']; + condition = ['=','!=','<','>','<=','>=','LIKE','BETWEEN','IN']; + header_id; + public array=[ + { + "id": 1, + "name": "Jack", + "fromDate": "19-05-2023", + "toDate": "03-06-2023" + }, + { + "id": 2, + "name": "Allen", + "fromDate": "18-05-2023", + "toDate": "12-08-2023" + }, + { + "id": 3, + "name": "Annie", + "fromDate": "11-05-2023",//2023-11-05 + "toDate": "19-05-2023" + }, + { + "id": 4, + "name": "ashok", + "fromDate": "08-05-2023", + "toDate": "02-02-2023" + }, + { + "id": 5, + "name": "Anu", + "fromDate": "29-11-2020", + "toDate": "01-06-2021" + }, + { + "id": 6, + "name": "thrymr", + "fromDate": "04-04-2023", + "toDate": "15-05-2023" + }, + { + "id": 7, + "name": "Ab", + "fromDate": "29-11-2022", + "toDate": "01-06-2023" + }, + { + "id": 8, + "name": "thakur", + "fromDate": "04-04-2022", + "toDate": "15-05-2022" + } + ] + selectedfrom; + selectedto; + constructor(private router: Router, + private route: ActivatedRoute,private _fb: FormBuilder, + private reportBuilderService: ReportBuilderService,private toastr:ToastrService,private sanitizer: DomSanitizer,private excel: ExcelService) + { + this.dynamicForm = this._fb.group({ + }); + } +todayDate; + ngOnInit(): void { + this.todayDate = new Date().toISOString().slice(0, 10); + this.header_id = this.route.snapshot.params["id"]; + console.log(" id = ", this.header_id); + // this.duplicateArray=this.array; + this.getById(this.header_id); + + this.select('Today') + setTimeout(() => { + this.runtheQuery(); + }, 2000); + + + } + reportName; + builderLine; + builderLineData; + lineId; + adhocList:any[]; + SQLQuery; + getUrl; + stdParamfields; + DateParam; + getById(id: number) { + this.reportBuilderService.getrbDetailsById(id).subscribe( + (data) => { + console.log(data); + this.reportName = data.reportName; + this.builderLine = data.rpt_builder2_lines; + this.lineId = this.builderLine[0].id + this.builderLineData = JSON.parse(this.builderLine[0].model) ; + console.log(this.lineId,this.builderLineData); + this.builderLineData = this.builderLineData[0]; + this.adhocList = this.builderLineData.adhoc_param_html; + // this.adhocList = JSON.parse(adhocList); + this.DateParam = this.builderLineData.date_param_req; + this.getUrl = this.builderLineData.url; + console.log(this.adhocList,this.DateParam,this.getUrl) + this.getStdParam(this.header_id); + this.featchData(); + }); + + } + + featchData(){ + this.reportBuilderService.getAllDetailsByurl(this.getUrl).subscribe(data =>{ + console.log(data); + if(data.body){ + console.log(JSON.parse(data.body)); + this.rows = JSON.parse(data.body); + this.filterRows = JSON.parse(data.body); + } + }); + } + + dynamicHtml:any = []; + dynamicHtmlFlag = false; + stdParmas; + stdParamFlag = false; + getStdParam(id: any){ + console.log(this.builderLineData.std_param_html); + this.dynamicHtml = this.builderLineData.std_param_html; + // this.dynamicHtml = ['a.abc','b.abcde'] + if (this.dynamicHtml) { + for (const field of this.dynamicHtml) { + if (!this.dynamicForm.get(field)) { + this.dynamicForm.addControl(field, this._fb.control(null)); + } + } + console.log(this.dynamicForm.value); + } + if(this.dynamicHtml == undefined || this.dynamicHtml == ''){ + this.dynamicHtmlFlag = false; + }else{ + this.dynamicHtmlFlag = true; + } + + // this.reportBuilderService.getStdParamById(id).subscribe(data => { + // console.log(data); + // this.stdParmas = data; + // },(error)=>{ + // console.log(error.error.text) + // this.stdParmas = this.sanitizer.bypassSecurityTrustHtml(error.error.text); + + // if(this.stdParmas == undefined || this.stdParmas == ''){ + // this.stdParamFlag = false; + // }else{ + // this.stdParamFlag = true; + // } + // }); + } + modo2(val){ + console.log(val); + this.selectedfrom=val; + } + modo3(val){ + console.log(val); +this.selectedto=val; + } + duplicateArray=[]; + myDateValue: Date; + toDate:Date; + reverseAndTimeStamp(dateString) { + const reverse = new Date(dateString.split("-").reverse().join("-")); + return reverse.getTime(); + } + filterDate() { + let fromdate=moment(this.myDateValue).format('DD-MM-YYYY'); +console.log(fromdate) +let todate=moment(this.toDate).format('DD-MM-YYYY'); +if(this.myDateValue && this.toDate){ +const selectedMembers = this.array.filter(m => { + return this.reverseAndTimeStamp(m.fromDate) >= this.reverseAndTimeStamp(fromdate) && this.reverseAndTimeStamp(m.fromDate) <= this.reverseAndTimeStamp(todate) + } + ); + this.duplicateArray=selectedMembers +}else{ +this.duplicateArray=this.array +} + console.log(this.duplicateArray); // the result objects + this.modalselect=false; +} + + dateParameter: string; + from_date: Date; + to_date: Date; + + calculateThisWeek(): void { + // Calculate the current date + const currentDate = new Date(); + console.log(currentDate) + // Get the day of the week (0-6, where 0 is Sunday) + const currentDayOfWeek = currentDate.getDay(); + + // Calculate the number of days to subtract to get to Monday + const daysToMonday = currentDayOfWeek === 0 ? 6 : currentDayOfWeek - 1; + + // Calculate the date of Monday of the current week + this.from_date = new Date(currentDate); + this.from_date.setDate(currentDate.getDate() - daysToMonday); + + // Calculate the date of Sunday of the current week + this.to_date = new Date(this.from_date); + this.to_date.setDate(this.from_date.getDate() + 6); + console.log(this.from_date); + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=this.to_date; + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + calculateLastWeek(): void { + // Calculate the current date + const currentDate = new Date(); + + // Get the day of the week (0-6, where 0 is Sunday) + const currentDayOfWeek = currentDate.getDay(); + + // Calculate the number of days to subtract to get to Monday + const daysToMonday = currentDayOfWeek === 0 ? 6 : currentDayOfWeek - 1; + + // Calculate the date of Monday of the previous week + this.from_date = new Date(currentDate); + this.from_date.setDate(currentDate.getDate() - daysToMonday - 7); + + // Calculate the date of Sunday of the previous week + this.to_date = new Date(this.from_date); + this.to_date.setDate(this.from_date.getDate() + 6); + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=this.to_date; + + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + calculateThisMonth(): void { + // Calculate the current date + const currentDate = new Date(); + + // Calculate the date of the first day of the current month + this.from_date = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1); + + // Calculate the date of the last day of the current month + this.to_date = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0); + + // Set the 'to_date' to the last day of the current month at the end of the day + this.to_date.setHours(23, 59, 59, 999); + + // Optionally, you can set 'myDateValue' to 'from_date' if needed + this.myDateValue = this.from_date; + + // Optionally, you can set 'toDate' to 'to_date' if needed + this.toDate = this.to_date; + + console.log(this.from_date); + console.log(this.to_date); + + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + } + + + calculateLastMonth(): void { + // Calculate the current date + const currentDate = new Date(); + + // Calculate the date of the first day of the previous month + this.from_date = new Date(currentDate.getFullYear(), currentDate.getMonth() - 1, 1); + + // Calculate the date of the last day of the previous month + this.to_date = new Date(currentDate.getFullYear(), currentDate.getMonth(), 0); + + // Set the 'to_date' to the last day of the previous month at the end of the day + this.to_date.setHours(23, 59, 59, 999); + + // Optionally, you can set 'myDateValue' to 'from_date' if needed + this.myDateValue = this.from_date; + + // Optionally, you can set 'toDate' to 'to_date' if needed + this.toDate = this.to_date; + + console.log(this.from_date); + console.log(this.to_date); + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + } + + calculateThisYear(): void { + // Calculate the current date + const currentDate = new Date(); + + // Calculate the date of the first day of the current year + this.from_date = new Date(currentDate.getFullYear(), 0, 1); + + // Calculate the date of the last day of the current year + this.to_date = new Date(currentDate.getFullYear(), 11, 31); + + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=this.to_date; + + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + + calculateLastYear(): void { + // Calculate the current date + const currentDate = new Date(); + + // Calculate the date of the first day of the previous year + this.from_date = new Date(currentDate.getFullYear() - 1, 0, 1); + + // Calculate the date of the last day of the previous year + this.to_date = new Date(currentDate.getFullYear() - 1, 11, 31); + + this.myDateValue=this.from_date; + console.log(this.to_date); + console.log(this.myDateValue); + this.toDate=this.to_date; + + this.FromDatequery = this.from_date.toISOString().substring(0, 10); + this.ToDatequery = this.to_date.toISOString().substring(0, 10); + // this.filterDate(); + } + SelectdateType; + select(val:any){ + console.log(val); + this.SelectdateType = val; + if(val === 'This Week'){ + this.FromDatequery = null; + this.ToDatequery = null; + this.calculateThisWeek() + }else if(val === 'Last Week'){ + this.FromDatequery = null; + this.ToDatequery = null; + this.calculateLastWeek() + }else if(val === 'This Month'){ + this.FromDatequery = null; + this.ToDatequery = null; + this.calculateThisMonth() + }else if(val === 'Last Month'){ + this.FromDatequery = null; + this.ToDatequery = null; + this.calculateLastMonth() + // }else if(val === 'To Specific FromDate To To Date'){ + // this.openmodel() + } + else if(val === 'This Year'){ + this.FromDatequery = null; + this.ToDatequery = null; + this.calculateThisYear() + }else if(val === 'Last Year'){ + this.FromDatequery = null; + this.ToDatequery = null; + this.calculateLastYear() + } + else if(val === 'Today'){ + this.FromDatequery = null; + this.ToDatequery = null; + this.myDateValue = this.todayDate; + this.toDate = this.todayDate; + + this.FromDatequery = this.myDateValue; + this.ToDatequery = this.toDate; + } + else if(val === '--Select Particular--'){ + this.FromDatequery = null; + this.ToDatequery = null; + this.newfrom = null; + this.newto = null; + this.myDateValue = null; + this.toDate = null; + } + + + } + openmodel(){ + this.modalselect=true; + } + + onExport() { + const reportNameWithUnderscore = this.reportName + '_'; + this.excel.exportAsExcelFile(this.rows, reportNameWithUnderscore, + moment().format('YYYYMMDD_HHmmss')) + } + + downloadFile(format: string) { + const date = moment().format('YYYYMMDD_HHmmss') + const reportNameWithUnderscore = this.reportName + '_' + date; + this.reportBuilderService.downloadFile(format, this.filterRows,reportNameWithUnderscore) + } + back(){ + this.router.navigate(["../../all"], { relativeTo: this.route }); + } +FormattedAdhocparameters; +adocdata; +// showPlusIconRow: number | null = 0; + onAddLines(){ + console.log(this.serverData); + const lastRow = this.serverData[this.serverData.length - 1]; + if (lastRow && lastRow.fields_name !== '') { + let formattedString = ''; + for (const condition of this.serverData) { + const { andor, fields_name, condition: cond, value } = condition; + formattedString += ` ${andor} ${fields_name} ${cond} '${value}' `; + console.log(formattedString); + this.FormattedAdhocparameters = formattedString + // this.selectcolumn(this.serverData); + } + this.serverData.push({ + andor: "AND", + fields_name: "", + condition: "=", + value: "" + }); + } + // this.showPlusIconRow = this.serverData.length - 1; + + } + deleteRow(index) { + // this.serverData.splice(index, 1); + // if (index === this.showPlusIconRow) { + // this.showPlusIconRow = null; + // } + if (this.serverData.length > 1) { + // Get the item to be deleted + const deletedItem = this.serverData[index]; + + // Remove the item from the serverData array + this.serverData.splice(index, 1); + + // Remove the corresponding entries from selectedValues + if (Array.isArray(deletedItem)) { + for (const item of deletedItem) { + const columnName = item.fields_name; + if (this.selectedValues[columnName]) { + const value = item.value; + const indexInArray = this.selectedValues[columnName].indexOf(value); + if (indexInArray !== -1) { + this.selectedValues[columnName].splice(indexInArray, 1); + } + } + } + } else if (typeof deletedItem === 'object') { + const columnName = deletedItem.fields_name; + if (this.selectedValues[columnName]) { + const value = deletedItem.value; + const indexInArray = this.selectedValues[columnName].indexOf(value); + if (indexInArray !== -1) { + this.selectedValues[columnName].splice(indexInArray, 1); + } + } + } + } + + console.log(this.selectedValues); + this.filterRowsBySelectedValues(); + } + + + rows:any[]; + filterRows:any[]; + columns: any[]; + rowdata; + FromDatequery; + ToDatequery; + + newfrom; + newto; + + dateKey; +runtheQuery(){ + console.log(this.myDateValue , this.toDate); + let query = this.SQLQuery; +// let query + if(this.dynamicForm.value){ + // for(let i = 0; i < this.dynamicForm.value.length; i++){ + // // const query = this.SQLQuery + " AND " + this.dynamicForm.controls[i] + " = " + this.dynamicForm.value[i] + + // } + + + // Iterate over the keys in dynamicForm.value + Object.keys(this.dynamicForm.value).forEach((key) => { + // Append the condition for each key to the query + if (this.dynamicForm.value[key] !== null ) { + this.selectcolumn(this.dynamicForm.value); + // query += ` AND ${key} = '${this.dynamicForm.value[key]}'`; + } + // const regex = /FROM/i; + // const match = query.match(regex); + // if (this.dynamicForm.value[key] !== null && this.dynamicForm.value[key] !== '') { + // // query += ` AND ${key} = '${this.dynamicForm.value[key]}'`; + // const columnName = key.split('.').pop(); + // let coalesceExpression = `, COALESCE(${key}, '${this.dynamicForm.value[key]}') as ${columnName}`; + // if (match) { + // // Insert the COALESCE expression before the FROM keyword + // query = query.slice(0, match.index) + coalesceExpression +' '+ query.slice(match.index); + // } + // } + }); + // if(this.FromDatequery && this.ToDatequery){ + // query += ` AND cretaedat BETWEEN '${this.FromDatequery}' AND '${this.ToDatequery}'`; + + // }else + if(this.DateParam == true){ + this.dateKey = 'createdat'; + this.adhocList.forEach(key => { + if (key.includes("created_at")) { + this.dateKey ="created_at" ; + } + }); + this.adhocList.forEach(key => { + if (key.includes("createdAt")) { + this.dateKey ="createdAt" ; + } +}); + if(this.myDateValue && this.toDate){ + if(this.myDateValue){ + this.newfrom = new Date(this.myDateValue); + // const year = inputDate.getFullYear(); + // const month = String(inputDate.getMonth() + 1).padStart(2, "0"); // Months are zero-based, so add 1 + // const day = String(inputDate.getDate()).padStart(2, "0"); + // this.newfrom = `${year}-${month}-${day}`; + } + if(this.toDate){ + this.newto = new Date(this.toDate); + // const year = inputDate.getFullYear(); + // const month = String(inputDate.getMonth() + 1).padStart(2, "0"); // Months are zero-based, so add 1 + // const day = String(inputDate.getDate()).padStart(2, "0"); + // this.newto = `${year}-${month}-${day}`; + + } + query += ` AND ${this.dateKey} BETWEEN '${this.newfrom}' AND '${this.newto}'`; + +} + } + // if(this.myDateValue && this.toDate){ + // query += ` AND from_date = NVL(${this.myDateValue}from_date, 'from_date') AND to_date = NVL(${this.toDate}to_date, 'to_date')`; + // } + console.log(query); + } +// if(this.FormattedAdhocparameters){ +// query += this.FormattedAdhocparameters +// } + + this.selectcolumn(this.serverData); +// query = `SELECT a.name AS name, b.dob AS dob FROM abc a, abcde b WHERE a.name = 'gaurav' AND a.abc = NVL(b.abc, 'name') AND a.abcde = NVL(b.abcde, 'test');` + console.log(query); + this.reportBuilderService.getMasterData(query).subscribe((data) => { + // this.rows = data; + + console.log(this.rows); +this.rowdata= [this.rows]; + console.log(typeof this.rows); + if(data){ + this.toastr.success("Run Successfully") + } + var j; + var cart = []; + + for(var i = 0; i < data.length; i++) + { + var columnsIn = data[i]; + if(i==1) + { + for(var key in columnsIn) + { + j={prop:key , name: key}; + cart.push(j) + + } + } + } + this.columns = cart; + +}); +} +getHeaders() { +let headers: string[] = []; +if(this.rows) { + this.rows.forEach((value) => { + Object.keys(value).forEach((key) => { + if(!headers.find((header) => header == key)){ + headers.push(key) + } + + }) + + }) +} +return headers; +} + +getFilterHeaders() { + let headers: string[] = []; + if(this.filterRows) { + this.filterRows.forEach((value) => { + Object.keys(value).forEach((key) => { + if(!headers.find((header) => header == key)){ + headers.push(key) + } + }) + }) + } + return headers; + } + + + +selectedValues: { [key: string]: any[] } = {}; +selectcolumn(data: any) { + if (Array.isArray(data)) { + for (const item of data) { + const columnName = item.fields_name; + const value = item.value; + + // Check if fields_name is not empty and value is not null or empty string + if (columnName.trim() !== '') { + if (!this.selectedValues[columnName]) { + this.selectedValues[columnName] = []; + } + + if (value !== null && value.trim() !== '') { + // Only add the value if it's not null and not an empty string + if (!this.selectedValues[columnName].includes(value)) { + this.selectedValues[columnName].push(value); + } + } else { + // Remove the property if the value is null or empty string + delete this.selectedValues[columnName]; + } + } + } + } else if (typeof data === 'object') { + // Handle the first JSON structure (object) + console.log(data); + for (const key in data) { + if (data.hasOwnProperty(key)) { + const columnName = key; + const value = data[key]; + + if (!this.selectedValues[columnName]) { + this.selectedValues[columnName] = []; + } + + if (value !== null && value.trim() !== '') { + // Only add the value if it's not null and not an empty string + if (!this.selectedValues[columnName].includes(value)) { + this.selectedValues[columnName].push(value); + } + } else { + // Remove the property if the value is null or empty string + delete this.selectedValues[columnName]; + } + } + } + } + + console.log(this.selectedValues); + this.filterRowsBySelectedValues(); +} + + + + +filtered = false; +filterRowsBySelectedValues() { + // Create a filteredRows array to store the filtered data + const filteredRows = []; + + // Iterate through each row in the rows array + for (const row of this.rows) { + let isMatch = true; + + // Iterate through each column in the selectedValues object + for (const columnName in this.selectedValues) { + if (this.selectedValues.hasOwnProperty(columnName) && row.hasOwnProperty(columnName)) { + // Get the selected values for the current column + const selectedValuesForColumn = this.selectedValues[columnName]; + + // Get the type of the row's value for the current column + const rowValue = row[columnName]; + const rowValueType = typeof rowValue; + + if (rowValueType === 'boolean') { + // Handle boolean values + if (selectedValuesForColumn.length === 0) { + // If no specific value selected for boolean, include the row + continue; + } + + const selectedBooleanValue = selectedValuesForColumn[0] === 'true'; // Convert to boolean + if (selectedBooleanValue !== rowValue) { + isMatch = false; + break; // No need to check other columns if it's not a match + } + } else { + // Handle other data types, including numbers and strings + // Convert selected values to the appropriate type + const convertedValues = selectedValuesForColumn.map((value) => { + if (rowValueType === 'number') { + return parseFloat(value); // Convert to number + } else { + return value; // Keep the original value (string, etc.) + } + }); + + // Check if the row's value for the current column matches any selected value + if (!convertedValues.includes(rowValue)) { + isMatch = false; + break; // No need to check other columns if it's not a match + } + } + } + } + if(this.FromDatequery !== null && this.ToDatequery !== null){ + this.newfrom = this.FromDatequery + this.newto = this.ToDatequery + } + + if (this.newfrom !== null && this.newto !== null) { + // Extract the year, month, and day from newfrom and newto + const from = new Date(this.newfrom); + const to = new Date(this.newto); + const newfromYear = from.getFullYear(); + const newfromMonth = from.getMonth(); + const newfromDay = from.getDate(); + const newtoYear = to.getFullYear(); + const newtoMonth = to.getMonth(); + const newtoDay = to.getDate(); + + // Extract the year, month, and day from createdAtDate + const dateKey = this.dateKey; + const createdAtDate = new Date(row[dateKey]); + const createdAtYear = createdAtDate.getFullYear(); + const createdAtMonth = createdAtDate.getMonth(); + const createdAtDay = createdAtDate.getDate(); + + // Create new Date objects using the extracted year, month, and day + const newfromDate = new Date(newfromYear, newfromMonth, newfromDay); + const newtoDate = new Date(newtoYear, newtoMonth, newtoDay); + const createdAtDateOnly = new Date(createdAtYear, createdAtMonth, createdAtDay); + + // Check if the createdAtDateOnly is within the specified date range + if (createdAtDateOnly < newfromDate || createdAtDateOnly > newtoDate) { + isMatch = false; + } + } + + + // If the row matches all selected values, add it to the filteredRows array + if (isMatch) { + filteredRows.push(row); + } + } + + // Assign the filtered data to the rows + console.log(filteredRows); + this.filterRows = filteredRows; + + // Check if all arrays in selectedValues are empty + const allArraysEmpty = Object.values(this.selectedValues).every(arr => arr.length === 0); + + // Check if the date range is not selected + const dateRangeNotSelected = !this.newfrom || !this.newto; + + // Set this.filtered based on allArraysEmpty and dateRangeNotSelected + this.filtered = !allArraysEmpty || !dateRangeNotSelected; +} + + + +formatDate(dateObj: any): string { + // Extract individual date properties + const { year, monthValue, dayOfMonth, hour, minute, second } = dateObj; + + // Create a JavaScript Date object using the extracted properties + const formattedDate = new Date(year, monthValue - 1, dayOfMonth, hour, minute, second); + + // Format the date as needed (e.g., using built-in JavaScript date formatting) + return formattedDate.toLocaleString(); // Or any other desired formatting +} + +isDate(value: any): boolean { + return ( + value instanceof Date || + (value && + value.year !== undefined && + value.monthValue !== undefined && + value.dayOfMonth !== undefined) + ); +} + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.html new file mode 100644 index 0000000..25cdfb1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.html @@ -0,0 +1,374 @@ + + +
+ +
+
+
+ +
+
+ + + + +
+

SETUP TOOLS

+
+ +
+ +
+
+ + +
+
+
+ +
+
+ +
+

+
+
+ {{item.menuItemDesc}} +
+
+ +
+
+ {{item.menuItemDesc}} +
+
+
+
+
+
+ + +
+
+ +
+
+
+ +
+

+
+
+ Reports +
+
+ +
+
+ Reports Description +
+
+
+
+
+
+ + + +
+
+
+
+
+ +
+

+
+
+ Dashboard Description +
+
+ +
+
+ Dashboard +
+
+
+
+
+
+ +
+
+
+ + + + +
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.scss new file mode 100644 index 0000000..126a257 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.scss @@ -0,0 +1,47 @@ +// .card-body{ +// justify-content: center; +// margin: 50px auto 50px 80px; +// padding: 10px; +// } + +.card { + position: relative; + display: block; + background-color: #fff; + background-color: var(--clr-card-bg-color, white); + width: 100%; + // margin-top: 1.2rem; + height: 135px; + + margin: 10px; + +} + +.clr-col-sm-2{ + margin:20px 40px 20px 40px; +} + + +input[type='radio']{ + width: 14px !important; + height: 14px !important; + margin: 5px; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + appearance: none; + outline: 1px solid gray; + box-shadow: none; + font-size: 0.8em; + text-align: center; + line-height: 1em; + background: red; + } + .dots + { + width: 100px; + height:100px; + border: 1px solid; + border-radius: 50%; + //background-color: #f00; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.spec.ts new file mode 100644 index 0000000..2a94930 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SetupiconComponent } from './setupicon.component'; + +describe('SetupiconComponent', () => { + let component: SetupiconComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [SetupiconComponent] + }); + fixture = TestBed.createComponent(SetupiconComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.ts new file mode 100644 index 0000000..1b15dad --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/builder/setupicon/setupicon.component.ts @@ -0,0 +1,85 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MenuGroupService } from 'src/app/services/admin/menu-group.service'; +import { MenumaintanceService } from 'src/app/services/admin/menumaintance.service'; + +@Component({ + selector: 'app-setupicon', + templateUrl: './setupicon.component.html', + styleUrls: ['./setupicon.component.scss'] +}) +export class SetupiconComponent implements OnInit{ + + sub; + constructor(private router: Router, private route: ActivatedRoute,private menuservice:MenumaintanceService, private menuGroupService: MenuGroupService,) { } + + + ngOnInit(): void { + this.getById(1116) + } + + getById(id:any){ + this.menuservice.getbyid(id).subscribe((data)=>{ + this.sub=data; + console.log(this.sub) + }) + } + mc; + me; + md; + mv; + goToUserMaintenance(val) { + console.log(val); + this.menuGroupService.storeaddeditvalues(val); + this.mc=val.mcreate; + this.me=val.medit; + this.md=val.mdelete; + this.mv=val.mvisible; + if(this.mv == 'false'){ + this.router.navigate(['/**']) + } + this.router.navigate(['../'+ val.main_menu_action_name] , { relativeTo: this.route}); + } + + goToUsergrpMaintenance() { + this.router.navigate(['/cns-portal/usergrpmaintance'],{ relativeTo: this.route }); + } + + goToMenumaintance() { + this.router.navigate(['/cns-portal/menumaintance'],{ relativeTo: this.route }); + } + + goToMenuaccess() { + this.router.navigate(['/cns-portal/menuaccess'],{ relativeTo: this.route }); + } + + goToSystemparameters() { + this.router.navigate(['/cns-portal/systemparameters'],{ relativeTo: this.route }); + } + + goToAccesstype() { + this.router.navigate(['/cns-portal/accesstype'],{ relativeTo: this.route }); + } + + goToreport() { + this.router.navigate(['/cns-portal/reportbuild'],{ relativeTo: this.route }); + } + + goTodash() { + this.router.navigate(['/cns-portal/dashboardbuilder'],{ relativeTo: this.route }); + } + + +// mc; +// me; +// md; +// mv; +// send(val){ +// console.log(val); +// this.menuGroupService.storeaddeditvalues(val); +// this.mc=val.mcreate; +// this.me=val.medit; +// this.md=val.mdelete; +// this.mv=val.mvisible; + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.spec.ts new file mode 100644 index 0000000..7981adb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BulkimportComponent } from './bulkimport.component'; + +describe('BulkimportComponent', () => { + let component: BulkimportComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BulkimportComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkimportComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.ts new file mode 100644 index 0000000..d00d0dc --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimport.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-bulkimport', + templateUrl: './bulkimport.component.html', + styleUrls: ['./bulkimport.component.scss'] +}) +export class BulkimportComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.html new file mode 100644 index 0000000..e2ad5c2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.html @@ -0,0 +1,183 @@ +

Validation Rule

+Add Mode
+Validation Rules are proccessed while importing bulk records for respective entity +
+ + + + + + + + +
+ + + + + +
+
+
+ + +
+
+ + +
+ +
+ + + +
+
+ + +
+
Add Rule
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rule NameFrom SheetFrom Columnvalidation TableCheck ColumnReplacement Column (Id)Use Column (Id)Error MessageAction
+ + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+
+ + +
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.scss new file mode 100644 index 0000000..b05187f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.scss @@ -0,0 +1,81 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .entry-pg { + width: 750px; + } + + .button1::after { + content: none; + } + .button1:hover::after { + content: "ADD ROWS"; + } + + $bg-color: #dddddd; + + .section { + background-color: $bg-color; + height: 40px; + } + + .section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + input[type=text],[type=date],[type=number],textarea { + width: 100%; + padding: 15px 15px; + margin-top: 3px; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .required-field{ + color: red; + + } + select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.spec.ts new file mode 100644 index 0000000..187619d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BulkimportaddComponent } from './bulkimportadd.component'; + +describe('BulkimportaddComponent', () => { + let component: BulkimportaddComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BulkimportaddComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkimportaddComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.ts new file mode 100644 index 0000000..6e52222 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportadd/bulkimportadd.component.ts @@ -0,0 +1,236 @@ +import { HttpErrorResponse, HttpHeaderResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { BulkimportService } from 'src/app/services/fnd/bulkimport.service'; +@Component({ + selector: 'app-bulkimportadd', + templateUrl: './bulkimportadd.component.html', + styleUrls: ['./bulkimportadd.component.scss'] +}) +export class BulkimportaddComponent implements OnInit { + public entryForm: FormGroup; + selectedFile: File[]=[]; + + datajson; + transform:boolean = false; + checkTransform:boolean = true; + mapperdata; + + entityname; + description; + constructor(private _fb: FormBuilder, private router: Router,private toastr: ToastrService, + private route: ActivatedRoute,private dataservice:BulkimportService) { } + + ngOnInit(): void { + this.entryForm = this._fb.group({ + entity_name:[null], + rule_line:[null], + description: [null], + active: [true], + }); + + this.route.queryParams.subscribe(params => { + const data = params['data']; + this.entityname = params['name']; + this.description = params['description']; + + + if (data) { + try { + this.datajson = JSON.parse(data); + console.log('Received data:', this.datajson); + } catch (e) { console.error('Invalid JSON:', data);} + } + + + }); + + const condition = this.dataservice.getCondition(); + if(condition === 'mapper'){ + this.transform = true; + this.checkTransform = false; + if(this.datajson!== undefined){ + // if(this.entryForm.value.rule_line == 'undefined'){ this.entryForm.value.rule_line= '';} + const currentText = this.entryForm.value.rule_line = ''; + this.mapperdata = currentText + this.datajson; + // this.entryForm.value.rule_line = this.mapperdata; + // this.Updating(); + this.dataservice.setCondition(''); + } + } + + + console.log(this.entryForm.value); + + this.entryForm.patchValue({ + entity_name: this.entityname, + description: this.description, + }); + + console.log(this.entryForm.value); + } + + serverData = [ + { + "rulename": "", + "fromsheet": "", + "fromColumn": "", + "validationTable": "", + "checkColumn": "", + "replacementcolumn": "", + "useColumn": "", + "errormsg": "" + }]; + onAddLines(){ + this.serverData.push({ + rulename: "", + fromsheet:"", + fromColumn: "", + validationTable: "", + checkColumn: "", + replacementcolumn:"", + useColumn:"", + errormsg:"" + }); + console.log(this.serverData); + } + deleteRow(index) { + this.serverData.splice(index, 1); + } + + toastrShown: boolean = false; + onSubmit(){ + this.entryForm.value.rule_line = JSON.stringify(this.serverData); + console.log(this.entryForm.value); + this.dataservice.saveData(this.entryForm.value).subscribe((data)=>{ + console.log(data); + if (data) { + if (!this.toastrShown) { + this.toastrShown = true; // Set the flag to indicate that the toastr message has been shown + this.toastr.success("Added Successfully"); + setTimeout(() => { + this.router.navigate(["../all"], { relativeTo: this.route }); + }, 500); + } + } + }, (error: HttpHeaderResponse)=>{ + console.log(error); + if(error.status===202){ + this.toastr.success("Added Succesfully"); + } + if(error.status===404){ + this.toastr.error("Not Added"); + } + if(error.status===400){ + this.toastr.error("Not Added"); + } + }); + setTimeout(() => { + this.router.navigate(["../all"], { relativeTo: this.route }); + },500); + } + goback(){ + this.router.navigate(["../all"], { relativeTo: this.route }); + } + + + ///rules + checkTrans(){ + + console.log("rule line open") + this.dataservice.setCondition('mapper'); + + this.router.navigate(["../ruleline/"], { relativeTo: this.route, queryParams: {data:this.entryForm.value.rule_line, entityname:this.entryForm.value.entity_name, description:this.entryForm.value.description}, skipLocationChange: true}); + console.log(this.entryForm.value.entity_name); + + } + + mappperclick = false; + goFromMapper(){ + //this.mappperclick = true; + this.dataservice.setCondition('mapper'); + this.router.navigate(["../ruleline/"], { relativeTo: this.route, queryParams: {data:this.entryForm.value.rule_line, entityname:this.entryForm.value.entity_name, description:this.entryForm.value.description}, skipLocationChange: true}); + console.log(this.entryForm.value.entity_name); + } + + transReset(){ + this.entryForm.value.rule_line = undefined; + this.transform = false; + this.checkTransform = true; + } + + + headerData; + getColumns(table){ + console.log(table); + // console.log(this.getbyiddata.entityName); + this.dataservice.getColumnNames(table).subscribe((data) => { + console.log(data); + this.headerData = data; + }); +} + + checkTransformMapper = true; + transformMapper = false; + mapperText; + getHeaderData; + JsonHeader = []; + selectedSheetName: string | null = null; + columnJson =[]; + sheetNames:any; + checkTransMapper(){ + + console.log("Mapper open") + // console.log(this.storeData); + if(this.getHeaderData){ + this.checkTransformMapper = false; + this.transformMapper = true; + console.log(this.getHeaderData); + if(this.mapperText === "undefined"){ this.mapperText= '';} + const currentText = this.mapperText; + let trnsfData = currentText + '' +this.getHeaderData; + this.mapperText = trnsfData; + }else { + this.checkTransformMapper = true; + this.transformMapper = false; + } + + } + mappperModal = false; + goFromMapperField(){ + this.mappperModal = true; + this.selectedSheetName = this.sheetNames[0]; + const tablename = this.columnJson[0].TableName; + this.getColumns(tablename) + if(this.mapperText){ + try { + this.JsonHeader = JSON.parse(this.mapperText); + console.log('Received data:', this.JsonHeader ); + } catch (e) { console.error('Invalid JSON:', this.mapperText);} + }else + if (this.getHeaderData) { + // try { + // this.serverData = data.replace(/\[|\]|"/g, '').split(','); //(/\[|\]|'/g, '') //(/[\[\]"]/g, '') + // console.log('Received data:', this.serverData ); + // } catch (e) { console.error('Invalid JSON:', data);} + try { + this.JsonHeader = JSON.parse(this.getHeaderData); + console.log('Received data:', this.JsonHeader ); + } catch (e) { console.error('Invalid JSON:', this.getHeaderData);} + + } + } + + transResetMapper(){ + this.mapperText = ''; + this.transformMapper = false; + this.checkTransformMapper = true; + } + + onUpdate(){ + this.mappperModal = false; + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.html new file mode 100644 index 0000000..7a33825 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.html @@ -0,0 +1,81 @@ + + +
+ +
+
+
+

Validation Rule

+
+
+ + + +
+
+ + + Loading ... +
{{error}}
+ + + Entity Name + + + Description + + + Active + + + Action + + + {{user.entity_name}} + {{user.description}} + {{user.active}} + + + + Delete + + + + + + + + + + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+
+ + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.scss new file mode 100644 index 0000000..c05b1dc --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.scss @@ -0,0 +1,4 @@ +.delete,.heading{ + text-align: center; + color: red; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.spec.ts new file mode 100644 index 0000000..4627941 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BulkimportallComponent } from './bulkimportall.component'; + +describe('BulkimportallComponent', () => { + let component: BulkimportallComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BulkimportallComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkimportallComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.ts new file mode 100644 index 0000000..008c056 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportall/bulkimportall.component.ts @@ -0,0 +1,87 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { ExcelService } from 'src/app/services/excel.service'; +import * as moment from 'moment'; +import { BulkimportService } from 'src/app/services/fnd/bulkimport.service'; + +@Component({ + selector: 'app-bulkimportall', + templateUrl: './bulkimportall.component.html', + styleUrls: ['./bulkimportall.component.scss'] +}) +export class BulkimportallComponent implements OnInit { + + loading = false; + error; + selected: any[] = []; + rowSelected :any= {}; + modaldelete=false; + data; + constructor(private router: Router, private toastr: ToastrService, + private route: ActivatedRoute,private excel: ExcelService,private bulkimportService:BulkimportService,) { } + + ngOnInit(): void { + this.getall(); + } + getall(){ + this.bulkimportService.getDetails().subscribe((data)=>{ + console.log(data); + this.data=data; + if(this.data.length == 0){ + this.error="No data Available"; + console.log(this.error); + } + + },(error) => { + console.log(error); + if(error){ + this.error="No data Available OR server Error"; + } + }); + + } + goToAdd(){ + this.router.navigate(["../add"], { relativeTo: this.route }); + + } + onExport() { + this.excel.exportAsExcelFile(this.data, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + goToEdit(id) { + this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id){ + this.modaldelete = false; + console.log("in delete "+id); + this.bulkimportService.deleteById(id).subscribe( + (data) => { + console.log(data); + this.ngOnInit(); + if (data == null || data) { + this.toastr.success('Deleted successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(isNaN(error)){ + this.toastr.success('Deleted successfully'); + }else{ + this.toastr.error('Not Deleted Data Getting Some Error'); + } + } + ); +} + +activeTab: number = 1; + +showTab(tabNumber: number) { + this.activeTab = tabNumber; +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.html new file mode 100644 index 0000000..ed86b6a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.html @@ -0,0 +1,116 @@ +

Validation Rule

+Edit Mode
+Validation Rules are proccessed while importing bulk records for respective entity +
+
+
+
+
+ + +
+
+ + +
+ +
+ + + +
+
+ + +
+
Select open to add rules, select reset to delete existing rules
+
+
+
+
Add Rule
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rule NameFrom SheetFrom Columnvalidation TableCheck ColumnReplacement Column (Id)Use Column (Id)Error MessageAction
+ + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+
+ + +
+
+ +
+
+
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.scss new file mode 100644 index 0000000..b05187f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.scss @@ -0,0 +1,81 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .entry-pg { + width: 750px; + } + + .button1::after { + content: none; + } + .button1:hover::after { + content: "ADD ROWS"; + } + + $bg-color: #dddddd; + + .section { + background-color: $bg-color; + height: 40px; + } + + .section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + input[type=text],[type=date],[type=number],textarea { + width: 100%; + padding: 15px 15px; + margin-top: 3px; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .required-field{ + color: red; + + } + select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.spec.ts new file mode 100644 index 0000000..766987b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BulkimporteditComponent } from './bulkimportedit.component'; + +describe('BulkimporteditComponent', () => { + let component: BulkimporteditComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BulkimporteditComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkimporteditComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.ts new file mode 100644 index 0000000..34cdd86 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportedit/bulkimportedit.component.ts @@ -0,0 +1,200 @@ +import { HttpErrorResponse, HttpHeaderResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { BulkimportService } from 'src/app/services/fnd/bulkimport.service'; + +@Component({ + selector: 'app-bulkimportedit', + templateUrl: './bulkimportedit.component.html', + styleUrls: ['./bulkimportedit.component.scss'] +}) +export class BulkimporteditComponent implements OnInit { + public entryForm: FormGroup; + selectedFile: File[]=[]; + id; + datajson; + transform:boolean = false; + checkTransform:boolean = true; + mapperdata; + tdata: any = {}; + entityname; + description; + constructor(private _fb: FormBuilder, private router: Router,private toastr: ToastrService, + private route: ActivatedRoute,private dataservice:BulkimportService) { } + + ngOnInit(): void { + this.id = this.route.snapshot.params["id"]; + console.log("update with id = ", this.id); + + // this.entryForm = this._fb.group({ + // entity_name:[null], + // rule_line:[null], + // description: [null], + // active: [true], + // }); + + + this.dataservice.getDetailsById(this.id).subscribe(data => { + this.tdata = data; + this.serverData = JSON.parse(data.rule_line); + console.log(this.tdata); + }, + (err) => { + console.log(err); + }); + + + setTimeout(() => { + + + this.route.queryParams.subscribe(params => { + const data = params['data']; + this.entityname = params['name']; + this.description = params['description']; + + + if (data) { + try { + this.datajson = JSON.parse(data); + console.log('Received data:', this.datajson); + } catch (e) { console.error('Invalid JSON:', data);} + } + + + }); + + if(this.tdata.rule_line !== '' && this.tdata.rule_line !== null && this.tdata.rule_line !== undefined) { + console.log(this.tdata.rule_line) + this.checkTransform = false; + this.transform = true; + }else{ + console.log(this.tdata.rule_line) + this.checkTransform = true; + this.transform = false; + this.checkTransform = true; + } + + const condition = this.dataservice.getCondition(); + if(condition === 'mapper'){ + console.log("datagetting"); + this.transform = true; + this.checkTransform = false; + if(this.datajson!== undefined){ + // if(this.entryForm.value.rule_line == 'undefined'){ this.entryForm.value.rule_line= '';} + const currentText = this.tdata.rule_line = ''; + this.mapperdata = currentText + this.datajson; + this.tdata.rule_line = this.mapperdata; + // this.Updating(); + this.dataservice.setCondition(''); + } + } +}, 1000); + + console.log(this.tdata); + // this.entryForm.patchValue({ + // entity_name: this.entityname, + // description: this.description, + // }); + // console.log(this.entryForm.value); + } + + getById(id: number) { + + } + + serverData = []; + onAddLines(){ + this.serverData.push({ + rulename: "", + fromsheet:"", + fromColumn: "", + validationTable: "", + checkColumn: "", + replacementcolumn:"", + useColumn:"", + errormsg:"" + }); + console.log(this.serverData); + } + deleteRow(index) { + this.serverData.splice(index, 1); + } + + toastrShown: boolean = false; + onSubmit(){ + this.tdata.rule_line = JSON.stringify(this.serverData); + console.log(this.tdata); + this.dataservice.updateData(this.tdata, this.id).subscribe((data)=>{ + console.log(data); + if (data.operationStatus) { + this.toastr.warning(data.operationMessage); + }else{ + if (!this.toastrShown) { + this.toastrShown = true; // Set the flag to indicate that the toastr message has been shown + this.toastr.success("Update Successfully"); + setTimeout(() => { + this.router.navigate(["../../all"], { relativeTo: this.route }); + }, 500); + } + } + }, (error: HttpHeaderResponse)=>{ + console.log(error); + if(error.status===202){ + this.toastr.success("Update Succesfully"); + } + if(error.status===404){ + this.toastr.error("Not Update"); + } + if(error.status===400){ + this.toastr.error("Not Update"); + } + }); + setTimeout(() => { + this.router.navigate(["../../all"], { relativeTo: this.route }); + },500); + } + + Updating(){ + console.log(this.tdata); + this.dataservice.updateData(this.tdata, this.id).subscribe(data=>{ + console.log(data); + // this.ngOnInit(); + }, (error: HttpHeaderResponse)=>{ + console.log(error); + }); + } + + goback(){ + this.router.navigate(["../../all"], { relativeTo: this.route }); + } + + + + ///rules + checkTrans(){ + + console.log("rule line open") + this.dataservice.setCondition('mapper'); + + this.router.navigate(["../../rulelineedit/"], { relativeTo: this.route, queryParams: {id:this.id, data:this.tdata.rule_line, entityname:this.tdata.entity_name, description:this.tdata.description}, skipLocationChange: true}); + console.log(this.tdata.rule_line); + + } + + mappperclick = false; + goFromMapper(){ + //this.mappperclick = true; + this.dataservice.setCondition('mapper'); + this.router.navigate(["../../rulelineedit/"], { relativeTo: this.route, queryParams: {id:this.id, data:this.tdata.rule_line, entityname:this.tdata.entity_name, description:this.tdata.description}, skipLocationChange: true}); + console.log(this.tdata.rule_line); + } + + transReset(){ + this.tdata.rule_line = undefined; + this.transform = false; + this.checkTransform = true; + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.html new file mode 100644 index 0000000..5efccb0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.html @@ -0,0 +1,73 @@ +

Add Rule Lines

+
+
+
+ +
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rule NameFrom SheetFrom Columnvalidation TableCheck ColumnReplacement Column (Id)Use Column (Id)Error MessageAction
+ + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + +
+
+
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.scss new file mode 100644 index 0000000..c1113c0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.scss @@ -0,0 +1,51 @@ +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.35rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + input[type=text],textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + .required-field{ + color: red; + + } + .postColumn{ + border: 1px solid #ccc; + width: 78%; + margin-left: 15px; + } + .colName{ + text-align: center; + padding: 5px; + } + .colfields{ + border: 1px solid black; + margin: 17px; + text-align: center; + padding: 3px; + } + .fieldWrapper{ + margin-top: 20px; + } + .center { + text-align: center; + } + + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.spec.ts new file mode 100644 index 0000000..cd66c14 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BulkimporteditlineComponent } from './bulkimporteditline.component'; + +describe('BulkimporteditlineComponent', () => { + let component: BulkimporteditlineComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BulkimporteditlineComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkimporteditlineComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.ts new file mode 100644 index 0000000..bfee4cf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component.ts @@ -0,0 +1,172 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, FormArray } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { DataflowService } from 'src/app/services/fnd/dataflow.service'; +// import { NewwebhookService } from 'src/app/services/fnd/newwebhook.service'; +// import { SftplocationService } from 'src/app/services/fnd/sftplocation.service'; +// import { Webhookservicesui1Service } from 'src/app/services/fnd/webhookservicesui1.service'; + +@Component({ + selector: 'app-bulkimporteditline', + templateUrl: './bulkimporteditline.component.html', + styleUrls: ['./bulkimporteditline.component.scss'] +}) +export class BulkimporteditlineComponent implements OnInit { + serverData = []; + id; + title + sourceTable; + sourceFData; + Mid:any; + flowType; + remoteD; + sftpDId; + emailDId; + key; + webhookDId; + + name; + description; + // data = ['email', 'password'] + constructor( private router : Router, + private route: ActivatedRoute, + private dataservice:DataflowService, + // private sftpService:SftplocationService, + // private emaildbService:Webhookservicesui1Service, + // private webhookService:NewwebhookService, + private _fb:FormBuilder) { } + + public entryForm: FormGroup; + + ngOnInit(): void { + // this.entryForm = this._fb.group({ + // connector_json: this._fb.array([]) + // }); + + this.route.queryParams.subscribe(params => { + this.id = params['id']; + // this.Mid = params['mid']; + const data = params['data']; + this.name = params['entityname']; + this.description = params['description']; + if (data) { + // try { + // this.serverData = data.replace(/\[|\]|"/g, '').split(','); //(/\[|\]|'/g, '') //(/[\[\]"]/g, '') + // console.log('Received data:', this.serverData ); + // } catch (e) { console.error('Invalid JSON:', data);} + try { + this.serverData = JSON.parse(data); + console.log('Received data:', this.serverData ); + } catch (e) { console.error('Invalid JSON:', data);} + } + // this.serverData.map(d => + // this.person.push(this._fb.group({ andor: '', fields_name:'',condition:'',value: d ,})) + // ); + + }); + + const condition = this.dataservice.getCondition(); + if(condition === 'mapper'){ + console.log("mapper") + }else if(condition === 'filter'){ + console.log("filter"); + } + console.log(this.name,this.description); + + + + + } + + columnList(){ + + this.dataservice.getColumnListFromSourceTable(this.id,this.title).subscribe((data)=>{ + console.log(data); + this.sourceTable = data; + }); + } + + // sftpHeader(){ + // this.sftpService.getExcelHeaders(this.title,this.remoteD).subscribe((headers) => { + // console.log("sftp Data",headers); + // this.sourceTable = headers; + // }); + // } + + // emailHeader(){ + // this.emaildbService.getHeadersFromExcelMail(this.emailDId,this.title,this.key).subscribe((headers)=>{ + // console.log("email Data",headers); + // this.sourceTable = headers; + // }); + // } + + // webhookHeader(){ + // this.webhookService.getHeadersFromWBExcelMail(this.webhookDId,this.title,this.key).subscribe((headers)=>{ + // console.log("webhook Data",headers); + // this.sourceTable = headers; + // }); + // } + + + FilDemo(){ + let data = [""]; + const defaultObject = { + andor: "AND", + fields_name: "", + condition: "=", +} + const objectArray = data.map(value => ({ + ...defaultObject, + value: value, + })); + console.log(objectArray); + this.sourceFData = JSON.stringify(objectArray); + + try { + this.serverData = JSON.parse(this.sourceFData); + console.log('Received data:', this.serverData ); + } catch (e) { console.error('Invalid JSON:', this.sourceFData);} + + + + } + // get person() { + // return this.entryForm.get("connector_json") as FormArray; + // } + + onUpdate(){ + console.log(this.serverData); + let serverData = JSON.stringify(this.serverData); + console.log(serverData); + let product = JSON.stringify(serverData); + console.log(product); + console.log(this.Mid); + this.router.navigate(['../edit/'+ this.id],{relativeTo:this.route, queryParams: { data: product, name:this.name, description:this.description }, skipLocationChange: true}); + } + back(){ + this.router.navigate(['../edit/'+ this.id], { relativeTo: this.route }); + this.dataservice.setCondition(''); + } + + onAddLines(){ + this.serverData.push({ + rulename: "", + fromsheet:"", + fromColumn: "", + validationTable: "", + checkColumn: "", + replacementcolumn:"", + useColumn:"", + errormsg:"" + }); + } + deleteRow(index) { + this.serverData.splice(index, 1); + } + + // postApi(){ + // this.data.map(d => + // this.person.push(this._fb.group({ fieldname: d , checkboxval:'',sample_format:'',mapped_fields:'',dest_format:''})) + // ); + // } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.html new file mode 100644 index 0000000..5efccb0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.html @@ -0,0 +1,73 @@ +

Add Rule Lines

+
+
+
+ +
+ +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rule NameFrom SheetFrom Columnvalidation TableCheck ColumnReplacement Column (Id)Use Column (Id)Error MessageAction
+ + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + +
+
+
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.scss new file mode 100644 index 0000000..c1113c0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.scss @@ -0,0 +1,51 @@ +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.35rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + input[type=text],textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + .required-field{ + color: red; + + } + .postColumn{ + border: 1px solid #ccc; + width: 78%; + margin-left: 15px; + } + .colName{ + text-align: center; + padding: 5px; + } + .colfields{ + border: 1px solid black; + margin: 17px; + text-align: center; + padding: 3px; + } + .fieldWrapper{ + margin-top: 20px; + } + .center { + text-align: center; + } + + select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.spec.ts new file mode 100644 index 0000000..2e7b108 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BulkimportlineComponent } from './bulkimportline.component'; + +describe('BulkimportlineComponent', () => { + let component: BulkimportlineComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BulkimportlineComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BulkimportlineComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.ts new file mode 100644 index 0000000..0bc92f2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/bulkimport/bulkimportline/bulkimportline.component.ts @@ -0,0 +1,175 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, FormArray } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { DataflowService } from 'src/app/services/fnd/dataflow.service'; +// import { NewwebhookService } from 'src/app/services/fnd/newwebhook.service'; +// import { SftplocationService } from 'src/app/services/fnd/sftplocation.service'; +// import { Webhookservicesui1Service } from 'src/app/services/fnd/webhookservicesui1.service'; + +@Component({ + selector: 'app-bulkimportline', + templateUrl: './bulkimportline.component.html', + styleUrls: ['./bulkimportline.component.scss'] +}) +export class BulkimportlineComponent implements OnInit { + serverData = []; + andor = ['AND', 'OR','NOT']; + fieldname = ['name1', 'name2']; + condition = ['=','!=','<','>','<=','>=','LIKE','BETWEEN','IN']; + id; + title + sourceTable; + sourceFData; + Mid:any; + flowType; + remoteD; + sftpDId; + emailDId; + key; + webhookDId; + + name; + description; + // data = ['email', 'password'] + constructor( private router : Router, + private route: ActivatedRoute, + private dataservice:DataflowService, + // private sftpService:SftplocationService, + // private emaildbService:Webhookservicesui1Service, + // private webhookService:NewwebhookService, + private _fb:FormBuilder) { } + + public entryForm: FormGroup; + + ngOnInit(): void { + // this.entryForm = this._fb.group({ + // connector_json: this._fb.array([]) + // }); + + this.route.queryParams.subscribe(params => { + // this.id = params['id']; + // this.Mid = params['mid']; + const data = params['data']; + this.name = params['entityname']; + this.description = params['description']; + if (data) { + // try { + // this.serverData = data.replace(/\[|\]|"/g, '').split(','); //(/\[|\]|'/g, '') //(/[\[\]"]/g, '') + // console.log('Received data:', this.serverData ); + // } catch (e) { console.error('Invalid JSON:', data);} + try { + this.serverData = JSON.parse(data); + console.log('Received data:', this.serverData ); + } catch (e) { console.error('Invalid JSON:', data);} + } + // this.serverData.map(d => + // this.person.push(this._fb.group({ andor: '', fields_name:'',condition:'',value: d ,})) + // ); + + }); + + const condition = this.dataservice.getCondition(); + if(condition === 'mapper'){ + console.log("mapper") + }else if(condition === 'filter'){ + console.log("filter"); + } + console.log(this.name,this.description); + + + + + } + + columnList(){ + + this.dataservice.getColumnListFromSourceTable(this.id,this.title).subscribe((data)=>{ + console.log(data); + this.sourceTable = data; + }); + } + + // sftpHeader(){ + // this.sftpService.getExcelHeaders(this.title,this.remoteD).subscribe((headers) => { + // console.log("sftp Data",headers); + // this.sourceTable = headers; + // }); + // } + + // emailHeader(){ + // this.emaildbService.getHeadersFromExcelMail(this.emailDId,this.title,this.key).subscribe((headers)=>{ + // console.log("email Data",headers); + // this.sourceTable = headers; + // }); + // } + + // webhookHeader(){ + // this.webhookService.getHeadersFromWBExcelMail(this.webhookDId,this.title,this.key).subscribe((headers)=>{ + // console.log("webhook Data",headers); + // this.sourceTable = headers; + // }); + // } + + + FilDemo(){ + let data = [""]; + const defaultObject = { + andor: "AND", + fields_name: "", + condition: "=", +} + const objectArray = data.map(value => ({ + ...defaultObject, + value: value, + })); + console.log(objectArray); + this.sourceFData = JSON.stringify(objectArray); + + try { + this.serverData = JSON.parse(this.sourceFData); + console.log('Received data:', this.serverData ); + } catch (e) { console.error('Invalid JSON:', this.sourceFData);} + + + + } + // get person() { + // return this.entryForm.get("connector_json") as FormArray; + // } + + onUpdate(){ + console.log(this.serverData); + let serverData = JSON.stringify(this.serverData); + console.log(serverData); + let product = JSON.stringify(serverData); + console.log(product); + console.log(this.Mid); + this.router.navigate(['../add'],{relativeTo:this.route, queryParams: { data: product, name:this.name, description:this.description }, skipLocationChange: true}); + } + back(){ + this.router.navigate(["../add"], { relativeTo: this.route }); + this.dataservice.setCondition(''); + } + + onAddLines(){ + this.serverData.push({ + rulename: "", + fromsheet:"", + fromColumn: "", + validationTable: "", + checkColumn: "", + replacementcolumn:"", + useColumn:"", + errormsg:"" + }); + } + deleteRow(index) { + this.serverData.splice(index, 1); + } + + // postApi(){ + // this.data.map(d => + // this.person.push(this._fb.group({ fieldname: d , checkboxval:'',sample_format:'',mapped_fields:'',dest_format:''})) + // ); + // } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.html new file mode 100644 index 0000000..63c652d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.html @@ -0,0 +1,173 @@ + + +
+
+
+

Data Management

+
+
+ + + + +
+
+ + Loading ... +
{{error}}
+ + + Go To + + + + + Entity Name + + + + File Name + + + Action + + + Workflow + {{user.entityName}} + {{user.file_name}} + + + + Delete + + + + + + + + + + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+
+ + + + + + + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.scss new file mode 100644 index 0000000..c6c7e70 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.scss @@ -0,0 +1,84 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } +} + +.entry-pg { + width: 750px; +} + +.button1::after { + content: none; +} +.button1:hover::after { + content: "ADD ROWS"; +} + +$bg-color: #dddddd; + +.section { + background-color: $bg-color; + height: 40px; +} + +.section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +.center { + text-align: center; +} +input[type=text],[type=date],[type=number],textarea { + width: 100%; + padding: 15px 15px; + margin-top: 3px; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.required-field{ + color: red; + +} +select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} +.delete,.heading{ + text-align: center; + color: red; +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.spec.ts new file mode 100644 index 0000000..19d47ed --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DatamanagementComponent } from './datamanagement.component'; + +describe('DatamanagementComponent', () => { + let component: DatamanagementComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DatamanagementComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DatamanagementComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.ts new file mode 100644 index 0000000..f9bec9d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamanagement/datamanagement.component.ts @@ -0,0 +1,189 @@ +import { HttpErrorResponse, HttpHeaderResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import * as moment from 'moment'; +import { ToastrService } from 'ngx-toastr'; +import { DatamanagementService } from 'src/app/services/fnd/datamanagement.service'; +import { UsermaintanceService } from 'src/app/services/admin/usermaintance.service'; +import { ExcelService } from 'src/app/services/excel.service'; +import { BulkimportService } from 'src/app/services/fnd/bulkimport.service'; +@Component({ + selector: 'app-datamanagement', + templateUrl: './datamanagement.component.html', + styleUrls: ['./datamanagement.component.scss'] +}) +export class DatamanagementComponent implements OnInit { + rowSelected :any= {}; + modaldelete=false; + modalEdit=false; + modalAdd= false; + public entryForm: FormGroup; + selected: any[] = []; + error; + loading = false; + data; + udata; + selectedFile: File[]=[]; + entitydata; + // tableList =['priority','impact','urgency','category','state','contact_type','customer','handler']; + tableList; + constructor( private excel: ExcelService, private datamservice:DatamanagementService, private toastr: ToastrService, + private _fb: FormBuilder, private userservice:UsermaintanceService, private router: Router,private bulkimportService:BulkimportService, + private route: ActivatedRoute,) { } + + ngOnInit(): void { + this.getall(); + this.getuserall(); + this.allentity(); + this.entitygetall(); + this.entryForm = this._fb.group({ + user_id:[null], + file_name:[null], + entityName:[null], + // entity_name:[null], + file_type:[null], + + }); +// this.datamservice.getjson().subscribe((data)=>{ +// console.log(data); +// }) + } + getall(){ + this.datamservice.getall().subscribe((data)=>{ + console.log(data); + this.data=data; + if(this.data.length == 0){ + this.error="No data Available"; + console.log(this.error); + } + + },(error) => { + console.log(error); + if(error){ + this.error="No data Available OR server Error"; + } + }); + } + + entitygetall(){ + this.bulkimportService.getDetails().subscribe((data)=>{ + console.log(data); + this.tableList=data; + },(error) => { + console.log(error); + }); + } + + + getuserall(){ + this.userservice.getAll().subscribe((data)=>{ + console.log(data); + this.udata=data; + }) + } + allentity(){ + // this.datamservice.getallentity().subscribe((data)=>{ + // console.log(data); + // this.entitydata=data; + // }, (error: HttpHeaderResponse)=>{ + // console.log(error); + // }) + } + onExport() { + this.excel.exportAsExcelFile(this.data, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + public onFileChanged(event) { + //Select File + console.log(event); + this.selectedFile = event.target.files[0]; + + } + goToAdd() { +this.modalAdd = true; + } + onSubmit(){ +console.log(this.entryForm.value); +this.datamservice.create(this.selectedFile,this.entryForm.value.entityName).subscribe((data)=>{ + console.log(data); + if(data.status===202){ + this.toastr.success("Added Succesfully"); + } + setTimeout(() => { + this.getall(); + }, 1000); + this.getall(); +}, (error: HttpErrorResponse)=>{ + console.log(error); + if(error.status >=200 && error.status <= 299){ + this.toastr.success("Added Succesfully"); + setTimeout(() => { + this.getall(); + }, 1000); + } + if(error.status===404){ + this.toastr.error("Not Added"); + } + this.ngOnInit(); +}); +this.modalAdd=false; + } + onEdit(row) { + this.rowSelected = row; + this.modalEdit = true; + } + + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id) + { + this.modaldelete = false; + console.log("in delete "+id); + this.datamservice.delete(id).subscribe( + (data) => { + console.log(data); + + this.ngOnInit(); + + if(data.status >=200 && data.status <= 299 || data == null) { + this.toastr.success("Delete Succesfully"); + } + }, (error: HttpHeaderResponse)=>{ + console.log(error); + if(error.status >=200 && error.status <= 299){ + this.toastr.success("Delete Succesfully"); + } + if(error.status >=400 && error.status <= 499){ + this.toastr.error("Not Delete"); + } + if(error.status >=500 && error.status <= 599){ + this.toastr.error("Server Error"); + } + }); + this.ngOnInit(); + } + onUpdate(id) { + this.modalEdit = false; + this.datamservice.update(id,this.rowSelected,this.selectedFile).subscribe( + (data) => { + console.log(data); + if(data.status===202){ + this.toastr.success("Updated Succesfully"); + } + + }, + (error: HttpErrorResponse) => { + console.log(error.message); + } + ); + this.ngOnInit(); +} +work(id:any){ + console.log(id); + this.router.navigate(["../dataworkflow/"+ id], { relativeTo: this.route }); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.html new file mode 100644 index 0000000..2c7ad2e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.html @@ -0,0 +1,449 @@ + + + + + + + +
+ + + + + + + +
+ +
+
+
+
+
+
+

Data Import

+
+
+ +
+
+ +
+ + + + Step 0 + Review + + + + Step 1 + Table Mapping + + + + Step 2 + Data Mapping + + + + Step 3 + Import + + + + Step 4 + Download Excel + + + + Step 5 + Finish + + + +
+
+
+
+
+ + +
+
+

{{tableName}} Table

+

Update {{college.studentname}}

+
+ +
+ + +
+
+ + + +
+

{{ sheetName }}

+
+ + + + + + + + + + + +
{{ co }}
{{ item[key] }}
+
+
+
+
+ + + + + +
+ +
+
+
+
+ +
+ +
+ +
+
+

Table Mapping

+ +
+ +
+
+
+ + + + + + + + + + + + + +
Sheet NameTable Name
+ + + + +
+
+
+ + + + + + + +
+
+
+ +
+
+
+ +
+
+ + +
+
+

Data Mapping

+ +
+ +
+
+
+
+ Enable TransFormation + + +
+
+ + +
+
+ +
+
+
Add Rule line
+ + +
+
+ + +
+
+
+ + + + + + + +
+
+
+ +
+
+
+ +
+
+ +
+
+

Importing Data

+ +
+
+
+
+ + +
+

{{ sheetName }}

+
+ + + + + + + + + + + +
{{ co }}
{{ item[key] }}
+
+
+
+ + + + + + +
+ +
+
+

Download Excel

+
+
+
+ + + + +
+ +
+
+

File is Downloaded

+
+ + + +
+ + +
+ + + + + + + + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.scss new file mode 100644 index 0000000..a96c883 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.scss @@ -0,0 +1,110 @@ +.horizontal{ + width: 25%; + padding: 5px; +} +.horizontal1{ + width: 50%; + padding: 10px; +} +.middle{ + width: 33%; + padding: 10px; +} +.middle1{ + width: 75%; + padding: 10px; +} + +.full{ + width: 100%; + padding: 10px; +} + +// input[type=text],[type=date] { +// width: 100%; +// padding: 12px 20px; +// margin: 8px 0; +// display: inline-block; +// border: 1px solid #ccc; +// border-radius: 4px; +// box-sizing: border-box; +// } +// textarea +// { +// width: 100%; +// padding: 15px 15px; +// display: inline-block; +// border: 1px solid #ccc; +// border-radius: 4px; +// box-sizing: border-box; +// } + +.center{ + color: blue; +} +@media (max-width: 600px){ +.horizontal,.middle,.horizontal1,.middle1 { +width: 100%; +}} + + + .postColumn{ + border: 1px solid #ccc; + width: 78%; + margin-left: 15px; + } + .colName{ + text-align: center; + padding: 5px; + } + .fieldWrapper{ + margin-top: 20px; + } + + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.35rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + input[type=text],textarea { + width: 100%; + padding: 15px 15px; + // margin: 8px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + .required-field{ + color: red; + + } + .postColumn{ + border: 1px solid #ccc; + width: 78%; + margin-left: 15px; + } + .colName{ + text-align: center; + padding: 5px; + } + .colfields{ + border: 1px solid black; + margin: 17px; + text-align: center; + padding: 3px; + } + + select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.spec.ts new file mode 100644 index 0000000..5e4af86 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DatamananementworkflowComponent } from './datamananementworkflow.component'; + +describe('DatamananementworkflowComponent', () => { + let component: DatamananementworkflowComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DatamananementworkflowComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DatamananementworkflowComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.ts new file mode 100644 index 0000000..db4efd1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/datamananementworkflow/datamananementworkflow.component.ts @@ -0,0 +1,558 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { DatamanagementService } from 'src/app/services/fnd/datamanagement.service'; +import { ExcelService } from 'src/app/services/excel.service'; +import { BulkimportService } from 'src/app/services/fnd/bulkimport.service'; + +@Component({ + selector: 'app-datamananementworkflow', + templateUrl: './datamananementworkflow.component.html', + styleUrls: ['./datamananementworkflow.component.scss'] +}) +export class DatamananementworkflowComponent implements OnInit { + data; + getbyiddata; + id; + columns: any[]; + rows:any[]; + bodyrow:any[]=[]; + getHeaderData; + JsonHeader = []; + rowdata; + transform:boolean = false; + checkTransform:boolean = true; + mapperText:string = ''; + changeKeyJson:any[]; + tableName; + + + + // Layout direction changing + +layout = { + direction: "horizontal", + block1: "clr-col-lg-12 clr-col-12 height container", + block2: "clr-col-lg-12 clr-col-12 container", +} +timelineStyle = { + step0: { state: "current", open: true, failed: false }, + step1: { state: "not-started", open: false, failed: false }, + step2: { state: "not-started", open: false, failed: false }, + step3: { state: "not-started", open: false, failed: false }, + step4: { state: "not-started", open: false, failed: false }, + step5: { state: "not-started", open: false, failed: false }, +}; + +json: string = ""; + luisApp = + { + name: '', + created: 1, + trained: 1, + tested: 1, + updated:1, + published: 1, + + }; + constructor( private excel: ExcelService, private datamservice:DatamanagementService, private toastr: ToastrService,private router: Router, + private route: ActivatedRoute,public bulkUpload:BulkimportService) { } + + ngOnInit(): void { + this.id = this.route.snapshot.params["id"]; + console.log("update with id = ", this.id); + this.getall(); + this.getSheetName(this.id); + this.getById(this.id); + + this.getTableData(this.id); + // this.getColumns(this.tableName); + // this.getHeadersById(this.id); + + } + + getall(){ + this.datamservice.getall().subscribe((data)=>{ + console.log(data); + this.data=data; + }) + } + + + getById(id) { + this.datamservice.getTemplateById(id).subscribe((data) => { + console.log(data); + this.getbyiddata = data; + this.tableName = data.entityName; + }); + } + headerData; + getColumns(table){ + console.log(table); + // console.log(this.getbyiddata.entityName); + this.bulkUpload.getColumnNames(table).subscribe((data) => { + console.log(data); + this.headerData = data; + }); +} +getHeadersById(id){ + console.log(this.columnJson); + this.bulkUpload.getHeader(id).subscribe((data) => { + console.log(data); + this.getHeaderData = JSON.stringify(data); + + // const objectArray = data.map(key => ({ + // headerName: key, + // value: "", + // })); + // // console.log(objectArray); + // this.getHeaderData = JSON.stringify(objectArray); + // console.log(this.getHeaderData); + + // const json = `{"Customer":[{"headerName":"balance","value":""},{"headerName":"c_status","value":""},{"headerName":"city","value":""},{"headerName":"country","value":""},{"headerName":"currency_code","value":""},{"headerName":"customer_id","value":""},{"headerName":"date_of_birth","value":""},{"headerName":"defaultsite_id","value":""}], + // "Site":[{"headerName":"balance","value":""},{"headerName":"city","value":""},{"headerName":"country","value":""},{"headerName":"credit_profile","value":""},{"headerName":"currency_code","value":""},{"headerName":"date_of_birth","value":""},{"headerName":"default_order_type","value":""},{"headerName":"dsa","value":""}]}` + // this.getHeaderData = json; + + },(error) => { + console.log(error); + }); + + } + + selectedSheetName: string | null = null; + getHeaderbybutton(id,sheetName){ + // this.bulkUpload.getHeader(id,sheetName).subscribe((data) => { + // console.log(data); + // this.getHeaderData = data; + + // const objectArray = data.map(key => ({ + // headerName: key, + // value: "", + // })); + // // console.log(objectArray); + // this.getHeaderData = JSON.stringify(objectArray); + // console.log(this.getHeaderData); + + + + // },(error) => { + // console.log(error); + // }); + this.selectedSheetName = sheetName; + const columnEntry = this.columnJson.find(entry => entry.sheetName === sheetName); + if (columnEntry) { + const tablename = columnEntry.TableName; + this.getColumns(tablename); + } + } + + + checkData(){ + console.log(this.JsonHeader); + console.log(this.mapperText); + } + + getkeychangesJson(){ + + const jsonString = JSON.stringify(this.rows); + console.log("body",jsonString); + // const datajson = JSON.parse(this.datajson); + // this.datajson = [datajson]; + // console.log(this.datajson); + + this.bulkUpload.changeKeysOfJson(this.datajson,jsonString).subscribe((data) => { + console.log(data); + this.changeKeyJson = data.body; + },(error:HttpErrorResponse) => { + console.log(error.error); + }); + } + // getHeaderskeychange() { + // let headers: string[] = []; + // if(this.changeKeyJson) { + // this.changeKeyJson.forEach((value) => { + // Object.keys(value).forEach((key) => { + // if(!headers.find((header) => header == key)){ + // headers.push(key) + // } + + // }) + + // }) + // } + // return headers; + // } + getHeaderskeychange(sheetName: string) { + if (this.changeKeyJson && this.changeKeyJson.length > 0 && this.changeKeyJson[0][sheetName]) { + // Assuming the first item in the array contains the keys. + return Object.keys(this.changeKeyJson[0][sheetName][0]); + } + return []; + } + + getkeychangeData(sheetName: string) { + if (this.changeKeyJson && this.changeKeyJson.length > 0 && this.changeKeyJson[0][sheetName]) { + // Returning the array of data. + return this.changeKeyJson[0][sheetName]; + } + return []; + } +// Change to Horizontal Layout +changeToHorizonTal() { + this.layout = { + direction: "horizontal", + block1: "clr-col-lg-12 clr-col-12 height container", + block2: "clr-col-lg-12 clr-col-12 container", + } +} +// Change to Vertical Layout +changeToVertical() { + this.layout = { + direction: "vertical", + block1: "clr-col-lg-3 clr-col-12 ", + block2: "clr-col-lg-9 clr-col-12 ", + } +} +reset() { + this.json = ""; + this.luisApp = + { + name: '', + trained: 1, + tested: 1, + updated:1, + published: 1, + + + created: 1, + + }; + + this.timelineStyle = { + step0: { state: "current", open: true, failed: false }, + step1: { state: "not-started", open: false, failed: false }, + step2: { state: "not-started", open: false, failed: false }, + step3: { state: "not-started", open: false, failed: false }, + step4: { state: "not-started", open: false, failed: false }, + step5: { state: "not-started", open: false, failed: false }, + }; +} + + +//dynamic table +sheetNames:any; +getSheetName(id){ + this.bulkUpload.getSheetName(id).subscribe(data => { + console.log(data); + this.sheetNames = data; + }); +} + +getTableData(id){ + // console.log(this.getbyiddata.file_name); + this.bulkUpload.convertFileToJson(id).subscribe((data) => { + this.rows = data; + // this.bodyrow = data; + console.log(this.rows); +this.rowdata= [this.rows]; +this.rows = [this.rows] + console.log(typeof this.rows); + if(data){ + // this.toastr.success("Run Successfully") + } + var j; + var cart = []; + + for(var i = 0; i < data.length; i++) + { + var columnsIn = data[i]; + if(i==1) + { + for(var key in columnsIn) + { + j={prop:key , name: key}; + cart.push(j) + + } + } + } + this.columns = cart; + +}); +} +// sheetNames = ['Customer', 'Site']; +getHeaders(sheetName: string) { + if (this.rows && this.rows.length > 0 && this.rows[0][sheetName]) { + // Assuming the first item in the array contains the keys. + return Object.keys(this.rows[0][sheetName][0]); + } + return []; +} + +getData(sheetName: string) { + if (this.rows && this.rows.length > 0 && this.rows[0][sheetName]) { + // Returning the array of data. + return this.rows[0][sheetName]; + } + return []; +} + +// getHeaders() { +// let headers: string[] = []; +// this.rows= [] +// if(this.rows) { +// this.rows.forEach((value) => { +// Object.keys(value).forEach((key) => { +// if(!headers.find((header) => header == key)){ +// headers.push(key) +// } + +// }) + +// }) +// } +// return headers; +// } + +//data mapping +checkTrans(){ + + console.log("transform open") + // console.log(this.storeData); + if(this.getHeaderData){ + this.checkTransform = false; + this.transform = true; + console.log(this.getHeaderData); + if(this.mapperText === "undefined"){ this.mapperText= '';} + const currentText = this.mapperText; + let trnsfData = currentText + '' +this.getHeaderData; + this.mapperText = trnsfData; + }else { + this.checkTransform = true; + this.transform = false; + } + +} +mappperModal = false; +goFromMapper(){ + this.mappperModal = true; + this.selectedSheetName = this.sheetNames[0]; + const tablename = this.columnJson[0].TableName; + this.getColumns(tablename) + if(this.mapperText){ + try { + this.JsonHeader = JSON.parse(this.mapperText); + console.log('Received data:', this.JsonHeader ); + } catch (e) { console.error('Invalid JSON:', this.mapperText);} + }else + if (this.getHeaderData) { + // try { + // this.serverData = data.replace(/\[|\]|"/g, '').split(','); //(/\[|\]|'/g, '') //(/[\[\]"]/g, '') + // console.log('Received data:', this.serverData ); + // } catch (e) { console.error('Invalid JSON:', data);} + try { + this.JsonHeader = JSON.parse(this.getHeaderData); + console.log('Received data:', this.JsonHeader ); + } catch (e) { console.error('Invalid JSON:', this.getHeaderData);} + + } + //this.mappperclick = true; + // this.router.navigate(["../../mapperTable/"], { relativeTo: this.route, queryParams: { id: this.updateId, data: this.nodeEditProperties.mappers, title:this.nodeEditProperties.title }, skipLocationChange: true}); + // console.log("gofrommapper",this.updateId,this.nodeEditProperties.mappers) + // if(this.mappperclick = true && this.datajson!= null){ + // this.nodeEditProperties.mappers = this.datajson; + // } +} + +transReset(){ + this.mapperText = ''; + this.transform = false; + this.checkTransform = true; +} + +Rule:boolean = false; +checkRule:boolean = true; +RuleData:string = ''; +ruleModal = false; +RuleHeader = []; + +checkRules(){ + console.log("rule line open") + this.ruleModal = true; + + +} + +rulechecking(){ + if(this.RuleData){ + console.log(this.RuleData); + this.checkRule = false; + this.Rule = true; + }else{ + this.Rule = false; + this.checkRule = true; + } +} + +mappperclick = false; +goFromRule(){ + this.ruleModal = true; + if(this.RuleData){ + try { + this.RuleHeader = JSON.parse(this.RuleData); + console.log('Received data:', this.RuleHeader ); + } catch (e) { console.error('Invalid JSON:', this.RuleData);} + } + console.log(this.RuleHeader); +} + +resetRule(){ + this.RuleData = undefined; + this.RuleHeader = []; + this.Rule = false; + this.checkRule = true; +} + +onAddLines(){ + this.RuleHeader.push({ + rulename: "", + fromsheet:"", + fromColumn: "", + validationTable: "", + checkColumn: "", + useColumn:"", + replacementTable:"", + replacementcolumn:"", + errormsg:"" + }); +} +deleteRow(index) { + this.RuleHeader.splice(index, 1); +} + +onRuleUpdate(){ + this.ruleModal = false; + console.log("rule",this.RuleHeader); + let serverData = JSON.stringify(this.RuleHeader); + // console.log(serverData); + let product = JSON.stringify(serverData); + // console.log(product); + + try { + this.RuleData = JSON.parse(product); + console.log('Received rulejson data:', this.RuleData); + } catch (e) { console.error('Invalid JSON:', product);} + this.rulechecking() +} + + + datajson; + keychangeTable = false; +onUpdate(){ + this.mappperModal = false; + console.log(this.JsonHeader); + let serverData = JSON.stringify(this.JsonHeader); + // console.log(serverData); + let product = JSON.stringify(serverData); + // console.log(product); + + try { + this.datajson = JSON.parse(product); + console.log('Received Newjson data:', this.datajson); + } catch (e) { console.error('Invalid JSON:', product);} + + this.mapperText = this.datajson; + + // const output = this.datajson.reduce((result, item) => { + // result[item.headerName] = item.value; + // return result; + // }, {}); + + // console.log(output); + + this.getkeychangesJson(); + this.keychangeTable=true; +} + +//download excel file + +selectedTable; +selectTable(val){ + this.selectedTable = val; + // this.downloadExcel(val); +} + +downloadExcel(id){ + console.log(this.changeKeyJson); + const jsonDataWithoutBrackets = this.changeKeyJson[0]; + console.log(jsonDataWithoutBrackets); + console.log(this.RuleHeader); + this.bulkUpload.downloadExcel(id,jsonDataWithoutBrackets,this.RuleHeader).subscribe( + (response: Blob) => { + // Process the downloaded Excel file + console.log(response); + // const file = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); + // const fileUrl = URL.createObjectURL(file); + // const link = document.createElement('a'); + // link.href = fileUrl; + // link.download = 'data.xlsx'; // Set the desired file name + // link.click(); + + // this.timelineStyle = { + // step0: { state: "success", open: false, failed: false }, + // step1: { state: "success", open: false, failed: false }, + // step2: { state: "success", open: false, failed: false }, + // step3: { state: "success", open: false, failed: false }, + // step4: { state: "current", open: true, failed: false }, + // }; + }, + (error) => { + // Handle error + console.log(error); + // this.timelineStyle = { + // step0: { state: "success", open: false, failed: false }, + // step1: { state: "success", open: false, failed: false }, + // step2: { state: "success", open: false, failed: false }, + // step3: { state: "current", open: true, failed: false }, + // step4: { state: "not-started", open: false, failed: false }, + // step5: { state: "not-started", open: false, failed: false }, + // }; + + } + ); +} + +getSheet(id){ + this.bulkUpload.getSheet(id).subscribe( + (response: Blob) => { + // Process the downloaded Excel file + console.log(response); + const file = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); + const fileUrl = URL.createObjectURL(file); + const link = document.createElement('a'); + link.href = fileUrl; + link.download = 'data.xlsx'; // Set the desired file name + link.click(); + + }); +} + +back(){ + this.router.navigate(["../../datamanagement"], { relativeTo: this.route }); +} + +////step 1 - mapping name +columnJson =[] +getColumnforstep1(){ + + const objectArray = this.sheetNames.map(key => ({ + sheetName: key, + TableName: "", + })); + // console.log(objectArray); + this.columnJson = objectArray; + + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.spec.ts new file mode 100644 index 0000000..d63f2fa --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MappingruleComponent } from './mappingrule.component'; + +describe('MappingruleComponent', () => { + let component: MappingruleComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MappingruleComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(MappingruleComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.ts new file mode 100644 index 0000000..f384d1f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingrule.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-mappingrule', + templateUrl: './mappingrule.component.html', + styleUrls: ['./mappingrule.component.scss'] +}) +export class MappingruleComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.html new file mode 100644 index 0000000..753e663 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.html @@ -0,0 +1,149 @@ +

Mapping Rule

+Add Mode
+Mapping Rules are proccessed while importing bulk records for respective entity +
+ + + + + + + + +
+ + + + + +
+
+
+ + + +
+
+ + +
+
+
+ +
+
+ + +
+ +
+ + + +
+
+ + +
+
Mapping Fields
+ +
+
+
+ + +
+
+
+ + + + + + + + + + + + + +
Header FieldsValue
+ + + +
+
+ + +
+ +
+
+
+ + +
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.scss new file mode 100644 index 0000000..b05187f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.scss @@ -0,0 +1,81 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .entry-pg { + width: 750px; + } + + .button1::after { + content: none; + } + .button1:hover::after { + content: "ADD ROWS"; + } + + $bg-color: #dddddd; + + .section { + background-color: $bg-color; + height: 40px; + } + + .section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + input[type=text],[type=date],[type=number],textarea { + width: 100%; + padding: 15px 15px; + margin-top: 3px; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .required-field{ + color: red; + + } + select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.spec.ts new file mode 100644 index 0000000..8d28df0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MappingruleaddComponent } from './mappingruleadd.component'; + +describe('MappingruleaddComponent', () => { + let component: MappingruleaddComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MappingruleaddComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(MappingruleaddComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.ts new file mode 100644 index 0000000..cca1959 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleadd/mappingruleadd.component.ts @@ -0,0 +1,249 @@ +import { HttpErrorResponse, HttpHeaderResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { BulkimportService } from 'src/app/services/fnd/bulkimport.service'; + +@Component({ + selector: 'app-mappingruleadd', + templateUrl: './mappingruleadd.component.html', + styleUrls: ['./mappingruleadd.component.scss'] +}) +export class MappingruleaddComponent implements OnInit { + public entryForm: FormGroup; + selectedFile: File[]=[]; + + datajson; + transform:boolean = false; + checkTransform:boolean = true; + mapperdata; + + entityname; + description; + constructor(private _fb: FormBuilder, private router: Router,private toastr: ToastrService, + private route: ActivatedRoute,private dataservice:BulkimportService) { } + + ngOnInit(): void { + this.entryForm = this._fb.group({ + entity_name:[null], + mapping_rule:[null], + description: [null], + active: [true], + fileType: [null], + }); + + this.route.queryParams.subscribe(params => { + const data = params['data']; + this.entityname = params['name']; + this.description = params['description']; + + + if (data) { + try { + this.datajson = JSON.parse(data); + console.log('Received data:', this.datajson); + } catch (e) { console.error('Invalid JSON:', data);} + } + + + }); + + const condition = this.dataservice.getCondition(); + if(condition === 'mapper'){ + this.transform = true; + this.checkTransform = false; + if(this.datajson!== undefined){ + // if(this.entryForm.value.rule_line == 'undefined'){ this.entryForm.value.rule_line= '';} + const currentText = this.entryForm.value.rule_line = ''; + this.mapperdata = currentText + this.datajson; + // this.entryForm.value.rule_line = this.mapperdata; + // this.Updating(); + this.dataservice.setCondition(''); + } + } + + + console.log(this.entryForm.value); + + this.entryForm.patchValue({ + entity_name: this.entityname, + description: this.description, + }); + + console.log(this.entryForm.value); + } + + serverData = [ + { + }]; + onAddLines(){ + this.serverData.push({ + rulename: "", + fromsheet:"", + fromColumn: "", + validationTable: "", + checkColumn: "", + replacementcolumn:"", + useColumn:"", + errormsg:"" + }); + console.log(this.serverData); + } + deleteRow(index) { + this.serverData.splice(index, 1); + } + + toastrShown: boolean = false; + onSubmit(){ + this.entryForm.value.mapping_rule = JSON.stringify(this.serverData); + console.log(this.entryForm.value); + this.dataservice.saveMappingData(this.entryForm.value).subscribe((data)=>{ + console.log(data); + if (data) { + if (!this.toastrShown) { + this.toastrShown = true; // Set the flag to indicate that the toastr message has been shown + this.toastr.success("Added Successfully"); + setTimeout(() => { + this.router.navigate(["../all"], { relativeTo: this.route }); + }, 500); + } + } + }, (error: HttpHeaderResponse)=>{ + console.log(error); + if(error.status===202){ + this.toastr.success("Added Succesfully"); + } + if(error.status===404){ + this.toastr.error("Not Added"); + } + if(error.status===400){ + this.toastr.error("Not Added"); + } + }); + setTimeout(() => { + this.router.navigate(["../all"], { relativeTo: this.route }); + },500); + } + goback(){ + this.router.navigate(["../all"], { relativeTo: this.route }); + } + + + + headerData; + getColumns(table){ + console.log(table); + // console.log(this.getbyiddata.entityName); + this.dataservice.getColumnNames(table).subscribe((data) => { + console.log(data); + this.headerData = data; + }); +} + + checkTransformMapper = true; + transformMapper = false; + mapperText; + getHeaderData; + JsonHeader = []; + selectedSheetName: string | null = null; + columnJson =[]; + sheetNames:any; + checkTransMapper(){ + + console.log("Mapper open") + // console.log(this.storeData); + if(this.getHeaderData){ + this.checkTransformMapper = false; + this.transformMapper = true; + console.log(this.getHeaderData); + if(this.mapperText === "undefined"){ this.mapperText= '';} + const currentText = this.mapperText; + let trnsfData = currentText + '' +this.getHeaderData; + this.mapperText = trnsfData; + }else { + this.checkTransformMapper = true; + this.transformMapper = false; + } + + } + mappperModal = false; + goFromMapperField(){ + this.mappperModal = true; + this.selectedSheetName = this.sheetNames[0]; + const tablename = this.columnJson[0].TableName; + this.getColumns(tablename) + if(this.mapperText){ + try { + this.JsonHeader = JSON.parse(this.mapperText); + console.log('Received data:', this.JsonHeader ); + } catch (e) { console.error('Invalid JSON:', this.mapperText);} + }else + if (this.getHeaderData) { + // try { + // this.serverData = data.replace(/\[|\]|"/g, '').split(','); //(/\[|\]|'/g, '') //(/[\[\]"]/g, '') + // console.log('Received data:', this.serverData ); + // } catch (e) { console.error('Invalid JSON:', data);} + try { + this.JsonHeader = JSON.parse(this.getHeaderData); + console.log('Received data:', this.JsonHeader ); + } catch (e) { console.error('Invalid JSON:', this.getHeaderData);} + + } + } + + transResetMapper(){ + this.mapperText = ''; + this.transformMapper = false; + this.checkTransformMapper = true; + } + + onUpdate(){ + this.mappperModal = false; + } + + + getHeaderFieldData(){ + if(this.entryForm.value.entity_name){ + this.dataservice.getColumnNames(this.entryForm.value.entity_name).subscribe(data =>{ + console.log(data); + const objectArray = data.map(fieldname => ({ + headerName: fieldname, + value: "", + })); + // console.log(objectArray); + const headerdata= JSON.stringify(objectArray); + this.serverData = JSON.parse(headerdata); + }) + }else{ + this.toastr.warning("Entity Name is Required") + } + } + + chooseFile(event){ + console.log(event); + this.selectedFile = event.target.files[0]; + } + + valueofField; + getDDFieldData(){ + if(this.entryForm.value.fileType && this.selectedFile){ + this.dataservice.getDDforMappingRule(this.selectedFile,this.entryForm.value.fileType).subscribe(data =>{ + console.log(data); + this.valueofField = data.body; + },(error)=>{ + if(error.status === 404){ + this.toastr.error("Sheet not found") + } + if(error.status >= 500 && error.status <= 599){ + this.toastr.error("Server Error") + } + }) + }else{ + this.toastr.warning("Sheet name and file is required") + + } +} + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.html new file mode 100644 index 0000000..8ee34a9 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.html @@ -0,0 +1,85 @@ + + +
+ +
+
+
+

Mapping Rule

+
+
+ + + +
+
+ + + Loading ... +
{{error}}
+ + + Entity Name + + + Description + + + Active + + + File Type + + + Action + + + {{user.entity_name}} + {{user.description}} + {{user.active}} + {{user.fileType}} + + + + Delete + + + + + + + + + + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+
+ + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.scss new file mode 100644 index 0000000..c05b1dc --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.scss @@ -0,0 +1,4 @@ +.delete,.heading{ + text-align: center; + color: red; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.spec.ts new file mode 100644 index 0000000..bf59474 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MappingruleallComponent } from './mappingruleall.component'; + +describe('MappingruleallComponent', () => { + let component: MappingruleallComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MappingruleallComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(MappingruleallComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.ts new file mode 100644 index 0000000..a204f3b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleall/mappingruleall.component.ts @@ -0,0 +1,85 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { ExcelService } from 'src/app/services/excel.service'; +import * as moment from 'moment'; +import { BulkimportService } from 'src/app/services/fnd/bulkimport.service'; +@Component({ + selector: 'app-mappingruleall', + templateUrl: './mappingruleall.component.html', + styleUrls: ['./mappingruleall.component.scss'] +}) +export class MappingruleallComponent implements OnInit { + loading = false; + error; + selected: any[] = []; + rowSelected :any= {}; + modaldelete=false; + data; + constructor(private router: Router, private toastr: ToastrService, + private route: ActivatedRoute,private excel: ExcelService,private bulkimportService:BulkimportService,) { } + + ngOnInit(): void { + this.getall(); + } + getall(){ + this.bulkimportService.getMappingDetails().subscribe((data)=>{ + console.log(data); + this.data=data; + if(this.data.length == 0){ + this.error="No data Available"; + console.log(this.error); + } + + },(error) => { + console.log(error); + if(error){ + this.error="No data Available OR server Error"; + } + }); + + } + goToAdd(){ + this.router.navigate(["../add"], { relativeTo: this.route }); + + } + onExport() { + this.excel.exportAsExcelFile(this.data, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + goToEdit(id) { + this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id){ + this.modaldelete = false; + console.log("in delete "+id); + this.bulkimportService.deleteMappingById(id).subscribe( + (data) => { + console.log(data); + this.ngOnInit(); + if (data == null || data) { + this.toastr.success('Deleted successfully'); + } + }, + (error) => { + console.log('Error in adding data...',+error); + if(isNaN(error)){ + this.toastr.success('Deleted successfully'); + }else{ + this.toastr.error('Not Deleted Data Getting Some Error'); + } + } + ); +} + +activeTab: number = 1; + +showTab(tabNumber: number) { + this.activeTab = tabNumber; +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.html new file mode 100644 index 0000000..6bdbd5a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.html @@ -0,0 +1,100 @@ +

Mapping Rule

+Edit Mode
+Mapping Rules are proccessed while importing bulk records for respective entity +
+
+
+
+
+ + +
+
+ + +
+
+
+ +
+
+ + +
+ +
+ + + +
+
+ + +
+
Mapping Fields
+ +
+
+
+ + +
+
+
+ + + + + + + + + + + + + +
Header FieldsValue
+ + + + + +
+
+
+ + +
+
+
+ + +
+
+ +
+
+
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.scss new file mode 100644 index 0000000..b05187f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.scss @@ -0,0 +1,81 @@ +//@import "../../../../assets/scss/var"; +.s-info-bar { + display: flex; + flex-direction: row; + justify-content: space-between; + button { + outline: none; + } + } + + .entry-pg { + width: 750px; + } + + .button1::after { + content: none; + } + .button1:hover::after { + content: "ADD ROWS"; + } + + $bg-color: #dddddd; + + .section { + background-color: $bg-color; + height: 40px; + } + + .section p { + //color: white; + font-weight: bold; + padding: 10px; + font-size: 18px; + } + + .clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .clr-file { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + //padding: 0.6rem 0.75rem; + margin-top: 3px; + width: 100%; + margin-bottom: 10px; + } + + .center { + text-align: center; + } + input[type=text],[type=date],[type=number],textarea { + width: 100%; + padding: 15px 15px; + margin-top: 3px; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + .required-field{ + color: red; + + } + select{ + width: 100%; + margin-top: 3px; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; + } + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.spec.ts new file mode 100644 index 0000000..2e79fd9 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MappingruleeditComponent } from './mappingruleedit.component'; + +describe('MappingruleeditComponent', () => { + let component: MappingruleeditComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ MappingruleeditComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(MappingruleeditComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.ts new file mode 100644 index 0000000..3239322 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/datamanagement/mappingrule/mappingruleedit/mappingruleedit.component.ts @@ -0,0 +1,161 @@ +import { HttpErrorResponse, HttpHeaderResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { BulkimportService } from 'src/app/services/fnd/bulkimport.service'; + +@Component({ + selector: 'app-mappingruleedit', + templateUrl: './mappingruleedit.component.html', + styleUrls: ['./mappingruleedit.component.scss'] +}) +export class MappingruleeditComponent implements OnInit { + public entryForm: FormGroup; + selectedFile: File[]=[]; + id; + datajson; + transform:boolean = false; + checkTransform:boolean = true; + mapperdata; + tdata: any = {}; + entityname; + description; + constructor(private _fb: FormBuilder, private router: Router,private toastr: ToastrService, + private route: ActivatedRoute,private dataservice:BulkimportService) { } + + ngOnInit(): void { + this.id = this.route.snapshot.params["id"]; + console.log("update with id = ", this.id); + + + this.dataservice.getMappingDetailsById(this.id).subscribe(data => { + this.tdata = data; + this.serverData = JSON.parse(data.mapping_rule); + console.log(this.tdata); + }, + (err) => { + console.log(err); + }); + + console.log(this.tdata); + // this.entryForm.patchValue({ + // entity_name: this.entityname, + // description: this.description, + // }); + // console.log(this.entryForm.value); + } + + getById(id: number) { + + } + + serverData = []; + + toastrShown: boolean = false; + onSubmit(){ + this.tdata.mapping_rule = JSON.stringify(this.serverData); + console.log(this.tdata); + this.dataservice.updateMappingData(this.tdata, this.id).subscribe((data)=>{ + console.log(data); + if (data.operationStatus) { + this.toastr.warning(data.operationMessage); + }else{ + if (!this.toastrShown) { + this.toastrShown = true; // Set the flag to indicate that the toastr message has been shown + this.toastr.success("Update Successfully"); + setTimeout(() => { + this.router.navigate(["../../all"], { relativeTo: this.route }); + }, 500); + } + } + }, (error: HttpHeaderResponse)=>{ + console.log(error); + if(error.status===202){ + this.toastr.success("Update Succesfully"); + } + if(error.status===404){ + this.toastr.error("Not Update"); + } + if(error.status===400){ + this.toastr.error("Not Update"); + } + }); + setTimeout(() => { + this.router.navigate(["../../all"], { relativeTo: this.route }); + },500); + } + + Updating(){ + console.log(this.tdata); + this.dataservice.updateData(this.tdata, this.id).subscribe(data=>{ + console.log(data); + // this.ngOnInit(); + }, (error: HttpHeaderResponse)=>{ + console.log(error); + }); + } + + goback(){ + this.router.navigate(["../../all"], { relativeTo: this.route }); + } + + + + headerData; + getColumns(table){ + console.log(table); + // console.log(this.getbyiddata.entityName); + this.dataservice.getColumnNames(table).subscribe((data) => { + console.log(data); + this.headerData = data; + }); +} + + + + getHeaderFieldData(){ + if(this.tdata.entity_name){ + this.dataservice.getColumnNames(this.tdata.entity_name).subscribe(data =>{ + console.log(data); + const objectArray = data.map(fieldname => ({ + headerName: fieldname, + value: "", + })); + // console.log(objectArray); + const headerdata= JSON.stringify(objectArray); + this.serverData = JSON.parse(headerdata); + }) + }else{ + this.toastr.warning("Entity Name is Required") + } + } + + showdropdown = false; + chooseFile(event){ + console.log(event); + this.selectedFile = event.target.files[0]; + if(event){ this.showdropdown = true;} + + } + + valueofField; + getDDFieldData(){ + if(this.tdata.fileType && this.selectedFile){ + this.dataservice.getDDforMappingRule(this.selectedFile,this.tdata.fileType).subscribe(data =>{ + console.log(data); + this.valueofField = data.body; + },(error)=>{ + if(error.status === 404){ + this.toastr.error("Sheet not found") + } + if(error.status >= 500 && error.status <= 599){ + this.toastr.error("Server Error") + } + }) + }else{ + this.toastr.warning("Sheet name and file is required") + } +} + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.html new file mode 100644 index 0000000..3c293d8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.html @@ -0,0 +1 @@ +

addapiregistery works!

diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.spec.ts new file mode 100644 index 0000000..a06237c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddapiregisteryComponent } from './addapiregistery.component'; + +describe('AddapiregisteryComponent', () => { + let component: AddapiregisteryComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [AddapiregisteryComponent] + }); + fixture = TestBed.createComponent(AddapiregisteryComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.ts new file mode 100644 index 0000000..f4cd146 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/addapiregistery/addapiregistery.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-addapiregistery', + templateUrl: './addapiregistery.component.html', + styleUrls: ['./addapiregistery.component.scss'] +}) +export class AddapiregisteryComponent { + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.html new file mode 100644 index 0000000..5e77f4e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.html @@ -0,0 +1,102 @@ + + +
+
+
+

API-Registery - {{getFormCode}}

+
+
+ + + +
+
+ + + Loading ... +
{{error}}
+ + + + + Table Name + + + + Action + + + + + + + {{user.field_name}} + + + + + + +
Who Column
+
Account ID: {{user.accountId}}
+
Created At: {{user.createdAt| date}}
+
Created By: {{user.createdBy}}
+
Updated At: {{user.updatedAt | date}}
+
Updated By: {{user.updatedBy}}
+
+
+
+ + + + + + + +
Field Name: {{user.field_name}}
+
+
+ + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+
+ + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.scss new file mode 100644 index 0000000..8d27434 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.scss @@ -0,0 +1,5 @@ +@import '../../../../../../styles1.scss'; +.delete,.heading{ + text-align: center; + color: red; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.spec.ts new file mode 100644 index 0000000..1188923 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AllapiregisteryComponent } from './allapiregistery.component'; + +describe('AllapiregisteryComponent', () => { + let component: AllapiregisteryComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [AllapiregisteryComponent] + }); + fixture = TestBed.createComponent(AllapiregisteryComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.ts new file mode 100644 index 0000000..9d1a710 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/allapiregistery/allapiregistery.component.ts @@ -0,0 +1,244 @@ +// import { Component } from '@angular/core'; + +// @Component({ +// selector: 'app-allapiregistery', +// templateUrl: './allapiregistery.component.html', +// styleUrls: ['./allapiregistery.component.scss'] +// }) +// export class AllapiregisteryComponent { + +// } +import { Component, OnInit, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core'; +import { ActivatedRoute, Router } from "@angular/router"; + +import { ToastrService } from 'ngx-toastr'; +import { ExtensionField } from "src/app/models/fnd/ExtensionField"; +import { ExtensionService } from 'src/app/services/fnd/extension.service'; +import { ApiregisteryService } from 'src/app/services/fnd/apiregistery.service'; + +//import { Teacher } from "src/app/pages/university/teacher/Teacher"; +import { UserInfoService } from "src/app/services/user-info.service"; +import { ApiRegisteryLine } from 'src/app/models/fnd/apiregisteryline'; + +interface Rows { + // id: number; + // field_name: any; + // mapping: any; + // data_type: any; + // isActive: any; + id: number; + url: string; + method: string; + header_id: number; +} +@Component({ + selector: 'app-allapiregistery', + templateUrl: './allapiregistery.component.html', + styleUrls: ['./allapiregistery.component.scss'] +}) +export class AllapiregisteryComponent implements OnInit { + @ViewChild("extById") extensionById: TemplateRef; + @ViewChild("showInGrid") txId: TemplateRef; + + //@ViewChild("filter") filter: ElementRef; + basic: boolean = false; + // whoColumns: Teacher; // who columns data + alldata:any; + + columns: any[]; + rows: Rows[]; + temp = []; + rowSelected: any = {}; + modaldelete = false; + loading = false; + error; + selected: any[] = []; + filterData: string; + isLoading: boolean = false; + extensionField: ExtensionField[] = []; + apiRegisteryLineData: ApiRegisteryLine[] = []; + constructor(private router: Router, + private route: ActivatedRoute, + private toastr: ToastrService, + private extensionService: ExtensionService, + private apiregistery: ApiregisteryService, + private userInfoService: UserInfoService) { } + + private account_id: any; + // private formCode: any; + formCode: string; + getFormCode; + public key: string = "formCode"; + public storage: Storage = sessionStorage; + ngOnInit(): void { + this.route.queryParams.subscribe(params => { + this.getFormCode = params['formCode']; + console.log("formCode ", this.getFormCode); + this.storage.setItem("formCode", this.getFormCode); // Store the value in sessionStorage using the key + }); + + + this.account_id = this.userInfoService.getUserId(); + this.formCode = this.storage.getItem(this.key); + console.log("[ngOnInit] acc_id: " + this.account_id + " formCode: " + this.formCode); + this.getData(); + // this.columns = [ + // /* { prop: "id", name: "Actions", width: 65, cellTemplate: this.extensionById }, */ + // { prop: "field_name", name: "Field Name", width: 120 }, + // { prop: "mapping", name: "Mapping", width: 150 }, + // { prop: "data_type", name: "Data Type", width: 190 }, + // /* { prop: "id", name: "Show In Grid", width: 90, cellTemplate: this.txId } */ + // ]; + } + // getData() { + // this.isLoading = true; + // //this.extensionField = new ExtensionField(); + // this.apiregistery.getAll().subscribe((data) => { + // this.isLoading = false; + // console.log(data); + // // this.extensionField = data; + // if (this.formCode === 'undefined' || this.formCode === undefined || this.formCode === null) { + // this.extensionField = data; + // } else { + // this.extensionField = data.filter(item => item.form_code === this.formCode); + // console.log(this.extensionField); + // } + // this.rows = this.extensionField; + // if (this.extensionField.length == 0) { + // this.error = "No data Available"; + // console.log(this.error) + // } + // //this.temp = [...this.extensionField]; + // }, (error) => { + // console.log(error); + // if (error) { + // this.error = "No data Available OR server Error"; + // } + // }); + // } + + + + + getData() { + this.apiregistery.getAll().subscribe((data)=>{ + this.alldata=data + console.log(this.alldata); + if(this.alldata.length==0){ + this.error="No data Available"; + console.log(this.error) + } + },(error) => { + console.log(error); + if(error){ + this.error="Server Error"; + } + }) + } + + alertType: string; + alertMessage: string = ""; + alert = [ + { type: "success", message: "Build Successfully" }, + { type: "danger", message: "Some error Happens" }, + ]; + + // buildExtension(id, accountID) { + // console.log("buildExtension() Account id = " + this.account_id + " Form Code = ", + // this.formCode); + // if (this.account_id === null && this.formCode === null) { + // this.alertType = this.alert[1].type; + // this.alertMessage = "form_code is null"; + // return; + // } + // this.extensionService + // .buildExtension(id, accountID, this.formCode) + // .subscribe( + // (data) => { + // console.log("build successfully ", data); + // this.alert.forEach((e) => { + // if (e.type === "success") { + // this.alertType = e.type; + // this.alertMessage = e.message; + // } //data.type === true : e.message ? e.message + + // }); + // // go to parent entry form... + // //this.router.navigate(['../../'], { relativeTo: this.route.parent }); + + // if (data) { + // this.toastr.success("Build successfully"); + // } + + + // }, + // (err) => { + + // if (err) { + // this.toastr.error("Build Not Successful"); + // } + // console.log("build failed ", err); + // this.alertType = this.alert[1].type; + // this.alertMessage = this.alert[1].message; + // } + // ); + // } + + // isChecked(id: number) { + // return ( + // this.extensionField.find(c => { + // if (c.id === id) return c.isActive; + // }) !== undefined + // ); + // } + + // chk(checked) { + // console.log(checked); + // return !checked; + // } + + // extField: ExtensionField; + // checked: boolean; + // toggle(id: number) { + // console.log(id); + // this.extensionService.getById(id).subscribe(ext => { + // this.extField = ext; + // this.checked = ext.isActive; + // console.log('extField ', this.extField); + // console.log('checked ', this.checked); + // }); + // console.log(this.extField.isActive); + // //this.extensionService.update(id,this.extField).subscribe(); + // } + + goToAdd() { + this.router.navigate(["../add"], { relativeTo: this.route }); + } + goToEdit(id: number) { + this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + + goToWhoColumns(id: number) { + this.basic = !this.basic; + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete = true; + } + delete(id) { + this.modaldelete = false; + console.log("in delete " + id); + this.extensionService.delete(id).subscribe((data) => { + console.log(data); + this.ngOnInit(); + if (data.body) { + this.toastr.success('Deleted successfully'); + } + }, (error) => { + console.log('Error in adding data...', +error); + if (error) { + this.toastr.error('Not Deleted Data Getting Some Error'); + } + }); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.html new file mode 100644 index 0000000..0680b43 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.html @@ -0,0 +1 @@ + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.spec.ts new file mode 100644 index 0000000..56bfcc0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ApiregisteryComponent } from './apiregistery.component'; + +describe('ApiregisteryComponent', () => { + let component: ApiregisteryComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ApiregisteryComponent] + }); + fixture = TestBed.createComponent(ApiregisteryComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.ts new file mode 100644 index 0000000..3abcf3c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/apiregistery.component.ts @@ -0,0 +1,214 @@ +// import { Component } from '@angular/core'; + +// @Component({ +// selector: 'app-apiregistery', +// templateUrl: './apiregistery.component.html', +// styleUrls: ['./apiregistery.component.scss'] +// }) +// export class ApiregisteryComponent { + +// } +import { Component, OnInit, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core'; +import { ActivatedRoute, Router } from "@angular/router"; + +import { ToastrService } from 'ngx-toastr'; +import { ExtensionField } from "src/app/models/fnd/ExtensionField"; +import { ExtensionService } from 'src/app/services/fnd/extension.service'; +//import { Teacher } from "src/app/pages/university/teacher/Teacher"; +import { UserInfoService } from "src/app/services/user-info.service"; + +interface Rows { + id: number; + field_name: any; + mapping: any; + data_type: any; + isActive: any; +} +@Component({ + selector: 'app-apiregistery', + templateUrl: './apiregistery.component.html', + styleUrls: ['./apiregistery.component.scss'] +}) +export class ApiregisteryComponent implements OnInit { + @ViewChild("extById") extensionById: TemplateRef; + @ViewChild("showInGrid") txId: TemplateRef; + + //@ViewChild("filter") filter: ElementRef; + basic: boolean = false; + // whoColumns: Teacher; // who columns data + columns: any[]; + rows: Rows[]; + temp = []; + rowSelected: any = {}; + modaldelete = false; + loading = false; + error; + selected: any[] = []; + filterData: string; + isLoading: boolean = false; + extensionField: ExtensionField[] = []; + constructor(private router: Router, + private route: ActivatedRoute, + private toastr: ToastrService, + private extensionService: ExtensionService, + private userInfoService: UserInfoService) { } + + private account_id: any; + // private formCode: any; + formCode: string; + getFormCode; + public key: string = "formCode"; + public storage: Storage = sessionStorage; + ngOnInit(): void { + this.route.queryParams.subscribe(params => { + this.getFormCode = params['formCode']; + console.log("formCode ", this.getFormCode); + this.storage.setItem("formCode", this.getFormCode); // Store the value in sessionStorage using the key + }); + + + this.account_id = this.userInfoService.getUserId(); + this.formCode = this.storage.getItem(this.key); + console.log("[ngOnInit] acc_id: " + this.account_id + " formCode: " + this.formCode); + this.getData(); + this.columns = [ + /* { prop: "id", name: "Actions", width: 65, cellTemplate: this.extensionById }, */ + { prop: "field_name", name: "Field Name", width: 120 }, + { prop: "mapping", name: "Mapping", width: 150 }, + { prop: "data_type", name: "Data Type", width: 190 }, + /* { prop: "id", name: "Show In Grid", width: 90, cellTemplate: this.txId } */ + ]; + } + getData() { + this.isLoading = true; + //this.extensionField = new ExtensionField(); + this.extensionService.getAll().subscribe((data) => { + this.isLoading = false; + console.log(data); + // this.extensionField = data; + if (this.formCode === 'undefined' || this.formCode === undefined || this.formCode === null) { + this.extensionField = data; + } else { + this.extensionField = data.filter(item => item.form_code === this.formCode); + console.log(this.extensionField); + } + this.rows = this.extensionField; + if (this.extensionField.length == 0) { + this.error = "No data Available"; + console.log(this.error) + } + //this.temp = [...this.extensionField]; + }, (error) => { + console.log(error); + if (error) { + this.error = "No data Available OR server Error"; + } + }); + } + + alertType: string; + alertMessage: string = ""; + alert = [ + { type: "success", message: "Build Successfully" }, + { type: "danger", message: "Some error Happens" }, + ]; + + buildExtension(id, accountID) { + console.log("buildExtension() Account id = " + this.account_id + " Form Code = ", + this.formCode); + if (this.account_id === null && this.formCode === null) { + this.alertType = this.alert[1].type; + this.alertMessage = "form_code is null"; + return; + } + this.extensionService + .buildExtension(id, accountID, this.formCode) + .subscribe( + (data) => { + console.log("build successfully ", data); + this.alert.forEach((e) => { + if (e.type === "success") { + this.alertType = e.type; + this.alertMessage = e.message; + } //data.type === true : e.message ? e.message + + }); + // go to parent entry form... + //this.router.navigate(['../../'], { relativeTo: this.route.parent }); + + if (data) { + this.toastr.success("Build successfully"); + } + + + }, + (err) => { + + if (err) { + this.toastr.error("Build Not Successful"); + } + console.log("build failed ", err); + this.alertType = this.alert[1].type; + this.alertMessage = this.alert[1].message; + } + ); + } + + isChecked(id: number) { + return ( + this.extensionField.find(c => { + if (c.id === id) return c.isActive; + }) !== undefined + ); + } + + chk(checked) { + console.log(checked); + return !checked; + } + + extField: ExtensionField; + checked: boolean; + toggle(id: number) { + console.log(id); + this.extensionService.getById(id).subscribe(ext => { + this.extField = ext; + this.checked = ext.isActive; + console.log('extField ', this.extField); + console.log('checked ', this.checked); + }); + console.log(this.extField.isActive); + //this.extensionService.update(id,this.extField).subscribe(); + } + + goToAdd() { + this.router.navigate(["../add"], { relativeTo: this.route }); + } + goToEdit(id: number) { + this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + + goToWhoColumns(id: number) { + this.basic = !this.basic; + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete = true; + } + delete(id) { + this.modaldelete = false; + console.log("in delete " + id); + this.extensionService.delete(id).subscribe((data) => { + console.log(data); + this.ngOnInit(); + if (data.body) { + this.toastr.success('Deleted successfully'); + } + }, (error) => { + console.log('Error in adding data...', +error); + if (error) { + this.toastr.error('Not Deleted Data Getting Some Error'); + } + }); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.html new file mode 100644 index 0000000..e0fb3d3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.html @@ -0,0 +1 @@ +

editapiregistery works!

diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.spec.ts new file mode 100644 index 0000000..8eece98 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditapiregisteryComponent } from './editapiregistery.component'; + +describe('EditapiregisteryComponent', () => { + let component: EditapiregisteryComponent; + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [EditapiregisteryComponent] + }); + fixture = TestBed.createComponent(EditapiregisteryComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.ts new file mode 100644 index 0000000..3ea304c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/apiregistery/editapiregistery/editapiregistery.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-editapiregistery', + templateUrl: './editapiregistery.component.html', + styleUrls: ['./editapiregistery.component.scss'] +}) +export class EditapiregisteryComponent { + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.html new file mode 100644 index 0000000..bb21644 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.html @@ -0,0 +1,375 @@ + +
+ + +
+
+

{{ item?.charttitle }}

+

+ + 0 +

+
+
+
+ + + + +
+ + + +
+
+

{{item?.charttitle}}

+ + +
+
+
+ +
+
+

{{item?.charttitle}}

+ + +
+
+
+ +
+
+

{{item?.charttitle}}

+ + +
+
+
+ +
+
+

{{item?.charttitle}}

+ + +
+
+
+ +
+
+

{{item?.charttitle}}

+ + +
+
+
+ +
+
+

{{item?.charttitle}}

+ + +
+
+
+ +
+
+

{{item?.charttitle}}

+ + +
+
+
+ +
+
+

{{item?.charttitle}}

+ + +
+
+
+ +
+
+

{{item?.charttitle}}

+ + +
+
+
+
+
+ + + + + +
+ + + + +
+ + +
+
+ + Avatar + + + + + {{not.notification}} + + {{ not.time | timePipe }} +
+
+
+
+
+ + + +
+ + + +
+
+
+
+
+
+
+ {{app.owner}} {{app.accessibility ? 'private' : 'public'}} +
+
+ +
+
+
+ {{app.projectName}} +
+
+
+ {{app.description ? app.description : 'project description'}} +
+
+ + +
+
+
+
+ + {{tech}} + +
+ +
+
+
+ + +
+ +
+
+
+
+
+
+
+
+
+ + + +
+
\ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.scss new file mode 100644 index 0000000..5d88af5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.scss @@ -0,0 +1,73 @@ +//@import '../../../assets/scss/var'; + +h4{margin-top: 16px;} +.s-order-dash-pg { + margin: 0px; + display:flex; + flex-wrap:wrap; + flex-direction:row; + justify-content:center; + overflow: auto; + overflow-x: hidden; + .chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + max-height: 200px; + + } +} + +.chart-box{ + margin:16px; + padding:0 16px; + background-color: #fff; + border:1px solid #ccc; + border-radius: 2px; + max-width: 400px auto; + overflow: auto; + max-height: 300px auto; + + +} +#word{ + // width: 270px; + width:260px +} +.center{ + text-align: center; + font-weight: 500; +} +.s{ + color: blue; +} + +li{ + list-style-type: none; +} +.progress-bar{ + margin-bottom: 5px; + height: 15px; +} +.tag-input { + width: 100%; + padding: 0px 15px; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + } + + clr-combobox-container{ + padding-top: 0px !important; + padding-bottom:0px !important; + } + clr-combobox{ + width: 100%; + padding: 5px 5px; + // border: 1px solid #ccc; + border-radius: 4px; + } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.spec.ts new file mode 100644 index 0000000..5ec4ff8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DashboardComponent } from './dashboard.component'; + +describe('DashboardComponent', () => { + let component: DashboardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DashboardComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DashboardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.ts new file mode 100644 index 0000000..653ea4b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/dashboard/dashboard.component.ts @@ -0,0 +1,106 @@ +import { Component, OnInit } from '@angular/core'; +import { ToastrService } from 'ngx-toastr'; +import { DashboardService } from 'src/app/services/builder/dashboard.service'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; + +@Component({ + selector: 'app-dashboard', + templateUrl: './dashboard.component.html', + styleUrls: ['./dashboard.component.scss'] +}) +export class DashboardComponent implements OnInit { + + data: any; + rows: any[]; + error; + chartData: any; + + constructor(private dashboard3Service: Dashboard3Service, + private dashboardService: DashboardService,) { } + + ngOnInit(): void { + this.getAllDash(); + this.getdashboard(); + } + dashboardModel; + dashboard_name; + getAllDash(){ + this.dashboard3Service.getDynamicDashDetails().subscribe(data => { + console.log(data); + const dash = data[0].model; + this.dashboardModel= JSON.parse(dash) ; + this.dashboard_name = data.dashboard_name; + + for (let i = 0; i < this.dashboardModel.length; i++) { + if(this.dashboardModel[i]?.charturl){ + this.dashboard3Service.getChartData(this.dashboardModel[i].charturl,this.dashboardModel[i].name).subscribe(tData => { + console.log(tData); + this.dashboardModel[i].featchData = tData; + }); + } + } + console.log(this.dashboardModel); + }); + } + + lineChartData: any[] = []; + radarChartData: any[] = []; + bubbleChartData: any[] = []; + dashboardChartData; + + getdashboard() { + this.chartData = []; + this.radarChartData = []; + this.bubbleChartData = []; + this.lineChartData = []; + this.dashboardService.getAllDash().subscribe( + (data) => { + this.data = data; + const filteredData = this.data.filter(item => item.add_to_home); + + this.rows = filteredData; + + if (filteredData.length === 0) { + this.error = "No data available with add_to_home set to true."; + } else { + this.error = ""; + } + + this.rows.forEach(item => { + if (item['dashbord1_Line'] && Array.isArray(item['dashbord1_Line']) && item['dashbord1_Line'].length > 0) { + item['dashbord1_Line'].forEach(dashboardLineItem => { + if (dashboardLineItem.model) { + const parsedModel = JSON.parse(dashboardLineItem.model); + this.chartData.push(parsedModel); + + this.dashboardChartData = this.chartData[0]?.dashboard; // Add a check here + + // if (this.dashboardChartData) { + for (let i = 0; i < this.dashboardChartData.length; i++) { + console.log(this.dashboardChartData[i]?.charturl); + if (this.dashboardChartData[i]?.charturl) { + this.dashboard3Service.getUrlChartData(this.dashboardChartData[i].table, this.dashboardChartData[i].name, this.dashboardChartData[i].xAxis,this.dashboardChartData[i].yAxis, this.dashboardChartData[i].datastore, this.dashboardChartData[i].charturl + ).subscribe(tData => { + console.log(tData); + this.dashboardChartData[i].featchData = tData; + }); + } + // } + + console.log(this.dashboardChartData); + + // this.lineChartData.push({ data: parsedModel.data, label: dashboardLineItem.name }); + console.log(dashboardLineItem.model); + } + } + }); + } + }); + }, + (error) => { + console.error('Error fetching dashboard data:', error); + }); + + console.log("Chart Data:", this.chartData); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.css new file mode 100644 index 0000000..eb2be77 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.css @@ -0,0 +1,39 @@ +.button1::after { + content: none; +} + +.button1:hover::after { + content: "ADD ROWS"; +} + +.section { + background-color: #dddddd; + height: 40px; +} + +.section p { + padding: 10px; + font-size: 18px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + background-color: rgb(255, 255, 255); + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + +.center { + text-align: center; +}/*# sourceMappingURL=addextension.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.css.map new file mode 100644 index 0000000..922569c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["addextension.component.scss","addextension.component.css"],"names":[],"mappings":"AAEA;EACE,aAAA;ACDF;;ADGA;EACE,mBAAA;ACAF;;ADGA;EACE,yBAVS;EAWT,YAAA;ACAF;;ADGA;EAEE,aAAA;EACA,eAAA;ACDF;;ADIA;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,wBAAA;EACA,oCAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;ACDF;;ADGA;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACAF;;ADEA;EACE,kBAAA;ACCF","file":"addextension.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.html new file mode 100644 index 0000000..263ceaf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.html @@ -0,0 +1,52 @@ +

Extension Field

+Add Mode
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+ +
+
+
+ + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.scss new file mode 100644 index 0000000..1a7e044 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.scss @@ -0,0 +1,39 @@ +$bg-color: #dddddd; + +.button1::after { + content: none; +} +.button1:hover::after { + content: "ADD ROWS"; +} + +.section { + background-color: $bg-color; + height: 40px; +} + +.section p { + //color: white; + padding: 10px; + font-size: 18px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + background-color:rgb(255, 255, 255); + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} +.center { + text-align: center; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.spec.ts new file mode 100644 index 0000000..9ab8763 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddextensionComponent } from './addextension.component'; + +describe('AddextensionComponent', () => { + let component: AddextensionComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddextensionComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AddextensionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.ts new file mode 100644 index 0000000..874fb4a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/addextension/addextension.component.ts @@ -0,0 +1,94 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ExtensionService } from 'src/app/services/fnd/extension.service'; +@Component({ + selector: 'app-addextension', + templateUrl: './addextension.component.html', + styleUrls: ['./addextension.component.scss'] +}) +export class AddextensionComponent implements OnInit { + public extFieldForm: FormGroup; + submitted = false; + basic:boolean = true; + + isActive: boolean = true; + + formCode: string; + // GET FORM_CODE FROM SESSION + public key:string="formCode"; + public storage:Storage = sessionStorage; + + types:string[] = ['header', 'line']; + lookup_values: string[] = []; // come from server + lookups: string[] =[ + 'extn1', 'extn2', 'extn3', 'extn4', 'extn5', + 'extn6', 'extn7', 'extn8', 'extn9', 'extn10', + 'extn11', 'extn12', 'extn13', 'extn14', 'extn15' + ]; + datatype_values: string[] = []; // come from server + datatypes: string[] = ['textfield', 'longtext', 'date', 'checkbox', 'radiobutton', 'autocomplete']; + constructor( private _fb: FormBuilder, + private router: Router, + private route: ActivatedRoute, + private extensionService: ExtensionService,) { } + + ngOnInit(): void { + this.formCode = this.storage.getItem(this.key); + console.log('form_code in ext : ', this.formCode); + + this.extFieldForm = this._fb.group({ + type: [null, [Validators.required]], // HO + field_name: [null, [Validators.required]], // label name + mapping: [null, [Validators.required]], // ext1 + data_type: [null, [Validators.required]], // txt, datw + form_code: [this.formCode], // should come from session + // isActive: [true] + active: [true] + }); + } + getLookupValues() { + this.extensionService.getLookupValues().subscribe(data => { + console.log('Lookup: ',data); + this.lookup_values = data; + }); + } + + getDataTypeValues() { + this.extensionService.getDataTypeValues().subscribe(data => { + console.log('data_type: ', data); + this.datatype_values = data; + }); + } + + onSubmit() { + console.log(this.extFieldForm.value); + this.basic = !this.basic; + this.submitted = true; + if (this.extFieldForm.invalid) { + return; + } + this.onCreate(); + //this.router.navigate(["../all"], { relativeTo: this.route }); + } + + onCreate() { + this.extensionService.create(this.extFieldForm.value).subscribe( + (data) => { + console.log('data save successfully', data); + this.router.navigate(["../all"], { relativeTo: this.route, queryParams: { formCode: this.formCode }}); + //this.router.navigate(['all'], { relativeTo: this.route.parent }); + }, + (error) => { + console.log(error); + this.router.navigate(["../all"], { relativeTo: this.route, queryParams: { formCode: this.formCode }}); + } + ); + } + + close() { + this.basic = !this.basic; + this.router.navigate(["../all"], { relativeTo: this.route }); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.css new file mode 100644 index 0000000..03b630f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.css @@ -0,0 +1,64 @@ +input[type=text], [type=date], [type=password] { + width: 100%; + padding: 15px 20px; + background-color: rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.required-field { + color: red; + font-size: 18px; +} + +.green { + background-color: rgb(156, 231, 156); + color: black; +} + +.blue { + background-color: #57abcf; + color: black; +} + +.td-title { + text-align: center; + width: 150px; + color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); +} + +th { + background-color: rgb(170, 169, 169); + font-weight: bold; +} + +.td-content { + text-align: left; +} + +.delete, .heading { + text-align: center; + color: red; +} + +.section p { + background-color: rgb(206, 201, 201); + padding: 10px; + font-size: 18px; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + +.delete, .heading { + text-align: center; + color: red; +}/*# sourceMappingURL=allextension.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.css.map new file mode 100644 index 0000000..7b2d262 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../../../../../styles1.scss","allextension.component.css","allextension.component.scss"],"names":[],"mappings":"AAAA;EACE,WAAA;EACA,kBAAA;EAED,oCAAA;EACC,qBAAA;EACA,sBAAA;EACA,kBAAA;EACA,sBAAA;ACAF;;ADEA;EACE,UAAA;EACF,eAAA;ACCA;;ADEA;EACE,oCAAA;EACA,YAAA;ACCF;;ADCA;EACE,yBAAA;EACA,YAAA;ACEF;;ADAA;EACE,kBAAA;EACA,YAAA;EACF,YAAA;EACE,iBAAA;EACA,2CAAA;ACGF;;ADAA;EACE,oCAAA;EACA,iBAAA;ACGF;;ADDA;EACE,gBAAA;ACIF;;ADFA;EACE,kBAAA;EACA,UAAA;ACKF;;ADHA;EACA,oCAAA;EACE,aAAA;EACA,eAAA;ACMF;;ADHA;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACMF;;ACzDA;EACE,kBAAA;EACA,UAAA;AD4DF","file":"allextension.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.html new file mode 100644 index 0000000..52701f7 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.html @@ -0,0 +1,101 @@ + + +
+
+
+

Form-Extension - {{getFormCode}}

+
+
+ + + +
+
+ + + Loading ... +
{{error}}
+ + + + + + Go To + + + Field Name + + + Mapping + + + Data Type + + + Action + + + + + + + Build + + {{user.field_name}} + {{user.mapping}} + {{user.data_type}} + + + + + +
Who Column
+
Account ID: {{user.accountId}}
+
Created At: {{user.createdAt| date}}
+
Created By: {{user.createdBy}}
+
Updated At: {{user.updatedAt | date}}
+
Updated By: {{user.updatedBy}}
+
+
+
+ + + + + + + +
Field Name: {{user.field_name}}
+
+
+ + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} + of {{pagination.totalItems}} users + + +
+
+ + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.scss new file mode 100644 index 0000000..8d27434 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.scss @@ -0,0 +1,5 @@ +@import '../../../../../../styles1.scss'; +.delete,.heading{ + text-align: center; + color: red; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.spec.ts new file mode 100644 index 0000000..342426c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AllextensionComponent } from './allextension.component'; + +describe('AllextensionComponent', () => { + let component: AllextensionComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AllextensionComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AllextensionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.ts new file mode 100644 index 0000000..7dfdd6f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/allextension/allextension.component.ts @@ -0,0 +1,204 @@ +import { Component, OnInit, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core'; +import { ActivatedRoute, Router } from "@angular/router"; + +import { ToastrService } from 'ngx-toastr'; +import { ExtensionField } from "src/app/models/fnd/ExtensionField"; +import { ExtensionService } from 'src/app/services/fnd/extension.service'; +//import { Teacher } from "src/app/pages/university/teacher/Teacher"; +import { UserInfoService } from "src/app/services/user-info.service"; + +interface Rows { + id: number; + field_name: any; + mapping: any; + data_type: any; + isActive: any; +} +@Component({ + selector: 'app-allextension', + templateUrl: './allextension.component.html', + styleUrls: ['./allextension.component.scss'] +}) +export class AllextensionComponent implements OnInit { + @ViewChild("extById") extensionById: TemplateRef; + @ViewChild("showInGrid") txId: TemplateRef; + + //@ViewChild("filter") filter: ElementRef; + basic: boolean = false; + // whoColumns: Teacher; // who columns data + columns: any[]; + rows: Rows[]; + temp = []; + rowSelected: any = {}; + modaldelete = false; + loading = false; + error; + selected: any[] = []; + filterData: string; + isLoading: boolean = false; + extensionField: ExtensionField[] = []; + constructor(private router: Router, + private route: ActivatedRoute, + private toastr: ToastrService, + private extensionService: ExtensionService, + private userInfoService: UserInfoService) { } + + private account_id: any; + // private formCode: any; + formCode: string; + getFormCode; + public key: string = "formCode"; + public storage: Storage = sessionStorage; + ngOnInit(): void { + this.route.queryParams.subscribe(params => { + this.getFormCode = params['formCode']; + console.log("formCode ", this.getFormCode); + this.storage.setItem("formCode", this.getFormCode); // Store the value in sessionStorage using the key + }); + + + this.account_id = this.userInfoService.getUserId(); + this.formCode = this.storage.getItem(this.key); + console.log("[ngOnInit] acc_id: " + this.account_id + " formCode: " + this.formCode); + this.getData(); + this.columns = [ + /* { prop: "id", name: "Actions", width: 65, cellTemplate: this.extensionById }, */ + { prop: "field_name", name: "Field Name", width: 120 }, + { prop: "mapping", name: "Mapping", width: 150 }, + { prop: "data_type", name: "Data Type", width: 190 }, + /* { prop: "id", name: "Show In Grid", width: 90, cellTemplate: this.txId } */ + ]; + } + getData() { + this.isLoading = true; + //this.extensionField = new ExtensionField(); + this.extensionService.getAll().subscribe((data) => { + this.isLoading = false; + console.log(data); + // this.extensionField = data; + if (this.formCode === 'undefined' || this.formCode === undefined || this.formCode === null) { + this.extensionField = data; + } else { + this.extensionField = data.filter(item => item.form_code === this.formCode); + console.log(this.extensionField); + } + this.rows = this.extensionField; + if (this.extensionField.length == 0) { + this.error = "No data Available"; + console.log(this.error) + } + //this.temp = [...this.extensionField]; + }, (error) => { + console.log(error); + if (error) { + this.error = "No data Available OR server Error"; + } + }); + } + + alertType: string; + alertMessage: string = ""; + alert = [ + { type: "success", message: "Build Successfully" }, + { type: "danger", message: "Some error Happens" }, + ]; + + buildExtension(id, accountID) { + console.log("buildExtension() Account id = " + this.account_id + " Form Code = ", + this.formCode); + if (this.account_id === null && this.formCode === null) { + this.alertType = this.alert[1].type; + this.alertMessage = "form_code is null"; + return; + } + this.extensionService + .buildExtension(id, accountID, this.formCode) + .subscribe( + (data) => { + console.log("build successfully ", data); + this.alert.forEach((e) => { + if (e.type === "success") { + this.alertType = e.type; + this.alertMessage = e.message; + } //data.type === true : e.message ? e.message + + }); + // go to parent entry form... + //this.router.navigate(['../../'], { relativeTo: this.route.parent }); + + if (data) { + this.toastr.success("Build successfully"); + } + + + }, + (err) => { + + if (err) { + this.toastr.error("Build Not Successful"); + } + console.log("build failed ", err); + this.alertType = this.alert[1].type; + this.alertMessage = this.alert[1].message; + } + ); + } + + isChecked(id: number) { + return ( + this.extensionField.find(c => { + if (c.id === id) return c.isActive; + }) !== undefined + ); + } + + chk(checked) { + console.log(checked); + return !checked; + } + + extField: ExtensionField; + checked: boolean; + toggle(id: number) { + console.log(id); + this.extensionService.getById(id).subscribe(ext => { + this.extField = ext; + this.checked = ext.isActive; + console.log('extField ', this.extField); + console.log('checked ', this.checked); + }); + console.log(this.extField.isActive); + //this.extensionService.update(id,this.extField).subscribe(); + } + + goToAdd() { + this.router.navigate(["../add"], { relativeTo: this.route }); + } + goToEdit(id: number) { + this.router.navigate(["../edit/" + id], { relativeTo: this.route }); + } + + goToWhoColumns(id: number) { + this.basic = !this.basic; + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete = true; + } + delete(id) { + this.modaldelete = false; + console.log("in delete " + id); + this.extensionService.delete(id).subscribe((data) => { + console.log(data); + this.ngOnInit(); + if (data.body) { + this.toastr.success('Deleted successfully'); + } + }, (error) => { + console.log('Error in adding data...', +error); + if (error) { + this.toastr.error('Not Deleted Data Getting Some Error'); + } + }); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.css new file mode 100644 index 0000000..08a78e8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.css @@ -0,0 +1,39 @@ +.button1::after { + content: none; +} + +.button1:hover::after { + content: "ADD ROWS"; +} + +.section { + background-color: #dddddd; + height: 40px; +} + +.section p { + padding: 10px; + font-size: 18px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + background-color: rgb(255, 255, 255); + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + +.center { + text-align: center; +}/*# sourceMappingURL=editextension.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.css.map new file mode 100644 index 0000000..c952ee2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["editextension.component.scss","editextension.component.css"],"names":[],"mappings":"AAEA;EACE,aAAA;ACDF;;ADGA;EACE,mBAAA;ACAF;;ADGA;EACE,yBAVS;EAWT,YAAA;ACAF;;ADGA;EAEE,aAAA;EACA,eAAA;ACDF;;ADIA;EACE,cAAA;EACA,yBAAA;EACA,sBAAA;EACA,wBAAA;EACA,oCAAA;EACA,eAAA;EACA,WAAA;EACA,mBAAA;ACDF;;ADGA;EACE,WAAA;EACA,gBAAA;EACA,sBAAA;EACA,kBAAA;ACAF;;ADEA;EACE,kBAAA;ACCF","file":"editextension.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.html new file mode 100644 index 0000000..cbb8bda --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.html @@ -0,0 +1,40 @@ +

FORM EXTENSION

+Edit Mode
+
+ + +
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+ +
+
+
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.scss new file mode 100644 index 0000000..1a7e044 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.scss @@ -0,0 +1,39 @@ +$bg-color: #dddddd; + +.button1::after { + content: none; +} +.button1:hover::after { + content: "ADD ROWS"; +} + +.section { + background-color: $bg-color; + height: 40px; +} + +.section p { + //color: white; + padding: 10px; + font-size: 18px; +} + +.clr-input { + color: #212529; + border: 1px solid #ced4da; + border-radius: 0.25rem; + padding: 0.75rem 0.75rem; + background-color:rgb(255, 255, 255); + margin-top: 3px; + width: 100%; + margin-bottom: 10px; +} +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} +.center { + text-align: center; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.spec.ts new file mode 100644 index 0000000..a8dd592 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { EditextensionComponent } from './editextension.component'; + +describe('EditextensionComponent', () => { + let component: EditextensionComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ EditextensionComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(EditextensionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.ts new file mode 100644 index 0000000..015a153 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/editextension/editextension.component.ts @@ -0,0 +1,71 @@ +import { HttpErrorResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ExtensionField } from 'src/app/models/fnd/ExtensionField'; +import { ExtensionService } from 'src/app/services/fnd/extension.service'; + +interface Rows { + id: number; + firstName: string; + lastName: string; + email: string; + createdAt: Date; + updatedAt: Date; +} +@Component({ + selector: 'app-editextension', + templateUrl: './editextension.component.html', + styleUrls: ['./editextension.component.scss'] +}) +export class EditextensionComponent implements OnInit { + types:string[] = ['header', 'line']; + lookup_values: string[] = []; // come from server + lookups: string[] =[ + 'extn1', 'extn2', 'extn3', 'extn4', 'extn5', + 'extn6', 'extn7', 'extn8', 'extn9', 'extn10', + 'extn11', 'extn12', 'extn13', 'extn14', 'extn15' + ]; + datatype_values: string[] = []; // come from server + datatypes: string[] = ['textfield', 'longtext', 'date', 'checkbox', 'radiobutton', 'autocomplete']; + + + updated = false; + extensionField: ExtensionField; + id: number; + constructor(private router: Router, + private route: ActivatedRoute, + private extensionService: ExtensionService) { } + + ngOnInit(): void { + this.extensionField = new ExtensionField(); + this.id = this.route.snapshot.params["id"]; + console.log("update with id = ", this.id); + this.getById(this.id); + } + getById(id: number) { + this.extensionService.getById(id).subscribe((data) => { + console.log(data); + this.extensionField = data; + }); + } + update() { + this.extensionService.update(this.id, this.extensionField).subscribe( + (data) => { + console.log(data); + this.router.navigate(["../../all"], { relativeTo: this.route, queryParams: { formCode: this.extensionField.form_code }}); + }, + (error: HttpErrorResponse) => { + console.log(error.message); + } + ); + } + + onSubmit() { + this.updated = true; + this.update(); + } + + back() { + this.router.navigate(["../../all"], { relativeTo: this.route, queryParams: { formCode: this.extensionField.form_code } }); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.css b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.css new file mode 100644 index 0000000..87d9fed --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.css @@ -0,0 +1 @@ +/*# sourceMappingURL=extension.component.css.map */ \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.css.map b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.css.map new file mode 100644 index 0000000..1113c5f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"extension.component.css"} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.html new file mode 100644 index 0000000..6c46b1d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.html @@ -0,0 +1 @@ + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.spec.ts new file mode 100644 index 0000000..56890ae --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ExtensionComponent } from './extension.component'; + +describe('ExtensionComponent', () => { + let component: ExtensionComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ExtensionComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ExtensionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.ts new file mode 100644 index 0000000..483aedf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/extension/extension.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-extension', + templateUrl: './extension.component.html', + styleUrls: ['./extension.component.scss'] +}) +export class ExtensionComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.html new file mode 100644 index 0000000..873f882 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.html @@ -0,0 +1,3 @@ + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.spec.ts new file mode 100644 index 0000000..39261a3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MainPageComponent } from './main-page.component'; + +describe('MainPageComponent', () => { + let component: MainPageComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ MainPageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(MainPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.ts new file mode 100644 index 0000000..9873121 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/main-page/main-page.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-main-page', + templateUrl: './main-page.component.html', + styleUrls: ['./main-page.component.scss'] +}) +export class MainPageComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.html new file mode 100644 index 0000000..8f1ddb8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.html @@ -0,0 +1,238 @@ + + +
+
+
+

Sequence Genarator

+
+ +
+ + +
+
+ + + + + Loading ... + +
{{error}}
+
+ + + Current No + + + + + Name + + + + + Prefix + + + + + + Seperator + + + + + + Sequence Size + + + + + {{user.current_no}} + {{user.sequence_name}} + {{user.prefix}} + {{user.seperator}} + {{user.sequence_size}} + + + + + + + + + + + + Users per page + {{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} of {{pagination.totalItems}} users + + +
+
+ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.scss new file mode 100644 index 0000000..52f40a2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.scss @@ -0,0 +1,72 @@ +input[type=text],[type=number], +[type=date], +[type=password] { + width: 100%; + padding: 15px 20px; + // margin: 3px 0; + background-color: rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} + +.required-field { + color: red; + font-size: 18px; +} + +.green { + background-color: rgb(156, 231, 156); + color: black; +} + +.blue { + background-color: #57abcf; //rgb(82, 87, 161); + color: black; +} + +.td-title { + text-align: center; + width: 150px; + color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + //color: rgb(24, 13, 13); +} + +th { + //background-color:rgb(170, 169, 169); + font-weight: bold; +} + +.td-content { + text-align: left; +} + +.delete, +.heading { + text-align: center; + color: red; +} + +.section p { + background-color: rgb(206, 201, 201); + padding: 10px; + font-size: 18px; +} + +select { + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + +input.ng-invalid.ng-touched { + border-color: red; +} + +.error_mess { + color: red; +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.spec.ts new file mode 100644 index 0000000..5981aa5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SequencegenaratorComponent } from './sequencegenarator.component'; + +describe('SequencegenaratorComponent', () => { + let component: SequencegenaratorComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SequencegenaratorComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(SequencegenaratorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.ts new file mode 100644 index 0000000..a4776a0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/fnd/sequencegenarator/sequencegenarator.component.ts @@ -0,0 +1,189 @@ +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { ToastrService } from 'ngx-toastr'; +import { SequenceService } from 'src/app/services/api/sequence.service'; +import { ExcelService } from 'src/app/services/excel.service'; +import * as moment from 'moment'; +import { HttpErrorResponse } from '@angular/common/http'; +@Component({ + selector: 'app-sequencegenarator', + templateUrl: './sequencegenarator.component.html', + styleUrls: ['./sequencegenarator.component.scss'] +}) +export class SequencegenaratorComponent implements OnInit { + loading = false; + selected: any[] = []; + workflow_data; + rowSelected :any= {}; + modaldelete=false; + error; + alldata; + modaladd=false; + modaledit=false; + submitted = false; + + public entryForm: FormGroup; + constructor(private seqservice:SequenceService,private router: Router, private toastr: ToastrService,private _fb: FormBuilder, + private route: ActivatedRoute,private excel: ExcelService) { } + + ngOnInit(): void { + this.getall(); + this.entryForm = this._fb.group({ + prefix:[null], +sequence_size:[null], +suffix:[null], +starting_no:[null], +seperator:[null], + +sequence_name:[null], +sequence_code:[null], +demonstration:[null], + +current_no:[null] + }); + } + getall(){ + this.seqservice.getAll().subscribe((data)=>{ + console.log(data); + this.alldata=data; + if(this.alldata.lenght==0){ + this.error="No data" + } + },(error) => { + console.log(error); + if(error){ + this.error="No data Available OR server Error"; + } + + }) + } + // onSubmit(){ + // console.log(this.entryForm.value); + // this.seqservice.create(this.entryForm.value).subscribe((data)=>{ + // console.log(data); + // if (data) { + // this.toastr.success('Added successfully'); + // } + // }, + // (error) => { + // console.log('Error in adding data...',+error); + // if(error){ + // this.toastr.error('Not added Data'); + // } + + // }); + // this.modaladd=false; + // } + + + onSubmit() { + console.log(this.entryForm.value); + this.submitted = true + if (this.entryForm.invalid) { + return + } + this.onCreate(); + + } + + + onCreate() { + this.modaladd = false; + this.seqservice.create(this.entryForm.value).subscribe( + (data) => { + console.log(data); + if (data || data.status >=200 && data.status <=299) { + this.toastr.success("Added Succesfully"); + this.ngOnInit(); + } + },(error) => { + if(error.status >=200 && error.status <=299){ + this.toastr.success("Added Succesfully"); + this.ngOnInit(); + } + if(error.status >=400 && error.status <=499){ + this.toastr.error("Not Added"); + this.ngOnInit(); + } + if(error.status >=500 && error.status <=599){ + this.toastr.error("Server Error"); + this.ngOnInit(); + } + }); + } + + + goToAdd(){ + this.modaladd=true; + + } + + onExport() { + this.excel.exportAsExcelFile(this.alldata, 'user_', + moment().format('YYYYMMDD_HHmmss')) + } + + goToEdit(row) { + this.rowSelected = row; + console.log(row) + this.modaledit=true; + } + onDelete(row) { + this.rowSelected = row; + this.modaldelete=true; + } + + delete(id) + { + this.modaldelete = false; + console.log("in delete "+id); + this.seqservice.delete(id).subscribe((data)=>{ + console.log(data); + if (data == null || data.status >=200 && data.status <=299) { + this.toastr.success('Deleted successfully'); + this.ngOnInit(); + } + }, + (error) => { + console.log(error); + if(error.status >=200 && error.status <=299){ + this.toastr.success('Deleted successfully'); + this.ngOnInit(); + } + if(error.status >=400 && error.status <=499){ + this.toastr.error('Not Deleted Data Getting Some Error'); + this.ngOnInit(); + } + if(error.status >=500 && error.status <=599){ + this.toastr.error('Server Error'); + this.ngOnInit(); + } + }); + + } + onUpdate(id){ + this.modaledit=false; +this.seqservice.update(id,this.rowSelected).subscribe((data)=>{ +console.log(data); +if (data || data.status >=200 && data.status <=299) { + this.toastr.success("Update Succesfully"); + this.ngOnInit(); +} +},(error: HttpErrorResponse) => { +console.log(error?.message); +if(error.status >=200 && error.status <=299){ + this.toastr.success("Update Succesfully"); + this.ngOnInit(); +} +if(error.status >=400 && error.status <=499){ + this.toastr.error("Not Update"); + this.ngOnInit(); +} +if(error.status >=500 && error.status <=599){ + this.toastr.error("Server Error"); + this.ngOnInit(); +} +}); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.html new file mode 100644 index 0000000..064ccb8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.html @@ -0,0 +1,205 @@ + + +
+ + +
+ +
+ + {{ sysparameter?.company_Display_Name }} + + + CloudnSure + + +
+ + + + + + + + + + +
+ + + + + About + Profile Settings + + Change Password + Log out + + + +
+
+ +
+
+ +
+ + + + +
+ + +
+ + + + + {{ menu.menuItemDesc }} + + + + + {{ subnav.menuItemDesc }} + + + + + + + + + + {{ menu.menuItemDesc }} + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ +
+ + + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.scss new file mode 100644 index 0000000..2479f83 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.scss @@ -0,0 +1,21 @@ +input[type=text],[type=date], select,textarea { + width: 100%; + padding: 12px 20px; + margin: 8px 0; + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} +.center-content { + //width: 100%; + // max-width: 800px; + margin: auto; + // padding: 0 15px; + // display: flex; + // flex-direction: row; + // align-items: center; + // justify-content: center; + // flex-wrap: wrap; + // text-align: center; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.spec.ts new file mode 100644 index 0000000..c4d6365 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LayoutComponent } from './layout.component'; + +describe('LayoutComponent', () => { + let component: LayoutComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ LayoutComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(LayoutComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.ts new file mode 100644 index 0000000..c3bf819 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/layout/layout.component.ts @@ -0,0 +1,301 @@ + +import { Component,ViewEncapsulation, OnInit, Input } from '@angular/core'; +import { Router,ActivatedRoute } from '@angular/router'; +import { LoginService } from '../../../services/api/login.service'; +import { UserInfoService} from '../../../services/user-info.service'; +import { RealnetMenuService } from '../../../services/api/realnet-menu.service'; +import { Rn_Main_Menu } from '../../../models/builder/Rn_Main_Menu'; +import { MenuGroupService } from '../../../services/admin/menu-group.service'; +// import { GuidedTour, Orientation} from '../ngx-guided-tour/src/lib/guided-tour.constants'; +// import { GuidedTourService } from '../ngx-guided-tour/src/lib/guided-tour.service'; +// import { TourService } from '../ngx-guided-tour/src/lib/tour.service'; +import { ToastrService } from 'ngx-toastr'; +import { environment } from 'src/environments/environment'; +import { SysparameterService } from 'src/app/services/admin/sysparameter.service'; +import { ReportBuilderService } from 'src/app/services/api/report-builder.service'; +import { map } from 'rxjs'; + +import { RouterModule } from '@angular/router'; +import { ProjectSetup } from 'src/app/models/builder/Project_setup'; +import { Dashboard3Service } from 'src/app/services/builder/dashboard3.service'; + + + +@Component({ + selector: 'app-layout', + templateUrl: './layout.component.html', + styleUrls: ['./layout.component.scss'] +}) +export class LayoutComponent implements OnInit { + // baseUrl= environment.chaturl; + @Input() data:any; + + loading = false; + apps: Array = []; + projectsetup; + + collapsed = true; + public showAppAlert:boolean = false; +modalteam=false; + public userName: string=""; + + private formCode: string ='teacher_form'; + public key:string="formCode"; + public storage:Storage = sessionStorage; + + constructor( + private router: Router, + private route: ActivatedRoute, + private userInfoService:UserInfoService, + private realnetMenuService: RealnetMenuService, + private menuGroupService: MenuGroupService, + private sysparaservice:SysparameterService, + private reportBuilderService: ReportBuilderService, + private dashboardService : Dashboard3Service, + // private guidedTourService: GuidedTourService, + // private tourservice: TourService, + private toastr: ToastrService, + ) { + this.userName = this.userInfoService.getUserName(); + this.reportBuilderService.getrbDetails().subscribe((data) => { + this.gridData = data; + }); + } + user_name : any; + userrole:any; + menus: Rn_Main_Menu[]; + menu:any; + tourdata; + steps; + error; + ngOnInit() { + this.storage.setItem(this.key, this.formCode); + this.user_name = this.userInfoService.getUserName(); + console.log('user name: ' + this.user_name); + this.userrole=this.userInfoService.getRoles(); + console.log('user_role',this.userrole); + this.udata=this.userInfoService.getUserId(); + console.log('user id',this.udata); + this.loadMenuByAccountId(); + this.loadMenuByMenuGroup(); + this.getById(1); +// this.tourservice.getall().subscribe((data)=>{ +// this.tourdata=data[1]; +// //console.log("tour data",data); +// console.log(this.tourdata); +// //console.log(this.tourdata.tourId); +// //console.log(this.tourdata.useOrb); +// //this.steps=JSON.stringify(this.tourdata.steps); +// // console.log(this.tourdata.steps); +// //this.dashboardTour.tourId=this.tourdata.tourId; +// //console.log(this.dashboardTour.tourId); +// //this.dashboardTour.useOrb=this.tourdata.useOrb; +// // this.dashboardTour.steps=this.tourdata.steps; +// }); +} + + + + +showFolderNames: boolean = false; // Variable to control the report names display +reportNames: any[] = []; // Store the report names + +// getName() { +// this.reportBuilderService.getrbDetails().pipe( +// map((data) => data.map((item) => item.folderName)) +// ).subscribe((reportName) => { +// this.reportNames = reportName; +// // this.showReportNames = true; // Toggle on +// console.log('Report Names:', this.reportNames); +// }); + +// } + + +getName() { + if (this.showFolderNames) { + // If in report mode, switch to default mode + this.showFolderNames = false; + } else { + // If in default mode, switch to report mode + this.reportBuilderService.getrbDetails().pipe( + map((data) => data.map((item) => item.folderName)) + ).subscribe( + (folderName) => { + this.reportNames = folderName; + console.log('Report Names:', this.reportNames); + this.showFolderNames = true; + },); + } +} + +filteredGridData: any[] = []; +gridData: any[] = []; +// Function to filter the data based on the selected folder +filterGridDataByFolder(folderName: string) { + this.filteredGridData = this.gridData.filter(item => item.folderName === folderName); +} + +showDashNames: boolean = false; +dashNames: any[] = []; +getDashName() { + if (this.showDashNames) { + // If in report mode, switch to default mode + this.showDashNames = false; + } else { + // If in default mode, switch to report mode + this.dashboardService.getAllDash().pipe( + map((data) => data.map((item) => item.dashboard_name)) + ).subscribe( + (dashboard_name) => { + this.dashNames = dashboard_name; + console.log('Dashboard Names:', this.dashNames); + // this.showFolderNames = true; + this.showDashNames = true; + },); + } +} + + + + + + + +showSetupMenus: boolean = false; +toggleSetupMenus() { + this.showSetupMenus = !this.showSetupMenus; + +} + + + + + + + + +// side nav menu-sub_menu +loadMenuByAccountId() { + this.realnetMenuService.getByAccountId().subscribe(resp => { + this.menus = resp; + console.log('menu: ', this.menus); + }); +} + +loadMenuByMenuGroup() { + this.menuGroupService.getByCurrentUserMenuGroupId2().subscribe(resp => { + this.menus = resp; + console.log('menus: ', this.menus); + },(error) => { + console.log(error); + if(error){ + this.error="No data Available OR server Error"; + } + if (error.status === 401) { + // auto logout if 401 response returned from api + // this.authenticationService.logout(); + this.toastr.error("Your Token Is Expire Plz login Again") + //location.reload(true); +} + }) +} +sysparameter; +getById(id: number) { + this.sysparaservice.getById(id).subscribe((data) => { + this.sysparameter = data; + console.log("getbyiddata",this.sysparameter); + }, + (err) => { + console.log(err); + } + ); +} + + +/* menuGroup: Rn_Menu_Group_Header[]; +menu_id: number; +loadMenuGroupData() { + this.menuGroupService.getAll().subscribe(resp => { + this.menuGroup = resp; + this.menu_id = this.menuGroup + }); +} */ + + + + + +navbarSelectionChange(val){ + // console.log(val); +} + +closeAppAlert(){ + this.showAppAlert=false; +} + +isDisabled(input: string): boolean{ + if(input === null) { + return true; + } else false; +} + + + onLogout() { + this.userInfoService.logout().subscribe((data)=>{ + console.log(data); + }); + sessionStorage.clear(); + this.router.navigate(['login']); + } + menuFlag = true; + menuFlag1 = false; + udata; + uid; + message(){ + //this.menuFlag = false; + // this.menuFlag1 = true; +// this.menuGroupService.getuser(this.udata).subscribe((data)=>{ +// console.log(data); +// }) +// window.open(`${this.baseUrl}`) + //window.location.href = `${this.baseUrl}`; + //this.udata=this.userInfoService.getUserInfo(); + //console.log(this.udata); + + this.menuGroupService.save(this.udata); + + this.uid=this.udata.userid; + localStorage.setItem("id", JSON.stringify(this.udata)); + //localStorage.setItem('id', this.uid); + //window.location.href = (`${this.baseUrl}/` + this.udata), true + //this.router.navigate([`${this.baseUrl}`], { relativeTo: this.route ,queryParams: { id: this.udata }}); + + //this.router.navigate(["../sureboard"],{relativeTo: this.route, queryParams: { userid: this.udata }}); + //this.router.navigate([`${this.baseUrl}`],{relativeTo: this.route, queryParams: { userid: this.udata }}); + //this.udata = this.userInfoService.getUserInfo(); + //this.userInfoService.storeUserInfo(JSON.stringify(this.udata.user)); + }// + + modaladd(){ + //this.modalteam=true; + this.router.navigate(['/cns-portal/myworkspace']); + } + mc; + me; + md; + mv; + send(val){ + console.log(val); + this.menuGroupService.storeaddeditvalues(val); +this.mc=val.mcreate; +this.me=val.medit; +this.md=val.mdelete; +this.mv=val.mvisible; +if(this.mv == 'false'){ + this.router.navigate(['/**']) +} + this.router.navigate(['./'+ val.main_menu_action_name] , { relativeTo: this.route}); + } + //skipLocationChange: true, value pass params->,queryParams:{mc:this.mc,me:this.me,md:this.md} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.html new file mode 100644 index 0000000..873f882 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.html @@ -0,0 +1,3 @@ + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.spec.ts new file mode 100644 index 0000000..39261a3 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MainPageComponent } from './main-page.component'; + +describe('MainPageComponent', () => { + let component: MainPageComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ MainPageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(MainPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.ts new file mode 100644 index 0000000..9873121 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-page/main-page.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-main-page', + templateUrl: './main-page.component.html', + styleUrls: ['./main-page.component.scss'] +}) +export class MainPageComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts new file mode 100644 index 0000000..e7c9cd6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main-routing.module.ts @@ -0,0 +1,259 @@ + + +import { SequencegenaratorComponent } from './fnd/sequencegenarator/sequencegenarator.component'; +import { Component, NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { MainPageComponent } from '../main/fnd/main-page/main-page.component'; +import { PageNotFoundComponent } from './page-not-found/page-not-found.component'; +import { AboutComponent } from '../main/admin/about/about.component'; +import { LayoutComponent } from './layout/layout.component'; +import { UserComponent } from '../main/admin/user/user.component'; + +import { PasswordResetComponent } from '../main/admin/password-reset/password-reset.component'; +import { DashboardComponent } from '../main/fnd/dashboard/dashboard.component'; +import { AllMenuGroupComponent } from '../main/admin/menu-group/all/all-menu-group.component'; +import { EditMenuGroupComponent } from '../main/admin/menu-group/edit/edit-menu-group.component'; +import { MenuGroupComponent } from '../main/admin/menu-group/menu-group.component'; +import { ReadOnlyMenuGroupComponent } from '../main/admin/menu-group/read-only/readonly-menu-group.component'; +import { MenuRegisterComponent } from '../main/admin/menu-register/menu-register.component'; +import { AllMenurComponent } from '../main/admin/menu-register/all-menur/all-menur.component'; +import { AddMenurComponent } from '../main/admin/menu-register/add-menur/add-menur.component'; +import { EditMenurComponent } from '../main/admin/menu-register/edit-menur/edit-menur.component'; +import { ReadonlyMenurComponent } from '../main/admin/menu-register/readonly-menur/readonly-menur.component'; +import { ProfileSettingComponent } from '../main/admin/profile-setting/profile-setting.component'; +import { UsermaintanceComponent } from '../main/admin/usermaintance/usermaintance.component'; +import { UsermaintanceaddComponent } from '../main/admin/usermaintanceadd/usermaintanceadd.component'; +import { UsermaintanceeditComponent } from '../main/admin/usermaintanceedit/usermaintanceedit.component'; +import { UsergrpmaintenanceComponent } from '../main/admin/usergrpmaintenance/usergrpmaintenance.component'; +import { MenuaccesscontrolComponent } from '../main/admin/menuaccesscontrol/menuaccesscontrol.component'; +import { AuthGuard } from '../../services/auth_guard.service'; + +import { SystemparametersComponent } from '../main/admin/systemparameters/systemparameters.component'; +import { MenumaintanceComponent } from '../main/admin/menumaintance/menumaintance.component'; + +import { SubmenuComponent } from './admin/submenu/submenu.component'; + +import { Role } from '../../models/admin/role'; +import { AccesstypeComponent } from './admin/accesstype/accesstype.component'; +import { ModulesComponent } from './admin/modules/modules.component'; + +import { SessionloggerComponent } from './admin/sessionlogger/sessionlogger.component'; +import { ReportRunnerComponent } from './builder/report-runner/report-runner.component'; +import { ReportrunnerallComponent } from './builder/report-runner/reportrunnerall/reportrunnerall.component'; +import { Reportrunneredit2Component } from './builder/report-runner/reportrunneredit2/reportrunneredit2.component'; +import { ReportrunnereditComponent } from './builder/report-runner/reportrunneredit/reportrunneredit.component'; +import { ReportBuildComponent } from './builder/report-build/report-build.component'; +import { ReportbuildallComponent } from './builder/report-build/reportbuildall/reportbuildall.component'; +import { ReportbuildaddComponent } from './builder/report-build/reportbuildadd/reportbuildadd.component'; +import { ReportbuildeditComponent } from './builder/report-build/reportbuildedit/reportbuildedit.component'; +import { ReportbuildqueryComponent } from './builder/report-build/reportbuildquery/reportbuildquery.component'; +import { ReportBuild2Component } from './builder/report-build2/report-build2.component'; +import { ReportBuild2allComponent } from './builder/report-build2/report-build2all/report-build2all.component'; +import { ReportBuild2addComponent } from './builder/report-build2/report-build2add/report-build2add.component'; +import { ReportBuild2editComponent } from './builder/report-build2/report-build2edit/report-build2edit.component'; + + +import { DashboardnewComponent } from './builder/dashboardnew/dashboardnew.component'; +import { AllnewdashComponent } from './builder/dashboardnew/allnewdash/allnewdash.component'; +import { AddnewdashComponent } from './builder/dashboardnew/addnewdash/addnewdash.component'; +import { EditformnewdashComponent } from './builder/dashboardnew/editformnewdash/editformnewdash.component'; +import { EditnewdashComponent } from './builder/dashboardnew/editnewdash/editnewdash.component'; +import { ScheduleComponent } from './builder/dashboardnew/schedule/schedule.component'; +import { SetupiconComponent } from './builder/setupicon/setupicon.component'; +import { ExtensionComponent } from './fnd/extension/extension.component'; +import { AllextensionComponent } from './fnd/extension/allextension/allextension.component'; +import { AddextensionComponent } from './fnd/extension/addextension/addextension.component'; +import { EditextensionComponent } from './fnd/extension/editextension/editextension.component'; +import { DashboardrunnerComponent } from './builder/dashboardrunner/dashboardrunner.component'; +import { DashrunnerallComponent } from './builder/dashboardrunner/dashrunnerall/dashrunnerall.component'; +import { DashrunnerlineComponent } from './builder/dashboardrunner/dashrunnerline/dashrunnerline.component'; + +import { ApiregisteryComponent } from './fnd/apiregistery/apiregistery.component'; + +import { DatamanagementComponent } from './datamanagement/datamanagement/datamanagement.component'; +import { DatamananementworkflowComponent } from './datamanagement/datamananementworkflow/datamananementworkflow.component'; +import { BulkimportComponent } from './datamanagement/bulkimport/bulkimport.component'; +import { BulkimportallComponent } from './datamanagement/bulkimport/bulkimportall/bulkimportall.component'; +import { BulkimportaddComponent } from './datamanagement/bulkimport/bulkimportadd/bulkimportadd.component'; +import { BulkimporteditComponent } from './datamanagement/bulkimport/bulkimportedit/bulkimportedit.component'; +import { BulkimportlineComponent } from './datamanagement/bulkimport/bulkimportline/bulkimportline.component'; +import { BulkimporteditlineComponent } from './datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component'; +import { MappingruleComponent } from './datamanagement/mappingrule/mappingrule.component'; +import { MappingruleallComponent } from './datamanagement/mappingrule/mappingruleall/mappingruleall.component'; +import { MappingruleaddComponent } from './datamanagement/mappingrule/mappingruleadd/mappingruleadd.component'; +import { MappingruleeditComponent } from './datamanagement/mappingrule/mappingruleedit/mappingruleedit.component'; + + + + +const routes: Routes = [ + //Important: The sequence of path is important as the router go over then in sequential manner + { path: '', redirectTo: '/cns-portal/dashboard', pathMatch: 'full' }, + { + path: 'cns-portal', + component: LayoutComponent, + canActivate: [AuthGuard], + children: [ + { path: '', redirectTo: 'user', pathMatch: 'full' }, + { path: 'main', component: MainPageComponent }, + { path: 'user', component: UserComponent }, + + + + + { path: 'usermaintance', component: UsermaintanceComponent }, + { path: 'usermaintanceadd', component: UsermaintanceaddComponent }, + { path: 'usermaintancedit/:id', component: UsermaintanceeditComponent }, + { path: 'usergrpmaintance', component: UsergrpmaintenanceComponent }, + { path: 'menuaccess', component: MenuaccesscontrolComponent }, + { path: 'systemparameters', component: SystemparametersComponent }, + { path: 'menumaintance', component: MenumaintanceComponent }, + { path: 'submenu/:id', component: SubmenuComponent }, + + { path: 'passwordreset', component: PasswordResetComponent }, + { path: 'profile-settings', component: ProfileSettingComponent }, + { path: 'about', component: AboutComponent }, + { path: 'setupicon', component: SetupiconComponent }, + + + { + path:'reportbuild', component:ReportBuildComponent, + children : [ + { path:'',redirectTo:'all',pathMatch:'full'}, + { path:'all',component: ReportbuildallComponent}, + { path:'add',component:ReportbuildaddComponent}, + { path:'edit/:id', component:ReportbuildeditComponent}, + { path:'reportQuery/:id',component:ReportbuildqueryComponent} + ] + }, // {path:'rerunner',component:DatefunctionComponent}, + + { + path:'reportbuild2', component:ReportBuild2Component, + children : [ + { path:'',redirectTo:'all',pathMatch:'full'}, + { path:'all',component: ReportBuild2allComponent}, + { path:'add',component:ReportBuild2addComponent}, + { path:'edit/:id', component:ReportBuild2editComponent}, + ] + }, + + //report runner + { + path: 'rerunner', component: ReportRunnerComponent, + children: [ + { path: '', redirectTo: 'all', pathMatch: 'full' }, + { path: 'all', component: ReportrunnerallComponent }, + { path: 'runner2/:id', component: Reportrunneredit2Component }, + { path: 'runner/:id', component: ReportrunnereditComponent }, + ] + }, + + // dashboardbuilder + { + path: 'dashboardbuilder', component: DashboardnewComponent, + children: [ + + { path: '', redirectTo: 'all', pathMatch: 'full' }, + { path: 'all', component: AllnewdashComponent }, + { path: 'adddata', component: AddnewdashComponent }, + { path: 'editdata/:id', component: EditformnewdashComponent }, + { path: 'editdashn/:id', component: EditnewdashComponent }, + { path: 'schedule/:id', component: ScheduleComponent }, + ] + }, + + { + path:'dashboardrunner',component:DashboardrunnerComponent, + children:[ + + { path: '', redirectTo: 'all', pathMatch: 'full' }, + { path: 'all', component: DashrunnerallComponent}, + { path: 'dashrunner/:id', component: DashrunnerlineComponent}, + ] + }, + + + { path: 'accesstype', component: AccesstypeComponent }, + { path: 'acmodules', component: ModulesComponent }, + { path: 'sessionlogger', component: SessionloggerComponent }, + { path: 'dashboard', component: DashboardComponent, }, + + { + path: 'menu-group', component: MenuGroupComponent, + children: [ + { path: '', redirectTo: 'all-menu', pathMatch: 'full' }, + { path: 'all-menu', component: AllMenuGroupComponent }, + { path: 'edit-menu', component: EditMenuGroupComponent }, + { path: 'read-only', component: ReadOnlyMenuGroupComponent } + ], + }, + + { + path: 'menu-r', component: MenuRegisterComponent, + children: [ + { path: '', redirectTo: 'all-r', pathMatch: 'full' }, + { path: 'all-r', component: AllMenurComponent }, + { path: 'add-r', component: AddMenurComponent }, + { path: 'edit-r', component: EditMenurComponent }, + { path: 'readonly-r', component: ReadonlyMenurComponent } + ], + }, + + { + path: 'extension', component: ExtensionComponent, + children: [ + { path: '', redirectTo: 'all', pathMatch: 'full' }, + { path: 'all', component: AllextensionComponent }, + { path: 'add', component: AddextensionComponent }, + { path: 'edit/:id', component: EditextensionComponent }, + ], + }, + {path:'SequenceGenerator',component:SequencegenaratorComponent}, + {path:'apiregistery',component:ApiregisteryComponent}, + + + // DATA MANAGEMENT + +{path:'datamanagement', component:DatamanagementComponent}, +{path:'dataworkflow/:id',component:DatamananementworkflowComponent}, + +//bulk Import Rule +{path: 'validationrule',component: BulkimportComponent, +children: [ + { path: '', redirectTo: 'all', pathMatch: 'full' }, + {path: 'all',component: BulkimportallComponent}, + {path: 'add',component: BulkimportaddComponent}, + {path: 'edit/:id',component: BulkimporteditComponent}, + {path: 'ruleline',component: BulkimportlineComponent}, + {path: 'rulelineedit',component: BulkimporteditlineComponent}, +], +}, +//bulk Import Rule mapping +{path: 'mappingrule',component: MappingruleComponent, +children: [ + { path: '', redirectTo: 'all', pathMatch: 'full' }, + {path: 'all',component: MappingruleallComponent}, + {path: 'add',component: MappingruleaddComponent}, + {path: 'edit/:id',component: MappingruleeditComponent}, +], +}, + + + // buildercomponents + + + + + + { path: '**', component: PageNotFoundComponent }, + + ] + }, + +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class MainRoutingModule { } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main.module.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main.module.ts new file mode 100644 index 0000000..e76f05f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/main.module.ts @@ -0,0 +1,181 @@ + + +import { SequencegenaratorComponent } from './fnd/sequencegenarator/sequencegenarator.component'; +import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { ClarityModule } from '@clr/angular'; + +import { MainRoutingModule } from './main-routing.module'; +import { MainPageComponent } from '../main/fnd/main-page/main-page.component'; +import { PageNotFoundComponent } from './page-not-found/page-not-found.component'; +import { AboutComponent } from '../main/admin/about/about.component'; +import { LayoutComponent } from './layout/layout.component'; +import { UserComponent } from '../main/admin/user/user.component'; +import { HelperModule } from 'src/app/pipes/helpers.module'; +import { PasswordResetComponent } from '../main/admin/password-reset/password-reset.component'; + +import { DashboardComponent } from '../main/fnd/dashboard/dashboard.component'; + +import { MenuGroupComponent } from '../main/admin/menu-group/menu-group.component'; +import { AllMenuGroupComponent } from '../main/admin/menu-group/all/all-menu-group.component'; +import { EditMenuGroupComponent } from '../main/admin/menu-group/edit/edit-menu-group.component'; +import { ReadOnlyMenuGroupComponent } from '../main/admin/menu-group/read-only/readonly-menu-group.component'; +import { MenuRegisterComponent } from '../main/admin/menu-register/menu-register.component'; +import { AddMenurComponent } from '../main/admin/menu-register/add-menur/add-menur.component'; +import { EditMenurComponent } from '../main/admin/menu-register/edit-menur/edit-menur.component'; +import { AllMenurComponent } from '../main/admin/menu-register/all-menur/all-menur.component'; +import { ReadonlyMenurComponent } from '../main/admin/menu-register/readonly-menur/readonly-menur.component'; +import { ProfileSettingComponent } from '../main/admin/profile-setting/profile-setting.component'; +import { UsermaintanceComponent } from '../main/admin/usermaintance/usermaintance.component'; +import { UsermaintanceaddComponent } from '../main/admin/usermaintanceadd/usermaintanceadd.component'; +import { UsermaintanceeditComponent } from '../main/admin/usermaintanceedit/usermaintanceedit.component'; +import { UsergrpmaintenanceComponent } from '../main/admin/usergrpmaintenance/usergrpmaintenance.component'; +import { MenuaccesscontrolComponent } from '../main/admin/menuaccesscontrol/menuaccesscontrol.component'; +import { SystemparametersComponent } from '../main/admin/systemparameters/systemparameters.component'; +import { MenumaintanceComponent } from '../main/admin/menumaintance/menumaintance.component'; + +import { DragDropModule } from '@angular/cdk/drag-drop'; +import { CKEditorModule } from 'ng2-ckeditor'; +import { CodemirrorModule } from "@ctrl/ngx-codemirror"; +import { GridsterModule } from 'angular-gridster2'; +import { NgChartsModule } from 'ng2-charts'; +import { NgxChartsModule } from '@swimlane/ngx-charts'; +import { DynamicModule } from 'ng-dynamic-component'; +import { HttpClientModule } from '@angular/common/http'; + +import { UserRegistrationComponent } from '../main/admin/user-registration/user-registration.component'; + +import { QRCodeModule } from 'angularx-qrcode'; +import { ImageCropperModule } from 'ngx-image-cropper'; +import { SubmenuComponent } from './admin/submenu/submenu.component'; +import { TagInputModule } from 'ngx-chips'; +import { AccesstypeComponent } from './admin/accesstype/accesstype.component'; +import { ModulesComponent } from './admin/modules/modules.component'; +import { CookieService } from 'ngx-cookie-service'; +import { SessionloggerComponent } from './admin/sessionlogger/sessionlogger.component'; + +import { WireframeService } from 'src/app/services/builder/wireframe.service'; +import { ReportRunnerComponent } from './builder/report-runner/report-runner.component'; +import { ReportrunnerallComponent } from './builder/report-runner/reportrunnerall/reportrunnerall.component'; +import { ReportrunnereditComponent } from './builder/report-runner/reportrunneredit/reportrunneredit.component'; +import { Reportrunneredit2Component } from './builder/report-runner/reportrunneredit2/reportrunneredit2.component'; +import { ReportBuildComponent } from './builder/report-build/report-build.component'; +import { ReportbuildallComponent } from './builder/report-build/reportbuildall/reportbuildall.component'; +import { ReportbuildaddComponent } from './builder/report-build/reportbuildadd/reportbuildadd.component'; +import { ReportbuildeditComponent } from './builder/report-build/reportbuildedit/reportbuildedit.component'; +import { ReportbuildqueryComponent } from './builder/report-build/reportbuildquery/reportbuildquery.component'; +import { ReportBuild2Component } from './builder/report-build2/report-build2.component'; +import { ReportBuild2allComponent } from './builder/report-build2/report-build2all/report-build2all.component'; +import { ReportBuild2addComponent } from './builder/report-build2/report-build2add/report-build2add.component'; +import { ReportBuild2editComponent } from './builder/report-build2/report-build2edit/report-build2edit.component'; + + +import { DashboardnewComponent } from './builder/dashboardnew/dashboardnew.component'; +import { AddnewdashComponent } from './builder/dashboardnew/addnewdash/addnewdash.component'; +import { AllnewdashComponent } from './builder/dashboardnew/allnewdash/allnewdash.component'; +import { EditformnewdashComponent } from './builder/dashboardnew/editformnewdash/editformnewdash.component'; +import { EditnewdashComponent } from './builder/dashboardnew/editnewdash/editnewdash.component'; +import { ScheduleComponent } from './builder/dashboardnew/schedule/schedule.component'; +import { SetupiconComponent } from './builder/setupicon/setupicon.component'; +import { AddextensionComponent } from './fnd/extension/addextension/addextension.component'; +import { AllextensionComponent } from './fnd/extension/allextension/allextension.component'; +import { EditextensionComponent } from './fnd/extension/editextension/editextension.component'; +import { ExtensionComponent } from './fnd/extension/extension.component'; +import { DoughnutChartComponent } from './builder/dashboardnew/gadgets/doughnut-chart/doughnut-chart.component'; +import { LineChartComponent } from './builder/dashboardnew/gadgets/line-chart/line-chart.component'; +import { RadarChartComponent } from './builder/dashboardnew/gadgets/radar-chart/radar-chart.component'; +import { BarChartComponent } from './builder/dashboardnew/gadgets/bar-chart/bar-chart.component'; +import { BubbleChartComponent } from './builder/dashboardnew/gadgets/bubble-chart/bubble-chart.component'; +import { DynamicChartComponent } from './builder/dashboardnew/gadgets/dynamic-chart/dynamic-chart.component'; +import { ScatterChartComponent } from './builder/dashboardnew/gadgets/scatter-chart/scatter-chart.component'; +import { PolarChartComponent } from './builder/dashboardnew/gadgets/polar-chart/polar-chart.component'; +import { PieChartComponent } from './builder/dashboardnew/gadgets/pie-chart/pie-chart.component'; +import { FinancialChartComponent } from './builder/dashboardnew/gadgets/financial-chart/financial-chart.component'; +import { ToDoChartComponent } from './builder/dashboardnew/gadgets/to-do-chart/to-do-chart.component'; +import { GridViewComponent } from './builder/dashboardnew/gadgets/grid-view/grid-view.component'; + +import { DashboardrunnerComponent } from './builder/dashboardrunner/dashboardrunner.component'; +import { DashrunnerallComponent } from './builder/dashboardrunner/dashrunnerall/dashrunnerall.component'; +import { DashrunnerlineComponent } from './builder/dashboardrunner/dashrunnerline/dashrunnerline.component'; +import { BarRunnerComponent } from './builder/dashboardrunner/dashrunnerline/bar-runner/bar-runner.component'; +import { LineRunnerComponent } from './builder/dashboardrunner/dashrunnerline/line-runner/line-runner.component'; +import { DoughnutRunnerComponent } from './builder/dashboardrunner/dashrunnerline/doughnut-runner/doughnut-runner.component'; +import { GridRunnerComponent } from './builder/dashboardrunner/dashrunnerline/grid-runner/grid-runner.component'; +import { PieRunnerComponent } from './builder/dashboardrunner/dashrunnerline/pie-runner/pie-runner.component'; +import { PolarRunnerComponent } from './builder/dashboardrunner/dashrunnerline/polar-runner/polar-runner.component'; +import { RadarRunnerComponent } from './builder/dashboardrunner/dashrunnerline/radar-runner/radar-runner.component'; +import { ScatterRunnerComponent } from './builder/dashboardrunner/dashrunnerline/scatter-runner/scatter-runner.component'; +import { TodoRunnerComponent } from './builder/dashboardrunner/dashrunnerline/todo-runner/todo-runner.component'; +import { BubbleRunnerComponent } from './builder/dashboardrunner/dashrunnerline/bubble-runner/bubble-runner.component'; + +import { ApiregisteryComponent } from './fnd/apiregistery/apiregistery.component'; + +import { DatamanagementComponent } from './datamanagement/datamanagement/datamanagement.component'; +import { DatamananementworkflowComponent } from './datamanagement/datamananementworkflow/datamananementworkflow.component'; +import { BulkimportComponent } from './datamanagement/bulkimport/bulkimport.component'; +import { BulkimportallComponent } from './datamanagement/bulkimport/bulkimportall/bulkimportall.component'; +import { BulkimportaddComponent } from './datamanagement/bulkimport/bulkimportadd/bulkimportadd.component'; +import { BulkimporteditComponent } from './datamanagement/bulkimport/bulkimportedit/bulkimportedit.component'; +import { BulkimportlineComponent } from './datamanagement/bulkimport/bulkimportline/bulkimportline.component'; +import { BulkimporteditlineComponent } from './datamanagement/bulkimport/bulkimporteditline/bulkimporteditline.component'; +import { MappingruleComponent } from './datamanagement/mappingrule/mappingrule.component'; +import { MappingruleallComponent } from './datamanagement/mappingrule/mappingruleall/mappingruleall.component'; +import { MappingruleaddComponent } from './datamanagement/mappingrule/mappingruleadd/mappingruleadd.component'; +import { MappingruleeditComponent } from './datamanagement/mappingrule/mappingruleedit/mappingruleedit.component'; + +@NgModule({ + declarations: [ + MainPageComponent, PageNotFoundComponent, AboutComponent, LayoutComponent, UserComponent, PasswordResetComponent, + ReportRunnerComponent,ReportrunnerallComponent,ReportrunnereditComponent,Reportrunneredit2Component,DashboardComponent, MenuGroupComponent, AllMenuGroupComponent, EditMenuGroupComponent, ReadOnlyMenuGroupComponent, UserRegistrationComponent, + MenuRegisterComponent, AddMenurComponent, EditMenurComponent, AllMenurComponent, ReadonlyMenurComponent, ProfileSettingComponent, + UsermaintanceComponent, UsermaintanceaddComponent, UsermaintanceeditComponent, UsergrpmaintenanceComponent, MenuaccesscontrolComponent, SystemparametersComponent, + MenumaintanceComponent, SubmenuComponent, AccesstypeComponent, ModulesComponent, SessionloggerComponent, + DashboardnewComponent, AddnewdashComponent, AllnewdashComponent, EditformnewdashComponent, EditnewdashComponent, ScheduleComponent, SetupiconComponent, + DoughnutChartComponent, LineChartComponent, RadarChartComponent, BarChartComponent, BubbleChartComponent, DynamicChartComponent, ScatterChartComponent, PolarChartComponent, PieChartComponent, FinancialChartComponent, ToDoChartComponent,GridViewComponent, + DashboardrunnerComponent,DashrunnerallComponent,DashrunnerlineComponent, BarRunnerComponent, LineRunnerComponent, DoughnutRunnerComponent, GridRunnerComponent,PieRunnerComponent,PolarRunnerComponent,RadarRunnerComponent,ScatterRunnerComponent,TodoRunnerComponent,BubbleRunnerComponent, + ReportBuildComponent,ReportbuildallComponent,ReportbuildaddComponent,ReportbuildeditComponent,ReportbuildqueryComponent,ReportBuild2Component,ReportBuild2allComponent,ReportBuild2addComponent,ReportBuild2editComponent, + ExtensionComponent, + AllextensionComponent, + AddextensionComponent, EditextensionComponent, SequencegenaratorComponent,ApiregisteryComponent, + DatamanagementComponent,DatamananementworkflowComponent,BulkimportComponent,BulkimportallComponent,BulkimportaddComponent,BulkimporteditComponent,BulkimportlineComponent,BulkimporteditlineComponent,MappingruleComponent,MappingruleallComponent,MappingruleaddComponent,MappingruleeditComponent, + + + // buildercomponents + + + + + + + + + ], + imports: [ + QRCodeModule, + CommonModule, + FormsModule, + ReactiveFormsModule, + ClarityModule, + HelperModule, + MainRoutingModule, + DragDropModule, + HttpClientModule, + ImageCropperModule, + TagInputModule, + CodemirrorModule, + CKEditorModule, + GridsterModule, + NgChartsModule, + NgxChartsModule, + DynamicModule, + ], + providers: [ + CookieService, + WireframeService, + + + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] +}) +export class MainModule { } \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.html b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.html new file mode 100644 index 0000000..d5c848c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.html @@ -0,0 +1,5 @@ +
+ +

error 404

+ Not found your page requested. +
diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.scss new file mode 100644 index 0000000..f1d5656 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.scss @@ -0,0 +1,11 @@ +clr-icon { + margin-top: 8%; + opacity: 0.3; + filter: alpha(opacity=30); /* For IE8 and earlier */ +} + +clr-icon:hover { + margin-top: 8%; + opacity: 8.0; + filter: alpha(opacity=80); /* For IE8 and earlier */ +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.spec.ts new file mode 100644 index 0000000..697a946 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PageNotFoundComponent } from './page-not-found.component'; + +describe('PageNotFoundComponent', () => { + let component: PageNotFoundComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PageNotFoundComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PageNotFoundComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.ts new file mode 100644 index 0000000..31ae4d8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/modules/main/page-not-found/page-not-found.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-page-not-found', + templateUrl: './page-not-found.component.html', + styleUrls: ['./page-not-found.component.scss'] +}) +export class PageNotFoundComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/helpers.module.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/helpers.module.ts new file mode 100644 index 0000000..8020056 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/helpers.module.ts @@ -0,0 +1,31 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { ThaiDateAbbrPipe } from './thai-date-abbr.pipe'; +import { ThaiDateFullPipe } from './thai-date-full.pipe'; +import { ThaiDatePipe } from './thai-date.pipe'; +import {TimePipePipe} from './time-pipe.pipe'; +import { SearchFilterPipe } from './search-filter.pipe'; +import { RemoveCommasPipe } from './remove-commas.pipe'; + +@NgModule({ + imports: [ + CommonModule + ], + declarations: [ + ThaiDatePipe, + ThaiDateAbbrPipe, + ThaiDateFullPipe, + TimePipePipe, + SearchFilterPipe, + RemoveCommasPipe, + ], + exports: [ + ThaiDatePipe, + ThaiDateAbbrPipe, + ThaiDateFullPipe, + TimePipePipe, + SearchFilterPipe, + RemoveCommasPipe, + ] +}) +export class HelperModule { } diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/remove-commas.pipe.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/remove-commas.pipe.ts new file mode 100644 index 0000000..f5919ff --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/remove-commas.pipe.ts @@ -0,0 +1,8 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ name: 'removeCommas' }) +export class RemoveCommasPipe implements PipeTransform { + transform(value: any): any { + return value?.replace(/,/g, ''); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/sanitize.pipe.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/sanitize.pipe.ts new file mode 100644 index 0000000..fb2f439 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/sanitize.pipe.ts @@ -0,0 +1,10 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'sanitize' +}) +export class SanitizePipe implements PipeTransform { + transform(value: string): string { + return value.replace(/<|>/g, ''); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/search-filter.pipe.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/search-filter.pipe.ts new file mode 100644 index 0000000..b8a781a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/search-filter.pipe.ts @@ -0,0 +1,58 @@ +import { Pipe, PipeTransform, Injectable } from "@angular/core"; + +@Pipe({ + name: 'filter', + pure: false +}) +@Injectable() +export class SearchFilterPipe implements PipeTransform { + + /** + * @param items object from array + * @param term term's search + * @param excludes array of strings which will ignored during search + */ + transform(items: any, term: string, excludes: any = []): any { + if (!term || !items) return items; + + return SearchFilterPipe.filter(items, term, excludes); + } + + /** + * + * @param items List of items to filter + * @param term a string term to compare with every property of the list + * @param excludes List of keys which will be ignored during search + * + */ + static filter(items: Array<{ [key: string]: any }>, term: string, excludes: any): Array<{ [key: string]: any }> { + + const toCompare = term.toLowerCase(); + + function checkInside(item: any, term: string) { + + if (typeof item === "string" && item.toString().toLowerCase().includes(toCompare)) { + return true; + } + + for (let property in item) { + if (item[property] === null || item[property] == undefined || excludes.includes(property)) { + continue; + } + if (typeof item[property] === 'object') { + if (checkInside(item[property], term)) { + return true; + } + } + else if (item[property].toString().toLowerCase().includes(toCompare)) { + return true; + } + } + return false; + } + + return items.filter(function (item) { + return checkInside(item, term); + }); + } +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date-abbr.pipe.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date-abbr.pipe.ts new file mode 100644 index 0000000..c46d2c8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date-abbr.pipe.ts @@ -0,0 +1,20 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import * as moment from 'moment'; + +@Pipe({ + name: 'thaiDateAbbr' +}) +export class ThaiDateAbbrPipe implements PipeTransform { + thMonthAbbr = ['ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', + 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.']; + + transform(value: any, args?: any): any { + if (moment(value, 'YYYY-MM-DD').isValid()) { + const thaiDate = `${moment(value).get('date')} ${this.thMonthAbbr[moment(value).get('month')]} ${moment(value).get('year') + 543}`; + return thaiDate; + } else { + return '-'; + } + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date-full.pipe.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date-full.pipe.ts new file mode 100644 index 0000000..962b135 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date-full.pipe.ts @@ -0,0 +1,20 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import * as moment from 'moment'; + +@Pipe({ + name: 'thaiDateFull' +}) +export class ThaiDateFullPipe implements PipeTransform { + thMonth = ['มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', + 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม']; + + transform(value: any, args?: any): any { + if (moment(value, 'YYYY-MM-DD').isValid()) { + const thaiDate = `${moment(value).get('date')} ${this.thMonth[moment(value).get('month')]} ${moment(value).get('year') + 543}`; + return thaiDate; + } else { + return '-'; + } + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date.pipe.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date.pipe.ts new file mode 100644 index 0000000..52d3a29 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/thai-date.pipe.ts @@ -0,0 +1,17 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import * as moment from 'moment'; + +@Pipe({ + name: 'thaiDate' +}) +export class ThaiDatePipe implements PipeTransform { + transform(value: any, args?: any): any { + if (moment(value, 'YYYY-MM-DD').isValid()) { + const thaiDate = `${moment(value).get('date')}/${moment(value).get('month') + 1}/${moment(value).get('year') + 543}`; + return thaiDate; + } else { + return '-'; + } + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/time-pipe.pipe.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/time-pipe.pipe.ts new file mode 100644 index 0000000..daa03b8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/pipes/time-pipe.pipe.ts @@ -0,0 +1,36 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'timePipe', + pure: true +}) +export class TimePipePipe implements PipeTransform { + + transform(value: any, args?: any): any { + if (value) { + const seconds = Math.floor((+new Date() - +new Date(value)) / 1000); + if (seconds < 29) // less than 30 seconds ago will show as 'Just now' + return 'Just now'; + const intervals: { [key: string]: number } = { + 'year': 31536000, + 'month': 2592000, + 'week': 604800, + 'day': 86400, + 'hour': 3600, + 'minute': 60, + 'second': 1 + }; + let counter; + for (const i in intervals) { + counter = Math.floor(seconds / intervals[i]); + if (counter > 0) + if (counter === 1) { + return counter + ' ' + i + ' ago'; // singular (1 day ago) + } else { + return counter + ' ' + i + 's ago'; // plural (2 days ago) + } + } + } + return value; +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/accesstype.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/accesstype.service.ts new file mode 100644 index 0000000..4c3029d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/accesstype.service.ts @@ -0,0 +1,64 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from '../api/api-request.service'; +import baseUrl from 'src/app/services/api/helper'; +@Injectable({ + providedIn: 'root' +}) +export class AccesstypeService { + private AllURL = 'access_type/Accesstype'; +private moduleurl='_back/Modules_t' + constructor( private apiRequest: ApiRequestService,private _http: HttpClient,) { } + getAll(page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + return this.apiRequest.get(this.AllURL, params); + } + + create(data:any): Observable { + return this.apiRequest.post(this.AllURL, data); + } + + delete(id: number): Observable { + const _http = this.AllURL + "/" + id; + return this.apiRequest.delete(_http); + } + + update(id: number, data: any): Observable { + const _http = this.AllURL + "/" + id; + return this.apiRequest.put(_http, data); + } + getAll1(page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + return this.apiRequest.get(this.moduleurl, params); + } + + create1(data:any): Observable { + return this.apiRequest.post(this.moduleurl, data); + } + + delete1(id: number): Observable { + const _http = this.moduleurl + "/" + id; + return this.apiRequest.delete(_http); + } + + update1(id: number, data: any): Observable { + const _http = this.moduleurl + "/" + id; + return this.apiRequest.put(_http, data); + } + public getById(id: any){ + return this._http.get(`${baseUrl}/access_type/accessmenu/Accessmenu/${id}`); + } + public addById(id:any,data:any){ + return this._http.post(`${baseUrl}/access_type/accessmenu/Accessmenu/${id}`,data); + + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/auditreport.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/auditreport.service.ts new file mode 100644 index 0000000..ea0066b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/auditreport.service.ts @@ -0,0 +1,38 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import baseUrl from 'src/app/services/api/helper'; +import { ApiRequestService } from '../api/api-request.service'; +@Injectable({ + providedIn: 'root' +}) +export class AuditreportService { +private dateurl="audit/betweendate"; + constructor(private _http: HttpClient,private apiRequest: ApiRequestService,) { } + public getAll() { + return this._http.get(`${baseUrl}/audit/auditall`); + } + public getbyid(id:any) { + return this._http.get(`${baseUrl}/audit/auditall/${id}`); + } + public getbyuser(val:any){ + return this._http.get(`${baseUrl}/audit/listusername/${val}`); + } + public getbyentity(val:any){ + return this._http.get(`${baseUrl}/audit/listentityname/${val}`); + } + public onlydate(from:any,to:any){ + let params: HttpParams = new HttpParams(); + params =params.append("startDate",from); + params =params.append("endDate",to); + return this.apiRequest.get(this.dateurl,params); + } + public apply(from:any,to:any,user:any,entity:any){ + let params: HttpParams = new HttpParams(); + params =params.append("startDate",from); + params =params.append("endDate",to); + params =params.append("user",user); + params =params.append("entity_name",entity) + return this.apiRequest.get(`audit/betweendate_byuser`,params); + //return this._http.get(`${baseUrl}/audit/betweendate_byuser/${from}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/connector-mapping.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/connector-mapping.service.ts new file mode 100644 index 0000000..4a8b75a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/connector-mapping.service.ts @@ -0,0 +1,37 @@ +import { Injectable } from '@angular/core'; +import baseUrl from 'src/app/services/api/helper'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { ApiRequestService } from '../api/api-request.service'; +@Injectable({ + providedIn: 'root' +}) +export class ConnectorMappingService { + private getAllData = 'connector/Connectorjson'; + private baseURL = 'Connectorjson'; + + constructor(private _http: HttpClient,) { } + public getAll() { + return this._http.get(`${baseUrl}/connector/Connectorjson`); + } + public create(data: any){ + return this._http.post(`${baseUrl}/connector/Connectorjson`, data); + } + public getById(id: any){ + return this._http.get(`${baseUrl}/connector/Connectorjson/${id}`); + } + public delete(id:any){ + return this._http.delete(`${baseUrl}/connector/Connectorjson/${id}`); + } + public getkeys(data:any) { + return this._http.post(`${baseUrl}/token/connector/mapping/mapping`,data); + } + public getValues(data:any) { + return this._http.post(`${baseUrl}/token/connector/mapping/mapping1`,data); + } + public getValues1(data:any) { + return this._http.post(`${baseUrl}/token/connector/mapping/mapping2`,data); + } + public update(id:any,data:any){ + return this._http.put(`${baseUrl}/connector/Connectorjson/${id}`, data); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/deploymentprofile.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/deploymentprofile.service.ts new file mode 100644 index 0000000..44f776b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/deploymentprofile.service.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core'; +import { ApiRequestService } from '../api/api-request.service'; +import { HttpClient, HttpHeaders, HttpParams } from "@angular/common/http"; +import { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class DeploymentprofileService { + + private getAllURL = 'deployment/deplomentprofile'; + addDataURl = 'deployment/deplomentprofile'; + private baseURL = "deployment/deplomentprofile"; + private getallline="deployment/deplomentprofile_line"; + constructor( + private _http: HttpClient, + private apiRequest: ApiRequestService + ) { } + + getAll(page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + return this.apiRequest.get(this.getAllURL, params); + } +getalllines(page?: number, size?: number){ + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + return this.apiRequest.get(this.getallline,params); +} + create(data:any): Observable { + return this.apiRequest.post(this.addDataURl, data); + } + + delete(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.delete(_http); + } + + update(id: number, data: any): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, data); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/health-checkup.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/health-checkup.service.ts new file mode 100644 index 0000000..6ceb797 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/health-checkup.service.ts @@ -0,0 +1,74 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import{environment} from 'src/environments/environment'; +import { ApiRequestService } from '../api/api-request.service'; +import { HealthCheckup } from 'src/app/models/fnd/health_checkup'; +import { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class HealthCheckupService { + + baseUrl = 'HealthCheckup' + constructor(private _http: HttpClient, + private apiRequest: ApiRequestService) { } + + getHealthCheckups(): Observable { + return this.apiRequest.get(`${this.baseUrl}/HealthCheckup`); + } + + getHealthCheckupById(id: number): Observable { + return this.apiRequest.get(`${this.baseUrl}/HealthCheckup/${id}`); + } + + saveHealthCheckup(data: string, files: File[]): Observable { + const formData: FormData = new FormData(); + formData.append('data', JSON.stringify(data)); + + if (files && files.length > 0) { + // console.log("if Condition",files); + // for (const file of files) { + // console.log("if Condition",file); + // formData.append('files', file, file.name); + // } + for (let i = 0; i < files.length; i++) { + formData.append('files', files[i]); + console.log("if Condition",files[i]); + } + } + + return this.apiRequest.postFormData(`${this.baseUrl}/HealthCheckup`, formData); + } + + updateHealthCheckup(id: number, data: HealthCheckup): Observable { + return this.apiRequest.put(`${this.baseUrl}/HealthCheckup/${id}`, data); + } + + deleteHealthCheckup(id: number): Observable { + return this.apiRequest.delete(`${this.baseUrl}/HealthCheckup/${id}`); + } + + //redeploy + public getFileContent(healthId: number): Observable { + console.log(healthId) + const url = `HealthCheckupfile/readeploy/${healthId}`; + return this.apiRequest.get(url); + } + + //files + + getAllHealthCheckupFiles(healthId: number): Observable { + return this.apiRequest.get(`HealthCheckupfile/HealthCheckupfile/${healthId}`); + } + + readFile(fileId: number): Observable { + return this.apiRequest.get(`HealthCheckupfile/readfile/${fileId}`); + } + +//checkup + getHealthCheckup(jobtype: string): Observable { + const url = `${this.baseUrl}/healthcheckup?jobtype=${jobtype}`; + return this.apiRequest.get(url); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/logconfig.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/logconfig.service.ts new file mode 100644 index 0000000..0fa8786 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/logconfig.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; +import baseUrl from 'src/app/services/api/helper'; +import { HttpClient } from '@angular/common/http'; +@Injectable({ + providedIn: 'root' +}) +export class LogconfigService { + + constructor(private _http: HttpClient,) { } + public getAll() { + return this._http.get(`${baseUrl}/log/getAll`); + } + public getbyid(Id: any){ + return this._http.get(`${baseUrl}/log/getOne/${Id}`); + } + public create(username:any,mode:any){ + return this._http.get(`${baseUrl}/log/startLogging/${username}/${mode}`); + } + public delete(username:any){ + return this._http.get(`${baseUrl}/log/stopLogging/${username}`); + } + public downloadfile(filename:any){ + return this._http.get(`${baseUrl}/log/downloadLog/${filename}`); + } + public readfile(id:any){ + return this._http.get(`${baseUrl}/log2/fileread/${id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menu-group.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menu-group.service.ts new file mode 100644 index 0000000..4b281bb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menu-group.service.ts @@ -0,0 +1,76 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import baseUrl from '../../services/api/helper'; +import { ApiRequestService } from '../api/api-request.service'; +import { Rn_Main_Menu } from '../../models/builder/Rn_Main_Menu'; +import { Observable } from 'rxjs'; +import { CookieService } from 'ngx-cookie-service'; +@Injectable({ + providedIn: 'root' +}) +export class MenuGroupService { + public key: string ='key-for-data-in-cookies'; + private storage: Storage = sessionStorage; + constructor( + private _http: HttpClient,private readonly _cookieService: CookieService, + private apiRequest: ApiRequestService, + ) { } + + public getAll(){ + return this._http.get(`${baseUrl}/api/menu-group`); + } + + public addToDb(header: any){ + return this._http.post(`${baseUrl}/api/menu-group`, header); + } + + public addLineToDb(line: any){ + return this._http.post(`${baseUrl}/lines_m/create`, line); + } + + public getOneById(id: any){ + return this._http.get(`${baseUrl}/api/menu-group/${id}`); + } + + public updateGroupHeader(id: any, data: any){ + return this._http.put(`${baseUrl}/api/menu-group/${id}`, data); + } + + public updateLineById(id: any){ + return this._http.put(`${baseUrl}/lines_m/update`, id); + } + + public deleteById(id: any){ + return this._http.delete(`${baseUrl}/api/menu-group/${id}`); + } + getByCurrentUserMenuGroupId(): Observable { + const _http1 = "api1/getByUserId" + return this.apiRequest.get(_http1); +} +getByCurrentUserMenuGroupId1(): Observable { + const _http1 = "api1/submenu1" + return this.apiRequest.get(_http1); +} +getByCurrentUserMenuGroupId2(): Observable { + const _http1 = "fndMenu/menuloadbyuser" + return this.apiRequest.get(_http1); +} +private data: string = "data"; +public storeaddeditvalues(data:any,) { + this.storage.setItem(this.data,JSON.stringify (data)); + console.log(this.data); +} +getdata(): any { + //console.log(this.data); + var data = JSON.parse(this.storage.getItem(this.data)); + //let data = this.storage.getItem(this.data); + return data; +} +getuser(id:any){ + const http="chat/getuser"; + return this.apiRequest.post(http,id); +} +public save(text:string):void{ + return this._cookieService.set(this.key,text); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menu-register.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menu-register.service.ts new file mode 100644 index 0000000..82ed7d1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menu-register.service.ts @@ -0,0 +1,33 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import baseUrl from '../../services/api/helper'; + +@Injectable({ + providedIn: 'root' +}) +export class MenuRegisterService { + + constructor( + private _http: HttpClient + ) { } + + public add(r: any){ + return this._http.post(`${baseUrl}/api/menu-register`, r); + } + + public getd(){ + return this._http.get(`${baseUrl}/api/menu-register`); + } + + public getById(id: any){ + return this._http.get(`${baseUrl}/api/menu-register/${id}`); + } + + public update(id:any, reg:any){ + return this._http.put(`${baseUrl}/api/menu-register/${id}`, reg); + } + + public deleteById(id: any){ + return this._http.delete(`${baseUrl}/api/menu-register/${id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menumaintance.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menumaintance.service.ts new file mode 100644 index 0000000..c407dce --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/menumaintance.service.ts @@ -0,0 +1,69 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import baseUrl from '../../services/api/helper'; +import { Observable } from "rxjs"; +import { Rn_Main_Menu } from "../../models/builder/Rn_Main_Menu"; +import { ApiRequestService } from '../api/api-request.service'; +@Injectable({ + providedIn: 'root' +}) +export class MenumaintanceService { + + constructor(private _http: HttpClient, + private apiRequest: ApiRequestService,) { } + // create + public create(data: any){ + return this._http.post(`${baseUrl}/Menu_maintain`, data); + } + + // update + public update(id:number,data:any): Observable{ + //const _http = this.baseURL + "/" + id; + //return this.apiRequest.put(_http, data); + return this._http.put(`${baseUrl}/Menu_maintain/${id}`, data); + } + // get all + public getAll(){ + return this._http.get(`${baseUrl}/Menu_maintain`); + } + getByCurrentUserMenuGroupId1(): Observable { + const _http1 = "api1/submenu1" + return this.apiRequest.get(_http1); + } + // add submenudet table + // create + public create1(data: any){ + return this._http.post(`${baseUrl}/api1/Sec_menuDet`, data); + } + public create2(data:any){ + return this._http.post(`${baseUrl}/api1/addgrpwithsubmenu`, data) + } + // sink + public sink(id:any,data:any){ + return this._http.put(`${baseUrl}/fndMenu/sink/${id}`,data); + } + //get by menuid->submenu + public getbyid(id:any){ + return this._http.get(`${baseUrl}/api1/submenu1/${id}`); + } + //update update by menu_item_id + public update1(id:number,data:any): Observable{ + return this._http.put(`${baseUrl}/api1/submenu1/${id}`, data); + } + public update2(id:number,usrgrp:any,data:any): Observable{ + return this._http.put(`${baseUrl}/api1/update/${id}/${usrgrp}`, data); +} + //delete + public delete1(id: any){ + return this._http.delete(`${baseUrl}/api1/menu/${id}`); + } + // get one + public getOne(Id: any){ + return this._http.get(`${baseUrl}/Menu_maintain/${Id}`); + } + + // delete + public delete(id: any){ + return this._http.delete(`${baseUrl}/Menu_maintain/${id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/myworkspace.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/myworkspace.service.ts new file mode 100644 index 0000000..02f6a8b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/myworkspace.service.ts @@ -0,0 +1,98 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import baseUrl from '../../services/api/helper'; + +@Injectable({ + providedIn: 'root' +}) +export class MyworkspaceService { + public localStorage: Storage = localStorage; + constructor(private _http: HttpClient) { } + public add(r: any){ + return this._http.post(`${baseUrl}/api/menu-register`, r); + } + + public getall(){ + return this._http.get(`${baseUrl}/Workspace_team/SecTeam`); + } + public getalluser(){ + return this._http.get(`${baseUrl}/User_workSpace/GetAllUser`); + } + public getallguest(){ + return this._http.get(`${baseUrl}/User_workSpace/GetAllGuest`); + } + public adduser(email:any){ + let params: HttpParams = new HttpParams(); + params = params.append("email", email); + return this._http.post(`${baseUrl}/api/userviaadmin`,params); + } + storeEmail(email: string) { + this.localStorage.setItem("registeredEmail", email); + } + //Store userinfo from session storage + + //Get email from session storage ( WILL REMOVE AFTER REGISTER) + getStoredEmail(): string | null { + try { + let email: string = this.localStorage.getItem( + "registeredEmail" + ); + if (email) { + return email; + } else { + return null; + } + } catch (e) { + return null; + } + } + adduserdetails(data:any,token:any){ + return this._http.post(`${baseUrl}/api/admin/adduser/${token}`,data); + } + + addguest(email:any,duration:any){ + let params: HttpParams = new HttpParams(); + params = params.append("email", email); + params=params.append("access_duration",duration) + return this._http.post(`${baseUrl}/api/guest_via_admin`,params); + } + + addguestdetails(data:any,token:any){ + return this._http.post(`${baseUrl}/api/admin/addguest/${token}`,data); + } + addteam(data:any){ + return this._http.post(`${baseUrl}/Workspace_team/SecTeam`,data); + } + public getallteammeme(id:any){ + return this._http.get(`${baseUrl}/User_workSpace/GetAllMember/${id}`); + } + getallusertosameaccid(){ + return this._http.get(`${baseUrl}/User_workSpace/GetAll`); + } + addteammem(id:any,user_id:any,data:any){ + return this._http.post(`${baseUrl}/User_workSpace/add_team/${id}/${user_id}`,data); + } + getallworkspace(){ + return this._http.get(`${baseUrl}/Workspace_workspace/FindByaccount`); + } + addsecworkspaceuser(usrid:any,id:any,data:any,){ + return this._http.post(`${baseUrl}/workspace/secworkspaceuser/add_workspace/users/${usrid}/${id}`,data); + } + addsecworkteam(pid:any,tid:any,data:any){ + return this._http.post(`${baseUrl}/workspace/secworkspaceuser/addteam/${pid}/${tid}`,data); + } + getallsecworkspace(id:any){ + return this._http.get(`${baseUrl}/workspace/secworkspaceuser/get_by_projectid/${id}`); + } + // public getById(id: any){ + // return this._http.get(`${baseUrl}/api/menu-register/${id}`); + // } + + // public update(id:any, reg:any){ + // return this._http.put(`${baseUrl}/api/menu-register/${id}`, reg); + // } + + // public deleteById(id: any){ + // return this._http.delete(`${baseUrl}/api/menu-register/${id}`); + // } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/outgoingwebhook.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/outgoingwebhook.service.ts new file mode 100644 index 0000000..16d441f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/outgoingwebhook.service.ts @@ -0,0 +1,51 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from '../api/api-request.service'; + +@Injectable({ + providedIn: 'root' +}) +export class OutgoingwebhookService { + + constructor(private apiRequest: ApiRequestService) { } + getall(){ + let _http = `api/outgoing/getall`; + return this.apiRequest.get(_http); + } + getallentity(){ + let _http = `api/outgoing/getentity`; + return this.apiRequest.get(_http); + } + wall(){ + let _http = `api/webhookdata/getall`; + return this.apiRequest.get(_http); + } + post(data:any){ + let _http=`api/outgoing/save`; + return this.apiRequest.post(_http,data); + } + getById(id: number) { + const _http =`api/outgoing/getById/${id}`; + return this.apiRequest.get(_http); + } + update(id: number, data:any): Observable { + const _http =`api/outgoing/update/${id}`; + return this.apiRequest.put(_http,data); + } + update1(id: number, data:any): Observable { + const _http =`api/outgoing_lines/update/${id}`; + return this.apiRequest.put(_http,data); + } + delete(id:any){ + let _http=`api/outgoing/delete/${id}`; + return this.apiRequest.delete(_http,); + } + getallworkflow(){ + let _http = `token/webhook/Workflow/getall`; + return this.apiRequest.get(_http); + } + getbyidworkflow(id:any){ + let _http = `token/webhook/Workflow/get/${id}`; + return this.apiRequest.get(_http); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sessionlogger.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sessionlogger.service.ts new file mode 100644 index 0000000..f48fc28 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sessionlogger.service.ts @@ -0,0 +1,17 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import baseUrl from 'src/app/services/api/helper'; +@Injectable({ + providedIn: 'root' +}) +export class SessionloggerService { + + constructor(private _http: HttpClient) { } + public getAll() { + return this._http.get(`${baseUrl}/user1/session/getAll`); + } + + public delete(id:any){ + return this._http.delete(`${baseUrl}/user1/session/delete/${id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sure-connector.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sure-connector.service.ts new file mode 100644 index 0000000..87a3c74 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sure-connector.service.ts @@ -0,0 +1,25 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +//import baseUrl from 'src/app/services/api/helper'; +import { environment } from 'src/environments/environment'; +@Injectable({ + providedIn: 'root' +}) +export class SureConnectorService { + baseurl = environment.jobmgurl; + constructor(private _http: HttpClient,) { } + public getAll() { + return this._http.get(`${this.baseurl}/jobpro/get_rn_sureconnetor`); + } + public create(data: any){ + return this._http.post(`${this.baseurl}/jobpro/Savern_sureconnetor`, data); + } + + public delete(id:any){ + return this._http.delete(`${this.baseurl}/jobpro/delete_by_rn_sureconnetor_id/${id}`); + } + + public update(id:any,data:any){ + return this._http.put(`${this.baseurl}/jobpro/update_rn_sureconnetor/${id}`, data); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sure-opsscriptmaster.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sure-opsscriptmaster.service.ts new file mode 100644 index 0000000..d0cd824 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sure-opsscriptmaster.service.ts @@ -0,0 +1,86 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from '../api/api-request.service'; + +@Injectable({ + providedIn: 'root' +}) +export class SureOpsscriptmasterService { + private URL = 'Sureops_script_api/Sureops_script_apis'; + private url='Sureops_script_api/Sureops_script_line' + private masterurl='Sureops_script_master/sureops_scriptmaster1' + constructor(private _http: HttpClient,private apiRequest: ApiRequestService) { } + getAll(page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + // params = params.append("module_id", module_id.toString()); + // get all + return this.apiRequest.get(this.URL, params); + } + + create(data:any): Observable{ + return this.apiRequest.post(this.URL, data); + } + + delete(id:number){ + let _http = this.URL + "/" + id; + return this.apiRequest.delete(_http); + } + + getById(id:number) + { + let _http = this.URL + "/"+id; + return this.apiRequest.get(_http); + } + + updateLineById(id:number,data:any) + { + let _http = this.url + "/"+id; + return this.apiRequest.put(_http,data); + } + + update(id:number,data:any) + { + let _http = this.URL + "/"+id; + return this.apiRequest.put(_http,data); + } + + getall(page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + // params = params.append("module_id", module_id.toString()); + // get all + return this.apiRequest.get(this.masterurl, params); + } + + create1(data:any): Observable{ + return this.apiRequest.post(this.masterurl, data); + } + + delete1(id:number){ + let _http = this.masterurl + "/" + id; + return this.apiRequest.delete(_http); + } + + getById1(id:number) + { + let _http = this.masterurl + "/"+id; + return this.apiRequest.get(_http); + } + + + + update1(id:number,data:any) + { + let _http = this.masterurl + "/"+id; + return this.apiRequest.put(_http,data); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sureapi.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sureapi.service.ts new file mode 100644 index 0000000..9426ec5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sureapi.service.ts @@ -0,0 +1,23 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import baseUrl from 'src/app/services/api/helper'; +import { ApiRequestService } from '../api/api-request.service'; +@Injectable({ + providedIn: 'root' +}) +export class SureapiService { +url='sure_connect/sure_postman/call_api' + constructor(private http:HttpClient,private apiRequest: ApiRequestService,) { } + createpostman(api_url:any,json_body:any,method: any,token:any){ + console.log(api_url,json_body,method,token) + let params: HttpParams = new HttpParams(); + params =params.append("api_url",api_url); + // params =params.append("json_body",json_body); + params =params.append("method",method); + params =params.append("token",token) + return this.http.post(`${baseUrl}/sure_connect/sure_postman/call_api`,json_body,{params:params}); + //return this.apiRequest.post(this.url,{ search:params }); + + + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sureconnect.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sureconnect.service.ts new file mode 100644 index 0000000..e8b6086 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sureconnect.service.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import baseUrl from 'src/app/services/api/helper'; +import { ApiRequestService } from '../api/api-request.service'; +@Injectable({ + providedIn: 'root' +}) +export class SureconnectService { + + constructor(private _http: HttpClient, + private apiRequest: ApiRequestService,) { } + public create(data: any){ + return this._http.post(`${baseUrl}/Sure_Connect`, data); + } + + // create card + public update(data: any,id:any){ + return this._http.put(`${baseUrl}/Sure_Connect/${id}`, data); + } + + // get all cards + public getAll(){ + return this._http.get(`${baseUrl}/Sure_Connect`); + } + + // get one card + public getOne(id: any){ + return this._http.get(`${baseUrl}/Sure_Connect/${id}`); + } + + // delete card + public delete(id: any){ + return this._http.delete(`${baseUrl}/Sure_Connect/${id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sysparameter.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sysparameter.service.ts new file mode 100644 index 0000000..706a450 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/sysparameter.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@angular/core'; +import { Observable } from "rxjs"; +import { ApiRequestService } from "../api/api-request.service"; +import { HttpParams } from "@angular/common/http"; +import { HttpClient} from '@angular/common/http'; +@Injectable({ + providedIn: 'root' +}) +export class SysparameterService { + private addsysurl='api/addSysParams '; + private updatesysurl='api/updateSysParams'; + private getbyidurl='api/getSysParams'; + constructor(private apiRequest: ApiRequestService,) { } + + + create(data: any): Observable { + return this.apiRequest.post(this.addsysurl, data); + } + + update(id: number,data:any,file:any): Observable { + const s =JSON.stringify(data); + const formData:FormData=new FormData(); + formData.append("o1",s); + formData.append(file.name,file); + + const _http = this.updatesysurl + "/" + id; + return this.apiRequest.put(_http, data); + } + getById(id: number): Observable { + const _http = this.getbyidurl + "/" + id; + return this.apiRequest.get(_http); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/university.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/university.service.ts new file mode 100644 index 0000000..1364856 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/university.service.ts @@ -0,0 +1,44 @@ +import { Injectable } from '@angular/core'; +import { HttpParams } from "@angular/common/http"; +import { university } from "../../models/fnd/university"; +import { Observable } from "rxjs"; +import { ApiRequestService } from "../api/api-request.service"; +import { UserInfoService } from "../user-info.service"; + +@Injectable({ + providedIn: 'root' +}) +export class UniversityService { + + private baseURL = "api/author"; + constructor( + private apiRequest: ApiRequestService, + private userInfoService: UserInfoService + ) { } + getAll(page?: number, size?: number): Observable { + //Create Request URL params + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + //const _http = this.baseURL + '/all'; + console.log(this.userInfoService.getUserInfo().userId); + let id = this.userInfoService.getUserInfo().userId; + return this.apiRequest.get(this.baseURL, params); + } + getById(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.get(_http); + } + create(college: university): Observable { + return this.apiRequest.post(this.baseURL, college); + } + + update(id: number, projectSetup: university): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, projectSetup); + } + delete(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.delete(_http); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-list.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-list.service.ts new file mode 100644 index 0000000..aa48719 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-list.service.ts @@ -0,0 +1,33 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import baseUrl from '../../services/api/helper'; + +@Injectable({ + providedIn: 'root' +}) +export class UserListService { + + constructor( + private _http: HttpClient + ) { } + + public add(user: any){ + return this._http.post(`${baseUrl}/user_list/create`, user); + } + + public update(user: any){ + return this._http.put(`${baseUrl}/user_list/update`, user); + } + + public getOne(user: any){ + return this._http.get(`${baseUrl}/user_list/get-one/${user}`); + } + + public getAll(){ + return this._http.get(`${baseUrl}/user_list/get-all`); + } + + public deleteById(id: any){ + return this._http.delete(`${baseUrl}/user_list/delete/${id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-profile.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-profile.service.ts new file mode 100644 index 0000000..13160da --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-profile.service.ts @@ -0,0 +1,120 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { AppConfig } from '../../app-config'; +import { Observable } from 'rxjs'; +import { UserInfoService } from '../user-info.service'; +import { ApiRequestService } from '../api/api-request.service'; +import { TranslateService } from '../api/translate.service'; +import { environment } from 'src/environments/environment'; + +export interface UserProfile { + email: string; + firstName: string; + lastName: string; + fullName: string; + pronouns?: string; + photos?: string; + status?: string; + role?: string; + roles?: Role[]; + department?: string; + about?: string; + createdAt?: Date; + updatedAt?: Date; + accountId?: number; + createdBy?: number; + updatedBy: number; + +} +export interface Role { + id: number; + name: string; + description: string; +} +@Injectable() +export class UserProfileService { + + private userProfileURL = 'api/user-profile'; + private postUserProfilePicURL = 'api/upload'; + private getUserProfilePicURL = 'api/retrieve-image'; + private userAcountURL = 'api/user-account'; + private aboutWork = 'token/aboutwork'; + + private getids = 'token/userid'; + + private actionBuilderURL="token/aboutwork" + + + constructor( + private apiRequest: ApiRequestService, + private translate: TranslateService, + private userInfoService: UserInfoService, + private http: HttpClient, + private appConfig: AppConfig, + ) { } + + /* getAll(page?:number, size?:number): Observable { + //Create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append('page', typeof page === "number"? page.toString():"0"); + params = params.append('size', typeof size === "number"? size.toString():"1000"); + // get all + // return this.apiRequest.get('api/instructors'); + // paginated data + return this.apiRequest.get(this.baseURL, params); + + } */ + + getUserProfile(): Observable { + const _http = this.userProfileURL; + return this.apiRequest.get(_http); + + } + updateUserProfile(user: UserProfile): Observable { + const _http = this.userProfileURL; + return this.apiRequest.put(_http, user); + } + + uploadUserProfilePic(fileToUpload: File): Observable { + const formData: FormData = new FormData(); + formData.append('imageFile', fileToUpload, fileToUpload?.name); + return this.http.post(this.appConfig.baseApiPath + this.postUserProfilePicURL, formData, { reportProgress: true, observe: 'events' }); + } + + getProfilePic(): Observable { + return this.apiRequest.get(this.getUserProfilePicURL); + } + + + getUserAccountDetails() { + return this.apiRequest.get(this.userAcountURL); + } + + saveUser(data): Observable { + return this.apiRequest.post(this.aboutWork, data); + } + + updateUser(id,data): Observable { + const _http = this.actionBuilderURL + "/" + id; + return this.apiRequest.put(_http, data); + } + + getUser(id: number, checknumber: number): Observable { + return this.apiRequest.get(this.getids + "/" + id + "/" + checknumber); + // return this.apiRequest.get(this.getids, data); + + } + private url = environment.backendUrl +"/token/"; + /////////////// + addUserinSignUP(data:any): Observable { + return this.http.post(`${this.url}users/sysaccount/savesysaccount`, data); + } + + adduserData(data:any): Observable { + return this.http.post(`${this.url}addOneAppUser`, data); + } + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-registration.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-registration.service.ts new file mode 100644 index 0000000..7fe4799 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/user-registration.service.ts @@ -0,0 +1,290 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from "@angular/common/http"; +import { PasswordResetComponent } from "src/app/modules/main/admin/password-reset/password-reset.component"; + +import { UserRegistrationComponent } from "src/app/modules/main/admin/user-registration/user-registration.component"; +import { Observable } from "rxjs"; +import { UserInfoService } from "../user-info.service"; +import { ApiRequestService } from "../api/api-request.service"; +import { environment } from 'src/environments/environment'; + +export interface User { + firstName: string; + lastName: string; + password: string; + email: string; +} + +export interface Sys_Account { + userEmail: string; + companyName: string; + workspace: string; + gstNumber: string; +} + +export interface SignedUpUser { + userId: string; + email: string; + fullName: string; + firstName: string; +} +export interface signUpInfo { + success?: boolean; + message?: string; + landingPage?: string; + user?: SignedUpUser; +} + + +@Injectable({ + providedIn: 'root' +}) +export class UserRegistrationService { + + private baseURL = "api/user-registration"; // still not in use + private emailExistURL = "token/email-exists"; // email exist check + private userRegURL = "token/user-registration"; + private companyRegURL = "token/company-registration"; + private resetPasswordURL = "api/reset_password"; + + public registeredEmailKey: string = "registeredEmail"; + public localStorage: Storage = localStorage; + public sessionStorage: Storage = sessionStorage; + + private url = environment.backendUrl +"/token/"; + + + constructor(private apiRequest: ApiRequestService,private http:HttpClient, + private userInfoService: UserInfoService) { } + + /* takenUsernames: any[] = []; + checkIfUsernameExists(username: string): Observable { + return of(this.takenUsernames.includes(username)) + .pipe(delay(1000)); + } + usernameValidator(): AsyncValidatorFn { + return (control: AbstractControl): Observable => { + return this.checkIfUsernameExists(control.value).pipe( + map(res => { + // if res is true, username exists, return true + return res ? { usernameExists: true } : null; + // NB: Return null if there is no error + }) + ); + }; + } */ + + //Store userinfo from session storage + storeEmail(userInfoString: string) { + this.localStorage.setItem(this.registeredEmailKey, userInfoString); + } + + //Remove userinfo from session storage + removeStoredEmail() { + this.localStorage.removeItem(this.registeredEmailKey); + } + + //Get email from session storage ( WILL REMOVE AFTER REGISTER) + getStoredEmail(): string | null { + try { + let userInfoString: string = this.localStorage.getItem( + this.registeredEmailKey + ); + if (userInfoString) { + return userInfoString; + } else { + return null; + } + } catch (e) { + return null; + } + } + + /* === store signed up user info in storage === */ + public registeredUserKey: string = "registeredUser"; + storeSignedUpUserInfo(userInfoString: string) { + this.sessionStorage.setItem(this.registeredUserKey, userInfoString); + } + removeSignedUpUserInfo() { + this.sessionStorage.removeItem(this.registeredUserKey); + } + + //Get userinfo from session storage + getSignedUpUserInfo(): SignedUpUser | null { + try { + let userInfoString: string = this.sessionStorage.getItem( + this.registeredUserKey + ); + if (userInfoString) { + let userObj: SignedUpUser = JSON.parse( + this.sessionStorage.getItem(this.registeredUserKey) + ); + return userObj; + } else { + return null; + } + } catch (e) { + return null; + } + } + // Get Full Name from session storage + getFirstName(): string { + let userObj: SignedUpUser = this.getSignedUpUserInfo(); + if (userObj !== null) { + //console.log('getFirstName() : ', userObj.firstName); + return userObj.firstName; + } + return "no-user"; + } + // Get User Email from session storage + getEmail(): string { + let userObj: SignedUpUser = this.getSignedUpUserInfo(); + if (userObj !== null) { + //console.log('getEmail() : ', userObj.email); + return userObj.email; + } + return "no-user"; + } + // Get User Id from session storage + getUserId(): string { + let userObj: SignedUpUser = this.getSignedUpUserInfo(); + if (userObj !== null) { + return userObj.userId; + } + return "no-user"; + } + + /* === store signed up user info in storage END === */ + + /* === check if email is aailable or not === */ + emailCheck(email: UserRegistrationComponent): Observable { + return this.apiRequest.post(this.emailExistURL, email); + } + /* === signed up user (admin) === */ + + /* public landingPage:string = "/account-setup"; + saveUser(user: User): Observable { + let signupDataSubject: BehaviorSubject = new BehaviorSubject([]); + let signupInfoReturn: signUpInfo; + this.apiRequest.post(this.userRegURL, user).subscribe( + (res) => { + if ( + res !== undefined && + res !== null && + res.operationStatus === "SUCCESS" + ) { + signupInfoReturn = { + success: true, + message: res.operationMessage, + landingPage: this.landingPage, + user: { + userId: res.item.userId, + email: res.item.email, + fullName: res.item.fullname, + firstName: res.item.firstName, + }, + }; + console.log('signupInfoReturn : ', signupInfoReturn); + // store signed up user info in session storage for further case + this.storeSignedUpUserInfo(JSON.stringify(signupInfoReturn.user)); + } else { + //Create a faliure object that we want to send back to login page + signupInfoReturn = { + success: false, + message: res.operationMessage, + landingPage: "/create-account", + }; + } + signupDataSubject.next(signupInfoReturn); + }, + (err) => { + console.log("signup error ", err); + signupInfoReturn = { + success: false, + message: err.url + " >>> " + err.statusText + "[" + err.status + "]", + landingPage: "/create-account", + }; + } + ); + console.log('signupDataSubject : ', signupDataSubject); + + return signupDataSubject; + //return this.apiRequest.post(this.userRegURL, user); + } */ + + saveUser(user: User): Observable { + return this.apiRequest.post(this.userRegURL, user); + } + + /* company registration form */ + saveCompany(company: Sys_Account): Observable { + return this.apiRequest.post(this.companyRegURL, company); + } + + resetPassword(passwordResetRequest: PasswordResetComponent): Observable { + return this.apiRequest.post(this.resetPasswordURL, passwordResetRequest); + } + + /*==== CRUD APIS =====*/ + getAll(page?: number, size?: number): Observable { + //Create Request URL params + let params: HttpParams = new HttpParams(); + params = params.append( + "page", + typeof page === "number" ? page.toString() : "0" + ); + params = params.append( + "size", + typeof size === "number" ? size.toString() : "1000" + ); + //const _http = this.baseURL + '/all'; + return this.apiRequest.get(this.baseURL, params); + } + + getById(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.get(_http); + } + + getByAccountId(): Observable { + const _http = this.baseURL + "/user-menu"; + return this.apiRequest.get(_http); + } + + create(any: any): Observable { + return this.apiRequest.post(this.baseURL, any); + } + + update(id: number, any: any): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, any); + } + + + /////// + + getStoredName() { + return this.localStorage.getItem("FullName"); + } + + removeStoredName() { + this.localStorage.removeItem("FullName"); + } + + sendEmail( email: any): Observable { + // const body = { account_id: accountId, email }; + const newbody = email; + const headers = new HttpHeaders({ 'Content-Type': 'application/json' }); + console.log(newbody); + return this.http.post(`${this.url}user/send_email`, newbody); + } + + sendOTP(email: string): Observable { + return this.http.post(`${this.url}user/resend_otp?email=${email}`, {}); + } + + // Method to verify OTP + verifyOTP(email: string, otp: string): Observable { + return this.http.post(`${this.url}user/otp_verification?email=${email}&otp=${otp}`, null); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/usergrpmaintaince.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/usergrpmaintaince.service.ts new file mode 100644 index 0000000..f8954be --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/usergrpmaintaince.service.ts @@ -0,0 +1,46 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import baseUrl from '../api/helper'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from '../api/api-request.service'; +import { Usergrpmain } from '../../models/admin/usergrpma'; +@Injectable({ + providedIn: 'root' +}) +export class UsergrpmaintainceService { + private baseURL = "api/updateOneUsrGrp"; + constructor(private _http: HttpClient,private apiRequest: ApiRequestService,) { } + + public getAll() { + return this._http.get(`${baseUrl}/api/getAllUsrGrp`); + } + public getbyid(Id: any){ + return this._http.get(`${baseUrl}/api/getOneAppUser/${Id}`); + } + public getbyusergrpid(id:any){ + return this._http.get(`${baseUrl}/api1/getusracces1/${id}`); + } + public create(data: any){ + return this._http.post(`${baseUrl}/api/addOneUsrGrp`, data); + } +// update +public update(data: any){ + return this._http.post(`${baseUrl}/api/updateOneUsrGrp`, data); +} +updatei(id: number, projectSetup: Usergrpmain): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, projectSetup); +} +public getall(){ + return this._http.get(`${baseUrl}/api1/getAllData`); +} +public deleteusr(id:any){ + return this._http.delete(`${baseUrl}/api/delete_usrgrp/${id}`); +} +public delete(id:any,usrgrp:any){ +return this._http.delete(`${baseUrl}/api1/deleteGrpMenuAcces/${id}/${usrgrp}`); +} +public deletemain(id:any,usrgrp:any){ + return this._http.delete(`${baseUrl}/fndMenu/DelMenu_WithSub1/${id}/${usrgrp}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/usermaintance.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/usermaintance.service.ts new file mode 100644 index 0000000..5c321e0 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/admin/usermaintance.service.ts @@ -0,0 +1,42 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import baseUrl from 'src/app/services/api/helper'; +@Injectable({ + providedIn: 'root' +}) +export class UsermaintanceService { + + constructor(private _http: HttpClient,) { } + public getAll() { + return this._http.get(`${baseUrl}/api/getAllAppUser`); + } + public getbyid(Id: any){ + return this._http.get(`${baseUrl}/api/getOneAppUser/${Id}`); + } + public create(data: any){ + return this._http.post(`${baseUrl}/api/addOneAppUser`, data); + } + // update + public update(data: any){ + return this._http.put(`${baseUrl}/api/updateAppUser`, data); + } + //newupdate + public updatenew(id:any,data: any){ + return this._http.put(`${baseUrl}/api/updateAppUserDto/${id}`, data); + } + public getallposition(){ + return this._http.get(`${baseUrl}/api/getAllPositions`); + } + public getbypositionid(Id:any){ + return this._http.get(`${baseUrl}/api/getPosition/${Id}`); + } + public getalldepartment(){ + return this._http.get(`${baseUrl}/api/getAllDepartments`); + } + public getbydepartmentid(Id:any){ + return this._http.get(`${baseUrl}/api/getDepartment/${Id}`); + } + public deleteusr(id:any){ + return this._http.delete(`${baseUrl}/api/delete_usr/${id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/alert.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/alert.service.ts new file mode 100644 index 0000000..c19d894 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/alert.service.ts @@ -0,0 +1,70 @@ +import { Injectable } from '@angular/core'; +import { default as swal, SweetAlertOptions } from 'sweetalert2'; + +@Injectable({ + providedIn: 'root' +}) +export class AlertService { + constructor() { } + + error(text = 'เกิดข้อผิดพลาด', title = '') { + const option: SweetAlertOptions = { + title: title, + text: this.convertToText(text), + icon: 'error', + confirmButtonText: 'ตกลง' + }; + return swal.fire(option); + + } + + success(text = '', title = 'Success') { + const option: SweetAlertOptions = { + title: title, + text: this.convertToText(text), + icon: 'success', + confirmButtonText: 'Ok' + }; + return swal.fire(option); + + } + + serverError(text = 'เกิดข้อผิดพลาดในการเชื่อมต่อกับเซิร์ฟเวอร์', title = 'เกิดข้อผิดพลาด') { + const option: SweetAlertOptions = { + title: title, + text: this.convertToText(text), + icon: 'error', + confirmButtonText: 'ตกลง' + }; + return swal.fire(option); + + } + + confirm(text = 'คุณต้องการดำเนินการนี้ ใช่หรือไม่?', title = 'Are you sure?') { + const option: SweetAlertOptions = { + title: title, + text: this.convertToText(text), + icon: 'question', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes', + cancelButtonText: 'No' + }; + return swal.fire(option); + } + + convertToText(text) { + if (text && text.message) { + return text.message + } else if (text && text.error) { + return text.error + } else if (text && text.code) { + return text.code + } else { + return text ? JSON.stringify(text) : ''; + } + } + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/alerts.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/alerts.service.ts new file mode 100644 index 0000000..4617822 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/alerts.service.ts @@ -0,0 +1,39 @@ +import { Injectable } from "@angular/core"; +import { NavigationStart, Router } from "@angular/router"; +import { Observable, Subject } from "rxjs"; + +@Injectable() +export class AlertService { + private subject = new Subject(); + + private keepAfterNavigationChange = false; + + constructor(private router: Router) { + // clear alert message on route change + router.events.subscribe((event) => { + if (event instanceof NavigationStart) { + if (this.keepAfterNavigationChange) { + // only keep for a single location change + this.keepAfterNavigationChange = false; + } else { + // clear alert + this.subject.next(); + } + } + }); + } + + success(message: string, keepAfterNavigationChange = false) { + this.keepAfterNavigationChange = keepAfterNavigationChange; + this.subject.next({ type: "success", text: message }); + } + + error(message: string, keepAfterNavigationChange = false) { + this.keepAfterNavigationChange = keepAfterNavigationChange; + this.subject.next({ type: "error", text: message }); + } + + getMessage(): Observable { + return this.subject.asObservable(); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/addemails.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/addemails.service.ts new file mode 100644 index 0000000..e98291a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/addemails.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@angular/core'; +//import { id } from '@swimlane/ngx-datatable/release/utils'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from './api-request.service'; + +@Injectable({ + providedIn: 'root' +}) +export class AddemailsService { + + + private addemailUrl = 'token/addemails'; + + + + constructor( + private apirequest: ApiRequestService + + ) { } + + saveUser(data, id: number): Observable { + return this.apirequest.post(this.addemailUrl + "/" + id, data); + + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/api-request.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/api-request.service.ts new file mode 100644 index 0000000..3c24cd5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/api-request.service.ts @@ -0,0 +1,172 @@ +import { Injectable } from "@angular/core"; +import { + HttpClient, + HttpHeaders, + HttpParams, + HttpErrorResponse, +} from "@angular/common/http"; +import { Router } from "@angular/router"; +import { Observable, throwError } from "rxjs"; +import { UserInfoService } from "../user-info.service"; +import { AppConfig } from "../../app-config"; +import { catchError } from "rxjs/operators"; + +@Injectable() +export class ApiRequestService { + constructor( + private appConfig: AppConfig, + private http: HttpClient, + private router: Router, + private userInfoService: UserInfoService + ) {} + + /** + * This is a Global place to add all the request headers for every REST calls + */ + /*{let headers = new HttpHeaders({ + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Access-Control-Allow-Origin': '*', + 'Access-Control-Allow-Methods': 'POST, GET, DELETE, OPTIONS, PUT', + 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Accept-Language, Host, Referer, Connection, User-Agent, authorization, sw-useragent, sw-version' + });*/ + getHeaders(): HttpHeaders { + let headers = new HttpHeaders(); + //let token = this.userInfoService.getStoredToken(); + //console.log('Token from session storage: ', token); + headers = headers.append("Content-Type", "application/json"); + /* if (token !== null) { + headers = headers.append("Authorization", token); + } */ + return headers; + } + + getMultipartHeader(): HttpHeaders { + let headers = new HttpHeaders(); + headers = headers.append("Content-Type", "multipart/form-data"); + return headers; + + } + + errMsg: string = ''; + + handleError(error: HttpErrorResponse) { + let me = this; + console.log("handleError ", error.message); + switch(error.status) { + case 401: + this.errMsg = 'Forbidden'; + break; + case 404: + this.errMsg = 'Service not found'; + case 408: + this.errMsg = 'Request Timedout'; + case 500: + this.errMsg = 'Internal Server Error'; + default: + this.errMsg = 'Server Error'; + } + return throwError(error.message); + //return Observable.throw(error.message); + } + + get(url: string, urlParams?: HttpParams): Observable { + let me = this; + return this.http + .get(this.appConfig.baseApiPath + url, { + headers: this.getHeaders(), + params: urlParams, + }).pipe( + catchError((error) => { + return throwError(error || "Server error"); + }) + ) + } + + loginAuthentication(url: string, body: Object): Observable { + let me = this; + return this.http + .post(this.appConfig.baseApiPath + url, JSON.stringify(body), { + headers: this.getHeaders() + }).pipe( + catchError((error) => { + return throwError(error || "Server error"); + }) + ) + } + + // modified params + post(url: string, body: any, urlParams?: HttpParams): Observable { + let me = this; + let bodyTest = body instanceof Object ? JSON.stringify(body) : body; + //console.log('Post method String Vs. Object', bodyTest); + return this.http + .post(this.appConfig.baseApiPath + url, JSON.stringify(body), { + headers: this.getHeaders(), + params: urlParams, + }).pipe( + catchError((error) => { + return throwError(error || "Server error"); + }) + ) + } + + // [Multipart file Support] + postFormData(url: string, body: any, urlParams?: HttpParams): Observable { + //let me = this; + //headers: this.getMultipartHeader(), + return this.http + .post(this.appConfig.baseApiPath + url, body, { + params: urlParams, + reportProgress: true, + observe: 'events' + }).pipe( + catchError((error) => { + return throwError(error || "Server error"); + }) + ) + } + + // modified params + put(url: string, body: Object, urlParams?: HttpParams): Observable { + let me = this; + return this.http + .put(this.appConfig.baseApiPath + url, JSON.stringify(body), { + headers: this.getHeaders(), + params: urlParams, + }).pipe( + catchError((error) => { + return throwError(error || "Server error"); + }) + ) + } + + delete(url: string): Observable { + let me = this; + return this.http + .delete(this.appConfig.baseApiPath + url, { headers: this.getHeaders() }) + .pipe( + catchError((error) => { + return throwError(error || "Server error"); + }) + ) + } + + downloadFile(url: string, data: any[]): Observable { + return this.http.post(url, data, { responseType: 'blob' }).pipe( + catchError((error) => { + return throwError(error || 'Server error'); + }) + ); + } + + // For File Download + getFile(url: string, options: any): Observable { + return this.http.post(this.appConfig.baseApiPath + url, { ...options, responseType: 'blob' }).pipe( + catchError((error) => { + return throwError(error || 'Server error'); + }) + ); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/audittrail.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/audittrail.service.ts new file mode 100644 index 0000000..c08d8ad --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/audittrail.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import baseUrl from './helper'; +import { HttpClient } from '@angular/common/http'; +import { ApiRequestService } from './api-request.service'; +@Injectable({ + providedIn: 'root' +}) +export class AudittrailService { +apiurl="master/AuditItemReport"; +apiurl1="master/AuditItemReportCustom" + constructor(private _http: HttpClient, + private apiRequest: ApiRequestService,) { } + public getAll() { + return this._http.get(`${baseUrl}/master/AuditItemReport`); + + } + public gettable(tname:any){ + const formData:FormData = new FormData(); + formData.set("table",tname); + return this.apiRequest.postFormData(this.apiurl,formData); + } + public getdate(d1:any,d2:any,tname:any){ + const formData:FormData = new FormData(); + formData.set("id",null); + formData.set("d1",d1); + formData.set("d2",d2); + formData.set("table",tname); + return this.apiRequest.postFormData(this.apiurl1,formData); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/billingdemo.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/billingdemo.service.ts new file mode 100644 index 0000000..9a69cf8 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/billingdemo.service.ts @@ -0,0 +1,17 @@ +import { Injectable } from '@angular/core'; +import baseUrl from './helper'; +import { HttpClient } from '@angular/common/http'; +@Injectable({ + providedIn: 'root' +}) +export class BillingdemoService { + + constructor(private _http: HttpClient) { } + + public getAll() { + return this._http.get(`${baseUrl}/ncso_b/get-all`); + } + public getbyid(Id: any){ + return this._http.get(`${baseUrl}/ncso_b/get-one/${Id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/department.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/department.service.ts new file mode 100644 index 0000000..9b891ac --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/department.service.ts @@ -0,0 +1,48 @@ +import { Injectable } from '@angular/core'; +import { Department } from '../../models/fnd/department'; +import { JwtHelperService } from '@auth0/angular-jwt'; +import { HttpClient, HttpParams,HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from './api-request.service'; +import { UserInfoService } from '../user-info.service'; +@Injectable({ + providedIn: 'root' +}) +export class DepartmentService { + jwtHelper: JwtHelperService = new JwtHelperService(); + + private baseURL = "api/getdepartment"; + constructor(private http: HttpClient, + private apiRequest: ApiRequestService, + private userInfoService: UserInfoService) { } + + getAll(page?: number, size?: number): Observable { + //Create Request URL params + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + //const _http = this.baseURL + '/all'; + //console.log(this.userInfoService.getUserInfo().userId); + let id = this.userInfoService.getUserInfo().userId; + return this.apiRequest.get(this.baseURL, params); + } + + update(id: number, department: Department): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, department); + } + getById(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.get(_http); + } + delete(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.delete(_http); + } + + create(depart:Department): Observable { + return this.apiRequest.post(this.baseURL, depart); + } + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/diputesemo.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/diputesemo.service.ts new file mode 100644 index 0000000..972128d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/diputesemo.service.ts @@ -0,0 +1,17 @@ +import { Injectable } from '@angular/core'; +import baseUrl from './helper'; +import { HttpClient } from '@angular/common/http'; +@Injectable({ + providedIn: 'root' +}) +export class DiputesemoService { + + constructor(private _http: HttpClient) { } + + public getAll() { + return this._http.get(`${baseUrl}/ncso_q/get-all`); + } + public getbyid(Id: any){ + return this._http.get(`${baseUrl}/ncso_q/get-one/${Id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/forgotpass.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/forgotpass.service.ts new file mode 100644 index 0000000..8176718 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/forgotpass.service.ts @@ -0,0 +1,44 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import baseUrl from '../api/helper'; +@Injectable({ + providedIn: 'root' +}) +export class ForgotpassService { + private url = "api/forgot"; + public localStorage: Storage = localStorage; + constructor(private http: HttpClient,) { } + + checkMailExists(email: string) { + return this.http.post(this.url+ "check-email", {"email": email}); + } + storeEmail(userInfoString: string) { + this.localStorage.setItem("registeredEmail", userInfoString); + } + //Store userinfo from session storage + + //Get email from session storage ( WILL REMOVE AFTER REGISTER) + getStoredEmail(): string | null { + try { + let userInfoString: string = this.localStorage.getItem( + "registeredEmail" + ); + if (userInfoString) { + return userInfoString; + } else { + return null; + } + } catch (e) { + return null; + } + } + sendemail(email:string){ + const params = new HttpParams() + .set('email',email) + console.log(email); + return this.http.post(`${baseUrl}/api/resources/forgotpassword`,params) + } + resetpass(data:any,id:any){ + return this.http.post(`${baseUrl}/api/resources/savePassword/${id}`,data); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/helper.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/helper.ts new file mode 100644 index 0000000..7f1e8f1 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/helper.ts @@ -0,0 +1,5 @@ +import{environment} from 'src/environments/environment'; + +let baseUrl = environment.backendUrl; +//let baseUrl= `http://cns-portal-backend:30166`; +export default baseUrl; diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/itemdemo.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/itemdemo.service.ts new file mode 100644 index 0000000..7cf0b14 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/itemdemo.service.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@angular/core'; +import baseUrl from './helper'; +import { HttpClient } from '@angular/common/http'; +@Injectable({ + providedIn: 'root' +}) +export class ItemdemoService { + + constructor(private _http: HttpClient) { } + public getAll() { + return this._http.get(`${baseUrl}/ncso_i/get-all`); + } + public getbyid(Id: any){ + return this._http.get(`${baseUrl}/ncso_i/get-one/${Id}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/login.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/login.service.ts new file mode 100644 index 0000000..4b7bc44 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/login.service.ts @@ -0,0 +1,113 @@ +import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; + +import { Observable, BehaviorSubject } from 'rxjs'; +import { UserInfoService, LoginInfoInStorage} from '../user-info.service'; +import { ApiRequestService } from './api-request.service'; +import { HttpClient } from '@angular/common/http'; +import { ToastrService } from 'ngx-toastr'; + +export interface LoginRequestParam{ + //username:string; + email:string; + password:string; +} + +@Injectable() +export class LoginService { + private storage: Storage = sessionStorage; + public landingPage:string = "/cns-portal/dashboard"; + constructor( + private router:Router, + private userInfoService: UserInfoService, + private apiRequest: ApiRequestService, + private httpRequest: HttpClient, + private toastr: ToastrService, + ) {} + + + + getToken(email:string, password:string): Observable { + let bodyData: LoginRequestParam = { + //"username": username, + "email": email, + "password": password, + } + /* + Using BehaviorSubject instead of Subject + In Angular services are initialized before the components, if any component is + subscribing, it will only receive events which are executed after subscription. + therefore if you put a syncronize next() in the service, the component wont get it. + + A BehaviourSubject will always provide the values wheather the subscription happened after or before event + + */ + + let loginDataSubject:BehaviorSubject = new BehaviorSubject([]); // Will use this BehaviorSubject to emit data that we want after ajax login attempt + let loginInfoReturn:LoginInfoInStorage; // Object that we want to send back to Login Page + + this.apiRequest.loginAuthentication('token/session', bodyData) + .subscribe(jsonResp => { + console.log('login response: ', jsonResp); + if (jsonResp.operationMessage=='Login Failed') { + this.toastr.warning('Not Login Getting Error check your Username and password'); + } + if (jsonResp !== undefined && jsonResp !== null && jsonResp.operationStatus === "SUCCESS"){ + //Create a success object that we want to send back to login page + ////"displayName": jsonResp.item.fullname, + //"username" : jsonResp.item.username, + loginInfoReturn = { + "success" : true, + "message" : jsonResp.operationMessage, + "landingPage": this.landingPage, + "user" : { + "userId" : jsonResp.item.userId, + "email" : jsonResp.item.email, + "displayName": jsonResp.item.firstName, + "username" : jsonResp.item.username, + "roles" : jsonResp.item.roles, + "token" : jsonResp.item.token, + + }, + }; + console.log(loginInfoReturn.user); + if(jsonResp !== undefined && jsonResp !== null && jsonResp.operationStatus === "SUCCESS"){ + this.toastr.success(`Welcome To home Page!! your Role is ${jsonResp.item.roles}`); + } + // store username and jwt token in session storage to keep user logged in between page refreshes + this.userInfoService.storeUserInfo(JSON.stringify(loginInfoReturn.user)); + } + else { + //Create a faliure object that we want to send back to login page + loginInfoReturn = { + "success":false, + "message":jsonResp.msgDesc, + "landingPage":"/login" + }; + } + loginDataSubject.next(loginInfoReturn); + }, + err => { + console.log('login error ', err); + loginInfoReturn = { + "success": false, + "message": err.url + " >>> " + err.statusText + "[" + err.status +"]", + "landingPage": "/login" + }; + if (err) { + this.toastr.error('Getting Server Error'); + } + }); + + return loginDataSubject; + } + + logout(navigatetoLogout=true): void { + // clear token remove user from local storage to log user out + this.userInfoService.removeUserInfo(); + if(navigatetoLogout){ + this.router.navigate(["logout"]); + } + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/query-runner.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/query-runner.service.ts new file mode 100644 index 0000000..bcfe7dd --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/query-runner.service.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@angular/core'; +import { HttpParams } from '@angular/common/http'; +import { ApiRequestService } from './api-request.service'; +import { Observable } from 'rxjs'; +@Injectable({ + providedIn: 'root' +}) +export class QueryRunnerService { + private baseURL = "api/report-data"; + constructor(private apiRequest: ApiRequestService) { } + getById(report_id:number, page?: number, size?: number): Observable { + //Create Request URL params + let params: HttpParams = new HttpParams(); + params = params.append("report_id", report_id.toString()); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + //const _http = this.baseURL + '/all'; + return this.apiRequest.get(this.baseURL, params); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/realnet-menu.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/realnet-menu.service.ts new file mode 100644 index 0000000..4ece66b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/realnet-menu.service.ts @@ -0,0 +1,43 @@ +import { HttpParams } from "@angular/common/http"; +import { Injectable } from "@angular/core"; +import { Rn_Main_Menu } from "../../models/builder/Rn_Main_Menu"; +import { Observable } from "rxjs"; +import { UserInfoService } from "../user-info.service"; +import { ApiRequestService } from "./api-request.service"; + +@Injectable() +export class RealnetMenuService { + private baseURL = "api/realnet-menu"; + constructor( + private apiRequest: ApiRequestService, + private userInfoService: UserInfoService + ) {} + + getAll(page?: number, size?: number): Observable { + //Create Request URL params + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + //const _http = this.baseURL + '/all'; + return this.apiRequest.get(this.baseURL, params); + } + + getById(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.get(_http); + } + + getByAccountId(): Observable { + const _http = this.baseURL + "/user-menu"; + return this.apiRequest.get(_http); + } + + create(rn_Main_Menu: Rn_Main_Menu): Observable { + return this.apiRequest.post(this.baseURL, rn_Main_Menu); + } + + update(id: number, rn_Main_Menu: Rn_Main_Menu): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, rn_Main_Menu); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/report-builder.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/report-builder.service.ts new file mode 100644 index 0000000..22a0a1f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/report-builder.service.ts @@ -0,0 +1,287 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { ApiRequestService } from './api-request.service'; +import { Observable } from 'rxjs'; +import { ReportBuilder } from '../../models/builder/ReportBuilder'; +import { ReportBuilderQuery } from '../../models/builder/ReportBuilderQuery'; +import { TableList } from '../../models/fnd/TableList'; +import { RptBuilder } from 'src/app/models/builder/rptBuilder'; +import baseUrl from '../api/helper'; +import { saveAs } from 'file-saver'; + +@Injectable({ + providedIn: 'root' +}) +export class ReportBuilderService { + private reportBaseURL ='api/report-builder-by-id'; + private reportBaseURLSubmit ='api/report-builder'; + private masterQueryUrl ='api/add-master-query'; + private storage: Storage = sessionStorage; + private moduleIdKey: string = "moduleId"; + private baseURLMasterQuery="api/master-query"; + private baseURL="api/edit-report"; + private reportbuild2url="api/add-report"; + private servicereportsave="api/report-builder_service"; + private updatereportservice="api/updatereport"; + + private databaselisturl='Table_list' + private colurl='fndMenu/loadcolumn'; + private saveurl='FndQuery/query'; + constructor(private apiRequest: ApiRequestService, private _http:HttpClient) { } + getById(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.get(_http); + } + + buildReport(id: number) { + let params: HttpParams = new HttpParams(); + params = params.append("id", id.toString()); + return this.apiRequest.get("api/build_report", params); + } + + getModuleId(): number { + let modId = +this.storage.getItem(this.moduleIdKey); + return modId; + } + + getAll(moduleId: number, page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + params = params.append("moduleId", moduleId.toString()); + // get all + return this.apiRequest.get(this.reportBaseURL, params); + } + + //save report + create(fbHeader: ReportBuilder, moduleId: number): Observable { + //`${this.baseURL}` + let params: HttpParams = new HttpParams(); + params = params.append("moduleId", moduleId.toString()); + // params = params.append("formType", formType); + return this.apiRequest.post(this.reportBaseURLSubmit, fbHeader, params); + } + + //save report service + createservicereport(fbHeader: ReportBuilder, moduleId: number): Observable { + //`${this.baseURL}` + let params: HttpParams = new HttpParams(); + params = params.append("moduleId", moduleId.toString()); + // params = params.append("formType", formType); + return this.apiRequest.post(this.servicereportsave, fbHeader, params); + } + + //save report + createQuery(reportId: number): Observable { + //`${this.baseURL}` + let params: HttpParams = new HttpParams(); + params = params.append("reportId", reportId.toString()); + // params = params.append("formType", formType); + return this.apiRequest.post(this.masterQueryUrl,params); + } + + // update(reportId: number, functionRegister: ReportBuilder): Observable { + // let params: HttpParams = new HttpParams(); + // params = params.append("reportId", reportId.toString()); + // return this.apiRequest.put(this.masterQueryUrl/reportId, functionRegister); + // } + + update(id: number, functionRegister: ReportBuilder): Observable { + const _http = this.masterQueryUrl + "/" + id; + return this.apiRequest.put(_http, functionRegister); + } + + updateservicereport(id: number, functionRegister: ReportBuilder): Observable { + const _http = this.updatereportservice + "/" + id; + return this.apiRequest.put(_http, functionRegister); + } + + getMasterQuery(id: number): Observable { + const _http = this.baseURLMasterQuery + "/" + id; + return this.apiRequest.get(_http); + } + + getMasterData(query:string): Observable { + //Create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append('sql_query', query); + return this.apiRequest.get('api/master-query-data',params); +} + + + report2(servicename):Observable +{ + console.log("in service",servicename); + + // let params: HttpParams = new HttpParams(); + // params = params.append('service_name', servicename); + + // console.log(this.reportbuild2url,params); + + return this.apiRequest.post(this.reportbuild2url,servicename); +} + + +//savequery +saveq(data:any):Observable{ + return this.apiRequest.post(this.saveurl,data); +} +//getall +getall(){ + return this.apiRequest.get(this.saveurl); +} + +/////// +getreportdata(apiname):Observable +{ + var url="api"+"/"+apiname; + console.log(url) + + return this.apiRequest.get(url); + +} +getdatabse(): Observable{ + return this.apiRequest.get(`SqlworkbenchSqlcont/sql`); + //return this.apiRequest.get(this.databaselisturl); +} +getTableListn(val:any): Observable { + return this.apiRequest.get(`Table_list/${val}`); +} +getcolListn(val:any,val1:any): Observable { + return this.apiRequest.get(`Table_list/${val}/${val1}`); +} + +//column list for multiple tables +getColumnList(tableSchema: any, tables: any): Observable { + // return this._http.get( `http://localhost:9191/AllTable_list/${tableSchema}`,tables); + const params = new HttpParams().set('str', tables.join(',')); + return this._http.get(`${baseUrl}/AllTable_list/${tableSchema}`, { params: params }); +} + +//working column list for multiple tables with alias +getAllColumnsFromAllTables(tableNames: any): Observable { + const url = `${baseUrl}/Alias_Table_list/${tableNames}`; + return this._http.get(url); +} + +getcollist(table:any){ + const _http = this.colurl+ "/" + table; + return this.apiRequest.get(_http); + //return this.apiRequest.get(`this.colurl/${table}`); +} +createdb(data:any){ + return this.apiRequest.post(`SqlworkbenchSqlcont/sql`,data); +} + +updateSqlModel(id: number, sqlModel: any): Observable { + return this.apiRequest.put(`SqlworkbenchSqlcont/sql/${id}`, sqlModel); +} + +getSqlModelById(id: number): Observable { + return this.apiRequest.get(`SqlworkbenchSqlcont/sql/${id}`); +} + +deleteSqlModel(id: number): Observable { + return this.apiRequest.delete(`SqlworkbenchSqlcont/sql/${id}`); +} + +getallentity(){ + return this.apiRequest.get(this.reportBaseURLSubmit); +} + + +////////// rpt builders ////////////// + +saveData(data: RptBuilder): Observable { + return this.apiRequest.post(`Rpt_builder/Rpt_builder`, data); +} + +getDetails(): Observable { + return this.apiRequest.get(`Rpt_builder/Rpt_builder`); +} + +getDetailsById(id: number): Observable { + return this.apiRequest.get(`Rpt_builder/Rpt_builder/${id}`); +} + +deleteById(id: number): Observable { + return this.apiRequest.delete(`Rpt_builder/Rpt_builder/${id}`); +} + +updateData(data: any, id: number): Observable { + return this.apiRequest.put(`Rpt_builder/Rpt_builder/${id}`, data); +} + + +////////// rpt builders 2////////////// + +saverbData(data: any): Observable { + return this.apiRequest.post(`Rpt_builder2/Rpt_builder2`, data); +} + +getrbDetails(): Observable { + return this.apiRequest.get(`Rpt_builder2/Rpt_builder2`); +} + +getrbDetailsById(id: number): Observable { + return this.apiRequest.get(`Rpt_builder2/Rpt_builder2/${id}`); +} + +deletrbById(id: number): Observable { + return this.apiRequest.delete(`Rpt_builder2/Rpt_builder2/${id}`); +} + +updaterbData(data: any, id: number): Observable { + return this.apiRequest.put(`Rpt_builder2/Rpt_builder2/${id}`, data); +} + +updaterbLineData(data: any, id: number): Observable { + return this.apiRequest.put(`Rpt_builder2_lines/update/${id}`, data); +} + +getrbLineDetailsById(id: number): Observable { + return this.apiRequest.get(`Rpt_builder2_lines/Rpt_builder2_lines/${id}`); +} + +/// rpt builders 2 html +getStdParamById(id: number): Observable { + return this.apiRequest.get(`Rpt_builder2/html/build_report2/${id}`); +} +//get key from URL +getcolumnDetailsByurl(url: string): Observable { + const apiUrl = `Rpt_builder2_lines/geturlkeybyurl?url=${url}`; + return this.apiRequest.get(apiUrl); +} + +getAllDetailsByurl(url: string): Observable { + const apiUrl = `Rpt_builder2_lines/fetch_data_url?url=${url}`; + return this.apiRequest.get(apiUrl); +} + + + + + +///////////////////////////////////////////// DOWNLOADS +// downloadFile(format:any,data: any): Observable { +// return this.apiRequest.post(`rbbuilder/fileconverter/downloadFile/${format}`, data); +// } + +downloadFile(format: string, dataList: any[],name?:String): void { + const url = `${baseUrl}/rbbuilder/fileconverter/downloadFile/${format}`; + this.apiRequest.downloadFile(url, dataList).subscribe( + (response: Blob) => { + saveAs(response, `${name}.${format}`); + }, + (error) => { + console.error('Error downloading file:', error); + } + ); +} + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/sequence.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/sequence.service.ts new file mode 100644 index 0000000..687521e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/sequence.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import { ApiRequestService } from './api-request.service'; + +@Injectable({ + providedIn: 'root' +}) +export class SequenceService { + + constructor(private apiRequest: ApiRequestService,) { } + public getAll() { + return this.apiRequest.get(`sureserve/sequence/seq`); + } + public getbyid(Id: any){ + return this.apiRequest.get(`sureserve/sequence/seq/${Id}`); + } + + public create(data: any){ + return this.apiRequest.post(`sureserve/sequence/create`, data); + } +// update +public update(id:any,data: any){ + return this.apiRequest.put(`sureserve/sequence/seq/${id}`, data); +} + + +public delete(id:any){ +return this.apiRequest.delete(`sureserve/sequence/seq/${id}`); +} + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/table-setup.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/table-setup.service.ts new file mode 100644 index 0000000..7e6af52 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/table-setup.service.ts @@ -0,0 +1,29 @@ +import { Injectable } from '@angular/core'; +import { RbTables } from '../../models/builder/RbTables'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from './api-request.service'; +import { HttpParams } from '@angular/common/http'; +import { TableList } from '../../models/fnd/TableList'; + +@Injectable({ + providedIn: 'root' +}) +export class TableSetupService { + private baseURL = 'api/add-tables'; + private baseURL2 = 'api/add-alltables'; + private tableListUrl ='api/table-list'; + private tablelisturl='api/Table_list' + constructor(private apiRequest: ApiRequestService) { } + create(rb_tables: RbTables,reportId: number) :Observable { + let params: HttpParams = new HttpParams(); + params = params.append("reportId", reportId.toString()); + return this.apiRequest.post(this.baseURL2, rb_tables,params); +} + +getTableList(): Observable { + return this.apiRequest.get(this.tableListUrl); +} +getTableListn(): Observable { + return this.apiRequest.get(this.tablelisturl); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/translate.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/translate.service.ts new file mode 100644 index 0000000..0dbbf91 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/api/translate.service.ts @@ -0,0 +1,19 @@ +import { Injectable, Inject } from '@angular/core'; +import { AppConfig } from '../../app-config'; + +@Injectable() +export class TranslateService { + constructor(private appConfig:AppConfig) { + // Code to get Locale Info from Session Storage + } + + getDateString(datenum:number):string{ + return new Date(datenum).toLocaleDateString(this.appConfig.locale); + } + + getCurrencyString(number:number):string { + return number.toLocaleString(this.appConfig.locale, this.appConfig.currencyFormat); + } + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/auth_guard.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/auth_guard.service.ts new file mode 100644 index 0000000..0711613 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/auth_guard.service.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core'; +import { UserInfoService } from './user-info.service'; +import { LoginService } from './api/login.service'; +import { Router, CanActivate, CanActivateChild,ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; + +@Injectable() +export class AuthGuard implements CanActivate, CanActivateChild { + + constructor( + private router: Router, + private loginService: LoginService, + private userInfoService: UserInfoService + ) { } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + //console.log('canActivate : ', state); + + let url: string = state.url; + + return this.checkLogin(url); + //return true; + } + + canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + return this.canActivate(route, state); + } + + checkLogin(url: string): boolean { + if (this.userInfoService.isLoggedIn()) { + return true; + } + console.log("User is not logged - This routing guard prvents redirection to any routes that needs logging."); + //Store the original url in login service and then redirect to login page + this.loginService.landingPage = url; + this.router.navigate(['login',]); + return false; + } + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/additionalcontainer.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/additionalcontainer.service.spec.ts new file mode 100644 index 0000000..439f06b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/additionalcontainer.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { AdditionalcontainerService } from './additionalcontainer.service'; + +describe('AdditionalcontainerService', () => { + let service: AdditionalcontainerService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(AdditionalcontainerService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/additionalcontainer.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/additionalcontainer.service.ts new file mode 100644 index 0000000..439addb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/additionalcontainer.service.ts @@ -0,0 +1,75 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { environment } from 'src/environments/environment'; +import { ApiRequestService } from '../api/api-request.service'; +import { Observable } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class AdditionalcontainerService { + baseurl = environment.sureops; + private baseURL = "Gaurav_testing/Gaurav_testing" ; + constructor(private apiRequest: ApiRequestService, + private _http: HttpClient,) { } + + + saveData(data: any): Observable { + const url = `${this.baseurl}/sureops/Additional_container/Additional_container`; + return this._http.post(url, data); + } + + getDetails(): Observable { + const url = `${this.baseurl}/sureops/Additional_container/Additional_container`; + return this._http.get(url); + } + + getDetailsById(id: number): Observable { + const url = `${this.baseurl}/sureops/Additional_container/Additional_container/${id}`; + return this._http.get(url); + } + + deleteById(id: number): Observable { + const url = `${this.baseurl}/sureops/Additional_container/Additional_container/${id}`; + return this._http.delete(url); + } + + update(data: any, id: number): Observable { + const url = `${this.baseurl}/sureops/Additional_container/Additional_container/${id}`; + return this._http.put(url, data); + } + + ///copy ADDITIONAL CONTAINER TO CREATE DEPLOYMENT + public copyToCreateDeployment(projId: number, profileId: number, service: string): Observable { + const url = `${this.baseurl}/sureops/Additional_container/copt_to_deployment/${projId}/${profileId}/${service}`; + return this._http.get(url); + } +// get all by project id and profile id + getAllContainers(projId: number, profileId: number): Observable { + const url = `${this.baseurl}/sureops/Additional_container/copt_to_deployment/${projId}/${profileId}`; + return this._http.get(url); + } + + + +///////////////////////////////////// + +getAll(page?: number, size?: number): Observable { + return this.apiRequest.get(this.baseURL); +} +getById(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.get(_http); +} +create(data: any): Observable { + return this.apiRequest.post(this.baseURL, data); +} +updategaurav(id: number, data: any): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, data); +} +delete(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.delete(_http); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard.service.spec.ts new file mode 100644 index 0000000..79e72a6 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { DashboardService } from './dashboard.service'; + +describe('DashboardService', () => { + let service: DashboardService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(DashboardService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard.service.ts new file mode 100644 index 0000000..71fef84 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard.service.ts @@ -0,0 +1,116 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { ApiRequestService } from '../api/api-request.service'; + +@Injectable({ + providedIn: 'root' +}) +export class DashboardService { + + private getAllURL = 'get_module_id'; + private addDataURl = 'Savedata'; + private deleteFieldURL = 'delete_by_header_id'; + private getbyidURL = 'get_dashboard_headerbyid'; + private editURL = 'update_Dashbord1_Line'; + private updateURL = 'update_Dashbord1_Lineby_id'; + constructor(private _http: HttpClient, + private apiRequest: ApiRequestService,) + { + + } + + getAllDash(): Observable { + // create Request URL params + return this.apiRequest.get(`get_Dashboard_header`); + } + + getAllByModuleId(module_id: number,page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + params = params.append("module_id", module_id.toString()); + // get all + return this.apiRequest.get(this.getAllURL, params); + } + + create(data:any): Observable { + return this.apiRequest.post(this.addDataURl, data); + } + + deleteField(id:number){ + let _http = this.deleteFieldURL + "/" + id; + return this.apiRequest.delete(_http); + } + + getById(id:number) + { + let _http = this.getbyidURL + "/" + id; + return this.apiRequest.get(_http); + } + + addToDB(line:any):Observable + { + return this.apiRequest.put(this.editURL,line); + } + UpdateLineData(id:number, line:any) + { + // line = { + // headers: new HttpHeaders({ + // 'Content-Type': 'application/json' + // }) + // }; + let _http = this.updateURL + "/" + id; + return this.apiRequest.put(_http,line); + } +getcount(moduleId: number):Observable{ + return this.apiRequest.get(`get_dashboard/${moduleId}`); +} + +updateDash(dashboardHeader: any): Observable { + return this.apiRequest.put('update_dashboard_header', dashboardHeader); +} + + + + +///////schedule +public saveData(data: any): Observable { + return this.apiRequest.post(`DashboardSchedule/DashboardSchedule`, data); +} + +public getDetails(): Observable { + return this.apiRequest.get(`DashboardSchedule/DashboardSchedule`); +} + +public getDetailsById(id: number): Observable { + return this.apiRequest.get(`DashboardSchedule/DashboardSchedule/${id}`); +} + +public deleteById(id: number): Observable { + return this.apiRequest.delete(`DashboardSchedule/DashboardSchedule/${id}`); +} + +public updateData(data: any, id: number): Observable { + return this.apiRequest.put(`DashboardSchedule/DashboardSchedule/${id}`, data); +} + +private toggleSubject = new BehaviorSubject(false); + +// Observable to subscribe to toggle changes +toggle$ = this.toggleSubject.asObservable(); + +// Function to update the toggle value +updateToggle(value: boolean) { + this.toggleSubject.next(value); +} + +private originalData: any[] = []; // Your original data goes here +private filteredDataSubject = new BehaviorSubject([]); +filteredData$: Observable = this.filteredDataSubject.asObservable(); + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard3.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard3.service.spec.ts new file mode 100644 index 0000000..12b63dd --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard3.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { Dashboard3Service } from './dashboard3.service'; + +describe('Dashboard3Service', () => { + let service: Dashboard3Service; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(Dashboard3Service); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard3.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard3.service.ts new file mode 100644 index 0000000..bcfedcf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/dashboard3.service.ts @@ -0,0 +1,308 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams } from "@angular/common/http"; +import { Observable } from 'rxjs'; +import { ApiRequestService } from "src/app/services/api/api-request.service"; +import baseUrl from '../api/helper'; +import { BehaviorSubject } from 'rxjs'; +@Injectable({ + providedIn: 'root' +}) +export class Dashboard3Service { + getAdditionalChartData() { + throw new Error('Method not implemented.'); + } + private getAllURL = 'get_module_id'; + private addDataURl = 'Savedata'; + private deleteFieldURL = 'delete_by_header_id'; + private getbyidURL = 'get_dashboard_headerbyid'; + private editURL = 'update_Dashbord1_Line'; + private updateURL = 'update_Dashbord1_Lineby_id'; + constructor(private _http: HttpClient, + private apiRequest: ApiRequestService) { } + getAll(module_id: number,page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + params = params.append("module_id", module_id.toString()); + // get all + return this.apiRequest.get(this.getAllURL, params); + } + + create(data:any): Observable { + return this.apiRequest.post(this.addDataURl, data); + } + + deleteField(id:number){ + let _http = this.deleteFieldURL + "/" + id; + return this.apiRequest.delete(_http); + } + + getById(id:number) + { + let _http = this.getbyidURL + "/" + id; + return this.apiRequest.get(_http); + } + + addToDB(line:any):Observable + { + return this.apiRequest.put(this.editURL,line); + } + UpdateLineData(id:number, line:any) + { + // line = { + // headers: new HttpHeaders({ + // 'Content-Type': 'application/json' + // }) + // }; + let _http = this.updateURL + "/" + id; + return this.apiRequest.put(_http,line); + } +getcount(moduleId: number):Observable{ + return this.apiRequest.get(`get_dashboard/${moduleId}`); +} + +updateDash(dashboardHeader: any): Observable { + return this.apiRequest.put('update_dashboard_header', dashboardHeader); +} +///////////////////////////////////////////////////////////////////// +resetConditions() { + this.ids = []; // Reset the ids array to an empty array + this.numberIds = []; + this.passwordIds = []; + this.textareaIds = []; + this.dateIds = []; + this.datetimeIds = []; + this.emailIds = []; + this.selectIds = []; + this.radioIds = []; + this.checkboxIds = []; + this.fileuloadIds = []; + this.urlIds = []; + this.decimalIds = []; + this.percentageIds = []; + this.buttonIds = []; +} + +//////////// Text +ids: any[] = []; +setCondition(condition: any) { + this.ids.push(condition); +} + +getConditions(): any[] { + return this.ids; +} + + +////////// Number +numberIds: any[] = []; +setnumber(id: any) { + this.numberIds.push(id); +} + +getnumber(): any[] { + return this.numberIds; +} +////////////// password +passwordIds: any[] = []; +setpassword(id: any) { + this.passwordIds.push(id); +} + +getpassword(): any[] { + return this.passwordIds; +} + +////////////// Textarea +textareaIds: any[] = []; +setTextarea(id: any) { + this.textareaIds.push(id); +} + +getTextarea(): any[] { + return this.textareaIds; +} + +////////////// Date +dateIds: any[] = []; +setDate(id: any) { + this.dateIds.push(id); +} + +getDate(): any[] { + return this.dateIds; +} + +////////////// Datetime +datetimeIds: any[] = []; +setDatetime(id: any) { + this.datetimeIds.push(id); +} + +getDatetime(): any[] { + return this.datetimeIds; +} + +////////////// Email +emailIds: any[] = []; +setEmail(id: any) { + this.emailIds.push(id); +} + +getEmail(): any[] { + return this.emailIds; +} + +////////////// Select +selectIds: any[] = []; +setSelect(id: any) { + this.selectIds.push(id); +} + +getSelect(): any[] { + return this.selectIds; +} + +////////////// Radio +radioIds: any[] = []; +setRadio(id: any) { + this.radioIds.push(id); +} + +getRadio(): any[] { + return this.radioIds; +} + +////////////// Checkbox +checkboxIds: any[] = []; +setCheckbox(id: any) { + this.checkboxIds.push(id); +} + +getCheckbox(): any[] { + return this.checkboxIds; +} + +////////////// fileupload +fileuloadIds: any[] = []; +setFileUpload(id: any) { + this.fileuloadIds.push(id); +} + +getFileupload(): any[] { + return this.fileuloadIds; +} + +////////////// Url +urlIds: any[] = []; +setUrl(id: any) { + this.urlIds.push(id); +} + +getUrl(): any[] { + return this.urlIds; +} +////////////// Decimal +decimalIds: any[] = []; +setDecimal(id: any) { + this.decimalIds.push(id); +} + +getDecimal(): any[] { + return this.decimalIds; +} +////////////// Percentage +percentageIds: any[] = []; +setPercentage(id: any) { + this.percentageIds.push(id); +} + +getPercentage(): any[] { + return this.percentageIds; +} +////////////// Button +buttonIds: any[] = []; +setButton(id: any) { + this.buttonIds.push(id); +} + +getButton(): any[] { + return this.buttonIds; +} + + + + + + + + + +getAllDash(): Observable { + // create Request URL params + return this.apiRequest.get(`get_Dashboard_header`); + } + +getAllByModuleId(module_id: number,page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + params = params.append("module_id", module_id.toString()); + // get all + return this.apiRequest.get(this.getAllURL, params); + } + +///////schedule +public saveData(data: any): Observable { + return this.apiRequest.post(`DashboardSchedule/DashboardSchedule`, data); +} + +public getDetails(): Observable { + return this.apiRequest.get(`DashboardSchedule/DashboardSchedule`); +} + +public getDetailsById(id: number): Observable { + return this.apiRequest.get(`DashboardSchedule/DashboardSchedule/${id}`); +} + +public deleteById(id: number): Observable { + return this.apiRequest.delete(`DashboardSchedule/DashboardSchedule/${id}`); +} + +public updateData(data: any, id: number): Observable { + return this.apiRequest.put(`DashboardSchedule/DashboardSchedule/${id}`, data); +} + +//////////////////////////////////////////////////////////////////////////// + + +public getDynamicDashDetails(): Observable { + return this.apiRequest.get(`Dashboard/Dashboard`); +} + +public getChartData(tableName: string, jobType: string, xAxis?:any,yAxes?:any ): Observable { + const url = `${baseUrl}/chart/getdashjson/${jobType}?tableName=${tableName}&xAxis=${xAxis}&yAxes=${yAxes}`; + return this._http.get(url); +} + +public getUrlChartData(tableName: string, jobType: string, xAxis:any,yAxes:any,store:any,chartUrl:any): Observable { + const url = `${baseUrl}/chart/getdashjson/${jobType}?tableName=${tableName}&url=${chartUrl}&xAxis=${xAxis}&yAxes=${yAxes}&datastore_name=${store}`; + return this._http.get(url); +} + +featchDynamicUrlDetails(url): Observable { + return this._http.get(`${url}`); +} + + +private filteredDataSubject = new BehaviorSubject([]); +filteredData$ = this.filteredDataSubject.asObservable(); + +updateFilteredData(filteredData: any[]) { + this.filteredDataSubject.next(filteredData); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/icon.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/icon.service.ts new file mode 100644 index 0000000..f8dd1de --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/icon.service.ts @@ -0,0 +1,63 @@ +import { Injectable } from '@angular/core'; +import { Observable } from "rxjs"; +import { ApiRequestService } from "../api/api-request.service"; +@Injectable({ + providedIn: 'root' +}) +export class IconService { + private addURL = "api/addFavById"; + private removeURL= "api/removeFavById"; + private pinurl ="api/addPinById"; + private pinremove ="api/removePinById"; + private starurl ="api/addStarById"; + private starremove ="api/removeStarById"; + private watchurl ="api/addWatchlistById"; + private watchremove = "api/removeWatchlistById"; + private futureurl = "api/addFuturisticById"; + private futureremove = "api/removeFuturisticById"; + private archurl ="api/addArchiveById"; + constructor(private apiRequest: ApiRequestService,) { } + create(data:any): Observable { + return this.apiRequest.post(this.addURL, data); + } + + delete(id: number): Observable { + const _http = this.removeURL + "/" + id; + return this.apiRequest.delete(_http); + } + createpin(data:any): Observable { + return this.apiRequest.post(this.pinurl, data); + } + + deletepin(id: number): Observable { + const _http = this.pinremove + "/" + id; + return this.apiRequest.delete(_http); + } + createstar(data:any): Observable { + return this.apiRequest.post(this. starurl, data); + } + + deletestar(id: number): Observable { + const _http = this.starremove + "/" + id; + return this.apiRequest.delete(_http); + } + createwatch(data:any): Observable { + return this.apiRequest.post(this. watchurl, data); + } + + deletewatch(id: number): Observable { + const _http = this.watchremove + "/" + id; + return this.apiRequest.delete(_http); + } + createfuture(data:any): Observable { + return this.apiRequest.post(this.futureurl, data); + } + + deletefuture(id: number): Observable { + const _http = this.futureremove + "/" + id; + return this.apiRequest.delete(_http); + } + createarch(data:any): Observable { + return this.apiRequest.post(this.archurl, data); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/modulesetup.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/modulesetup.service.ts new file mode 100644 index 0000000..8ccf61c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/modulesetup.service.ts @@ -0,0 +1,172 @@ +import { Injectable } from '@angular/core'; +import { ModuleSetup } from "../../models/builder/Module_Setup"; +import { Observable } from "rxjs"; +import { ApiRequestService } from "../api/api-request.service"; +import { HttpParams } from "@angular/common/http"; +@Injectable({ + providedIn: 'root' +}) +export class ModulesetupService { + private baseURL = "api/module-setup"; + private copyModuleURL = 'api/module-copy'; + private allrepourl ='api/getAllMyRepos'; + constructor( private apiRequest: ApiRequestService) { } + getAll(page?: number, size?: number): Observable { // not in use + //Create Request URL params + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + //const _http = this.baseURL + '/all'; + return this.apiRequest.get(this.baseURL, params); + } + + getProjectModules(projectId:number, page?: number, size?: number): Observable { + //Create Request URL params + let params: HttpParams = new HttpParams(); + params = params.append("projectId", projectId.toString()); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + //const _http = this.baseURL + '/all'; + return this.apiRequest.get(this.baseURL, params); + } + + getById(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.get(_http); + } + + getByAccountId(): Observable { + const _http = this.baseURL + "/user-menu"; + return this.apiRequest.get(_http); + } + + create(moduleSetup: ModuleSetup): Observable { + let params: HttpParams = new HttpParams(); + // params = params.append("p_id", projectId.toString()); + return this.apiRequest.post(this.baseURL, moduleSetup); + } + + update(id: number, moduleSetup: ModuleSetup): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, moduleSetup); + } + delete(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.delete(_http); + } + + copy(moduleCopyForm: Object) :Observable { + return this.apiRequest.post(this.copyModuleURL, moduleCopyForm); + } + + getByallrepouserId(id: number): Observable { + const _http = this.allrepourl + "/" + id; + return this.apiRequest.get(_http); + } + + + + /////backend Configuration + + saveData(data: any): Observable { + return this.apiRequest.post(`BackendConfig/BackendConfig`, data); + } + + getDetails(): Observable { + return this.apiRequest.get(`BackendConfig/BackendConfig`); + } + + getDetailsById(id: number): Observable { + return this.apiRequest.get(`BackendConfig/BackendConfig/${id}`); + } + + deleteById(id: number): Observable { + return this.apiRequest.delete(`BackendConfig/BackendConfig/${id}`); + } + + updatebackend(data: any, id: number): Observable { + return this.apiRequest.put(`BackendConfig/BackendConfig/${id}`, data); + } + + getAllViaModule(module_id: number): Observable { + return this.apiRequest.get(`BackendConfig/moduleid/${module_id}`); + } + + getAllViaProject(project_id: number): Observable { + return this.apiRequest.get(`BackendConfig/by_project/${project_id}`); + } + + + /////Database Configuration + + saveDBData(data: any): Observable { + return this.apiRequest.post(`Dbconfig/Dbconfig`, data); + } + + getDBDetails(): Observable { + return this.apiRequest.get(`Dbconfig/Dbconfig`); + } + + getDBDetailsById(id: number): Observable { + return this.apiRequest.get(`Dbconfig/Dbconfig/${id}`); + } + + deleteDBById(id: number): Observable { + return this.apiRequest.delete(`Dbconfig/Dbconfig/${id}`); + } + + updateDB(data: any, id: number): Observable { + return this.apiRequest.put(`Dbconfig/Dbconfig/${id}`, data); + } + + getDBAllViaModule(moduleid: number): Observable { + return this.apiRequest.get(`Dbconfig/bymoduleid/${moduleid}`); + } + + getDBAllViaProject(project_id: number): Observable { + return this.apiRequest.get(`Dbconfig/by_proj_id/${project_id}`); + } + + + testConnection(databaseType: string, username: string, password: string, portnumber: string, dbhostname: string, database_name): Observable{ + const url = 'suredata/test/testconnection'; + let params: HttpParams = new HttpParams(); + params =params.append("database_type",databaseType); + params =params.append("username",username); + params =params.append("password",password); + params =params.append("portnumber",portnumber); + params =params.append("dbhostname",dbhostname); + params =params.append("database_name",database_name) + return this.apiRequest.get(url, params); + } + + + //////get all config + + getConfigById(moduleid: number): Observable { + return this.apiRequest.get(`fnd/project/getallconfig/${moduleid}`); + } + + //==============Module_library===============// + +// copyToLibrary(id: number): Observable { +// return this.apiRequest.get(`wflibrary/copylib/copy_library/${id}`); +// } + +copyFromLibrary(library_id: number, proj_id: number): Observable { + return this.apiRequest.get(`library/modulelibrary/copyfrommodulelibrarytomodule/${library_id}/${proj_id}`); +} + + +addToLibrary(id: number): Observable { + return this.apiRequest.get(`library/modulelibrary/copyfromrn_module/${id}`); +} + +getdetails(): Observable { + return this.apiRequest.get(`Wf_library/Wf_library`); +} + +getLibrarydetails(): Observable { + return this.apiRequest.get(`library/modulelibrary/getall_module_lib`); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/project-setup.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/project-setup.service.spec.ts new file mode 100644 index 0000000..cfc90bb --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/project-setup.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ProjectSetupService } from './project-setup.service'; + +describe('ProjectSetupService', () => { + let service: ProjectSetupService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ProjectSetupService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/project-setup.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/project-setup.service.ts new file mode 100644 index 0000000..dc32c4b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/project-setup.service.ts @@ -0,0 +1,237 @@ + +import { Injectable } from '@angular/core'; +import { ProjectSetup } from "../../models/builder/Project_setup"; +import { forkJoin, Observable } from "rxjs"; +import { ApiRequestService } from "../api/api-request.service"; +import { HttpParams } from "@angular/common/http"; +import { HttpClient} from '@angular/common/http'; +import { map } from 'rxjs/operators'; +import baseUrl from 'src/app/services/api/helper'; +@Injectable({ + providedIn: 'root' +}) +export class ProjectSetupService { + private baseURL = "api/project-setup"; + //private copyProjectURL = 'api/project-list'; + private copyProjectURL = 'api/project-copy'; + private recenmodiurl = 'api/getAllRecentPrjs'; + private recentarchivedurl = 'api/getAllArchivedPrjs'; + private allfavurl='api/getAllFavPrjsdet'; + private getalluserid='api/GetAllByUserId'; + private addboardandprourl='api/addBoardClmnsOther'; + private getrepourl ='api/getmodulename'; + private copydeployurl='api/Git_copy'; + data: any; + obj:any; + private storage: Storage = sessionStorage; + constructor(private apiRequest: ApiRequestService, + private http: HttpClient) { this.getAll().subscribe(data => {}, error => console.log(error)); + localStorage.setItem('project',JSON.stringify(this.data)); + } + + getAll(page?: number, size?: number): Observable { + //Create Request URL params + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + //const _http = this.baseURL + '/all'; + return this.apiRequest.get(this.baseURL, params); + } + getallmyproject(): Observable{ + return this.apiRequest.get(`fnd/project/myproject`); + } +getalljson(){ + + return this.http.get('../assets/data/data.json').pipe + (map(data => { + this.data = data; + console.log(data); + }, err => { + if (err) { + return err.json(); + } + })); + return this.apiRequest.get(this.baseURL); +} + getById(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.get(_http); + } + + + create(projectSetup: ProjectSetup): Observable { + return this.apiRequest.post(this.baseURL, projectSetup); + } + + update(id: number, projectSetup: ProjectSetup): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.put(_http, projectSetup); + } + + copy(projectCopyForm: Object) :Observable { + return this.apiRequest.post(this.copyProjectURL, projectCopyForm); + } + delete(id: number): Observable { + const _http = this.baseURL + "/" + id; + return this.apiRequest.delete(_http); + } + +//recently modify + getallrecentmodify(id: number): Observable { + const _http = this.recenmodiurl + "/" + id; + return this.apiRequest.get(_http); + } + getallrecentarchived(id:number): Observable{ + const _http = this.recentarchivedurl + "/" + id; + return this.apiRequest.get(_http); + } + getallfav(id:number): Observable{ + const _http = this.allfavurl + "/" + id; + return this.apiRequest.get(_http); + } + getallsharedwithme(): Observable{ + return this.apiRequest.get(`workspace/secworkspaceuser/sharedwithme`); + } + getallbyuserid(id:number): Observable{ + const _http = this.getalluserid + "/" + id; + return this.apiRequest.get(_http); + } + public sample(data1,data2): Observable{ + let call1=this.apiRequest.post(this.baseURL, data1) + let call2=this.apiRequest.post(this.addboardandprourl,data2) + return forkJoin([call1, call2]); +} + +getprojectname(){ + return this.http.get(`${baseUrl}/api/getprojectname`); +} +getreponame(projectId:any,page?: number, size?: number){ + let params: HttpParams = new HttpParams(); + params = params.append("projectId", projectId.toString()); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + return this.apiRequest.get(this.getrepourl, params); + //return this.http.get(`${baseUrl}/api/getmodulename`,params); +} +getmilstonename(){ + return this.http.get(`${baseUrl}/milestonename`); +} +getiterationname(){ + return this.http.get(`${baseUrl}/iterationname`); +} +getgoalname(){ + return this.http.get(`${baseUrl}/goalname`); +} +getpmusername(){ + return this.http.get(`${baseUrl}/pmusername`); +} +getallteam(){ + return this.http.get(`${baseUrl}/Sec_team`); +} +getallreport(){ + return this.http.get(`${baseUrl}/Report_to`); +} +getallassign(){ + return this.http.get(`${baseUrl}/Assign`); +} +getallrequestor(){ + return this.http.get(`${baseUrl}/Requestor`); +} +getallowner(){ + return this.http.get(`${baseUrl}/Owner`); +} +getalltype(){ + return this.http.get(`${baseUrl}/DD_type`); +} + +public build(Id: any){ + return this.apiRequest.get(`entityBuilder/BuildByProject/${Id}`); +} +private pdata: string = "pdata"; +public storeaddeditvalues(pdata:any,) { + this.storage.setItem(this.pdata,JSON.stringify (pdata)); + //console.log(this.data); +} +getdata(): any { + //console.log(this.data); + var pdata = JSON.parse(this.storage.getItem(this.pdata)); + //let data = this.storage.getItem(this.data); + return pdata; +} +copydeployment(projectId:any,deployment:any,msg: any,newprojectname:any,repo_cond:any){ + let params: HttpParams = new HttpParams(); + params =params.append("copy_from",projectId); + params =params.append("Deployment_profile",deployment); + params =params.append("commit_msg",msg); + params =params.append("newproject_name",newprojectname), + params=params.append("repo_cond",repo_cond) + return this.http.post(`${baseUrl}/api/Git_copy`,params); + //return this.apiRequest.post(this.copydeployurl,params); + //return this.http.get(`${baseUrl}/api/getmodulename`,params); + +} +private gitiareponame: string = "data"; +public storeaddedgitiareponame(data:any,) { + this.storage.setItem(this.gitiareponame,JSON.stringify (data)); + //console.log(this.data); +} +getgitiareponame(): any { + //console.log(this.data); + var data = JSON.parse(this.storage.getItem(this.gitiareponame)); + //let data = this.storage.getItem(this.data); + return data; +} +public removereponame() { + this.storage.removeItem(this.gitiareponame); +} +private repoIdKey: any; +public storereposhaid(sha:any) { + this.storage.setItem(this.repoIdKey,sha.toString()); +} +public removereposhaid() { + this.storage.removeItem(this.repoIdKey); +} +getreposhaid(): number { + this.removereposhaid(); + let repoId = +this.storage.getItem(this.repoIdKey); + return repoId; +} + + + //==============project_library===============// + +// copyToLibrary(id: number): Observable { +// return this.apiRequest.get(`wflibrary/copylib/copy_library/${id}`); +// } + +copyFromLibrary(id: number): Observable { + return this.apiRequest.get(`projectlibrary/copyfromprojectlibrary/${id}`); +} + +getallprojectLibrary(): Observable { + return this.apiRequest.get(`projectlibrary/getall_projectlibrary`); +} + + +addToLibrary(id: number): Observable { + return this.apiRequest.get(`projectlibrary/copyfromrn_project/${id}`); +} + +getdetails(): Observable { + return this.apiRequest.get(`Wf_library/Wf_library`); +} + + + +/////////////////////////filters================================ +getAllSearchResults(keyword: string): Observable { + const url = `fnd/project/search/${keyword}`; + return this.apiRequest.get(url); +} + + +//////technology show +getProjectTechbyId(proj_id: number): Observable { + return this.apiRequest.get(`fnd/project2/techstacks/${proj_id}`); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/technology-stack.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/technology-stack.service.ts new file mode 100644 index 0000000..347c139 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/technology-stack.service.ts @@ -0,0 +1,80 @@ + +import { Injectable } from '@angular/core'; +import { ActiveTechnology } from '../../models/builder/ActiveTechnology'; +import { Bcf_TechnologyStack } from '../../models/builder/Bcf_TechnologyStack'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from '../../services/api/api-request.service'; +import { HttpParams } from '@angular/common/http'; +@Injectable({ + providedIn: 'root' +}) +export class TechnologyStackService { + private technologyStackURL = 'api/technology-stack'; + private technologyStackURL1='api/technology_stack1'; + private technologyStackActivateURL ='api/tech-stack-active'; + private activatedTechnologyURL ='api/active-technology'; +private updateelementurl='api/update_tech_element' + constructor(private apiRequest: ApiRequestService) { } + getAll(page?: number, size?: number): Observable { + //Create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + // get all + // return this.apiRequest.get('api/instructors'); + // paginated data + return this.apiRequest.get(this.technologyStackURL, params); + + } + + getById(id: number): Observable { + const _http = this.technologyStackURL + "/" + id; + return this.apiRequest.get(_http); + } + + create(Bcf_TechnologyStack: Bcf_TechnologyStack): Observable { + //`${this.baseURL}` + return this.apiRequest.post(this.technologyStackURL, Bcf_TechnologyStack); + } + + // UPLOAD ZIP FILE DATA + saveFormAndUploadFile(formData: FormData) :Observable { + return this.apiRequest.postFormData(this.technologyStackURL, formData); + } +// without zip data save +saveFormAndUploadFile1(formData: FormData) :Observable { + return this.apiRequest.postFormData(this.technologyStackURL1, formData); +} +updateLineById(id:number,data:any){ + let _http = this.updateelementurl + "/"+id; + return this.apiRequest.put(_http,data); +} + update(id: number, Bcf_TechnologyStack: Bcf_TechnologyStack): Observable { + const _http = this.technologyStackURL + "/" + id; + return this.apiRequest.put(_http, Bcf_TechnologyStack); + } + + setActive(id: any):Observable { + let params: HttpParams = new HttpParams(); + params = params.append("id", id.toString()); + return this.apiRequest.get(this.technologyStackActivateURL, params); + } + + getActiveTechnology(): Observable { + return this.apiRequest.get(this.activatedTechnologyURL); + } + + delete(id: number): Observable { + const _http = this.technologyStackURL + "/" + id; + return this.apiRequest.delete(_http); + } + + + ////get by service type + getByServiceType(servicetype: any): Observable { + const _http = "token/flf/tech_stack/get_byservicetype/" + servicetype; + return this.apiRequest.get(_http); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/wireframe-line.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/wireframe-line.service.ts new file mode 100644 index 0000000..f1bfe8b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/wireframe-line.service.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import baseUrl from '../api/helper' +import { Observable } from 'rxjs'; +import { ApiRequestService } from '../api/api-request.service'; +@Injectable({ + providedIn: 'root' +}) +export class WireframeLineService { + + constructor(private _http: HttpClient, private apiRequest:ApiRequestService) { } + public addToDB(line: any){ + return this._http.post(`${baseUrl}/r/create`, line); + } + + public getOneFromDBById(id: any){ + return this._http.get(`${baseUrl}/r/get-one/${id}`); + } + + public getAllLines(){ + return this._http.get(`${baseUrl}/r/get-all`); + } + + public updateOneLine(line: any){ + return this._http.put(`${baseUrl}/r/update`, line); + } + getseedetails(): Observable { + return this._http.get(`${baseUrl}/token/frontendtable/getall`); + } +///list builder +getAllwireframeslistoflistbuilder(id:number):Observable{ + return this._http.get(`${baseUrl}/listbuilder/lb_line/getallwireframe_table/${id}`); +} + +////wireframe + getAllwireframeslist(id:number):Observable{ + return this._http.get(`${baseUrl}/formdrag/wireframe/getallwireframe_table/${id}`); + } + ///// + + getAllwireframes(id:number,wfid:any):Observable{ + return this._http.get(`${baseUrl}/formdrag/wireframe/getall_table/${id}/${wfid}`); + } + + getAllwireframesmodel(id:number,wfid:any,wfname:any):Observable{ + return this._http.get(`${baseUrl}/formdrag/wireframe/getmodel/${id}/${wfid}/${wfname}`); + } + + getColumnList(projId: any, tableName: any): Observable { + const url = `${baseUrl}/formdrag/wireframe/columnlistofwireframe/${projId}/${tableName}`; + return this._http.get(url); + } + +//==============wf_library===============// + +addToLibrary(id: number): Observable { + return this.apiRequest.get(`wflibrary/copylib/copy_library/${id}`); +} + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/wireframe.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/wireframe.service.ts new file mode 100644 index 0000000..ecb926d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/builder/wireframe.service.ts @@ -0,0 +1,273 @@ +import { HttpParams } from "@angular/common/http"; +import { Injectable } from "@angular/core"; +import { Rn_Fb_Header } from "src/app/models/builder/Rn_Fb_Header"; +import { Rn_Fb_Lines } from "src/app/models/builder/Rn_Fb_Lines"; +import { WireFrame } from "src/app/models/builder/WireFrame"; +import { Observable } from "rxjs"; +import { ApiRequestService } from "../api/api-request.service"; + +export interface WireFrameList { + id: number; + name: string; +} + +@Injectable() +export class WireframeService { + private wireframeBaseURL ='api/wireframe'; + private wireFrameDropDownURL = 'api/wireframe-list' + private wireFrameLinesURL = 'api/wireframe-lines' // used in edit view form + private uinamechangeurl='api/wireframe-uiname' + + private wireFrameLineURL = 'api/wireframe-line' // get fbLine by id + private copyWireFrameURL = 'api/wireframe-copy'; + private projectIdKey: string = "projectId"; // used in wireframe type component + private moduleIdKey: string = "moduleId"; + //private editWireframeCardURL = 'wfb/newupdate/headersnew'; //update wireframe card component list + + private storage: Storage = sessionStorage; + constructor( + private apiRequest: ApiRequestService + ) {} + + public storeProjectId(projectId: number) { + this.storage.setItem(this.projectIdKey, projectId.toString()); + } + public removeProjectId() { + this.storage.removeItem(this.projectIdKey); + } + getProjectId(): number { + let prjId = +this.storage.getItem(this.projectIdKey); + return prjId; + } + + public storeModuleId(moduleId: number) { + this.storage.setItem(this.moduleIdKey, moduleId.toString()); + } + public removeModuleId() { + this.storage.removeItem(this.moduleIdKey); + } + getModuleId(): number { + let modId = +this.storage.getItem(this.moduleIdKey); + return modId; + } + // ====== storage finish ======= + + // ========== RB_FB_HEADER APIS =========== // + + getAll(moduleId: number, page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + params = params.append("moduleId", moduleId.toString()); + // get all + return this.apiRequest.get(this.wireframeBaseURL, params); + } + + getById(id: number): Observable { + const _http = this.wireframeBaseURL + "/" + id; + return this.apiRequest.get(_http); + } + + // this is used in edit view form + getLinesByHeaderId(id: number): Observable { + const _http = this.wireFrameLinesURL + "/" + id; + return this.apiRequest.get(_http); + } + + create(fbHeader: Rn_Fb_Header,): Observable { + //`${this.baseURL}` + //let params: HttpParams = new HttpParams(); + // params = params.append("moduleId", moduleId.toString()); + //params = params.append("formType", formType); + return this.apiRequest.post(this.wireframeBaseURL, fbHeader); + } + + update(id: number, fbHeader: Rn_Fb_Header): Observable { + const _http = this.wireframeBaseURL + "/" + id; + return this.apiRequest.put(_http, fbHeader); + } + + wireFrameDropDown() : Observable { + return this.apiRequest.get(this.wireFrameDropDownURL); + } + + copy(wireframeCopyForm: Object) :Observable { + return this.apiRequest.post(this.copyWireFrameURL, wireframeCopyForm); + } + + // ======== RN FB LINE APIS =============// + getLineById(id: number): Observable { + const _http = this.wireFrameLineURL + "/" + id; + return this.apiRequest.get(_http); + } + + updateLineById(id: number, fbLine: Rn_Fb_Lines): Observable { + const _http = this.wireFrameLineURL + "/" + id; + return this.apiRequest.put(_http, fbLine); + } + + + // create table for only-header, header-line, only-line, multiline form + private createTableUrl: string = 'api/createTable'; + private createHLTableUrl: string = 'api/createTableHL'; + private createMLTableUrl: string = 'api/createTableMultiline'; + createTable(headerId: number, formType: string, data: Object) { + let params: HttpParams = new HttpParams(); + params = params.append("header_id", headerId.toString()); + + if(formType === 'header_only' || formType === 'line_only') { + return this.apiRequest.post(this.createTableUrl, data, params); + } else if (formType === 'header_line') { + return this.apiRequest.post(this.createHLTableUrl, data, params); + } else if(formType === 'multiline') { + return this.apiRequest.post(this.createMLTableUrl, data, params); + } + } + + + private buildMVCFormURL: string = 'api/build_wireframe'; + private buildForm: string ='api/SpringMVC_Hibernate_Mysql_Form_onlyHeader_Builder'; + private buildMVC_ML_FormURL: string = 'ml_build_form'; + // build mvc form + buildMVCForm(formType: string, headerId: number) { + let params: HttpParams = new HttpParams(); + params = params.append("header_id", headerId.toString()); + if(formType === 'multiline') { + return this.apiRequest.get(this.buildMVC_ML_FormURL, params); + } else { + return this.apiRequest.get(this.buildMVCFormURL, params); + // return this.apiRequest.get(this.buildForm, params); + } + } + + private buildAngularFormURL: string = 'build_angular_form'; + // build angular form + buildAngularForm(headerId: number) { + let params: HttpParams = new HttpParams(); + params = params.append("header_id", headerId.toString()); + return this.apiRequest.get(this.buildAngularFormURL, params); + } + + private delete_MVC_OH_FormURL: string = 'delete_wireframe'; + private delete_MVC_OL_FormURL: string = 'delete_line_wireframe'; + private delete_MVC_HL_FormURL: string = 'delete_header_line_wireframe'; + private delete_MVC_ML_FormURL: string = 'delete_header_line_wireframe'; + deleteMVCForm(formType: string, headerId: number) { + let params: HttpParams = new HttpParams(); + params = params.append("header_id", headerId.toString()); + if(formType === 'header_only') { + return this.apiRequest.get(this.delete_MVC_OH_FormURL, params); + } else if(formType === 'line_only') { + return this.apiRequest.get(this.delete_MVC_OL_FormURL, params); + } else if (formType === 'header_line') { + return this.apiRequest.get(this.delete_MVC_HL_FormURL, params); + } else if(formType === 'multiline') { + return this.apiRequest.get(this.delete_MVC_ML_FormURL, params); + } + } + + private baseURl: string = 'api'; + dynamicBuilder(headerId: number, actionLink: string) { + let params: HttpParams = new HttpParams(); + params = params.append("header_id", headerId?.toString()); + return this.apiRequest.get("api/wireframe_builder_json_controller"+actionLink, params); // first return this.apiRequest.get("api/"+actionLink, params); + } + public build(Id: any){ + return this.apiRequest.get(`entityBuilder/json/${Id}`); + } + //============= MANUPULATE WIREFRAME PROPERTIES ===============// + + private addNewFieldInSectionURL = 'api/wireframe-add-field-in-section'; + private addNewFieldInLineSectionURL = 'api/wireframe-add-field-in-line-section'; + private updateFieldNameURL = 'api/wireframe-update-field-name'; + private deleteSectionURL = 'api/wireframe-delete-section'; + addFieldInSection(id: number, sectionNumber: number) :Observable { + let params: HttpParams = new HttpParams(); + params = params.append("id", id.toString()); + params = params.append("section", sectionNumber.toString()); + return this.apiRequest.get(this.addNewFieldInSectionURL, params); + } + + addFieldInLineSection(id: number, sectionNumber: number): Observable { + let params: HttpParams = new HttpParams(); + params = params.append("id", id.toString()); + params = params.append("section", sectionNumber.toString()); + return this.apiRequest.get(this.addNewFieldInLineSectionURL, params); + } + + + updateFieldName(id: number, body: Rn_Fb_Lines): Observable { + let _http = this.updateFieldNameURL + "/" + id; + return this.apiRequest.post(_http, body); + } + + private addSectionOrButtonURL = 'api/wireframe-add-section-button'; + addSectionOrButton(headerId, body: Object): Observable { + let _http = this.addSectionOrButtonURL + "/" + headerId; + return this.apiRequest.post(_http, body); + } + + + deleteSection(headerId: number, sectionNumber: number): Observable { + let _http = this.deleteSectionURL + "/" + headerId; + let params: HttpParams = new HttpParams(); + params = params.append("section_num", sectionNumber.toString()); + return this.apiRequest.get(_http, params); + } + + private deleteFieldURL = 'api/wireframe_delete_header'; + deleteField(id: number) { + let _http = this.deleteFieldURL + "/" + id; + return this.apiRequest.delete(_http); + } + + updateuiname(id, data): Observable { + let _http = this.uinamechangeurl + "/" + id; + return this.apiRequest.put(_http,data); + } +private WURL='fnd/project/count_wfline3' +wireframecount(){ + let _http = this.WURL; + return this.apiRequest.get(_http); +} +wireframecount1(id:any){ + let _http = `fnd1/count/get_wireframe/${id}`; + return this.apiRequest.get(_http); +} +reportcount(id:any){ + let _http=`fnd1/count/get_REPORT/${id}`; + return this.apiRequest.get(_http); +} +actioncount(id:any){ + let _http=`fnd1/count/get_action/${id}`; + return this.apiRequest.get(_http); +} + +editWireframeCard(id:any, headerData:Rn_Fb_Header):Observable{ + const _http = `wfb/newupdate/headersnew/${id}`; + return this.apiRequest.put(_http,headerData); +} + +getByIdWireframe(id:any){ + let _http = `api/wireframe/${id}`; + return this.apiRequest.get(_http); +} + +//==============wf_library===============// + +// copyToLibrary(id: number): Observable { +// return this.apiRequest.get(`wflibrary/copylib/copy_library/${id}`); +// } + +copyFromLibrary(id: number, moduleId: number): Observable { + return this.apiRequest.get(`wflibrary/copylib/copy_library/${id}/${moduleId}`); +} + +getdetails(): Observable { + return this.apiRequest.get(`Wf_library/Wf_library`); +} + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/csv.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/csv.service.ts new file mode 100644 index 0000000..11af915 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/csv.service.ts @@ -0,0 +1,136 @@ +import { Injectable } from '@angular/core'; +import { Observable } from "rxjs"; +import { ApiRequestService } from "../services/api/api-request.service"; +import { HttpParams } from "@angular/common/http"; +import { saveAs } from 'file-saver'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import baseUrl from './api/helper'; +@Injectable({ + providedIn: 'root' +}) +export class CsvService { + private getallheadersURL = "api/csv/getallheaders"; + private SaveURL = "api/template/save"; + private downloadURL = "api/csv/download"; + private purl="api/template/demo/download"; + constructor(private apiRequest: ApiRequestService, + private http: HttpClient) { } + + + importCsv(file: File,data:any):Observable{ + const formData = new FormData(); + formData.append('file', file); + return this.apiRequest.postFormData(`${this.SaveURL}/${data}`,formData); + //return this.http.post('http://localhost:9191/api/csv/save', formData); + } + + getAllCsv(): Observable{ + let me = this; + let params: HttpParams = new HttpParams(); + //params = params.set('file', file); + return this.apiRequest.get(this.getallheadersURL, params); + } + + downloadCsv(): Observable{ + let me = this; + let params: HttpParams = new HttpParams(); + //params= params.set('file', file); + return this.apiRequest.get(this.downloadURL, params); + } + + // working + // downloadCsvsprio(data:any): void { + // this.http.get(`${baseUrl}/api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + // saveAs(data, 'Sr_priority2_t'); + // }); + // } + + // downloadCsvsprio(data:any): void { + // this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + // saveAs(data, 'Sr_priority2_t'); + // }); + // } + + // downloadCsvsimpa(data:any): void { + // this.apiRequest.getFile(`${baseUrl}/api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + // saveAs(data, 'Sr_impact2_t'); + // }); + // } + // downloadCsvsurge(data:any): void { + // this.apiRequest.getFile(`${baseUrl}/api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + // saveAs(data, 'Sr_urgency_t'); + // }); + // } + // downloadCsvscat(data:any): void { + // this.apiRequest.getFile(`${baseUrl}/api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + // saveAs(data, 'Sr_category2_t'); + // }); + // } + // downloadCsvsstate(data:any): void { + // this.apiRequest.getFile(`${baseUrl}/api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + // saveAs(data, 'Sr_State_t'); + // }); + // } + // downloadCsvscontact(data:any): void { + // this.apiRequest.getFile(`${baseUrl}/api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + // saveAs(data, 'Sr_Contact_type_t'); + // }); + // } + // downloadCsvscust(data:any): void { + // this.apiRequest.getFile(`${baseUrl}/api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + // saveAs(data, 'Sr_customer_t'); + // }); + // } + // downloadCsvshan(data:any): void { + // this.apiRequest.getFile(`${baseUrl}/api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + // saveAs(data, 'Sr_handler_t'); + // }); + // } + + downloadCsvs(data:any): void { + this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + saveAs(data, data+'_t'); + }); + } + + downloadCsvsprio(data:any): void { + this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + saveAs(data, 'Sr_priority2_t'); + }); + } + downloadCsvsimpa(data:any): void { + this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + saveAs(data, 'Sr_impact2_t'); + }); + } + downloadCsvsurge(data:any): void { + this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + saveAs(data, 'Sr_urgency_t'); + }); + } + downloadCsvscat(data:any): void { + this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + saveAs(data, 'Sr_category2_t'); + }); + } + downloadCsvsstate(data:any): void { + this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + saveAs(data, 'Sr_State_t'); + }); + } + downloadCsvscontact(data:any): void { + this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + saveAs(data, 'Sr_Contact_type_t'); + }); + } + downloadCsvscust(data:any): void { + this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + saveAs(data, 'Sr_customer_t'); + }); + } + downloadCsvshan(data:any): void { + this.apiRequest.getFile(`api/template/demo/download/${data}`, { responseType: 'blob' }).subscribe(data => { + saveAs(data, 'Sr_handler_t'); + }); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/excel.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/excel.service.ts new file mode 100644 index 0000000..2c4c582 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/excel.service.ts @@ -0,0 +1,30 @@ +import { Injectable } from '@angular/core'; +import * as FileSaver from 'file-saver'; +import * as XLSX from 'xlsx'; + +const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'; +const EXCEL_EXTENSION = '.xlsx'; + +@Injectable({ + providedIn: 'root' +}) +export class ExcelService { + + constructor() { } + + public exportAsExcelFile(json: any[], excelFileName: string, fileNameSuffix=''): void { + + const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json); + const workbook: XLSX.WorkBook = { Sheets: { 'data': worksheet }, SheetNames: ['data'] }; + const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); + this.saveAsExcelFile(excelBuffer, excelFileName, fileNameSuffix); + } + + private saveAsExcelFile(buffer: any, fileName = 'export', fileNameSuffix=''): void { + const data: Blob = new Blob([buffer], { + type: EXCEL_TYPE + }); + FileSaver.saveAs(data, fileName + fileNameSuffix + EXCEL_EXTENSION); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/alerts.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/alerts.service.ts new file mode 100644 index 0000000..430879a --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/alerts.service.ts @@ -0,0 +1,68 @@ +import { Injectable } from '@angular/core'; +import { ApiRequestService } from '../api/api-request.service'; +import { Observable } from 'rxjs'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; + +@Injectable({ + providedIn: 'root' +}) +export class AlertsService { + + constructor(private http: HttpClient,private apiRequest: ApiRequestService) {} + + public saveData(data: any): Observable { + return this.apiRequest.post(`Alerts/Alerts`, data); + } + + public getDetails(): Observable { + return this.apiRequest.get(`Alerts/Alerts`); + } + + public getDetailsById(id: number): Observable { + return this.apiRequest.get(`Alerts/Alerts/${id}`); + } + + public deleteById(id: number): Observable { + return this.apiRequest.delete(`Alerts/Alerts/${id}`); + } + + public updateData(data: any, id: number): Observable { + return this.apiRequest.put(`Alerts/Alerts/${id}`, data); + } + + + ////////// ALert Rules + public saveRuleData(data: any): Observable { + return this.apiRequest.post(`AlertRules/AlertRules`, data); + } + + public getRuleDetails(): Observable { + return this.apiRequest.get(`AlertRules/AlertRules`); + } + + public getRuleDetailsById(id: number): Observable { + return this.apiRequest.get(`AlertRules/AlertRules/${id}`); + } + + public deleteRuleById(id: number): Observable { + return this.apiRequest.delete(`AlertRules/AlertRules/${id}`); + } + + public updateRuleData(data: any, id: number): Observable { + return this.apiRequest.put(`AlertRules/AlertRules/${id}`, data); + } + + ///get table form store + public getTablefromstore(id: number): Observable { + return this.apiRequest.get(`AlertRules/tablelist/${id}`); + } + + ///get column form store + public getColumnfromstore(id: number, tableName:string): Observable { + return this.apiRequest.get(`AlertRules/columnlist/${id}/${tableName}`); + } + + public getColumnfromurl(url: any): Observable { + return this.apiRequest.get(`chart/getAllKeys?apiUrl=${url}`); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/bulkimport.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/bulkimport.service.ts new file mode 100644 index 0000000..6055e4b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/bulkimport.service.ts @@ -0,0 +1,160 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { ApiRequestService } from '../api/api-request.service'; +import baseUrl from '../api/helper'; +import { Observable } from 'rxjs'; +import { environment } from 'src/environments/environment'; +import { map } from 'rxjs/operators'; + +@Injectable({ + providedIn: 'root' +}) +export class BulkimportService { + private URL = environment.backendUrl; + constructor(private http: HttpClient,private apiRequest: ApiRequestService) { } + + public saveData(data: any): Observable { + return this.http.post(`${baseUrl}/BulkUpload/BulkUpload`, data); + } + + public getDetails(): Observable { + return this.http.get(`${baseUrl}/BulkUpload/BulkUpload`); + } + + public getDetailsById(id: number): Observable { + return this.http.get(`${baseUrl}/BulkUpload/BulkUpload/${id}`); + } + + public deleteById(id: number): Observable { + return this.http.delete(`${baseUrl}/BulkUpload/BulkUpload/${id}`); + } + + public updateData(data: any, id: number): Observable { + return this.http.put(`${baseUrl}/BulkUpload/BulkUpload/${id}`, data); + } + + + //rule + condition:string = ''; + setCondition(condition: string) { + this.condition = condition; + } + + getCondition(): string { + return this.condition; + } + + getSheetName(id: number): Observable{ + return this.apiRequest.get(`api/BulkUpload/sheet/${id}`); + } + + convertFileToJson(id: number): Observable { + return this.apiRequest.post(`api/BulkUpload/templatetojson/${id}`, {}); + } + + // getTemplateById(id: number): Observable { + // const url = `api/template/gettemplatebyid/${id}`; + // return this.apiRequest.get(url); + // } + + getHeader(id: number): Observable { + const url = `api/BulkUpload/getHeaders/${id}`; + return this.apiRequest.get(url); + } + + getColumnNames(tableName: string): Observable { + const url = `api/BulkUpload/columns/${tableName}`; + return this.apiRequest.get(url); + } + + changeKeysOfJson(updatedKeyJson: string, oldKeyDataJson:any): Observable { + const formData:FormData=new FormData(); + formData.append("updatedKeyJson",updatedKeyJson); + formData.append("oldKeyDataJson",oldKeyDataJson); + return this.apiRequest.postFormData(`api/BulkUpload/jsonkeychange`, formData); + } + + downloadExcel(id: string, jsonData:any, ruleData:any): Observable { + // return this.apiRequest.post(`api/dynamic/DownloadExcel/${tableName}`, data); + jsonData = JSON.stringify(jsonData); + ruleData = JSON.stringify(ruleData); + const formData:FormData=new FormData(); + formData.append("jsonData",jsonData); + formData.append("ruleData",ruleData); + const url = `${this.URL}/api/BulkUpload/DownloadExcel/${id}`; + return this.apiRequest.postFormData(`api/BulkUpload/DownloadExcel/${id}`, formData); + // return this.http.post(url, formData, { responseType: 'blob' }).pipe( + // map((response: Blob) => { + // // Process the response as needed + // return response; + // }) + // ); + } + + ////for download + getSheet(id: number): Observable { + const url = `${this.URL}/api/BulkUpload/downloadImportStatement/${id}`; + // return this.apiRequest.get(url); + return this.http.get(url, { responseType: 'blob' }).pipe( + map((response: Blob) => { + // Process the response as needed + return response; + }) + ); + } + + /////////////////////// + //mapping rules + public saveMappingData(data: any): Observable { + return this.http.post(`${baseUrl}/MappingRule/MappingRule`, data); + } + + public getMappingDetails(): Observable { + return this.http.get(`${baseUrl}/MappingRule/MappingRule`); + } + + public getMappingDetailsById(id: number): Observable { + return this.http.get(`${baseUrl}/MappingRule/MappingRule/${id}`); + } + + public deleteMappingById(id: number): Observable { + return this.http.delete(`${baseUrl}/MappingRule/MappingRule/${id}`); + } + + public updateMappingData(data: any, id: number): Observable { + return this.http.put(`${baseUrl}/MappingRule/MappingRule/${id}`, data); + } + + getDDforMappingRule(excelFile:any, sheetName:string){ + console.log(sheetName,excelFile) + const formData:FormData=new FormData(); + formData.append("excelFile",excelFile); + formData.append("sheetName",sheetName); + return this.apiRequest.postFormData(`MappingRule/getHeaders`, formData); + } + + + ///////////////////// + // master + + mastergetexcelSheet(file_type: string): Observable { + const url = `masterimport/demo/download/${file_type}`; + return this.apiRequest.get(url); + } + + masterdownloadExcel(id: string, jsonData:any,): Observable { + jsonData = JSON.stringify(jsonData); + const formData:FormData=new FormData(); + formData.append("jsonData",jsonData); + return this.apiRequest.postFormData(`masterimport/DownloadExcelForMaster/${id}`, formData); + } + + mastergetSheetName(id: number): Observable{ + return this.apiRequest.get(`masterimport/sheet/${id}`); + } + + mastergetColumnNames(tableName: string): Observable { + const url = `masterimport/columns/${tableName}`; + return this.apiRequest.get(url); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/code-extraction.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/code-extraction.service.spec.ts new file mode 100644 index 0000000..bd7eae4 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/code-extraction.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { CodeExtractionService } from './code-extraction.service'; + +describe('CodeExtractionService', () => { + let service: CodeExtractionService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(CodeExtractionService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/code-extraction.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/code-extraction.service.ts new file mode 100644 index 0000000..17b8dbd --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/code-extraction.service.ts @@ -0,0 +1,184 @@ +import { Injectable } from '@angular/core'; +import { HttpParams } from '@angular/common/http'; + + +import { Bcf_Extractor } from 'src/app/models/fnd/Bcf_Extractor'; +import { Bcf_Extractor_Params } from 'src/app/models/fnd/Bcf_Extractor_Params'; +import { FileData } from 'src/app/models/builder/FileData'; +import { FileDetails } from 'src/app/models/builder/FileDetails'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from '../api/api-request.service'; +import { catchError } from 'rxjs/operators'; +@Injectable({ + providedIn: 'root' +}) +export class CodeExtractionService { + private codeExtractionURL = 'api/bcf-extractor'; + private codeExtractionParamsURL = 'api/bcf-extractor-params'; + private staticCodeExtractionURL = 'api/static_code_extraction'; + private dynamicCodeExtractionURL = 'api/dynamic_code_extraction'; + private buildMasterBuilderURL = 'api/build_master_builder'; + private extractionStatusChangeURL = 'api/bcf-extractor-params/extraction-status-change'; + private creationStatusChangeURL = 'api/bcf-extractor-params/creation-status-change'; + private codeExtractionBuilderURL = 'codeextractor/builderfile'; + + constructor(private apiRequest: ApiRequestService) { } + getAll(page?: number, size?: number): Observable { + //Create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + // get all + // return this.apiRequest.get('api/instructors'); + // paginated data + return this.apiRequest.get(this.codeExtractionURL, params); + } + + getById(id: number): Observable { + const _http = this.codeExtractionURL + "/" + id; + return this.apiRequest.get(_http); + } + + create(bcf_extractor: Bcf_Extractor): Observable { + //`${this.baseURL}` + return this.apiRequest.post(this.codeExtractionURL, bcf_extractor); + } + + // UPLOAD ZIP FILE DATA + saveFormAndUploadFile(formData: FormData) :Observable { + //return this.http.post(this.appConfig.baseApiPath + this.codeExtractionURL, formData, { reportProgress:true, observe: 'events' }); + return this.apiRequest.postFormData(this.codeExtractionURL, formData); + } + delete1(id: number): Observable { + const _http = this.codeExtractionURL + "/" + id; + return this.apiRequest.delete(_http); + } + update(id: number, bcf_extractor: Bcf_Extractor): Observable { + const _http = this.codeExtractionURL + "/" + id; + return this.apiRequest.put(_http, bcf_extractor); + } + + // =========== CODE EXTRACTION PARAMS =============== + + getCodeExtractionParamById(id: number): Observable { + const _http = this.codeExtractionParamsURL + "/" + id; + return this.apiRequest.get(_http); + } + getCodeExtractionParams(header_id: number): Observable { + let params: HttpParams = new HttpParams(); + params = params.append('header_id', header_id.toString()); + return this.apiRequest.get(this.codeExtractionParamsURL, params); + } + delete(id: number): Observable { + const _http = this.codeExtractionParamsURL + "/" + id; + return this.apiRequest.delete(_http); + } + createExtractionParams(header_id: number, bcf_extractor_params: Bcf_Extractor_Params): Observable { + let params: HttpParams = new HttpParams(); + params = params.append('header_id', header_id.toString()); + return this.apiRequest.post(this.codeExtractionParamsURL, bcf_extractor_params, params); + } + + updateExtractionParams(id: number, header_id: number, bcf_extractor_params: Bcf_Extractor_Params): Observable { + let params: HttpParams = new HttpParams(); + params = params.append('header_id', header_id.toString()); + const _http = this.codeExtractionParamsURL + "/" + id; + return this.apiRequest.put(_http, bcf_extractor_params, params); + } +updatecodeparam(id:any,bcf_extractor_params: Bcf_Extractor_Params):Observable{ + const _http = this.codeExtractionParamsURL + "/" + id; + return this.apiRequest.put(_http, bcf_extractor_params, ); +} + // CREATION STATUS CHANGE + + creationStatusChange(id: number): Observable { + let params: HttpParams = new HttpParams(); + params = params.append("id", id.toString()); + return this.apiRequest.get(this.creationStatusChangeURL, params); + } + // EXTRACTION STATUS CHANGE + extractionStatusChange(id: number): Observable { + let params: HttpParams = new HttpParams(); + params = params.append("id", id.toString()); + return this.apiRequest.get(this.extractionStatusChangeURL, params); + } + // STATIC CODE EXTRACTOPN AND DYNAMIC CODE EXTRACTION + staticCodeExtraction(id:number): Observable { + let params: HttpParams = new HttpParams(); + params = params.append('header_id', id.toString()); + return this.apiRequest.get(this.staticCodeExtractionURL, params); + } + dynamicCodeExtraction(id:number): Observable { + let params: HttpParams = new HttpParams(); + params = params.append('header_id', id.toString()); + return this.apiRequest.get(this.dynamicCodeExtractionURL, params); + } + + // BUILD MASTER BUILDER + buildMasterBuilder(id: number): Observable { + let params: HttpParams = new HttpParams(); + params = params.append('id', id.toString()); + return this.apiRequest.get(this.buildMasterBuilderURL, params); + } + + // ========== code editor service ======= + + private codeExtractorFileListURL = 'api/bcf-extractor-file-list'; + private fileReadURL = 'api/file-code-read'; + private fileCodeSaveURL = 'api/file-code-save'; + + getFileList(id: number): Observable { + const _http = this.codeExtractorFileListURL + "/" + id; + return this.apiRequest.get(_http); + + } + + readFile(id: number): Observable { + const _http = this.fileReadURL + "/" + id; + return this.apiRequest.get(_http); + } + saveCodeIntoFile(fileData: FileData): Observable { + return this.apiRequest.post(this.fileCodeSaveURL, fileData); + } + + // ======= STATIC CODE READ AND SAVE ========== // + private staticFileReadURL = 'api/static-file-code-read'; + private SstaticFileCodeSaveURL = 'api/static-file-code-save'; + readStaticFile(id: number): Observable { + const _http = this.staticFileReadURL + "/" + id; + return this.apiRequest.get(_http); + } + + saveCodeIntoStaticFile(fileData: FileData): Observable { + return this.apiRequest.post(this.SstaticFileCodeSaveURL, fileData); + } + + // ======= CODE EXTRACTION BUILDER ========== // + getCodeExtractionBuilderById(id: number): Observable { + // const _http = this.codeExtractionBuilderURL + "/" + id; + return this.apiRequest.get(`${this.codeExtractionBuilderURL}/getbyid/${id}`); + } + + getAllFileById(id: number):Observable{ + const url = `${this.codeExtractionBuilderURL}/get_allfile/${id}`; + return this.apiRequest.get(url); + } + + deleteBuiilderFile(id: number): Observable { + const _http = `${this.codeExtractionBuilderURL}/deletefile/${id}`; + return this.apiRequest.delete(_http); + } + + readBuidlerFile(id: number): Observable { + const _http = `${this.codeExtractionBuilderURL}/readfile/${id}`; + return this.apiRequest.get(_http); + } + + saveBuidlerFile(fileDetails: FileDetails): Observable { + return this.apiRequest.post('codeextractor/builderfile/savefile', fileDetails); + } + + +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/dataflow.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/dataflow.service.ts new file mode 100644 index 0000000..24da09b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/dataflow.service.ts @@ -0,0 +1,123 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import baseUrl from 'src/app/services/api/helper'; +import { environment } from 'src/environments/environment'; +import { ApiRequestService } from '../api/api-request.service'; +@Injectable({ + providedIn: 'root' +}) +export class DataflowService { + // baseurl = environment.surejobUrl; + private addDataURl = 'api/suredata'; + constructor(private _http: HttpClient,private apiRequest: ApiRequestService) { } + public getAll() { + return this._http.get(`${baseUrl}/dataflow/dataflow`); + } + public create(data: any){ + return this._http.post(`${baseUrl}/dataflow/dataflow`, data); + } + create1(data:any,files:any): Observable { + const s = JSON.stringify(data); + const formData:FormData = new FormData(); + formData.append("data",s); + formData.append("ssh_file_key",files); + // for(let i=0;i{ + return this._http.get(`${baseUrl}/suredata/suredataflow/tablelistfromsource/${id}`); + } + public getstoredata(id:number):Observable{ + return this._http.get(`${baseUrl}/suredata/suredataflow/tablelistfromstore/${id}`); + } + public delete(id:any){ + return this._http.delete(`${baseUrl}/dataflow/dataflow/${id}`); + } + + public update(id:any,data:any){ + return this._http.put(`${baseUrl}/dataflow/dataflow/${id}`, data); + } + public updatelines(id:any,data:any){ + return this._http.put(`${baseUrl}/dataflow/dataflow_line/update/${id}`,data); + } + // public getdataflowlines(){ + // return this._http.get(`${baseUrl}/dataflow/dataflow_line/getall`); + // } + + + condition:string = ''; + setCondition(condition: string) { + this.condition = condition; + } + + getCondition(): string { + return this.condition; + } + + datacondition: string = ''; + setDataCondition(condition: string) { + this.datacondition = condition; + } + + getDataCondition(): string { + return this.datacondition; + } + + + public createjob(id:any):Observable { + return this._http.get(`${baseUrl}/token/suredata/surejob/create_job/${id}`); + } + //surebilljob + // public getAllsurejob(line_id:any) { + // return this._http.get(`${this.baseurl}/surebilljob/getalljob/${line_id}`); + // } + // public createsceduler(data: any){ + // return this._http.post(`${this.baseurl}/surebilljob/schedule`, data); + // } + // public updatesurejob(data: any){ + // return this._http.post(`${this.baseurl}/surebilljob/schedule`, data); + // } + // public pause(data:any){ + // return this._http.post(`${this.baseurl}/surebilljob/pauseschedule`, data); + // } + // public runonce(data:any){ + // return this._http.post(`${this.baseurl}/surebilljob/runschedule`, data); + // } + // public resume(data:any){ + // return this._http.post(`${this.baseurl}/surebilljob/resumeschedule`, data); + // } + // public deletesurejob(val:any){ + // return this._http.delete(`${this.baseurl}/surebilljob/deleteschedule/${val}`,); + // } + + /////////////// data flow 3 /////////////// + + getColumnListFromSourceTable(id: number, tableName: string): Observable { + return this.apiRequest.get(`suredata/suredataflow3/columnlistfromSource/${id}/${tableName}`); + } + getColumnListFromStoreTable(id: number, tableName: string): Observable { + return this.apiRequest.get(`suredata/suredataflow3/columnlistfromStore/${id}/${tableName}`); + } + /////cron jobs ////////////// + buildCronJob(minutes: string, hours: string, dayOfMonth: string, month: string, dayOfWeek: string): string { + const cronJobString = `${minutes} ${hours} ${dayOfMonth} ${month} ${dayOfWeek}`; + return cronJobString; + } + + + ///////////data flow table name by store name////////// + getTableListFromStoreByName(name: string): Observable { + const url = `${baseUrl}/suredata/suredataflow/tablelistfromstoreByname/${name}`; + return this._http.get(url); + } +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/datamanagement.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/datamanagement.service.ts new file mode 100644 index 0000000..0b8deee --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/datamanagement.service.ts @@ -0,0 +1,111 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from '../api/api-request.service'; +import { HttpClient, HttpParams } from '@angular/common/http'; +import { environment } from 'src/environments/environment'; +import { map } from 'rxjs/operators'; + +@Injectable({ + providedIn: 'root' +}) +export class DatamanagementService { + private URL = environment.backendUrl; +private updateUrl="api/template/dynamic/dynamic_temp" + constructor( private apiRequest: ApiRequestService,private _http: HttpClient) { } + getall(){ + return this.apiRequest.get(`api/template/getalltemplate`); + } + + // getallentity(){ + // return this.apiRequest.get(`api/template/databasequery/Table_list_all`); + // } + + getTemplateById(id: number): Observable { + const url = `api/template/gettemplatebyid/${id}`; + return this.apiRequest.get(url); + } + + getHeader(id: number): Observable { + const url = `api/dynamic/getHeaders/${id}`; + return this.apiRequest.get(url); + } + + getColumnNames(tableName: string): Observable { + const url = `api/dynamic/columns/${tableName}`; + return this.apiRequest.get(url); + } + + // create(data:any,files:any): Observable { + // const s = JSON.stringify(data); + // const formData:FormData = new FormData(); + // formData.append("data",s); + // formData.append("file",files); + + // return this.apiRequest.postFormData(`sureserve/template/dynamic/dynamic_temp`,formData); + // } + + create(file: any, fileType: string): Observable { + const formData: FormData = new FormData(); + formData.append('file', file); + // let params: HttpParams = new HttpParams(); + // params =params.append('fileType', fileType); + return this.apiRequest.postFormData(`api/template/save/${fileType}`, formData); + } + + update(id: number, data:any,files:any): Observable { + const s =JSON.stringify(data); + const formData:FormData=new FormData(); + formData.append("data",s); + formData.append("file",files); + return this.apiRequest.postFormData(`${this.updateUrl}/${id}`,formData); + } + + delete(id:any){ + return this.apiRequest.delete(`api/template/deletetemplate/${id}`); + } + + // getjson(){ + // return this.apiRequest.get(`api/dynamic/jsonkeychange`); + // } + + changeKeysOfJson(newjson: string, body:any): Observable { + // const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'); + // let params: HttpParams = new HttpParams(); + // params =params.append('newjson', newJson); + // params =params.append('body', body); + const formData:FormData=new FormData(); + formData.append("newjson",newjson); + formData.append("body",body); + return this.apiRequest.postFormData(`api/dynamic/jsonkeychange`, formData); + } + + +saveTemplateInJson(id: any): Observable { + // const formData: FormData = new FormData(); + // formData.append('file', file); + // console.log(formData, file); + + // let params: HttpParams = new HttpParams(); + // params =params.append("file",file); + return this.apiRequest.get(`api/dynamic/templatetojson/${id}`); +} + +convertFileToJson(id: number): Observable { + return this.apiRequest.post(`api/dynamic/templatetojson/${id}`, {}); +} + + +downloadExcel(tableName: string, data:any): Observable { + // return this.apiRequest.post(`api/dynamic/DownloadExcel/${tableName}`, data); + const url = `${this.URL}/api/dynamic/DownloadExcel/${tableName}`; + return this._http.post(url, data, { responseType: 'blob' }).pipe( + map((response: Blob) => { + // Process the response as needed + return response; + }) + ); +} + + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/datastore.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/datastore.service.ts new file mode 100644 index 0000000..9368540 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/datastore.service.ts @@ -0,0 +1,109 @@ +import { HttpClient, HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import baseUrl from 'src/app/services/api/helper'; +import { ApiRequestService } from '../api/api-request.service'; +@Injectable({ + providedIn: 'root' +}) +export class DatastoreService { + private addDataURl = 'api/suredata'; + private addDataURl1='api/suredatasource'; + constructor(private _http: HttpClient,private apiRequest: ApiRequestService) { } + public getAll() { + return this._http.get(`${baseUrl}/api/suredata`); + } + public create(data: any){ + return this._http.post(`${baseUrl}/api/suredata`, data); + } + create1(data:any,files:any): Observable { + const s = JSON.stringify(data); + const formData:FormData = new FormData(); + formData.append("data",s); + formData.append("ssh_file_key",files); + // for(let i=0;i { + const s =JSON.stringify(data); + const formData:FormData=new FormData(); + formData.append("data",s); + formData.append("ssh_file_key",files); + + return this.apiRequest.postFormData(`${this.addDataURl}/${id}`,formData); + + + } + public getAll2() { + return this._http.get(`${baseUrl}/api/suredatasource`); + } + + create2(data:any,files:any): Observable { + const s = JSON.stringify(data); + const formData:FormData = new FormData(); + formData.append("data",s); + formData.append("ssh_file_key",files); + // for(let i=0;i { + const s =JSON.stringify(data); + const formData:FormData=new FormData(); + formData.append("data",s); + formData.append("ssh_file_key",files); + + return this.apiRequest.postFormData(`${this.addDataURl1}/${id}`,formData); + } + + testConnection(databaseType: string, storeUsername: string, storePassword: string, portNumber: string, dbHostname: string, databasename): Observable{ + const url = 'suredata/test/testconnection'; + let params: HttpParams = new HttpParams(); + params =params.append("database_type",databaseType); + params =params.append("store_username",storeUsername); + params =params.append("store_password",storePassword); + params =params.append("portnumber",portNumber); + params =params.append("dbhostname",dbHostname); + params =params.append("database_name",databasename) + return this.apiRequest.get(url, params); + } + + testsshConnection(sshHost: string, sshUsername: string, sshPassword: string, sshKeyFile: any): Observable{ + const url = 'suredata/test/checksshconnection'; + let params: HttpParams = new HttpParams(); + params =params.append("sshHost",sshHost); + params =params.append("sshUsername",sshUsername); + params =params.append("sshPassword",sshPassword); + params =params.append("sshKeyFile",sshKeyFile); + return this.apiRequest.post(url, params); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/exception-rule-library.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/exception-rule-library.service.spec.ts new file mode 100644 index 0000000..22ba84b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/exception-rule-library.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ExceptionRuleLibraryService } from './exception-rule-library.service'; + +describe('ExceptionRuleLibraryService', () => { + let service: ExceptionRuleLibraryService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ExceptionRuleLibraryService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/exception-rule-library.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/exception-rule-library.service.ts new file mode 100644 index 0000000..5bfda6e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/exception-rule-library.service.ts @@ -0,0 +1,42 @@ +import { HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { Bcf_Exception_Rule_Library } from 'src/app/models/fnd/Bcf_Exception_Rule_Library '; +import { ApiRequestService } from '../api/api-request.service'; + +@Injectable({ + providedIn: 'root' +}) +export class ExceptionRuleLibraryService { + private exceptionRuleLibraryBaseURL = 'codeextractor/exception/exception'; + constructor(private apiRequest: ApiRequestService) { } + getAll(): Observable { + return this.apiRequest.get(this.exceptionRuleLibraryBaseURL); + //Create Request URL params + // let params: HttpParams = new HttpParams(); + // params = params.append("page", typeof page === "number" ? page.toString() : "0"); + // params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + // return this.apiRequest.get(this.exceptionRuleLibraryBaseURL, params); + } + + getById(id: number): Observable { + const _http = this.exceptionRuleLibraryBaseURL + "/" + id; + return this.apiRequest.get(_http); + } + + save(exception_rule: Bcf_Exception_Rule_Library): Observable { + return this.apiRequest.post(this.exceptionRuleLibraryBaseURL, exception_rule); + } + + update(id: number, exception_rule: Bcf_Exception_Rule_Library): Observable { + const _http = this.exceptionRuleLibraryBaseURL + "/" + id; + return this.apiRequest.put(_http, exception_rule); + } + + delete(id: number): Observable { + const _http = this.exceptionRuleLibraryBaseURL + "/" + id; + return this.apiRequest.delete(_http); + } + + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/extension.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/extension.service.ts new file mode 100644 index 0000000..33bab08 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/extension.service.ts @@ -0,0 +1,78 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { ApiRequestService } from '../api/api-request.service'; +import { HttpParams} from "@angular/common/http"; +import { ExtensionField } from 'src/app/models/fnd/ExtensionField'; +@Injectable({ + providedIn: 'root' +}) +export class ExtensionService { + private extensionAPI = 'api/extension'; + private extensionBuildAPI = 'api/extension_build'; + private lookupAPI = 'api/lookup_values'; + private dataTypeAPI = 'api/datatypes'; + constructor(private apiRequest: ApiRequestService) { } +​ + getAll(page?:number, size?:number): Observable { + //Create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append('page', typeof page === "number"? page.toString():"0"); + params = params.append('size', typeof size === "number"? size.toString():"1000"); + return this.apiRequest.get(this.extensionAPI, params); +​ +} +​ +getById(id: number) :Observable { + return this.apiRequest.get(this.extensionAPI + '/' + id); +​ +} +​ +create(extensionField: Object) :Observable { + //`${this.baseURL}` + return this.apiRequest.post(this.extensionAPI, extensionField); +​ +} +​ +update(id: number, extensionField: ExtensionField) :Observable { + return this.apiRequest.put(this.extensionAPI + "/" + id, extensionField); +} +​ +// http://localhost:9119/api/extension_build?account_id=admin&form_code=teacher_form +// build extension +buildExtension(id:any, account_id?:any, form_code?:any): Observable { + let params: HttpParams = new HttpParams(); + params = params.append('account_id', account_id.toString()); + params = params.append('form_code', form_code.toString()); + + const url = `api/extension_build/${id}` + return this.apiRequest.get(url, params); +} +​ +// look up code (attribute, flex) +getLookupValues() :Observable { + return this.apiRequest.get(this.lookupAPI); +} +​ +// datatypes code (string, varchar, int etc) +getDataTypeValues() :Observable { + return this.apiRequest.get(this.dataTypeAPI); +} +delete(id:any){ + return this.apiRequest.delete(`api/extension/${id}`); +} +​ +​ +​ +///extension build json object +​ +getDetailsByFormCode(formCode: string): Observable { + const url = `FromExtensionJsonExtensionJson/${formCode}`; + return this.apiRequest.get(url); + } +​ + getJsonObjectsByFormCodeList(formCode: string): Observable { + const url = `FromExtensionJson/ListExtensionJson/${formCode}`; + return this.apiRequest.get(url); + } +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/rule-library.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/rule-library.service.spec.ts new file mode 100644 index 0000000..057e7bf --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/rule-library.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { RuleLibraryService } from './rule-library.service'; + +describe('RuleLibraryService', () => { + let service: RuleLibraryService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(RuleLibraryService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/rule-library.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/rule-library.service.ts new file mode 100644 index 0000000..045f0c2 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/rule-library.service.ts @@ -0,0 +1,87 @@ +// import { Injectable } from '@angular/core'; + +// @Injectable({ +// providedIn: 'root' +// }) +// export class RuleLibraryService { + +// constructor() { } +// } + +import { HttpParams } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { Bcf_Rule_Library } from 'src/app/models/fnd/Bcf_Rule_Library'; +import { RuleCopy, Rule } from 'src/app/models/fnd/RuleCopy'; +import { ApiRequestService } from '../api/api-request.service'; + +@Injectable({ + providedIn: 'root' +}) +export class RuleLibraryService { + private ruleLibraryBaseURL = 'code_extractor/rule_keyword/Rule_library_keyword'; + private copyRuleURL = 'api/rule-copy'; + private keywordurl='codeextractor/rulelib_new/rule_keyword1'; + private filedurl='codeextractor/rulelib_new/rule_keyword'; + private copyURL = 'code_extractor/rule_keyword/copyrule' + constructor(private apiRequest: ApiRequestService) { } + + copy(data: RuleCopy) { + return this.apiRequest.post(this.copyRuleURL, data); + } + + getAll(page?: number, size?: number): Observable { + //Create Request URL params + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + return this.apiRequest.get(this.ruleLibraryBaseURL, params); + } + + getById(id: number): Observable { + const _http = this.ruleLibraryBaseURL + "/" + id; + return this.apiRequest.get(_http); + } + + save(rule: Bcf_Rule_Library): Observable { + return this.apiRequest.post(this.ruleLibraryBaseURL, rule); + } + + update(id: number, rule: Bcf_Rule_Library): Observable { + const _http = this.ruleLibraryBaseURL + "/" + id; + return this.apiRequest.put(_http, rule); + } + delete(id: number): Observable { + const _http = this.ruleLibraryBaseURL + "/" + id; + return this.apiRequest.delete(_http); + } + keyword(id: number,keyword: any): Observable { + let params: HttpParams = new HttpParams(); + params = params.append("id", id.toString()); + params= params.append("keyword",keyword); + return this.apiRequest.get(this.keywordurl, params); + } + + insertfile(id:any,data:any,keyword:any,){ + let params: HttpParams = new HttpParams(); + params = params.append("id", id.toString()); + params= params.append("selectedarea",data); + params= params.append("keyword",keyword); + console.log(params); + return this.apiRequest.get(this.filedurl, params); + } + + copyRule(technologyStack: string, objectType: string, subObjectType: string, service: string, newTechStackName: string, rule: Rule){ + let params: HttpParams = new HttpParams(); + params =params.append("technology_stack",technologyStack); + params =params.append("object_type",objectType); + params =params.append("sub_object_type",subObjectType); + params =params.append("service",service), + params=params.append("new_tech_stack_name",newTechStackName) + return this.apiRequest.post(this.copyURL,rule,params); + //return this.apiRequest.post(this.copydeployurl,params); + //return this.http.get(`${baseUrl}/api/getmodulename`,params); + + } +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/workflow-data.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/workflow-data.service.spec.ts new file mode 100644 index 0000000..7b38791 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/workflow-data.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { WorkflowDataService } from './workflow-data.service'; + +describe('WorkflowDataService', () => { + let service: WorkflowDataService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(WorkflowDataService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/workflow-data.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/workflow-data.service.ts new file mode 100644 index 0000000..0c3ec49 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/fnd/workflow-data.service.ts @@ -0,0 +1,63 @@ + +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders, HttpParams } from "@angular/common/http"; +import { Observable } from 'rxjs'; +import { ApiRequestService } from "src/app/services/api/api-request.service"; + +@Injectable({ + providedIn: 'root' +}) +export class WorkflowDataService { + private getAllURL = 'work'; + private addDataURl = 'work'; + private editDataURL = 'work'; + private deleteURL ='work'; + private getByIdURL = 'work'; + private updateWorkflowURL = 'updateByid'; + private fileurl ='/sureops/createfile'; + private callurl='workflow/workflow/callworkflow' + constructor(private _http: HttpClient, + private apiRequest: ApiRequestService) { } + getAll(page?: number, size?: number): Observable { + // create Request URL params + let me = this; + let params: HttpParams = new HttpParams(); + params = params.append("page", typeof page === "number" ? page.toString() : "0"); + params = params.append("size", typeof size === "number" ? size.toString() : "1000"); + // params = params.append("module_id", module_id.toString()); + // get all + return this.apiRequest.get(this.getAllURL, params); + } +getcallall(){ + return this.apiRequest.get(this.callurl); +} + create(data:any): Observable + { + return this.apiRequest.post(this.addDataURl, data); + } + + delete(id:number){ + let _http = this.deleteURL + "/" + id; + return this.apiRequest.delete(_http); + } + + getById(id:number) + { + let _http = this.getByIdURL + "/"+id; + return this.apiRequest.get(_http); + } + + updateLineById(id:number,data:any) + { + let _http = this.updateWorkflowURL + "/"+id; + return this.apiRequest.put(_http,data); + } + + update(id:number,data:any) + { + let _http = this.editDataURL + "/"+id; + return this.apiRequest.put(_http,data); + } + +} + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/jwt.interceptor.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/jwt.interceptor.ts new file mode 100644 index 0000000..257cd63 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/jwt.interceptor.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { UserInfoService } from './user-info.service'; + +@Injectable() +export class JwtInterceptor implements HttpInterceptor { + constructor(private userInfoService: UserInfoService) {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + // add authorization header with jwt token if available + let currentUser = this.userInfoService.getUserInfo(); + if (currentUser && currentUser.token) { + request = request.clone({ + setHeaders: { + Authorization: `Bearer ${currentUser.token}` + } + }); + } + return next.handle(request); + } +} \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/main.service.spec.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/main.service.spec.ts new file mode 100644 index 0000000..f8dc470 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/main.service.spec.ts @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { MainService } from './main.service'; + +describe('MainService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: MainService = TestBed.get(MainService); + expect(service).toBeTruthy(); + }); +}); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/main.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/main.service.ts new file mode 100644 index 0000000..9aaaa85 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/main.service.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@angular/core'; +import { JwtHelperService } from '@auth0/angular-jwt'; +import { HttpClient } from '@angular/common/http'; + +@Injectable({ + providedIn: 'root' +}) +export class MainService { + token = sessionStorage.getItem('token'); + jwtHelper: JwtHelperService = new JwtHelperService(); + + constructor(private http: HttpClient) { } + + getIP() { + return this.http.get(`https://api.ipify.org?format=json`) + .toPromise() + .then(result => result) + .catch(error => error); + } + + getUser() { + // return this.http.get(`${this.url}/get-annouce/${month}/${year}`) + return this.http.get(`https://randomuser.me/api/?results=100`) + .toPromise() + .then(result => result) + .catch(error => error); + } + + getUserTest() { + return this.http.get(`https://randomuser.me/api/?results=100`) + .toPromise() + .then(result => result) + .catch(error => error); + } + +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/notification.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/notification.service.ts new file mode 100644 index 0000000..5ddf252 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/notification.service.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@angular/core'; +import { Subject } from 'rxjs'; + +export enum NotificationType { + Warning = "warning", + Info = "info", + Danger = "danger" +} + +export class Notification { + constructor( + public readonly type: NotificationType, + public readonly message: string, + public readonly detail: string) { + } +} + +@Injectable({ + providedIn: 'root' +}) +export class NotificationService { + private readonly _notifications = new Subject(); + + public readonly notifications = this._notifications.asObservable(); + + public add(notification: Notification) { + if (!notification.message || notification.message.trim() == ""){ + console.error("ERROR NOTIFICATION WITHOUT MESSAGE: " + notification) + } + this._notifications.next(notification); + } + + public flushNotification() { + this._notifications.next(null); + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/user-info.service.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/user-info.service.ts new file mode 100644 index 0000000..b9d3779 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/app/services/user-info.service.ts @@ -0,0 +1,122 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import baseUrl from './api/helper'; +export interface UserInStorage{ + userId:string; + email:string; + displayName:string; + username: string; + roles: string, + token:string; +} +export interface LoginInfoInStorage{ + success:boolean; + message:string; + landingPage:string; + user?:UserInStorage; +} +@Injectable() +export class UserInfoService { + + public currentUserKey:string="currentUser"; + public storage:Storage = sessionStorage; // <--- you may switch between sessionStorage or LocalStrage (only one place to change) + + + + constructor( private _http: HttpClient, + ) {} + + //Store userinfo from session storage + storeUserInfo(userInfoString:string) { + this.storage.setItem(this.currentUserKey, userInfoString); + } + + //Remove userinfo from session storage + removeUserInfo() { + this.storage.removeItem(this.currentUserKey); + } + + //Get userinfo from session storage + getUserInfo():UserInStorage|null { + try{ + let userInfoString:string = this.storage.getItem(this.currentUserKey); + if (userInfoString) { + let userObj:UserInStorage = JSON.parse(this.storage.getItem(this.currentUserKey)); + return userObj; + } + else{ + return null; + } + } + catch (e) { + return null; + } + } + + isLoggedIn():boolean { + return this.storage.getItem(this.currentUserKey)?true:false; + } + + //Get User's Display name from session storage + getUserName():string { + let userObj:UserInStorage = this.getUserInfo(); + if (userObj!== null) { + return userObj.displayName + } + return "no-user"; + } + + getEmail():string { + let userObj:UserInStorage = this.getUserInfo(); + if (userObj!== null) { + return userObj.email + } + return "no-user"; + } + + + getRoles(): string { + let userObj:UserInStorage = this.getUserInfo(); + if (userObj!== null) { + return userObj.roles + } + return null; + } + + + // Get User Id from session storage + getUserId(): string { + let userObj:UserInStorage = this.getUserInfo(); + if (userObj!== null) { + return userObj.userId; + } + return "no-user"; + } + + getStoredToken():string|null { + let userObj:UserInStorage = this.getUserInfo(); + if (userObj !== null) { + return userObj.token; + } + return null; + } + + public getAllUsers(){ + return this._http.get(`${baseUrl}/api/all-users`); + } + + public getUserById(id: any){ + return this._http.get(`${baseUrl}/api/get-one/${id}`); + } + + public updateUserById(id: any, user: any){ + return this._http.put(`${baseUrl}/api/org-users/${id}`, user); + } + + public deleteUserById(id: any){ + return this._http.delete(`${baseUrl}/api/org-users/${id}`); + } +public logout(){ + return this._http.get(`${baseUrl}/token/logout`); +} +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/.gitkeep b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun Bold Italic.ttf b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun Bold Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f286d7be891284cc86667ce78548c1d0d6748891 GIT binary patch literal 117644 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 literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun BoldItalic.ttf b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..beb5249d52b8ef7cd7b5868cefaa37bff93e975f GIT binary patch literal 102916 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

  • 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�Hd)@?l%WIWa5i5-}Z^k|bb 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%0DLYu(uz2LZ63M2$d_Iw zdm(-n&)XJV#)Dc)5FhKQ5gk7_qhaMT`3~9o(rt!TCK~J(incTEamy^20 z(?(t-?T$0fczNKFss+Y($4fZVlB>#K?R@;h)RH54EG`E?)++EZzr+=IX7uNWdk`}I z=a;fVf9Zn=9s4(ikiRZg8KI*}l+^oR3Su%#lZ{H0zJVZD+3Ny0}!uwOFpzB`S|5s!8`N-!0I{A94>U;#A>t&_| zBxds_6P3y(^fXJI_TH2;A$bI1U|Y57v3r;&^b|YVApE+$>(%T`t?T`z3!e#;Zc7oj zBkSZ}vBv=r;GDbSOWqfLG<~%Bc_Hv`tem=#^u+*SU;YwY<>R)IKB!hEW%Q~47G9ip zvX(xth>e}+<=mt~A?usW3;dHDora=4HC!%Lw^1 z?xY9(u=uDdlN0lxa~d=&d>Q1w|EoI>I;F<%VysUo1kld6qISYn)zLlRfI|dF`e*5Q z$zS26X>zwc&A7fTlz0f!asc+mZUKmQ4~L1zK054xydCRZHA}Q()MGS~PfJl(wDUZV zDE7#|CJk+<*OEUoM5cX}sx`Hy%~t)j4osdjNYt}NSicku4vRm`K`n6hjQA}8)K|6l z+M}x6g#VA5sU3kKENp(ZiP`=v=yi)ti-3iVM~>l7CqgdZNS?C_9*KK93m{Y!*qJ;| zs%zwtHZ!BYAR;V!`h~WzpxkjH@(K4|gqHh%ArvBTaT7NQIOY+Kr`^cy?F3K^-!QAk zLACGB4Y^@CTzTRPa^q@*cA6S}+n%(@kA;{gH_@%je*k1Cy*2@}gzOp8V_}1_Uh|p7 znEVx$K*>7pmx6KRL&=fhXY&IVvGekOXiZMcn0x5~#48_Bkp^MF(^~i>5*DQl%QOK2 z!S7e75r0Bv=99yDI8?YJ=mWm=Z&%mQ2sxaw0eRakOMxZ0sGkd3sYyskWaQ)qlIYxK znp#Cg{6u^olvS;)j!&;G-(CT_tp$V~%%pJ#sW~|YT6%gcK`m;ks_|J_jCO~Ihw?6E z^~n5MDk^iQkk$ml2r=sM@ zuKVNZHFNXP_k}}W!824o;!a_!xNKIj@@EgWIaqh=#o!dYPeV7r`hOzS z$*Z>b&evR}#|6W1;O&A@9i-!J1||*d9yrirfodmSfBzG$=5zi3^Fj`wl$geb;TN;S z#A{iWSwBC&vGMUl^ld0NDqCM)4_(+z`g3{7l2HMrs>7qBlcV+6m5Yjs5>it?#fSj} z1qHG3@PgXfcz-2hU}24R``j1rE%1E!AkHs!SP0HtE04j(k-37pL*^Y=iYbTeP;{? zV{iUpj4#%j-&}Le1vKs_h{~T&hwUDIZ)1ufAs~37tgLLs>N*Mxf!QIodi(7T5fRZ~ zEK^}~;gf@W9*4Y~Tmeu7n7S)wWn)w37il;FCTPY^eBRDDA6XAwg!qJV@cv})tVKwy zc*?ObHFFrq|O7W@k;&G#8Iy4-62+S z*LNTXfPbQ*h=bQ1uT03JJfrdBm2=2nV}97S&WJ4u)v;AIKMi!2LjAY)VaH_KC)xQv0jpxsh_a_If1gl z>s6!IxcmDKYsc|zO>RR3*kGd7-l3wky%m?-BF~6^u@8A7zS?(}9PR4=ng{MCRCc%M zvB5dD42alA%eZpCnV{mTLNMj7&W!Y11K$%2!aRMYK=i{WWK@$640lx((%~Dd1y6RV znP#!fu4O$n6qjd~Gmt;@l~giHnK{u>3O7Z4O<7Vlw`%K321|N zmDk5T{b_6weuWiRRz4^K*ApXARF3VU9YvBP@p>LaFr%xd7v0q*rmiu2@6|~ks&Lfz zJYyMI60iLLW%sPsBGvfyI})CdR6EUZuZzo?@zqDkd_o=0DaJq|>EplTv^{3%r5oe4 zJz)*YQ$}*X66zU!7Y4`Iin#B5%?J94DlGH7vJ z&4?@O?7b>-16sJ(tS7k!&t`n=Zf0c)t4iLdCCxX_9>ZR|wS$%xOpjiaxP>~%+3{Ok z3J?OH>|7mu>r$e>ue5GdVSYcxfI_;ClAntu6%6o8nkC2;aOxCq=U(BQQ~pt3`QDIX zu4t~&#!ARCXGO&nnLdtU^Wz<6VYk>6Ont-En_tSg6P086hUp|CYEowC0eaOgIcA-e zLvzXc^|a0}KV{7SKDrZ#CwESQzIx{lRh`U4QN6}BTG?{H(B269NA?pUC9LXbXM{we zSQRrihZQL^(r`8M;9WM?YdD(i2<`BZ)W)P$O(*yHJnW-6 ze_5PuNEY?qzaxKb*6gX3L^YDTS#uTpYprDZ0k(a4Cfm#{ty9#rCfYJxDL0(5+b*$v zEA-DeBw^giG|crj!rsm1Q6fWa%A~*)X?q&&D=z(7q+mSfDu z6yKWv^2$9*H|1Jy z832doH3X7+NfBYaX$^L}^RjkB&IK3KQh>rv!Gbf?CikeD&1Q>XlWs(rr{5d5(*VzP z>>o&E3W07P-@vHl&_U5qXTc+56TQ67Gva`U4VG|WX7liM*kD)sUIfJ!!Jo#o1=?aF z7pJgEm{v~^A`i(lgQQte=y7`PfM7a>^8$lT6X%6#7n;;gkF&C}LR-u^VLOUJu^T^r$cRM$N*iP->l7< zAd5Wky52B;Mx1Y8l+#QTxdCEKFsYtmd4M}KroON$fM7#6Xzx>*QI=i|*`Tsv+E0*% zSR*8E_cxN5t61G*{Xz8uLh=QBm0I#jQR{+W|3m;^>pIK?s43v=V zmBFLkad+oP*n`lvqL!SiYh3#w3;#u$%Uti$e%ZefEVDWbd;Iq%|J~kiH_9X(;6T$S zB4tG0fm_P{ga`6&>IrE~Bts1o-Rkr^J0`i(o^Pln%=EKA!9pG!f_`)T>u1fFh9}Az zoKBF0l*yMvvrqgIxA_|KFQ(&e{ITE&4?Qvyd}AVh6_4a_^?}U(>2g`QF9^!qg+0!y*I7#Z`*2|0@U<%7;};$CpaM>MN#NwCdE1xkTC_b*gbW zl&2tKWAHk35nnH&D%4!;MLm95ZlXFh%!B8%V*HmGw?YTIB(}6Kvn6pxA8$~x+*H4q z-pK7;0l-VGn5XO0V?Qxya8=S|+U!1yWGW8KC3cuWv|dHQ9L<<33O9u|Njo^W{5j22 z+9jWN3ki|$pMN!Q1DA+-^juJsFiXt0J(l$d{>lWNS<3ZTAG1X8xedFMa`>HF_quzK zkLNIfMgHfao-dcM4I(^nzonD@p^W-_`TKWV$T~O~Vz??c1f4olg_ucy&n z`L%WbK5{N!P72S3VXj=hO4eu=uD54v;~N^*i9{_7*VW#Y)&9W(hz1#q=8Niw&*y&8 zT4q0wfHuG4v9pFzt_)ZF_`N&1cy5ygno}L`A`RE%u0IAb?-@&R631L!4oQb8jTeVV-j0DIm3@y7_B`} zKAPkXjv7>@2<(*%PcSQ5h@;{F@z)^Tx0H+P&a1c|5y#*@V%lP9$B~0LE$BzvuAb5` zw50$|)2D*e_TALXX!cZSj_9#Lx+=_ih$buKIGFV9GJIE|-J=2+jagLHC#ZojJ~-t| zkDZ2k!Mqu7jm(cC_8Je_8=WPcZ*JQhot^;df%6E=l`68|==#6*Wv^Y$Ap6nXdDm~M z(CPQ7?>S9*rT3l5^2wK;8!|Qy?OPXm<21bpq`2!7ZD8MU>wr3+;t3R;|M zJ4or1oQV_i3#J!+Jv}lukJY@*ISn8z+zn``sP89VsCjStTpr3oav>XBFi$LO?3C!= zFxQG)?vY|izL`lP9v+u#hld`YNesmf22)V`E%c0urM z%wmo968TT-zW16hg70L7Y}F?N?;-#;7Vde+$U{EWag(1?^KeXCF5rr5gPql%j<~B; zcSNpnBoy_bb*9=lg)#X^y|ea!zD8XYE$S0_zj26(R{b@I$euqE>1P;+LpRm1zCVu3 zEVyIe?KT9SrW{sXJNnLjP-0{E> zkbpnFt=`+c!|~QXehq(jl=I!t=|3`4&F=(tZosg)_owxB{VbdN-LK*5M|a@h=RP*p z*1H$qF*!}lCc0};SC!FVRS(J%k1foW`buB7RlhxTEf;RYUQi&fxz#|u0GhP?hH%Jh zpN5pWaI@YPuF9BXrLQJB%`k=g^vbi$N&>4hp`B%L?<$-!xuH^%6Vfa4d&YGBx&(^uIen4<<6sp{Zfn zMUMR#_F%G^v%LK+?}+(~;w7R`n3CkL_$gXUN-o4?o>(`J?WI3d(9NHaMABiz%la=% zwb!mPJoo5NI0EiQAApR6JW~k9pTGhNW%R{n!=8s&eas7yZI{01o|rzG$d~rKyE@r( z9mmXdNg!F&O1Fr7o*Z*tIexwU`8?N`U)spXNMF%TAe|}mm*V?D76DeW{8f0G_Mlen zXW~s3l0aFPKEvH~x72!Pe7Y)lG=zze-R_)-S#vRnMOr<_aqT$|qkboHZj4+C>_G9W zX7zOslI_dN*dU9lwKX^0V$g!o>B%XG*WtwtW_CEPNuSZxF)oPTlpz$GBD98D+VH9x zcYDE~fi9LTCc;G8Bw@U#CZFA?emqqbBw|g_hZa+GubR*Cc0lIrkPCx4EVe_7W40-t zn!~+^A(~S7DIy9+e}|tqhg9@SceqS6ShU|}A)3fe3N41vL=hx}XCiSQtlBNPKm}rv z*eLEqoT$i;t z0Q*l-jh^Qn+3(=~Zn$Jw{*j^`!$@sZ6#Cu$J?w=q090%WUBAZ1$D^X5#Y2VFtS#i0 z6n0We9JI7RzhANq`ANgvN>)}S>d<*hYx$kb61JK6=Dm##T9{`c_vFUL#;@efv`uN3 zJQpZL9;`^md=9%F7jA&nPq}8?OfBw!8mLZ_6%1PF_@z#h^tpg8Q&~F*#S49UeME{x z7_9K6n$Sq%sJQR8_YU7koQz^?OfJ4p{_;5MHuD^zzW0ULT$b-dg{J@6HWz}kFG`;B z@&ky^5+@XcEYv7p%J4^%Du~0LJ2aLu$VrXP@JxnN9mS-jI9teY@2!dO^$GWOvVEmIOgfFI zhT@99u*6gBYI-M|~3+7isE-xRs6~i4o zO4v-x3+3YCf)%faZh23UTaK8dpWcqL2}5v2JZ$3(_}wM8R`Vxp)?Cj(!bC!0(PCo( z-OuJev9-8ch4~3B7@w_RrM}E1(-__hlB~Nm9zH(QsxibV#Mpf|v7~FH{wW#st%6X> z6?QNSnrwzKEEswc*DN>C_C@fl`_y+P2~)5)8xTkD&mfr$W>CQKO;9fSwgc|jjXMx9 zjux=^hY~eW;4NOTgG9kB;dt2OKaDT@LKr?+5J77B&+_FAC4C zBTDiz=F2e2S)%_nYX9{|`CBthW&53z%dv^cI%2w!kEO**q6fEaQ?s;_#nL2pav+l* zFkVL%vM@3xJP(3ElS^pnSSkH~tS#h0ZauDNhd@@=qtw^nv!&TFC=3TeuWYZ zUL?71_2|fnWnnM$u~7hxBdXEIb|;0Dv77h0V`$eC3Kf-0q~N-YD~8V^Q7YLWDd(K~ zZJDg3e%t0XCcTMEhg2NM@10+e2@?iMMYb3vau^PHVvq@v=A&TsZ40+?l=^5YB;dOo z%#*Im2+bRbWh^`3+tV40@N_tbl(QLt_kZcnYvGfs$UrF}uhEU#l`$s-p z-7NxV_J7~;|Elf*q?<#be?aGNn+G7%#gBWpCatCBxk5r}!@^KLx3$5NhR*Ub0iN_j z(qY;p6)`cfJglgwC<*Uc|G85;a-NCFNs7N;RJ-3LwV&+_7KIOXPxTHuhy5yPv~D$? zi3OWPRlq%mo3k==#uV9J@_A7DBr~~44Ng$#K<9)tF%Ju61f{-!QD;T~+{F@^ASuPD zJ0MN#lMmx;B{+Oy9mQ}uI3ks;9X~4WP2au=e`@{F(@+O>sj)P&36tTs7+FmSzWu{u z3&JK7^?QzYaI+_VyBtKzZlGxY`$^2@#+|sM)@a=G{E31E(A}aPw~i|~qESdHXRg{R zwN2sCPk~tDiKj@>6ugMk-j`k5m3HhU9w^LNa4;}bH~4PR2;O4J%`-|KzT>-K42>g7 zxE9FWV*|}?SSak?Z~;aMpW&alW~y4nkN#BX=76yLPjw$~K)=}jZ8Wh(-~}%I(Id%I z=*^ECl^<*szPeB-R8wssHs@?``pbi`p>y-HT69+p6>r^P~(6I4*Rb^%J>;`Qy zxS~Sd<$cARe81J3%fqEa;9s96$7q5%OLufo`LRbt8-*QwNy~~(1`vu)hc=a5a%3!Y z46YRC)UvlzweH3Yeg(AOt&`o|w}L0i6@AXYTxi{eBfZswb?nAn>Sv_m*e+YxT}iUe zT8*AK(_<__yJ<5ZA$J5ZL?v;*K^Y864um1i*gnX)SCeTYmi5h0u5lBZZd^szB%*Y+ zj5fN9GRW}fLm8+>773B~NUTbBh~4l`FgleJ`@T;>66ijgsJwLK-s4BDxQP+}m^*ds zd;92WA@1NL&RpnNu^;zJW7~itbe$~sh##%tAdD^(Isf$iPHLk%?hp^S`^U}@hs(|L zVRBwvm%f;HUGvv`UJAIiSyNW+gNvL{{}nXJ;o=f_;XThNfd~PBRj( z(8SBj3;F{v5*A5FNGK3qU0n?a+K1;g)YWBFyIlpJJ$tn)z5onsgt~G_;;Di89h{wO zr|DQ(mC_L@=(&>n^3JAAyCz#c19pbcX(vO&oayX~5;jhlwu@vSSKC3 z0k&80a?(w8p}wAbCnh3#b8-@D#hi|qnH_C0Unpadj?z%%HSV>2$BnflKr&(c=GPXR zf3LyA1KZts_HvF@RPy#q&nL*SX~Ck@{YC==6YuvH@X=FZd)@_5aM(%t7iVb4;xjU_ zd+o~nFugHc-n<5Jxp5O!q=zp_7p`7~c&W^M3&)?EuF;;tL06CAu*#;BvK5SYKyS?5 z`a$@f>?J-m-ALbiRs0Fq+$+~zAyi<)dpexd#(h^%&$8Jm5Q|177rs*;yO6!)K3W7H zpeTvmimHtlE+;{7g^6#BiJZFVv?@6@DEV{0jB=y~X@;ePLiZzfbIXGzGp7i|%U`(4Kqq3R=iylSiOs93?&sIlRGh~?T*NiQ7(?Q?T_h3vSVJ_Y#PnPO2S?B9iV0jhy1#zN8TI7tJojh@qrSE5j zKyMA9R<-CObY6(@UEpgFzm>3*l0l@bJg?DDXCwuJjVs!pAbM`^@1z)6^*BNFY<3+6?(MUquJEXWP8fkGf{K;91nv*+DogJv&K zFznBTq#AB1yL&H=-92BHIEkg{%~aQFL+zD z3>6%b!(Sl2&b}@wIXu(JyTCx+D4;R|;Y@`}&hh$Xi}j`&ynLT`jHw8itJ-wTa46PrBZGJS;9+T zhQs0G(@my~j)aQ-8l!enqQRri>Y79jvxleU%lXklrJ7Dxc^nsIWGlzC_~ZohzOx7m zuidKkB~b)sFlr9!g&Rw^jq7TOcqr$3TDmo>t$#@}FS}4id1Mi8@deHFW7Me5klSFt z=`F2bgy$4L?xkRaH|#MqI=l&Js0%astcQ+ab1M|uc#RdL>mL@tGI)27C9b2kblGHf zw?WqN{eh}|;^W`q{J+*vfDUf6KYFEAW5gyWfGd+3V4!vRFbPflx0^w4zJjoQ4W_e9b3SiK(`MUk)ECk0xP&q;D= zH{+@5%J&RN+?jC_xAi>incXupujRmsz7Qd~5VGzP2r<0cJ%C>|P5mqrc@u zi^^XZtpqNC*!_u-Sr&tgm!@rFSjygsiDr>p$IeWi=HJa*V8_%FG+b+jba!APA}MF6B%< zLQYm1|Ku8w1tVkq*s`|r;iC$lT_h%BA>6%_RQhbm@oNvhTqvu`3+Jv0YLsf{KF8?Y zN%9~a|2WZ#FZ~_K%ensOoc`_I9U3As=gGg2kdIscFh)lI7ZCFs`g6_0;uTMm7gn#&mr?%jUjPKm6jAG*=1EH1jkh*eDX3K%q?q(9vmQJ3Ph z8Ht7Apw<0-3BB^ocSmQpZcH1S)KvX`H*~es)Q=tGTG%(C{NucnK>;;i)OSgC#O7Y1 z%zNvMPqsxeX|k=~!A`|?`8*yll(Jukl%_u&jXbcK!^9!o4=Nw#rhyf9k5VISo!f_d zfmRbDUR1uk>6-oqM%JiovNn#O?vFM3IsOPV52FZmx2Ls|Dbk7AfBto}f}>pCMoXW! z^gj#fU^L)tZ|ia@L-LZNmu^au(IR_%@sk+Sq7CIT6(CuV*PJsGpxWuLuF-kUWMb#8 z!g9?D15n8+Jw`^x0tTaRH6j8K4=9J_l_3TtV;EI;Yu-mapR?Ts>^fqW{&f8?cH=|R zv+U2PLjA*{?P%!Z9z8S|6kKTQMWbCm($K5Tj?lK3s>1@(2(idTLcF3h4dKOT+q{-d z1fqgA-^Iv<{2puYDjM0F2iNTuIUSD+?=Q3y`&=IM9k#Vr+st9@!<#7<-0g$bVk=Y@ zzYywvvg;-4Wl@2bzEk|TQ6uUXRB%otgHomyMj+>Ac( zxiHx+4*|U}LM|N9k95<$TSa-&DKBl=BVboCEfzaJpYsRu(E}Dp#e@KbS+Sx@*p_L`zY0HUPL` zLcf~IB{IuXEB3K{Nb*bT%P~1Kf3=nG%jpAH(nVmHaE_bqq_wrR#V0177DaOV;X|xE zCj5W!oq-v`z991FtIaiT&wOH|Q_hZs)NSUOwZ>Y`mSUzi?1Zxl-A3^Qarj)2+rq1{ zm}bknAM)v)PD*(Q2t177#V3}_HRw7GR&mJ{3wd5cvz8O3FOV@wF|K3wobKRM`}1uS zWwYg731;#&T9y-&Fs&w22odv}!0RX?lZP%zH=S^=D8HpQ&l-tY^aD4Tl1-LcX5ek& zk4Pv`9bTm z4R7-PQXK5|A|j#D!{qwm9`1O@%|k8_^CB#^lZoc@f41zu26MKTZ>&-wUsDv!OM%|n zV*sbl9{8rwEDye_!c`k@^H6r({f!;@G(t6#O}|iG|zW zE6B{pvLXocSkhX!%*T48n@`zYM&Ax+2!QLhSUMK3(P1XQ(1Xs}4fz_m`lV`n7M>x8 zj##^=d~XeTm6#|(H(#2iT4n{L9U^VpWb|5XbZfO4qj_KKLq_Ltmo~gbD=i#ccjgs` zOJ2-3+Qh{J1l&!%6^O%$`(~6hOxUH*s3W0dyVdde4KvPdRG$faR~yvoMi0=C%M|RR`|&r|9Uk@wrU$=L#x7y1LBx@PQU)<#&=dTb^IMJUy*$b!)S( zB!v|^7T=#UD9>*B)fpq3DQ@DF*J!(GXM3WIZQgx5vhhG5-z4R5d#P1KDvmTRO|8gi zq?9m~-HI`pi0BHi|QF7?gDL0mvkXr6Rj7O?oJp;#2LSQG-QVPL-`jBk)B zbHl?xNwKIJ&u`AOTfB;Y<6%rCMva^c;z~A5^jM!eTU%@Ij zF)9zCzVl$?7soeOidcRwDS#=|O zaN^7hzJ=7TiCzAEd(!ToEvyQzY~t&m8K;#fLw=qF@l|`E@HptONurKvS0f}Aj=cIM zDn21MT<5Z-1Y&or=38cn1_?jrvKZ}ZI!PRFu<;nopcHXp>>D-+!i@q*`mR)18Hd-5 zl7e;{nMrb0$9PB`hx5r}1-(Y3i^G6_W!Bk$dx!qxXE^0|;qR|QF2JYbi|-u^`&^XU zR}q!^=svYTZb~r-ej#07vsp~3K{3-Wmus~bn`1K8dG%0~ee$XO9`V<0yMOPe<@?}? z#7*PgO<%1hW6VOOwCGN8DMOWIVauN*?c=$MHW+05`qWken^!i;S1496m&aBN-7TT)W)9 zh4Abc?bA(@i$J7QaY(_|Xm=7x9lO(4*E2G9)RFWT(tzt9O}EG56(seg4JDmoR^*^s zk-X}l;zu6wRwZYx<|EDvz1n^>eTxhZ=gttDN)=wGPKc27{#<>(Fs742KW_Y|<)aYb zQ2skM^$!`&`VTTZr-op>x3`ypi7BzMuC5MdX~+oS)Ix^6E%c5=sKf@I9{h5*8330B zODyDPG#iHl&v@X?KmKyB3SZ&W+LC<=1PlXemla|O+Vr@+u!8{BMc=d*ZcgbfV~n&* zcl&ZKlDhbLc!*|ZX51Ru#ps&$g-(VLss?To%KVAiKIMak;k%fu|q2w>Wd$hgu z3G97w$W*bqAYNHipXIp4x-?#+Ml4Ig@18t+4RiCAJ(%}+bxOo?vK}XrD;{wkIYAA4e0)m$#l!-W#O9Zm4dxqbYT|DI zVNFRzllves_hVurqJV&a?AazRDJf%S7*sv+5#a5~ z3|QapCv@%uMsk@!(MFt3vaWB~*w_He?M{Hj;RnY^A5c?M!@ScI0qq92@W>26uJB9U z4;B~N6zvtdyNZ05=)5;(DA`+SYGIAdoa$ZWYEcn4D-`g>vHc=~%&22S-CGxQN zRD{PahOWI{bjm;{cV}$mWQc9#cwM=DrON-FOsC$GO7iw%j~C%|i|t)t;A0|Iy=Sn1 zEG{1&e)s+GqxN5qSacgpU)T${ip?E5iwR9sNVDaB-=3($_P*E+d((C+ZwBmVZ&O79 z!SqOaL(kY+hGO~y^H&3j1;6bn2X=n9!%*`PU73mAiiLWqBjI}vkMCmTdNp{7^vZo_ zR#Vlc->mnAosbwcD;#^L@iiT;#JanPQ-J}dhX6_(2iclbJ#bp=u`d12+U)@6o;vMVbaOzRc}8hnXx7C_HqgP>SE#O z_#Rs%Pc0=&t99cUfqQ1pXS0v&)?Li?cFSl$$m@Qe+g)SW`P}ItEtSvd`Q~V5l)evk zH++)9+})3zkhA6@;82mxa``N@5e9Gk85HmPtWqGXbNGcG1767`6Wx=3Xn z8C^dsp3Jr1gq~Y1B~xoL)tjFhl_!aW z6Ovt+T!;GR9S9HWlp{2Mp+4>g?$Aev_I_-UyI=qf1U!iM8J(o-YqedYCRZ#+eT(|R zVF`a?MPc}|IV+XhigR;R_np`2rqNFAMpHp9x~_!*ycwxuR0x5mGN5T=ADfA|=75M{ z_wnjB$rJi)6}S(&R|pmL)=(URpXMK?Ug3XTa9lw4XS2cymeT1HQb?^MTDPd`ZPK>k zaNi`2&S=3Cr(^Ey;5g+loF+d5bKnD8-aj_7ASboo{&3Fr_H^XaRf(*N>;9|(G%;IO z1{rYRU*a(S!7!X51eQ-`7Oi^YI}X!zI3r=l3zAmo8dp_gw;fiG1_@y1_bK*opKx(_ zcQHq&@sXL(k9Ic6iY0Ctf5!P>LLXtWUSu@f1Of3H@zW_~g;;SB8}((tQeS$!G#@hv zXhzpG+RUH@3E1OF#gRm%aakCBtA%N`c@xG`Y6h0{vNU;Lbqw($_ytfMW5>Spmm#4718n+{GBK1eA zRK8k7QnE5Iyr1oZ5ntcnw#88jB|ur*(MV4f`>mKc3x0Ej2UCKULaTtt-|8Ol`_|WI zkt9*m<*XztOez$vk7XZ;fNH4u=;)^A@b5~yO~>_7Gbp-wc{SH7_V18FYMWODtv+{k zb(wH;Br`p=>mBa>$nMt3uaNbLG;xc$zaUMX-RS0VbT$tdc)#}s zm$dJKs+AdtzouJfGig1yeQ2h+x4vEHeZML-h{ zZ|$6)l^h`9aaXGLa12eXL(kCHgSll{jhKOTL|!sHF~U_1kByPGeT%n-pNNx^6uI5Q zEkO$d9urGC5eE#a#JC=0s$$rYzwVn)d48YQFT($W2iy>AkN;!+_s{&>(<1>QA(=Ut z!6PAw0LG`TPM4@v*VT0ckD^te;7^iYf5=vWs9?t+$qjS8xVT7eEWu360sO{LF)<}o zRNm9bp(vK*3<|=&s6)S6$o&+Quw4(DRp-|RB1|>qNt|CS5-Bh zn>918GGN$Dj!SVXzmb~_5Ezu~EGDI=E9i1o4RR;PNbVHx@SW%T?#h=`0?K??Gt?&? zMIQ|Oh4a%+`ry05FMt_ARezp4=P94SCxoXyAFA(jo?eg(1o_gBw#{}XZaGPubH-+W z3G8Mhrlr8;XWWe~ooMMy=ku0Ammb?)8PFD@@+B8>c=Ca1&Pi#3oY>7_rL^V+#t4Ox z^#PVViUXYQwsZCalmn%+lZ!ysh zqX_13DB>7$WpcxdJ%gpfO;#t?Jh{cFO=v?Td)qXMxAE!bL;7i+bF!kTo(zV|Du~)b z(@ig=67YK5yC_t%BRzA27sO--86dy;J>xe0{}E)G|K!+=zlf>bkYO!3S|f7S7d+tl zLGtuLdtk5~ySLk-`hHt`pWlzNRXL;o&4xVOW0&)yOs{j5Yo4#LlD;4cpZF}tRTZ0_ zjpWrvEv|YMXf?W!gLNluy>wO4l58pP;e`z-?ORvJG;(Mjck?O&K6)-$Ec=%o3=??^ zP{hyl4`jm!f==C|6v-Eq)ovG|i67ZA^x9SrSD6N9mhkPxD(w#)T}}a6`o+)VciB}U zZ{NOMIao(mW&?YA-F7X^VSo2~IR1(LE`{%KV;vjYK?HJ8r)-FN7bvz$Opg5PJ?fKC z$#xA#3FfZ+H5^KP8}=dB_Tqy7Ckx{IhYRKVuZjZz>#Opu2cuyF+S=+&F#f`Dy~xk7 za6`EUz2$P4-L3&xE=u8^EWPE7?wLHU{_v z8*OiMv1H^HD$Lv80}Wchrax5Ets@Z%dD>A(I=+j>9|PSwY!yLFKZr>&e^rB?1ouB@ zcuq;B8i5+2Bw?w5*JUF636~@#db=fjKKKW~Zx*b(f7PccO5l7?^HriITVer1B12$i zY)yx^o8(H54%zwElo%g#HcW21I3%gzp5=+PK_x(MFxj@RC#!wwOtUmJD%z-GZ!hfZ z>_Tg{b*FJ@ig!?ZXcomG*-p-3UJ3d*AI_}8xG_+t~W2IA*vg!_a4eGK?3 zNc^u_fF-7ZT(^Qv8`OGze}8`t5KIz@6p1>i`w)vZ`+cg80Zzo<{Osv3; z5%Pi)W?SfFsUY`JVJp6&h+`+ilsWNQ4w6=q&3ym!<0K~l)Bx)L!*rOOoV4Qlq!S7X zij}>(bV(>!35xhV6Cxj_{v`%o$ z%m^7E5NTBoN&l3*W50-kz%Jt-galN)1`J1{OEZ3?|NkX6f2dbaCI*H|A@+(%Ht#fL zXNKMlt1rsSi%QAiK@->F8NP$ojn{GT6(c1T)T0ZE2N;4wrJl3%J$@8`dwhZ!RHTWz zC=|4^hWkYG@>P@flgRs5o~T}4D4h%RsKR1?UpkLZ(F5B386H0t!vWz$BlxQx5i`Uh z0kvrG7vYCBPlUk7K{%x3!R)!?InSO%@*6l9G_`tl&GsRgZ(fY^)`k|w(vI4st}gcO z@wxS(_ABkIuQ&nfNcf!oK~ccJeOI&oc~}2aWcJ+ikNnXOtfQMU`E0q(M^kQ9VJFur z#_(Iq=h_B8s|vkR2Mq6%BKKN1;ETRaTuKiAx0a6c+|voq>6F;1Ytl-51(We6S9`e$ z=AavB5~sd}lG12RGj z9!Jkkm7Y!}I8f6<&}7lj!sDW(%S|8mKi6U4K^e^ha-MO zI17$a<%1)Ev-5dS-AAzA;{EF8Dz*m|_85Za?4bC5Yvg*Yl5n-lad1T&efhqiq18s{ zM~%t^d+pXpU(Lm8*MO1`>S24nF1>+)9wMEV1Pu8x`h(Q#Mq{xuKypY@$Tda(7Lzd{?z@s>s@DJg(`kdTsETWogWbK4~V z?q{|CFF!themN;d*yBPs&k}G2OkRrVV5+6LzS7>(vbdg-tzt}mZxgz6aKJ+0;^LAx zdkIUJ-GMc{yT7{w%o^z{j^uqyV&!(FH=V7mOY0T)PA5q_0c~Z%BSqQ@d?hzTGCk=_rP)jiziN7-+DA=C zhZV01wB*G}IRdaU==tgv7z@0t;^~FbJwlD6WFJuNaT3&)2)3p0HQM@t?qgxV_g>Fh z-bWe?hx>GXokip=Uo`TbBAjE+Ff!i62-?FMpZwHINMWNlS<^*(pvzZfh2|FXkW^Vr!8go+>ZYcbpLlD z8S!sABM#8({T7mCKZz`+4LTRk4POqOXgNZcyx<{Hz01za`wY5nP8%2*eWj$qU&}QW z@5PI`<6*4`Oh71+kx`I(+hs>XLxV;u=a4i}EA+3^rbw@;l*T6xtbOf|Z8Ozp2*q2|nz zB%asZxI=ZSsd@8Ay~zF-Cq*>#H9EfzkITPn63ZvrL%v-tlY!$8XkgBB9>*VYdM&mEv4 z%__+%dy?M5+*}Tl139lvNl8fxO`CtOD#v!1#QLqjUwXdKbtLH~t*^k>T0E4qAqD1N z$fFJj_~n=srRo6UoEs}MsITY?fXAV-n;avFP{l+`+jL@p`Kt9xH|IyOo63OP*E7So z&huR-lb-YQ@@lpSmlnCu(b9GT75e!i?s3;8*NjR1sfRELUXc=J$!|fnNsD7rR;xlu z1g5!sBKX)pIaN{3W{uD-=a=T2MdVxt8^$W2qZkiS@gq>(Ag1F=Pr3eB#SJk5cOG#q_%|irDn~ z2kS!l3iE>Q`(M8QZ- z17ZYNjqWd^5*Y4Jy(QfskF|jLYzF^9JdN-=UI`$`yscF6(WY^@Ke(Bmp8g!Wd!M0F z;Ha&wz4ZN7bWZeMBs5*xteA1IvwMwPoxmbLZ=3S#p+#;zJ3cKE3Bzc6RNm)ShG9i% zQFqdxbw|&5nFzhKAp@f_Vmfky33w*)Nd#dMj3IbI|S< z(FaFY$H4dqB<_YPqa#tm^2Fts4Vy;8)k)0MR>v2GV{anS)HaR!KD)u4uAaJ+Pxe&i z>xi|$-BomDY{3(qStk5>)1hmAkq>RmB<*{R`W-sGKv^ANn8-C8grn4UZ4rk4oAzTE zum>RWwHT9<>eKI`p?QAi&fj%J^o%DT;d&!ZA}wsZUNCrhP||u7@duHJgt`uo*wiUb za&laO5B7UCy@2UEXpcGi5|dJdy0vt-lqDauEO!3a`c;D7^ zhDx&|ZTy&bDWA(u(?{?OB7JC5#Jh!RALD#F1wU7fb`mf+8)FjH9^qQ_*9sB1?hPm2 z$~~ozxQ%B>QrDs#RSThUsw{ZSZ*kyNqAaRT%IOg0tpA_vQ24m3tn@ z)b(`bOb8;JtoBhp$h7@Zfyz-WiEz+!czEk2_6Ryey(|j%5sy==EvBCMQqOW2r53l^TffjcfYvU?@|JUyiyyfC=LUmtHGTqDh%6_iqRBaEaZc+S9%AS)X&Ff?+n=#Ph# zqvD7b5%^{|YS(lt_vC2m%FX4&`G@l&<_OH&L{kz1*~`O-OA4x|&=R(%ZwCS3xYSA_ z)9$0WSk)>cFHanY55a_#Sji~01r_{g*$?`p7N1HZ0jtlB4lXcNmDWZ}#Lf29O%gNC zZd{i^E1=1pj}CDfY!SUjpCoo7H zhmD5#iAY#yG5Q##^Cr=W)Xs+ip zRob8fYz*~E_4)?2HwNbxe;YXe0c_*PQC?`1ZroVqpaE52w(kV-@?bes08oGpiyy>u zPE}hrF15>2Mrm!7H@PM8royOhRwUkQ%Y$=FZ_jhp$AA`CaMJeYvw*0^y`tE{Js>Y$ z@|?Cl2!0PKiW@p^Vn&IRclkXG>1%>d0-D~*GxUv1E>$VUVF{~M{Um~dd_ECO?4O4@ z3~Yqh&I$2}@!`<|Cj)ZIJ#DSBc?z$j(%%=$%SZHP{s7VRgmx`-qixP%=K5`NyB{th zT`TI=xGmTZr?-N{L*pddA9arxEvuYuzd+D$ITzz?e%M~Dz@BxOkEsxdTi-5W;`3c? z0gM?0%UKFS4p6F$hlDY0=Y2`Y-1U;8muF0G7&8brNXoyzMK0qhTTN=w{=e|Va7u7n z8GvQJ2j@mmU1X^A?Ix1KbM^uOmp{kwvA##tDCHBb9XCUbd@kK&7q}kPx?`j^^%ONf zYpJnFTD$pw@UXT>7$1!|?sLR-*iW%%)MJEt$YD*F`_>$pr}7a6-HXv5|oK z!tK|>Mv#T!<$D3=I`;5_EhM)sOHUfJ)#@)SjoUur-)TS#!-zGfQaJ9~!LNE*pTFw~DfLTW=LNj@(Ylaw~ zqU;+x4p0&G>m>lTBPd&+k5*bNiIa67x7Xh`t$n~Cj8kW5rFk_XL{Vz*k+U0*On51v z;v^do>B5;rf$ua4!7b{Af490u9byg6vLJ}n30-^tnnnpOEjFk+EPkfxtk^H>#A=qp zS3`kqb}7NoOuNzqFS46NQ}rKyNhD34=LF}Gn^g628nX|P<$r#-fL7$m5oVfkIo8wL z;nPHrgz46fQS7zUNpi$3Tkrpp4@GAcX&h}RNFyAM)l9#`2;oN8G14B#YDdWo*Ha~W zB~Xr_8N%KDGneY(Mb~LANjm*})I*+<03TU;07=tYcC7pt564acq^({d=;h}a7fM+b zw@BPeDpJN-T$P519&INFS!?6bqF%QFIoY)nHJ9*C?IOMmm)L%i6whM*$y2dKt_8;o zocj;9CONjmQHd8$#`_Y*d~`By2|Xr7Ys{3yai$q3ase%46d9L_VWFw(Gvnlz(m%xM zp?a+hZuviRiS-fgQ^i1iKe`zjUnLm1ezzg%LG7KanP2a#31N@LrG@Z=`*7F3zeHMH zfe;SAX?dbHYu_nqg0dZ2AWr{-)ph4hsOgIJ`}a-K>5n{|zOi8v_uQ-E&$-J9hBB^s z(|!vU-!aEg(z;p?_Nqu?ew<^viEVa@P^=TW60Hatjl6vYOLt?KKIqEXAw|(2qXAtl zhDP`^R-!ERp08k}Mx5#fo3EIAA~Sa%bukK3BH=GDNcO{FHo-6!WZN=>$# zsF>)|dPFUj_Hjd-jqEipQtD!Ya*!nVcZ>xyVDkTcc&C96nA&m;1FC=+?|#d_u}rZ!Ciy9_Rsr%-#++f z@1sm6NB2CLdp%38b$u357^fq~!b+Q7mlqu;A5~)> z(>U7Rrire5SJ##rz1A`QkDDGTf#;}6(Rg=B0O%*~eD75F5-qRmiiPHW(Y*jhx;dEa zf4Vu`Vm{bnT+uWhH9CSi;|GT@`uh6I%gYLNO-*UgNVS)jhCXS&%njWPUvBoZ2H8o_ z>0+gvrLApr_D)Bn$L=6zMt1h@^W7;(<;xe>vlU)qWA2c`WX{`L%);W|*sPACHZ~_) zF_C<1hBLiSu~`EClF%uD9N@LBC-bj7AZQd(vGK*)^)-bwAzviST**$r&ESK)YR({T z>70Ov)Cc5*-zNWRHKmwbw}xF6krQ)pGzJTc%S-NoGTHF*sjin9TnUuoNci~hC2I-t zvg%@#dnI%%kWAZYnJv00y$VcgJ7R~Zh_2(< z8=86zI;dWbdK%+5+qlNesP_=HV%G)g#x5yk>6VkkE-HW=zm|9B3VqS9IjPiGny!4& zx<34`AoqV{qU32~uzHO7bB!ET|4|qbz^6zE8n>hxKMKR7DDGk_ZVVpTqwV8mWR!bW zlV!<$TZK>@p6h6h!jLHPN%kLM!EtS#;2W@vCEag51QxTWEJtRm6#}Qmq0By5a&g=l^f5Aw$%-M@O1DN|@7taA_o0`ObFp+y zd*n!oxJJ&DB4Pg29y{CX0Yz%mbxBvFkLQPF1suYWCIgzP=bwfG!1mo9N6!s-FZ8Ht%vKguTtGf=rX%*M4ml1~%U9EFNBn>%eb z6|stC+vX~)O&l$uN6{8Ck6V}btl3RUvv?m>KDc0Dx%QsW_WZLJfb@w!x5qAm`#W8O z9#`;})2jQq?*9z(L#M+3M;7X&cM=qk{FlX2m6;8lL$3eswnea4y<%P;$vQ3#Ds=0k zxYoP>UTvCazO-ganE~@b8T(I{U6>`2L#@#p()jCc;W1vM<8#%r*%lB}N3_rdOgf3G zJMDtmr#^-QX^tCoie-j0qYNSn2lUPu;Ex3j@=oRb2jCR&a5(CgKikGIv5@y^^(TAHCH8aUiie3)o`W{g#wIGND zB>w?LUtMydhn^cO)xV_@BZ8<*Id~CHy9I{i31C^NbwLaok_UTC=NA+57Th>#ep=T( zZHxqAhOKaA+7$8~*EKdIc?$FXKoQlyOp*hiNXh{k48Q!!qulAG!Ks4@z`7&%Szc7+ zO1geeMAJm#o8Sy?3cBKS6%(%Dsi%#I3i+6lxx8Q1iH4|?Azn6B^jv|}2y3Y&Bq^|! zNf<}rR+9Xm<(a93xbOvds7Q-M?>g{O=vF|!Ip~#J{?oTaZ-6l`1g=~hcQLjD)qQ6V&3SZ|b+puHkSbVyA*-7YS84|I6x$ zF>V4B7(pomd~p5xHTI?CAT8WIk45c4X@H@tZ5m}9q~hEW1?T$3cRFD>!pTAmqX^9e zC)d~>Zit{;!GSFKi7ZwB_mRN}3?B{rcdnp;E9Sys5#os0!y5D8$7WX~be*dH6kfFD zYHRq8ZmlEa@*Zj)e7~OKX)Fbx>XxAmx^48?Co%5=wmh8*tews%dtrvEvlLHe)$dWY z{qEYco`v>e0%nkiVkxHnPEaOQ3N)kDJFYV<|N3%6^v|fbkR>m1#mRO0K`Fe}7_AC% zEksw1^t05gD>n~Cv(!a*3;`%czh?w`Ud>ni#>>R8%&$C7kAq4F)tS};Rc*knEPal+ z9Jm7OT}+BkUx`;{Ow-b_`shl zVzR%3sn1U(;Pc!wA`HVOMjzDjg4Er|kCPV|a(Rs%`cB72iVT4q_$st8$i`g|Nko^yDpncHSlDFyUq`%iXBPtul zAL6#QB#s}%Gmn~Ey1QX$#5sW`GP1y4Fqrh&PtT>H8CVV^YVQDS?Vf5{zx#DUb88mw zpc%c*+f&&A7t*=9tZx(XwneAL7amKnG5fKp?z)Xwhtc(l==q(*uSUY2X z^H7n7#Z!HvfONV4Nv|4ni~F#8tAsSO<3ym4*5jm|p5bauxX=x0NHuRzoeMDX`avi_ zrF3y#)C=t;A+LXfZd6KXIq0#!i=>;2LX2i~cU0}0Fe@dzHNnBUG&sz_qLiU~mNzFVs)GccfMuU+Uzr4 z`8A`Wr;V9+PPbc#5?)xKa&*{ERI{v+el>2AO_=a9z`nZ9vpy#`iqUJ%e zcKf%(s-tbYhJ3T30cGxycHJ=??QK6Zsvp)#gEv$PuuKzhm3D~EBb!H z9lFRKe1-~zd18NfgN%R2#ce@1X^qH~PWSC#{HG>92KktowIys;iiRur=9D&M1YuH9 zuBT&lcuYmcNe<3!b{B^d65ogXV7?t10qr0_iA*F9E9{dq>n_;N5c3y1`20N-b?(6I zDC77@)Q0@;J!JynnO~9T3ng?Qf$p!zMIzg}-_G^GSX3g~z*)b5!9sm^C%(|K>vwcC z5NrS{nYYHt;m!B@JA+Etc3sTVro4ej$HN+KNXiA7Sf)E?`0z_eOAWr6v<@1piB3s#Rm8dI#_rX z$#iP~S8F(jH@4td`x;8Om|NeiYajGowsbqrkpt^{xOuZIkCzd8KaHky%SI>DbE|1= z8Xez}k4b$eb`!CWd3GMzTWh?z*-OnAo_qZP zg(2*fq1}ux0=J??IJxe|LQAghRGf(@kQPFk0~`!!Csj^O>=4Z<@yK-P@P?*SvvGDK zL8G!9o9s0xSy{c4OEZ1tyn`gv@L=a}|92p>)S{rIo%EY+jyYB>$P~Ii3vNjc)>@j5 zo-C_SutkrkM>+WyJ!Y4O!QIy|?QTOG#Emdj1t-S_7n`biBf7^ti!wVT3&~H+`VAAo zkq;CG_bNTIP-^Cx0IUG;s0#OQ#c7gjofXmd>43SkxB?Qh5EX<1*0F(APdib+x*AyL zXbQuY00X;6K>Rcs(35g<_u(3zt6m&H!(fVqbcq3$iNf4zHHiL_($~3vmz|zz?(|UbTx@_xLu}?8&8l`b!By$y_|gEw^=9H$0V|e z2ApM|OI1zRx&&t%Cp~s*#tE~yF1L9LTaD+U@1v8p*m&R{VzRn!bmI|WI&Xt|SPl3Z zK%<}JnhQ)F5WnEt+ZfeHrv361#b3r{)Sl#Mbd8AUXtRLZbh{33jAe3IZ#TU-pc@(K zLuSkCbh)_)wk3*-yuoeZB7-qZ{9iWZ zU|t>{d$U!HslNL7`J+I0O^nhyl5q!Fma&sGbKPh+u?inRPT=&c&Lp=*2|ifSb}xPS zt;0G{DE(4uW5BP&FCZ-VZ?MJD<`qO@V9bU8-AZCi#YPA^xfw{nslv!E`vB_EH?9+k zxo1${V<+hv92^8a*_)Wa0HooMPDmv5<*~DL8Vd`58QQ-abw01aXbXFzj#eDHKr6#v zVy;X4DoX&oXbnz zB{E6nV8&4P-k{YU$*S9dstna8c6iagH~7^<*GI9-LgNDLw&!(F0%h@L zpZxTRJ9y+ZS1iBCdjw(__UlGRIg87A!Tw8L8{UtDKS`s{ck~t2)%EHBss4Lk{Xeo~ zN_x7odbdTm#^1d`YC3JNI1K?!{}_Zo{M*p4&0Io5Pa&byOkKMS^Wa48#1y_en)->D(~2uHE+~D>og`DM3p_81c8r0JbeF3N%m0^B8C}ZCc0$@W z3}NK)@T~P(GWw&w*iGoj1etD#G?YQpa`uY_SP$C^Z3h>k=iqbIYW86$Pp$XY)i>AN z?OwWo4e^6aw$h&xPQg|{b=X^k6f;pRsg z3VD6^UO>G5o2NGY&`SvTO3rx`Vz?&CQhMzqjqNadAK9M9&v%Lz&9^GM&ce+ezL&E7 zC!Wg7nCNa$Y*{6_S1xeb7BA|o%yil5AaRbb6J@e9@l-N}YlSFg=TX}{2vVkC^7}ia zS-C&(HwvT`H@q)Ra{4Mt>bo55>nys97KG|&EVGymewZ{LRPrPVc_XA*wj_-+Burj5 zRXr~4bA^gQ9JiR~q+n$g1u4!as_fwt;GX)CDJ5J9_Ywt{9|K7wMDSliE$QU^DkGDJGV@af^xowRp{<>c?Ou^#7aM@COcg z8a}N23z+IyQiRYq?XrPS20#n`>}fJeCCdYBDi;*oM;-7oG|RHd zMKaMTGKwi?OwIJIlWze3Gj4bcGzKDY@|o_`jo3>HU=n;d4$Ct=*678yE^OcN5(~ch zR0^8TWm4}=8(Y3wfCw(uLM536`gVJyDXz%^ugfny33)(=6T=3|)~K{&Z<_4R;j~Sl z+dCJJym=>fi{7F5KlPL;QgrTY%CyTV-sHvfA6rCyzPwlu&y9IU}6_3&nv9;dTxW4r+jdTHKR zvZh)HKn;8-_3^=Ae1P2&7C+NLFn3hUzb;4-2A>7$Xj+!Ig7t?HUHr6ZgwqmkyHW}+)EmpK=rp)9QA!HN3_;PUB;AFa^r3UL!I1?)~chu+7$+B-(p@eC=V3Hr!ll0k&hXuWt3-%AX$h%ihMA ze_x@ShzGvUUZQU`_OS>5>!wyz%50`r-Soc@HR{alWL8%;?*7TZsl+dS)C7pbabcv zvJCK}{P#TK`}(|l^SF@e{`g9lc-t{PIQh6YYdgpiaQ&`m(CPz6)#;Bx)m|U0>|8IN zU@fO+U=-gGvhDNwgz0niOUGqN`s;3F8)c99x(k0NV4dQzJo|hA+X;a4?{Us}D_gu1 zKIo+*`?8X1Bc|(V67%ss(Wwu!c|B~2|3U)m#f&Mrp{QLW&g0&aO^gNpLnG@ji=&)g zXUa@?g9z#ih}qP5k2G0lJ_-WI+182iVWG19+v$2<+ne3aDRVHg9Amm`<>h~#N}%{F z+%nbsB~biz8$0M#Fk@U)*W?Wu#>1C?YY0EhF76M2O@ zjp|8cyED>V6)r-I!aXUjT7_g-DR#^`3xXDLO}$K_p{yN*UA=ITGcIism40jmcQ`>@ zZ7Bi%jw0$ef06U{=j%pMfwe6uHECg@zQQ`O{@=*zP85Uvt5kHx>xs;^;!@c_oY}RZ zLo`OzoT8(!z*~AhRYRFVUz}uz+)-KJ7!YS&DE#|AbJ4uC0xyOHp9jI)A)DlyU;FD%^zM2jX0`8rD^RH0FFO6deoJl3!wm+R4LlYFswhffp6BJn<=sFu*pWwjN! z{oH2r=20`Mv_?Zs$8zcplv2pT2mSkBX^zWVlaQ1DkjUfF8Sy6|?9xx|#9IT*dHbT~ zKv9&3X6Z8QmRA~b)jIEZ^gx!~bb5|xd^&C;F#yx7853e)coJcU`NnhB9a)BP;zp=NY z(?2LTG#$`MAEbD%kyhOdy|h4`^Z`Hg{gdZs>*Hi}`9Zqby#;*9dW(tuE(xyWviBrn zUGAus_jRW(B5)Zc&U|f*6V*A2y3>$M+=lpr6gH+O<*CFw2Ahp_F1&?xrtkh3rEx_~ zBw8M91y%oevIZxMJ)aGS6Wf7lBi=JYp17lQ7t-9yvpP6ke_J0&E+qNgVe#&(h_t^^ ze-?rhmMThKb%=D@BT&J2?&b5uI&l3s5`b1QGpCl26B%$sU=dbMeI|~oc%eA&O$8hV z5TquM5G289-_a?9fgZX{8sMpKpcYKUJ1lx$f#kI#nV9~Ore>OAa6BXpYmeoxTFJRw zYak5m7>b=^@z47B8rLrp3&P0j-Reg#ho^5vpq{`HbWCe>Bm&(6(-_j%ay zZ+U%Ro&H(k^LRCstgnrjtP)#6NLQ|BwdH~e89}IWI)YGe2nd-vokk8UVE%4HzMnK|@O?AxaI4XWCKZ$hEM*;Ssz*HE1qnFt+R``#dpNp&i zpK&fxR;Qy+#(VzybPb z#M<5H3PZAe-{UflSc?a&j(8xIJR@>aZfaZ@tbgHxZ3~Ro^0I5*J3XKysoRhxq+{v3 z(7$WXlMB`tmFp$`m!(hs9lc9BFx8_lX=5{MwECa_tx=~HR2e086=fl5#h$3^8Yb3N z2pPd;A-H(K(itapgAt|f*(G(mQYJoGz@Wnk4A2Ee;7ubcjE>53O(8H|3;rVURZyOi zwDTiuYa*`ao`V2d`&**sn5?N&7tK!>Cj@YC!Y?yqWctgwW?PO7qxoO>c_QnA($fR) ztzi5SYjogVVoWa9+Ko^l1KG!IT)Run^EVp>%n(zxv61OA|Sjk%!FNAZ8xsDW>_Y8y}a)hKlj z`Qmsj&prAreow3cZpWXi+Jlg&e3V3jE+9`O*eViWUzwT^H5}xDkSG zOfg$$pOiW^{DFq`H`>T?s)EXIDKnw4#vQ94hfZBtm)8F|@DlXEFMa=u2Z`e4)61*s zpXMYg=8L}-%R0#l-Va(+|Luvii6-N{r}>F|kW>hfQp-i}X~f$5v^o=+=mQ2LzY{e?QOQTSTFrdT2*_X({(rlCe9N20cnN|INb{Exf2v7vCU-It`6NYfm# z`2IyK@+xm?t(Ad#pT4~}1t(kihhD@6uL^*{)N|9^U z!|$S}_^)|G;{%_5)?m`9i^tfU3G9HM@Ry%{#eYkzF-HaiYB=lClr+k9t&;WyVse@g z*}@bNH03xHO+KEfWcF%d35^L(6+VUE=o-@|vL4p*0cD`S-SE_%xf|f5d*n-g`zIKM zH0h42QrBGc!_j-PFljv~#4!zh&TaJE@(l}r3Dd}KR1&I`%Fk?hK%^1%}sWYXb*$sj5R3XITFF#(@J>77< z3hk0e0tgBc-V|XzmtWK}4;DwfX^KG;yB88-S6Et_7n0mJlpgi;f$Urx5l+t{7H7pc z%?in>Kca&(=n0yj3wi}%#~y8$%O<9Jz;t3_5XC_)~wy7ySld;9pK=bfx~?irLEQwAcJs zy#yljtBh#>ub39e%Zv$?sd;v2yE)oQ9?8**mB~qdMCMz27Lt{z#aLRQ?{{EA@1P#2 zJ7K#x&UYE<`(_@?QCnGoTYS*~A53&@w(^EvBRX#dUxLE1L}g5&YoXC9R`eud=48Um z2uZ;8mArtj1JbcAs*md%k``Z6QQ1PUQl>zh%}!56Ot;&L=jV7V z-uI$LsWR`Pg=r+gXp_j>vBgSKY2R`k=O%^}ZD&nj3G+MfPZ8XJ2dQ zgG%U2f6RBh7W&|?l=*$u`37bW0fegASjbrCQhIV9F|4@%@CpARTwHS4-dQBd%1_r5 zTGA^@pS(Cb6)vy7Xz%O)Uu40V!?njMV4JK`E9YeGh;}~skieRcLZ<4#dH8NNK zktMN@9j!>#QPJ%ReVrI(xAv(EA~Av;R~F*-L8_5|^-~-lHs7OV5l#G&GnuC8o&?H@ zZn*vIl}KnH@IWZ`?~#kG_E3OlIw2)RzybUh6DVzt)59I0i9=g;#3IzLQcp9 z@J8JBWCL`#KckiAE^#k9Vs{JW9sA={JBS9SldwC26Vv%F@auf}kvXt-2ENb(P)(mA zmL7JW;=3qHX}e(VcMsVyyI_ojU*R6HF`N~x&_LBGU}eh$+f1&&uQ>ue-1Z%kq3Lyz zEJw?moysInyo~{eurhtSSF!G_x-L1)OoVDH_=-NN$?nkae%iDh zf$8sZF;~4a_>wpH;M9p7^bn^1AMilkd_2c|%)Z!&a(=ty3wS7hfYOYX51WsZUs|s2 zUvLP>L(+|XF*9|ahOLZm`5ac_k*R{9k{i?3-TFuz!F>c{1fWoH$HA(-lN)x`i^1%M z3^h*1VT~}c!J+oQ5b|G|_YCC~L6857Ay&I`PzS{9>(rz4_=wScaH4 z3Ba1Yc$hCvz>|tLMLJ3?o>op8FFpQ8BYhnH_kRd)JUf`03cT?JX`*4eAL#%Gv~H}@ z3LFVEd3TBCL-L=(TNC=S{BdcIr4%&zi58)hgf9}6o`lgi(>iM@y)LMOq-R6L1k?wf z^xa!NOghatyiTWgDSQ!du6L{-HhD<1&6R8dP(HC`F+E^ZJa0&O{?q>>8hh>JwZZ3w zHAcX-ygWw&hGc{`6*D`Dhs2joMQ{9!0}`iT#B1|za>PACwrT8lRq}mguVT-RL;dfcC&P3w(%^^h~0A1 zB6(J`CJFBs!>}BppU>5tzEkO2_6|2cvScMoYz;yp<)8LI6tgvEuMr-8pD%J06xi#J%#S?U)(UTjn9uL?B&0SQ|((oC1 zqyyqX&oqH=;1A@P zN?GEez7`h%NO@b0Ki^>Uxbr9;V>(^Zf$Cd^j8~@<<9ABB?DQ7UHXE0#Uflq%eOgsk zl_FKG(A>7BLRAB7(NlAdEK{xwlUs|^XDPUJ8Ma*OQpnwhj-^p3^cZfA8-*gUH#SVP zyz8hZoaGPoCXEfk5>Uu@F<2D zQEi`Yr)NL78m%=f(FMR?_LhbDyx+m+5E)sIkzsGO#=l&xMQ$eSoK)w-l>Lt!6Z8t_ za|RX4#5sPBbEayQu{-eq*-%YBc8LfG4F6jo2jCX7t2e0bgA`#jsZNxQr+;d3r8<;3 zYQ0A&vCMI5g=UV*X@V_3{#IE%MyHXK%G~3+E9}&|&#d|iI1(o?>Ulk+%ny9UWy|r0 z>X&&vt^8kid-eMj+x_1ORLPCI`}Z&g856p}yrJ6C*z_l=8;i{XNgyU^8#4;5p=g|R zqr^HpL^C{P90I~vwR>Q1X92Uw^Z0L{jH}@rva2~`k(i5D$l+t##b%Uqz@gvknRitm zf0w^#=UoTcWiHibWd6o8^?CaPiOBQ3U;FKe7X&-1`>$tpVL=UndM%5O@0+&B?W6MJ z{vb#DqaTLR208Fff9H}*Kk)d@roB#(l&nd{>@70P$JP*r&nenUhL*jp*S*>J%Ohe9 zm3R;U`te^S>puYW=#Hj51VgIFW0UfWW=_K^53i6V6NSY=D&Q1m$5M3qmP*$C0b|F4 z!a#3Oan0sDBfP{NW4jRv@`=;bxR5fF)rnXxaa%2#U==-OIgf6r>N5+7v{LPMf?EE# zH$;gJPR5J;kA0tMG6}1w<}?E#$m5bWg+-t}}C|7+VRZYUg_c5a*V^yvP*T$MI4{*yX)9P<-SuLS_bYAQ*|2sv8V zn5Wy4FPV{S3Opbl_8(`S#LMp_SfMHQFWi_#2RxoxY0TEh`B5|{2%RDqG z#s9{qQh(7MuqP4+FV7(&gwR-lsD2D){-y^$^g~OaE8or$gn!v{&5%!&66ZkwvWd&= zpIGw%NazW4@*`TF8X-SfDN}beU!p^u*hn<+<>xAOD&Z4IlFIDjC8YlWQ&rC~u3%L% zub;GNA{+Ugx@{z(-HHiK&yZQmqd;aMn#+^OE)HN*hb?_T9#LT)s%#=Ey~I1hS(DGn zO_m-Zxw9n30k6NwGrs%B31Q~z0!iP2qyMwmPcsrJM!p*oCL40Bg(f0 z*B6tWS5bO+c$>S_V3#LMZ3n%bd=z`T1Z3RVg-0Mr(SIDeR1hcX);a+Tm$RdqNbX>n z+Snxh3+iUy9Yee%aNwgL9pH5l%so0iJyaWHAK9EdR~@`|n_9}UU&>BB%}zf3&@c}g z?{qt+Fz~(j{M_acm53>;a6~iw4eci;l1+o34X=@D8##@%&hXaV=z1z>Y1J=+y;kF- zsi8rFkq)7C%yg`Q&HTki_awO!FB%~}J{~7_;HSNfgdqUl?v#{ppWX5u^vYU|Q`le- z-aGq|AVnJuu0t9c>I$o0jdvIu&wH5!ymZ3x6=ujvhmIETZ8`6eQLf`ld(VX zUq|Gm+>k(^IWU0P<$i*@<#`7A@p8vkCC;n3fCDqT*+HgznD2yF$f}HBJK^5ajA1Dg$ z%oc^B%~{ds&D8x|Y~NAgACH(g2X_otZ4v$KmXBz&4+CF}u09QK5*cmA9){FhE{z414S?H(AK{YJA5$qLPVGc|Qh?CE~@aVmMTp?75d zSxXCiOHS8yl2WRrRE!{%DObiN){O5k-Crg%h)Rh=`?;LnYjV$UNQAqgHcNSnaypjv`b}myG)W_CCo2JEU&@YARgFbp(NNk-veo*m z8rI(*gx&RU)#hW;s$3Pon~A{D1_3qGo^v~4thz2L?kozMeDOrmL*k-RiYNyXiMRlq z+P|nJM?ker!N@9ZBAR2-$bgs6TogA7wG@(gbQ=QED!arMqV7k+Ph#}z@<~?2QlYkR zwJV(cr$e~q`7$|9cq}WpQ8~Lursn5D_k=N@`xNTNY5H6VNYZS-%5mfdk!BvCTGRow zKrQy~1PO+(Fm-HAU--l6*99~%=Y}~ZsTTxd3Fa_BU;zcVInSL1&8Sptx^H02zG3po zz+1uj4*8^>a|R8;a2#9qe00H@!DwmBGnAk9)?^)vE%9}XK7sB;|;dWQt zzUJ{6bxZCe`}$Y z%RC8aL%8!zQ_?Hm%yrdfexi^n%Eag#fH$L21LnaN4HK(|!H1Ul=jEPwo}C;k~e z0AABfaZLhwgsThIN+-!rKkI^{Ov{V6&-CZE^D9H@jug_Rz61;_uzMqI$qRdOdSQk* zP~eEnG?g-o4=J=BL!#%_u#3-$L*lMu;M-H6$OBDNFl#pytE@-c0r*e80FqXKg)WKG z>zuHu{wbVrUxtWpA#c21Uwh}dQI$7&K6gNIBVQ44DByu%xyq3>A^KBOSe=HuSgT0h z_6O{~2EKlCLHk1F$5c#AQaZUZCfEH@e*q!>gz<5LKbx0AcFPxuLJ=gMN}puhxb61j zqVzm4SY;~xn&P=a?|znnrZJLL60->5?ZEeb5xAI2`28Q}ieQXVx`m8UA>pI*NR1Jr zQf&o|xQ^4{Tn+&P4&hZ(TYF$*W!Masyg!oxMQ%Xe`oo4G)N%d&)g=Lt@C3GvipK)> z{Os9sVV4_H*uio!Z4;=zK(U0uc5hWir8h=UG^>Uo>}MCAq)U{SL*f(`jxN5@tkG@6 zS&E%L@F=J*$L3|R2w`7E<6?`iVm8uMp`W0#*Ih$7bQlOPQZaIcL(U-i_rY>2x-{G$Sz#F|IHTQF?Ke%SfOt#Qqp2EpK; z-GzNGHNG#}2=arRAYAevkhkp>pl4aiGVehH zYNtF=?v&;N#)P|?c5#eW*`hY@R*Cf$Un%=P>0@oBPH63by~T`8RgEuRI}Bc()|f1w z*zh}Fu6XS8H>edhnT#3kcSe@(cUTsytfy zZNqz8thfqaTZg{DO2Pa=I9a<$TBQkYCbKe1!C6j5kGoeR%Z0fK3z_zJt#Av1F#Pp0 zQ8ESuQ(>U6z{O$ZFPSq0wcGq_SJVrYFIuAboyhs$3(nWqPNvIlbM~EMBEFr{yVctF zJ5h+THq1RmoDANJ)Z*uF#r5VWbDHQGc^MYQWrwDAAw86!nn|whR)>Dq zPyCm?&m8TSb_iiyf!Mq0Q(cin%e?&6n^D8vCNkvEmOcU%hN7U$f!6A+v*8QM)2gF9H^?1J<|EQy@hnRO=V|ufH^VnMhE^0IMrL zGASl=ET25P5?$4L!>rXrQ!*F{|G|r#ZH}&b0BP(}B$R7lIk&h!0gl(}P+7guy=N^5 zL6H{zJ}skG$D*%C55HH&%jWrO4@X1rXIY{mePB{SnXex(*&;)($(0~?Xfwk11S2L# zK55%vYnJc#8NJ5YpGMWfajwuw^NVi4D_qR-=AU2BH1riiK74GrvZckglX?Jgz2|aH z_hWn>PfE!=U#!-9#65w-WYc`PzviU2e370=Bu&00nT+Zu8Qp8E=^Sn+hVugpGH$gy?uBAeTdSUF4NZ>d zb}j1Cn5Q4$^3}dff1%bD9nI^B0-CCV(g03=c+2!lL&@WdyD4D?kCDnkxGU2MNkT+Y zB)ATOf0GeDrg~Y8nH9Ekr@AGSj2p5y!llfN?Xy|FX=k})?6Lb(+34bQ5pG0srPYNh z!mK_%F{29Y7Icdw@K{pemFBgEg9XfO{@k%G{?+}I zlAhq`LYsgqZCOsD&g&&pZ%z44THw*`voK@Gx_(_lEI_+scmae$Dcfj{Hd|FZjhP?f zx$~uEsNCiJ)wacek$(T6K*LsQ^_IkAJYRNchJQxXJ?2gj_F>soAd<+0LIiEDTZE^h zKFM3P7%UorG{k)3P>hoaRIfUfr}1B^&(2YBuAxa)68ix|SbGzz@OqNOJWE@v7aMLD zUo)=oi<{ceK~DPzrr-qDef?r&?;;<;Cj(~nzv@*^@{LvKo@GV~4)95WNHq1>1rd$c zO*Cv_3undCUJ1R^ypuDvmU=pWBdO~>ij8)|6`Uj^v=Zy&SYJ8{tcle&%%tK+LkWvX z%BS*r%XQd_#vJ=5bK7vpQ=^a~EM1+9i?p5g+|qy2z^)a^dd6aKW1~BYEWs?pyyuYb3HP9lCOq;OLo!}KS;NnT}XK2R<8hJxSMfwJ6%FDQ6ybKxMpDZy`TQh*&6_GYk?kPv6;;e*i^Mn}BoeuwoZ zv;rBgVZ1&V7@=ZXO+ZOZYH?_JNPaT(y2g_*^|g3nGO%kgcFS#fdUYZGTy^yE%%q{X zIE*VucxLe+bWYJSFSlkDP!9lKe9ODCkLa-o&nx84Ea1&3SR^T!Ju2WQZBcta>QjD% z?8atfl1g}KbKReB#y<}tHGJH&Np3FEWdk;RgSCx?o4_EEA6c~`S%vbM>}YKs-sS?u zkGrgu{9`ChiH#baUnOSgrHe~QFwL^smXz^N$gR(;?m6-X`e z)6!Zh%2C%FxlHk8V<9SRQRyEOB}&tx?fMz2yxHE%wMUo&UH`6}oU0S}XN}h4fWVEb z4qXD=P0~8h4&k19oha}PwCyx5oOg#q-P-%yPj5{p#Dc7@2#!*il(A6y`0+$W;O#&$ z;Q7ij!0pL#{3~`*dpk_E^J=JQNDqqHg}<5>7nUqN9S7|PSX@N`oV4z!p^#|-h&2Q~ zdZ2UbI|MVKXQOXsdAASRi~tcMh&GflLGZ%k(P1}#pjl}~I6DN`h)?YLbHw4sP#}j2 zu0Bv5IIPMen4WG(=S=v+*V=xiHrkw6mYwAfri#A} zZs~7!BZ9yvn_MOBxwRn=L+AVJQGefub?>LnMDcgx{GfNi&G$B$%}er+1B3)xCrO$W za(*Fj(Y|i|)?+xyD^Ztwa^Z~gbj)($VYsQwMB0%Zg#!?DRah^o@!o`vk>#fBgY_@n z+cg9{b?i~BZWK~rqB8i9ZGrJl`iO8Q8WvuvC&Y!HKTV9W?7>8ewRqQr@VAiIt`Q02 zaO9Z<(fGi7`31-tYL4&&-<}fdeXYC0I!Tm2l@Hv~+pX1_-yy(f@7L1R>oX1%8HtTn z2@<6JLvh>v#j(!T;xnXshGUc^oC5Ihq>FJV2qFpZ5$}Fu{MS;e#)f|UPbv)xjzOw4 zGx|w7pQIJT;J#@fk}i`XGpi@-KUtidZz zdPY3j!j}wd;XBUvGFiW3T#C7&WVOYZ?f?d_4=1(N3h^y=tSRTXJdN?x1saL)3szon z6f}1f!)e}qVy>j|6q-@r?rA0Y6L{WG*wu3!bHhuV3D1}|A{|U%BOGsry>ewt4{i4Z z6KRIL5PZ{I75uDc04Ih&frLqAC$b_F<-e&8XMapl{UMPIwZcIx3p^SkqLbu|YFUKspB3qou@@&>g#o51zRU4=(u~suh1ur_7&ywSrDFDc^9rxM(9*M#9K zJLXcT^J>fduwdLau)K;(t*P<+w5pnUiq#)$sF3VQtvM49=P3U2M~>PlJJjovctwuM z^?c2?#gMUNZ@);-Qtst8`zT91_WWt?$n?VhVV=c9HO~S74UT02ZA}PQHt42r$7}L` zurzq77LV{o`>irp#KALbd(t+8qd!OIrhAuRZ1&s1gDO07`juGmKJt+3l{vD|!gHOl z4qLo&Gic$hM7CQAUt3}kj5;ve)fUT~%e0Qh+c^rKVC3SEwN2Zc$ieHU>G@5YT>y(5 zakB1lkA&n3ov03mbKeYLVm;aBe?fjaaTbD<_Z?`O6d9RERMwLbZ3ZDj^Sy+# zgL>_^qkenoOT|?S?E=m0jl7ke*E+)pRUq3|n5vYDR)n%MBiPT{87&A-8r6i|69NAp zS7#N~RvUF|ic4`T?v&zI+zBoPN^zIs?(XjHF2$YTuEn89aEDTYJ3&sq|GzosTx9IA zZ<33Qch9}ndgfdPM(f4M^eD`{b1(fo;rOT}2-eN$#0kheAU$?Y#gD(LanaDmF6-Y1 z-&lR#?HJ6^LCroS|Ncq+JwH2`BZcl%-Guh$_9Z+#9Y4`XmgE)%6-lk0hCSci-#d5X zv-#sFmLc2r}Z<=HvFL-!clGDLih{v|*R1TBpqC|=VTwLH8Y{Qgc z*2nAl+G-MMO-xXPGqc6-%OpkXL!zRppKx6zkose}xHOp7;cK*fb^8GeLs^GkHJ{f= z+Bi$q&H*0kYOgk}ulA`veRora?Ch64&o+I9HyjQ*?MV442{RL(LEI*+^vw9oTi47r zThEIH!S?6h=G_6iv>Wa$#l;ehR_hq>;Ukpn!A<_SPVBjqPdSmVMOPp~i9KEnpAgeV zK?dS3*&S~Xk?f#{)l*zxq?9}9$75SjEFho5h0bM%??VKq1mF5Sg6ZkjP>k&=?(k|i z1j}ICZ%*c!{2=kx&kgbcBhAzQKkRzV*^y&NbNu@5_vL0gA)7sxr!h_K_t6W~D+QwN z-s^`YVLcepE8^eVexA0k{zCE%hcepRQr+t-6neDvRjW6(2dDV{|J7Uu!OG9=Y+F?S5#jOzi+hE2nq!v)x~!z4rUsy@id``DFoY?35bR-W z9F*Z8;`hv5fScJ{;dT74(61%$XpQnj{^mjLH$nFH12o9{h0ofGq?K0fWbL*r{)nV} z-zpy~8!1zMM5XWdZ@H=2*_$(0`)AD2)n*H?_w#dm5yVc6xRCfFm$^G=IN{^Q0QYQz zhqAHGFPFL85!yg2!MuX=IABUUy_MovqDr})D|u&twH)lXZ{Kd%QeBz#Cw-K3e);Hp zsalC%*1*Rg|2QOaKVteGgbdy!4E77U0`-WZ>UxBk%of?gho&0^$YS4<&5Y&u+k%A> zlu5KSoVqUQq zRz=`F)?rBRMcP3Ww8XU}s6PZDP3uT-kfBX$ia?F+@WgR|(9MPbboRxw;d-k7crN;i z#k=MEIp6o*%@%|gy4f{|g-aX}I%gRQMgv@K!O(_FQHj#Qt;$&;W12j)x==7Gytu&l z{8u?XKE3{bv;|HcdKh{wgN<5YrxbeBa%i^3*QToBNM$CJzCcfwt< z2uC`c@4LL|Bp8SRfp8HvamY11l=7ugJspJ4y;h-ktws((7?5ZsKJ^;$Fd%OHNeXiH zkES<*&=?KqAjOc7Gi*nvacO3G zlI17KZ2wsOePrhvmvQsN*l9|y8Zwz~YrINEaoT+E_wTpUdE!asxK7jhk!G`Odd#vb zl6QH?RTt8hen^A=_dlr4^D*{3~qCM3%F{SzFq^X!V87jb1R_GRZ2Z^;1N z-4s`~ezKP4b_#5JX2Ox?E3x(_$7!z2^NT@|qwb+!Tc}!QqULmvK5GH4S0+&KlU`a` zCk!Y4qSvusgAJ4`12rGX88z5K%-DY$2h%oaz9DL=xHo)=m~`uot7@h)kiY@ruBIZ? zP>2^9%-9H`JL?o7hC3S3glXCMF| z#d{_XwDJH}w6K4l(*(!S6faB}O)dq)(`%D%{{_gq2sRz)kAJ@_R1}4&^g&$?;>hLq z!%>d-@VjHRLL+l-W@{9{7$t16PR-pnEFLf`G-j`^dh!UtpGm%6h9B>|kQMZ#+=|n8DB-w#& zUs^`1tW0@Tb}TY5Ki+H8FqX<23?eQIo1GUF@`I=F_a#D;`IVTT9vi0%EGd_ZTO&we zuV?#hIFtNRX1i^j6+XF*TIsC{^XFb?`B(1}FPbO6k~P|xCVUF~J$}D)2@z@tk$edP zV+y`b3YgHDT z>lc!rAKa(E6oZr{1uQ;LMqn|a&>Uw_*l)1OLvZ?Red$lwTM+rwwDRsFsZW9;m_Lfq zs5yInX+A9e9>d^Vo8f6Ap2q@-6ob&#{kZt?PTr8!|4!P{4bjq7Ctl}Qh}z^_gE`{# zhnI6fhke}pr*1E6^0ECHd< z_bjcx%u`q_UD%{CRas?Y2B9U@sjIrNtu~+hT7xOK_0OBt!;9XbBT{wxOC45GWNVoD zj~HZ^Ck@K_cG8a2)zhS&-oXsBI>P$DcM}E^mv>>IY-|s?KSIrjpOFy^=ayB7uijHx-Jy7*^J@oT^nfKvyawWa{N(bujK>}Wg1P0E* zlOj{?H5TmR_YUU|ap=8xU*Y%mF8l|X+m>{A3*X$?zrzC0&_7Hcp8f}(XMkFmu<9>9 z?jR37z*s<=lE*jCy-nt#W4c?b|I@~GA-PBH1`^KJ^)vYw(9Ta@rhE9Cypjv`+Ov`C z_IY%?mP_?Q`QPT->r*{W|N9lm&cbn@_;FN#WYygYi29B6 z)LLX{vUt{0;nWHkAinZDVE?t^y?_&n_t_9|w_P~U$b4adduW@MH6RKYZ!{!u-TKdf zl;657DzBh$d7JWWXI_SUBm`3^5^~-{_^{<7sv7|Ru>B5`@9$1_PpUZD+s_SNrAW|+ z;53|yac%>T#i-rSV}^DcTwA()9G~($oQ@u?rWDDBD#KDTNec#4-toM<##Y~q?<1CA zYQPCNG?0BjiG7Hky;KPxA={g!%KFDg1k~v2Bm$CzibrOl_XYY5*PA>~aAk($kdntv z=cz+~9Pf6xMS%~IgY9P64qOB_E^*jnq!s`^!t|of57gnu>wX4`VaWmRj}RIR+|2fb zMqXOZZu)=SCG7WqdAWmL-X4ec7;{xIcY@aX3O$ZYKNnMY!W1LS3dHQUg2_vA!S;Q$ z%Y652qP=w&{Z5e}3+zqcZDs8n={wqJFXbQ{CSd5P(c;wxtM3l-3KMeMbVav)HiWS(QPZZYri!omQt zNZikqGFTUi*2=li5(~fi#98wlt7CMY<+&rddAcsU5(!XjLx z<~@x#e}CQAc-tXvXT|1mo>}TiX4zG zamaFngW1nmtYG!jbkxUg=2f@bQ}Qm&`kOWIptIu@vG2Y!6`UzHq0~6X~QH zXqDKF+1O-1%w-x*~wBBYATtfTg+;t^y>N$O6%NfBBPP_i+AM zqRP&eBF&zMs&pc92UUD68FYs;MY&3%Rl4VS$j0K+9O#EqzDyI=6ULyu>-l=nOwm8qSLJ+YoU$Fhx2)U)*v!Tmj?8iK>G`^I( z>2$5c&#jH7cH=gjG~Y}By%7?X+E@dzO$1C6y0sM=0xH#3k|DihO6B(BH9d)|-gCBR zN8>fZLTK%)pde{Gl8kxXqJJ4dKgYZg*v&u0;4iX{X~OzQH7Ht0#>@<|7fCq)s%MZp zwuYq|)+|Ft|Ax-*4gLl3iF7?%b3TVF>KmHIAJdmNp(ko8m1cc^RhX z(jL4~8zQ$2z^-bfyiNVdzt{Tb#;-m;bDMugQiPFle&@yB&$!>-x*PxWCPiybY0z$| zsI4?(F^BOOJhOk8x>+A>_9w%5D1L#`2MoTg-tjsmA@a3hI<-fG8Ov$5`bDK~Un^qo zK2rolGEwLO95hL&X)tKGh2Za!>A71c=4o*!_<21`>t&gx(%Mnd?&28gaZ75-$?;qC z)&td4$)c;RRkQ{e2-k|Eb?|;HH=ViFm^Zks8B77wG*?PmstD-PY&SJ;(@~Q(v3h>Q zIIr+F^Zsi1sEq(6HrT|y?Y}HIDG$SqN77Q4z(f%}<(4Yy5G>;^ z++gKQ$WB_QAi%H{-mVkNxSA-$=DuQs;1a` zjd3Wd-i!`?l(pUHCh~zDYPfKOy+`2GHM`Q4TMLok^YxoGwmpKs;`ifKEx%xu$XxN* zCy|J%9pW2$K`wMtmC=(c z_0(n0M%eqU!ENvAF8Bo>{xV4F2{PXK>S?+8L8yHz0|qlF=0F|j`G2e6ceI`Dm(Q2; z^>4V#9q%EIXZ4q6C%@WR_Dx@CuTcF{8{liV)2~q01JWLvXWl7%Z%?-`_uuiLiV$F= zLSNGchHjfz(*Vzx$ap=OIe7giQca$-Uk%ezVooB zd6(O6+#Ju=GaiG{C$`F(rlC&ip}x1%zUx!ZkWt0s5*t;8T^6}B^leCSA*9&WV*7O7 zpYaZie&P1Fo4Z$(o1yx7075bR`XC(W-e^c7Pm`i`wHe8q4xH15=JtTV%4qrBO2)rR2J1icDdW8+Z3Wc}`EH#^%|HF3=%S=O$u=bX(7o*P6uqBt>EhI? zblZya*U;)k^OgLG3oWdS><5d^B7-Xw7Ng|qqMFwRb)w3dw?@`jO3|jRrFj$qp~%7$ znyjsr48TQna3qgm>0xM2Fb+)cIT*l0TGc?QY!>Y1`XNn+kh=PoPwVI48!FA9^>hUf zX0gpVGc|x1ex9_sNu;zQJgJr<%=!Rtjc`l4$SrnKE8Bs0Te&Pgp>UW7@$>-YHn%-+ z0f=(Y%2L?>H39a4!z>vdI77KD1gkwuJG#{yOAMiOR>U2j!=M>s4_6%GOTNX8T#2Iz z)31(<>pK3+|1p;@0f#G1hg>|_7&VI6_M;J)<`~_uB(% zCf##c9{uf|#Bd=K?)`}<8>RHb(tk(JEN3jqswjDZYuw~PoM=(_#=_|~53}f>@v+Sr z0G4e;Xjp-3Om&o1_nXNIz2!%zYw=;G@Wcv}{rOm`ytoj~SQlIF;|uPLzDlSY$$FK8 zak;IPuyKJk;l)nIOrM0>Iv1IcA4|hd#xf0^Doq1}CE^Dcz&%tQWxc}Cj0L)YGu|{5 zdN|BKXnyaopmNC=W=Zp+Z}b606ykghj{d=?UJ5WO>ZbzwXWC)1E;X38AZr66=1_$P zK^>8o@-)Q&aF3NErPQ9Zw+j-dIkd{VFUmbSFrRH&a(@8#HgG1y8T8jGrI`eDU8#e z60?KA8Z_<4MXIpP9Q(>O*SN2qhnv_XL*??Z=(j+iv~)VR5wK?ycLx_3B+mkAkajv|9KusE`H zM2$<{oFJ8pQP-|QwNCloHw(1U7F8m#PUTr-nr813 zxY|Ox*x&Oxrou@xy#dyaGcZWTK>?QZLs+e0Aj+O*=1rSg)!ubmcT_7m0i9zrOw@sQ zK6Z@^92+`|7*4yYl@9cdr$pOSqInrPYdMerQO-!BvQ4bEZQvYi6cE9(V;JCuK*&Za zqi=@-wA&7SM&zgg@@UyAYms7rWcxce9Fr2=T8GZg#e4*(f3Jt#$1Af&=)3x(4Od8I<|ilm}-o!A7Q- z7p9BBHhxR2lI?o==0JY>J;i@k;U}zdFFPdh8wldg(iu`?JXPfOYiOcKa9w zYMr~Rk$Dr@hx(i4p1r+-;p?GyzGYHpz&AXWWZ(jo6U*F$EyWgK2R90_9uVi+w#@(4pUzH&?HSNwqZ}Lv`hF;CE4hba-B};~w7a>p$EW$z$sF*}!=L z{gh>^kFK%xv2Vo;jLf%YZ(9jn=g$b|&rka8H!}tM@#_}{8}935?H6w{moG6SS6~;m z-3&H|!Sb^KkP9Wb55_1BZy#()2ppdem?54#OZ-+(R_8*y8ATIosHTNd;W zD%f--v2VX3c-h>36@EL<2}pq6B0OwAu#=qjv_BmQI!?00>aJ=z^r3kqviF`EZ1_FA zdhQI!bbQ1>i@Dx7)5QIs#<(E`^pdb7t~SnVql{(V%Nfjx7)Gy(qeH5|n);?eSzxfy|V z$(1TBc2XgF7^>B%PUa@V3Z$|>?u#clFeZ~+7}PN;Tm^8mmD0E zU1SZgSaJQs*sT@q@`+Qse1cdKO2lc+xT6=1-w4ghNM0Th6p{7e(pPCxF(fJGR>0+^C7K6 z$j-S_!qXm0vdI?fH7E8`$5<1J!rO=cyuuwF4s;^*IYw=HyUyAA`VY1CzFh}hR@0t8Ta|c{yu}mjyVN2T>web+`qR2}YYuGc34; zjB}#XSHUD}&Wf>zx7L5G;Ax zvZ-L1MPO_$5Sn(1H8X>)YOFcU>!+O|B(7FKIO+z=(8kP^ovLGC@L4-?(^9&6DeNiB3dG_Kpr@s7tUy#dg;6Kl zXTMV_ashwpq$ix?_gefz9s)f+q>?uc_p?yu2I2cG_HxF&C>)K=9n_xUt}J#!99C=x zuaqvL{$*W7@h~^XcAOw5QMFpKN;c$x5kHv;L9P0$ti?Ll>0M2Nc%gVijQ~2Q&C>W! zJA)7c1RNUFY-R>q?xI8%7wjp9v}~1m6REg`C~v5ue#Ka{f_e_R<|;fSO)Mi8;pB{p zNL%3UoZ+PDf30rwWUvbg#y^IBvR!W_!AEDQNGDREqr3f>C)P|EAb0Kjv|f5}y)s!0 zomQ4)tJ0}Dq3AKuVAts44fINQW+7{2QT`xVyXwUslpW4-q8PJu8RpGUA{&*V%D3Xo@F0o2>`;rm-%7gI zqR@UG-E+J&PE}VIXHF>zI(o577T;i)I%9$gB^^UGc1e47li#U|mNt!w>OM_Cb>eqL zNk0;^l|SiB0^?jFNVS$>)y~A3gej zsudq;UVLGu`m!jQ+rm#h&tp=5w>vnf%bXzmSuimEvlP8V>!u~WC zIZE<@{K|(NM;8-dH2HQZ#dAUPyDMACNA4wj?@pKs)Sff!z|I2}h+T0i8BZO$QCoW5+QYUI-vQ2^R2hjLG?|fH~!#4MCc!O zpTQFZd0kn%53~Lz)yn{{A40T}-v7T(Ve$aR4~kh`v;lw4-h*@0L=C>*`V+b8WuL9+ z!M-w8W{}3OA>3z^2e!83(wE?v?Jk5}pVPedyYzK!A3=MI zjR~kibzRL#ChX436!d@p))%PB+a1&cp}}@!z{n!mtb$Wmm_VP;^emtuu9eagv< zI)HAe0?<=(Gh!oQgqdCpV1YqofwhA7yLZ!Fmushj4M|kY7sECr9>zoEo1Q0WO6|wc z8u7-?V;@+sop9>!j%MHa#Pc#F>PxcyH1lvdL}3t7@N$5t=kXfXel@C#fHF1e2O;xl zZrlp#I`71M*nGgs=t~fO#-pY#7KU0DhF4T!Fk=;2_jUfaIqUx)Bdamy6q%0FxCEOC zAC^)dFajGl*|KcW~(V zAkOW;W@D9yO!uVw6N`bDI`%HkXl$+#VA+bWyF{<7g}-k2JHB%6rfC)si8OHyP35V) zOY1MHG4#xe#}$Xo+|`e-VW;ez2+g$SG64{Mq}B3JqFNDYmx&Vf93&XiOraH8*F18^QdINjgrcrI;gnGLP>a+;y_03KkbS)9qGT z5+qMZrBf;isg;l>QtcR0R}+Wo@>G9GdDjwGQqv_@ALObhMce(MOgYe+WUC``SKcL7wdz4foDF(5!OLbtj|a5S zCqCSN=CloWvgKL`9jbzSk55Bf<$Tb?mfMWT-uHKo`?wO!gt9-+} z0r=KuMYT(WQ(>Waz^NBff`kXOIFZu!`NBTuHbJXoyZYCVnUGI zX?R4)sk2u!*P;coZ#1bTL$soGvWMD$*!W*fQq`Bx%5o=dRK$q7$r-A7+dxb%)t_ou zutFU){1G^BCXP zIW;9C(Uta-<;B^+FN%P`*?PTUL5l?OFBv=iK_Q?PH%xZ~fYEW$CtEZ#c)*q7wjC06 zgIfSC&@pssONrL&AMsXls0$1EAG@*FOC>yenjh2+n6n@LJYu#j^+mBXi2Z3>T8=8JBI4&x*k9p{&;5HvaN%TcSmXy5Doddy+A zRbSf_Cz%Xg(H8}e!`7bTyYMzPGKiG;tEK%;%I9ya>6PU!s;gG04kv#_e;gbh>}+*i z5FEX|jtF3T z^eAN=tCkhjl1g^MdnpUp*mhp3>C;B&`SDf>JOB5)AhG+|FKv{XerGL2%*LB*j?d$*M@6P1^SaN##dhw1d z`t*DDvV`ItPxNuu?UBRAq4R_%|4w1UAEMuWw_I>DwbOM0RkxSD4?-_&f8@pZ)DbZTq7EDpkzN5aDm0S$+-jK6Ti& z2QOqC%gP$oA*MzlSaUf%uhEl}w(FNk`I{yimJGIPx?Qz^d+i3BsP5w%Y+i+j7rG{E zry6ph6>WW1(D9abf%(Jql^2^vuFLA{bF9N{%pXNzm@q@56ivo z{ZlR9199VvzLpL1Ah7I;HDI)N*1U3dfd}YzwWaxL%R2h?Jj^6+b`K5Gti==mV|G2{ zBGYOWvf&3|+X}(5$$QAYk}4Q#@?)B5eVoeZ`xCQrAM5sXa~U;qd)LN(!GZ_j_<+GU9Ob0Yg%j@joIN z?`8tIYo5|C0;*PIq3#EK^09uAR`!ymEpS&jyo(`YR2Ny|^rwU?U};4KOcQf5hBE9wl6!`Zv6k1BeBfX`qmVRH zy3sT@W+VBYf0P+@J)yY2C-C14ziWPX;BNDU_*z?F^gS-a1z(i&1L=fT-(I{Io*Q#v zXzhxJqRA1Igmt-Pw$7t9k!zo!9ODdE+{a2rr}6dIpHPdpITtsE;2~~`!jx1wrQ!btkEkMUeEY)6XZ|qWvn5iLd{>&u@g+u5T9qfXxGhP z7W;ff{Yuo@8hlCsK*3?Y$y4eR+|ftC1ClKgd>MF?rm3H5^%b( zmUaMuJhG(LU>J;QAZ6)73vJ-!M+tg%nwD5qYcXV+cJ%}!AY1BP**>*(1#=4m_R>#i zZ;*xk!~{t2j7=1f?<4vJTud zAuJa1HNLua!^j;Y@oma1g`36zS;ddRYS&3CW>R55G!qESZR+N_D9ZXAHlOrQV~T8Z zQJU{_9;geNOFXb0epuEk$SvTW@-qcRXMV-?!+R?3PhF~IZYAo*GQEqTxzc1!#0;mJ zQH$36YJ8}rOBEfTW-3&jo^nQk=FK8cCM<;gPjQF`QA!N7C>xe0>vs&6SPW*9bU1Jm z*-90bUrW^NrCSGsiOcX?83q3>VTe4`Ywha+Or3T^5=8oaF7lrspi$mfK^N#g$#$~jTHOlsskvKfb zT*aJt@nW%DnRv5K8$*!pSHw?t7`c3IqAa1 z-G7m73X?%?m2tReTn$>T6*bHe@@3)q`nta?ObgX!$yb>)RVPO;QtlKM+O&(LoApNM z9GSWd5g@NM#(uJ}-}x;`NRD$H@(;>l*m4Dfk_SJ6xBJktIyx$>Y^7VZ!inY3tXG}& zC2_5-M=Ef>7It@jpi6V>cI6Uxxm824u)dLfTX^YC-Oag3>g_NeAOCV#>%pIwG%7pI zB!jvxO`8I~qq0K3B1vI1drSu3rQ6W2l4K=EL>}mcemkL}Ev}*&uIgGE{qzq`A4|zEYr}-P;^cz5RJ`kaMwQp-`J7Ss4 z4Bqj>3*~z6I1`d4R$wmb{|0=;iH5YUoogZ3cAt9pZGp;Be##M52rfJ`&yOv+i(0-GPLv;CqeIN1tW^wbiQUXUVht;UUJX{lmu) zlR2U816lZLrP!jZB6qyCWw4bY|NZ-k#hS8to)t-2TDfUO%SZj3=Y>1DkME5o6@@Sf z!Y`Eho?vXDCs2v!4%Bry4u`p4c5K)`s%bE=ykamCzhXEv>ee^B99O@$lfMaSv%$mw zqZ`3f^DrXfmz7yo)SBDzt9|FfCMFK?g9JDDc)+-KH)7`SUJQ5M{&~M)SzAeJ_MDp9-A;^1K|U5&@sc`kZ!0J9u&GC9-8vIA36@84`g`ph~YzpyFR zGu!!%Y_a*CnJNy8z9Fbj=lRMm<~8h<>B8Z}bM~q3$*Y#ne+1-vn1{tQ(>CgdHufk> zIm`d_RcO*6^wfKX2tUs9!mswzm~+yR7k$h_%Qd-`U#pScQ>^8trkKnh4yLhlT;GqA z`TNlpGP|!4up$p95Zm-^q!B_tk$k`W8|L_!f}GK=J+AwFj}Z&%jgnc5zx-PseyhTl z`x*HkC~m&yql`=(Q{NKK^xgU*gmTpS+cOnRX0Mp->%2r@R7-dw#>}qWyb!Kv_WUy3 z2v`+<>Shy47Zxp;jodPHk97oB%--WaxYgd&ee4Z5anX5Gtb29wnfAz@Y1>;lR-f2A7b?}IgyH26c-BbsZvTW?Bfsl(B^Hwd zlFJEKk3R5~&xmbv#n`^WsKu3xb0lz$sx0$-I0bRIQV2%q-C*IwfpbTV&9Y^Z?DC|; zY>30Dl7|UZ&OS*tx)4a66X5|V#GQ^g@H}z>2sSy;WW1yOfN|=(AGeg04CT5FEf+=_6o&6_+w!vJRfIVs(YvRp3G>r&b87C84uh`-* zmRh-tRvHR6^#mf2GPxBH8fjO}LtPxrPFcJVC|f)jc0mT z!cwXgHD`i9s8!H_^L0>R2~4&?StSwiS3bF40DuL~RRzCrfCa9oX=WFu?VF&bK0w@t z1oe;=Z+yKSzPx5DScCW4tmRy~vK$TnnOvR7N7eLPsK8bPtd2n({0(ID?QVj|ltct`6r zQthwu2g}u71dhr*=|wXBAxXwY>n#jeXxD8jHIk|&mM zr&E{x{&O;9i+4L4jekXp+J(!+Max8CvAR83EL^uxnt=Xq>`&I8cb6>B#J!C z-ewI;Cs>ZiEE$8WNTjKBQ@~X#!Bd-7-T9@>UWP!WpDYth@`Wl4h0uJ$CY$P3TEDM) zw?Kv#OXCNs@79D?8kUr4)$@y0d$qB5-z&N2Dq7|me3nRJ|6W``xwGD}<^Y+9PAt53 zv?AjH2G)9jnk#c)6#`-Ov@9}S?@MBVv=UPAJOP6CVpPG5%<{$Oqof;n^xx(vbW zJqxaxgFDB9i$c->*0R<477ne?Ff^Co(Yvf(^F>YDf~t$Rz~Wvy5o~T})88oPd?D05-pL!>U@wDZu<9ghBxt&h!{!3(XLPEYakG#vHp9k?v?FEm zN4&e?1SbEpXXP=R=Q2$|Pt!xCCJ{;c&4G>2)o`^>dUHM~?(_25mD!v3@tZzNV9#nF z_rpap3;}HerT+uR{j=;2+$61|yHxZ46{}MKeP!sqeR9C6dtLf^{L({pXbLz92wU}d zhr2L%MRzD!6|gg`7M(^R9hi|hel`8CF&j44_YUd1iQN?)V_^F-z?C2x{)^n_V}kH4 zGP&0dmC)1Qeb1BC zB8z4?+UH>GQ78b|tAW_S+xzIRDYA}#+B=&(remrtyu4%*N!Bbu?sxSmBO&DC!7F@n z#cvESR_mGX+Qa6Jq#=A^1AlQ0+48A7bvZYO1-Et1;?KIoX}L`iAM4+XT)&FU8Xb1d zT1+J9I@xt@HCZ%{-VvA{c6il1YCkr4M2`GBZo2L%6=AC1$90V}e`wqzX1dsod9HW* z=IgulR(%dVV{zM2ljoXjb&Xey z($|%C=)cPDhFMg)8fj8VWX?jrcw#r_{!y&Pr6k#Ir5%#^MU^Uz<@lsa#qvDD*NEUg zs)Rvh4eLj(gqbnfMD~FtC%;OmBejfRC^UPG^M|md=#xmc&(FkPWMV-3Puio{rT=79 zjZelFbuWr0n#%A<*hFO>|^xL50Z87!0!N zzMKDL*?>u%AzYw$gFI_p=R7U8=#Q6n&ad7K?1Z-OpxW%DSOW5g4+GNZ!5<6Ks~Y8q z1-S)7$IpsnBn8Dtzn!xaGW8Yy{WPUUu|1^Du((!>I+o|6W@179bv;`~4@hmaJB;Oo z8&s$SG^gLqH_d7!R1nh)4K`3$rMCj&h*YV8dDz-YP3dJU? z2&(F!wQ%2T-i!ms7+ksu_tX^lW%nCsLTCVgxP7E+UWM`ENvF!})*+%WOIwNjnMBw` zlv)S+NNuQJk{ZA*EH6)YtH#?3=LsT0B@WC&1 z(*z;`4hA6@tK4I3G{2OG))kZceq2jg3Rg>yJmAv$owWNlDvzTQ*bu2x>rBp69*aHz zq++m(HQ=nx5Fq?W+jQODmG(;k6;Et1pSeM(<`iJB{?15><5X!(M z9YwON;iYeEy90+eUi3PR|G^V?zieLnvHUJvw?)>F6W72TqnMDRMWPqTlVmA*zGbpL5KV79Bo(9bxDy;TeJxOREw+I0m(viRYmeNvV zmB2-iz;VXHDF~T+WDXsk_wCU}j-LjoC?d`tpvTULiKz=^5W0>@U8+$VV?UdO_T6 z*YHEnJ~)90uwrVFOdAf3xOpxT2I(iBH@k*Mg|TzdyN0gT>KaDwm-LG~-G22y^Gc*& zP23Mvds-odwDxTfgc1^MrF$BmQgt`bsU&vW{FjcZ_lPrVON-%+yd%`JyTh4p;+MbC zK=G{`n9xX=ka9_f(mgH$jDv2LSoHR^6-F^K-rANiSY<)pxr21P_&uie*fd~ba*{vd zG%;lhZOiu>{O^49?d1!+Bh<$;lu~A6@s87G?i<_T@lN&*5e=nsd=#+qN0De$kG`yXDIC zACk1;J9%ciz4`d0|FE+KAs?2+6b<(|_k;0xc_C~+1PWg6Qy4}#1VFkTm)m;d9A3`0 z_jTVdzdg>o@$M613dIWsTw!I5iN3B*R}WvXv~3I&O>KAi`(v^}UUuLTuEE<7Xw1=Q zk>tStn>W-qy8A@&ra--z!IsEj=v9+0uFx1Rc7xANj@^{K)b!KMbLNcyXX{68Z$!;? z0M?S)(Pr|&t^8_PY&U+Q(C)r2M>>A7`JM1{{OM%;U1X`bv)$Px+40`hf65!(Sksw* zsa-o^ed~+Sz3uRI)W-KH-}H%3QzSv>o~Y)o!+%w<;U9TDel=ZAq`u3E7I6DP_@(yT z<-?vNCr=I7Hf@A*^Km9zve-L{X3pYc86;Jm;xB5F@&Fveg_BxaJ z0Btr3czZ7`Vg+hEfA-zXmO9ip&Dz8jn5^Ej30^c|<?E5OBNdf+ zn_S@-+CG{dOk=8=lZ$29k(#Spulx-LfdTG4uukT+&r z7q!jtc@pmh?N<;93@m>uaxx-+zCxI4xIxeBMRpp)n-Dx!-4IFOgm9zQl#GAHq=D|3 zvz?~oOzRnk#$1cdhgaTE7`-fdsS|Z3Q8&``4#aCU;wIf;h+wj{I>jl|%56ep6&lj1 zoM=jZM{$$GAx?wit zhi5LZ=h~@VkwmE=`Xq->;_>c@aV~)=^cP1f%9gH;jr`b?qj;L9V!kZ8b&WKmk~QPe zf91J~8Dk@>xG6i=BL5O|nON6G)>=SLdWD9+LQO%lz?FHu9{Sqm`iE(^*$Hu`Ph9DGiSiwi!k>VjJ4w;pvWPG;3t6s?mS^<5~RM zrCROM?9%?!L9C=ty4!sQ&bD8))(3am>aWk#Ztfjs{I+(3F9fNXK3U^h~9hCD>v#4?USaMtBi5#p*lJuD(jgtFg%!@{{&0*WM zti_Vl6Rv*>SD6d22HNN-V*O?ghPVGYSu0(^4E{fC{Z&w$ZP$g1;skehCwOotxQ0MT zaF^i0T^c921a}D*+}+*Xp&NI%ZhZCoe^sk$ui7V^zyU|kyvLklTmyWz$O^gI~o{*#$9Vv&XbgJul0L>73C&MsW=~)NkGMs_oMnTYqqkW9ZC{KnfB?Z)Fu9G4q z-m&jicIt(-KZa*ME8Xs9OnTm)eSA5o$8z-bCvQzx^t9jg=2a)Lh#{#YMZ>qDOCqJ) zBkkud73HNFF~*xlEw(er27c)5MS!PZqJ+F2rGxQY&Jp>^tc@{P+F0kS5SroTpby}GJYdk`WFcOb*aOUqLPTD+Wpr;}0 zy@m_lt#cGi`CF~F^XRC8#1x@?wJXll zNSR=Hvw86`$bCXr^zwt;)}q+9cDINfv<^!9a6bmSVjZUg9k+|q0Zn(0A@1ltxwFGU zbUGz>oxI1(e|$}}`H?zj(>350UD22-2iO9T9lG=vZQZ6mj9A8Wqy*f1n0r%lhaI6`{}?py%6R!k)jb8kOB|Qt3WE2g9DHh3`Fp7dh;n zg}MJztxi4%ObYeyXcF&KbpJKT8Lcz3v-RL%N&L2?1mJ%azu}_vxsqHG53;24L7x`C zMj+~`?t;KIRTzbLuJh9wAG#x)uZGURKV!Fe2mn{w5T`}&(Q`a^NH$)he69@knGUe{>p}?f=ifoZ6;C*SxWS+h)ZuA-5e5>^1}ZoFfE8bBq}roR81l@wjeVnDe={GriH zkNx&rz0Je5+)9TE;h!;3O)yh}B{8%f4hFYM_;>fc4T?w6L|Z;K*@j+WE#k{ z5{Pdkm8#fokx?{=4k7*gXRduo``@U{;sh5 zQz-bY2c91-$IKTospQ{BqvBmDBooY#9#vU7MPr=7I16n|Tu#R>3$-axX5;j8Zqg$& z7_`%(VK&di#h`Z7#U8eQ26!DR&R)yV`+RIclO^oEAJfbV0R5uS!R%@CYhI>k%u_ye zSbF1qd9|db6dXl#-0k_K5T+_6?1+EvV(IjiACUfCDSzltQdBHzd=6$tV8-765U z8yN?di4)XpWuV?JrysiX-)(U;ie>CVGx8->gd&XO%21sM)?}I21@e``=@TeN&&WT9 zj0AjluVQo0)`vcI+&6bp_>)G~)izG{l2{Cw)o0p*oBM>Fr)}zY5i{`x;3FWKQ_Mm#wLl*-3}?1+w7w5VFQP!`ew{+lgZSf%&yiDDzXc zbt4QlnQZYa&4!?zP^3#!xlcNsC$Xh>X6iv?l^>Z!7YaDxFI4#{ zDHNQd{FgC_mqeZI)79K0qAB~00^Bll0z)EQxo&LqSc)unx$YzXTCQG+oPTgwsvn2l zU+x*wuncxQJCSuwmc{&kI^icjUrmu58z-V!(qW;{+O{zH>r*4YNFJtQFP#neUYe0= z!omj0z&dY47SbgByC-N3EW(=sqN9!+r&7A3nevs6n;rho7%`Z4mcN=DO!f%|4W1lpkV zmO__2ecG-M^XHCWzyWrL=Y|APAKD2Bxt};COMnJ-2G~OAf6@v{ZaMlQVGh^wbD&Aq zrVHXrn^Q9j$0UsDaR7+M1xu>*Iz_Nx^|93f0ff z{)pc4!z-Y(|7+>k>MJApZ5vq=AvV11el}eEny}(Z9d`TlW@ShJAZyYOROpa9qq%0S z@%Ip1I!D!$WHwwSiA)83fcF0drS|gpX;ocIlGrMn*f=%a~O=DDLEqaR~?qGdGf=Z8?H4 zEU=x4;Uv&UmskaU-)i#zOv$7GJJ=V8ccTB`5fZIKzFh+`Wm;-yF9=%xgTnQBO(WMR zpe{{7&{T8dwaZJpK_onv{bKD4i5fvGuOsF};1(dT6R#;4_{*F(k2 zwE!qr?hF|5S?=ns^EW1@l!_Hs0ZDHl@@neErsrA0u+u5K$Ih@sYoO(|p~t2h)K#_a zbUWF+^M*{>^9lyVK?|*kJV1T|7cH;+8@}@~E!&pMyWtWL@vhtK%PlHsB$os<1bTm! z*vbUG_`Jk9yimNY1K!DecOAMS8~|YCmN!d*TcH5!HzO8`N!hFEU%g)hHe=VB=OGX6 zBpxVmkSZUiOFyjIQ}Li-Dj(9X61Q*#g}eX1SarapSt#4nH>WH42m)s_oeG*6-~C~w z$Nh++M=vb|iuN$#ojQxqEuD>_Se&6IUP4Js@1Qu#M##3G=(NXbXJsNM>qWvjI2+9^ zU0YXrLtk0-`pQpJv`dA)l5#x5%)m+_*H%K}dKh`2wA`c*yY0S_Y&Tjl<5cs_OIjsuY+lfjoR-7g!g7k-cR_d`yCemU=^ zobn6c0x)JPTnhflVnqOB36+r- zVqq6XzRa|>&)T?2nw(1g>BL)grkne5-m&MH?nj=HkC;{hlu38VN~Pm)SCJNXM2BbM z_-uDBm)}LEvxfOs;GbFynva-X`e(>igE#tGS_@%7Nshd*DCYX?WoqT#wc~Z-B?C18!ce(Wc;CIQ3s=F4y zwlKu=YnL?Zcew|37cdr~7B3>2z7}2)w+XlqXl^ZW3PK#-!dLAE!)EOcs})-wE@0%1 z@P;`*<1DyQ$eT%!d4N7CJjY4%JK}P?8-07I$Xs2qusdU?G=Hu5IxRW?ow)1#q0X#6 zss|7x&}1{(9YGU5@{d3Od%;;tan4~AfRkR22cf0E!s3YCKP z;wZw9Syh=Nj*`0nDuSES6q0Ub_8y$1Z`Kns#8H8EgbY13jwL$^W(&F;&{z52z)t0e zNB+B^wOj2#2^}oz*mEf>mBj8@tf;JzMk!3H{PV(IRVpj#g>f?`GxD)aPE(zM8Y&t?rxy$D6*Ek3e+!aOjdL$1y{t6gt zeS139@e%vgvW@hz$0X6~(fw?|0Z=3d9E!XTJT5iAC7^A+KY-ql0JqJ6IKayT_&S(M zKm4=`4}ojcXbi4+!e|WAdCHME4tBbJ?g@_DnH|pA5xqT&^1OIV#oj0CiTdB(8k+05 z%9Zpq51T`K*tlwV3wqo5wCZZT0^7Hj7GX!l7R|)3IS5>ri$^Vv-f6PiC zaWaH~dB0PXk^Js6xhrONm&|^qEt%%|@EHA-xH^E^SaV}n2}gSQ1#a{%v|yMAxW6-E z={NX@(0W8d6*KJd9;8A1=a5`^TABEL=gEOj4rIx}#wj+Re9D?L{qNLg3Q*}005+m& zsv^m8s-5<&?LPF^6x#)zh-*dr{qKHypWM}VGxu7dZ{*)y4wATh^vlh4kb54(&Z(S! ze7s(6qZ~Z(F?`h*-F{^2K6?DHEd-s)4a^K$V)dLS-9tRBL(e;}@(9bM?>Fa0&cNjD zRxqCg@^shWvyRIqIK6&rJ*8?A6lH6$e%q1qfMy1!h{6W?=sHz)2U#txsaJCsES?37 z%_0_65}7t)q~yRdpZ{9;s4~+C&R4RPPT7bseMV3sX|yjq5^{;KJRw|TQa8?(^cz-h zn9K_GcZDXmD~zT^l`8y7d727WHzF!X5v6Wy5)@pLNW;`u`7yu~AEA`>(7%_&W2@H$ z6t~Qmx}On)>wJcRZ3Fv1BU}g{i$Cq1ASF~$NXI(C(JD(6PXl23XGBj{1#LDoN>8b+ z$A;!S$lW^Wm5H{pgn~!WsQNxVGnzv!*Cc*u7}AzAT%Nd-S$NUA@mLf6LSDE`9R5KG zW<)a+7m^E-x7Sm(xn&=}3(2XQP{>7C6CTqpa#MXyxT_ zS3~7HoFu3uE?<9=TvJq6IEk z5$xkhIBh?qxyX^mv(@t^q`s6udfb9b>L1Rh6hgs}RzAN%DMgBdhQP3_57BMNcSSYY z#`q&ySbI}Y#)(VM~V)m45_!Rcww1)>BSmBTzq11e+(mLO0`4iiKxG-FeI(={guP#*HPP0;Z7anUne>|XHOzl z@5z~`HN`8bnVon@U*)H}S@l9Cy|>%!VQ_T%11pOwrnKTUz9KCDQ;s1ygfV|ICE{CC z_TOKU!C}f9b`SN*UsiiW=~@WVDeG+aM#||{SJa2K1Pj#0@@T49CXRPa=F_W;}n? zSTfagHAfI@X04#HO(_&B{uDyQ=_`g&<(=l(nAWCRlKU_0QMhTkxU1~Wh)>TxPRFkv zSJ&Z}CZ=}Sz2WfKjz`!mvTo23t4M%i99R(Pjjy#-_*-3Dy_p$MuPi&l_D{-N67d@} zla!?w_Ln?pz@dz*`ZDqi$gs_7{)EbgVq`>{=!~5M?K39YchDEceEhH#P|C{@08gvo z$i+>9Oq*DnTg#bsaCL7E;dX~wl{mb$>UY)P!uKv>r6X3Rs2|&fxNtJzaIc?w5$y8! z;cIf)}CXF2A$CiR0--6x_V+Y0ZQamfC_~I2E-n4b`O#Ef9P8N z{Xo-}?ahSdP)fh&T0f6o5cKakSoS zi(Y$kQGz^)b6aqI!0_cH-c z9ano;l|=ACL)^7O@9>J+D-E!;ePCT4Rbq(!m}Di0f48H%i9MZ&@)Zf`zzJ;!#e1Zvg`Hya$5xSD(-*Pf9kk-FK{yfB6H{< zXa;&Si41eLKspa|kXQLAhoINgSb0hx)UTqCz|M!AuwT3-Bru7i-*n z_U0M8@p0_mBAEI2zg_Xe+mTcPGeY)?mV*p%XTewYcEEHUxXU-!paI;*IuP$zF}}n_O8E5+-VkR^Z9zm9Vup;blLEfLfan*QZ>E4g#b@=FMCrrnciQP zA$F;Qq{9`0oCYrUe(Vwsyw56~)AcPT`>$1e9E7&MNJjX}Pmj8SRo%o= z?~4*&Z3p=-_H{3J8lP^pYo`x$I?M{rXYCKGonmdXpQEPQpx&?iZ`YRq92Zyau6sC)a|(qXR+YA?oIa{9;*T zy+dkUwru8j5%phW@}VxIKVm=K<#dHC<&cP5+9#M164=kHVNqJFgQUM4;(UKd3=u>1 zy5w!MRE1U>My}v~dML)<{%i=pWAojLSBT5=j1B#dLqXFa!oT*|>$AE%*tW_%tMJ6^b}b4oC}== zw~4|fH-tu27BR69=UW)17&_(!^!(3@;ihgxN#}IF93Wt8vs%&l=c48}zTT?2QUx~n;o^b?Neu=N z%y3OHMN)k-#5mo*(%+J}Jvi}lo!Ix6*4`Bkt%cj@QL(6GGut)hso6+XX-8#w^WBh! zOsI3x;-xeW;SMC?BT4d4n5>Wwr38*<^0|FT(1Dj0hT$TbSqfPCvSw=AVT3DUELw~tSLtcUvrhS zQCk~P_ZCJFN%S`(+05~jRXZ{!ba+BPdb5(k{`~CUjS+yLvuLAZugHGVeWCg^s# zP{%eTXy2wBc9Km`2LXWDadCkpQ+D9yDwop7pElv1MiOOEF>ULyvJD1r--Hruv^Z0q zQ`nbQmSfw(h^#O31bj)EA?;zWJk{xD^V?@(C(Yz5*nd@!Fl*4R?cj}z%as_|)Jxs2 zNv}Qcw1*mnLsatR>kfjwnu)$4#kVG4}JvX(@pQ9`)|2wf$3Q|m9w}p;_)58V`g;9+( zf2(_mskqM!?Y}0;pD^0_%r*{kJrnv9xLGofh%@`lO}pAD5?5j>a^4MK`|=x9DbHPM zfsz$zAO7dq6V)c8QCl1UOC|0T%>=G8bN7X56*~6x8%Or^0e`d;N(%BwgIDy-^t1)g zCSb3X*oW<3W-bhONOp8_`e%1Kd49o;TGmFm1df!8OjlehrCpvyZuT^L3}IUqZ24Un z9qKKBCn;#U8h2HGgLTg2u6q@I4}&#qeKS}6pIjc7Ff#!18%SN(l5AaX{^(r~Komg8)B)pMBJzV2T#4U@Q~`i=v&hmiZJiqq5YqDBFGq)oE2qDK>NV?%m8>J z`$qP|xne2`@-2~mRDDeHP$?J?3UeODHa~||G4g}CJo7qwou|dqUhRhYVw^CQ-!*$% z6J1>Z*ybjzo^L5)<*GrT?EbJj@WX1Dvscia@@JonU-32CQHFTjtq0}yS!FmE7H6J? zBMHlUL3~MM4$6qWS?MLYJjSMUqaQ-!gUN{9t79DJ_Sw1o5qY|NQ5RZh8>P9ePl7al zlee1H6?N{&BABMT5o>Tks{%~-74+4fs-g>}Vvf(U8W{eM=eMq{#6P=Wt0PirjcNLY z9Bc0(uLi^vW0H(;20>)9O{3=(ofbyTZBipiCi~_%wqC-tl4(~$q$icTE^Fea^5(NzHu7%bdQR#fS3zG$odmkVvXw8ksX z1KH#81j%!=ygSqXQaTZD$|P#OLPdf@UzS^HOQ#8oD)^h zWyo}1dw=9g2!7TSGag(^&_!VokB_Vzr~SNJArC<3q7K3y-yBNs_y=R~PK7N{Ia3EA zoZcxSartgv#gJps4h_XP2G6ZB+ltFI-|$kZa1^7pHTNFxPQB16#cB>;S zl~{Y6BtXCraLPx2NI3T>_q|cux&zUTwjF%C&pAJ1s)N^=;5@?}V*!uBzR}&abZI%; zGowv1Ie2(2!K-#Mq21|-nd|$4AW&T?1yqYLXm>B@Xrr9WqN(6R@ml+99jaeKgqx4*EltWT{(@8EP7Ou)(tdBcwgE zBt0yfZCm>jM(K4>W<87gRC==x5*kg#Qvd!%zEJfR-qWuXB1Sd+q$qH+gZz(9@TzP` z2v#84(Ha4z@tz4~6XJH4%+;LkMa>D&`%B+=4A0{CKJ0#kY-ytcMKU5Q<>#(0w$bfG zG9uWK|6BnR%*mstr99qYE+kr_;&R3NCdVze8yZc)U7en8>;87DxgpJ1#ke0mpFh`a zRYJvp>TNhoo8hGMH(n(eJdQO@Ky4)Nm6oZrR;oZ_%LE)4~#8>S@S<783-V zxCp`UwI#yq4s^K8YwfFW7?zcMW{dY2d_jN+8klLB;-f$graXOv41q@JD0pLUR28d9CesrA1P=iwoH0Msh;c3fl&bNhyQUqamd z-~qXoc+>E_8``>PU6<&Sd@X@we@XB0eRIzM%k#cZ)6v7S4W{zDlJa3*Y{u+{V{LEc zh^=(p8`y!G2%wA9e&D8$mX2UKQiXdz%`zr*A0HGy3f`Y z&C7M}OBwUxOZU6Py95LPJ)nxb3G6h#-FNp=y=_xP*nvQ=o1p&g*Jd_Xz}G90?%T^N z5$IlZ8~jF*>iQN(+wNiS2Lcsd)2@TT*ST*REfcqZXS0`Cz&q;O@H-?IGM4)y^mg|3 z9T)I+Xf(Xs^}tT!rStYCs|^Dal7O-6-5z7S>fe?2F3W} z-*_q1kA{?o674c|_(qWs#rVL(y@XE@CeDKL-m*z}^C=WeHR>K%&ZHwD?e0kfb1#Wyrs8pU)TF4pp zVASPAyo@%vyz40`D(x`-8l`33fxCNo z=v0vj_QBoH#w&G?$^U0YY@uqC-G6j|4nh+!!J3kkJ#=oW_-TxKur0g7$kEU54QsH= zn%3e8&m%z9Bko5zG&(*&aKy;b!{v`-zneNM_k1uK<)~8CCjo%z)^;&yeF zXnSL@dLqno{VEOQ3zSkyM=v9MdM1Q<;RZ*r1;x z&dL0H%;zJv?zBb(V^0KX5@^POV_~MGM&zqZ+Hmp%ml-gc^N;$Z={(7LZ;Q1s2R;SrIrrsIVK-5>%UlfL}P2sqiSH$G=DaVMCwr zXOTCPP{5O%IikimE(8<>ln8GSiN^=#Xt!=m_W)1H@&p{Gq2_)>Ms?(8K0QhR#7# zDx@q#8_*gT$0M3D{jucG0(N3fiyEN@wg?rEqPak+Ut4W;E=(zzP+pgG(=}>{;*=b>93uq)HuApcEZ&8XrUg7*?LQcpbjS3FOlFsM8$(lon}>FG$~2-W;wRKy%~@BKTY(wFI&fjKAsO- zNWPutg05CnszU?$kweK#yafevfzAaDO0j*BNYIM3sBhC=3kONdH0>3H=?skutW}aq zCIq;*EZDgQU2^1|yG}a$zb9EXsePueyt}p^T)ibfOkI7kcvSZLh$xtx)g2+4r7|^G z`pa%re5wU)uIHZ239n%Wz=Y_p>;~;VvFFfJW^p{-3aHCXL!%870AS z0b0N1Ri`9GN0ufk#UbS3#4GXMI*-%s?;SpZ6nb%g&Bl9WI()b&k1a6LjD(`Fa>WL2 zk(+A;#eyQoq&nU%d^~-=q63A}Vg;~@cP3xid?Mi4f;5(~{RT3h|6C(U4;z&{H2Nvp zcC@83IMNz!yMKit@&YSf>0VTa&)YkSOrfi;U6{cro=8^n*`xU4MH^ z*i&Iy-|l}UMR-X?=>K8-4CGtY^ZHEnj_0lQP6*I^n+>~t4}dzK-U8F!4{@MUWk;Ee zr3kLw-HxbF;9w6W;hs!BOV|mQDVAb5U8BVD<>=GddNUPMY_5!{FWk338jdFmB;Jt(W`C3{`h_l;Lro`)f}cC z`z`MM8hnimxH7sndK;(O#(KL2^aGw=CGbhQ-obz;&W2YbSrFi{8XEjKk9$J^yf6V6 zmmc=(ri{!+l^v}ur>-nUS-Jfps{MA`ArBsgL^TMQ*DRZ6HW2G~i=A=i0C~or0#`cF z;eZm63l&q!|0xcI>$WRELlgWlVSAey)&caBxkVw~5Q+%+f4;VLg0jzuAn4 zx5+VO!2IxO(L(``AgW(8)}pWol!(oRS^Z5U@EST6GW0@!TER~C)?1P2hPv4ipn2r< z@^<_#PEfWY?~F`IK)Yfy8ip*&&md~$Q*@*5Uoi;#lT=D8A5r86P94Z7DY840#*{XC z<~?vqoo7p4E^y0D83c>h1e{bUes6TK-Z4o)(O(n_JeYzho;Dhux#6?2?r?X6tqlA~ z96VnWn-y$(LMqHO)!SYZc}(VkBM88Q8f}f!T0)i-ZJ0RwMZG8pNiDOx5Kb3_8s;I# z;~q}uqdYCgj}vs3)?F?$;Q4xQ!n~7g9Fo=(!vag(FPnI!9uNI{D5l3JU)c0JW0a%? zl-7{ctnLa2jwI8II73E*o&R9%Yf7-Ni7zzV;{}&CVC1*@5cl7fw}7vW@-6L1*f*uE zoH3+l#pIULKeHOtPfEb+8Izv(yBv{c%QH0^6h<9U>Y;wB`#qKK)qs2ixq|zIHB9YC z`1+>?U8PrPz3Hjv8xq1l6p(xO&F#sIR02Mk`DN)uS}#2y+a+s)6f$|09gQi9)+ zbfb%e(&S=D#GfecuZO92R{QlF8>}7Aj{NCMiV7o^QHp)O&j@{Cp|H0-TGJJlmme0F zzxYNqzLG0LH=AceVA`ZuSt8_SWjFh|XgPmtL zGV+m4)+t8i!&co1W72oN{2HmSjX7a+qUA_CBg0*RY-KSbO`66U(osa3N3zr(VJj1J zT>HOAndy`waBDSxDL`5AMiT-9Te{5@J8P@{X=w! zde*I;H~T+&9vZVGs62mM@n$A`dNAB*^FhlM^$GA<=Iq<8+l53FLZ;f+p^gx4Lr`i^ zGiEVLEvqq!N{8F;r&5BxR8M<}n3y&HB7yO#ESJAF|f&JV`4{%Wz z3>e_!aAVmwY_yvD0GDvvHHz!0RWS15jWIQhkXDd3SU~a>@F`iDM% zfxZhy!U1;TljHT})%{5f9Qdn}gbb*)8zT-f`pM~49x_yX>m{B8KKyTm1)U2i{5+;p zS(4s1s5_=+P6rFee5*cZD=6d={&3G=ik?}sVH`ZXsD?Y&y}bi!9v=9QWupqy3eu{o zDb&daf}V~NO%9+~4vqFMlP_v)+bNJQ`@~n+Vfe&>+>>G6kTlUNyf-z}UpqmvTeAFSf zzA)DC2sv-??F>3wK6^{_;QI88cw2Nz4|h@_(eEFE2b?A^PtvYm3_{$E5hnwq)DX31 zggZj29;1j`9Vr+cU>nw(#8Xz|q_^VVIewH^@8JYiAg}C6RTG-_ShaqNW zbw(+-Jb-$@u^DRVic7h6Vvp3@nO174SiBAgcdo?~s*aXaI6V3o^o z^?`I9d5bu!uab!>A7F}uVQ-j3^1{r6`J2zLoIIqGYLSrYr{wb%6Usdd;xy!P79)gsEQaTKq!O1~7e=z&$>=a?}x*Rn-!Km9@Y zNc6CWypeZ$23I(oC{()%?6SmZkb4nmQQPQ{L>xTGgIbt*aETgeUjhgMW}*oC(OF%V zyuy;oFALlw9k(LQ*nuM(?QQi8N(pUGnhL-5pB}rbjXzW5d3G9Rt3$&lI3u$0`t6eW2Rxu}t|1IZD~ z+*Lx~Fnt;Lqsgs*@vyM_aJp~NTHe<=Qu{rLf!%Tw^~lic!s?MMp_h!lW+S>!u8qnj zD)T5ON&jXwaE!1G;C;Z-=D_hj0hfyC_}7ldD2jnA%CM-BNGXa8wI1zDu_~;?cnpOV zZ$n}JVxV_6MI$NMzr_@_upU_Skd8=b*NRPc;bA9#i$nxzLcW)MzAwZ^S$K5%W$f%oI zpLhSH?@I*{Ic18ANM7|3T%W7v^3{uQc2b)6SyDP^LV5^79>_9V@#`OWtkta4hIwt( zzdqlO5iYPSmTHvIEL&|kdu;cGGU$s6plOujdWHUnM+?%gEV9LBclF~?q`>KxdYkL~ z_}waApipxu`kyz!m~Aq1*)JK3Y;uDO%8hOxJSvIKsN-4xzeV)WU5+$!MN)pvKb%m4 z`vv~IfQQ>LviKk0qVD=w{^Eb9O;;GJ{%q>cu;aptooNu8R^eP*bzgReo29~PxGQ5b zt1OiBttMeliu@}}Pwjv&`IiwrCUGM9-~CQPCUyPkT{?oq^$GBn+_mp2NDm>)kDHVG zIbVxVuiF^`aZG6LlytFSD^9#9>-`-7UYtt`MQYsIb4OgDNK&-@z>;*?iZe5X1LaoY z%tygLDN(DTvZ8AbGPJ`I(sI=bteP|3dNz*aE&X{?Axba*AAzEt>`Uj z63N*zT*s64v$gmua8sEL-DkymUSp|s z+5O*hn{$X$3P$4PZuobjA60i|D~BUM;*#WFXYSTiefQw}>V zKZj}R&F|CYH0%F%RcG$ViMV)!-d%dlT}&(WmQvl{Ja8Ue0_N| z@`VRnFFNdSmhL-GgPxYkq470CqTdrnC%b3HhR>(KfL$`s;Ij4my%wlgB8#X0 z>oX_b|J{Bj|KDSW0?lCcH}o$mg^Sx^Q?nSIl@uvclq=rwYRy8k5~4`99#p(P$=W(z zuVTJPUYs|e^;rD=2AtuR84*Oj%sMH<3 zu*-!wrizBw-Es6tva~(O${lfL1UGGqFDA2W`hsdOCj6`8ZZD53rb@5OwDp}z1nzj# zo6gen=BD(W7>3I4MBpL|{EaOX zt6Da*wjEgHfPVnQ5qv7yB2OcnONBnkL2d^Th_g*t&`5gm^`Dw2IYfKEey;X#V_K;j zj}PA7NPm0~+@Cns{B|AZh{GL-DT2)$5t+8msDg`9WqJLOG&%7P40%c0)Jr^2NXT*e z*n(SCxGl$>SItv;PT^Kq=xvLdDENGH@|Anm*@AQiixY(W{2{kk#d z6SQQ_3tiUAiJ-;(Ql-3>vK68g+mW zydZ5L>oHKuA`7|(_uB-jF>+Z#_%qt51uD^u!kP;iYE&-qanpF5bRe4L&=&&1>B}5{ zzu%9^J1-do$NGqi&`;k0tYY;<;ERoc&C^tB+tR^iBQK01H>KJO2R<$68` zUzKR|C&!b!kK{rW!QMqk7?a+-%wIwhnlM5zF<4G4Jw+nrQo0Zeo%#smy zH-2F+HNjuIa_9M%nN+IjSav|@>fY{nZK?os%I9o;Xi->E1-t0XV54)zUnX^kr+?9^ zIR)iS@bl&utH%CoW2{YaNXPEs{;u)9(I=WC)*AQR%-L&d*9-J(ccSG-c}$Ke7;rJv z!Ejc#h2AGvx&7z0Uk*}eKDFat3l-(t8L6+es*Hem(k-N5^a(2WwVuOmIl zrF#20*EmSVPE2Jz{2KyWfGo;UA&C^G02y10-!q}O{{u1D!62x5IB+0DyQ9g13AjcU zC4j}Wn;fj@d2UP!6ivGhg7JTK93riDBFiQqPw64scTj+dY779-qMYs*BC`4QpDF8% zZ}{nGUZB-%VbJYeCXjbH@oF{TBs`NkP)+uh%hz4AL~Zu#KseC0x!AmoM3UGCoc4Uf zrnhTBCQd3>e1^NHXVZDl%2+5SJ0fhM5e}CJ{D{?#a@UqU7G>o};Qdtg|9e#rLS#Q| zb-#a_aeHvMJ|sBR>FCaWzy}z*V%1i9s4qMo@hI|d_Ae`6?127?>4<?X@n49A~TTU(KHx=^1e%M#jgb|8(HoyEQVivPyf&BK|8cSJTjl zxw+xSCm@P?TeDd!;b&q>eHyp+g}=E)jn7Vw`uq1gxdcft&nFZG)v3=vy*aq&oZ}NS zLidtX1_tO&-h1&@y38bip0@@aPiyOtH36gET)+EFNPRbCNZ0yM%g_%E^!9KHIcPQ{ zNbh9x(s}XEws7z~2SI1W8(ZN2zUNZ*LI*xnve75qq4>`e7B*RM z8q!pOn=#JGn-H(pkecPCTzUZs$)H8)yh#52r1WevOsFMcBv6srhcWLqy3oM}F>3ju zSFGuShB4;QEHp=(GW)43dMbjzlt66$a4XkfaO~CcC_^_a_=y7Va67Hzvp%k%wVpZp z*BohqM$2P=tzQzM4mnVmS&wj?6u3Kp-nICc86poYrrt%%SbpPqaLyV;Sv;I)VGIoka`59{88AYgrDJGW0oA{Jr zCkA+i_l&oDQGf)u=gzAUYpO6RXP%EM^rDB&TR!Et#U1qCVChMCvF+4w|1>kR7FK}7 zFqYAvw%%s!j@2`;-}wstDErmlH9j&TuzBb_)gi=U<953^-pz|am=IOlip`AS+@Icb zU^3f+xm*!vPE3zl+q9A5X6oa5k12xtc@S(JU@+gggyDC0I%~bP$&vHioasgW|z*n7St8N@3WL(_wBPOMWDvOFScPWkhM!$WJVzU(K~Y)wIrn1-yUyP#$&}qpc=MgkB@(!bbFhUvwOrm!eqsThQ0$1P|UATw-hIZFcJ_wf@vS- zm;so!n|>Y~Xzi*r(;zs<F=?dd9@e1o%NQ+IOGgCzvheq$ z)&%#ct9&UN3RvIg&ld9y-?>Ah5b`5z!J&|@%hy0Pr1AHpBGX;4$(;?iVtYd=Jt~hj zxMx92%kLCd$2vm{YLTF|$L|6MdaisK1$>&d_1f46~~CoRqI( zaqe?uI`a3=e7U8+@Cx0(E=0%7}O4m#f+luUSPY32`P^dzc3 zTMd~L;}37ZVcc>hdpU$>dm7R1p~*)&CzqY|%v$Pk0qfBU(gxDey3XrQK7B`9dT{6Q1Z4+;Hvv#53L1smNulh2Zo-4;AN~^m zMA4B&HMXnh8@cw;GkEP|^UDIg7-mcX)Q2i(jpWf<_@PTI6!Lr*Odn8qI~6+oH=?`S zXM1mt=FJ-vGcyJYt8WFRtrW7cRMO%`c{+*E5_yb?NNm@>B zthYpq?M+r(EziBl#lTw|Uw>i)-zQ3+lZ>^#&mDgxQu@wVZsixvyN0_{0CeP4&GFMI zi#@vI&@+Ne1 zZJoOhFHmW0oF67O4#G-Suo4T%%^`eVD6)nJH~D#gktLOJ>z_aHKbeqZ>in7Clx_@# zOwNj7e0o7x6edV*b0HToxvUjK!@52~-Zi2&=-dxEI-m4->Wq$WB3t8fX_w{?OX2i7 z1+_ZQh$6wr2Lyw=s>9+lePcJq=3XmpQ9G z_G?adIG_GG+pL%z^*e)(y}(MSvy9j4p}jj*W!dN zb;U2ibE%KC%cVRkq#~!r@y*7042DNbVs;NhbtFW3sSAJ`{VjzdSAvg;w3m&(@j7hq zquQM!F5@fW`+~0!k~J4=#U)z;ay$XLqt6RxT2pT>oz77lkNI zkeLjqCNt?sM&Fv)sy3^5*J*I$V)$J%cEY=n>c+|A&`fSmG|&JzNc(E`PzVUhNADW4 zRkRMvjlHLva_81VNZ+w*8-s88jp2Ox$-;Vi%f&}{vnEny#hAcE3n2_pdrMup&Cmu< z{k17`jE~=KC2m1Ah{@!V2#s&S0S6x1+zDj*~k$SP>T+E zU8^mSt_W?(69a3e-B)6oA24rMbTfUFtU&}#v~dv4tQk8QdtM7?i#ElzuVS}CXLSd_ zOwxsVG^I#8}5In6`Z!V6q0G>Ij zt&2hiQ&akl3FsD6@h{03wV-Bmk*8Sh{Q8CW`)HI_8ajuNycShBSwko}e%oT@zAqk) zpP7~VyI-nZ1L>-(xu`UsCLWnxT--O7n;1&j6vd~(k}{gSPVy`&axhJGjktU(Qkpkp zsycrIx<4NNE|zqZW{n&I8r2NgKME0tx0881pqy_*UqM$qyo4O@M;wnuJi^;^oPH3g z(-ahw9fa)2u@}E)PDuU|@qO8e-YkWdtpK&^Ksua8=_lR+gSA->z;n^z-(>iGG9z=)NnBZHl9S~NrFxJb$KA|ReC~&z=X6{`1t~5Fmj|1o5E$`2qJQFcI zUSC${Z{SxKy~*sUKK5A~Ej-+GVYa%iOT$xS!9U(7V77{%WVk$H8E~h1Ji(39AfC$5 zE_8|Efd=w_xTFuf_mh@ecfET+UzuicDH}H_dvpd+g>X<;<{0t({c}f@0M66r&g)Oq-Q>DyTQAXEM!3V5u~} z-uf&^;CJHVe~JF`9qt(_hJYjb#Cfso&p>ZSpTUQSu{v(-OOcZzxhHlDq_g(tRJp8*J##GJ?r#%#@glefsm9s6VpI*TCMV~p`cc^rprY%SXQAW?DNs!0$A&+3>pSuxg znBb9ucN{F$!F9gQ6W61;b@mA6FC@a#^8D^FwELgq-G9Eh9RqAi@;YO)W$fvoGtVx? zBlmEl!(QNk-f4!O%-J^j@~7XlTXXL|D3sdy(P&(L?%$n>dd9xij}t>Vf}0eBf9NF4?9w*IKIuYA z;Iz#f51)JaJAGHyR$y@%)Af%3E5=;;R#)PiR09L?aa>~jj*0M z7unTn#e}bi!^L)zwoU>LIHUIvWih*z_MoFVHVL+hKKC^r3=J+K=54|6e54`t=7D;7 z6VoCGszdl%$Fe55RpcA4;RPE4wD|mL+0E&vh3VXpe4W0Gf@9VEw9yBi#Yxsn>&H%8 z1bM^JEGYVj=--mQ3rOw;;NHn18sv9j!3)@6v?SoW__*0j|@tHtV%;QJ;s1vRq+re@}Y?2b@XvR|*jsO~Ig{Oq~CM{)PEgbH7 zPY(FZ{L&s*#p<>VSM6ia!B-qmjrP%M2_%fdl#QzqK4mRr}68 zcwoltxQ3t^e7Pk`Zl^6sK`YyN_=Q_^6#U~{h8E%047gMV(p|t}9L(7pz<~vQmGLca z(4o77w5_hcNbGao_O(EXJcQ~o?f-n=jNxYRxO72VHCHOT96L~Jl{Arja-oXa`V`{v zU<#k0{D9=~ru7M=4~sDoC@x$p{8A4LbHTmDTf__j0)AIGFZ8n~Nk}g`--BWe2yWkW zZ8aWqLjZ%qj;G%$4cdB2a0eTn2!kvz1zL_Y@P)1Y@i%zTJ zH*n6>^6Q+K<2n8Nj{;h41sm5^{YGcxT^C6i`=r?*<4=1#T!RE0D1WLP_C%W*ca1RF zB&IupL2JS;?UpW>zSMKLsTncdAyKg!3}!tA^=wEL)FAGd+E^w~t1+;o23K`M7@XMV%1pNO>n; z6ZoTCi#DQidA@8V?c!-f4M{HNp8Z;Xh)~?Yvh%r$|Jp6But}6lOpOIKL+I{01xZ+6 zzjk|~vHs>w*IT`&OWe?q=;<66#v4PrJPl+7UdzM$R zJzy>u*$FYO*d^H6)=f~@6)Ag{5N}X>g5?!f932NI>&MZH<^nS;rvVqQd9R248nRG# z7x?TAPh)J~g3Eo%tRU}Tk__UjXx2`}ev;%iyp3UroFzH225{!m!<*nM*NMxjD>Gmb z8pPp-lnaR4oB*og1DsCglLYeRV&`l&&AfMzv8|=|8g6Dgp3Bv=`vEnP#JuLVRGw0og%TnH>Z&mqI=toY(68u@_Z6;$v49YvvR-04_I$ zAKCnDdZ{y4FEHHj{ZC5e?TVCRfog3by1``wtGa<_A|jhLmtFV!r%;vMGAn-&OR z=ZLRS6&b5m$dyJgV)?*25q`>!6FGCnNU_Etryyt48)YgJD0YEXZUT?#e=sYl^Z*? zw;4fxTz24{0=$BA)wZw5uUc+`gf0ox947k6^FM>et*%9cx|__E@2bdj@tL6@+YVCQ z*ao!IHGJK`29u$4>=XN#ir)HQD;ve)?v~ooDGzHOfz=pRg7X{R!zIRhEkfdgv3bgW zJW2oErHmhGkvLEw2+nuAr#1dj{7W$C^LSg@x zyAWj&y`kS^`EoZz7V~@K)nwITqiE4VAIyAp{_Dw#_vr+ed1XYx7M2XKT zeFor#qN=;)~~d0OX421 z5n+n>tzsV@xcAnx4F1d9pEK3pvf;@f4`|_QM+!hwo zwL|^q_E`8-#7|=U8m_BE`?lYlgM*i0*1^ugE^u%G$^CV$U8TJb$oGo$YEr~=KTTxj zCWcL|1#W!4HP=2fb=~*ty|*^5vkZ5g$W@vv&S-ct%=5_z#sNW8o_=z?IkQmTwZ}!C zdwrGl%7Q`a&K%g>pH(C7KG&bZQM8HAYu|Wsv*s8-0}&a)4!oRX3VU#k91nIw1<1bVRCCAh_ms;!g2!%QIM`F}xcNHa!*8i>;M8 z(j(}UAHFokTAy}=@@J)o;Wy!Fu*OdCk0H$R_mZ{c2XhbWCO2CB4rq|}=a1sk*-ak8 z`Z~Y~>JW>8V>5v#Pwq5kU2_=b^04(!l#2mIB^NWT?#Ks={G(yr$x`c{JB*a`{SDvR z23_dbEUVnekZj>MhVs~4D8lM&exqtwzKqC6KQdF7F-Bk$s)KCb-Z4-$;EW1Y93Rkb zW4zaQc^Fglxj!(uU(>tfciTjb?eC5FHl(50JYMJp&?E|z>bzF7#qo8yt>Q7&UPK>{ z(pA-d6A}`H)S(mp9a7br4*zOJTF0e6ltk8p~O=BY2W(!PhfCwCO*AW z+TJmKuPG6oX6dyqefS4<&;`uYiUzu=(;@cZv>mf*)}Bz}5g&!X$uVGuy-ExaOXHeK zUk2@Yd@+_-?ykF}Z-uOIB)lh%>v>LXd088TqzNsd>qs@*)flTL?PHB5nx zhu4vTbbhqaM0)|V9h+d_4PQ?L`^%sIDN$>s{1nIv{p-P30@D3vRms5F+tOR#tJBru z;$tm=wJQIs2jwl+?Q0Dg2VHg#v84Oy!z#M0`(m?I<&vKIA65gUtLI-BzGVOJtjHQb z*F_du6Ntk0Oxaj^>303oL;e|U)#6dAc1a_Lw&4MVE zJ3~Zz?LMSp_o__ZiFB|2j;|3sB zTkIK@ckvCi5=ONJdaDRYtMo%+eD#ZlPB-t%-E+kuvWcsq*yC`R*u?2ei!^*KuNypa zPf3ECASBNbo>fY$5c^+x;PwKXP%FY82DmKqMyGM=AS8++l9f(PCSTytgI>Lw-g7*?p(7C~P=Q5Du85%1 z4Q~ZnYV8Z2PHK;Ub9$Os<|c)B*{iL!E8TFamVYD{?r$?A7bSCu!|J`Zs6ux?Z)E5N z`&)U&_zA8m+pb+{dqi}OaA{U7_ddO$Humt+{_cNDrH@;fBtlmsf$VI#GxoY7LntP; z6TB!e?QVzX-+9UcVd;uj6t^OQ-$WXP?znOB* zwROqkCLRroWiO>JupQs0@H+5pG+UPZR4Ybz?-6742J(F2E&^VNF39OXL7{89h6T6n~jBhaG%^e;yaOv z0~LaN4%uxc^7fsX%I8|&qh*o%iit%GaH}(2OUTWYT8n>2 zcIEU+P*lpeiK`hEdJ`s^<$~O31+MjV=9d!5Zr6hgn|F<5IFC9OP79<2oJ~JX{@G!&UvyQ) zBl^9_$syWD86QpJo=sJ`HzHnDVYVvoo!<{!M#@bWLE*`F);3mo-oF4r>E>?xjJ&T|ORZZ^r%Y za`dZ^ ziU(VdE@TL*q{p!Op%{B`ZCj@`LoKYVz7(xLGzqR?`FV0)T3;~~W zz1t9K{0UYIZ%s=P9^9E7G#_AI&Si4;SoC+@w9mY%j{G}esdz#H4q4u-#4M5 zc}xm65agzy_4Y8)tR%VoreOR(E01ugnyyHhI&4L`b?#3C!u{~n{6u{3FOAXBh_l~zKmm`v4(utlP)7cw;!A@dUlT@||#XL_#! z1HQx+>;1F{rteuJ6RgGMj`!Xi@St;`#Xv|7vsIZy5-p&y##hHkw{Q0H+~Op5H;*^) z=I`(GICLh7Qo9S6V3Y57Fl^6AW_aFIG+19Lbxw_I*A$$`DXb4BLe67Gd)~E%$G)x$ zn%>7A%Ll9~c3-(Y?rw*!TT(^ciJk~BdTEg%no=?j4ql{z2Mnrg>2r+c;=-IA(SYh~ z4xOOvXYjKivO$*aWg$|@wy=F|pkizw*LB*r`Kxm;Sh(jCzyA}jotR%})m_c`lz<3W zy~p~bxo2x7h+yBScd_Nt0eh@#RV+eDOl10;f9y+hIE30iyymK7uI;MBXhoF0`RR#= zx}vG|{kT;0v~y)+cIr>>FN7WkT5BXJU$YCVoX_$6yxc&Y84M0mj~Dd=&y?x-X04>j zb(EP;N2GXK-l3DTL{b^vsEm9S@WSDspVZ9cDfZZAC-s7D7S18`mDAk8*!OIAo_f!m zF4u7pkW(rOVqc{-4&QM}izCwD1rgj(`48OU#;CieG$aQrQw^|+59^@c5Jf~j0$PI9 z9eb^Nncg#V+MVnIBhnG$1~oH+qr+xlUoE}NkUrzigGT<|A2o2i;jZ3k=yjBT$sUm5 z^@_H?jnU9@HGZ_!A3lviT_2^r{fXZRb}abFlEQO{IO$smRjL=Xk9x=F}E$n-NODFk?-}MmjhFUaKEe%~7i;QsC0xZ9N4-!;X+$%}=GWT^^ z5bJ_B;Y-EJdw3c|C!T9E!pS=cE?CGDJ}(3;18zn2YB6JiL*Ty}Ki8 zIltjV)7d;;Zo$ z3H-}-;^B>?b>JC2GV4QFO;UFKo&d@~P&K$g8MH-d07;SO;+}!+LM2-9kj^?>g>z0> zlz|_{JiFv{^a*-o{ga%Eulmi?nu37&@8eCH6OI2`WJ%`|RD<@xU03JT>bM2rlqRaa zm1oArGY;3ze9}_1ZwMI$*s^bf>lOCrRENstaNpXFpK?(vAv#vB^SaB->nG;-_D}y0 zmd1s;&Tb-yaLdqj!9h!q_WbOZkTm!$0nmS0s;z6UzGoc2^Puyz4$-dsn;I_X!rQ^F z9CC=EJ+_~+-|CCj`Y;=?Cg!i`e9oGA*=YR-2Y5#M2L}+-x500x)pd8)-cR|kalLM{ zwhyI!;L|~MZk0m+&tOO+?NWTD$)ux0W6zme@;5TnoK*pv82u>SsIuktoc6?&Iq?fh zvz}zXhKvggryy1*1A-f4{>JKxO}(z!aR0Esx0^XS){ZB&MHO-;Sx}}MJ`gy_Q0s=3 z57f>qmgnMjigdjl(Ql85%_Fr~hOcc5%X5l*|CbwasS`2TemSg!Pj2t3XPYv#&K?e{ znO94=ha^|vbHxgXAxKvcd18t*pk0V5cEQKQ0aL-q=$baUd|3iE0M6vev39^e?WFhG z_iEF-@i6{idXHR0?09<5s=!*-DJDocl%KVWKk1@i`pS85pXf@N)!4!d+nMEe#8HY)*^dBvx$w3Tb~X9j{)Kla*Pwy;GXw@pSyCf^DBI$&XTi3qa{z4Pwh zU8l|==E^{_7qi8woXIv#=8#)@wdDc^2llmvF*wwsn!_)13llV>+-LJAwj`bg$-j5M zm7QGW`-;8BB-mE4zfT^LCF=gHq_`4fadIwUawZ*Bha&hBrHD-oERqRN5l~}~n$?ci zXc5bn-{P-u>^=cIy29?7lwJE`&(tz6ap`!sKbm?V!sUkjer-&<(|2P2R;Nuxm;a%G zd~}!Xt4?yKIUix|is>PKtdYrer;pqFjfe0f2AeP4uC-K)RM0QDHd5kr2=Jx1 zUVxKhXlaSx0<-InnCB<_%cS~;v@f#+JRO|pOvbB5t70GEe?}DfZS1J>cm?bea%Hxm zOM{`Rw6t?Qz*-@xl!mFzaLrU=E#X~3o>E?BZ01T96Z1D*{)42k-P>;$Eb*zIV-acD zDiEMeL~;Xc(&%-A0xsYTSVX2%b227@v-9nh_c(O@`CajMtoasuoY>4*X$2YhG1KIA z7cUFnHSUrS{v`atTYdJU5qy|~8VxoBXx-3Q6q^I;i8#C@Oks+D(Fe7_CXmJFb>bKG zC-9U&xLoW&*{YTV0zP`p(Qf)p0T-XmF-FC!5wqO6A(0$~9yeo@lQZE2hIvO}f~7c! z;X_sYam=po7+maTTY z71{IIY!Vxh%ux3;>(4U5y~)#k9&d^iO6!Ktn_KPG*2sV6 z^J_-~ii;-jI2+N;A?=}yy6vjqXHA)vf|l%YfPLhQYTS6Kw)NJEF$ElT>;d=p~?J;^&f*aP2XPd zA5+O1nK&5@7P1)`D_0Jo7FCtsQW-TE8j585HcCv_pqbwz#w&`zE7_H2mWV{Utt;{Z zBsBDnGCreaVh1BXBR)+~#qv-hri37rO$=cgVssfJak?M$tBu-g?lmT*C|Iv4D0ZFR z1su>4CdFH^D1xXz&aunBmT#@_evKfYuOFfD3#y?nELThU<^q`gs7QjUgiy;^P$@?( zkI8U%ikI#gr53iWakBILt>DXF4-a#Of9uJ#6cWaO%?o>ZvMyIyf(;s@Yf{RM4Sh6A zDMzfgE(ANk%D!8}=YSQ#-w8e_v4$i&s|P=(4R&mTISR&@Jlt~{))P(JqevsL-mT_$ zMfxcX;*dAQxmITVLdftV<-p5V66_6;dTU|lz3*(eykVnTX>H2F|7f z<`%F`gv!lnW9JUJq>yg|_SjU>S>N&sPQmb-UUvJ2CKLcLgCR|xQUY(i^q`%JjCPz= z95h45Z`#6$Q9`JRQSIa9UBv6vQ=!-$18lR4A`-m6Sx?`=m;P{9wmdCz(|;bC8xnPo zy!I!pLavO}k+E^l=hZ`QZe~!wU;ew-b?1x+pBbE5OF=j&fzX(rHY^eb%$e|dzc_3I z%%Hg1rVvYGn)T=5qI!^w|ZN4hFZ+$z5% zTb9CPm8sUJb~Lt$_DqIj^_fb)g)!J;Tv*Qx{8o)fhDm=(6+Rq(qTq#~?M-=(=uoft z+hxVpyAD+Rd?4mZ&0)}!(GjLzt3W4;1YIG8o?k5x2)DWuP@dR&Y?aN$XMd&`Qb~3! za+bOXm9lqyl8HRjVDIdJ<>TRdBwodIZt^v>(nyioru?O8sHIvcR@)HOtLkeW9JNq(H&IiMApxa|aw<0I}zPp&K%bp6R zk9LKQy0NCE&ivLf4RH=dXArdYOx%7a=nW%39e=t7>EkY^;2u9@s~Qn|*ocjeG6`?w z0#?@pV9LUyp4GT#*>AgM=hbW?w(30QJl~X4ob}3l3UyaXDTSb8;I(FpfcfO=--><_SMHi` z+M)U{WQ7a7tfAAr7znVRM4cN7Mh0S9m2L|En|JqUV^r<_e#I(Sp-{3+BCH4`G7`)7 zeLzP_ccD0R_7E4LQPc8$Of`}DXLgr*w)sY2k_Z_BgiZaVxJc9ftb2bM|4^qSPC7jg zBPLWy)hcbrLNWsbJ&gEc1`d!W>a&GGk}3dXVrXOq0hXx<@%`l$EUZtRd~A~i@1O}1fptEDvYe|S_itXqeJP7nG%JYU!RJ7R}~6_ClliB_`0Ml z+C8+BL6VM+q0v1&PMZ8P?|6Z<5do|!X_hVE?3s4D2fd8r;A{yNWvdv0buZM;i&S)-K9!5tWU6lx%@=L=O03)sHv@CaT85OcS4n_aLynH zAz!gaeHla!$U`*{{Xl^Qyxnm>|4$%;;Z`fDDhaAJ zQJQ@XO3T5We~qMl)bepV^_EwZEqhT`Ti5X<7yk`0<+$FN<{ZNZrFFZqUith(hZ)&w$^Ix+QP#@2SWKIbZ{+))1Z=oNl=S8oM8`d2AzI_*2d5e|sxofiluW1MDZ#MAO z8dX(d$>pRJIKG31<5iafzAZAk+_-HW{?*77A|HZ_Rs0}{P%)RG`@xp!l8^T%KIa0F z#4V#~G96nDCZ~2`_$ZsSk~HP=)2rM4X&mSk)V48`@p!2QMK-SgwP=}2CP9k++r?W2 z1C-Rak~YW{D0<-8SAb9j6O>3BKdtqAK;lou#Rop};Z0sz$1jXt7>+zu`_Ai}!u0{W zk)}v{)61UxB*Xap#3;t86f}V_{5+=#)xsPBI<4;kV~o|6TT-C|et1L{sXuL?0A4~&%LpA#ydLr+?;*Ry;%=iPvzPHB66#YB5vqSZUP zKCZlGM~ing?-{o>E66>TyQ!9P*JBmK2Gngo?UCHh9wc2Eu;V}|fj!-1pEW?7*0HoX z1T~OgsAtqP(#6MEvT9AyqtiK!+FfZxZyn~kRd~B9s!zLq!paF`jK~Xr-dyn@%TNh| zeLFk{WSOhV?d%3qz|E9pc6OJjFuNvcK4}{KQRr+;Bck*R8`LLPE-a`JSt8E2b~LS{ zbyU0KC%KKBiW@CZxUQ~O{npIm%FyCJ%WQN!FLp{4#smDYrEezqAVS4h*{(R-$&8eLz2r>t+l#s@NL3gRab z7e!F#N+6ms#VJQyCaExgpur(TxC`x8ma(eQ2Sh-yrDY%z*9En_n&kEfwJ05+D)Po! z0}?C3QDXQ*M)^jT(`y#^=@-LZd@j>$G~ zuwr^QJa9#6p+(SfQp^y1Zi|Jsu2Z!VLAF@F>))E|I^}`lb^oL#AQXokMhcCH2v;1J zj%XzUd;Jc%sw3d7LUy9Xu`&+BnJ5mRh;>q6-I^EdoL<>@e_%xzF< zypLR&OdI23iSdzgqTrE)->Cka+WIqk{=e;*tks@=%`c^kxC>HBSxRz7G+{`23L6sLn}R>g?guH^-<&r z+G;@Xq~H(Y;dsrNfK5Q?JiQ!`cBS>&D#IB)DL2))rM35NGnsp98i_6%&>Fh!J4M0C;YPwD^vQ1u1M; zN<@3=h#C+x+EwC0TR_-99qCBl#H7Bd9lq!a9p>WGc|_MbXS6N4WteFCAl$C@dvS*PJy)EF=DsZ%0|At%lmEJ?dvkCrD<}h2S2M7nQzum1GRUnh0gWC z+`$6Q9@Yq>3F<*O`;V~1gGY5zH}ioi7WoMMg^$N0YKEU<@mns{=M#b9jMW0K+TA|^ zgc9lcRkF~F;w|5%MF?8|Z`z$KMW7#@ncH|riN2&ce)3Sfelm{YlbF-!tAPg0srsCI zp8+lpX>!5SFzdr%*h|{~eUA25WWo78Za3XlQ;T?lP7@>|*P=b{kLjSNYyP+N%a>6Y z|K2|?{@v&aj1@Ru3bs*fjI8>Pk#%N_C(Obn|090!n~(^*I2Zb zJQj9!@0WI^OrqdNkueCpq6VImKKU2wVZk~%4*z;3xH9v#0I^PaQg+h%QAkh4&w0bjLy-aCcF|F|^)i^eyRz|CkzmSU{zA@7~<=Gq<8 zmvT46)EwuC$--5e<`xbthpWIEF?J%vk! zVJnSn-Dib0D!sJW+qj`UxwQM+fDAx=bk02fa=F!V*k-Wm?JS9xeN4u^Waw3aa-|m( z9l_)i4_^hEFkNiRfuBTle#YtVuzGK8M1s~8f*;=G>75h%B#eJ#p|^tsBdisjVk0K| z6v+c!qzNLx**6o5A`6cq?}Z_JY64L#Og8*H{<|Ait;Ybuc4zQ`TLjs=GRorFx~Tf(KQcGJYn8h3@H<~UX&IzT3t_DP zkm@zt&eJo(%wpfot75IM6Yv!JhDM?2V!4l>+$ojDMIT1@(C0Kw#-O%eA-NMos->m{%wm={?Fw;RA@H^*`nTr`l6q|}pc2x9dB1(c>fbw_>Vsb`DmLe;Q{ifQMj$qcZ;?>Geg$bmuQS0 z@>sDQf6hCt4z}J1VE3w7n`Iv2&G0b6eK%7Fr z4H;^QBsWq*h``SnWoG{tzp>Uu2@T(A7&oV9j!6~_v{nhR{%}H4GS^)9&>@ZeLAb>+ ztV81|nV+J)hSOurmsSWBl>PM4Kw^L1h>V)Hb+wX7fO6ANPxPjL$LNa<+YP?A79v3l z64=H$9D&xqY{fHluqSr<=vX+B4$(2Z5{yl7uq3{hIRKUl8;?T4IonKpgX3`di0{Ho zy1LYkv2@eF;hTOG)F{zPts4$Aj;drWLe*6!w#$cG8pGubnF$q8G!dZttU{~9$?No} zfH(R%8fJ`YwFcSzcy6Hg_9SIWkHI75kB!JD@FJ^A`MP?b#aiKAgM(OBM@avlNRjwf1wtnVOepTD95}k~7(-@88ob4w;?{F{j&Gf~Dq7&)l zt}vfrxX5F1LZPorj@WsnCc%qFi_|(tTfV0-upZir#>LLRdAL460OaGvZ5=_U|8>s` zL%YrHmU27sX_7?bmos3aDyHRq)&YB>4)*qU{C9HvLiLXuza}W;6f!uUGH5V%@$_M# z#mDDTu$z2uPi>lg{Pll&C=sc0b%&B`_fEWgDqlPgWR38dk5|&VI{yPCbjUE|>!Nu9 z78cnnbw(j()6soW5{WW37R21@GJ--yTc!kEsR-SW!HB^f`C`>2)n5*|(ZwqDU9&;~ zT?d}(mZeO#2k#5ZFAFQH%9# z-pQj*iQLOJNnL_D<5t&sgj?(F4Y|ILl4la8wfjmY?o+3A-wn?}H~Mo7?JSXA)voc4 zY-tOImG@WADZ&_k*b~|{pRKO*hxY%OoZRRvTWWAP+c1e9pLloReQ@{_vSEGk&*ef2 zQFhpnCb(ZRZ5WUCVopqEe4y~hUD`prCmT(`fiwQXyq?k$dGKFuRQd4$t+Tm_1O1>m zz#Y?{%In_Y@rCy2rJ4US<%SMn{uFHj#!ZiSZr(`Y;(}%|_6*>Ta(8>-i01I%IrrSE zx>sEKLWc*GCU?3$-*~~0ISa>$2RVx@37{+dP~TW+vbG4>4->NbQk0j_>DTY-7}BEqR;2>p~!9g9#{O>nI9ynD901h;+G7U z-z&A@EnFj;&XES!j+XwVE0Br1BI_X|tt0>NVwu-8ZF!0*6K*I{eW;Cn6hD~OU&}hZ zP~`+=7Jb?#)l6Yb$ViNJcR!XaAK)r-wyGWYaWaw~6OL)RT4X}1VfEv4NxVT5-sw0h z?573~!G_69QPQMe34Tc-`j78CG-+~g0SxupQI}DcD?#cBEd*BT<=Z`b!DL!I;1iyDjJsi_`(!Azsr(G={Oz&62f(ZVu4ADTl^X96-@1JII;He`F zOOy}a#G)|vBwrP+*1nh$=%@XWR7P+b6}@#CjA?GsE*TNRKR{2o{@w@vrhm`m3q@jB zTQ8M3n_K^`F~kPmt&hmq-Di@lb^Hm>P0IGNO5ZV$b5nS6HBlwH4H|OgoZEf8faG&~ z44=K$5^)#tnv44r^d|O+w#7r%2d(~1vazfhY5kj|t)Sp3T&UR*{dXf-V^TN9&xQ~+ zr204CO}vFAm!L^saV%bZIg{@RSS)-PV#@N98xC5xnU6n~bYUAq8lM9G_`El1^kvUO zSh9$FR3A?;n>s4vkWACOeE2zflMElbicXM06}cq=4bWyLl{DOIrw^NIw_@ zO-j$CWnWBRx!*#ly@ViQl#RyUdGv{?61m&Sop2|spx7ZMzuFp8V`Zz@O*x#mT7O9> zuhqfm}@b76rj#mW;-JHdnkncy&`s zBM8C#_bVbUP&f8~x=e9N(xpxp*{fgMR;ig;5}+eWyVMoY87o^R4Xt2{Uw^eY+nk8d zB~dR@p(7M@4wA@2zN{n}~Y%#`&1q3f)I;!vY(-MBUG?h=B#ySpa1 zJAq)q-CcsaYjF4AZVd!?cX!L}b7tz!+^IV+JoF1yU0u7@zxP_-ik_2Si z#zos{2s8g?q)>^xhM5*fi#G;NzZh@MK!2&x8;*gCV`+28d8bUgYH%=DCEBW=n9IKn zBDX$8P(lQ)3UdW*J#ml-_(pa-lA3s1KnSJuxCs1oTpQLN3Cce+B=Hya#6gg5J-GwczAScJ7RFM+}6fZR?JP?=x4eR5*MM(6P*$h+{SuqMLHi-yg{XX%HF-_z4N?;DneE=S4?y_kaUL%y zasg4EvVBvAqc-R}3vdXREl?ZQ84OW^kd_mbt_PFWoN-tz0S#|xU}ev5Ni>LLdL| zEJ!}E!e-;?Fo2V9A$7Z0AD$b2+&XtQ9^Me-NlBtKbHQ2vYJnVs92Z9uB*}SSI(OYj zK)jx)G?Cf85V~y&-E#bgoTq_z-X`J8a$u4Z=g)D?zyTef&q2cFqdAN zFFvVYTa5f?b{Scvz6YOS2bwN;M-Q+7HI2}V!6OggU2OrD*2_6kGyrMY$NT%ZseF{t zhS}&H1R4;f+36j5ssibT(P@5U_m`W`W6b*{NjmCi%e<+133L(BTA_pxO;-{Otz-?qS40277Xv^JDV({cJILHko0?pb(Ky8ku7C@LQ41(?z8OFyKy%2 zU|^!00_eU3mDyb9MLa{t_!<%< zNkH_;ZV<#K82c5^v0ye>{f}M2es{l1^zfCIkmYv+XBiCKmRWapr9WDZB^v>)Lns5| z{OFXn!|AY=@ad*@#G5YJaQIa|1?Hofl@~aDsd3KZ;3kv(ETqaHv5yqDScGG+0Twjx zQ37-C!yf;9z~X-K<$s)fhii)eNt1t2k_dUW(+uJ|tZj&`5#Cs{D^}Em7<mr@amtUB|+Yj^8*v&;H0bL|pNDmE`)h&JDEu3s3Z3 zSo?%aNIDZ-lre)Do$zVWc{_(Wf!b-Em&Fj zqPlyJ(ZuICQm8NB1%kPG$m<>3*4R@6Nz$_hZ{vh|2R|p`oeBGQI{Yy*O6inOh7y7tc- zl3#8!pmV%GZEUNQu+?x+tadiD_=T2U2jp?9oZXXR*bvd>Z?qZ23c~fB}a2av>ADcb?lvDIPb9*eZm(@F;BsJ=>(9- zG-V+#^qu#7y@o}-b>?UhFWU)F<`;-E+1#m0^v-+~DD%Cj8y4!PEhn9Z73lbOXQc^= zr-dU*4W|bmCj3(pd9zl)69)B;d?vd5KoSRK?8^=!VY~{JxQ;fZ_g%++;bGj>-UIbh zd$zmZusyiwW+)xJ*xXy(b}=AU+Mh?$6kBrsTV6?@HBy0|HG$$7$fHCwS=n26#@7p) z&>@;C>)XDI#O3*^Dm(lOde|zHnt9qw%8YTbyXW}qgp-vBy*J@J#-vrxfvOk?7ONpv z7Tez8Jn?GuOQ{;MKBL%6xoV$y;&noTtTn-Hb3Ow(^EPLSzk0jxbcjYO`vWRHK^N0x zWr7ORsp5anGYkv{oL}B@ggaxFBSe!@4tKK!;c9bXxP6ACk8g#)RP@zhV4r_>EEB0y z5;{NR-ZkomguB_}iC+zWM|aBTql2d=E_K|lTg`iN`gkf#+SUaXhH zJAj_?>Yj{HYQq?AZoE1luy?>j^-13(^Hph4doZovylRKYUinKCdC61&k9OF|nWDWb zW%pb?FoGnp!f}q38PP7`Y!f}nEjC50xkL zkbn6^9^h&EpGlj466gWFfRjC&kz^YVu1_;2wFS+x$Web{Z(y-Gr1(#gs#K0vXH4qy z3+nL4z93Z)?m4^$Qt-F-^TYc{qsr|`VU4b;%vy;Bt%OGmYR=m*&JWvWW~i34h*@3^ zJl#+e{F43@^(h(I+=dVf2iMzFokBNt(SVV=RTZ=n0;`@%$12#=8ht&ApfQSN)$Ea1 z>p5d}FJ}EHc6n!H;)}f-g==(%BC^U0Fa8y+B*$3G$F%mfZQvGd=rGlBdxf#?OEo_W z1l%KPbRTa|dfzUX3lUr@9A4f=t=I7?BcpE6(cI;Sl?{FAhAHS0t5pi#jG|6**R=){ zK9U$6ubDpuVO}|=Ty1f5&Pzepa*xzA89SJ7E?o*cS}6n-}gz{hx0+IjVC`G9z8(vuTh6g;4RmomR?u5(hJe5ps0&ym_)ky zhDGZd+qe-^@5J&<0{HYHF{U7WDJ{W*v{eo95`EOrIOk@MYzc6NZLJ%pHTy0BV9!FB z@BxS2v@w_DB%o`9YF(d=i%p}`4_JOU@;^alJrj<8?7xp>fGbmGK&Ma*&|h@5Af0)S zm`0GZt*FelC-lez+TI$*0_AYJ5Rt|*S5$^}Qn${XBnj_Z@S_ElC)TY>PRovnHFUg=i7!OeGrfXnS%}zD7SnAO;y=t3$EZc z!7JC~5+A!<^Q%Kur6jw8qUBH%^Kgm~?7=thDwLNtaKDMLPoPmPD!=PxZ~45~9yjfWS9bw@J z?96w&+763jWyO(@vjI1&2*#Yz5X_y4NF~NxEJqS$e3suP%Q~f7mCRh;ds3*!BS=&< zbQz- zrJo@wDK5BkGnSxLF6H#&^Un&GKzE9KwXgw1P7HZ$nO_c zowE;phmILiE|b;3aUYG%K2PGJe_E&KKxE3xEf$aL`KTU#6S>mNgJT`@aKsx85pC=~ z*OrzNqiVy@^_orr3hm8_)i*(U0I&m@8LaSXQf`u)G19o1$zIK$-25tDo z9W11y34*KAF zOMHSDCyK%N*9yd{yVWO z!Ww)Nlh$SIuF16jV2Tk_=%1q3rxt$?;0&jDWkIwP2U8gcegmVnWTYJG+oK-96&98d zw=chg=v<*yR)nbJL>k~@WsIg?%(XtakQpf4x0U{zAnnbOh{WAp)B#BEeE)d39AH*N zh%n^-2>n2NGLPJp`7hb|?^QbeGOt$Opw?$2AYC!%2kFtheA<7aGy1nps@|E&K_i$F>BVs>~KiD>gvvHvF<$;8y{e ziKrGD$ZT39V)nCJf=n(XiuTvqaQ0;hfY_30B)dX2+o`D^RI^MC`v7!KoGz+fvdhVg|%8qwO$}Jqf4Z|UW~Mcpa>?uFnKvQ)adXDgV06P1B^M4 z3u<&2KKLxJ|DHcRdc6O`3(oiyAI;ojvh(1(H0hllV9xUam{4OC#;@KZh7 zvkDo}88^uSSK|wJlHD6BHVGwd4|39UCJiOCfyX z;W~nI5d<&1XxhD?TD|$knmTPD((|g=OlxEc3V4Y!JDpBUZ9^ETA<;lwEXTj@#cjX# zJ8U@4K2Oyki1-zi^3!i6_${I~m}Nz~c?`t`&iXRp#8@Qs39;6Q!CKSoa0%>2r1XsS zwE%^bnm|`GPB)6g7q%lU*rwz88(-Jf+{d|0Fg`W=pzvJ^&WS+r=m>S|0$jc2{uee2 z2kL=TATVu>-mKgzI&!L*D^rKY7IT?Ve_!ERmI|1x~<9ZTWVS-9oIdGHE`u87pWYh4_(8n$}yfqQx~aIDV*S)v-d}z_JmT* z%w;uSk>*JJoWiu&;;6<_f>N$w#zbh+3s*vNmcejw(|y57&$^e})mtwzG~61G=K+>$ zj;y3!IYFH{WB4b#{4YVRPK-O_oHFp3%CC;*?K9VEF{c^5*M>1hZl94Ajvij1ozk?jn{m=G8qbhLcb2je_^J z3Gv%5D0BYmZ461Lj%=kQv`!}r=-Q)AJaR<&yC9-T+nze_bpICAxhKlyd!Dpa{~(Wf z=|#ST(w>Ml8lum6wkh=Sihrxp^$Z3J50$UZMt!mjGen)$i62P#12AEbWs2N5#LtT! zL-HT%2SXTMx*MA8%|Kqgc4nEIc1J>wA^KiLAU@{Ld|LQo=sGdz&18;+FiN0*Fh zn^m=Id#L=HZDa*M2eZC#_5u3il+)Ks$&!53Weee(Z$Wgma{{qwZ7C3DplQ((P!#Y5 zUuN!+LUt|$`lVCt>DIQ;xf04n3GnP<-)#o~ua#9-c%$VWc`Ce0$xd@Od-9V0=^(QO z`@+GVB=moE>eDmWp#%mh{lBsm@ox`{4M9@;=N~G~cx37}prVDsL93vw2Te~TEI!IT z9l=HmLW1M86(i{%rbu@SD2+PVD)=i~N7tg(PI(%jNVQ@JO*z4K0da?WSkTODs7V{i zpd#!%sJUttb#sR5WS+sliq5_{U(7C~t^t*jeOyJiL$%mBPpseEF}uw6+<#*O#_}t- z4HlynM;kdi22CoO-B>fp(U}l*=~pnh5+O8J$OKKQZ=Tnm>yhkR4j^lT47L>4;rRjT zE>5ZN>&TR9-NSe3ziD}iFtnBnFXh#T$Bujd+$RI1bp zb*c)cdjon#psUwfBapx;P`25R9;~%)ggclLYm})nVoBy27y&GdULhNgH2^ECU>N@+ z$<9#KDqhBxsW^uaJn7`9>1(L<*%jSO1jGsn5q|&39v+7dv1eD%QU2@s!`!W+!uCnF zmlz~!taAUc@$m`fO)9vB>$?o1GyWM0-w^&ZL#zIqw#usPZS7i2=-}h{)^ymeEwYYp5CalDnBNkIk(I_h`5+8HU_nU2QHt<*VFb z%beFq=-6xsju&bMBiIjs(SzveCyv3R17LrP!|^0zZ-911dM30!jbRArSb%om_`_$w z&4Xw+j3gm(1q)HR-_*>T$U_w{er#DTu`7Z={8i}i1j4xrlOkeDRO`9Iq zNvA#Gmm{S#Aw^~gL&E0=FR@kdcvN>ImtGJ0rpY~a?3E$h5@|^)RCH+y`)7Y}sqHd+ zL}LncN72&s6<*iT*L}mv>4)G5rYU?^*j6(x3~U^k;ikBAYl5_004Ru}0hby_cViZS^28$D#@6*|Ms7u)vy>F#xn?pKXu zf><2==cqjh^4O@O_K+%{k<#gcyyCsVi2}krSaso>64Qz4S6TuXZv;x0p83GG$!w zJHPI1!-e=#v`q6(@g=n{l04O0i%-E6W2RwE8+5~baW%=$80k*L7-MBM8bPf;aR%51 zZ3eJ@Ih4q>4O!c3v*B`wJs^qiJex&0L6yp7I#yKT)5<6F7|aJ3!mtrdCvH24LZRT! za*dyeC2uLDBVH%VSsgu2Ca<#=<(Vo7 z$?Kn(QoKuYeD!$6tI)$NyU37Gd`z<&t~HdjPW36A_lC z&O%TSCgto>FMFIU=oN-b_aljUM>3RynE3ZLpGzzY_$>goqyJNuzWpzkgc%ild-@kj z4F2<5Zu=TWWwR_)tT;@^5@$c}PnDh6hmC?OUAeMpvuL$-vCrr87SVjWAO&-g#34F1 z!_0e{B`*P%9}js7ph&i2^goj{94#v>Lt=~bqVG~C+=Ug((H4co&c9MsYm6bjNg>n> z%W>dm<=>12AZXaEsN~lnLg@Y3@n1Lz9AAe@?1HlS1$Xa>W0Ae}v)w6?aMFTX&*kE* z?XwuTBbEVKo8%!XTGjaxz##ZevHQdR9s_6EP|9u7A1yb5(-(%p-WFd0jJ;{5)S1N?m%o%+z#9^`u z=Hwfi!8uFaPDADrqW7R95G8al_-I2m04%f+zk~CzS|3heu1#k(^SHs($^K>h;=?%- zXajfbt~iC=rx4_DY#q2?bL4EF^gDWJfp84I`Ra9+TB0^^gFK}doqR&#A-P1!%5EJG z4{@uH*AuRNHQ{GUXmp?x-=^eZ0q?mzd7kcBm&&SVUVU3W)dCeu9XOy0^_0u(FR6V* zXXBEO0Rl5|U=bAT@Xu?Ij9&1IgvkBM8NarO8(;L!?;r}jU7?2tk#ydEa8Vt6%@f%O z^=7hLGZT;P3l(Tn3^xqOdTqO7l{chyN+uq$yU1@AbvF321p#+WCrh5*lZt^n?(Uni{<@WUKxyS&#*2}Dt^5rfi61@V46!N=mf%i-n zkUyr-P0)TkK)3)WcOLq~p7xe~6yi|G7-=y(b`ldxi>C#$inEBPT&D7;Ipc(;`xXqa z8Xw4V8&VK(*55iA+O@sed7~F%DpQ!uWhsE*rPw@3iQm; zx;gloqv%v2mSU(6@_{t(o>M?>`n{Xh!z>lr2W~Ni&6(X$F9z9S2T z5Om$fW5)P6?|6Dw$z>GIvj&@-k|72ko#Q@EV$Hgu-={7?y8IPQLX+f5ndAtiD>^sv zjPY zA$&l|O5t zhz8#^tphv%M1r0htn4nOlH+^q=yq>9<_UJ zLtSA<_sDs3xFTWS;m^B`O{gR`&gDvt?BE!t*5G3a041g*eF@xMEet>EUf z!exelamk_Y!(h}zfh(dG^etY>dCSE{Z;%(ailJeIo7<(dR5AvP9RCei@qHp1DLxly z(+}U&<2}dZRRs4mpzP7}g#f^88nhj5U@AD&W&{y6mU4ln!&J5QdGEWduJBl85M2w5 z%07`)h#*~=6EJ^;H<*5^{+vWQ+ZO)g*!-X7HdK4Vz>;EwFr`7VUrJ$MisiCUV8#QP zO%_CkEt)xW3%dL7`Pn$NQ;{dnZPo`-ayQ+x?wL)yQQFA&Imv_IHv*_QZ` zv^Sv%1oC%nR$72crdIY4xJ=bXHYRDlv|NR;8-&SzByxWPd1{uq;ePzZnD2&ZbT7@j zRWf?GK^E})fR6iaDB3X@O<8v>lWKh=1S{!r%+@VDr9d-g2X*J+=m!=#`>rRLfzA@} z6LR(l_MeZ~85`hK#B#+QR{@b)kT(Q1p3F|Vf+L`N43fI+(#t|qp`@8Z8X@77%)4dD ztq-x3{1=10rg}5isM%%odd_@|Rs6|wF`Sy@=L4X_k5shrPDVM0IsPQsOJyq}5D|r@ zv2^`fXpvMDcxm6f;Qy5IWnj?;&9GEbEC^kejWEVm8seR(jNi*)pUcOWRA``|Kb7U^ zQp~^+UC9!=FfbMQh$JX_qZIZ7<+-EqQdV>`K+K!=)}*7&PqfF!TW^CqMk-L!FUB@{ zqsdqlrmJQ@*7({ZW%kfO^il@9i;^K$n{4q>A@Y=k&DYSXnub(fyPal|@o_37-?kFH zJ$2-Is9VJla~+p7wT|O{_Vu99w;QU4VC}#YW~LzyABZ_`)8!>gQwnqQg;676skl? zrTbeso0iAEqPjT`nOKF%>C}YQgFMMc?w?#GrFyb#H@`^> zv`y$gyB44W=CDj!%$EbflLFPUg%kdffH7e;PwHy1~U7g zq1hO4?6i?@y-W>Xm2yGwTqLR(X=+MIs}g6TMi1u{a$Q;Y(;GTdw&6f^SBHZDFJW7Z6xK{Dq$YUEfkEXkwdy^PJedhCbFOesN#qcn z+8-95JgN+Fd>gASux?W2i4U#4f&mBLHZd9u;Wtkn(C6J0^ELz#@IiR?r(UHqN4X&@ z!lAb6k(Fx-M2e$Q;=^cWUF>29qh3$YLf~eCW{KLy*(9nAz>j9G*;+V11-tG=3zgvTyZqXF zw8{6i7`R@KE#0pe?iu^hvcwnnFzf|9gX40A2c8E%X?*>PC^IwZ{{7a5CjF7w)_B=VXV{wM)w800r5+8;9sg$|K$u+5A~w?B>0p-pBG>cKptRyop^t_ zKRxk;uD^d%KVu?c$ z7FBR|G^l)Kzsv9Kjs!$G2=%QPJmKBa-U{MC&zy|}XI5O#1L-B6%FrJUcwCt<4f3{q z;u_|qjyjZ9Ez)_7F!@bzMvt^J^6y~8g2-iz{9)tEEX(sUB?pX9>H?-LWzP9PvaTE2 zv|E4f2x#dRzNmvLFa1O+eAcQ2uI^hLd`qX}Hbp3HNy3N=rPL#ZHEgdS9$v24ilpSFQlk4So%WGv#V=fZwdxMk?5_8t3&OsM zGm4A3-@^-B&8kO)NuBUZGNDzdvc6ySgAU@1XB_h8=&9Ir*q*9e4MN z>UFzfKavU#&94dYl?(itwEURuM0^j&4UH!oDL$0>#n9k#C)*5TGSE$)+@Tl` zqoJiXd9T1{L6`wzON=R?UpjVYBwgw#l00t^&z+%oV~_#1r}1%5Wrjf$;VC)b(zhb` zx0i?m%v&<}zhx}Heibo7c_fk$JSKuNQp5Diu@cyIMgp&lDgdj05B@%qUXAg>C>?wA zn8WWh8qCV-!O_Kqcxf9aIMe;NWVyn52gYvV9>L z&g*ZpWY|o?p2}Dv3tJW#-U7uY3}br95h#w?dc7rdvDqD|Kp%Wb!s9Q_=!w^Hc>F=3 zAjr=0L$POx_fx0M4=SHS4j^!zZvV8tb`p4oXYnO`eBZ11DlMSq41vK5W_&BHm(I(l zxiltjMwPE)yk+kPjP)8XCw6R2z_M`ke(XPnoa=$zoW$XB7OanWxCgaQAyKw z_u0F=14?!Lm#9zHR@f+V_@0rRV{|~E+G80Zx=8CM#O+G57TmvQg1J76m^5zZm1qHm z5(;En-Qf&ul%w8s;02emgvN|7ULEx^u621pu-$*DJ@_*RA7&=AZ9`Qlhpz5x(Gbk!rsQv`~tgmiui434FoV7#GHx zahsI6&9_~?b;m`y<=-PEKa-p%{IqqT;VM>M`S$)2h^e7j8$(nmft{(1L`Lkn4 zoy+(Oa;u`^<){L3>%9um|JRqM3ZHNP@!6dQOpoR-oj(=e&os|dM<>2Kq5x9FMP4aC zZLixtNZE>OHIVS`%%qTDG>^rudUTVJc`GiSI6aoDW)CA#^(5&)SVs9Xy` zTVWf-0nAvTI#p6^t1;Klnq`#`bPUFH-;C+bMXiX*@v=3TGlqwfS6N<7SUgQw;(4-a zmU9C&MYf=0I3vpUHG#_0juO_$^)Q|^DN-d3sOe(NTugd>FZ<&o4-b^0K3DAKXsrz$@Bv=&7Z;Kx zrOG!O=cIjov-BIDuf)-@$^{LjU%?~{+@@9baJ@@3#P=Y)+??Q16Va4uz(tCf$T&$4 zFzI$(FfA*iclEL}NLo3^$i_8xNZHPTe?4fPIV_q)q_e@0F6D9+-OEn8UQp~cz;MBr zJkR_b&fom|mYOD{F=?q@YQJUe5>b+Xzhcq5KooK})m`JI5DLH| z`9PQhKm*q6g`kN;h*woh699t;BsW3l6%D`R_6fFLdu?d!1J2v)-y6*=wH1ecRdx*CA&pF*ze0g zC=3|~j)l=h2DZ`9{ETvz$b>&X1l+wzzcN?lw^c!G`rgB@Kzb~NE*Kf(@p7Q9lJ(2V zdEpvk8)Q2}E{yiXihc@Gc-Wc8+5Rj(CN~OD4^3y|u%H_=QhPwOKroWsX9M7n=c$|S z0F9Iv@j?%9YJH5MoY^r|G8m7p%#F^C(OTdI<0JtK)@gjDTXfMz?<<-DzBhocO!i`y zGuzL*rFjt`OA{CDjcepqsjpjjCQowC3{z3+-6{LTx?z@P$lV13;-4K*8G5-p>Gw$W zr5(I61L~07k5)jxWo(B|rOxl_xY?RycRJ}VGeevmATGA4pN1FF(zG_w4ZWnkY!T?; zIH?J*k;vPRuSs4uc$M%dwJYEAm{03cuFtvM=-jr?>97P-C0F}UH(G90$Hs{yZaKjw znzHOmg9Mv`!5Mci42MF<2#10e97Mo4eKSldcd= zVF#-8Ihf;|ol-i*p1)l5nV1eO_kF4SnPX%>qHFi+Mi()Ta%@*P%BM?jLB-_*&K&Q@WJXEfn#1U4GVtU1p_-Vj*NDS<#$(9L)vc zukG0&4=_T3n6w1wu8BIr*7jcDko4Fz5L@HojO(U9!`-B zSC@GN7WD6-TOyw7p+8ZwHvZCZcFv{<@EM&!%88Y7_!3F)S0 zP$o~Oy`?fMIREuG{I>V@EcTk;6F{7@@aW8i#*97kx)jzoMD?Q^5w@BT&u?`jub7;5y|@Hb~{l{yCI_TGoBs*u9Aapm0h=AQgU$#kf^IY(!5}GK0iTdy zCV7Ksk=uoJQMVl?M-w}p<(Yyu_(ao);hKm+=A-^`6q1L8)rfbkh;rWa9jxJ!cRTDt1yyUeb$YAFz(!SMG~(=mn~+=gn3g$t-fTear3ZDEi@21?wMGQ^AFTN!{__|CUjP9 zCATQVGfQQfs33rj@8x~<%HN6N*eY_NI0~-+s`U?boian1Fuhu-{449AA$UO4BVCQ@bz7-$gR)_6&+F6kC1*z1L6E2$c<@;x zfBC7O1y#AA3(DsdwRA+dvUPU0WY~y9DCbKO29G#O&OmA^C0tccE=qi2b?0~`jGs~1$66{N@F32c` z&{CH0Qf@$4H%L!ZDBg#S=zb}JoNVws5x_fWr^ImByS3y6vIfZ*3dE^&`a9HPieox! zEqD9t8IlGbGfZ-Z8PyX8NN{&Is6&_LBb-!;SWcNR<*xX zGuaexHFVFb$A>R?pj1G2C+{5ML9$10dXP#o8(Gp(2N=!5L2Y%B=Y1x>nxld;!tnxc z*N}Jno;mNZ*uWhp!8}k}r_o6eMncSK)Z%93W2q2Z6mRb$fV21;;wcj!xwh!bPiL%+ z2!M&4o(`M3V0kKWBO&3{I2!Q1IEjk|zy)J`HOMOK=VtKR8R}XC>+kh%ZAHz9NUE|9(Kwi)sji2=ZnnA&-6U<8NmYF!phoyoqMxF=v^`ccQ-3epsr!n_ojN9Is6~ z9nHzEZ?P%2q!hP7$(E;|`LRe;RBgcBb1o1GKU&=fx2 z@@F=76h#}Xg+6H51*R=9L*XCp!kaI%fsiv!Ob#H%4MSCC(9md&F3och*9cs6{rhQ~T}f6WERvmj>^-wW~w7XwKL6B4M;<6wU&Y>q%{ z06#ZVUd!i@-6qbm(!VIrp%!S_;C(K_lwQ$?^_jYEI4G-tor>UBCA@yBZP38<&$5`A zc^lT`A?5>-8_-&3qq5)`xj=W^(K~A^Gj{(QDrH;s8&Qp^|HDh{lMcXoSw3CDL$=sX zcG~OcW3K0lL`F}~@59(1c=8+u*-`K=m5VIYzp^F>C(rHmv*EBsgJyhI{EfTGXg+gzeoi7_=a525;^V(V3A?)ECdULgWubr)u}iXW^Tvc+Bg^5((R21Wz@xpB~BqrT8QUCN)s0+ zTvt_KuAxvr3i^W?kaL2+#(E^kdeo^3(aZ1w-IorT!o^Is$`0VZ-$yCkMr3s{gU<@# zPeDgpl74pS#=VXDoMxyaN+-D=0ql$rcpJ43#^4>8<#iWhmG}uGp{^fp=_GT&@Axss z$xu}lr7{)qjRfI@J^5TzEI9B&sO!+d*TGwB+Ip?S& zGb4H1LGoPwju#eIPUK{%Fs;z8Fnquxxjyhyc9D0MsDrX_y}o{0dT#M=Mbe$BmW`f+ z1)O%z*O1g&puaXh$>=i^0bvZ~_z7fKZ)_2D$eg!OJ=H_(fpg+}dEnKJMKZ*eJM9|v z3Mw?xRtMz+prk3*d^^TsKzowGjYsk_I60U-El-dpBp_w`lIbbtd_-bJ5J}7P@@3~W zb#UL?@3CDg*R06(*#qu8Ea93}Z^=OXt55{xaNPD)x@Q^hTB|U%NW*9*8Fh$jryu?s zPI0m8{CxM=pbB?$O_EF8;14QL_u;(kKGmn<_SiC>TOH%5yh$9XOieZ05FI>3Bp8rb zZUjxm=C`PV5TVb;o~4I1dP74Ch&ot`Ph)<6+2^hG%Q&GOz8p%%EW{ARz?C)%WzD=e zX3WkJFe@b}A<~`oJ2v4C&jSPT0j~~PggptwFfhs*Z z&)KX#Yh4`9DWxoDxBRKipam=8mEAl21frlSX9Cl4+^eC)u-4A5;N8;Lt;{gxJkF#r z9|v?M2sY~0eSE{P%zje!bZBP$@Tz{{Ub3{g7~&cYA@x-8$D6iRCLFJkpFA8a;;PJH zQ`kBE@(w^*l7ye!ds#_1w?EyAsB|}h5&g?k{j-80Gd)x^DPJ9)$6y#36$h5fBnOlvP8leB++9Mi3=X4;SZacs$-~ z_pk5UZKj(-Qq~~&94DLggTH676Gg+#Nxm}CE$e`%n<1|)H=i7;*I0-!Rh&~+-FQyr_k$L6|X< zEG6yeyF#rs9v6ua50V7ak_4o2>fq5hc0G95T*fq+$=UGh=q^-6;sJvxHrKco82TtP zzp8mGFsP?JZ;>u{0vEZ{wDS2uZR1`e<)*_2?np<*omHN^3SZ|^rpIIhvvb&LI^3t8 z!oS(l1>pkyr4pIBXB6DJ=>(iYz?;tLb4BTz%0ye6aVI^eh$+NS1cU8LjuL!8t1sp7A|fR+G4$W59G@ zlNxbiX8(Ash_!3ftuMAGDwYoITLMx0%aC#7GpM4eQ1Y_im5Zkn0vM;*LmZwzxdmQu z=mJSjR)e(KF~PQ$Xm*)%*zK4h7{CR~Qa)!pD{n`zdo!Grbnpuj0{oisF50Z`(V20u z8t+8aw;pVT9ud1EJ#wpcbSpvCqb}gZPX}lWyqv7zkv*cm2qL`zs!vFk;L60bSu28A znb4Oh3Yq8b596%g?)cB$5bjpQde@cynY|Jubqcg=`FMThOu>ok;c9kM1o{hD(1b}wuBfB5>Vpg7nrY7=g}fe!BO z?(Q0bCP;861b3Iloe&_nJA?qi-5r9vyE`=QF#Wvq*FWFM%qb^bMKzmsuf5i_0cESI z3Ug8L@4jTZ zdE~EeL?^3=Csvzyg3YVkZuzoTJ0pjt3}5CNI|8+Ic_z(ejn7R8Mhpv1>zk<5v^dS! zKOyEj15LjW#t(0Ep)ZgZwn&2{b(n#Umd0qPEXRNG+8Jpp749H6F>H~Ed8wcQ8i4_e zQ??$(SEy`8XQkj1iXPfC({E{u4sDiqJ*>AZykN2m8^|UPu6BWa>H+;-`+As}-kU}5 z;dJn3cH?ewIcyW|ly3lMx&S2U9RbGJ#?No=I{~#D>AEU`Ln5`%*U9L@sVK8?Jw!iQ zBwdh%4}8Tndd*FdnO~oppSZONAO2(ilC5W*U)JwM8frg7(h?A8865>(;?yWpRI)Use& z%mGS|abwV7_W$m*K`hpO1XL+0Bk^_;fbsq@26DsZ%bEVY5m>$C`YwvSdpe%7qCJ&3 zS`W;+bFlE2yP5S3sKe6Hgc7A4Odp&PHY8SKsaZCm!rs)=rXc z?^entN{#qpeD}YqA1(j5AiNwO*-(5WO1_9HZjUX6aZkb5EszHo7tO!I=zpgyz(Z<1gCH`d zmZvKD1`grz*&ja6KV{f3!{LK)gm0>VsK*EjN_G8eH@F(7EXSN$UyNybyWv~ zKNYGL3#wk~KG_6i{CF?nPpVXgUoCyS(#D7#Bg|!sBAub@-IRqjS^vI+F_c{x4#_^c z7*MTp!F|WeDIwXhxdZ<8dH*MHF5($+(s(hg`#Ivk<XuG<9aa_cqIhVWChf zquH+&MYDJhr_!>F;nvAHaVQZff`7vg>7HB!%Q)d=*^qo_P7Il=_WM?WQH&&GF$@Kkhy$oW zN$V4yAFsywYIrMG=rIZ33UY7-osHqT?qkCOI=zoc67K-@IRSxpSa8OIb#*a&OB##- zO;rQh-VG{%Cg-YIl_J*WLIMs%D;ea=3{wRGxN~fNK&@XUcu0;KS&=cqJPz-bD`r$a zk+G?%YxqIT&rXfuyw&M<%Pg?88YmRjS*Y8Ne&7nl6}<`+eAv8^1$4>s2F9yQVv=xv zbn5#@)~U95pa$?6{e^+?5W*Omu+Q>k$ywm!_+xM-66uy74dQ|2g?P`Ijh>^x&xZsD zKhy(TNdnXa;e*I4o$9NlYEU{!up*UDmFxQH^0;8h=?4;uP&$508mDHk9Bc;2pD?>7 zg%O-}4$F=9Ix=ae6`yk4(nK#o1pfWSo4fc4i>*TB zW_e9-a{LW_g;5(^+^_SeBhYI!r!$1!L8PnRhIsN=!}IbGnP-xW+u0yJ)+1t{tB))V zzF^Xf-sI@F1vuqLp6`(tTC>sw4L%!Htux_Kl486jV`p30>M-tZawSEpD`8r{ zVmtvTg`wB&NbG8!7_HWKOvmo(FzPh zR*WobZEak1(cgE9h!vF*r`w@$W+35yDH6RWQZH{-DC)~u#fE#E0=-p5O=#}ohlH50 zIMSrA*38neu4hq6;Hss7xbgS!D^8mE)LY^GlZi%4xXx7v+s4XEFY>yB&pPKj#y2Qm z2O}tu;~nr#8)d_Qsd<%`#|XzDYGT>mmn}g$-o^4_s{H?3Q~D>DlOQIR-~eBHKEpzf zb7#kM;tkStry3adNLV0!$H^O<=|U9OLv!18FXTKG(F);iHDwC?Cgyca{i6N(58ES6Ze_UwPr2oYggZtWIl>EI3SDJHKwX75a9&{lF-#6Rokx z)?is?2scW)P`Sz2Dx3BaLzo_FAXjIuwx~qa>AzOqAnxa7I?~gvExtDpJn&s;`c69X z3?49K**BASV_NvV?L8r!IB;Fp{(Q}yJ;*)Z+1K}!xXv77^?m`rROrT3R%@ZGUNI)- zt1<62?5+MrkvrP7k;QkPX0z9nt?`})F8=mH`@FRY^8{kU%^_W7t$aaS@i5Y`i}ivt zv5Yo9{BI?b)j>hDQdji|YpF?O?1YrZwV2n~YH}Nv%OhZX3E$V;r4Wo=p`yOqPALY* zj}$$HqQ&vU(?VPb6p!y%Hja!i_o3+Okd#ceY@R9UNECK=Kn-EnJ1n>Mc`Dx{SJkvw z2#vwj+%;B-BKaa%m_V8XPu3+|Atc7W_#jc;!~RGFwi-5(jvR-M9|wRuB*A<4?)xn`DIj=L8_+of8w3rV41IaPeiQ|02X%##{%M5^^vYraI3Cp(lC)L- z)mG*Y_or(Xfae(+qRf>i#{-ODXaNkhQq|G?%?`_oz<-CGzdU9hzU5KcI+W*5ruA*@ z$X*^Fxg1taSp>BE8E|eP{M{kP{Z+@(Sf~IP6&EoM7-2$a{i_CH-ek8DM>h@|1i9;A z!6(<@1Hvcm(WMysCW>fD1eS>Fu|`8fWf{VeeqSA3 zM<|t33%5t4)${6iIFnspC#a->CMU@(9At;U&M?_|2)n-*9M8smMZ6r5Mxu70NJxwr zCZ0(eB;ze^_2&oM4MBmYgH3WXiopPT(k-iFhZs>ab`&Q=6oj$$^mr|v@G5hT@!U+4 z+Va?LVz8^i0rj;`XPbFj^6@BvmA+ikZyr$?Uwfk8JtUwXsH6z-}bzw`Uzm0CagYG}D-N9)}k`8Rp*cQ7qP*D$^_ zU7i62n)98niNr3Iz+_ekMk2Oj=51M(`eUZ;+1!Xk2WFoY9$by!|1!wCn9Abw=>OHC z9*=(=%4J5N?qb+w9M%I)dWl%xfJ?tOP_4UA5RF3!V7vT;M>h18_*tQYz3eLd150%Z zBWq|k7e=xP#81Lgd?+Awk5nf}*)mSd19iH6E5A{sSY52)bqQWZ1E8;=L2jS{XzToM ze+&(!#M({3cEM36n0co|f1;t`%cB7Uu~;1LQYp%Y5%xQ8K>xQ?-3}-Q{f3YzNTMzo zcGcSWRN|bTN@WdmsvBOwMP@HosyCi46?*}qJXC7tUB}3}dYJMsb!b7~upw37S@ssd z3$ZHJxaIr%prMGJXq|jy2Hzc@IfiW$kmTS| z7W|hk^tGH3FsVbBVK-2$GG*F0W%4lP_%B|?VU;W%IODL2Q@fE8lCWlM z-`;{Iw+k||_Ddmie7wn}rO+cQUBz-qz^3*A0P9f<8E^oWgSN-B1MPVhq8SWEetCL+ zLyXOClk{)w2(Lf0D=c9Z%MeJ9qo{%}X!Z~5^qF_Sd{7gIeTx77zzlE{k-bhF{{EQY zqS%@E)#fdvy;BGSUTAzqR~LzT^OX#)R;0Tj(>v_3e75@0W)-fQ69- z;JC3#QDL|~Flme*lO+_Wr97A4yC1%eUCh@MOHh|s^AL_elu{@PSZqcOFaxp_a{>1` zCRqeoT&+?qzw{G!B{m4}s8k8GaYssvr6`!7OUi@w%+RL|VUQ@sfQ+}g_s9U%Wl7Cpw%T6MN7YETu8gD#;h=OKzR z_l<$9tGl#Z2%Y&@4m&!!NGI6O*7i;$-bJs6TRoFoxIN}&lxm-U-YM;FeDsFEmpsil zcOn67i}^NW24AfCE7$Kg9~1<)GwA7f%|s>1-{J89%@C?p-Ez0>U3)!}d}Ca7wY2^0 ziH{mtJxyRiBQXYv8DxSHM)V*~w4Zz_0ke8B}4|Uojrf%(Q4GUf`A#6}zCWd(hHA3b; zY%p)?VJk0hr)o%>)|C9QZc9kT9_pcfv&5OI-l}0}%?SQT{YR|q-qvAN!l>&sgrNcf zgS^?EJ6W}SwQIe)?AGlQwb<`E&w-l?L-%IL6I&=}FI9Q)C?i-Lsdpq7!t4Iq+}vzg z^!ki25oQD;Eg@aNaL!^^S4^1Ycm478-RXlkv2a(1{QudcF2ziM^$oEFz(cY4D`R%s z8y(cM3NKr*-x{vZ(9pPT#=JPnXguHMe3gD06n~RP(a^Chda8{ z%XziygwA50j@_)}u>;1}2+s4?iNb0z-_K$%`gd!xNyf2%ecHt~Ns~uw^_3q-eQ0(B zHOGq|$P^9?>WU@DEd1T?#$7Ii&J9k`>l>M#4sO9u+6s4Cq3+p?#0#~@{*&vEg!9%p zf{7EY))O_JOmIo#!18VoZ4sIS@I(1oRg<)(>QP>8OJ21=F4wZL^AiHVoMP0Xy5VHh z@u5H^!&XH#ZIC>84L4x?RAK^xqi)^^yk9N#K$$Si>J3-Y$_dCHBO=!2v4`%&lCGN9 zRbA13=8hRlmc7`>?Bp{*UOmM*fCz(eW-e zU~V3g;`CEm)8Y!4Aa(RbEd_W@lFy02omgBA{Y-yF-0uLA3DieZL731`diI<+rIXEk zHw?#=UaORUgyV@rxa+qM(1^A_0sxH${)H8xtBAsL5cL5Lz_C#l(!m8vHbd^4oY{zF zPHCLlNEwX79)t{+5HYYAmXa5^yTeosNInmDlkLY7z(!3@$T$g@7x`)xWp~vGu+)Kk z??XFpGJ~f1!aDB$s6??+&Dwr|9^epQ@p@klvMlB*ik=T1sH=B_X>>3QUNh+-f1fkj zv{XbQ8uQEK4pZsf%2|TbCYQ=$qw#_{Y1;#6pY=!Pe+P^%hj#jqc5!}|%Y@U%L)0b5 zvw*F|=YZS9HfOxyRz&O?{Har#AQep;s(m4FzSYtSEzh8;?xG?&9Pq4b92Z^y$Tpz}^fqbr@8U=XT%6Ph--xzEo59h{S$ox3y8P3ii zLCK(Oaxq3|SeJnbl=*XT0~CtyRp|?N2RJIGQbH(%unJ%S%#0czkHnJrk)98|zavq( z=zXzH>9u!>urxe@%;NPV#4j*bB1vzK&y|@?ru26;+UzWI_q#FWoalE3b+Kf`12J=jhC8CnHXE@-MmPjIozsqI z+%O-8y}sx?nt5mE@oZFv43g)LPKSytA~x(u1z4H0Fw-WB83_Wk#}(9u?)k zIeG_E_48W%T3hj;9ku=YB3*aNFsH`Po!%Qgcn)%NQANoOw3j8gT1$2CCT@mE4%S24 z*J9__!jsnp-5LvVb{(rM1NLK!RPCs3eTJOhZ$*OFwX?FJ;WyzyuFrp!n?-F5{@wZd zU9A5aXl~4T-9X5g9T)%wsQA)GeX0Gpq7M_Ybi^9cR%>Taux@7U9tXKBqs{OiRxt1mCBt)txc)%Eo ztcxxKe~eVYl9jCPq-4}Mc>Op?%_1;Rt-T+uehSf_CQ`GAh^`eMuNd7r7?;f-wB;Fg zg~#~aB_CUXTG|jPy&kRZ$kq`d|ByIKvUWL$uAcNWQENc=xg4UX^bSX}k0q~w99f;p z^4~_P#M8drS(d9TFCIoAcoO^BG6C$1y{~1}fY<^IV?t>b;B|Ju&2HHbD=Tqt-3au0us9)9J|pCyXsPyi%j zw^YLiC>AZ41w6@TGMU5Lpa75l1s^&`{^SMz%k^0QpW&6_lJAFqAUylr5!AC5smsVk zUfIet%G#;iZs@pS^2?jE=3oP0K{x-&Ex(Be$p~1V$TCvM> z2~j`)psY&Pfc4=WR~d2xnj7I{t*teAnvlM>3u3}PZAR8wa?h;iH4p-7>tg?ac+w+DG_U(<1K=FNn=HOMn=C1S~6RTI62{Zs6M(Wk+>oX64#Q;f8 z5+*R#y0;ZWo4tq&K3OzC5L8!4V*quxX>|1oL1Sz?Q@tzNIt0BQMm}ioJDX0kEiO<| zhm1ZKv-=04mNXalt4)(PO+K~tV2eaM%;wj`quJpIz*R=y<@nGjsN8`pCeRBea7izD zVsfu)*!hnITJwLO497^C{f*AkHUoz8l=YMjVB-d{Xa z3uY;Vsu?8g4~}t>=hfb&n2X{mDnQOUMGJz6^*4qtg(72;UxZWs7^>!HYTTf_>Ck|2 zQjUWIs(vk6v?@#)e!hg>P;_?3MqcJeUS@wjCfq7ignsR4dN*G;9T+L_etG_s$*Fb1 z10z>b3v@(I9tu&_@nd5vYPY$zKWGhEjQro(rgAFBy{qfaB&}W zf4w#%XrqPfRP+gMbE{xsBmi>a(5BP&Jf!>o4AY+(0Boc60*m03oW?UaXZKS$Y?5gy!65f@IpEVokdA95&&?$p4($pz9hrFa7To3>_ZImQ z+agmvZlT8j<(RL9_$gAf`~F9_`?~rZ`JK)BbuT1ZyVEZs9u^>dOk_Ok5Z=7W9G`7i07U5hR5HY5*=7l1!|cQ}6$L3+yzuBveoZGEe~AD^hwOxgp_ zheZ!uDK)+J*X!pIf3{e-}n>^gnTN8i{`;Y>>^6QuH{B0ASW)Wb_ZIn{;4g{IQZ=(XySpy!NvQ* zU*tpRdKjN5+;`z+0(jyqSnUIpb^@}DkY4~8kkVoKi95_Yw+c`A{tf+f&zJadye z=$*u-k3g$n?vIZYj1(e4b{!FbIrBzz>{`^>bNKkQFCo~B={d5VsCvGPi_-Ei%%qZc z)}MRuNLN3)Qyc~S8l zsDJ#S4K7fWb2&EA<7+leuQ4Hz7%G9}BsPj8VH_vA01bS}QyOx}fR`)ic;)pv^urNC zYW#ZhRzGtP@YOn_9|QVe=bp5C27ZH#U}$TG3kSMuVWC*$GlX?J)h!ah*3xr?2gXQs zXLlt!K)si$2M!LgNMVw<=2q;9&IhcH>no>O;=*gclUvDIYmq-wS81J+ne!oXAU^|v z66XuKySH-qE?EYDby{W$dD1@B&)O2kPIy&cP>@)=jWuy(U8}KZp>eE!WNDoJkLdI4 zhCNxt2XPahAmklS8&0`H5w+taM8U6?(Q+8tVVxjm!95onLV%*hf`Vb`d^W;X$#6-# zgO%)Qwe`tfty__c)1!zn;#bTtqkhK;kb9Afv4_Ty+t9+c?P93i_d`K6|4gVw`!=s6pH2xN#a8e8gZ+ z7eBY`cE^t@m9U^1*^*P*VU^Tg1a8ZiFO`%c%|8G+PNNoN=q*>cgi%|=uKKbC$Jo1T=yk>ZSonMxq}O}JU=XH>mI-95+*$Zg3q zWuV(QMbw9pl_h~;0_)!LRUxUMe)OtkTDOMa+`>}SMSWiW9`yzkb)7Wfr|m>uG#vk6 zyMvAsTl}#t#j`U>flYDx*}v41J?Y$3lNMtg{Uy0)OD%Tul}36K@<2qjbCPHz>-a6W z4!SIx(&+nyr;=(oFdx0r->D#`2Ms$xU-MJ_wuRQ|7&1&2uXA!rlu z+VN?7j45HBknuN4hG;bFg&56(53F>E-F)e>xMW5^U+G>drCKQqiQ2Gz>t9k| zua~+N5;FET!&kbo419npr2E&h)URKN(ju+ittdEWI_&; zX65bN6)*()kEMhb!jG0@o`kO{`5Nbqc``7SzGDuZBXq^Fl-CAywdacrY^LCt12YRw zq{z#MFkV+KVAh|y(W_*x8E$4o2ynOo<9En_)8aPv85yQ7`c3u{__rFVNRswWmLOU{ z>V(2NOc&-|NV2hg2~(bZ5wx5!g5en}Ta~gN$WKWVY%B;hQ2|xdpbzaEYMW*5@FRTy zPfJ_SL8Io>OcEw#E-gUmIdpk)xfd1|^#Qud>Y|}NBh^HbzglP2BA#Q%O>t^h8vWp^b5by-!_;6Kxe&sJdYu^IM_ounAg+Cb_Z z{P1Nb+<*@wTiK7R8$|WQ7E2>q*j@6UG3Xzlx&@m)krv~D5%5qo97WASJ7N^lB}t+h z?id0CEhu3Dl5dHUNY%cUMgmFa2b@x;6P_^CdS{xP4(J-@%_sA0`#axvI^lCzeTLJ! zbu7r-*4cOvpC+-$a5%IviSaPvw<_8AKlu9T0+bNbxJJJx!J5ctT5z-h7B;bbOiB3C z+5-t;jU=ou;{#I7beo#APP?1Cx_(J=%%yEe-LGP4Ht;(>@6-OR9F;zC?bacXvNp$l ze6;&%Z`hp#zQ5e;b{qY2yVWm^G`S6;5^N7^3kbrG)9YZlZSFG(EBX0^390(n{Kf8j@%O`~^frMEV+n#;W2McNOJ`uHgK^v4v%qNINKNeqdUZ zxr+mQM|72t$fch$|1~EA>i~{Bz~XTHo}?~0uv!CVMDWJNN6Z5#);ufU^{zX)IC$~PIcUV=& zFSO&p(!dNjlG})rsz6qA5-|go`^8n~4hl?A$IH-XgzFamM$jg!&j#J15yFoQPo+MR zrbON01Rruuc`76tE*5%>Z8doGn^}!da2^`qe~Y~~;Dq0QoNiOlKn_7TH9OS9B1@;N z0)<4GZ zDhmy+UO40c0e&atjguQ2v3q-a-{hMwb=vWd(0e~p1$u1wHfldjopu+{Z=2O>?Se0~ zwjAa<2nH+wMjhT?PhY|J;*ZeW=Km)C5i}ZGcE^$+pyl))fCql65LY>~1<*!;lPkP&Xi^pZxiOqi9 z^e)vdSY9;Utu5f5G+1oJX;kPOkui|=N5ObynzOGcHUdVb58sUt%x#w4xAY0d?=w@M#p|IAOV-w*LrIHvj@ZhDMl5M?~ zaq4bC5GQ|6OAj5qd%vn2u~xPCOfKnL&SaQehHavRPX6Yjia!opBbIE9IkzH#g)YrV zZ}j1*6Sxx_b9HPa3)0n&2hXE&9lpcPOQa6lsgINO;MM(6f;$H61S))psd%Pqa@9))_wbB;#D3>J9qRow+YTm4020BLTKuG(Kpm^efG z^HMTitYdTJ$|inp*qRmq#0+#@*??iV$)(_U63Rn;$yCba6t?=472hU8L9e$xQhB}4c>$+f<$+wLQ?x$V@Qi?S8!#Z+ z9tO;dc1L9n8JUPDcu{+1L4M-=pPf?n#uh zMdWY4E=QA2#Bls)a*Jg??)BVz!l<0hLS}205$i!oVI5CbmuJ8~#Utx82stO#xAG zPhvN+B4V+f;A|7hpXiL|6(>ag zp1!UOZhEM88G+wL^raOcF%>_q!>PLn06 zZ(R%s;Nr7?{=^I8A1c7!N1+weT;m>afq25T$FBNFs~|Yx_51&hls6?qW5L(wavGRX?EWB%TxlE^ z&v2$oTRsW?u9`hTW{$ziJYfN?;d`{A1K6%H@E{%;!~Ahem~fjPXbu+SX#t*o2?K-i z6pq&JmGL|WeY5E*&gqr>R)#ELTPsq?Xw(MzO>(phEYQD}>>r;ik|Ly&T+-CZvWzdE zoY#0Sr9=L~@6rEZZ&~1O4GKN8TlK%H`k!g?@V=-1|IbXk-Jv3MRd&7!p@hO(+t@hW z9ICRgvEg0F4Xn55>FIH#DQ$PG*}pFWQrrC=&BXn#K2^g%taQHW!K9hJ?$V1>z7mMP zY^`|i+?EM+<`3R<8JSxBCPXK*oyI?DeVB^fz`te6+2PbGx9((kUdef5^?P}He(26{ z*q&b|A~WcWxrcfq;+W6pOOm4-p4Y6^_m8J1%FF);Eui#n#Ed!ZHFvVWSE|3_<)!UY z*_}&0`a4?Lof5YA%!C#d30}TCnwzJ@T@dB-p>A^fm+u0%|wP zF#^m}M^sV*9lpi>t^1UmFW^9pe5jY0fV=CGjtyJ7BG2cq^p7Z_Tk3>mH|jha=`?b> z^+)2+CJJihx$`EoyczmwA)Nz(f$!Slvc9AR-+%S9?IdjI!4bzPUt~b7NBJ*qbr}Bw zhTGL7DgKnGUjCHQ;Nisc!e7G)SZd%Ismzpi{}mCdIxYYmGC*G`11iXucCa4y94EgZ zPN?2Yc69n*;5~UeKa5{b?0_q?K4nn`5J_WL-1ucqJvu6kSiC3*m6$w?Q06ex_8PIr zFv^n}lAJ*{d5fZU>724Z?o~4S!orhl)`UA^gsW4Ms3BdZ(*^V{1BzM!54d=6-&!u@ zZZ==~N1B}WV5PbNZ;*+1MD|SkUQRopEQpbWw+LEUGaK3YTZ>wMPL_FngTniOG)c6@ zZ9ACvCE+1c7fmZO0|&6!xBgeurHX6v)F{Bk7H{5uHU3X_L9cG8(^xi@r`9?oX9lE-qTx>4rto|fBpqlofOqy zp|kf6niL{gzCM|69cG1<`KO;xd|ji3QC*5kmgEWdOK$V8%(E!}L;3)2{s;oI=S6K@ z49Ixz!zLLd4)?t>9~!hq{I|esa>PX^7wICtci6rwa{GC+H#Mmqe$jEoq`yRlV|fO) z%<{G*Z4DhqrC1$PaZg(=aB`b=%MN4;c22hmnWx}rlejMMof1WM@xvKdWl&mj(!NTl znptEp9Nf60bQv1K#$K1qai@ZDDb? zZJ_^`-+=(xz2D98_N;UN;| z1DH>au&4Kv#W|+|n*2vFQee)XJ@2z*J)fgbnp%$fljbz_bKXR4V||gMg5Od3%nkeN zQISQws)9V${UmNTdX@d2cDAp@%c0noSE*A6FaOuwLC=db5BLXCkLJy{a}P|x8=~ZC zE0GQ-IC1ZbaPK$ge3s8XhqP-m$|DAP*vN!PTFGVY}3bXaH>PdE{j8~vp&O<$%tl;1IY zO2!7G`)a^TpiR1PZ)I>duNNb~zmN_-5`6tEZRI zu9~| zJw&G5Sc|-!L)e{mA`$b3M~cn*RJ)E`1bik58kV1^LE?lng9#{T1uSZy1SIS&BLN!m zHBf?h#hx+~0megcO$=_Ql!Mc^n2BUJeo5lIjk0#6Swl!>7rm9 zeXPF*7$Vw59&tVhMx@jTYm5%5cvXmsrl_gy;t&;^H!X+CfKMtJ!1yxXI^`s4ijueqFV$qXac zh4&;xh5^M6L=9}-%1b7PYH*V@PkE8(QW*qcl%j}=ez3n!2|#HkrToaU6FB-eATT_) z%3jsFmvwEII3U-L)-KN_Qs(|)EzZ3yl$pj0eBu3a9x=ea$$r7EX6~0&7YI7T#RESk z_pY;YW`o*i45m8LS+&f)36Dx>3kd-Dl8!z;adk>ybD3$LoV_-M3)j!5*nXWoQ7JI? zm$lsoFAD3sb^HUGo1}&HB-#NP?Z?miA**oLRI5!n^GtGQ;q-sbN^o~AQaC%?Lo+-o zw$B>xpTTc4{}qQzOJghk3&Q!C03Kw;pD@Y9d>C?P=gPG15xQc@#Rt&+AEZ@Ndd2CWbiPv^tl5?S&Eovib`PULJ#>ez=hut89q|{i#ZgH?*+wCS3RAA4DQ(x(HU7=HmG5()8zh(AV`7M|GFn+@+^)Q`%#};xb zkn^0F(=+6v%6g&!_fIKhd}meiIP|~{`Xi)GSNQj8G)UsC3bv1_UI8K?~&4Wy3#(isVCr_yk4dEYu?UsUrFod$q&E(At6T zD|wCi&C=2C^@!&Z7#)^UAqDoli&LeId7mvp^F5QRdWi>SU$}aPK(pq=INoCPi;+;N zSy||1Q*IB6QAYk#THH1*w+9OUOxALN%h+pNKBf$P6W6vP73`SGnY%b56;ydY{xu## zP1-6PBM!~l?{h}@27xz)gzsqUuXXM4Z{%~bQl$^~kbnMB>!Q=j(KO2}5H80RWy=>E z8OaF(-E5UNZVV)y@I!lV0op=}XS*^@ha5Td`XTK}-yWDl)AzXpm#_t5*Sk&hTfMNM z2(9oYzh|_owO2XduhmEn#*epB>g;l+o7MkN5@4N(97GU|ehw&KO$!@)Q8`h1r0$a{ zbTRhu(}ygA8`VjAbN~i;<#DG=Bi|PFm<*MZL+5pp)7DwRr(AWs-ZY!cP^;6*@Bk>) ziu8b(TX;Vdf4!>d;g3GQfJckIX)5cudC16fbjWS|LDHB2)yy{SnyAXzl*}D|wV*KclheAtU zpPTC1!?cV<11?B>aCwQKSEVUu3GQLKwof;TVT}1>%Dz9G3{1J>$1tpVmiID7Rv6iM z?ELBp)mqU{RKR$scPBU0c#sz($v=@M6)PpD2>pQ)?;~J=V&Zf{1*MRNy;bmZ+;1yB z%p9QYq>4po&BBmO55fb)td-6rHWTJEF?ylHn76_{^O^&AE@K)X8Wf%v5uGb4Mm1hK zxBuJtG+s*5<-y{=s9P{9)Y+ims5V3l2tJ(>VDs|+L{I2lj@*=%z46Ih_3F-Sa;OC0 z2Bn!oSnW+*%|5K8G&-FOAh56~Ngg;;PYVC+=^<*cUmxfV_i%cAVGzsKWFhou9v;L&>z0l^o}M;k{2^ul`LrQqh`K|7kglv_$N(vV@ESo zRG+(xwP(+rOE{4xHv}8hgesj|0iSJwvum0stF>pX5;1AxVa0C*K4b{#)Xd_IpYz>l zISD>bHc3mPLT|)%Mm=JJL=V!Ouz`k`0 zejG@~ENEDC(L}2q<;W3jp_RW#-XQK>S2%0iK)K|025);Ic5ne;xgG8i+c8+fgo??r_` zkAH)8x(1T2oBS_?{2=oQ|6xo?O~X|G@3o}{Lf7*Oy)z9)FhKKN)!9$5O0%u@c2)3X1Lz(l+>>raf`W}|C z_D-TFJ?QAP9`3P344w9W{~NX6=gK&nKfS#+ik{cqv@bXG;@jaxd<#?vE$6Xial;!1Ka?mupYmZn6>gr^=M?3#MIOY>KhT>Xb5AJxo3ub*qk9jexu`T`7$Na z!BTKgV8XO#ImnL@NNRb<*8FT;&F&(WFXQV)^g7_yb{p(b-PRGNWC2s{O5a10opual-^dS=7c&x|zQO{IQ?rZ% zp+YA!V6XriyXhSQ^ZNN&TEEE?bIAwFv_KPehPFpKg#iL8 zppDaw+wHZ$7Mi6Dt>iX)7Nm08kuTdehFZ1Z3)=DW0sj|UZy6Lc0spL6c3x>fJ}+JAd@)n0SWImh^hu>$fv zJH&E{B?xFJJf1N~)43e2kKFzI>zqfPii~{d5e%b>)x)S_t#G}uWFiEqaKcpq?n{2j zPt)vs4Da$kG%f#BTk21wNZ@YONB3cYcgYfKzwm!FsuT++8f#J0tz@AQg)w*P88{Cg zMYo9L@Fwn%csG!qhUj4=8x#`qv%XEgS9?L1Lge?QaFZDyVIUn>t;1o`YSrvFmg2iD zf@8Y8SC+{)4@G99JhgV0PEeRRn4RLgplj%jUI$`?#msG`W3kpS7Lrxh8f;nSNYyFz zs7+|}=X5i;CxR)kc>TS7W6*eGp0nZl&tcO6n1*=~B9(&-wEO9;J8u0B#Z{hs(9~Z_ zKD@7L_dtmhH5DYi=<{3)P~k+}mTVl3C{T&-`<)k>Q1IQ9thrlv8x3|%4)=1`4GqEK zgke02OFl4*3(ZH>G?pU*fnCrgP<-GCXh%zv`118WO`j3^h6a{Tl;QJf2hH z?YB^^4emy?aPkO+J{?$PA5TZSg^)gQec0o%#h>5Ax+&r&$~$E~)b)!WPdw|>|JW9@ zy46VV;Rkg+19L>?BnMZv1<;%+WpEKek=+2tsDy%9h_8WZAfHFHosOV{Z^xcA2*yIB zwpN`nBL!_?|Lj44BbJuFuU0tGHJvhMy19N>A!>GB8+d)bhwSxHuC>?4LeE*r$fgQP zD@emGNpB{d^V2q@sbhQM|7k>CVFm+iy4r1^IgR`|ZoJxL)>gm%MS}?ASwBuoU~oh< zoM(g<+2b`&x^7=qevLzgtBScP5}WU!RnC@#pvGk2>ijUTC8iI3(B){_Cr>8~GRSWD zdJ#Nm)O5+DhwV%J0#%fBjsqU@E6Q91Cl}rm=NS-!i>>$vo?}$1K8#osV*l-17m&^j z%e!;(c27B(?I?RqDr_57tUvNk{?+H2e1Es}(NFrULWHeff3<_bq$t_)BI9SsN}7~E zEJ})pb`rpUKtHfNCH#bGD?heJvQj8*gZ4EKI0X0hP)MxYC(euV=(Z?#|1?8JSvs}B zIA0;z+WySdTo+o|!oEBDs_%VKy`x>y1bD(fVM ztG6TuKzncRdCoTnG`Cu~2w&Ou4Bjx|ci(=++~0GOy~(9VzF>tL8u#DMZw}||0k_O< zHcbKI!7WBT(f6CrN4qd`HFK=AM9=-Cxq(sS?wB9Z6A-H1_?opD@tXAp-=_@~G1z;hr}ODPhdMJKOZ*8%wn_C@H?S;8 zm61%5y3Pc$lFDT7z*hRuU~c0CGuuhUCcWZ&6@luof-nc}8=1#5h&0Se~!@8*(O zD@YCN7~C{m^r8lcL8-GBQJ!kLAcCD*g#gOWEaQ*+uVRek^hbbGIQaR- zYZv+TnI&Ny!{!A2ix-?7lbYq@Bj&aY*=xw_H0eBosD$4Y3ATJv15YG9Ph@263|{$r zwRK7p{bZytH`G#L1H;2s_L>)(&Br{r4$x8 zF$K8`#X}Q?X>H*aA8pKl5|<4lm^i~~s@tx`8%h40nyPo`39tRi77dPCD9U$*2Qz4O zLcH&le#r#;SkOWBJ98(TM6z`6j3RsNEUXf zS`RKl@0d>DPeqK-2Mbo!5`I}MUOd{MVGeA{nBVEGtXAoqJsBKF$HpSMt?!T4CO9Ki zvfIDQA<5S5U+-vv1(k$nHk3i+0$(XRXU_+|{=va2m-ha`2EQe}LSi(hu$^z25*F4> zC~x@DlH@N{-=XMw`L!ppSjh7X-ie&P1su4JraTceT`Xrhq6%9Aeln@;3M85g)_ssY zz@;!|M(o23eq=RPIJ^%HI+*S$VmTEId_-_E=m>gzRItfW8Ss6o^?dwzF3}m=A;A7I zC335G2EUfBBf$)NeOZ~V^xr$p_m@Hqbd%$dlmg~W>)yF$YgBe;jH+o?cH;`KiEE}mH! z$l#awAH#);u5=l5)*)w1os zaJ6t6b|&F&Mf=vsUL0EsG%Bn*r5|?_eR}CXxkQlJZYv9*9!w`90%-b+yk~|QF7B$) zIDd1YKCMhmb4?{~2wI6k5?J`sPAk{pXM&B#xQzJHH$EgX_Q~Sp>fvp#Ht4qnG}9r- znQkF@Q!D4P)g2htIXBBY)2GR~9$rP^;^x){>w>mZyRDx>imaZx_Zr$Medd2n8Bs4B z6Vt5dzve_@#hUG35uI;z#0gw%4q|VX!;ZrL7os*L1_wQk4-5@+;_)SXBiaD$ih(e_~zUYpN=8;qyj58bf z5*YcmA1DoegZ6B%^}Gb;pO3$(@We@kh&3)8c8pT$ zvF-m6ME*x5^MA!5Ea5MlyZ0V9ey&_7tSh0k3n67g=UZ9zn9f=TX)9Y2!F!V4asPF6 z&_IV9-{?Ift(wg+_3)kPw??p68X;<*St-Dy8mKT}Fo1r@T;VIX*T8^Vn>G#lx6{A% zz#GFaK(AYg4e6s+PhI84S^3MNavHxGj(1FOC1vplOv_N-TEY zpc2nx9vJ|wCq5Zi`*_l(EY70ih-);UTx^v>${a%3r-L3{d8(Erh{Ol@r2mCdT)S04 zd3M@Ok!^O}zt#Pf$SgyJG4`9_u@#%b#b=%nlRNZM{x#kn8_{rRpX5^uL0*9fR@VYr z(i{g|?F=b_nTxGw5{Z+qbnWbu&qpp+XQ!P>5DH12sW%(Era1O8Wn3x?K^O;tG;4yC zmvakTZ-IRJLH(~`=kDOs7Uz6xm!N~R(7b`)TCi;7hCO>UHkjuX?qz4`%W@6i%VNXWlt8BG5sENWg)VDZN@HbQCRk_?bHU|K!2 z*^$2GchJ+IX!ON##anlQ_%{671l+>|SLXnnjwNAG%fy~!w4j_`z+^N(ZPct5KFCxe zGunm!9_*}QhN z{xGHF=!S^qintS$3I8qUdr&W8Q9K3drVd5(*v0R`SN+&co()Sw< z?#NGJ*`()MJopP#yttxh2`bPcH!8W(&eYBJ+S=D5#!AF$Y=b2JMnPHa6qLWmYFSmc zhM4T`Sgv*Zyn9rl*aX0YAvOfoBOvU>FEB=J^b=e>12;6SpMs{!defAFcx!UW4F|;{$|HXdQNzW_nI{Vz* zgRSjkGzdZwsO{#J-fSc5{LxNjibW$@rx)5bj*yKUUe3XsHn><%@<+>e^9N}(&=RPz z{G8UuQf4qjRi1q%R7-)EF*QVZxSP87DTg?>z9Qw~u#6Deh58-OWromk9#92Da!L$1tL%iW1ZwL>Me!Mm2uDg+w80icTm5h7e z98pn8w1%Cg@pJLRmK$wUWv3@Nr!X>KKQgl5&2>M~z5ti};%jmDqsMGGQjjfWyKVy> z+Da6~3ZgY9} zSrVW?nhKJ^2Fp|K@`R$~f5qxgCkqu5Kv2CehWpzGuLpwahT2HfJ!BFVc#Q*SL}e~q z-QUgBeMgeh8pvpGt|8s_sid`qft|{RY^Jb^GKRb+=M(@U5j?!jWQtR5ws~_pLe=-4 zQNk}F5y+V+X$$S;SYjF%r&1yDfdn(LdVjpabA=QfDVmC12D1B2&80#O19iy<$8XvI zy7+^V%1Vj8+CZCK@9${@$MA#;>T;K6a_Izxr>I5?vxoD^gJ>-NR1>6(qPCcmb@vzF zMcV`MRnON3R^zFO-+@(3mZFi*jx;i5i+!MC5`Nm=cg>3e{<~W=7zHkq{aF|t0$3!d= zLyD-OaKO#BSTAO%Nrmr!-iR1xVmE*#;ry==2*~)m9ou_+*?V07xkRh5qD1<$!5!4m zR=v-xVXg^XF-JWVU=8h zW1*2@CHgHmnfb=%Y}(w#fy^p`{JkS{w*B01_xU_3`VMSb9ygo$Bem5bn(`b}jjU=g zcshe3-FR7wya|jwXrpA8T~haN*3DzS`CtG2VnLZJKhyhi?cc(GZPaETnD)6#`hG4{ zW4Ju@f4p%Q6C1bN;)(eFg(((>Y1Ucoj=WqJBC*Y8Bcsi1BH~5Yohfc8nlOo&BM#z_ zzk06o-$tle?^M2y`|Rv7BiK2;;x}DqW7IFQFuL)_Z>Wm8`7_R_6jhqD0VpL)AmRKx zY@M3m2a=SCkE`;JN9o7`e8wA3$&&AVyVxHxMz>!EqrG>l7wi08$uHfJyCdD9PPRH$ zlj9$B@ItnE{i2f9K4eJI<;Zq-V5HR;^v4I>P@Qk|#GgY0WRh%=eo>8Vs3Fvtd>bK^ zpA|Ik2Q6;L_o~?2nYV(`&~?|UV9Zb)rQ99TE=(VVv%1R7%cWZdxE99A2JeZRl%1wV z--0?{&tm$DDkqwfu-T7iV9v|si4Hqr(@sM*5;~Xht+XaLEceUy*nx`*=T>UsNnp|M zuiGPaMc$VXv}}#cin#ba*@iwzK+s8&-uwC7K54LbdG`L7xwsdbH96&>Ae_VdkdFG3 z_u})%U5W1de;D|V{6AI`d%UPE(T-rp?QDYp2&u25d9Ol7LUTbpWGIt%V&yZxe{Ff8 zK>w^sAwWF^6+9`lbzBQ`=(d3Gl+f`uAjF- z!B`STT49&Jgnw%D%}}Ct;v=slCv*l?KT=~n^Tbiut-sqIT_QLmG>Pd7 zA}y{+Ohlmz*^2X)NFIf^;Ra0~%9>ilPuD2Wh(!FNG6(|L;BMez;dg~Y9>O8>F-lc5 z+--3W59r8;i!RVB%eD3ZwCjc>m#6h~qwIpIIghm-H&U@MOqIp?g2A&d=_`1Le~3&g zV2Haa-)HNs^BlaL&b)zwUt(e!kXvP1PRKO*A%C?GMUMdvRi;hXzbz@HHysCw`3BkrChKWo^o)PU+;bhqIRYX3V^cnFQ{v z#FBfz&KQbz0^T1kR>Xb)&+(MybL&nE@kgI$@WFcn%B!JmO_aA2TyREm94Yr|#_PrG znQn`i6KS)POnM=sgce6RCC8Mqwi7SB#N=Io?=Ur8$MjLc)`bvqRVpu2h+AXX31yDW z53d5Y>4-Q8oTfS!AzKc4Rg8-+@VD?RhJO|D!91M9vT17vJrd^KtjON{cM@VtaV&`( z>Jnkv+Wp}$Vp#Tyv?m^TzB#BVU^FS`-ZeHlaBZ3?;HH-f65)Z?SsJ_hn?787LA^lQ z-Cw4MoH-|u)iu2aw)u9?$v=D$b!09BL>x8TaEm>E^dB-(3y1gtaHd!gyldEkE?S-- z>qH!*5f@EQ$HMaaG_I=u?kipZ?r%O{To~Tgt$-sv(^S1I^9QcVa5b9LsRAvo7w7Lq z+X4~eos2=J*cbo5^&w>O!sK=hDE)l9*|#kL@{JDZQZtdh9CAtS%`gf)Wm zK3YJUM*G6Ah9hU<(_AXfN-WA}6+Q78J(wD}0CWv)v41LG@ zcGx4`e*Ug_l47|0zP7c6%WP;@Kg)Y}!|;YVW#=&uYC(Lb^;k1rDPzTL9btnWE3uPQDk(Fv^#ooh)z8@ znkk<)_Y1&Pto-7AWryh*T5gn7h*-@`i|${93L$O3#7wbuEma8ParDi$T__A&QQSvA zBBdy3N1kuua^c^msGRuxYCkhyAjiBJ(mjL57|RRf=UXrH1#23Q$iI@!ESbvuX&^r( zX8({o9(^57UNPYtK17Gy$L7mIVI<)PFX4_X)(-H6Y|WU*{8C$RIwFzH6jMWE91Tjm z;^#;{D>*UY&=9B+$CfP}b~)`6V|8-qCq&1GtJ};+J6@_gZ&V>f7 zbp*ykyZx~bIgF%greon2OS%o9BxgIAn}V@Pbp66^@`ts*!@9B!CDXIvX^Q4JM18(^ zTP0$8SvngwP0$v9WQyJqO|u=-4DBXrw?6RjkhJ{~)hIm@<%u70V3iVN)FoY9|InWD z<=zs)(%JrXz)~-QI;2Q?X-!9#9e>zf4tqCDdRT4M6fdY{a0|~`IlB4AFOIjV%&SOO zZogPI2OxJVjD6BL^-t)J1`~4kk8Z6~+3KNB?kXcpnw1C1=M~3P(N|<%n9*7Kt^TLz zF}{S*J&rfBh!XDOq^iL0~7X1bE zv_?+zNthzOB{MP=q$uP{bUcRoUwnhcj2z5#FTW*GqGW-+tCxT6P9S3{acr}LH`^+> zIz7+mpbz>emk46lQqklb30RHomu6YmC@Zk_b|d1?WpbTxeat?cE1%vnFy>EPJXo&% zsNUVL8xIWZtyDE*G&m|k(|p~Nc~s2`n%R5^>OTwF{P9?{40H`nFICX|7u!W%hb}jl zJGS0+5tjb5_Ge<8qde)UdG2O*qoG@tG)@VzUl=@DBTLBXewF#HpR~$8M_r*L;A?v5nH1giiyq z%b@S*LfM%HW$uJb;kn5_NcQF*xa*VbM^sYm4A-o2vhok{i{>XG2!+yBJ~GIMIE8m@ zJ>MQ}tM<(}wtW(jf-S=Yd3hsDaxE^b$;eAw$>hA#54b)%-m1{>@rJZD!L-&c)Xt)v zVE_Sk6VD&0V8>WNw{wclOWt z&k+_b@vvUJ1|?{v>ExDmICuoi|{Q2~d#3v~5>`)rsJ=6!p$|s?sS1oT(Nh`2f*PGMq&Y zCMm%sTwD(Q6by0^PcYy)7q( z51w6FHEn-GF8CFnRA|%MWW~)${d%qz-M@ zh>c^=bIX4WPoDo16Yl;O-9OcX0y%AQDY?A(_%aLJ5qUe-o_Sg~mb5+vntyt*m$!Yx zEo|rLt9%q&((FM|9`6ZKzMT5a9e|bu-R#RhUd;F3*S_4Lenscqe2G}9c@t?BE@x?G z)n$^0t$++BO;Y;U5DmIhw>g0*WquPLdypB-V4z_K{kQPu7gog0>S{Lipsf@cz&D z>nFsVCw8Uvv^r-F10nWqOGo1%XcMqt`~FShV^>F)p+nPum6Or1Jm8v@GP|$LPk`MI zv(#58^DJaf`p2Ki;(smn$ODpv$B6SirF++xlDj>5Ly}Jb#U{;8Xv}J^ z&|A#z+tz)<6j{J*^Hla-_vuuwe&Ait1^BMfpQZd*`&A(;HnPg*JSUkV`3-_qkWFjbkp{#T ziU*Hn-`iy_L>>y`P8QD;&S11s#0?CR4jvxq<_tzh9qZD~>GJZxIqg~V2`b;)>1(Q; zvg#OZN<~b@xH;<0H((g)lte`^gZlDBtS+s^#qu@x5MZy(O11kSG{Mh zAY!Z!iz#2S^xh?b5IaQRj2UBQMqNeyUeqGHJi!}qtT!rE&`8uihx=>YP8z%jYpdVn z;Tn4i6wMg}1*Kw*3`@}f7YhPl&m;0iz#%0o2aqQB?<@~4?$GjpX?7Qv&YJr1nUQ!} z8i+sIW$|02RmeKFn1c1a$lW-z%760iW!z>FkAdAs)e%5HF-E*K<3!xFOc74Ig=l!uml-&`j?vG{C z6h!NkM7v~9MMpvDKLz}gY8fLMlmNO2axdrIm%ER-&rmN2nAm7AL6%R2v08A{G>5R* zlVLO%pA|Nrn%GJMf(6;7#J*DXWK%iuZ#U7KtJ721@$P&N@4nSbtYH*0vgJgltP9BtI=hXtug+jVtAF9ZL_H#ImtWmtY) z-`;na!T;`gdMGHiiyt4P#vqqJ9tZlJ6_h(AGr@_PDjKqI%w@y9EA_NijI+4!JM==Q z)W)R4*tAz>QaZ1j{@K(FUO$a}_i15VCp~BA=z)_8Ru6`;f#v~LsIl)o1U;M4a@SCQ z!sMgxC;LTuO<>+C-PtyvAG8vJPBiU~1%(Q2n~qbp_%*YR&#~B(8MO~@^l?*I>71FX z8sdd4;WSZ`9`HC5e<|Na1?+LhP^L>qt{fx-+e8&TNbbTPH+orrzVdvW`V}est&20F zq_qBnwEjunzInXm_C9l%*g@Unv(4EnuPT>H`vJeL)7c{hS%GJGMP7kWYX`#?b4=fy zP|V8+W-~kN`mRc~J=#Uy+TIkZ^f9JrIKIHBK&sImwat~;Twd9+q&(;42mxL5pIF<^ zjbo3SiTe8s9(YtV%b`a2<}7S3?`Kcvq}S zhw&}e3nufQ$pjzLX*i{~8&c_*g7xh6f_CUt;T?miz6lWYQ89x2)gpZJV{gO$lcrJ3mreYqkNb(bEExx|bg9P+^i zVzI|O{$l%j$BS*ko+jo>dM=Iu$CC`Zu-1t1^Ecyn>vn6O5dJku3+7CVkfNEvN=uVk zn+<3aml)SV58C(pL|3!IVD7xu6@B~}Cl2UOc_Q&JB~K;s^EjWX;ZjRU?v(3XBF=R2 zD~T&*Z}}l(Dd;_kM=q#%HHP4Irs6674Xut=&LtP>`Xc@c(rNy$MwTNNwmi4XOI4T# zk5l6r5cJV3z7>Da$xy(Ny)h0=qZSN+w=A{}V3J&!;)P;g2i(&M{5!7BJ(@Hs*@KIxFmq*2(VxdvV_2kkwZ z-Mm2Mbj?ChX&r7;tYUh$cy?8hUjr6dCB6rkxsma`ODkfzt=(``J3rm55HEAGpzbCn z51`_kgf-cbk-tcs0F&#VHcCD=$B}!i-tFiu_abx#@&&<#avCOBPNRv19hqX%JG+o5 z=me#tv^lxTLQ_%m_lVKQcY7E)HclG5?qaud#q>-Sl%G!Y-H)hALpU-C3Ua1+ZC#rc z;u~VK?Od8se-Wn=bMZBN2>Rg|ojL?E(fi81?M|*xFens;ULi%5Ma-XYdLo66^vnm@$Z;mX9JHH#^Jk*fb>wWm0U8m)b66<$eTO+qY|x+ zgv7sPNrR8|FAMUGay%085Ys!#bXo{wG!zsoD@bd*cF^#Pqo$y#i!ku1`tTBrKjB?4 z6LUybr4YPhGH9Oy@P3|`b;S!!VYR%a4BYnzbqZOKv~xL8m@Y5s@^B3|^~P@$2m zP2lMKqsz|0FTSJ{LdTc#6hBP27?1DEBqwAt9>13n+&SZ{qQjUNS6uY`vwM<>dB~mpUTv8z6vS@&)y0m}$&k z_U(V*RoMJZY^}%V9ZQ4xv~9BB!wT1S-^B&RmvS#;N#u22D~Ve|x-T}YQNcpR5yT1P z`jUqOnesfeU!@)|KegwUy-*}JrY3aT!UvM->CZ~5MYKwOb6 z&wq;}#TT?!EF4n8g9sRDA~ZGAolw~F0z_tZSWufDI|@E9N&8O^Mug2Lz`L&Fo)O;b zP@3MofTi{GiDUiZIKal?lMJ>T)Z4X(lr)|5L<7;)iC#cVH%tHcE?08V2Tw|A-K=SW zca4^C_JoUm7b2LRr`dRCV#6+rk{-X{T4XlM>oiAVfO&l26U;ILSz+_OMU^ZC$+^<>+{2#SVg(}-?WF3jz#=DyO6ff0Vz&PyO7Af1TA-Z>4{zPyG z98Y6_dX!pBcS|_dkafi*c+RpltT)wnDqrC_qlX7~U<_dBUhLFcS3?`x9JN1Tv&5@L z`rE4Z_QSY@>!QtRlE@BkCN;B@~$fI>brN(rN=|hHD!AD(|6G}AAE^` zw^uX!|5H}~J6C(w1Y6%2Jj--_xL*?AsHEnF8hfgaaYUj(I70kix_S`4FSi3fumMu8 z#MvD?PT*h0E&td4V0vO31atn}M%7zcL9!7u(qNDhq84%`iv=^!^Rc)#*APxn+VM6v z?K=4XCmbj)yJD~|livpH#LL`N?syWkVIe2oLBw#nx_uWmUBI{Fo`g_sCnnk#iQ45? zs1jV{{x$+Te9E1P4k5lpwzyj&r0Dg&uR;n%}eN%>oWRk47bov)d_jMR^XniYm`FMC_fS0Q0 zmPppRw4hxZNzgd;=Z}91pZyrqP}eV&UD^N^ zarx)EukbL&4;hH$c~88~B2okkLL~0;jmFVYKAo1}k6F0=M9^L@0{5UP(gmmvp@TOG z?oLT;|))R=*Fh}bR z-GYBv_QKlovAbyVrOmak-3k*HF|u*l4x?wtwRe{<6a|_5!(e0YTspx$M53naTEp$F z{DTvBWF}}in*UGtb5aj=bpZ|IM_RR^;e3@i$t2i(icPqm&dKC6NuG2G$5HSXL!>?8(R(K#gbG^ihbh5b+&SD+J;(((hf2npEj)`iy zz1U;;^aknLeL0y9Rwr$uJj-$G)%xORcV#yZudhE6ve(UBerJohPjI%{D`hkMJ=}RZ z4sfy{vOnb5o+(1{_Io38GFTb-tc^SzPg(GGH{VB~)c5tZ!>ve4B{M$cx%5)R*2pQd zGVRHVk)n_f^;QX7TnDusKq*e%2EtwD?AFdUw98{B2eUK!8QNUB!-Ae6_f@bYwIT0} z$xQt6I>p3o=Ol(6n9L99+M_6X3WGg=VlhOEqmq2W$!;}+IR8GIE!NjsCCC_yVg2*1 zeYI{jf2oTBImn)(rfos>d7VMjt7r45?|!MHW#iLLj&Rv@3+cf>ozQNY-YO)!9?zB5 zBy0a&*3A|*Bjgr?76W4uHZko#Jwld@i?&2*S&&7BSUO7RNwMq^hpL@|@5{Rs|I;eu z>YL4oOIYk|rz;{hY(F28mF9XqOJ>FJe9XiB{iSlR!Tf)j8nC@~XOI6mJVZ6%MSO_1 ziNxtaOsUZyEvNd8hhDh{{&3k??sdE;D(nVW#PHBTqWDJZ{-rxK;|vG_KJk&Lz6tY7 z2cpzH1^!&h2>i9tz6pwa{;=WOx$0R#%od_cI(^lI`JJ@0e#t_I^>yrdT#Y$JWNJKd z+rd^>JdYUs!!RJXfGzC;#p&zwR`M`i%k|6k)P*Q<{P36D)tzQiB5iOIpLoYTI0Ad7 z(kA#qBoGnCkPr}r?o63HOa;P$0v{1|-X1DB{r7vmE$4xrCxD=PFtG0#EFpKYN3*75 zga=7`6J%`qzx$Fu|A`7&g=Kg0m{S8T<~qNZn1-+j-UGWjVg9i@wABh}jB zN|vK&`PjT~HCfhAdqhlPLDRqaL}#22L}F@eoLWiUueC7tTC- z7bSX*hPR{Vycx&g<88ps+Jtqt5lxp;%qc3zWWoI#6aqmyE1 zsiv6K3-6%2>;4pFe>cR(dGrZw%77zNK^b}ZwArA<`e2MXqS1)A{)UQIRNA0y^a#Jg zKugsToYJzh66V{5?;(sr1|v3G;~<)Y`Vj?FqPCmNgd1J+kmjt$#7l_51?y6_$?3a7el)cyFTqwP3Lm)j?g zs_Mz@N8;`fXVH6Ztc6pT$Y7@i^-wqQeyXnbL;fD+urA9kCt!Fk&Gcg2Lm2H`>yK<0 zViRlZ^jFQhSs_Y=o+4tq_jI(mK)&rZHzLu%NmeNt9+w{1Lo6rbo=BU42#L290mvc; z6)1Xs(~URv@MJ=BG5qj^!d=-mZ|@)Rc)uIq~Z0bvhZi?{XKo-2tSM zir_#e1`J@iL>|6-h&UY7?JcPL6pHjxazvxG%!q@kexg^rVKMEz{&;D)L*vm z*}2LwY_zhDUmpJ&;T;ND@I?H$yH~~-(ZjMCMxsjvl5W+LtO*M*pL&tpQH1Qm)95?N zCktKCeiOq3X|Mp$H0%`bFm%6Zrj5&E=C!exo$cEfHCM0Ek1F~w#E$lvACbw`0x+fB zSXzBgiHrjMsIe~$K>T3qh=s^BBN+AV+5vKif@=ZX$z^)*p*;3UuntlJCy&WpoB5O* zBZH_;=A_NRb5$;|{SqEU0E!^2ca3;Un% zV}!!V?D1|VW7I-eI(FavNLt4INp=M-71c9~ zxt})F!!Lj62i>(0Pw}-~zRD7JFK!KZEhnXk`P)}ZaX(at_83cOU^%}%6$jjBUinQt zRpPf}&l^)MrXB-TY(n>7q3%izMLnX5mc>1SD{&zczA_lEt$zFH=Nm9EqX7HP!M=wB zyK3R@SQDH4vj3oghX04%fsJpx1E1FrxALGjWjEC4t2!s@=4;T1Bdyn->1t@+jP(oN zwBmnoLfxS*po>1wb8Jq6ilR3Yhn+5Jr~}O( zOI4Vc!ZCg(;1wnvj`5-r>n#~|!pyMyUGd7lGYrMsPJ1KR)`k+)(Y_&$CIyD>m@~GP{Rv9J0_XoiCMFEA}>-mzXC$t@zgzcjfpfc-$eh#3KepPo*{*+f8M&}plFhzgVZRhzjR@;PDGe32w@v`Tk@@vXj9>*_Ru+b5#iZ_B}BjZW|ce?A|U!kMF z{1hUFA#=CYuq+bS0|S;5y=0rYlfkx>Sg`LrQ?j6|N-%#8;e;Kn*y4xIAjb_xBN4;+ zUA|aU`X2}|V}w4#XDiN>!I>2+iW*x`0of<49LM1qH!vz421G_f(6c72=DTLiz)Ysr zJU`2ffOv>Jca+IUgj+1klv+b7cS3T-|1kv|+PBlY9PSAp06RnECOy=0SE?O@NAYD% zT`0i5nNw~2>W4OzO@?Ltb-sKm^DGG?UZ&SCL{c+IDl={oQx&d}W7q<<+FUKG;YshA z;cZZCSjn~73)W2rn8a0^BsoM=C$KnJ>B4u<4E>sQqhT0nWLbLGw{3h25r7TlW40-! z9U=03Be^>05VIvqMsL+gwrln$GK?nuON~2r*jaRF2&R=fQ#n~xtS|Zw4w7;VkusN& z{)!Q|(3GD$mO1aPdicAzDf;&eD2c~A9vTbS{ipo!6W3Rj2!5612mjGSm7WM$g%e`a zYWe=P^P|$*PFw32lT|wlRRfM>dV$28b(rOweNVyWGQP)i%hFPAH?ZB@x5tK6w5 zcmOWd)JdURviEy z4oDjc!FJu!q{ZSVxkO*^X_|?Yj`iK1>7ahFJbE4z%9$R|K1U3&obIT^d-&>Gr}cFf zt?RR+JVZO8lA}H-lep`y53Nf#xR6<^F_QH(1^=1uhAup z+)EE1-4i(Z>taD&&$`d8`0%vaySwifF`0vRU4mF>$&E=g28tlBdnF1-6Zj`gnl4_9 zh4JBUZXbh^>-^HJ%?&|5>a8>>rIdcHs=?w4&yG=S$T#f(xuzNlyKG%vZ;_cZj{MQZ zC|@t4Lkgz(x=zHJ>Gb2(F?j^G-P_*vmBhhb|oMu`Va)PdE(Qa*JqU6DbX<8ANb5+;v%Ic6i+=T+O7`{zy0D|OnOJ3g= z-(I^qYC78O<$M!rmeeIR3F^9a5H7;k`^Q_d#bC@|Ni>XJRw(~m_Tn5*Wc~V1W>>h6QASfWXG#NP z6;pXej}e2cApgE<#L*7p?e9jn)8!%?+%U-)jHBsBX^95OkT42wL$RXGlzxWI$oBnYL_Cl? zS;a4*<#s~7A9M*YqQjMZl&3wAQ_I8Ur84A*U;KQ`*qiIMG5G1p=;`F-oq^~*R~*$! zMCyTJIpH^ggZ)-0^W$;4Hr(CL{so8y&dc%b7J)O+2l}WQ*xO=k+@Db-;_4ki2*|{% ztsbK$A15wc<3b6$)BbJkk4)&ZJFUh|ZvU0oTnHmn9vs%0tG z4TCPaMdN$Et)FK6_jesez#e)Gr{7{+qCN#nqW-{8sPT2|55-{?l|gOU+NNnoohbyb zupJoKgYH)cu(biIT*b=su11oF85e3TT|$R}Jf{10(qgxJG?-1dQwPlV1PM;`ovn-c z)o~pc_8(^^a+l|_KPGilKj*X_E)Bkn)bJk}n0x6Id0t!yPp!Ge3LA(V&Ou+J#Mj(h zVqL*L!c&*dJ^_cXr(iB@*Wa#Ua?gCU_V<`MdC!@@4+nICpp_``l^)P3dZ5KlK!mj? za21;@Ua9fYTfi_*;rirB4o9Fl&cCJFe$`L7Ti~z>K<)m-eq^%)jlFj)6Z?45aqVQ_ z-zx4U>F5SIYmm-5JsZ56I$IGjSo}T}+t6L9>SbJWd+8_Pfbw2o1(8ym;k<4YEJrqa z&9l!%Jk>-9Ufl=-Yy$k)1CXuU2|lbl$Y~jg6Z~ZHYq&5NO}GbqD+XTo!sp$SPHhJk)@{)I#EQmq1(DvF2 z*G`yyA!bQ41hv3noT->kjYbj`T%oDf4qI6sakt zmR8*nUmi(|&K7*5!d>To&+c~#UNmF9i%Ye4_^t6e?=C`MhxpNK$EJD~N7Zta6s!2C z{=*`Ea_KS8@%q8;QpMcE!K(A+T?dNk6bJ6c(6=t>-xe;PWh<11X<~9}AsG&TJrWpx zYvc}^=5)c?>o;%jlvF+>LjSE_|LYj3wUV}kZN4jN+TgeqOTtAJufG@#`3MwNA?DtH zp(OIhaE_^{O=8S;D6Nmv`L&WDW2wL^r}C&bnJ&tyA$B4X_4Ji{pLXyYoVnyX&+~N{ za0$Dxt&J+7ZU%xDEmgIGi8i5~KZR>sm^=FA=Q-IWsZiu%{h~Af4oNIxoeXA#<2m{r zM7hE1=iuguW+grif;G*z717I{WcQF zrAzPp*g2xx3v!LRWAtxQNLO9`XIgj`2aIW7is>H|CmgF1NVaIX`WQyTzq^BJ3#L%P z3;q|~@ho|{ph>n<&cIPKR>=DhpbW#wBi(APaMa0Il@u=#LM=`Rcu~frpAE_lUm*lh zoe1mU#)h|jMAanxAaBTM63oV1M6gXkwW1bhqakF*mJ->ZMbl>#GVoU~p?SaIv-Rbg1oQoRgK4Z8M=zy7|8m2Yrc)k2nu=}B{+k(~Xv4qW@qwTPlJ@xFyhVwjAOi9+IqUoqOPc6N$- z)*X=>7BW)i8m;lU#y+gc3jgo-c{wnV;EAqZ0KSh5|31(E!`NE|#TBm2!UPF}4<0nQ zySohT?(QC32X}YZU;z@`-3jjQ7Th5?gn#xv=dU{TottyD=5nf5t+(Iqe)?%UT{zzR zb(;;M5u25G2I60q^b8s~h0J!MKD)X!Cw_D;$9Z#Ld5;Css4d|bNHb^+;PLzxI-Ywz z|K=Jxo>Qwasu$sH0NOSqcb+CuS!hW$gvN}q|L-DTv|PNlnK0<26rh|DdFT7Cp_r5* z2o}`IOAgU+f!Cz6GLcZFN|$rcmZ?kxMrkrA)dF*M>ln6zOK&XulC{ZkhQHKCMlH3} zvB*ZiF|0{8TM1z%1$pnTc}ygbkma3pIw@pKpvX}#WMcm4&vjDd%*6aTuwhJe2xnKz zq8_Fk_Q_)M%<1owim&^DfY9q-Onm_`?ANbb2`H0`%B5o}+R8gGzy6e&8Gc%c$>>3= zf!b(#XMo-5@&D+$hW!VLU&`j}qCLHwO<%7rx<37V8|Jwi74>zq=I3h0+8aRAbH1Da zx4P}p2z9u8Hu7`F3wRpvT)1Q|5_I*_gF$tyxPidw;a$V9K}Txr!^wx=hZgDOzY{d0 z-Ep~Lr_(&$+;=Cz?)Nu_e{T^rLxR-rzM8|T><#v!lm@2{u6n?ox^N06zI{FVWCEmudQrLaVgftL$~jgDF3vlU^z zVb6t|tP#Gr)swE~tBf;n^VQF3uCrFle!laroY>(dZ-aK90HWb%lckEQoGSF`mQC=n z>E`-`cTJu)UH-D##05!i`|m5=O3E`+ekZX zl1Ife{ zk`l|tbEZSuqn$P>VvL8*9=d*L6Cb3cOEoLQJ*OQcj zF&wB$bwCW3Hyy3@#JJ2xLuu1Jz3r2FN#7=eC_)ZJ&WM!UG1&+&q$fr^d>WejOyVn) z@?dDg1v2Z$>nw&1egEBOJe~hyuJym;LQm%#J$N45W1in4Sc=o5xTk0#!VnW`Vz!2l z>CcyjQ=f*(0)ESLGPLv{yMWFrl}i#NxC;uy zWhr#(6;2zaavAjQ%ZFwu>pPJEKt!TgRq8>pJzBZ5?)*MWC+4Y= zPnr;=pFK0_h?9)6;JZ5M+-Dk>v+oSnAfJ=ZU+A(`#0uijgkFGU@d2TmdXP&23Fc~+ zC4*5DVj+SIO9nSd#&oB}tmmD7sv{psr{gLT#39sjxC4G`>4|IS-UbQw*$l+DM0w6! zAFdZw=2r_=Y)U$O`6g#Gxdc;gyGcFAH;a2ed7y_H$>#Z<&G@Qv0s5nJzS&w9m#qMX zTO@YkMe4F(`m~}TG5(DdM{Ay4-J)>Gumi5y7AHv0q{>3n z3keaQ+ibbx>(0i|-P8FPZ|=t*^7HM@=!FFe1~f!mlePPyI2O%oUB|#`->&N|4Qwt^ zjRj}oOFZ{&aCeJJL^hYkJ~f2VZ* z9;DXjyjjd<3>iJH_IyLn6bvkW9)^WIGFuT_nE*MV>{S?Yq=i|el1Kx(iMKkVeJd4B zk}|}2G5Z^qcgf^x*=SRQU_2@lb?f9!f7gp+rc?9i;5hcr@sOMJCTmM346*Vtm|htw z^|chQj2Be{-R2S82^jXKP}JN5hYYA)L5rD0MHn^&q~a`TaAmVy>Jx|-)?nGO93 z{}*&f%?4FAeBYxLF_40CxgP*2Qul>Usy$(NpB7^-55_-07|d$nl)J*jLAG>%ejOhS z5_NU6+qRm>=PajixqO@x%73(AeKKj@-@jxxq;d?GX8mpI@{qVY8Q6B@!-A`Ys?EbU`tj!)g5j~j0+w}-<9Qycc1qhq_6ZIIi z>(($0yWCSAUKw6}t(W3k*zK-)jJ40V^XT$1MOHa_d2QNvMeLX&es$!+F;i=#%4BaK zl~Vx~&XTio5@CcPMkB)%nbRuc#U++nkO=V-;miHt+2$r=MfsiU+g<~5OV-R4{WYTl z%u7a18%1SAm$*;i)ck{`C7S;Y$CMR}=sL2@5{0oliU*M4BH_?cx^NqztpI6=HC)@G z6ob)S1dGZYD^wFE^_tCw<1Z3R=_^E8>`{&CmHt$H=VMGO=Ld9%5ee; z1tLPHn5+815keqmcNnr`KJg#LbqatKRfDWg==I3Q_F*dl*W~uwk4)yam}xfXWEM9W zU1U06ioK~$(2HmK43*=}tftH^elSX_69BV*Mo`wkK5T#nM^w?}+{ykdI7Z{u*;tlO ztnys{BlUIL!$PFDBbAvaHM9|_oQpkHM=F9%)xt+FHlH@;-)s@7ZZ53$W@id`#`fsB z=Ze+wCJS|QX@|4z!j@^oF^NJPELlzbK33wvHR!Ad`ngv-#{g|*GO(1_`ZlD+wRiV2tYw}3g0<__b_>%(Kfn;?_F58eUi zq_VDd?&KBdZn9NSOwL33BqKTD=xkbZ_j`CfOyl-K+cSC{8_>o>E>t4dVv5{Kynag`#7 zcLIZufMw&jgO-0tC3DV7LY~HtuA4Cf+A0;U9h6G0FPq3gCK9k0xDS8hlvmIdLunZR zlw^@SYr+KE8*%JMLZW7VoR*WiP#=-zuw|J*5!l&o&u~w!d8=vi1y`-Tni!~;+zsTi z>$5>E+d+H;GYsOMUzC=WIM6KHX44P~bkdM&KY=0qqt*8wL&*2T02U6;cI22_Vo{34d&Wq7H^KI&+n_EMnNrx%cJvLN_gvxW@5pyK$p9yI`o zXQk{%)HS%n*tc^G4ojL{?j1-kS&`M4#PIw|AHdeK-?|DNGAc?gC)19svY7Qa^Ivdu zt;>5Tis5Uo-fTx}%Ju0lx?E~G{-;M~QP>gpd2QuR?fD zmp2+6_azR93H*VGW~|74juBh~gotVsJe!Q2zDUcLPTsFBtrkD$LDS7PU&pvFar+$& z_fgHcJEJDnszxeZqq~-}HMIc*2hVFNEqF~ip1U(QDXlICWYzvYh{M7@5kdhL*GRWg z%BFOws~XCOi(*;ZG)qENwNbYy(xyuG4{MWDE>8x$T@92voO`*3vi5HGb-(>;^wJ<{-zRenubHUve7P;C0h1JDzvsZHl6xxK&I_`imezfi{%yAzumtE6hy zvZ%(uq2u?xUH|1e3_~xpoxmnzOj(NOB^`UHttF@&tR$hrZh%HmTvs;rAX&sbpv}aa zC^7X&#BX>{)0Va%#XuQ5&35{`KhWxS!clF=8;5k1u>X|gIosZis;hyo`5M-HO5^sf zaXZgi19d($z6}w^F4sDtueYrOUM>lk4gaye{Ucbeei_bMhJo;!|4k;=(9lKJ5cruy zZ~68JmrrC9ZK(B~y7%8vJ^WN6#-fvar{;E6eJc+g(L}r7^ zVsO`sn=E7-NFL2mF=78&EtV{#U6?j^fzd93YoURayrv~QQ+4in~Mjo`=qc7mSU zS#5a0{N1*1g8OMf)jogw7Q6RU@jUqcd^zjUK7ia+DBwtN?%TxwhJwu(wXec%ibPdv z+uSjY0@jKFq7F^$W>}oiFxLD| zU(%$Y)c_<{po=(|C9@}LsfTs;W1z=Fs<^9wZXuLDureF~>51>W)}&e%##ee*#^aao zi8D{6GCrXrv4FH=U~YLSAJrgzWx1m_=2u@|jQAp1aT)gG?xaH#?4$3WDb;#p7QV*O zDz%vHFA4Iv?~*M%*o)KM*B)k&u-5=*RpE-%czikT3rs~@gC&e%qHXb=|E937+&^?E z=dhz^{KWjv2@@yFNh)jO6y1x6WU9uVl$j2fMhbuB=LLHt^p4duc~&^1M><{GpRES? zMNVLnjAeWDK+#MlY2k|4pPDfvfVp64eF5inG&9`#vbgMZHDjXff|Qggde2U{N2sgx zM7ZV^S4} zSc?dLxEg|o-v;?Pz>yUd?GWI^cxoaLjHd`Midc+vSFS#GEVX>Pr4&IyVjyLRVLc&>%ca7yKFq zUyC5bK-d9m%*_D%+8S!y!d+VvEEt4m_2n4KLMT`r4xow4H?$3*7N_Ir7UklNNh}(G zzU2!9!ospwrUc`lsLQrc;|IW@@+>Z%FdXFFlhZ;O}+M zS*v}(RIWfUQO>d`ZQMX`7*ZV>4dL&8e5{(yp!$1;au+WPA*+nroQFb}d4F}4v8@)) zs#lek11S9FbE$!)ck2xgk(pj-mQr`UheD5W!v%-UWz=t4^FD!>U6iW3VI5IoTvyo7 zx~FQ5WkPo4ev6hko}RN^n;=-ro0cMrG9I%Qw*e+o?&#$!ag)0o8ZyM?Z&LpAnt!-j zr(fN}b*Fx=2Fv^Wt6ZycT5u??zZkLc!sLzP7q_;OySL1w;}+GL+G=B(HUMd@LW>

    }yhLHgzHe%BZZMIe{NB>nXuT@4Gu?i7qca0t3^;q<$2*U?2NJ5McNMP z(T6>9MVQ6!d;Z?qU|6{A;7Il9wR)TbAAJ3EeB#H>#LAuhAi`nL&^o@Gw^^9~yv7La zI(ARiC;^zC*^*@zkIa6^qBGj@o+KUhQ(O79tO(BPTC;JKs|r5Ah%weF!W+kk^cov> z9m_1AkfufI;bVwjG*yXx$etmn=mQ1c#Ryj8N|u=UXX>&rt5aqYBrpBWHOBEsOSP&_ zySvZbS@4*^DXIyU?wbg#&bm-?hiQ!`WDiM3pgUpPxu=6IS3wQ*Q3pnwz z$k{Z{JhjYYRlpq<6CdJNraLUw^~s=9u+Mojrf0R81DQ&WwugdsI}Y8dO|Z++zd8zceP4&$QMB7I`3Ip38cSRWsMFWnf<3=#2+r%O zm&)f|J-w)!74I$^H7{NrKIFggN4`}12kzk4>?dHZ-8-k;tnf{$tTg#>^94Lu{#ScS z%5*%s;qwpAT^iyyDHam{D5^m%K-VI8%zjUNc7J1VYced7pBQL+6x<$d0-Fn)C)BoW zuXk|sgR}C7)kq$WKP(F>;$5AW9yjRC^B$%HdQR$NzH?}QZ&^Vn&WQ}g!m){ql$H)+ zVkfvk>|P?{HAs-Q!N*8Dk=DF>?xZWxA%eg{tvEK;i+uScD(vtmI;BQYZT+Vt8Qaj` zW&Qa^aB-AqCdnLw^l>9hRbgYPQPOSreWUoHWA2giOQ4E|;?8D--{%6PfCxlpea0ra zh`!{w>@_}$(z@DTpzrD-$L2(Y&uKIGl`GymM2+Vw2|T56qEWg(i^GgeKQ}GUG|(s; zY{#~22_u7@Sc1!H`i$MQA=3LGXzwW z$)ndfpVb(rpnprhY*t~TmY~5V6~I7pN*AAMtODcle_^Qh{fF0lxfOzCMzzOA z2#Sr>Tn)2k*bzu$tqYbPEK|!?tcahkpA6<8$HaF<{du-Dx7}g1b9U7|wDpKOkZTlV z9s+|wv{=}V@soOV1f$3qB#DXv*TzlR7veQ-mxtun4b)lRz3p_k>*WOg1`W1Hva?DA zd*K8z4oP!lkj$zhN42HWIQJK^Y^LbMkhWy>OTSudufJaJMqGU_tVT3ZNrHGNqMcM~ zkwa0ErvoGTL#Y@D>NrZv&f#Q(r%33<^dfGOLP;^@f9-W0;mK?a$kmqtO5^tA!73OG zPd>n@J!W(&SYyl!R?L1Iqi{++>wxS~YC-VAk=D}wNEGHuvl%_KSO_cl#&%5(2bKyC zDB|w59U&bD_#yaJ9=yc}1+St*f=v0?%zcq_gBHg1)vQT*fWFR# zU?ht65Ht%?AB6U7dE+=0p}M#dKlnL)G4j3VRV3s`&QlD@a>X^)Ft0CfkhOKsb06Cp zuq=aOXfWk0_$p7^plgX)RC_02oB^1yf{sa?@g-(K>h%W5nvqrmO|mgUZC2G9kdxY7 zNMWV$d9XMN&8BxuL(z9raV?NHkN8x6vx(>A4(ic`anpixZguKt+wPVBEJAiA#LnT6 zLhI2jLw*)hC+u#Vn1P_;QPBEBN7aBClG}Psj5LO?RI-uv5bvYe1YUL}C%wx-kEgPp zeZj@x%%7tb&UlRbTWKnsaZ&!5EthMTpt@th_a!)_E^LCwLeqKwqSfz zw{4vr28G!+Z}$S-cb$ep(-}k7Q+K@G-f`=R>y1RbalV#J5w=^Q6WNnw7IjP7?Wivp z!38-pI5ko}qU;=DXKOP!Z6HS6Ds0kvHHndPAKex{8W+35ks2vm6U@0|e;Wr|cb6XofvpcfX_5A!ymn}9Gcu!<)WQje&jil;|naCO@` zKIj@ny;b@~Bwpu}qUC3bmV?dO8UEpdGfET9@A81Y2AFc;9tzmO(!$Dags(*JfDGpR zzO->Gr^^jiU*Eri_M0oP4!Ve%H4noZ2c)%!S{?r{KvNZR+`FU$bwX0qy5@#awN{;X zUvs~U5#BmMX&Cu(5n2jqvh3iEyb%yb!x7~}2rMYS}|$eW!L63_fD#_zY|0cqEa^%`%QN`e4QyC(@Wkc z0Z(@+n{Em2mp$|Rr`PiKdHEgl;ES1>Uue^hE3+XR^L$k?*4xf`-&lxs%6Qu+?}^t1 z@3yU%Uw%0Ad;RXHdVi{Zc3+`i#uUwaEintY^t?PBcSUns;fB15m}hq^RmaZ5>Z_t= z&NC;!`6JI9@MZp0HNERnN3)TafK^V8-w(d&AiAk_!A0&d=h~X_0a=5xS0&6TFl( zzZ@m8nhsc@G3LXRf3fi>Yic01>BjWJVh5MvfuNerGsJ!_6m}Nkb!>yb{@x(_Srcqj z6h9MrCnH9wYaO?`;<;mBztx7jdy7oB%qu1^-UvvnpBb{c&7Q6GXIIP>f-f!x6f$Jq zJoluAkK6++lTTJHa3Eg&Ogs3iqJArsn5K}69G&qbt%!6mp~*skb#&6&7j)TLZYS~R zPdbzuJU+Kr@r3+vO`}2A>Zjb3k`+WMw3_0oIU`u85egOk(M}KlVS$SELAXGN!CH4g(gYVTxz9DxhtJX zjdkyq=i`2em}7BaA^vXNtTrZggcp$@c}(|jjM@A!GpgAMXeX2POaXY(f40_w^F$!+ zBjxF&P+;JE{U8|CO#8T$Ltn;X&)%qm21#wjMtJrpB}p&r$kDtWZdXP#lw#dlsUBc2 zlBzETc0r2|a3S;_g3IhSM%R=YR3i|4ONj+Yv(0vMlS*4kCN4lEDxJ5|dZ@8iHN2Q^ ze+(R3lg3L@(fm4XTf!O0yS=cUAl>f=@$#+{^QE)cKH9(8{IP|H5FMnJc zimO*&KOsS>V0hWcFI?>EB7}_-Pvr*ViORZG*R)?Ystx6V*pRV_$7EN_wv@F>o4mmU zC8j5|h6K}pR7X*j&;g`R64QI0R#7IaOddzLY`%!#e&s z>k5|5kk%W!M<6|P$$z1>Tyi$*P?q+?fvm(1{y{Y2uoA!V;xJOZ4lU(C&t|7Ru}K4B zI+`K8&DOrQNHBQ#;}DkCl{L;SV$@Ci!X{+qNz^#>=4)5Tq#e`PNmX*lK|zU+S`ZXGn-N)Te}cnS)BA`KY~ z#zwGYNMJYB$^A5Ln#W*++pR-gEuo_xZmdE9zUR~V(pOZI0!KL277|gz&kW*?ps6EK zkMd?X|6FS90fkiWGJzm(qa*_VmN!9V`8>)x&K;$yLv8u$*~=W2Xc}(>-K6BUm}FL6 z087^Z!~b|b*w!!{#{HP4B#dtL;eY+$k%~3vX>87e!|*tKuAx$kweWv(oc(P^sDO|6 zkKK@lfbh0^y~>dfjFi{{lje8V5rUqf%Y={MtAAd1`+^^MhuDE#hfN=3cZj`)oo{c~ zkjI(%H__3sO9Q2#pxNE;a;Z)k?ifM*=^a&@?<5P{Zdl#=AUVCfc(NoU9N}_igMq#t zmA7M>!CGFpG&^X>OkA4;E_Zl{Ls5DPLEL6{RayC;=IVkrB)i9N!TMHTJin12dKlD= zg^4b6)qD>(%PVM`7upe86P5$s@A?;99@(}qT^!DMqijBe6ck*vgU>CmA`i8_Q@RxH z1eZ>_JdT&&<+<0-h|YbcSG>Qv6V`kg%6lj-<2?gk{%RHyTzU#$dZ@N}W8~H;Ch((@ z@LpazF@W44^lNIE#`w?W3?HkPG*jW`h##%D5AfU8jyL=mZXRiRX7BhF{<@}E;ZB>B z4~r(S*0eaTL*VK{ODl!IKcW2yoH9Kd(0bxBR>-DX$h{84NDFLDmu!uPoe>sN;?<%VUZB8!(a%0^H%KvnSBl55QQ z5wX?ZlFZ|yrx>d|>7QcR zTS3u3ZE5B!@;MZ8>Az$YMX)x&){WwqWSy@xe=u@5ti}V{ALNYDjN^bc!F!yM^2&vU z-t0m=KF~JlgrO9?a8)8d2i$pc8No;dL}5H`=U7}9D^~)=+TX-k3TSgHU6akRw)&Gs zKRYkov`q_%?f+(^`Bf3Y%a7J~GYUviGa6lBS`Af}4TFLZ6}*|5xoA19p23$%e)K91 z5{kuOh;O-AH|M3!tfS=T>X*W^o;D4R`|hq-#@hpaqM4f6PLCttB5i4e9Q}{ov=gOaG#mHqElMatj;|E=iU!`=$1# zU^bgIiqX%q9kV+#XS?j(bn>^G6ZJZ)R|YRj8ULKe=~~S9ZnLFT+)ky#A2a!$P?9fY zXTf{QiLiK7Qr~9^C2FyedMzbZfAILWeUS05PygPpGQdRZkP&y(A!x+jLfSlISm4Lq-pPhm`uAO0l6e z&D;(zbX+0caF~u}GK~sx>q=xh47S?nwJLdzmb&O9?b_@lo!u1sAhfChe4lDgTAZi3 zm+Pj6*y<>eusk6>)KIzx^dDmqt$fobqpLxYf1$47zAu_t8 z70oe?YpFE(>UwIIlFmfqGAMoMXqtwMPk{OcU*St0_oHC`aLx*t++KuMu zzGQoaQ#C=3FkBf4IW{Iafu2K&#Vs8iQf0i%aLcrdO)lRsI%# zB$rd&B#o}9mB@*oIMhr^1~}dqsaEzH1SVDXL2bT*@)l>t40hp#xjNJ{YC4iK4I+9A zu|Dpp z7zzjv0Q3T;os^Q&ji+zoTd%yAx>VW%1!qeYHRUQBjTp7FjDJUarKtUl<21I3HFOdT zY9aqts1@0r>J#0q$h^%lfudm;BIqZk%F3@znu(hm+$PHKLS^P5qM9*rORoLLopqfV z&-Lwq%z^$f#l!SRO$kxM8%5?tP9$$PLa>fH*Sb=;h6-Zp68C;_afH*soQ|)@GXqoJ z>lf;T&M=3Z)5IV0{c{?2EMOgy!|JGzv~I@$+y6j<*YoR>Ct|Nw_cL)e%JvT2A~v!@ zYv{k(j2Y@vHRPC{=nU1K-|_>ViR$m4zUDq}E$$ipXOQcEh-#cQ-jjA8s~%m~)5}Pu z@2)ImP`>OY4_}S(X+tTpYa5Tck+6{>IMdRZuhgTbe+L#hlu*F2vSF(> zYPJs>w&;Gj2m{1wkdPRnbTNLdLlo>!R#*Nqsa$(J9$YtzN_3A$NG+xeLX7p6m|4-` z(Ttv%DUD-{)H(@!I{R7>-V4hK!ki~n$x>GB!1+;0CO-01X~g)3*{DoVuVQ4Ba2u_P zrLjQ9V;JR?oxt0nK0!}KNyJIOW%f~6oM_7ckY4EJHl&;jfa^5 zDr{~h>`U6cj*|(TNL{9aas|&u6wCHLQ-Hm}3C1|Z&uw!JHW#^Diww}Nbhk`>f^(F; zcl;1Q3*U~q{tU4&VZqSwWh?07uyg!Jg80cLqJ}!0@dW}wOL3C`0OIf9MN(5{xH-eW z#eT<1uroraC0%D!kq_)2PkjkpJCsxG0U?xpH^oRom^>n5rjTl%4lx1#Gas_fu!@3e zZH4!$qHfLEqX{X?-qTRGHEvD&?GK!4{kF(~tE&hugDB@3rQg}saK7aq8h@WpM{Kh@ zl0-fueXS@ycTn z7O9Qo!D8@dys<1uX;ZF&VP2y}kg&rK9<}u84EH>Q3F4}#cq$4@Zqa^|LiTaxHWPYO zB7VgW9Dxu_YGLv5ACi^Vk7B0b*e62@GaA>ttptV4+pvB^mS5<&2lSf|xNz+4xCRV6 z@UohG)2ma?*BJZ3ErDTsFI7%6?w0qKq^G)cTmaE!^)+O2wR#*M*?Wd-#H3}~Yd#4> zI%b2I*kmee1e8S$$ci0A0_&?~a?XSiN1&6n9jYs%$+Ur9>9tRMLn;!Qbsg%SzP>JQ zKkc!LmqYjf)7@(8@{XO#Z{j8VqpY@X8&}l7m7(oqh~jg3;(lc?@7#u^JROJl(J+h* z(rt5U<6uOP_)inoufl=7zt}p_7UT+Dce+mzf*N-0)J=6Mx@}GS5!&8#&8H}Ob-lH69@iKU43`Y70 z^c((YYLC-``uFL9`b7#Z0HNdJvFAf@%jb;I_vNH)?@Q?T3+mUcbb?(0J^FhYNVgI{+o6C^9 zyWhUQ7jeGB>c5xeo@gPy^oE5EojuI^#?)z%HW5262q z5Zq-icRm!@!`EQ4z4{yoqrGY&^l~GrL9Owh9S|xKcAUr#s1jiJ!DKh=6kZrBbf1Eg!@&_W?PN4V$ z)D+0ifN`nj*Kh~CFp#)k6`#5x@VBx#iF#2eZx8aTkU;QTb`zPrTOtFDf1T`D8IsaA zPbpp;qu$L;lv<)418Ctk10P5;8)=2`8*I=XHi+i1ww=(Hn__g2A}fq92GFFh+J%$B6c9x8x+US8 zE#dVMK6U|+J6wpJ!D;{okgFj_Drbh`I(bE-*T>4UmW>h+y+%0@xZg^xbt+L`}Vu8oPEc{7(bq)QK9} zFcnmKq27nr)6RISk@IZ44!e0Z@DaZ8H{bKFe^Da~Gr<167dJv(J%3nIa8@Vb9H#w8 zcWWC4NSE|(fy&icj8x#)z1iLMR5mb({vOHlG(c0u0zB^KDNeku2eXC(;J=df{HD``m*dtuxMxm^9l)1#aeO$!B(9*_Fqm`Dx}7cjs%@h3A_nM5A;g^1oqaK@u6k zJ#0vy8m(ZWNOT*FMVUZzC$35PVsTSbh1NH;j^uY90s{2Juxe0Xl->+_F7 zF;5^AC1;rolnoU{E0>F#o4gK?P=rb4jZ;?5SGnQsA7YrO4ym?>K|Wwqnb=?kBrciz!X{mS@WRaxfQN!mI(&Oz1=M@HcI z(UmIifJvH}JKW0kp^$#38(x8dP(ni)s>$nvyR-_WS>I32>o_g)+K`bm+G7uioFk^) z>UGV6@szcJ-2q+$a#x=Rm)4tRmMMn6KD7dU;mQ+upIQ z>1N-I>qP*a{&R{&HPo(e=9y=ojHYia$~W;5ET4gP+AENminln*y}^6J0`ZB`w=n?1 zSkBV!%q%&?K^CZ!w(MnIjKeGnE4xo~rp572HZ${VS7TD`C@18yg#q&z7o8?elRH`s{l5n5TmZ3JUrd zzkx4|93eOV|9|Sr5CRteT;s%mEof!(RQ(hmo)J*pS?_kRJ0Uag^qsL?OQXo%*vdKe z%DO6WRiojd>TwVgwgj;xt3E09n@Fqxk!%RcEi!wNn)}R}3(2yoVPV8lc3dhlJy{B; z^qj8o7%iwZR*a*Jw5(Fo>o9x_!UXD#>C43{K@rALlDScOb>9d~)$RetL7Ju_z`nw~ zQd^kj3toT>enhbb`3g34du1hZ=}_C=HZ8s@)gN1;$~MZ#WV;FjK673E?B?_S{E)9v z&#*F007dx-qfXsi1AMaaK*5^We{mj&rJR%fuggY1%bazf6mbh}bdY1T^lDAcP;*NI zFe}dC0176oTFkJU2qqZE5tKsapOy7&z4FN}mkfQM4h2QdyD%nKY zkb;vP0CIJp!s-6*7Sz2{-0j|UtuSpIn`d7wQmAzx$UPK_fg7-^<%Ljoy*B@Hn7$uU zJnVeeI=>tK1r^tt8zw)$*^aKoJ)#_4S6NW91Hl4w3EcK@S_$Mb-$ z`|U-K(CZ55mNk@kdJ}Fk=v@ zj2JolO?0`+e%_$>=Dz>;i4k+FZMoBfJ`8GNj~Sw2BV-wF01RX>k%v%fwHAsY8{Rv? zP6fcg0aG$`Aa&4&Ze(MwE=@xPQHvERZwJO$?oY0#>@Z`hQBB0Cs@!ssqEf;rOH^!w zXjn7!z2oOSo2ghYe_e9!&ZW-Zv$nc-e+hR{2$MlznQ!98Yz1e(B80EF*J32%^px8? zkoK&Vm=I#anJ+w1BRVCMXs0+2?&L$}T!vOleSgz}XFkttU2AEVL)K{HMBAXjAr`L0 zLao(&aDZqCC(*-7yBn&3#uOD_Vh{2#{7u@(YM3ud;XnLlw znA+)JtnBH0&W7;W>8q?G66q>t!~Jmu(2syt$=Qf#VkHU%$%`} zI$yfv4>K89KVkz0R4o%{ZG0T`OE;Br3?zfrJ0y@QLKr=ze$myNahtKBGFwt;TTuQ8 z3w7Y`ofl5m1UqJW)b#=KJeCta)P?@ zZUN*3ev`FbDK48wG5RcBI42BmGU_tRDY>I;F{U z0ps}STnoA$%Io!PTsBM#VL~%*d$#QV>%cG&6m;GEeP=$s7oXp*|8F-u;i20FitygeT%POb^D=pa-TN0)Bxn z=+9^PmnFY%i&B0_-<|hh3>%ahzAk6CmE+?r5vngN^ktrinA(1p=M9TYqEE6M6V0BD z7f&NT!GT{mlou~O{a(~qTl9Grv5E&?tNNgJ8ZYt3y73qzy4AJh$bIb}4P`wT11l0y zi=a`JXsjxf!g}OgO1&l%evEl!roM$xktlRg492|*h4~+OkQ9StYCm2w7w;xw$`E24 z70T;FPuO8xmGT+#%xVLAUXfU>Iz8-sZoQAM*B*zP4jjOwkV`ZUDoPU2yV0U=CU*89 z2pRfh75|~U%`|P84-+wmqR2%iYZFY`0X!0Zg>GWhLzgmxr#_L;))yj33p2$@;GNDN zAY6OtLPIO8tp8l-Ji3sPe(F?ifa9MBJEqOiKuWV3`{i^SQq&`-)!iHPC={%p5f_Pt zimqTs-h%jvCw3Yty}_ysfz*Y)ADhd$*|CTZQ(`gh>3Sq$#BC)h@rRU`?O_ve2GKUh z))S%EW2|E;MPm(^e<;$*hEzw#&#|Q68Sq5YUEE`U*7<=xcOeluZ_YdYticJ38@7$e{EprV?u=dVVv}X)S#1`fG-S zu~3KB6f`6F+ENRlFE)(TT_pqee~&U zP<{=RYX89v%Nh@1@$SR#WOJo8%j@DgYCqC6MO(VNWY% zh8-DZg;NiAMh~C7RAl_vInlB-Ss*}S^%-;NA=ggcb{VIo@j zc^m^pTLH`-`S1m4;#`zi7EBuoP-I279OEB<_OIQL0bFU-S)B-7EE5*76)A0?>ncQJjfOZwYkl+Mgr!mL;?)Z$yQ-9rysFRSt5LyN?#?a6K5B~1*6ik z07cX4KtVmIDx{b#(Z6kfQ}7T_%O;_DGiH5CEoTY66#sh5v=n>Xp%M!FL3YjN4wT+m zIlcTv;BZ_E%v9$j8sbaOB>Y5hD`sXMZQ#NA<-OFKbfF}p>o zN~kXRc))-)@4qKVdDNb@*jV!uR&`Ae0}Q8vYGX;6Y#l&trG?2!c3>x&uYtnbWX9}) zYQfZ?4l<>aDvIiEiNls=NhM!WmOUFP%t5jiyh8__4Q#cOEi}(D-tr9@1cVLH*8A*W zS>@GwI*242yw&y^MYgyZE!53D#u8D+5je*$ou8(~w0b?5oo}|GpRB1fJlqf8((t|| z+c!QiY^Y`r=AYomKEuOs!IoU3eQq`Kk$MY(V{%P{|6v}@UI;@wZJ{6W3Mk=a{lxG# zc1*mh^d#eOou*w!H5+Bj}(`mmy)+7_Lr$k7>fk|B( z|HNEIJloiYr_@B20kzc1RxC*3FR%WWWHM_{A_iOrJRdvcl*wf>Ubwx#AG5vx&K?lva96;> zxzFF3`a+pMy^_ExQFpyfH~jVEg<6aGLmwgu3HNtD?IE47HOWP`p5M2d41BgCw*^wwTs` zV6v>yzf6(P_WXLDG=8r`ap>)A1dmDxH0%?=eV{w^-!NC)Kv9L@KFJuVVNJS>U&ywCUSJC<8vE>E z8N`FjrD_sBmkASB)r&W#{Uc;b7m7XZ04wm`DRoh$0B)gdUXDxI7K6;LaV{`8TJqfc z^*b;z1d~%*9X~0%T0-5PVX_JRYXJ{J%H(G;%jRqGLyy8_}uiGtVIlC)5)v}5( zAFQ%b5J$izJIgE{1|JzOq`K}*S#3K|Jx?N1hk>C%%UqcNhZN8N!~yxq%vF34fp1nb zw!gPpGGfeM05bGKBUq5^L7^!*Hu^&28Db(0TD92d;&fGZQkio ztMlB8hgg%5%0m3M?gX~IBy(ayV+ANqGeH!ms{_rjY;vRwlo~4^eeh4W{~ud#8Pw(L;%#wvT3m}uuoeq$#VPI(2+rpBf1YP&cV}NEd6AjSJxR`e zUEgy)r_;^-@*1MsWQD13yqjXoLD%wK-iiB=Anpe!<##wQW-%bYlk=%Hu6K`qkT4$> z!kRZABfunwmTqf6yUc~KKTqFXh_muU0aA00dh_&ximGE_5mgxpLK;?2)d($B8)0`bGp!#h5{dPb%(|L9p)p>RtA;H$2 zakepAQ^(r*2`T`k76NeyjPdYQw zFa8?g?V+QN$y41({*X_mf7A0by+%9IrPyt<&cD(`n%tr5WC zQ0xS4^HA)}75S(inyx*A%C1cPm+k;+1;d=pF(h|(dyfV9^yd(z;!FrwbN=AUzs1r5 zws1m;A+eD63XIZmmir=x+PNM~T3{|75l;&2k4xTA4$?#imw+4kM96^9wKMskJM}!P zaWVaNG^2ctjUP{Wf27~jibCXq@Gx(m7?4L%J=-7iSC6hNeUv_I((EG5NFqAqgCp`D zVBa$9nWxbTkPr<=j?r8s42K+%IBaI~2Jxm3LHISpSFCB4#*E*hZ8@KmSlJA${oso8 z14Qu?kJF6E8Camy zrnAvndoVgueD5Xw%^=&;u-9fb?f7_!Kj+h=F<}H#Kf21aX~XN9kNegWTcF~TBju_0Aep_^hHX?EX~qBd7~=+YY~#OIqPg^PcLmeDo_t<-dU*{^o(xI88$G`W-wTrbmJ`V`wr6?vpp*MJeCU1;5w3glL?}e^ zZaL!4O^C#GSsiBKB58E1-;;m3_AaJ|l6|V97C}OI!4k4yakN zSiG*0UeeDmf#1`Yb#+rCyfk;`EVvTQ;#WrHzUxZgE5dWp6sZFQw+#C>pksr)x-k%t9H>N%`g$CiR!~_c$Lz z#shcZ{odYR9UYaOe>tgomZhH<)HqI|8beD;knWn6)L~9#4_)C=wd+G%D3vacsZ7v5 z$`bh*3BN4=H>0Wm|k9DnUFNC}`2AM^?ALOhi z728%LMWbYMuPG}U={3H-P2?k0+`R$Irz;xaP@9?e0ti|(eP2=3auM8BzLGe}lW66O z@k}D(WH{j!IE6}@q4w6Rl;$+L--40n<`%&RzhxtHqs*zp3HWIZOmt@F!r=}`!u{iD z#^bHAeKbNU9Pxw)?aAN6rZiMTlTrbPzlK;g;I#g^W%my!6?_ z^V8YpPf!ft-5nA?)ljUV34X1+pD~7P#6yvwTtAqn0CSwKRDf=FzqsSaTQ4tS(V#8K z&wjSC^GkR?iaXeGc28u!f01GnvxTf_3|6x3UI*NpoXWiKKvbQBMAvj)-ivH(jSr21 zn?#MZVa?02lfUKlm3l;_g|vL{8{G}x#Bp0hdZiy-BlFACeN9kQ;m^PbUIeJ~aKT5X$RtR_JhX_=vN%p4Xg(6FQeLgPp?&O@kW z;XHc5%SEV%=cLPrz?7hDV{U~_MrEddwK|hWxoVl}KN~J5CR`AB1KvE2Fv~fOM)2oI z1sq4dsh+g5`Z{D@ad50OVO8id6uW3Q4V<>NRY54{xf)s$vD=x}-Ql&oBRp95K|4EJ zAoW>YL-bjnrS@5yMTB`BM?D7I%KH@C7obl4dbNZej$p}Is6F1$$YFW$TarBxZU{F9K);O@%Zu`I>~ga7WTcn2>lkcdohOoJ>!F+Z1xbK zN=Rj!cZjoae_memcobY$REbmm6(y{!`UkeBBSV_d7rb@g}6FnF-`ZUu%SY^m7fBIAsz=?FPI652Upug-I&OnWREB+uM{mk^7r3eQdAbq z^hieC>_|mfez}!lu#8eT@>>E^xzMSMm{wFj40u6S5gL4Lnc24r)#N%``!2yv;a2!{f@CfSXbq#A2TZUe+w z>V5sZD+#3)5()L;A+|XsPa>N~?yY7vVAYWL^>pk^}3BWtdTyiM#s$cC+N9{a(Cr1%|{%4oezf$5j}4^m)TiVx`v=(>FLf8LZ$ zhHa0c406Edr%e2`Qh0J>O(*LbZ`^)QjU1;gH|c1VkVpvMdSr%?*LtYNuGk}$yxydQ?Kt{B|3KRMVTTmw-loL&s`EoOfm{h< z_|7;+#OI{%1qPH+9Zk8bb1Cgb#j zf=8PjJ*N<1ky?z({mGh26mqH>PDD;3qYcn$p;pn%MXcvxkK@D_hFD3h7(4&YjKob$ z!Lx%yziBv3^!6X4^=uPbjHs!w(hhXnAp6thy7I_>in_hIRZ>p^_Z6v9-9(Xa3B za?F#;*|9n>{82ey(?=33s{bx$#U=Z*8;RV{metWD=Gr1KY~yt|fC?B)k`?8p($u7E z*RF@unkH+<<;;U(q5MY6GTA~a>P~$Z9FVc%x5;a8%k`=xP)HNwVufJ&Y-~{e+E~W+ssH`AgvbAeCLtIXYiP5Gf!B9w zfQ6GYUFDjg2Mm5j_sRJPod*S6Y>(AK44xa^B4;oU6aJ9yn}I*<+&oTrKE zkR z+0F+QdXU{=$2&9UnntjM2lp~a~_>={pZ3EoEPs%OQ4aL0l(qxgJ- zRjG!#6NfM{!IxKGRk{=wOZJtvm;I)Fy@LgZ$CL3Te}x|DbT-8ATwZO1x>^Nsz8R|V zrtJw&h>*_)?P@*cYFulBp@od&7@GZ0zXdsy46PiiDaLjLL3x!iZeMkCQ>o?drhT+B zXTn8mB5u97iJ(EHyms=nI~TWxrIpwz(>}7F!>QgDO@o?ONoVbOz->k>JAdr+N9ysD zOSF5#J$zJZfIEhW_X(QF#_cbM^?+Iy^n+$}@Zz|N z6!n6jhlF9g=?;1YTb)ts+GA8I*Sn?@KWfDdMBNoC(p(6kBV$2cZhi!s7dO}d=K;_d z??oW3QgqHxQNa~6;!TkGk$4)1Z2ul|k~j84;9PlQq6aE<$WU~?t-!8c%CBT6E7ORs z8vU{PY$bloh#QZ^V|x&_@&~)DN+C^p^+i}n*SpBic5d4;4=*@dvDgX@jj26)6VPWD zVudLm#sS+&yocPY7W;NWl2G|U++a}!vG_j;`7aXvx`5Byzu)vK)cCRldr-$NwyDIp zq!nVMlz##F2W#W6TWO+d>Gn4Yagxui>8K zuHJ9=!Ke7!pF)v17)nzpIhUR%|B8learSft0tzf7qne<=jkR84+o9#yFNyu(X)o}_ zeuU!7CFrC;=3Z27C)EJ7^B+sh_Wz-?CV2@Q-^}~$uW1H-_5v>U7hdjO>B-3P!qAZFv31@vuUgS(GGa2ze5M z(CT`jtjxVvXyx56Xm;AcxqEkvhLeD(c0C&9-^HZ(YBoxB*^#@RN>+Pw4VltA2IGES zf&i*1Y+US4%98xks1aqKf!K=k{)>vUzKe>GcslJT97ytc(l$Y!vtp-k9qRwzi2BrF z_kqNyxT_V=dP2o2sN_&{|NHlN%xETZfEClfJxRu_#-a&!0{er}7LuiFjMTz82Jtln z8!f(fn#Qp@6e)##{pR{%2Si--M9iRgr%7X$NGPy@-`4sx_E|ni4JR?Z(6~h zQgO8w;xDH9-${XY4YTzGZUMfOj_I7GWL&@5*dqlM!OTyxa(*?z&l*RcQ%~t_b7Bz+ImrBEe43IiS9Sjv7?2En&o^Lt;MQXLb+X z^~j>Nq^b!}?Rtsc9NOyFY(x%X`QxNv7oGgbu_ImY*bZDHB4l^Uo@(~y@;?2W3`?St z&t48AOC!g3G9hglAdfcwL(l!ILH9^9-pF=rq)2;mr(||N)$CnFq@aLx<+(~3weHbJ zh4S_;Z=uMAFb6fg8bA7f%@eKzsmVa_JWr3D!8NnLc6;pXF0EEUvVsjAWAuA^)VK#K zMxFn@e-2Gi8E(1hM^4w4JT*gyn4}lGA{N$vYrA!3AMJQHM5%9B9#})?KyR{s)F(0u zoFc39y{l$YV0(9Jt7Df&_}wl8tn)r(#J`)s}%V&MiomLQ9WmQ0`<0E|q<V&26!MN3_B#7TN!&hTcrCogX)-- z>vEFNZ8^!ir$EVn)_0zsd?)wqWLK+HSmXkf^7(mD{Uvsmo3na+2Y=!YUJrbseivd; zGD!j$wlCS*15U|3w$eFJ3*I=>4d^q2-S)ekoyA+M3Xu6=2cT<1;`%Df-bwzFM2B#F zvz`Nk5^@QXSnQCtE`J33e*TIJ$gd~B?d_prFgN?MwL@xi&=y6e=1HaGNGWJxCpwWu zzJM}+ZF!(R_fp104LS;I`bZ{_G#ucUwOM3jxS6_Wv=gTq?CbADo1eE8!zW;515GgS z^i(0}=Xp1eF|J=*8JsAu=XJ5B7rn3NBu|jn)$qUPZMY0d-Lb~b zV7%H!dK1Y0*5YoeQmEz93{&Z*&R6O8aQiIa}M2fk`)o{?32~?7J z+G)OspMN?XEFJiTxu8&$r|@HQ$J*-yg`pxVG6%R0ePB@@Z74r-w1F|QJEpEdu+4cj zyg`pjYfz3f9$~pDa}?pgoOYfe9l6}n5f7hJwo)N!rh_6d@Ci;_4#c-G7f&;HjS^$>xO7aRULt}`tE@4=pB*qe28I~z>Xw2!q z<2dej$~T^KM;5pbjJeybV{n8^cAY=>-rXau$=fG`~Nk(O(Nj5!1es- zVvta_viD!d%a5fpe;Dq{Py@(-YkLwk$9bhA*TvROh-4d3uA{5t*tbN$3Bi(u8$FZhZ(D0;ng zY|N1yVpNsr1nhsif<%&ZU#Wt{-nl5ZjcVMl$n`0|p3f*__ zqQ{^j`was7sYYu^Q7vyiRb6-KMb+q}SaU_L%I%VnxWuP?U=LL|7av&EQ8^zEYpF4H zKWyS?^W7B?bXj>@R%wAoUiPQfn{AG#q&|&yezN#nXr^&AHD50bx{Bd&#gU?`gX8Qd zTnEeP0cNwKuSjR^5+-@Q0VlNALaHq`cSMpFab&)336-oInn*ZfhO*=Uq*x z213NKv5E3J)mUmK_GZB~wDQeW75jA&=@0Lz(?g4rfl(5jH%dM@5XmQWEdPJTl6NPJ zl0a8LzJCz9lBP+V?l&Wwe}idcVva)jnQauw+MuWrbJK(o^Q`2NVaO1}&faD!>AvOQ zb<@R^rvUFqs6LjTKR=4J6naE~2mi&7II<_AGHorHR~B;yb7g6@N2wR~GHyV{)kv(e zMSrOBuvOoH4Iljd2O@!j{?oe?0`ZsUPL6q>5vbLSY)a&Gib;s z`ib*I;RhfeemBi|AK|wtpMUz$>q5vkJ)|IIE!p0R%7lYgs330nue3|anB=^e7<2Pb zWph*d87rQN{uEMsn@vp5%Qw=q>gs&HtNd7ge#p^D7GW{w7KzI1pa^A_+M>_IWgHjd zSkhg*(nNLK@xxfsHj)R_tQy5t}{=e|#HG!DBxXctM7guaZT`aNM3 zn;z-TbSls0dOq&v!r$}$x?oRK*Y+FX)lXwJZM&qsgEhT($ia%MS7WA^Re#UqUW<}# zM&&H<*=X4rNUfk|ctt!iqBoSa6UrYtzOiZoQaL7%?C6pGCiU}Xlh6#j1MVc<%buez zaCJeTn?bIgM!Ye16oRXb<{WxPW0B$`%Bn3((L%0iu ze(2FyJ}!90CdUt}ZM;DmDGM#(iev-%wlWC*p%13|$M(XX>jU}2_C~@3GM(7j#c{ca ztz6=+RLTn{O)rp(M28TiT>K&=sykG$eBVJ!Yl!_yW?(vchu<^pcoApVYU8Ev#A2w( zzS6)?57)xoQxI`}_&ha;n0aJ$>O(b}D)^JNF)RKaGx^xzdLy1#8Jm9cFuK7zX|-%q z41GHe@6(M4Ow!5Cs;Z0&@-k9su`dyiKE>6%s2)(QjK@1GV@pQEXcjBSSgf(|($A+v zVbqG|xNtu7%ilX6w7w93H|d_SV4RSjy~H8QPrX{LPb490A_NwI_mR!13sPz;1gtD!@cofmV&@= z0sG0=V9CVeYrpPQk;Uid^N{ln#6Y;g{_f@R9NEl|;dx?W!%i(hN2bqKL@ z=1{$}aQVxskPZJhsmPPkfqej2mmI08u*UbS^y##ghe(VMkf9l4H_Mwy5(ir*b)RLByk}Wi&HB z?0$vKD`PZ}pei&KzX5My$+muoJ4VPKopU;#)eOz%A3_+L6WzEjW+7H)m>=PY_hAYD^Y@vYUEoz>agB46;TUZ%K*;M0CLLIJr=y~B(iNb1@zl9LMe@aT^Y@?@!S zQz6smqNYOJ9Bi|t_tozOiJj9Y`bXRKF0T$)_#B@IL4rGM8u@p4!-+JJ@LhCtT%A;8 z`)q;C!PVtbPc68m*evJ&S(Zc?ekx?8A6s&&z*|wj=>3YaJux3mYt$W5{bqIHJeefv zj(pYgQ=HE0n=q(T#F;X%VkEnx;LncKlP~_v&Bs-Uw8oqA_7@`z?`A`kMT%$nh4q1s zI}Nh{8o;^A)MeAmWskakuRiXY*Ps{OozG=bZ4khXaoh(`NBvswvoVwp%U%pF++D1Z zH#86re0nl#2Bad9ct6{0v>?vmp8Q4VST196exUoEmvU+^nh zF{XuNzeSLF34fhu?s|Tqn`>^SujoSXnn+Zccfc?EEz`L0g~Z7o!X@{0n10X>2uoMA zy%pTUs~wRRODyM-a5!s^ou86wp`M-#>EfnT^+&B1+-p}i(pg^$CsGFzEUTyQmt+B~140jy zW%_*2ebrXL?f_z(V3#+sBQHzSnHJr9A~*?oMGU+@J@+^|sbH70`S9fIdo+LOYd0ge6(|1bN=;JCgDF3&5e1@kJs|MSXy?yj z#&+By$K zo^`-YO_p!(L}1&m&kyELS4qJK!Utl|pnnEX{{venfDaG^ph#ZN4RNQsB=DEIqxT2i zg%>W$^XTL?&~Mn>UFVT2?dD^_LTk@`A>GL0s z2QVlWG{BDJ0VqHjqzsXL-QU{|Yq;i%B@=hWk0xX=H&3WwdDxssPR;Ci7vA6rKBRuM zfu5jAO7LLtaK{bYrCs{Ecp;S6TT+$wjXLaSHJotWUo{Vr0l(%~KxkKQI|JO0Ykuvd zTfAWWf)BHsq_5{8?qgiN;8UOVm@tNXaH(PseL|pu5*?Ud4X^xyo!ebza=A6mPRg;Xv70zZ zquB5c6UeH2SXhq_`^97o&DKoW^?z^}EliZO^~iDCJhjw6a3 zQ;0-AdbU<1qZ9gM1p{mTkYx)kZTgTUN%-t0Og`4Ibsz&on6{FyqL^`~(1vU!W~f+h zX{(Q6$oE+ruivXJh(gx$%R73lT17uI#3aBYnh{Ul04Ws6lP4Cfoz#CI8r71`a#x$p@X2S7?wC?rR`?QWfDNk)pqJ&g zqQWmK#HA7qb@|(BwWIV>wkH8cFn>qGd|ohhi-YbYOOu3OzC1r(o^_soX_fFk>8myC ztoJ!Lrz85++>C~wcKm77;(-%zzS^#bR=>)#?mWj7k$YC4AfNxnJ+PCeDWf ziGQ?`O&r;IyN;M}3&n zCqfW8NV>uz`@~X^CX@mrB+lquE~k0ZV&z#>!iSZ5ZJCgb8}tvMdb^#|LIxs2Im_II@EY|kg+i1tu162A z-5(>6v?qGXwvKMyhhK0Dv%yWT`+qjb|8d^`7nt`rOOJD==yopG0XGD2a zC(uiofilz^>ZcQ2Ew#?S5%Y6-?DI{gis$=`Ipd27-;657YFiQUv zKM^oeHl{j_D#;o!d|qZsIckg~y}Xq|EiCsxAT~n$(fxUcR8~Vq;mp16_sYBeaKYL*nk)Bf#t^NnTOqbfbx*D| z6Vq~%yRS3mVBKg9s>_cOPIXFD)(Q^)*+QwSzZTi`1;wP( zi?!N3x$9@k@ABi5EAj7(bwdjxzvu>j+w&O}wK_^^Z#nQFj zrvXIC4itb3tr++m4!-$X{@x+uJk>OCs+`QDZIS{^VQNcbW>UT z=F8v~KZdfnzlM%XC$?3*+O*~9ZJz;gwmCR@5S{J#;rdfZ#U#iTSV4+kBOo??u?+_TPsmWJ z2T6aN5PYe~P)Wd=a#zwLO@8QEa(5UYSz7_3ydlH0mGy-3kenMX3(**2N(lhq>-!P6;F04O4!Ewr5WH@@J~9RS9lLpG!%#1NH`Q64WrHHwL`wr( zL2-~rY7XZQr~LOY5XQgY+gV& zWb!(oB(_aIUZtdx^UJjhef{H#YV+3x**|_H@#NoFefGsZ_6lqODs)b|Xt?(okfE_E z3oQ(iVu)L+r*U`qk$;*a%i+-ixv$)4sg?L&E0x@fG5XQjk%shE!U{!+5q4%=HL3~T z@=zW zB>9T-HuLng*0s+9CdCAnZn}FMndt2^J?^Bd^v23(D_EF(gza{eLEWH%Pg^`%sN*3~ z@T1w@fhE0ksShEQ4J@w8Jewgg4TWRo-O__gO^bR@FAXGQLgeualJW^)xea?>w;MuG z{Si5*@g+riHC3{$^RQ*ZxeDiH(AOCjKFB`$`1?yVJDvcnCKBnm!)uxmDm8oV;4W(T z%P{hInt|{4$yN{5muOg^$onxR8}O=ZreFv!Glb@g$R0cdCMMtT`JNKg@R49|Jos&$ zMj)D=on%}TX8u4pvJJ1>3+s6PHB$LxAd#NkOs1!j_1v`}}c+gPz*!NN4 zZbIo__Mg}bKg5P$y{VP=d;gy$b%(e7+Y`47gy#zMKBGFnk1vV05WLX5?WK^;H-Xee zSJLb6onN)#S)vt%%~qkVB(x)n*AC~2f~wjTq@%*)xq|ENmH?9J*PGx?*@fNf&bpQ)7yYH3jS+&EudlG(;xDWD-EdR#!)&FYW;M{%M1n? zMoHFLZ(~4rPs+m8OedviA)2g#*g7RptvuU-4W}T#xd}kt2!>%N6^JVyw<8+}j*JeId>8px>g6QM zcEeL?Z{h&dy6b53?j}=~vAJ&X1WtAg3G(!eT(cG0vsZf4?}2toLCv1vAfo9G(#4jF z$c3iw3t_Va9kmW7@MbZQoi*5PNo_5{C3=I3##hX`+pdm@`tNRXjom1^(HNW=%X}Q~ zBNh$SdF`}l^L>N(l)8ASlO-k4lclaH001!(d75Ap#2BftxAFklS6K#L%gu;`*FIk8 zp#<6U12#VNbl|?|K;1Uz5r+VJCiSM<|3)5?AA}5lR6GYhPdE8ULk~1$AxIstfZya-S#5Ra?yGA7WM?POv}Xqb2tGG}B#ASc z*uQ57Nv0v5a0k)Y-%IJWG!%wYK-8csX2s7ZxS@p}owq@VDc2%;g zI}nue3hC^0ou;>Y2l({R+Ub7m0xN`UDqqf&-h-&wNb`SAJ5tSuMp?w*`IgKZ!vR8$ zB>|i$o(hr9u>tvLZgaTFh{FKxg~(v2$b1!>G{{RQ=D})LvX3Y{Qn!BhcYrC zTSxcbME#&{mqOq{U<-zqcJVaIUI}P+2(Pc%dkyv9xVtwy8nHswQ|KWQV|3i;m zE^h2RY75?tO}@Rm-m}GZ;#S|{yw@SiC99(NE*9fUj-uC;xP*7Un96VwR? zK)rh3dr^(-XLvoTFd1Pv?!dog&OM;qA(}PWdZri_p`FLQ{M;VC2K*G%JWq^l#~vty z)yL6|MLuiFK@q0`8}WKGkS2|fQjp8twf zKJJgE=a@un;Jx_8+vWcz;oMcYa`)Fzi{QDu^m~`+G%iLK;dq{aHss&9UekVrQMu~= zX*$(>Ac9FLRyyA-S6vov`8&@I`FAMxCdqmIZRt#Gf_R(f>c=b=)l}OQP)~3jwL8Mz zo5fn0eQ`H4?G*bA;_;{($aU54eU>zHp7A(~%ryE-B@r88Hql)b>}DwvRL=d_(VBGj z?7ia|D{+qQ6Ke~5s!N>rm;?kYuAP;8*JzqncH^z01Tu%m{x z^6qgi^G1qMbnc7^2$Q|=4}0{wZfxU2 zi)E4ET6*#db`9%K7lofprf4l`iIh`a9yw^9x#`B?UmxtM-PWQ{W}HgxukY)J;BKag z_Nk?-de~-+FDwF9Z#65v^)}bZTPDXK@@UxZ<9bitS+BNdRm7KJ^^(hWZ5)r>)U;$o z8mi%!2pZa72@mA~?5Gobztkd;T8ZXq>$-51wem@d%GI56EIEEe|HzbQm5@jEM6)7c z#~7>fxR_FgLzR)f{B*>wOe$-}!MRl^Yxs4#9(F}xGO!w`FI+uvOC4~rYqVjx|ME+B zy%|UGMzgZCrIwj}v9{t#TwllyZ;=zapclNqE+y)7DLEPPz_z~Hf;z!f1N!C2vC#Ta zaW-h_z~kKN)dQk*)v=(ZYLLK6}R0rrN=(*!BF2*>k<>)Lo<2#GEf*)xBgCZNjabrex)?+!Hx_?*0 zk6Ol+=J0Y2MOtD5*TnPnIHtqP(=`P*xCDFQpCxrB(R5nw9-C6c#?u*&rxcH^>wU?6 zc)?HxzK~J=`l!4UJt4Sf=pTG!f66?kTkxdOBKNe{BNE?5mN8uIv=sVNDI0U5CHrWx zdiOEs(4R1Ec4fg$23gu@P5e80c2wWwcRfGkmi^}uut3FbGi;QyR(H7>V9;!rmUuiU z6wvXjr=9pbtQwJ@~Wj8Uj67N0ssy#kY1# z?m5u1g>7uivOV3NC9iis6!BCj!19CKEt1U-lvX!NMCMNu0Wg>x%vImp!tL|1l1nFU z;R`A}G1Y&t?1Sdtv?=LM=6_2Q?%IvAGYN>e_=-nzD()~>gm=D*xwUmgdbY#RCC_Hp@$Z9UbU9VMHdoy1tIFK3KC#5rr< znM-t3dUD)&99dYx= z8mY_5$K4W_w@Px-UuCfFSWstO>UAz)TCjv2&JucIve-bi-v>S zP0>|pYe|3L6^6g`EyV-yMf^cp>}^DTc4SdW#a7Y2-S%|Gp4D9BkneWX58sb-z6pWe zRDggZKj?u7(OPVN1fVRyZ8K4(Z5R5Wxf952Ev4%deLPrs za(eI+0HYp*%~U4MDE-hZ1&^f<8Pgp!@&*K1qtOvHfpY93IoA|60=Pu|t{8#6fp1AC zsfOTbR&b?}Rar8woXu{mu8t`MN7AsWPIhXgAUeSeXRLP9I#LsD($NSUq8N4_0Dd-6 zILiGMw`VESEVr1H6z=|+RN+sH0?Mucp8O);9JgT+>AeFtOa|@uAN>NnQ^l<770pt0 zT01^bwd^pJI1>E0&l7U)a{d{S4R}-)PRc4DvuQJLu`$7%2u(iqv+|-Xg!G>U1D-$S z4{aO}$>H>}ime&x(5R6uKl&_cL0fyYEfRr|A+8!hqX45BNDGOMn#_$W%?4n2Y*J9H9&VwLmZeaPwy#3 z;xG1rKfa%n#M2Dt$N2vKr%|uA+$d|uJ?E2|}vdBI=Ax{2U7ge1_BwnLcJ6BL!# z?b3JrJugOGW1)Br>abQf4Mg)WdYbTjxar&3;Fv%FT&dT6y$o@?_)bE>fxYW? z_4QbJ_Vx4UIjRt09;b-B$7H5wbzozL1SK4KjbMHY*i0i2Ixv^kDD_yp(*S>+x8d{J z;vJ{8jlnJjgOW}no|g=uu1}H+cawwTQOQ;_)mE9p*RtceFSO;_l;Oq#j$P#Pye=!2 z8hMgPdKEasP~!nUpBDj8>u2G>Ks)Q{uhY#W+BU;a%8s>j-u)#Punph2C&Lj5Y z>BsHhm=#+kQLAVpEdyKfv{hz~?~e$>ZDe*S+&mN5C~S zaKmMwNzxaP~b(TSKby1f_8<*ftaCeu+-GaLl+}+(hAvgs0 z0F5{9lHde)4esttzx7ScOilm3{iCb;o_+S(Yp=(Mc=5)>pG>DmbDiMVx?liG3)XeH%xwrPudbb_~h&=dB z-+1`6kc%YegVSnOWBOP8QWv!c@^TViuN8E!7f<03L8TdBQFt7H-&Eo zGckb|WMKm31jGG|dzw52o{PrYJa#4BO>-(gCn%jb{&JzrthJ+&=RXp3+;<|?{Gpam z&v6@@ZZgAG7*%w69ORgDT0u2(;%MT|;{}sslZafjka!aF?ha-(+Su5Z`fB&9s-n27 zk)D>4Ft&b5Y7lgQgh|ke2ry0JOfuF)CY~=V&|7{7Xa4QC`-+=tv6{5bA9ya@auJ9E z&ttEq+d~%F1i(#HUTXHHW3*%XuB91fr$1YUMhpoKCCu$|fzH`j3w_38T%C(+&S@#K zwP2dCZsg}{Rhe5)*iTnpnrnxTMknvbHwj9jA}5y~8=g>sPBZ05lh(qEabA)i9nhN2a&o^S-52j*2K=t-h#&f(N{ENbddP1$l6IH#<1mv<>!ZfrKwe?nL z9{WWk*JiIXT8bv#YUjRmKJfPKvc}^ZdG`RJz7U=rvEhxO;x5+&H$Gmuz?vsYz1fYG zgM*{=NqWtoSCjhkLXA+JPpEl+U>u#-JiYnWTo1Y)A%5t=pWYjh=j;CF(*=bD?56DNCrKR_XR#2ExEM$z zd>TydkBA`wJ`Z$ZYra_U4k?f|Y2Wnz{M^v0w0m3fvVL))d^;5Qa5vobP%pQJ|5mw4 zfgzI62T}OjAjKMpunm4d>%C}4>m^-(-o5Ye+vfAW?FGde#IBy7hi|Seqkz|!qeq{& zbXc9*irIn~4x>%hmhnFnA3n&_xIPpYds=@14fp@BotJodHy@-l@(;mn8GE%`I` z`4LdlM`m-vcqVY!VCje>zZofueZ&$6w=tk%EWtsSY1#h^ru8gvwZAQ+Bv;(_;5> z=N8w;W$qWj`<$YW*DH5|uO}^;uM-wokQos`^iJ?Oi6A^W&zCSc*%ytiTLc?L2Vkb$ ziu3)CU-`G3b1{-n`FZn6QjT6iSlsAgQ-(bDNCQZwZleb zbR+3=d`KUSC5Rxr#d_x7Wk-c$<9*%Wjo~y!{Hx`1YuDF9@oMK*hViIbtzTY_cAK=D(MKR)qNzAVRL7? z+`QgAvR)*9N71Oo-bB>LOFNiv7ThmMEAHf5{w z`VYR%`5r9rKU-EKJz7w-FFnqpQUjqjG+5Ofo*sq6HFUQBgyOkNii6bVj zG&0@Sio!ReHJb1C!VkwFj-bEJ6%&pGqIY~g7Wa;sZHMSeMlM3M6K^bK6K6?7@w625 zHlM7RN#ZhSH&xa`T{X^!Pi8Or=JdMi-2TO9Hu_N0PLhTQC`MD!2N0#;K&#qYn6)sP z)>jsAl}(eQ%BSj3&K8DJ(ZOnWU=h+HrLM^Rt_Vu_N*GqWPstuY_9}5;y8m}36MSpQ zY$Sm6;{X`5XpPoC_as?yD$cAcg5#cn-n&MFfeFjuJcFr}w@wb4IE~ih&ahOpHc#Bd zVZQf8MbQC<`7)9BG28K3%&@}&x)qfA*ZzIkP1E}j^$&)ooliUa7~qn3u_;_%H@b=% z<`Mg5`bpxmk4t%ump9~7TX?ouqohm*^Dzx(5&W1+UHtiv`%X@6sLPsI*6 z^{{+!+IW{+rQvz3Vecq89yl9CR)Ae<-Q@iP*0gQ!c~>4iBzR;2&G2>(gdq8meHX&u zfL|;~A_Qepk(^zxU(i#UV(qU~g% zSta>q<*fZ3+5i2WqRaT_Zi(+7$R#4jIXSR?{a^cZ_ZsZuqMrPiIL^X+adnFV)K=~e z=b+_&VO<%t>ye%u3%!h)9^qeP#i5m7s3BbLD3IYq+=>kKw3kGXfZLeecLV+K)?Bx* zIP-{NncBKZdtt~pnvi3mE%I7%NWamx^p5{w2JPz}E~QbmnnB`%Mfr5VAwh~;{HLEL zVV4OoQeV>`q&Ls5^9vmv zjM17k(2S$+8&|zuuGgY})7MB!h&PAy5DxM57YqCx?l&&rb6y{QV$%6;G5|90(d952Mi`UY%( zbD`nU$$#5K1JF{=>-MRclKhb z9$#;WA5TmmoU`CZXhq5V^PYY?`us#qMTxsA1(b8KD!fr6WW=F4bGO&@i$58feZT|{ z_NthBKR#o!xU(G@A&jbSSqSde1DwT%f5(=fC(`ZNNMC;tPW5S2-&{Ys46PMACvQ~Y zcM4Rw6#!tGgB`0tM^X}j=vZ+2?_6Y3l8A>q(XqZNK~V%nIBo%_Cj9d=fPl-2x$H|Y zE^o^uJ9`t(2^4XTU~g~c3SV>a{dhrPsw|e znS%pB16z@RC|gozir{#zC$5T?yCOJHGHP}~b&+R8Raqm214rw&fL&8|2fn&GJV>Ga zu)I3CTfq-&>leKmc{4osMEZ?~dB$Y6DhFVr zXA#nZ21o(eHa^q>{}jfba;T2f=ClR`voPJxHi?njJ(Ly-%V6Kq+-VecYqp7^947-K zY6=RR05qQ11O{yq(u*+2`unQW^-(E#q&S{6k*T*1^7pC>-l?@3r>MA+_?d!9L)D8J z{cDyu9@VlE18%5u%p>9xb|iB(!xFQ8%uSBN;$wE)wx~_jBh&A?hbw*(Q$fOAL9}9< zq5qJmMrJbapM@?n>oM`1^4MJ|+LS}TzbFx)=AfL!I`>*kB9H4{la)cNRZhjig^G(a z0R+Pw<~MdDKT%`sLr$7xKBz5MV$WhXb6-VLjNSM<5e=~WvULjAJw~^rH})3 zw>fFzc>=lyQX&F^#fDxSt30JpZ+TCkJ6CVIidFv$-W!x( zE4P2V+eLVMo`HqzLTVVc`4CA*5-xQ(<7-1qO5TeXy>SySbpeg|8$Q83(>WIx6lcT4 z#NHMVB(dBm(~lsgr@$-{s4<#F=fxgksK%cGKA)J-&-?09;D18-sL#6%nv9NM1b@iu zAAi*RfxZN>8-pJ{id!s)DRQ5-_aQ0ul!IK+?m^!dSr2ZmAX(a1IyLy?6s2vGe78_T zW+lt5&b4EH*L$&-v{t*SGhLDKRu>jdlG>n?$0h%)MM|sPT?}#&oK>U50|?+`GuH8) z?gA2RAF(8q)s+TcQq0NuBk|90itizgy3=D(E>#H`gOIdmzejcRj5#j&9sS5tWA?@^*zn;o_i*GZ>_UV3E!V= z>)RcPHQVkv9I)D?>Vu0G+AYQF-4bfe@_hXcmDv;4P}IPfGYUU{AlN)%{W`dEos4$) z@dnexyvryVzcVVRFE2c#Yy6jeR_$V4j$b#c9}k%~PF1O+aIo<^A(Yb1Sqt9%%}qwa z9T?j5&ug%guu-iz#vci;4-HT`ephnI?kC5w(T8UU>aW}$@)vsn`SiRN#RlakUfC++ z6diUiEdxj|(DvdMlMfZObp$_xTY}pPTPx9?=6UEVYo+v6@Zx^if6B=V-)Xmk4w*$c z%1X%V<2=k_ZtNtZ>0GcA{}jh$*K6NN`wthq$xN!3x4P zm}l&#&Cuc78eewzdE8@2`q>o{H>}-6E|m16{L9v8se6Teg>;Z5?r65Y+WJ~TS&PhC zpbNf9z!ObUzDPJ8k+b3pMH8uD(t;$N?dwP%#SdbG)#>Rq#$MWJ1(D!wSO{QfaR(d` zeil9BRR>$6{>4B=sA6iCoE<7jM$&>RTVEjIS{$;pP}sbS=oD~I81#CD5b$`VH3xQy zIRZe3+2`oX)xbP1a9-lpJ$%+bTxlW|rVj0lmW#&Ng)lpAN$)A&S>c=US%YE*=31t| z7xTN_5+wcQPa+i!-KA4e_rn=E6eI!u4YlxiB_I_Iy5&zwQOOmi>9k3nzM_&v-yYA> z@VVR)dA|qu#BCa~=JkZ^Y9@Q`xgem=5}G$CGx zl@i=UBJw@f$GM!`s=J=-o~+SypBtc^L}g~Xix_CZbx4>ax%wOD*bkt(xDcKlMa#`S zXJ+RBr;L8$U<$BsH-L^yRA!FEuWN4y+}_?6f)SUMyER}s}$D7L|)Z|GlEGa@6DikE()FggOYnsuK#}AAq+Qz+K z&??jXgBTb^gz{}A1L#4x(hyx!2LEiYXByH%130epuHgY3EyUT=O+7 zD6Z@fBxj+`TP!dmOyAR!LIGeP7SkI*1>mu&&T-2I=aEmi7qlY*Y%@*SLCH!_adX`; z^56H%ikvYFz^<8K8zdudMS|s|klG1?!zEvd)gY3lQ((c_Av7u77aKt(TIJAmDiDTn z5VN;R_4H!BjXoLA+fU$$#^hkHfhH5e;cS5rB{n71bM4AO~0F>f8?%@w#AlxPef- zAc(MqH;N@jWpLd+yv0p7Cc_rmz%a0IsZOXwr)CqExyi};+w=-4svix5{lq;~b+HHV zz`0y_#iZlRw`SvflN8GNfr7Mmw2Umv6ndm>6cNawEy=maRChl!5Tkc z?3sXuZnM*1-rWul&PF6Z@`*7cB?0LyV#li>1dZw)H$^HBjl(1S}TIr zWgp_}d}w};sN1SbsF-1E`m~yE&a$pdyxE)MtY^MW$uo{` z=}~7IOOf7f8A{_UWd5%m>GEnbW;~2!4>yAn+={9PPa`+QBBr3tn!?%e{ady;M$4a= zSa~d4!vId;o;4*46~yZ1`+JmCOvU&Uay$WvPGM&Q(L9f5Ma?f+El-+CRArXt+k%yZ z=XR{YL4UKGT3;XcG_Le6d&!%I{*w#cof@rMY2SI~YJDJ?Vn&YnA7n}95)X>-9j$#I z=Ww9~XRnb_G+v(@phf3Z9z_*#(SPE_3lL`Oo{FyHNSYR**X_^UDm6lHkF`IC?vtnK zVen|luIXX_R&nD6>yuFpUFs3qp$9B|#-Y0^Z;r{b6=>lu;7wTR=?qHOd`fJRZM-r1 zPeCDEjQsG6gGyI#ozu-Zay&KGnM+U4rJoNvR8L*!SEUb}I{%sGqx28OGcWK)sHM&i zBYXL*^Toytj(6l2WvIveQ%S2el?VHk8_%1fS7W8l^HvAvl!c4C=H;8a#R0!bllG6- z+_sB*xn`1oYFUyMq|J_3x4ADxt4NbInAosy-W1ouW{JuT#)j3vD^C^_%6FjEo*jwqR0d zSI7?(1vS;xh+#=t*TW?w937s|(S2@?Oz7mIRGsQvidAq0%4J@&j7u6|WVEwr*T+G% z!SWJHnsS1yIVa-zq)8~c__2CsJ3Z|a*Xz3Ued5tIp{n4HU5xD zRpbUmds|^o%3M!7j?#b1ziVuyj9xw&c6cJ-gN$T3nn&z=(-(MVTQo@|THDDcNRplx zjMmz{$#LiBZJZp3BI9qBf}dbS_`LxLLP?0zx_X--D`m8~1=hFD-7jS1Mrjd3PM^Nr zA?gcoU(aCk`|PzY?RzczH&-^J$tHPi?H}-6W%Rt^mW%RJ^)r%xbqP?#GJkrEwcz(Y z=LQnX7MC^?)*!4-_kRYTeb!%Had{rMy+U{bRcsE7s1(VI?R!xvc> zba{-CB9%@4cG&K*Y|RF|UkH3WM9BrdKqrw1BouRt7~fp&$uA(~3VN!al3ODNoW^L% z+J5LJcTyFxf?dzo5FYPWL6v9umoY0M;_f>E@4)b2lSfoN*7krH$= zx_JSKU6KCXgXdh?5p>d>8_#c(2E;${0jDfB4z}Ww?p((a2aVJLyaO(H{uYbuaQm1u zp33y)i(CUc#pJnCus%4pR&)MvJ?a9TH5L!cn zm>_4RKW3CDb4g-xTL1U-99ecdt?JA|cxW2hsZ2u1S{*u_$D&xheoS>kVj_N6+ChEaT)c8KiL@2S@56|eQ>0AN*TuCs? zpJ{?R7=p8A6GmT>L-1d_V4w2+}N{WXmbO-NX6_ao$B<$IBg+ zZFGhNO6p$y9%bvhBj&r@`y(m*yn|O8;6wBzzyMh#Gpb&1!G8(2sHbBG_=lUzrvhYt z6iFdk$_K%eUa7lQSS@=Adm#*(W%Qt)tCN1n6|M)NS`dzk%&PRboIc{NoD<*QTvN#R z)hGceK&ZD3g4^fr<`>4XI-tSE46_TaKb^jo6gieDK9~2m8)+dMwdRMbS{IHtR8L;B zRW%~(O(~<*I3onF&s$xjO+D-Q_Fg1nE*@bqQmz+$j>1pJD8hjrkgg<%RA(w*!q*ku z>uf#Nd(p8!4$c2^^2ON4e>O;d=^&Bh-j{8o;I&pE-TyyvA~-h)11j_E`~jo>;499W zBA%(!o8VkfkeuJ%riB~SD{&(5D`A2c&wYgD*62nHC!0|gA1m>I=Kbl}v2wu40?S%Y zu!#d#uVp4P)6}qI!y*f;c9srn&bUVA>Q3sIr{hCL!Wh@yKc2YduV?kHqPbJM?Y=i< znRFQ!cBmmAS??R0mPwHpsDu5u$hy~gjCeKb{U=P(rrV?9y6xH5+Ni_*V7al>`aMT2 z=0I7}F>TwO37(ZqZ~&rlpgrO~v(8|cH(>V;%uw3Um~q!0b4%%B2$Vu*lvErXw7WAodniSEayNUsFt?! z@r*?(W8>|=rHRUH9w&&`SutH!P-OOBgo)p%?>%7}S2JdMfJ#?nZEIJAj4clCVOnn_ zY;JnKVu{tO`Lub$<6zazz|P&lk#zN!TdS6N>t3Tc-q)Q|1+1dD}X46V!Atyf{XX*RugMF8?~!x$MtJW)EI0Ysx>EOtgV4828--bbo9d zY@(dvzTIn^*mW7f9%Z(h;L8V3b!}FNM0tq@zIo>%!~%7+o!FYP?~5yJY@}?pcv6nq;s#)4 zsY|HByT0DUf7dch?9Uebil6qG3xwJ>q*Xz`d#IE~U+p9jL<1a1)28aFg2qi``OU~6 z>!ruzrpPq?HwbgNY09`a5hA4fRKQk7TK;AQ$*5_OvIcpeMdCJVmIK=U-PxS*hf2yO zY2@SnX08>Nu|@mKWdB{|&X;8~UGgkOQANft2+6I|c(wkAoWhitiW$Mq1c*lYgW4O7~JLrV9ua z_!l6;%CuU8o@^p!%Bpx!+LbtoJ@r<=kAONBxyTb8n;vR{_3S;JNZ?Xo>~66AWG`Vk?2|B3@@IDYbVtQ4Jh6sqoaNNaN`})LvoH@$-fwt;T5+bV z`+KSGi_X+K@e~T}1l0wJeR28(B_*-%$V5KAb-c#f z)7W`EY#2O4ijotT)(Rih4wMp1T))#obX9!wrACakDH+`Cq&QCj{z8Rp|3v8~4|eCg zoS(6q*EP(A)sa4r*Xa(B1ah;?n8bG_I!d)#N6kZ8Ib0edszgN}?pgj9`YdGUtR%Am4AmRX!z{l)&D}6uH&a|7x#&?*4?D*!n<67V zU`NeeBP%v*Ma}IXD?X8ZT`jAzVPo?hGItPLU4RvAu_!!YM{iHcBjEX2yZyRoChCTa zYE;%g9SBH>o(P+%6JRIdL7*+h>m7F|WTx$g&S7xwbsZ)q5O`o253uLKtJZ}@LBK~P zC`y2iV`Q&)?Ja_&ieeLmPd_Tb4V6-HQ=o*_6C%q0E<7WF8?mJ1Pfr^9`t7f+X!!lC zt&lQ3dp7h1*M-Ub{l7W3um{Vcx4J>6Yc%DMFLL-Z-JpQBLq(|s(1!DA+kD0S9ocYw0$ z5sBf3Q%wJ5x@|C;DXZUVh>NmO;*mw!%n@@9Fnzxk_enhNZkIxH?&bnqbn`*SZ*UIS zE242&X9<*bImOA}C|w4|fu?rZN zc4(p&C$aK)`5Qhj6cfdJ`;}9(^<+h{@f+2{tk`Sd!C&{>u0(@9;4iw6#Oh7ffBup3 zJ3bk%cWW0g-vpKYSc9Bc9j2xZu!{WhdRQ?}t;ZBc=5gDB;kQO3^ml7PGX(zo9}XQr z<&`fWi&V0c+$og%j=T{Qv#H5X^B3DQ42|ap_0~OKHOqAhSd`S?1yo0Afqd&Lls};Q z4sM3p4$puz)sU_YM)A)^{0L3@bog+aY zi#=Ww4=3vTM$m_eeUWo}uxI3D!^u)9%O9Qq-aLqlfmd*3^e(?+!R=(CY9$HTd3|S; zk@_zejwI;v5vK%C`*Tk#NtSdPeMJ@SO!i-Q#cvvhvB$@DnyESz9Zf`$O+WS2V{;pb zQs;RfKrCG!=z~Y10Tcn<(%~DbPBVjr3FS_-j$w# zMO5_JKhA=Sk$)(@G@c|UjK*9#Et+~qGR{smU_v;LDm%9~N ze!m2uC5ES(P_uMpQ*E`0o+$J3`_s+AC1irQHA3Dql1QA7xU`B5b<=`+Ke`2SFaSha zV(QY?`d@62LWdBtb75K~@8p?+>EQMqCl5A5bzg-P7O$~f)^MTRZ5)wa9sk{>!@oL8 z2fBM-GTpqU`F=Ev@G)@+;cpbG>4Mi$$TW<@YsLt4g;2xW(txOFN`$FJ@Gx z+j}rv2y~emcE@`Fjf_w1UWD)(2WtH&OT&)T%%p~(~+E#ra%o;t=SPw8d6ks zhZxAY2 z`|}^D3($8Qm6k_<}VFUuo z1qSb!Qtv6y2<+fUHDnL<`6cu=)y0e~sbo?2rvFx19ez2x7VL+OpsN$myk$PrM=clR zRpoN+Rn^d`$ij$jA9AtLMGcRlDb=PbFykW1KE)k}TC(GAvc$}^Jb*TOsn2YCG)f>4 zB3oc3V|U9&gguaF_sD{gM8`f8K?4jJM{fW2WxqGYd=+#kXO3LW1#ewFcVsqw#ieET zLE)vMGmUA-d&W@1`L^lauj#OQmUvmB6hUiE$;^OK=$blgNg+&uVs@2Eo=<@@Y-=be zVLlrXX0HB;;OAc&RPKSz!SfyVX;hz%-*nXP0x1Vr?=&fJu%jK?cJx9Ojir*`vYXHBz6MV zS)Ek%>+wn6pTburHq6%l%^T%JNCX?dNL~eDIIiJeciu;t4s4iKZ(>sqt^%8#zCbM? zKUqvTiGII+CpvmRHVX1_whqw@#X3Xmt#Y~^sXFWK*LXOfzJhx9tyxn!bEUUgF_!ey zzPKG)F%r3qj~l3Lw03s|de{QOOEUq+^dimUG;g074ac)e=;}$cjOy4OjJG+%Wp`@b^ zb`HT_uKb18?F_)g>k@!-$4BoQUyL%He5J?~@%~IZMJ7fBH$@1`?qnC7kbBEHJQW15 zfqy?x;tRViV9j1Or886=2~p#fxjMV7_|t2ydsE@PGTVCzbG&+FG2Wl(ot-6vfWXX* zG^$^5WS3*UU9?D#%1n&uP^Qqn@$h@ftn^aqL7}RY3>0kSSEvE*Zr{F5jLHN+GQhYR zFd^R(j!e$yPfWd~c36E8+1P9#Bi=AkxN(WxbunTNJkaXAZy~noHcR{yKf&%>8&#Tda{givOup; z#jcDD{p4={o-*L1K&5*^59h}L$UeE=o74jAMV)t)at2(Q&H9qkjV?Iy+P?^|XAQA^ zW89H^#1CKZ+^o*G_jLP>cZ>-5p8F&}gh>Hwb@+ZHRc5q#k&eVq1x~f4v`_qcxtjDc z_Lx}q>pBN+#7}i$&^UTb?KXRrt~%G8q--|#7!Q9KX5sg|2hZC}XO`qcDmmC+|H0R( z|t?vC)YSxdqz$fJjMn=qO?m_haW&<{(j?j1=QE?H{sp@KMuVepXPp{+>z@o}JC;2LOgzP)C)MOg`TITgIlX1l-yV4()e<4Rf9RK!oJfA$YM)>UZ zjC!c>xem_79kRh^swW_?7d3Q72{} zhs_?aXOnPCfB^nv0Y|{w_?6AXfFMWU8;P0uxsvBkGqF`bnMcAk+R}^8CJsPmpPky) z=2$|*0O6iBDf9IhbzH9jk%~4cy5_|tQ>eXna1u$zD@lSDeUjai2tYMr#_s+QQu?B+ z+nN-Wb|R+>fw3mSdfX)xR+Pw`5s4`qkxSw3&=YFxb*QT(Y+)J3j+Na8ZpD9q5l|kq*4}cIo)F7d*P(qj= zn#z|Ag8r~Mh56|;&vyFq16o{&E#Ioqgj0d(w$*XZhl+PNO%4TChfo?LYV38M;q6)2 zO*K*CV{ZK16KjR$hj8$u2B<|X1W-&znFC9s=y>P@1x^kKxE6F3+3n(qqg6SIL!X!I z;2_9E-12J9?8OY}*FTAc@x{GuZXDhbf+kUy`5uJ5-a zrIG;i?eArFLLh<_8K}>0M}mJ`7x_TXx!3XDfS}O@S7tnrI4N(oz|uT46j`#cx*9<2 zPsi+QP4im3gPE5Z8Z+o1Mg4V#S8_`!qQ2ykk6RliBzzf#KU-3U4u#{@@+pc=m@dEW zTo4lrv;tS)MF+cLaH`KQ-USU{)Ys%6X#IXv^C$)F20|FHs;}9-xJzl%?R1gDJCxp z=QY8**z)xH2jtH0MUVnL=tCx-=z2(Nhrx#^S{m4h)l+6rCL4ed;ueUrX zb`bpQzb_`+zk1$ZbPLBJ4VlhT@Y`arCyMvDJ=6_a){Q?=w3-!$5nvEC;%QqRPb7=H zTQ_%czBpY{vQhRTxZ%m!C}P4nX=s=)%3`+TT(@!jlk*g~_wUoQZo4X}`vLmUsqbiJ zhbjI3gwDumTU92H0X&yAgV}2;^kptTCRrZrmPi@KY4lwvmF?PIcP4)g8?DkwbiKxl z>FJ&hd(g93wILS(i9uX$B5oihjjPW5jgor*Yr*-W8V)b-=f+M$pV$4lImD$LLtX05 zAPp26DE`t4-94nOG2`Ag-aStmz%2_VVtZWqpNhN(jEG|w=#h2|rl`#rqVs=3k zzy$K4`>s`Xrv=FS=h}aGh3-O92+!p&oj`IB(KaSyc1)?5kW-!%>R<2=i3U9dSg@}-xCuL>{Y*4h5TJbnU z)K5~)p+Qai^<8U0%#o+KFtYC}0wbg1wCfJs_2{VU)dg3CC1+1h0zNBYJHTgr*CoCitYgDoH_Jbk(7!Do;q-nBqAoXUsT=MLGS z1@fUyk=TL5WKF1fU&sa$bMkk}^Micw%(IFuIAThh!qw5qCknuPR~%7&BQ{E?cD^;n zPVpKW857~NdG6+|tGJKX{4`?s1>XqxNO#>(Q!P)RMT1^TV}gd+GiYGDu_|6rp~jNN zsD&oU`Wu?VR#!2+`b~^~wN;j)p+Vf^j&_BMwp?~ZdA_f1zpV*x(<%$9k^9uHAk#WT zXV5BOkwe3D3~GJ@H>zxZdY&(&tc*7Sb;8uaiB5t$M_;gaZ4|mib9iBru&gY7`tRSN z%$Z&G1$V4mL)n(E3soRNK|xYid3p$He-`a`q19;*}J06{6To ziawK>VT(GQk$-LudVQ;-2Tw9y8fgSt`1`T2SeWC+eQ(^=)3Ot&5OsJ^aWu+2af?F# zUUjZHyd{!JDOW~fXbEpL%1f2UDdWj(|6LNtSNcV`)!WG@U~$va9$1G&SE$%Pf-?314at|b{${fT1ZXn6fLD5|FIWNy!fIS z#lm%-F+%%y$n60!y!8ydxnM2So!MJ|>3~q*IXlm)no<1-Ulkq}-Sw)*Y!}@+H?`~^ zT-IxMuCe}HFPuX9y$xJy_1c%l9nP+}XNy?Q+$eKckbI{o;%X=Cr|+2wvmPHk-XHD( zZ?|N50j?+yB0X^!Q)DuF;zais>ybPV{dPAAVi~KK3-N}M-x*?VitoyzAsf0lyX~tY zMHqaD-7NmURq68L&wrk-(-HDuDSdr?KGQMd1`>%Z@+AHQ&gcMEHa7h2tdHl#o;c4C z!b7)KOMrerZZgpKS}MZYiv9KWXm(O{oMg1EwpOLd^I`*N%l4tCZIBY1l0c7B9$CcB zL*N_x{ySkMzT{g?%$-TN3&)kyN{tMCre#GZ27@GBJm8Lx z`s$i$a0TXHlh570Ubgq7B4e1?wjS)gO4LtbUGmX=@wprRYDq=OLTbiPiKtx0RwK`V z_(esA1o%i-R!+glKq!6{yW=A`Z|?+@d#mkhlD1&CiXsIz>GiIuVFR=w1B3Z~`}kq= zD+R^zKt;5h413dk2_vP<%1E<31s4(?#Pi)~({T^@alMj|QfG`lp$oLZ0 zrvD054{}Jp@SFbJg>t~@|2A3upW0-xR2nQY4qAJ^SRSgt_u&&wi@1N+q7ANj-KZ() zCLMwt@3j>&n&w0e$O@P_>4}4D<~V6upGBxJY@h!9W@MJe0{-}ysuMpw97#iR+y-EY zPNw4Oi5bNyuC7HwyL}zH<615T7fM&(^_@^KeGsUoC62w)o8iLVWex!o>E z(rI_U>8o*0&~$j3x95g1z7I^dMI5KiQ-G^K-A$bGtf+vxI0FLS1Qn{PhE`f)85rp4 zYcTC^ITO15Zrn+L?&t#C`KNLEkl+_B1q=F0=|Fpg+V##z4AE}d1!UGrM+sk2|B#lV zvO?UuL`VKLR}wzaj>L|K?gHySk~ShfG5a2f%`9gXjv_IF>K4R_{~lcf0?w**8;-`a zepJ-5%38@FAD`GqmY>IJl*46OvY7yi%fICHpBd!u{`tY?`fs#U#f9-EC6G1>jODBi z_+u@~A3tIuGW=uYi_2BNv zK)UpjO2s zS(i-x6|t#l#BBYQ=~=F@$}AqGrJO~j9cTyp3mBo4Hi*6GF43&O8O9yOATwL2H)3#l zar`fml{U5FM*8p6uS&jAsYF*qy|kJpQwh&o&%7}2$AmeiOON%LO{VB&%-PBHjn;jx z;{=&20=;XKgm~!ZbuL5zYy`ecRXZ+oW)fjq*$fGa_mmc$lw~#^>N3Cdh{+C5 zmD?j?H-aIv!2#N;yAcXhYnX84%oaA%>C5gy7)v43a#-$|)SZoYSk8civK~Dkp|P%$ z$};U;f%{ygZ(2|$FsF1{=wufiN;G^}ZWSR;ghx>DzsP#4u(lemYZuqx4#C~s-Q6it z9E!UZcL-A4-L(2g^lXPbx-oKCi9n~9)BJ2g4HuOg^ab4F5@Hl0Sss8nyn(3Pi{N_qLO9g%MncY*W0ml;rR;j5 z2PQ}Q9)#5&sAj@mSf|!3wB7KT%NKoiBUFT)iBTmLY)^OO5&fP{#-POhaaG}ZaUKYp zg%RnCYIv|GNLn0brD&z!mx#l2EZFJ z#nvBV@61XwJ5UGIEY1?TqAF)%KzlCI7FSmo6bgC}>u=WvVG@ug@SgB(y^?M$osmS6 z1|<)4e$Iu=H8P~kG0;4RVy`25y1wTlR(2WH?^^c?#)wiG7$@3qS3xZ(!2 z+Fg1ml)QwRTW6~7Hs;h(kbBRqf>E+4pMPuk<6`0uls;Q~P-m9u*qLuC?AAN9W!9>p zf^EBKW7-hIkSrWkj98xb?qG5@Zp>*KgBA@Jwsex>I5vuut`r5=?rRd(Zrq>fZiV=z z(57goXpFUJg^P5g)f;@6R(7ereP4lkZ@Lz?hoM+_>iU2JVckjcs8)i+(UZEFA&BeG zaNHk*a_X5&|DYWkmYI4Be^E@c1_gh67Nu4Ze<4%5N`RG<0cYWXJ%CoFV zM;V(>$d40S{4|UP3OG(&Xs^O=i2kE3+6U|cYt4z=i??ruM^k;#UEf%IL@ zGhX$!1aJi+HT6;lq2=_8qJFnIZbpwV=0&Y;pZ^7s`LMe-OOP}kY6e>W4qj|ovCrp7 zV%=V0T;|OWeL1|bOWjrsIV3RuS%vkWIQ;*Pn_a}+QmLE$CocvULLQ>Cd+KU%R}AKm zI02u5^E>1H%To__C+-dNAoGMN^E-WQ+c^aa^Rb4$Ze;xuO_}w)hk-Sl1^11HmS)US z6AR5j8dYbN5!BXcgFW!{u*lMCjG;!(auusgGe0elDs6$Mr1}igLW}E2unv29IK9e6 zlt#kYFNkQ|;rM6JEg^Q}O|pp&S}?8R5sZ%!3m6Ob__>ukr{pdeW8 zRplZSJqTKnsoGO_UXz&b4;Ogtx1%X9qo`{GMy7jN#BX?Hvh6;7Gh~23{7>O09gs2? zD8H8JhFF_eKE9R84`{d7e$PJUQI-vsK#+dPQ^I>`;AP*Z@JN2vG#Nhr+Q?Y(T^1RYrP!%wI&Kp{xQ>lqM z9e^}p#+sP82xZN_b8m~bX}Y8-(Iacc zB4BWHt%NH=ZrFS#6soJ;ojMPc2%`3XUlHn`U4mQj6Plf!i>hu%Q(*x@mNE9Ny7YKz zAkf&{&JNYm(&O-$sDEq-1roOPTtlwNnAW;#p;lQY(H~3rgkibD*H8~Cu0{g@SmB}g zxOhO|YTC44&1Uuvh?QV6LNO;4xn3b0=T!QE$sa`f=xX(DMCgW#$@QLO2sreg_1hA| zUJ2Eg;>i#Z6OrplgrV|4Duun%+L#DF8^`0aM#?;&ZqFR8Hswe~F*Wyhx+1v70 z=USd0|ZXyjLH+9g)!;{O1o5%rG!Sy{CLG?0EkZgNpTMo$5Ht}KS(zmoyr{$B$9A)!A%j`2Mi2@pjL$7B zwwhT-b-mbn>j{L#;a6`{%>`Krdz%M45@tAW#45Uc z8@XJ}7zkZyA{LDw5hcT?CVWc(?L{NklZg`Xl~!s9;kE2q_j|tpmsEn#__PW7tXH^} zRDx0YfMid?`$s4p;0*M>qlN%A)P*bu8;EclpK6`&|tgEI4aqS{>(o( zl6F2QjL3*mINPKt6!87)d$QOjz2;Y!D5YJOGLJHJgX}_hp>9M{;3HoFzhm5UoQ!2_Fpu|NS@TR68t*3=v*%D(#~buP zzB&y@Va#RZQ2%*r{9ns5euc+QX|WHj8o8_0iTR;!OQbTd@bqTv@rCoEO})9-4{)QY z*h5#w(BP#b^*u%5vXviqk!7Q{{(2Pgt#RISK!NlSH)P;}C&Aeb=e_#|Tljj9))*_4 zo6hIIG7lwV2ThSpA0}Dxh4pzbibDj(;|BTO^&M~Gj!N|1(5*}sYMq*T2kB9S14`@X zGe-{Tvqz^Xa^zhBT~d~qg$0p~2QxbppwE|6^X!+m6P<0r&)P;}pRuhXmoM*E;=T!c zTNVc6-XqNYy-h52AXZ+*K1;61$6m~x#xTB^%d!4?XRKljQi(4rGek&UeJRlX$7e|JE- z2`6ox*t7DEBV%c2ON{A`=_K3r?s>VMm`?iDFgx$~A~E=mn?dw2`r7FAZFFRJKd3Vy z|9SiJmr>#YV{WG-Tkj|E&uyg3JE@SFpkj&5SETD3srp`m@@K5mRt(CtsHY2g{XQ`n z1b=Fw1w^p9m_qEWw7nw~7j{^3E^chs9}e8Is8SAIz_8u+m^!+gcOH3zMOQM3Ka`!O zi9+&07RjCDLW?I;7S3ueRA4*zgy_deEoYcfmD{4jTI9=yDMt*cV+znWTKOCO+ zDfqbM`!>g#R3ggDD0vt^Ky7Rd;lk03}4_prDYP?2s+~`0+4A8aM)nz^1s75XnO}Jd=B}2TAk6aA0 zaa?s);gSu>XYtLt5CT^|&(-q&v{^^Q;==j@z zoQePFsJmd+eDLz!yANJRsab_oNrZ>ZDMgIXP$U=pNbx{{Twfyx8n}kat{V*~8&D>a zrDpVwXz{9Q>*UqU#pY1PH9ssysU&Qr8HYfa;0p`^P_%*fD9}kA zC9UO{rUP8j^}ZY9x$<(-5(&zdGgMW{x_w|pCl!q{ybUl~pNqjGr{%0tR(iMFBF=2jy1b))iCZS7O4+S`#?S*Lbp zX3uywf46vF<)`(Q2HpR40y>JT>>2)Cm^4q$HDz$lEOynaGmiTGaK4VUowH1m)g6LC zdQAE_Zsvj-|E;}UvyAHp1xICr5Fk|$h2))Yp!X)g{k0>c3(#hj)T+0%I$6T0e6YE+ z6de^Mw=m!Q?W>E7S0HS++KHy-gh>y;&jIexYKu7)@N!K~`PkjJ(TfNp4fY$vSIKUN zN?-zCk4vgddmsW+zb)M(}4VJE9P*Ie44#O**8T@5~$>Fys@#uEhN4 z-lg(`1A&BJ&VXh|rzp=@)aJtOxRYyZii2jtvE9K$Q2q*9iEj0z2grsqS7pdl%{P}J z;B;1`T zdCTg9$L)Om5ELsjfClX+IHDq(m1SLoLw_DOoM(zdAveL!&@w3jEiFE;$oU9eR@$H8 z$k6;Tf@l_8;$dllh^Kv@jb2R~U{G-X_5zK!C<%zyZ?Q(N#ebO_q1eE-4}j@)-k z&ZBR8O9Ujb<%X^1zdKm7y4{4WwT1Tb?+9C5Ia#U$=QVN6_yR;&2&Sii zGe@>VQlFHu?NTu)bBuuaUuf81B{_k_LLbWd!L^>0V))pFl6TxPfx0qU_>3f))q>HA zGx8SR$F`7gNcJ` z9&JZS0zQbNX2E8Fd#*0D=wY^Z!s7Mr7;|R3NN=iE2MPPcuBJWuJJ=LznjLB$75wk(aCkl_dU|Jt{@`N#}h09(iqa! z&*rUqAxLO!10mYNh+&6MU|Yuxk5Yug8@mxLeNvxFSq3dnQ>0oZknkg+EUslf^{ z0wnz<6gP79v2_l=5vb*9{efY#hX0P*Tu~ucwniuJn3k3neg7!X8hEuMo9s@sv43Cl z^{Z@d*UZViYqVWZ{cek3Esl7Zs}J>?*)}4XbMENi^9yZtO^wo*y~%9u60yYGK_d?$ zwi%}zY0TCie+k%(k_xgnSSk64`=NV~EdKtbNcwZJi}nuttoXcj&`ls_;;+z2yV8p) z_UygW*JDhh_8GDQdOx17Lz}MLulC}+nFwR;bRwF+J!9fEk-KdpCgoy<4?5lPTzK$Q zqPDpf)QuW&_QvtFVu*Kr@i<_c6%)L?ip?VaID)|2g>3V=by7vA}Q;0B_y82E# z@zqh%89BVp9x_C!AT=0vzOqQ_O7hN{SQdxbOhSTsed}wnC_@Lh6m?~|V8ttiX=YhB z15%V&<)pm)#K|ys+&OMNYe~kP2BoAVgXj$D(WD&dna@YQV@2M|%*@HACXu%T?q&OU zahP4-NJo?PG(ihtN@WL-&}au1#Oy4q#wl8dhfCSn22}la+vVRzTFt0f_0?r$a5T~F z_*QXv#R*zIWCYVCCg zHSO0zX;p`AL?TlY11O;CLu#E^Z7Z6gJ8N+=*G9=>Wxp$-(-Jfu@KZ z){N4>`qa$U9vQagtBWm@lzc9sLEq964Ab$-EEiW~^Rw$xJdpa6s3Y7L(tNX{V}#M< z((O}DbZ^Vifq(@C{dgiYe+>0G0RfGIZV)0+RCHUSff^Y}#9YKl+gIM^@Q7H#JP8JX zrdm{7PX8N*j7I}L9I;ALQc@dgOAn!{WCoL!;mANLeo!n|SR#Jpo0^AabA9nb@;zy> zhK`r&l36f`D&PI(CX#yj1QMt!l-Jg6$8#|pNKbQ4u#MM&7?`X%Iw23f3f_OA0&Ql zVo?MVuSlVUP8Anf!f+pGYVg)aHT3WzoaiIhZT5GxXmDjfZ53O8*WjuTZNEXn3NjpC zh)P&a%`0|1Wg3wDn%#KNgxd7YsMz5QfmA8d)^O7t4qz-d=)8k_ih?n;GiAu(bVsLR z*b6_u=seQYY{+@{s+!digfr3$Mw!+&4gWi)$U#1h>4U-|rxvnzs8~-d46j?DZ7%GF zV8`c3&l)n7W>ug27aeHL4w`TBz0BgmAtuf_oUbECV8V!m?M`Spy_3@NrrbFcBh4&O ze{krrA)pj1MRFsGj8USU9dE>8l?gB(+OeG5=Vax=o%A=pCcMuEhR( z{WKvublLWmkU_bx0gkOPfSNXGS(t_FS=tibcK zN}U}@+;hp{agorUxUuzm#y~0nAQkq41w2gbgAz|+hj|Ue-1;oRR z;0^J9u0^Kn>|*_czYw0n=m2bBQf|5uMy=E1%f9MbuYaN^`2$1uXV4Ji#bz-(p!H&# zZEwBewsFRJcYkWe?WWQ2@piUk5`StZL|Ex zA*l#N^{@wMSU&}fTw~A5$5a1%dVwhrCgp!aE_dzEeejP4X5wUHt(dR|COBDI z3L#ec+C>tD8Ev~;5j^D?Ji5%%OlQ%+PxE zGkSXT_=B5H{jEqpBs6D47bvul@TW`$ci!hB@JbG% z&vSN7yz?(|&+|UBNSi-NCR?7o=O=*`biUH^Z^){w@jMxH+jpx=3t@CxqG$X(^Mtv_ zk(HP9g(kxo;z80gex_SvV06fxm^%LJ_ZIv+G_R_!b+X2=F5G2SW)t>Os)3^RCnPi_ zBIw@&3ZC94)Hio8f}f!aO*+GLiKUG#yY($wqxKCA<mKbqD^Le60mY04*%!+u6z;uos*KfH)6<+an4RSez9)4bWxwI_dYgx zeBWHXM+H^*WJ$7n3e(Z2p) zr2D_oIa=LAieqR!(NxVX?Bsn%g@d&-ys;>(?aAT5 z>=>M!95$4rwFNXatYwv*ZU5wNGQL5%0q;i!{m!3Rc}5W98XW3pJwPr8nKQs=^h@X+ z#OO#mXwqvL*~$?|S&u{d8OUG21C3sQ1NYKQ#tmR2qlPdW0eh569JAa}u{C@M=$id~ zk~N2$rbOX*zh+&wG;YbO62xE^e(Gr=!Y;%Yefos<0oA{1PGrG$qXu71gZpz>aw+rO z9(0`f`C(-RC=>TC0`amCbf}?3T&B8{_RuN4C64hsSj{*wj!PP#C^u7P7Lkejg;p!A zs;-6;*K?}a+#1o?kbrQhQ+jdQ*oUEUu^|P_ig03B+6(cB))*8e#?qSTHV-i$cahb@ zK|L(C^idcq19 zgrVO$o7qopp;YPGd?g;Aj$u@lKZ6lCKw-cCBrTt!IdTIL)Tqt5?OFIvSK?(aT>5YC zAmj2?H(AZN7mfS36AqNmQ;upD*bhepzZbSsv2MU|K_)A;c0?s=ujD44Oc(0 z5c&kU(R}a(R^0$9Q!mqEVe;=%!wl+fMK=mBX<*0qa83$N6@tIwf;|hB_K~tLKkBPWIrTpN|&Y)d{0+GOo z(Zutel|7HKX@&lKQejM7d_^bRIB_f7+2^+Cjn>E)Uzv-=7pa<=z*&DT=2oO^!N{?q znUpdWgu%bjs#CI_?tCSw4Km|NS$I>IAABfnC`CA7i;<6z;?<>*6dh9|M%}gOVkS6- ztm>tS}96g+A3-Q26rMY0ygJNcPFmUPdZ_$NPL4L~8POi4qg4N7#%vq9#JK@=zMsdkIGwOe_y|M~*33 z!o$I3P}Zz^Hs?ayOa8yzXYrQG`AYuZK1&d9&g4J1(e6>n{fP@!v&U{i1z+qhh&<>J zFgWR&F6tzB%LO8_z_7e$+7B+ck7xvXXG1glKQ`!bw!S(@^G&SmyZ!{;AIXk5x%!gf zWbQtR=x$^Z`3p8au=_J@_OSX&Um3k$B?iA(5FR%Dfs=`Xr>5dTGVg~*LcNx+f*J@y zLb*-%L40nsxrBy$@>Bk^8ws`fnsz{&j6}Ik`=x1CY$yV;w4_PFhtl-*QAq6d5BFM^ z+lgSHTwVN(L80Q^U(y`%6SniU9{I&fvGay=v7+11rQX2j?*h|%E*o942Y6TSkQ?Rh$B6d9tZf;^gLkC@MCoT5(M8~4b z+UjFUNxx#@Hopy?z)a^D0^giTa_FCd%->XM%Iuq3D ze+_G>dGF>8u?l&}T*&>O$?6$GQgTm)%-{d6x9=%d>A$EO>y3OQp5%upsj@{w;;;y@ z;)f;!uBd|@l`7zh_VB4_gvf{>6F4SD(npHPLd!$*qj6%{DOE(}9~1$N)di{1qik+g zQy7y8Cam0KP*oGmC%lZ}-9z(;QF;o#uedR35WFa|4j&&CC9`Q$YJp*_WhHxY4H)kz zl2+jdqvQu;ZgeuC=!giPPc{TQx62Uz&m$2wPU>*tiJ~u_0&8tads=Zx2Rg=~Fk#(t zuC`XpEevv-8OB~-iBj4J{v9FFRFkK}oJ$y0_Of00t_sdy^qf%a)m8m5sWyl0FUk-D zkg2ZnK~>I5>F!<^pBtWg+}GJPcTCkO;N3ASE&&0BC^e2%I(D>?hDjpK%Klw6>em_# zsTzvrmgepA?#{=jRhQYdjf9#fIi25JpVF&3zC-h#u8*61k3ZF1Rk6oT9y!~?g{BMp%L%upgm2uzK7z@^kY7{JG`?n> zNoW2s;=s|E^_S&OLVG)aRQ!S*spzxP?sab~9;l*+giqeD|1X}R&ILQC_ycs+& zD377JxkmT9SnUU+3`#e;Y>sgVuHO`m%^sy-YB5T8kiG#t)r$Z#XQRZ6CM9KfH}P^O zXKStnmqMBxcda>LYI68w3fHHM3@Qd8Vuy{*FRdFv1p67f5XCg4CWrVIpkijXOCwQN z0A`f)_3QhwPHL^&l4ir+733ut&=^w=HITu_R$uQOo?V{0)Y9S=n$G*HwLTIY1Mlet zFgG)U)6@IBw6roX6agVh_brV9tRaWu`Ja*Bd!QYS*37sAcpMdVb#!ZAPevTh5{BxL z3tY*?O(G&&h5jHGbhj)NUb>eL|MgSqkMJF8CLVTsgkkatVpE$*`2UbZL@Ce5O79roM zqX<`|fA*O~e6dEVHQ!cq$AN-a!&>e*w&5N5?OE`9+JSZ7Oh7~@t!Dcpq-9Q7E#|`3 z-&Q4$=q6X%@)MkfYwyx}-C^aXO;K`@x#8eiFrj>?97X5`{nmK&{ih?Q9u4aA1rX7- z_brc4T+F6^pJjEJF|LVJN`OpCUlABnaElylzqH>FP==kaANk69vX}V>nZtLh8vvI> zWiK>4=xtKn6@95#@hAjx&l{I@=;F57*Fk?pO+T72mJo^gxMD!yd41i&gm3!DsaqlS1C{9|LVP}vE3c|X+MoCs4pJbIn2t+9R z`79DCCZ0l6JLk_IvoTsL6ZO6NHc0JBTS5yD=&i( zo}?x~Pw>>sB?W3JX~{DpnX1~vQ;N<4rx8=xX+*;mx!ORXKKN^WADM3R= z4m<~f#NIS+`<-0<0U3Y$RqI0rV((D z6arfkm0>UC*Ei=n`bq3cao4U#gUX&kb=%{6HcyA+cg|0brRuJCmcJ{d7Qb&`b_B(H z;S?J6GHzW}76v4c6ms!cYXl&+iuJ|`w=OwkZFBhJ&1a5vnj(P-uF(9FdgYt~RGi3# z{jh0o%fSWHs=mIQ78cZyytt|z4aCZV1q4cz2u2}L(bA%q`zqS9%?$OAt2Cw2l?sUi zhmXX@;#cE$mev_!)}q#mnxh{~qn!*#i@}V>5XwR8CN-3^xO+pc$*2DW(_U4`$N$}T zbJyP34XhR8FC!)ySwcijr?>&FFjdV*#~}TzZjV&rZl*J`q@6t zR+ALL!^(h%DcqeTnjHr(z*t>{Z89VNw#VLf`%|7LllV_&8g=5+1PnO-0_dQefjI+;t4}UJ8tf29QcxzGaqZ)MnE|re%;?B=f z5TrvOc<2@JbL1!|=&!ZQC5;~`jWu`llr)upCuhiB()Tp?tYv+Ckhkj8QN`f`i%@}T zApZ7gJL)5ZI)oPddPEQX9C!3_*yKnWqd*1$9?$nL`R)J;($> zN^s3y{ig%OHHRu`A&y4r_TyIQhn%yoAXgkJCKfsDdyxbj9Na+v4`ikqdk8H&5@IM~ zaRi!KTYdGG|XLT3ERC)t}k_mf$D4O6{Sp5$q$Hzj1B~^5h zJ>zK&1ocAYDIBw}xc{KRh_AoUiY)Az2gKr(UHaFgwXX8mZWg;^VTS))kV$(?DLNLQ0@&p~%yd*5p`L zaX^uOAg@$<_KA}qYLY0r*k8|6N~pxHOOt0qfjC@6lc%CeKSv#~PGWgzqTqpSg#^ro zXg*dmhAF0>r0C)9krP2KK4D3w`XxGwm*qSu`#O*^Q*{@U!BqB(?UPZA%f0TI%cEa6 zRn=qiA%z4j&Z`N=CP9}d30UTp-I4rmECC96?hLl~Z+Mi&<(QD)VlT@^UGo1i15Jil z-wywseU@xCClyqDnxY0`teus%jDIwdl5;AazNDM%_A`ZqeJ&Da(3i1f}XDV7s;%44-+j7tY zHReTrN)uO98&LuU+j{YUrwAd?l)mjz$S5mv;11NI=4nmH8wvrB}kBrQ+D6{~*9h z3FAw2#W1cU<)+4^bfc}AlNlB}0MNlNFD;=!qxDrBn}{6-5tslpmj96bL-3CNOD>+t zdNYo|vys$X>2$oiG_!vN{~U(bgt(*L8$@OA5OPc><4jM~9ry-@X;H2}hyS-_zV@(` zmJxUDyLg*p1xS~|3G9;peRz7L77;UenI*^1q!D5D6{cXp&X$d2s9}&bld07otgr7P zW)y@+idDt0Z>i})F6O*KQrx=CwPUDrkaG8ihOyL^Ww4F<4rCG%5tNq@x@Y?8BF-W* zy+p#y#E6P)_gBE2rLC*}3}KoxMaO)U>kXs)gUEqoME zuV?4z$M~@fo0>eCyIyHNU^gC- z*Q@IjXHf9z8AkTWQMR;Jq+nuZ;!RDHJ)i;Ys~v<)!xlcwA58Cp$a{td+0SEUCrmfw%~H@85AJ%j0A$z!hEmNl3N za`IFeo#uJbEisjMoX}gDq`r+*QVVxeF7u!g3`P1f2h8^)&&o$iwA%_2-qk@ z3*T*%q^!zL0!Atna8p@uF;iuf(#n3O&BR);^TqfWwp@_p0}8WnA7wZJ#fuI`R1FY? z+EDjP+9?kl2rcqku| z$Hwx<;d_qx3^JK2GwKb|o!Lv&o1M~0eocwhP1wniU6dZ~!Bb-FG2+;v}v2pn;1 zJ3!7qMhT+5#`PLeBUQKL3eB!&^yFd7^^KBobh!{w#Y-Wstd29j+&T7*8KwBwZ9%Z3sY zdZZx5(AGOz;*w3$H>Eou)HzJBDN-l|^v@!~6K7t}iF*s=keHXN#e1QrrN&Oz<|%Q@ zDXPm6M6mxTB{>Kq-ON&4VFPQW6|8E4npI|wf?CN51Lr|_SnT&(W3Dx_q*zo3Vh3^- z1Fq;&E8P0I62W`n$OC?Y2PupZQ@%m{zs;OJA?q?GEDXGu$_=WvqTThg0P zrhMk`c;%a1t4Gu3Kkd8q66WxFwN_be!{grEOjyqSY<`|$oYm?}zu%B~IqpT+?TYM3 zuSNj1|3HHFZc>G#t31|1`w!Plf8&pz5{DekG zF%X|fBn+L~dLai`?@f)g5nb2&I|Dp*Qh#{T(dt0@p;F?nhXC3pNO86~pkVKXk{3eX z-8h@Mnwkgs_`K6i2fOOL1hqMg@(t0`pkVBT?YQHnCmnX{8R^7Ib;#q*it-eSfv&5% zjgFb=g~^u}T4lOa3*~v}bgiw~jtsein0ktrZa|CdtRte z49|Nzy5n0M7T~2PB`9>T%MK~^+o>=~9eI51WGL)sU#}x1l%Er2rlb5&Yc*+>UCb7~ z(d0-hjUJ1 zJkH#9;aNu{g8EFbH##RO6h+A~6-nvpNi4NgnoU^`)feMAqa5La3ku)&ilDt*GzI!s zPza4UoE8fC%hkR<-=+Fnyl%>W78_1SrB5zQ1=PLz*IO=%`G6l>Y=QTnkwInw{0%_3 zA`A+M17OX-a>Zj!IQa~SXg8hyYH$0mw&(x1LB5B0p`ESG3q)}F|MEtgVc~{U{w8I1 zhYH@_1UH<0$&0uPQd`3R6Ll6!ecAJ`Lx4P@X6FVPw(l117Ko zf7?7)Ar}j)C2p=831eNpnx9H45R>RQF6$C14fjt`H8_JT>5-E0OHb_{m6#aTj~~@k zI?8;3ZW9yCat3yI_V&cpjwI+UURz6G?KYq7Sj_O9MslN}_C|6PAC`&E07aNY{~Lx3 z=s)V;gXtp2@;-lPO3hAAs2bydLqw$Fm?bZ!q}(ZtGB-Ep3DWWrkYaE-Y5C^!dIx`b zw*ktE#vE#(k}fYftI`;fjZCI_=DelwdHTb7M0B?PKh4tTpJplQq9t&AEezd9P)cL@ zmmIb)6O-2I;sEOMJzBB9+3}_Oe$gtZo0Nc}r!hXh>P^e9XuiX!&Lr_)(jSsS$*{`! zjRcizs1N9^SCFBzDXA|(FbN8UNSe|nibMlAT1iRC;Vga?sDMNnXFE=%uj81QWUM0e z9?HwYEl`wTMHsS%1A7bNaIq-AYKSCBP*D2zQxQpVQpQ3Tnu+-15O}MN2O2c*n&$3_KZSyh=Q52;ARMeqy6b`%7Od^`~0&M3)a=4VofiGu?YwBU>| zDsCngOR5@B2-rhrHMFEuHTuJFk{E|BjGjU0z;66gV(~r0UZAe4Bg%k6@)e^%;G1;7 z!(c0RtpZ`H-PPM(d#p7L3S3SEXqL1cw$XSnCH04b_^5<_k0 zz2*j)(gSGJ($qEL@{P5MMcUhq%>ug=6CW!YNy{}FgHEjg$qUUGKvv5nB_TZf5MkG7 zttAA=XaR0yi~66L*;=5$;^1T%EcK0#5dCiXUfn;+8-!>PYAQzoMF3T=B|W-v2);hHxfpudWgvf zykEB}qYfw(AWJBf?>9Mqbr7G{uDv-?a5uYDu5N_tJtY#sM~66Ye_8V6frJNV^)V`} zM>zO+!eSeknt1MtM0B)$-npR8g(aY4n`WTeE+keeJvbx`NML{67T3BUvntzEWp_%= zk1N)4Ittt4?&TJ3Y6RYX;FH=cj`A_kgsfLyc7`Q3P>)1#Zy%uAK#2bYM_f?Uesfqk zztd>lFF+QCEYb36ugxZGsfb4G)p&4vt99jHAVN@WBXS%voWW z`2+B)Ng<0M=faYr4~)n73GCM_p@E$5bq9ZrI6O$i_(eMpvt7;)Fd_2lVc$kSEhXe5%ouop9ryeR zMIFfUDyN6*^$08$P8YYYjsuqBFGEUlGLR5Ob!15gqvD5-y>c;ei4yfY>PG8FS=N>R z&M>~nlfU64$oN8XdUC*Z`JK74U|q#22}w6jHX{KLBw*Y(53#t+tFsjs_h4VRtU$St zn_|6X4+`4s;l&}rQMtpcBR0CDBxf6ksC0mAKJ8P-KUsq19hvSZuO0*U|1x(46TzWA zDtkQ=I#vGU0~xASaK>Ryc#3EGz;G*A9Wp`JxusnbcY!_gq*+F1yG3)((=}<(!ILPJ z{>ds0BItvY+gYX6YAmhFfi&PsXSzGZUB!|am8hP8;Jq8FHyP&LD->>)57;p zeasBRCjD-n?6mN5mceGYj2|0VBm1}rCn>U8J8Me5%RYVk^8g{h|6|MM{D1piZ-3C! z5j|E=wlt-O&nNVD$QT@?@W|SmuT+nl9RvDB3|pzqN+W|T_LC-n_Sw=>9)BTp&OAX6 zxd`)p5$8;4ruTww-{3f>c(R06jKdu#_Q0-Prx5=8n%%S4kNS$f%-vq~)A9tlFDmsv z7c;aFPmx^vdyR>7)kuD1#biAd}ary2>l+jM7)HoXN*IJZ-+gH$9ZqzU77FCg+r2Nk!a?_ zKdY%hH*0>`DRI}){XLgCgb%bAkHs0C*}AQ66!5xcna&eS^sr&yfe~#geBBDWwKx`e~zJN^`@>^1T62iqBc0_ZA}Z~g_2l%;3bBXzKTffIP-Ag zuNPQvU1u?=(vpY=7fD4jDN76ZKcDL6YQv-;GGq*So8YaLq+&J_{gg=`1XI4nOBGIJ zLHCJ@jupd6UL7K8p+kciVc-^9fKq`D!X?^VRVoPO?PCXClt)Bje7xFUO4}htHsqLC z^hKA&mhx`w0$EQeDwAbAsZS~d8+D^czHbBRiLweiMLq~c%W2jS^Sf%q%qR9O zMD>EArj~>e)w^BoZF$S9IAsvIwED{a?7%^tQ9p=0m}Wo%akzq-gAR3@vwG~uxJ-Z} z9CnHY*yjh;=}IFBWcH1;PmpVh-iyQ&6qKLZ?Txx}yeg5KYAb zl`L&BL(+@)L&rWrvlD%E_cc+!f~u<~BtzW1)Gs^0LxHS5=VZk;rU-pKMr{p^)$Gvtua3v4LNDztM|S_@7=Be)jaO@f~vas({E7J zhk~L?7e=75{cYWzxqObNBzOf7-gM|GsWA$JykW)PZb{EKdqGS&${M)w`4b!=dmWUg zuftA5gK^zMQWlXu{^aG)Ro`B9Mua00M=i-flA1i< z8UE<$&OH}L@27^;S5ZXBBT%p`AW{}1a=5%19Uc;zZ}k<={^X82D2pN7Jwhh&C(vJN z8=M;_!q4!Al(k}EF3ydk^8w$MSCFmubvZb=!oG!5)2SE6fB}}qKHaAN`UcAbE3sNN z4%T#cZ?py)q}n*B;QKmoGrZAA!^4Gwz?aLA<`Y-w5GPP#MB{+~7R<_&2g~VETj{92 zKmrN<6_hoUh;GAuUE_g|&^|QiXQ|oQIRZC5q5!}nG&NUrB!N60IaS2m$qDUOvHbw# z#HvaH5!;GqBxG-o#NnjV7C2m^QJ&Cr3ip`f(7M6 zV(qjMqo>%|dOEcBt@Dz&GWWCD^s^y{&7k$95g4D^hCM3(0I=k%61ASCSWhmDH&4I@ zY0}8B{BtYlnj?bBHoxEJv>)&#ryBx7U<O>*)hxGa7os<#UZO0UJpAXWF7I) zW4ba8rDq5tc5bPpJSk%}CfT`>3P-Cy*ep4^rTUBkQpDTP@x7V(|FQL!U2%rn)@I=v z+}#Q8?iSn$?ydoXySpX0y9bBhuE9OH6cF6qd7r&ckA6q@IQ4}e0MxqITytI%s<*Sd zX4w)=VT8}MDKh#8@Ow(e0T< zg;3Aqbod-fY#A3XObFQ*9|R{UM?JbW{v;+O`LCn0vqtBC9jyKD|DpI~U5c3LA0P@f zUB$gz1blRqPn%?}=%qhA@z$34yuW(Ye;m$IswP0NI|cytX{H9o+=j~O{?m2y>nIP?cWp+(%<}la3$12rvGvsG{Tg?+rHW-`+4EHpb)|cvRcJ-q z$b8N0%k~-6s&>0FjHCB2aNL_j{kk6JFW=vFb6Ug~o^+;RX&9QsGyS%t#P;y4{rhB? z_K0&sr64Bz>!m>g$4^yvv;71RF--N8#*E?ve(2c5lz-9bnV2Lr%!%Aj*JFO4@R;7) z-I)B_Ms|RrEVs25la(TtNdC&EEejKp5+Sam2&L-{>qIJySo9?!q^;x=W3>bLl$)q% zBz|Ph!jV#t5o1)gBJyBHA!Ehb&SvmRqPo1gO4J?JZzVcb(pOwiPHs$9ZyvyXtK|&Kkh@e&;Er~XiN=H!LGG*CM-v)48l)uu|~nM zUW{W++2GL;l_`%&h>laI>2FX2o*d~B->QkNBU zmTJD1Po6Yb9^jIN=e1PI{rH&^yqt^$Hpt4<3w%w)7*zAR|86>6R@n|brOL=DsNr;A zEEX)owAIsvTz5HQ00JE+#SRAA&rATU%&75~3n&2HrPy=%9I>k~F0HQ%i;^oCw0Eix zfLrsAjFI|H&Cs!c#PE^z1#j%QmawFOJd!E93wm~P6dI1t<~3;yQjF6}jPxJo3Q07d zeneCqHP`6CQgT&<$HydPfNbYQpdNooWO3M@S5SfVoxPK(;#+U^3+l|OGj!jq>?MM{ zq_HGq!*}+h6;7i1`k&fOhi;ufn;d5o=k5(0>JKBGPZu*Xr>IfGn`HNa(Ue1o%WXVV zBpo59PJ!`X7Z!GpmW+^CRu7ZyqpWPLgQ0a{RdvGCHS&J5L<&_FO7fn|r!nUPHKEGg zPdFJcC6}KL?y0w3jAW4AVWdoPQ~tTT!;F|&yq`Hfo=yq1 zTY5pVp6&{VQ2AYy3VW#M`ILyvTp+~uor}^*mbjwYh)jkE^(-?yz2iPy%>y>x)!)Bl z6co$&!JN3?VggRB;K^+497U<_AEk|XWQ+a5%ThaU8}F*iM}WKop}I_h7e%}ft|h|@ zkZR+ACN`zl&FhtFfqnp@e-R((M2{Kg0Kr!L*}jOo`6bMx!x69f>5E`lwJ2aK7K(jesV>35iKvvBT zPCI?AcW_W2WUkKPvf6@k0y;T78Cab}n94QV{sYe0knUUc!mBcf==0yRZuN{08Go#I zy2typ1|ERfvjCkQ9wE>sLY)bC#fA+4-d)0T6igqx!%V_~zl-RNxD&&-T4lx)(6&p9 zB&p4sDq06G0a-J5wXo(cCDEQH0h(IA|`t>tI{sr3CTlG0{5etKIyjAh} zIqYy(W+I_sF{v$$Jr2-$Suw+3B%IBju~pBEW@?bOp6Ip}D18a~{kJy>q6lhW9?Ol@ zJ-a4nFTlWiHv3$OFCiucN8k+$$mPAU8S{1Kv%ZW54WQj&A91Pi$T3x& zuM)_GUOLOX^S?=<94HBI%bxu>8G(*=Sc%x|0$U-BV{XcPyIoi_0gv)yJ(IdrYAja( znJDE)i{S%O_fpsT$qv$FFScVfW&9GK0gtKYVZDkRF|?e4_i|6*+1Y}Sv}8Xr$d$$B zwqZF+&@Xg$H5x3#XP`+27AR$h`nc3a zpAGz|8we;wP@X7!ki+>m>z8xhM()a};n`G5MlOUoqLhPS7ZUJvNFv;G#ipxwQg89X zUA5ILzi#JwwzPd{9x6#2?c+_hkpNZXX`meyEaThrk6kQzZ180RYe4R2a*P~?+saxB zwxl1l8c7*ZGhb*CZsaSLDl-{rc_uZ00Y%W4 z?-?Ya+kSDy-}*X&%Tn=Z*qSgW)aOe2&xgOn=jbL-J>$ONF!xy@aT>LrNkHkrpj-Na z@~q6K15`8j=GVj`Y*&u*Ar{f)5O(P6GuwI}F)NgNaZ~)pN%HOzkLDoX&oR=MaDYZ2 zaX^m{SFPCkw8ACm_bLk7rhO0@I9OuYRt|Y8gvEGjK`4o6QBl#5b9njbtk3B(8z(n6Vy$6!6seH6h9{CsMuNyYo`Zt}um5Z7 z=e5<<=mDUjc`8T1^yOw+1lO=%KU|EhWr$=5^$>gxSi5q(s-}fs6pBy1CP;>i{GUn! zJM>duOs02Ya9N_+oW|}}LNdA%R|Ejc^RGhYgxZD%wLsn)4}jyx277+8H=0z4dat=J zOh7;&*+J@e`|~pRoo_9NmEafTr}}jxB*&-99S0+~s>}KQN|0OCHSJRc*uV%IB1G%C z9D%iS*ogGkTT?x=D4gA!Tm5k$;-*l3WC|Qs-KsS4#Y=lXtugAokB`|!_uJ+5y_ky1 zXH!$mL4HD;qZJB$c|kw&*vQzBT2eoqhE;QC=XJQi+oQ6<%<$+*SOEdSiZ=0deR^iIgJuv5Ul zm-c4|Qu%Ng((^+KYy|WogOfV)`^tpHQNt0+01Y6?L|6d@lfaf{{MqU*4z{D-Inn3s|OJ1#M{+o#WE2UCZGSmrpXh51d8eyqfA{Hg^`2Ys z4SH%~$YU%;Q&Tf#85!yopN2>+atc=*@4{@*M4_pq6}D;~U!>x==vtK7A37!pF9%}X z)ipG^=|>ai3cyz1`?E;;@TnVzbcVwXC_fWdZy0KCB#%0k%BB&_WC{2V6&H~Zg*NPi zCkXom2z^sONt*^3Q$>%_JKfwnm}94y1~?TzLg?*NkM$-ArFatmNf7A@N)Txa-8!g={0sr+5x=YQVF3bM)PlqHt?yG7%;s`|+Z zJ+F7Qtxo?a`Dvqo2X%NCC+#flq?;88N>qQ}$ch4M0A;Fbcf&xSCoR@U#B@hj083lx0 zbUz`|D(8hO%M^p^1yOP%%9YRHc~2w`f|>?cI$g4ETISkTD2$mT^v8-`bGrL36Jmz| zemoLrLf*sRV^4jMs?@YhnKh0YL(i9@ev}q63pLbaJP6JH9%Y!O_J@%Q>*f}z%$Y0=9+WXmZp#}E(s%AdP<1lRL%Q-sO9x_#NpvmRxEH4 zH8}6nZLB1(4Q&EC;N7L{=U!`%5B%LIU=M)zY?|Qo1%<$;M-VTn114wZ%z&~UzuS4` zM9gya{M*$nC@6*6RUyvg%sk?1p2qk}FNQT>)Xs@$A4JHbx2$G+WDLbbOl)0g7sWb* z7!CM_MO8uD!cf?uxR-(C7@yZYE>)26D&yWI?()kWP(C3^AG@$OF*&fx7?46G-_087 zpuQ#lp3#yeto?ihIFHk8UMzsBQ4Cq*OA(~NfEBaHlD=ZGcJUnJ^aQ%Yc|2sgMG2#0 zy`>opKm#6bt=~O-$)zlzWDU6IWXu(Sa%9Yo33IVB3C$vObwy^=P?QdZAm#JL8lJ!7 zX{?I~E~Nt+R7?U>v0?Ff#b^78=`{xmOwOS(eJZVN;iQP|kZ0G)H(QU0QtHX|vIfopO z=lyX9;?khBX2^M_{;n@t3NC->x0LW+wi#k zguhIC6RYEPM_o1Ui!Ln?`N1NK_dtXcRMdQJ@fs6|+UYkNASbHjxZcLU>Gm3zCNQq7JC~ zS=iAvfS&Az%7 z7Qt{~O0)6+l#x8Lc-j6N5lpC~no8^B|ECG<{~hRkiu>rVJq|C4(%Ww`nD()({q0Ud zRS1i;MK#8IJV`G@NF&gTA}$AuIe{rw)Les5 zT}|ZOK_b?NUS8PL-Hnfp?e+(V8bH>@poa>8ghd?ol|on}7fXM$r*?WNH(I!%{)oNd-hf*&o_35kd`0-|Gqx+4S7~ z6pPP6Q1m4}aC*}~CKg#j94l(hQ%#?$_JiRHI@Jq`10?LW6Z-#aK`}HJ0-HYg9r3qs zh@*N$WK55F=(wa&J4p1-)Z{l1wkG%M>jW5VJMjEjM{uHk$$66(`+m?}{(+1q|9r07 z^UDolbYqx)^2AsLd5st1IjhUH9Yb5d+rHvm<^%x@3(KjDBSwYpeqWZ?ph%oh?jrTlu< zC|MOue{uMEvPwkVIUF2|%?Ll|0rE|)XaVuU1G6nHGgDH{9oOr>T9F+9Oy4&opN5V` zB7Z;+ec=;k3S}1n&wY+GINTMqJR@-u21#|43$iD3xIz^5)nvXtyvzEU98$g~6FLM# z$w&iFUhp0njV$E}9cQw{&CAONn519`biJM22@zVrBu>Qp5O8Tfot#|5>VLviF%p|t zogllo$S*Hzo9z@|)wQ$~IlyVJ@(%Q`!tCS3yRMUH{*A9QhF55)s|&8Epo^VUF!^Q! z!=a9ZcSzW`J`7uf95A9rTJ)vwuNQAs&botr%%vfh57g#nR+oqLlW>l%Dq6Fa~3$09@@GCdDu^IsG|6$Y4vT*=5p`R2#4Ffm{}+anZWJFWEP4)KJV8?sLv$O}yapgB<{ zy#le-M6Mt{EY4cE2{mr_K)$Zrb(t^w%rmSW5$$K6@w^pA4zUSY?>8pX>z@4-w0}dW z|LsiBA#B-Qd}uM-4`)hr3)InTG28qL)LVx%dmy28UcNDDcl+TQ`uV{8JzEZAODgTP zSl8h7oC@qZaOI89gGiHY+!l7=9-hcVO<1{Mv)QDG4Y=ddUgk5MF@{0L%I9<(!qNJ%4X9@Sbqp7lGU5tw*ADMjXAOOa ztnjiB?+o|yRuWcgxcTv8Gyr9+gcCJt1;+J*(YJJ+qWFi}%^?SEOL11>_vi}253eE+ z8*-8Qk)J{y2T^JJFN&l_bft%-nMYTMd??c-FiY|r-PYl`U7|}9JnTqc{gDO>lnJ1H zGlvMTwZ?HGXq585vmwAo%3>89QSZEBJ*pB4t3A?*R{b#FFzAMJ;k6v?HW#|BQPHF^ z!fBDPppu8DioTp>3^-m>t_0QFixGIndEJkpl+|DR^7Vg7x8E!#GmOa{gPHdY-sKo- zKqhaRyg`cFt^0cvS#Y!TAHcU`K=cT39zLlh*}1~?aJpHgCbDr9_0$I4pKT?GJ`*8h zI$ROlc7F4vhlCMTA{$D=7;1$!-oIIp>V$RH`pQF`{J;67963=6UN6BC=r~VTyCeNY zEx+m?s_lu5@Qwc^3w`HvZDj0ZCrsN7NNI4!4{xx~o^}`)XBm$jzlMVxV87q9*hQOY zV0+c~w5l0D3%Hr&F=g5bc-w*SWX9D;niZ%TA2csqM;p7-?rZUSew#jNz#7}INU8OlY>v}kI=((%8`^dGL;+y-) zxK^>Y$>T89_%~qk6u?VaPH(Or*uPEPD3s!$nA_}%Hlvj2E@#!mP$Jwo^MkP{l%>Ju z=2Y={ykVHMbOH1PWrs*s8m`EN$|Dps+$2{BvNCeAQtnD5(J|vHnwnA9*95LJ@?MTx z__s4@?cbggmsVC{n(x0gHMthn*MGXZn=G$(kmT}fqi3o8;w6P`yFAcZfPdyde0Y31 z9Cnj7yA|-I_uwCcX7AE8DuX7YwEs8mG5Kg!Lpc^FYN^l07h4m^gF^r?e`g530Jre& z*U`AWCB3aYlB$+wXm~URr)FwlMYM)N^zbozK{$QXrr(JXGU#KA<vfrsr}{I34H9P!Sg%6p&q6y#A;S#M*70u;SbAL z-}X~X;%@@I_St}YLGS06Arb%aECDvpD|Y(wxb-nz^OU8+sLjRIcAs85{A-c&Uxb;L zhocgEa{>nDmOtUweD>!o)`>~bO_(sR8PM{Kf{DD9JKay1YYe)=^;*7Bw3K79RkX>J zJP%N!{>c3q1*e<`KAsV>?GW$%dx%__WEfjK0r)R@w&6sc_@)fo!WRnJ2lt!~w-5&{ zzLN8GAli5hwSFA33BMjG&#v+Www{Vhs^(zg51As%@+~O2Bha5@UcP&5jXVgyGDp+n zHSJTjbVAaaDpB(Bp|7>r4^9dBlyBK<%=x}P;`R*Bw`@t+8ls!x<(6Voa>vcxLQ2jr z7tYC}rD#e%`I@I_?3_9J1t$34Axu6v*mh(eV}o5Qq1%TOcjl1LmE{WCZ0%2m8(X%- z)zm0pr*qLk4hqbSbS7QCla*?%Ql{LYG4L_Ww!j~wSwr@mt zdRwy+H*XxT2LW%m{!hP*3Tl31I&)gWHX+C3gGM5gC70;fQ|?u>FxWbo21k=2B}?}x z>8TTvV-6Ptk45roq|jI4rgp4I17dq#0|JIg-ydPZNd?6bC!ICE2*;NsTIVK|V1Yfq zqsP9p~RU-U~S-Z*ozC9F=Cy?jQssx^>WBJ-)_Dd_Ab`sY?sUPUJ+ zYr|Yw8Lg^m7&&q33JnV$rY}vcS9pv9vxK-4MIUe zjmYZ}SzqT{Z=}sO=mPJFf4{~$ff4vFB(2rj?gT~hJU#ZMtlq+Z3O9Nbe4NaJ+Tv>j@0>v4InQQhB!#3e!f{ui0wCZ=8Q zjIHUg7Fw4gkKRs&Opat_);AWG-e^tI8Qcj*mqENPSU^p^Z+7+f2Hb7b8Di?{xN>6z z=_Q2_TyDhWc8B6|#T9nY#1b6kCmEuOThLSQeXI>G!Icm`Z*rhZg-_}VT0DcupUfr} zI0ujw=MgfQ7dc`3j)%n^ed%QLFBnQ_Qe3mT0?X{!BAc;(c&4V(of2=rE>(*o0 z;YX)VMq9L{N6L?EIOUT<&q8&g3_dzqxD1l+pAfm1}lYgfOU;XqZ<~;fsDR~l4T4N0gZ1+(<$vax>)(e^( z;3A^-7^koKh)+-9dQT;zMh0#@8$|MAggi+Xp*eG6AeHF)GGdG?OCrs5u+gArnNqLf zWrf})v!iWd5k}-(u|+cc`C@N~5}Z~Q`p_wLnc0G82$l!`HpUmkWej^L{CBC>jwm+1 zWIRhO?6bc^i67@)Q=8%oj&#XPfQ z52R#iT@B>k7EHJ)uq`OU2o<^H`f@IkHuSsN~*6- zuKAr6#1?T5pB=2F5CrlsSGzu)eLisW&GM|?Rnl%iRj7KQ^?Y=0laqW^)OmSx*Ibc5HcO`!sh=L zL%O?mA>1eG2*=K@rmC$UT?yEp5vJZWRmRMA+-}A_nNKo@GG|@~=ndi8(xsjfbx|-k zDXy>E**F;iw&Nlj3`kR^phuZy2gk?*0HQ6ihUXK(J^?y91tYrz14`LM!H*}gw*k_3 zm1O5~E0ny6HAa+^32^EYFG}^q3*RYwgs0_IW*?DS#sH(sqXqEDmSAxCV~IjON%t_G zpC<7I_!5KdZBUu?&8||w*#zRcgPacoN5GRpir308ApPNrJHloEc^$W9`s~W1=LgO7{1~Qs4vvf8iZU|F6Xi%Wtq9v^L)p@CtitTT5B<0yFXiQvqQZ< z7Ycj>G@}`?8SnR7-gsh>D9o}#Cwe)^P<+^tAzDN-qP!omp@UddG$m^Ms`}hIvZEC; zfC6l27<74GT~h=6yL0gKAIj@WQ3JfHsK9)(*4B1JPIe8Y}-GR{9r5gw$Kj3XIE zx!!^hI5Z5RSTgUGl^#0*xf^z1@CRnji7%w$$ZBW;bz}y7CD^xWdOESNa~;#~DWFTE ztBvEhWs;5f0-rQhA7jb}3?);acZ<%4J^Y$~j)TL|j;c&ifN}Q!J^~IvLp3Yb%g3(dGY=i_)G)`2vOpmbHV^ zlPLyE4+@*xK8ZYDB{*4m;*EMq@usK-V%mi9<`~32GLks5skuZu@7|;N-^b*cUGBgP zT3J$ZbKt@$WlOrA+B7vUP;xOqNdpdfL*0-p59zBFs~!oaNi%(Sh`0!H*0LvFMVlrp z?=M!YWK+^U(`5ed;|W)N4*^u-`gxX@nW~ZMbZtP_pR@*j$c+Br?BmH=`{n6|2YOy| zXlJl#=gkz)RmYZJe3@fc$aOmn)&5+oi~P^*X}b$e@-Q_+y|f`O6pkE2ZAzVA^>vT{ z8FSE4WI;^13-(e|o)f%3M_jyo|uP z;Ogi?WFYV3;A8tCFFUKvGvr5*XjiOo5}6-FD3~K13vm+eBO8)Hz`u(RrEL_p6NYgkg(x2DoYC? zA&qe2`xDZ}hx+8SR=C=_x_y0p=(&c%>7?~&;y8M66ot#6i+x89FVA0rvzBh);|C z*uoK-n%wl)J8aO~>oi@Lb+&$BT8d{?cVibZJ%hybpC@GrKmCPuBPP#W3tltDNQa$tg_$?TOi zBcC%tOoFrtoy}0iJjLtHa5}Volyd*yP;>jzgPGJpb9>oBUsK5Y;=!WUY7|=b`MUE< zgwX00Xd^>7&vy*Z1{}t)gZ`3B-6rIBc};T972OHFE`*rBjsrVfS>Pj5dVq4TqE^rY zVdflAX0?|eldJdou;lTC2wQ77lp&vXxwoSJdc4$AY&GY2Im;3d9D#ZsBjYPOnm8Q` z^b^kp9PvMg)~M#Tu*gd~+|9ptBWca}yt8{x8F(xCS+OXqTx7@}lC%ca_{WPo;}CaQ z&CK#dHg`ij3ld7Yp!%T9TM<-bbj5W%&q%s0H?|fuDvO%NqxI#df8FX6f&Cd-#LKDL zwf{}n5M!e-W$KCVF1JL(&}wE*NM-~j|7V))HaBg>&mq6q3ZsQI+%(1Hs&5yqp0OL# zF-!Y-pGUp^EX*x3q5qy$aNto7sNTRpJqN=TJwCDcQ`CTQdp@}QU$TtgFSdMIY6=^w z;4?Dt%PZ_e)%9Amle!Cv;O=e>3Tmn`e^(O`bV@*`Wv!~LEJxF;DPsDSku7q2L|!2M zZZb0TkS3AqN%3`4fC$7^JG_{WX&qYHzydvT#V$QqIIadXz1`IYV3YJ*Z*~VHT=9Nr zs=QdlcBOq-g7kNz&0t`8<@mE514G){mz7u3ib8}kbeD4q;)L+Mm$NEjx{flJb1K6P z=;)U-6y!3)42s`0nnk3bd=fe9xyJDHP#K599SH0EZ)mDE>JaSyI`#wg@%7&q3Fd68 zbh}_rDtrfqCzm@d7@8fnf^s_C&89csc%3fMP)PZri$;`Wgd!-N6UCg(n?OVC7vTA_ zT{H3* z{Yc5B-@b@4i>R|d!l=J@w3Z=@CtZyg>u2Ol#mz4$jGUw3{6WAFO`RBQl=1#sFt8_V zU&_n#+3IK?m**!&YOHFMnczl#f=YKe!B)z*|Ibnl%u}rXu`!xJAi=%_+pA6_(q}l^ z4eDiqtXFS->p=>n^*)z7qu%vquHszEDa<<<{zEfdp$(;Nf~daSQ|pGTk3k}EB!&Dk z_ftndF4ouZqXjeS=%`rBNHk8!6|UlC`tR$4W2pwH%<>Czf6RJVr!$;C} zqX1anoS#)Rd*4JAk-P|t;Z4bmqm*6gAHRi;yV3ZL0|;|hduJ_I zOwUuAnoFUW8t#HzsI+QF>vMR$INPqa%sEDcn;(}For-sJh%rC2wIUNUb+cpn!}v3k zk{Jmcec1~S*BNZHE>E_6gA1e+etg+AL)E;uw2(?vl9fQ?;1$YE7jrQTj!@18FXg?X zXq~T1+k2xB58QpX7DP5|l+}qWWLs=<-&ygwAm?U7Xyc5p$u)f4D-#(QxqbIK+DBuL zX80+y^kYfDa(kREVo+(S=nOzh<7gtlGs-fksBX#liS*+dy{4`{;&sBhBHxk9zLAy* z!-y(Ql=4ktRDk-BL;tz5haE(Bg}MAx*A4P1LcJvYc%pqh>Uj@6k&uuXXTf+;o_orb zp)T12^UChgmItoVQ`FPe4H74bq3}@X%pX09yR>DKP-&u!Xd;vXW%f z4y?O;x<1x}(**e`pAEO6k0=#U;2Xr127`xu}^Jt1+pA zK^!NP(we;XNPv)}Z$T-LrPC6wmq!o}0=*F(j|9;pfJJ)+u(r)1p9>pCYB%69ELHb4 zEHa=qQ$YryyMQrqVDp}ChIIQ~Qkf(ND=jV&K6#^n1bn=DX9l6eztGgNwqSs?6&0mH z#)co-dgI0uNZQg{q0dcW1%L;Yh^WBA9MQr7DiI->(_%ZV*dqMM2m&-Q<53!qU22mV zBj`i&%Q^$z@$}O#Em@FbororrPT<|IG_#xbugkyPgn$=)Xh=u1@$Rw3<%4TTZ5fdrK@a!50W57=vf$wY_&ZQ}d$x z5a-7J;8n%%a|N2!3v-iX9r1NB@x>*_=Tsamr{o3^+f?u-X2oarxu43%4jHbtFtOv@ z@Hj+V>|kHUY9l5*$!|+lEWMUo8nhC<$7srtT>@Kht3P3C)f!@Lpo;bU-B(r3h=Kxy z{V*vqIxeWQH>(+sr}jsa;gS=ct2feDP|wR5?c+vS&u~KbhcI*QnY8YA$Y}X-r}Jwr zWJAkspHFYe7d_uUK{W~e0XW4sjT!qF?=^g^F`l)I+$4u z(9Fygqx~oFJRSAhp6?99$rJ6Y%Suv5Amz6zvEf7R(9_>;4r@y1G2075Nw|`A&4WOV zY*Ng#q6X&Uq?a=iUY5aKW4sO75xHj~Nxf-F=M{5jquRvc^WN4$JfoVacQFFWgd|C` z)N${W3%?Q%%`DyQaP{*ztytfU9KjTxPHa2v+ zYXY;IixKzd{`{nB9;CXmOa{owJ^)4yHIu)6c41S>2G_x(M}rcTRQ`V-iUTy`;^d77 zOcA>KGh;*;x;SbXq^m?qPa+>TB18A)yE9|HRg5f1T@!Q>`l%U=&>TK@{(zuB@o#1_ zNrKHKAb=s+B9e);G;=_`aio^f_fDgr5?`g!`NQ{HEx&RG^-}AuXOM9GKK_nMJUNQx zky$_~iF=uisd6;VeTl7EKqfOvDZWWS0|d$slu{MpQP2yf>tR?%ydwATtf%~`fJ2l+ zgnr%k0m!PAR+Oyfi@|1tmwNYkP5aGeiNJMYpmypk^G>_L93O{KJM`%W*VtbYx(knK zaA!!q-uDTy$`F{ke;s>=6|?Fs#x?CXnm?_1oDQA~z0_Mx3!iQUpuwRM_stez$oNLD z#>K~r>FYzPsm~9SIeq=g6;CX{EH09jrPsSK0f|&zJO7jRM>bvpmD)lDCU2c1YP0<& z+28lO`|H8e8Dpw1d7^HrGz4SUGa9O_rTb&zYUr8fmGq@ecw4V&*PvYJK${M3d!omk z58&R5c0^TK{67q};;!HM6WOn47Uv^MQ@>;@$zp5@k7hgpxr#4xO6YQS$LJ}E zVNhlBPLHna-mp_(NniT=d2XLt&A;5_wXKM7g^A9r{4inIzYlwy5P(+kNQKcas$Zeb zV+GMRBM*OlOZo zh`a)s$_~0Ia4TqZCDQcp4~Ulu6(44()%k+N|7w)h`h-+e)0u9uCtO{%>`>^AOlfEk zup(FsH~jc%5c$Gcn&KMg0HJHqMzt(yLPm72< zyAdl<7n3IrI|Wbe;>F!)i{mKGwep4@32b?zvRyg<$6W9Jtp;>M`gXiTvCicaTC$f$ z-j<)JK|MFv`JL*Y7DY)NBAwJ?vS!R(;_i*yk8Gph)xYk(mm#QEBO-6;7XcR?pR1}$ zoh^3Y?*f35M$sEt{;^%9sjU26WF2+921`nIAyhV3WvoTcZK%xYkN3QfK1cr-y{3nI zO7adoT6H8R!4l9&;_YwjR08M&DH=TV|r{h7L^xar=b}Xn9g3&H+|coP!#DQ8Q@{ zdQYK))$i@f@~Wyjk(HI=8k&1Wh4iFfHJUv>NO*bq5kU6F_T++rAqSxY^DLr)MusOm z6cmu)n*&N#Ug&NJvCDhZ;4()tI{5QV2&aeZh^z?G^>x3{bs^s{+PbcsMtGRB<9!G_ zJpt|I<=%~HxW+U_(d~ZL$Emze(`X`(p|HIojPOB7;%In%n?2oib&a9*C3Ne4g7v<4 z^o&N0us1kN;>Ox|uPgGrz9hb$)y4#A2iaty)xbBwIPQSJ@&_O2bpPZNhrB!<0YMB` zq?_l4k>Q1w6efM8E)e5VS6ANq%H?WoEa%2lZ6ZE`r(S7ikAlr4F)_y;o|uYYY0KgI zySIr>Ty*@l2O%)UwHgM5V_{2^Uh@sw0m>y5I?QyjVJMxDDDYnluJJ%-igu4T40n}5 zRCU&0|%suVwz8_RgAJl%hv4$Zh+5BEO4)XQLs(Al5Xo3+OgK<7)5iU3d4 z>iWsDHd%Dr;-n?ot=7%;=$ZbP_;fECxyu1X>a*RMNXUCkn)5{;l<)18^yAxw$dIG| zor_?RmAk=Le6>W(nZGM>9JsaH6WI69UBU0;S}?D~XqQ@ufh;O=iK3hG$vv?gO-xDV zB54VBfeQie6rN|#n;ZwwgL~7t%;7x%(BBWX+5qbCltk3yf~@^zy6{)RJx4jQd5#3_ zVp@>Cl0dlI4r3~?nB(B~< zVM+SY2NWfZyqOh*W0CoUZVo7_Rgdtoskz1Xgc8C1-(6EK$L@M z{~3rcpRoV=S2qK&BL{?C4lQcNf28!Wid_DaVEx#^?LoW4hrGGB%JZWU7kA;cI!`DPLuGDpiA;QA<<68+P|At@4L#+yR1M= z0m>}Aze?ooNZE8k5OtkazB&F%BUNKR$PC|`H{CSQU>24)**MCtK75(jL4oB!lNZBL zmPO|Nmf|!B>gPEx`bk21vdUoDgoNQcVseUuq{Tn?X9^GGNw=%d%#lNXtF!784LMV* zw8OCNxQ*AQHe{3(2Y{n|y~l;&=~@RW94blwmDz~%@gAL8@$zPy87{ZOdhp_}CDWq@ zZ0#mb1e_!sW?jZ6^CNb8z1WiE8tr-vyQLb;&4CX0v%Vmx2xy|smJ7g>RwTuHXzGoy zrSxKOgw#ge6`G!&Y36SI`TlG(N&@cQWaPejVc3?j5SPO6WoaqG(DhJ?$#;{;oaReG zGcTbVHJ|n8aVaw|l1zG}8F3c>>aSAP)g)SaiU{3z_dS~MhY#0jfY_|~s&;($vh?u- z*7yCS%(K>%W&c1#Ei~{y_X2f9P*ol7iU!D&h*7Ca2$lmTz4(oBcK8>l4ohF{E$YXE zd<_Jnoe@d$92@rBmEcnI>!Tq^{sSG9{*p76rNzxGo3#tly5%bn%3Y%CZMHWoHp4rS zn3y*YtYZD|8QL&aZ!-c)UW6V$qDWn3Yc;A%Isw>!*%9gO(DQObTAPTP z++B-0df?b9Dn8dZh+2wefNa?+_&zh%qLZZy`6lEl4fnRi@M5P0hm@&13knl^0o4lC zwu9jLBVMAcu)|~`eL{jSHi}Thd2z0`C#S!&cmr-|x)Ms&1y*jAbR(CG8MC{bNFGSn zCB7Ik$4d^A(Fq}GeOoW(r{k6MbNiIt=K~DNIES1C(mQg_5 zzN9H}XS@V?;S!v=A~~N_j5q@8f_|1UO&uhAi$P z)0(k|HX9b22RnG=J!SKhCdHLh@x!G_!Sh@1N}*Zt@}v0=PMNfom>DuIVmH40TnROb zxZO{i0x}BG5|*0$iHSR^>Uu#|(i z8f4@xp&GG+>lC-y036!y+U^yWyPh}3aR*RQB#a1vg zB`$bM4%L|&LO}TnEN0JBB)-p22amNMPo$k6VAMhW^iKavXOzC|A2DWBQ{!qsl_#(r zNaYLPs35W{-pmRW=n2#nG|{8&2(FTh{6jyU@_M#EUh_nDukk7p}mn|=BNl1Md zU5rLBuWfRXY*3B}X5Nyu)R;R1I$*t>pZ32l{9Y(%sDWI(!=`w3k+OiOv_(|a$xyZt zJ|-AP$M=KW>=p)a(qT10bdbRZh%Cmm9xR^TUS{+AOxks#7|(pH=JDEu%RElpov#wx z*sO%PfG_;P+MX-XYU^|h}O!3ce$f?U;wVB208G|WcLs{Zw75bry2eoXRjHYkl_$(Yg-o+%E0XU9w~xh~L=f_zSIC-KKUjPlg9!0K zg+5CNj-=pSyUv@fKQ(-wZL>HEv^+2kr`fzf17$34hev>Cmb&ngMqU>lUh@N}->U#h zGxSh(HI^3UFf9N6Wo@ntZ!X|V{vDTJ?0`&79A1-}UTPss{c6DmNlp#MDAT zP;-RF*gzkWdzjW#J(%kCCO(<-RACa$6x1oggL}nQ^4Yq2IB3HBw6LKoVw)M$z zf5JW!Hx~@?t^Mo0M^6ag-aztw47u20@+P^PwUV;cMQpga9!#)b?s!1o(CU?}D>cZQ!pEt0{0l zpsbCbEY5RFteiuHw_1g!eWOib6C{b~w35t#p7_2|vB<$1DXi9${rpUu>fCK*EJ{C> z^h_rryOFdw^5bi%@ann5#da?P7b|aM5Xbi&2UX!3j)P}5&-m*D>#a5pUKcQtpVDT& z-Gh+t@Me#ZZ!nAh1HrVv~tTIkI|!9_5Tj{0G_T$J>LyQh`!@j=Wv;(W~%%yAq0mry2Im%FOD84&)!Hg zTYAB{HKwjDN&L~XYhR;-auILcQwut(p@|iT%70CKk=vp3p3O*rLBfT%?(iK#g!snS z+KLtuDCuoU*@?-DrGYtsp6SOjF0PX4;;8$p_Rb^o|48+B#lTMNvsrAc z4l7fFrU9!;T`3APFot_p>urRRFK1G}-W}x-7qUV({?DZPa~5Yen<)QXs|C$4<(ih; z6ZPf&le<5=i9WJ6ZO(jg_cF~bk62RRd5ke|j#L)ZER0go@$XCm*Scn_$0`Hsa(e&! z*Ek4PpO!DP9gFuxKbLVcLMhAUXO=fZ3?kx9FGlge6!To;78gCTlF1ZC!anyu}Zd zf&1^)00FzNqLoULwj_p&P&!v=ph7ZyID;2U>d3}h>+HP0+Nb45YDyI5th0=q;=r9= zi<2NXdPEVXii&=0nKH@FRF{uNYG_gMJRQa(VcL(-{ZdQcm$j|Fe|9`*LnfI?*0E7^ zkp&*3vDv=n2YcIpkTD0E}*8$V%fBfs~iR@U(sfC@Dki-Vno)1}$V4wp& zyib^5{yHITpD^2C4WWgU_t~`MwQIo*V*55)pI58krU*U zlI-V&ure~^KDY0eRVc~1bDytwg?v0Fuw0e_o43ao63VW8NZOrwXLezU&xu`4ve{p# zt<;5+&Z`w9O8`bRwfrkupirk5(_vE61$2~9L4xX=c029K8vj++wD5q@k-%fX`$53& z{tW!w^|(~JL--t#+$+FykTyGNZM8oZK#Ix;v$j9!-5vrCzpkljz?B2XZIY|}|B&_1 z-Elr{)Hgh_Cbk>3v28nz8@sWMi7_$S7>yd+HXGYc8XJvq&-Zs<&sx{IpBFIy%&c?v zc^t=Q?`>ZpY3|Ne8Zm&;0zg%wDJf$r05Ox*A5Ma^^Vm4ufrCC>z`)A0U!ld0kHIu) z#9g9Za0p;kE)_?xa4{f=af9G=W1Z_viOM?f=yFT7sxJycF)6$ZX0R{O}L z9AB)`TSe#Q;cPymsqi$0q_o0RKnOBItcb93e6vj~BJ~LL*fI2Mu`acz{>;DIXN&;W zYA8Ds6F6L4rE#@I3=C}p0~s&CE&m^W_#%k929-AcO2amgph{a??)@{1w>pHUGQ%~* zNQzB+nr;TZpC{|#@UArGQ~F)U!?oP+N%DBp)UlkIMo|U)>n}0!mv1E1HT%@%(Q*fB ze7IC?%|@fj0iK3Q-RdZ_PlOdw%JU23Z17o;OiS+4&gMv;X1kBqz@P2Gut6zx$bU+Z$>uaLKjagwv&-3EsE zyv8FokJ60TyY4}J)D4$?xQN;fL}Cg{rjuo;Y26MSDGr-x-F&yX_C47>^wWzoLE+Ur zv+Q$Mzb?Dt^FW@Mq}U;E;qk^(y}y?|?{I#y-yS}4(*j~|Z&S9$xsJi`Q!4zjFWQ#R*4dL$w8Z2ymTUMq0Z}6U?@0bHr#XAY zB9DLv$1PCo5dTUb&h}1!ZS?o zXR9CSV;oZy*0}p_cBwB6i2(CfB=>*JJId_zZ4F4j*8bAmYuKY7J{8TSNo(z(fXDpo zZufYhYK;BdZaY0^7zr*TY2Zpx=_0a6Ewrj+5wrJZCOU>I z$twfkN)ggdC`%YxV5wnII{)oqhEgRZAst-h$y$Z9smzWde_LFvX>7)(_#xQYafIRu z@GC_dI$LpN4e*D>W7dy(y8GGSw&GHu--vv=SUFrYK?3iC(qz98^-I9hcq&_nx8?)z zHCr%pGVZHBZva$lE8L&ae3rU9Q^FikmW#Vx^5G9oUQz{n=3t?J)@HU!ENW=bkIZq1 z{gktPPq*8DtRMTHy<<)vgo0_ zG`B3pKaj?81hijKLpw*38uMIKG#uo^`BeO^RXlmkD^xLan$_4o-(@}PW*h>rSnre*u}LU-+^e^QDPE$0yZb7KN7Nn_f*+v ztI7r&^_qWZ=?5pWUGoy*#+UG(G-pxh!`&de{P>X^3+a7d@9>7BBP4`Q;9gwXd7nlV z^nV3RkdhuVx)&XRj?Xd_C4m&qt94%h&j8%r6p~Oqo+nP%T}uC~w$6$1StXB;rn!Iy-4QQ5)wB0f zz>Tg@6Qcf*mu9CAwDWG6eI6F$???P#N29?`0WIg$_*VC@=e8J-2DhX=n%r1;>E_#7 zs`JC5_j;?C-)4&}#PnWLc(PZv_xS2laN=fH|{7>+Fp!Jy79~E{6yUKOChQKk(Hygryh*|V{iN8N_>EGj=3t8<-X+Nx+71)Z##s{KHG(^uCD1Y5K{oFMrOje{88j^N7*!3XasiHY$~W; ze~6BvVqz?Bj*w1P8D3o{1B{752rbV~6mBC}uq=kaj|jM{Y!37;*S>8+e)PC`aHA(J z<3d@_$iGazGqn&AWaRU7eJtm&@=s+V8}zmVh;sILAm5uw`X&XcxMcsg4&eZ zR|3XL{~a4pqpSkZ-w-mkGlf@IcU@i+h~x?+1h_6+f_rs!;iu=hG01x6k{0sJ?BI!I z@Y8A@s)N|>CK!#4P2lXYT}w^~C3M0IUIbr%Ap?|)*$I#QFaiGRd)}9Z-j4!eWkZza z06~Q*3sXcZ&7V=!uXl|0W-Tv|rWYM56%c&NR*SjN4Jn1uFyaaG7K3CL-I0ao2eURO zIc78!29_{>?`{9K01JsOHnh_lD^zHE3`^rDLrV-2-5AF%J0MfZJGJ_Y4NedW$MhG(x|KuuDrrIo;m@Up zP5kVzxM>QEZB6N$iVDoy-B7pty`N+q%fx(?Fyjsi%tY)j$0qurW_z;)&!)zQ^2SN* z;$p;lZn#W^jB}(IU;+0*gCj7G(Q;Pn`8a1u(A;rSM~MB=qLeVclPICb#DSjb;rxw zpS{}Y-;G;RPaaU+_K1WoyC2>zw;#G+P~Rcs^3{`N_fRqU8_rhV6VcIysH#6RJ;T@_ z!SYyhd-(HbrG+LSVC>V?-`bi-ZEqpf|Ne!aoBuCa>?e0kvqUQ#&-+OTA8?zwg|m~T zLsFGazDy#VEpTN?EU=5qWAJBHN=vr#d5zh8fK`^FT-LlG+|Z6AZ6f9 zR;EywkVzEQR{=Z!4JS9B6`RJ}`p=lGsD~~|o!VYP3PIR>C@uA%6cxp1tS@n71uT6* z)3Y;0_!OG7I;N_v z9XK0>{CyT=fO>v;dMc@>Ak@~*?{siRsNd}qyXok--B$>uZ+XS<7P9%|X#BXT6tmtQ zyVKt6lzQXoXejAt4_Bq%_NnLM_e(P?zb`S>ZwZ3d08%PX=DkV;2`^4xY;^0Foz8ME z-%BDgG=tudJX?*g!!hdvw8~x<{n{#a34+Xnyl8 zZ)|=^Q?LUB7k{DVcjEc|=yT_9qd`A<;!cHg*R2QUIbIf3gNsWd>ElP$mD>3!nAL+l znG(Cd%+Ya$H>wwV5Y_B-7mF$FE{0P=#pRXRGd}WtxR+XQm&#|`FiRM}N*e+_+s_*zwh!UqDwy zRW;_MjQ#GxeP?wcy2W{q-C?5*yymv?2xtm1I!YL7sEvR4~6oxx;z)tQ$}aj zZ&f_kA8JLhbc!3&S~HB#D5B@&lmj@~`_b8)ETizEbD>IE+0lu)8&JrP-qzS3ep}|_ zkNW56ey6lejDf6Yi5|+R8=Ej_i`ig|3*Dbe;Ur9FhXj4V9NHb&yK{w}jlPx3`UpE& zs6pvjEow8R6dHVQ;b{CtYgvG={|hIMt5${RcK#q@S~p_0*zGnRE5iL|Z;jJ+c;qj9 zAfrK^;|0*(48iJXO-yQ-h~9@=Wv01so@|t#+Q7EtSVto9erlFAsHzkWf^+T&d`X)< zgsO3L`joY?Zv6c_=dKI|Z{flJWJYH&nN5hX;$qh8DCjxSL*@atffG zeh}6#+D#|$6*+KArLfkTxc>_+?Cn9A>0XBUa;-H}VR?=32&JUtc>mc-5F*-5fBxWY zt?xcN>{KRe& z6AQ4@0v=)U$f9vry^c%gv~jWHQLmAfvl1dUtgR!8yPFH@NJwNA1`O|CCq{5ha=nGN z4N3`@#il-lk{n{9r2ecbT}5a^$6rZZAsYd6A_gHK70$bY7KPU!|F~f*8K#Eibz3ZA z7BL!(8OOMqT3AyPS%;ust>YHO@=B|y(p@oW)kIiVSFZq&d63^u+Udp!^LNC4 zOti)hbmLX@6B@u!Fx{O437YP@C<63+P!0tq3wb{Eiwb|lvpbxQh333pe!O4O356P& zcm86ss$i0FmqM~BmseFwihj*<`)g51@r8>fSOkEG&3}Sk=FcA0?MReh5IbqoW)27P=bj%FF@-$Tzy>51pmF?u2vq zq%RG6sV3142LIUGBu*Z0b`rM)e1HKn=tr;8Rv)wvGW+P(zUYL{E&yAgpr4pCXMyW<&LxillrV@D4 z2A!mdyFE~9c7=)jS^4rCXKe+iM2cNvOC+wTgl=>4JUz{c<&BH#M{9dxR@4SnlxQ(~ujno`u0la)DKYh8JZ(`o*F}2C-HgrV~apkQv$z!zA-Pq z5}gUgwd9mYY-=9+zyocXhv#<(T?|uYu7qph=T9|sBS87p12dxVZeY0guT3opW3(;C z+cQ53K+1v%K#^|A1by4Ou1({EbRaDjrW3f^{=A3xRbZrRLl(1HF zEY8^K)4$?-K{?^+x+`!|7&>RgTdwsU0#mAJ z8oX4G$qvz@<0_M=)8mdhqJS?J<`+s#k27k#oS44R5~~U!(vV7|NZucrkrf$OB=TmT zvY2}=4QDUz6wef=Fn02rX$p-6tku5*5A2tbbHc{93A->1&w{#)YpIZRkW4@!`l(K9aqI4>Y`h;INf57Hd(`)N~tQc{B{nokw0?1 zwcC7A@6QBclJ4v@=DG9BYEd;ONX^PD8r^d1AkI`&CR#_ULYK0+>6o?@kJ?R;ge?LQ zt^LKB7&ZiX8E&X9{f!b^P*(H}vYyKCYK6mR&hB4x6dLjrdF1wgP9)#q>3(W-LgWWs zF!HyzO>fMFOgh{zCYK@@Bzd@VoSl)VTUrjoy1TjiS_2qEdPsqBa=s+x5=nABH67o3 zv<(waS*cUJapS%5)zdqCO6>A|rX>!S6ujfMof5Mnw?3}?UhnITc0{@!nclD3m9H|5 z-f_14?+H53Cw4!&HIs4kS?&QASL+*daoL+_HVTWvjeKH)Xvf-K{$EPN@2?5I``kR1 zH^Z}L{!h71Po>s(PaTi}uSB28GrV1_zQdOSWz9{p_*lqq(v|Q=(}g^qyzVRZF=p18 zQ(8u`nFcKo*_3DJ^DAE<}nX^79;2698 z%M$&X`8ab*`g$@E)Z)DlWX?YAtsj0Uu_L$?BJSlW-CR??n0q(rc)4RfZR`&fNDTL!+0YF+#easw@IUP}K!WvW4gK=lleROgSpQ*%RM1<}JW05yZumEk z)dy4Fa6vc~&$aO*p0o@BU~7nW|8lb{ID1kWc-Lh5c)=w|)EXxPbPcao_mg|aJcI;- z2QiZhjBaZHjBPH-!h^cLp1b(KpqIvUCXmnEOO%p1^O29a7yOeZWZvqg3!3(<-a9E2 zYvBC0b0+%bVkV93hHafC@|5Fp&Ymf3)XSb7c6+t+RUs<*y50lKJQ$}jzC8a z6f?-QKAa~9JqI7=MIdRjsLq+~XrKS#g6*+04m5xG_M$KCzCxUNk2;qI_U>>yC!6Nl z=l8tW>YdnWC&>4FWN3CY-WIIBT!}n+mY?U;$gM4eN99~Xjm0gorNuq{__l->^)JAd z5LUgbttjoCc^9*m7Wy;E%=jqUSF*0FoO;B(v8GSopSWkgg)(kXe{wq7U8^WxTBCkwtSlq16oFl zB~6#Vr)L1Z4IXcLfg`M|3ki6qlvivCv}b~Wfn=-I9U~R zh;8QaL4b1G6LC!gnY+?LM_45T7^_oaiK%6hqHj&mKZ!H-X7qJtmM8Lx%z||?NE}vx z9CARP!PTDCB9&Qg%-s$_*p$HSNYe-br43j|WI~kAywTjHgzup|^RiiG1iMP`oi@wB$4$_KDf(Ug}RA%$MxthakX$;iyJz>Kq2WR)oYaRM6?A9BgASlB? z-dnr#-)Z5BtrjShSwcCx;`JBY_ z5SkH2tWgQk&r2B6)K3I2VZHwE$m1(b{x~xVy8y?&X7#O>%q=G- z#k>ybp2bEFOb+m#$$rJm?yWGmtJq5a8D~IuhLja|eoeRR#7?xM=h@>qg5@P6+2h$u zIm`Zd8&8x{F?hCr%I3K56I#6z@l?J@#p%mtV1}ZYSp`dKPwEBoFf`` zoV2NYTMDns5ROr_Gm&;Z-|or2bgK?$>S_7~O8A)^T{rX#8Fiw>#!kxJmDomiRdr)NYIF!sL&aOik4pZONL7C>BEJkiNrNXJ zeB$BuusfrteBB$qHTWgRH%8h2R-xlzlViQh727Ywuf*O?)SasT=(A0|W@x>mnY)|p zrz)IP4>$MUzY{xMX~^0-94SkZLz>;}1VXmrxEnm0kPz2rzP_vpOpCv)@vqIyEe5|Y z;;A+#$0e7>t~v&Mon>=V->M)ZLW#aP7gzT}QYQ>QCf7->F5%&bp^^!XAu)-+Dljrg#4Q?Q4 z$>Q3vdAcugJx`jP|9>d17*l|Xew&+IsP#e3D5Q0LjF*u!{Of_!B#CKyzl5u-Ia>9& zJD(ee$apK+rDekSPG)#`xHH5uRC@{9ddWuI@x47zat4MQ9JE0&-8BqQ8I5R5 zK1p&R4K0fWVpjO>D+$iu@04GtaMMd8W#uBo?B?Z2gc`_C7c0b_i~%I1XC@8~%z~co zE77R~Jxe_*dA>Dg)rUbv@Y|20fIhWmFBQ)LoywRyIJ!EEtw z;y5lp%@Q)P!e1L;aV$RP(F(u~@>$bPOo)0Lex^sRlU)%vhcL4V;>b!AkYDEiEJPu3 zOY+|gwqoXxMtD8wiDcq(21<{tB&DTxHU1(&x?J;Hc**7D?k4d;(8t!-R@N0m$YxC(uNA!guFp!>>RLuV<`gQG#OI=CDCGE&3PQHUtx6I2LX zF4@u^WZ}u{LL4uB8IiQJ7h8Tfy{X2a246?=`FZ9~Y^prGo;g-RYFuJrezmIHpW{+$ z0YktxXaOEL%RSG-2BC{Ro{f|;qZMu!GK8a9^tDnQ76Nl(|1|BF@*-t zc!}WprN#l*m);|x44#pHX0($4Z@0h9($X@{mfvx-F3|Q4LWWy>0$>lTwnQxhSjtYy zRCF|>h9GOhW~awP7fw!1NZWy81=P4p9b-xhf(=%uYcCX!%u^OTMdAm9>QGl_M)Y#e_T^(D2fH=K(d?5JdV48;&92X~i zcNd#iX^V(DT5ijhwm^omQjuQ~qyr4Iq}_`>map+}3N|_-QKN+x57`zFkoAInQQ6!W zCWe;=PtVVWW@nQrPKlQm}Gn^uC&>wU)htwJA;SO&f1=tg@y*TxtXgl;rm;5;#1*QY2% zT#_ju(Lakzg!gs2p(dm@5v75VB-iwN>@mL^S=%>iVkrLwCc%`5PeUW||PX`C90T{Y&wRaKZ4<0@g`HnO{aiYAbeuP_YN&i;I7=Qym8;Twf; zJ0hGWDs7dus7|FMO=B#r#ln2ziORxsXcYgd%u}5WR&jyLH+!K`Ya=-&u7yf5RZUXl zQCm6pk`jAqF48rj>3GX6UzG0W1&D@heGqlO-BG&>jMMx}83IB@*2Pc0?2KL`4kezio& z5YU_1ls2zC!(0y{D+|cWgTl8yJNIQ=!tc>R&dI?(|I+B`9&sHP7F8seTKl(`UIE&O zurE%*>-yef_n^}Dar2=oWXtc~_VtiFAe=?`1y}eDvctSzi=R<&kBUZ7RaK4SCR)?j z8~_Hi7jDk}GQf(QUcsgg>2Z1Ulou>9_qjXT$HeR`ZQKY8eKy_Wy$`sJ3XuS38X8;qad(Kfo{v+2x4x3I0Pn5`>z2GJ=ES+6@+NimC} z`$BR7^876RV1|ni5 zw{+;34h|;R+tmVv_w00!rcX?OkFRfWQaaRz8xlEQTgwIn0*@5(m>b-eIkaJHPEM$i zsK0$4=?LBDQqa*kVG_iaueXS7I}5WjGmD*0Ft*dKhXyq{4%NbdF#OIwnJSY?ncg84 z3`kSP4rM0eglEme{w@AOB|=3QmR?F*bZdgXRToUcKdkSZy)V^T!Z?XtMn58>=?s-E zq*?*>KaEO)e8K-2E&tQ0ngAMGE4zW?WrA62>d!Qvs5nqnRli`6`jL>5#vYwJh#5N2 z@9t6kNW%!re+2^X8>1Ud2w#QBIwOO!Kd*QANCz6hH!^}-w|u!N!`dO#q$hb)(ij2w z-fcd<*GPwy5OA;uxxO~B=Q09n0{b5ZuTv-Qw-p_UV|Vbfh1z7?389r|Qvp57yajhK z@NvLEM+n}csn5F>%Z$b}Ve(Uk5KW;Y%;+;API7qndY7HZgAh$%3K@fdA$*|YddsIz zZjM?U7n@y@W{F~2MA#q-g?R7u?|$8~>ZG^yBXP;Ue%obsR@0cY9Fxe!gB?*21^YIq z`vt3)oZc0idB5Nt5+W<)vVct0{h)TAeAa)Tx)>F(BMLHud)#8K(kvYJGrdI3(aF~b z|6GygA-IhrR>KKCBQ9Nv3>3EiK5FLxmo z!09(EpdO!90XmSzdsE9$C)BJMjf&F_O~13#+ z)r;~C`H^9U9(KxzBB;kiVMk%O<#_^3Oh;?Sw(c8je7Orwc*4|f@@EL{PwCklk${B7 zFn|a$b^ArPV5PyISvk1E(<2EL<+!<H zr-3;O`u@ok)S%lwOagA@3UgxF!(DQ2VklP$lgl$$O)jnyh*wfiMn=-W)x!ff*K?7P zX`Gs_)CvXN*xnwikc4t|brKV=35~U`2AuK(i4z!;tF*^jUyGmJQWzLW} zBPzJ-ASq*ym>Ry@(Mo5Rn9-i0W5gu$A0wN@6!e_b$LF+CTVzx!g=OA0)4|aNUXMH4 zCWjUH?m(3z)<1=8HCnZGU8ssA>yUr|*NF{)-+ zvH1=XDFe&V%A@GkBs%=PKPx1AAl8x=uVOPQS?|8jafHZ=*$5?|End9&V#p=#BH?G~ zz^)yMtZ?jx-1Rc#q1{N@N+b&Dw7yOvduCkzg%Pd!;z{N7q=t!{ zu>^Ck(*o-sol0r7;u2b=AK41All87LX*XD42Ols6RzVpU(U`Yg-tC<3g~LHiCQ()0 za2v#{x;`qZGZ+uCUD=p1Pn)cTF9YK^9&u>e&1Nh_0-%`%p1{o@sJpud^)B>Zew`2- zz~|ZrdZ8S?DU8~3b)v7{rilAZRUUaMacG>45H{4g9gry0DWp*?C1@0I_4aUe&Eg-S z?El8$`+BW>y@M{?Lo4Lj690T4Jsw0_c&cH$6QafoHwCyv(SSdGs_BGlaM5 z;E?|uTViX6LFee|?P`mnyP7ex`gQG>M)z-|N_!?NTYCu*i1@i=@(EIP%ETZeqkz3? zWds5-_`T2iCM0Qu0naL3hDVo1nhv6d~Ic^%SA+-7g!L$h@OH$zrF~ z{{I+$kdu<)8aAETkNsPAO%btM9!nv=IEx(f-W=Y^G|z4&dDc0wA0z9nfEWc4S@gl< zf@o+H=wBN6Pe%&#s)2Z1W z&+L@*vk^@P@C`F4Dh%bdXiODgUCyPYgt8fZt=OVfdd`I!`e|(?7BNk8arb1Jl5$#U zC2LIjC>Pa?)Uf<4H=OTvT?Gn-RaAg!eSUWh;m>i+?g=`i!^wJLJSeSTnTEcWl`4%PkVr-zb4I&WIm^njP7QEyaJa0ki#<9+Py(WUiJSiM2M zzAQ4I5e->25OB*4Nv|>oc-4I$9tAM;Pk4yXS;T0KrIhWuskv{&L&m_om!5+pU%wZ?|}Kv+rSf0 zo9cpo{Ok!45wvwykuWNX%4h&rF*-I*cUOI9VbQFXn6^+B zEK#CIeNSoFm}nddD718RVmdm68M?Zr$4rI@%hNp?fbC-rt`bz#66+&znPH5Kq_Q#_ z2?IUy6pycN?_xF1?mJIA)xqwU+xpI4|i)`SZc#*x;O@tQL z{2c{4{1$0)Sb2GcdAV>`xZ7Hk;2uZzX_{I~7KNt!OJZu~oKiC=To_^shdorKGMV$5 zE(&qh#0Ex42o3Hg1|Utyg%F@;O7u@eX$*Fb0Qxjd++d3&rD-w^zX>B-SZtc3wigJV z5+ozNKWYq)!klRJ1kA@Qhb$x8JTJ1=xrq+^H0O2tOVD(_9P57i&CJ1zSJ93%&vFmh zPsVU=iCBJUGOfr`=55tDrHg7_X(QL<0LXzK!22{6me)w!Fm8}%aRH^NKyJ16EWR{} z?sE^t>I6)RxULQ(Kp%j`^tLeSlQi?n%hAbMj2Lwqk}j0m9FMy+RCmY; zO6K1BH}^Ug8-(T1huo&T;KTAk+l=4~RFm&%0rS1b7}9cQZyyQSguk=m)(3whJkaEK zd+R(0j*?Hi2Ijz3V6KvNDYq$jqhSZ+hGSs;8U5i2lo{Yovvqfd@Rrr zb62;v!ZtU*stu<-zwooMitdLP9DPB(f5@$FCiV*vA|Qc;hHrA~pVhXaHeoiN+i@1_6KY0}^bE1?yelvKUf zlKJ;D_Pnsz|5v^kY|eIGGPho(z5cPQ9B_Gk=nQ>I>x}$JUz8!AouqoF$s=?IGfvWSDLm{%d|z7RY%} z6+0ij=vCJ;bf+;iJ2RpxuPzt2kjB#0vz=L4iI`6!_-jEk3o_+%Fcb(8;9<#aF2?0s zv6hX9m$p#@jz+n{PMb}8S9OyvG5^~e3DMhj_u2A`?hFXOuJn|?ny`ErzS;8k)BtQX zlWh#`-x?6Kg1jrLB=rLbE(Oig7_Og5+q_i)nv)9KmwtkNyrH0Gmb}hZd4Mc@AA8T( zzrTZiBd5m_@F{2M0?c3lFkq!WMeJ0QKXtQeh^<<0^Giq;3wC^%$=~l&+B$~tzD6F5 z(RoMbnW=+Wo{c=yuSWUK2KZ(_8bu*3F%lozOnU4+l28A1?H94@bAP-~+r34!@9$zRX;uA+W+2>F`=Xg@k!t8mt$; z7>D+<#0I@s0LE($7q5h}AZ6nQT2;AS&FC~rN`J~r#k_4f=-2dAH1vXAqo8rLaC7TY zBm`0u<--U7OADz{S5v@1y|r=(Cdw!nV#^0~Ghnl^3cy`pqMwja)5VID$sQ=G)T?zH zWFOBYkLyWLd4vn=`NB%zAPnX74=J?W2vP9WvOhY{>B{#pj4_uJ+7Rk?dlwg|{Ly-a zR?uPj$^OM`CL>n6%^F{@G`sZ|Lkts1Zk{8WroH+Rfo|VoFK(3snUkAKP;@!*`uc{6 zr6sz8f&wouZ_mukkH4^%5ZAbx0f#!njys=O5wZnsdH>KL>1O?5A4Ad*4wiU68!W;M z0d(H);%LITVhQU5Ma&;c66)CBzAZvh)q?8k@QNl>umNdH9}6=OvcLAdrj6N6iOKl% z1nmns%QC1{Y^o232n?R)W)DkmglRyHHL-Glf^k)V3X z{IeB&0=1!va* zvE!Mcpu%tvWUPEL-GP>rA{Ddn3Dy>`8z#0j3TK0Np;C_&SX4>gaQ2#Oh7TZp5k2CE72BdC@QH&; zdMNA=xg#Y&MCkj&M=(@H!Rn3_918*jQ{ow4gWa`T%>?eV$3o$-Df}PKccdzwh^a_idTVMyTe)yh1e!?g?YSsB_~I*Qy#^ zUpTFGdi%^s^At827T1NDq&c5k?MQnKYgiL_q5P$!)LK+R0)gm+zmG~=K>;BnLl?67 z4gHbK%JCYV}z3A_4%v!*+?CcZ=QNO_NJMVid9OX@)!0@}3 zha>w{nVj&SY=82}Whu%2WalxW{g_h4{hoJA?o{IE6DLniN1RvJ?pb9LaiCbV)?B?k z6dR50mdGhTr2^g(d7pWC98~U(&v`$B@%<2RoFjp(;cbP8h|8uo7QpXa%)mQOGvmMk zZ>&_gd8YZLHK`oEUq|N`lH`RqC+Ei)+q#sKWA>g3cYm+PQkP!>{@?3Kbv3?obagu& z;0h8dQ(IRv@u9evFnz`($OpM)`C3%(b-(VjJdP;)Q=TX_jqId7@!n%t?A6v=vV{CC z?fd4srVeFHHa6D7Ns_ayAWBVM=j@3A({V{%mqqO!o>|PEFWN9}G%B=AK_{$)&IC8Ntwl6c#e!E~ zCrxG)*H{zsnLfKDj!^TdwGPHemqKg9&-)yzKQk$C4@(ulDI2=Q0HzAC_-YtdQW}`( z#>D9S@|YODvuu$h-4a*{X2nI17H)PYyP+im192&Gan=5hY6)3Fv&V!)jref2JhF3R zf)!DV3ILMx>Cirk!9ME!wQ_I1I$rF9B#N-&iK~7{X^EnARS(sO4u7k9%d2K=dk0fV zr(78`IjlREPWHIg@<7`;&|Lc$l`KnL>z((yfXB;DX_ngVC;fMx^Cxf6{?@L@xi9sS z=weaeHMZ!#@1WS)fQguo>s1Y-Fjq)YWi_3QhjjkcmAOH;Puys`ik>>SVIFn|Dk}pg zy5f#H>-ZAm^y=P&b7wLZ1-ga3Ald6(UR=a=bhDe??=UmIr>3U6UCs-3EIi^suz&pv z`bETaZwL6Yviwl${d~CJ>u@9j<0J9oRTLlc#tAE7l&-~UOY-{l?ln0{ZV@ddP#LKK zXN?+Mo`ts68Ff3)tnlsgEP{lopqVX-!V>X8Z46YzjB^45%BMKrE&GiE z=iW$LSuLsQ%2bwlsw(;5A!g22ia4k#MO#THt)qmr43pLwKzPFrd68nlt!Zv;l=lMg zG-^a}1>2sE%3>kv8z|(Tm#w;JsJ3e^RH)(L9#Znrkjcc6_8r*k)i{l)!G=x-d5W?M z`a*9X?4$E22eg3T`WE`p(I&Hd zZbg33F^6VuMHMQ7vZL2THVQgXrll3_zGZ)6+{4{%ct#ui=Hn1CG<11MiMWyksjjZB zQ;laHcLSSQ%4a#!G9umSnFah)bXzM(2?nDQ=}|^n@9H4ZSK(}@yZgY>N~ZaLz`R07 zXlw=BBLc$S?g&Q;EPBq6J6qQ1k#5IwdZx*Bj{d(im^V4a%B3<|M9!45x$P%C^ zX$c9>Noylb&1~mid4*$a`sx{-op`>B5>-c@3GGQouX~|k595D5V3$C9+wtkzyuHfY z0?SyPXYMp}V}=6i1w|o+opeE^%((r=(9#QH{zWhK_&5%iz>G+$hDtk=%VRhR{_ZO{ z6bR)MI2uI)Y1Yl>6v5`Rjx3>N7@F*SG2TC861`P~5g2E8>0>k-S?%ILC8fJW#^peV z@@=ftH{K%zT(+WEuMyfT3Qsp&hc(5LH`v4Enh_%!v>P7@fP1Ft2;jepO}hd^yI}T7 zTNq)7ChJX3*b(rmdTRSLwv?57Vt_^)_5hq$0rsyNrK%Qa&|Pp!5A(`C~sW z_00fpmVP!tHwD~qqo{_)O}36&-RibAjugI>6?TQH2hNo$AI#{<8`Gk)Tkv7jZO3Hb zb_jC(Lt=GIWIQyk0}UNM`_^Q$Ky-9MAZ}emG_TPpW#x?8=D95KYblAluCDh21_3hc zcw-_3<&XjcFSoj)eypX+;j{ILrU`=#KMQ|#IpbRIRH8dw#9i<7CVX(vr#9%>&`Y%< zPgZSz4IzIw!8{fI$L4z)JpHzYUlKDUe*7k&!R_`VPC)sX=9;SL#giF%qg}#&BR?sQ zyluq2m1#5O3}XLO@*=-ITuB7+T)7>6&faJbv81{i-masZvI9t$3;g=eEWvi z_3?HYZI8DEN#m4ucW*2iqsZYK=Lom6*mIiTaahMNDda2QygbC1(hpa^pWnY1e!c3i zRhcD`*2Ux2#ru}g%MxDb|N6*wvEE9xx;H(qKjcn0{SIkC>Un#4kn%c)ED~e(`5>%e zbV^w4K~oD08uo()!3&Dk+c>+yzrbZzs!J%f27XBH;XDp;j^Yb$3MyxOE74p z;0nZ(e##@GsL*Q?Ca2zX_4%$&{!Y?JU{LLnG>7wUV9^SdXC6r{;S~V|!@8O8%k|Nx z{1;$9qz6?bp0a2Fpi?a6{@_QzP$fc?q4}QHePb3*M^8Ao}pW*78$?Cq7eTq(H z@&1xjSmE-~FT07hCdq`R7(KrAWtlpXm$(|LXE1ufa>n!=-_GVwd{xVsEk16a8%+SsAdk zatb*lKa`O0MJ^*vQ#CY*`C0Z&T|J(GwUptDsyC&4nY@ajUhK~&RP_aooGNiR&#+{+ zVhjtaH7@wAq9pkhOSWy!ZOXCdCBc@uHW&?VDLC@$t`z~1ri7-b(u{$emhb9ed4H&A z3Tbv9BIB1DyqO7E^rJt9R~m{yjgS$YA!y{}2HQIaAFO!UTAmS%dw<@d=+%-q!d{zL z?ji}B*&U`XON=fd2^8_DAD{@*^VafIMuu^pWUjLdvXDn5f09~yac0r)fEk4nuR6T1 zx6aN!(9;t^6^Onk%KuE72&+ymq2!T! z<)!7{%HVu`4av00xU5`Ithq}{?4X-6Wf)^5Po`r5l|_!ApRu3ZpsL=ZLj-y@r=@mp z*@d@xZhSjfsQ9q2Csd7@I92yca=*CUp@h^bKG$4K&R;<9iYpYS!L3-piI*n#NRl@A zWtKY{;ZS3NJEASO@d5x~PL|iysvu$cj2R3SE9xHf<$JbeaTh^!P0|2z*;h|I2`gKQ z26nZ9;Zb*?+$P|c0?$`Lmv-YWeXtKP*PZUuQ3Vp54zC47pNo{?%Krw6~uTQQT>>#kKbv~75DGcyCGF;5_H7)w{C#VOFijex_ zNBlHWBo&QZUung-zcAWlq@-=^?Dc>1EEHVc`gEQIyXl4A_zSqIug7r^0a3t0+1xz^ zn%LbRux=Go7Y;M5LM@*0ZXs?4l77Z9^4zY;?ixYs)48KwVx(REsUp6_2b?FJ-%Vom zo!^m!R~=E5_k5c_&0e1hO=Lr4jFbgebV*gT^n(BF=;I$)QHt`$Cs2xLfwnPKeZIiLg2K{1LbC9?q%%YT9vMg(BQCx!cYZ zp#E8$n%CO!L56qtH_ZcR?}+*hJyG)CFR{Z&)z2H=LZP1fe^<{{I-8F`QMZJ`&yQSR z?^5Z0?}1`OiOdxkE@lw1!oA1uU1HWcsc6XVvAW+AU#`mk54zd&@PGC81YCD{uh-e{ zEbBgv{%?=qK(*Jv2LI(tO)ZU?o$}@ofN%qR-y@sH&M2=#iX9 z3SXrKTxF@UQ^UzMrH^T*lgTyP)NO|UB{4B`+pt(z6w$~hvS%qm9?7}ieZMBF^#d@AghUPR@}Bi_M`?T+(ev)QS$;v2 zuaZ~Phu%dIdv<*O>n=GFVFDTzFNJ)eKIV(j3I;Z0rycjGLl;gP?8?WaeN^euB96P8kv7z z=k*)>>YY0L1#!8QVMI~FM5*i_NJlP!u1x-VTAyC0tE8<$_9ZAeUzmGdGp8{Z$)FPB z@YH&6`3-Y>Txe?b=Rvrp7ob^W8@) zYgeOqSoTRY31g%cqKUg7Qq(W1+4ztFb)%fm$ z71yxmHm1Y1LW(DcAeA>#qsEmZdBN+8#UyeaWI=tj(! zYf%Xak&B3k{3oX=5qcg&<@#E6n2w`-N!Azrz{vfJG<7n|XoS^j4Zhw-aEZ zkks2dj=|&yoPIU8whj%O>rO8xYG_2ysVbu0sxJFU`1!MYj*}@WP!xEf+w|f&LAkx$ zZ$uS~&G8oUJ2{dX@rPLnhM`tQr$!hr1VyyHFb)4GXg~q;Ulb*q=(7ysXDCp2KK}dO z^Ubm|r+D$Pi|8YE-h`?zwu%GKrjhOsjRZHINduN2e*#oT02x~1VD26lqvel#ze=^~X`m?gp7mQy8;(H66O$g$*Tu^es+eAw2y z8m<06V!O@U|DC+qkwyr--OMUWS?_PYo_Y2$d)2u-m}AC|4QAE9ziz&>1|98jdoGWr z3=E!L1ynIRK?M)FN&L}V5}QWvPm43cxVs+9b}7Oj{?G=NlX^cdE64a%tKFs+3_yFw zWq^+83F8=JdPOGN?4w;HeB%o_5F2 z-<>~F&4y%=WR+gAd_mVCHkx2LSw(kr{<_gsO zOBvP`@C|0Gx@|ZNj$(H619x{pCkk<-D@o|DKHTLc^C?LoCX=CNM$-p0>Fi)P1E#$R9oKR5G=yJ8 zq4KW&YTayYMCLqAMsEQr?1rt^cxhe~^i84z!tZ5WL&qb{&%6!SeUSb?4Uct?{u^{z z=OA_$`F{^}5MfOC{UP4%uB@A8zQ+LXdF}+!uAS96qeOiJ4$)l)<@xi!pj5B7tK051 zp^?b}{6#4bfEg4b>-|PP1a=rJ>e$@3Kk?g}+*O|Y6I^*PN+}U8!-eu?FSbs$!ct_1?-m^2=y4cQ?Jr_ zss=1)niL_miPvPBY5}YsQ(X>Zi@z33!ATg<{1$2(JP)VUXyH{Iy&5O5<_yotW+Mf% z$2qn|MToD**3^apoEXT*{M`|^xZU|=3qUT~fJKja-d_q;jkv#HAF)%#QQ)pZxslTL zd#Zn>IGjboQ`BVWB6~pvD*AJBWxo0aksPYBKVzijI}rGaIgFLIYZg9Gy)?39CuedN z&GeDi;;XppP#!ZW9A(y$S7OW`T31OZ`*I<*tvXkA!-J6pC9RJYz&_5mrlO8UqF9(* zBUxtD5--Y*cY~%sK3N^dky~AK+28r-)2`?8IFl1p@CSPsFPGWZcDR3! zNDeR+pab;M#THlt?bd@-(A-Q_Vhz}MpewX@eXPbqfti4-7%s?ILYJ?v2?*Mk< zZck*-$t(#4CD=cAfWF>avS0BTL0J=)ZXVpZrGL5Ov`w%6m;+rfe@Y$#d!sC6KJnqEotF?X|iZfhm3 zqC<{aV>5PE0pF~BB=^ZkhrShKx+45 zT4JddM6_VP^poEtYU}v;1KM2@HwV$h+*ltej|ZkHhOwtITT4qTB@GP%G!(l(_|^AU zc5)=cQ@eJ(4`N?`-}d=AmK~Yi*f-67vRSL%u?Z4K%Ihs2D-nIUvuhf=HUY0k!N#< zMi<&dr;=}Yf2C8OMB$ph<&aQ>iXovq#DT(`(tJvq@GaVqCWA1h=*TEW5 z!+|OPDwX`F?kG}yLuF2$#C3&Tgib*!xoMhsOE5_VxxwLz;Fr-J{R*jyTqi`umFiL} zG(~tpYtm(j^(D-*!6qu2#&E`{k*|D`jak{BMWuxO`OlPmXrl!%&F{HL6}kLxUwCdQN%B)jZlxi+IrW z!5S$a*Nf>=HjCv0U!vTB_-H8u8I=p!q#T?ZR2OcL^THo_mO-?Gy=Z1qZUK`5-E%u; z&pxC3>AaA5#vh|i*Czbr^tr>@EaJEXZ#qnXpi2jrwfyVEBi~JLt^coip&fC*5@!0? zb|Syff0?_vW83kM;^U^WBRNU^od2aE44EYIt8+pzRYDT#|NStXfAUu3>5zJwFv9vk zWs)4}>9l#1@R_fJbMbkfEs!yG*LiXc&^!>73UT2(O6PUjS+2J-?KD>6H|K)4J&Wk) z1Ettvo{p8W%yBi3n(bZhI8RbjQ$LJ51yHX*W!)5lSUSs5Prrlh!(O}pCnEU2#_FNm zUac3t^o{7PRg{+fPcZ7^TVanmCsa!<4;buRYpK56ErtQw=VcQGlMQoRVIN;_%CC}z zNE!tQ;n|M_w2IpJ#@~-V`NFoOy6P=G?*aylipD=k55*cVe-MfvFGj#ugp-_U+r^d( zVEMB%8$**X1jzu9yYa z!U3Y4UIE#>M|^bp3XVpO_VKHM`?pD%t9uY8JF}UTg2k_I=O!cFR{Xx*$B2t|GupJT zUG`NpW)!Pg>`C4J0Q!@_DmDO?3_Njmb|jeZNVi7uv6mtN?|Dwvx)24M90n&UaUC{0VD)&b`tKCUYC^77d0YZI88&MzsOOhMGc)9`^S)|! zdE+%XXvbAT7N=|VyFRp+jCZa!Lv7s-OQVK^t2~hjje(0iPgO?KMQTJPaw>$aV-9)M4IM_vgEX5CDgLX7;;y(G20xTOifd1EnO_ z=U4%{nUeSjm!GlV1Oo3J_C%l*i!V<-5lH{@pB-gt+TYtQaCI}dQeKl8W9ED2G?b#u z1XA9q3~W&601Gq{*c<1#Okqk}FTAMDwc)dRUSlb#fdj@N#IaXQne3?@Y8ugxNE#%C zUQ;95o2zy6@F`jI1L`PbV~==aPzg!0BnDwL_(}f*nCA>G(LewQbcGGc$ftZHz)FRl2c~^pv8} z8o#H7+}+)6y#?R^TCZ*Rt@aIsNSa21$;D8Ww`*6DO?oWxhlg7ORe4vs?V$2AaJ&*d znORk$EUD<^x4x>*_r5$oa(-8Q92~T*qoWVXSbvg+VQ1)yhdo(SuH?xP-)>1Zn=7#oRQlOkC})e6nt8C zypmE_B{4&L6cZ(0{k6F^aBB=RHeP7yW(Yd9mj?WcMtEOmug%=**FA9W`>lgti@5_fzCKzeEk{Uf=fMy z-5{njxin)!XK@KXoNjQcnEwEjCH2b0JnJ`2Y^f>$N`msWep$1i4_mn`*<(n+j*=uy zn)WE2LcJ0*-0V4a;xnAN5DQFUc)K=_CUy?@oaez0nmiLVo^BEGQM?%j{@W)z@G?Yf ze7{aIJB=ZGAIRvP=c<98K++hkht379zo!z`KX(FrNH;NBmRq&Pj8 zEasOGT=_@-{z- z=H*v@xNS^iU}h8(HzaheoB5TQDld=22yYUbmXe(ryYs@Lu7RJ|+6C9?5YsZX83rLj zb^#;#UR|y9p}SR2*MB?U7SzFw(@AZ~DyY(b?2Po`ODb;SKdFNmO162%mHU${i~Gkr z;kZk-Zfd;31U95lObgW=afzU`;cFQf8VMu4+3qfW=zGrm-y-L={pf$^iKK&ox@x%0 z6UNc3S~jk`szf6_?F}zr^JN?-fXf%6#Dlr{ve^Bm(RS;)%Omo9!gZ9?*Y%$-1sW)K z8xIE)80LU3`L!^TeLLF(PUY+Ly?V|r|Gz=A_ZjRj0MuGVSdpc_ejPAt9d+GA4UdKP zw%F9^$Q;U0VFc!w5OOBXg#y6*l3zc`F|d?pUvVsEO;~)Db8=*O@u1a?+s1zKo>ln$ z!=iOwC#t2QBWUDQ?o^a_VweX}J^q$CFs`ePqG@>1YUaU+r+adF&ulm=eOAsrYgL)& z(ns0-eI!}2D?6*ZyC`kfCBA{%FuTbD&|_K=4?ds;4S*i=Tzx;_3}lR6nW zW|&WA=f9B4owjxl$niY-E$xl+iP`{+M4HXj*2*U-uJyZ(EKmLj#Gl`PFnj0a##C&z zTeUo~tX`wggEnB88GJt2AE13sbd0q94WneXP%NGd=I&Hi=TfsB{rtN0kbUn&rCyEM zsO1bDY~Zq>_6}u-lC^7A@MTjBq}Jk9z}~Q#P>%#5zR6)t?3qXY4n)>B>qXJn8oQF@ zL*NvT=WxDO7dvxnwo>m;eRsMR{o1}%??r}rUU#m+}lAZ5(4+l2XEH4&~fgI0U|L~^NjEaD= zMmd{G>gQ|iZ+dJZe_WShWz-;YAX#K6U)tt_HH}LPWDdc+h@O&}nuI@pdB?qDA#h_n}wMHIqwVO5^izrQtm;%6KeRI^ChwCI;R(mFU78hUF&cvkwuq*5sD14^tIT zC^p<(&&B5mbq?z0&aZ^69G`FTbH}z~yD{GSTC8FeNY>`7J2gMgAoN{_A``>tYH$xbS0&c$JC+qpeq`5pFfCz8)K6b$rpEjy=BA2p0ok zUkWWKHA~4`&ybua?S6mX!eo3Uv8K5>II)2JAKgBY9dzI}mgib{G>hP+w#fB;^#t+4unqti<>_}HMrvWzg?-Lh zPRT6_cIvpK+c1B49^}0k1nl+#%kvrfuL;6@)RbVMOgq%N^Z6^rSNZKVCS$VFh-N%}JPG(AK21{QbAUbilzz#(&mbivS=I7 zS#qH4Vgog^6y0U9#U3wvkHf zeE})HLejtJF&V%grw^LR?s9N6hKCgj+n?wgTb+wveecZYJt4Vhd+425CTdDpX?sFj zZhh>ZriPiw3UR($+sEYa7A|ouUKfSOLwEcYZvJHk2#>x^YwCat2_Ii29`UTS-M+0f;R+$0+?0E2o z%F?XXCFP83?Dgt4+RQukm4Gp_UnICnI^9pnp^>suMxJE4X~&`WPB_AWt{~1|@tLvq z;XU6jJq#TQf1AxiN#{V}S<(A6v(w!F(=1nk0g6kdH z(co<7EEBJ|qF8;hQZ|8(8Uc0C$hhWZ;(|K*Prg@mL+8neHPG1Y^8a}rLJxfuH60)2 zE24=JD*Kx_5A7T=*=)fZeQ#7Z;+KEE0C{`Vi(a~?l;e)pHyUid#K_%l$<9)HTrU#f z_2?iIvSm?_QvCM9vzGZI+wuWIJb=1tJZeG}byE9k(YsC6XtkK(?}BUG_VWHRP`bgX(TE24Tb#^lSh(SeV$0XXcMZjj#v zy}B)&O+aZwk}Pi`3M}81`2pAeo%LFlZUt}-xn?FP$?5K_HM8j!5({`EFHUJ@d?Tb^ zD!BfgvX}PLjxshmGo-`NRb(e6@;RFf0(uQ-tyMVCTi^j+(;nPz_SDVL!g!6TC4WQe zrH=#PV)Jov%Y{~dRg4~rq>eziuwdI-Uu{Ok?uh90@N^_vg=XWeK}}p{*H7F_btaXv z7TzT2&;c<2dYy|O5Zr8E@KjKlUXsz^Kk9R`)MldJFb<ZhPm$^UdyL|O^zS;1T$XBCAcp){-HS+}mpwwzpYA%# ztlA*Fz0VG+78A}bHuWWcl80gUec$+d%N%leYK!0I;SG~NhuqBC5e8LiPA*+1e?|)0 zBrSCP0FxBiynlPLjj{n~jre`t+2Slf$_wo|F8|Ck@Vg;ox@%Y$UpqOL^dv&8obODr zO0hz~zRm~wSWn0T2q*w@d!p@BWF*1q*+qFC^tBU7TEv&2#cg}J=wCtj4 zF0`wZ;H2aGHa0P4@syM^h92sDjTF1PM}LFPh!<$(^H<+^*b6eRkk9^4=(c)z($Y^C zR~{jOL0E8b%V^6+d!7D5TSxoS&uiO9M@Uvy$Stk>vrWjS_XJnB*F^#yn+6r9$494# zyjY%;P|I9=doum7-oNqLs5^!IGsbV9K=*t8S?Zhcu@e(D4Nc*xg@`N_6_OhxgVO(c zr&FKMdS)z`+1XgWujF_Lzm_-zeuH7euG$c%@~e$fM$z||*g7CXjSJ#0Xq{1~+eos( z6k@zZO+!969@ZVtO1RGy28!h3T%>nmzk!G-`TRKG`U(4-Cg2{%4bZcfqqc}hF}tA- zY^3X2Xvlfr(Da=>Q#Kb6)&z|`@R5_H*lOn_3=KzeRoq0Oq|yQ)3{S;s8@!&!N#EJJ;O}495v+PVCi7(kOD(^%R((B8 z==}r6QYAp=+jM!#>@WT!fe__Gor}s;)d2qqjWs*$khopk{ZS zJp}JaVA0oK2q>fQ#sP*`Y0WQRg;zHtCl;jtlTKGOU?V;*!`+SiWlu>=PLHJWF-%S- z$m=R1r>Jz_8RAH0yFvXm2KjJZ2XnGL>Mz@KCOO3%zlSWin^rav_3=XVi<cH=Mq+t|j2)%FJ^1uvgaqt9M9L#9UHbP!O9C9Wg|S zF32&JC#D?{$!-ZaREXXlP_MBW=_(Flu%CqABO;juL;7%z8n>=@uYqLg`mG&`;rwdi z^r|wNcOswSf-9g!0-p|RbC9y?MC4CKdkM8@Gu|Lw=`$8`&y0gk=B2NcsaoUv8XtWs z-$5(nQRuU;hF~9^Q8v-o?cDWqhvEqc^%rmMD;ub@*gE8Ez=pY5e6+$$(aS?|+AjF3 zN2a!`J1vOSL3z&mQa{q=t4OlkodsCcW8;rNLid-`k=r3L?Kh|6M^J|8M$waALbDv0 znxnNFP2^4Enr~S$8}ED`Jop6dA3RQ67t>a}Qe|$tdA&QX2CdUfpb>w4#19xsCz1P%@kYZXh+`k`70oLMD@*{8pcZhMRl|M2bF$XNI*P2cxCEpvLisjQ*^i4i9rwhxl)Jrh_@o-|X>m z&8P|;6h`>B&UMTkwRoi{b zfZDh7_!$ zm;fyy(v7bEEq1TB1ls>zu?9%!K|S0d|VS7pyEu-(wVdXgj+s zcx`$a1@m3sKra;P#;v_`@;rZ^+z1SkOIqK5ZTTGvM}_)JOp|Wug3Fj1c4UQ|4xE~G zbVOdxTwHZFl3QM;rlI9N!5=Zqe=>GpKx_V;11?~2+sP~hGRAPelB4LWNDXZbpotUjMuZJc|esLfKRWZ)`-T~XsW-L9RR;rc3&!|TXCwumMR zwiH(zL|$7vIBfQOr06d7g)tTgU7hBg%KdBB=DUi6&fB+bAC#MmD-(N`=mbri0lx0g zUp`LyBgKhaA-=@FgMr&a0XMHBh%aZr7g&w%`*qPDz&!W|gY%x}%~wFjeWz%2oZk*` zn_Bc;`C=CMF7c1(vhkiT8h-ye<$LMKA3L$>*|nSb(CgVn zCi;jc8Vrpb=CY1NHt%FKuRE3XY@|w5%AqEZvC~t(LzFW4i)W(I{8s`c%>M#e$oh}x z+VP6OBsBvuA6^r`t4Zh(lDPxwQJ?#ch=`(kcg`bS(uN3Z+Vkv}st zxvZ%K7cHPL*<0fCrZ~@-%R~-@aq4IlwtpDVB)dz}FkKw}cJiw=TR=CI9uqjgB{k&I zQiMr>snb3i6K;t$_C}ZDr^x=9JNN6ERO$fZHNUfd6^!l-s*j4X7tNo88K+N9J})e2I&b&!XNYu$s}*b3c60<)eR>pj zD|Xq>^JC7U|Jxb1Xf%D3@x7%rkiE|-+z=hWiP$ov6sv!S_(0j7dKi2H)f=>v7@kGy0f`nM)&9ggf~ZPL53Gg4V2LLt$W_rp`F#D zLm2JkD&FdLm#BzN=w~(`@1UQULGDLB4+ZdB&EBf-{i4Y7sEs5_ex4%+!KwiDwOZv6 zyv+_}6w2Lm)W9ZKy47IXyY>6dt+q{=uj}P|If)r;W*ZG>{KBe zPkR332|R6s;$D16h~7yBaAcL<8Xi1XojT|>A#x= zD<||1g-gobWT#Af4MP?hpaWN;QT>_oM9^bPl4WulHQwi`Hsk# zgvybE&~niY0`y>OzIV=SFolPA`a@7Zv3@nqX(C);^TUDlrZe+5AkGH%FYWLRg2OrL zIb-)hAZ-(d!Fc6#s26+WR>QEiP-@b61Qx1vAJZC{r;+ddABvF+Pd3R8nq(XA+rl?cW z@$W3;VWbNF;cDXbVW-~rGR*4Eeg>Si5;iH)ikBVe(>&LHi8!5HaDJ^U6h?o4+JBZu z^|BDJyv>{Kg_P~p*+qF`|0Q>7o$Gi8-UkIV6O#BZ{uwiU9} zrh?_$aaq#Ctr^5+A0<{RKtu{e&`@IgdCan;rq8$-`0Y&MgU1gK3f9ENWV8E7rV|03 zsP#hkB`wW}kbQRsUO`oh+>?@~CD%Fu6+2MgioKL~ChPzKG?%?XtTGqVqu8%|PjD8x zafE_>I8z%s`a6jM0Ch1h7Z*TzxdI=^hXAZp{qNqC&}xBjKiyR>;Cynsyn2HWXV2Er z5N>_d=_A~(FEesHXgl|uknU+dS&~iRnf9$eX_V<_Z(@`_IPWQf)$Queqd4I?`B!pH z@)R%8l{frbQ)5#O^Llu1uwx>YzfPAy^iSv88PXKxl-6m`_Dv)99RK2_$IRWP-I_<$ zR^_jUaa%!#4h=o=a}TqoW23jI&53ud;nnj0-}C=GUx9Tv`eA0x*q_g~EzZj{7K2>xaNT28mQ7X5*cHZ7e%Ouek&1tVwS z#o5tFy2?@ z>U`{JrP6;|j#Auzm9J7xm+;tnqLdcXDF`=HT9NS4$Z5X@1ed=(2^;v{OUv8}YicGX-utQ{pf5iGV5yHy&F~ zM1A&PVkr_ihFnka+@1-65;l<;%`Y@%0VgX2Zr-bX~9)Yg2A@@ff$QDx)b7J26{R_k#w*mr0N|@K1Bro;@h+; zD-CUJl2@l>N_P0NhfB<)T$Z-F@Fc%PR<_+hJat&Zz(@A6q_97^%BXZ1(`OxmX}A#D zh0sfiy^!N}>K)T0WGUHI|M$TI?tR_hbzx!Hu2-!pV-)fNEDTb-$8{O}0= zw0n2T%+y^>2$zN_h5^_8Hgf&(VLpf*LR4kcHxNn5(zed-_lA~Yt85(LhcfG0)w*vp z_9@oP-UEgi3?_KVwEARh>x~=59NMy*l14FjGgdMJzqUI0Yc${i4l{*Cqh){G+3h(nr}jm;5r0;g=Uqh&AS2X zDK2GVmyd@&arWL_ye|h4D;&UacM7-H&AN>S3V)o4$c6`$%u8SpG1; z7n=jfD^3Sw{k&gr^BU@JQx3#7@;+fMso)E4OZ%2E?BxI6wf=D8Q2 zA7>YudM~)^^-q|%N{Q{PD(3!KcrJEXrl}eaw)ACl-OhD z@!(7NS0ILaeVv0-qk>gX&<{3Lqd_&}gNy%19+OLnuj$&@lxx-j9H*d6f%~M+=fG#v z_>-K0bJ@9OA;@3D-K(huRhgo^hf6BatEoiZ27F0+BBB~1OmAD8erl>3S<-;?JZk4s zPzE40!sg~dF8fNjUsF}TWbD>r;$Z&=Y}S7{^Ud$*cXi3sX7^Qjcc_uo!^Px_n%~=X z_CRv?i*IhR6M*1H`p-C-)kjWJ;G-ir49&rapc{OrZLBFtQ0SUwr)YqmOPcY6bL zKiyV-^khEiB)fQhp40r;L1EtoJo@hnk8I?*ONiw=4O?S)a|J^{0Rx%2y^urh@oCMs zcHXaQ6BJrTC_MY-y0sf{z#2-Ge!mYh<}ni_58&LG?pAH!KMVSI&v2Y_Di()ie8rRj zy1sSn99$DX6JPgf9m?>;CrKB%t~@yTmn64Otz2T!&uR!JB@-an9zZiJKXNDhr5D z11Lb|UX{7Em1i@qvOE2BqIv&u^tJ8YskX*m#G`!^eBd;dxtXlLT=&WL^^GV?V&Q6h z?Rqj3B53gJaevtRX*_1)R;ZJ-f%Y%$*!sT@e(2DY4AiE&g(hBzl57P$%Lz&> zfIn2iHLKq>t8ONq0ebn~m6CDUyAVIxWV?l3PO2T+?K(i(L&5` zz~D|Ssjm7bn0Q3G5wxgJEzT|_R#B;jCa$Pm5teNE&jxO{awc}aBcr?SBouBy!(sq( zeVJ7fP}=-+Vpl$v(md%_oe+G5tu;zo%49QZV_(4((b$FbDIPY)`=Tt&k1l2Yizwa| zrxwR{eeiu@ow{7`QAf0E_E*D5Hw3z{iwA`W397mjs64V2crdf*inu}BSB^OThxbbk$5l!!NHbTmW7iQ8r z-&^`%ZzW>Zl)w!3y@p)ZgfBFbB3*mIhW-kS#BJFp5=#%+2?vjVdks;R&_1_~0{^z3YSZ!iAf zU>z~VxUpXz^6M*wY@r@IKmU)?RFgz{FH1-C`fIb4Q84DGxxSs2o4AoTeGwB36gx*_ z`H-H_k~t*ovu_i+^6-7H@Ce=LXye$kspH4-Z(T}mcqNv))6+N-Q~*t-ts%fGRlrkm z0QtH1q~K*2@JZZn3tseR_S=^7HhsWx@x=!45vSuhVk2tvWvx2DtPF+F46!0fV2R}l zpp8+p8qH2@=Ui8TBIqF!sr>#_y_NlT%+_yTD&;GqK9Q;UG1>UZ@FNin%=?X;q_}$W zmL_~_<`LhFPHFp}8KsW{0-KhZRBMT^29K9EcMipFxD=V_tgJ(YUVchzj>&ILv4jmx zLsKii#qxxMWvPBjS0i(W>yq=k;7^_{2eXO35%}FjW%pZ&yd%C0CIfn{Qi1oi^p`p~ zAaKB0Wbp+eobEJH_DUq1u;S1eVeR>mFk~j@qU|cD1sgXo7=%LwdXJynnYQvYS^Q1y zWzQS8{phhXI{71OV%`YX|5B&abEMVdyf^xhhE( z)2IG=i~S{4)yPf_cRm%no;OnXJB`KC(@u>>)Q{)p)`wS2Cxj%gA_;n|OM2hFTg6f& zx1svVm(@O-6L@5l^e8RR@9XDL(A(9N7ZA29m{)P8YPsd~{pg>!B(LP&_39+Cup}E{ zd?;U8IEGE=ilOV_AN9isG!3+tKC35QStOP|+Y4V=^pPRU z?}YhbhDZeZzl~2a*jyz0+)P(*P36MZ=7w%f<|@_5(Nd7=~wWlvSEF&3bHkw7cjvu0!7hFx@&1h<$-2@Wuvh z0KWAYJ)sjR==nW83a`Eq3-d5|n#_CT2>qtbt&<;m1s0M+b(Z1MYP?r;Rz8H+& zozG=&dOF&79_|aW>h=EZ3(pkrbW9?J=Q#N?{D{AF1ahlL4;$u5i-EYxmGFZ8?3u0n^I}aQQ*zC!f zk`_{>aDAcujd`}=F`t;Fb%tGN+ah)BVvR8lzJYkrZL!yGK-^+PG@*h=KWA9rqn z3AbGIm*Mp-7lzm`Ob>cpIJ#*jg-2AHN;}_qG)DdU>ooU2Cb_Fg3;ckTnb?(t^_vIP z!^{X2REq019bL??wSFpxB9Z0BL8wU_v2+o)b--1M`oIy zpw+}>Itb3r(e%3!28@%~c7{aiMe;L>{}KCw{vbLVg?WixH5p~M%)A@l>}dyJB<(R) z!tifCEFya|=uzzs#fUao!^- zL#`Gdl9HL(vo`bjV8OD+*@u)XDqovlIBLI<9L7-h_uGKn*hGw}F?)>cU+Qyc{D}WS z)RhuNlILX5f+Suz(h3Jpns`w;BG+t4N*X{jEsI2ls9$1oBF4l~1UZE05YsZiWLl_E z>?2DWPz{`p!;!#c&=8iJdxW__-cL$A!3f3&sC$QVR5&ec3 z#iJj)#q))D(K-})ywX^ldD6C=xqD12!-v(wRF?8xVVawyup@nNVm~Vw&9=dbV|7p& z$*!mZsV=eeA~Q^f*>zX)el!nZ+r|9IOQ!`f4R;Z$W|--y4eMtnn8ly6TAx~rrwc*I z(I+BL_4$t2`&0#5gzG$*%l7a8s?1EDZN{;QJkkX0G8^?4cfVNpJu$~^H3I^_@dtNb zodEpyQ#-x(mi@ilhTar??7^@?U679eJPvfX+^#y1Xjg|>HY(cqotB5ZZ}M299T2eE z2~<82{?RElu;ku=5_kT)Rh{8T!prs@N2pPm<~BZ$UNY|gVeGAf;sCpDP2AmG6Ch{< z!QF#HaHsJ=aEIXTA-D&J;7&IV!5epnAdR~O&Gh%3Q&Tfl^PieK`hvTzxA$J_S!*|m zyCA94iYFH9cvkS|)I$%^ML`#W`GVS!!#Ej#u3&Pf96+1pHSJ5z*zrsk5y_B&85v^&&{0X z$k)@Hh9!gAz78@;I4FL_iBf%75D9oF80c_Ykk*oI45BYOGN=<#iiL z{>A;befIcI#RINdc`0XUqkV9|6!tf1m#Czi_y0Yu`m&8bP>25&M_Tmr&B<`yDq z*u5oxUHg@BA@BS5%{64)sqbw=WYN>*qV_Jgivr2!+!Sn$+4n)pu2AWyeFFh@oKdz) zV}?1-^LUlR~>f;+3p(y&lX48V#=16brHW?Hq^7`#1z!S9n00pki*Vb`OP(zW(x{bP$2 z@%%NWUSb_y^(&GO+a29W!ENu#F@!Rz3tK-=vi)Midp`L!X8tp*trY=V+vI)xoeqHV z7w}63{z5-%(Oky4$;3oeZs)AJc@AQKIGFF3m;Uj#E7{CxYcI5cVcKeH)H1ARCOZS! zG=p4~C-GWX^>Ue%7`JbRF*w@(TD78l;tzEtB39CG|lzTKP$|xUakl! zn2=GCM9|;|_S~$2^~x{o)hgz`juhiny!u6mKCYib)~>F^v9L;}H#TBhOK4H=#X^q9 z7_X_+einI1P?RJ_9}inIdsl?6c*+74y&q&HLM{-bqXQco=oLrDencaE)HNfU?n67M*)4Mfkp(Q8b5dAn>@gC)URsJjobGr&z#{gtj z`*BSJy^!Nb`}v%c8M=!^#ZAVzag3Z!LNDJTuR1E|O)vG=NajyPuL$I{u}c zsS+fiX88eh_)?$pg9P#AWr@NhK@ z1Jp13EJ0^748mSXG=p;rvGq6l-1j6IahXPck@Ce1<83qb+A0V{67@FdBTY6X?E`4CF*EfY>iT!a`IZ}fuc3qR>Qk=_^B$Ke(wmACeCZAQB@Ku257g&QBb(X z^R&CFw8kYkrDjuVI(ZgD{z#?`B-nS1EJh2LliDPiOd24|$?QE{r%KmLcZD4`&lL+IA?3^;9#kfk zg}O=|yOU1tLO@OS|BmJyV3c{^@i9+&Itf5Rf~_Zy{E=GK(#8gZkZ_lbhCBtNuxCOm zt8P|MLE81&g@N>ddpr6jMJ~WFtO~TYhPR!p{xe(Z{=YAKCuW#}6Z9?!;d;it?LN$N zAP1ZI?6BthpA*y?3o$~Cw0+x{hoYvphJ)VCCMJ6MLVq;C7Vw4e{>n+++j|e-R}YO^ zZ-jF7iQVf6;`PozinaogxC|$=-YPEBAqOrKomCu&{qs5B!G-bzV)%ugFx+D4N#Fnb zUHi|lCiZO>wv%syuQ^KEu(_V^*;z}DA7=dSu3t6X3Paj3g#smZ67PyK1T@c|l5l9& z|I}wS*g|=iJ5CHv*P0MfAI|!dVG$jD4_HWth*~ImcNnJ@ar>@*#E7al&3dqc)z)dV zQ#;=jVd?Yx788S5B~9N)#nd#?DzNku8>`!zH4-?@8bEfu?Ikip5XZ7aMr|=MK{F4- zc+reab&IZ1GIH5J1B=i@(Zl)3AXNQWq>eoEz3*DGJi8~rQhhrZ^Lo7TZdsv?U)caT zdNPjh<1xC&xG{bo*t-WLWGC^3un(}U#e*)#yxb9~NOq~+3{_o518mNk$67h`L|B9a zJ_x%V^-pws<7=x^PIMjVRLfFu-zNYQO!I@-?YxY39Gm;L_GCw(@*kJOeSSwR>ci#5 z;LX8B~im4Jnnx>(EYfQVAo7R zbohSHa~uTXWNo7X!D0q^1C3?5kY6^nmbiu7GSYJ&s((7y>N+0X;NQM7)wsrVW4eL8)JKUBIpL&?vifEfbN=XtD<`ZZ51>^uX0au?CW$5C z#;>we86Rye-2`e~r)^Fwtg=+HB5>5BcSp+M7{JO6Q}{DCzDc8IyBLY+)o;?PnWS%c zw0~!4`=eOp{-*Xx*AInG%$($v5EoH zG%Gs0NpzSH?b(^;S2+OfQ~+NJpuJP*!bKS4b`&oj9djPchwtTn%S`v`{{Zl>u) zLEc<6D-D=tBw~#Y5;R->FkV0;wj76MxJf~|p|}D|Br(Gh8iR4lTKoI_hyAHe;+pVj zUG3o8Dg{-gz#qFBIji9vimI<`uD`cslN<0AD6?JW_XfF}Xywx35{(cA>F>}T@JbWW zl+N(A{VfhDXv263BKj!h^SBc2oe^5z_~)ZO1H!?;c&uKc6T-Wn^w|;gxl%HMRaP>36#zjzeqB zk09@>^Si=fZ9jkhv^cbT$Q+;Ox$LZ_t=}(Dw)@-(bDDw@F*7P1X479YxZ*e!pLsaV zx{7|k#mxrAJad}%4#ttX?(`$i_~wdu%O7qlJY9C?STuUi*LFnps9GD`SE^sbLEXa#<%IYmGs{P^&K1sK3fnI|~^{=cRKG zzMZUoa$z0oHWS~kKlgC1rBZOMrMe;Yco1@l2I(AhMk|xT8aF)Ey3u#Z$WP_e`6E1R zDOcCff?@QJlzG2-zgcA9`J|VHPX#G2Y-vil=pDQnZ+G4Qm>+cBS)B~bLf1w2s@rcN zzjwMNwLi%eX`$}ia564z6|oWN(t-1->aO|!SbYCGEDkWk)Xe=0T?}{QO%B{Ln7-+f zHt`5_U*$}yhJ7eg22LJ2x*5UNT^l|NXd-ii19Wb=>6!d=qY3f(;S93W;qn(2a1`mJ z9ZsT=be#br2a}&?0l%XMWKm|&f3G^Ktzk7HHEEAa?77B~ zBdg)SyB}P$@b&xS_1IKj_G|9&B*+Q}d+*vOX)e;H4N*J^Q>qR%IheHJJ1xf!9Kj5p zp%H_f`tMZX9~??~HCLWr0@kM*M)k?AK50pkdp0t~es;@&2Igp11t7H|;-c85X z_ZZ}LygyYCrO>`<9xQfCBq>?_Gve`XI>l*FvK3KA>`VNuHGqFQ0sUZ;`e>kJ-V)J- z>_`RsJX6f{#aNe7G0|nHzo$TflSPpHd%X1OP&?d#heb~*IH zPt0Xcej-Q!JCE^dvQ{31| z)AD|AS}HW$TxyC2T(aZ~)7=#kE_-$o_^U5k1cBfcj=u_i`68V)m!zbQ#P=p>FXO5m zWnmZHIzXfp*9gEL8hSQY!|DA&6)wb$rhI}|?Z{Z~9p67ARJM0Y6~)E}@4fUc^z~*0 zQv1`<1Eq$MHyT%saaDlh4#6T!8SR0Cezpf=tC!#t zar>VOlW-dM{dv667xXqgj)R?dp=Kkkvpl<2%>_M)PMQRvL!CRLF_)ZoUs|9gfjFej z>;0vaQ#-SFIqmFs#7e7rwOhRllmf0g$837F+s6xR?Mz_5eF9E1;Us0!sU6Y2%SU%X z|8%D{J{a8<3!}U0!HvO#g9eZ(_3>wcgwavO_@tytm$_W$mc^{h8ZIs6CBfJS415v9Qzs<_tIa-Qay5nr-&1uH_$lGmXNVv zN4&MrzxicAH{lyUzkVJmpN^!#&hYd-ZyYbS+$FJl*%aKp+3H`aY-rdk*?n_aDCNN#xLJ{SS}} zHnzr@()=v?@8c`}A6?OJCeHM>h_vgQ1aZ@7aC!bWn8TTU;`ytLI~>uYxyq%2CC}xNclr zOt7!iB%oFDIg~bVX&G3F9GWG|V$%%XL z3r{WGloOD}I#ToeSml>!M;MGiqCD=KUxu?`iUdgTg$}N8vqR!7yxhpC(=J-9z)MA`Bqaqo!GLCZ9uj{P@Ynu+?L#d z)z;(U-4)IU-67DPIIqIT0`vmx0xiIFH4)C!cQsFQCm@Z3tuA*DpoXg3V~sN}d$`E% zZoO#iUk8}KT$-2HgE!=I_3=G>UK+P8wBE}Je!OZfvw(K+P(NvGT!dF59yADqOyXF0 zmC^26nq=mVD5+*LK1i?5-+JJdmHTlsT9(;7bBhU7B<7irY3}4hGnne@MN5C){GNy7 z5rZinobv*yKU=%?D~pavDAIz#78tsOaNb^#3%)2Q!T{0r_e+~mA3!v*^bNLq-IJ48KqoJvl$0vd;JPo0c1TRD-2PN0$Ju)0p>b}0>DA&tnd>C6nZ8FL6K}PS5ABm`ACU6dTbq7&!6Kvd zYytmQuFnT=#|o{XmE})(-w{bk6S^iF7%cLA%!_Vi1w*|z%02~Oj+j_b-#8YLna!md z41=dAkGnKKdfgU&5Q`nEb#3QOaj`Dno}BDW%a^pYSGiB93P>PdnN*3h**+&w%yF|W zOIsOBdeRWF$)%gOeQ>^Lo zegZn*!@@vhD(z0&!hUA`_epP?Qh#Cr`5L#HPXFh0FAu{&m6B#D@jHd|?^%X})7NrX zb*4kx*T}aM1%!E0|N0HE>Wq8;uD*{~7He>$NvR@DEmJr7eR`yvDdCQe3FWjrT8GW3 zJ;7QToIC6LZ0(Y8-*!=)M7;?GoHlzWI%^fT7ARr0K~FlyATMOSTGOF4whWgeo|}vO z!AJM_k z1TNRz^<1@X`<2@+VQv(3K#tcI;Eu}6e2M8JXWwe(`^ayaDwGd{!i;-@$4U2cJ^raB z0l&7ZcW-@pENf$2$Tvpq^?<)|#?9;b^0@hMU&1Xs%heO-n)}0fI_-w-7`Mj1Z+3wG{Mb1AL7`IZA?r0CUCpK`hR>9a~8s> zr^G9_x#$7FOTwfeWOebY5n-auyHl;@jvI2SBc|1w zsd_Z9GFRR5esi58!8dkG$PIJH*S-fNxObCz}hQ${S<`Sxcn(R3SepO%>)INqJa7PBq<>QBeP@qn=j zcyojU`q>miSrO>D+0+C21=Z!eiIsg==}f2%JQJ@nndE1KnYY*;H-U3kRMI>La-!0b zXVN23$)BSj&YpGJvEkf4tgF+;eK(A_bv1uAH|M3&r>`d(nNvMli^4skNef!znP#~| zFa7V*5AVggqW5`~^@TZ}WtFRVGZ{*Z$ua`mG2T9pBlR_^e(GrdSorg7+a+VHPeeqb z#26&DA}Ehy#4Y;$x4AQwOaOZ6=2zMLF!kCdgM3A}urNn5a#c%8KqRxG?%q0(~M`vnOnJ$2i~7diHqgXUL2;p$Fg!v{Ej0E+j!kfBdhi5gh^(mO8N z_WkDgKtNvK&d>NcqVHE8XwN&qL||mxq)52Y52<%Qt~;#kZdIy886RzKOJu*4@K8sO zUqH?t3OAh;(gs7ytSC0;=|n3v_t#sz)%sSsk!?@jQLIG*k%ryb*TV1cw;4IkAd8tYaJZa1NW;=zob!7LS;_rf&CfQr&-e4cmHV3WOS& z4LWdb4V^)2|2(b<$O^b>9S8+HrN&DzpE>wkl^XdN4E4O*)$h4pjr$dNRk~)sb+)$T za(8TyE7lP{IQT(j?7`)yM3vjWGU1fR9_rL@N#q++-DlxFFReF}!hAxZ`=#W$5*_h5 zdXu#SX5gTLldPx-!oG*5kwT~9X=!ajh*k^tJbGhr;^ zu0*Bphl$Z_mTfs+nhxNYPOU3!v5~aa7bOAIeQQ$Ys#wT*T9faU$d(UV*|wFImB>_j zD}x=xVc)JskAG!Hi%P$VSl$c1*RZA;&Og5egROI1(*F@kEUf%mH>R#}-9OxS^;oi} z&-#Fk^L!2P6LB@kZlB<@FG?{$91t~Yt&)K^>p!096OYHmHMg+RSg@3N{iQx^qOShNSF99;vHF8#eW=0V+EU&|3avN@4%fkFn?WT4B0 z49Ien90*ZMu;JV5;u`U7eVw` z2_@V->3z#~q<&4@SXKjv=a)qtb8-2p>R;$6`~ONJq%b;WQUE{gqpki>{nXrE>LkxZ zEg$4ekg{uloIDI`1?jW4% zmWhvH)(J=pSdOZ6)zT{CqA5)>WCh2=%Sb?%q|ipo;teut;O4gR$l=u}%|1zf{*jEc z+2_73^WISX-ywF(g~42MQGktJ4+NMViZ_SUjq&cG^%r11y#MtTOH8#_SwsGPLp*|DKrCa%=Q66?)^mFdDyIPpK8l!;;q zESTk4KAk>Fx0xm%?3l!iZU zD1+HA+KID(%jWyuyb)H=HQ#gY75iyS;PRi>`ncQ}_!TZCoRLhaFAoDLRH^RPJC0}a zEMn0<7f7p-2j9tZrC4}T)N`mvFOn^-zO4arYv%EC9c5fv#tkuLx4&Lk2_9><3oA^s zw3J&CZ6*SJ)}pr4EWe!ar$6{L7MYl*z(@)BQ@Csj!$c`&P^7YaubuZ@=lnWl<4u5lj{4Wq@-i$iC!eQQM z2?p4sXK>{Y)to@DW*xyMb*vj)mt9&*Jr1il7|!L=XfL`jLK0@t_<$+fe3s*If?+-k zYQ=w%_$c-Nj)DJKgb(Gow$vklX}C1Yab2)TG889tyS#pPrTh{yr@mduOsnVj6f=Ao zf4IV2(3@CZ!Q60jR9>$zM7t~l*NGctofw9CUy<7PZ8-vOMurNcGB;hXA7PAbQ311B0GC#M%fF7QY+ZF5chthD}&G5b0j-Ovw7Ta?LP^}7Nq?^)P2)uyc9o|c3cOj8=Q};FNN~BmcD70 z?)C!&M4T(!RM9Uz#U2m6MyOM<*nv=yOir@lBXH&B51-Da3J3b8-3gZ2JWVfcMSj)O zUL=rKx5fF3;~B-x;u)j|*Y&067b=g`3aRX`E^@~h`O2=5lF(1ye@oAX|9(i#%Ko*=E_=J3nnnnYo7@kMy2( zOPoEWYi+5T8aG!4xm6~yEZqDg;eiJ@GzEt`ml zjo>+M+-2K}JW+eTsC_e(LV>V4goP>@>2!xA69Hdenp?lr5m%FYIZSi8WD6gy3U4-* zjV#jW1Dg7Dl8tXhKr$S{44gCra#+f>Q`=};5o7G62j*v!7*RB}V#XXP2R#8p;SPNJ ziQb%%Ue$7EWj3lEz$_ypTC;Z_v1%VV%>8zWT(cIdnRSX1SwvT7NMK54&JXP<)f(~| z@ofHp+Q2c3oOWw2EDs`usrj#g}|2 zu1q_Y(K3?AmU~MKL=t(%SGpT*nfe*zN1io9?s1z$pG+>P492}Wg)0&ph`vjt;|3(& z7b^0#`g`EK62_6`n+_hHQZQwx18vT#U&OgA_WP}?VWS~zY2JnGR|y8)p>XmfT~5G8 z#9d)dvyND0y}Iq|h4CWgc9$!v$y~7rt@8ASMxJu%o&xc%a7%jv5s8aDsiYAuxB1ljZs}b-nfi4=1S|@y(1r54DUT9y5LI8!w8zuXfrS2KE zz&m8(V% zCPqr<`;g%xJ0u_a2~U66D&Q&_LagO(lZDDV_W?RNmi+_}%EtU4CLk7D3R0}*oMg!} z%pV|^-qBJPR8V||j8QFGZH>L8hK@i~MTKU|YfIH@3yo^6wGV{dcZkxL4q$R(%92w^4@^%apCrc=u6mC1p8p?ii0q{FFo+~PXPu+*qD<%f{u+G`i86YMu%_qL~ zC3<3Gds_I&=2LDgz_?dF>i!hp^2-r@E);qHWC9luzs<-{XZbF5>t%Q!jpEJKfP0lvZ30L)WC5l!V>%A&l-n zDra!{D>F+Q%tj_@$r8=vdqIqqzGXZ<=mDma z*3nkJ%y0v%AC?Jyx*wyllpJTB!ZZ&iDrF9if;lqN9VS^;LaANkL}u2rBYKMUMhVpi zs2Nk4;+;}%6sePU`>EaDaP(6@yG;_Y^JH-3CcpCNy+bW_KmOs*{;Fi~J}R1Sm1A}i znj*Z)7kwXs?t!Jku)-Va;s@6^DJ}~}!AtgfCl;;01o)GM|E{Un?u1;%-UZJ|E zH#yEe&dzRq*qXozJP|p3n&>l&{bwE>B!CvTw9%6>`DbxL+2@EvhKbPY;QG}G*ZV>t zC*;(qv}QUTT;OUX#o6Ks*%%^L`ae#Cq=Si^CNMTg7D zp73__ZNd9T^+=Gr6(B-w-cZcceQPkDba+ysac_ycV1`T{HT%Uup!^4vk}{i zI%WH|W`9^5iNyRGb3+b658x93l){@&z*jF&?))^EBhF1h3E;znv>N?>>7*%FRUBV1 zI>cbYVj8hJH=l4-_EGlENFPpi;*{3yHwAxkkoXdk~Od|~-y1ngmv&(0VdsmRAFurDzl|9YhFPkTwT2Ai7R|^#{t}!pI&MnY8 zs4)y0r-xG_O?rS7^NfPXV$xmCg-a6019n?}@6pIFcut$BWH^1gSFkeHPIS;*+L}q% zVs^(aUz<)zduBU6QMCNDCQWzgj=bHF zPQid4Z6P&u<6(s(4aY&rAQ5>5e?X65h!!-1JIEfzz1-IQ@&RGzf*_rfU2%)yKrai` zhazq~yvA~@R2VSL^zc4$@W=_GY7O9>iFiD!wx3e-ig63TcuFi^TGQJ7P}yPCWnkbf zpjHzPv?x(NFE*>);JWZj?)>+>FD8-rBjtI|yUi$&(SO@(fj;Y&6)*;vcgJK@YPu=T zG$Yfa%gN5m>AlUZ)_f|@GV_Vy+(w7gs5seqDlK67PQ1=x7H4Kt4$YtboDXyBL9xP_ ziSNYqomM_nCIt+Lx#v74+1gme&##wZwws-QF{71{c7}u90?Xyua6BAqWndh;Z$1bC zEX2}er5vB7>^_T3OZ3{NjvGO4X01i}^9TRR3NV$S0QiN1lU;pL7&k_4%f6r5g$T?e zrEEmQV93-(on0SKzC<0J!iqASK@`j}_5{020)%o&?`pAic-wYt9OO_rU%aol&AsPI zedlq}(z7`I^q=YU_i&zOSbDn3>Tx%tao;L%`$!&DhxWa*vFJACZC%LDsJTn#(5Bnmu0e=ohACzAh}4u+M0Le!}wiq?AvnPW@DYqi~en73<# zLeaxo0Mkgl^NXFmNWGLrBJEO&nD8ctXiP|p+jS_xM<_NmE$HD{|I&S3j=JAlmCmJ0 zW;z*xebPh(adpXcVTtPOU4Cfm#DZbY^WoUOV5r4n_(;T~UkhN?W21FHuPq#e^ov_F zwa|_+FnmBXQ!Mu)8US9e;s5xYhm6ZAlJq0zE6Wh<%YipRkXqKz?j zn$Wft;W6>Z_Of*Oi96s{fNoG$HeBDyQzvQF%Eqvi)@yD?^xB1AB7*3K%|TXhI=p^e z;`VPcFK?hf0-46!%hU$Z^TojQ;&dxb!EfSkN(+nZcfTs6C^eHR{s1HYF(;ANe zJeA*nfi}2yQJ#O0QQN0wpS7=#^Lt{^Uq&?Xy48v7`=WAlGhGD7U!=DT_2ZD8sBiDZ zY*f^UW0<9A*780{j;YV_^;o!n$vm}0vjYdAhcfFVnuGJ) z3u{T;d=u3tEYxZX=<99Mhq=2x##TlEvvNSbr~na>3aciafuriMDO(*tdog3lPcHbg zNJjn5JWYgMtW4C*OM#qH##Z9I%5auM4?TpeuLN1=NR1xY(7XWygk2g?Mpxc7JNgfi z>7^yk8xM1r3PPEIJTmgpk*0|eU$Vw*C+kO5)e(PID6C;dQb9P<&WK3$nzDu8e|p=i zc!=K34|qMeV?WwUUd+bFaZJSB?B-8{#0mx_&Uwma)up{YbmsU4E7JgpZ$>h6zQ;(6mHb%}K(z=&2 zYAFeo3Db{0oq&%h=9fsN)Y39qAtgz#N~+>yIj=%|kJe^z@<#$=+>{n(YS^j_l_wj4 z^8#a6=XA%$jU3RTw;?ZsH`?A?|E$h6LKa@AAlFQB^60v6QDuZiO6y~cWFz656-KSg=SkX- zw5jmm?0WIpvVIF**;auSe2?1%20lP!ZJ(+#VMi=wyNB_5+nWf|+O%Ch26%auA8_ z6i?lyuW^SLat4=4-}>o~Z$VFc{_}~g{NRIqk(H&SzCNkPfZNfIyfkmoFw@FMlk9wo zfmwzd?7E$&mbmtS6ADwm9TZdlFNjawCUBQard-379&orVPHgeCJTq`oYq=QS?}1E+vZSpCqqNNw z1Yn+=jvZjW-)emX^J@zkkQt7jQdS5JvdYx5VIP_T3Z^D$r`G*QfYkBTj^Tya_Yi{< zZ>MgI{M7Xqzf>8CpMm?IAx4N8rDlElbUH8v-5uQ*-OHc%tGDGhE4&-t6j;cu?{r?U zj9H$WTR1$qPaNwOuhwRID@W5);0CiC&2Wv#SO;h49lV1!C>gy_hQ1D?>-6q`?k>`* zCP58E(*YLG*g%L{#~qvWXM6~8ycZY~+ZL=FF1>z?wC=7j*21Ls{+Q`4#+$@-qyHK5 zMe&kC%hQ49*U-B^$uHm+H}y=^oaO(lrqlz3{&sJH_!2&o(;cG45jThD}3Z9;nQZs$Fd zANXivZNjUJG%~<5jK);{gb!o%ESt!&4>0Bz(|VURID3kPLAo95{#-n6)B#0l>XZ{Dy1dZ{wMi>Eq+un;B3;mCu1vdG zKCwG`5*BxoJ!xbXoA1ZsZC-aYEk;5_GO7y&8@jOem%z{(^p9=tripBqcRg_6hI#6T zXY1v%)Y}NXq_;oiROm>VS4pI!_R=rENNGwchHM9`kCI=;X76B(1)%c{5Z?Dwj*ilf z_icY-h_>SimNi17uFP!`OG(@ERA(0U7yf=~FGGhPQUgM7Wuk?g+hnerW>WAynqU7l zPX$Z0o=}Rxjtto0k(X@H?I!SS9{%7?)f(y$WoY{`vk;9^Nm;`GNkRweQM|aqa{Y5i zimzz3b~J%ChcZn!VBL5w5mh0lFpsRBw`QY*CwB+;LqC6Ubj;$-%)<2>F7Sf&C?do zw)@RZ1vx22h^yh!Hew8&^FlehYRc2rU5u+{%0hndUSfLC*acKvycm2{KdBo9kd_;x=YF!IG;FEaO9F1J6>B` zyss+!w*N^|&uhnj0Yakx7E5@~{SWayki)1n5z=zCZe5To&~?UlBnKJ0s@9?xyYKEP%`-&n5%fb zZvYX?eZpnt%aMAaS*@kyZ^zil9c}+_V)O1sp+f15pIQM_A7$iF@i3q9h~+{j&``7S zica*1ZuuDKFj&3an{Ite&*XlB(8bk@NAgGu<|^XNSuS}g*t5!j%l4c}bJ$1`+^kxaq$Kbw65ag@u;wQJWm^WVXSTmt5O z&>&s{7$0k8=f-F|?eRnFD}2?lUJDC>8w*RW-PMSv0OJC_wtI8illEU|%nWBd_Ndsz z5HZnY8G{>jW2=XDOH(BP{8=j5j7USWy{#Pi715E^`FziV*5&|3$L=tqR5Pv4N9to6 ziy_5SR6zcS)b_#`;(Nc4X_30YCZzrwAw2+f|7=_H(97@~8O50<=O4w$xP00)cWhw2 z1jmJs@~DXY;B(wD;^x)5D_` zHUn;AgTp%vlgIXCS*m+oT2-ZX&S`uv$V|a)s(t?8c$oD=MsfZF)HD{LLfYtts{UZ9 zatyz6PBC&2V!^zgjI+#`S0Bp`ab{af*P#6B0Ut+(k_ESX8W-IUc$O)mV;7e;7Y;>a zkf2f$Z%4?^-bwdfAiVu)@VkEg?GqsacVsjU!y<*0kwToYnRG2jOtZ0;x*4@s5A2 z_89Cr+R9ii9EI)aMQQJ-t8Fw<(fTzRq``E=TR3KwD#Q*D0Pp-b@g5HVjDc7wDdsa- zo8&5It>hyrW?9yZv{&d}vCAfSGBq@vzhB)|G%PaC(#W{8N81b0_PHP@aT{81*8F%B zEN9Ahk89@Bfu687QK$Lp7@WGD;mog^V1SLXUq0FR06@deF@zOMz|SHW05j zlTwn2!) zQ}>!Zh=L{er7}b*!8K_oc!{uP7~TdA+XK6 zR&B!1yRIg(&WV~?oT+9#_CDY$y&|-~9M;QvH0zry+!fz&MPD-Oh=!CiGk+@mjzZ%< z>tskG|G`E=T@~X>tZ(I?u=O7yYsBI1z>PMkMkrva-mi{#eIXnKj! z;TUbqz0onWCjw7@jr7t0@75?SRZE{JiI4R!CAP@E*ky&L2=0N&M`DRQR|2kW+_ zh>ckO*9P;$J333oMlJ@2n4i4wr?^+*OQ?o(!Qt~1aAgM>Lk;abF@t;uZyR_6Qd|Vr zV|-dj-5yeGf7#ZM`p3)n1Ec+(v|#<5nvY@VA*q2#5`Dm+vw}qNJnWz?4-rFUwT5F%m+i< zg4~gl`KEvW)VLs#g$l98Rssgf4m3FHIM=!}3EXcey6E4h2*AaS9N)!#Q{u;`uh*(H z*b5n7LTlSf7?Nbn4o&dIJCy@4^%R7QR<+iH`S;N#-z}`7MuMl83giqopZ_nq-a07i zH*EV}x=W-}kdR!u8wI7iOO#s5rMtlbR8m4px^wANnkA%j=~%j(=c~W_edeBd=VAC` zXLbf=VE5eXI*;S{95z=AGp53Zimdqr1cYA)%HG6F7j@W^8Ckln>AK_(79<_0v@8@k z$j=%VQ`O?Gr3eow8qP7^sO=brbrp>>ZWbpV7$o>N6&bo{HDu}U_>T8hP8<`IB+T{& z(K0PnVu~?rmI%{mv1}FyuD^}n<33sIb}D!gQz($C#r6O&B@U|kOKFpC_7WjqYB$b} zw4CDI9KTWN5n%AAD83N0?XnS~gnsi(C@D0pZQvp0psruSuAYm|Q>Kj0BHk&1GJMt_ zPo{lUOV0Kg&T1%S?k&$3{%ud$(<7%ih!`!$nle4Db9`PhZ<7KnCK0>X@#N{O#3;+b zEKr^d8Xg{S`IM5X1@iW>Cj{V@h{@;y@4Jc3qiZBDqIT*>&y-?#I}OP2&z=Ng#}lAH zEXLNQB1?%w4yG*THJ^a=Ghvx6g%0-g{;5} z&FBrlaSz0sbr55lp%2(1HKeXYf#gh|N2Ntrm*2(i7whwaiqVpbgE^Lyz2BqESgy@m z;E%Bk9e`6@(|;GNPEOa*^fA`yQ3uq%@14;BPVRBlYmB7rFB6Krs+y`K)TE++0#rs! zwuD(v-||>7C~$IKlu#^df=01VR{1rYbvw?=fB^p7xA);;RZHcaT(PkP%Y)lw&6k~S z-e(CEu4nxiWWqK164B?9mwW171;l>_pOvgX+7JdVcz5obo*s;IGaubk)08&U0KOgk&ut{gdRgXKc3DnYh<~Kg>!hSpFZ=|w8C4B@PQ$@UYTC)P-w^;HlV|wr%i1Eh zM}%HrE)V{q;GY!QM@cuFozIpf%l*VjaKk*R#pH==7Mgc4 zb|kYF#kbN$4`o&M5=+;TcMB|oCw4n~F*)V=7-4rWa~+c;yF3{h`Lz;gMB@^W2iTdV zQjB}`#>n|jS9){}%k^>m#HlLgZ!I^r^GfkP_fX>&8S?d%wKzj&o*S#m}ot-@-{?c=oda% z_jqm=%Bn|Say zRIJ7W3~8OR7W#MOn7-?Gakk=;Y2BAUnDy?~(~|&a7WpLOi>cJv!FiviJ~@ z`5;s!<24%MiyRgzMM)}oh@ax!Dq2x~Iobj=0}E3?x$gP0b6wX8eaSBBNuhIE5RVRoU3lpz=df_7 zYcpA;zIeo+t-sxK&$@G#HHy_e~k@*M?20B&ya|~%PvlW7a!aq z%Uj;N_@BM?KbxR{GG5lsWt$)y8SDVT<<6n0VG)-M)p8vZ4&gjp;P`j3Mj-zmp**id zNkwMtg=`P@db-bZ{GI`~!o>0-hys~Di>^8~APfOO?BglWITN}{7aR~gBPhUmrfpj?wakDsqQ}uo zjVtx$0R2{5xRgc4+zh#NWHtr_0*^2BSB{dQw+>8)ENk5EmkvT*f`7JE+6Rb7sJB=U zxvNR)7LC3_o4i?NnBE!wD}0jYTL$s;0c!)^x0On|sUB80eQfjzN3jF6!yJbyApd`n zY+p@ykn%)NEZqyenU}grNttCuv;?(!{aFybih&^K`esJgiAeeKd?6V|(4W1REHMmQeFd$3qjIYF7uJpy6wG%El&r+a zZR4m;scp|(M_bhGI!f(Qt=t$z^t~hS>=t3nqg!9H+g$8WAxc#eR2>J4Uv2bN-?ROa z%U*xvu?{r~HAXcFH6hp;dsY%+g$kJL2c16N2(rD)3NsA*m8RlGOe%WeA;9H>|!gJj01u88{v|?{b}wQxNvTMUCGr z4X+I$Uw{OXF8i(~$Ve=_fv#emwo@Adu4maXH!vCdbgs{0X}5%Ep0Up0gAI{Z6?R1mVUAO&NK4O@kuA5bow`i( zYh>xgm*=fHP#%{8s`D4ADbX}az2u*aZ)G$76 zQ%FsNbsHAyI(=!AIOET2rB3jeC@3mlcq%_n4K(N$n9I$}Q@!CP(2pxpyUjak+B@kz z(EgzoC&`&lW|K-{13}xtp8)qa5*))qG9@VjXR#w;Jf)=yMrLUJ$Y}Orq3mY(QwTUK zuY>Dii1ng_0E@2kp4fjmc|NY7NMV%xio4&%)fZPqMMczWAHU43DHPZ>{vM(+fHnqV zh?H4$oxt24wl;w=7+&7;0$UYyo3>@sx)==5rd!eKol%-Dic3$L^{!_JQafC->g1Q? z0deJj!E6tO*C!%Mc+8e`?#?5&Z|5%4|2NsTdM$JM9L#4?htlpv(O z-nQI)p$COnM18b_)*eW4*2@2v%`Ae~2oFE|*)IVn` z_GJh~6~%~mHimCQEx3R213XIVi?@IJ7bNDF!g3qzO~t*ar+CtP67Xy*>jcZs1q9t1 zrLx)&)_OrU-BElhYM(8OK=?#wHsI;FPFdJs`kt&sq-H(YLg7!;uJ1AR>>*|6PqnKO zJvRgr8-zx2R0}=jF74FN+tAxN@?Ge$t78ex#67piSRUIX+sd2Bn-buX9*+^IQcB7Q zl<96gW+mnU5aN`1f0Et6Q?80|2;UTNPNVPQeHi0i*_1hZc011|^FbqECGK*q2YB#4 z@P0Fp{_nVp1!h}$mu0~V(G>+H@tD2_tCAlXUHw-^C4gA{=*iX?r44!H=t8QZIGLPn zlc~wCTu{XZf@RIgLAdkJc;=2x`OC9s#A#7&5rhcWUxlXa)Wn2UgloTix~#C6_+Lbm z{(c>8_rZ@i{}KJuxFI{pNuO_MgK2vUj=OD6?-G;iT|U0tpDd2|3U{ar$}$$g~eGK~4FjVLWaK`C#0v$uasI<6-SxgB6yo>xCuHEw{c{D=2PxUT|5mBSW0<oc+2iL|)MN!iaMUl9`aL&R_$UdGODk_M(zuswPZg^2EmLVKe zsx`^v5vJFQbWW8-i=7woDI;7YiknA!wVyQ3nmSLDdaG73AVvCpmsLI6ti%=e(O$@J7MT36gZ-MS1cGuioc`)p@=? z5@Nu+x|8s!o@>c9@}bRp8MVx`H5{07U7WlN`p%Y(z&|_iE^$j8oS2X^YizZ>PKT&m!Hy(2|1rdt zb`8X2>t&EuCV&IMmHa_Lob# z51O}k&+GwFpfksX+g)mzkXMX^Z0={VmUZ*Be$R^2MK{ORs0f5dYVCs7{t11FMciQ9 z*}}~JOp&xx%wE}tw{Ag%yUt=R%f@fu@=+HiC$YHy7!WYL^g?_TAoaE-PxjZ}T#?9N zsFUSph(|JHJV2sq4^ED;3bo|6t-y@%I`Gv;LCD)XBbcKuI4KTsP?xiraqs_D=CFYw zp};m8ShAfoU$^b_WRqVFP>Vm} ztEp9-3~_--mh6-|?QeS0&~^81HP)+*J}Hs2ij1|nw`la)-eDQZ{gdQs;D-N)KvlM+ zAzVmV)lyY-KJjyhjX-w67IEM@aDdCWUh6sfpy7|2ae3KubQBxF#3ql>@PBpoFrP1- zYr07oh4Hn3ND2*LE2>!^jXwso=6Dm&7wav1285IDugX}qpFiD|Wq*^jX&W{L2_3dg z+_Z1dxi|IRk_SEqP*m$pup_3dDh7-9rW_h0@W>#2D9d$k;+mO(NYMu7KGK<_&yNYY zhs-q|onpJt-vP+ltgL=~0utd3S0sbnpDo{g_X+K(tP%deVh&^9#Qc!}Vd&Yt6}3@x zM;k650&+)Y?fJG~-X1kxd@BcMfVzW0?A^#v&9sgR|3vKV>1k+hV}l(BkaXzwp1ZiP z%}Ox6|DCcPD28y3UrMc}kEX9Sg^=>kJbm$E-Rw&xKB<&w+VclX3f~(Y4s>^0@sM+M z9|j3UZB8#&ah`{vu94}|t^FtX&PrZhJdW-zLHYeul8hIxUD>(aHaZoEVxf!iv~!`Z zpBSR=UrbAS8m7`#h)7tSiCR99)rD?AB)HT(so1RFq^YghK|3dQL+6nC&c>*gu}cKy zq3zL!QPd=i*ooqlo}Z{mqP@Sqk6KHmdCozmlqeS4G^hImQFji$m7}0e-8N5XpfsOF z4!*pe_i4b6qQUv}+!=2-UZvHDDYbV;@Yzh-@f}o{-H7gZf%D6ZKASbZ9ib>0ws2ov zA5T>uO#4mEqk_rI4((`6H=&YqU+)x0u<^73R#<~DRtSzIj(_wqEXS&N&E-QDHKtB_ z$tcI>yLQWBrCcktYkg`#y^`YQR_Lecq=TeNGHrv8MaS7WGdoPQZ1GN-kSxm9M&qBL z%J0q=VWy<%qc5nGww#QyI&A#HpxC6uBFQvwhA@r%=!%dKEiIEz&|LBOiSg{3M$C0> z(nliGj;=SicDU&4Mgy?s7CKU$IMKgSvPHw^lg;6kzXY)W2Qmm`Ae-!OX&K(waK*#$ zQfn3zEokp-^XRPH!5Ojl5_Zf}lZx8#UB!7NARD zp||u6>ywR6hoplV4dc5OM~v@YC3n)xwpM@dufA<3NKW*hURX)E1?X0J71pYo zbz>0L9sx>z&10!XjqmJkxcp9H+1}krJFX{sBd^n4Q-c8bB(mrCe!~8QzGT~XFZ#c2uPkFhEv6u579E-@z=w52c zi$(s~d-rqJShw^nAN$Al3%JBLoF7f%#$OZMj+^`GxB|i(!s}CTmw7tMF@pfIDsUME zmkf0^x7r&;0bQV!c_!YONmDbWWiDwvn=c!~+?qma*Id|GyFN4V^7qjraFm!hK5BNtC|dp~ z9hBGmIVUh;Ot*dcQSOr93U=Ceg?n~`5%uh&D=+x>UqG_8ei+3`Dz!f zvHp@PtzQn2D^Q(m0l2SMz^t2?;8HmRmHoio>q}dC%gBg4-6i}B0n^h=)b>Arx?bt% zg!R)&iYC9{AkzU)BWpX>9W))BZPeFa08H7f?Y;IxJCPSXzIsxEY0oW!UZMPf*EGwd zA4@;0vZu#wRoum)azRa z>zma@pNDsx+h939UM}z5@9TTw)aY)e7G4!zBX+4GB=Fe19m8UTz@nXdcork*%L8_M zZs5gjI;_S~7QwS2o(RdNsjn9J=sJ#7Zn43rn%FqQ<~C-=wV5d?nUMz5f&-q-dMW4w zwUcY(ded_fObMKDwQK@xQ|vG!QdE(vH+S@$gOkS7*in1BQe47C>Sx6PV+Zj*YKh`3 z%v~>2aYB)rE=79$ln~)Ux$8l4G*jo)l0MX&&!xiPH8&OxB!{MvhApoZz!JP2A}K|) zpo-IB>Ho=7%xxfq;+inn@nsC(&8bF&-2fV0NxjaWm#x0>rBSz)=&cac-)Wtdg3pbl z*#FltEchzghrnGJ0=N8>uD%>;nrs&db1sNmRm8=d>P^#oH7MoyPRz1u?oApMW}MMJ zRZth-=a^V44<~|r_0mHBc2ZL7WBA2@#8lMRuX3ttu>-Ad)1<0D0tY+9M3VC|1lZA) zx4}n7<`fqF{=#9>>rkf-61ULxpJaX~6)i6xLuvkv(R?QQ|C@C~OSc5~6K&T9mtGJ1 zOUuBTn)hhwelDoX;^E9IdhR8be-?Obucy6c7Jwua!l`loHrJwn7WDz zx{SJHcvuaZe@8d}FxPfBcXe>lw;54eqe zIFc#y)0)2c--CR<){dB`+~YD4D=KAjd10ZuSQ~q>fP2LAF4@I}9>!hYr1UVU`FjlJ zLpPT&Pn+7aKBVy*O2apCelX${ZTzd|iFFk+`kaV}yg36rv{E^95eP)oJ>#U@)U!rhq{VYPcs7pPfoG^gg=F^8;-ig6`(qe`k{$S1YL!D@MoNU0uyE^qSQ=VPah%aYkoyQijJ|V`% z_1PNg3(~1p(7wpZk7`JH+fw;Lk%=d~OFi6QKi96k?D5gu+RWPQXeKjTr}jtXbd+(sVEpALyZrOU*b1U=>N+|C6IZz8G z4wrYfe#B0tfi*CUFW;maL#c3mphX7jM=Z_hCbZq5q3wV&o!))<3q-!rUC}HUeFgM0 zaH(6WU+eK81gZ^1rE-s%HQ+=X6o)lX6csgu#IqCib1Q8J0ub<_^7J-6<=c(;b4p1j z4?=8GkPazn$#;=@n!CGnWmdF9Z&eP(nhEny-FayO^#Z?}drB#3_d6+L6INfm;OE%& z;0^I&4be6JVPxxXHm|M{WFQ=(>ZKj=o)sT{TEnq5w=nggwWB7*jgcsn)X56Hlb)>e zJMq-2OZeQTepa@bG*;Ro?djY1HU`zVi77Z%Cv6Kho0uSd=muj&2DFoc_@xAK{F3`P z?-ZGAnmR)GN-E#@%hy`|r-BCx26<}dH*ZUn7L#6x!3oMsx;T+`tmuhu_Q%BNewW;p z10v5S*XuaM%)&d4rJ$rhafaopZ>o@7Mby-CWykB%s3D#u;VA#PpLMhN*}fCQvpfO2 zA|`8d%0>iWBYbcQax_zy&FM;?yw|ZX?rdh+HD$!IM6M+Zx0ZmZuo%gqrDMP?lrRS` zL?uJ7izq5o^zn$$)(a5YS)Vi2u;e_M>=WbI!HF8s)Hci3H8+SE13J@m6IR}^Ao(%E zV5n9Y5zo`A^FpkOk(#_yufIT;HCavdU$2H{ zDKeg|Ehu&QvgAz3Y@K6hXxhHDg*~>d{`4E)FH(}HSFsjr5+a>n&Y1^uq&}S3YApYr z6FCxhLu0?qU~Q1~i|BN&kXZ2^esCLu`mvc%zR$&f zl?HdV^|+rCx4rfDc)%MdtR6ojHoQM#c;IWj8gg0j3cB!`FpRm{F=#7_S*IO*)^Yc6 zzx3dzSN$-_eYMKF>WzOh%{sV#nPl$!GClSp_KtS=>i!J)G}(!rL6*0b!B4P)4zY^V zfa6#*%ydrXVe`Q>`T_QEzQh3+d2)g2RkQ^Se&5;s7b&$?zJLtSX z9Ip>JNHq(~1FyHmO~_PPp^#g2iO*8Gc}r0@6yNF=_?(PfUw=E_8sJA)AC&*EiRM4J zIsGYAiPE;EIl3R#>ef>S&?A$gTEn~K;uFYons=Xa^t-u=uo0j$D7-v+7yl}?KYAhf z_k5lpwkhaOFvo-T_3zdzaBfeb*Rc=yDYOq74)D8YO4_&c?Ol~!;)y}p246(3go4BW-! zr*JAhn5xh>nJRL2HdCJRkJYYgvRgLVjD1Ly57)`-_x2W~C~ugvJ2oVh37Ecm;j(QP zIXTI(nYE^u_PW>Rz$BtWTDh)o__vUKjB^u(@~UhrB)`_`H8ZJ(=qcviWhK`9qX{ot zqOmczw4D{*;_#xKn`WoBsyf(iyv;+6hiX+wrpe_kJ54bH@Y-DzH*~+%3TU_z5)ZUC z*W7l9ZKa|8I%2ni8eYFG4P>}gqtDG8=5)K#E7-pXqUOfdXU`-3ifJVWk3Kg6SK=oh8sTr%PxlQ9+~rZ{<}F0dhOnua9cz?@>Or6 ztxXS~fIu2ryFeHqrZc6-^adpO4G|AAZEO?Vl-S{j6B9|00J+ynxJ5uuK6 z-7foT{KN8c&FA%_w0sJMFsjpYk0Q-6cZ&RVdUuc7-XMzKfSoJy<35nEWVsP&q1)Ql zCgUz0jW_4n&QA1npCgXvzJc{U`&7v$FdwycU|uxy1^p9R>UI_W`k zZJ*c>ts|ATqo2&NKjL#@o!V@PSYpo%9jl=ept7qys&uNPj>it98)S3*>eTqA6uqm& zjd=P^p#jt3(1)01Ou+%E3Nh?xh?QM|cJQ?2VBwGUTJ;~?EK8%a*BrUjTDAUO5bOwu zThTWc{u}&T_%Y3lok4IS0@hroiemAR*pO7t_1$_TcBqDa!iKCXLC+)V6Yo%jgYKk@ zXjnp5vREY5Yzkz|g z>IJH&#;fmtF<}qDqH&+E&9OQ_Hg5*~XV8)<8Ge@{4Gt#^prA{d@nY&V?(ohzw3WT! z1AQlqGM5BFkSTUZttl|ApRp~V0PQkeh5t9+Ge;ge+a%_820iG!d4Y94d2A4LW`GM1 z5*e7o`4{@3DXREip`Q?*{^i2eC79DyUZR)LKNRkM+hsF7#`Ep?2}}0$D)j8f3)Ol| zkp?`RJle|%-yyJ%PZFQc>n|sf0i`9Elv~ZY(>8GPP=m>yLgq1Pe^3vg?v94t#QR;0 zv@R6sJB2O;i1EpQyA&C077+?q0*a-5`2a)tAu^cN^kD1 zmCgsmh*rEupFF0M%A94JhEL`GR?^bf{;8|wi7KR*TTosq8vr!RV4^Nk>xl^JcG;DL ze6Ug*@?Z*`7dQOLN?G|aO_+I}P{7oaly(wx8b|dp<07#f-%UeC)yp|}9WC;k^@2Jc zb^3;fkExAd12+?A3Qg&u&)@*n^bpg* z&NmIhNoxDizYBgwj0)4N{rI?*ryoEbH$O};<3ygU7QThP!>Y$1;fdaM%-I$i>%YeA zebKZO?bUjcj(hJsNra#~@TORNxM%3-kv_-yyN*b@w!XA|*qzeUGRkJ0M`-GYEPZbP z+%spdUF+%S(ovp%qyI%3ZD(&k7!h)wIx3G%1F(}n%@STyKAHte&p)A;LNy#6OeJ>| znKtAh%_M!~i%s*b%3um%@mZ?NAGDq z*sZdXpy$tpA!87#;@|Ly7UE=GG)(Q^h~{<*^A5&Z+Bhhqj5jopaFwbS`S(_TvQ9Rm z?&_Qk$0coP6#f+P8wV%}E7F9gV0-lR+UcqPmop-ao`&pf(<VIu2D&6KO~sK$|{sSx)@jAtYr&@9gS{BnYpJEtug%j7Lj`%U>5`Hd^eH4((o z12=RKa-k=W6D}kazYJ8s-8VMY5-z0JrpWsadNOEK-qYao{RHwqOvkC~GT$<9q^RVS z{AjmzAARRB(tyo3h4A>$2W%Z^Php%Pw<*6c+qpUT?U5EBHc=I^CDTMDG{ z{Go%6pzQWG1nd!B+4LFG7k5~wg}1riJfbBfPu;>yJhGv2!zTSW$;n6S&hxb9Hs<6m zut7g&;=DBWYrr6bsci|oA;f5NP6(gK%p!zZtF*=l;si&2Lss=SI_z-hVsC$(g~m_C zm#WP16tiw|KYyu)qyF*ZLDn~im?c*%0aZb|&XU@SQIF$vSii_L_mWxCyh~h32;7#L zu4~X^(6sCLBHJ`(_}P@OF}HFJ?AevV6H#g@@SGWVHmyQ*p`u~_@Y3JzCF|&Sb>^Ab zk8k)x0Q2+;O}TXJQs5qW>s7y#ecKm2f+5L{@+JK}7iF`8z2L(;JI>(Ty0Gqu5l;zM zKaG|&(pbN}Tx4pEN6Ei4=Hb6HW)jvT&_iF_HSCHWfJQ8H1YNt_2knStN&whyU+yj%j1}t@lRUb0xrlc*shr$_FcVAVtvU5whF) z%Xe$z9}T8tUXI)^0Cr=#_Nas#gP7srE-?*SsrTQqyP)tKc2d25p-JGo&lp)eU`4F= zuJrdHv+2_*)+xQ;$i6+7FUUN65A7*~QU$B(&;}1&gz?ZB_+^{X^^6k9Ik3M4C$}dB z%$G+mOMhIg2~_L$6|->quB~9!FlhGdPOoTkmON+BI$rE}Ie$iYVxZDvqRQOI`PlT* ze>!hkgUZ2MDiuahONK;F>DHHaKu}+!I)|FZ4m1)*-nq+;m2%Aup?6DfpNMc!swUGO zi98{Hns)wdi}utPanj4jBO$4t+Mh89VFYb>jEFh$(U5Jub*koPaN|i6hR7oV{4Nl2 z8Mi;7m#s*%gHDOXqZkPgz^z1YmpMc`_!awbiFNoj)?YOu{Qei4Or(^b7bCHwyppXd zisi;VUFy~gFAF^5xfU@X@~vx?nUEu5r)QZ&3?l|X4wJ^twa|Y@Fecwjs{^WRO*pLb zi%vvL3^)TU=PEtuF3R}rgsg}dlanzGt384^xwcMC$raK}<@6Hp>BwP(JOg^OU^X(a z8$aXcdz3pGR-T@eC+KZ>Ij`IXR+BB#+e60(2L2dkNqE0|^cSE_zpqbCwXL;pg}PSx zf&TO7xA9v)S@H9d{gSitai)dZP1uJB2J6V>QxINOR*G*(XK)$e#nQ=%KT{ta zHMDcW2;WJ0?_DuhzBp8{EW9FU^j3U+)xnxro*nd_7cHV=%OYb%ZwzwxAv;Z>?Yz2NIxX^B% zA#i}r3d&1OT3+XVHHQL}kr03c$`ABGs%+qn@(qv;!^y=MpK1lfigK$7Wa%V9>}-zJ z9dVe%|9%H2c)LtUzt|X}BXsOkoHW}meKmPR89D1IY^==hS?iekhZl8@Di$cWcj}-+Pgk$vecM4`ng~w*<5%Yc{A&91V_6i- zKz1SJGaFDcVA#7ey}S>)iG2{fxNpPBuRNdgVRkb37k|D`|Br2Wd|^~GKRCBZ3^<&D zJDUhk-MejK#Xq6vFl+q?LW}oU_)5J{pWev9>4o7kDhNF*q#TY6v^3Ia5Uxeh6n;r-Vx+ zexEXQnS~EYceCm2#F>*^IkdX(Y4#WXx@~X>$FgtSHix9 zd)+fiUv^|@fi80x?yy@gbB8&4$u!Wx-KI5hEtJ$RvjoT#t7^9iL8{43WFU%83)I)n zE}{U)QN*+Zsp*YZqt?A9>Eqf&7{2{z;|SxUD;)KCSHpZKAG~Mej~2|B6EXpJ(fL3= zERMYo|Mg`bKMN)i0)#eB->h!E`aKf&@-?)I0S^z5G^mH=5Wo2b%hg}od*Gg&tl}y^ zx*SUv=abuXX>%aGj~R24Na;9KPU;tttm;X%zl4K#O~wp0lh{&H%J-+sNHbR#cPf%zUlMQl;quy4ocKHj6#@==mM-bW{a zJR!DGw)M%#F%M@R!j4EKBepToVW0nbeSi^M_*pV)anTc>;7HnLB47^*RLjvksZfex z!DhAFIN-tx#e3rV1bE9Ysz)$RF9RpLytrg1RG^;nUYLF35%8Pj5B+#SyT{YS-~8l6 z4qFu4oAin-6hW$^a)VcfZVWfrK}J*kUb+#VC!ttV`k6&_w0c781tmNR80jtH9T-+w zg=(_Nne|oZ>w3BDaR&kRK9%A>_RUkfN@QIU28+9ugChJNIIl!BThnbm;gG*zuSiMY z(vPFoPy%=9Ck-rh;cC70AWLZ;I=sGv66ouWQ)?RQv7J!8iRKS7Lvx^6^KMevaLuj{ z--N9k=ek|aLc*JP*HFL&3sN@c#?t{8MKS_k46)MN@@>_b-NYW96;4t-NulNn-%sLN1aq`I{Iv{&x`ru_!8e z0iy63;mN5IhHAo?6W8zkXGuAE-!khJ;XQ|cp!-#%MP_Dlc4=jJv$Rd3=qzSH_ zogh7AF%z@y=zq8!VIy>d()3*?>!xif(;0J02+mb(=Uk`w8>er6j^A!FQbjfu;SJy1 zVywAuYskwQN9`lJoV9pNQYUKm>vE?j<$30Y!h2XnbBCQ^9Ac&9qHo$Jr`GB?DJrIr z@*@Xw$qhjP^iSmjpE9HTQjlIpokZ}4@RG%X^WQ0d$SMvCc^coGPZ&g)-LYpqe};{A!(MY zYRAG*%#zxP&R7qiK9kUXXe1`Hubqq`leHv3hrzBNW9N}3gX_yBLL50h!p|8av2?^X z_f`s^&triom7U9$`6G=3(4eeLnL-SM#q4|O&eiFp*N|dA9`V zA%+xqJR$q?G7zXpitMtIRry4O7G}l~e>S@%>NZ8s`_&U6jLws+LQyo6FdaXUF zA#!3ztECaCR4lOmt-Z-P}M1qsEl0_uK4vKcPb@_HeO+RUs6?bb!;BL!23-Wr! zp|SGwHh?{`O=^%?)yoCrA@Mstbf}qOFr8~jC5p^5|9M?BhXJ1(8Y#JfuAXuexte)7 zE{d7C4zJrJ0QS%~;@m9jI{F6niT!kVDj;!q8nYm(WgMeo0AHOja9&21Q#1y-tk7gH z1x7Po9uR?C^7mrqih#uj&2}tMR;e&_j6Nfm1BEt=Hq0lW z9Vrt>wctljr}*$aFm~RWrDeQs$}7U30M-=6g_=dBJO(S$^l>yM5!XBX;~xxZ-lSE= zz>Om1Slc&*>4wnjg=m6xC%0=J`Hsn@;!O>LhX*ePW`7J%&27~crd;{y5n438l+*hd zTnqjsfKssmnyev=J^7Nj>c&)2I`b5m8+K^4kP}Gli31me~xKqr8Y}bQ$OMJ~Y z%~KCDCeI_mWrGp?EcL_i2zGI$+&)bP%fc_r>Cb1b{Vl5jjQHn5;($x#$;KJu*!=tV zFcP^!G^U_9zb-K@r&5iHMOKU;oDiYIVkaH4_1w!^i#xL0L!yTY=%oXwo*2D4a8qLY z{tl%XxGCsnUZx-TQv|NC1)?(C9}XjQGOk5`_+D!zWYluTwO=ao^3RZC1e?UE*{OMt zP+u^@U57}LP}@_`4CSU#dy5N+$DGOJ_#hisEVmON*DOIVSEdbppD-VF0?Ew{tF6tn zWH!;qP{zlJerZv_tKCy~X4DfDB zPynxtw)>T~BPnjR+6B;iLe~-A7k&{ddCmUueD8TpD{ZwLjlMXV;kHZ99vw*EEza~SlGY*h8*q}%3Jr97#VKvXnBbd+0^(=IrotrB)Vw6^@AeikvBlY zYLmocc+Dj4jpJ%!+*~CSJUK}$E}jjgUFPkQ{ezLFS!S`Qp$6!5MH!&fo)^yt)o5e9 z*XX`1>Ar7>Oh3FzKfI>1J9nxNc{W4`Y!Tg@E#)nXp`hwT++Zr|l)FKUk`N1wptq?^ zx4F}-mn`m6^X=4Y6N=u&5nep;!sevQE^))Pgh603zh@x8JWbq zYVG>-G*t^X;+QC6LH;LTMM-#|?(b&)!f~)74J|SLXRePt;8G zskB_L)E*cHokq2#K9qlh8I1nDOSqW-v#9zYK!;2BdrM_u9E~AYU&n!IvUWTbbRvRm z2r7KIl6f!)9QM+$SzS_|`_GZz^4GQcA1wVZ1Ww0iIbzdwf0tUll-nw^%|y)0YtNrL zif~^KlpKSoiW38sL^#=$hFFSwQB5{zU&osmb{D%2C*;0L;Y^mDHU$L=Q5@1~tG^bH zD%ND)a}ZOiJ*_US%QgGm+%>k5Y#cLiu<6+{s4>y!gM|Fm4|Q0OjHjh+v}M|20S%>R zz!IY$sRB}=;Bk{o*@>U7`%r>WHS^h3e29kW(!*Fc(3Ai~S_Nn<1S5~G$JA5}Dp}7V znZj6JZkb7kun~ghh78%H8&PRkY3+>0cN%Dg;oJtLnme^b31)*Z^R93;6jg!_y#v5B z0j^9(-6~EX+n{;~37%=+G;A`0J`m`=b?x`>GbG-gB!3zfC}=W--AH$6sOH*lichCD zO>->t3?SE113hqr%0cZ1&%p?teT!1H%7Cg%(ZFSjK=X(oc*vrcGirz9<~4TE_H6*~ z;@!SiaiIJvQNWhMWv`O-=cVgi+xRBF@A$7>!4bN)lzXL%w7{^afUa*?Iz9oxJLV;p z%Q5W=JDo~f=s=ToLbc&^Q1hs?B(X3vI~HPA{6wd7Si#jUAZULw)FBZMeLkuT$Dk#3 z!e~!1CLQ8xl^ee zYHp9yL4(p-Z4=w9i`LC3MMn=zR}x${O`xbwtMrs7UL>i%Db)Z9kZQqj^(c~I$$QFv zPnqc4FDOe}waaIL6wYTiN42#iw^s}g()Z^pgbUl+6vSdpOwc$O-brpNaj8?ze^xHR=>VS)G$HUr z<5L1?)Ga3?;0Sr(FT*Rx`~0$r4pi4GQmM%rnEz9F;9}^P%coK~ITNoqGr0wMI}`RW z|E8_Qp^0Pecxh4;FiQ2Hl~=#li^-o60h5eJ*GE@QIcaSnAWx1;(fbqn?Uck zL*;`-)GuW86@H#=Yl&^Uc5nnKU+grnXed2K3A(G51O@J~w)$icBKEo;cP{N^^4!$H zt39}uotOEHm-IyrJcBQyfqkV}BfaGRTvyQAxo&02QHvigGw$W(Dj!mp$|+hTvDbt8 zf(0Xd7J?6vUz36uYF)mpEcwzlMGNy+FWe!4d+p9^d{U%ezV zHjW4>8(1e=q{d9K%6*o=kPL2UeoR*K+}O;hL$dR&L#noBy*O4l=lb-#sCbxLdwpZ0 zX~@#fs}1@@A#h2JBSbcNF1}7}Vj@1Ll?N+I&%^;En#MtK0<0NnYNoLzOJ(>cE6wfn z(f;I#Aqi}%ONmr;?ES!6()4)m?mAJ&x0SqKBeAf61GNr_O_W zt84x|f!i`25M_v+kdR(JLM6S%Y@ugCT~;26RTh13_q4`5N+HC9(SPkwE}_Q&?*Vvw z0&jTt`__wqgYMY-Euz(ygMe7n?t`F*8(`aaFDQMxobkK-ZdOLlL+v~CtquP>GR%gS zS}~#^ny-%bx}anqUm>Z=7I-a}Sm`P23wVAmb5l zeihc49A5=lqql~)F-_tdlqyyX@{v&KFgnRR0jIZb!$H0RR`};EBdO7VoO`H=D^RVF z`~+kpC6S%!VufvoYB9NMyEHZixaM(d#3O#MzZ~R^v39n?j{`(%19gNmM!+*vOYT!Q z!jc$vL~)2ks3odJs6}K@UX5h?cU{`3^Zo8t-aAaz1*Id3&CttYnunlsIBIJV^UbPB z&bVt7I$OO7<38{uFCQO{{n8bugXPJS5X6{#R<7p7m@}+t&l$GR*mQG$zd0Ci0$m!w z8}Yo!Z)(ZUShC%Kr%QP44>sRuw;rS!MPCeyAZnXD5v6Pg-BS#$(Lq5EXo1&9O8zPj zF6YNG7V=l$_zA8H9Dn3ruKoTZ!@|WvsDq@tVBW=O(wnm1${D>X5&zB#YeEypaL(zl*S z;gG_%A+o^)Cd{eWSeWHE4#666#Tr0k(N5u&mlfFJ=Hz`O^WKuzvH{EW-AifQ!p}=6 zT!BiIp9ZePG23Y|jX}oD!)DJ&c*IkW@k6$ydY<_a;dvLGNN?OlG!Sfa4;JcDx4;ak zPJg_iYB%>y`agWVWmFps)HE1eio2(jV#T4jOG}FuC@w*Yv{2lG7I!G_Zp8u=cQ1wF z?(Pyi1j*)k&$oN_+ugIjL&6CObMKuyGq>*bfvPzn$h(wvLfj;B1U+pRUbOQYy`T9V z(;IHOgx3j!p^QJs7)alcy~m9pkjM5-4N=gL;wS4N?!k`0mKE_89-O!{MD_QFf^%{d zrGR%a=hWonvGEh8Ff4fA?D7kOYWuYM30xOSJ&QF|TD?WFSHd;e`#ciiQR)bcs_zeu zTMLX57Y7(dKG%LmJ}0uZK&V!nKvoB(y7V0NnNoK}O8FJZ9*w*)JGX%SP;)hAfFPjq z*R@WPIezTe zC|pW&s!?+uGh(R>goY98?Mo|%jh%kIq64|N)`z`P^(uj;x16zYF$$7o*8x0PTrCH;}Yxq!6In8z3p^KWIOCRJ<21Wv|B!Z@J2Xe z+fZXJjZD)&J=_f73$MI1gr+x+6}M*M9Boshud1KKX-#tf?HBw+;cL^Ix2ReJ^#9U z*0$ZPBbXS`3^MH~Be+xb%|`#@J#J2quA>}au0#!pk_^;MDezOJ7Mj&He@GFtvo9lG zt5F3DMfnC822<9c`YgU^uKF(Qer89s#UI*Bf_E-G5&eXfIq6r1f#hEXdYGz2eC&V( z^xymZ-Yk3M;Z&`Z;6C!7Si(lSQ?>L5H*|Z~w}%XG0BIu%9doDG+#f^hcj?GN47Tt4 zl%YLAH?Xa8W7yWks^`O|kPmE10QP*$bFqCVy|FI+M7!>L#l_$SGc(Xq*7yX`18jU> zZY;3(!vFS-<0JVsfkbSVGy>1WXY;EB;-t{?3gkb~xksP&g%7h26Tf>x)|b!z+Ho{f z5^c^^M36p+c|cUJp@0rdBm9$QV&ylEYMZd;Qo!6EmyK=y{%Ttcyz>S4&R)^w zN++M?*AV!z4omF(VT2u-w$w!pKf@QK{g~!@?I{?7_+|6}Yya^p{^MHYQ5O4wZw1?}9iy z_JyLWok#)I-}hlJvj)XE`LT(wV`IayW%WFXjH^dM=%$*??A>2J&U+}vu8j?O=-5;-WAM9r4$l=Td> zjL%3upqE%u!HRqlcm3%=9)V;{HMTz|<#0@icL+hM>~q}fcK=rc z5QgE`pGfZ>1t*R!eMz9|{yDjYFGvBZ<#!-7gr8L|{?L!2paS*mW;qe>k6Ql*v{3`- zkJYN#>El039y6c*szy1oed5Us8ykN@SRP3s8n4#Bo<@QvBx|M&9>y2^!3ck_VUv6E zLa8tZ6NYn~@tUHrD4&{VKnaVR=f3k_fO@FEnrbw;7cq?imIe9Cif~!3^M9Fx=CD$< zj#o1RAMyP|?s&j2w8YC#(nscxlKMAN&G;j(*gvPJd?o4AeM1TmeuZ9J1S{i3V^#=b zVi%f{spFDjJsxnPJ!zn$c)gTxUp67*G#W{u8>?UN9kX+W;qG0pNyBRet52h*X|fQ& z)T0kxaALA#BsHe;Mn?7|icj0+iX|*FfreER#fAF%sQbJi>oX(sW4*IvSb`P%Dckpt z!{9d)O-yearho$$=~qX-A@?+DyPdsR)@=PbN#!%SZ;uGUs!qrHxl+xijmr}ix;%JvB7nZI%$}ts5^e1PJq=wJ33FX;9*i(QinT65+%Lv$ z1u6j`YRrsHp7XIS5)(LY2sSrG@$St+`3nQbXWFIy=Y^3Wbv0{I3 zZA=Q$i7Z9R7olO%zDxUZ3$ThGk#Sv@3N27#vuRncxrR%++tmQNIYax+)lCUTRyxrd z8fKwa*K$b}o9q3wsM4X{M>k8OxFhu<3$=G9sjM}T+>d_c6hJ7{;ZZ0|)?#Ii502lt}Rv zqDvL6JLBz>v)cgI^TDk&et_V#Nn{ z(hn1#QE2kjNl$uW4yUG5?A={VjDlF0``qr$C&AE;AB*B?C|`p`#`6-7oxym@S};E& zHA_vO(cMdl`CWdB)NHw;{_3dGoNWq!aO6E%}W<@c;$%2PTO>>O0IZ z?WlZS5UXr`?U%L{mZ;@@i$(vlT)4i#&+UYSg5Y4CfJ#(T=6LO>j`JeT#lp0|3mocu z)UCe)xj@sk;}GZAt0T$K;svd=O=oZ1n~woj1Iqd)teZ90cq#1XsqJZZieuyN8PB6s zwtN$mqb@%gWX1g~7+`y2#0hX%d$ndELVNGk@+vnoF(m5*PqUQ>!4@c=U_H?~@>iww zt+vfsmT2>7is8i5Ag!ZC)3MW&+x$kWEh5;q=AP7h#hqg`6u;*{gNfID)FzriGV(2r z#b9*LMo$pNqb2sJNw<6$LC^26TAx0}$F#N<>vhx_c@FSnn{=4t=*%XY-(2!n>T6g* zupq&0$-9eXY$GJU3^FV-NOG4s7|=5@jBYrtfLQF)oGf-=8Vc$B`~?9&d^`EN@_NI;Vp_;1?3^<@@(`k8=}EjwQn18xxyCbds&WQ!EcN zj;7T*jE7~~$;KLDu%Sofr|Gabq3w-LmfCfmC=}kHbyC(PbfUGcTzNHzLfgjahUJNw z_IJS+ckXpVt#xt|-saLdVhxo3EfvHF?;`RVX(v2jI}F_qc0~FJo9?>U?jkQuQkQzh zwpLq>?RzkEI&l8Ty5-QW1#g@#+ zqKDHYzLK#-3lG6?iX!^>oThA4G9*Ihx-hK9vcebZSuLI)4%*+l)8q^t&2UYK^?~Qn}@sTJPy{34nRs6yrm~Mhl6*5R94mm8|Ok+ zFAdn+_ee~$6$hCB{Jqja2@H?Me*gJP_$ODg4saoR433P7O5UF#g|LXrgEAt8_gKg6 z0rJGuQ@IQ0&|7uk;k)S%QB49R{*TnIEAE;Ff z=b^d|sNH2KP$voI%@^gQdc`jIl-g?n#;7#f+0|#h1MXj;MV`E%Kw~c0o$X1T?_7+k z?v?4=uCB4SfX9&&eiv6}#`cH{&kpxMETU;yA9f?6p)$x zNNRYk$D93nSHPzL1^W1%D?ImmvD?3v8yu3B#Z&=Gf7ksQr>o1{SPuf?SiNxG>2pj)*2ebx-t1T`XO*WVb|rngcl7o!n&7v_f0%TTTX+ zH_16AV=X^?)$xu*4crx^hc=@DTs& z?8W2@kZOaI)KRk{j#Td6sXDu)Nvb67;VD~oFx7l=c!#a%&P7j9ySgJO0o_te)v|8B z*SXGb;6jiuom^`N4i=&C3xLl-ILU3gq(Ajz9Tj@LH7~f|JvesHH^{?m_fiSnv+b48 z0#=ow&gMPVd3WY`PG6h9WZYd&2d#sI3&VLQ+yjoNcYvNE2kQr*Uw54JGtyEF$F1pr z<32x*YN0+$!54x&A1}fVU^wm9<6WCE^Uo24>tK4IKa^$7_n3Jq3bxZXkA%#c?c?$F zArFv$FtVkj0(K!-*1VsX+wX2|J@;e$Hydo`C!9u&ba^=JM5&U7WIJVXOj;fV~d@* z<&>v&=%nXD!Q;8TlT3fp=p>qHu?WrzoQi6{YPFX|Mb>Q`Gy`P)a<+UkxL#rQGm0lp zsd%SaGr#1>T*F$tmKs-kg$zClKB&)8JO8R_KohklTa-lR&B{92CLl$|$0r*eS#W0_ z4D9XoAtKod*)UBJMnx4_;RnBPVY37`w=7P&EO#$1X25@clCd;g_Cn<~H2fDh+q`1}MWsM7vbXa?fY%x*lt@7D#QvdbmBjXuDV3@*s24o$)FR;< zk42T{9Syr?=rSp5Y)?PVwkwS?O$-j{g0iPbOhY=9tPw)REDtfvpt{PnE0`kt3diP>#*1eN@JG~L(t zPq{x@T=vYS`oE^}eP>uP@*yUtRzL66%<8zZ_klhS!M5sopgqeq+xb`4(1j-toC7#a ze*fYi=(QTKm6lM_5tGnJgv(XBD&*m;MLzt>=ys#SV=Mn*jO~*)mJRctWM17L%gDJx z@t}NY%!6I<@l?r&C$#&UF~M^kgD=z`t>c>T9~yEbM+p8;D_Zg&$2hH$#&>Y4RC1yT zfIU9NQI&B_10XD_T`Dwy=Z@w21zuYUD{33Gglrnl2Xy>(R zB!BYB2%yM`Bg64Jsek8#(2n*`BuY~a6yXoU`x6Zgo-uaQ2VNiGd>uOyWy^&RnVx5A zR@W=Y3w{3fg*TRU9o6v44F6d=ni^1$6K{@mvhn1SAU4Rayuqn_JjJ_u)@9L2bto;3 z0htLkeU)Y~GB_X4eG~2frJ~B@O?M5R24_A~(0d$Ui^>m0!Qdp*1g%>tE8dYjZ8@FL z-y~~Fj<&d{%1*|DfD~kj3N0il_|;+EQjK1oIw`2_6^TuF&`{rkZgxj-Ow7!2~IO&=A zA&ZcFWcniIS{G+%w|pobaef}MUZe5ZuTY_5dKT8zQB~-E4)+b9My)Z>P#P*00~mR~ z11#u~07hE*YeKtAzTkmtK0C*m<3!tve)&xRP{tnJXsU~b*93JZlY8kIq{qQy1Q+VT z^g<40{jsWo3k~1N-B0!6V(=?IX&J^YWsuAyd@Jub`a8e|`Wf`IK*d1*A{_53u%-!( zj()#y%s%#muMZs&`EFQN7W(H;PqVgfCRW;U9tcm6?})3)5aU|Xv5fi@D--=u(#MrB zmQG6o3DP+dE$RUqL0GgQO&mcWjOVlN&L?rFJYQiNkGbhq<k+MJNR)0{LCxcRuGl=bpBmLw9vS8&Nz`eUu=- z&~a%58PFHTum-+UZAYwSCUpkht$ER(cRb;)`9I{s4mxz9!&o(&NWdlsz}g(726c10 z;&`OIuyTE`h1UF!Es2HTHRDpzQR+EE>(6lP=ZoIN=DXgnZ-wmps*Meub{xeG3}|XC zhOF!=K{2}{6`xFW6l^8X{QRVlSoVq~elP||h*XzSNl&7ZemGI3A=?RRZN=T$wR|ba zOyX3F@*$c~&f5T;Vz-}3I*tjTFli)G(Ec`eul>iKKYP{qz*}{k@JMK}(8__78Wj3F zsGpWd$W7uveOe_V+lbAR@ql49_ejV8 z{b58*cJjVld^qva#C0w4sFf-0C>YlEDy@3EBMt3?-|IDSs${(HVOC8X$78!b_iJlL zf8gJGg%;YIVT`pLHK?;ka9F0~it(w!FA8}(-8UX)EepLNb2O!6bnvCgjKLm~tG)3& zFPf0RAn!tlu4P`|Rt&n+J;tOQYsRqd98nCH{jnk^BWx^j@n+E$CMIT5)wT?1sx*Qc zS#TLU?=Lxg?(eNV5AUrnHY7`-yz*;TrO=HI>kH`9J~TX_8&}VFC$KG;p%YOV(1GWF zF6jYg<)gA<8+B{0hKudOI2n9DOIZPzsJD$JW5^Q-) z11r1*Ped~vH9&kLnz7wesj0LWw?7TN`~3Kppu?ym_9_+YHEtzesOpOPuEF*d3A`*I z4);g81O>}ObsCjC`L)L2@8b)y{hRS$V5x0Bi^C(f?UhMIr^+r9Df#(rmzHN&{)*Y`VM7Q`dkx-%Gn2R}v0ThOy&HtyEe~fkDYOMk9$M(zH zt6krK`?NcU-T29qTK2y8tb=bh__;Mtd`C8m2N*iVuq#8GNQh|VP1*IwlbY#6JC7{v zK|jnfEAX6(J-C6&3x9{|qL2UbdsSAmn(>r=Tj1!ES8fKghhV^QF9Zh}`Zd1+IPdVR zK2nVmnM9(rqj!;_nsyi_pqav++l7RAu8|YC{+1D892`w2F=Zee&HFJV+R1m~t8$1i(YZYC)%Kjo)9bTm{O#&p-XArSxPTga9!*|}I2Gali&>tStD~hH%kB*UfB1a< z*s|<&w@51D0;eLNw<#9XQO(Wdd|k@I$j!%4d%+i;Kkg@!M`&laAB8l9o!fWs{j0zT z2Ps`O7QIFbi8^%2q>Y=|;Z;zC=l^D-jS&}~665&M6-S$OLWw=`7a$_aPR9P3N0c4! zV?AFFD&zW=7^{!t)N?KMg5pkvtYF(Sd&kKRa-eJ%O;}La{^5k3Hay(Xn=ot| zd3t0$VTOTSh(7>MAv3OeuBBN-)B!ro2*+0cNol;T>|1CnFHc0W5%*G>$FoiR)xSNN zyDn^i&*rE`mc&#fY1p#k8Iwa+aNh>b^1Z$(zx&>x4Udbr}4$@X2-ja zE9%F`Jy#wZ`7cT@{`h)qO+JicJ3VhA2Vt(!0R2h%yX?WfJFS)kh86^;u?Iz*q$4GR zKh%CoRN`Vn64N{D%f{+RK&oVrHvcV+mE<$zh~{VGe~^s;A4M8IPX0#(e=SMp{okoy z==s8$cp#k?RQI6i8daw!gCm6V3kkp@fSi=c2!aPl7~^(Mvti~4j6@N+53$0_ zRFK|z!Z(c`i$+O0Yc2%-rJ_dtRqD8s*Lkr}&ZucEfbKCk#F7_(&~(O7a%PQ}ji)kJ zJL&R5YrN}~pW0cRtl<&gCYV|x)yZG{4m29!jqeD?{9dNovS!+@ePt!#Zb!0pIHVwH zB1SrY_>ecMJ|sXx?_q%UWzfPg-RlB01ku;v7q5 z3QaXMeJ1vL(9&i^Qy!GUhpmHVe)}@TET4LgM&1-BG)B_3$%@98wQV~AT^&+&A8%gTq}Ux$>~UZ>SlFt z-8Z7q4PBGIA^lehoK1-`Lr7Kti|8yKHBp}gN`q$F(5zBL5NDdb&-3xe`pW3roiCpd zA5d}k;}_4M;Wxl-l`5H)J6L#_!bjQ`Q{97KR3xw4|- z`N)sXz-Nv=7(>hYlGmTmh3&xa39jKswKtv_!(4nK*@j-Bc zFtqvPzO6_E-;(*zTiw*c!Bh}n^$}2+a{Z{SEVlwGAi&OwTYBSNeH4qt@OA`GALtgH zf+*p$+7Mo+aAgIVL0c=G;0UgUtQ!XhWntu0@n>l!K?6^>u`DqLi}x93!HYzAKryPm zF#MoJUYBTIV7UzpTj|iVxg{-%J(0D0ahPJ5U85{d>U2e$Cyxis^cL5Cxy$&3a1;QG z6<@+Y-;1C8E7hd5U>({;ciWuZCktGO@x^lA02nuwI&nDH)o-*rQoPw(y_ib>=Xsp3 z^LVq?=Xo(6w>cfRHYB|6!_|F8DD4yF(1oA@`Q3<0A+{{CrO1as37t=S96stddeVLf zF2BdvYoze=Fs$a{9N5{@b+`mXp0!-}39LC>;*q)sAUimrHQ0OuFrISy~L39jUM}E}h)xNZ8Aq*JqEp(X=xHMRDO*OhC*qB40QY(Hw+r0Ho0& zY(Ta1^qnM;*DUXQmzQxeg{!)UNx`))Lk1bS#lLmDI#SFrs>YWrqu#NdK|iV6t+wMX zH&v1cta)$R?eHiSgDDCtljfOfmhBAc^?$nyXlSOz7X0{3#;qnR>sR;bxj9V((Gji zzDdfWDi{}NSIf7s=U_^>bdvp`hF!o1{Xr?&))B;IXLq`>bAszZs1EZ4zhawEl-W$P z@%DI+h5hN@h8Xt}Xs58SgNS%HCOjMvjDf}Y`X#y)gVbwXbXe;viGF(Ge1^AH4A}VY ziXY-RexMZ_5s~F3N)L}?1fmj%_pL7z`>heYR)l$rcK6NF+%~%KdW?P1)59zEPyz*i zqP<__D=Ts$AiV4z{YuJ!5jCC9bRfTb>NWp6 zRS9pzYV-az@rv(|?C-P1A1SLvgQqrMmynln8xtGNKvx7O4*BEq$M$qf^TF~DnU2lA zgt5SH1E)i`+cOtvBH&BFS?klwv23yED-VW&5P>0^?+o)%aXc#nkhIwG>~7z?tbR1g zGhRTi+=;ADr#xP%K4Dgy{K0dZ!;r6-g9UYDM)9qf)wu~~`yfO2xBrndAXNX~+=;T(6698PEyCAZnV!>ISQ*F zeEFn@qx_KpOka~g*+JfqSY}^oIW{YOO_%+m$FDqGde&3=Y ztcFb9IJ6zlC+Ml2Xy=%{-%AjE@ADorw$2@o*egBHs&~PfZAtG#u-HxPiqifNVPGaM z)EfjJuoO=;L+;$X>qs)h4Y53De-h~$v!FnNyW96`RElTjmCEdpLIqJCS;*)yBeZ~1 zzIMpLU94{UXF_tu>nXc4%BJDXf~z_WNE#!g&YJg}+|I!|>e=@J7l7OWRx$=*;ljk- zN7+Vm1kv0Zkusgy!J?0eymkw`n;4^vdBv2xVg7rcCjMI%UVlwY$V?2hOlH<=$m)|; z1{leGCDxfEKSJS+LgDIL`Pob6T`l50NR>drrAA_j7c!zOaLtSSwR}`5nqUm&a^##* zX6smad8r*WJ|Y!ar-T8ZRYu*2WX3~tfdp%3#O%5;>oql!*y^MfRyR^5CwrBZ>Amh% zNTsl5WM{;idtudU9xXZ=Mi6`--&4d`l>b@)kJg-^KEKaQ$__m=lMlcUn9!&H*{URX zZ|})oUe33+h?8*H!(N8td>3rWdfRYLWYU9N9Uk93eRo)A-r$LnjSnmkEH&cFcIz*7fhs$q^~5@t*qMM z$5yWq9ItqSMqSQI417BHQep<^Vyzyw7%xjDyKXIEQm7cy-OR^iX8k<^N(3^n_$Z<< z?tiKGqH2VnvxZ&HSe3Cn;5Svn$mQ36majM$=-WIhOK;Mm6ZV2anvMo<1YK1{tAsJT z4%xU=jFEQbj2S!7_mk1H7u@&b8FKTJ`vnu+>`_M)xwdG*?O-$i$~W4J)f zv?M!Wa9f}I-Fetn)cD0S_=hEK5>?K-&+5Wqby*XG~0D^)G4d$ zit0?%mu#O(FY!!lKrFi6gN|b8j@Q-7;fpcbw-)Kz;9mY@cqs*{0g^En{r^M#JG+uw z#4P&*y41`poJ$3tOROiKyHWr!YYbWs!1SdpVNB(vPfD1lK2kCrFIMfQo+Lm^A!we~ zs1{u(hO_{_3dI4tFnmbJ~jKM(l9e%JNI zFcn>g1+G4K5$$S1F4dN3e5vnh`xo{+IPZ#a^ZCk5gyntS8HsJcF=$wfUlMUCkZ;5R z&--QJ`LB4t=gR|2j-f-V_0ez4nfWwN`|0sXv+VKAH2)h(5&wwWXw~2AU%6EllPhCJ zu2rqKa^PYt)r?xw9;vp&J7Sud|8?rWTbI6}IB#!@1=wpApn7g^7qG<;v-g3xmDM5@ zm7K$1dNP~+R44&1_0#=Qzh8ZJibQ3i#uh-2jX4RZB`M%9N(Q9%aLF6tL@@VT{^5}2 z$+gDjG~-1Bai`ui0H9DiSZ8aH5LG5pqUT#nH!RYC9G@h>Dk<~z7EtXQ6WAjL@M4S0~a~c zP@O;bM8pva@%VaLpQe8bImOTj7%sT-8kHhF8E1jx7LaaUT(w{JYSVt`Xys>d-;7i zw!?L_Jh+RFBm)H+7^Es9V|jYITT{967)Cv*0r)yNc{bKYriapAeDMWVSqRN@j<2n=O|rk_uk!=;$Qx zs)>2|H-)jQfPgxL{KFW#qPIOcMe2YX_Wd@ic&K#OQ{Y-HlNuEb~Lpl z-E@hn+&3kD6W?9!_Q$OePk02Y)6s&)3iy`u+5O_HQS%j9<7|z>@fl{8)LLZBaf;c$ z$TyY7`cZBbM-Y2A`nj6w0l2nc8AvNE)Qtm)`AR6k9`=g?CG?pSjn-j+o`(#NE$Fiq zo%GE6rLaWB+wE8jtmv88M8&(!{sf(0^^}T)Z?_%6q_Lm8uT2GF>Fs)){^sUg-}Y6B zymLF3XariT)AcVVVmaNNhB*rNnM@fcrEa-ct3j|X8MDOQ6i^1NKUl|YKN_=MKakd! z@&=ie`%54m9)(GfJp2DCb^ia>k8G^BNY?kf2CPA&&mJADNR-?FF=Mx##MhruOmX-W zXurizxwW0=+8p4Oqlar8dEmUMnR$Kk%Yhe9xS}nLFvtGzg6brjOd?|UTegWn>qUlo?tGIhSL;W@kHj=1@ zCj_t`!@d2aCWR9LMmKiv$NNfhrKJvBO)yRuRANfu3|rpY7eYpgn0KUe_buG`0d7Oa zqd}oaE*@!T&zQcikPZLfbia#-AAx+^&;7RtsTW3vqtNUEe&by3Rjgvk$yDX) z|EU0>+xA;D#_4ItYV#HIKg(^04>FW<=103z=4W5Av!i^Bz;hvu|M@dGX-B~+D~)Jg zL(TFrZa&MpxVYpclcYAApkPESX+nAeXS?v#Rh>dcLQe4Y+fMGBF)iAUk@MW(7Nvz@ z^X|Wvc;A`PQ!GiIf1yBXQz7g`qh9tw%p)Snys6ARRkhK`t~f5HPdM`@AG*#68DP&_ zv+fCE`fdtM58oeITR!Ytn+@}A?I%MGqw!;~&VihFFRWgUul4$j^6JUy6I_hu=gu;8 zkv#Gfsi{X4|7QCAyM2rbAaIgg9?BT9w zhvFz1^F`6GyHO(N9jX4gyz^qzIg$)u29(sb4(N^Lq~HZqTw#3R;8G%wPc?H;vq}PV zRaRbO(;V~CY!lHmeR8tDDDXrHis=YoKG9AsAJHd42Mzo6=%NOAAwZ#B&cKaJP4AQ~ zl_ZV7Io*PSNcM+{Jo&z?;CQ5beE1_{nvfS=DE?7cKH5W%9aLuOCEnRO@Cke;o68_M znK@g51;0KEe13vszZ_@iqC;KETAT0tM+Jx@%30XM3sJ-i3EGxR;v61G`ECm-wS4il zf=C{83*Vig0@Q!Wk(aH%b9|7!eOcmNm3dg-`!Ex_HA7!|F&vh=ReFwyIq!O6aOk?F zF=%v<{bNtng;9tCz=cQ z&G90i-#elIKZEyz}BmY7Z-*!FU1990flOV&Z5G<=~`QY6o%L}uXD)vUL zMI8&B51#q5)|zi~E4(f?3oRBLeXrI}R3AYlZAsu0)T^Q0MzjW=(F}$296l;WfFtP3gkBP5X@S+@ zD_HZg*$JCVG=nG|>0n%7VK%-FXT>{Ndj?H&3u1DrfQFG@7aNQ9B8#0sap9`>)3*)H zPagzmJbkMx2jSXyeyJ9H8A#QYPGD!IFjB)GbAsPauq<3f$va3sY^d&b4wvj3Z3V4XQD3RXA)jiLj;Wlz79;cO(!IP zdl_3&g2vOHghm#+@3#H5zN#Xf{&5otbE|NE#y8@FjAevxj{|Fi2TQ4`awWpss7P|H z#s&L zOn10$$N#iKPy0g#Ejp@?;5+7By*e1`hAp6zk@zN^y7^)5K1a6FG0oC>{IZykO0TY_ z(exN?IeR`5Er!#7npZ%C4EuQqa?`WSC${Fo<2NrwKcCW~it}&pGm^S}$sO?0ei$6e zKFh!Eu#gZN51a~}%%bv1i5~g~)APm8-Ub>OIWxE(4>n73AAgH>8~^%92e(*#!W&wJ z#0}1skJkZH(+HhnyiZ{IVpWvMhw$&7_?gZ%)%&U*JcVA5`nK;(re}?g;d8SFtvd!n z2XWs(PXF*K)v%E5xvHuvg_5!|@m5`Mut^L8kBj1_Zp%=IUbny9@7c4)jn|Q_c zF)05T-Zd&AAmr-d&D}@30NK5`*42L)k7besnd5|8rb`H6_}yorkJWw0$-Hk5ZX+R} z1%L$6t(sMkr^R83s5a54#Pn)UJJ$KuN*lh(qUdiW3GX7b?ngO;E~26ooaKH8bm94l zCVOGFMyA>inRG?fEheU-a0i(%kN*VU|6=ZwP<9HpPJ!z!-U(}ga{HtxcP)>#KWKu{ zU$Ak?Nn1w{P0(eeqd3|VAo5;nc>*5pVd154i_AM=K3lAPkGsAM*gRz67)YBUW zrdZb2ib!KPl0~L%Y-~h@*CA&dQ#C9?hF}ylc$8zCNlrBz*WZE53{7$XcfoHNtN`+j zLDOV28t|=ine{EIRriQl9`&sf)#%GKMygU0+$%mbi`$tm0i%#qlo}dXU9>Eu(nXZY z4i{PK1Sycb|12jdB)uhB}HdKK!>wn++Jv^e7)W(x)0KWrVws^l^?{H zHds0Ty=k+=e$}zBVSck!+BoR=!$QYqBKHabjV!2#^;|g*=@&@?H;rlw|25xT4)9ajR$wnyU=mu9wG=t0c=9b zejYHJ8qUe`3k@@A9X;3G?Y`>agB*m5N?&hHVgY-Rd{3A#$cvsOYZk<7rx6A>Eceqa2 zhe^;4n`Gj3I$=XE`DS$)7OkW#m{ss>Y%^N5s$LY^+T;` zzxHTHoVCHAL4?p-Lx-&xVUs>&V*U?ZlY3SZp9`#eYHOxP(7- z4!tV#l9Q85?VXnyt`ajqr)Rwy;8^mezkX%D$-)7&YSM{=yOaDgrz67Y`9t_kq0=qt zMrvS9Ku6JmqeK3}2T=d}`&S$SG*0Y2A|41YiR*rsg+(7S_iCx;Vr%u4g(u9Fl@9S% zkUwd4TPH2jv?QdGBlTjqoSKb|^WFW_8%}OE89N_57Bw0yj$>-*m5T!Q`8n-D>;%9g z7|ZkJ%sf8h+SprNZtP1wyhBb&u)Y*SBlH#$*i>2t=*&5rLxs1taR+CPpf-#A3oCr0 z^d`_-~6glFxD1L(d8LX z60@rMRn>bW24^tQ2#T@QH9sD7Tj=y+LVk_9$Eq?RU~%7ScYFD(GkTlVdRnX{1IOkL zd{%;{ZC+mrf>T>!NVDag`^j2K_qL>X6K;c`ecyA*cM*uSIDyc4cYaE?$VzL}?>71G zF|XCg=?ktDZv~IsJb}qt-Zs*^Az>E``P*Rz!FLzPjl+MW)5Yk3qMLv6W9R=Y1pb%d z=YLaK{$HB{z50=KhMixQ0Dm#l%6Nt%w%x&rK0S`3+1+mk<}=l5N?`i^8KT{~lF+x9 zEP=6VNBh$~wCsHk?DOSjSxaPP%$7%;^j0EL_%`wLB~?SXzM>I>^PZeBLkdaR2Y6?# zb=7+%(+wmghhJbT#xZ8P$MSqm4na3F4e5UN*~SG9q4O6s0<*e>`~=3;BObpk-wtLE zHdgQ*{K^_N^(~%gAL*p&RR|g%EZ*zcpfh&)Q6n6jo?TfXxK_S$Alhm$jp=(PfiV8J zJ$~QLW;N3oA7Op!++JPekgCV=OVHdCRA{SGS*%>O8|$LWkLj;cQDKO=Hk~?4JePij z^FdW3DTycyIziOj*4j5Vh>~;Gxd8DKVDQ;sl(^nN^SrJNgZ3xJZC$W33^2t>DGU)t zCB=E1uAxZ#134iXggg!&#A^cV>=eUzq1y#SwA7(#P@?{K!LRrt#|GHeD%!1i`;;k= z7C^>-B%cIKaNIcaS@*rvP1UGT1<0%bf4xv*-JrTT+x#icl6^BoVpe&h-Dw^1)FLi9 zJvDW@wdmC(2bZFp?xc%Wbz>D=X9j4a}{E$fQj{z{|}Ha-_^gB zJ7pvo9yME=9P$bRm8Z~4OWu{u z0gizi7|kI)XNRX~mOzlv?QODIwo7msy;u`l)RGRzG-Pz)AvHO@XKlx|Yt%Iu6RXdB zMdZ5qlmaCXi{JpuwgLn7acOz6`&&M97TxJPDjQZT#RWZmCbpMENdB4(k}ChMe)L~x zo`2UGm6Z@S!L1G(*FQy7RdyXt&<|}6rCMh%z6i;H7m&KpJ|343JDf?W#TFkw(kMku zf6`2fEO=BP+v&%NGi_mo1oTjI-eyGSJH=2iIxZ?};s<$+n_~W*LJIE#EUAM)f@~>6 zB$!BB!T_`h4V8yve^=0lbNSbs{kMvMjh_X0B&%^FZw`zsV;5-W7X45{@oA7I0W92` z<7L8ChxY%2vG)w7`whRnw@z%mZkN3$7{u77uF$i zdv%gfARYCITTqblRj*V6mmrzj#;$4D(09Vag$4+aajGk=qha@>m}vCEMw~1G>3pwm zxl__q$i6|(7neNEgDCsf*=_9>!aFoi;5|k{{-$K{G_Wu$Eg87;Pnp2?xbLaN6gE}E z%86d~E{#HFtOj&*vSV;6D%5_yNEe6FIJ?!q)yxnCsQ7zs+fhHRotFd4NRE_6z7SF) zoxeeG8CDi7&>7F$U1}4IobZn0p^aRZ7Dn}y7|9gRgo$xu;+@IX)=&lnhMC&%V`wnN z50tHkaeMyZ8p#xf%wlhM|Mo<>7d0dxp?aG?DMY-*(Yv3ef4IpNcLTU_a>FvuA(_ytW_Hi=p+_`qS zpw1+Y`S3^|e4PlYLd&{~Ndl*kl@z{^KtpQ*2W}2fSk)L0OzR}V8U(dSdiBCxaETNd zi(l|u;}Dpiz>1pb*4LK`Kpjn-C*zc4qsE=E=y*+#a}F-D91m*A?SPW2^LT*Q`e(pe z6@Vv-E_j=_H`##Ky84G&aK-<5Rk0((>ce*S-nI7fY$2KTNKV)VSigyHTxn=1F)1x{ z(n7AguaERi2nQyvyB6`-(|l}gRyLr3%fE8#zSIy2e8Tvvt;vsI?U^j6VRN7q2m$y z#h)jrP*LaD=A{*yNu#{aZASrCi>uD7Ep2w<>E8mz-&5H;4ThxU&Nny4&-U_E8fZz| z;moQB;(U5j!&0U9e&^tOswVr&jR&i+zk6~`C&gi!6_RTymB8(1iursGwo=;%L}7wDOafb!%{?8rS_EZ z>k>B%cRM*qxfKTB%Mbnk`Re#*1J#*vX0(IN{#*$ZvmbO)`1$8%AkM#ATHU1hi4);42W?DPZAj|I_h*jCxv&kdeOI8u% zxY#Yk+Z@T9W@hD#sLCa=9?L`55tQq%+u`Wjx+d?J4QJpm#0a)1MBTLljdUlO6{B|N zJd0K^pRY)}0Bwu*nWim@=z90>i&`?$Y17pr`z4z%WDE658kPjF;c}W|1$^#^ol(_; zg`FD?dTe4%!FJp2vVc+OHIl6FN5Hn&J8is^yEq z3r>^Njr2`h&uL3S?J-m_E|h?N)xr3LBV&~rIrRIhD+#IqTJY9mS7rFM&`2gfc7X2{ z@p_~jSdhr?Nq;OqcI_(&75$o?d4krF1K=un_DCrqX5C0>dcncMf6v2DEx29#xmr8P zBEfqJH|N$}MQJ6V8}3UZxesIqTURD<<_v*@ zk)L$VO4q*+NAN3<-sGYbke4)t(a!q=RYN#iT$9#txO0CNzn1OdbgxDr90ZGRy9T#J-DG2Ig+s zhEkP*UY`cldLfJjJFH*tVg_$Xw0@07OMmGq3{Gc^oi^nUdS-aE{mp7e_I~R(Mjepb zLh)UVG;nMoXj<{)y}dkQoE`c4*um{TFBy(;_YA)gkoDMVzWr1;3hij4sBLY`ne{+k z@e-BIxP%@;h|FyG$!5=Oo|%e9%&wBdD1CNSb>pZ$v5=Bx2wI>^-QO#SJG=dm@o~uu z{-7*!Q0MCd(f&hhVf7JfbkF?HWR9!Qu71`yg}Pc`45p5u)*Ck!H}N5Vt`cRM&v8GP zUysQd;rP{)eYzn7HJ71)&I3E2fwWC)-T`^!9Y#!RCp#co_5q-x=qMs}DFSaQ_-7LM z9JU%k%#PE$46+W40DL8ndN;yay8{aU+W|T6%~3%$ZS7C%+l4?(__+CW(2-&JZdA}q zuE}w3Q+8-|K6gkV;1&_q7R8jN%_j4>A?oejVm|fP1%CFU)GGvgw2SvQTFB$rka%aS z^Vs9z&B0bM=sWc6T(!Ffem~P=g1Gi@(^{*E9Y&_U&t(GDc07pc8jKGfE+ljNY%s@B z@`3^MOyBkCHuI}@MdRwN^KJ{SFn5BIz=^exA25tqT8TIaKZTq1NN8b|*k?Ve#jD1R zcndj~!?nP5m$s5dWRl`oJ8CV=>o(bLld13eGOP!!s#U=ql|b?i@*(0|s)tr@Y{r0b z-v`x^FW!CoTeiAQ&kXkGo=J|-mk9s3IR1Fi@+ZUum%B=PGyZdtuYLukh#g)4jV^ne zV1dV#bwT4GyYG?xV$6eIV?l?H2+e+n^m=Q{`#TT-+6D$h^j5IT0_D8WeS^M#C#xwNeO(F*VBiCF zYcjPZ3laYyM1IZ6ixQ7O^q!|*J?8TGFuYWz;siNsS_)OMI3b0stQewQ=knSMlqhGu zY7Z5D%O}0|iD*zQ@Wszb3>1vZfw;Y7Uk!i?Cta}Fr(5Fk{p+%>K+>_=- z-sz~f-rds+NaYt07S%OaX74~VmOsX=%!GFu^-qc5)&cEs`YU>{=px~ z6DI&}6SFpF0XEreGs#t&-RVuzi-QG}2j9#7VDS#FAqVE=94fAWB(x5^&|3Qg-+wN) z+n-vxot0l^O^`l(KO4ArVYV@Llj3WN@KIn0=k7CxH7)r60*&Md#LsGhKYS;{293}c zenx_C=~kuILj%rUfdXg33np}PRL-Br2K@i`SH2&Y1~H|Pq+pApgPzjE&bJU zL&Y#Mz;O{>zd2arqHSz+Gqn>AI~JoM-6Y?y_o{(VClrsX0}AP`n@s-Z0xy#}T|oRi zwm13cFx)ImhWRp6qojLf5{ux?8(lS{Pr2Cw-?#*cxXq9-Pp^ni9=@NMe<+RHZYS0v zQQAG%d#R~oME}Dd5*1P1JGA(r^1Ffci&q9PJ#g^lcgDS5dCI8dG=1qgE^_0p@7mq# zxBSB_RlKSX`iNK7&h3Wx4qvbNdpf!*^!ymGtAseZvnN|7N?$Cn@V67G(L zEB@aZod3c(`wIVAxff;{N++Bn*7NzN53ejJK%I-)ZIx0O*cM-U%~Fy#+>Hycq`<)% zgoWifedtVd{K8l++%E8QtZrl_ARHlrCoT>vtFG>@E5vYF?==z%dSpB9xN^)9@j?gQ zKomA(%ON5s?bJ*vG%^;`xJ4z5y^Fr$4j)Oor$-?@kK(=9LfkLaLCWa-U}nZj%W|_~ zP>*}w72*5B$CCOcr}k=^t(GT%q&9dNH{~Yp)oRcr@CDO=a&s+kE^H6{0y!tr&I%Y$-*cZz^k7V43 zBI+#-_A&3JNlb#C0@&+j;ikpTfp;qT?U1AnJET6-j58LRH2mTs6+n#{w4^(k1vZAn zknTkP@lG&-yw+DtQ`kBe?-JHDDIRFiV;CJS5s;6;aMowSGt~|>=7_<@CZHe;ReK(V zo$(9S1!xUKbl$M#1>_6#>$~2*73J{YJnoOJ@Mbp;7s7&kxp*!znr`5`3Jx$#C%!%+ zV?w8GzM2Duxd335tpHE5f>zNb&<}06 zafKCxnN_*)@#VKNIwZ84*EMTYh-dKy-0`I9eWolN8h+^KfqmeB8IZ1&DR9(%$+$BG z2hQxgr7ail+hQDuN#iIuixFKX81c)Crx3>vySn=sUSEBq1T#OHG0fgk0hzs6Od)zk-*i}fU<%Gne3Hpy^gYs}?FuL@8b2I8bU zQM%3L-j>KwVlq_ZedGF=#t||y@4c9d181&NZ=M)VSviZWp#xVAHJK^;PYJ(4%XjtU zVG2KRx5x7o4*Dqa^5UI;n1KA2ZffhYuxas_0P@|G{=2ZYWNHV}k)Dw~qVk%Db!87F zCD*#ZQJ$R6T$sm>BjDM1Nr3QFlNA-EBK^w8Nqv{y)H6N}*$%ri>(zC8M1Ou)_@!_5jm~OM_%c=_T+PXXzPz`G5;9B~Y z^yb!q8McX6WS0QkwSn~Pg$G*D!ol2_WA&HR8Mcv3UbN(wrwNLYfXAkXTx1rEP4-@T zAxSeUmg<&D&SL*>9l6j~PISCuyaqEATWXws%m(_5*FDJZ8)uyhue74`1@FZS*Vip$ zqwysuc9{F8yhf+$8GI9%Ca)y<2#L%SQ~C|~ChkNcU_0d(WA9Z6)aBH^oT%aUII+c# ze98XpvG?%ahr{6A39MJ<;{Eveo8KEUy6Pzj^&7~VDWnDUmEeamiSw=!B=c*<9T2rNfLC^F+7QtuD z)t)B~gbaZYVvw?tORPle13d^nx9ZPooCSc4YWD1JrPo%U9-ADCpI-luHfHn;l;8D4 zfa3ALvWx%gczmiUzml6l2+bUJjlMpitXz2Nn$hH(i9*v3)7~Q(veW1Bi;D(f*e1&vx`-`-%v1zPT^^``^`! zjpH(Qol&p-o=?nS)4PAP#Eg2a4Pt%TYyxuC;x4P?n7s2=F2pITP&>Drj{EuO@<54}fn97B3ge9a`g zV9k4jtUwt6dMA&Qt|w0QbC0%l--|;RN_4!xUz(*&1spI(f2$7R1;;k9f4)&aTxlSw z8a0q%w%x-Tp}U?4F%t5$Oc*;LX5#depiyK;vKuqf?`*6aZTi(A%D^r8cHVGNxpiFTOTgBQn1=%*HtEU zwD^cOyavJ5bLV{Y1irJ3jw=KwlvcqJ>|ZYj=)YI7+0bzczFC;doDIF_mb7B2qRcv( z8YpK#{XqdT8QQ#Zh3kZxXu#7u{394d2_VNI(OinsVrZavOoXJAAy)ur%EnfD{(zf` zL>z!JX+Srwuzg^6J%h{f#mmpMVLlC|^b_OMZZ^tA z}^Uxrj(QecV4q2 z3VdGAxjyvc)59?4`}$(U&&$gy^j-|w^fnWaPjum-Pu=73Qc4CLfP0-Ob#6Ibe4C2I(cuw{5VM* zWHafd8FQAKnwtlPjf-VpdG0*G8gA}FJD*=uE1&p0;;x;9G7j8a1hN!)DHC+)#MrH* z?!IyTs3ojDv5IsUFyfpcZBSF%MdEF;(Kenl^$#q>{di^czj?!!p7=nIyPGPfQ(eX< zsI`1{w3D}oZn?^sL@_(q&!%~BkopGltmAx8=DB&3B z`G9SNO}>Qnev^^9iET(sPyZytR-K&BIEKwWMgSFV+50tA;-~&YU)!(+-LF#eXLI!U}j8JHD(7&Z-=A_W>|^m{ucCyD`KD571`FQ zDyWIi?AX5sSei)AYV@n6s7k{__|zoyUpf6A&K^6dV3{3$Riyg8`B!Ql9wDDo`3Dmk zx@+mBxosMeV;0=J4>J;xK?&q$ks&A;riZ&~nWY6JB#VV&RMrg4Y7Z558-s)|Sd;13|OPP>}T7wLY zbLhYF%<0KKATC{r0Yr0G-mc5iXfr~8x;vdw%&$0ZxTfv+HNmYOjfvlAJ}PSG`mOzB zn-1Q354)69Ha8{>TdynAfSl<;3BRrVLdf=@^88PWTu?XR{VTu6SD@=ZM<0>zVIJG~ z$KrnEHYcJ*7~Rl>AF8#j8B?a(c|eHEAHZMx+%^Eb zzZ!Kbj&T#4wA&zcpn?{BlNCd#pAfOfTy)<4&l7*$anTzRZqF+Q{v^;+~L|a_E;0^C-Xx{u~9DdzuQ9nSgYcN(?mrF18V?2u+t)WCY zgfYrJpO5C;Mg{7A+dlTqE#4EG;O|a+=JcTX;14x8;zwkclg&Rci{NLHSZOh(>x1=r zRqqEtjQI2rC;}iv9>?Z!T)eb#1%2o-SEhIFlwDQm6wlkhU^g~4hQGY=_EXPH#}6|j?K=OnaYSnsrrM&^wMiNKgpf#=& zLXOh>lHY{?#1%^-d3F3nomBp6v$Y^35EJ{1tUI%bWsM!H|BCwohpy}H*%>jHpt-hM^JNqBu;!9EPfN&l7Kf?9v|H2Lk39R6t`#q-i(`^y-iT$dk z)jkZ`K!&gX;><_4@IsYcywEGO`&9e;pMtQ#tJSBkcf|Mp8bQV!j2izPe${#Z$KeO@ zTQ6diea=s>7z|@WobjupqfGzRwJhnU&s9ewW?}{ymykWX-wgSwS!Fu7e%OgX^6JYl zjr5Ckv6RfnoJu~nq2H3mj-;+U8s$}Q(SE$F7j&!ywSj{yyjPcYxlj@ek<1`}ldk9I z@3bZDBU>Sg@)qdrz9;(Xt?zjbUDDtmHpJ{x18jwhO1wD&X?!`vp&l~Xt@gTvG&`2X z3?>-zjFwh4I*}!YW96MW`?aLW*R;?ZeIy;NotrHG>OSb9n!y)r^fJP4t}Xh8X>xO1 zaH|><7Tm%SxHdwmgmA<4)omF{=OCT#@#gS`8zJ(r&HBNNWX2t|Hl1<(Bxwq{quD{h zB?Oam=xcfbXKcdED|T&3S34{do#=W-nIgiJ^i*@Z8$wMTE%TY7)Qb^eav($iymk5A zT7U5_|7_H!1AXeK!U4t`*7hI_1g+$bY_u=zal-D z3b+Rc2i>%kUo5OSmoUzE{v+%dC#21e+DiPOl#A!zgil%@I<0;RxbytxapK8$yco@% zt!@6W_+eexP)8#=Yu|tWgh8F-`*-((0uTJO0#+ck5xT&e(c#aCpGKz}^9Dd{U!JJ(V=OuG)6Yv!}5RdV0#5vN8P*Xvf-hC)@1fIDmxnsU(|2ga^H`h!b@Nx zV>Y&SJPP*^P%gmk*&caa>_Q%XtjD6o-cLODVnN5`V>#mUNWlrm1Jq25E`L>dv$AYq zi7|XVhpg#YkxPbz6MB^nnWYWWI`gH)Dy(Wl4&&M3*2KoEYlF_{!AN!VE`XUN zV`uEy4g^B%Iaqmq}#Pq zg9O?J{LVdt)*RcTxgjjc?6%^gz~16BgqPTE&#bIcUhb$~#Im&sddzMpcMA!ToNT>0DCqdvT*6eR#7(n97VTEJif0oATt zz!i`~;4Fs0FPy{DOWVFQrANsF6d#v8ohlrT;wmNV0;We2l~HS0th=q zAc$uZ!(8+ENOk$D_`~C5NS)&Dd2fBRfdSx=A`%LYl18P%#itoOG@_y;;b_lHzQ!=W zXhL~f`5Jz;bJA*fOEcWpgL3!Jt@D2!daJ%WVq%rPR~>k#eRvZ4W40v=PiYSq(<|D3v}{pdq$RKN_U ziTM2jy@utti@frr4{Yk@qDTlSfXu3dL4=JDk769Hw_(J?|qR*)qghgVH70j=H!&Bb8>Qf`#(er;FuJQ8JxaBZ{ ztt08?G1iq=W(c}WCO-br+Ny+3j9tw~J4w{qMda)eY(8^k&i!S}b*$p<*VeM2SgjRi z#cOR7*8C6+A3T6G`O$f4b1KA=OW%w zPfs7akaI2C(UD(mP|$P0eF*fH05t(-kl9M37!p<`)ebh=;SXmQ#uyTn&~xZ^hX<69BCc81s_ii)HqD3*CLRXgW}&xE)g<=od$^ zOO72Rb4EezkAKiWX~9>Kl#Y^3jw`5Zsc@Zuyzv$9&CmZFEspI4l#ZQyvLEiO=@H1= zKI=E+ue~v4u6U01T#-8_~&48__>`cCt@-Eg)#&PA8=64#3mmo~*igQTI?Y zU15Rz59J#s2(ow)G_VF6BFC-(iQ^()uUwHxH?sF@_YYocAyH#%iE_ui774k1$tp%b zzG{54oawmdIbQx?*j0Z216lmWa;9gF=$~-uk4r9hiKJA*6VWBPm-C%g{1gIg&|Cf) zU9~pURHbt@!(aKdzO+RH3>*Te^z<+|!ZWlmnZ&_P>@=^A*ZN)W1rX@BpS9H08Qy0mTp+%`w7jlJUOrEkmQXq|kt_A7^~zzDk{Ip?V!Z#U zFGS{MtkAl#I-SWMvmbSc`iIfEySVc$2yQQUX zdQ=(D2LgB_M(A|eIX2xsFgvgT`9gXxL9#GckL)~}7hWHxr(*{vqXwtRkOCil(QY;N zPnZx!HVSxuze>I)`VxB^`=SLmCl-qYy*DI& z3Li=qXnVvT|MEVxKK-2@cQ2M0|9hF9%<`Ya`;SRB`;PY?Pm*`^F}t$F6^rnjbRrcQ z{aW<}`Y}E=RPH%r{ICTo*qS*fuh;KvKSc_9$e2SMRrwe7Z_!ILHQ#3}nP;DV6>lCA zqoKRW+ahX7=)XapP2U`jXrkS#>nRdO>2E(^SbU+PWf2W7d>$Gh2)xJ8N842Z%px25 zw-2gAKIn;Hx*58RVMx3pfP^^%hl#uh;Zj2Cf5w(po5{G&xs&WcXNVKF#c!@+Lg@EG z$#%qJAuKb&4RY_gs<13k?(iD=(Rpb6*8^GJzzeJpVMD&yB~vH!&UlT^NO}$wLkJ?P zBmX92*s9DXvSsQZol#nR*uEIraFLe=1xM(iAHlC(O06yCd0-41U*Uw#>+YCi69US|*mF+j-stJdxWJ>um@ zKtIR^V1oL5M|P4AgI4qP9>UrjoKhb>I)hyXxpaL|dBGek@+B^NpdKD8@{znAaIhXY zT<X{zyE|aXXM46>LE9tCpOXKM0@f4@^}Ti!}s#-_>%A1tbrrpzRME(?##IWnAmu( z4;8fCLLux=Zmpaze?Uh)syqbi!dUX!mwsG^mJ;Kw$FsqxV!KwuYYfoU8voO67kcaH*XMUz9j&s@uS`+YM?*i zE{z0`5~;Ee>?c)C3d7M&bUu67SJe4xMZ8z4bKO#}WN-;wS$xIkP&v@}kyX{i+Y#ScvI?h=Xsw#{T4-TOl%HbjxY zI+9^ZK0~jZ(m&9I&c@B18>lw8t6(Uv>!nz*v?u}fUV{6+G;ZJdHP?0PyhZ=S8}qJR z`|1w#Ib)U9_^X8D$n4fh-?m5DAup&0@U{FK7i4YMYfraxBxkpV$fl-_o=4zra{vc1 zf=KTk6+t7guJ?xzB4h|;keBzP>-EmfxsCbk2#dQD%*&s7aI(#^w^{9CEHfsxBF6cC z9v2|aM?y3Pd*WdH+uLE>u7B|3s0E3M2JxUNp9;Bi$3_9en8I)TzW)W8Z?BW|-9~B7vh7 z&b&7Vaay|+110`vA(z{_K^o+Kr;G##!oi_{x=N&_rG*R^2j;t0-XW!0X!yohO`)L(`+kDd1D@S{e;?(Xc2=m+F zygqK@gg;L`zX^KEw(?#{koW-W&w3C)%Jq`Kx6hY;^F){&eC5jXKO)J08uA0pVYx4F zMlm(?u61*G=}st5cJ7ZvvB;xS9qZnehAkJb^w1|(+RslocjKewx+;8;QWEw?b|ni= z_7YDlQRH>l=pr!vyVty*%2tZ^43<;k)_5?sdWfpD>1Lsexo?h z`SbPr5710;tg1#m=Fj3A-JI08qGrtgx9G9rFW<_kQp9`jr(^ECyCO8p_eg?O6RO8p zwB}Pdy9&>xnre9SxIHCrqE%`wY9TPUTMgxcHIvGe%*(PAH`-yW!iht6;Hh$I^bHn1 z4oJ$lrHbtbX@$McKLYtXs*4MI?RZR=vA4eq8gBH($1jCR;A!eKDloasgV@eq{6XJ6Oi4Z;0r*Smub80RLh@P?^&=Al`v>B;R&lLJs4}9nptx+#=>U`%Dq2 z)*w;K3DCvSG-aXe=iXo>6#0kpM-aI1!1{fDTui-GrG5i3Mgm`AR^5pt(cRurUAH5ep--V}~+uvObF?M=ot3a~7)7 z08EHehOeP>nrSR+we2skm6RG-wra;S%XE{Zp?b`$YNlLs71hl6svmaO9-EJ54Z@?g z_+QTtvnY96^8B5NaJJ@z9Sg$f5Enek;GMHowu>D!Repk-@yQ>X4-U=L5~lsesG$+q zO`Dx}Dw`ou<7e3$IU=A@PIvSdUT-pz*byXwV>!{s)2TD6yP%HFUQ&NUgHr0#cetfHrp6xN$ z$BR`nD)-)>)!fE11@f##VF4lN!SwjrBh64pbCwUqC z0m$ka&(*ZkWR9lpwOz<J%NGxq1VsjiT`6bZm|+m?}hDRa`uP&B#FA8z11ue>6Ko_r(dgK z+Uk(++-M6ADoV~wMK+-od;yK@?lYseR>=*9HLWnr&U(xlv5Nk}z@>_#bZUpJIJTnA z0WQ-HTd{@3rJhA=df7N~sr(%^_^EoINy}9Yb!x*^&F3%a7-1%?-mQs-WW8Zq^&rQw zG^y(N^R+`EviG=dYo-!9z#s0(!Gae9n+&LfxS8hqxF|$$>~~RCa3OBSi9mv%d-d-B zWNdzjf60B^VEyi!xSr{DoLz>X6X~|WSbzHsFPfyWsW9bvxdUuDGeg7%oo#0{at2w6 z@N%G!8Yv_YXlUE`aQl7)xRA3Os4oYe;l>O6p(UjjneUsNq7oImd55UMT{qj5w|(D9fL~#E(`q2= zQ0M)b5}$y;#_nX{_2b=%%)&T-3)6nONkA2=n&@Ydi|2v&>mq3Pffuh}{+BfO4+OOL zM?HJZ-uWnxk8>yhucE0eC||w9>2x~b8942hANCtCM6zsh-sT716PN^?vB2(jBwU`x zjJ%IWApZA*+1K&nDra(-Mhi_B7$M<5+O>nKf7^31{clTGJ*Kw#38e9V?T|@b*y^Um zl~3md#kjYpmpWh>&8vIh_6wrmd5Q^~&fzosvlaAn(rxAm2KvJZp_~RNJ)ctI1>Eg# zBm_OXdcop4F|TiB#-FmQw^p;u#jlLy+m+&=ajOJQv~n@6ah6>1-_J0$U@4D5a|4_{ zbCX1wsDruCg#3ZEC_J_qj}15a;edAV0p!5u;^c##l^&LPZx{hJ>5HlGU1#d+&wpYQ ztn?T@iMc=?>o+zT2;`vPP?BhX*usLMfux+g@pjibGHr=cVC_)^sBLbYDT_{!_OTRt zW&W*}L4;aF=g&s(sfAFh8-~CZrQy#kKkx(ziZc5chHB8l$yk&UmX!vBJ~_fD;%Zwm27pKJbfCkh`uEE zuW3oCAlZ9NBo{|k`x_tUj##n0RhfPJY;Z&O7hcR!q3P%}>=|u44}Ga)sW2)@~YX zu((8B!&@*pNA~)$NPBsKdXL_AGWg$5n`YvcU*}^z|Na6Lvh%!dLevBxv0c#9SyuK+ z(tgPk$ro~ayu>*Z-S{9<*Ypu1xAeYKY`v53uwi?JI_Otq%&I}jB_Uro92 z7Pom;LkDm5D~&WhwJs8BPKtehwSdA$#;@d7TWPqk>0wt+_%iG28#{+QiE*}!j{>tH zal$}L-LK(KJ>MK)OaP!*L^Q;$!CY195`sAUS;;5^K?XIDKRXvjk5>W|apj(}b!o1z zCbY}0=gQ5;S@t-fTI4_ympp0Vt3#IxP`8+42jux^lzH#G8sB3fx6i%qyIjkVy<{fS z!IV!KJT6phgK_xld3Tq4pT!SxmNx~KeTPS-a%e?u=^}Bcr6^vRJ|GY4F@F_5v4ce; z9t==X#a${P00FkYr9loAWPP$a-JVc`d+$1AmQQlshBT^7IZy}cvcbjTTyJ>o?SFCu zAlN%aoKM04;CG?T={(UDCg?ta4CodCZWh|EE1u5#YY+ePg{AA;^DFqJ&B;bfEFLEQ zJ@QQ3$+8)hL^HJ?rH+ML0Gf8yn)5nP75V{dw#xe2AZDgWOS2J3VrkDNG8?HGgm3+f zK)!d?*U_Nszmvhfu24#^BS$`vp$28W;B?1=cM`NMd7-D z0Q1ILmI4{MeeKu|&%{K|yG6He!J30~Ecd;=UD5nzx>$%)=Z*En@e1Bb+iIxeij!1L zU;y`=YhG~ICY$V}jX#$|rFGBh9M{Yio1e&Q;p|f_ejtnpcrI+n@(3a1Nq|#z1Vnq8ygYs z?WY^`K!h3l-@9b5^<>}@*wP#})dLMN=&OM@Sa~9DOk*=n-Qu^jBg&nf^M@x1eKKg? zWj=T?|6|T;L~H__s0vzrn5wf%oF8IRfASNx{r}kbjQl7E^)Ys*(7d`=G=-mcY`8z% zu@_|0i1V)j)G(7Nr>(3f^2&{!TO;JWd|`o?`O-*0AD-#SPGvaTKPnnznQd(#WW&mI}el^bDocG~Lu+`4ZJ5yTQRXy4|YO zFO-XTa962lHaOK0$IFIYq&UOr^kaQ!SYx>I?jBMx`DAB=7Ih8^1dWx(@#d{^YMSJV zn-;2h$Ⓢ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

    tpx+?<7&1Fg-o-%*yv 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 p`oxN=H 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 W68|sp{}TT%@&6M4FY*6x04V^|BDOXF literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/Header.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/Header.png new file mode 100644 index 0000000000000000000000000000000000000000..7c31ed654286906e0868621c65fd81f0fdd17b61 GIT binary patch literal 3512 zcmbtWc{tST9_Lo4gW_~T$WjSmWGnmOC~ITiCyL21Dcjhkj!Huq=43KtEETeZ7&4PJ zBgjO;=eehIp8MSUKEL<#e)sS9{l4Ene#s7YmU{)I1o`;* z_F7w+Iq~uF)i&<;q1lbtgkPzskz*v4%b^!ZAs zazR{aE@p9yuwGWG=mnSb z2a8x>$Yhw7u2sHBCIMx>>J({B4=9HTOL$*+z<%IS?!K@BnRSc;d$L0P7@P;gaaMRCRaTShyM_t`ZA#t9&%n_M|YO7(m`NLN$ zB4-nZ;B)L1B}OAbq)Vhdn~>ZeOq`!rZ)moo2a8OE4+Iiy1K-7Ghstv_+PFC+s1X-- zd~9@%9c6I2sNZ0y-QTD%*nw(+t5gki9!JT&ics~U35;K?bw#QgLUDQ2z(SIaVGTsj zKp|I9BD;ogJSjM*xFCNXywkE)%`v?r08Pg?L)O^vRg}5a-%=CAFL$$WDvZX`O@b0N&kaA*|HVknW+X^~fFfm7g}VOX zG$sd6{^<~1*^-=7qqq+^3rzngQ|SY2nE}(vMhHT3y)du1pYErF?8fHPUU>Kr$=RWT z5b0~VOC+W7Xz|S?<C_ke(CCz@l*bh)Dl?Pl&t-o4rjaz0$tKQrOcZoXV^j% z2-3pi6u*L+O{bM8HsZFBC6v6UeNr(4p(qIcsJ9=fpuH#V4CS`M_AD6;nDNy487D7T z%fKI27o}@EdT6y*m%!3IoVxBE1C{Ycuuo%F%?7KEk2!-C_zI~Rnm;7*=CM6Tkm=~* z1f@IUEh+$OX^M*knm2m9n6@(Tsp?0h7*VW?#LC@@eV2g(l1_?s7FHLLh=gOb2BMEN zCE`}<6`U1C{%d4IEb7iNkoC^!9w6d3PtR;7Ke5k0kJ7UP9PF07I3UMP~>q-5*S@&h8-twZpk}n5ULN zv$ahBS9o$p=R|^SlpYlp2OM4;bm0TZ_o)k+>MrX$y4t6_;nl>hw8Q#>{l<<6bP1l{_}<=8 z@7~VDg}>`~N{F_bySl;I zMJSOiFj;|d-j)cJcuPhX2y3KaJo-4uxm*J0Z zrakhX!!o0fm4_*zOdgc>U^H6ps<1LtdI#h#UP`n_4Jwx}8lk-Jm-ZmHH6!jW$R`r{ zO%KY-LL^#GIXg2nTTm)2O5;Y|G(EoS{^zNEez67a-fvA>%psFWj*Of#{6NsEXMihK z&J`>3H(#E4=0eHEVMDs7fyc4g+G8Zi&3XQu2`+V5k6Giu+q7{n;?MnD6eog zBHHr&ny1==P94Uou*5`y_wyW|#DwA;ZWs4l=|~vA1%#uh%F-1@FO=cWFTB=y03=yT z`DO^W2*2SSf0KE;#*`{l_yltu?h`gcv#0|Grum$j*0B>AkwX`Ncg)Gzj5dEs~!r-uGPTJjasG zvKNgW?kUDkm;pBdO9J-;`SD7=>v&ttQ?jI?YiWO{3|n^8`)0D+@l4IeIInmC#V9mO zz0C}qnU|allm*rpa`J;;xUfRp`q8G&g?2BS`cqZw&i!hxQHuX)dO;Oq%@g-?{Q?0@ZRYgV$}w%5Bz^F{Xb)t;a$_*+r~V2H*0<(J)JrBnZDfd2bY`#&wkT@|fWh4p^5kro}*&#>`Q z&u@9>fd8}};Mg?ff&Ww<8r(92JvzT>%gFwW;Bz xR~|AjXsL@1?UuGCy=j|V@?CMAa&hFyJsxtxeW!oI1Nh_Tvo^Ogt2*U#^WO*c4BP+! literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/HeaderLines.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/HeaderLines.png new file mode 100644 index 0000000000000000000000000000000000000000..aeb32c89f91345cfff34155e4e946bfe17b55b83 GIT binary patch literal 4539 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 literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/MultipleLines.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/MultipleLines.png new file mode 100644 index 0000000000000000000000000000000000000000..15c6c0f2a58bbbadb89755aa18194ad5dffb8fdc GIT binary patch literal 4751 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 literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/OnlyLines.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/OnlyLines.png new file mode 100644 index 0000000000000000000000000000000000000000..57cc6c36fde2299729ca554a5281776ef8b59b6e GIT binary patch literal 4194 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 Ovus5TR$B1&+y4({0ynJy literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/copyfromPrj.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/copyfromPrj.png new file mode 100644 index 0000000000000000000000000000000000000000..557df67fef5699fac97952a26342f184f2721156 GIT binary patch literal 17363 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 KMNUMnLSTXf_D4Mc literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/copytemplate.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/copytemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..f771715519b23756199976c1839fb411aa062dc8 GIT binary patch literal 17937 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

    5k{*Ftx8!tbSQ#1U?pUu1RKU) zD&KL(o#k>Fn1OW_`Ui4i`ZvV55$*8qpgqlTB?>Jxri+tw-z)!D^yqo>Sp<@WqS&+N z;qxxMWarLH4;?-E+0TD5%*?rVx^4UAWpgl#nV|?rjvPeaj17%|_m3YxG;7x zfdptzD+$@X_wA`x5eR$RPPg0YG}~>sc^K1TSUQ~M3n<&=6-9)iDPX)y`7^AEY>?7J zs|jhrG9b3LZ{HrK!ikfMAG`T8<;uWvC$K903(L+x@5ac(0Ll&>+~4gikB#&A9C5g9!-(6TLjiaKMXM}dW+ zrk=gE&&OUUvM@Lv_B7d+8<5SI?|8ax1fd7zO6w7s7{Ofy`iE(7CQ42D={R15EJm?R z{|;dWZqZZ&Uqx9W(ftKnsPcnpCX@b>63bubpToH9Me>$_O>7(dBLdQpZpfqCL^bp! zqX(hW!>OTI=@>IZjuQK-Ol!XQl{7gCVu>z)^U9q%^S{_$D9@hV&gcrl9mYRfh5u~T zUOkK(9fsp^*y;V#?ex!2e}3wdr%u8tc=bJ9e1)A+DovlGGx+PgR^$+?cE*waLVIzL zeaTKc(M$GAx0jH8vFs&eUo3kG*%!-RLiWY7mymt2>?LGh9AoVN0OZmi;CafKkN^Mx M07*qoM6N<$f{>z#FaQ7m literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/database.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/database.png new file mode 100644 index 0000000000000000000000000000000000000000..01622c7f1e6ffa90fb7981c0b76074a54f8669a2 GIT binary patch literal 19576 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 Z{2xx`c?e0U&@%u4002ovPDHLkV1mc7XS)CZ literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/icon/sitelogo.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/icon/sitelogo.png new file mode 100644 index 0000000000000000000000000000000000000000..41e834fb56ae1fdf2ad50c433963963ab2b54179 GIT binary patch literal 34912 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 literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/logo.svg b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/logo.svg new file mode 100644 index 0000000..4abf5f5 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/logo.svg @@ -0,0 +1,28 @@ + + + my vector image + + + + + Layer 1 + + + +

    + Sprin +

    +
    + +

    + Gular +

    +
    +
    + + +
    diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/micro logo.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/micro logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7334d565f3971a6579336d4a8e6a7665dd313c7b GIT binary patch literal 3603 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 Z{2xx`c?e0U&@%u4002ovPDHLkV1mc7XS)CZ literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/new.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/new.png new file mode 100644 index 0000000000000000000000000000000000000000..b114da150cd9fec270f03ce42fd65d9226af491a GIT binary patch literal 156249 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

    KQ?Z!G}F_+sCC5 z8r^UWmUSe4IGMr!c{GW)SNKhD`9KpH3!C`-z8HS%Ko5Mie7;RW3y}7PyH#;3$VTB7 z5bhJNMMx_^LNcF6dVU%g-uwxs4!(?q6Gtd6NA8N*v=)(~Ffb9>f|UR-hT9o%tKrP_ zG?rGDsrGDqy0X2!|DlKQ8^8U3L*LL)NoY10KM4?*s@9yH|E=**XoB)r!>^)i+Fw~{ zyp>AzXEOGeY!9Dyr5w`YL$em)pbsN`5yV1)O&NXuuAiJ!tCkf9uM6UjLHMGO#d)Bx z#F@LKnpzIJE`!pr=XMz5KLsN^PMU1vj?TH1gTFkP#!qJR$dSdQ|C=6`3NBp>@Zs%Y zgst}Pip9c%E9D!(4y$%nTMvGI?9^-&{vL;l4QZB>t6>C8%ZE@;9|m^rQ{zH-^>oiJ zqL@v?E4Oep`WfYgg%y7sMXPgGCtw?9Q2mt6WR=}(WSVk$8{4uKk9_FExZ@q~fJa5I z(Uk9(FXdH#!2dU)CUn1IxQO|R=rPW*o_lq2ehcOrr z!P=ywRTlxm@OX;QF!}ZakeTypU^(S-KA;Y_26R1!1*7+NSYscA(X*Gdhp&8WV@zZm zeC>1^Q}mbbuoVJ}keJWF`?rMAAE3&t!A?P~;hIPbkoKkGKvgS3_e~tNbX|pNtuHbKeA2nlTS*k zIDFwASBU>7JbZvM0ZGmdwpf~~;i-1F4aX5D@llIPx9$RjvD0vuUV}ID7-ae+Wo>po znp~`f38Uu#%&`wc^u2=;VsmfKmJ2Ta^h5&xTXII1V6$(@kbFK%k+I5lI z0F?%n^rvU)*hS=)=8>5?kHo}jq)r`1=E7MNGU?K1)_7i51u@HW;82}es@RxeR?>uD*wA-YeQ#q3%m;hbELa^WKnOqg zBv_usndK~23fzmJ9xu5hMn^{Q$c*@=WC;~q7vbSuTp-}=vAzgTx zDe28V=6MS*lXXeZk2WH|b868~@nG}ND2$OuAmX<{gh$oPEwvr3kY!+d z%))TcqGw!=Y;&{#=^XeO@^~H=BAc!ARy+Lc=wHn4w9ngDiUa=3RJPU8%JvnXrHxDH zSiQaKGgqB&)o~?2xCNvcqj*~ZPP6ihCO4NsZfOn$3Yq0a6lN!2FV7*jIEQ><1vZs! zej1X;c}X7cQ%WRUcuy_A{Jow)C;ekg!fIu*K&Gc>*K0`=X$`>r3`N6FIr1~*?pXY{ z@?6;=QbK~ASK43QYQdijlVa==pF8 z@pEz<8%}BkZkmKgHjP3$g={hbFQ0)VQR3$F$R(EHxsD3ObOKH;M~QrOI&%Iv?;pU7 zuji`t?Z2R`<3+;YdA2sUZZ z`D)5#KTps0n=5|v*Y*ifC?9G#9h;{fJ#iucC-|#yjW1Jr^Q>3pBN|N!wzu5k!CkM0 zdm^eOq?R;ZfG~7ZWK3ml1~PFJ?%b1**(r)HH7%E@_Ig%-pWF~N#qKRI`rZK}zE8D) z!0eo<8oLQCKspm{3E@TVxHY7LOLoankC{Y@Flf85qVx>5j zw)uEPjPO3U9rHE|6^pj`FQ1vW`8dO$;cfl}{w~jJ$LHaryv?6wD(B;PJ_m1I**4vk zU9i>*J>%6VA!<|kCPCs9X}g%GvhJ!DGPjVYV`~fnpi^W>yu5b!Eu5T~QjTkr9kB~T=$2l?%zK)h>v~oOE_@XJC*Hh1B5=MSFl*DkT`4nHQ%YaXqXJ={ zfia(l?E#75-Z<|0#lM5```-t{Y7GIxQ}EJdo+gw3`-48?59zsHdOOizIx#g}% z1jXNWJo!6PigDfgp}7*Sv;1TzwhqMAnjiHruFVu6m*Lrvg(b-RtSi&!gv?GDYT8~W zLw<-&o`pjfc!gPIu>nI0gPcvnFN7}+1c%j>x<+&xS?d8xz&L%Zv*w2HR`B}(w{G{F43 z6!?01pSSs!iX^1cZb=wvu8-iBEoIZ!52y9Q>Dig!E-Gf`c@b?iM z950=)$yiE&$X6XH|M8$@Jx$NGq^z1i$K@yz|9kQIb6j~_#g{*Gk=37LZjf)PX4Q2lR_)vL zC+&D}>-F2+45c&IUvpDac=892c8vh>Q=PaoJ&Bl2^<nq zk8AOv(P&x~EkEi9zm%|x#qwU~!xJ&2d@&TvwOcAUuU#*!g`Ll1<=jbRW~a(A&4a6Q z`ael`IuVShMxCb8aSpl&g~u$*++zw6p==t` z5J(GGoEXspqz*`L$n(5$N!h3zqtRT1jX}t7sV-O=jYgx>epa2mC@-dq>ud$|e;f7?N$=$E~uy{I0 zjYgx50RN&Hz+!k14o^W{i!>mA!%i$BdHhYlB>~ce-WUAxmF}eAO3WLc zKSTRXf4Cjzg_%N}fiO-OhS79&r)e?BkXR%@q9j1nVmum+Mx)Vau7Ybwc3Qg?N0>+$ zA$T=N15QUfm%;L>VqH~5uqtR$Ink(V90>`kB3iha(u`aFpQ9V)$ojTo=ZdmLNQ^8n z(n2Rqq~iq0?eov3$Fe8Rh3rIDp!rQqn%00@QTZ(d&wj;1L}v_*Mx)Va)}~ZPc5h87 z$vw_kVG1F5HF#yoE6W#?OGuqN4!Aa}oQA?bXGrAWx+eyqTR`f40TK%M=x@hmdyPh;(P(N)mkt3@@M}uj^dU_GgvH2aVNbM>Od&Zn z1=neC3kdl>^eiQ@WEjS*5TYfmGI%_gMx)VaG@5I`4s$n;0b#iNRn`omC~7ckCZ(n4*ho#DLw;$#q3VvGBK=y? zk$4NPKUs=xJ{{$X<+hKGQI`3jFnzc9+^jiPIE8J6qlh~TFxFUBU(-Es>qjI|9(=A9 zsYavGXf&GZpr+&v#E}a1LDrz>1g|k-r&f@iKG)E3Agm+F^(jax4x1rl%F#`yV+4ql z(lFiecfrF4q$hpsV+LggTMDPKH+u+Ug>wiyDgGcG>26iujc}_+Bw(sHI*rpGTIpys z8jYs?DAiuN6MG=mi}=ocu!5no|5!bomibf?nfV!@kphGR3lP&gGT$Nt(3y@9Ae1LW z;l+QnTYAM0nWlf7#7Mc!2n4($2Ao;!${ogm%*(i?@CHT;=Mi$!>WjK~bv{aRQt1l> zeCka=qwwg5wFJ?$1Km2`zec0EHkQv1)9mg=d;5omaLWVlMgP8AH*Y7&0V!tF$S=%7 zI*l8K!B;IknTG40+zS*-vCXG5T0l+N@A=+65o(%XD}PPR6)IEU==0y!u3cfnP!4~e4d z$+N*gV1@Qu#?-gH0HK5x+1aH5Q{ryZ^o@|icMT6yr~yUn5C&uxJQ2b z?W6I}(k3J3XunR=!f-`PwzIsa(P%VWZ2`s`UsAkJuAToO9~Zusz9r2*)ThV599{^6Doji%LL@!`5|sjHwy zqtR%{>yrqF!`QKFCxRg!d=7+q`!Rgr9q@%Bp^cLgWa-NSC8phPDrfFPub(MM#t0rfW6^KP8LAhuPp6u-1ZIJ#Ga_DIp?Z zlNfQ?A*A4Vo(i@O*A1LT9;G2W&N{3=@HD#>;bD{Ts78G7o50c=QH@5^>9BnWhe8Mh zgS=OY>;l-vg(Fdn?bt;+!MNN`8Wv*P_8_`t7wuG^Cj1-46xdMGu{nYWaAFpaVI|fiBBLBjbA1} zcuN-YIP>UV;^g4b+?$e$j|HomU?;zRk zmU1rIdV=SF{>6{pY#HM3Q?7_K#s&#;fINheT}oN;Co@)Wkbaxn;xsJ^_kj!teI!Bx zY8*(b!7gDX*!+f?-&9j()?w|y&Eq^Xokc-8)#acT(qjj^yv=_r@z>kF@_T%2t$6-> z+4p#Vt$6xdlk2#~Hvir5`O3#OV<1^{SR_DL~Yf{BA+Q(ZV{ zmyjMxr)t|lA_Udz76+ zj(MjBi$Z`lScq_!Q`*(k8MbwO14D@Q#II}b!b79z*|PoO3|Un{&or~NgzPeD12(+Z zfv?4OJWMU7Fqg>U!eRys$=nTXvIm(U7y0ZEkS#~G6m9D{TlP>7q<@c;USsdUK*n(0 z*Nnc=CCg`GtS=%5;-Qup{eLh$|t84n(ZWMkaPexU3v+?EU z>T$e^DRpJ5Y`f(uyW~`t{&KiHzO>DM`7@R6OXs-O_exxTj!W_U*|pDi$7Z~J`yO;0=94shLK8YTvZhu{wc%CT3YY^LQybo*|E21iO=U8_I{1BFxq zsi_G##X>pu`l#--^p}Gxul>7RH&XB%N1lXX&hU2mP)pIawTh5|Ah{ny^gJ4N4~9Vx z)Rm_l1P(hr@5<97HT;%=;ob;(qCxf0HLZto=G*1j&~=(*+<36B?vk|zoE#Uu=1Wwf zD#n?)eEaHjTz$O6rO#Z7=eUx?zWTGP&v)rJF8@sBo#pDd5|_SPp>jU{&gJL3_Gg(( z=jQKS{n;yj%b-e2lq)XY=H?LogxV(5Hl2wb4i+A&>y^%f8ckE-G8i%&Kb1V!KcR3K zf$KQrodm!98y+1e0m3tXtqnf|w$ssV`w<@9PBwHCzC9W6-0~vwD@)~wYe06Id)oBH zLJ0XS#6o`bgo8>nT?_iSCxv{|bigZVwQ^AW6w&Pn|b`X_A$VHlI>mpz#zim5IM#-PH2PdXYaP{2*s

    XPJf?GhY@5k~L1xXn7$3o}{2h{pz*Q4mllxG=dw*oD@dUpG^fViQMfPa`C zV59CqdXAfvUgWrVm2TK1sQhG1b#uo$c{oP|^ z%>8qY^N3#Zsu_?2`X6N@S2iw=KD(`2}d%I?u##7P{sY$?>N8+MU{rhyQ5 zt1CrmG#a8JK6p^}{5#mOXAkB7_1&j*3ON0Pzrm?TzXB(lsl2V;094it6Jz&0gngg>0-{@XRXwX# z1%5`BK+^N%m-_tXU(tSTnpWz-+BscwHHPp^!#yAIEmAI98#W5OI%1rh-W&DL(=>)s z7nAaiMx)Vm7%VzifLu#_te=Y8MgOwV)S)3kz2HOaoM*3*?l(+W^!rR%Gvz%7G4y}e3=YzSc>JhBzRzM<;< zJu06(6>lNEvgyaq{-t0QZpd3ZdyJ65yqh=#qnP0BTIqa2aG@3Qxvcm!-8jGo}iW@^9 z)YFH^@EA=02F1%NirEx$iG;HMn@1Lf5XXE0%$Fltmi84OC5zjTTAIwa3$Hk5irmHS zSKPEE9cPw~6|Xe!+@u=tTcoBZ9*CC>Dz-77EDc^J@lm zygX}>5+gOKkTjhR*EtO5H_kD<+C9VZ+5~De*N4kVtS1g$|6@Zgn;`Mx^C31m4qrG@ zc1t&or1~MVFik=vd$BB6hmfvBN_z5iFL2G_0C_9!Jw)lp{#ufrUh&EI9bDnj)3rSdgq0 z_&5s?{%kInQ{Usb+PoRlbUN(3@HxZ^~8qEz+!rii}D=*~Z#kTH3aA2r<+f3ift<1yDrj*NBEtY^yS8!O`);Zd3`HG^A zTR`lBgq!5e%_zq8LJon1&%Nw{(hlq0%Ofu$;3E;@vo_kNP*Yo4z6@$Q1QrL}T2X1~ z*r@2Z7JLS79bo~YTSPS1gY#P{$6cxuRa_17VK=}N5KD54ymH`e4&4iPAuZ*fPL{H~ zxNT2gKZy`u$>44P7A;0Ng3#ayOdiBuOnssX{8}4R(;Kdb8U_l!S%}pL7s$SI}e6px2&8 z)LlZ@O{y+!B|*|<=}1|q(u&(rM*Awb1;pe9{5A|reqmaOkMDpl6t3DP=aVZaBvVy? z-!O!~ADYms~TLIz;J5OeHg*K~uS{s6dhqUHB$H(2bP@Je(C3`S*5aGkn|~U&WWIx2)8EGa+>fv){}jfHZ=m0qfX}ljUAw16 zgvT`Gb6GfKYdW543k-da7ZZ$c+YKwk1JSE%o#vLN+`faZE$C(I`3ZalM$COB`1ia?&o0N%yCaLObWVJ@qfnzwoTufmlTOeayKG23JF;x}`fE!ey00aghW_YPlS_G3X9l33=17FhE@zOpown@Mz!h?(<)fM7G1N7X z2x@kBEdFgy2fhv+8XLG3%yoHYwQB^A|LT^q)v)*odTDIUzluHiACSoSG5nGjf^${4 zym&tH3D4LQ>T?_TLB_|?yIf=d){>lBp2&!Sjk#>(hFqV z&}B-(iNT>`v$VOUCE}|x4WU~=G)cIP z1)RFdwKQ|h5cNFCQQ^SXqC;Z>x4sn$c@&D|DB6_%YX$X8nk$rBjj)%**1~JpVn2tl zoFa$MDIZ~5wAvn3_DgX>77=sKVn^`_4BBtgzKZThxbDd3C~xK4#-FVkE*t4&60WL` z%8?s@vjGnjj*f1FFA}Xv>~nf&=4VkzC1`JB-{X2J4XR(W5eX$)*obNM2&6kNCY zjtARg%QO%R`4JA37U|?|zpwqqNR@H*u81=3igu-wtV8_*r#A=B z;TcifYldq3rFSBJ5)mWzF^sELj|Gb1GP7R)fj=kF0W z!m%sjtb?I@WgEu-RgXYqd^>#MXw`LEKCuKhM}lty{w#lzYf)j~P1EN)QHpI3+PdTf z{HaC5z{^xn>f9D8Nm9Bo!|w&l5ehQtYIZEj0&81$%7g55SypEnC{63ZW-nhJXECvm z#QFIIF3{gZt^k*($7v#_X`(+K#^JS>lwVO%7kHjl1A$;qfT!ls4N7PKf+`Y32LjlgzX z%qO#$Udmu8UBF7Vh`B^*+(o8Ptjf673U*L^B*=RsK@5@*2?u;t+39A&6_pxrUfypd z_?oyCg0E529SC7iAaPONuizObJi$GNOF5O>>Uh9nw-b;B^f~7caVKbRlj$LB40=Z~ z=5*DzSo0I$etBP`LbX_thlbYqhOCrBWsl>Fq->-lx_TsS2tP^QjfsBt+Jm zKMf&x!KtIJ@Q#(E+J?6FjKw2QITH4H>E-9R0j(TeVSwa+<^o0ZcfM6wiL&#sD{j%sD#?k+8?nkwC( zn$a4;Zvd$>RDX47OyKlp5mIqhSa`S;O4T8U)#bf)^KB#GJ}N;si5{NCO4Q=5zM;Bs zMd*B{?7VJDTvenOrH;t!C{zz%R0-fAG!{iNdb1@ z@}heU_#@LxVOOry{N2r9B!H2TY?B zr;htn@KIoq*xd+NNFpeC;>y|y^Z?Ry&P>P2k8CE3bdtLzHKvDqbD^h4_A<4yys1I= zrfDHKFbXqJodDtQ*tslRp89wln1=93gPihAd3Xrd_d{Eewzo)q%gbp`8pk}>U8LPQ zz4oK()d=((7Ef<*35u1Dlxab}$@Pp6cf-)#GeV=ds@^z%UPD8C7{RLdK` z^;F|7VnIa1fv!o5TBByZYVp>O)#$Mx-NThRlJ`0Az*r8II1Rs?vB@UZ_Km*5LqP?P z3+t>@P9+k^q*ChTLN~y+eQ9nMcA-%9J@bm_k>OGJ!dJelUMF-7b|wL@xV}6}SLvEk zobuWBQQB?0et_-&O5}52rCK(7Mtb%Ua`Nl;0E8ie!mtM^e_WPklxaOzqHw*co(H0H zD~P5EbeZmBq1zV?VcT#IM*5=|iifaeAc~QmuxbU-Y#gqb*qLu9@usesM2JSy5ZcB` zHAp7Zwl40}ZoW&4i%6`jbd>;En4d$jSbakR=LLT#41Y9U^+0qxn}wsgy(r?V1fsk*KNLXLHRdpCb+M{^!bAj@{!jS&F=gB$B zch?j@oKbWGNRwzIr?FP>)X%-)0LFTw7$1mXARb1@uls;kO&dD%T$y%X&et&9<@CyK zr##C~y#%yjTB^$l5AtqpJUB8&p_jI6V++~gv}FXY40f0d;X&Dnj-LT*HC#THmY3C3 z=G9h}T*3^?hhXmjgjL-dSFU3tH9t!tgjaaD_J#1vMi02)32|cO8Z)uBI-T)a{=w}T zi1f=&F>|hNU7bA7^rU@L)*I<7$0%G0hcZE$vYC6WywX{QslBl2>F~zfh zb?aLVP!4^a9JqSG*Q&c#^^zmk6eORqvl2764|yCscj99f7mnDhn@(Je<(+4+7@=J zg7i#7COK54sJg?BJTJz@QyaGvJV2ReKx$V9LbE=2!hzKjB=8@0y;iq)@&I%nIbqit zh)$IorV?2ko?KGjUvHKPL}R#hIEsOwiK$ExM=vZ^y_j3QVSx~HRlaeLbaxZe6Jn7kqOI{Mkas2GWjvYVh*>Pe&$4=~6vSnK?Dwaf5MkGa2 z?4;QH_P(>T)6whg@B1GByR)-X01SWuFy}{}1#p1@?mhRE?|;tuzSHimY-wSE9(~|j zbnwL&NW(~e4}p4sO>e{D2n`PpQG9TS1_uWz6uvTu=}Pc-*IjoVP3+u7s;-Iq(g>(G zo^8?GD^JtQpZz2imgXB4rZ;>CYvn)8LSy&tJ#_s|H`4XjTus4HSVV|Jd$-#{XV+o$No=>jZLn3ui^2*r-*I%3zZ{Vg3YJFRo}~% z9Pf~;dSA&I+OvDYG|zdtp~CN*o=JJ*ou=bh&vRxR<3@I^d$t)AP1oXTkj6dl&WrgL zh>+>2YKDvII+@*#P4V^sYoSeUu-&$g8A&AF#aafbr2oNaS?%t_sA}ab7`_)99>(HP z8Vmb{_y8eYrE7-5qz1Zou*Xp}N~%{=M!A|V1O{odb;Kh_jnkt4CQ50$tH=5S474mQ zEmAs_C24Nby)~!xW1~#ZoNH z9^%TIO8mE>XpDlfc;oesKkl)3$8P9ubqUt0zrm^c)tJ`7n!>G0JNPuN)>Y+AQCTZf5*hciG&Eb--d@7>G{wl@R(P~9UOhr(OnrII zEdQLb)=%nMWp`jn=fOR}(iu-KhnGks+XOUsZkq)Jn$_|>$k=VSGss-wgx zp}(2V``$?fHF8BB^fI_(*#9G)V9Tb5mYl}o1N4q}zMI~7;|&yz@IBdL;iUO|6dxO} zE_rOQ8t_f9@)>fi-t-w}TR7}fl=thZ`>&@B;{Z1UYu=2$8y$LQOB2(YM0z`4W1ZU*B+l6A5x}O@V-odMG%GRZQp+q8)w1JELO$&8^ zqv|vii_ma5AO_V|f+K?gjdsO@Y=!Ckx;xulNVGZM8|Zl8!<5u-Ay0|0F$BLAtfa;{ zR~E5V&L4A07++MWsO_P7-`i+9@J`D3un?lZ`W0MnHj}1wGT9qf#$_A+9oJra4ZZcv zx3KUHRo~cJG+%(CL-h9g~G&D4{W;w@XT&E`F@H>j`qxgynOQ+vwIOyejPXHlJlmLJ2ZlFhU2Q|E7`6$ z$EAOD$;yAnVn_%OX$N-}`BOzsN@4jY*P{tI$H{F28B8 zr?jQ{X)bULoesZ~PDQ>;q?4S^gx^k!f!$ ziV{%dUhVmmOJ6=)rsEmoVrcW(qAeb4V3s*=aT!2a;P&=d%A~KHH|SuFlwO*F_PC$E zJoQe!-we3QR3bt1voqbV7#W-+mN<-5KH)h^n7KOY!SUAJ^;c}b~^O8tY25s4LO4Q((Ju~{d1x~ z^jy-RSCSUpH&vvwIg1{fEz(~d$xy|KbSg)$E|uw6+M=(W&C_@0O?o-w z(yY-MF|-`~W_ya9_~vD)|3Uj!EEH*BZjK)dJyVx)-Uzo_&nAPQRu|fx_#bYAH3|(3 zRsBF3fUgNNP~~izP0gO40l~!&bHWtW6-_{Y&VVq=Pu=C{WIjWl`VH50Gp({8P`0>H z4y#J&T>)ie7Z)~#+h;>jyajGztyS{4vSZ~oX~?<}tfw?gM|7qVNu!{X>$MpWoNvP& z-zMobk=6-1og--CFhcJ1H*WbQSq)#5s(5H`N=^szz>ArJ$ z%9^f7kIk0pFAnGE4_{8vU-SF-oiB+I+^G`LlWB#Ptk#JTl(pelkU|0Mvrs)KX&NlQ z%4IV&JAGal(7jTZ>pf3=PS02;RucHyISlCB1B1@h%4gHm-AUMgW4yo zdZYSQfB@x=PvmW~?_wGGJilt0e+D92tp#=8Fm16Rp+wRQ!l3W)j6$=Zv)u~8gx|!hi%geN$Aut_$LiC{W5t+kv@GD$ zMaQG((=Hv%x?*`1z9La}>E3e%dVbNMyyeoDPvz;=M2TKcmgyf)W@)Bq)3b{v-7{67 zv;jW?ZhLKyUP?OjdWO5;1`M&aK%NdpgS2lnPJ{6%cdnfk+WiRbH}?O4{|CxUKZ02j zzu(`P!T6%S%$$^2osEu6*!R&Zf_v$kV5f zX6aC}vT+)GK#D9nF2bKnn=ZYcBU-So+`O<+u*uu_K$J#8e%d<_qM=Z82A<>+rfG@r zySZ$(dPK5WunaabG)@}#8~rNkHcQ_N5aql6TZ$a}YixeL%bha`r zODHoPycduPSbDW7_|IoqD7=_cl=<@7i@0zcLgV2JC3N1k?lE25HAN1F1k>-;yr z>V6{i_FvuQc-rr(y7EJwOWMjce;9#3GoPWQY_TVdn0^AcBH+_#|BgW#2z6Vu3`rxv zlnZJqg|w}iptdYagj#H5O>Y4FKm)%gsm(<6%505f^N5IBTrN>2Q7Vy8Pv8rJ5`c1m zWnk;g#K4%E$rS0(g(PJxj~+`BJ+g?XR+VK`>w&6JPf^39$?lLsKe|(+H;eEsje%Z! zJRYKJ$Ko^?@?Wg~1wO}D7V?zJqX+-@-Lx<}(=+V`%6lvpqmO>{qjckqH&&0XP1bbi+tUSlEoq9f*ev){Y_@sb zfS236`fBx?&JUCK)qbK2J z$UDSk>eu-BL;QGI1?}9>%od`2_|FW#KlOy?6d&aLD7K=4RT_IQqUhQWTB^3!bln0U zp5+W(wP=eq!T8-)wj7fBK(_P!GL1?nEs-<}412_$@77Kl=O@L-_62vn)~TZmTr3B5 zw0j8BXs~g6IO}>(C!EUCt2&BNy+sW!kn;x7D_NpMWwln_z;x4m0U8;IQ9O7_e1MRS zO%Fp93;JaD+61=kP%4?COe)p4?FIzL6LV$y94~(Q9dX;Cz7$ zXKi5tArTrHA(h+Ydg`EnZ-Iz{mCupe`%$pgWm^ak!PLx>=hHsLa_k`2vDOTecm%JG zy{?n~E??pi>^CxnvQvHcN>I1^vwn9q$a0JZmMlkhP?Al74jKl2r57bgYu?1J?F;o1tG@dex1>NYXh( zpM<2S!XKn2I^YnyUU|jml5AAHlvU_V0Xrwb3~D|2&NTndcQT4HXJUq?a(q3okJfn9 zNBaf>V(H~-`1$z$p%D2(VRE+7xN0lNXVbKV=vURU(vO67mG;McG#XSX=G%OVa@rZy zX=g;|GP!nnL%@VUG~S>9**>(Rjp=HNkNn%+syg_eH6{AbJW`^Yt#jO{d)&64bIR%8 z$iMSflX`IIYqsk}&2<=rNd&cf~I~eeL!lU zJej5`d_rnQ-d2G@4V^nW2oO2@vHe)?0|M}fa)4L0(y);aNXfG4zOy;{k1u2{I+M2x zoR^q)kU`pm{pG=`al<|M$l=dhbL?%)YJleYR!N)C-T( z3!nW9Dy199UoHbf2d<|(e(AR9YaL@p4=^S8pGraj=C{Mgz;XBObdQloS+~i>Y#0(j}lH=>})-n)r}QuOu~4 z4$#ImQW{L|#!|K-qWiSFdBk~{Y)wC#@@T5Oj`-jcQB{RT!hV_z`zk(^>wtGhLp~ae zg*XqkooUlJoS#OyOo^pMDwj*ugZ;~(U!xE1j?l-hWzn+9gzxykt_X{dwH?rbs_CSM z;$j9;awXd?SCl*Mw1c6{OXQS3JnicXu`YoDU%w*`|&-owrJ6n~|?+Sj51ZNbk; znt}7(;!~cgQQ9VN zwN(g`OCUeXr6SGE%=FWa+v|emQll&yT9G0;_Ow~QRHBavghHhG{M93pGkEiETG?y-rxlY85Zb29^NY&T<3=IEHix9L| z7kBlQ;zP0mMP;)Hp4nAUUN+muwHlla(km&4PUc*1r5`U|E|>~^eb!a(o+?t(aD{Kn zOwppOS@BT;aB9bEBz(t(f=&N;szCQFkdm}Fzv*E=gCdd7=V*53f>_4aZDph%K#uBx zAo-*5N`^}=W83yzq3{0h)2@H~PaV&F27+PpWkc0ftF$wiIJC=kx#e30Y@)QRUyyVd z2oTeD$V4=(F4TbNU?D!vEoEsjR}$w6=Xr}C3uTMul6fIaN@n+tR$;?O%rZgf6%0#U zQ@?|b8)6_B2#C!J+u4zeSr1(oyKIYPS5kaPR>E~osn)xVW0T_lm6yNhQ4w-SJ{c3!KQEz^Lt-7m7_B`lO8x<>B4oNGP3zS_+hiCf zEzHf4gK)2s_Q3h9b9)_%BNA5o+H90^v25G0#K2`Iz)F&A$)rTVpaTDPGu`~Q?!}bb zK4tlx#m8K)^!I!Rlbbgf6kRK&qk8JB%C)+BY#Cet<%s3hf)z~NI5H1CQDotfEn%1K z>cLe&1houTc*ER$B#%~N@p;Xs3u34L95+gsvB|Rdz^qMyJG$*+2B4Fvi3H422qChG zI$xXdsC{2;saGq-jikRo*{GF|<?mdb6G`!j|fiP=Cl7^oGB4KpLXeV4n7^18Vxkph@6GupSN84)>M%`aVSI2vG^!dXHKw-d#(AwYb?Kd zHSN&BoW~;Oitcz@gS@azgBIrJ#D;gWU1=Y_V6d_T3z6CC?FUizZ5GoTbews^rm19s zg+P|35(S#imRW%0#cLr5THNuXPAwG-I<=Ui6Py-vWijA5lPb_my3p|NNsE{Xez$(k za|@qzUGphTQ#aRsdoF4DS<+LdNLjJ7s83T#mus-L9MiT%rRkzq0j%l)d) zy8)aFgvZKrLP^KDLY#Ed`F4_;5UB}?Aa_Q!=l&H5LS^OWAUx!Zholi!#+1VIZk~Ze z$;K?liL65pExPnv%A;b{$74CmYrv_DN%u?@=v>|r;vKB4AwsOM@^~^y1Rs-{IFWFE zb6=CoW~rFV311LN`#=P&(7-S$+!xf1>yVL2kh{+A^acy>^KA5=P2{M6!OQA#kYtf? zngv49YTa@y)Ssn7na(WbXdzd+Y_Ji}b7hNv@AC852q{1qMY+=rnNu&b3HWI?qh`55 zYrd&Mt7nx+OPnOFxLA2z1)C_rkZAtPC9S~b&JBJb-P9**nnHeGeGL?ZEIQq8IenCH zzs};C&ub+(7WBa%qIzH(gSvllmV-qJgvs)RV`6qh&Xh`;1SLm9%fOAB*a;mKuZzV; z4KxoH+rh7AJ<1^d?gn5+1CHnz;8?F|!8ctfx%6_{?THA2odE5SVU%fMc1Dy9Ik?eY zuqTZ#7$K#B-Ow>$VC3_xLsnlNhZPe`g%ZuAipYer&#F}L0zZOfe-~)Y}A1G7>x#LARM?j zN-2>@It6!O{67rLUNJHuDjKj~HUw9V?>v}w=|mAr9V^GTJMjNlnx7Yap`^{g9t?&k zI5=EAusLwYvSo`dqzaXQHEV!-JDVW#! zj)w@l|E@)Vg-4tXdS4^cxg7viWjGq5z2gJ4Ycx(fMq+f;Se(WO!yAe!iA2&GU<4qc z??UHZn(M;d=I?s-~1Sy1{FrsHB#Xq%9mGrJSoCtc(g*HY1d5CARHSfh$$FG{86ulnWT_ z6GIUSvKYav0m>hY2`sych5WR0I98oesQg_wft~(`VZEEXW?RI0LsO*YVNM-PN3G&piu z{cHxY@n*@Og$%^N#>E&#eJNiSD?XaVWLpX11JOghbxt2E92;F#A}!$+C_nX6j?X@J zh$#Qpj$IV+OF&n4Xh7RHHXSnEt-ZUtD%G%*;VJ!5g&ITE2UHt5F( z!u&i&yGP<;mchS@uSK_j&JDt;Hp?eR*d&t9fm&BHD3{v`;@CDeG|^(_xT$|JOWxVC zTHB{_TY`N*^4TmIrD6l4@siEp4~Ho_Iw78KCdZ40O>?=D@U^I?HskhUe=e-}Xy#T! zz+mHGh-ezzUy6kpg5Dlso>eTrd{D?Yi_=uIEiPy?&klPPK9r$Q&izSQG`o zCzfEzZ0`n8iPMF$7zOGk{F+9Cksu3^DD51LiCK>^79p`PHlUM13?vfC+CcP+U4m2@ zws|=kXT@xpl&4c3rPdBE)b}9bVwuH9w{6DT&**_5MTbWkRv*hv6D)C>%@%1X*O<+M z8H{wvYRVbiVzIiwznM4IuP|t39LE#C)rdJIE#Wm7{=la)#o$$6bQSNbtn3O+x8t5m zO8NpROJ@mjoomZ#BwGt^f!NfK)jb@nx(%EkgsLBVLg>Or86@8?kWiJ&iR6fX;@AK zqaP#xo1Mwm{Q-)MOjbJfx=_S#8fICP4TuMX*1eFbM7?SRT*G4CXn1)Pu6U7u6Ath7 zTz@U^8bJz>br^Z)N3-M@pY%NEi`=M}n;uPK73oWzBwt}hbPn5lHEwrdSPm6R^;Iy5 zL?Y=0F6&{?=WNh-;axvl0})-}gvahkF`q(%d}7fSombRXF|3Xkh?X3U{F);6=Gy91 z*&|GCzh%Hb0E5=DxzCf!!Y>0R03t@6PZj9UOp0DOw?r>ZCFsObmKNYg!3KQuR)RwQ za8ztaSpPld`;<$OX;~tq?&+l*l`OmAjYe_K`LfAkqFlE#I_#mGVbXXy-fCdHDBoCT!h}`x#VlgSXESVN3Nmyv3JqgEV0pRRNs(nB^o#U zlS2_sQQ<@_>25G$66AXpV#7h+Er|pHHEgokNI}0;Tbi+Q##GfR8)B}t$4uFA>D8q& z{qHjcVc>K_-NHFwTQkg5_*&XFdlb_=ddrYT2L^oIu>_Y-VIb(I@mO%pdxZOvvt8j( zznL>G6$|wI6Hm}HPdrZLa%n?x+O43x$6_)1=tn=aygd?5MdZ8q%K>21vD(>Tt|T5QzbTTvqocKG}{TT z1XqDeQ27O3x9Z%mL=A07(APaabr=A{Y{*(>S*rv{Q3#O7=~*E_%DpW>qEY(j$3C_x z0fOaC^SP2(-h^dNm?c=5Bgk*eQjJCfv}Y(nBM}yg4dz=uu|Us#=FjQEOHY%B4F=cy zdz^#rqrE@{B$+!g-D>GRTG8e620(` ze?e2vKE?us?eGl*2!cpx-}Pe@d&~Ps4@WDq+)yZ+n;Kz|NF2X7aE~tWReoGowP8xk7kFjqq09%`FIl`#O%3bzAo_r@QGx>q{DM*u`@UX zOheTBakeipU>#XJN19p0fy(hsfNy|9`q`x%9iC0mA`1;Tm?Po(XZU)K&S&`jJe5ql zA@Q*sWJ$e$DFsLaC^!5_PSNt8BC_vSRcun&c%fk3E|R2sKt;1`r}4%_B9TbC4D?G# zm7YcpbV)A9r~4=xk8>I69`g?i;b3s%(b0TDROCaWl!)%8*`aIb?D#EoV#nL*^{Z~D z7Y=+MJ#)Y9{10iZL z0Z?C^#2K0CC34Kx`U}I(S>$UzG@Is>66y7s6dhwxl`53QlC);PngnD;BX*P&APwTr zrcb(F@$YQcc#a!+vl$VhaUql7~8z zqa*zK^ynLCKE6lHf|UGGD)}O0=pk|xt@@4igXKk25Ffcx)BB;okN4z4hR!DPR1h2e zt^Yl)ZIM;X;92FsM)3EU`3%{`9Dj9d?M0kwiSr;;Fht7nwHUT5W-m4aocSAx7A6Hq zgD4;VGb7+mKdvb0zjWR5xkl?RKJIhNLWD@V2a7ACX<=7%sX!zWNpIp+XFdS_t+i%Y zUfSp=ucXW1+Xpjr(|3`}NPJ*`_UzjyUUsxx@K0fu!&7xC24b`jzlzSWusE^fHaf(D zX8;PSXkt_!z+Ddh8|7AT4${ieEB|Qu7XTAG4tOwela3o6mue+Xt zp-}Z``*Bqt6@vppbev^@actK+=#{ zOQ@P9XIM0wDN(_|YKPVVvjKyc=Mp(OGMlDj^JzNGV&u$HUhFM$;?x4 z_CN)f^adA22gF8IWYomRMRCEOxtO@4!Lgc9SuRNM9S$Ft~ zT93`(jLk04Uk1uTC>)`;zvsO|h`@Gfl?cJ|C~Ul33=Pw{v7710&UezG-S4Ku{CH;c z4U~*dlBEU6gYU*gld1h}o5^J#PUDMtqit;|z7`RrmU3kgUF$3hlCu})=-i7>)6&sb ztDkBNr;sJ@!f`GH1`N;Y(QXELTVMW40kR2DXZ@~rgqwy>yS8&!Rh5lfcD^r~YjGv5 zKN^ChGa$aYU3WwaiR4Ozk;h^|hz$q`eyoX&Mml(W7KS1WMiYXh`h9XnM6w<*B$p3_ zp{y(~FDRQr==MQ5!rAwA;`?K9Dmh54oBgPPnUB2(uBLZ=_wBT2ABzwctD6z0h+<`H zep(pVOD87ZDg+0_$LaA~MCe@ja#WU9)oAertpob@1r{H38Tfs)zmKooL(42v;p|Z= zA9|YXTw1)>5L}ntQl8ukC-@?)>cRd&TEH#9yZ`@-SV7|_S;aD?YvG{7i zcNLuq-%KSfT0JV+YS7pZ#Y41jd{AuGBk4|XXS#JG!rH6{5}vo(z{B^!XuyVYx~|Jj zI#xTb)GtlB{wk6Z9LC!LzI7y^(f@qU7~Q^eZC@75b|BR5sl^;63gw1(FmDe24bLHS`Z#5u zzL&hShe>f!Vw?DF7Ixa$ZVG+qXDGPm`s%^%<*MNb-8eZ&TBU#D?3X*Cx1H>>zd7PJ z!v8{3g8!Mzdu%P^14oy96Ld2CRw`(SU)`R{DQOJcud%@}?VlXt2D5rl(sgvB01<|t z?u^V z-Ih3JZ#AgL@XJ_f9OKG5(azy_^0_>nKXH_vJ#vO#KXZXXr6l<+Y=U<=SUP3-f>gv_ z9l>GB1c#^$0TLeL=fgs9tSo2k0Kc%20KsPprcI}pax{}FbZ!|d-$$=ppzU&GM8`w7QBE7}NJW)w4DQv$V1y3r7@}t5f=k*@w+RrG8?j8vG}|)ku@(>^7&Z0# z{ZfQ%bFi!menZR4UhO%`3Bb$*Z(YfIqYMgW6{Pp9ZF zU!0~)CPUG3ntTpIz~a0x!=_T%A0g8hCPNQW*;m<*1L1KyZOh=-HWDBfx6Rn$8?ztS z`=e8MoR8({<5a%;FUY~tt4-cl{I!4gH5B^EU-R@(h_kwT%X}jOM0`TBc{pRe&^!L) z1w~7J%JGWNad}&P!5$PyUv&fhfyxbNwZcdwbpa!<7TK!Pz8Ux}{ASHby_3H!=`OH# zf2H9n*4i&?&+rVNz~BnX3eslQ`*#g}(3NU@?~t}sd;qi|Ty7{7rebWIW(N<@>G7NC z==8)bG&OPq%?#|PL}UjQ{ZTG!7!2yZ_6KK_DcdxYE{YKQ9Rp&_D3NyV zb#lvvmgEcsjgd}}k(yKL4&&PcNQ6E%c?Nwl9;)Tg2y(=s2 zb|vW7DHQODHdrFrh?)SXiI1%UMkJinJ1v0LqGsI6)VT!175)Ru^I!BWTsCU6au*Ye z61)pj7xr%L`0~%W*mYSvzx4ODM;ym<%sSw8Ex1DE?<(aF50{=_I$rymi_gWg+Vjgl zbNTmGUW@1A-~K}3dsn-ET|qU!;Z*J_I+W!@GxGIawG<#NMr=}On2&S8 z`v%wG%oQV3BC(;%0z}e11pFEW1Ny~|P9j;4n)v93@&bdf8-$SXMUZJr5)2)257;=d zZG?I@$VS5RWy!HC$4v3sx_I1nE`0|6B$fA<9jks8$MMEbyH zp39zB`ooG4s!(~qYEWU;hCd@d#gAfXPwj8`5ud3E6VU6;HH3!{AJuE@27;O*mbg}^ z2#w{bn}Bd#ULI;7JdOcwhR6W{qF{R!<54mZpV%*m1mz`HbB? z=S38(H_9kjT>>2c#s?#`Ya}Kb4@vg|Q)R1tKwxNL=@SgUZUIIb){w&|WGkX$LHr<3 zq=4TVknc#Yi+w(9a-EIu1A3*40XI;Y@Ez4!wRYX&KY(>n{X0D1vseb^^ZChF^+yuN z@qI#ER1DY3&eqlEIL_~jpI!d1_-=kK{+6F}szp(%eGcGR%?AXtFg*pIyvEm$AQB?- z)fUv(^>{sD(4W4ZrWY5uK39)*BRIDKze>ORwjuhVy)p7F>$^*qO>^0jcI_ zFF!`7zxg>biv`g>Zx$@W3hz2V`~JzlqR8%Rsz(B zjaoeptuAzt_q@8P)1hA}>^vVku)jpJ7;e+T|f;hqe_p!U5O0SyF# z!l;6Q-XKG8eiT0}mq$e*nSGVw^# zr2lm=L(j~WFXnwWf^$PZ@NeEQKtFqZoCX7z${uD#Y?RwAyZ|GUq!&K(r!@1*bL4V= zvDtf#Sg1_6qU@qE%i*+19$Q<_zSzG;YV*xtN$1fW#=q~Bq zM<{Q+%k1-Qc;j0PzZ3UpgvAn8JC8@a7C@VWt< z6PC|x?^S>>D<~0M`wPHBn$^Z+|zCcXJ~VqcRX!S%5X$~UIS&?&t)p0Z(WKFkJ3%w|5G%$Yj5RbHw#~rW0_P= z&Xdlff3@G->V&0dHSqzsPbzU6anuOVg_Yt1NCDDLzUyz7JSsipx#hE*`J#S6fcUAv z8E=YLlC6R}V6H3!EIx)~VbQ@!B}xy0cV%yYnTzf5APB`nX@@v;{Y`VG!Kvm4r!$S%hFy%5DPf z;o#1zX!4D>k{%4B1F62#9QZz`T&7ZDfjoFs^Z<_Q9xS--OS_2>%lQhV)zwD0ym+o- zJfo`WV=T$5CB~zOQ>2hn7SAP}2csjUY|6_m&3og6VG8)VC<2M3Yk~0S_Sppp56seZ z`aID&V*Njsf627Hk{^#-y@!RQHSjGIPUx8C>IL{T7s@W(KUJjZeD@jUy5CO&yLR)V za7o`Zm;ouKQ{?u50C7Dp<0{HGEM0$|+lEy~?PQD5X1qu43|fl%FGvmiE}Oo?Fc9De zG8ed-&V+8FvKGOowq(R|+rb^AZJJa_%+aZrpP^ztOTYNbze2HCOiIBX0V5_`;RAyD z3EvN-ZU=^-FbcWz>!?x4c_i!6_N9|$4do0Y-UY`K%W$M2(;ASE$j?t4Ow->U&24tj zz9V4bVbI`PE4bolNsl99^_8)P$}AKG=x+vz>O`0ErJ z8mS)bIy@F1Mbq=XkTKQYp9sluttnYL%@RU8N5iz|DZNGd)(AzdTANA4;7my(7{pFNSIyU*olwrG>n zCHK;EZ7O5N!fxS=ba&qthwIUT>3ZKNy6)esCq94_AnoS%I~|KcQy%HlTvIBRE>~=q zk1ia0kzRV>>vZI~r@Yy7XQ-G?RNsap58oQm0Q7FdzNK*9ArIYBp3<}D==5tZ&?}GJ zM^E4T73IX?*U7|GW}!gS=gx5lWLL6UB3T27)Q%hUn*ir4g|$SoJ|)wprEHPrQh7>b zOT8D;w@pNKg~C2~`}79rzUPV#{g2nO^r^!cdVay6j0sW6B7oo9s_Vc~DYKB}^XTrS zyPKevy)Nf<(e}LOIsJp_s{f;?>#wXQK7d^O-ex}jaiah7uRq|pw*NM+Cb#mv^5M8; zyL9kulAe6=D4jidM47*Ej?!}%D4R}ug;YW@@@aC6f{5*}`9q|te5<&YNjrIUY7tlz z&L@}iEw?yJb5mz%>d=dH{N-oq;IrSMGbfHwA;y z<)Hi{%pW4PbgC|h83p)N^pbJH=ZyNGRrh6(Ncs&Jmlh|~%4XUE%-SqwiZsLGBU>^l z$0-)}Q^2=<>r5>l&*g18m@p}AxIHyEm$h6vmNDsA+M*>scZ=KX0t*pri-WRKa$HVc zU8&3omySqrP2w8)T<-j<&--#SQwsL+Xs)DQPHb$_+7$kWNrBpQl_VO}WH8C1%di+=UrRCYF|kO+~s?DIhJE$Orm2xbzxZR5d>KzYZWAi-d;dPE}WAJ9B))&~TJ<=OcR%_Q^u z_bk}CPq}*6Fbzcl{JK-EOLy{}*%JNv!8EKg!YG?MAusfkz}n7zqy!)A+l861@s7;6(DHuE6cA6q7M!QblNi#qcFF9z20kX z2J{C<(-wX5V1^#KP!xuEFM@jr^9P|ZJhqJ*36X(MqW}A`{ZabWHxE+WuZkJBdVrAS z0=eY5^r<6X{=y#}{^no(MAWB$oNbpK+`nFynaf_(zJ2Ad;3MK=ESNnmre|}O^WO_) z>mUBZH=fMnc(=gyss0SEa#?0b+5;kCnTq-!NY($HLcU=fOXdywy)V8@uboYZ{V3J~ zjloL8ILg9fXn2I;g98*D-|aqqWD}Ij zW+V{(b#Lv)Gdpw+3vaK;j>eJnga`t!d)x4h-8Vl%Am1_Vd0 zXi}P%Y>{O< z6!iNj!XiW%klUQ|ITj#?GIaOZLSv)KWuslyRM&Cboa;KpRZMa=50ycFRJgp)B`oE> z6GioZ{^d8{bBgHBo_AQ1HLU}%02#FO@b4?C_Rn402_oCiEEx31Uw?^?PAAtDAXl)= zxULBkF+&oGP=tj?Bo?DkBuf6+kPsyC0f>@88ep*!iVu+*!BV4THHn{#SIdvJliImg z|HVuEGG2SdjBv!yWV7&vp?oe!*-V67=o zOsD6Po7{z)YenV%%Ye~=_21!em_p$Qg`*Mjhawaj92GMtu{ax+fdC7WK??G5EjH}= zf+0mgW3%l0P(Z} zhUHw=7~sCa8FT+6H@=|`?BHT>kHWy`H8|9?WrjyZv&v zc>$tW{MWB|j`tr&gZh(|*P^^CpZdjH^+IYi_H@DU8Q#IemRYkkibv@1GM)UEbY5L4V zhiNvEWdor-w*f|EEs57`K1!X(6^B+So!6pDn&?+=g~WD(*IlBVf2G&CsIkK^xj zpHIxLAj*`eMjHShjS`Cs_*Vcp?xxdevE0dXEV6QGuE-Uq-eTF{N0VHmMCEc>2on@Z z7`w|;yQmo1K6>AWK1BcQ=YF1oEYzx5wQV@NkgkTGy!^tE4>~u%yGCL(G068{3J@tk zB$6%xt(6oY?E`y(eC~LT{`l1-ncVDcxBNx_*Ng!1>1xupoliQJ{$~?WWxje?vIer= zwi)lqKZqHg_AeCA`wfM>2|lEhEtl?lWr6N`;y5j(3vCl1Yf%#wYp4)GyU--AbEPQ8b zS+iX@x0s=&OmS5K!i_2I9*xmhJiK-HX9ZG#)Q=P(l70oPl@uWD150r4K9i^a{%VR+ z<=zU#+X_Vg*PsAlGY+44fj{`$!vXza?lb#hnN&NGJyV-8yz~y$v);mmbGX({!YD5m z4RWwM<`z_J7?UEgVFKesBuyh#*TrM0T%sI8+H%Tfv$QZjPxEtgb)^MPnDMCneW6$o zN(1{5h~HTDo0Sb0+dIp#5oj^WWkaOxNHpXpKa0)PgqM$xM?--vy+0C(MAGk|`4t0$ zt2M-1f=2^>g<^Wes+Oz|`bZXSmg9MMJGTBBzn0>o4x|8SBc6Ass(8`2d!F(RZdWeG zfJWq@a@o9M)VW)!iG)T{FM;J>g+j4=+WrnQh-g>w5cz!?-#4KZ#r+EhbeiDf!EL-L zS1$u&rXupCc$7%G71UGHaVS$Pi%k)eMMJ#q1_lEfg?%s)r39%1+i~5KoKJQWN}8VFqgmWNrUiQb@kWcz>s2x9{g z+B-f#lS5G&iiY?xBBEc741_VQyzN02Y%Wkl=jrr70G6j=V^5RokxZ8-VEpZB&i zmD^a`alI3))E*rq%2eKw)PuAz+Qp%d`xGs3i>CW-_7Hcs3O^~&UP!(;yO5h^13~sm zT>uOOL+mZGeQyVhRXCl8{JL0*2#+#dN>Y4CRs&10 zi>6KGs?ZRF9GtK+8^^Ibd#CI0a^eA1r0oc5EUp{^Oys~iRhaKkktNC_UQj>8_e)mx z29N@z4RC*>7z?TWid%RqzYNt%B-UhGj(zfEviL%(WG8#cpy_8U(;&+ziyODykvVWB zFak6UJ~F*iUqyh4ZMd_)MA8eOC0TdIo!{E(wpi!(ZosFB9l^IN8?A~^RK;{%?}+2k z!=prr>S0NpNCDCg?)r$TsL@-v{=U<*D=R2ryeNuml{&_>yQ$c25)yzE|tWN z>$Tn0C6bk3MyQvTq}3wLbrR9W;ZdebNwoWTCXrkMJ-^QNGZN566vE}8tqBKx9w?({mz-WazRzdU-__PtAP``ZP{DZ)=PQ-%qU=U&R#Gkg;?tFj17Lv$NA&) zvEd}srNnuH5ad#XNLC{r^3zy6L?H+fpGHAW@V|pk9+t#zSXsAI5?@4X^;& zu07*g*R89H>v-OG$nhSQk*}IZ3Xpc-__*9wS`hrJs*0^>&NG%bd)P1xZd;TQeoM}P zbP))NjOB6?$$DTGq?<>y#Vn1_Cyic-q?h38S`(|?Qg_iCirvt+=@KmX-p6z{kyl(k z-ydYnqT+hr8VUJcs=k&qffOJuhT9I0{KE#3uS6;erov{eo#)5HLD$6&nL$nwF0|XT zR(C0IL@yLeUDNnWx)Y3Q>uliTvD?71EBGCB^9+qdBIyk<9vAbgG#=8)zs_D5{RplV z*E|-|gb-N{H?P=B`f*qF9%g$%I-YL=DL~pmNhxy99&#P)f)?=Eo@>8Mlzx^L7fZ2# zGQhS=wE9U&7l8J~D3`^Cgi?S=HUi=U&c)p%LTcyK3qC3miKI6`cZeB~Ft!BWhOE45 zRmFg^x8S+%W1i1Oo19NCDC&;&*&%$^Tvd@7?;lfA#kR-~F5SDYxBOgsoz_>X^%K zS3f4{2KdGl@&(FfvQidG>Y`gjNNw4bjI<XQJ=Q$`$mM_bv@@S>#%QS z{r=P3-pa^Vn?wqbHo}$H<3cJ@^$>ZU7v&V>R6Qc;21=z8<#RcyKO}VngI|PN<<#lr zSSY8pWmi&sNFMRudqS zE&+{fsZgYRM(!shX%3Vj%z!`~1cN~#L|U~hOMEw$Tk&^dXKgI|!f)ZYL?V&24b~h! zZhI!f6%n#sBnVc>BMk3&nA=^I98FQ4A=~@Hn4;vWACa^GDL^{Not#|P9bm&jhO6l^ zT-PDjw&V*U1&9}gPUw_>}{0;F>&qi2pxD4rK*V^>-cT}C07qg*;IXFwz^<+2$J2#R2k zLZOgISgKV^cpVOhDa0wr&uji9%V$s|5{aafKyaYtnGC5E(OH0Oqd_`VLFi%ijHWB! zP<=jx-Ib2#Ek+8E4gm*rvrG}L!NKYwNf%*Q78T1z^_4`@dc+I|iwPtwrGmJqCA_Y^ zS4&cKNFW`x@WMN!FeUDI@&=c1~5&nQv8`j(`HNCDCz4jnqAB*?kS zBO0h4l5`Uo*}--#(&m#$Boc{403&fUq)|{)XuC`SU_dBgc(bQ7?q~SrqOxo+H%aS| z0;GdD4n?>W2dXb6-Gri$V>^70x~qv5>rlHTRnJKxkw_#J;5*pYE0eh459*5W0fCR& zc0f@TD%f7`4-ckaW$_`GMzjejKsvvbdMUd2N$ENFtF)*2LxpI$Jg=kuOuKP^PkF_oooyYtp!f+!@g*v`r#mp^Jm8 zJi27aJwMurG$lI3t+(Fli^t=?!cTu&RaH2mSKg3x1&(dg+urkD`j@}_D>O7R!cEWC z+#giPg6-0UyiHR%n`Vl3cT`f&j)-5O192bi<22y!+^*lt!H7vvQ$wj%Ml8N3xW+ zDg#mdjH3J425?^|UA=w!r}iYPhb1kh&x=v_@R5&v#Ggnceutm_DyNV*DCrt%0^}E2 zfDCVu070LXEIahfe3|Z_D$?PUNd>FBmV`})HG2Q95dHYoQQ8saM!I^uQ%C_Kkw~^$ zfMkjW%_MS^Et!>*VbFdLMT0_wgaiGv)fe*C;XHoue2M<(l@!gFY|{FC8e9sH&LEdy zb%=aEk0n@Rs;bH;Slx=p#y-*(facug4)yhfDMp%}nk&;n(GjCf-I8*gPG@bp>vVy> z#%ZbCC9^XUiA2&t4AZ89QQ5c_ws_4RFP1Gb?d}>h+AI})rBK|DUBQ)(4?0Qu7b!qG zL^>K(S%6?zMA~fK2=^exe31%;LiIprfpgzt*`$&Z}7Ba9-|5U?}bkYr+{_Dv;KKec?E%octGx-kv$bxOu@e z-;9Lki-p2YelLK}RR5%JkOHJLC}X+-zmI73wWQ0yn%!clNZCx5pLf26MSqsJTso98 z#dJ4bcP)Hw^CgE8hAV`LL?V%F7tlL|{JQY@SPuG-SU5ld-`4oYwG;G5!@)`@Ua3D? z2it_&4AIDZ#LK=lQFFJ;)joG9DxOM2cwKM4^j zKso?6Aq-^-16*~b??*R-R(6XG>RxHwvHsfTB#}rY+l?@bkMW@>ix58x4qc?dXplzZ zAqucK={vYz90;fs*+!vw+YJi|C1KLFLCgJ^M&57nq2JL|%bPfM)UlcMaKso?6AuKp3L?V$$BvzkAJmoWKuI<%>Jqk`Ajg~|rkx1GN{380?C`W(7mpB>LDeT)Gn-R7H2!;&N0FnD6 zny!A7wcH2`3$@<-tn9k)1r-vsRLjS5H2JnT?2cZZ4+&h#!h3S@y52%*l6seu^ZdA?WD17Tiw{U zjc@yYe_*e@@!T_WX3jYQZ>(xuq{mV(`Y-ro)UUhzFV_&LwU%5}lHn--?jx&oB{B}8 zxdZH9id0mifRjmnvDTnLiTQR_LkdyV#R`lRe%{S~TFZa?P^1LQh8a|d+;1e=1{?Fa ziu(5$%ND;-;P)ZS`$!jzn6v8tf72>lF>q(mglfa|8fQq39cohw4yqvIaq|kKSXz#D zC)ujW61o1?MrrK^x;cUkb+Fq=avH&^d^E@GHDAXM7LW%#aXXCwqTSaA1~2Q)F*C2O zK^A~QRZ~%8)I?A~`4JEq!UiYgJ0e#|t-{7Qz~vfnO5HVSYG6X1%+aT0EFf?^YNDa! z>jZ;IMSW@HK%VRFqL$-8ex;QQd=eGV zE(Yz%pWNd-lhHQ)2Z#*R2m6}prk$mx93DNupluReX+^mIIf464v}8aFL}^)~c-5-U zYQY0e>N}%sy};ctbKjaphrx`zfE%%R_s0Rr3yc6^=y9QA*uYPvf1C%bnc^gTt?0RC z>^+JN%AiQ&6xGW5wH5YS{EVdqJzsi# z#Wy?20HPzd-Oi~S%`7qyo-&wHptllvDO(y|+%MV~bHs^Yxv3HRj*LW>7o#3}?D5Yye{#(XZ)IZuQrV4+{$9$_KfR+^c_%Q?q5rhJK^+w5{n#d^x23CWtgI6m*XFmbdZu6TwX5?Cv7$$20qulY~>)#%g7P7j_Ym|DT@z6C|tR1+@q0?_frfH}9?k9cp) zF+$VgeoOi{YfGN14;GJlBF1W)CtUx&?6xW+;MhsU#}|TgP}^z!t(c=01*ekm+-nB^ zPI*}M8==G;h1aoDw0B6*a1IC^p4ZHHs%hEapZ|&WV_1kd{n^1UdT%b#buZG8a+I5b zFDlqa>EuX&&ShrAz;{KX%h+Nx4)0chxKU zX-sB0&4#!GbdJGw+^x3znDg${;i-5134pBA-Y>B)J~{sCjL15brZ!y7kkH zed_VGlS^=dZoz_FEx4RW0p)De7thi>6FU+k5!i(JA%u3PyWy9{nG9XBy;5G_$#90XC6?oo56$t zu|hT>uZ1h`UV&qF%``Ns%7&Y<_M^6!M5Xkky%SbWAZJ{eKj&1FDabOFe(BB?AgHTB zm9VXX8F2TI6({K)ptFtrjFCi`k(0ly)a9-+Cq>MEFi!4nckGYiZdxYF1EJW)#4bf5 zOWFK6e9(-3M}B1X(kfq;One4`=K4o)^~|^_ZEZBQj*)PtJMr9x%d%A6$ zxjLdkL`00wFK6Y})eK%dWg&*cLmD)Ub6CdjK3TWyO*2v_Jr1Rgb3$5Z>Z~#x z8h~_9i!#ze8g544Gwp3UPMZMl)R0uDOC?{dJ&qzvV8usxbf{lv(SI!5p&0{T)!}Ph-f{<( zd!{n;fnR#_7d}QTZ9Mz78Ka`2Zj3@#J!~R_gQ+n^3b*<5ka5+h`9P%3dKUDe^;)4Z z4GO;W)I70zZ7+#AxSHiH+SadpndwDop6P#-;`++vfI|}0NQaJPf-7(iSX~_U-BR4N zvHa84P0JmjMy~V+SgYZLlxAWlJll#QpjK)C6)SsdfHxef$mD6;eP+iA-jvqBYX;DP6YtcY~pKkG52?o zfF1>!I<*c9MRPkOvQS+qmO21zvm!ZT3X0=#kw+Zy-t@lE|f8b%SO z-*e-uS3VzE*191HWO0fZ+#DR!*g>B@v;uk~LwVWwj-jzh%sUT8}I?dT9C$u-*$k*nWkR!cL1K$m9 z+^uNU0Aw%P0%yTm_PPJU)>Z8C*Yti{mXDX=4kis?ys3v2%;03@)_bA z@Yp9bJ@5Kt-c3;g%CfPpRm?V#RzRZCg^PD?s4MOpk6n+QT8fFA+a;T)Zk;?)(8}`r za@(&yPa($z-A@dIN4kitqD>Za>imzIZLhR?6!UchR>IX_er#M^KLnnqKagLtk-bA1 z{@fDa-L#swI$=%$*CJTCCaBIfYF!5KF*7H$CI^r;W;VBvc&w1x7S-|I4>*9BE~1& zL8OW_AfXN8dD56|&yR1fws}OGt}J4$4Dr&;JP_eF*{>zl*;D@}{FL&~9&FvjKdWaD zTBnGTWl!g&1zaK6VGb?jS2%yBw3p^hUA3*?wljXBv z!3>x07DP6Sr$5d&6=;&s#_Qapq`~(J0D}A)7QRhiRHS~-C0fNG40me$xNhml2pZ}4 zYJK7t*iJ#LedDAIQ zU`m=19cGqc?MkjK>sDnd&;{uZ3j<6^A1waZ5sZ``ua$y zH{A*y=_@$YlH^Q5j*6VS@Oph-+^0jTl3P?+srA5u6d}>Jy(jp=Li`xpZ=jR6?Mv}@ z6^YK{PmvHHqV4RSCP(wSMV_A}Ow~m8H?YNU4v=rqLB7`uJWd}dq5x`uBCgwRAKl%8tpr5*el9?kE$G4PvMeWms`GucFU3SGLJ#Gdb|Mh2~W?42xVoBgbF%GPkGG8Yizt@c|S zv2j5{5YR|h5w!IpiYn<#tr0wtp{YM&8-jn5b$86_Wef6ETgHsX1SAcsdFXij;k%^R zLRQ-GacGiulS3gRr}tqVZNM0{<0A>Sl=gq~BL)#EgB6Q4F-ctMGErYO5-W0a&Uu>D zZ$$ag@k63b;_uXlb@QRkndr3edW{@g{_rKHx zbNuRxEWl(R^)UV}DBPD823cA5rw0Wk)6d%s*HiGR5~w=2{fTu$(yS^kLJv8Z_#%60 ztRh;KDEcY2k^4GDR780=r8LSkdWfvxX(tNUpA3JaRcB5~gBd(B zt7?zh;AxFP#7^_e`r4YM)%2Bid0M*0x4bpHoOiqVrrYV{E-K_$PAs~rDc0J;AnUqA zzmL)8CuK2o&d*UZ4S^i0RoCyl z$nEJsM7+kQHwF3We7k-DPF`UTWNkV?N77CKl&KJf>sg^fsjI7KNNl{g)uq27WrB=W z@>6$*Q7x*qy7YHgqx4PEan^xrbw^ltQZ{MnB|PK(P22jf*VjJ{qc8Y9QnNKv^W&}I zW>H~+L56k-enslz1JFyTVG*4Ig-=Vkv8Rm-pLVT|of>IxyUiEB6}fF2Q?1Dbm#EYZ zrHUY!#$Tv`s@~%z)ILX#7TvkWCj^-oz}4vX;Xj4z#k=PZ+O|2xG`6=EC-Trv=evc} zK3i!I-MWmE9647VZ7#!mAXQbVK;`Mb>Y-t?vrKKjHb3^?doTnI5u>8j`s5#oQHTbW z!VvmP3IAb4LoE$oD&~rx-n@l1bPFbeSrZ(s-PxN3<;@O8ubVD?X&jD=is0`S>#IRZ ztB0lfI7x3ekW|>=vDWpmw0okT$|6SgbsX#fQ=#u#qeaXcK$Ya9nBU=buHNSP3{A>M z6d;X4u4!RngW1ZqgV%0Vu~)D4lFx?SIq!KFX#8P#2axKnpr_=GR;@j^EE zw)dweSu|xn{N`LlS|f*)6?)wi<>mQb9`E$Q{xbH1c{uIbRibGd0t6t2dmH(I zlexF!hYp~!%3f&II8XxA`bi$wLXw>y1cX|r?db>R#1t*Jc=NJINWf9gPFr!v01d90 zL~{79(K^#pQCUPrAOY)$P$GS^9V!#`Fs-Z!f&3;^D8*UZoP%B|eLd1m{?;s?11ZO1 z7%>zPrkWR!bB0YpU;Lh6@E$xc95g+ti1veRN_OE6Z%!yr0tQ3-gumy~obae9c}s)f zSNd&o+@JA_5u&81E47Z4L486?`=_}xd(l6xpEty%kU@|Pr#VsWS9qugv8B{t7Vd6Z zPn?-cb5DRZ-kr9KpTpF{axTic#9!v465&6+iXR94(y-{^c*{Zi zV=a2*%lX0g)uYN{rqwbtp&+%y(ERcQ#X*J?{l?TTEaJ7LR|u0=c6r4Q2AkV%P=SLl zoWG3f{+0%B<`7i1cx%^H+mri0;HvH zqGiP%=SKKU)!1@kSXIditU_ZCzOWF@i~ALiwOTX5`}5}w?3}d@uzKCE32`Uuww$%a z$uHT(M)9HE|1x0}^K|)+U3^`m?cJEPRfP^n!S}ACdvO!HuW0L%w(saYLH!YND5+Z?3-+AkttoO;{Cz zhx|p9)BqP3he9?b01|}Pd-w%+opBq+r0)-Dn&7C_)FD)yDIt@^)cNEY;t&amRE9|0Mpi zN+QA}5N5x9ZaSzb_>j74S9j3)j+?idFsZ?}3xgPdmdG_7(PI3G&}<_xp=y#kC@~Hv zFBbTF&E^--9PYin)Vg~&_pq{w(OE%tk;MCK)c^GH)xyvrK3G$wCbWW32Tyh0Tv)WP zkNJ-@K`01gyyMZ3Q*p3nPG;ye6g4ifOVyqxF8~Fy3$X&vDXQzkS0D~Sr{EC#(QNDd zU66A1%kdw!a7W}3{Km^Bw{t9SL ztCLCox~eF~7JhV*>BS97^bzNw{TWSQfW}}g=%+1{Dr!D$`3qE4q5yaNbafLt?L_xx zLdH^VLZqlsgV`njwx}j@dDZ+32m|m3ThIbQm&=$v%%iKtlBu&AVN=#*`~h|yx{U(D zcwr_#Kw#R6HmN{%x`4!HCbzI-P{WmvCQ`CC$r*j}6K;{xpuDM=&DOmnr?^pE%b9u; zwsCh$!0I6SuprB9sxX|3L2^SZXqR#FODpCck7;zEb7D@mla(<@m{b)vMhPbHp4>K7 zq@Cj9%vH|3=?#~Gvsbj?;sIoxc;V_G@I4)DJd|-R$5p0jQq2kCjWD_9gkONG$;%!G zvqrN@`=DV%BGijNzTRp2naqhkLqA}5>;kp^;6njMjxcE%`EabG$8*$<5zv3>0&Dp3 zYZXSQOF&xLBfpF(4juCI$R!JzACZ=78+SBmhAe1@=6!TbD$>HB99l8VU7Y zwv^qeGyuYWrPdP5;-{AwB#8$!6m)CBJ*+*&zy3=QIDEv-uko@LI#F}Y$h-cYF3vH% z#^G1fg>twm=#S)T3bUiGGBPKUl%I_PJqL{=-#Cv_q#(D+>eEdsDrlmfL|C=g7ZmH* zwz}YmV&{^)<=zpX(9x&y=2g5h;cr}8&zj~_z>U+ze0NJP_mWQ#OTV8(A<{O-*iZOJ zV!&NJ9=X}cg2cdGF4rkdg=Q2NAP#7tp`ZqAj!+moVe+ecIAaO2L`loAA}<&;On&Y( z(5w-@1PCdq6p;$PEL;{C7Pj5}GEDy1eu}u`7BHkRW<&Y&9UH+h;}o#!bamqmApxb~ zDHE7qxVVh`V+Gnqan|KITMgL?npfTa2aa5t5pY(=byRqX^o5y>Ow?PasDf1$=U2$( z@Gn6U$6YRQzn;anrCT1;KA4cuC7<*A!dJZIyC2(ttNEoRs^`0niD1J#!TtC(#DBHD z_zFAqp$4tYk+gX^eX@Z8W?|DpDMyIKUns*}6&H{d8`qB#$1v4*gJ1f?j(}cfDY05s zYq~98e!>B$=0%8jIGe z^`~4^MSa;dxzyC{miq1@R+b9C7y_s>ESz7vuX3bdSj*|!;4b0=q{A*2g6b2L0(B;` z^cT8Z?N%msY=+1OVDe6mbb*ogAK$R!&oujG?zPM-r`^ze_!7wVe>fbZ0JA z;Fyb%lCwu3+lvdYktL`g%|E}RDlZ))q|Xw5^4udM@}qoEP({B-ID!FrW(^IQJ6Wl~ zgo_IT9=ESyndX2ASDlIfKXKM8P0rl*)5~AcCS@>3im=04dt}*5Tzr-pd(?az2X+*I zbTM~_WBiC1i!sfibOOd366~R~ke_Mq8V8BpxJ-P40sNRYUTXk&fdKmElel*jBDoN? zWG9U9d*!Tl&T<`Teoi5CYL~file{+%&Tmt#a-Xtdbk3H zgOuLvXfQ7`ci&0nOCwxpFe7~Isclh+|G!v|0NH3w{;Ztul z$ngQq5Mj>5fDb6^VD&4IR}BzUkef5|290I!khkEW_H&u!9FVx+Wj~@}+lLPtHaJe( z)XFu_Y9a)l5n$t@jJN!o9N83l1!>dpPJ_(Ucc*K$tlcJkAWAircf@zSAiRr4?Moh zP)o~G79Zc1=oQ(@5*1tvCc1>|>hMeltWUE9iwrd_LwVu!A&W+owYf(L*s=dpZ20O$ zEjVKDV8x!&n(z82Ido{Yz`vxFh5QNqCNF;bNn6Qd3{Juf1p&(9uqw+CM~y|Fn;#oN zkrTh{za01j%1`oy0DGuv^Q!V&d%k0aNAlqC_%k^Z{G6q!%NSrbA>#1pxrn-skN?v- z(7(KN@30FjgW2%GsB=V}O*lO!-`z;suN`#{E;*J&Y6Wxxn?I&z52uLor?cFGkSNT| zZJlDfJUkg>zqSLL#A*V`3z#A1EcYA8e-~0`Hv<(566TPNZ|`)V9Ci=Ww(VA2)~JEE zHRRS3rN)Kve@D3*Vk9T1&8$9iciRenLsWY}o*8yM_AH_gTr|k~D^^`!+t(sg%;KQ` zYZsca%3|?5Xm|%sK1x|7@@J%#T!MT-j!00!d!4A*Bkx!0W&-S2 z@1>|){NKmi7RRM)YMfx(_lPD+j%F7iU(U`HUnZV`M@7r^iBtzi>Ag%ZwO+P`8BoLR zD^w!t+0DFNmx~aqh||j2@@arHvRB)-W6FKB7}>cLIGd8Ieg&kJDvpw}^KMauCr*G1 z>mtwT^Q|(#f51?8wW;6Ab9f-c9R?<*Q(ccPzmb)ekeD~WcB!qv05r`}N6>o)Z3+~p4;+ry%m?1Ux>LFNb#>T&(PBF0%svn2>k@boYG8NtCo@XO63))OU+4r z+`%#_FDNfIZ(AYViQTe49_KXOS@}d*iU39R7GsCZR9{*7IfXCNm!xeCu0e-czv?lT zxUG;jINWqTYrkENyQsR~lj}vI%SC08+=WiO*3vH4{fPj)q$HT8?J2dPCG@QC*d=U@ zxvJRDlc_<5QJM}#QJo*}PvA-DRrtM2XhOiMQ}C}l)pE8YL;$*G7O;x!!~rlXie8KFh=g4|U ze}g$sZk+wGGl|Y40RNjIaYeh|RS!aMWL(Lm@xgId5%tT^4$k$PzhW+LM3pDKv}u`S zm!K~cRLJo`T$YoiXXcK(>t!1G1^s8ehA|juev4M3i9}n7Prec3@}vW6T@hq+67QV_ zmbWe%e8{DDICq225p5k|JF+umgy%8jm}pDW_Q5?Me^1BQWAW#vfx}LRL4^NPT_o=5 zdU6ksTkQW_vtb9X(u??>4KT-=HB zPJ{d;oD7-6v|;d0fO-W~BD_1)-vTHIVdQ41?=_Q9>?^x~S*{%Lt9`2u+F!IST1)-A zGE5T4MJ0pG6|ZQ@cg&l#qHSm-NzWq1ip9e0WQ4WPhTkzuYV`v*@Coux`ylWR^f>Ih z^x-M*Hn?`#w`$k_l&i<>oP(Zm)*qX2C_NafBsrIaHV_|vdQ&w*US&a>0BwlYb-R{% z&R^{tX7%3Olik46Y)yK+Ewkwy0Uz=C#aC^h7r`)%Et|hYdhu+}46$jbsK`3Yl@}d4 zoXTE9rbm?ba#kz9U@xHN1hO0}k)|C3`mPcXsD%X2s0v?e zQNQ~jK^PZT!!D!;kHRR$TB32X$rJr3YXe}Zyn;5!+b#?LCtFO|?h_^>h1C3C@w4yBA$)w=lH5<&zzqY#qW6#7b8yA-4T< zv{Liu(?A9vQ9Xbd0Tkj&_Saru>kY0)SiDg^icI)&v@IaJXn2kVz#DJK;i1sZytbPD zwl^ZqUZYF8&Rm=22?4_bQ&qPEhCWmD-5$yK1L(BkItU!bLSkGClVa z5{AQN!!DHmcj0^7zWb++@==GpG99abR8zncFWzodF%7K4I<(I8`)_JaA7GDf{J^D( zfD5WkpdmomofN^gQCX1og#hUMEg@XVj&4_X^`21w*_bt5eFQ-jNHg2e5^&Bnuzptb zAL>Dlz1+=>U2@tN5SS`^uK-GWuOVtDX@_dQK2bD?nn^>xxcq8EBdF+oXu;T`oCb}8 z2pgs!NVSgjI{TtVHwmD?MU1GE-q8y@ptYE;0ZHK_6FkrLbb0CCcnD=D=VlFmPW=9J zM$U_AilX%_ldiprI$qT`%lR16mP)XS6+Vxb-%qM9G~I(0=BWYT$;8s)fd?Y$D=gn9 zz9-|YOfxijxUkBC%zk=?8hJ2tm9vXJk}T$leu8EZ@D`|(iIKz~X$_67n+hlCnwe=j$e~5Xr15M zN=1SS89iH(%R6R;YTzHnBMy(X=?AOXySVSNu3oR~v-M%o(4z0b8|wpaKmRDA8^m?j zIwfb1)6b}I$tNGe5yd2__q%|ld1l$MKWbQs?bySK04qUS2VI z=rQKJ{#^j;aKdei)BBt!{Lnk#mTKPo&~N$`!ka|&|7mfCD=~VBS8ofW!l}iZDkkv~ z2W;MNCgmDTbFca)F^2tQDwA3!J+3vTVku2`J}wCh_K|AV&g!pSbcQY=p8-!Alfy-L zWzH*N!}(YmcAoWZA;V0V-gZ4$4}MR3a7)a?9~6VyYG-$Z;X_oRCL@{1PhGzGa3!~1 zdDzdmXVT61UA~dMz(XrX=sR4`YK%#aF?Yv!e){@C&8939m{~^5g&c>s7b4p5S846o z4?e8?Zb!aL)GA}>_wu?eAjtGk{(4yNQTxzF?bBzgbfa5I=a9o%?`FKfujj{w`Cr6@ zyFPe^ugh12f4a^fHO#3coOQab#LY6zgd2o$=>A zu?&K?;Yjl}(XkzP(kKlvZPN^%kX9b=Fp8-`oO)AXdro##D-ZbY2HxRQCJ8m2?7;$o zFnS=oQhNMXd#5W8igfYm97xFVkzO{eRIM5-K5_fCt}1C1XqiqC5fh2>Gw$gNBuJOF z5aS#CK5_BuvGpu0oWW2gYf)9R=X|Lnu~QZ zxT#%45p($MBL&K9<o%n zJcJ@?6#S#>Mb#3`Av3fJ?W-hET|IKeUKnP37zCBfB^6-URVK#-VYm8BGnk#)c(x?; z(RbT*eQVEit*Hl%CB|2RlkGJRh#zNN!@||q!tPr0&3p*^_PF-2b0B>ph8*q|0g^P) zo$?+1u045k^0B^QQCTJr+*=1;S;KxExOFI#jGp(@a0GC$)V{hvx1j_s@}+9!R|B&1 zhv(`W^pi&J{$5_h30yso6n`_sg#RFHOhdlr|Ah95>FlLChZPgm*w#HowD01|xD+{5 z|8QoY!U}J^m+(KNNs_(4ML_hDFg15n&|KtH^b9(m1izX**{~8CR}TOyrLo_XQTO!mtdxyJ zc}P7eoS(gn-0*70JIt0QZlTki>@J9H=nW$2=RS&%^p9Ox z>^Hn0!Tqx*6T|!OS!0{5d+>99cG{k1?U$N7JzRKA(nxsgb8}T&_M=Xc>*w5EVIZ@>J=sM-TCQ(?C}O0wYyp)| z7)dUWeS4RS=CPS1RAyLk>=@R^f!?T90p$#gg>GY2TFMMkT5Yh##f@NrTh92y(^--X zXFbCu$NMtVJbHxKRO&I6Kc+4PrYaxQd4cUcS(8xjIi!C(NJrVFL2Hpfc|SV8W@@9s z#yH>l8D%<%Ec#8lW-GRfFf~n52gEnG(3$;3G!2-Wy#xQ0^HPG2Lx$*$O&#^S95(fP z!ZwBQnIW=zR^53)6Hm*Yrk`1M0C^D~a@bk#8|nfW;Dh_n;q+DxccpkqvMJuTvz_>> z{bXTC{<`14t%eRsc~O0<6^G26jx>l-fawwYbU%? zlw1~Hl@Z3?S%Tg*<`-ibWK%!T^*g8lkoVUWPTKIo6mSgn?UsYwfk`W&yvajA)=EER z;(Dh~xs<=c2&z;otxxv5cIVC%>LfCxR(oun22G{G;mdJ(6MCqPuxp z%+7T$E&lC40!aIp?dzc!FXLP=1^(3ddvqanNz2 zs;W@Qcc>)}RO7__W@t$k7v#E)yig(N`+b}~$%hKnW({`z+K?GdZCA3QM%K<~ z@LcH;+3kvYC38wEIcX=wx$*kV&6P7(Kq~wdxHdXbaoSKd0zTn?C#d!hmC)+BNeVqF zctkue6e8$Ft+x6#D{P2^xlucL|IVYol0u+ml@5&7L`eW?k5oqkCKt?9^Rhr>22#TZ zDDc9m3uDz^^+cE0-QiVc+r`Z-pMnb&KzP{Nb~ipV&2Or$0M~>!UbLtPS7>-Uf8N>mDqI|^yq=YXJpvHvQSw!sy!j$-ygOh4e#V*-h)o7<7 zta61%beTi696Gb{mD^uOFAcfmY1KB#3D2hhp=(c`FMgKxB$m!xr_h|Xtn!LO_%To> z-~SAO2qj*k%QYb|$EF(Jerw9XyRJK{i)>3ht#qK~;{b2@hc|E1n})=rXk3fqG_*lm zj|6JX{$mO>B#uQdy@I2{)%bZ8@r8`|@z-`hM;}c=fe+kh|8$ZvbSX-j#DGee!kTkp z?WBtQL^L1?+&5Z+fEXX1aBx!&kY)T$*=OHoG`z@)TFQCRjApgd`!Y10>)|Tx?e8MzN0aY zNo~KIc~TS=+H(tY{3#+pGLLxMqr_Pp3~5prNRp}Yf#*0j=-YVg#u z3*+cGzqqIh10%*YY7wo+zQ`SI;6n=R8h7sW(3nD3V+W0g@pG~+D6l@4e zw-(_xxSW=gaSZ)jabQhOASL^a*0^~Pqu=K+I^H}6<@H}Dwx{G)rD!Db!;x}j$%V{m zq1sf+3;2Os@m{?kR-#S|bLjP6aO0lM6%)CZCbWp?gd&728WRq5n~_&EJ>>XlqFi$; zg^42$skBREQ!RvPi&>o$z#?g=@X&O6d-FTIDG?vLP2z0WEk|Fg^xPNFBSkof6w>=;9)f6q9U6l97( zYC(-1px3Q4>$!w1ij}cmc_z#0eEFL7ck|ZqU-Ti>?VQb%UhssFADZGRsUht|8;u}=p zF#2cJ=;pGcT{b9{G+EVQ)~;TYrp4igOuG1a-P0xhN8QH@{gqx!1NXDSrn=G` zm7zxW*8*~0ffIba<0)BqI-AF zx=!H2OE|%xgdpxa<4*fq&c~~w_ZigpV2`AkaI2498F_g`Zmn&3B0+m#pE0gwkP{-z zLc8e6b09?}bPqzPjRE@b^Jz|oS*&u0fu4!_! zXsYiK>sAvUp8T*Vahu+-NxBX^hLxV#2&_Lbt_D{$xtP7CG~K|)iS(@@qf*1htTV8@ z+)hw$b+uNmic~5g&u7K{SkqhcnZGKDKPLtXiphDMhlThbP0?XVgP}fGqh|aR4vLfW zHIS_B2R(cw+cv27)L=Ej49Z=$GK27mfgeO5keN`Mw%xTw{~!Y3Gb$S;MkFbgK>1-~ zBLp73w^x7jCejFA{3Sv__PF%8t4~60D)4vc8`u}PRzL(wLLcdxjU-Ivr2dud!L#=R z+SRcW-y=xr>GSGM>G`@Yz&vH$YR(EQ$-lg=lEvz)`D>uKB`WB)rSe>MC^I3D@1RB1 z`E53;ad3Rs@Mar7T)Mld*xz~`B4w?Pd)#bQ>-tlXRH|WK0}j@WP0~N|FJWweNEN63 z#?ASiSK>9`om`CqzuK$m!Sx)R$0moa@)Fs1H~qqFRUDP<+Ojd@2_L^qKBXQHdl4_- zvJWlq*f3eH1jIF6z{(;A z_iY<}&Y!87c4RyPSbWjUUHPJ>e=X9?&?`KtsqYtC-Lb}tLV`Y%bFF8qK-H!Ji~MF4Hii=wG)#Rh*tbn{|NEzPk1 zO<1E6)cmlgiJv|!vHQNFKTxq)rW3D=xW2kVYsHsObhx9xdZAOune%xsfu&R~p?)1U zoZdR@6?15jNh^|EDM=Iywd{EwuMMWIkC5i{nocG^pD2bY-FkAG%qTP9FaF6L5gXEC zOPvoP7&^4QZP1DU%0gLXWu1B?#mwhBjFiXd=kf8nOCqfFLA4jpvF3}KVR%>9@8qsF zyYvs22dek`3DlSNWurTC?{^b9*Gfq}ZO$J)0p1QdEE38^_(hsjOK)10 zC?rovk-qYHZp@ugX0(AsFq8lYf1(lhLJd}uF|?^h96K9wOzsfo+dButpV(*joOlI% zkI&$SISAv-xR}UKP8yH1Jd_V}hylBMmH|Fs-eeZZNB3)JlWAfkzyE^Q%MN;~X-hET zl4prY()KU}b5;kx!^Ah(ciE7mXZ0oti>IfE zO4>D@JZassvyH*7@$u#vjIoY2m_&x*sJS&IBi@N(iNWcM{9#NYX8wf0gUCVfcZeUl zFe%kFoLq`BVVX&k{!PdRj`E2t!oF6=v>kzpo-IV>oV((CpDYvrY!ExYOb~f!cy>drMCtU;>ty7JkZo0L8!TgZ59PiA-oy!T7(p z0>{M5nylbv!_;Jd$0)}mS^;v}LV|if)A=QR+_zD@;&KGivx^Em-?X_X@guP+nTwWv z>93x9fZ+UyNsfNL1`wL5@)e&Uw_qq-Erc)$hjq7i94r#YM2B+WCO=c1Eifa?v7S9@ zKfmJ7a@fFPFoDOAiy(cji)S8O@~KE()eo&`cz#l25lP zJw$>otKGm+Cn`RP5T*JQw1}Xj9K$7f?5|=y|CLRj!mm$U}WY}Pp{ch<)hHL{k z6G%p00!#=){bnhU?D{5T0{3~Up#>0#IXzR+N=_0FuiW-tl6jMdk@ zrXk?{!z^C|B{Ok$bKAE*z930&3LZ+~t*ZNXl;EZILTvzynfsYjbdhc4mu{{?=%c?+ zRI*V0Iy_%O=9QR)4&A1&HGS&v7jo9CsrFA+GC&_Ogg}xG@+_wiuOE;JFoE9;N{3+c#MVF35xwJv<3joJ=GIYPM}{_R7n`F` zQ82JcCT_v@L6C`s7lB=b8C(-QFwFFej^2FPmPvzf?`m_`D>Mn0Qy|6!>cg9F7i9<_ zIvOY-N`$*2Ya14$Sm>uv`?SgnpBAFg!55odW(kWaxIvC}7=#^;9QEfk!B-o97X0p; z(d%&~#O_X)wdff05gy=-Fq>O^)WKk#R|AP3r0A;fom+5u4=rhYaQxDiATl`r&Joz1 zwZYQWe6eXA$f~!RkO@StW7K63#vZfa&%h-8j!TrU|NZB1)-v{9aL#2f&+fOo&i-}_ zW|XRqSrg*RXCIZ_0PQJ(v`32^O=^De&jWM7*5fC)Yw)MIVv<3X!lLVU@V&fZGu7(1 zj8|6~pOaahi>0^pNo)UxsukbUHt(t>or>V+HSG(=DaVp1uGc2N&C%1B+uK{m9EM~m z>BatdOkX*)tPt$`O8j_9_OB+8JK)hnIIFoh?7Z?R%y;hmLJTHYN5>0)QfGfBA~qk+ zIo>(AD4yZ-sZJ^XZ8}OH`SLzb0Gu0k(UrGFLWRXSe}~5jP22y0zxx>LU>Y{)PaX*(!4)f& zQ9W3Um?bcD(6k+ZW;i8ZUv#RoGLrt0P5i{qC1e3_e;I*N8JT2xxP}#8krKffm zII0;76|4J7XS&(tReo~2{^$2bNUPuJm;tiQ?-?2*CDr@w`4ahQ)##=Wfv#J*L*<<3 zxt)b&miD^QqElW>v&H7NWOG(2Tldq-2FvN}VD1As!&+}yTThU| zE&|e%l}vpq=S2Qa*#d$WkCz|hFr<6%;BW;%7ztyZ)cDvQlf3%cOm~c7w%%%iKSvA2 z8@ql#-_C_lAL7oszx@cYKLK5hZLF3g#TYE!%-~DF)b4Z-dOtHMz%oqK$WVks2RI1$ zIwgi${L{q6VDfX|P>pupirKzZLKvOmY}MEKtr)DfZ^su=P*sbBUO~Pbs(Rc90s@zX zI>pPB;HtI5a$XZtj->10hffPV1g?7P2-N2;$dGPFLH*QUfbs!Y17LrGFl;hgf0@jY zuZJ1EX*@?19|TNd*bxG1OWVy3u)W?FEE9J<`!^Te{s-DXCBH_3U??n-!D3L%esEh< zZyo|fzWU(q8|Y>(I}lE-1pYfOvS@yY1@w}=wk?fv1K$-0S=|?)NNhlqh0TJi8PxrB zYiyi;Xk;(#3Pu{rn@+-Y0Y&qO>o|X+1oSUWC`zjG&gF!EbKbf-Q9^f|mWJS64Q{Z! zg{L1$ES)*}3c0QvU170`j>GWm5@CCl@J~Ns7(gVD!Ps7t4uagToY# z#mOHCu_4sDaWMEx6so^nWI=-EU&8+5gx?2vgo83fN~6XhK8>)qk7wrSD2ugv{u;~7 z;INN-&``zXa}=V3&(UHLf=%+)17D3$yx8C5iOj4JBP$Jj%uqeGc%GiPaEgkS+4%Ky zo>ih>DP)ui4T}$zKROYL(F7aj*cW5{E2#2Yq08H%;*KR$X7K;d{oV$-BTe@UyOM+&iWyZMOyb8n*YiC=CVt zrknw304YFPOj%I^KGz=R3f{G|OI%T0Pf=!riqi53SgWz%x{htRWp0e+;?WiWqcFt= z%}WbY^!W5~`rl^{(&tXRM4vwPJl%EXHF_yIDOJ; zL<){A3^o`@_)KM`h(6{vY92L1?U(iiqV$2G-Sj;yK*s&u z813kIIWh5(#{3${Vig$zA7b%Z{1 z;zfF5aY}@qY}Uw<^gg)vaK^=+822Tngr5h*1B^42ibhLD?Qf7^!N55j`)AyjIw!=< zp<;?|9^FMhbKPz9WBYEVn}>JsIjH1dtd+}ZWz;!Gxpb0Kii#`_uoNl~3{!k?m|_DX zVul3Ki0~t|8H;AYQY_5G6!KZ&M^OX*6cAL+?i&VU6;c4p)ShC4H|H24PgVoRk>AKG z%q6Y$xwXK4AXqjgmW*Krq|W-h#P|Kt)Qq_2j^~IOpO+IebRV}5)48;`e+|Rmfu&%W zu@a$o#WK6bz>LhUNSp;KHs#wq_&$h_7qd%rZ{nPo<%8f`E0=^g<#UH0k?6q>z3TkB! zA#{!xGxX(!Q}o4!6LhqkrQ0U<($8K04*K!^H`D(32MK&9{8^Q-dr;tetK~ix($FiZumtQRhe~AHr=QEX=hV`7C zL9yKN)2B~&tg@h?V`S^q0x;?q)&0T&cC{ObjwV|!(xcNS z=+)$GQ%gT2y$yEV#?Ibw9#4tocdUBSx048{0|m+jAYg zWo$Ra*w};ksDW~djqFS|W+6th>4b0!#%C}S0uch|;EK`P{Q2Yi;4FM0!T}e9W60@0kYyXOt=t)!;<$XCc(= zi6G#|Zhu59x4L6!7wry4o4?5&0R1nYUWTvtE4J!>VI&l)>^fNodcpQIaE0!nxa~k7TL1%fQ*e3AyA~ZOrs=`dG<`cY zLv!R%AQq?i;1KzPtFMj6tc38}U?GAfT7_(e#e%~Eg#T`6gd*`lAw-%5*9HNC(QnZN ztx<0pzkWsR!v1n@kuuimOR+Fu;N#zG#_-1|JHqjz&LbiguA>o0w$zw&esQ_j87LcT(-{Bli7Ki7aI+3eBUtZhNV}U&nK2% zAzzyT_w%Yil)iUpH@$mcl16;py#aPreB?NfzUq3;pHKMxNBLM|3UV_Ar{6)FffX+v zO_FMKuk%kAA_Yi`u`DaVbv43IyE1S2++0pc76VvMwOR?n-WTWDIDfT}q_cL3JQg4Ep<%J~1xu?|{VqNRLlJ%(Vn&38 z2#5-Y^$`&{3x;FkLV?S;Wr=89a7te-Uql|T!H!ff_!ev|_)0!Or%PGVS9~wd649Op zbvEAlvC*?eUcz9;QY`Gbff=K^+fe?T!3KAkQ!~q@mV@8KawYsSe0drbLd$8k4?tdE zW)IHh_a@HM3)v;gae1u=oO3A;$9u05@Sus^&Qa!Ye{YNo(FaHNhz%(bQn;HzR;voJ zn)klolKZD4e*a0%|Awcpr1Qr{h$Z*qoZ(V{G=LN!Ek;$C9_%p_E&HEw!YpnKMgtu#ggwm+Ce3P*!TolGcj21S1wzxRH`k`+bNT zSVMt8hz5p7IE_*u6kgjHg%CkF->RPoB4}X=O)Ne{gCpYzod6x5%gTW*gOmnv5eatz*P0O@ zl6vWwIn_5v0n%c)f*aWrW0^m?&W++s3Q@uYH+^fI89eyN;U~9?#@7j-Zpj> z#o4G^Yt$MB9(J8Ron-@VjRq1+M;@C!MNiG1rmvlOoxXhbbrvjg*;X$C$LK|)#D?(3 zYvNaevLcqHa8as^n6E5Twb!ecwR%C+p-?y~B434~v5P(qE5Z2yF?wChQ5H+Hav3pu zf~8s5OC%5qHRh^p45>^oF4cF(a~8#$p!aY(7mn8+!s=4whye$u82%OBblX z9W_4t_{=G~_xw>x7}(TM(ktNJmRySsv;sdiw`c+*!!W>M?5>Qugzp!jU>g{PUkfym z@F~EIMl23T^T66h9UsR}LWtCsW|fKsF)I)s91-7v@UZnZyO`agj@VKtV2_%2n9wyV|Isg3_0A^`%ck>zA- z0fQYIBI3O9o%Q_wT3CEOi!25T+!k#FekH-}(Ua*J5!m3xTxH4CT7GYdL(3&co(Z+`W5u#~Y-|sH&t@u+*h}(INWq?i*-NWKeWGD@_Bm zh7cL&i&@d}FE`Tgtn66y>f!~lv--tjY#d-VVQAO;_p8Exda{%ij{nO+Zuwc*TosI0!Vx!`eSA(30Eh&J8I9GJ z$F0QXJhBZILYujsDiC@|aDs=A5T8KxoyI}AMCe@jDXn*AC}XpnkN){_(Cp4)A{rjqld?G2|AWpq~fyWC|EL* zGD`F~i;(qvM4yGtbw7?O4!~ynqL^G7}1BANhcGOO(liTNvV(*$015E z3nUW%-bTU;z8{D_cC3)PVqXx{yJ3G&%z~^HK6^bN03eXW{u|Ev0z_OF3sJj4UyHTy z`Tb&<9A=B)$j_NueW!5{>|!dLq=nMzVT*C@NwY+cB`?t5&mN`cbBmO)_;)wR`_;fK zP$`!cf;tqAi6vx>f?thmKDsG9NO8TpZA+AST~WDzr*GJ#{Lz@MKg-AZSA39{@m%jX zUwE$4`fVlLYwErjTQ}Vu60OUS0;I)og>P;SzeDi(rBzi;b}$65U`*4>evOvU#Z(VT zS_GB^+%!BvKXdJE^q$H6G#Wq^Xwo@e8wRyaj-&HtQECs=G0uP})4{!*zx zhf?!m24$<8cS#-aO@w1EHlW*hjC_3{LSeAMsJZBOz|Zk|JvK7Z*8@g&G(JF~C?Z|e zXDmV(Krmn?1JRy*!JrT#@G+^|;N)|L*eDnCLX2RES30pk$;Em8-bFD(f@oZLAIrc* zq_8!v)AAfTSIP<_dU;Oa^FdXkH%5jitYEohWBG)9_wn^$=0*s@b?yTMQ$;v7e=lmN zEJAg$Y{}#AtZ(_(`glTo%$0H?oNf(V4ZeBW$kU^#3-nO>0-Y`6GuSk-@zzHyy($*S z;YWyDokdhL;64R8-zWSLHkP{ATvAo8uPPNR*Sntu>R*~Vz075%xo80^&?m4Dh*#pf z#A2rLd(jpY#q~&8;M1AsTeN!o>rTTN?jhuzq;6zpwUA%D^;RDn_gH?VwW9HF6B$p_ zlAR2}3skmZR5TQoen!$lkfCsHJrEzEpT7Fd^b-f(L~j_Lyy%<`AyQ=H0Uf`|9df0u zuKb(e4j++eR@yT#c(6?3NP25mH$)1cMG`La;{L zhBgmkWx4Qe6fDV#umGuq+l7GG_`6_`S7tKO!nqtoSja>N1}mXs*D=qf4$3Vf=;XxYm1;lJgL-5~1 z2;irX$KuHvKp-{iD83wAm!?&gUt#IjW@kTYm@JZ~i?S$?r3N}VO#~F}ENs;s(Qh>CQ9Xl{qG>EEEJ`Nv)ln8APn8Vp4!HZUaC|JN%*E>Zb>C12pA?p_oo zm~nys31&(1nM;oBHS#O~7R}N!v0p=>IQI}c17WeBM5E}q4t`v31_o4a!RGEk4crSX zVS)f@#gZya=z`Ncia0aO|4nxx-~3N;->&&46~$ z!m_v4WNAx5x#s`NoTrc4p7*C2y|v;)u*g@=zX5~4Ydm21G*r)3RK>$uzLw1NNIH)c zAT6Y1n%o|^Dz~SbX+PTv)`-Scb?MGK@9bzx^5~7Hfs~nWH9Nbil*j*DD zqL1yph3m8E~CE7g50|*lADU#>kNH5J(CQ(@eCd3M#!|76n5@KicZ#Dq-7&@0v(PAl&oD@r~?n#`b zm-0(wi1OP!xc{b663*xF1qwy5=f~y>rQtc0a!M@l8?RUGM9h3B*x_8c*H*p%Iv&s; zzE)8-zv)Yl!1BWj1q<_<=2qe|OL`6|Kw3yHZ2BCJqWrXLs{?nA*%Z;1gu~^IK#GqJ zAnZfVXBciff>HX=&THvsuX`K4acGiWT$rN!&mW_tS&7uM-bgC$6y9ZXrut0Mt>9jn zYc*tYfo8qgWI|aGL8^-Z6!dSOd4k$JaE$bu!ZM zs5~2+ECg}xuJFZJTMUTz)_K2PF#7?~2I1L?C0#Wj;IJ3StdXaA&Znm{b7Bt_EFIkJ zoq;HX?*~LvI1=CVy+&DvsGqk=LO68`@cH2XOMHG0xVH0Wrmnxl*NP=c+X~YNEjq3S z|CH*HtwmYx*d*ByDL`6CHmgP~Pq~VpcC9120|AmsZOH}?+);BMvv>4s#NxQmEWJa|RUDs7^xcyudTip-01n#sU#SJ4MqgkYrnp7TfOrKK4f55*|VM$KCGN(f6> zFltJ1D_H1Y7K$X2nfB4JQp)zn_L>T9GK6@_L*Fop3f{$(#8`0M)G16_zNMD zu)!o|Kd>i^5X_qdXJzs|Oj-t6&epH3uFj|>UDx}X=h^=?qwCLgLVS3(knCH1`Iq4G z10N8_@g=yVcYy#w5%e%cyldjXe5iUzvH?!mm!%B^czHUpo7*nm(; z@I!%ID@k4pA|z}UQSB7XvC`76t`nJ2Eu>s72f2|L=BM47uNgKPQq|{ML75GRBtLF` zcuuk^h-#HIN^~$aPtPn&(KCyc^y1P5I+{xe1MWTJd+ED&UQG$JNH6noG@HH^(S~5> zMSKCeDmGLbbz2n?!KRp_=N6|$Xw7B~#J-2K#k5_qG-tY;qp4DsPL(qBa&C!U$}Z6> z{CJ|67JEn_&9h;KFr}E)sHe+Ewwr8xwrVNMYG7npBr&pF*&jswa0h@v>~AWX)g^GI za8AyplVYYK7>-bMpyC(OYRddO$1{tRUnQaw>Jv7#i(%%mdaPc=j_CY_m3=;{2bUoP zgS~md0AYriC-~1GwHgc-XZSoTyPG$EPX(M2h|+~k8X=kj!Pd-vEXUw_wPaWJOWNew zHU*a%xb}CV(XZYy^r>+tq)sFj=r)gjPyH9_5S{&>!oIfGXpLcWT za09>W+OijoM(Is&y_I(D*@KL$9_@b8+yQ@Q;VeCcGq3 zY5wl9NSp@!L9s8%b_Q3EeIGKGLFZU-9AR;BD4(K3g`@~IdbE@lj<+wfC_GX~(FqnK zr&)NMDQD<73%N58A`mJ@o)*j!rC5xZj!k|=-!(0X=W5D>p24nfghb&97?)%#N zocrkR`oCZGjJ#US?#}Mc?9T4?Z`GQaKB}v$s;l0w-h1_!Tu*g1CbWA59z?z|TMnUK zDveHgl(Tqp5OWa7iy9ZvLVk~i19g*Pf%a%BM%}rI&Z-N_Vzn*)Q}Hbdbpdc0K{Em; zY>SD{Q~;kFn7w8AUg>mYWIG;<_!+{JGOZg9)MqjtRnHEsmN`YDdM1QgJfJNQrd7c@ zRln1TJoy;pHuY0xm|tr0`w#H*P3w$*@NIwN_mS~dzVBMjLw@fJ0dfJ68+%77J8=h z2!#!kiAb1|a55c6J^&vJ1&de!Sstn_ssX_sIME_f`t#k#=xD5;9&0~HcOTtB2l>7r zF!K>87d$%RKs+pe<$_Z*^odJfYsIgJN;kI_?{?m;;2G9iIrgnOPy$7x%< zH$OvrW_^_t5bg@`At1D$W{Sn_sIXGjNI*LVf-+ekCP-OKYd9b93rP$Osz8H&e^6;c zd}Y;yNJ_Hc{wTi_Cz4TBW(A;R{QN8px@%4~kv9d&pzKwdk9^1YCx{iC#-{=h%z|ke zG%aV`rySr15g;DJ%4Kqpl+C7j%P0*Qmfjs+*5v{SzU!+py+Gf~{|2}}y~~mIm-CvB znKw782B2uTU>wpCTqex8%i#RxVOrr4kn+OMgKQmtR#pO-47eAQQVaz(4FqIHUesJJ zmt}crMwS4ctFTx&fM(-I2e;Bs4{fKD@gWttd^DK>LSP>YMo)AcqNlr#P@08Uoht?V z3&3|cr(d;jg<3AOSYyW71G%&kuntH2)H&GqHP}v@ zy15*>4$wmbCunD4kOoi&rj>&?&A~P)5R|3$GE{QZ!$V7Da$+ZUnj^_vr zDL4(RmZsWd1yE2pPClm-2e)gRXlAN!$B6=uoUrnQ#Hvk8}6-bt&Hx zm<-JqfG8lQ!RCRJ^icl^+7|DlsGU{I7{e56Dr2J(W>IIn@%y79)1TyfJs0bt2m6kx z2+}(f18Q}%>4Xx7^BM_|5KKU-$mL@^tU5G_!hn#fR^?*hxLm+YIW!3nVB>?XYaBEo z!EjC4hz`iui@hi4&I2#deaH9EF0Qj4t~-!~;3>bW2^0wDxv+YdJz{BG_(32D-;{uI zW+5K+3W76LZOUk<^9AU-#--F~2B)Mg&8AYy^a_3-rdfVp9zdD934@x9z+{^4q`+;{ z;rn(t()nNM*#Fb)nq5u4pr!~dV`FihsvEbn(zbQoX_uOYi0B?>89V|~M(|+9a)Mwv zVY<4h(!m3k!&?*)$@9CW9ZOm=wjm@8if61Nooj#yvno_iS1edYH9r4@XA{vP*I1IDWYsL3*)linjC|qwaLV-8sjBXYN+yqg|O; zb>vd2fmdR}5Pb`}7nhJ|ED=a$9-@w^|ECwo4~T&qn}VO3Gcg5ua!f!2g4y|ULy?eV zLYZWtT*I|>6bONYlxH?QXWO*9zmtA(WHAx47hEMumUftYdKdg@!=7Wc>*4&V!X}d3Rsjll(n*Qo&`**GbmYhScUUIe) z&_E(43OJzSD##mY9%JI!j56;k)}`Y-tYFiNB{W(19eEDYI+=_rN9y^2sFk7TqFqWO z5qHj9^{A2n$*BaI>0=F(zcn1txyz zbUT>Nf5Rs0j@EFvo7-SzUZ@E`OF;wT3`vP~rSm&y7+gjwCsLy{Gw-x|$vn&|cm$+O zSigR~!NWo`f33zc0Qe&pbxCQlFn;b zr~(LLHWxFP=$DIaI0oSrOYlM{SQTlcD_WOPh`;~#>d-)sdyg^*an%Z}9=4y!)^pJwCS@qAx%;fAf$McRAQZ!Q0wzapeV1PrK%4ck zz>3wGD$%BpKFqPAObXzuf`Em=a72--vVilf+6Vtj@w+pWPASa`d{72@x+pr>?`lNG z0iGRX%#BVil?hTR5i9B1v4ARt`6ZU$g-IPuyvkk9ekM4tSg?#PL?5M_w9p?^er6K| z2v;&0SK1mCbg+Wjj}`t1U01tEEt^~^pqO=CV9sZ&l=gpdrT*`NK;ST!e{~4ei}IhU z_0Bvv6HYjg>0jQ`on=atA;)3aMo#}K0Uo9VkARd3=Me=AO=}uCFjotB5FO$TBxFY6 zI1V%*RwV?8`Hp%X%x`R4Lw|hs<@BcI>*$=i7HY%_KM>js->EIcTdgn1$3nEKwvn!C zT~2RZeIfnH+AHWiYc8WVuQ;FlhC#n!5^~?s-72og$l5B9nBovhGt!@qvv^dU??X8N zg4dHvsa36dbCr(=RxLoC!fXjEU=`W`-e)YQT4)yqlfH5T0w;Vld~o2dKp%pY z5uLr!Z&Xb=RXaQaQYNHpb3!Ml{07Qp06H=T2uM$U*GwY8dFkbCdOc?6I51M7Km(di z=hiQvo0pwOe|GMb^nr7)rnfSoxN*rEdd=dq=+(TvhQGgc zU*S9;KB-e7}mnF@T-7`I>+OcA-@QPHF5X{tFF#jPmfwA@tSacyxv+9MBYUKGg`G3Z9On*8G0yZX zkkE{5*cb1qN;$9^;SrFsp~?L~hf;+wG%*-*&9G(^JgC~dd5-860tyu^umO(bweD== zo0gqRx2?R8Zd-K`y@R(~`TOgaoK4sBv2_g#X=%8gB8Izy3?{A{eL;F16B3Y=gq@{( zj_#z*9S7AiqJ`Ft*?%R7jtVuam;XLKAZu0Un^PQkHki>MqIoR8ylOcC8+-`&Aad0R z2z|OTyUIH&=LKNppTPSnIlq8=27*DVtuHK_TY;9t4KkP4N+5kWru&0o^=y>{NC$-L zI5Z)ntZ0QSK==k>fyo$5u%-&!7j>%4uQ*-hlTyZ}XL5e8S-6s}Y+bI*Lynucxg`GD_7 z;oRZC%yu1L^M*yM>HTZ3qyP&g8xOrm-`T%~y7DVqfuz(j$zf4b{XPwRJ)(6t@HrR` z#+G9wb*AF9rSAkCi1jK5_SpbDSK6`Ycsi!yu1pjVq?C}(pT(g3DfpOUS8sVhfPx?l zlO5z0Gt-zgH+Ua${)^4ZKn@Dm_8Qp^a!jM>+4mTkTcx#uz&%BE9f8V32fe<^33<4vpOwtP{ziQe9_iqz0C(VahBb?`0Bz-cha8HW}mzqdLN3MZ19wD)tLIm6^g zGLO{!Ij632&O&nx9swyI0z7s$apziHZ>J0HTSYWxSu?&aDi0Vj{y5H^`iw0HJl_EE z1cUx*n|o+fU@-PG33=s$mGq947b~0X-?ks1jYoFS@#K(-z`Zb7Ljee%BT~aJQ`Z&g zQG?YeH^Yk(&81bawr}ovhW>ZYv-Co5yNXLv?LgiUkE3r`aJh*9v)7o#b(c~-lVrfo zA88KvvnU1}gU~$ZK%PcEn`(Pw_=g~v-bDOIpm7O?m{2z~ zQ8-eoX2i=WFe1P3H%LSW)U(yp)+^JmN|O*E$K)arkE*Ec!+|_aWYw%vf%?O0QgFbZ zYB0m$XbaWSRn1Fjd9YUH9f))Ov2epcE~6$%N&;V-&8E0qvgBtXX!u;>J5}KAF_VvC}i_+5S zPe|IZ!67X;$gDY5mWJzL+Tan8GJy#QzYx{uIL1Jp2Kc?~PNh;a&d)VX%LyqlrRQ}N zRSJwUn3cq)YeFqQdBdXBbnB`Msg?=JBklX??qjp2@~BCNnq><~RG8g#7Bn9_mc-Sdu@tS}~RUDS?j#GDP;qceU*42*+Qn zDg~l4mKFrp;!w4WyDkZFeM68Z)G0Oq0wea1jq#3;4%{0v;Y5IXpMWHJbQpmvo7O8ddj1+A4EUu5cuqvWw5 z#+6J!YVtm2h+X46V5n8f*h6mZNhWnUFMW~x#I4U!ui^OX>MO5#H?68FF25vw$xw`IOCI;XjxpGj;`AS z=R{)4Rxp!ul8%!*fj35-;$c?6BOqmhZQJM(;jM-xr_{b`0C#*KM)3VO77PYw-1nl< zFa~{wc8K%j`GHg!Fz{m5av+Eeb(^lbZK zy6ez33b4?E<$nt;9-k04*0A7#cp{^XwUp-Gg29aK}MKP|71d zmLGU5lSjd@n(?1}E+Lp;=GmRG*Hr8U5RpP3qGqKf$k~~i1OV4S@P=SoE&UGiq_c1i zArW)TFc(rLJzPw#5H<#IPX6m;fqP(i*7~Ma3Wc$JYI%k^kdQ=dP&tU3Oupd+KUG1v z6ex`clMs+pXhTwETJ>r;(1xJZfmQ`3UsG*L=to*ZHT3F5t7u)MSqb|P`u8OU>9N5M zI-23;K^EnmY4`?@*25RWKx<&NfMd#34T37M!NF}u%Xww$ApW|Gx zU$nF74b7&xb-Nes;s5|*JxN4CRJM>0U`xkkwrOko`DtSOK>58h2q7Fx`g%6saDy5= za+;pwezKPj*j14~4<*4PAY}p*kdWgz3s?xK#@3(X4!b%!J1!_LqVjn-dYCfMVB!3I zoP~pDdXCZk$M+~xsPFB6fxfx-8T!uN=jccL`)9{?(jb$Q3z&eMTi;3t2fFD1ZzF}q zu+LBDH7+2ZHhNTc%aL?6HbC7>Y%o9-9%GE=5l*b*^CHp>fl1uQ&=+wP{GzQO6Ou5G6C zxvxNVB53J>&Ohk+d z3am()w=8#eJNY@jVP(_bYH_2R&(@jxs_0}!W+LF%GhEI`xUh3&>p(nI93BBF6L_%0 zR9KDstGXbhOlX=jkV>V>J#tMLJ(iWpNePp%8PAIc7g&pbYhOFvedHzj?!M>g7e{u| zQ=Nxt8}ByYDJr&T!xZ-y%K^sEjV*74cF1C zaJ{nm9t{aQrwB%J*wVfQK;Y<0C+T3cPtBTE<8XpJ2AE*MaaAkhkPM;yR4fJ-1fdNn z0KzZsI}!x~S1@&|CP1()m@2um_GmfNC&NHPp`6C2Fk?Ov5YUrM1h5)YFc?;m*->wm z1hgQ@SX8Z!Rjdt64e;O5lo=#Uy{4KvG#f3!8oH>djhX`?N;wwoO7zo1{U>O5a)7cE zw35L)00IUxF__p*v@Y>HctfzX?)9~c=ygp?=@KSKAS2MsRI)X4`dO~9Z9>|&3(NS< zf|{D1*-Abn8c3DO_UTvx4L7d=$?x<~_3#KtnZSbr_bV0B;Z6;bJM2C`8QtsGudjxV z4^hx#v$YeROF%yzv$FJL_fh)s!58V#_Cs_sF~o! zJgtufq6JLC0?G`le8BU<^va!CcTUYnyEETsic1j4usO`>r&G8u1&~-EoU8mP0+l~7 zO@LsHS#zz-U9-hRARZl3re)BA_yTZ>u3S6C`-S)*l^~fIwm=eb517kM^(i3KuZ%R( zB~6Rf61%(O{q);`cG|_{W1@>oAWyk0;(p{@?Z*VQStu<(Ki}GLJ-xPZ3B88570TSI z_!8vh0%Ubl(Eh0m-q1>|9}ZaPbyB)Oe#-482o`HEyFC#AR_yCFT?1^VK44bKkUS-!RK)d zEb@oxoM0WXh&}0-ALUojZn$OXrld@mOrH{>`GDFFL9E!SSnfIeZxjI)#6$%)oZ#$p zxu9!?A^|YPLS80HlvLSFQutP;ZD#q+q(BIwgMEtl6_)3njev=t;rFXDo~nigS7P#E zZCxt`x$QnOaDwjZJ4X9bOx7lmE=V^54?-)57%ZxtPXMiEkZx#LOmA;lP1n~iQW4Gd z3eOX2nj#qkOgw&W3;EH6Y2MjdBS1c8eEgj>m^e93PdArb!W|7}79(lgmJeQ@^Xu7@ zJUSuHSbndEYDZ}3I-?*XC$5;D>s1m{4@FqZv3(pFlODF~R8 z23HCMU496#)Y0F3&RenU;kififf*OvHcu@NTt=YnBQTy?o|m616sgTSrO&Qz&DDSy zs*H!5{7njYC;UOG3x(;~Xg59Ff0B+(!IulBXV5m8YEc6pCtq6G;w+e0fppy1xP+Dj zrpG#(+XUuLx;URdq;)2w5>y*}Ati8+hxT-We$#P)o@_r%_aEI& zKRLXejwA+E+LeA8k^9B|8altGNiE4c86gMcK>hKvLKuXzZDGUAz4D;|G2u;P;TEeq zv2?~HBwYZoHIoo56!9^*JoCTH4b(xB z2}m}RQ4Zoa9t!r3Fx2?XI{`P|F>3!$C zf^J&8hL(lvm18GXzxu<~m(ZV`do{Jy)Y5%NchOgNK28sv+)qQfwEKpza1rFR5GlP5 zu?I#BD3D8ie7vo;AwOfDKTrg4mfzBQf}ZU;PAL{xu>G#{2>o#X3v?uo@HdqQ;s;z= z+e(*2T0r>od&`FcF#+*V8|>Jb{0S~^$O2fo2pWaLc_0|YGz>0@aWyE@q6Oi5xF%(m z$`9^|`y>A#hblHmiNJMeJjJv-;{lhdsPYx;ok0c>BLtt}x_T8X&&_jn18u@Y93QTq zYZpXcmQJzZVDkeWbRDh#e;Y3N!) zI^wtdxc}_}S?bE_dS(x24G}K$dp%S$JOVPu z!4(`27%B>SRS5eVHf+FhVQKCjpqZHlDagZEKm|a{usl*vH!_iU_nOP-{pVak?>g&J zddsQ{=#@*>(2YyZrnjxUP#yczwO7)6)?7-rEIXI3X0o!tU&C^pIHk$JXIS^qHGJ$n zXI)O0@#pdA0BtNbn+Zgc?sS~? zMSEx{opiYkZ%A)fecIX*G>JGtwO-JaZX|jZ~VyoZ>D3N@$J!EN7&h3 zO((L3W*z2SX4E+zsvaHznZs}gei<{#Y~Q?jbJb`YngUKj7owl@=V?Hy02sI-w8Nia zb)=Dr#d3Q6l5^-y%g&?QR$NGLTX8-k!w|IqQh^rHhWsQ4nuT#lB9>iB-m$~R#+;F|(R*2RGu^?fuE4#eq1e2@-D z`}o((XJP0`+F5$4`zUp#6BCk!Mrvb91#YoASVvdXwo*;O2VklKdBp zk%U-?s5kx87ObTO!H6=|g4q;+bH-~-I1Yhebxi}kedPtpN2D!KOHXthqVMj1o*wBu zNLkyW^XgiZSyv%Fd&QZ?I zz5oRcEQ(#ZGH1cp;Vca}w*0Y9_UCc|{)4|J8CVw(WaX>)!cNgazsBGvRV z%D~`YG$+-%=rioh=3z8oKzGHFm;ZOaO$->O;Bfxh#cSyQTzEabnaN0!1@rIid!D|q z<1uy4Ma_%V>Ny334WEjlT+6})gvVllfDyBD)RRf7<$jC7VL^6(e;38GnQ?^}2(NNU^@+54iLt13zSbWplntDk^d_vKnRo*J*Qh(5*S2hI2pqCk#|L& z@NZPoGzxG(w=Z-k5DJmcoLC^c$pEHIv7vr)_!IF#Oh4{f-f}Dt1ewZAOemA5$+o+Z zP-a+@1o8l9evr~YAe3L$xDY+z?$t7pP?x;_tSVZs0XBXHuVJ|1e9q(LSq(6o$)j%19U z=sHZ>nS|`%ZR4SBDn^RMLVA(Z&j8H95-e~&*>#j2;%DlL_Mh?z$fOb&G4p4h4hVjU z*bv2eiw^eFP=6n#l5yoPQHnr_a|#;(VOy=7l{bSq<##a**snALYJc&2;2caRmctBd zBw(gfh-<<>)IACg>1w4eh2r;}Ol}kj;Xjm1xW3-iO5ph_h#cyki6#6%f?+JpTQzf2 zr+_kmsTfMtnri%y;g~{`!H|&4q*a|wEU=@Ra8vz31)8jSzj@2>JMpw5_15>vhlyv^*OhIaz$ZFb|Gdt3Dm<-BxCc)W~I_|PUNbWK-Swvg)P!c=>QU*k_ zSv2)(BOiGGGMbeA)wBXu0X+B(vS3toHnR}B9Gj(Ol2(OflsO3$S(e9zflP{y#s}${ z?&I{U<9q4eW4r0TV|)1bQHpc%u54(bB{dCnEIy#3u&bbjT;KuSq)VF@)52iHO>hig z7#vSXx0M;v*nltNj{XjMq4%WnRl#q>71_ijWFLQyC(z)T6IPa<=4V6vlb!rL_zmG2 zD^w+8Q5HzgjE91}Bbs(DmsLarLD$kuK4OCdYRe)9!WhqoV-VO1Bm23NfVXN~6^lt3mZ{~uLR&LhTbMTR{qepa z8avvB;VWHR<+cl=!090rf;v4Bq; zsg@P6hJy#Y40qsAUFY}AJTQRiy5_{9(XMnVeS&j_Jh}%xj0==hl!b>E``hWxgD=u& zw>?7N-uo=weRv1`{KyXa8EyzL}X9100iM5ejlxYn!HI? zQQgKVXxzX@IR3E2>`k$N|5(Ri z^^7NzL+UwRKA%Yjmq`ldRm0~2_&5Y^I4wi)Dx41?&|QKwM$v&jWtKIXV2Ep!b2rM0 z&p~?bYFK%#2ae}83LrSju{@vFsnxPZiy6YlkS@|JCh#Mj;iP6#;73+OiAg7(9(i<= z0|_YxcmG7SGDy2%mWDhds9jB6J=N6KQ6LynW=L4lxZFV5!5;)=6%5x@mllNcgwjNO z6x8BGmPD=yxV@oP(cS@*>j-UhBEa>%xilS1#mW|ll=}mR+fN_Y;m;jQek^Gik2VSc zr?Yv9R5ILSlb&BseP+NtleDET8kONQm}bWZ+EThL4)RxSNYkE2ZYDC7GGlXY3Fb;+ zVsE&ISpy|pkVwg_tg02Th5?;8G$0d`CMpOe1UXWq)9KtZPdt7*3!!&_#6c+aFgCEX z?ja@=-#@TL`BD7p#2z}rzk5<~CM9W#u@GL^@Ovb3hWdLbHrRhUc^L-e6HCmh*dQ$6 zD$^^NHu3ck=%F1!PH|r0H?$h~tsKHZFh&v9K=5#FF-LmjPo-4`dlyAQU<$;yLw?-X z?aXwMXZ%gZu^&WLV_{pu--NG6S_p7g+t5snt&6Cxso5n7&BBuOAMk65w z6v`C>J%l)eg=uV>4s8b?=lxjy3T7@K4+Ur80s$O}m$f8kI>xJe@bO~D#zJ8QtdZtl zNDIQhB1BAT6tNkRu6jO|=hE*t9PZM;ZlFdap~{NO3HQa4xpj@rY6~$D0b#&1P8E1Y zXt}VelP?$`pWlxg=a0@TPzSN0!Mv6&zjKPf^G?QW57(iL02O#}l4Xx(b25{pL#gPb zwIKQTD8aqcGu*d*R{D(pY4Q6H^1f=E$eTW}aPMb1GK=3aHkT=}1*nJ_q zL)aXRz!U{1qwZ&8bNxOFX)7&-K$@-)JKB?i@D|$6L{KOTMQ*q0y1|I=T5xy(4j+laZ55vj!!>Bv7MBsq$1o>f)~HeVl%2>V)M6Lzp7DXUU}&mOIq5j^E|HV}Vf*x7 zHwh8tW92KLSq@G2^J^=yie-M!bOZIt{SH^uma}6;Gts&0hkeW=cam;k{q_7_57h{d zfXq>Fr`c}^abVS|RaH52V+C8HmP4n9u&zR2@M-b;5BRhCM_JJNH|}^lS%`uSYW|G* z3k=KM*%ZCl-$5OzSjiO$LAW^(rdPBsrT4D6j9$k?qtO?{u%ZNYkc%}njr5+gE~US_ z=vDNFWoscA(A{~*_MaTtPCJKsD9Yrakp-4ZnwL-mr&kyh@xRVO_L(x9k+`eC#i*=JS{$3_JgOpRgDNL-m9MRU5wxS3LQCbi}Fu`%2 zWq1YP{+zCB9_DIM@JtX~(Keu^;hm@Ib2th$h4wHR;J&9w6K^Av!E<7ttBrA&f~{|A zp-4mHlr$H(7X)!UCwxud2tU`L+6jnthDkEloo(6NUZXVF+e7``U8-#*<5A`NG`!$Z zHcGq4e;|8PCTHA4267oXnu@A4$Lpy%+sI6cv%FQ>;)}YYf3h)XKC@Veq0x}1Ifq=I@Q`cYGv}sdS5)jT; zjs=W<{yI5HVj96^DI*c;)BLe-^H}v|>DULjh;5Yfd7V_kl)>x%YD;&5DS8@Z78EwM*7g#RQzJHD0F3Lxe1{W{`9v?@?bSJbvrkn>wi$Q}zYmw`_~F^vS$f)+!? z5h;PBsP@Yn1j2$q4l)uO8c@#f@#qkz178uhT$OM>0;kNT_}XFwMQK>FS(PW`efaa@ z{%W~Z0}kk}lRN}i_<1M|2{a=kYY%zmG;qJtae5laGb#;v8(EI0@`wB60f9Ias-c?N z1|~3*Uo8ve2Z0<|hdjfey z8^l5i6Y;%48$i%P)wcLPg}Oue=J@`-*_0yvV*!0T|IbWC{>GB>)0$uVW~2Ki+gq@MMo){*8|y=3Qh@dc>g{9X^$29JQuMYuh2EN$BG zv8dXPlsowt3mmgzmI(t=BQ?hCT;|(cykFq)ZM&w8F$*&f;INRkI1r)VTXGJ)WA(-K z%Ef2V%1DzE=+Wq)9YEI)ZO7`m7P@-TN_y+c3+SDzE}}Q^HPB9sg+jv(AvQ?;0{Vkh z7t_1fTuRq2T&al21IKpJH}^hAk9QoR2n(@Ie4m2A0buget#i-Up|61T4hT!4ni3x7vI036Ni5KPz+?y}Ux?5SQ!%AA;Qb>7b^ynK;pv=813?y}0~8(XQyb!* zj0DOUW?9%Ez$)LAJORM-4hQzDV}-^s9ylLJ!|f7X;Che{wQJaZ^?dxN2vGk11%QM> z8)9%CCthnW1FN2)4B%Vh4^AY|-t2+J?eaG;Dq7SOKHF3`3>B0x|ID_;$- zt71^ZgVRuLi_^h!)oAaoX2k^@(EBYc@&FXCFBJvI<7;k5y@%t+;RNHN!#f@T^PeP0QBOdG#$6X2MXa9Eo!&qo&tW? zGr_1ei<`ti7D7sNBfwh2@2Dzlj0&hpoAm*Vas~;aKoV8DUS4*=CrxK)8b- zhA7-hD1)PWF>qNR_YjCj3i$2kOwxJ90mM`Kz;-IgZrMC|?sroL;U2bx-{9 zeMbVs3xYM$nP{yK2WI=zTs9zU)#Qv`PT(0c$%IQo!e_Hs@f=mZ=%ex`jx8R zF#uwd;C8NvHdgTB_JpH3Uo%nHf>aC|pyAL^!|T#B~!out$R99#jMiToUn^{c>) zPjnpSXR#)d#3_InU>3a~m_wL@X%B)O7Jy@LdIotIISUOypoX9bCt;*F8c^;q`9drb z5D1)GY=&CJAK}kb9Fg4n)u!zFk;lU6{0YJ{x?t*(8LZZ&>JP#`-wXL1e$N6yC{|k| zfpmlpBE#fqn1+TAsC%8t8mEu;h3126MgnD+hz}_eGF4>w`J-Gf>BRI0Yn~3EoKsx) zSXQ@KS-L>|O0_x|+Oh%iX^ifC?vmO<+ZxE5T)j*xaZjWLvpx5n8rC}US-^+TRA9kD z+p-^&w)}+dGrrJbn%fZHgY#NSlbY8^1j81WUzFb}ICxKgdGS5D*>Fccw&lc@4_=<* z7PgNY&Qbn(`s_o6fcB$1PUi<-xYt{Kt3-GNWbOf-0)i48;WxFK2?zy*7~t-thriCc zjvoV7qu=-~3HeD|iu-wVoA;`FJUk+ZV`*Eg3{}|h8zvExnLCEio?)Tl7?Xg9I}XzK z_P;>i-S<3i&(S?cchbrDpb|vjxDEkhxS$GvkU)Ul+I3vTDcP!4t+EO-i9$;tL}xRZ z3Bng)6m+Lz^i<~&COJtukr?DWx#ndP1%fL+aBL54Za<(L+fOG$r2)?fp$(==*itOW zs#p$O&LaU5P%MTBv;r`H!DlJef*EE+^|oNLRfMoWtARYhNgmpl;Y+a=0AUo`nH)@G zM%2@A;5_&P6tombd-y$7iQ)1w(ijfqr=rp+PM!elSBKD!cpDB?-b~bT{CwpA+AGq6 z)@m*SsPCn$P!sdm@Mo#w;$c9)782$_K>JG$-o!rBVotnBQ9zt>M8wpPAhPwM4$x zs34F&k2T~=Y}l}2S_scvfJZ>)CgMB@9PjJvtLhOh5|l$MU{w7|SfhbEVk>PJ&sfs> z9GCY`bwNYi4S9oE88OI$+M^wZ=tl>((#C_^>AqvT=;@Bbw0EG3PBJNhc~rKDusa+O zML>QI#`@@|hqvdK&V89cm@J$w4A!WihQ*v#A$`1bH4Ic?uK011IM1m;-7g+P!Em=z&E$k$k} z07#O$eq7-c8VdM@xI_f!pUP{#>=bz_5g;-ynJHdQcpkTI&Kwd^wklS}IPJ{CleiO&7yVhWLzo}c#388t*@m4830y4({VTm^^ z&(pbO%a*Cz3sey6lGMxH!b#+LwqhxF#0yOGS?O4xwWaetF8qY1qBVP%3Lu7bq+@g! z6NXQ0cR(BY+w~u)v*6T<$*nlKO;J22Jl|GOBz?5btBOwg|zfI~Awj zbseRol^ylG>4Ix=5>*<9@m9Qo*$_yG!=JSLZNE84jGQ zv^GqvM&`{!`GEEeA`Npw0CfQ(fp&%c#morLgzH;^HVNOfTHRz4OYqT4F*$jd>+h3} z&-iYG&$pY?pPTBZ3S(8nA;*xZ6kf;tuIYxw zF;NtjOY~3@JOVPuz@2QGJKzpo*I|ZL)g$JH&6_Rm6}mXjRZWz}0}p0SOCYez*c&!^N@;&KHfb*KE{oDK23n2l~dY?@$w@nolf#LY^hRwjG_$~3rZWnWCkWg z5D?*Po`}av%!dotbgZ~Mpv-9a`0%vw9zh#|8E)MF)O$6-dced0(kb|qoT}@*CZ*W> zit}JvHk#(dL-_!cKrH=?ItDq0UlTU8iBf@UQD*_J=LLbVZD{&2uHJ8P7rmj`r{C2o zL?_qttR8P>5}R(j&2~()muY~zzVdWKknKo0P-AK(IZy>0Ylp7cKj#-84oUgFl>jC& ztdwKH+{;6$@Ce8p19z?<9=o^`o-H1ZeVo@>Ylbx(b#!v0|rQ&S?X`pSGQoQjhJTbtTOR>ke!$-yz0Z{>Ga0$A0fp9{ouK%W3S0y6i2PWG6t>$BxW=;CeqRHPL~BogU2{MwJX zm;AJ}o!@GLvZV@%9!U9Gyfn~BFZP}+fqWopx~AfPAQ<9AfOMg08OWwwe~@`lN6=af z4fHB!-b^|b6ep4U`XmTIMx!pr{Pv|41fAXP0C+!8;GkHy)r-#5!b~8 z)O8*_0y39?0n~lT=xDV&pckM^iRJX>%=+tG{<1-c!B(ICOGh{#a~$~_CLvhjF@J`K zu@KE===r{r)R#?;IaIiUBhm7j2D+%Rjp}^}emDtXRQ=5lK)6G!1jJs54)#+fGr}=_ z0)RuX>x@3R>&F7#6}231L0iEj#LCZvyHVHOn#Qdad6*y&Xb`~l>KlK;`MlUW3iF@I z+{44Q6KhsKcBT9mj^!cmDYB$=_nh^!yYe@?TC4+TvY-=N|7TE z@=KFcFV8eVy`vg+a8J-X-V(g0VS{jvEn4+E+qOUJIM$0yLds8^1Z52)yFJ{{jljwt zN`yy1$^?z7V(Fs{civlhz{Dz8vjR!S*JCpQ;jdLQ%5xc(r7pR{l&yaMA?aklDkOc5 zcWu{ojUTrfno4!zL~MX!*|Zv6hHo&fK&$|mT(t&k=!%6a=pAQWLYKEJ;bRUZ)e1=- zW&>aXrBetm}cotfTAPEBb)4;z{| z#`m7sOL>E^LPO5uLOB0MBKtTKhNL6({K2V!`whWkI?1Eb(VjiMB$R~^aXPX&6zZ`2+7G$& z{JeCW7hsa*Ij4_=TOM%)spGFf7B&Mcbh?{Cb^ahN3fIwvjf?1(W$Wm+l^4<_{2j-z zDivl;Jf9VPSHtn%M1lb*p zvHt%2&k5nc->k`mGo8O#klXXsg|P#>n^N7jz{D1a&1BzyU6-2XbQvP~bHAC|#%<6W zh$aA!fRq7uY~Gw^0@BH2>P#>1m)3QCH$L5;)sH1hmO$b-$y+ZA0o9-dK?f3Lp(YuL zM9R{c@N>xpLUg5k`cEB)KFN&hao(Nw;)M){yDaM3rbTr1f)#Yl!WDGw!j=5Fl3uxJ z6}@rUx%8g3SI}RccMZLE@maJyR7ZZSisWAGVHUwK+_)a;WL#-LGQ7brWw5`;U3L|| zCHZql0z?63S%!fa4}}1QlW7IY5R22}AGv)e~b}q%eN8gqYUOs8f z%ice^E`G&NKmX!epZR+GO?&T>EBf|OeX5UqR)!qz3!oLjr&JqO+8eQ9AC74Telvk_ zjs%SKPiktD8zTc&cm6gWN`yy1$^@ptwv;m`K(oLM@&iHs_~y-SN87p06cksE4hX(?-d5VWw_uRmbexeq#y^Hom#q^@a>H~Z>VJhsc~7t#CI zTuvW6_iFl+bFQR6%3&Sw?N)2t|AW(!Da9m4Ltx@?d4Nd5wqLWkQRA z0EN(q4EAay{2DLDiX{Hjt3(ZQc5hobG(1y(V?jO%HxAoWHarfV5n9@4XGz-~a6v zn(yXZLdcXA?h|SOndy0VxZjZcrtjo>-k0AsIc(UV)?#i-^;?&8J}=+-!hh4dUid2A zaOhq-w|g5ciXNucL_5``dZ{KoL_sTg+7`~ls6N>vn-ZPf!Cd0Ef^z?4$bnD&{u}Sz zITd0wU*Qpuxq~!!xI1}3pH*v}Gg-3zVg0x!#0l=oMwd9I5iF2M#5$-1IBmNw5I9P9 z_Vd!VKgH6}cHRxsIroHl4s=L4$EIg`j?u49>~*)3`{<#Q`{~K9BecD*la40_DeYK_ zgy0WRk3EyNSpXLNO`nf6!%!<7fhZJf_gN+<(V>2d4GoM*CUC6|Z3=S_XhJ|(5IH-> z*QQfRMKneN>8ap}(IK_eD`HLHHzLKWfP<&vPCz@7*N{w;kmX^LP}L(WO=w4DF1^pT za+fi=#L5)vusgdUVQmv+DfYFFV|^~3%l-Ma_k3fSd&1aQ|HvaoyFYW5?F{~r%*l^l zeR11Wmwn?KX8!QJgrVsuswKj7Pg6|Eo`!tuNq zK_~!Z0>l8OS!2Z-Q9dEMrk2Y^ToRCqR3gp!N2n&`Z z9_sI*=s=&kA4o|S3n55HIldPoNgk>PiYRJYLRj*b+-{a@LR`jsLixil18qS{FxIt9 zQ2yMJ`rlvkvu~`HSy0z3tc&%NeGugnr!B|2$U-(EVu>jiqni6`;|Q2dq^?`{PI6x6%tdI0bkFq)gyWFvbL=C;xNW!S|2y_Uz`(n`dLR z*9^0eJuEErRl#8I@BkKLGEh;ccz#Y5FC^;I?`1ynDe1^f+{tztmE%1#3ant2gFpvu z#TZn?W*H$4A(4g7BomRsmf&qLo1z1;UV6OaF#Tx%3-q16&(l4}c2Q?4PNwdebyqV$ z1R%^qV*&H4QZ$S(&r;fo*pMO^qXBYdDv@x5*Qup?r84h|4-P0IQ2<(3E2oUd&Vns_}K;vf9Y;^O>i^A0i*O*82` z%AGmCm=%6O+!z~=8nX5#)+LMoNQs#6E}Yp1(s2EiSip=rJKe!FMWrcD)B ztF93u)9mv-7s#dlg~!YdmQ62e8ux7_5U~n(`(*=GsoERurMr&qq|Kd&6k$LkEtY=> zg#DQmWgJ_XRh{w27eXjRl=S^WJ#^=Rt@PsqFHk?HIa|tOJ_6c3zdyhv#8g2H$6D=b zI6y+6kw^>;79}BQ3z<|xIkba(3YAbcK1%StK~OwYDbPn~ zT9h1dPfFIaP%PH*o(PD>SO7thwq3*5zAvlke{$_Fei6wZa>2*1y#EKax)J{%cgG*% zj%PLR(~&L+jHYXEa(vn+uDk17tMXUOD`aXZ%dZ}f*TSmkq@kwUf~@_z$UTrvCd*)c zRVtW}jJk2ZnmhG6)X*Ky1@I%u-5MMLV<7FcbAh zkw~N`?bp7?1LOadj{GI>8sM@RH7{_wg;oKmcEP(ZouEfM4k=Tr|K0ODy7S-*^g{1R zrRe~vI0LE;j9(3CE9k)b(sAnLdw8gBfGk+K%$VAYVgM;kG0A{w6}}HgCY4eIWi($A zEcL5a)|%iw75H9O7BNaZaigli-38MLpP<~e{9_6C3ng`lsx9ea0SlGy&56t{=WTqX zCVz--dg%Kh!_Hl&8M*g!`isapU8BN%H0DRH&l%>sFZki(4f);k20gphC2gT?2W3_cOH0wesz2g z4P;ZNIgsOfo#`i^Fd+YxgrX$ILsbF79>@Tky-n)HUsITI6XMDj}F{7 zMVTa=(z%E6n#$Y)w=3?jYlJ4=Vrq%^@{hWSXsq~L$UtWaO1(Q|wx8$jl%g+VER`C) zmx;#$ZbE0uN$8ve)kw{Hi$8emmGjOYWP@;YNAKd7u#4aA^2i2Iu4${U$+vxlI zw$P@-J81V{w<0FPh56IKuVP(ixu@&4V2zNecT6RZ!Xj|V& z%0OsTM_wi_@b&l^lc%2?+(z9jAVR3b)jAJA5!3GpiXKh_v?ysN9PszZWwVrK;)4i*%St1bj+L1?~&~lgB#`)9t%| zN8jA@41I0a({#taE%eaIeYAD3llrqMwQAL~-Nz`N$PbO@D^XGc-fOY{>tV}AYR;bEl(%6|lIyRtv!OB?Zn?XW6co+e}6lSH=>CGC6 zx3VOB4(~I^?SLGIJ1p61NpZzcPikKIf*|&VKhwUmMt1+spj-;8NKFLFp&R`@f7MB* z$dM zaoDHKqcTbQ^@)9S7oU$+s-Rsd1t^$7PHXRA4?W*=Ty2lGAEf(_?WRqKw$bd7`Gx+BuulB+#Jg7?tccmw z2Hx^9hzfjZvOGk$D@cy!2|NN)MmUZW<%SItqG_>L!x^biL%FE7QJrvDe6Y8ja^J7=7zWDkp&RcusFMhM& z>Wv$N%9(M5EivauE)b&Y-j3rB{p7&bm)he)h*gq5`ZBNwCQv7taNK=l2iotz>v1+7Kav8gK+qx}Qjw7Gph z-G6+~X_}bP07?XNvY#EjS#3|0RF@I1`atcW=c2 z$K)P^=v@y!{P1S}Jtw5K8*jX^j?3=<^7hyKGwAM}9-t%Q4)O=}y79414?T2*ca^DvO zd5^5|2abGA*X$dZX^i>qI-F?8^wYTw3n-n-Dw8Yh8|@;WrqiV@OXzRbT}$=8ASa(c zpm2IIfaGlHZ>Jv~c!BozcPXEZVouwIkL+$+)4!tI!LR<|o%dBNlz@Ex17;>|t;%LXx1>_B_xX+V zTFa6mI%M1Xwx_l3lW7fO)>tt8IyJZYHE8dp@6`^nV2w=(k?`iyyVEf8=oB z>Z>-@hk{3M(1dfg+pCWa2=6H-9xwKspaVm_{4k@F4*(`z+xpt+!4v!FP^^!-(=qDJ z$JfA8xiKq4u^exRO77$+$LGVYek}0wnsAcYPSbXpi|r}KJu(v>G3r}c*)p!J6ypjYwd)khzu%i5ozbNhDE^1*|& zAbyhS(gUi$cZ5lnT{%${^I*|O-qoB=+OO2e`dBD1^f!$S)>+|*(CQj=v1o~@EnQ`b zKoD_9@)wN&_8X=ySDYP^ms}ebOIQ0_YU}*(P6y~pq@O>{!vx_GkTQdXu9N)VHvSyn z_GI$F`_QlXe2=gY*p=TmCxF$k_+vYhke7Iy)@6lpKkiHWh?Z39zD%hs?sFZ1B^+U6 ztUhg9eR2k{oMbae>jKi8-*Gs{v(Dx6#z}ptJ-0%Iz_9(v+IEz2revtM=dnwK5Pn2YM@ZiD2 z9E4ygJXk-NomcTdE?a~U1U{;%)v3NYKw-S-F&!~Fp6xkCk98bUK?5H;v5$Us z^2rXSxL%wi8>D)(dBVqalH8%TeF1=>qx!1jA$zmS< z$~&Mu^EVNn=G?@&{QwDhrIdCAq+>WVT~I@_Nk0GRRb!Ys)z+I@q)vmMkQ$~**oNk$ z+bFvyqE7NKVR!_j%-DR#9T`W{;FIwf3$>M)Nq1OO?$izA{$wPwKfiBI;of`iO&a0w zy;6v0_~&#k$$NlF$o5T}HkGDgm@qz(|11%3Mwd)P?A!|JSSz^)hhI@e-&yqjAQkZQ zfaV0TJYb%Mcp+FtE6Sfk*%S>iQ7J{U;=zLl5AzLJOl19i-&uI={olVVlahb#7~0*A zVchxZ3zjTZ{rW5hh=+XqFB($6>%3ZXlAl?!#QEDLtBmH_dYu+7@zJ_VeY9}VcoScO z$%jejUtU93-53fiS)RDX)VltYp8k`vEM*LTkK`kNx+IhBe?Q6WKl82&r6c`{I23{5 z6BKFibGFXRHLhuB*5u;lh9eywe}|_bNvBN4S9anwPv8-d@S zrx#_x{83HH7hbn+T_w%DW)#_>p&owEf5L=dTC^a159Wr0lgPdT-X0)EOfy!Gi}69$Y|}!W!-u{P5ley~VsfXFDHq?CjU29s95( z=Q5#*S7c26t=Hc3?HYB#EQH*6tDbtSdvQ)C-)UGwpW>nUW=V2^&{z=94^!b9jT&1G zIOgZC8Ua2B>z35F)==AuAl20Aq#NYteHUi3!7Js)4HMS#7r^p@kdORjjTO&crD?gp z<6-^7g5+90VvaU~BF}~{X!%(N6ODW<$->DvW(cZpGGt?`>2Uh_10Ko&kAPGF4?OTd z*3`5o9mn}4H`ubp=YSy2>FwgrpX$24f5V0i6`HA^d2HUiIpfpy-)KTWn^f^tCb(Qv zTwlkYeDcY7epmScGq0=|;Lo%tzkBfD!Nc4DcjwX(BBe=M?hg;#CJg#lN0WcX;_xMW zs1-}~@*q>=2e^?MEK+!3Q542CqX$uEti~Y38lidMVI;MCwgixY!`m#H6ab zpBbFt2)&kKZ4;79RoOrBkx2H@zrRG2vA@#w?7teOc(rt#X3k^DQ+>K2Xvr!+laR1n zv@GD%H5zj93ZJuPU67g=m=M8APRm1S@CvlT_~bwS@!xgyCO>`fWPdPcA-+NWz{G%8 zbdb02nx^?V7R=!+JumQvH@u-XYgvCrj`I=jOj`51%L?vU;LLE3rfHx2^{;>ZqPw^J zfL*X}v3NB}{UfA{>$uy5XPyTS9z1xM)xf|mll+N=p8Pykxx0r0gTJH{+4lGCobTh$ zzU`0Bj1F66fN)Qn|1zATnzhm#e5)qnaOQ4u?6C!VepLI&zKneS@u-o_xN)5T6pQH- z^1MsJ&g%05S|F$??TIQHspX{I^j*Kt_$P7A7h%mdDipEUbel%YeBqpBpDieKgJYX- z(~S6~Qaa{Dh{qY=Q8|;AR(#Ob>zWK(H;AdpnXdS_0jJ2M-=R z%zBKRv@dQQtqDyywzJ31roR8|+y1($2?(6c)0;b&kw{;!Y5LoRmc5QB*Puwrc;GWK zDMxO9E-Mc2WzLn$DUyM$q1ludT~%YZwwWMnDlLuwm!u^f$GqKdi%*Cf?!biW8E^^F z1|B{88q#)noiICJA!O!Nnod`60-QH#fY6i!d18drR31m-6an!yeul36f8F_WJxl;a z3)VyVkYNJi$nd`(>XyqM+u0+2v-K$TMic5q9E*scC1Vz4aYHR#cm9&hS&QpF)72jP z!n;55m8g5h{K2ia-l`7{4qoCo&PVy@Tew`xCcFzF;8?bozy2Gi|1$)WbdOX3QVKXA z=4`{KTRE?@^5DUPhxvqBqO5M)Tb}HQQI+~|Dk1-&e+*fH&WjwOy_JM>lMwdVdxGuNh@=(fd|`#FlJiy$fPh#T-`D(R!>8%$FSdIGWa60C z3Y(7r0TCkn??Qx@4a7-2`qD{yeorSI?Tu4cG)b22D4WOvz`B9Dnh>pSi_mpz7tj@J z+A=M5#-{?|_!q?G8AN7 zU+?g+D^8n#bqR>pC!N}VF@yFG#O1duIR~q5CEHdm(3y0QmRU=}yg*3jV%@M;3lcT9 zBYk|kr<71OXuhuFlr#Eq#_|9D4h;QPeg%9jz&R1N?KZw&asgq zDJ>-<9C@dH_q*?3aL#k`InQ~2XJ?gFdY3AUJ3kwtL>o|kii(>RJVD9LUn^J8o3pw2 zx?ypd_*dzDiK2WN79}-1^r9qeazqqiwOf~gs-Ri15%;Y^RTYr80PlZJD&r()@|mc> zn4rR@{pYURZM6GuA8J;=74FNMXhNlVs)|p_tlu^&%5yNF?|^5Qo5%z5aWP8e78%yrEO2a+`ptnETx!6hhOgnlVT@ZC?k z5=s+ZUNGaX!3XAG9dJSz0Uosme0px5EfL9KCv{RE$jz({mxIa`(s8058GSKcuZ^~C z@_lnSv70 z6E0ifK4A>u>jguIX}nC%q~91{LCrMc*xQIPj)X#uI)T^VRN7bx0=L`fx6y%4RO()8 z*<2mH!X=E{H?$_oG!FYFF>7CDcm3Cm2+c~KMi-J;u)!E3%Zr}C(tZ19w09>`lvufJnljh&L>G*){vyyf&FiX z*;XbPr@npBPVgLW?F#PJn7t7olzsp4WLE(XtQuae-tUsp_pLrOfe#8}ZQGsQ!D+Gg zgzKt*AjJ*Y%0BTfaf=>mu?8HMewMA5KYzDQB@C9rwRiJ65?y5kBHVP;4EpA%40?Zm z-aDOLf5_R1NNhhdc_s(kXNNB&Eb3ST+gNMAeN&l*{56lsFw^vDz|mzFs@cyK2F7fs zD1Sjte6k<6f%8Z0$S*zPb(`OTO{Dp+2fSdq@g%lTf`jlye@E}tJ1&POS73}32YqJ{ zTl<=GB9*#HYV<<}Uv2%1J8Ti|)qUQ0WJO7IJXmIpYREe8J4T_@Qt|W-`mHJ&exN%p zStnFi%_HbSJ#k7BjfA?`q^9HUN~@nc_si#E59&yYWp2Al&{!5BXQ-H^E|+YI9kRcF z9*eWt{Tu2Z89G2y!Z!z6^f2DSY`w>Qy)x=X(9Q^JgWkf_{h`V~%S(pW@XrRyzv5*z z6n@)r0j>lKeE9atqdl|Ko)8B%0G#iP^}h3vYxhv*6zaOpyr{nwO^K3nogMh@(xw$~ zeJiR@6yZO>8Jn_~XQo=SF?K{g(PgW8{WL$8nAr-rH@te1bIWF3{l2C@h3iOezxy^! zDvkr%3cX}ay4ADtFCpC{muN@pwP?B=1S>>;31`=b8>mL{L{0MbLD9Ltjv959lds_g zrG5o1h-u}90xs2|Yy*(+ZXNqtIoX}Zs&X6AA|G1;+66RH|3b~!|51fcm! z4Xvcawv9wl*YRd`qr=UHIrlaeDY=ww2E6#chnTK>zIOvx=08vLY<$|&IU&jxlQk%V zyzDjfA9YhUdil4c6)V=3->l+nv2f`O_`ue)O{4}t7`(^YhF!}5x3{DKz|S2|i|WrW zj91~n`Sty)yZLTsY`xPU$YSsK)g1<~axytyb~?$A08JRYB35m=r{Q&fZwV9K4-E%G z3&C)tUbI|Su82&Wh=K^MR?syJ=Xol3_d*k{CL8AbJ&t74G(&jfmtj(~LykSBJOicO z`uwGn7#?jWSi>$h>dQujHz!vnjAB4R#tQRWZ zyojq&q22iB6y%L2BdNir;9)0ZkU!D$tS-$&YU|&ZB^+k*N z!b%WMHx~jI(q~^{u~XPqccC{jMVTq4#=qh<^sLf&Tazjk`)9f48_b_+y070>?O}AU zu0D`XJ%sf;i%;|6ccrB}G6j4%EzymXtd28v z1^onZ!$MMT1kGP*qxC+HUi+<`gg(B|vGRlMSzoPY4-FU;sQ6GEOkLee!v?gP18X>H zo)zI_4vI*Sp2Yq2TD(~-{G4)|J)AY$A~iJB3hC|PsfM>b-5E1dYrQ*0SF@TbC+GKZ znARzkKl86hI5TLi3KrN*O_WO){FL$v1f^P?lFuYCirf)w#_lD`wEZA`f1gJ!;mDqA zGj_F;tnTeiVm`_!Kc41vlESp%;V6khEmf#bK-MkZ;qH!zu-kfcx92ee*{7;+UDXh3 zV%qPlT{@np)_x{MP9wI*WrfL03;_=kb{x-cFBNDBDQN(ozZx+|y5GSs1;i5I@`kTa zj?6m^23!k$&F8Bxs^I2Yzd*Rc=!$U~Q_Rs_qrtW*1jO-B zk*VEKfV|kgkw?+KzYnfC6>_2K5%lO^(h^NH4&h2?Xs(>t?#ith^5jym0+2PQM)}qq zTf8z4St5MfKGa1J6}yIdTO0amEjerog(Vy5dp427TYD-_e|+ zMIVP?YBh6dfY5S`%D*X|@{sb1LBpw3BqBvKoiUNE#bjelHY3M%jZ2c3ZEVPS9PIkr z@;fjZQR*emA_xAMpLCU397X7K*S(lctW>@e5uf8E_2o>)8muHHBl?w&M_5KdP_KTL z;TgZ3>f&gHvLbSIFD2J$uwpqfbTkMpo%E5Nu9BC^SzQ(8BbZr+D@JWx?Hh-N&s|{1 zz7{1VA+Dxg0z)3P{1OgYPsBxU1NK_73VyS@)~1s6)i&7fI!N*y$ONpwHess?_02E- z&r!F+4$QvaG%M&(j{ttHoN_UBOOz{5<(~bhR99zF^62EKLBaGiYMk2;aE-|X8Aoi{ z61yMZ!l=*gfMbbkygpe!`Y8)U%fknt5Xxdw&5!VMw^MjfZ0n*Bw`~G>6_`uclgR%% ziu%;cAgMPJB8UHf_QwJ%zq9y`-6S4(&PT9jUb4{QT*6-6{*mJB#GN9JW6>{Tep%Y+ zO|`-T@O&l)2B^d>_n+?u5f$5)7cF2F*9aEYAU-tP)%fI~>qoF)!AI zX%6whcY~_thQ)_8t4Un9<5g=9*Df$`Or zuy!m3o_0y-jlZi~mL59|?_H&*{%rgb&mn-^wNsEUk1{O`&brPN!^r^UsMY@cqvPju zn1376uK&iBWER=2%R)Qet7tOtMJ+8gHROE^$VFi@Ut3Zs`#cr-Ce+I2R9poo{ihMd zXA(=Yp~}^EDLF&a;u+7LJZ0PAZk5-6@TLSo2RSAXkMpp*uz9up*>Qe{8~x1RN)>)N zfJ%5kje@zWTdcxl*-swN9zRP#pHyC&i{U1qW_NWsaOyRqeWCh{$N+=4ORkcU(m%n! zGxdlWrEnI8)oaQna7IN#O^(`ktuT6AYoN{m~+~U*sO6DQi&H~-k#Q9)0*TMOoYgDSB$+JWv+-8SVAXAE8#MPyduR-8a zwS>cNU{cjqh-1zXp-^gDWbqRDlg{_x!Q@!dB0`_MRP)W#WneubzhR{L<#&V0v%^&n zo4kqgrS+Vr$b+N(xiKgxys$ttm}s-~^5x;g9$(0&b>U>Nit7@66N-p5dn@M!OVl9% zK>I(V06M`X16nkF7bj;s-}Yzgny^=Qe{Vf@qgS`sK40QaTvw7F92?Z_mC8v5#hl|A&2%+Gjx_-?|c~%(lhkdmVJ{EAkQedPFI0B ztXcV9qw$czHO<2UU+*Kx$IROA1jip805<@X?{!Q)!&mN%+feFO1+N^^MCO1pwn5+Y zj#Nbt7cU@9KA8yB%Xb#%ANp(b|0@kV2#@qgChf{wqro{|x&AVydr(FI>vRBY zeUR>_L94yv`zYqXGM(F8{lN4?w&CbQt34mA84;dG*bsa_b#RgP_GP}PZa0p#8kh9{8Y&yo;1eNF!S~{#gmi-v zrz7vVo4Ia@A%F>yrm()LFL1ZUTFR3lGA-|A23s}W^6iG2l4B3ztq}#O1*acXOzQPV zWev#77#KIvqaWN|%>olKUWjB!{MDYP)Wt(|Jv*Q6N<$AS{MG=widgFW`kve|+NKmRkF*9nh9hs+XBnp7}}itA01+Y3M0%ZeJ}^|Kx-u6FLV{+UDh)|R@GQ{hg5Aa^+zV7S!JFz!N3UA|Naljk#@&Csc#y3I_LVVEL42O3SaK6l3j$!m3;v@<~X{Ng-iWK2g4MDDk|*iIc4^RE|r-s^9t^ zHl3sx_PzJU>?DIQxwXxk`YN!m*FZZ&{=Z2pYy0z$l4ly%M+@gO?KWr4vJ_q|hpS8F zgw7b_wto_pU=!!X$(sfk#*oFp9$~#EQqcai?Cp?K1}O`%dqV!pXre}#w%McfoTVnM zLU)-A`mz?dkdRTm_5PzXKChq zm}@_&yfNWP_wl{{HYpA+vS?DjA)^eu*TM4upR%W>c;xmFEKuT41^RUFch{Zx?G{~>$Ey$ze9V*sNMwTby{!%Ar+vj=|RKl>g<|ev?v4mma=$jx4v-wEg zLbB348z%P{I){H)TTrZyllv$%vU04^c3K^~IhN~S`DMtRS8&X9GM|w-^vw<9PB+E+ zDOl@co}={bp;0c$uPuO}6O1(MF3TwzpVp{UK~}iC*sSC<+fY@WDS`+ohrt*!S$!2+ z%W6;$dhao7(-gic{2@L2a?!a!xVTvZIRXu3C?%;{lH-QUAjJ~R1rS^nz*1zSgKZwn z7@T~^JTZm=-B(+crXsIdjp6IO^f)X$i7xt;Ch?}lTgFVP+j8k3D##N0yl+EK*WbFh z5M};+85v0N9zQeyr)BAHaWuJr4)Sw?Ni{%|um#*DT6buo@jx+UEkXG{Kq~?_3j(41(Mm^DyNFH(=m8nu1wLqq z*?mKFv`$~7V$JJ!KVCNOd82+d8V@dVxwrC@6q^gd)EWVH)A5z;SK6`HCcdnEw}hTMMas!IM}y*^h9=BsqnccRP|?Q-g1j;P+4b$G;%qR z*s~wLJgjYe_`RmMFm#_(*)0OBfvLhMPvH@`_>XSe_-N-cPRTr|OPXdEzBseU-Mztu zT-xdHake=mZv!vDf^3A)g2`-D#HbSVYns?!W===+{S->YSr;TC{n}fjyjz39GB}Dk z=+-@eg7ZrN%za3|K**B$^D(v#yyxjs-ko}3iCcz&=q;15n*c_ zu-1K4xP|=Db^jOaN~>Wv6+tU}w%Qi?7>LMqI9r%2I%)}>Q7y3-fTE8}yhwXBM&2j& zE518qZ1Ac8mg&;NSa@f1xNMlJ znVg{N@HbtCdqz3}vYnHqclo&i7`<|BR&N52ycXq4T5WNRtMi-G)CuAx6{g8WiY24Z zm-WN9{Ybkd!Q^6BZzx*tB7wJrn(aN-{B@qo=1uwi$Da|A{*)V*FSdsqDE6$;ff2NN z(sr5MJo!*ossh~Z6ni&`AkF4nix|1Ft(=w$v-N7f|3;-^#EToV<75@2)UI|pusS%M zx9@Vp+R|v<89R*l^K=uq#n#|K7uWOctfGO?=I7|Xu_pqzKn4R}-rT0Kev9w0>?+n4 z5}yjPuh0A~He`Ddc3mm6pM41PEAE0=sARen&9Glxx;BG6?dPTtUH<6r@XN%NNX1af zTKyky7Gnyr2-)n)%)!y(lwYw+RxMJH`LN8{w}Yi~aqY*-)OSBk=ZoaDTYatSEZ=I{ zVf(_WUBN1iFLMpCukwwil%CJLL)TCF1Zx;4?*HV4_-%scsm;U8oHd;D=7fmyY|8Q& z)atqSg47>vf>Es>&ItQ+Y8W|2zAA2m#zM2oDerIdlxUaliw9EKq0F{YO*#IvXs}k7 zkK)**+C5O3w_f;E4AkLQ@fQ)@hQo&JX&Sm_jO5#v`%lb(B7Ie{-hlisc zQO-7<@#vCWiH1vT0-cA^-$04d_^0sqo(Pxkpgb9T104Um=@;3=3DBI8+}EUQWs9Kx zUQ?BjfvxL#<}cf4%f0P6#|*Juk$E8urmbO1hqeMdo_P%7@P56Ti^` zys(Z6Cj9SytDCD**{}1x-7F|#;3zXd4dR~+cp|!>pnBv@0dNdTP6V=oX%2=ZeN!cd z=Yby~UB5*&hnx<@+3*9gppH_2g1Q`>H8Y+>?vyJ% z#Cg_vn2mCkNL-qaxwc#Y@04Vw)~Hyo4kC#;r6VXG*wPe>d@8o-xaYVToN}GH}y-r0!rLz>!G}G=cgY7 zN?d)T!o9Av3ch3^DQcwvA>=uYGMB$yv>o7 ozIjl$00eix;aK@UrR`tsLL^(*7g{)xC;mCDEO6#E7;obL09X8U6#xJL literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/profile1.jpg b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/profile1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1858e45264608227086cda1cb6f78ae42f1becad GIT binary patch literal 10118 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%0A`gryX!B*D3NQPZd;>3HHr6po+YEkdC^*{?<$094 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%0A0V>gO7E{h+eoL&fHC&M1oJ;3&qc>*0tf<$6xw- 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 z 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 L<(mJ+*Z=%q67ydT literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/view.jpg b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/view.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40bd29954ad71658f636da3a9ff6189ba0b8fd97 GIT binary patch literal 196 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 X{TK-^nI{Uqj{w)h9?lJp*z5lRv0}tI literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/environments/environment.prod.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/environments/environment.prod.ts new file mode 100644 index 0000000..f038c84 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/environments/environment.prod.ts @@ -0,0 +1,17 @@ +export const environment = { + production: true, + appName: 'My Application', + version: '11.2.13', + subVersion: '2021.05.13-01', + apiUrl: 'http://localhost:3000', + whiteUrl: 'http://localhost:3000', + blackUrl: 'http://localhost:3000/login', + + // changeble url // port + captchaSiteKey: '6LfrdSUpAAAAALkYDmnvdX3GLLCArgPWNHfXasjP', + + //Deployment configs + + + +}; diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/environments/environment.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/environments/environment.ts new file mode 100644 index 0000000..6bfca3d --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/environments/environment.ts @@ -0,0 +1,16 @@ +export const environment = { + production: false, + appName: 'My Application', + version: '11.2.13', + subVersion: '2021.05.13-01', + apiUrl: 'http://localhost:3000', + whiteUrl: 'http://localhost:3000', + blackUrl: 'http://localhost:3000/login', + + // changeblelocal configs url + captchaSiteKey: '6LfrdSUpAAAAALkYDmnvdX3GLLCArgPWNHfXasjP', + + //Deployment configs + + +}; diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/favicon.ico b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..997406ad22c29aae95893fb3d666c30258a09537 GIT binary patch literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000 + + + + + cloudnSure + + + + + + + + + + + + + Application Loading... + + + + + diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/main.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/polyfills.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/polyfills.ts new file mode 100644 index 0000000..dcd18ea --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/polyfills.ts @@ -0,0 +1,53 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/app.js b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/app.js new file mode 100644 index 0000000..a98674f --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/app.js @@ -0,0 +1,30 @@ + +const express = require('express'); +const { createProxyMiddleware } = require('http-proxy-middleware'); +const cors = require('cors') +const app = express(); +const proxy = require('express-http-proxy'); + +app.use(cors({ + origin: '*' +})) + +//Deployment configs +app.use('/repos', createProxyMiddleware({ target: 'https://try.gitea.io/api/v1', changeOrigin: true })); +app.use('/sureconnect', createProxyMiddleware({ target: 'http://43.205.154.152:30174', changeOrigin: true })); +app.use('/sureops', createProxyMiddleware({ target: 'http://43.205.154.152:31123', changeOrigin: true })); +app.use('/entityBuilder', createProxyMiddleware({ target: 'http://43.205.154.152:30171', changeOrigin: true })); +app.use('/surechat', createProxyMiddleware({ target: 'http://43.205.154.152:30172', changeOrigin: true })); +app.use('/jobpro', createProxyMiddleware({ target: 'http://43.205.154.152:30167', changeOrigin: true })); +app.use('/Surecommunication', createProxyMiddleware({ target: 'http://43.205.154.152:30187', changeOrigin: true })); +app.use('/surejob', createProxyMiddleware({ target: 'http://43.205.154.152:30188', changeOrigin: true })); +// app.use('/jobpro', createProxyMiddleware({ target: 'http://localhost:8087', changeOrigin: true })); +// app.use('/Surecommunication', createProxyMiddleware({ target: 'http://localhost:19002', changeOrigin: true })); +// app.use('/sureops', createProxyMiddleware({ target: 'http://localhost:9090', changeOrigin: true })); +// app.use('/', createProxyMiddleware({ target: 'http://localhost:8080', changeOrigin: true })); +// app.use('/', createProxyMiddleware({ target: 'http://localhost:9190', changeOrigin: true })); +// app.listen(3000); +// console.log('Node server running on port 3000'); +app.listen(3000, () => { + console.log("Server started in port 3000!"); +}); \ No newline at end of file diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/db.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/db.json new file mode 100644 index 0000000..16b3149 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/db.json @@ -0,0 +1,8 @@ +{ + "add": [ + { + "title": "todo", + "id": "Gosd82Z" + } + ] +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/package-lock.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/package-lock.json new file mode 100644 index 0000000..0d6968c --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/package-lock.json @@ -0,0 +1,537 @@ +{ + "name": "server", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.33.tgz", + "integrity": "sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "express-http-proxy": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/express-http-proxy/-/express-http-proxy-1.6.3.tgz", + "integrity": "sha512-/l77JHcOUrDUX8V67E287VEUQT0lbm71gdGVoodnlWBziarYKgMcpqT7xvh/HM8Jv52phw8Bd8tY+a7QjOr7Yg==", + "requires": { + "debug": "^3.0.1", + "es6-promise": "^4.1.1", + "raw-body": "^2.3.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "follow-redirects": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", + "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==" + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.0.5.tgz", + "integrity": "sha512-CKzML7u4RdGob8wuKI//H8Ein6wNTEQR7yjVEzPbhBLGdOfkfvgTnp2HLnniKBDP9QW4eG10/724iTWLBeER3g==", + "requires": { + "@types/http-proxy": "^1.17.4", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "lodash": "^4.17.19", + "micromatch": "^4.0.2" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + }, + "mime-types": { + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", + "requires": { + "mime-db": "1.49.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + } + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/package.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/package.json new file mode 100644 index 0000000..5ea1e92 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/server/package.json @@ -0,0 +1,18 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^0.21.1", + "cors": "^2.8.5", + "express": "^4.17.1", + "express-http-proxy": "^1.6.3", + "http-proxy-middleware": "^1.0.5" + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/styles.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/styles.scss new file mode 100644 index 0000000..5428d3e --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/styles.scss @@ -0,0 +1,198 @@ +@import url(//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css); +@import '~@clr/icons/clr-icons.min.css'; + +/* font set ==================== */ +@import url(https://fonts.googleapis.com/css?family=Athiti|Bai+Jamjuree|Chakra+Petch|Charmonman|Chonburi|Fahkwang|Itim|K2D|Kanit|KoHo|Kodchasan|Krub|Maitree|Mali|Mitr|Niramit|Pattaya|Pridi|Prompt|Sriracha|Srisakdi|Taviraj|Trirong); + +.font-athiti { font-family: 'Athiti', sans-serif; } +.font-bai-jamjuree { font-family: 'Bai Jamjuree', sans-serif; } +.font-chakra-petch { font-family: 'Chakra Petch', sans-serif; } +.font-charmonman { font-family: 'Charmonman', cursive; } +.font-chonburi { font-family: 'Chonburi', cursive; } +.font-fahkwang { font-family: 'Fahkwang', sans-serif; } +.font-itim { font-family: 'Itim', cursive; } +.font-k2d { font-family: 'K2D', sans-serif; } +.font-kodchasan { font-family: 'Kodchasan', sans-serif; } +.font-kanit { font-family: 'Kanit', sans-serif; } +.font-koHo { font-family: 'KoHo', sans-serif; } +.font-krub { font-family: 'Krub', sans-serif; } +.font-mali { font-family: 'Mali', cursive; } +.font-mitr { font-family: 'Mitr', sans-serif; } +.font-maitree { font-family: 'Maitree', serif; } +.font-niramit { font-family: 'Niramit', sans-serif; } +.font-pattaya { font-family: 'Pattaya', sans-serif; } +.font-pridi { font-family: 'Pridi', serif; } +.font-prompt { font-family: 'Prompt', sans-serif; } +.font-srisakdi { font-family: 'Srisakdi', cursive; } +.font-taviraj { font-family: 'Taviraj', serif; } +.font-sriracha { font-family: 'Sriracha', cursive; } +.font-trirong { font-family: 'Trirong', serif; } + +@font-face { + font-family: 'th-sarabun'; + src: url('./assets/fonts/THSarabun.ttf') format('truetype'), + url('/assets/fonts/THSarabun Bold.ttf') format('truetype'), + url('/assets/fonts/THSarabun Italic.ttf') format('truetype'), + url('/assets/fonts/THSarabun Bold Italic.ttf') format('truetype'); + } +.font-thsarabun { font-family: 'th-sarabun', cursive; font-size : 16pt; } + +.font-bold { font-weight: bold; } +.font-italic { font-style: italic; } +/* end font set ==================== */ + +.breadcrumb { + font-family: 'Trirong', serif; + margin-top: 0px; +} + +.breadcrumb-arrow { + height: 36px; + padding: 0; + line-height: 36px; + list-style: none; + background-color: #ebeceb +} +.breadcrumb-arrow li:first-child a { + border-radius: 4px 0 0 4px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px +} +.breadcrumb-arrow li, .breadcrumb-arrow li a, .breadcrumb-arrow li span { + display: inline-block; + vertical-align: top +} +.breadcrumb-arrow li:not(:first-child) { + margin-left: -5px +} +.breadcrumb-arrow li+li:before { + padding: 0; + content: "" +} +.breadcrumb-arrow li span { + padding: 0 10px +} +.breadcrumb-arrow li a, .breadcrumb-arrow li:not(:first-child) span { + height: 36px; + padding: 0 10px 0 25px; + line-height: 36px +} +.breadcrumb-arrow li:first-child a { + padding: 0 10px +} +.breadcrumb-arrow li a { + position: relative; + color: #fff; + text-decoration: none; + background-color: rgb(128, 130, 131); + border: 1px solid rgb(128, 130, 131); +} +.breadcrumb-arrow li:first-child a { + padding-left: 10px +} +.breadcrumb-arrow li a:after, .breadcrumb-arrow li a:before { + position: absolute; + top: -1px; + width: 0; + height: 0; + content: ''; + border-top: 18px solid transparent; + border-bottom: 18px solid transparent +} +.breadcrumb-arrow li a:before { + right: -10px; + z-index: 3; + border-left-color: rgb(128, 130, 131); + border-left-style: solid; + border-left-width: 11px +} +.breadcrumb-arrow li a:after { + right: -11px; + z-index: 2; + border-left: 11px solid #38393a +} +.breadcrumb-arrow li a:focus, .breadcrumb-arrow li a:hover { + background-color: #b7bbb7; + border: 1px solid #b7bbb7; + text-shadow: 1px 1px 1px rgb(20, 20, 20); +} +.breadcrumb-arrow li a:focus:before, .breadcrumb-arrow li a:hover:before { + border-left-color: #b7bbb7 +} +.breadcrumb-arrow li a:active { + background-color: #c5ccc5; + border: 1px solid #c5ccc5; +} +.breadcrumb-arrow li a:active:after, .breadcrumb-arrow li a:active:before { + border-left-color: #adb6ad; +} +.breadcrumb-arrow li span { + color: #7e8a83; +} + +.full-div { +padding: 0px 0px 0px 0px; +height: 100vh; +width: 100%; +margin-right: 0; +} + +.dg-wrapper { + margin-top: 0; + display: flex; + flex-direction: column; + height: 500px; +} + +.dg-wrapper-300 { + margin-top: 0; + display: flex; + flex-direction: column; + height: 300px; +} + +.dg-wrapper-400 { + margin-top: 0; + display: flex; + flex-direction: column; + height: 400px; +} + +.dg-wrapper-450 { + margin-top: 0; + display: flex; + flex-direction: column; + height: 450px; +} + +.dg-wrapper-500 { + display: flex; + flex-direction: column; + height: 500px; +} + +.dg-wrapper-600 { + display: flex; + flex-direction: column; + height: 600px; +} + +.dg-wrapper-700 { + display: flex; + flex-direction: column; + height: 700px; +} + +.dg-wrapper-800 { + display: flex; + flex-direction: column; + height: 800px; +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/styles1.scss b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/styles1.scss new file mode 100644 index 0000000..2d5f160 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/styles1.scss @@ -0,0 +1,54 @@ +input[type=text],[type=date],[type=password] { + width: 100%; + padding: 15px 20px; + // margin: 3px 0; + background-color:rgb(255, 255, 255); + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; +} +.required-field{ + color: red; +font-size: 18px; + +} +.green{ + background-color: rgb(156, 231, 156); + color: black; +} +.blue{ + background-color: #57abcf;//rgb(82, 87, 161); + color: black; +} +.td-title { + text-align: center; + width: 150px; +color: white; + font-weight: bold; + background-color: rgba(63, 122, 231, 0.863); + //color: rgb(24, 13, 13); +} +th{ + background-color:rgb(170, 169, 169); + font-weight: bold; +} +.td-content{ + text-align: left; +} +.delete,.heading{ + text-align: center; + color: red; +} +.section p { +background-color: rgb(206, 201, 201); + padding: 10px; + font-size: 18px; +} + +select{ + width: 100%; + padding: 5px 5px; + border: 1px solid #ccc; + border-radius: 4px; +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/test.ts b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/test.ts new file mode 100644 index 0000000..ae25f27 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/test.ts @@ -0,0 +1,16 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), { + teardown: { destroyAfterEach: false } +} +); diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.app.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.app.json new file mode 100644 index 0000000..82d91dc --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.json new file mode 100644 index 0000000..b62b646 --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.json @@ -0,0 +1,21 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "lib": [ + "ES2022", + "dom" + ], + "useDefineForClassFields": false + } +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.spec.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.spec.json new file mode 100644 index 0000000..092345b --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tslint.json b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tslint.json new file mode 100644 index 0000000..67bcdea --- /dev/null +++ b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/tslint.json @@ -0,0 +1,152 @@ +{ + "extends": "tslint:recommended", + "rules": { + "align": { + "options": [ + "parameters", + "statements" + ] + }, + "array-type": false, + "arrow-return-shorthand": true, + "curly": true, + "deprecation": { + "severity": "warning" + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "eofline": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "import-spacing": true, + "indent": { + "options": [ + "spaces" + ] + }, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "quotemark": [ + true, + "single" + ], + "semicolon": { + "options": [ + "always" + ] + }, + "space-before-function-paren": { + "options": { + "anonymous": "never", + "asyncArrow": "always", + "constructor": "never", + "method": "never", + "named": "never" + } + }, + "typedef": [ + true, + "call-signature" + ], + "typedef-whitespace": { + "options": [ + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ] + }, + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-pascal-case" + ] + }, + "whitespace": { + "options": [ + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ] + }, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true + }, + "rulesDirectory": [ + "codelyzer" + ] +} \ No newline at end of file

    Pb?$lfs|a)Wa# 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 R)V|wnwno|_dSU3r{Rb`xNTmP( literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun Italic.ttf b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/fonts/THSarabun Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4be8ad8460f1e363eadbbe20ec1b3b27b80483de GIT binary patch literal 104352 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 literal 0 HcmV?d00001 diff --git a/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/2021-12-24_1662642503238.png b/pro118njsac-front-f/authsec_angular/frontend/angular-clarity-master/src/assets/images/2021-12-24_1662642503238.png new file mode 100644 index 0000000000000000000000000000000000000000..3a1c499014a0ca224a1775c0ec25ba53ea6d632d GIT binary patch literal 753683 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 ku0_*Dkrwl>a0k}3*&2eo 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