@sidekick-coder/zenith-kit 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/release.js +76 -0
- package/bin/zenith.js +9 -8
- package/dist/client/index.es.js +3274 -10177
- package/dist/client/src/client/components/ui/button/index.d.ts +2 -2
- package/dist/client/src/client/components/ui/sidebar/index.d.ts +1 -1
- package/dist/client/src/client/components/ui/toggle/index.d.ts +1 -1
- package/dist/client/src/client/components.d.ts +1 -0
- package/dist/client/src/client/composables/useForm.d.ts +1 -1
- package/dist/client/src/client/composables/useRoute.d.ts +3 -0
- package/dist/client/src/client/facades/emmitter.d.ts +1 -1
- package/dist/client/src/client/index.d.ts +1 -0
- package/dist/client/src/shared/schemas/dashboardMetaSchema.d.ts +6 -6
- package/dist/client/src/shared/validators/array.d.ts +5 -0
- package/dist/client/src/shared/validators/index.d.ts +1 -0
- package/dist/client/src/shared/validators/urlValidator.d.ts +0 -1
- package/dist/components/index.es.js +8507 -8638
- package/dist/components/src/client/components/DashboardGridUnitInput.vue.d.ts +1 -1
- package/dist/components/src/client/components/FileUploader.vue.d.ts +1 -1
- package/dist/components/src/client/components/FormFilePicker.vue.d.ts +1 -1
- package/dist/components/src/client/components/FormFileUploader.vue.d.ts +1 -1
- package/dist/components/src/client/components/FormImageUploader.vue.d.ts +1 -1
- package/dist/components/src/client/components/ui/combobox/ComboboxList.vue.d.ts +1 -1
- package/dist/components/src/client/components/ui/menubar/MenubarContent.vue.d.ts +1 -1
- package/dist/components/src/client/components/ui/popover/PopoverContent.vue.d.ts +1 -1
- package/dist/components/src/client/components.d.ts +1 -0
- package/dist/components/src/client/composables/useForm.d.ts +1 -1
- package/dist/components/src/client/composables/useRoute.d.ts +3 -0
- package/dist/components/src/client/facades/emmitter.d.ts +1 -1
- package/dist/components/src/client/index.d.ts +1 -0
- package/dist/components/src/shared/schemas/dashboardMetaSchema.d.ts +6 -6
- package/dist/components/src/shared/schemas/userSchema.d.ts +16 -16
- package/dist/components/src/shared/validators/array.d.ts +5 -0
- package/dist/components/src/shared/validators/index.d.ts +1 -0
- package/dist/components/src/shared/validators/urlValidator.d.ts +0 -1
- package/dist/server/AclEntity-BltZiTsS.d.mts +25 -0
- package/dist/server/AclEntity-C2YSHzip.mjs +2 -0
- package/dist/server/AuthMiddleware-D2BZKKBJ.d.mts +15 -0
- package/dist/server/AuthSilenceMiddleware-8l5EPeot.d.mts +16 -0
- package/dist/server/AuthorizationMiddleware-BjozUIyB.d.mts +25 -0
- package/dist/server/BaseEntityMixin-8XsQRDgt.mjs +2 -0
- package/dist/server/BaseException-cMfHz0w8.mjs +2 -0
- package/dist/server/BaseRelation-Br4CDT5e.d.mts +7 -0
- package/dist/server/BelongsToFileRelation-B-KDoKlS.d.mts +24 -0
- package/dist/server/BelongsToRelation-BdcBpcDt.d.mts +24 -0
- package/dist/server/BelongsToUserRelation-C1Mj-hdb.mjs +2 -0
- package/dist/server/BelongsToUserRelation-D-nXYwyy.d.mts +9 -0
- package/dist/server/CliService-BN3FMadM.d.mts +51 -0
- package/dist/server/CliTesterService-XVGae3eK.d.mts +11 -0
- package/dist/server/CliWrapperService-yg9gALPj.d.mts +30 -0
- package/dist/server/ConfigFSService-BOgh6pL9.d.mts +28 -0
- package/dist/server/ConfigManagerService-D7WdTGtJ.d.mts +26 -0
- package/dist/server/ConfigRepository-DdBw1w8b.d.mts +27 -0
- package/dist/server/ConfigS3Service-MPEl-P_u.d.mts +27 -0
- package/dist/server/ConfigService-CNvGuEng.mjs +2 -0
- package/dist/server/ConfigService-Di_lVTAw.d.mts +26 -0
- package/dist/server/ContainerService-CL9IKkoa.d.mts +20 -0
- package/dist/server/CookieMapEntity-BfC0NuKI.d.mts +18 -0
- package/dist/server/CookieMapEntity-CJRqkyl9.d.mts +13 -0
- package/dist/server/CookieMapEntity-KhdSUHhb.mjs +2 -0
- package/dist/server/DatabaseContract-iR4kncmi.d.mts +141 -0
- package/dist/server/DatabaseGateway-DHTbjF5C.d.mts +10 -0
- package/dist/server/DatabaseRepository-_gA6RkcH.d.mts +60 -0
- package/dist/server/DatabaseRepositoryInferMixin-BKv4RR8I.d.mts +19 -0
- package/dist/server/DownloadService-B-r-EqkZ.d.mts +17 -0
- package/dist/server/DriveBaseGateway-C5R7er0_.d.mts +32 -0
- package/dist/server/DriveConfigEntity-BTK1AHGA.mjs +2 -0
- package/dist/server/DriveConfigEntity-Dh8yII97.d.mts +92 -0
- package/dist/server/DriveContract-CaFb_Tph.d.mts +31 -0
- package/dist/server/DriveEntryEntity-BiZSWkGi.d.mts +11 -0
- package/dist/server/DriveFSGateway-_7luuCiK.d.mts +28 -0
- package/dist/server/DriveS3Gateway-BM7HhUZf.d.mts +42 -0
- package/dist/server/DriveService-Cb-DdupY.d.mts +70 -0
- package/dist/server/EmmitterService-BwETNyCU.d.mts +8 -0
- package/dist/server/EmmitterService-Dw_dThZJ.mjs +2 -0
- package/dist/server/EmmitterService-s7wZsSVf.d.mts +57 -0
- package/dist/server/EncryptService-B17nfV8V.d.mts +39 -0
- package/dist/server/EnvService-BUFUgqUW.mjs +2 -0
- package/dist/server/EnvService-D7rVDvqk.d.mts +54 -0
- package/dist/server/EventContract-B6JEPwRM.d.mts +18 -0
- package/dist/server/ExceptionService-S7L99ujh.d.mts +21 -0
- package/dist/server/FileEntity-6sT7RdiN.d.mts +194 -0
- package/dist/server/FileEntity-cztreoro.mjs +2 -0
- package/dist/server/FileMetaEntity-uHFGRj8P.mjs +2 -0
- package/dist/server/FileRepository--bOaDHZz.d.mts +48 -0
- package/dist/server/GitBranchRepository-C0VHcpbD.mjs +3 -0
- package/dist/server/GitBranchRepository-k7reiBa4.d.mts +30 -0
- package/dist/server/GitCommitRepository-fjbilGO0.mjs +2 -0
- package/dist/server/GitCommitRepository-j6tmgRS2.d.mts +40 -0
- package/dist/server/GitGateway-CNuhGhkh.d.mts +48 -0
- package/dist/server/HasManyRelation-v0qmO2nd.d.mts +26 -0
- package/dist/server/HasMetasRelation-BUoCpbto.d.mts +22 -0
- package/dist/server/HasherService-DnbIU1ub.d.mts +9 -0
- package/dist/server/HooksMixin-D_OSdJ8D.mjs +2 -0
- package/dist/server/HttpContextContract-BS6VXi67.d.mts +25 -0
- package/dist/server/HttpService-DnnqU2n1.d.mts +44 -0
- package/dist/server/KyselyContract-ACWyd3F_.d.mts +8 -0
- package/dist/server/LifecycleHook-BEVS4FKE.d.mts +22 -0
- package/dist/server/LifecycleHook-DecY1BiW.mjs +2 -0
- package/dist/server/LifecycleService-5eYElrdc.mjs +2 -0
- package/dist/server/LifecycleService-C43A9AOw.d.mts +50 -0
- package/dist/server/LoggerService-8XvsFBNN.mjs +2 -0
- package/dist/server/LoggerService-C5FUibjh.d.mts +12 -0
- package/dist/server/MetadataMixin-AVaqESW2.d.mts +15 -0
- package/dist/server/MetadataQueryService-WXBAN4d8.d.mts +37 -0
- package/dist/server/MetadataService-D5lAlAuy.d.mts +23 -0
- package/dist/server/MigrationEntity-B5VsB63u.d.mts +21 -0
- package/dist/server/MigratorService-DHug6UBq.d.mts +81 -0
- package/dist/server/ModelConfigMixin-7rCJZaAw.d.mts +24 -0
- package/dist/server/ModuleEntity-DZ2R1Bf_.mjs +2 -0
- package/dist/server/ModuleEntity-xa6rCTxe.d.mts +67 -0
- package/dist/server/PageRequestContextEntity-B1nE9xel.d.mts +45 -0
- package/dist/server/PermissionAssignmentRepository-DVS015ou.d.mts +28 -0
- package/dist/server/PermissionEntity-DFd-TfNn.d.mts +23 -0
- package/dist/server/PermissionRepository-9Kf8A5uC.d.mts +29 -0
- package/dist/server/PluginEntity-Bjl3keRp.d.mts +17 -0
- package/dist/server/PluginEntryEntity-BDBElYQ1.d.mts +31 -0
- package/dist/server/PluginEntryEntity-P80sQn2B.mjs +2 -0
- package/dist/server/PluginIpcClient-5kLU9aLc.d.mts +17 -0
- package/dist/server/PluginIpcHost-DTXHSMkU.d.mts +15 -0
- package/dist/server/PluginRouter-DOOBinlR.d.mts +43 -0
- package/dist/server/RelationsMixin-BaXvJfzK.d.mts +13 -0
- package/dist/server/RouteEntity-CLRlwjdn.d.mts +23 -0
- package/dist/server/RouterContract-thDZSYVJ.d.mts +19 -0
- package/dist/server/RouterFileBaseRoutingService-CEBdzCYd.d.mts +26 -0
- package/dist/server/RouterRegisterService-mU1J15Yt.d.mts +20 -0
- package/dist/server/RouterResourceConfigService-BdqbVblk.d.mts +26 -0
- package/dist/server/RouterResourceService-Cj73MVpb.d.mts +34 -0
- package/dist/server/RouterService-BS_1MzFI.mjs +2 -0
- package/dist/server/RouterService-DmiiZzf5.d.mts +69 -0
- package/dist/server/RoutineEntity-DTJtFI1m.d.mts +24 -0
- package/dist/server/SchedulerService-DDuSAEiJ.d.mts +53 -0
- package/dist/server/SeederEntity-DYcCU6bM.d.mts +18 -0
- package/dist/server/SeederService-B9j_aioh.d.mts +55 -0
- package/dist/server/ShellService-BYXgMyxs.mjs +2 -0
- package/dist/server/ShellService-BrVU19X3.d.mts +29 -0
- package/dist/server/SoftDeleteMixin-Be6a-3yd.mjs +2 -0
- package/dist/server/TokenRepository-C1RqlmxD.mjs +2 -0
- package/dist/server/TokenRepository-DplVSSbU.d.mts +37 -0
- package/dist/server/UserEntity-NnuYOCM7.d.mts +55 -0
- package/dist/server/UserRepository-BkGla4Vr.d.mts +37 -0
- package/dist/server/addIdColumn-BiPPrrLR.d.mts +7 -0
- package/dist/server/addSoftDeleteColumn-CZGL0m9X.d.mts +14 -0
- package/dist/server/addTimestampColumns-DW_pSZXf.d.mts +19 -0
- package/dist/server/basePath-BrKDzdou.d.mts +10 -0
- package/dist/server/chunk-CGLV7CjG.mjs +1 -0
- package/dist/server/commands/pluginBuild.d.mts +7 -0
- package/dist/server/commands/pluginBuild.mjs +2 -0
- package/dist/server/commands/pluginGenerateId.d.mts +7 -0
- package/dist/server/commands/pluginGenerateId.mjs +2 -0
- package/dist/server/common-CkVu3aD6.d.mts +22 -0
- package/dist/server/compose-Dq68rcKW.d.mts +5 -0
- package/dist/server/compose-XJLd0ioo.mjs +2 -0
- package/dist/server/config-DDScRnvV.d.mts +7 -0
- package/dist/server/config-OUxEJV91.d.mts +5 -0
- package/dist/server/container-Be1UNVpU.d.mts +7 -0
- package/dist/server/container-BwAJOg9B.mjs +2 -0
- package/dist/server/contracts/DatabaseContract.d.mts +2 -0
- package/dist/server/contracts/DatabaseContract.mjs +1 -0
- package/dist/server/contracts/DriveContract.d.mts +2 -0
- package/dist/server/contracts/DriveContract.mjs +1 -0
- package/dist/server/contracts/EventContract.d.mts +2 -0
- package/dist/server/contracts/EventContract.mjs +1 -0
- package/dist/server/contracts/HttpContextContract.d.mts +2 -0
- package/dist/server/contracts/HttpContextContract.mjs +1 -0
- package/dist/server/contracts/KyselyContract.d.mts +2 -0
- package/dist/server/contracts/KyselyContract.mjs +1 -0
- package/dist/server/contracts/RouterContract.d.mts +2 -0
- package/dist/server/contracts/RouterContract.mjs +1 -0
- package/dist/server/count-Cx1qqWRe.d.mts +12 -0
- package/dist/server/create-BnVaEuUC.d.mts +17 -0
- package/dist/server/createId-c4X4-v2p.mjs +2 -0
- package/dist/server/createLoaderFactory-Bpk6rD3D.d.mts +11 -0
- package/dist/server/cuid-7odspl-1.d.mts +5 -0
- package/dist/server/database-CWkgKEjr.d.mts +8 -0
- package/dist/server/defineHandler-fLDf436i.d.mts +10 -0
- package/dist/server/defineLoader-BOYnKv5_.d.mts +11 -0
- package/dist/server/destroy-Uj3B5q04.d.mts +14 -0
- package/dist/server/download-DzKRkAhD.d.mts +7 -0
- package/dist/server/drive-BZiloXJW.d.mts +7 -0
- package/dist/server/emmitter-9-6gueft.d.mts +7 -0
- package/dist/server/encrypt-BtQggXao.d.mts +7 -0
- package/dist/server/entities/AclEntity.d.mts +2 -0
- package/dist/server/entities/AclEntity.mjs +1 -0
- package/dist/server/entities/CookieMapEntity.d.mts +2 -0
- package/dist/server/entities/CookieMapEntity.mjs +1 -0
- package/dist/server/entities/DriveConfigEntity.d.mts +2 -0
- package/dist/server/entities/DriveConfigEntity.mjs +1 -0
- package/dist/server/entities/FileEntity.d.mts +2 -0
- package/dist/server/entities/FileEntity.mjs +1 -0
- package/dist/server/entities/FileMetaEntity.d.mts +2 -0
- package/dist/server/entities/FileMetaEntity.mjs +1 -0
- package/dist/server/entities/MigrationEntity.d.mts +2 -0
- package/dist/server/entities/MigrationEntity.mjs +2 -0
- package/dist/server/entities/ModuleEntity.d.mts +2 -0
- package/dist/server/entities/ModuleEntity.mjs +1 -0
- package/dist/server/entities/PageRequestContextEntity.d.mts +2 -0
- package/dist/server/entities/PageRequestContextEntity.mjs +2 -0
- package/dist/server/entities/PluginEntity.d.mts +2 -0
- package/dist/server/entities/PluginEntity.mjs +2 -0
- package/dist/server/entities/PluginEntryEntity.d.mts +2 -0
- package/dist/server/entities/PluginEntryEntity.mjs +1 -0
- package/dist/server/entities/RouteEntity.d.mts +2 -0
- package/dist/server/entities/RouteEntity.mjs +2 -0
- package/dist/server/entities/RoutineEntity.d.mts +2 -0
- package/dist/server/entities/RoutineEntity.mjs +2 -0
- package/dist/server/entities/SeederEntity.d.mts +2 -0
- package/dist/server/entities/SeederEntity.mjs +2 -0
- package/dist/server/env-oE1dEbgb.d.mts +7 -0
- package/dist/server/exists-Csru9uQi.d.mts +8 -0
- package/dist/server/facades/config.d.mts +2 -0
- package/dist/server/facades/config.mjs +2 -0
- package/dist/server/facades/container.d.mts +2 -0
- package/dist/server/facades/container.mjs +1 -0
- package/dist/server/facades/database.d.mts +2 -0
- package/dist/server/facades/database.mjs +2 -0
- package/dist/server/facades/download.d.mts +2 -0
- package/dist/server/facades/download.mjs +2 -0
- package/dist/server/facades/drive.d.mts +2 -0
- package/dist/server/facades/drive.mjs +2 -0
- package/dist/server/facades/emmitter.d.mts +2 -0
- package/dist/server/facades/emmitter.mjs +2 -0
- package/dist/server/facades/encrypt.d.mts +2 -0
- package/dist/server/facades/encrypt.mjs +2 -0
- package/dist/server/facades/env.d.mts +2 -0
- package/dist/server/facades/env.mjs +2 -0
- package/dist/server/facades/filesRepository.d.mts +2 -0
- package/dist/server/facades/filesRepository.mjs +2 -0
- package/dist/server/facades/hasher.d.mts +2 -0
- package/dist/server/facades/hasher.mjs +2 -0
- package/dist/server/facades/http.d.mts +2 -0
- package/dist/server/facades/http.mjs +2 -0
- package/dist/server/facades/lifecycle.d.mts +2 -0
- package/dist/server/facades/lifecycle.mjs +2 -0
- package/dist/server/facades/logger.d.mts +2 -0
- package/dist/server/facades/logger.mjs +2 -0
- package/dist/server/facades/migrator.d.mts +2 -0
- package/dist/server/facades/migrator.mjs +2 -0
- package/dist/server/facades/permissionAssignmentRepository.d.mts +2 -0
- package/dist/server/facades/permissionAssignmentRepository.mjs +2 -0
- package/dist/server/facades/permissionRepository.d.mts +2 -0
- package/dist/server/facades/permissionRepository.mjs +2 -0
- package/dist/server/facades/router.d.mts +2 -0
- package/dist/server/facades/router.mjs +2 -0
- package/dist/server/facades/scheduler.d.mts +2 -0
- package/dist/server/facades/scheduler.mjs +2 -0
- package/dist/server/facades/shell.d.mts +2 -0
- package/dist/server/facades/shell.mjs +2 -0
- package/dist/server/facades/tokenRepository.d.mts +2 -0
- package/dist/server/facades/tokenRepository.mjs +2 -0
- package/dist/server/facades/userRepository.d.mts +2 -0
- package/dist/server/facades/userRepository.mjs +2 -0
- package/dist/server/fileLoader-D1BgCxaZ.d.mts +11 -0
- package/dist/server/fileUrlLoader-DpVRfcGU.d.mts +12 -0
- package/dist/server/filesRepository-D9fxvd-E.d.mts +7 -0
- package/dist/server/findOne-Boxfam4u.d.mts +15 -0
- package/dist/server/firstOrCreate-DZr8L5yb.d.mts +15 -0
- package/dist/server/flatten-DHGvYNde.mjs +2 -0
- package/dist/server/gateways/DatabaseGateway.d.mts +2 -0
- package/dist/server/gateways/DatabaseGateway.mjs +2 -0
- package/dist/server/gateways/DriveBaseGateway.d.mts +2 -0
- package/dist/server/gateways/DriveBaseGateway.mjs +2 -0
- package/dist/server/gateways/DriveFSGateway.d.mts +2 -0
- package/dist/server/gateways/DriveFSGateway.mjs +2 -0
- package/dist/server/gateways/DriveS3Gateway.d.mts +2 -0
- package/dist/server/gateways/DriveS3Gateway.mjs +2 -0
- package/dist/server/gateways/GitGateway.d.mts +2 -0
- package/dist/server/gateways/GitGateway.mjs +3 -0
- package/dist/server/generateIndexFile-zJLs7hsX.d.mts +5 -0
- package/dist/server/hasManyThroughLoader-BlAt7DQD.d.mts +22 -0
- package/dist/server/hasManyThroughRelation-CydrMBzu.d.mts +33 -0
- package/dist/server/hasher-i-RJja9d.d.mts +7 -0
- package/dist/server/http-F5dtmcy0.d.mts +7 -0
- package/dist/server/importAll-CDPG0oSA.d.mts +22 -0
- package/dist/server/importOne-C4TjAH5G.d.mts +5 -0
- package/dist/server/index-BcsXXrHq.d.mts +1 -0
- package/dist/server/index.d.mts +127 -2890
- package/dist/server/index.mjs +1 -4
- package/dist/server/lifecycle-CBXw5SHi.d.mts +7 -0
- package/dist/server/list-DLrcQUmc.d.mts +16 -0
- package/dist/server/loadMetas-kut6dSZS.d.mts +18 -0
- package/dist/server/loaders/fileLoader.d.mts +2 -0
- package/dist/server/loaders/fileLoader.mjs +2 -0
- package/dist/server/loaders/fileUrlLoader.d.mts +2 -0
- package/dist/server/loaders/fileUrlLoader.mjs +2 -0
- package/dist/server/loaders/hasManyThroughLoader.d.mts +2 -0
- package/dist/server/loaders/hasManyThroughLoader.mjs +2 -0
- package/dist/server/loaders/loadMetas.d.mts +2 -0
- package/dist/server/loaders/loadMetas.mjs +2 -0
- package/dist/server/loaders/permissionLoader.d.mts +2 -0
- package/dist/server/loaders/permissionLoader.mjs +2 -0
- package/dist/server/loaders/userLoader.d.mts +2 -0
- package/dist/server/loaders/userLoader.mjs +2 -0
- package/dist/server/logger-B-eGxHk1.d.mts +7 -0
- package/dist/server/middlewares/AuthMiddleware.d.mts +2 -0
- package/dist/server/middlewares/AuthMiddleware.mjs +2 -0
- package/dist/server/middlewares/AuthSilenceMiddleware.d.mts +2 -0
- package/dist/server/middlewares/AuthSilenceMiddleware.mjs +2 -0
- package/dist/server/middlewares/AuthorizationMiddleware.d.mts +2 -0
- package/dist/server/middlewares/AuthorizationMiddleware.mjs +2 -0
- package/dist/server/migrator-D9OUJuE0.d.mts +7 -0
- package/dist/server/mixins/DatabaseRepositoryInferMixin.d.mts +2 -0
- package/dist/server/mixins/DatabaseRepositoryInferMixin.mjs +2 -0
- package/dist/server/mixins/MetadataMixin.d.mts +2 -0
- package/dist/server/mixins/MetadataMixin.mjs +2 -0
- package/dist/server/mixins/ModelConfigMixin.d.mts +2 -0
- package/dist/server/mixins/ModelConfigMixin.mjs +2 -0
- package/dist/server/mixins/ModelMixin.d.mts +60 -0
- package/dist/server/mixins/ModelMixin.mjs +2 -0
- package/dist/server/mixins/RelationsMixin.d.mts +2 -0
- package/dist/server/mixins/RelationsMixin.mjs +2 -0
- package/dist/server/normalizers-ByJRmAYa.mjs +2 -0
- package/dist/server/paginate-Dq4YCfoP.d.mts +33 -0
- package/dist/server/paginate-xPInooKh.mjs +2 -0
- package/dist/server/permissionAssignmentRepository-kW-shaeD.d.mts +7 -0
- package/dist/server/permissionLoader-DzP0E01F.d.mts +13 -0
- package/dist/server/permissionRepository-pSU0Pbu0.d.mts +7 -0
- package/dist/server/printTable-7dreX6wW.d.mts +15 -0
- package/dist/server/queries/common.d.mts +2 -0
- package/dist/server/queries/common.mjs +2 -0
- package/dist/server/queries/count.d.mts +2 -0
- package/dist/server/queries/count.mjs +2 -0
- package/dist/server/queries/create.d.mts +2 -0
- package/dist/server/queries/create.mjs +2 -0
- package/dist/server/queries/destroy.d.mts +2 -0
- package/dist/server/queries/destroy.mjs +2 -0
- package/dist/server/queries/exists.d.mts +2 -0
- package/dist/server/queries/exists.mjs +2 -0
- package/dist/server/queries/findOne.d.mts +2 -0
- package/dist/server/queries/findOne.mjs +2 -0
- package/dist/server/queries/firstOrCreate.d.mts +2 -0
- package/dist/server/queries/firstOrCreate.mjs +2 -0
- package/dist/server/queries/index.d.mts +14 -0
- package/dist/server/queries/index.mjs +1 -0
- package/dist/server/queries/list.d.mts +2 -0
- package/dist/server/queries/list.mjs +2 -0
- package/dist/server/queries/paginate.d.mts +2 -0
- package/dist/server/queries/paginate.mjs +1 -0
- package/dist/server/queries/softDelete.d.mts +2 -0
- package/dist/server/queries/softDelete.mjs +2 -0
- package/dist/server/queries/timestamp.d.mts +2 -0
- package/dist/server/queries/timestamp.mjs +2 -0
- package/dist/server/queries/update.d.mts +2 -0
- package/dist/server/queries/update.mjs +2 -0
- package/dist/server/queries/updateOrCreate.d.mts +2 -0
- package/dist/server/queries/updateOrCreate.mjs +2 -0
- package/dist/server/relations/BaseRelation.d.mts +2 -0
- package/dist/server/relations/BaseRelation.mjs +2 -0
- package/dist/server/relations/BelongsToFileRelation.d.mts +2 -0
- package/dist/server/relations/BelongsToFileRelation.mjs +2 -0
- package/dist/server/relations/BelongsToRelation.d.mts +2 -0
- package/dist/server/relations/BelongsToRelation.mjs +2 -0
- package/dist/server/relations/BelongsToUserRelation.d.mts +2 -0
- package/dist/server/relations/BelongsToUserRelation.mjs +1 -0
- package/dist/server/relations/HasManyRelation.d.mts +2 -0
- package/dist/server/relations/HasManyRelation.mjs +2 -0
- package/dist/server/relations/HasMetasRelation.d.mts +2 -0
- package/dist/server/relations/HasMetasRelation.mjs +2 -0
- package/dist/server/relations/hasManyThroughRelation.d.mts +2 -0
- package/dist/server/relations/hasManyThroughRelation.mjs +2 -0
- package/dist/server/repositories/ConfigRepository.d.mts +2 -0
- package/dist/server/repositories/ConfigRepository.mjs +2 -0
- package/dist/server/repositories/DatabaseRepository.d.mts +2 -0
- package/dist/server/repositories/DatabaseRepository.mjs +2 -0
- package/dist/server/repositories/FileRepository.d.mts +2 -0
- package/dist/server/repositories/FileRepository.mjs +2 -0
- package/dist/server/repositories/GitBranchRepository.d.mts +2 -0
- package/dist/server/repositories/GitBranchRepository.mjs +1 -0
- package/dist/server/repositories/GitCommitRepository.d.mts +2 -0
- package/dist/server/repositories/GitCommitRepository.mjs +1 -0
- package/dist/server/repositories/PermissionAssignmentRepository.d.mts +2 -0
- package/dist/server/repositories/PermissionAssignmentRepository.mjs +2 -0
- package/dist/server/repositories/PermissionRepository.d.mts +2 -0
- package/dist/server/repositories/PermissionRepository.mjs +2 -0
- package/dist/server/repositories/PermissionRepository.test-d.d.mts +1 -0
- package/dist/server/repositories/PermissionRepository.test-d.mjs +2 -0
- package/dist/server/repositories/TokenRepository.d.mts +2 -0
- package/dist/server/repositories/TokenRepository.mjs +1 -0
- package/dist/server/repositories/UserRepository.d.mts +2 -0
- package/dist/server/repositories/UserRepository.mjs +2 -0
- package/dist/server/router-D7lk_eki.d.mts +8 -0
- package/dist/server/scheduler-BZJ0JscK.d.mts +7 -0
- package/dist/server/services/CliService.d.mts +2 -0
- package/dist/server/services/CliService.mjs +2 -0
- package/dist/server/services/CliTesterService.d.mts +2 -0
- package/dist/server/services/CliTesterService.mjs +2 -0
- package/dist/server/services/CliWrapperService.d.mts +2 -0
- package/dist/server/services/CliWrapperService.mjs +2 -0
- package/dist/server/services/ConfigFSService.d.mts +2 -0
- package/dist/server/services/ConfigFSService.mjs +2 -0
- package/dist/server/services/ConfigManagerService.d.mts +2 -0
- package/dist/server/services/ConfigManagerService.mjs +2 -0
- package/dist/server/services/ConfigS3Service.d.mts +2 -0
- package/dist/server/services/ConfigS3Service.mjs +2 -0
- package/dist/server/services/DownloadService.d.mts +2 -0
- package/dist/server/services/DownloadService.mjs +2 -0
- package/dist/server/services/DriveService.d.mts +2 -0
- package/dist/server/services/DriveService.mjs +2 -0
- package/dist/server/services/EmmitterService.d.mts +2 -0
- package/dist/server/services/EmmitterService.mjs +2 -0
- package/dist/server/services/EncryptService.d.mts +2 -0
- package/dist/server/services/EncryptService.mjs +2 -0
- package/dist/server/services/EnvService.d.mts +2 -0
- package/dist/server/services/EnvService.mjs +1 -0
- package/dist/server/services/ExceptionService.d.mts +2 -0
- package/dist/server/services/ExceptionService.mjs +2 -0
- package/dist/server/services/HasherService.d.mts +2 -0
- package/dist/server/services/HasherService.mjs +2 -0
- package/dist/server/services/HttpService.d.mts +2 -0
- package/dist/server/services/HttpService.mjs +2 -0
- package/dist/server/services/LifecycleService.d.mts +2 -0
- package/dist/server/services/LifecycleService.mjs +1 -0
- package/dist/server/services/MetadataQueryService.d.mts +2 -0
- package/dist/server/services/MetadataQueryService.mjs +2 -0
- package/dist/server/services/MetadataService.d.mts +2 -0
- package/dist/server/services/MetadataService.mjs +2 -0
- package/dist/server/services/MigratorService.d.mts +2 -0
- package/dist/server/services/MigratorService.mjs +2 -0
- package/dist/server/services/PluginIpcClient.d.mts +2 -0
- package/dist/server/services/PluginIpcClient.mjs +2 -0
- package/dist/server/services/PluginIpcHost.d.mts +2 -0
- package/dist/server/services/PluginIpcHost.mjs +2 -0
- package/dist/server/services/PluginRouter.d.mts +2 -0
- package/dist/server/services/PluginRouter.mjs +2 -0
- package/dist/server/services/RouterFileBaseRoutingService.d.mts +2 -0
- package/dist/server/services/RouterFileBaseRoutingService.mjs +2 -0
- package/dist/server/services/RouterRegisterService.d.mts +2 -0
- package/dist/server/services/RouterRegisterService.mjs +2 -0
- package/dist/server/services/RouterResourceConfigService.d.mts +2 -0
- package/dist/server/services/RouterResourceConfigService.mjs +2 -0
- package/dist/server/services/RouterResourceService.d.mts +2 -0
- package/dist/server/services/RouterResourceService.mjs +2 -0
- package/dist/server/services/RouterService.d.mts +2 -0
- package/dist/server/services/RouterService.mjs +1 -0
- package/dist/server/services/SchedulerService.d.mts +2 -0
- package/dist/server/services/SchedulerService.mjs +2 -0
- package/dist/server/services/SeederService.d.mts +2 -0
- package/dist/server/services/SeederService.mjs +2 -0
- package/dist/server/services/ShellService.d.mts +2 -0
- package/dist/server/services/ShellService.mjs +1 -0
- package/dist/server/shell-D3lbVvdM.d.mts +7 -0
- package/dist/server/softDelete-zHpOCvxX.d.mts +28 -0
- package/dist/server/timestamp-OxM0lLhB.d.mts +9 -0
- package/dist/server/tokenRepository-BsrgOgMO.d.mts +7 -0
- package/dist/server/tokenSchema-B_NfLejF.d.mts +17 -0
- package/dist/server/tryCatch-Dz4OvJig.mjs +2 -0
- package/dist/server/update-9SpXDvjp.d.mts +19 -0
- package/dist/server/updateOrCreate-ytNvnRnp.d.mts +16 -0
- package/dist/server/userLoader-C7A1u-FB.d.mts +12 -0
- package/dist/server/userRepository-DgENwIFS.d.mts +7 -0
- package/dist/server/utils/addIdColumn.d.mts +1 -0
- package/dist/server/utils/addIdColumn.mjs +2 -0
- package/dist/server/utils/addSoftDeleteColumn.d.mts +2 -0
- package/dist/server/utils/addSoftDeleteColumn.mjs +2 -0
- package/dist/server/utils/addTimestampColumns.d.mts +2 -0
- package/dist/server/utils/addTimestampColumns.mjs +2 -0
- package/dist/server/utils/basePath.d.mts +2 -0
- package/dist/server/utils/basePath.mjs +2 -0
- package/dist/server/utils/config.d.mts +2 -0
- package/dist/server/utils/config.mjs +2 -0
- package/dist/server/utils/createLoaderFactory.d.mts +2 -0
- package/dist/server/utils/createLoaderFactory.mjs +2 -0
- package/dist/server/utils/cuid.d.mts +2 -0
- package/dist/server/utils/cuid.mjs +2 -0
- package/dist/server/utils/defineHandler.d.mts +2 -0
- package/dist/server/utils/defineHandler.mjs +2 -0
- package/dist/server/utils/defineLoader.d.mts +2 -0
- package/dist/server/utils/defineLoader.mjs +2 -0
- package/dist/server/utils/generateIndexFile.d.mts +2 -0
- package/dist/server/utils/generateIndexFile.mjs +2 -0
- package/dist/server/utils/importAll.d.mts +2 -0
- package/dist/server/utils/importAll.mjs +2 -0
- package/dist/server/utils/importOne.d.mts +2 -0
- package/dist/server/utils/importOne.mjs +2 -0
- package/dist/server/utils/printTable.d.mts +2 -0
- package/dist/server/utils/printTable.mjs +2 -0
- package/dist/server/validator-Bf0nhLLd.mjs +2 -0
- package/dist/shared/ValidatorService-DMd2DBVp.d.mts +103 -0
- package/dist/shared/ValidatorService-TM23rW-H.mjs +2 -0
- package/dist/shared/compose-e5D0sqye.d.mts +44 -0
- package/dist/shared/entities/AclEntity.d.mts +20 -0
- package/dist/shared/entities/AclEntity.mjs +2 -0
- package/dist/shared/entities/CookieMapEntity.d.mts +18 -0
- package/dist/shared/entities/CookieMapEntity.mjs +2 -0
- package/dist/shared/entities/DriveConfigEntity.d.mts +129 -0
- package/dist/shared/entities/DriveConfigEntity.mjs +2 -0
- package/dist/shared/entities/DriveEntryEntity.d.mts +11 -0
- package/dist/shared/entities/DriveEntryEntity.mjs +2 -0
- package/dist/shared/entities/FileEntity.d.mts +33 -0
- package/dist/shared/entities/FileEntity.mjs +2 -0
- package/dist/shared/entities/FileMetaEntity.d.mts +27 -0
- package/dist/shared/entities/FileMetaEntity.mjs +2 -0
- package/dist/shared/entities/FileUploadSessionEntity.d.mts +32 -0
- package/dist/shared/entities/FileUploadSessionEntity.mjs +2 -0
- package/dist/shared/entities/GitBranchEntity.d.mts +11 -0
- package/dist/shared/entities/GitBranchEntity.mjs +2 -0
- package/dist/shared/entities/GitCommitEntity.d.mts +14 -0
- package/dist/shared/entities/GitCommitEntity.mjs +2 -0
- package/dist/shared/entities/HeaderMapEntity.d.mts +18 -0
- package/dist/shared/entities/HeaderMapEntity.mjs +2 -0
- package/dist/shared/entities/LifecycleHook.d.mts +22 -0
- package/dist/shared/entities/LifecycleHook.mjs +2 -0
- package/dist/shared/entities/ModuleEntity.d.mts +28 -0
- package/dist/shared/entities/ModuleEntity.mjs +2 -0
- package/dist/shared/entities/ModuleManifestEntity.d.mts +31 -0
- package/dist/shared/entities/ModuleManifestEntity.mjs +2 -0
- package/dist/shared/entities/PaginationEntity.d.mts +13 -0
- package/dist/shared/entities/PaginationEntity.mjs +2 -0
- package/dist/shared/entities/PermissionEntity.d.mts +23 -0
- package/dist/shared/entities/PermissionEntity.mjs +2 -0
- package/dist/shared/entities/PluginEntity.d.mts +21 -0
- package/dist/shared/entities/PluginEntity.mjs +2 -0
- package/dist/shared/entities/RoleEntity.d.mts +26 -0
- package/dist/shared/entities/RoleEntity.mjs +2 -0
- package/dist/shared/entities/UserEntity.d.mts +34 -0
- package/dist/shared/entities/UserEntity.mjs +2 -0
- package/dist/shared/exceptions/BaseException.d.mts +9 -0
- package/dist/shared/exceptions/BaseException.mjs +2 -0
- package/dist/shared/exceptions/ShellException.d.mts +12 -0
- package/dist/shared/exceptions/ShellException.mjs +2 -0
- package/dist/shared/facades/validator.d.mts +7 -0
- package/dist/shared/facades/validator.mjs +2 -0
- package/dist/shared/index.d.mts +49 -1327
- package/dist/shared/index.mjs +1 -2
- package/dist/shared/mixins/BaseEntityMixin.d.mts +21 -0
- package/dist/shared/mixins/BaseEntityMixin.mjs +2 -0
- package/dist/shared/mixins/HooksMixin.d.mts +31 -0
- package/dist/shared/mixins/HooksMixin.mjs +2 -0
- package/dist/shared/mixins/SoftDeleteMixin.d.mts +11 -0
- package/dist/shared/mixins/SoftDeleteMixin.mjs +2 -0
- package/dist/shared/mixins/TimestampMixin.d.mts +12 -0
- package/dist/shared/mixins/TimestampMixin.mjs +2 -0
- package/dist/shared/schemas/dashboardMetaSchema.d.mts +129 -0
- package/dist/shared/schemas/dashboardMetaSchema.mjs +2 -0
- package/dist/shared/schemas/dashboardSchema.d.mts +128 -0
- package/dist/shared/schemas/dashboardSchema.mjs +2 -0
- package/dist/shared/schemas/permissionAssignmentSchema.d.mts +15 -0
- package/dist/shared/schemas/permissionAssignmentSchema.mjs +2 -0
- package/dist/shared/schemas/permissionSchema.d.mts +18 -0
- package/dist/shared/schemas/permissionSchema.mjs +2 -0
- package/dist/shared/schemas/tokenSchema.d.mts +17 -0
- package/dist/shared/schemas/tokenSchema.mjs +2 -0
- package/dist/shared/schemas/userSchema.d.mts +168 -0
- package/dist/shared/schemas/userSchema.mjs +2 -0
- package/dist/shared/services/ConfigService.d.mts +26 -0
- package/dist/shared/services/ConfigService.mjs +2 -0
- package/dist/shared/services/ContainerService.d.mts +20 -0
- package/dist/shared/services/ContainerService.mjs +2 -0
- package/dist/shared/services/EmmitterService.d.mts +57 -0
- package/dist/shared/services/EmmitterService.mjs +2 -0
- package/dist/shared/services/LifecycleService.d.mts +45 -0
- package/dist/shared/services/LifecycleService.mjs +2 -0
- package/dist/shared/services/LoggerService.d.mts +12 -0
- package/dist/shared/services/LoggerService.mjs +2 -0
- package/dist/shared/services/TranslatorService.d.mts +26 -0
- package/dist/shared/services/TranslatorService.mjs +2 -0
- package/dist/shared/services/UploadService.d.mts +9 -0
- package/dist/shared/services/UploadService.mjs +2 -0
- package/dist/shared/services/ValidatorService.d.mts +2 -0
- package/dist/shared/services/ValidatorService.mjs +1 -0
- package/dist/shared/typing-CBF7x7JF.d.mts +7 -0
- package/dist/shared/utils/compose.d.mts +2 -0
- package/dist/shared/utils/compose.mjs +2 -0
- package/dist/shared/utils/createId.d.mts +5 -0
- package/dist/shared/utils/createId.mjs +2 -0
- package/dist/shared/utils/flatten.d.mts +6 -0
- package/dist/shared/utils/flatten.mjs +2 -0
- package/dist/shared/utils/formatBytes.d.mts +5 -0
- package/dist/shared/utils/formatBytes.mjs +2 -0
- package/dist/shared/utils/index.d.mts +7 -0
- package/dist/shared/utils/index.mjs +1 -0
- package/dist/shared/utils/matchPaths.d.mts +5 -0
- package/dist/shared/utils/matchPaths.mjs +2 -0
- package/dist/shared/utils/parseRouteUrl.d.mts +6 -0
- package/dist/shared/utils/parseRouteUrl.mjs +2 -0
- package/dist/shared/utils/safeJson.d.mts +6 -0
- package/dist/shared/utils/safeJson.mjs +2 -0
- package/dist/shared/utils/tryCatch.d.mts +16 -0
- package/dist/shared/utils/tryCatch.mjs +2 -0
- package/dist/shared/utils/typing.d.mts +2 -0
- package/dist/shared/utils/typing.mjs +1 -0
- package/package.json +14 -16
- package/src/build/createTsdownConfig.ts +22 -0
- package/src/build/createViteConfig.ts +51 -0
- package/src/client/components.ts +1 -0
- package/src/client/composables/useFetchPagination.ts +6 -1
- package/src/client/composables/useForm.ts +1 -1
- package/src/client/composables/useRoute.ts +10 -0
- package/src/client/composables/useRouteQuery.ts +5 -4
- package/src/client/facades/emmitter.ts +1 -1
- package/src/client/index.ts +1 -0
- package/src/client/services/LayoutService.ts +1 -1
- package/src/client/zenith-env.d.ts +2 -1
- package/src/server/__tests__/helpers/createUser.ts +1 -1
- package/src/server/__tests__/setup.ts +1 -1
- package/src/server/commands/pluginBuild.ts +60 -0
- package/src/server/commands/pluginGenerateId.ts +18 -0
- package/src/server/contracts/HttpContextContract.ts +1 -1
- package/src/server/entities/MigrationEntity.ts +1 -1
- package/src/server/entities/PluginEntity.ts +0 -35
- package/src/server/entities/PluginEntryEntity.ts +0 -28
- package/src/server/entities/RoutineEntity.ts +1 -1
- package/src/server/entities/SeederEntity.ts +1 -1
- package/src/server/facades/emmitter.ts +2 -2
- package/src/server/facades/lifecycle.ts +6 -0
- package/src/server/gateways/DriveS3Gateway.ts +102 -32
- package/src/server/gateways/GitGateway.ts +2 -2
- package/src/server/globals.ts +2 -1
- package/src/server/index.ts +3 -2
- package/src/server/loaders/hasManyThroughLoader.ts +15 -6
- package/src/server/loaders/loadMetas.ts +1 -1
- package/src/server/middlewares/AuthMiddleware.ts +4 -3
- package/src/server/repositories/ConfigRepository.ts +1 -1
- package/src/server/repositories/UserRepository.ts +1 -1
- package/src/server/schemas/envSchema.ts +3 -2
- package/src/server/services/CliService.ts +12 -2
- package/src/server/services/CliWrapperService.ts +50 -4
- package/src/server/services/ConfigManagerService.ts +13 -5
- package/src/server/services/EncryptService.ts +1 -1
- package/src/server/services/EnvService.ts +2 -1
- package/src/server/services/ExceptionService.ts +2 -1
- package/src/server/services/HasherService.ts +6 -2
- package/src/server/services/HttpService.ts +24 -12
- package/src/server/services/MigratorService.ts +1 -1
- package/src/server/services/RouterService.ts +1 -1
- package/src/server/services/SchedulerService.ts +5 -2
- package/src/server/services/SeederService.ts +1 -1
- package/src/server/utils/basePath.ts +16 -1
- package/src/server/utils/config.ts +19 -0
- package/src/server/utils/createLoaderFactory.ts +1 -1
- package/src/server/utils/importAll.ts +1 -1
- package/src/server/utils/printTable.ts +7 -1
- package/src/shared/services/ConfigService.ts +5 -2
- package/src/shared/services/EmmitterService.ts +3 -2
- package/src/shared/utils/flatten.ts +1 -1
- package/src/shared/validators/array.ts +13 -0
- package/src/shared/validators/index.ts +1 -0
- package/src/shared/validators/paginationValidator.ts +5 -5
- package/src/shared/validators/urlValidator.ts +1 -1
- package/src/tests/services/HttpTesterService.ts +63 -0
- package/tsdown.config.ts +152 -121
- package/vite/createViteConfig.js +1 -1
- package/bin/zkit.js +0 -26
- package/cli/commands/build.js +0 -55
- package/cli/commands/generateLegacyFolder.js +0 -38
- package/cli/commands/generatePluginId.js +0 -17
- package/cli/config.js +0 -23
- package/cli/utils/createWrapper.js +0 -17
- package/commands/release.js +0 -78
- package/legacy/client/components/Alert.vue +0 -3
- package/legacy/client/components/AlertButton.vue +0 -3
- package/legacy/client/components/Button.vue +0 -3
- package/legacy/client/components/ClientOnly.vue +0 -3
- package/legacy/client/components/ColorPicker.vue +0 -3
- package/legacy/client/components/ColorWheel.vue +0 -3
- package/legacy/client/components/Component.vue +0 -3
- package/legacy/client/components/DataTable.vue +0 -4
- package/legacy/client/components/DataTablePagination.vue +0 -3
- package/legacy/client/components/DatePicker.vue +0 -3
- package/legacy/client/components/DialogForm.vue +0 -4
- package/legacy/client/components/FileUploader.vue +0 -3
- package/legacy/client/components/FormAutoFieldList.vue +0 -5
- package/legacy/client/components/FormAutocomplete.vue +0 -3
- package/legacy/client/components/FormColorPicker.vue +0 -3
- package/legacy/client/components/FormDatePicker.vue +0 -3
- package/legacy/client/components/FormFilePicker.vue +0 -3
- package/legacy/client/components/FormFileUploader.vue +0 -3
- package/legacy/client/components/FormImageUploader.vue +0 -3
- package/legacy/client/components/FormJsonInput.vue +0 -3
- package/legacy/client/components/FormSelect.vue +0 -3
- package/legacy/client/components/FormStringListInput.vue +0 -3
- package/legacy/client/components/FormSwitch.vue +0 -3
- package/legacy/client/components/FormTextField.vue +0 -3
- package/legacy/client/components/FormTextarea.vue +0 -3
- package/legacy/client/components/Icon.vue +0 -3
- package/legacy/client/components/Image.vue +0 -3
- package/legacy/client/components/JsonInput.vue +0 -3
- package/legacy/client/components/Logo.vue +0 -3
- package/legacy/client/components/LogoIcon.vue +0 -3
- package/legacy/client/components/ObjectInspect.vue +0 -3
- package/legacy/client/components/PageCrud.vue +0 -3
- package/legacy/client/components/PageSubtitle.vue +0 -3
- package/legacy/client/components/PageTable.vue +0 -3
- package/legacy/client/components/PageTitle.vue +0 -3
- package/legacy/client/components/Pagination.vue +0 -3
- package/legacy/client/components/Select.vue +0 -3
- package/legacy/client/components/StringListInput.vue +0 -3
- package/legacy/client/components/Switch.vue +0 -3
- package/legacy/client/components/TextField.vue +0 -3
- package/legacy/client/components/Textarea.vue +0 -3
- package/legacy/client/components/UserMenu.vue +0 -3
- package/legacy/client/components/index.ts +0 -349
- package/legacy/client/components/ui/accordion/Accordion.vue +0 -3
- package/legacy/client/components/ui/accordion/AccordionContent.vue +0 -3
- package/legacy/client/components/ui/accordion/AccordionItem.vue +0 -3
- package/legacy/client/components/ui/accordion/AccordionTrigger.vue +0 -3
- package/legacy/client/components/ui/accordion/index.ts +0 -1
- package/legacy/client/components/ui/alert/Alert.vue +0 -3
- package/legacy/client/components/ui/alert/AlertDescription.vue +0 -3
- package/legacy/client/components/ui/alert/AlertTitle.vue +0 -3
- package/legacy/client/components/ui/alert/index.ts +0 -1
- package/legacy/client/components/ui/alert-dialog/AlertDialog.vue +0 -3
- package/legacy/client/components/ui/alert-dialog/AlertDialogAction.vue +0 -3
- package/legacy/client/components/ui/alert-dialog/AlertDialogCancel.vue +0 -3
- package/legacy/client/components/ui/alert-dialog/AlertDialogContent.vue +0 -3
- package/legacy/client/components/ui/alert-dialog/AlertDialogDescription.vue +0 -3
- package/legacy/client/components/ui/alert-dialog/AlertDialogFooter.vue +0 -3
- package/legacy/client/components/ui/alert-dialog/AlertDialogHeader.vue +0 -3
- package/legacy/client/components/ui/alert-dialog/AlertDialogTitle.vue +0 -3
- package/legacy/client/components/ui/alert-dialog/AlertDialogTrigger.vue +0 -3
- package/legacy/client/components/ui/alert-dialog/index.ts +0 -1
- package/legacy/client/components/ui/aspect-ratio/AspectRatio.vue +0 -3
- package/legacy/client/components/ui/aspect-ratio/index.ts +0 -1
- package/legacy/client/components/ui/avatar/Avatar.vue +0 -3
- package/legacy/client/components/ui/avatar/AvatarFallback.vue +0 -3
- package/legacy/client/components/ui/avatar/AvatarImage.vue +0 -3
- package/legacy/client/components/ui/avatar/index.ts +0 -1
- package/legacy/client/components/ui/badge/Badge.vue +0 -3
- package/legacy/client/components/ui/badge/index.ts +0 -1
- package/legacy/client/components/ui/breadcrumb/Breadcrumb.vue +0 -3
- package/legacy/client/components/ui/breadcrumb/BreadcrumbEllipsis.vue +0 -3
- package/legacy/client/components/ui/breadcrumb/BreadcrumbItem.vue +0 -3
- package/legacy/client/components/ui/breadcrumb/BreadcrumbLink.vue +0 -3
- package/legacy/client/components/ui/breadcrumb/BreadcrumbList.vue +0 -3
- package/legacy/client/components/ui/breadcrumb/BreadcrumbPage.vue +0 -3
- package/legacy/client/components/ui/breadcrumb/BreadcrumbSeparator.vue +0 -3
- package/legacy/client/components/ui/breadcrumb/index.ts +0 -1
- package/legacy/client/components/ui/button/Button.vue +0 -3
- package/legacy/client/components/ui/button/index.ts +0 -1
- package/legacy/client/components/ui/calendar/Calendar.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarCell.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarCellTrigger.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarGrid.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarGridBody.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarGridHead.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarGridRow.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarHeadCell.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarHeader.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarHeading.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarNextButton.vue +0 -3
- package/legacy/client/components/ui/calendar/CalendarPrevButton.vue +0 -3
- package/legacy/client/components/ui/calendar/index.ts +0 -1
- package/legacy/client/components/ui/card/Card.vue +0 -3
- package/legacy/client/components/ui/card/CardAction.vue +0 -3
- package/legacy/client/components/ui/card/CardContent.vue +0 -3
- package/legacy/client/components/ui/card/CardDescription.vue +0 -3
- package/legacy/client/components/ui/card/CardFooter.vue +0 -3
- package/legacy/client/components/ui/card/CardHeader.vue +0 -3
- package/legacy/client/components/ui/card/CardTitle.vue +0 -3
- package/legacy/client/components/ui/card/index.ts +0 -1
- package/legacy/client/components/ui/carousel/Carousel.vue +0 -3
- package/legacy/client/components/ui/carousel/CarouselContent.vue +0 -3
- package/legacy/client/components/ui/carousel/CarouselItem.vue +0 -3
- package/legacy/client/components/ui/carousel/CarouselNext.vue +0 -3
- package/legacy/client/components/ui/carousel/CarouselPrevious.vue +0 -3
- package/legacy/client/components/ui/carousel/index.ts +0 -1
- package/legacy/client/components/ui/checkbox/Checkbox.vue +0 -3
- package/legacy/client/components/ui/checkbox/index.ts +0 -1
- package/legacy/client/components/ui/collapsible/Collapsible.vue +0 -3
- package/legacy/client/components/ui/collapsible/CollapsibleContent.vue +0 -3
- package/legacy/client/components/ui/collapsible/CollapsibleTrigger.vue +0 -3
- package/legacy/client/components/ui/collapsible/index.ts +0 -1
- package/legacy/client/components/ui/combobox/Combobox.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxAnchor.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxEmpty.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxGroup.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxInput.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxItem.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxItemIndicator.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxList.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxSeparator.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxTrigger.vue +0 -3
- package/legacy/client/components/ui/combobox/ComboboxViewport.vue +0 -3
- package/legacy/client/components/ui/combobox/index.ts +0 -1
- package/legacy/client/components/ui/command/Command.vue +0 -3
- package/legacy/client/components/ui/command/CommandDialog.vue +0 -3
- package/legacy/client/components/ui/command/CommandEmpty.vue +0 -3
- package/legacy/client/components/ui/command/CommandGroup.vue +0 -3
- package/legacy/client/components/ui/command/CommandInput.vue +0 -3
- package/legacy/client/components/ui/command/CommandItem.vue +0 -3
- package/legacy/client/components/ui/command/CommandList.vue +0 -3
- package/legacy/client/components/ui/command/CommandSeparator.vue +0 -3
- package/legacy/client/components/ui/command/CommandShortcut.vue +0 -3
- package/legacy/client/components/ui/command/index.ts +0 -1
- package/legacy/client/components/ui/context-menu/ContextMenu.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuCheckboxItem.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuContent.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuGroup.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuItem.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuLabel.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuPortal.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuRadioGroup.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuRadioItem.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuSeparator.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuShortcut.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuSub.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuSubContent.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuSubTrigger.vue +0 -3
- package/legacy/client/components/ui/context-menu/ContextMenuTrigger.vue +0 -3
- package/legacy/client/components/ui/context-menu/index.ts +0 -1
- package/legacy/client/components/ui/dialog/Dialog.vue +0 -3
- package/legacy/client/components/ui/dialog/DialogClose.vue +0 -3
- package/legacy/client/components/ui/dialog/DialogContent.vue +0 -3
- package/legacy/client/components/ui/dialog/DialogDescription.vue +0 -3
- package/legacy/client/components/ui/dialog/DialogFooter.vue +0 -3
- package/legacy/client/components/ui/dialog/DialogHeader.vue +0 -3
- package/legacy/client/components/ui/dialog/DialogOverlay.vue +0 -3
- package/legacy/client/components/ui/dialog/DialogScrollContent.vue +0 -3
- package/legacy/client/components/ui/dialog/DialogTitle.vue +0 -3
- package/legacy/client/components/ui/dialog/DialogTrigger.vue +0 -3
- package/legacy/client/components/ui/dialog/index.ts +0 -1
- package/legacy/client/components/ui/drawer/Drawer.vue +0 -3
- package/legacy/client/components/ui/drawer/DrawerClose.vue +0 -3
- package/legacy/client/components/ui/drawer/DrawerContent.vue +0 -3
- package/legacy/client/components/ui/drawer/DrawerDescription.vue +0 -3
- package/legacy/client/components/ui/drawer/DrawerFooter.vue +0 -3
- package/legacy/client/components/ui/drawer/DrawerHeader.vue +0 -3
- package/legacy/client/components/ui/drawer/DrawerOverlay.vue +0 -3
- package/legacy/client/components/ui/drawer/DrawerTitle.vue +0 -3
- package/legacy/client/components/ui/drawer/DrawerTrigger.vue +0 -3
- package/legacy/client/components/ui/drawer/index.ts +0 -1
- package/legacy/client/components/ui/dropdown-menu/DropdownMenu.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuGroup.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuLabel.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuShortcut.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuSub.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuSubContent.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -3
- package/legacy/client/components/ui/dropdown-menu/index.ts +0 -1
- package/legacy/client/components/ui/form/FormControl.vue +0 -3
- package/legacy/client/components/ui/form/FormDescription.vue +0 -3
- package/legacy/client/components/ui/form/FormItem.vue +0 -3
- package/legacy/client/components/ui/form/FormLabel.vue +0 -3
- package/legacy/client/components/ui/form/FormMessage.vue +0 -3
- package/legacy/client/components/ui/form/index.ts +0 -1
- package/legacy/client/components/ui/hover-card/HoverCard.vue +0 -3
- package/legacy/client/components/ui/hover-card/HoverCardContent.vue +0 -3
- package/legacy/client/components/ui/hover-card/HoverCardTrigger.vue +0 -3
- package/legacy/client/components/ui/hover-card/index.ts +0 -1
- package/legacy/client/components/ui/input/Input.vue +0 -3
- package/legacy/client/components/ui/input/index.ts +0 -1
- package/legacy/client/components/ui/label/Label.vue +0 -3
- package/legacy/client/components/ui/label/index.ts +0 -1
- package/legacy/client/components/ui/menubar/Menubar.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarCheckboxItem.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarContent.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarGroup.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarItem.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarLabel.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarMenu.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarRadioGroup.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarRadioItem.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarSeparator.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarShortcut.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarSub.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarSubContent.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarSubTrigger.vue +0 -3
- package/legacy/client/components/ui/menubar/MenubarTrigger.vue +0 -3
- package/legacy/client/components/ui/menubar/index.ts +0 -1
- package/legacy/client/components/ui/navigation-menu/NavigationMenu.vue +0 -3
- package/legacy/client/components/ui/navigation-menu/NavigationMenuContent.vue +0 -3
- package/legacy/client/components/ui/navigation-menu/NavigationMenuIndicator.vue +0 -3
- package/legacy/client/components/ui/navigation-menu/NavigationMenuItem.vue +0 -3
- package/legacy/client/components/ui/navigation-menu/NavigationMenuLink.vue +0 -3
- package/legacy/client/components/ui/navigation-menu/NavigationMenuList.vue +0 -3
- package/legacy/client/components/ui/navigation-menu/NavigationMenuTrigger.vue +0 -3
- package/legacy/client/components/ui/navigation-menu/NavigationMenuViewport.vue +0 -3
- package/legacy/client/components/ui/navigation-menu/index.ts +0 -1
- package/legacy/client/components/ui/number-field/NumberField.vue +0 -3
- package/legacy/client/components/ui/number-field/NumberFieldContent.vue +0 -3
- package/legacy/client/components/ui/number-field/NumberFieldDecrement.vue +0 -3
- package/legacy/client/components/ui/number-field/NumberFieldIncrement.vue +0 -3
- package/legacy/client/components/ui/number-field/NumberFieldInput.vue +0 -3
- package/legacy/client/components/ui/number-field/index.ts +0 -1
- package/legacy/client/components/ui/pagination/Pagination.vue +0 -3
- package/legacy/client/components/ui/pagination/PaginationContent.vue +0 -3
- package/legacy/client/components/ui/pagination/PaginationEllipsis.vue +0 -3
- package/legacy/client/components/ui/pagination/PaginationFirst.vue +0 -3
- package/legacy/client/components/ui/pagination/PaginationItem.vue +0 -3
- package/legacy/client/components/ui/pagination/PaginationLast.vue +0 -3
- package/legacy/client/components/ui/pagination/PaginationNext.vue +0 -3
- package/legacy/client/components/ui/pagination/PaginationPrevious.vue +0 -3
- package/legacy/client/components/ui/pagination/index.ts +0 -1
- package/legacy/client/components/ui/pin-input/PinInput.vue +0 -3
- package/legacy/client/components/ui/pin-input/PinInputGroup.vue +0 -3
- package/legacy/client/components/ui/pin-input/PinInputSeparator.vue +0 -3
- package/legacy/client/components/ui/pin-input/PinInputSlot.vue +0 -3
- package/legacy/client/components/ui/pin-input/index.ts +0 -1
- package/legacy/client/components/ui/popover/Popover.vue +0 -3
- package/legacy/client/components/ui/popover/PopoverAnchor.vue +0 -3
- package/legacy/client/components/ui/popover/PopoverContent.vue +0 -3
- package/legacy/client/components/ui/popover/PopoverTrigger.vue +0 -3
- package/legacy/client/components/ui/popover/index.ts +0 -1
- package/legacy/client/components/ui/progress/Progress.vue +0 -3
- package/legacy/client/components/ui/progress/index.ts +0 -1
- package/legacy/client/components/ui/radio-group/RadioGroup.vue +0 -3
- package/legacy/client/components/ui/radio-group/RadioGroupItem.vue +0 -3
- package/legacy/client/components/ui/radio-group/index.ts +0 -1
- package/legacy/client/components/ui/range-calendar/RangeCalendar.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarCell.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarCellTrigger.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarGrid.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarGridBody.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarGridHead.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarGridRow.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarHeadCell.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarHeader.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarHeading.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarNextButton.vue +0 -3
- package/legacy/client/components/ui/range-calendar/RangeCalendarPrevButton.vue +0 -3
- package/legacy/client/components/ui/range-calendar/index.ts +0 -1
- package/legacy/client/components/ui/resizable/ResizableHandle.vue +0 -3
- package/legacy/client/components/ui/resizable/ResizablePanel.vue +0 -3
- package/legacy/client/components/ui/resizable/ResizablePanelGroup.vue +0 -3
- package/legacy/client/components/ui/resizable/index.ts +0 -1
- package/legacy/client/components/ui/scroll-area/ScrollArea.vue +0 -3
- package/legacy/client/components/ui/scroll-area/ScrollBar.vue +0 -3
- package/legacy/client/components/ui/scroll-area/index.ts +0 -1
- package/legacy/client/components/ui/select/Select.vue +0 -3
- package/legacy/client/components/ui/select/SelectContent.vue +0 -3
- package/legacy/client/components/ui/select/SelectGroup.vue +0 -3
- package/legacy/client/components/ui/select/SelectItem.vue +0 -3
- package/legacy/client/components/ui/select/SelectItemText.vue +0 -3
- package/legacy/client/components/ui/select/SelectLabel.vue +0 -3
- package/legacy/client/components/ui/select/SelectScrollDownButton.vue +0 -3
- package/legacy/client/components/ui/select/SelectScrollUpButton.vue +0 -3
- package/legacy/client/components/ui/select/SelectSeparator.vue +0 -3
- package/legacy/client/components/ui/select/SelectTrigger.vue +0 -3
- package/legacy/client/components/ui/select/SelectValue.vue +0 -3
- package/legacy/client/components/ui/select/index.ts +0 -1
- package/legacy/client/components/ui/separator/Separator.vue +0 -3
- package/legacy/client/components/ui/separator/index.ts +0 -1
- package/legacy/client/components/ui/sheet/Sheet.vue +0 -3
- package/legacy/client/components/ui/sheet/SheetClose.vue +0 -3
- package/legacy/client/components/ui/sheet/SheetContent.vue +0 -3
- package/legacy/client/components/ui/sheet/SheetDescription.vue +0 -3
- package/legacy/client/components/ui/sheet/SheetFooter.vue +0 -3
- package/legacy/client/components/ui/sheet/SheetHeader.vue +0 -3
- package/legacy/client/components/ui/sheet/SheetOverlay.vue +0 -3
- package/legacy/client/components/ui/sheet/SheetTitle.vue +0 -3
- package/legacy/client/components/ui/sheet/SheetTrigger.vue +0 -3
- package/legacy/client/components/ui/sheet/index.ts +0 -1
- package/legacy/client/components/ui/sidebar/Sidebar.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarContent.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarFooter.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarGroup.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarGroupAction.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarGroupContent.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarGroupLabel.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarHeader.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarInput.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarInset.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenu.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenuAction.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenuBadge.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenuButton.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenuButtonChild.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenuItem.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenuSkeleton.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenuSub.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenuSubButton.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarMenuSubItem.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarProvider.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarRail.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarSeparator.vue +0 -3
- package/legacy/client/components/ui/sidebar/SidebarTrigger.vue +0 -3
- package/legacy/client/components/ui/sidebar/index.ts +0 -1
- package/legacy/client/components/ui/skeleton/Skeleton.vue +0 -3
- package/legacy/client/components/ui/skeleton/index.ts +0 -1
- package/legacy/client/components/ui/slider/Slider.vue +0 -3
- package/legacy/client/components/ui/slider/index.ts +0 -1
- package/legacy/client/components/ui/sonner/Sonner.vue +0 -3
- package/legacy/client/components/ui/sonner/index.ts +0 -1
- package/legacy/client/components/ui/stepper/Stepper.vue +0 -3
- package/legacy/client/components/ui/stepper/StepperDescription.vue +0 -3
- package/legacy/client/components/ui/stepper/StepperIndicator.vue +0 -3
- package/legacy/client/components/ui/stepper/StepperItem.vue +0 -3
- package/legacy/client/components/ui/stepper/StepperSeparator.vue +0 -3
- package/legacy/client/components/ui/stepper/StepperTitle.vue +0 -3
- package/legacy/client/components/ui/stepper/StepperTrigger.vue +0 -3
- package/legacy/client/components/ui/stepper/index.ts +0 -1
- package/legacy/client/components/ui/switch/Switch.vue +0 -3
- package/legacy/client/components/ui/switch/index.ts +0 -1
- package/legacy/client/components/ui/table/Table.vue +0 -3
- package/legacy/client/components/ui/table/TableBody.vue +0 -3
- package/legacy/client/components/ui/table/TableCaption.vue +0 -3
- package/legacy/client/components/ui/table/TableCell.vue +0 -3
- package/legacy/client/components/ui/table/TableEmpty.vue +0 -3
- package/legacy/client/components/ui/table/TableFooter.vue +0 -3
- package/legacy/client/components/ui/table/TableHead.vue +0 -3
- package/legacy/client/components/ui/table/TableHeader.vue +0 -3
- package/legacy/client/components/ui/table/TableRow.vue +0 -3
- package/legacy/client/components/ui/table/index.ts +0 -1
- package/legacy/client/components/ui/tabs/Tabs.vue +0 -3
- package/legacy/client/components/ui/tabs/TabsContent.vue +0 -3
- package/legacy/client/components/ui/tabs/TabsList.vue +0 -3
- package/legacy/client/components/ui/tabs/TabsTrigger.vue +0 -3
- package/legacy/client/components/ui/tabs/index.ts +0 -1
- package/legacy/client/components/ui/tags-input/TagsInput.vue +0 -3
- package/legacy/client/components/ui/tags-input/TagsInputInput.vue +0 -3
- package/legacy/client/components/ui/tags-input/TagsInputItem.vue +0 -3
- package/legacy/client/components/ui/tags-input/TagsInputItemDelete.vue +0 -3
- package/legacy/client/components/ui/tags-input/TagsInputItemText.vue +0 -3
- package/legacy/client/components/ui/tags-input/index.ts +0 -1
- package/legacy/client/components/ui/textarea/Textarea.vue +0 -3
- package/legacy/client/components/ui/textarea/index.ts +0 -1
- package/legacy/client/components/ui/toggle/Toggle.vue +0 -3
- package/legacy/client/components/ui/toggle/index.ts +0 -1
- package/legacy/client/components/ui/toggle-group/ToggleGroup.vue +0 -3
- package/legacy/client/components/ui/toggle-group/ToggleGroupItem.vue +0 -3
- package/legacy/client/components/ui/toggle-group/index.ts +0 -1
- package/legacy/client/components/ui/tooltip/Tooltip.vue +0 -3
- package/legacy/client/components/ui/tooltip/TooltipContent.vue +0 -3
- package/legacy/client/components/ui/tooltip/TooltipProvider.vue +0 -3
- package/legacy/client/components/ui/tooltip/TooltipTrigger.vue +0 -3
- package/legacy/client/components/ui/tooltip/index.ts +0 -1
- package/legacy/client/facades/acl.facade.ts +0 -1
- package/legacy/client/facades/app.facade.ts +0 -6
- package/legacy/client/facades/auth.facade.ts +0 -1
- package/legacy/client/facades/config.facade.ts +0 -1
- package/legacy/client/facades/fetch.facade.ts +0 -1
- package/legacy/client/facades/logger.facade.ts +0 -1
- package/legacy/client/facades/menu.facade.ts +0 -1
- package/legacy/client/facades/router.facade.ts +0 -1
- package/legacy/client/facades/translator.facade.ts +0 -10
- package/legacy/client/layouts/AdminLayout.vue +0 -3
- package/legacy/client/utils/autoPages.ts +0 -1
- package/legacy/client/utils/createId.ts +0 -1
- package/legacy/client/utils/di.ts +0 -1
- package/legacy/client/utils/fetcher.ts +0 -1
- package/legacy/client/utils/file.ts +0 -1
- package/legacy/client/utils/index.ts +0 -7
- package/legacy/client/utils/logger.ts +0 -1
- package/legacy/client/utils/toast.ts +0 -1
- package/legacy/server/entities/file.entity.ts +0 -4
- package/legacy/server/exceptions/base.ts +0 -4
- package/legacy/server/facades/arte.facade.ts +0 -6
- package/legacy/server/facades/config.facade.ts +0 -4
- package/legacy/server/facades/db.facade.ts +0 -4
- package/legacy/server/facades/download.facade.ts +0 -4
- package/legacy/server/facades/drive.facade.ts +0 -4
- package/legacy/server/facades/emmitter.facade.ts +0 -4
- package/legacy/server/facades/logger.facade.ts +0 -4
- package/legacy/server/facades/router.facade.ts +0 -4
- package/legacy/server/facades/scheduler.facade.ts +0 -4
- package/legacy/server/middlewares/auth.middleware.ts +0 -6
- package/legacy/server/middlewares/authorization.middleware.ts +0 -8
- package/legacy/server/mixins/hooks.mixin.ts +0 -6
- package/legacy/server/mixins/model.mixin.ts +0 -6
- package/legacy/server/mixins/modelConfig.mixin.ts +0 -4
- package/legacy/server/queries/index.ts +0 -6
- package/legacy/server/services/metadataQuery.service.ts +0 -6
- package/legacy/server/services/routerResourceConfig.service.ts +0 -5
- package/legacy/shared/services/validator.service.ts +0 -4
- package/legacy/shared/utils/compose.ts +0 -8
- package/legacy/shared/utils/tryCatch.ts +0 -7
- package/src/server/services/HttpTesterService.ts +0 -62
package/dist/server/index.d.mts
CHANGED
|
@@ -1,2890 +1,127 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import
|
|
13
|
-
import {
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import {
|
|
19
|
-
import
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
onDebounce<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnDebounceOptions): EmmitterHandler;
|
|
129
|
-
onDebounce(event: string, listener: (args: any) => void, options?: OnDebounceOptions): EmmitterHandler;
|
|
130
|
-
onAnyOf<K extends keyof Events>(events: K[], listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler[];
|
|
131
|
-
onAnyOf(events: string[], listener: (args: any) => void, options?: OnOptions): EmmitterHandler[];
|
|
132
|
-
off(event: string, listener: EmmitterHandler['listener']): void;
|
|
133
|
-
emit<K extends keyof Events>(event: K, args: Events[K]): void;
|
|
134
|
-
emit(event: string, args?: any): void;
|
|
135
|
-
emitAndWait<K extends keyof Events>(event: K, args: Events[K]): Promise<void>;
|
|
136
|
-
emitAndWait(event: string, args?: any): Promise<void>;
|
|
137
|
-
list(): EmmitterHandler[];
|
|
138
|
-
listByEvent(event: string): EmmitterHandler[];
|
|
139
|
-
remove(payload: string | string[]): void;
|
|
140
|
-
clear(): void;
|
|
141
|
-
hasHandlers(): boolean;
|
|
142
|
-
}
|
|
143
|
-
//#endregion
|
|
144
|
-
//#region src/shared/entities/LifecycleHook.d.ts
|
|
145
|
-
declare class LifecycleHook {
|
|
146
|
-
hook_id: string;
|
|
147
|
-
hook_aliases?: string[];
|
|
148
|
-
order?: number;
|
|
149
|
-
subhooks?: LifecycleHook[];
|
|
150
|
-
register(): Promise<void>;
|
|
151
|
-
load(): Promise<void>;
|
|
152
|
-
boot(): Promise<void>;
|
|
153
|
-
shutdown(): Promise<void>;
|
|
154
|
-
/** @deprecated Use register */
|
|
155
|
-
onRegister(): Promise<void>;
|
|
156
|
-
/** @deprecated Use load */
|
|
157
|
-
onLoad(): Promise<void>;
|
|
158
|
-
/** @deprecated Use boot */
|
|
159
|
-
onBoot(): Promise<void>;
|
|
160
|
-
/** @deprecated Use shutdown */
|
|
161
|
-
onShutdown(): Promise<void>;
|
|
162
|
-
}
|
|
163
|
-
//#endregion
|
|
164
|
-
//#region src/shared/utils/compose.d.ts
|
|
165
|
-
type Constructor<T = {}> = new (...args: any[]) => T;
|
|
166
|
-
//#endregion
|
|
167
|
-
//#region src/shared/services/LifecycleService.d.ts
|
|
168
|
-
type LifecycleMethod = 'register' | 'load' | 'boot' | 'shutdown';
|
|
169
|
-
interface ListOptions$1 {
|
|
170
|
-
include?: string | string[];
|
|
171
|
-
exclude?: string | string[];
|
|
172
|
-
}
|
|
173
|
-
interface LifecycleServiceOptions {
|
|
174
|
-
debug?: boolean;
|
|
175
|
-
hooks?: Map<string, LifecycleHook>;
|
|
176
|
-
logger?: LoggerService;
|
|
177
|
-
onError?: (error: Error, context: {
|
|
178
|
-
hookId: string;
|
|
179
|
-
method: LifecycleMethod;
|
|
180
|
-
}) => void;
|
|
181
|
-
}
|
|
182
|
-
declare class LifecycleService$1 {
|
|
183
|
-
static __container_entry_key: string;
|
|
184
|
-
hooks: Map<string, LifecycleHook>;
|
|
185
|
-
logger: LoggerService;
|
|
186
|
-
debug: boolean;
|
|
187
|
-
constructor(data?: LifecycleServiceOptions);
|
|
188
|
-
setOnError(handler: Required<LifecycleServiceOptions>['onError']): void;
|
|
189
|
-
onError(error: Error, context: {
|
|
190
|
-
hookId: string;
|
|
191
|
-
method: LifecycleMethod;
|
|
192
|
-
}): void;
|
|
193
|
-
mapAliases(args: string[]): string[];
|
|
194
|
-
list(options?: ListOptions$1): LifecycleHook[];
|
|
195
|
-
add(...payload: (LifecycleHook | Constructor<LifecycleHook>)[]): void;
|
|
196
|
-
emitMethod(method: LifecycleMethod, options?: ListOptions$1): Promise<void>;
|
|
197
|
-
emit(payload: LifecycleMethod | LifecycleMethod[], options?: ListOptions$1): Promise<void>;
|
|
198
|
-
on(method: LifecycleMethod, handler: () => Promise<void>): void;
|
|
199
|
-
register(options?: ListOptions$1): Promise<void>;
|
|
200
|
-
load(options?: ListOptions$1): Promise<void>;
|
|
201
|
-
boot(options?: ListOptions$1): Promise<void>;
|
|
202
|
-
shutdown(options?: ListOptions$1): Promise<void>;
|
|
203
|
-
clear(): void;
|
|
204
|
-
}
|
|
205
|
-
//#endregion
|
|
206
|
-
//#region src/shared/schemas/permissionAssignmentSchema.d.ts
|
|
207
|
-
type PermissionAssignment = v.InferOutput<typeof permissionAssignmentSchema>;
|
|
208
|
-
declare const permissionAssignmentSchema: v.ObjectSchema<{
|
|
209
|
-
readonly id: v.NumberSchema<undefined>;
|
|
210
|
-
readonly permission_id: v.NumberSchema<undefined>;
|
|
211
|
-
readonly assignable_type: v.StringSchema<undefined>;
|
|
212
|
-
readonly assignable_id: v.StringSchema<undefined>;
|
|
213
|
-
readonly created_at: v.StringSchema<undefined>;
|
|
214
|
-
readonly updated_at: v.StringSchema<undefined>;
|
|
215
|
-
}, undefined>;
|
|
216
|
-
//#endregion
|
|
217
|
-
//#region src/shared/schemas/permissionSchema.d.ts
|
|
218
|
-
type Permission = v.InferOutput<typeof permissionSchema>;
|
|
219
|
-
declare const permissionSchema: v.ObjectSchema<{
|
|
220
|
-
readonly id: v.NumberSchema<undefined>;
|
|
221
|
-
readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
222
|
-
readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
223
|
-
readonly action: v.StringSchema<undefined>;
|
|
224
|
-
readonly subject: v.StringSchema<undefined>;
|
|
225
|
-
readonly conditions: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
226
|
-
readonly created_at: v.StringSchema<undefined>;
|
|
227
|
-
readonly updated_at: v.StringSchema<undefined>;
|
|
228
|
-
readonly expires_at: v.StringSchema<undefined>;
|
|
229
|
-
}, undefined>;
|
|
230
|
-
//#endregion
|
|
231
|
-
//#region src/shared/schemas/tokenSchema.d.ts
|
|
232
|
-
type Token$1 = v.InferOutput<typeof tokenSchema>;
|
|
233
|
-
declare const tokenSchema: v.ObjectSchema<{
|
|
234
|
-
readonly id: v.NumberSchema<undefined>;
|
|
235
|
-
readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
|
|
236
|
-
readonly type: v.StringSchema<undefined>;
|
|
237
|
-
readonly user_id: v.NumberSchema<undefined>;
|
|
238
|
-
readonly token: v.StringSchema<undefined>;
|
|
239
|
-
readonly created_at: v.StringSchema<undefined>;
|
|
240
|
-
readonly updated_at: v.StringSchema<undefined>;
|
|
241
|
-
readonly expires_at: v.StringSchema<undefined>;
|
|
242
|
-
}, undefined>;
|
|
243
|
-
//#endregion
|
|
244
|
-
//#region src/shared/mixins/HooksMixin.d.ts
|
|
245
|
-
interface Listener {
|
|
246
|
-
event: string;
|
|
247
|
-
listener: (...args: any[]) => void;
|
|
248
|
-
}
|
|
249
|
-
//#endregion
|
|
250
|
-
//#region src/shared/entities/PermissionEntity.d.ts
|
|
251
|
-
declare const PermissionEntity_base: {
|
|
252
|
-
new (...args: any[]): {
|
|
253
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
254
|
-
};
|
|
255
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
256
|
-
} & Constructor;
|
|
257
|
-
declare class PermissionEntity extends PermissionEntity_base {
|
|
258
|
-
id: number;
|
|
259
|
-
name: string;
|
|
260
|
-
description: string | null;
|
|
261
|
-
origin: string;
|
|
262
|
-
subject: string;
|
|
263
|
-
action: string;
|
|
264
|
-
conditions: string | null | Record<string, any>;
|
|
265
|
-
get editable(): boolean;
|
|
266
|
-
get parsedConditions(): any;
|
|
267
|
-
}
|
|
268
|
-
//#endregion
|
|
269
|
-
//#region src/shared/entities/AclEntity.d.ts
|
|
270
|
-
declare class AclEntity {
|
|
271
|
-
static __container_entry_key: string;
|
|
272
|
-
ability: ReturnType<typeof defineAbility>;
|
|
273
|
-
permissions: PermissionEntity[];
|
|
274
|
-
debug: boolean;
|
|
275
|
-
logger: LoggerService;
|
|
276
|
-
constructor(data?: Partial<AclEntity>);
|
|
277
|
-
can(action: string, subject: any, object?: Record<string, any>): boolean;
|
|
278
|
-
cannot(action: string, subject: any, object?: Record<string, any>): boolean;
|
|
279
|
-
subject(subject: string, object: Record<string, any>): Record<string, any> & _$_casl_ability0.ForcedSubject<string>;
|
|
280
|
-
}
|
|
281
|
-
//#endregion
|
|
282
|
-
//#region src/shared/entities/CookieMapEntity.d.ts
|
|
283
|
-
interface CookieMapEntityOptions {
|
|
284
|
-
cookies?: Map<string, string>;
|
|
285
|
-
prefix?: string;
|
|
286
|
-
}
|
|
287
|
-
declare class CookieMapEntity$1 {
|
|
288
|
-
static __container_entry_key: string;
|
|
289
|
-
cookies: Map<string, string>;
|
|
290
|
-
prefix: string;
|
|
291
|
-
constructor(data?: CookieMapEntityOptions);
|
|
292
|
-
load(cookies: Record<string, string> | Map<string, string>): void;
|
|
293
|
-
get(name: string, defaultValue?: string | null): string | null;
|
|
294
|
-
set(name: string, value: string, options?: any): void;
|
|
295
|
-
toRecord(): Record<string, string>;
|
|
296
|
-
}
|
|
297
|
-
//#endregion
|
|
298
|
-
//#region src/shared/entities/DriveConfigEntity.d.ts
|
|
299
|
-
declare class DriveConfig$1 {
|
|
300
|
-
static get TYPES(): ({
|
|
301
|
-
id: string;
|
|
302
|
-
label: any;
|
|
303
|
-
description: any;
|
|
304
|
-
config_fields: {
|
|
305
|
-
directory: {
|
|
306
|
-
component: string;
|
|
307
|
-
label: any;
|
|
308
|
-
description: any;
|
|
309
|
-
hint: any;
|
|
310
|
-
};
|
|
311
|
-
accessKeyId?: undefined;
|
|
312
|
-
secretAccessKey?: undefined;
|
|
313
|
-
bucket?: undefined;
|
|
314
|
-
region?: undefined;
|
|
315
|
-
prefix?: undefined;
|
|
316
|
-
endpoint?: undefined;
|
|
317
|
-
};
|
|
318
|
-
} | {
|
|
319
|
-
id: string;
|
|
320
|
-
label: string;
|
|
321
|
-
description: any;
|
|
322
|
-
config_fields: {
|
|
323
|
-
accessKeyId: {
|
|
324
|
-
component: string;
|
|
325
|
-
label: any;
|
|
326
|
-
hint: any;
|
|
327
|
-
type: string;
|
|
328
|
-
};
|
|
329
|
-
secretAccessKey: {
|
|
330
|
-
component: string;
|
|
331
|
-
label: any;
|
|
332
|
-
hint: any;
|
|
333
|
-
type: string;
|
|
334
|
-
};
|
|
335
|
-
bucket: {
|
|
336
|
-
component: string;
|
|
337
|
-
label: any;
|
|
338
|
-
hint: any;
|
|
339
|
-
};
|
|
340
|
-
region: {
|
|
341
|
-
component: string;
|
|
342
|
-
label: any;
|
|
343
|
-
hint: any;
|
|
344
|
-
};
|
|
345
|
-
prefix: {
|
|
346
|
-
component: string;
|
|
347
|
-
label: any;
|
|
348
|
-
hint: any;
|
|
349
|
-
};
|
|
350
|
-
endpoint: {
|
|
351
|
-
component: string;
|
|
352
|
-
label: any;
|
|
353
|
-
hint: any;
|
|
354
|
-
};
|
|
355
|
-
directory?: undefined;
|
|
356
|
-
};
|
|
357
|
-
})[];
|
|
358
|
-
id: string;
|
|
359
|
-
name: string;
|
|
360
|
-
type: string;
|
|
361
|
-
is_default: boolean;
|
|
362
|
-
config: Record<string, any>;
|
|
363
|
-
constructor(data: DriveConfig$1);
|
|
364
|
-
get config_fields(): {};
|
|
365
|
-
}
|
|
366
|
-
//#endregion
|
|
367
|
-
//#region src/shared/entities/DriveEntryEntity.d.ts
|
|
368
|
-
declare class DriveEntry {
|
|
369
|
-
name: string;
|
|
370
|
-
path: string;
|
|
371
|
-
type: 'file' | 'directory';
|
|
372
|
-
metas: Record<string, any>;
|
|
373
|
-
constructor(data: DriveEntry);
|
|
374
|
-
}
|
|
375
|
-
//#endregion
|
|
376
|
-
//#region src/shared/entities/FileEntity.d.ts
|
|
377
|
-
declare const FileEntity_base: {
|
|
378
|
-
new (...args: any[]): {
|
|
379
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
380
|
-
};
|
|
381
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
382
|
-
} & Constructor & {
|
|
383
|
-
new (...args: any[]): {
|
|
384
|
-
created_at: Date | string;
|
|
385
|
-
updated_at: Date | string;
|
|
386
|
-
};
|
|
387
|
-
} & {
|
|
388
|
-
new (...args: any[]): {
|
|
389
|
-
deleted_at: Date | string | null;
|
|
390
|
-
};
|
|
391
|
-
};
|
|
392
|
-
declare class FileEntity extends FileEntity_base {
|
|
393
|
-
id: number;
|
|
394
|
-
drive: string;
|
|
395
|
-
mimetype: string;
|
|
396
|
-
purpose: string;
|
|
397
|
-
client_name: string;
|
|
398
|
-
filename: string;
|
|
399
|
-
public: boolean;
|
|
400
|
-
url?: string;
|
|
401
|
-
metas?: Record<string, any>;
|
|
402
|
-
isImage(): boolean;
|
|
403
|
-
}
|
|
404
|
-
//#endregion
|
|
405
|
-
//#region src/shared/entities/FileMetaEntity.d.ts
|
|
406
|
-
declare const FileMeta_base$1: {
|
|
407
|
-
new (...args: any[]): {
|
|
408
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
409
|
-
};
|
|
410
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
411
|
-
} & Constructor & {
|
|
412
|
-
new (...args: any[]): {
|
|
413
|
-
created_at: Date | string;
|
|
414
|
-
updated_at: Date | string;
|
|
415
|
-
};
|
|
416
|
-
} & {
|
|
417
|
-
new (...args: any[]): {
|
|
418
|
-
deleted_at: Date | string | null;
|
|
419
|
-
};
|
|
420
|
-
};
|
|
421
|
-
declare class FileMeta$1 extends FileMeta_base$1 {
|
|
422
|
-
id: number;
|
|
423
|
-
file_id: number;
|
|
424
|
-
name: string;
|
|
425
|
-
value: string | null;
|
|
426
|
-
}
|
|
427
|
-
//#endregion
|
|
428
|
-
//#region src/shared/entities/GitBranchEntity.d.ts
|
|
429
|
-
declare class GitBranchEntity {
|
|
430
|
-
name: string;
|
|
431
|
-
remote: string | null;
|
|
432
|
-
is_current: boolean;
|
|
433
|
-
is_remote: boolean;
|
|
434
|
-
constructor(data: GitBranchEntity);
|
|
435
|
-
}
|
|
436
|
-
//#endregion
|
|
437
|
-
//#region src/shared/entities/GitCommitEntity.d.ts
|
|
438
|
-
declare class GitCommitEntity {
|
|
439
|
-
hash: string;
|
|
440
|
-
short_hash: string;
|
|
441
|
-
message: string;
|
|
442
|
-
body: string;
|
|
443
|
-
author_name: string;
|
|
444
|
-
author_email: string;
|
|
445
|
-
date: string;
|
|
446
|
-
constructor(data: GitCommitEntity);
|
|
447
|
-
}
|
|
448
|
-
//#endregion
|
|
449
|
-
//#region src/shared/entities/ModuleManifestEntity.d.ts
|
|
450
|
-
interface ModuleManifestBuildImport {
|
|
451
|
-
from: string;
|
|
452
|
-
to?: string;
|
|
453
|
-
type: 'global_import';
|
|
454
|
-
}
|
|
455
|
-
interface ModuleManifestBuild {
|
|
456
|
-
imports?: ModuleManifestBuildImport[];
|
|
457
|
-
}
|
|
458
|
-
declare const ModuleManifest_base: {
|
|
459
|
-
new (...args: any[]): {
|
|
460
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
461
|
-
};
|
|
462
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
463
|
-
} & Constructor;
|
|
464
|
-
declare class ModuleManifest extends ModuleManifest_base {
|
|
465
|
-
id: string;
|
|
466
|
-
name: string;
|
|
467
|
-
version: string;
|
|
468
|
-
description?: string;
|
|
469
|
-
enabled: boolean;
|
|
470
|
-
author?: string;
|
|
471
|
-
dependencies?: Record<string, string>;
|
|
472
|
-
build?: ModuleManifestBuild;
|
|
473
|
-
[key: string]: any;
|
|
474
|
-
}
|
|
475
|
-
//#endregion
|
|
476
|
-
//#region src/shared/entities/ModuleEntity.d.ts
|
|
477
|
-
interface ModuleUpgradeInfo {
|
|
478
|
-
source: 'git' | 'zip';
|
|
479
|
-
[key: string]: any;
|
|
480
|
-
}
|
|
481
|
-
declare const Module_base$1: {
|
|
482
|
-
new (...args: any[]): {
|
|
483
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
484
|
-
};
|
|
485
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
486
|
-
} & Constructor & Constructor<{}> & typeof LifecycleHook;
|
|
487
|
-
declare class Module$1 extends Module_base$1 {
|
|
488
|
-
id: string;
|
|
489
|
-
name: string;
|
|
490
|
-
enabled: boolean;
|
|
491
|
-
dependencies: Record<string, any>;
|
|
492
|
-
build: ModuleManifest['build'];
|
|
493
|
-
directory: string;
|
|
494
|
-
upgrade_info?: ModuleUpgradeInfo;
|
|
495
|
-
setData(data: Partial<Module$1 | ModuleManifest>): void;
|
|
496
|
-
}
|
|
497
|
-
//#endregion
|
|
498
|
-
//#region src/shared/entities/PaginationEntity.d.ts
|
|
499
|
-
declare class PaginationEntity<T = Record<string, any>> {
|
|
500
|
-
items: T[];
|
|
501
|
-
total: number;
|
|
502
|
-
page: number;
|
|
503
|
-
per_page: number;
|
|
504
|
-
total_pages: number;
|
|
505
|
-
constructor(data: Partial<PaginationEntity>);
|
|
506
|
-
static from<T = Record<string, string>>(payload: Partial<PaginationEntity<T>>): PaginationEntity<T>;
|
|
507
|
-
}
|
|
508
|
-
//#endregion
|
|
509
|
-
//#region src/shared/entities/PluginEntity.d.ts
|
|
510
|
-
declare const PluginEntity_base: {
|
|
511
|
-
new (...args: any[]): {
|
|
512
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
513
|
-
};
|
|
514
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
515
|
-
} & Constructor;
|
|
516
|
-
declare class PluginEntity$1 extends PluginEntity_base {
|
|
517
|
-
id: string;
|
|
518
|
-
name: string;
|
|
519
|
-
version: string;
|
|
520
|
-
enabled: boolean;
|
|
521
|
-
aliases: string[];
|
|
522
|
-
version_channel: string;
|
|
523
|
-
version_available_channels: string[];
|
|
524
|
-
}
|
|
525
|
-
//#endregion
|
|
526
|
-
//#region src/shared/entities/RoleEntity.d.ts
|
|
527
|
-
declare const Role_base: {
|
|
528
|
-
new (...args: any[]): {
|
|
529
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
530
|
-
};
|
|
531
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
532
|
-
} & Constructor & {
|
|
533
|
-
new (...args: any[]): {
|
|
534
|
-
created_at: Date | string;
|
|
535
|
-
updated_at: Date | string;
|
|
536
|
-
};
|
|
537
|
-
} & {
|
|
538
|
-
new (...args: any[]): {
|
|
539
|
-
deleted_at: Date | string | null;
|
|
540
|
-
};
|
|
541
|
-
};
|
|
542
|
-
declare class Role extends Role_base {
|
|
543
|
-
id: number;
|
|
544
|
-
name: string;
|
|
545
|
-
description?: string;
|
|
546
|
-
}
|
|
547
|
-
//#endregion
|
|
548
|
-
//#region src/shared/entities/UserEntity.d.ts
|
|
549
|
-
declare const UserEntity_base: {
|
|
550
|
-
new (...args: any[]): {
|
|
551
|
-
merge(data: Partial< /*elided*/any>): /*elided*/any;
|
|
552
|
-
};
|
|
553
|
-
from<T>(this: new () => T, data: Partial<T>): T;
|
|
554
|
-
} & Constructor & {
|
|
555
|
-
new (...args: any[]): {
|
|
556
|
-
created_at: Date | string;
|
|
557
|
-
updated_at: Date | string;
|
|
558
|
-
};
|
|
559
|
-
} & {
|
|
560
|
-
new (...args: any[]): {
|
|
561
|
-
deleted_at: Date | string | null;
|
|
562
|
-
};
|
|
563
|
-
};
|
|
564
|
-
declare class UserEntity$1 extends UserEntity_base {
|
|
565
|
-
id: number;
|
|
566
|
-
email: string;
|
|
567
|
-
name: string;
|
|
568
|
-
username: string;
|
|
569
|
-
password?: string;
|
|
570
|
-
verified_at?: Date | string | null;
|
|
571
|
-
permissions?: PermissionEntity[];
|
|
572
|
-
roles?: Role[];
|
|
573
|
-
get initials(): string;
|
|
574
|
-
}
|
|
575
|
-
//#endregion
|
|
576
|
-
//#region src/server/services/CliService.d.ts
|
|
577
|
-
interface CliEvents {
|
|
578
|
-
'cli:registered': {
|
|
579
|
-
cli: CliService;
|
|
580
|
-
};
|
|
581
|
-
}
|
|
582
|
-
declare class CliCommand extends Command {
|
|
583
|
-
__is_cli_command: boolean;
|
|
584
|
-
table: typeof printTable;
|
|
585
|
-
object: typeof printObject;
|
|
586
|
-
colors: chalk.Chalk & chalk.ChalkFunction & {
|
|
587
|
-
supportsColor: chalk.ColorSupport | false;
|
|
588
|
-
Level: chalk.Level;
|
|
589
|
-
Color: ("black" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray" | "grey" | "blackBright" | "redBright" | "greenBright" | "yellowBright" | "blueBright" | "magentaBright" | "cyanBright" | "whiteBright") | ("bgBlack" | "bgRed" | "bgGreen" | "bgYellow" | "bgBlue" | "bgMagenta" | "bgCyan" | "bgWhite" | "bgGray" | "bgGrey" | "bgBlackBright" | "bgRedBright" | "bgGreenBright" | "bgYellowBright" | "bgBlueBright" | "bgMagentaBright" | "bgCyanBright" | "bgWhiteBright");
|
|
590
|
-
ForegroundColor: "black" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray" | "grey" | "blackBright" | "redBright" | "greenBright" | "yellowBright" | "blueBright" | "magentaBright" | "cyanBright" | "whiteBright";
|
|
591
|
-
BackgroundColor: "bgBlack" | "bgRed" | "bgGreen" | "bgYellow" | "bgBlue" | "bgMagenta" | "bgCyan" | "bgWhite" | "bgGray" | "bgGrey" | "bgBlackBright" | "bgRedBright" | "bgGreenBright" | "bgYellowBright" | "bgBlueBright" | "bgMagentaBright" | "bgCyanBright" | "bgWhiteBright";
|
|
592
|
-
Modifiers: "reset" | "bold" | "dim" | "italic" | "underline" | "inverse" | "hidden" | "strikethrough" | "visible";
|
|
593
|
-
stderr: chalk.Chalk & {
|
|
594
|
-
supportsColor: chalk.ColorSupport | false;
|
|
595
|
-
};
|
|
596
|
-
};
|
|
597
|
-
inquirer: typeof inquirer;
|
|
598
|
-
needs: Set<string>;
|
|
599
|
-
need(...args: string[]): this;
|
|
600
|
-
createCommand(name?: string): CliCommand;
|
|
601
|
-
}
|
|
602
|
-
declare class CliService extends CliCommand {
|
|
603
|
-
static __container_entry_key: string;
|
|
604
|
-
dirs: Set<string>;
|
|
605
|
-
logger: LoggerService;
|
|
606
|
-
emmitter: EmmitterService$1<Record<string, any>>;
|
|
607
|
-
debug: boolean;
|
|
608
|
-
static create(name?: string): CliService;
|
|
609
|
-
setLogger(logger: LoggerService): this;
|
|
610
|
-
setDebug(debug: boolean): this;
|
|
611
|
-
setEmmitter(emmitter: EmmitterService$1): this;
|
|
612
|
-
createCommand(name?: string): CliService;
|
|
613
|
-
addDir(dir: string): this;
|
|
614
|
-
loadDir(dir: string): Promise<void>;
|
|
615
|
-
load(): Promise<this>;
|
|
616
|
-
}
|
|
617
|
-
//#endregion
|
|
618
|
-
//#region src/server/services/CliTesterService.d.ts
|
|
619
|
-
declare class ArteTesterService extends CliService {
|
|
620
|
-
constructor();
|
|
621
|
-
add(path: string): Promise<void>;
|
|
622
|
-
execute(args: string[]): Promise<void>;
|
|
623
|
-
}
|
|
624
|
-
//#endregion
|
|
625
|
-
//#region src/server/services/CliWrapperService.d.ts
|
|
626
|
-
declare class CliWrapperService {
|
|
627
|
-
process: cp.ChildProcess | null;
|
|
628
|
-
appBasePath: string;
|
|
629
|
-
env: Map<string, any>;
|
|
630
|
-
args: string[];
|
|
631
|
-
configArguments: Map<string, string>;
|
|
632
|
-
configFiles: string[];
|
|
633
|
-
debug: boolean;
|
|
634
|
-
logger: LoggerService;
|
|
635
|
-
static create(): CliWrapperService;
|
|
636
|
-
setBasePath(path: string): this;
|
|
637
|
-
setDebug(debug: boolean): this;
|
|
638
|
-
setLogger(logger: LoggerService): this;
|
|
639
|
-
addConfigArgument(key: string, value: string): this;
|
|
640
|
-
addConfigFile(...filePaths: string[]): this;
|
|
641
|
-
addEnv(key: string, value: any): this;
|
|
642
|
-
loadConfigArguments(): void;
|
|
643
|
-
loadConfigFiles(): void;
|
|
644
|
-
loadEnvironment(): void;
|
|
645
|
-
loadArguments(args?: string[]): void;
|
|
646
|
-
kill(code?: number): void;
|
|
647
|
-
run(args?: string[]): Promise<void>;
|
|
648
|
-
}
|
|
649
|
-
//#endregion
|
|
650
|
-
//#region src/server/services/ConfigFSService.d.ts
|
|
651
|
-
interface ConfigFSServiceOptions {
|
|
652
|
-
directory?: string;
|
|
653
|
-
format?: 'json' | 'yml';
|
|
654
|
-
formatOptions?: Record<string, any>;
|
|
655
|
-
debug?: boolean;
|
|
656
|
-
logger?: LoggerService;
|
|
657
|
-
}
|
|
658
|
-
declare class ConfigFSService extends ConfigService {
|
|
659
|
-
logger: LoggerService;
|
|
660
|
-
debug: boolean;
|
|
661
|
-
format: 'json' | 'yml';
|
|
662
|
-
formatOptions: Record<string, any>;
|
|
663
|
-
directory: string;
|
|
664
|
-
constructor(options?: ConfigFSServiceOptions);
|
|
665
|
-
write(entry: string, data: any): Promise<void>;
|
|
666
|
-
writeSync(entry: string, data: any): void;
|
|
667
|
-
load(): Promise<void>;
|
|
668
|
-
private parseKey;
|
|
669
|
-
set(fullKey: string, value: any, source?: string): void;
|
|
670
|
-
unset(fullKey: string): void;
|
|
671
|
-
}
|
|
672
|
-
//#endregion
|
|
673
|
-
//#region src/server/schemas/envSchema.d.ts
|
|
674
|
-
type EnvSchema = v.InferOutput<typeof envSchema>;
|
|
675
|
-
declare const envSchema: v.LooseObjectSchema<{
|
|
676
|
-
readonly NODE_ENV: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"development", undefined>, v.LiteralSchema<"production", undefined>, v.LiteralSchema<"test", undefined>], undefined>, "development">;
|
|
677
|
-
readonly ZENITH_BASE_PATH: v.StringSchema<undefined>;
|
|
678
|
-
readonly ZENITH_STORAGE_PATH: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
679
|
-
readonly ZENITH_APP_URL: v.OptionalSchema<v.StringSchema<undefined>, "http://localhost:3000">;
|
|
680
|
-
readonly ZENITH_PORT: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, number>]>, "3000">;
|
|
681
|
-
readonly ZENITH_HOST: v.OptionalSchema<v.StringSchema<undefined>, "0.0.0.0">;
|
|
682
|
-
readonly ZENITH_LOG_LEVEL: v.OptionalSchema<v.PicklistSchema<["error", "warn", "info", "debug"], undefined>, "info">;
|
|
683
|
-
readonly ZENITH_LIFECYCLE_DEBUG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.LiteralSchema<"1", undefined>, v.LiteralSchema<"0", undefined>], undefined>, v.TransformAction<"0" | "1" | "true" | "false", boolean>, v.BooleanSchema<undefined>]>, "false">;
|
|
684
|
-
readonly ZENITH_CLIENT_CONFIG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
|
|
685
|
-
readonly ZENITH_CONFIG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
|
|
686
|
-
readonly ZENITH_CONFIG_ARGUMENTS: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
|
|
687
|
-
readonly ZENITH_CONFIG_FILES: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, string[]>]>, "">;
|
|
688
|
-
readonly ZENITH_CONFIG_DEBUG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.LiteralSchema<"1", undefined>, v.LiteralSchema<"0", undefined>], undefined>, v.TransformAction<"0" | "1" | "true" | "false", boolean>, v.BooleanSchema<undefined>]>, "false">;
|
|
689
|
-
readonly ZENITH_CONFIG_DRIVER: v.OptionalSchema<v.PicklistSchema<["fs", "s3"], undefined>, "fs">;
|
|
690
|
-
readonly ZENITH_CONFIG_FS_PATH: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
691
|
-
readonly ZENITH_CONFIG_FS_FORMAT: v.OptionalSchema<v.PicklistSchema<["json", "yml"], undefined>, "json">;
|
|
692
|
-
readonly ZENITH_CONFIG_FS_FORMAT_OPTIONS: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
|
|
693
|
-
readonly ZENITH_CONFIG_S3_BUCKET: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
694
|
-
readonly ZENITH_CONFIG_S3_REGION: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
695
|
-
readonly ZENITH_CONFIG_S3_ACCESS_KEY_ID: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
696
|
-
readonly ZENITH_CONFIG_S3_SECRET_ACCESS_KEY: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
697
|
-
readonly ZENITH_CONFIG_S3_SESSION_TOKEN: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
698
|
-
readonly ZENITH_CONFIG_S3_ENDPOINT: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
699
|
-
readonly ZENITH_CONFIG_S3_PREFIX: v.OptionalSchema<v.StringSchema<undefined>, "">;
|
|
700
|
-
readonly ZENITH_PLUGINS_DIRS: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, string[]>]>, "">;
|
|
701
|
-
}, undefined>;
|
|
702
|
-
//#endregion
|
|
703
|
-
//#region src/server/services/EnvService.d.ts
|
|
704
|
-
declare class EnvService {
|
|
705
|
-
static __container_entry_key: string;
|
|
706
|
-
private env;
|
|
707
|
-
private files;
|
|
708
|
-
static create(): EnvService;
|
|
709
|
-
static dotEnvConfig(options?: dotenv.DotenvConfigOptions): dotenv.DotenvConfigOutput;
|
|
710
|
-
setFiles(files: string[]): this;
|
|
711
|
-
addFile(file: string): this;
|
|
712
|
-
load(): this;
|
|
713
|
-
get production(): boolean;
|
|
714
|
-
get development(): boolean;
|
|
715
|
-
get test(): boolean;
|
|
716
|
-
has<K extends keyof EnvSchema>(key: K): boolean;
|
|
717
|
-
get<K extends keyof EnvSchema>(key: K, defaultValue?: any): EnvSchema[K];
|
|
718
|
-
set<K extends keyof EnvSchema>(key: K, value: EnvSchema[K]): void;
|
|
719
|
-
}
|
|
720
|
-
//#endregion
|
|
721
|
-
//#region src/server/services/ConfigManagerService.d.ts
|
|
722
|
-
interface ConfigManagerOptions {
|
|
723
|
-
env: EnvService;
|
|
724
|
-
logger: LoggerService;
|
|
725
|
-
silent?: boolean;
|
|
726
|
-
}
|
|
727
|
-
declare class ConfigManagerService {
|
|
728
|
-
env: EnvService;
|
|
729
|
-
logger: LoggerService;
|
|
730
|
-
silent: boolean;
|
|
731
|
-
constructor(options: ConfigManagerOptions);
|
|
732
|
-
static create(options: ConfigManagerOptions): ConfigManagerService;
|
|
733
|
-
private loadS3Config;
|
|
734
|
-
private loadFSConfig;
|
|
735
|
-
loadConfigFromEnv(service: ConfigService): void;
|
|
736
|
-
loadConfigFromFile(service: ConfigService, file: string): void;
|
|
737
|
-
loadConfigFromFiles(service: ConfigService, files: string[]): void;
|
|
738
|
-
load(): Promise<ConfigService>;
|
|
739
|
-
}
|
|
740
|
-
//#endregion
|
|
741
|
-
//#region src/server/gateways/DriveBaseGateway.d.ts
|
|
742
|
-
interface UrlOptions {
|
|
743
|
-
expires?: ms.StringValue;
|
|
744
|
-
}
|
|
745
|
-
interface UploadUrlOptions {
|
|
746
|
-
expires?: ms.StringValue;
|
|
747
|
-
mime_types?: string[];
|
|
748
|
-
max_size?: number;
|
|
749
|
-
}
|
|
750
|
-
declare class DriveBaseGateway {
|
|
751
|
-
id: string;
|
|
752
|
-
name: string;
|
|
753
|
-
description?: string;
|
|
754
|
-
config: Record<string, any>;
|
|
755
|
-
constructor(data: Pick<DriveBaseGateway, 'id' | 'name' | 'description' | 'config'>);
|
|
756
|
-
list(folder?: string): Promise<DriveEntry[]>;
|
|
757
|
-
find(filename: string): Promise<DriveEntry>;
|
|
758
|
-
exists(filename: string): Promise<boolean>;
|
|
759
|
-
read(filename: string): Promise<Uint8Array>;
|
|
760
|
-
readStream(filename: string): Promise<NodeJS.ReadableStream>;
|
|
761
|
-
write(filename: string, data: Uint8Array): Promise<void>;
|
|
762
|
-
writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
|
|
763
|
-
delete(filename: string): Promise<void>;
|
|
764
|
-
url(filename: string, options?: UrlOptions): Promise<string>;
|
|
765
|
-
uploadUrl(filename: string, options?: UploadUrlOptions): Promise<string>;
|
|
766
|
-
}
|
|
767
|
-
//#endregion
|
|
768
|
-
//#region src/server/gateways/DriveS3Gateway.d.ts
|
|
769
|
-
declare const schema: v.ObjectSchema<{
|
|
770
|
-
readonly bucket: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
771
|
-
readonly region: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
772
|
-
readonly accessKeyId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
773
|
-
readonly secretAccessKey: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
774
|
-
readonly sessionToken: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
775
|
-
readonly endpoint: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
776
|
-
readonly prefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
777
|
-
}, undefined>;
|
|
778
|
-
type S3DriveConfig = InferOutput<typeof schema>;
|
|
779
|
-
declare class DriveS3 extends DriveBaseGateway {
|
|
780
|
-
private schema;
|
|
781
|
-
private _client?;
|
|
782
|
-
constructor(data: Pick<DriveBaseGateway, 'id' | 'name' | 'description' | 'config'>);
|
|
783
|
-
get valid(): boolean;
|
|
784
|
-
private checkValid;
|
|
785
|
-
protected get bucket(): string;
|
|
786
|
-
protected get prefix(): string;
|
|
787
|
-
private getKey;
|
|
788
|
-
protected get client(): S3Client;
|
|
789
|
-
exists: DriveBaseGateway['exists'];
|
|
790
|
-
list: DriveBaseGateway['list'];
|
|
791
|
-
find: DriveBaseGateway['find'];
|
|
792
|
-
mkdir(_filename: string): Promise<void>;
|
|
793
|
-
read: DriveBaseGateway['read'];
|
|
794
|
-
readStream(filename: string): Promise<any>;
|
|
795
|
-
write: DriveBaseGateway['write'];
|
|
796
|
-
writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
|
|
797
|
-
delete: DriveBaseGateway['delete'];
|
|
798
|
-
url: DriveBaseGateway['url'];
|
|
799
|
-
uploadUrl: DriveBaseGateway['uploadUrl'];
|
|
800
|
-
}
|
|
801
|
-
//#endregion
|
|
802
|
-
//#region src/server/services/ConfigS3Service.d.ts
|
|
803
|
-
interface InitiOptions extends Omit<S3DriveConfig, 'name' | 'description'> {
|
|
804
|
-
prefix?: string;
|
|
805
|
-
debug?: boolean;
|
|
806
|
-
logger?: LoggerService;
|
|
807
|
-
}
|
|
808
|
-
declare class ConfigS3Service extends ConfigService {
|
|
809
|
-
prefix: string;
|
|
810
|
-
logger: LoggerService;
|
|
811
|
-
debug: boolean;
|
|
812
|
-
drive: DriveS3;
|
|
813
|
-
bucket: string;
|
|
814
|
-
region: string;
|
|
815
|
-
endpoint?: string;
|
|
816
|
-
constructor(options: InitiOptions);
|
|
817
|
-
private parseKey;
|
|
818
|
-
load(): Promise<void>;
|
|
819
|
-
set(fullKey: string, value: any, source?: string): void;
|
|
820
|
-
unset(fullKey: string): void;
|
|
821
|
-
}
|
|
822
|
-
//#endregion
|
|
823
|
-
//#region src/server/services/DownloadService.d.ts
|
|
824
|
-
interface DownloadedFetchOptions extends RequestInit {
|
|
825
|
-
proxy?: string;
|
|
826
|
-
}
|
|
827
|
-
declare class DownloadService {
|
|
828
|
-
fetch(url: string, options?: DownloadedFetchOptions): Promise<_$undici.Response>;
|
|
829
|
-
stream(url: string, options?: DownloadedFetchOptions): Promise<{
|
|
830
|
-
stream: NodeJS.ReadableStream;
|
|
831
|
-
contentType: string;
|
|
832
|
-
}>;
|
|
833
|
-
}
|
|
834
|
-
//#endregion
|
|
835
|
-
//#region src/server/contracts/DriveContract.d.ts
|
|
836
|
-
interface DriveUrlOptions {
|
|
837
|
-
expires?: ms.StringValue;
|
|
838
|
-
}
|
|
839
|
-
interface DriveUploadUrlOptions {
|
|
840
|
-
expires?: ms.StringValue;
|
|
841
|
-
mime_types?: string[];
|
|
842
|
-
max_size?: number;
|
|
843
|
-
}
|
|
844
|
-
interface DriveContract {
|
|
845
|
-
id: string;
|
|
846
|
-
name: string;
|
|
847
|
-
description?: string;
|
|
848
|
-
list(folder?: string): Promise<DriveEntry[]>;
|
|
849
|
-
find(filename: string): Promise<DriveEntry>;
|
|
850
|
-
exists(filename: string): Promise<boolean>;
|
|
851
|
-
read(filename: string): Promise<Uint8Array>;
|
|
852
|
-
write(filename: string, data: Uint8Array): Promise<void>;
|
|
853
|
-
writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
|
|
854
|
-
delete(filename: string): Promise<void>;
|
|
855
|
-
url(filename: string, options?: DriveUrlOptions): Promise<string>;
|
|
856
|
-
uploadUrl(filename: string, options?: DriveUploadUrlOptions): Promise<string>;
|
|
857
|
-
readStream(filename: string): Promise<ReadStream>;
|
|
858
|
-
}
|
|
859
|
-
//#endregion
|
|
860
|
-
//#region src/server/services/DriveService.d.ts
|
|
861
|
-
interface ValidateUploadOptions {
|
|
862
|
-
mime_types: string;
|
|
863
|
-
maxSize?: number;
|
|
864
|
-
}
|
|
865
|
-
declare class DriveService {
|
|
866
|
-
static __container_entry_key: string;
|
|
867
|
-
gateways: Map<string, typeof DriveBaseGateway>;
|
|
868
|
-
drives: Map<string, DriveBaseGateway>;
|
|
869
|
-
selected?: string;
|
|
870
|
-
defaultDrive?: string;
|
|
871
|
-
debug: boolean;
|
|
872
|
-
logger: LoggerService;
|
|
873
|
-
get current(): DriveBaseGateway | undefined;
|
|
874
|
-
constructor(data?: Partial<DriveService>);
|
|
875
|
-
listDrives(): {
|
|
876
|
-
default: boolean;
|
|
877
|
-
id: string;
|
|
878
|
-
name: string;
|
|
879
|
-
description?: string;
|
|
880
|
-
config: Record<string, any>;
|
|
881
|
-
}[];
|
|
882
|
-
get(name?: string): DriveBaseGateway;
|
|
883
|
-
use(name?: string): DriveService;
|
|
884
|
-
list(folder?: string): Promise<DriveEntry[]>;
|
|
885
|
-
find(filename: string): Promise<DriveEntry>;
|
|
886
|
-
exists(filename: string): Promise<boolean>;
|
|
887
|
-
read(filename: string): Promise<Uint8Array>;
|
|
888
|
-
readStream(filename: string): Promise<NodeJS.ReadableStream>;
|
|
889
|
-
readAsText(filename: string): Promise<string>;
|
|
890
|
-
write(filename: string, payload: Uint8Array | string | Record<string, unknown>): Promise<void>;
|
|
891
|
-
writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
|
|
892
|
-
/**
|
|
893
|
-
* Retrieve a URL for a file in the drive.
|
|
894
|
-
* @param payload File instance, File ID, DriveEntry instance or filename string
|
|
895
|
-
* @param options
|
|
896
|
-
* @returns string
|
|
897
|
-
*/
|
|
898
|
-
url(filename: string, options?: DriveUrlOptions): Promise<string>;
|
|
899
|
-
uploadUrl(filename: string, options?: DriveUrlOptions): Promise<string>;
|
|
900
|
-
/**
|
|
901
|
-
* Upload a file from the local filesystem to the drive.
|
|
902
|
-
* @param source filename in local filesystem
|
|
903
|
-
* @param destination
|
|
904
|
-
* @returns
|
|
905
|
-
*/
|
|
906
|
-
upload(source: string, destination: string): Promise<void>;
|
|
907
|
-
/**
|
|
908
|
-
* Download a file from the drive to the local filesystem.
|
|
909
|
-
* @param filename filename in the drive
|
|
910
|
-
* @param destination
|
|
911
|
-
* @returns
|
|
912
|
-
*/
|
|
913
|
-
download(filename: string, destination: string): Promise<void>;
|
|
914
|
-
delete(filename: string): Promise<void>;
|
|
915
|
-
load(): Promise<void>;
|
|
916
|
-
createDefaultDrives(): Promise<void>;
|
|
917
|
-
validateUpload(options: ValidateUploadOptions, file: {
|
|
918
|
-
mimetype: string;
|
|
919
|
-
size: number;
|
|
920
|
-
}): void;
|
|
921
|
-
}
|
|
922
|
-
//#endregion
|
|
923
|
-
//#region src/server/entities/CookieMapEntity.d.ts
|
|
924
|
-
declare class CookieMapEntity extends CookieMapEntity$1 {
|
|
925
|
-
request: Request$1;
|
|
926
|
-
response: Response$1;
|
|
927
|
-
constructor(request: Request$1, response: Response$1);
|
|
928
|
-
set(name: string, value: string, options?: CookieOptions): void;
|
|
929
|
-
}
|
|
930
|
-
//#endregion
|
|
931
|
-
//#region src/server/entities/PageRequestContextEntity.d.ts
|
|
932
|
-
interface PageRequestContextEntityOptions {
|
|
933
|
-
url: string;
|
|
934
|
-
request: Request$1;
|
|
935
|
-
response: Response$1;
|
|
936
|
-
state?: Map<string, any>;
|
|
937
|
-
nodeContainer?: ContainerService;
|
|
938
|
-
nodeConfig?: ConfigService;
|
|
939
|
-
nodeState?: Map<string, any>;
|
|
940
|
-
browserContainer?: ContainerService;
|
|
941
|
-
browserConfig?: ConfigService;
|
|
942
|
-
browserState?: Map<string, any>;
|
|
943
|
-
}
|
|
944
|
-
declare class PageRequestContextEntity {
|
|
945
|
-
url: string;
|
|
946
|
-
request: Request$1;
|
|
947
|
-
response: Response$1;
|
|
948
|
-
cookies: CookieMapEntity;
|
|
949
|
-
head: ResolvableHead[];
|
|
950
|
-
nodeContainer: ContainerService;
|
|
951
|
-
nodeConfig: ConfigService;
|
|
952
|
-
nodeState: Map<string, any>;
|
|
953
|
-
browserContainer: ContainerService;
|
|
954
|
-
browserConfig: ConfigService;
|
|
955
|
-
browserState: Map<string, any>;
|
|
956
|
-
constructor(data: PageRequestContextEntityOptions);
|
|
957
|
-
setBrowserState(key: string, value: any): void;
|
|
958
|
-
setNodeState(key: string, value: any): void;
|
|
959
|
-
setState(key: string, value: any): void;
|
|
960
|
-
setBrowserContainerValue(key: string, value: any): void;
|
|
961
|
-
setNodeContainerValue(key: string, value: any): void;
|
|
962
|
-
setContainerValue(key: string, value: any): void;
|
|
963
|
-
setBrowserConfigValue(key: string, value: any): void;
|
|
964
|
-
setNodeConfigValue(key: string, value: any): void;
|
|
965
|
-
setConfigValue(key: string, value: any): void;
|
|
966
|
-
}
|
|
967
|
-
//#endregion
|
|
968
|
-
//#region src/server/repositories/DatabaseRepository.d.ts
|
|
969
|
-
interface Pagination<T = any> {
|
|
970
|
-
items: T[];
|
|
971
|
-
page: number;
|
|
972
|
-
per_page: number;
|
|
973
|
-
total: number;
|
|
974
|
-
total_pages: number;
|
|
975
|
-
}
|
|
976
|
-
interface FindManyOptions {
|
|
977
|
-
limit?: number;
|
|
978
|
-
offset?: number;
|
|
979
|
-
orderBy?: string | string[];
|
|
980
|
-
orderDirection?: 'asc' | 'desc' | ('asc' | 'desc')[];
|
|
981
|
-
}
|
|
982
|
-
interface PaginateOptions$1 {
|
|
983
|
-
page?: number;
|
|
984
|
-
limit?: number;
|
|
985
|
-
orderBy?: FindManyOptions['orderBy'];
|
|
986
|
-
orderDirection?: FindManyOptions['orderDirection'];
|
|
987
|
-
}
|
|
988
|
-
interface DeleteManyOptions {
|
|
989
|
-
limit?: number;
|
|
990
|
-
}
|
|
991
|
-
declare class DatabaseRepository<TEntity = Record<string, any>, TPrimaryKey = any, TOptions = Record<string, any>> {
|
|
992
|
-
protected db: Kysely<any>;
|
|
993
|
-
protected table: string;
|
|
994
|
-
protected primaryKey: string;
|
|
995
|
-
autoCreatedAt: boolean;
|
|
996
|
-
autoUpdatedAt: boolean;
|
|
997
|
-
constructor(db: Kysely<any>, table: string, primaryKey: string);
|
|
998
|
-
query(options?: {
|
|
999
|
-
qb?: any;
|
|
1000
|
-
} & TOptions): any;
|
|
1001
|
-
count(options?: Record<string, any>): Promise<number>;
|
|
1002
|
-
findMany(options?: FindManyOptions & TOptions): Promise<TEntity[]>;
|
|
1003
|
-
findOne(options?: TOptions): Promise<TEntity | null>;
|
|
1004
|
-
findById(id: TPrimaryKey, options?: TOptions): Promise<TEntity | null>;
|
|
1005
|
-
findByIdOrFail(id: TPrimaryKey, options?: TOptions): Promise<NonNullable<Awaited<TEntity>>>;
|
|
1006
|
-
paginate(options?: PaginateOptions$1 & TOptions): Promise<Pagination>;
|
|
1007
|
-
protected beforeCreate(data: Partial<TEntity>): Promise<Partial<TEntity>>;
|
|
1008
|
-
protected afterCreate(data: TEntity): Promise<void>;
|
|
1009
|
-
create(data: Partial<TEntity>): Promise<TEntity>;
|
|
1010
|
-
protected beforeCreateMany(data: Partial<TEntity>[]): Promise<Partial<TEntity>[]>;
|
|
1011
|
-
protected afterCreateMany(data: TEntity[]): Promise<TEntity[]>;
|
|
1012
|
-
createMany(data: Partial<TEntity>[]): Promise<any[]>;
|
|
1013
|
-
protected beforeUpdate(data: Partial<TEntity>, id: TPrimaryKey): Promise<Partial<TEntity>>;
|
|
1014
|
-
protected afterUpdate(data: TEntity): Promise<TEntity>;
|
|
1015
|
-
updateById(id: TPrimaryKey, data: Partial<TEntity>): Promise<void>;
|
|
1016
|
-
protected beforeDelete(id: TPrimaryKey): Promise<void>;
|
|
1017
|
-
protected afterDelete(id: TPrimaryKey): Promise<void>;
|
|
1018
|
-
deleteById(id: TPrimaryKey): Promise<void>;
|
|
1019
|
-
protected beforeDeleteMany(options?: DeleteManyOptions & TOptions): (DeleteManyOptions & TOptions) | undefined;
|
|
1020
|
-
protected afterDeleteMany(options?: DeleteManyOptions & TOptions): Promise<void> | void;
|
|
1021
|
-
deleteMany(options?: DeleteManyOptions & TOptions): Promise<void>;
|
|
1022
|
-
}
|
|
1023
|
-
//#endregion
|
|
1024
|
-
//#region src/server/repositories/UserRepository.d.ts
|
|
1025
|
-
interface UserRepositoryQueryOptions {
|
|
1026
|
-
id?: number | number[];
|
|
1027
|
-
search?: string;
|
|
1028
|
-
email?: string;
|
|
1029
|
-
username?: string;
|
|
1030
|
-
showDeleted?: boolean;
|
|
1031
|
-
}
|
|
1032
|
-
interface UserRepositoryEvents {
|
|
1033
|
-
'user:created': {
|
|
1034
|
-
user: UserEntity$1;
|
|
1035
|
-
};
|
|
1036
|
-
'user:updated': {
|
|
1037
|
-
user: UserEntity$1;
|
|
1038
|
-
};
|
|
1039
|
-
'user:deleted': {
|
|
1040
|
-
user: UserEntity$1;
|
|
1041
|
-
};
|
|
1042
|
-
}
|
|
1043
|
-
declare class UserRepository extends DatabaseRepository<UserEntity$1, number, UserRepositoryQueryOptions> {
|
|
1044
|
-
static __container_entry_key: string;
|
|
1045
|
-
autoCreatedAt: boolean;
|
|
1046
|
-
autoUpdatedAt: boolean;
|
|
1047
|
-
constructor(db: DatabaseRepository['db']);
|
|
1048
|
-
hashUserPasswordIfDefined(data: Partial<UserEntity$1>): Promise<void>;
|
|
1049
|
-
protected beforeCreate(data: Partial<UserEntity$1>): Promise<Partial<UserEntity$1>>;
|
|
1050
|
-
protected beforeCreateMany(data: Partial<UserEntity$1>[]): Promise<Partial<UserEntity$1>[]>;
|
|
1051
|
-
protected beforeUpdate(data: Partial<UserEntity$1>): Promise<Partial<UserEntity$1>>;
|
|
1052
|
-
protected afterCreate(data: UserEntity$1): Promise<void>;
|
|
1053
|
-
query(options?: UserRepositoryQueryOptions): any;
|
|
1054
|
-
}
|
|
1055
|
-
//#endregion
|
|
1056
|
-
//#region src/server/entities/MigrationEntity.d.ts
|
|
1057
|
-
interface MigrationEntiyData {
|
|
1058
|
-
name: string;
|
|
1059
|
-
source: string | null;
|
|
1060
|
-
filename: string;
|
|
1061
|
-
executedAt: Date | null;
|
|
1062
|
-
}
|
|
1063
|
-
declare class MigrationEntity {
|
|
1064
|
-
name: string;
|
|
1065
|
-
source: string | null;
|
|
1066
|
-
filename: string;
|
|
1067
|
-
executedAt: Date | null;
|
|
1068
|
-
constructor(data: MigrationEntiyData);
|
|
1069
|
-
up(db: Kysely<any>): Promise<void>;
|
|
1070
|
-
down(db: Kysely<any>): Promise<void>;
|
|
1071
|
-
}
|
|
1072
|
-
//#endregion
|
|
1073
|
-
//#region src/server/services/MigratorService.d.ts
|
|
1074
|
-
interface MigrationSource {
|
|
1075
|
-
id: string;
|
|
1076
|
-
directory: string;
|
|
1077
|
-
}
|
|
1078
|
-
interface Migration {
|
|
1079
|
-
name: string;
|
|
1080
|
-
source: string | null;
|
|
1081
|
-
filename: string;
|
|
1082
|
-
executedAt: Date | null;
|
|
1083
|
-
}
|
|
1084
|
-
interface ListFilters$1 {
|
|
1085
|
-
source?: string;
|
|
1086
|
-
name?: string | string[];
|
|
1087
|
-
}
|
|
1088
|
-
interface MigrationResult {
|
|
1089
|
-
name: string;
|
|
1090
|
-
filename: string;
|
|
1091
|
-
source: string | null;
|
|
1092
|
-
result: 'success' | 'failed';
|
|
1093
|
-
error?: any;
|
|
1094
|
-
}
|
|
1095
|
-
interface MigratorServiceOptions {
|
|
1096
|
-
sources: MigrationSource[];
|
|
1097
|
-
db: Kysely<any>;
|
|
1098
|
-
debug?: boolean;
|
|
1099
|
-
emmitter?: EmmitterService$1;
|
|
1100
|
-
logger?: LoggerService;
|
|
1101
|
-
}
|
|
1102
|
-
interface MigratorServiceEvents {
|
|
1103
|
-
'migrator:before-migrate': {
|
|
1104
|
-
migrations: MigrationEntity[];
|
|
1105
|
-
};
|
|
1106
|
-
'migrator:after-migrate': {
|
|
1107
|
-
migrations: MigrationEntity[];
|
|
1108
|
-
};
|
|
1109
|
-
'migrator:before-rollback': {
|
|
1110
|
-
migrations: MigrationEntity[];
|
|
1111
|
-
};
|
|
1112
|
-
'migrator:after-rollback': {
|
|
1113
|
-
migrations: MigrationEntity[];
|
|
1114
|
-
};
|
|
1115
|
-
}
|
|
1116
|
-
declare class MigratorService {
|
|
1117
|
-
static __container_entry_key: string;
|
|
1118
|
-
debug: boolean;
|
|
1119
|
-
emmitter: EmmitterService$1;
|
|
1120
|
-
logger: LoggerService;
|
|
1121
|
-
db: Kysely<any>;
|
|
1122
|
-
sources: MigrationSource[];
|
|
1123
|
-
constructor(options: MigratorServiceOptions);
|
|
1124
|
-
addSource(source: MigrationSource): void;
|
|
1125
|
-
private ensureMigrationsTable;
|
|
1126
|
-
listSource(source: MigrationSource): Promise<MigrationEntity[]>;
|
|
1127
|
-
list(filters?: ListFilters$1): Promise<MigrationEntity[]>;
|
|
1128
|
-
private migrateUp;
|
|
1129
|
-
private migrateDown;
|
|
1130
|
-
private migrateFile;
|
|
1131
|
-
private rollbackFile;
|
|
1132
|
-
migrate(filters?: ListFilters$1 & {
|
|
1133
|
-
steps?: number;
|
|
1134
|
-
}): Promise<MigrationResult[]>;
|
|
1135
|
-
rollback(filters?: ListFilters$1 & {
|
|
1136
|
-
steps?: number;
|
|
1137
|
-
}): Promise<MigrationResult[]>;
|
|
1138
|
-
up(steps?: number, filters?: ListFilters$1): Promise<MigrationResult[]>;
|
|
1139
|
-
down(steps?: number, filters?: ListFilters$1): Promise<MigrationResult[]>;
|
|
1140
|
-
latest(filters?: ListFilters$1): Promise<MigrationResult[]>;
|
|
1141
|
-
latestOrFail(filters?: ListFilters$1): Promise<MigrationResult[]>;
|
|
1142
|
-
fresh(filters?: ListFilters$1 & {
|
|
1143
|
-
steps?: number;
|
|
1144
|
-
}): Promise<MigrationResult[]>;
|
|
1145
|
-
}
|
|
1146
|
-
//#endregion
|
|
1147
|
-
//#region src/server/entities/AclEntity.d.ts
|
|
1148
|
-
declare class Acl extends AclEntity {
|
|
1149
|
-
authorize(action: string, subject: any, object?: Record<string, any>): void;
|
|
1150
|
-
}
|
|
1151
|
-
//#endregion
|
|
1152
|
-
//#region src/server/contracts/HttpContextContract.d.ts
|
|
1153
|
-
interface Request {
|
|
1154
|
-
[key: string]: any;
|
|
1155
|
-
}
|
|
1156
|
-
interface Response {
|
|
1157
|
-
[key: string]: any;
|
|
1158
|
-
}
|
|
1159
|
-
interface HttpContext {
|
|
1160
|
-
url: string;
|
|
1161
|
-
method: string;
|
|
1162
|
-
params: Record<string, string>;
|
|
1163
|
-
query: Record<string, string | string[]>;
|
|
1164
|
-
body: Record<string, any>;
|
|
1165
|
-
cookie: CookieMapEntity$1;
|
|
1166
|
-
acl: Acl;
|
|
1167
|
-
request: Request;
|
|
1168
|
-
response: Response;
|
|
1169
|
-
[key: string]: any;
|
|
1170
|
-
}
|
|
1171
|
-
//#endregion
|
|
1172
|
-
//#region src/server/contracts/RouterContract.d.ts
|
|
1173
|
-
interface Redirect {
|
|
1174
|
-
redirect: string;
|
|
1175
|
-
}
|
|
1176
|
-
type HandleResult = Record<string, any> | Redirect | void;
|
|
1177
|
-
interface Middleware {
|
|
1178
|
-
handle(ctx: any): HandleResult | Promise<HandleResult>;
|
|
1179
|
-
}
|
|
1180
|
-
type ExtractMiddlewareContext<M extends Middleware> = Awaited<ReturnType<M['handle']>> extends Record<string, any> ? Awaited<ReturnType<M['handle']>> : {};
|
|
1181
|
-
type ProcessMiddlewareArray<T extends readonly Middleware[]> = T extends readonly [infer First extends Middleware, ...infer Rest extends readonly Middleware[]] ? ExtractMiddlewareContext<First> & ProcessMiddlewareArray<Rest> : {};
|
|
1182
|
-
type MiddlewareHandleResult<T extends readonly Middleware[] = readonly Middleware[]> = ProcessMiddlewareArray<T>;
|
|
1183
|
-
interface Handler$1<T = Record<string, any>> {
|
|
1184
|
-
(ctx: HttpContext & T): Promise<any> | any;
|
|
1185
|
-
}
|
|
1186
|
-
//#endregion
|
|
1187
|
-
//#region src/server/entities/RouteEntity.d.ts
|
|
1188
|
-
type RouteMethod = 'get' | 'GET' | 'post' | 'POST' | 'put' | 'PUT' | 'patch' | 'PATCH' | 'delete' | 'DELETE';
|
|
1189
|
-
declare class Route {
|
|
1190
|
-
path: string;
|
|
1191
|
-
method: RouteMethod;
|
|
1192
|
-
handler: Handler$1<any> | null;
|
|
1193
|
-
middlewares: Middleware[];
|
|
1194
|
-
metadata: Record<string, any> | null;
|
|
1195
|
-
constructor(data?: Partial<Route>);
|
|
1196
|
-
static params(routePath: string, requestPath: string): Record<string, string>;
|
|
1197
|
-
static query(requestPath: string): Record<string, string>;
|
|
1198
|
-
toJSON(): {
|
|
1199
|
-
path: string;
|
|
1200
|
-
method: RouteMethod;
|
|
1201
|
-
middlewares: string[];
|
|
1202
|
-
metadata: Record<string, any> | null;
|
|
1203
|
-
};
|
|
1204
|
-
}
|
|
1205
|
-
//#endregion
|
|
1206
|
-
//#region src/server/services/RouterService.d.ts
|
|
1207
|
-
type RouteContext = 'global' | 'group' | 'route';
|
|
1208
|
-
interface MiddlewareRegister {
|
|
1209
|
-
middleware: Middleware;
|
|
1210
|
-
context: RouteContext;
|
|
1211
|
-
}
|
|
1212
|
-
interface LoadOptions {
|
|
1213
|
-
debug?: boolean;
|
|
1214
|
-
}
|
|
1215
|
-
interface RouterEvents {
|
|
1216
|
-
'router:registered': {
|
|
1217
|
-
router: RouterService;
|
|
1218
|
-
};
|
|
1219
|
-
'router:loaded': {
|
|
1220
|
-
router: RouterService;
|
|
1221
|
-
};
|
|
1222
|
-
}
|
|
1223
|
-
declare const RouterService_base: {
|
|
1224
|
-
new (...args: any[]): {
|
|
1225
|
-
listeners: Listener[];
|
|
1226
|
-
on(event: string, listener: (...args: any[]) => void): void;
|
|
1227
|
-
off(event: string, listener: (...args: any[]) => void): void;
|
|
1228
|
-
emit(event: string, ...args: any[]): void;
|
|
1229
|
-
emitAsync(event: string, ...args: any[]): Promise<void>;
|
|
1230
|
-
};
|
|
1231
|
-
} & Constructor;
|
|
1232
|
-
declare class RouterService<C = {}> extends RouterService_base {
|
|
1233
|
-
static __container_entry_key: string;
|
|
1234
|
-
routes: Route[];
|
|
1235
|
-
middlewares: MiddlewareRegister[];
|
|
1236
|
-
prefixes: string[];
|
|
1237
|
-
groups: RouterService<any>[];
|
|
1238
|
-
groupPrefixes: string[];
|
|
1239
|
-
debug: boolean;
|
|
1240
|
-
logger: LoggerService;
|
|
1241
|
-
metadata: Record<string, any>;
|
|
1242
|
-
constructor(data?: Partial<RouterService<C>>);
|
|
1243
|
-
use<T extends Middleware>(middleware: T, context?: RouteContext): RouterService<C & MiddlewareHandleResult<[typeof middleware]>>;
|
|
1244
|
-
prefix(prefix: string): this;
|
|
1245
|
-
makePath(args: string): string;
|
|
1246
|
-
add(payload: Pick<Route, 'path' | 'method' | 'handler'>): void;
|
|
1247
|
-
get(path: string, handler: Handler$1<C>): void;
|
|
1248
|
-
post(path: string, handler: Handler$1<C>): void;
|
|
1249
|
-
put(path: string, handler: Handler$1<C>): void;
|
|
1250
|
-
patch(path: string, handler: Handler$1<C>): void;
|
|
1251
|
-
many(methods: Route['method'][], path: string, handler: Handler$1<C>): void;
|
|
1252
|
-
delete(path: string, handler: Handler$1<C>): void;
|
|
1253
|
-
group(): RouterService<C>;
|
|
1254
|
-
resolve(method: string, path: string): Route | null;
|
|
1255
|
-
execute(route: Route, initialCtx: any): Promise<any>;
|
|
1256
|
-
clear(): void;
|
|
1257
|
-
list(): Route[];
|
|
1258
|
-
load(options?: LoadOptions): Promise<void>;
|
|
1259
|
-
loadSync(options?: LoadOptions): void;
|
|
1260
|
-
}
|
|
1261
|
-
//#endregion
|
|
1262
|
-
//#region src/server/entities/RoutineEntity.d.ts
|
|
1263
|
-
interface RoutineHandler {
|
|
1264
|
-
(): void | Promise<void>;
|
|
1265
|
-
}
|
|
1266
|
-
interface RoutineEntityOptions {
|
|
1267
|
-
id: string;
|
|
1268
|
-
cron: string;
|
|
1269
|
-
handler?: RoutineHandler;
|
|
1270
|
-
}
|
|
1271
|
-
declare class RoutineEntity {
|
|
1272
|
-
id: string;
|
|
1273
|
-
cron: string;
|
|
1274
|
-
job?: Job;
|
|
1275
|
-
static create(): RoutineEntity;
|
|
1276
|
-
handle: RoutineHandler;
|
|
1277
|
-
setId(id: string): this;
|
|
1278
|
-
setCron(cron: string): this;
|
|
1279
|
-
setHandler(handler: RoutineHandler): this;
|
|
1280
|
-
}
|
|
1281
|
-
//#endregion
|
|
1282
|
-
//#region src/server/services/SchedulerService.d.ts
|
|
1283
|
-
interface AddOptions {
|
|
1284
|
-
id?: string;
|
|
1285
|
-
}
|
|
1286
|
-
interface SchedulerServiceOptions {
|
|
1287
|
-
logger?: LoggerService;
|
|
1288
|
-
debug?: boolean;
|
|
1289
|
-
}
|
|
1290
|
-
interface SchedulerEvents {
|
|
1291
|
-
'scheduler:registered': {
|
|
1292
|
-
scheduler: SchedulerService;
|
|
1293
|
-
};
|
|
1294
|
-
'scheduler:loaded': {
|
|
1295
|
-
scheduler: SchedulerService;
|
|
1296
|
-
};
|
|
1297
|
-
'scheduler:booted': {
|
|
1298
|
-
scheduler: SchedulerService;
|
|
1299
|
-
};
|
|
1300
|
-
'scheduler:shutdowned': {
|
|
1301
|
-
scheduler: SchedulerService;
|
|
1302
|
-
};
|
|
1303
|
-
}
|
|
1304
|
-
declare class SchedulerService {
|
|
1305
|
-
static __container_entry_key: string;
|
|
1306
|
-
routines: RoutineEntity[];
|
|
1307
|
-
logger: LoggerService;
|
|
1308
|
-
debug: boolean;
|
|
1309
|
-
dirs: string[];
|
|
1310
|
-
constructor(options?: SchedulerServiceOptions);
|
|
1311
|
-
static create(options?: SchedulerServiceOptions): SchedulerService;
|
|
1312
|
-
setLogger(logger: LoggerService): void;
|
|
1313
|
-
setDebug(debug: boolean): void;
|
|
1314
|
-
addDir(dir: string): void;
|
|
1315
|
-
add(routine: Omit<RoutineEntity, 'job'>): void;
|
|
1316
|
-
remove(id: RoutineEntity['id'] | RoutineEntity['id'][]): void;
|
|
1317
|
-
loadFile(filename: string): Promise<void>;
|
|
1318
|
-
loadDirectory(directory: string): Promise<void>;
|
|
1319
|
-
load(): Promise<void>;
|
|
1320
|
-
has(id: RoutineEntity['id']): boolean;
|
|
1321
|
-
startRoutine(id: RoutineEntity['id']): Promise<void>;
|
|
1322
|
-
addAndStart(routine: Omit<RoutineEntity, 'job'>): Promise<void>;
|
|
1323
|
-
stopRoutine(id: RoutineEntity['id']): Promise<void>;
|
|
1324
|
-
stopAndRemove(id: RoutineEntity['id']): Promise<void>;
|
|
1325
|
-
boot(): Promise<void>;
|
|
1326
|
-
shutdown(): Promise<void>;
|
|
1327
|
-
list(): RoutineEntity[];
|
|
1328
|
-
}
|
|
1329
|
-
//#endregion
|
|
1330
|
-
//#region src/server/entities/SeederEntity.d.ts
|
|
1331
|
-
interface SeederEntiyData {
|
|
1332
|
-
name: string;
|
|
1333
|
-
source: string | null;
|
|
1334
|
-
filename: string;
|
|
1335
|
-
}
|
|
1336
|
-
declare class SeederEntity {
|
|
1337
|
-
name: string;
|
|
1338
|
-
source: string | null;
|
|
1339
|
-
filename: string;
|
|
1340
|
-
constructor(data: SeederEntiyData);
|
|
1341
|
-
run(db: Kysely<any>): Promise<void>;
|
|
1342
|
-
}
|
|
1343
|
-
//#endregion
|
|
1344
|
-
//#region src/server/services/SeederService.d.ts
|
|
1345
|
-
interface SeederSource {
|
|
1346
|
-
id: string;
|
|
1347
|
-
directory: string;
|
|
1348
|
-
}
|
|
1349
|
-
interface ListFilters {
|
|
1350
|
-
source?: string | string[];
|
|
1351
|
-
name?: string | string[];
|
|
1352
|
-
}
|
|
1353
|
-
interface SeederResult {
|
|
1354
|
-
name: string;
|
|
1355
|
-
filename: string;
|
|
1356
|
-
source: string | null;
|
|
1357
|
-
result: 'success' | 'failed';
|
|
1358
|
-
error?: any;
|
|
1359
|
-
}
|
|
1360
|
-
interface SeederEvents {
|
|
1361
|
-
'seeder:before-run': {
|
|
1362
|
-
seeders: string[];
|
|
1363
|
-
};
|
|
1364
|
-
'seeder:after-run': {
|
|
1365
|
-
seeders: string[];
|
|
1366
|
-
};
|
|
1367
|
-
}
|
|
1368
|
-
interface SeederServiceOptions {
|
|
1369
|
-
db: Kysely<any>;
|
|
1370
|
-
sources?: SeederSource[];
|
|
1371
|
-
debug?: boolean;
|
|
1372
|
-
emmitter?: EmmitterService$1;
|
|
1373
|
-
logger?: LoggerService;
|
|
1374
|
-
}
|
|
1375
|
-
declare class SeeederService {
|
|
1376
|
-
static __container_entry_key: string;
|
|
1377
|
-
debug: boolean;
|
|
1378
|
-
emmitter: EmmitterService$1;
|
|
1379
|
-
logger: LoggerService;
|
|
1380
|
-
db: Kysely<any>;
|
|
1381
|
-
sources: SeederSource[];
|
|
1382
|
-
constructor(options: SeederServiceOptions);
|
|
1383
|
-
addSource(source: SeederSource): void;
|
|
1384
|
-
listSource(source: SeederSource): Promise<SeederEntity[]>;
|
|
1385
|
-
list(filters?: ListFilters): Promise<SeederEntity[]>;
|
|
1386
|
-
runSeeder(seeder: SeederEntity): Promise<SeederResult>;
|
|
1387
|
-
run(filters?: ListFilters & {
|
|
1388
|
-
steps?: number;
|
|
1389
|
-
}): Promise<SeederResult[]>;
|
|
1390
|
-
}
|
|
1391
|
-
//#endregion
|
|
1392
|
-
//#region src/server/contracts/EventContract.d.ts
|
|
1393
|
-
interface EventContract extends SeederEvents, RouterEvents, CliEvents, SchedulerEvents, MigratorServiceEvents, UserRepositoryEvents {
|
|
1394
|
-
'page:request:start': PageRequestContextEntity;
|
|
1395
|
-
'page:request:before-render': PageRequestContextEntity;
|
|
1396
|
-
'page:request:after-render': PageRequestContextEntity;
|
|
1397
|
-
[key: string]: any;
|
|
1398
|
-
}
|
|
1399
|
-
//#endregion
|
|
1400
|
-
//#region src/server/services/EmmitterService.d.ts
|
|
1401
|
-
declare class EmmitterService extends EmmitterService$1<EventContract> {}
|
|
1402
|
-
//#endregion
|
|
1403
|
-
//#region src/server/services/EncryptService.d.ts
|
|
1404
|
-
interface URLOptions {
|
|
1405
|
-
data?: any;
|
|
1406
|
-
expires?: ms.StringValue;
|
|
1407
|
-
expireAt?: number | Date;
|
|
1408
|
-
}
|
|
1409
|
-
interface EncryptServiceOptions {
|
|
1410
|
-
key?: string;
|
|
1411
|
-
debug?: boolean;
|
|
1412
|
-
logger?: LoggerService;
|
|
1413
|
-
env?: EnvService;
|
|
1414
|
-
}
|
|
1415
|
-
declare class EncryptService {
|
|
1416
|
-
static __container_entry_key: string;
|
|
1417
|
-
debug: boolean;
|
|
1418
|
-
env: EnvService;
|
|
1419
|
-
logger: LoggerService;
|
|
1420
|
-
private readonly algorithm;
|
|
1421
|
-
private key;
|
|
1422
|
-
constructor(options: EncryptServiceOptions);
|
|
1423
|
-
static create(options: EncryptServiceOptions): EncryptService;
|
|
1424
|
-
setDebug(debug: boolean): void;
|
|
1425
|
-
setLogger(logger: LoggerService): void;
|
|
1426
|
-
setEnv(env: EnvService): void;
|
|
1427
|
-
setKey(key: string): void;
|
|
1428
|
-
encrypt(text: string): string;
|
|
1429
|
-
decrypt(options: string): string;
|
|
1430
|
-
encryptObject(obj: any): string;
|
|
1431
|
-
decryptObject<T>(encryptedString: string): T;
|
|
1432
|
-
url(path: string, options?: URLOptions): string;
|
|
1433
|
-
verifyUrl(encryptedKey: string): any;
|
|
1434
|
-
}
|
|
1435
|
-
//#endregion
|
|
1436
|
-
//#region src/server/services/ExceptionService.d.ts
|
|
1437
|
-
interface ExceptionServiceOptions {
|
|
1438
|
-
ignoreCodeErrors?: number[];
|
|
1439
|
-
logger?: LoggerService;
|
|
1440
|
-
env?: EnvService;
|
|
1441
|
-
}
|
|
1442
|
-
declare class ExceptionService {
|
|
1443
|
-
static __container_entry_key: string;
|
|
1444
|
-
ignoreCodeErrors: number[];
|
|
1445
|
-
logger: LoggerService;
|
|
1446
|
-
env: EnvService;
|
|
1447
|
-
constructor(options?: ExceptionServiceOptions);
|
|
1448
|
-
handle(error: Error, response: Response$1): Response$1<any, Record<string, any>>;
|
|
1449
|
-
}
|
|
1450
|
-
//#endregion
|
|
1451
|
-
//#region src/server/services/HasherService.d.ts
|
|
1452
|
-
declare class HasherService {
|
|
1453
|
-
static __container_entry_key: string;
|
|
1454
|
-
hash(value: string): Promise<string>;
|
|
1455
|
-
compare(a: string, b: string): Promise<boolean>;
|
|
1456
|
-
}
|
|
1457
|
-
//#endregion
|
|
1458
|
-
//#region src/server/services/HttpService.d.ts
|
|
1459
|
-
interface HttpServiceOptions {
|
|
1460
|
-
debug?: boolean;
|
|
1461
|
-
router?: RouterService;
|
|
1462
|
-
logger?: LoggerService;
|
|
1463
|
-
exception?: ExceptionService;
|
|
1464
|
-
emmitter?: EmmitterService$1;
|
|
1465
|
-
env?: EnvService;
|
|
1466
|
-
origins?: string[];
|
|
1467
|
-
}
|
|
1468
|
-
declare class HttpService {
|
|
1469
|
-
static __container_entry_key: string;
|
|
1470
|
-
app: express.Application;
|
|
1471
|
-
server: Server | null;
|
|
1472
|
-
router: RouterService;
|
|
1473
|
-
exception: ExceptionService;
|
|
1474
|
-
logger: LoggerService;
|
|
1475
|
-
emmitter: EmmitterService$1;
|
|
1476
|
-
env: EnvService;
|
|
1477
|
-
debug: boolean;
|
|
1478
|
-
onUnhandlerRouted: ((req: express.Request, res: express.Response) => void) | null;
|
|
1479
|
-
constructor(options: HttpServiceOptions);
|
|
1480
|
-
getExpressApp(): express.Application;
|
|
1481
|
-
cors(options: cors.CorsOptions): void;
|
|
1482
|
-
use: express.Application['use'];
|
|
1483
|
-
routes(): void;
|
|
1484
|
-
parser(req: express.Request, res: express.Response, next: express.NextFunction): void;
|
|
1485
|
-
execute(url: URL, request: express.Request, response: express.Response, route: Route): Promise<void>;
|
|
1486
|
-
start(): void;
|
|
1487
|
-
stop(): Promise<void>;
|
|
1488
|
-
}
|
|
1489
|
-
//#endregion
|
|
1490
|
-
//#region src/server/services/HttpTesterService.d.ts
|
|
1491
|
-
interface HttpTesterServiceOptions {
|
|
1492
|
-
http: HttpService;
|
|
1493
|
-
}
|
|
1494
|
-
declare class HttpTesterService {
|
|
1495
|
-
static __container_entry_key: string;
|
|
1496
|
-
http: HttpService;
|
|
1497
|
-
request: supertest.SuperTest<supertest.Test>;
|
|
1498
|
-
headers: Record<string, string>;
|
|
1499
|
-
cookies: Record<string, string>;
|
|
1500
|
-
constructor(options: HttpTesterServiceOptions);
|
|
1501
|
-
create(request: Test): Test;
|
|
1502
|
-
get(url: string): Test;
|
|
1503
|
-
post(url: string, body?: any): Test;
|
|
1504
|
-
loginByUser(user: UserEntity$1): Promise<void>;
|
|
1505
|
-
loginByUsername(username: string): Promise<void>;
|
|
1506
|
-
}
|
|
1507
|
-
//#endregion
|
|
1508
|
-
//#region src/server/services/LifecycleService.d.ts
|
|
1509
|
-
declare class LifecycleService extends LifecycleService$1 {
|
|
1510
|
-
addDirectory(dirname: string): Promise<void>;
|
|
1511
|
-
}
|
|
1512
|
-
//#endregion
|
|
1513
|
-
//#region src/server/contracts/DatabaseContract.d.ts
|
|
1514
|
-
interface SoftDeleteTable {
|
|
1515
|
-
deleted_at?: ColumnType<Date | string | null, Date | string | undefined, Date | string | null>;
|
|
1516
|
-
}
|
|
1517
|
-
interface TimestampTable {
|
|
1518
|
-
created_at: ColumnType<Date, string | undefined, never>;
|
|
1519
|
-
updated_at: ColumnType<Date, string | undefined, never>;
|
|
1520
|
-
}
|
|
1521
|
-
interface MigrationsTable {
|
|
1522
|
-
name: string;
|
|
1523
|
-
module: string | null;
|
|
1524
|
-
executed_at: ColumnType<Date, string | undefined, never>;
|
|
1525
|
-
}
|
|
1526
|
-
interface UserTable extends TimestampTable, SoftDeleteTable {
|
|
1527
|
-
id: Generated<number>;
|
|
1528
|
-
name: string;
|
|
1529
|
-
username: string;
|
|
1530
|
-
email: string;
|
|
1531
|
-
password: string;
|
|
1532
|
-
verified_at?: Date | string | null;
|
|
1533
|
-
}
|
|
1534
|
-
interface UserMetaTable extends TimestampTable, SoftDeleteTable {
|
|
1535
|
-
id: Generated<number>;
|
|
1536
|
-
user_id: number;
|
|
1537
|
-
name: string;
|
|
1538
|
-
value: string | null;
|
|
1539
|
-
}
|
|
1540
|
-
interface TokenTable extends TimestampTable {
|
|
1541
|
-
id: Generated<number>;
|
|
1542
|
-
user_id: number;
|
|
1543
|
-
token: string;
|
|
1544
|
-
type: string;
|
|
1545
|
-
expires_at: string | null;
|
|
1546
|
-
}
|
|
1547
|
-
interface RoleTable {
|
|
1548
|
-
id: Generated<number>;
|
|
1549
|
-
name: string;
|
|
1550
|
-
description: string | null;
|
|
1551
|
-
}
|
|
1552
|
-
interface UserRoleTable {
|
|
1553
|
-
user_id: number;
|
|
1554
|
-
role_id: number;
|
|
1555
|
-
}
|
|
1556
|
-
interface PermissionTable extends TimestampTable, SoftDeleteTable {
|
|
1557
|
-
id: Generated<number>;
|
|
1558
|
-
name: string;
|
|
1559
|
-
description: string | null;
|
|
1560
|
-
origin: string;
|
|
1561
|
-
subject: string;
|
|
1562
|
-
action: string;
|
|
1563
|
-
conditions: string | null;
|
|
1564
|
-
}
|
|
1565
|
-
interface PermissionAssignmentTable {
|
|
1566
|
-
id: Generated<number>;
|
|
1567
|
-
permission_id: number;
|
|
1568
|
-
assignable_type: string;
|
|
1569
|
-
assignable_id: string;
|
|
1570
|
-
}
|
|
1571
|
-
interface FileTable extends TimestampTable, SoftDeleteTable {
|
|
1572
|
-
id: Generated<number>;
|
|
1573
|
-
drive: string;
|
|
1574
|
-
mimetype: string;
|
|
1575
|
-
client_name: string;
|
|
1576
|
-
filename: string;
|
|
1577
|
-
purpose: string;
|
|
1578
|
-
public: boolean;
|
|
1579
|
-
}
|
|
1580
|
-
interface FileMetaTable extends TimestampTable, SoftDeleteTable {
|
|
1581
|
-
id: Generated<number>;
|
|
1582
|
-
file_id: number;
|
|
1583
|
-
name: string;
|
|
1584
|
-
value: string | null;
|
|
1585
|
-
}
|
|
1586
|
-
interface UploadSessionTable {
|
|
1587
|
-
id: Generated<number>;
|
|
1588
|
-
purpose: string;
|
|
1589
|
-
mime_types: string;
|
|
1590
|
-
max_size: number;
|
|
1591
|
-
expires_at: string;
|
|
1592
|
-
}
|
|
1593
|
-
interface JobTable extends TimestampTable {
|
|
1594
|
-
id: string;
|
|
1595
|
-
queue_id: string;
|
|
1596
|
-
status: 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
1597
|
-
data: string | null;
|
|
1598
|
-
result: string | null;
|
|
1599
|
-
error: string | null;
|
|
1600
|
-
}
|
|
1601
|
-
interface EmailTemplateTable extends TimestampTable, SoftDeleteTable {
|
|
1602
|
-
id: Generated<number>;
|
|
1603
|
-
name: string;
|
|
1604
|
-
subject: string;
|
|
1605
|
-
key: string;
|
|
1606
|
-
body: string | null;
|
|
1607
|
-
engine: string | null;
|
|
1608
|
-
}
|
|
1609
|
-
interface EmailTemplateMetaTable extends TimestampTable, SoftDeleteTable {
|
|
1610
|
-
id: Generated<number>;
|
|
1611
|
-
template_id: number;
|
|
1612
|
-
name: string;
|
|
1613
|
-
value: string;
|
|
1614
|
-
}
|
|
1615
|
-
interface OauthAccountTable extends TimestampTable, SoftDeleteTable {
|
|
1616
|
-
id: Generated<number>;
|
|
1617
|
-
user_id: number;
|
|
1618
|
-
provider: string;
|
|
1619
|
-
provider_user_id: string;
|
|
1620
|
-
provider_user_email: string | null;
|
|
1621
|
-
}
|
|
1622
|
-
interface OauthTokenTable {
|
|
1623
|
-
id: Generated<number>;
|
|
1624
|
-
user_id: number | null;
|
|
1625
|
-
provider: string | null;
|
|
1626
|
-
action: string;
|
|
1627
|
-
token: string;
|
|
1628
|
-
expires_at: string;
|
|
1629
|
-
metadata: string;
|
|
1630
|
-
}
|
|
1631
|
-
interface DatabaseContract {
|
|
1632
|
-
users: UserTable;
|
|
1633
|
-
user_metas: UserMetaTable;
|
|
1634
|
-
tokens: TokenTable;
|
|
1635
|
-
migrations: MigrationsTable;
|
|
1636
|
-
files: FileTable;
|
|
1637
|
-
file_metas: FileMetaTable;
|
|
1638
|
-
file_upload_sessions: UploadSessionTable;
|
|
1639
|
-
roles: RoleTable;
|
|
1640
|
-
user_roles: UserRoleTable;
|
|
1641
|
-
permissions: PermissionTable;
|
|
1642
|
-
permissions_assignments: PermissionAssignmentTable;
|
|
1643
|
-
jobs: JobTable;
|
|
1644
|
-
email_templates: EmailTemplateTable;
|
|
1645
|
-
email_template_metas: EmailTemplateMetaTable;
|
|
1646
|
-
oauth_accounts: OauthAccountTable;
|
|
1647
|
-
oauth_tokens: OauthTokenTable;
|
|
1648
|
-
}
|
|
1649
|
-
//#endregion
|
|
1650
|
-
//#region src/server/services/MetadataQueryService.d.ts
|
|
1651
|
-
interface Metadafilter {
|
|
1652
|
-
eq?: string;
|
|
1653
|
-
neq?: string;
|
|
1654
|
-
like?: string;
|
|
1655
|
-
nlike?: string;
|
|
1656
|
-
in?: string[];
|
|
1657
|
-
nin?: string[];
|
|
1658
|
-
gt?: string;
|
|
1659
|
-
gte?: string;
|
|
1660
|
-
lt?: string;
|
|
1661
|
-
lte?: string;
|
|
1662
|
-
is_null?: boolean;
|
|
1663
|
-
exists?: boolean;
|
|
1664
|
-
}
|
|
1665
|
-
interface MetadataQueryPayload {
|
|
1666
|
-
[key: string]: string | Metadafilter;
|
|
1667
|
-
}
|
|
1668
|
-
declare class MetadataQueryService<T extends keyof DatabaseContract> {
|
|
1669
|
-
private payload;
|
|
1670
|
-
private table;
|
|
1671
|
-
private foreignKey;
|
|
1672
|
-
private parentKey;
|
|
1673
|
-
constructor(payload: MetadataQueryPayload, table: T, foreignKey: keyof DatabaseContract[T], parentKey?: string);
|
|
1674
|
-
get needWhereIn(): boolean;
|
|
1675
|
-
get needWhereNotIn(): boolean;
|
|
1676
|
-
apply(dbQuery: any): any;
|
|
1677
|
-
private buildRowConditions;
|
|
1678
|
-
whereIn: <DBQuery>(eb: ExpressionBuilder$1<any, any>) => DBQuery;
|
|
1679
|
-
whereNotIn: <DBQuery>(eb: ExpressionBuilder$1<any, any>) => DBQuery;
|
|
1680
|
-
}
|
|
1681
|
-
//#endregion
|
|
1682
|
-
//#region src/server/services/MetadataService.d.ts
|
|
1683
|
-
declare class MetadataService {
|
|
1684
|
-
id: number;
|
|
1685
|
-
table: string;
|
|
1686
|
-
foreignKey: string;
|
|
1687
|
-
constructor(payload: Pick<MetadataService, 'table' | 'foreignKey' | 'id'>);
|
|
1688
|
-
static parse(value: any): any;
|
|
1689
|
-
static flatten(items: Array<{
|
|
1690
|
-
name: string;
|
|
1691
|
-
value: any;
|
|
1692
|
-
}>): Record<string, any>;
|
|
1693
|
-
get<T = any>(name: string): Promise<T | undefined>;
|
|
1694
|
-
get<T = any>(name: string, defaultValue: T): Promise<T>;
|
|
1695
|
-
set(name: string, value: any): Promise<void>;
|
|
1696
|
-
list(): Promise<Array<{
|
|
1697
|
-
name: string;
|
|
1698
|
-
value: any;
|
|
1699
|
-
}>>;
|
|
1700
|
-
all(): Promise<Record<string, any>>;
|
|
1701
|
-
}
|
|
1702
|
-
//#endregion
|
|
1703
|
-
//#region src/server/services/PluginIpcClient.d.ts
|
|
1704
|
-
type IpcMessage<T = any> = {
|
|
1705
|
-
id: string;
|
|
1706
|
-
event: string;
|
|
1707
|
-
data: T;
|
|
1708
|
-
};
|
|
1709
|
-
type IpcListener$1<T = any> = (data: T) => void;
|
|
1710
|
-
declare class PluginIpcClient {
|
|
1711
|
-
private listeners;
|
|
1712
|
-
constructor();
|
|
1713
|
-
on<T = any>(event: string, callback: IpcListener$1<T>): void;
|
|
1714
|
-
off<T = any>(event: string, callback: IpcListener$1<T>): void;
|
|
1715
|
-
emit<T = any>(event: string, data?: T): string;
|
|
1716
|
-
}
|
|
1717
|
-
//#endregion
|
|
1718
|
-
//#region src/server/services/PluginIpcHost.d.ts
|
|
1719
|
-
type IpcListener<T = any> = (data: T) => void;
|
|
1720
|
-
declare class PluginIpcHost {
|
|
1721
|
-
private readonly child;
|
|
1722
|
-
private listeners;
|
|
1723
|
-
constructor(child: ChildProcess);
|
|
1724
|
-
on<T = any>(event: string, callback: IpcListener<T>): void;
|
|
1725
|
-
off<T = any>(event: string, callback: IpcListener<T>): void;
|
|
1726
|
-
emit<T = any>(event: string, data?: T): string;
|
|
1727
|
-
}
|
|
1728
|
-
//#endregion
|
|
1729
|
-
//#region src/server/services/PluginRouter.d.ts
|
|
1730
|
-
type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
1731
|
-
interface RouteDefinition {
|
|
1732
|
-
method: HttpMethod;
|
|
1733
|
-
path: string;
|
|
1734
|
-
}
|
|
1735
|
-
interface RouteRequest {
|
|
1736
|
-
requestId: string;
|
|
1737
|
-
method: HttpMethod;
|
|
1738
|
-
path: string;
|
|
1739
|
-
body?: any;
|
|
1740
|
-
headers?: Record<string, string>;
|
|
1741
|
-
query?: Record<string, string>;
|
|
1742
|
-
params?: Record<string, string>;
|
|
1743
|
-
}
|
|
1744
|
-
interface RouteResponsePayload {
|
|
1745
|
-
requestId: string;
|
|
1746
|
-
status: number;
|
|
1747
|
-
body?: any;
|
|
1748
|
-
headers?: Record<string, string>;
|
|
1749
|
-
}
|
|
1750
|
-
interface RouteReply {
|
|
1751
|
-
status(code: number): RouteReply;
|
|
1752
|
-
send(body?: any): void;
|
|
1753
|
-
}
|
|
1754
|
-
type RouteHandler = (req: RouteRequest, reply: RouteReply) => void | Promise<void>;
|
|
1755
|
-
declare class PluginRouter {
|
|
1756
|
-
private readonly client;
|
|
1757
|
-
private routes;
|
|
1758
|
-
constructor(client: PluginIpcClient);
|
|
1759
|
-
private dispatch;
|
|
1760
|
-
private register;
|
|
1761
|
-
get(path: string, handler: RouteHandler): void;
|
|
1762
|
-
post(path: string, handler: RouteHandler): void;
|
|
1763
|
-
put(path: string, handler: RouteHandler): void;
|
|
1764
|
-
patch(path: string, handler: RouteHandler): void;
|
|
1765
|
-
delete(path: string, handler: RouteHandler): void;
|
|
1766
|
-
}
|
|
1767
|
-
//#endregion
|
|
1768
|
-
//#region src/server/services/RouterFileBaseRoutingService.d.ts
|
|
1769
|
-
declare class RouterFileBaseRoutingService {
|
|
1770
|
-
private directory;
|
|
1771
|
-
private prefix;
|
|
1772
|
-
private module?;
|
|
1773
|
-
private router;
|
|
1774
|
-
private logger;
|
|
1775
|
-
private routes;
|
|
1776
|
-
debug: boolean;
|
|
1777
|
-
setDirectory(directory: string): this;
|
|
1778
|
-
setPrefix(prefix: string): this;
|
|
1779
|
-
setRouter(router: RouterService): this;
|
|
1780
|
-
setModule(module: string): this;
|
|
1781
|
-
setLogger(logger: LoggerService): this;
|
|
1782
|
-
setDebug(debug: boolean): this;
|
|
1783
|
-
static create(directory: string): RouterFileBaseRoutingService;
|
|
1784
|
-
loadFiles(): Promise<void>;
|
|
1785
|
-
registerRoutes(): Promise<void>;
|
|
1786
|
-
load(): Promise<void>;
|
|
1787
|
-
}
|
|
1788
|
-
//#endregion
|
|
1789
|
-
//#region src/server/services/RouterRegisterService.d.ts
|
|
1790
|
-
interface RouterRegisterEntry {
|
|
1791
|
-
filepath: string;
|
|
1792
|
-
metadata: Record<string, any>;
|
|
1793
|
-
}
|
|
1794
|
-
declare class RouterRegister<C = {}> extends RouterService<C> {
|
|
1795
|
-
files: Map<string, RouterRegisterEntry>;
|
|
1796
|
-
dirs: Map<string, RouterRegisterEntry>;
|
|
1797
|
-
constructor(router?: Partial<RouterService<C>>);
|
|
1798
|
-
addFile(filename: string, metadata?: Record<string, any>): void;
|
|
1799
|
-
addDir(dirname: string, metadata?: Record<string, any>): void;
|
|
1800
|
-
private loadFile;
|
|
1801
|
-
private loadDir;
|
|
1802
|
-
load(): Promise<void>;
|
|
1803
|
-
}
|
|
1804
|
-
//#endregion
|
|
1805
|
-
//#region src/server/services/RouterResourceService.d.ts
|
|
1806
|
-
type ResourceMethod = 'index' | 'show' | 'store' | 'update' | 'destroy';
|
|
1807
|
-
interface RouterResourceOptions {
|
|
1808
|
-
middleware?: Partial<Record<ResourceMethod | 'all', Middleware>>;
|
|
1809
|
-
except?: ResourceMethod[];
|
|
1810
|
-
}
|
|
1811
|
-
declare const RouterResourceService_base: {
|
|
1812
|
-
new (...args: any[]): {
|
|
1813
|
-
listeners: Listener[];
|
|
1814
|
-
on(event: string, listener: (...args: any[]) => void): void;
|
|
1815
|
-
off(event: string, listener: (...args: any[]) => void): void;
|
|
1816
|
-
emit(event: string, ...args: any[]): void;
|
|
1817
|
-
emitAsync(event: string, ...args: any[]): Promise<void>;
|
|
1818
|
-
};
|
|
1819
|
-
} & Constructor;
|
|
1820
|
-
declare class RouterResourceService extends RouterResourceService_base {
|
|
1821
|
-
private options;
|
|
1822
|
-
constructor(options?: RouterResourceOptions);
|
|
1823
|
-
index(ctx: HttpContext): Promise<any>;
|
|
1824
|
-
show(ctx: HttpContext): Promise<any>;
|
|
1825
|
-
store(ctx: HttpContext): Promise<any>;
|
|
1826
|
-
update(ctx: HttpContext): Promise<any>;
|
|
1827
|
-
destroy(ctx: HttpContext): Promise<any>;
|
|
1828
|
-
private wrap;
|
|
1829
|
-
register(router: RouterService): void;
|
|
1830
|
-
}
|
|
1831
|
-
//#endregion
|
|
1832
|
-
//#region src/server/mixins/ModelConfigMixin.d.ts
|
|
1833
|
-
type ConfigModel = ReturnType<ReturnType<typeof ModelConfig>>;
|
|
1834
|
-
interface Options$1 {
|
|
1835
|
-
readonly?: boolean;
|
|
1836
|
-
}
|
|
1837
|
-
declare function ModelConfig(key: string, options?: Options$1): <TBase extends Constructor>(Base: TBase) => {
|
|
1838
|
-
new (...args: any[]): {};
|
|
1839
|
-
__isConfigModel: boolean;
|
|
1840
|
-
serialize<T>(this: new (...args: any[]) => T, row: any): Promise<T>;
|
|
1841
|
-
list<T>(this: new (...args: any[]) => T): Promise<T[]>;
|
|
1842
|
-
find<T>(this: new (...args: any[]) => T, id: string): Promise<T | null>;
|
|
1843
|
-
findOrFail<T>(this: new (...args: any[]) => T, id: string): Promise<T>;
|
|
1844
|
-
create<T>(this: new (...args: any[]) => T, item: T & {
|
|
1845
|
-
id: string;
|
|
1846
|
-
}): Promise<void>;
|
|
1847
|
-
update<T>(this: new (...args: any[]) => T, id: string, data: T): Promise<void>;
|
|
1848
|
-
updateOrCreate<T>(this: new (...args: any[]) => T, id: string, data: Partial<T>): Promise<void>;
|
|
1849
|
-
destroy<T>(this: new (...args: any[]) => T, id: string): Promise<void>;
|
|
1850
|
-
} & TBase;
|
|
1851
|
-
//#endregion
|
|
1852
|
-
//#region src/server/services/RouterResourceConfigService.d.ts
|
|
1853
|
-
declare class RouterResourceConfig extends RouterResourceService {
|
|
1854
|
-
private model;
|
|
1855
|
-
constructor(model: ConfigModel, options?: RouterResourceOptions);
|
|
1856
|
-
index(ctx: HttpContext): Promise<{
|
|
1857
|
-
page: number;
|
|
1858
|
-
total: number;
|
|
1859
|
-
total_pages: number;
|
|
1860
|
-
items: {}[];
|
|
1861
|
-
}>;
|
|
1862
|
-
show(ctx: HttpContext): Promise<{}>;
|
|
1863
|
-
store(ctx: HttpContext): Promise<{
|
|
1864
|
-
message: string;
|
|
1865
|
-
}>;
|
|
1866
|
-
update(ctx: HttpContext): Promise<void>;
|
|
1867
|
-
destroy(ctx: HttpContext): Promise<{
|
|
1868
|
-
success: boolean;
|
|
1869
|
-
}>;
|
|
1870
|
-
}
|
|
1871
|
-
//#endregion
|
|
1872
|
-
//#region src/server/services/ShellService.d.ts
|
|
1873
|
-
interface CommandOptions {
|
|
1874
|
-
cwd?: string;
|
|
1875
|
-
env?: NodeJS.ProcessEnv;
|
|
1876
|
-
shell?: boolean;
|
|
1877
|
-
}
|
|
1878
|
-
interface ShellServiceOptions {
|
|
1879
|
-
debug?: boolean;
|
|
1880
|
-
logger?: LoggerService;
|
|
1881
|
-
}
|
|
1882
|
-
declare class ShellService {
|
|
1883
|
-
static __container_entry_key: string;
|
|
1884
|
-
debug: boolean;
|
|
1885
|
-
logger: LoggerService;
|
|
1886
|
-
constructor(options?: ShellServiceOptions);
|
|
1887
|
-
/**
|
|
1888
|
-
* Execute a shell command and return a promise
|
|
1889
|
-
*/
|
|
1890
|
-
command(bin: string, args: string[], options?: CommandOptions): Promise<void>;
|
|
1891
|
-
/**
|
|
1892
|
-
* Execute a shell command and return the output as a string
|
|
1893
|
-
*/
|
|
1894
|
-
executeCommandWithOutput(bin: string, args: string[], options?: CommandOptions): Promise<string>;
|
|
1895
|
-
}
|
|
1896
|
-
//#endregion
|
|
1897
|
-
//#region src/server/repositories/ConfigRepository.d.ts
|
|
1898
|
-
declare class ConfigRepository<TEntity = Record<string, any>, TOptions = Record<string, any>> {
|
|
1899
|
-
protected config: ConfigService;
|
|
1900
|
-
protected key: string;
|
|
1901
|
-
protected primaryKey: string;
|
|
1902
|
-
constructor(config: ConfigService, key: string, primaryKey?: string);
|
|
1903
|
-
protected getItems(): TEntity[];
|
|
1904
|
-
protected setItems(items: TEntity[]): void;
|
|
1905
|
-
query(options?: TOptions): TEntity[];
|
|
1906
|
-
count(options?: TOptions): Promise<number>;
|
|
1907
|
-
findMany(options?: FindManyOptions & TOptions): Promise<TEntity[]>;
|
|
1908
|
-
findOne(options?: TOptions): Promise<TEntity | null>;
|
|
1909
|
-
findById(id: string, options?: TOptions): Promise<TEntity | null>;
|
|
1910
|
-
findByIdOrFail(id: string, options?: TOptions): Promise<TEntity>;
|
|
1911
|
-
paginate(options?: PaginateOptions$1 & TOptions): Promise<Pagination<TEntity>>;
|
|
1912
|
-
create(data: Partial<TEntity>): Promise<TEntity>;
|
|
1913
|
-
createMany(data: Partial<TEntity>[]): Promise<TEntity[]>;
|
|
1914
|
-
updateById(id: string, data: Partial<TEntity>): Promise<TEntity>;
|
|
1915
|
-
deleteById(id: string): Promise<void>;
|
|
1916
|
-
deleteMany(options?: DeleteManyOptions & TOptions): Promise<void>;
|
|
1917
|
-
}
|
|
1918
|
-
//#endregion
|
|
1919
|
-
//#region src/server/repositories/FileRepository.d.ts
|
|
1920
|
-
interface FileRepositoryQueryOptions {
|
|
1921
|
-
id?: number | number[];
|
|
1922
|
-
search?: string;
|
|
1923
|
-
purpose?: string[];
|
|
1924
|
-
client_name?: string[];
|
|
1925
|
-
metas?: MetadataQueryPayload;
|
|
1926
|
-
}
|
|
1927
|
-
declare class FileRepository extends DatabaseRepository<FileEntity, FileEntity['id'], FileRepositoryQueryOptions> {
|
|
1928
|
-
constructor(db: DatabaseRepository['db']);
|
|
1929
|
-
query(options?: FileRepositoryQueryOptions): any;
|
|
1930
|
-
}
|
|
1931
|
-
//#endregion
|
|
1932
|
-
//#region src/server/repositories/GitBranchRepository.d.ts
|
|
1933
|
-
interface GitBranchRepositoryOptions {
|
|
1934
|
-
cwd: string;
|
|
1935
|
-
shell?: ShellService;
|
|
1936
|
-
}
|
|
1937
|
-
declare class GitBranchRepository {
|
|
1938
|
-
cwd: string;
|
|
1939
|
-
shell: ShellService;
|
|
1940
|
-
constructor(options: GitBranchRepositoryOptions);
|
|
1941
|
-
list(): Promise<GitBranchEntity[]>;
|
|
1942
|
-
fetch(options: {
|
|
1943
|
-
remote: string;
|
|
1944
|
-
branch: string;
|
|
1945
|
-
localName?: string;
|
|
1946
|
-
}): Promise<void>;
|
|
1947
|
-
}
|
|
1948
|
-
//#endregion
|
|
1949
|
-
//#region src/server/repositories/GitCommitRepository.d.ts
|
|
1950
|
-
interface GitCommitRepositoryOptions {
|
|
1951
|
-
cwd: string;
|
|
1952
|
-
shell?: ShellService;
|
|
1953
|
-
}
|
|
1954
|
-
interface GitCommitListOptions {
|
|
1955
|
-
limit?: number;
|
|
1956
|
-
cursor?: string;
|
|
1957
|
-
branches?: string | string[];
|
|
1958
|
-
}
|
|
1959
|
-
interface GitCommitListResult {
|
|
1960
|
-
items: GitCommitEntity[];
|
|
1961
|
-
cursor_previous: string | null;
|
|
1962
|
-
cursor_current: string | null;
|
|
1963
|
-
cursor_next: string | null;
|
|
1964
|
-
}
|
|
1965
|
-
declare class GitCommitRepository {
|
|
1966
|
-
cwd: string;
|
|
1967
|
-
shell: ShellService;
|
|
1968
|
-
constructor(options: GitCommitRepositoryOptions);
|
|
1969
|
-
list(options?: GitCommitListOptions): Promise<GitCommitListResult>;
|
|
1970
|
-
checkout(hash: string): Promise<void>;
|
|
1971
|
-
}
|
|
1972
|
-
//#endregion
|
|
1973
|
-
//#region src/server/repositories/PermissionAssignmentRepository.d.ts
|
|
1974
|
-
interface PermissionAssignmentRepositoryQueryOptions {
|
|
1975
|
-
id?: number | number[];
|
|
1976
|
-
permissionId?: number | number[];
|
|
1977
|
-
assignableId?: string | string[];
|
|
1978
|
-
assignableType?: string | string[];
|
|
1979
|
-
}
|
|
1980
|
-
declare class PermissionAssignmentRepository extends DatabaseRepository<PermissionAssignment, PermissionAssignment['id'], PermissionAssignmentRepositoryQueryOptions> {
|
|
1981
|
-
constructor(db: DatabaseRepository['db']);
|
|
1982
|
-
query(options?: PermissionAssignmentRepositoryQueryOptions): any;
|
|
1983
|
-
}
|
|
1984
|
-
//#endregion
|
|
1985
|
-
//#region src/server/repositories/PermissionRepository.d.ts
|
|
1986
|
-
interface PermissionRepositoryQueryOptions {
|
|
1987
|
-
id?: number | number[];
|
|
1988
|
-
search?: string;
|
|
1989
|
-
}
|
|
1990
|
-
declare class PermissionRepository extends DatabaseRepository<Permission, Permission['id'], PermissionRepositoryQueryOptions> {
|
|
1991
|
-
constructor(db: DatabaseRepository['db']);
|
|
1992
|
-
query(options?: PermissionRepositoryQueryOptions): any;
|
|
1993
|
-
}
|
|
1994
|
-
//#endregion
|
|
1995
|
-
//#region src/server/mixins/DatabaseRepositoryInferMixin.d.ts
|
|
1996
|
-
interface IRepositoryTypes<TEntity = Record<string, any>, TPrimaryKeyType = any, TOptions = Record<string, any>> {
|
|
1997
|
-
count(options?: TOptions): Promise<number>;
|
|
1998
|
-
findMany(options?: TOptions & FindManyOptions): Promise<TEntity[]>;
|
|
1999
|
-
findById(id: TPrimaryKeyType, options?: TOptions): Promise<TEntity | null>;
|
|
2000
|
-
findByIdOrFail(id: TPrimaryKeyType, options?: TOptions): Promise<TEntity>;
|
|
2001
|
-
paginate(options?: TOptions & PaginateOptions$1): Promise<Pagination>;
|
|
2002
|
-
create(data: Partial<TEntity>, options?: TOptions): Promise<TEntity>;
|
|
2003
|
-
createMany(data: Partial<TEntity>[], options?: TOptions): Promise<TEntity[]>;
|
|
2004
|
-
deleteById(id: TPrimaryKeyType): Promise<void>;
|
|
2005
|
-
destroyMany(options?: TOptions): Promise<void>;
|
|
2006
|
-
}
|
|
2007
|
-
declare function DatabaseRepositoryInferMixin<TEntity = Record<string, any>, TPrimaryKeyType = any, TOptions = Record<string, any>>(): <TBase extends Constructor>(Base: TBase) => TBase & Constructor<IRepositoryTypes<TEntity, TPrimaryKeyType, TOptions>>;
|
|
2008
|
-
//#endregion
|
|
2009
|
-
//#region src/server/repositories/TokenRepository.d.ts
|
|
2010
|
-
interface TokenRepositoryQueryOptions {
|
|
2011
|
-
id?: number | number[];
|
|
2012
|
-
search?: string;
|
|
2013
|
-
type?: string | string[];
|
|
2014
|
-
}
|
|
2015
|
-
interface TokenRepositoryGenerateOptions {
|
|
2016
|
-
user_id: number;
|
|
2017
|
-
type?: string;
|
|
2018
|
-
expires_in_hours?: number;
|
|
2019
|
-
}
|
|
2020
|
-
declare const TokenRepository_base: Constructor & Constructor<IRepositoryTypes<{
|
|
2021
|
-
id: number;
|
|
2022
|
-
name: string | null;
|
|
2023
|
-
type: string;
|
|
2024
|
-
user_id: number;
|
|
2025
|
-
token: string;
|
|
2026
|
-
created_at: string;
|
|
2027
|
-
updated_at: string;
|
|
2028
|
-
expires_at: string;
|
|
2029
|
-
}, number, TokenRepositoryQueryOptions>> & Constructor<{}> & typeof DatabaseRepository;
|
|
2030
|
-
declare class TokenRepository extends TokenRepository_base {
|
|
2031
|
-
autoCreatedAt: boolean;
|
|
2032
|
-
autoUpdatedAt: boolean;
|
|
2033
|
-
constructor(db: DatabaseRepository['db']);
|
|
2034
|
-
query(options?: TokenRepositoryQueryOptions): any;
|
|
2035
|
-
findByToken(token: string): Promise<Token$1 | null>;
|
|
2036
|
-
generate(options: TokenRepositoryGenerateOptions): Promise<Record<string, any>>;
|
|
2037
|
-
}
|
|
2038
|
-
//#endregion
|
|
2039
|
-
//#region src/server/gateways/DatabaseGateway.d.ts
|
|
2040
|
-
declare class DatabaseGateway<DB> extends Kysely<DB> {
|
|
2041
|
-
static __container_entry_key: string;
|
|
2042
|
-
_dialect_identifier: string;
|
|
2043
|
-
}
|
|
2044
|
-
//#endregion
|
|
2045
|
-
//#region src/server/gateways/DriveFSGateway.d.ts
|
|
2046
|
-
interface DriveFSConfig {
|
|
2047
|
-
directory: string;
|
|
2048
|
-
}
|
|
2049
|
-
declare class DriveFS extends DriveBaseGateway {
|
|
2050
|
-
private schema;
|
|
2051
|
-
constructor(data: Pick<DriveBaseGateway, 'id' | 'name' | 'description' | 'config'>);
|
|
2052
|
-
get valid(): boolean;
|
|
2053
|
-
private checkValid;
|
|
2054
|
-
protected get rootPath(): string;
|
|
2055
|
-
exists: DriveBaseGateway['exists'];
|
|
2056
|
-
list: DriveBaseGateway['list'];
|
|
2057
|
-
find: DriveBaseGateway['find'];
|
|
2058
|
-
mkdir(filename: string): Promise<void>;
|
|
2059
|
-
read: DriveBaseGateway['read'];
|
|
2060
|
-
readStream(filename: string): Promise<fs.ReadStream>;
|
|
2061
|
-
write: DriveBaseGateway['write'];
|
|
2062
|
-
writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
|
|
2063
|
-
delete: DriveBaseGateway['delete'];
|
|
2064
|
-
url: DriveBaseGateway['url'];
|
|
2065
|
-
uploadUrl: DriveBaseGateway['uploadUrl'];
|
|
2066
|
-
}
|
|
2067
|
-
//#endregion
|
|
2068
|
-
//#region src/server/gateways/GitGateway.d.ts
|
|
2069
|
-
interface GitRepoInfo {
|
|
2070
|
-
directory: string;
|
|
2071
|
-
head: string | null;
|
|
2072
|
-
shortHash: string;
|
|
2073
|
-
isDetachedHead: boolean;
|
|
2074
|
-
remotes: string[];
|
|
2075
|
-
}
|
|
2076
|
-
interface GitGatewayOptions {
|
|
2077
|
-
cwd: string;
|
|
2078
|
-
sshKey?: string;
|
|
2079
|
-
sshKeyFile?: string;
|
|
2080
|
-
logger?: LoggerService;
|
|
2081
|
-
shell?: ShellService;
|
|
2082
|
-
debug?: boolean;
|
|
2083
|
-
}
|
|
2084
|
-
interface GitGatewayExecuteOptions {
|
|
2085
|
-
args: string;
|
|
2086
|
-
cwd?: string;
|
|
2087
|
-
sshKey?: string;
|
|
2088
|
-
sshKeyFile?: string;
|
|
2089
|
-
logger?: LoggerService;
|
|
2090
|
-
shell?: ShellService;
|
|
2091
|
-
debug?: boolean;
|
|
2092
|
-
}
|
|
2093
|
-
declare class GitGateway {
|
|
2094
|
-
private readonly cwd;
|
|
2095
|
-
private readonly sshKey?;
|
|
2096
|
-
private readonly sshKeyFile?;
|
|
2097
|
-
private readonly logger;
|
|
2098
|
-
private readonly debug;
|
|
2099
|
-
private readonly shell;
|
|
2100
|
-
constructor(options: GitGatewayOptions);
|
|
2101
|
-
static execute(options: GitGatewayExecuteOptions): Promise<string>;
|
|
2102
|
-
static clone(repoUrl: string, targetDir: string, options: Omit<GitGatewayOptions, 'cwd'>): Promise<GitGateway>;
|
|
2103
|
-
run(args: string): Promise<string>;
|
|
2104
|
-
tryRun(args: string): Promise<string | null>;
|
|
2105
|
-
checkout(ref: string): Promise<string>;
|
|
2106
|
-
fetchAll(): Promise<string>;
|
|
2107
|
-
pull(): Promise<void>;
|
|
2108
|
-
getInfo(): Promise<GitRepoInfo>;
|
|
2109
|
-
}
|
|
2110
|
-
//#endregion
|
|
2111
|
-
//#region src/server/mixins/MetadataMixin.d.ts
|
|
2112
|
-
declare function valueToString(value: any): string;
|
|
2113
|
-
declare function Metadata<Table extends keyof DatabaseContract>(metasTable: Table, foreignKey: keyof DatabaseContract[Table]): <TBase extends Constructor>(Base: TBase) => {
|
|
2114
|
-
new (...args: any[]): {
|
|
2115
|
-
get<T = any>(name: string): Promise<T | undefined>;
|
|
2116
|
-
get<T = any>(name: string, defaultValue: T): Promise<T>;
|
|
2117
|
-
set(name: string, value: any): Promise<void>;
|
|
2118
|
-
};
|
|
2119
|
-
} & TBase;
|
|
2120
|
-
//#endregion
|
|
2121
|
-
//#region src/server/facades/database.d.ts
|
|
2122
|
-
declare const database: DatabaseGateway<DatabaseContract>;
|
|
2123
|
-
//#endregion
|
|
2124
|
-
//#region src/server/queries/common.d.ts
|
|
2125
|
-
type SelectFrom<T extends keyof DatabaseContract> = ReturnType<typeof database.selectFrom<T>> | SelectQueryBuilder<DatabaseContract, T, any>;
|
|
2126
|
-
type InsertFrom<T extends keyof DatabaseContract> = ReturnType<typeof database.insertInto<T>>;
|
|
2127
|
-
type UpdateFrom<T extends keyof DatabaseContract> = ReturnType<typeof database.updateTable<T>>;
|
|
2128
|
-
type DeleteFrom<T extends keyof DatabaseContract> = ReturnType<typeof database.deleteFrom<T>>;
|
|
2129
|
-
type SelectBuilder<T extends keyof DatabaseContract> = SelectQueryBuilder<DatabaseContract, T, Selectable<DatabaseContract[T]>>;
|
|
2130
|
-
type ExpressionBuilder<T extends keyof DatabaseContract> = ExpressionBuilder$1<DatabaseContract, T>;
|
|
2131
|
-
declare const now: () => _$kysely.RawBuilder<string>;
|
|
2132
|
-
interface SerializeOptions<T extends keyof DatabaseContract> {
|
|
2133
|
-
serialize?: (row: Selectable<DatabaseContract[T]>) => any;
|
|
2134
|
-
}
|
|
2135
|
-
type SerializableResult<T extends keyof DatabaseContract, O extends SerializeOptions<T> | undefined> = O extends undefined ? Selectable<DatabaseContract[T]> : O extends {
|
|
2136
|
-
serialize: (row: Selectable<DatabaseContract[T]>) => infer R;
|
|
2137
|
-
} ? R : Selectable<DatabaseContract[T]>;
|
|
2138
|
-
//#endregion
|
|
2139
|
-
//#region src/server/queries/updateOrCreate.d.ts
|
|
2140
|
-
interface UpdateOrCreateOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
|
|
2141
|
-
debug?: boolean;
|
|
2142
|
-
where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
|
|
2143
|
-
select?: (qb: SelectFrom<T>) => SelectFrom<T>;
|
|
2144
|
-
update?: (qb: UpdateFrom<T>) => UpdateFrom<T>;
|
|
2145
|
-
values: Insertable<DatabaseContract[T]> | Insertable<DatabaseContract[T]>[];
|
|
2146
|
-
}
|
|
2147
|
-
declare function updateOrCreate<T extends keyof DatabaseContract, O extends UpdateOrCreateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>>;
|
|
2148
|
-
//#endregion
|
|
2149
|
-
//#region src/server/queries/list.d.ts
|
|
2150
|
-
interface ListOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
|
|
2151
|
-
limit?: number;
|
|
2152
|
-
offset?: number;
|
|
2153
|
-
debug?: boolean;
|
|
2154
|
-
where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
|
|
2155
|
-
query?: (qb: SelectFrom<T>) => SelectFrom<T>;
|
|
2156
|
-
}
|
|
2157
|
-
declare function list<T extends keyof DatabaseContract, O extends ListOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>[]>;
|
|
2158
|
-
//#endregion
|
|
2159
|
-
//#region src/server/queries/paginate.d.ts
|
|
2160
|
-
interface PaginateOptions<T extends keyof DatabaseContract> {
|
|
2161
|
-
debug?: boolean;
|
|
2162
|
-
page?: number;
|
|
2163
|
-
limit?: number;
|
|
2164
|
-
orderBy?: DatabaseContract[T] | (keyof DatabaseContract[T])[];
|
|
2165
|
-
orderDesc?: ('asc' | 'desc') | ('asc' | 'desc')[];
|
|
2166
|
-
where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
|
|
2167
|
-
serialize?: (row: Selectable<DatabaseContract[T]>) => any;
|
|
2168
|
-
query?: (qb: SelectFrom<T>) => any;
|
|
2169
|
-
}
|
|
2170
|
-
type PaginateResult<T extends keyof DatabaseContract, O extends PaginateOptions<T> | undefined> = O extends undefined ? Selectable<DatabaseContract[T]> : O extends {
|
|
2171
|
-
serialize: (row: Selectable<DatabaseContract[T]>) => infer R;
|
|
2172
|
-
} ? R : Selectable<DatabaseContract[T]>;
|
|
2173
|
-
declare function paginate<T extends keyof DatabaseContract, O extends PaginateOptions<T>>(table: T, options?: O): Promise<PaginationEntity<PaginateResult<T, O>>>;
|
|
2174
|
-
//#endregion
|
|
2175
|
-
//#region src/server/queries/count.d.ts
|
|
2176
|
-
interface CountOptions<T extends keyof DatabaseContract> {
|
|
2177
|
-
query?: (qb: SelectFrom<T>) => SelectFrom<T>;
|
|
2178
|
-
debug?: boolean;
|
|
2179
|
-
}
|
|
2180
|
-
declare function count<T extends keyof DatabaseContract, O extends CountOptions<T>>(table: T, options?: O): Promise<number>;
|
|
2181
|
-
//#endregion
|
|
2182
|
-
//#region src/server/queries/create.d.ts
|
|
2183
|
-
interface CreateOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
|
|
2184
|
-
values: Insertable<DatabaseContract[T]>;
|
|
2185
|
-
primaryKey?: string;
|
|
2186
|
-
normalize?: boolean | ((value: any) => any);
|
|
2187
|
-
}
|
|
2188
|
-
declare function createDefault<T extends keyof DatabaseContract, O extends CreateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>>;
|
|
2189
|
-
declare function createMysql<T extends keyof DatabaseContract, O extends CreateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>>;
|
|
2190
|
-
declare function create<T extends keyof DatabaseContract, O extends CreateOptions<T>>(table: T, options?: O): Promise<_$kysely.DrainOuterGeneric<{ [K_1 in (DatabaseContract[T] extends infer T_1 ? { [K in keyof T_1]: _$kysely.SelectType<T_1[K]> extends infer T_2 ? T_2 extends _$kysely.SelectType<T_1[K]> ? T_2 extends never ? never : K : never : never } : never)[keyof DatabaseContract[T]]]: _$kysely.SelectType<DatabaseContract[T][K_1]> }>>;
|
|
2191
|
-
//#endregion
|
|
2192
|
-
//#region src/server/queries/update.d.ts
|
|
2193
|
-
interface UpdateOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
|
|
2194
|
-
debug?: boolean;
|
|
2195
|
-
values: Updateable<DatabaseContract[T]>;
|
|
2196
|
-
normalize?: boolean | ((value: any) => any);
|
|
2197
|
-
where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
|
|
2198
|
-
query?: (qb: UpdateFrom<T>) => UpdateFrom<T>;
|
|
2199
|
-
}
|
|
2200
|
-
declare function updateDefault<T extends keyof DatabaseContract, O extends UpdateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>[]>;
|
|
2201
|
-
declare function updateMysql<T extends keyof DatabaseContract, O extends UpdateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>[]>;
|
|
2202
|
-
declare function update<T extends keyof DatabaseContract, O extends UpdateOptions<T>>(table: T, options?: O): Promise<_$kysely.DrainOuterGeneric<{ [K_1 in (DatabaseContract[T] extends infer T_1 ? { [K in keyof T_1]: _$kysely.SelectType<T_1[K]> extends infer T_2 ? T_2 extends _$kysely.SelectType<T_1[K]> ? T_2 extends never ? never : K : never : never } : never)[keyof DatabaseContract[T]]]: _$kysely.SelectType<DatabaseContract[T][K_1]> }>[]>;
|
|
2203
|
-
//#endregion
|
|
2204
|
-
//#region src/server/queries/destroy.d.ts
|
|
2205
|
-
type DeleteFrom$1<T extends keyof DatabaseContract> = ReturnType<typeof database.deleteFrom<T>>;
|
|
2206
|
-
interface DestroyOptions<T extends keyof DatabaseContract> {
|
|
2207
|
-
query?: (qb: DeleteFrom$1<T>) => DeleteFrom$1<T>;
|
|
2208
|
-
where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
|
|
2209
|
-
}
|
|
2210
|
-
declare function destroy<T extends keyof DatabaseContract, O extends DestroyOptions<T>>(table: T, options?: O): Promise<void>;
|
|
2211
|
-
//#endregion
|
|
2212
|
-
//#region src/server/queries/firstOrCreate.d.ts
|
|
2213
|
-
interface FirstOrCreateOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
|
|
2214
|
-
debug?: boolean;
|
|
2215
|
-
select?: (qb: SelectFrom<T>) => SelectFrom<T>;
|
|
2216
|
-
where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
|
|
2217
|
-
values: Insertable<DatabaseContract[T]> | Insertable<DatabaseContract[T]>[];
|
|
2218
|
-
}
|
|
2219
|
-
declare function firstOrCreate<T extends keyof DatabaseContract, O extends FirstOrCreateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>>;
|
|
2220
|
-
//#endregion
|
|
2221
|
-
//#region src/server/queries/findOne.d.ts
|
|
2222
|
-
interface FindOneOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
|
|
2223
|
-
name?: string;
|
|
2224
|
-
query?: (qb: SelectFrom<T>) => SelectFrom<T>;
|
|
2225
|
-
where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
|
|
2226
|
-
}
|
|
2227
|
-
declare function findOne<T extends keyof DatabaseContract, O extends FindOneOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O> | null>;
|
|
2228
|
-
declare function findOneOrFail<T extends keyof DatabaseContract, O extends FindOneOptions<T>>(table: T, options?: O): Promise<NonNullable<Awaited<SerializableResult<T, O>>>>;
|
|
2229
|
-
//#endregion
|
|
2230
|
-
//#region src/server/mixins/ModelMixin.d.ts
|
|
2231
|
-
type ModelListOptions<T extends keyof DatabaseContract> = Omit<ListOptions<T>, 'serialize'>;
|
|
2232
|
-
type ModelFindOptions<T extends keyof DatabaseContract> = Omit<FindOneOptions<T>, 'serialize' | 'orderBy'>;
|
|
2233
|
-
type ModelPaginateOptions<T extends keyof DatabaseContract> = Omit<PaginateOptions<T>, 'serialize'>;
|
|
2234
|
-
type ModelCountOptions<T extends keyof DatabaseContract> = CountOptions<T>;
|
|
2235
|
-
type ModelCreateOptions<T extends keyof DatabaseContract> = Omit<CreateOptions<T>, 'serialize'>;
|
|
2236
|
-
type ModelUpdateOptions<T extends keyof DatabaseContract> = Omit<UpdateOptions<T>, 'serialize'>;
|
|
2237
|
-
type ModelDestroyOptions<T extends keyof DatabaseContract> = DestroyOptions<T>;
|
|
2238
|
-
type ModelFirstOrCreateOptions<T extends keyof DatabaseContract> = Omit<FirstOrCreateOptions<T>, 'serialize'>;
|
|
2239
|
-
type ModelUpdateOrCreateOptions<T extends keyof DatabaseContract> = Omit<UpdateOrCreateOptions<T>, 'serialize'>;
|
|
2240
|
-
type ModelEntity = ReturnType<ReturnType<typeof ModelMixin<any>>>;
|
|
2241
|
-
declare function ModelMixin<Table extends keyof DatabaseContract>(table: Table, primaryKey?: keyof DatabaseContract[Table]): <TBase extends Constructor>(Base: TBase) => {
|
|
2242
|
-
new (...args: any[]): {
|
|
2243
|
-
save(): Promise<void>;
|
|
2244
|
-
destroy(): Promise<void>;
|
|
2245
|
-
softDelete(): Promise<void>;
|
|
2246
|
-
};
|
|
2247
|
-
__model: {
|
|
2248
|
-
table: Table;
|
|
2249
|
-
primaryKey: keyof DatabaseContract[Table];
|
|
2250
|
-
};
|
|
2251
|
-
serialize<T>(this: new () => T, row: any): Promise<T>;
|
|
2252
|
-
select(): SelectQueryBuilder<DatabaseContract, Table, any>;
|
|
2253
|
-
paginate<T>(this: new () => T, o?: ModelPaginateOptions<Table>): Promise<PaginationEntity<T>>;
|
|
2254
|
-
list<T>(this: new () => T, o?: ModelListOptions<Table>): Promise<T[]>;
|
|
2255
|
-
findOne<T>(this: new () => T, o?: ModelFindOptions<Table>): Promise<T | undefined>;
|
|
2256
|
-
findOneOrFail<T>(this: new () => T, o?: ModelFindOptions<Table>): Promise<T>;
|
|
2257
|
-
find<T>(this: new () => T, id: any): Promise<T | null>;
|
|
2258
|
-
findOrFail<T>(this: new () => T, id: any): Promise<T>;
|
|
2259
|
-
findBy<T>(this: new () => T, column: keyof DatabaseContract[Table], value: any): Promise<T>;
|
|
2260
|
-
findByOrFail<T>(this: new () => T, column: keyof DatabaseContract[Table], value: any): Promise<T>;
|
|
2261
|
-
exists<T>(this: new () => T, o?: ModelListOptions<Table>): Promise<boolean>;
|
|
2262
|
-
count<T>(this: new () => T, o?: ModelCountOptions<Table>): Promise<number>;
|
|
2263
|
-
create<T>(this: new () => T, payload: ModelCreateOptions<Table>["values"]): Promise<T>;
|
|
2264
|
-
createMany<T>(this: new () => T, values: Array<ModelCreateOptions<Table>["values"]>): Promise<T[]>;
|
|
2265
|
-
update<T>(this: new () => T, o: ModelUpdateOptions<Table>): Promise<T>;
|
|
2266
|
-
updateById<T>(this: new () => T, id: any, values: ModelUpdateOptions<Table>["values"], options?: {
|
|
2267
|
-
debug?: boolean;
|
|
2268
|
-
}): Promise<T>;
|
|
2269
|
-
destroy<T>(this: new () => T, o?: ModelDestroyOptions<Table>): Promise<void>;
|
|
2270
|
-
firstOrCreate<T>(this: new () => T, o: ModelFirstOrCreateOptions<Table>): T;
|
|
2271
|
-
updateOrCreate<T>(this: new (...args: any[]) => T, o: ModelUpdateOrCreateOptions<Table>): T;
|
|
2272
|
-
destroyById<T>(this: new () => T, id: any): Promise<void>;
|
|
2273
|
-
} & TBase;
|
|
2274
|
-
//#endregion
|
|
2275
|
-
//#region src/server/mixins/RelationsMixin.d.ts
|
|
2276
|
-
interface Relation {
|
|
2277
|
-
load(entities: any[]): Promise<void>;
|
|
2278
|
-
}
|
|
2279
|
-
declare function Relation<R extends Record<string, Relation>>(relations: R): <TBase extends Constructor>(Base: TBase) => {
|
|
2280
|
-
new (...args: any[]): {};
|
|
2281
|
-
load<T>(this: new () => T, entities: T | T[], names: keyof R | (keyof R)[]): Promise<void>;
|
|
2282
|
-
} & TBase;
|
|
2283
|
-
//#endregion
|
|
2284
|
-
//#region src/server/facades/config.d.ts
|
|
2285
|
-
declare const config: ConfigService;
|
|
2286
|
-
//#endregion
|
|
2287
|
-
//#region src/server/facades/container.d.ts
|
|
2288
|
-
declare const _default: ContainerService;
|
|
2289
|
-
//#endregion
|
|
2290
|
-
//#region src/server/facades/download.d.ts
|
|
2291
|
-
declare const download: DownloadService;
|
|
2292
|
-
//#endregion
|
|
2293
|
-
//#region src/server/facades/drive.d.ts
|
|
2294
|
-
declare const drive: DriveService;
|
|
2295
|
-
//#endregion
|
|
2296
|
-
//#region src/server/facades/emmitter.d.ts
|
|
2297
|
-
declare const emmitter: EmmitterService$1<Record<string, any>>;
|
|
2298
|
-
//#endregion
|
|
2299
|
-
//#region src/server/facades/encrypt.d.ts
|
|
2300
|
-
declare const encrypt: EncryptService;
|
|
2301
|
-
//#endregion
|
|
2302
|
-
//#region src/server/facades/env.d.ts
|
|
2303
|
-
declare const env: EnvService;
|
|
2304
|
-
//#endregion
|
|
2305
|
-
//#region src/server/facades/filesRepository.d.ts
|
|
2306
|
-
declare const fileRepository: FileRepository;
|
|
2307
|
-
//#endregion
|
|
2308
|
-
//#region src/server/facades/hasher.d.ts
|
|
2309
|
-
declare const hasher: HasherService;
|
|
2310
|
-
//#endregion
|
|
2311
|
-
//#region src/server/facades/http.d.ts
|
|
2312
|
-
declare const http: HttpService;
|
|
2313
|
-
//#endregion
|
|
2314
|
-
//#region src/server/facades/logger.d.ts
|
|
2315
|
-
declare const logger: LoggerService;
|
|
2316
|
-
//#endregion
|
|
2317
|
-
//#region src/server/facades/migrator.d.ts
|
|
2318
|
-
declare const migrator: MigratorService;
|
|
2319
|
-
//#endregion
|
|
2320
|
-
//#region src/server/facades/permissionAssignmentRepository.d.ts
|
|
2321
|
-
declare const permissionAssignmentRepository: PermissionAssignmentRepository;
|
|
2322
|
-
//#endregion
|
|
2323
|
-
//#region src/server/facades/permissionRepository.d.ts
|
|
2324
|
-
declare const permissionRepository: PermissionRepository;
|
|
2325
|
-
//#endregion
|
|
2326
|
-
//#region src/server/facades/router.d.ts
|
|
2327
|
-
declare const router: RouterService<HttpContext>;
|
|
2328
|
-
//#endregion
|
|
2329
|
-
//#region src/server/facades/scheduler.d.ts
|
|
2330
|
-
declare const scheduler: SchedulerService;
|
|
2331
|
-
//#endregion
|
|
2332
|
-
//#region src/server/facades/shell.d.ts
|
|
2333
|
-
declare const shell: ShellService;
|
|
2334
|
-
//#endregion
|
|
2335
|
-
//#region src/server/facades/tokenRepository.d.ts
|
|
2336
|
-
declare const tokenRepository: TokenRepository;
|
|
2337
|
-
//#endregion
|
|
2338
|
-
//#region src/server/facades/userRepository.d.ts
|
|
2339
|
-
declare const userRepository: UserRepository;
|
|
2340
|
-
//#endregion
|
|
2341
|
-
//#region src/server/contracts/KyselyContract.d.ts
|
|
2342
|
-
interface DatabaseKysely extends Kysely<DatabaseContract> {}
|
|
2343
|
-
//#endregion
|
|
2344
|
-
//#region src/server/utils/defineLoader.d.ts
|
|
2345
|
-
interface Loader<T = Record<string, any>> {
|
|
2346
|
-
load(entities: T[]): Promise<void>;
|
|
2347
|
-
}
|
|
2348
|
-
interface LoaderRecord<T = Record<string, any>> {
|
|
2349
|
-
[key: string]: Loader<T>;
|
|
2350
|
-
}
|
|
2351
|
-
declare function defineLoader<T = Record<string, any>>(loader: Loader<T>): Loader<T>;
|
|
2352
|
-
//#endregion
|
|
2353
|
-
//#region src/server/loaders/fileLoader.d.ts
|
|
2354
|
-
interface FileLoaderOptions$1 {
|
|
2355
|
-
fileIdProperty: string;
|
|
2356
|
-
fileProperty: string;
|
|
2357
|
-
}
|
|
2358
|
-
declare function createFileLoader<T extends Record<string, any>>(options: FileLoaderOptions$1): Loader<T>;
|
|
2359
|
-
//#endregion
|
|
2360
|
-
//#region src/server/loaders/fileUrlLoader.d.ts
|
|
2361
|
-
interface FileLoaderOptions {
|
|
2362
|
-
fileIdProperty?: string;
|
|
2363
|
-
fileUrlProperty?: string;
|
|
2364
|
-
}
|
|
2365
|
-
declare function loadFileUrl<T extends Record<string, any>>(entities: T[], options?: FileLoaderOptions): Promise<void>;
|
|
2366
|
-
declare function createFileUrlLoader<T extends Record<string, any>>(options?: FileLoaderOptions): Loader<T>;
|
|
2367
|
-
//#endregion
|
|
2368
|
-
//#region src/server/loaders/hasManyThroughLoader.d.ts
|
|
2369
|
-
type KeyOrFunction<T> = keyof T | ((entity: T) => any);
|
|
2370
|
-
interface HasManyThroughLoaderOptions<TEntity extends Record<string, any> = Record<string, any>, TPivotEntity extends Record<string, any> = Record<string, any>, TTargetEntity extends Record<string, any> = Record<string, any>> {
|
|
2371
|
-
key: string;
|
|
2372
|
-
pivot: {
|
|
2373
|
-
sourceKey: KeyOrFunction<TEntity>;
|
|
2374
|
-
targetKey: KeyOrFunction<TPivotEntity>;
|
|
2375
|
-
findEntities(ids: (string | number)[]): Promise<TPivotEntity[]>;
|
|
2376
|
-
};
|
|
2377
|
-
target: {
|
|
2378
|
-
sourceKey: KeyOrFunction<TPivotEntity>;
|
|
2379
|
-
targetKey: KeyOrFunction<TTargetEntity>;
|
|
2380
|
-
findEntities(ids: (string | number)[]): Promise<TTargetEntity[]>;
|
|
2381
|
-
};
|
|
2382
|
-
}
|
|
2383
|
-
declare function loadHasManyThrough<TEntity extends Record<string, any> = Record<string, any>, TPivotEntity extends Record<string, any> = Record<string, any>, TTargetEntity extends Record<string, any> = Record<string, any>>(payload: any | any[], options: HasManyThroughLoaderOptions<TEntity, TPivotEntity, TTargetEntity>): Promise<void>;
|
|
2384
|
-
declare function createHasManyThroughLoader<TEntity extends Record<string, any> = Record<string, any>, TPivotEntity extends Record<string, any> = Record<string, any>, TTargetEntity extends Record<string, any> = Record<string, any>>(options: HasManyThroughLoaderOptions<TEntity, TPivotEntity, TTargetEntity>): Loader<TEntity>;
|
|
2385
|
-
//#endregion
|
|
2386
|
-
//#region src/server/loaders/loadMetas.d.ts
|
|
2387
|
-
interface RepositoryMeta {
|
|
2388
|
-
name: string;
|
|
2389
|
-
value: any;
|
|
2390
|
-
}
|
|
2391
|
-
interface LoadMetasOptions {
|
|
2392
|
-
findMany(ids: any[]): Promise<RepositoryMeta[]>;
|
|
2393
|
-
entityIdKey?: string;
|
|
2394
|
-
foreignKey?: string;
|
|
2395
|
-
targetKey?: string;
|
|
2396
|
-
}
|
|
2397
|
-
declare function loadMetas<T extends Record<string, any>>(payload: T | T[], options: LoadMetasOptions): Promise<void>;
|
|
2398
|
-
declare function createMetasLoader<T extends Record<string, any>>(options: LoadMetasOptions): Loader<T>;
|
|
2399
|
-
//#endregion
|
|
2400
|
-
//#region src/server/loaders/permissionLoader.d.ts
|
|
2401
|
-
interface PermissionLoaderOptions {
|
|
2402
|
-
assignableType: string | ((e: any) => string);
|
|
2403
|
-
assignableId: string | ((e: any) => string);
|
|
2404
|
-
targetKey?: string;
|
|
2405
|
-
}
|
|
2406
|
-
declare function loadPermissions<T extends Record<string, any>>(payload: T | T[], options?: PermissionLoaderOptions): Promise<void>;
|
|
2407
|
-
declare function createPermissionLoader<T extends Record<string, any>>(options?: PermissionLoaderOptions): Loader<T>;
|
|
2408
|
-
//#endregion
|
|
2409
|
-
//#region src/server/loaders/userLoader.d.ts
|
|
2410
|
-
interface UserLoaderOptions {
|
|
2411
|
-
idKey?: string;
|
|
2412
|
-
targetKey?: string;
|
|
2413
|
-
}
|
|
2414
|
-
declare function loadUser<T extends Record<string, any>>(entities: T[], options?: UserLoaderOptions): Promise<void>;
|
|
2415
|
-
declare function createUserLoader<T extends Record<string, any>>(options?: UserLoaderOptions): Loader<T>;
|
|
2416
|
-
//#endregion
|
|
2417
|
-
//#region src/server/entities/DriveConfigEntity.d.ts
|
|
2418
|
-
declare const DriveConfig_base: typeof DriveConfig$1 & {
|
|
2419
|
-
new (...args: any[]): {};
|
|
2420
|
-
__isConfigModel: boolean;
|
|
2421
|
-
serialize<T>(this: new (...args: any[]) => T, row: any): Promise<T>;
|
|
2422
|
-
list<T>(this: new (...args: any[]) => T): Promise<T[]>;
|
|
2423
|
-
find<T>(this: new (...args: any[]) => T, id: string): Promise<T | null>;
|
|
2424
|
-
findOrFail<T>(this: new (...args: any[]) => T, id: string): Promise<T>;
|
|
2425
|
-
create<T>(this: new (...args: any[]) => T, item: T & {
|
|
2426
|
-
id: string;
|
|
2427
|
-
}): Promise<void>;
|
|
2428
|
-
update<T>(this: new (...args: any[]) => T, id: string, data: T): Promise<void>;
|
|
2429
|
-
updateOrCreate<T>(this: new (...args: any[]) => T, id: string, data: Partial<T>): Promise<void>;
|
|
2430
|
-
destroy<T>(this: new (...args: any[]) => T, id: string): Promise<void>;
|
|
2431
|
-
} & Constructor;
|
|
2432
|
-
declare class DriveConfig extends DriveConfig_base {
|
|
2433
|
-
static serialize<T>(this: new (...args: any[]) => T, row: any): Promise<T>;
|
|
2434
|
-
}
|
|
2435
|
-
//#endregion
|
|
2436
|
-
//#region src/server/entities/FileEntity.d.ts
|
|
2437
|
-
interface URLCache {
|
|
2438
|
-
url: string;
|
|
2439
|
-
expires: number;
|
|
2440
|
-
}
|
|
2441
|
-
declare const File_base: typeof FileEntity & {
|
|
2442
|
-
new (...args: any[]): {
|
|
2443
|
-
listeners: Listener[];
|
|
2444
|
-
on(event: string, listener: (...args: any[]) => void): void;
|
|
2445
|
-
off(event: string, listener: (...args: any[]) => void): void;
|
|
2446
|
-
emit(event: string, ...args: any[]): void;
|
|
2447
|
-
emitAsync(event: string, ...args: any[]): Promise<void>;
|
|
2448
|
-
};
|
|
2449
|
-
} & Constructor & {
|
|
2450
|
-
new (...args: any[]): {
|
|
2451
|
-
save(): Promise<void>;
|
|
2452
|
-
destroy(): Promise<void>;
|
|
2453
|
-
softDelete(): Promise<void>;
|
|
2454
|
-
};
|
|
2455
|
-
__model: {
|
|
2456
|
-
table: "files";
|
|
2457
|
-
primaryKey: keyof FileTable;
|
|
2458
|
-
};
|
|
2459
|
-
serialize<T>(this: new () => T, row: any): Promise<T>;
|
|
2460
|
-
select(): _$kysely.SelectQueryBuilder<DatabaseContract, "files", any>;
|
|
2461
|
-
paginate<T>(this: new () => T, o?: ModelPaginateOptions<"files"> | undefined): Promise<PaginationEntity<T>>;
|
|
2462
|
-
list<T>(this: new () => T, o?: ModelListOptions<"files"> | undefined): Promise<T[]>;
|
|
2463
|
-
findOne<T>(this: new () => T, o?: ModelFindOptions<"files"> | undefined): Promise<T | undefined>;
|
|
2464
|
-
findOneOrFail<T>(this: new () => T, o?: ModelFindOptions<"files"> | undefined): Promise<T>;
|
|
2465
|
-
find<T>(this: new () => T, id: any): Promise<T | null>;
|
|
2466
|
-
findOrFail<T>(this: new () => T, id: any): Promise<T>;
|
|
2467
|
-
findBy<T>(this: new () => T, column: keyof FileTable, value: any): Promise<T>;
|
|
2468
|
-
findByOrFail<T>(this: new () => T, column: keyof FileTable, value: any): Promise<T>;
|
|
2469
|
-
exists<T>(this: new () => T, o?: ModelListOptions<"files"> | undefined): Promise<boolean>;
|
|
2470
|
-
count<T>(this: new () => T, o?: ModelCountOptions<"files"> | undefined): Promise<number>;
|
|
2471
|
-
create<T>(this: new () => T, payload: object & {
|
|
2472
|
-
drive: string;
|
|
2473
|
-
mimetype: string;
|
|
2474
|
-
client_name: string;
|
|
2475
|
-
filename: string;
|
|
2476
|
-
purpose: string;
|
|
2477
|
-
public: boolean;
|
|
2478
|
-
} & {
|
|
2479
|
-
id?: number | undefined;
|
|
2480
|
-
created_at?: string | undefined;
|
|
2481
|
-
updated_at?: string | undefined;
|
|
2482
|
-
deleted_at?: string | Date | undefined;
|
|
2483
|
-
}): Promise<T>;
|
|
2484
|
-
createMany<T>(this: new () => T, values: (object & {
|
|
2485
|
-
drive: string;
|
|
2486
|
-
mimetype: string;
|
|
2487
|
-
client_name: string;
|
|
2488
|
-
filename: string;
|
|
2489
|
-
purpose: string;
|
|
2490
|
-
public: boolean;
|
|
2491
|
-
} & {
|
|
2492
|
-
id?: number | undefined;
|
|
2493
|
-
created_at?: string | undefined;
|
|
2494
|
-
updated_at?: string | undefined;
|
|
2495
|
-
deleted_at?: string | Date | undefined;
|
|
2496
|
-
})[]): Promise<T[]>;
|
|
2497
|
-
update<T>(this: new () => T, o: ModelUpdateOptions<"files">): Promise<T>;
|
|
2498
|
-
updateById<T>(this: new () => T, id: any, values: {
|
|
2499
|
-
id?: number | undefined;
|
|
2500
|
-
deleted_at?: string | Date | null | undefined;
|
|
2501
|
-
drive?: string | undefined;
|
|
2502
|
-
mimetype?: string | undefined;
|
|
2503
|
-
client_name?: string | undefined;
|
|
2504
|
-
filename?: string | undefined;
|
|
2505
|
-
purpose?: string | undefined;
|
|
2506
|
-
public?: boolean | undefined;
|
|
2507
|
-
}, options?: {
|
|
2508
|
-
debug?: boolean;
|
|
2509
|
-
} | undefined): Promise<T>;
|
|
2510
|
-
destroy<T>(this: new () => T, o?: ModelDestroyOptions<"files"> | undefined): Promise<void>;
|
|
2511
|
-
firstOrCreate<T>(this: new () => T, o: ModelFirstOrCreateOptions<"files">): T;
|
|
2512
|
-
updateOrCreate<T>(this: new (...args: any[]) => T, o: ModelUpdateOrCreateOptions<"files">): T;
|
|
2513
|
-
destroyById<T>(this: new () => T, id: any): Promise<void>;
|
|
2514
|
-
} & {
|
|
2515
|
-
new (...args: any[]): {};
|
|
2516
|
-
load<T>(this: new () => T, entities: T | T[], names: "metas" | "metas"[]): Promise<void>;
|
|
2517
|
-
} & {
|
|
2518
|
-
new (...args: any[]): {
|
|
2519
|
-
get<T = any>(name: string): Promise<T | undefined>;
|
|
2520
|
-
get<T = any>(name: string, defaultValue: T): Promise<T>;
|
|
2521
|
-
set(name: string, value: any): Promise<void>;
|
|
2522
|
-
};
|
|
2523
|
-
};
|
|
2524
|
-
declare class File extends File_base {
|
|
2525
|
-
static cache: Map<string, URLCache>;
|
|
2526
|
-
static has(filename: string): Promise<boolean>;
|
|
2527
|
-
static findByFilename(filename: string): Promise<File | undefined>;
|
|
2528
|
-
readStream(): Promise<NodeJS.ReadableStream>;
|
|
2529
|
-
read(): Promise<Uint8Array<ArrayBufferLike>>;
|
|
2530
|
-
loadUrl(options?: DriveUrlOptions): Promise<void>;
|
|
2531
|
-
static loadUrls(items: File[], options?: DriveUrlOptions): Promise<void>;
|
|
2532
|
-
static loadMetas(items: File[]): Promise<void>;
|
|
2533
|
-
deleteFromDrive(): Promise<void>;
|
|
2534
|
-
}
|
|
2535
|
-
//#endregion
|
|
2536
|
-
//#region src/server/entities/FileMetaEntity.d.ts
|
|
2537
|
-
declare const FileMeta_base: typeof FileMeta$1 & {
|
|
2538
|
-
new (...args: any[]): {
|
|
2539
|
-
save(): Promise<void>;
|
|
2540
|
-
destroy(): Promise<void>;
|
|
2541
|
-
softDelete(): Promise<void>;
|
|
2542
|
-
};
|
|
2543
|
-
__model: {
|
|
2544
|
-
table: "file_metas";
|
|
2545
|
-
primaryKey: keyof FileMetaTable;
|
|
2546
|
-
};
|
|
2547
|
-
serialize<T>(this: new () => T, row: any): Promise<T>;
|
|
2548
|
-
select(): _$kysely.SelectQueryBuilder<DatabaseContract, "file_metas", any>;
|
|
2549
|
-
paginate<T>(this: new () => T, o?: ModelPaginateOptions<"file_metas"> | undefined): Promise<PaginationEntity<T>>;
|
|
2550
|
-
list<T>(this: new () => T, o?: ModelListOptions<"file_metas"> | undefined): Promise<T[]>;
|
|
2551
|
-
findOne<T>(this: new () => T, o?: ModelFindOptions<"file_metas"> | undefined): Promise<T | undefined>;
|
|
2552
|
-
findOneOrFail<T>(this: new () => T, o?: ModelFindOptions<"file_metas"> | undefined): Promise<T>;
|
|
2553
|
-
find<T>(this: new () => T, id: any): Promise<T | null>;
|
|
2554
|
-
findOrFail<T>(this: new () => T, id: any): Promise<T>;
|
|
2555
|
-
findBy<T>(this: new () => T, column: keyof FileMetaTable, value: any): Promise<T>;
|
|
2556
|
-
findByOrFail<T>(this: new () => T, column: keyof FileMetaTable, value: any): Promise<T>;
|
|
2557
|
-
exists<T>(this: new () => T, o?: ModelListOptions<"file_metas"> | undefined): Promise<boolean>;
|
|
2558
|
-
count<T>(this: new () => T, o?: ModelCountOptions<"file_metas"> | undefined): Promise<number>;
|
|
2559
|
-
create<T>(this: new () => T, payload: object & {
|
|
2560
|
-
name: string;
|
|
2561
|
-
file_id: number;
|
|
2562
|
-
} & {
|
|
2563
|
-
id?: number | undefined;
|
|
2564
|
-
value?: string | null | undefined;
|
|
2565
|
-
created_at?: string | undefined;
|
|
2566
|
-
updated_at?: string | undefined;
|
|
2567
|
-
deleted_at?: string | Date | undefined;
|
|
2568
|
-
}): Promise<T>;
|
|
2569
|
-
createMany<T>(this: new () => T, values: (object & {
|
|
2570
|
-
name: string;
|
|
2571
|
-
file_id: number;
|
|
2572
|
-
} & {
|
|
2573
|
-
id?: number | undefined;
|
|
2574
|
-
value?: string | null | undefined;
|
|
2575
|
-
created_at?: string | undefined;
|
|
2576
|
-
updated_at?: string | undefined;
|
|
2577
|
-
deleted_at?: string | Date | undefined;
|
|
2578
|
-
})[]): Promise<T[]>;
|
|
2579
|
-
update<T>(this: new () => T, o: ModelUpdateOptions<"file_metas">): Promise<T>;
|
|
2580
|
-
updateById<T>(this: new () => T, id: any, values: {
|
|
2581
|
-
id?: number | undefined;
|
|
2582
|
-
value?: string | null | undefined;
|
|
2583
|
-
name?: string | undefined;
|
|
2584
|
-
deleted_at?: string | Date | null | undefined;
|
|
2585
|
-
file_id?: number | undefined;
|
|
2586
|
-
}, options?: {
|
|
2587
|
-
debug?: boolean;
|
|
2588
|
-
} | undefined): Promise<T>;
|
|
2589
|
-
destroy<T>(this: new () => T, o?: ModelDestroyOptions<"file_metas"> | undefined): Promise<void>;
|
|
2590
|
-
firstOrCreate<T>(this: new () => T, o: ModelFirstOrCreateOptions<"file_metas">): T;
|
|
2591
|
-
updateOrCreate<T>(this: new (...args: any[]) => T, o: ModelUpdateOrCreateOptions<"file_metas">): T;
|
|
2592
|
-
destroyById<T>(this: new () => T, id: any): Promise<void>;
|
|
2593
|
-
} & Constructor;
|
|
2594
|
-
declare class FileMeta extends FileMeta_base {}
|
|
2595
|
-
//#endregion
|
|
2596
|
-
//#region src/server/entities/ModuleEntity.d.ts
|
|
2597
|
-
declare const Module_base: typeof Module$1;
|
|
2598
|
-
declare class Module extends Module_base {
|
|
2599
|
-
get git(): GitGateway;
|
|
2600
|
-
makePath(...parts: string[]): string;
|
|
2601
|
-
staticPath(...parts: string[]): string;
|
|
2602
|
-
command: typeof shell.command;
|
|
2603
|
-
load(): void;
|
|
2604
|
-
findClientEntrypointFilename(context?: 'dev' | 'node' | 'browser'): string | null;
|
|
2605
|
-
}
|
|
2606
|
-
//#endregion
|
|
2607
|
-
//#region src/server/entities/PluginEntryEntity.d.ts
|
|
2608
|
-
declare const PluginEntryEntity_base: typeof PluginEntity$1;
|
|
2609
|
-
declare class PluginEntryEntity extends PluginEntryEntity_base {
|
|
2610
|
-
directory: string;
|
|
2611
|
-
makePath(...parts: string[]): string;
|
|
2612
|
-
set: typeof config.set;
|
|
2613
|
-
get: typeof config.get;
|
|
2614
|
-
get git(): GitGateway;
|
|
2615
|
-
get commits(): GitCommitRepository;
|
|
2616
|
-
get branches(): GitBranchRepository;
|
|
2617
|
-
}
|
|
2618
|
-
//#endregion
|
|
2619
|
-
//#region src/server/entities/PluginEntity.d.ts
|
|
2620
|
-
interface AddApiFolderOptions {
|
|
2621
|
-
prefix?: string;
|
|
2622
|
-
}
|
|
2623
|
-
declare class PluginEntity extends PluginEntryEntity {
|
|
2624
|
-
apiFolders: Map<string, AddApiFolderOptions>;
|
|
2625
|
-
apiDirectories: Set<string>;
|
|
2626
|
-
constructor();
|
|
2627
|
-
staticPath(...parts: string[]): string;
|
|
2628
|
-
load(): Promise<void>;
|
|
2629
|
-
onRouterRegistered(ctx: RouterEvents['router:registered']): Promise<void>;
|
|
2630
|
-
addApiFolder(directory: string, options?: AddApiFolderOptions): void;
|
|
2631
|
-
addRouterFolder(directory: string): void;
|
|
2632
|
-
static fromPluginDiscoverEntity<T>(this: new () => T, entity: PluginEntryEntity): T;
|
|
2633
|
-
}
|
|
2634
|
-
//#endregion
|
|
2635
|
-
//#region src/server/queries/exists.d.ts
|
|
2636
|
-
declare function exists<T extends keyof DatabaseContract, O extends ListOptions<T>>(table: T, options?: O): Promise<boolean>;
|
|
2637
|
-
//#endregion
|
|
2638
|
-
//#region src/server/queries/softDelete.d.ts
|
|
2639
|
-
type WhereCapable<QB> = {
|
|
2640
|
-
where: (...args: any[]) => QB;
|
|
2641
|
-
};
|
|
2642
|
-
type UpdateFrom$1<T extends keyof DatabaseContract> = ReturnType<typeof database.updateTable<T>>;
|
|
2643
|
-
interface SoftDeleteOptions<T extends keyof DatabaseContract> {
|
|
2644
|
-
serialize?: (row: Selectable<DatabaseContract[T]>) => any;
|
|
2645
|
-
query: (qb: UpdateFrom$1<T>) => UpdateFrom$1<T>;
|
|
2646
|
-
}
|
|
2647
|
-
type SoftDeleteResult<T extends keyof DatabaseContract, O extends SoftDeleteOptions<T> | undefined> = O extends undefined ? Selectable<DatabaseContract[T]>[] : O extends {
|
|
2648
|
-
serialize: (row: Selectable<DatabaseContract[T]>) => infer R;
|
|
2649
|
-
} ? R[] : Selectable<DatabaseContract[T]>[];
|
|
2650
|
-
declare function whereNotDeleted<QB extends WhereCapable<QB>>(qb: QB): QB;
|
|
2651
|
-
declare function undeleted(qb: ExpressionBuilder$1<any, any>): _$kysely.ExpressionWrapper<any, any, _$kysely.SqlBool>;
|
|
2652
|
-
declare namespace undeleted {
|
|
2653
|
-
var column: (col: string) => (qb: ExpressionBuilder$1<any, any>) => _$kysely.ExpressionWrapper<any, any, _$kysely.SqlBool>;
|
|
2654
|
-
}
|
|
2655
|
-
declare const deleted: (qb: ExpressionBuilder$1<any, any>) => _$kysely.ExpressionWrapper<any, any, _$kysely.SqlBool>;
|
|
2656
|
-
declare const addSoftDeleteColumn: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
|
|
2657
|
-
declare function softDelete<T extends keyof DatabaseContract, O extends SoftDeleteOptions<T>>(table: T, options?: O): Promise<SoftDeleteResult<T, O>>;
|
|
2658
|
-
//#endregion
|
|
2659
|
-
//#region src/server/queries/timestamp.d.ts
|
|
2660
|
-
declare const addCreatedColumn: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
|
|
2661
|
-
declare const addUpdatedColumn: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
|
|
2662
|
-
declare const addTimestampColumns: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
|
|
2663
|
-
//#endregion
|
|
2664
|
-
//#region src/server/relations/BaseRelation.d.ts
|
|
2665
|
-
declare class BaseRelation {
|
|
2666
|
-
load(entities: any[]): Promise<void>;
|
|
2667
|
-
}
|
|
2668
|
-
//#endregion
|
|
2669
|
-
//#region src/server/relations/BelongsToRelation.d.ts
|
|
2670
|
-
interface BelongsToOptions {
|
|
2671
|
-
table: string;
|
|
2672
|
-
tableKey: string;
|
|
2673
|
-
targetTable: string;
|
|
2674
|
-
targetKey: string;
|
|
2675
|
-
property: string;
|
|
2676
|
-
serialize?: (row: any) => any;
|
|
2677
|
-
}
|
|
2678
|
-
declare class BelongsTo extends BaseRelation {
|
|
2679
|
-
table: string;
|
|
2680
|
-
tableKey: string;
|
|
2681
|
-
targetTable: string;
|
|
2682
|
-
targetKey: string;
|
|
2683
|
-
property: string;
|
|
2684
|
-
serialize: (row: any) => any;
|
|
2685
|
-
constructor(options: BelongsToOptions);
|
|
2686
|
-
load(entities: any[]): Promise<void>;
|
|
2687
|
-
}
|
|
2688
|
-
//#endregion
|
|
2689
|
-
//#region src/server/relations/BelongsToFileRelation.d.ts
|
|
2690
|
-
declare class LoadFileMetas extends BaseRelation {
|
|
2691
|
-
fileKey: string;
|
|
2692
|
-
property: string;
|
|
2693
|
-
constructor(fileKey?: string, property?: string);
|
|
2694
|
-
load(entities: any[]): Promise<void>;
|
|
2695
|
-
}
|
|
2696
|
-
declare class LoadFileUrl extends BaseRelation {
|
|
2697
|
-
fileKey: string;
|
|
2698
|
-
property: string;
|
|
2699
|
-
constructor(fileKey?: string, property?: string);
|
|
2700
|
-
load(entities: any[]): Promise<void>;
|
|
2701
|
-
}
|
|
2702
|
-
declare class BelongsToFile extends BelongsTo {
|
|
2703
|
-
constructor(property?: string, targetKey?: string);
|
|
2704
|
-
url(property?: string): LoadFileUrl;
|
|
2705
|
-
metas(property?: string): LoadFileMetas;
|
|
2706
|
-
}
|
|
2707
|
-
//#endregion
|
|
2708
|
-
//#region src/server/relations/BelongsToUserRelation.d.ts
|
|
2709
|
-
declare class BelongsToUser extends BelongsTo {
|
|
2710
|
-
constructor();
|
|
2711
|
-
}
|
|
2712
|
-
//#endregion
|
|
2713
|
-
//#region src/server/relations/HasManyRelation.d.ts
|
|
2714
|
-
interface HasManyOptions {
|
|
2715
|
-
table: keyof DatabaseContract;
|
|
2716
|
-
tableKey: string;
|
|
2717
|
-
targetTable: keyof DatabaseContract;
|
|
2718
|
-
targetKey: string;
|
|
2719
|
-
property: string;
|
|
2720
|
-
serialize?: (row: any) => any;
|
|
2721
|
-
after?: (rows: any[]) => Promise<any>;
|
|
2722
|
-
}
|
|
2723
|
-
declare class HasMany {
|
|
2724
|
-
table: string;
|
|
2725
|
-
tableKey: string;
|
|
2726
|
-
targetTable: string;
|
|
2727
|
-
targetKey: string;
|
|
2728
|
-
property: string;
|
|
2729
|
-
serialize: (row: any) => any;
|
|
2730
|
-
after: (rows: any[]) => Promise<any>;
|
|
2731
|
-
constructor(options: HasManyOptions);
|
|
2732
|
-
load(entities: any[]): Promise<void>;
|
|
2733
|
-
}
|
|
2734
|
-
//#endregion
|
|
2735
|
-
//#region src/server/relations/HasMetasRelation.d.ts
|
|
2736
|
-
interface HasMetasOptions {
|
|
2737
|
-
table: keyof DatabaseContract;
|
|
2738
|
-
tableKey: string;
|
|
2739
|
-
targetTable: keyof DatabaseContract;
|
|
2740
|
-
targetKey: string;
|
|
2741
|
-
property: string;
|
|
2742
|
-
}
|
|
2743
|
-
declare class HasMetas {
|
|
2744
|
-
table: string;
|
|
2745
|
-
tableKey: string;
|
|
2746
|
-
targetTable: string;
|
|
2747
|
-
targetKey: string;
|
|
2748
|
-
property: string;
|
|
2749
|
-
constructor(options: HasMetasOptions);
|
|
2750
|
-
load(entities: any[]): Promise<void>;
|
|
2751
|
-
}
|
|
2752
|
-
//#endregion
|
|
2753
|
-
//#region src/server/relations/hasManyThroughRelation.d.ts
|
|
2754
|
-
interface HasManyThroughOptions {
|
|
2755
|
-
table: keyof DatabaseContract;
|
|
2756
|
-
tableKey: string;
|
|
2757
|
-
targetTable: keyof DatabaseContract;
|
|
2758
|
-
targetKey: string;
|
|
2759
|
-
pivotTable: keyof DatabaseContract;
|
|
2760
|
-
pivotSourceKey: string;
|
|
2761
|
-
pivotTargetKey: string;
|
|
2762
|
-
property: string;
|
|
2763
|
-
serialize?: (row: any) => any;
|
|
2764
|
-
after?: (rows: any[]) => Promise<any>;
|
|
2765
|
-
}
|
|
2766
|
-
declare class HasManyThrough extends BaseRelation {
|
|
2767
|
-
table: string;
|
|
2768
|
-
tableKey: string;
|
|
2769
|
-
targetTable: string;
|
|
2770
|
-
targetKey: string;
|
|
2771
|
-
pivotTable: string;
|
|
2772
|
-
pivotSourceKey: string;
|
|
2773
|
-
pivotTargetKey: string;
|
|
2774
|
-
property: string;
|
|
2775
|
-
serialize: (row: any) => any;
|
|
2776
|
-
after: (rows: any[]) => Promise<any>;
|
|
2777
|
-
constructor(options: HasManyThroughOptions);
|
|
2778
|
-
load(entities: any[]): Promise<void>;
|
|
2779
|
-
}
|
|
2780
|
-
//#endregion
|
|
2781
|
-
//#region src/server/middlewares/AuthMiddleware.d.ts
|
|
2782
|
-
type AuthMiddlewareContext = {
|
|
2783
|
-
user: UserEntity;
|
|
2784
|
-
token: Token;
|
|
2785
|
-
};
|
|
2786
|
-
declare class AuthMiddleware implements Middleware {
|
|
2787
|
-
handle(ctx: any): Promise<AuthMiddlewareContext>;
|
|
2788
|
-
}
|
|
2789
|
-
//#endregion
|
|
2790
|
-
//#region src/server/middlewares/AuthSilenceMiddleware.d.ts
|
|
2791
|
-
type AuthSilenceMiddlewareContext = {
|
|
2792
|
-
user?: UserEntity$1;
|
|
2793
|
-
token?: Token;
|
|
2794
|
-
};
|
|
2795
|
-
declare class AuthSilenceMiddleware implements Middleware {
|
|
2796
|
-
handle(ctx: HttpContext): Promise<AuthSilenceMiddlewareContext>;
|
|
2797
|
-
}
|
|
2798
|
-
//#endregion
|
|
2799
|
-
//#region src/server/middlewares/AuthorizationMiddleware.d.ts
|
|
2800
|
-
type AuthorizationContext = MiddlewareHandleResult<[AuthorizationMiddleware]>;
|
|
2801
|
-
interface AuthorizePermissionPayload {
|
|
2802
|
-
action: string;
|
|
2803
|
-
resource: string;
|
|
2804
|
-
conditions?: Record<string, any>;
|
|
2805
|
-
}
|
|
2806
|
-
declare class AuthorizePermission implements Middleware {
|
|
2807
|
-
private permissions;
|
|
2808
|
-
constructor(payload: AuthorizePermissionPayload | AuthorizePermissionPayload[]);
|
|
2809
|
-
handle(ctx: AuthorizationContext): Promise<void>;
|
|
2810
|
-
}
|
|
2811
|
-
declare class AuthorizationMiddleware implements Middleware {
|
|
2812
|
-
handle(ctx: AuthSilenceMiddlewareContext): Promise<{
|
|
2813
|
-
acl: Acl;
|
|
2814
|
-
}>;
|
|
2815
|
-
static create(payload: AuthorizePermissionPayload | AuthorizePermissionPayload[]): AuthorizePermission;
|
|
2816
|
-
}
|
|
2817
|
-
//#endregion
|
|
2818
|
-
//#region src/server/utils/addIdColumn.d.ts
|
|
2819
|
-
declare module 'kysely' {
|
|
2820
|
-
interface CreateTableBuilder<TB extends string, C extends string = never> {
|
|
2821
|
-
addIdColumn<CN extends string = 'id'>(col?: CN): CreateTableBuilder<TB, C | CN>;
|
|
2822
|
-
}
|
|
2823
|
-
}
|
|
2824
|
-
//#endregion
|
|
2825
|
-
//#region src/server/utils/addSoftDeleteColumn.d.ts
|
|
2826
|
-
declare module 'kysely' {
|
|
2827
|
-
interface CreateTableBuilder<TB extends string, C extends string = never> {
|
|
2828
|
-
addSoftDeleteColumn(): CreateTableBuilder<TB, C | 'deleted_at'>;
|
|
2829
|
-
}
|
|
2830
|
-
}
|
|
2831
|
-
//#endregion
|
|
2832
|
-
//#region src/server/utils/addTimestampColumns.d.ts
|
|
2833
|
-
declare module 'kysely' {
|
|
2834
|
-
interface CreateTableBuilder<TB extends string, C extends string = never> {
|
|
2835
|
-
addTimestampColumns(): CreateTableBuilder<TB, C | 'created_at' | 'updated_at'>;
|
|
2836
|
-
addCreatedColumn(): CreateTableBuilder<TB, C | 'created_at'>;
|
|
2837
|
-
addUpdatedColumn(): CreateTableBuilder<TB, C | 'updated_at'>;
|
|
2838
|
-
}
|
|
2839
|
-
}
|
|
2840
|
-
//#endregion
|
|
2841
|
-
//#region src/server/utils/basePath.d.ts
|
|
2842
|
-
declare function basePath(...args: string[]): string;
|
|
2843
|
-
declare function storagePath(...args: string[]): string;
|
|
2844
|
-
declare function relativeToBasePath(...args: string[]): string;
|
|
2845
|
-
declare function tmpPath(...args: string[]): string;
|
|
2846
|
-
//#endregion
|
|
2847
|
-
//#region src/server/utils/createLoaderFactory.d.ts
|
|
2848
|
-
declare function createLoaderFactory<E extends Record<string, any> = Record<string, any>, R extends LoaderRecord<E> = LoaderRecord<E>>(loaders: R): {
|
|
2849
|
-
keys: (keyof R)[];
|
|
2850
|
-
loaders: R;
|
|
2851
|
-
load: (entities: E | E[], names: keyof R | (keyof R)[]) => Promise<void>;
|
|
2852
|
-
};
|
|
2853
|
-
//#endregion
|
|
2854
|
-
//#region src/server/utils/cuid.d.ts
|
|
2855
|
-
declare function cuid(): string;
|
|
2856
|
-
//#endregion
|
|
2857
|
-
//#region src/server/utils/defineHandler.d.ts
|
|
2858
|
-
interface Handler {
|
|
2859
|
-
(ctx: HttpContext): Promise<any> | (() => any);
|
|
2860
|
-
}
|
|
2861
|
-
declare function defineHandler(handler: Handler): Handler;
|
|
2862
|
-
//#endregion
|
|
2863
|
-
//#region src/server/utils/generateIndexFile.d.ts
|
|
2864
|
-
declare function generateIndexFile(options: any): void;
|
|
2865
|
-
//#endregion
|
|
2866
|
-
//#region src/server/utils/importAll.d.ts
|
|
2867
|
-
interface Options {
|
|
2868
|
-
cache?: boolean;
|
|
2869
|
-
onBeforeImport?: (ctx: {
|
|
2870
|
-
filename: string;
|
|
2871
|
-
}) => void | Promise<void>;
|
|
2872
|
-
onAfterImport?: (ctx: {
|
|
2873
|
-
filename: string;
|
|
2874
|
-
module: any;
|
|
2875
|
-
}) => void | Promise<void>;
|
|
2876
|
-
onError?: (ctx: {
|
|
2877
|
-
filename: string;
|
|
2878
|
-
error: Error;
|
|
2879
|
-
}) => void | Promise<void>;
|
|
2880
|
-
exclude?: string[];
|
|
2881
|
-
}
|
|
2882
|
-
declare function importFiles(files: string[], options?: Options): Promise<Record<string, any>>;
|
|
2883
|
-
declare function importGlob(pattern: string, options?: Options): Promise<Record<string, any>>;
|
|
2884
|
-
declare function importAll(directory: string, options?: Options): Promise<Record<string, any>>;
|
|
2885
|
-
//#endregion
|
|
2886
|
-
//#region src/server/utils/importOne.d.ts
|
|
2887
|
-
declare function importOne(filenames: string[]): Promise<any>;
|
|
2888
|
-
//#endregion
|
|
2889
|
-
export { Acl as AclEntity, AddOptions, AuthMiddleware, AuthMiddlewareContext, AuthSilenceMiddleware, AuthSilenceMiddlewareContext, AuthorizationContext, AuthorizationMiddleware, AuthorizePermission, AuthorizePermissionPayload, BaseRelation, BelongsToFile as BelongsToFileRelation, BelongsTo as BelongsToRelation, BelongsToUser as BelongsToUserRelation, CliCommand, CliEvents, CliService, ArteTesterService as CliTesterService, CliWrapperService, ConfigFSService, ConfigFSServiceOptions, ConfigManagerOptions, ConfigManagerService, ConfigModel, ConfigRepository, ConfigS3Service, CookieMapEntity, CountOptions, CreateOptions, DatabaseContract, DatabaseGateway, DatabaseKysely, DatabaseRepository, DatabaseRepositoryInferMixin, DeleteFrom, DeleteManyOptions, DestroyOptions, DownloadService, DownloadedFetchOptions, DriveBaseGateway, DriveConfig as DriveConfigEntity, DriveContract, DriveFSConfig, DriveFS as DriveFSGateway, DriveS3 as DriveS3Gateway, DriveService, DriveUploadUrlOptions, DriveUrlOptions, EmailTemplateMetaTable, EmailTemplateTable, EmmitterService, EncryptService, EnvService, EventContract, ExceptionService, ExceptionServiceOptions, ExpressionBuilder, File as FileEntity, FileMeta as FileMetaEntity, FileMetaTable, FileRepository, FileRepositoryQueryOptions, FileTable, FindManyOptions, FindOneOptions, FirstOrCreateOptions, GitBranchRepository, GitBranchRepositoryOptions, GitCommitListOptions, GitCommitListResult, GitCommitRepository, GitCommitRepositoryOptions, GitGateway, GitGatewayOptions, GitRepoInfo, HandleResult, HasMany as HasManyRelation, HasManyThroughLoaderOptions, HasMetas as HasMetasRelation, HasherService, HttpContext, HttpMethod, HttpService, HttpServiceOptions, HttpTesterService, HttpTesterServiceOptions, IRepositoryTypes, InsertFrom, IpcMessage, JobTable, LifecycleService, ListOptions, LoadFileMetas, LoadFileUrl, Loader, LoaderRecord, Metadafilter, Metadata as MetadataMixin, MetadataQueryPayload, MetadataQueryService, MetadataService, Middleware, MiddlewareHandleResult, Migration, MigrationEntity, MigrationEntiyData, MigrationSource, MigrationsTable, MigratorService, MigratorServiceEvents, MigratorServiceOptions, ModelConfig as ModelConfigMixin, ModelCountOptions, ModelCreateOptions, ModelDestroyOptions, ModelEntity, ModelFindOptions, ModelFirstOrCreateOptions, ModelListOptions, ModelMixin, ModelPaginateOptions, ModelUpdateOptions, ModelUpdateOrCreateOptions, Module as ModuleEntity, OauthAccountTable, OauthTokenTable, ObjectOptions, PageRequestContextEntity, PageRequestContextEntityOptions, PaginateResult, Pagination, PermissionAssignmentRepository, PermissionAssignmentRepositoryQueryOptions, PermissionAssignmentTable, PermissionRepository, PermissionRepositoryQueryOptions, PermissionTable, PluginEntity, PluginEntryEntity, PluginIpcClient, PluginIpcHost, PluginRouter, Redirect, Relation as RelationsMixin, Request, ResourceMethod, Response, RoleTable, RouteDefinition, Route as RouteEntity, RouteHandler, RouteReply, RouteRequest, RouteResponsePayload, RouterEvents, RouterFileBaseRoutingService, RouterRegisterEntry, RouterRegister as RouterRegisterService, RouterResourceConfig as RouterResourceConfigService, RouterResourceOptions, RouterResourceService, RouterService, RoutineEntity, RoutineEntityOptions, RoutineHandler, S3DriveConfig, SchedulerEvents, SchedulerService, SchedulerServiceOptions, SeederEntity, SeederEntiyData, SeederEvents, SeederResult, SeeederService as SeederService, SeederServiceOptions, SeederSource, SelectBuilder, SelectFrom, SerializableResult, SerializeOptions, ShellService, ShellServiceOptions, SoftDeleteOptions, SoftDeleteResult, TableColumn, TokenRepository, TokenRepositoryGenerateOptions, TokenRepositoryQueryOptions, TokenTable, UpdateFrom, UpdateOptions, UpdateOrCreateOptions, UploadSessionTable, UploadUrlOptions, UrlOptions, UserMetaTable, UserRepository, UserRepositoryEvents, UserRepositoryQueryOptions, UserRoleTable, UserTable, addCreatedColumn, addSoftDeleteColumn, addTimestampColumns, addUpdatedColumn, basePath, config, _default as container, count, create, createDefault, createFileLoader, createFileUrlLoader, createHasManyThroughLoader, createLoaderFactory, createMetasLoader, createMysql, createPermissionLoader, createUserLoader, cuid, database, defineHandler, defineLoader, deleted, destroy, download, drive, emmitter, encrypt, env, exists, fileRepository as filesRepository, findOne, findOneOrFail, firstOrCreate, generateIndexFile, HasManyThrough as hasManyThroughRelation, hasher, http, importAll, importFiles, importGlob, importOne, list, loadFileUrl, loadHasManyThrough, loadMetas, loadPermissions, loadUser, logger, migrator, now, paginate, permissionAssignmentRepository, permissionRepository, printObject, printTable, relativeToBasePath, router, scheduler, shell, softDelete, storagePath, tmpPath, tokenRepository, undeleted, update, updateDefault, updateMysql, updateOrCreate, userRepository, valueToString, whereNotDeleted };
|
|
2890
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci91dGlscy9wcmludFRhYmxlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvQ29udGFpbmVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9MaWZlY3ljbGVIb29rLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3V0aWxzL2NvbXBvc2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zY2hlbWFzL3Blcm1pc3Npb25Bc3NpZ25tZW50U2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvblNjaGVtYS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zY2hlbWFzL3Rva2VuU2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL21peGlucy9Ib29rc01peGluLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1Blcm1pc3Npb25FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvQWNsRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Ecml2ZUNvbmZpZ0VudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Ecml2ZUVudHJ5RW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0ZpbGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvRmlsZU1ldGFFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvR2l0QnJhbmNoRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0dpdENvbW1pdEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVNYW5pZmVzdEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUGFnaW5hdGlvbkVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUm9sZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Vc2VyRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0NsaVNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvQ2xpVGVzdGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9DbGlXcmFwcGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Db25maWdGU1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2NoZW1hcy9lbnZTY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvRW52U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Db25maWdNYW5hZ2VyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9Ecml2ZUJhc2VHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2dhdGV3YXlzL0RyaXZlUzNHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0NvbmZpZ1MzU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Eb3dubG9hZFNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0RyaXZlQ29udHJhY3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvRHJpdmVTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QYWdlUmVxdWVzdENvbnRleHRFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvVXNlclJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvTWlncmF0aW9uRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL01pZ3JhdG9yU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9BY2xFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0h0dHBDb250ZXh0Q29udHJhY3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL1JvdXRlckNvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL1JvdXRlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1JvdXRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvUm91dGluZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9TY2hlZHVsZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL1NlZWRlckVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9TZWVkZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2NvbnRyYWN0cy9FdmVudENvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9FbmNyeXB0U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9FeGNlcHRpb25TZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0hhc2hlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvSHR0cFNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvSHR0cFRlc3RlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9NZXRhZGF0YVF1ZXJ5U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9NZXRhZGF0YVNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUGx1Z2luSXBjQ2xpZW50LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1BsdWdpbklwY0hvc3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUGx1Z2luUm91dGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1JvdXRlckZpbGVCYXNlUm91dGluZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUm91dGVyUmVnaXN0ZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1JvdXRlclJlc291cmNlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9taXhpbnMvTW9kZWxDb25maWdNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJSZXNvdXJjZUNvbmZpZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvU2hlbGxTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9Db25maWdSZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9GaWxlUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvR2l0QnJhbmNoUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvR2l0Q29tbWl0UmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvUGVybWlzc2lvbkFzc2lnbm1lbnRSZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9QZXJtaXNzaW9uUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9taXhpbnMvRGF0YWJhc2VSZXBvc2l0b3J5SW5mZXJNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvVG9rZW5SZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2dhdGV3YXlzL0RhdGFiYXNlR2F0ZXdheS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9Ecml2ZUZTR2F0ZXdheS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9HaXRHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9NZXRhZGF0YU1peGluLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvZGF0YWJhc2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9jb21tb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy91cGRhdGVPckNyZWF0ZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL2xpc3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9wYWdpbmF0ZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL2NvdW50LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvY3JlYXRlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvdXBkYXRlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvZGVzdHJveS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL2ZpcnN0T3JDcmVhdGUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9maW5kT25lLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9Nb2RlbE1peGluLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9SZWxhdGlvbnNNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2NvbmZpZy5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2NvbnRhaW5lci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2Rvd25sb2FkLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvZHJpdmUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9lbW1pdHRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2VuY3J5cHQuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9lbnYuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9maWxlc1JlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9oYXNoZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9odHRwLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvbG9nZ2VyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvbWlncmF0b3IuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9wZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9wZXJtaXNzaW9uUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL3JvdXRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL3NjaGVkdWxlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL3NoZWxsLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvdG9rZW5SZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvdXNlclJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0t5c2VseUNvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9sb2FkZXJzL2ZpbGVMb2FkZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbG9hZGVycy9maWxlVXJsTG9hZGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2xvYWRlcnMvaGFzTWFueVRocm91Z2hMb2FkZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbG9hZGVycy9sb2FkTWV0YXMuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbG9hZGVycy9wZXJtaXNzaW9uTG9hZGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2xvYWRlcnMvdXNlckxvYWRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9Ecml2ZUNvbmZpZ0VudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9GaWxlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0ZpbGVNZXRhRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL01vZHVsZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QbHVnaW5FbnRyeUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9leGlzdHMuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9zb2Z0RGVsZXRlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvdGltZXN0YW1wLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlbGF0aW9ucy9CYXNlUmVsYXRpb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVsYXRpb25zL0JlbG9uZ3NUb1JlbGF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlbGF0aW9ucy9CZWxvbmdzVG9GaWxlUmVsYXRpb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVsYXRpb25zL0JlbG9uZ3NUb1VzZXJSZWxhdGlvbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZWxhdGlvbnMvSGFzTWFueVJlbGF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlbGF0aW9ucy9IYXNNZXRhc1JlbGF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlbGF0aW9ucy9oYXNNYW55VGhyb3VnaFJlbGF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21pZGRsZXdhcmVzL0F1dGhNaWRkbGV3YXJlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21pZGRsZXdhcmVzL0F1dGhTaWxlbmNlTWlkZGxld2FyZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9taWRkbGV3YXJlcy9BdXRob3JpemF0aW9uTWlkZGxld2FyZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9hZGRJZENvbHVtbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9hZGRTb2Z0RGVsZXRlQ29sdW1uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2FkZFRpbWVzdGFtcENvbHVtbnMuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvYmFzZVBhdGguZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvY3JlYXRlTG9hZGVyRmFjdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9jdWlkLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2RlZmluZUhhbmRsZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvZ2VuZXJhdGVJbmRleEZpbGUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvaW1wb3J0QWxsLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2ltcG9ydE9uZS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW4ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZyB8ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpO1xuICAgIHdpZHRoPzogbnVtYmVyO1xuICAgIHJlYWxXaWR0aD86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0T3B0aW9ucyB7XG4gICAga2V5V2lkdGg/OiBudW1iZXI7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcmludE9iamVjdChvdXRwdXQ/OiBhbnksIG9wdGlvbnM/OiBPYmplY3RPcHRpb25zKTogdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHByaW50VGFibGUoaXRlbXM6IGFueVtdLCBjb2x1bW5zPzogVGFibGVDb2x1bW5bXSk6IHZvaWQ7XG4iLCJpbnRlcmZhY2UgRW50cnkge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgc291cmNlOiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgZW50cmllczogTWFwPHN0cmluZywgRW50cnk+O1xuICAgIGNvbnN0cnVjdG9yKCk7XG4gICAgbGlzdCgpOiBFbnRyeVtdO1xuICAgIHBhcnNlVmFsdWUodmFsdWU6IGFueSk6IGFueTtcbiAgICBsb2FkRnJvbVJlY29yZChyZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgbG9hZEZyb21FbnRyaWVzKGVudHJpZXM6IFtzdHJpbmcsIGFueV1bXSwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZ2V0PFQgPSBhbnkgfCB1bmRlZmluZWQ+KGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBUO1xuICAgIGdldE9uZTxUID0gYW55IHwgdW5kZWZpbmVkPihrZXlzOiBzdHJpbmdbXSwgZGVmYXVsdFZhbHVlPzogYW55KTogVDtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgdW5zZXQoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgIGNsZWFyKCk6IHZvaWQ7XG4gICAgZHVtcCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuZXhwb3J0IHt9O1xuIiwidHlwZSBDb25zdHJ1Y3RvcjxUID0gb2JqZWN0PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG50eXBlIEVudHJ5S2V5ID0gc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250YWluZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGVudHJpZXM7XG4gICAgbG9hZEZyb21SZWNvcmQocmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHByaXZhdGUgZ2V0S2V5O1xuICAgIHNldChwYXlsb2FkOiBFbnRyeUtleSwgdmFsdWU6IGFueSk6IHRoaXM7XG4gICAgaGFzKHBheWxvYWQ6IEVudHJ5S2V5KTogYm9vbGVhbjtcbiAgICBnZXQ8VD4ocGF5bG9hZDogRW50cnlLZXkpOiBUO1xuICAgIHVuc2V0KHBheWxvYWQ6IEVudHJ5S2V5KTogdm9pZDtcbiAgICBzaW5nbGV0b248VD4oY2xhc3NDb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4pOiBUO1xuICAgIGxvYWQoZW50cmllczogUmVjb3JkPGFueSwgYW55Pik6IHZvaWQ7XG4gICAgcHJveHk8VCA9IHVua25vd24+KGtleTogRW50cnlLZXkpOiBUO1xuICAgIGtleXMoKTogRW50cnlLZXlbXTtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlclNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZGVidWcobWVzc2FnZTogc3RyaW5nLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nIHwgRXJyb3IsIG1ldGE/OiBhbnkpOiB2b2lkO1xuICAgIGNoaWxkKG9wdGlvbnM6IGFueSk6IExvZ2dlclNlcnZpY2U7XG59XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcuL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGludGVyZmFjZSBFbW1pdHRlckxpc3RlbmVyT3B0aW9ucyB7XG4gICAgZXZlbnQ6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW1taXR0ZXJMaXN0ZW5lciB7XG4gICAgKGRhdGE6IGFueSwgb3B0aW9uczogRW1taXR0ZXJMaXN0ZW5lck9wdGlvbnMpOiB2b2lkO1xufVxuaW50ZXJmYWNlIEVtbWl0dGVySGFuZGxlciB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBldmVudDogc3RyaW5nO1xuICAgIGxpc3RlbmVyOiBFbW1pdHRlckxpc3RlbmVyO1xuICAgIG9yaWdpbmFsTGlzdGVuZXI/OiBFbW1pdHRlckxpc3RlbmVyO1xufVxuaW50ZXJmYWNlIE9uT3B0aW9ucyB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgdW5pcXVlPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBPbkRlYm91bmNlT3B0aW9ucyBleHRlbmRzIE9uT3B0aW9ucyB7XG4gICAgZGVib3VuY2U/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtbWl0dGVyU2VydmljZU9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW1taXR0ZXJTZXJ2aWNlPEV2ZW50cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGhhbmRsZXJzOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IEVtbWl0dGVyU2VydmljZU9wdGlvbnMpO1xuICAgIHN0YXRpYyBjcmVhdGU8RXZlbnRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KG9wdGlvbnM/OiBFbW1pdHRlclNlcnZpY2VPcHRpb25zKTogRW1taXR0ZXJTZXJ2aWNlPEV2ZW50cz47XG4gICAgc2V0RGVidWcoZGVidWc6IGJvb2xlYW4pOiB2b2lkO1xuICAgIHNldExvZ2dlcihsb2dnZXI6IExvZ2dlclNlcnZpY2UpOiB2b2lkO1xuICAgIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbmNlPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbmNlKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoYXJnczogYW55KSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uRGVib3VuY2U8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25EZWJvdW5jZU9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25EZWJvdW5jZShldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uRGVib3VuY2VPcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uQW55T2Y8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnRzOiBLW10sIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgb25BbnlPZihldmVudHM6IHN0cmluZ1tdLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogRW1taXR0ZXJIYW5kbGVyWydsaXN0ZW5lciddKTogdm9pZDtcbiAgICBlbWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBhcmdzOiBFdmVudHNbS10pOiB2b2lkO1xuICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgYXJncz86IGFueSk6IHZvaWQ7XG4gICAgZW1pdEFuZFdhaXQ8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGFyZ3M6IEV2ZW50c1tLXSk6IFByb21pc2U8dm9pZD47XG4gICAgZW1pdEFuZFdhaXQoZXZlbnQ6IHN0cmluZywgYXJncz86IGFueSk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdCgpOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBsaXN0QnlFdmVudChldmVudDogc3RyaW5nKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgcmVtb3ZlKHBheWxvYWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZDtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGhhc0hhbmRsZXJzKCk6IGJvb2xlYW47XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWZlY3ljbGVIb29rIHtcbiAgICBob29rX2lkOiBzdHJpbmc7XG4gICAgaG9va19hbGlhc2VzPzogc3RyaW5nW107XG4gICAgb3JkZXI/OiBudW1iZXI7XG4gICAgc3ViaG9va3M/OiBMaWZlY3ljbGVIb29rW107XG4gICAgcmVnaXN0ZXIoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgYm9vdCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSByZWdpc3RlciAqL1xuICAgIG9uUmVnaXN0ZXIoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGxvYWQgKi9cbiAgICBvbkxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGJvb3QgKi9cbiAgICBvbkJvb3QoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIHNodXRkb3duICovXG4gICAgb25TaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBVbmlvblRvSW50ZXJzZWN0aW9uIH0gZnJvbSAnLi90eXBpbmcudHMnO1xuZXhwb3J0IHR5cGUgQW55Q2xhc3MgPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUID0ge30+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcbmV4cG9ydCB0eXBlIE1peGluPFQ+ID0gKGJhc2U6IENvbnN0cnVjdG9yKSA9PiBDb25zdHJ1Y3RvcjxUPjtcbi8qKlxuICogQ29tcG9zZXMgbXVsdGlwbGUgbWl4aW5zIGludG8gYSBzaW5nbGUgY2xhc3MgdGhhdCBjYW4gYmUgZXh0ZW5kZWQuXG4gKiBBbGxvd3MgZm9yIG11bHRpcGxlIGluaGVyaXRhbmNlLWxpa2UgYmVoYXZpb3IgYnkgYXBwbHlpbmcgbWl4aW5zIHNlcXVlbnRpYWxseS5cbiAqXG4gKiBAcGFyYW0gbWl4aW5zIC0gQXJyYXkgb2YgbWl4aW4gZnVuY3Rpb25zIHRvIGNvbXBvc2VcbiAqIEByZXR1cm5zIEEgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBpbmNsdWRlcyBhbGwgbWl4aW4gZnVuY3Rpb25hbGl0eVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBVc2VyIGV4dGVuZHMgY29tcG9zZShUaW1lc3RhbXAsIFNvZnREZWxldGUpIHtcbiAqICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICogICAgIHN1cGVyKClcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbXBvc2U8TSBleHRlbmRzIEFycmF5PChiYXNlOiBDb25zdHJ1Y3Rvcjxhbnk+KSA9PiBDb25zdHJ1Y3Rvcjxhbnk+Pj4oLi4ubWl4aW5zOiBNKTogVW5pb25Ub0ludGVyc2VjdGlvbjxSZXR1cm5UeXBlPE1bbnVtYmVyXT4+O1xuLyoqXG4gKiBBbHRlcm5hdGl2ZSBjb21wb3NlIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHdpdGggYSBiYXNlIGNsYXNzXG4gKlxuICogQHBhcmFtIGJhc2VDbGFzcyAtIFRoZSBiYXNlIGNsYXNzIHRvIHN0YXJ0IHdpdGhcbiAqIEBwYXJhbSBtaXhpbnMgLSBBcnJheSBvZiBtaXhpbiBmdW5jdGlvbnMgdG8gYXBwbHlcbiAqIEByZXR1cm5zIEEgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBleHRlbmRzIHRoZSBiYXNlIGNsYXNzIHdpdGggYWxsIG1peGluIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgVXNlciBleHRlbmRzIGNvbXBvc2VXaXRoKEJhc2VFbnRpdHksIFRpbWVzdGFtcCwgU29mdERlbGV0ZSkge1xuICogICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gKiAgICAgc3VwZXIoKVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29tcG9zZVdpdGg8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3RvciwgTSBleHRlbmRzIEFycmF5PChiYXNlOiBDb25zdHJ1Y3RvcikgPT4gQ29uc3RydWN0b3I8YW55Pj4+KGJhc2VDbGFzczogVEJhc2UsIC4uLm1peGluczogTSk6IFRCYXNlICYgVW5pb25Ub0ludGVyc2VjdGlvbjxSZXR1cm5UeXBlPE1bbnVtYmVyXT4+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbWl4aW48VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oU291cmNlOiBUQmFzZSk6IDxUVGFyZ2V0IGV4dGVuZHMgQ29uc3RydWN0b3I+KFRhcmdldDogVFRhcmdldCkgPT4gVFRhcmdldCAmIFRCYXNlO1xuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnLi9Mb2dnZXJTZXJ2aWNlLnRzJztcbmltcG9ydCBMaWZlY3ljbGVIb29rIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvTGlmZWN5Y2xlSG9vay50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbnR5cGUgTGlmZWN5Y2xlTWV0aG9kID0gJ3JlZ2lzdGVyJyB8ICdsb2FkJyB8ICdib290JyB8ICdzaHV0ZG93bic7XG5pbnRlcmZhY2UgTGlzdE9wdGlvbnMge1xuICAgIGluY2x1ZGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBleGNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIExpZmVjeWNsZVNlcnZpY2VPcHRpb25zIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgaG9va3M/OiBNYXA8c3RyaW5nLCBMaWZlY3ljbGVIb29rPjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCBjb250ZXh0OiB7XG4gICAgICAgIGhvb2tJZDogc3RyaW5nO1xuICAgICAgICBtZXRob2Q6IExpZmVjeWNsZU1ldGhvZDtcbiAgICB9KSA9PiB2b2lkO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGhvb2tzOiBNYXA8c3RyaW5nLCBMaWZlY3ljbGVIb29rPjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoZGF0YT86IExpZmVjeWNsZVNlcnZpY2VPcHRpb25zKTtcbiAgICBzZXRPbkVycm9yKGhhbmRsZXI6IFJlcXVpcmVkPExpZmVjeWNsZVNlcnZpY2VPcHRpb25zPlsnb25FcnJvciddKTogdm9pZDtcbiAgICBvbkVycm9yKGVycm9yOiBFcnJvciwgY29udGV4dDoge1xuICAgICAgICBob29rSWQ6IHN0cmluZztcbiAgICAgICAgbWV0aG9kOiBMaWZlY3ljbGVNZXRob2Q7XG4gICAgfSk6IHZvaWQ7XG4gICAgbWFwQWxpYXNlcyhhcmdzOiBzdHJpbmdbXSk6IHN0cmluZ1tdO1xuICAgIGxpc3Qob3B0aW9ucz86IExpc3RPcHRpb25zKTogTGlmZWN5Y2xlSG9va1tdO1xuICAgIGFkZCguLi5wYXlsb2FkOiAoTGlmZWN5Y2xlSG9vayB8IENvbnN0cnVjdG9yPExpZmVjeWNsZUhvb2s+KVtdKTogdm9pZDtcbiAgICBlbWl0TWV0aG9kKG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGVtaXQocGF5bG9hZDogTGlmZWN5Y2xlTWV0aG9kIHwgTGlmZWN5Y2xlTWV0aG9kW10sIG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgb24obWV0aG9kOiBMaWZlY3ljbGVNZXRob2QsIGhhbmRsZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkO1xuICAgIHJlZ2lzdGVyKG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZChvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGJvb3Qob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzaHV0ZG93bihvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNsZWFyKCk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuZXhwb3J0IHR5cGUgUGVybWlzc2lvbkFzc2lnbm1lbnQgPSB2LkluZmVyT3V0cHV0PHR5cGVvZiBwZXJtaXNzaW9uQXNzaWdubWVudFNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uQXNzaWdubWVudFNjaGVtYTogdi5PYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IGlkOiB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHBlcm1pc3Npb25faWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYXNzaWduYWJsZV90eXBlOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGFzc2lnbmFibGVfaWQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY3JlYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB1cGRhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uID0gdi5JbmZlck91dHB1dDx0eXBlb2YgcGVybWlzc2lvblNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uU2NoZW1hOiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbmFtZTogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiB2Lk51bGxhYmxlU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYWN0aW9uOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHN1YmplY3Q6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY29uZGl0aW9uczogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGNyZWF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBleHBpcmVzX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBUb2tlbiA9IHYuSW5mZXJPdXRwdXQ8dHlwZW9mIHRva2VuU2NoZW1hPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHRva2VuU2NoZW1hOiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbmFtZTogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHR5cGU6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXNlcl9pZDogdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB0b2tlbjogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBjcmVhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgZXhwaXJlc19hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbn0sIHVuZGVmaW5lZD47XG4iLCJpbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGVuZXIge1xuICAgIGV2ZW50OiBzdHJpbmc7XG4gICAgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGVtaXRIb29rKGNvbnN0cnVjdG9yOiBhbnksIGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG9uSG9vayhjb25zdHJ1Y3RvcjogYW55LCBldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIEhvb2tzU3RhdGljPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBsaXN0ZW5lcnM6IEFycmF5PCguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD47XG4gICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59ICYgVEJhc2U7XG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgSG9va3NTdGF0aWMge1xuICAgIHZhciBlbWl0OiB0eXBlb2YgZW1pdEhvb2s7XG4gICAgdmFyIG9uOiB0eXBlb2Ygb25Ib29rO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSG9va3M8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbGlzdGVuZXJzOiBMaXN0ZW5lcltdO1xuICAgICAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgb2ZmKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICAgICAgZW1pdEFzeW5jKGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufSAmIFRCYXNlO1xuIiwiZGVjbGFyZSBjb25zdCBQZXJtaXNzaW9uRW50aXR5X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVybWlzc2lvbkVudGl0eSBleHRlbmRzIFBlcm1pc3Npb25FbnRpdHlfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgb3JpZ2luOiBzdHJpbmc7XG4gICAgc3ViamVjdDogc3RyaW5nO1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIGNvbmRpdGlvbnM6IHN0cmluZyB8IG51bGwgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGdldCBlZGl0YWJsZSgpOiBib29sZWFuO1xuICAgIGdldCBwYXJzZWRDb25kaXRpb25zKCk6IGFueTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IGRlZmluZUFiaWxpdHkgfSBmcm9tICdAY2FzbC9hYmlsaXR5JztcbmltcG9ydCBQZXJtaXNzaW9uIGZyb20gJy4vUGVybWlzc2lvbkVudGl0eS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNsRW50aXR5IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgYWJpbGl0eTogUmV0dXJuVHlwZTx0eXBlb2YgZGVmaW5lQWJpbGl0eT47XG4gICAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8QWNsRW50aXR5Pik7XG4gICAgY2FuKGFjdGlvbjogc3RyaW5nLCBzdWJqZWN0OiBhbnksIG9iamVjdD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuO1xuICAgIGNhbm5vdChhY3Rpb246IHN0cmluZywgc3ViamVjdDogYW55LCBvYmplY3Q/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYm9vbGVhbjtcbiAgICBzdWJqZWN0KHN1YmplY3Q6IHN0cmluZywgb2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiAmIGltcG9ydChcIkBjYXNsL2FiaWxpdHlcIikuRm9yY2VkU3ViamVjdDxzdHJpbmc+O1xufVxuIiwiZXhwb3J0IGludGVyZmFjZSBDb29raWVNYXBFbnRpdHlPcHRpb25zIHtcbiAgICBjb29raWVzPzogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb29raWVNYXBFbnRpdHkge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBjb29raWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByZWZpeDogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBDb29raWVNYXBFbnRpdHlPcHRpb25zKTtcbiAgICBsb2FkKGNvb2tpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBNYXA8c3RyaW5nLCBzdHJpbmc+KTogdm9pZDtcbiAgICBnZXQobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcbiAgICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogYW55KTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuIiwiZXhwb3J0IGRlY2xhcmUgY29uc3QgVFlQRVM6ICgpID0+ICh7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogYW55O1xuICAgIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgY29uZmlnX2ZpZWxkczoge1xuICAgICAgICBkaXJlY3Rvcnk6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgIH07XG4gICAgICAgIGFjY2Vzc0tleUlkPzogdW5kZWZpbmVkO1xuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk/OiB1bmRlZmluZWQ7XG4gICAgICAgIGJ1Y2tldD86IHVuZGVmaW5lZDtcbiAgICAgICAgcmVnaW9uPzogdW5kZWZpbmVkO1xuICAgICAgICBwcmVmaXg/OiB1bmRlZmluZWQ7XG4gICAgICAgIGVuZHBvaW50PzogdW5kZWZpbmVkO1xuICAgIH07XG59IHwge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogYW55O1xuICAgIGNvbmZpZ19maWVsZHM6IHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGJ1Y2tldDoge1xuICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICB9O1xuICAgICAgICByZWdpb246IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgIH07XG4gICAgICAgIGVuZHBvaW50OiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgIH07XG4gICAgICAgIGRpcmVjdG9yeT86IHVuZGVmaW5lZDtcbiAgICB9O1xufSlbXTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlQ29uZmlnIHtcbiAgICBzdGF0aWMgZ2V0IFRZUEVTKCk6ICh7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgICAgIGNvbmZpZ19maWVsZHM6IHtcbiAgICAgICAgICAgIGRpcmVjdG9yeToge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjZXNzS2V5SWQ/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBidWNrZXQ/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZWdpb24/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBwcmVmaXg/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlbmRwb2ludD86IHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICB9IHwge1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICBkZXNjcmlwdGlvbjogYW55O1xuICAgICAgICBjb25maWdfZmllbGRzOiB7XG4gICAgICAgICAgICBhY2Nlc3NLZXlJZDoge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnVja2V0OiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVnaW9uOiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZW5kcG9pbnQ6IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkaXJlY3Rvcnk/OiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgfSlbXTtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgaXNfZGVmYXVsdDogYm9vbGVhbjtcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgY29uc3RydWN0b3IoZGF0YTogRHJpdmVDb25maWcpO1xuICAgIGdldCBjb25maWdfZmllbGRzKCk6IHt9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVFbnRyeSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICB0eXBlOiAnZmlsZScgfCAnZGlyZWN0b3J5JztcbiAgICBtZXRhczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBEcml2ZUVudHJ5KTtcbn1cbiIsImRlY2xhcmUgY29uc3QgRmlsZUVudGl0eV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZUVudGl0eSBleHRlbmRzIEZpbGVFbnRpdHlfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBkcml2ZTogc3RyaW5nO1xuICAgIG1pbWV0eXBlOiBzdHJpbmc7XG4gICAgcHVycG9zZTogc3RyaW5nO1xuICAgIGNsaWVudF9uYW1lOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBwdWJsaWM6IGJvb2xlYW47XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIG1ldGFzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBpc0ltYWdlKCk6IGJvb2xlYW47XG59XG5leHBvcnQge307XG4iLCJkZWNsYXJlIGNvbnN0IEZpbGVNZXRhX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlTWV0YSBleHRlbmRzIEZpbGVNZXRhX2Jhc2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgZmlsZV9pZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEdpdEJyYW5jaEVudGl0eSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHJlbW90ZTogc3RyaW5nIHwgbnVsbDtcbiAgICBpc19jdXJyZW50OiBib29sZWFuO1xuICAgIGlzX3JlbW90ZTogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBHaXRCcmFuY2hFbnRpdHkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2l0Q29tbWl0RW50aXR5IHtcbiAgICBoYXNoOiBzdHJpbmc7XG4gICAgc2hvcnRfaGFzaDogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBib2R5OiBzdHJpbmc7XG4gICAgYXV0aG9yX25hbWU6IHN0cmluZztcbiAgICBhdXRob3JfZW1haWw6IHN0cmluZztcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoZGF0YTogR2l0Q29tbWl0RW50aXR5KTtcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlTWFuaWZlc3RCdWlsZEltcG9ydCB7XG4gICAgZnJvbTogc3RyaW5nO1xuICAgIHRvPzogc3RyaW5nO1xuICAgIHR5cGU6ICdnbG9iYWxfaW1wb3J0Jztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlTWFuaWZlc3RCdWlsZCB7XG4gICAgaW1wb3J0cz86IE1vZHVsZU1hbmlmZXN0QnVpbGRJbXBvcnRbXTtcbn1cbmRlY2xhcmUgY29uc3QgTW9kdWxlTWFuaWZlc3RfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2R1bGVNYW5pZmVzdCBleHRlbmRzIE1vZHVsZU1hbmlmZXN0X2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGF1dGhvcj86IHN0cmluZztcbiAgICBkZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGJ1aWxkPzogTW9kdWxlTWFuaWZlc3RCdWlsZDtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSBNb2R1bGVNYW5pZmVzdCBmcm9tICcuL01vZHVsZU1hbmlmZXN0RW50aXR5LnRzJztcbmltcG9ydCBMaWZlY3ljbGVIb29rIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvTGlmZWN5Y2xlSG9vay50cyc7XG5pbnRlcmZhY2UgTW9kdWxlVXBncmFkZUluZm8ge1xuICAgIHNvdXJjZTogJ2dpdCcgfCAnemlwJztcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5kZWNsYXJlIGNvbnN0IE1vZHVsZV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3Rvcjx7fT4gJiB0eXBlb2YgTGlmZWN5Y2xlSG9vaztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZSBleHRlbmRzIE1vZHVsZV9iYXNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGRlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBidWlsZDogTW9kdWxlTWFuaWZlc3RbJ2J1aWxkJ107XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgdXBncmFkZV9pbmZvPzogTW9kdWxlVXBncmFkZUluZm87XG4gICAgc2V0RGF0YShkYXRhOiBQYXJ0aWFsPE1vZHVsZSB8IE1vZHVsZU1hbmlmZXN0Pik6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdpbmF0aW9uRW50aXR5PFQgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgaXRlbXM6IFRbXTtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwZXJfcGFnZTogbnVtYmVyO1xuICAgIHRvdGFsX3BhZ2VzOiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IoZGF0YTogUGFydGlhbDxQYWdpbmF0aW9uRW50aXR5Pik7XG4gICAgc3RhdGljIGZyb208VCA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHBheWxvYWQ6IFBhcnRpYWw8UGFnaW5hdGlvbkVudGl0eTxUPj4pOiBQYWdpbmF0aW9uRW50aXR5PFQ+O1xufVxuIiwiZGVjbGFyZSBjb25zdCBQbHVnaW5FbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRpdHkgZXh0ZW5kcyBQbHVnaW5FbnRpdHlfYmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYWxpYXNlczogc3RyaW5nW107XG4gICAgdmVyc2lvbl9jaGFubmVsOiBzdHJpbmc7XG4gICAgdmVyc2lvbl9hdmFpbGFibGVfY2hhbm5lbHM6IHN0cmluZ1tdO1xufVxuZXhwb3J0IHt9O1xuIiwiZGVjbGFyZSBjb25zdCBSb2xlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb2xlIGV4dGVuZHMgUm9sZV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIFBlcm1pc3Npb24gZnJvbSAnLi9QZXJtaXNzaW9uRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIFJvbGUgZnJvbSAnLi9Sb2xlRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgVXNlckVudGl0eV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXNlckVudGl0eSBleHRlbmRzIFVzZXJFbnRpdHlfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIHZlcmlmaWVkX2F0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgcGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gICAgcm9sZXM/OiBSb2xlW107XG4gICAgZ2V0IGluaXRpYWxzKCk6IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENvbW1hbmQgYXMgQ29tbWFuZGVyQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgcHJpbnRUYWJsZSwgcHJpbnRPYmplY3QgfSBmcm9tICcuLi91dGlscy9wcmludFRhYmxlLnRzJztcbmltcG9ydCB7IEVtbWl0dGVyU2VydmljZSwgTG9nZ2VyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuaW1wb3J0ICogYXMgaW5xdWlyZXIgZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuZXhwb3J0IGludGVyZmFjZSBDbGlFdmVudHMge1xuICAgICdjbGk6cmVnaXN0ZXJlZCc6IHtcbiAgICAgICAgY2xpOiBDbGlTZXJ2aWNlO1xuICAgIH07XG59XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBDbGlDb21tYW5kIGV4dGVuZHMgQ29tbWFuZGVyQ29tbWFuZCB7XG4gICAgX19pc19jbGlfY29tbWFuZDogYm9vbGVhbjtcbiAgICB0YWJsZTogdHlwZW9mIHByaW50VGFibGU7XG4gICAgb2JqZWN0OiB0eXBlb2YgcHJpbnRPYmplY3Q7XG4gICAgY29sb3JzOiBjaGFsay5DaGFsayAmIGNoYWxrLkNoYWxrRnVuY3Rpb24gJiB7XG4gICAgICAgIHN1cHBvcnRzQ29sb3I6IGNoYWxrLkNvbG9yU3VwcG9ydCB8IGZhbHNlO1xuICAgICAgICBMZXZlbDogY2hhbGsuTGV2ZWw7XG4gICAgICAgIENvbG9yOiAoXCJibGFja1wiIHwgXCJyZWRcIiB8IFwiZ3JlZW5cIiB8IFwieWVsbG93XCIgfCBcImJsdWVcIiB8IFwibWFnZW50YVwiIHwgXCJjeWFuXCIgfCBcIndoaXRlXCIgfCBcImdyYXlcIiB8IFwiZ3JleVwiIHwgXCJibGFja0JyaWdodFwiIHwgXCJyZWRCcmlnaHRcIiB8IFwiZ3JlZW5CcmlnaHRcIiB8IFwieWVsbG93QnJpZ2h0XCIgfCBcImJsdWVCcmlnaHRcIiB8IFwibWFnZW50YUJyaWdodFwiIHwgXCJjeWFuQnJpZ2h0XCIgfCBcIndoaXRlQnJpZ2h0XCIpIHwgKFwiYmdCbGFja1wiIHwgXCJiZ1JlZFwiIHwgXCJiZ0dyZWVuXCIgfCBcImJnWWVsbG93XCIgfCBcImJnQmx1ZVwiIHwgXCJiZ01hZ2VudGFcIiB8IFwiYmdDeWFuXCIgfCBcImJnV2hpdGVcIiB8IFwiYmdHcmF5XCIgfCBcImJnR3JleVwiIHwgXCJiZ0JsYWNrQnJpZ2h0XCIgfCBcImJnUmVkQnJpZ2h0XCIgfCBcImJnR3JlZW5CcmlnaHRcIiB8IFwiYmdZZWxsb3dCcmlnaHRcIiB8IFwiYmdCbHVlQnJpZ2h0XCIgfCBcImJnTWFnZW50YUJyaWdodFwiIHwgXCJiZ0N5YW5CcmlnaHRcIiB8IFwiYmdXaGl0ZUJyaWdodFwiKTtcbiAgICAgICAgRm9yZWdyb3VuZENvbG9yOiBcImJsYWNrXCIgfCBcInJlZFwiIHwgXCJncmVlblwiIHwgXCJ5ZWxsb3dcIiB8IFwiYmx1ZVwiIHwgXCJtYWdlbnRhXCIgfCBcImN5YW5cIiB8IFwid2hpdGVcIiB8IFwiZ3JheVwiIHwgXCJncmV5XCIgfCBcImJsYWNrQnJpZ2h0XCIgfCBcInJlZEJyaWdodFwiIHwgXCJncmVlbkJyaWdodFwiIHwgXCJ5ZWxsb3dCcmlnaHRcIiB8IFwiYmx1ZUJyaWdodFwiIHwgXCJtYWdlbnRhQnJpZ2h0XCIgfCBcImN5YW5CcmlnaHRcIiB8IFwid2hpdGVCcmlnaHRcIjtcbiAgICAgICAgQmFja2dyb3VuZENvbG9yOiBcImJnQmxhY2tcIiB8IFwiYmdSZWRcIiB8IFwiYmdHcmVlblwiIHwgXCJiZ1llbGxvd1wiIHwgXCJiZ0JsdWVcIiB8IFwiYmdNYWdlbnRhXCIgfCBcImJnQ3lhblwiIHwgXCJiZ1doaXRlXCIgfCBcImJnR3JheVwiIHwgXCJiZ0dyZXlcIiB8IFwiYmdCbGFja0JyaWdodFwiIHwgXCJiZ1JlZEJyaWdodFwiIHwgXCJiZ0dyZWVuQnJpZ2h0XCIgfCBcImJnWWVsbG93QnJpZ2h0XCIgfCBcImJnQmx1ZUJyaWdodFwiIHwgXCJiZ01hZ2VudGFCcmlnaHRcIiB8IFwiYmdDeWFuQnJpZ2h0XCIgfCBcImJnV2hpdGVCcmlnaHRcIjtcbiAgICAgICAgTW9kaWZpZXJzOiBcInJlc2V0XCIgfCBcImJvbGRcIiB8IFwiZGltXCIgfCBcIml0YWxpY1wiIHwgXCJ1bmRlcmxpbmVcIiB8IFwiaW52ZXJzZVwiIHwgXCJoaWRkZW5cIiB8IFwic3RyaWtldGhyb3VnaFwiIHwgXCJ2aXNpYmxlXCI7XG4gICAgICAgIHN0ZGVycjogY2hhbGsuQ2hhbGsgJiB7XG4gICAgICAgICAgICBzdXBwb3J0c0NvbG9yOiBjaGFsay5Db2xvclN1cHBvcnQgfCBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGlucXVpcmVyOiB0eXBlb2YgaW5xdWlyZXI7XG4gICAgbmVlZHM6IFNldDxzdHJpbmc+O1xuICAgIG5lZWQoLi4uYXJnczogc3RyaW5nW10pOiB0aGlzO1xuICAgIGNyZWF0ZUNvbW1hbmQobmFtZT86IHN0cmluZyk6IENsaUNvbW1hbmQ7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGlTZXJ2aWNlIGV4dGVuZHMgQ2xpQ29tbWFuZCB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRpcnM6IFNldDxzdHJpbmc+O1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBlbW1pdHRlcjogRW1taXR0ZXJTZXJ2aWNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIHN0YXRpYyBjcmVhdGUobmFtZT86IHN0cmluZyk6IENsaVNlcnZpY2U7XG4gICAgc2V0TG9nZ2VyKGxvZ2dlcjogTG9nZ2VyU2VydmljZSk6IHRoaXM7XG4gICAgc2V0RGVidWcoZGVidWc6IGJvb2xlYW4pOiB0aGlzO1xuICAgIHNldEVtbWl0dGVyKGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2UpOiB0aGlzO1xuICAgIGNyZWF0ZUNvbW1hbmQobmFtZT86IHN0cmluZyk6IENsaVNlcnZpY2U7XG4gICAgYWRkRGlyKGRpcjogc3RyaW5nKTogdGhpcztcbiAgICBsb2FkRGlyKGRpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKCk6IFByb21pc2U8dGhpcz47XG59XG4iLCJpbXBvcnQgQ2xpU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL0NsaVNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJ0ZVRlc3RlclNlcnZpY2UgZXh0ZW5kcyBDbGlTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIGFkZChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGV4ZWN1dGUoYXJnczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpV3JhcHBlclNlcnZpY2Uge1xuICAgIHByb2Nlc3M6IGNwLkNoaWxkUHJvY2VzcyB8IG51bGw7XG4gICAgYXBwQmFzZVBhdGg6IHN0cmluZztcbiAgICBlbnY6IE1hcDxzdHJpbmcsIGFueT47XG4gICAgYXJnczogc3RyaW5nW107XG4gICAgY29uZmlnQXJndW1lbnRzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGNvbmZpZ0ZpbGVzOiBzdHJpbmdbXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgc3RhdGljIGNyZWF0ZSgpOiBDbGlXcmFwcGVyU2VydmljZTtcbiAgICBzZXRCYXNlUGF0aChwYXRoOiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdGhpcztcbiAgICBzZXRMb2dnZXIobG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKTogdGhpcztcbiAgICBhZGRDb25maWdBcmd1bWVudChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHRoaXM7XG4gICAgYWRkQ29uZmlnRmlsZSguLi5maWxlUGF0aHM6IHN0cmluZ1tdKTogdGhpcztcbiAgICBhZGRFbnYoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAgIGxvYWRDb25maWdBcmd1bWVudHMoKTogdm9pZDtcbiAgICBsb2FkQ29uZmlnRmlsZXMoKTogdm9pZDtcbiAgICBsb2FkRW52aXJvbm1lbnQoKTogdm9pZDtcbiAgICBsb2FkQXJndW1lbnRzKGFyZ3M/OiBzdHJpbmdbXSk6IHZvaWQ7XG4gICAga2lsbChjb2RlPzogbnVtYmVyKTogdm9pZDtcbiAgICBydW4oYXJncz86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0ZTU2VydmljZU9wdGlvbnMge1xuICAgIGRpcmVjdG9yeT86IHN0cmluZztcbiAgICBmb3JtYXQ/OiAnanNvbicgfCAneW1sJztcbiAgICBmb3JtYXRPcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ0ZTU2VydmljZSBleHRlbmRzIENvbmZpZ1NlcnZpY2Uge1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBmb3JtYXQ6ICdqc29uJyB8ICd5bWwnO1xuICAgIGZvcm1hdE9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbmZpZ0ZTU2VydmljZU9wdGlvbnMpO1xuICAgIHdyaXRlKGVudHJ5OiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8dm9pZD47XG4gICAgd3JpdGVTeW5jKGVudHJ5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQ7XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHByaXZhdGUgcGFyc2VLZXk7XG4gICAgc2V0KGZ1bGxLZXk6IHN0cmluZywgdmFsdWU6IGFueSwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB1bnNldChmdWxsS2V5OiBzdHJpbmcpOiB2b2lkO1xufVxuIiwiaW1wb3J0ICogYXMgdiBmcm9tICd2YWxpYm90JztcbmV4cG9ydCB0eXBlIEVudlNjaGVtYSA9IHYuSW5mZXJPdXRwdXQ8dHlwZW9mIGVudlNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBlbnZTY2hlbWE6IHYuTG9vc2VPYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IE5PREVfRU5WOiB2Lk9wdGlvbmFsU2NoZW1hPHYuVW5pb25TY2hlbWE8W3YuTGl0ZXJhbFNjaGVtYTxcImRldmVsb3BtZW50XCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcInByb2R1Y3Rpb25cIiwgdW5kZWZpbmVkPiwgdi5MaXRlcmFsU2NoZW1hPFwidGVzdFwiLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgXCJkZXZlbG9wbWVudFwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQkFTRV9QQVRIOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9TVE9SQUdFX1BBVEg6IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQVBQX1VSTDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfUE9SVDogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIG51bWJlcj5dPiwgXCIzMDAwXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9IT1NUOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIFwiMC4wLjAuMFwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfTE9HX0xFVkVMOiB2Lk9wdGlvbmFsU2NoZW1hPHYuUGlja2xpc3RTY2hlbWE8W1wiZXJyb3JcIiwgXCJ3YXJuXCIsIFwiaW5mb1wiLCBcImRlYnVnXCJdLCB1bmRlZmluZWQ+LCBcImluZm9cIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0xJRkVDWUNMRV9ERUJVRzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LkxpdGVyYWxTY2hlbWE8XCJ0cnVlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcImZhbHNlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcIjFcIiwgdW5kZWZpbmVkPiwgdi5MaXRlcmFsU2NoZW1hPFwiMFwiLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248XCIwXCIgfCBcIjFcIiB8IFwidHJ1ZVwiIHwgXCJmYWxzZVwiLCBib29sZWFuPiwgdi5Cb29sZWFuU2NoZW1hPHVuZGVmaW5lZD5dPiwgXCJmYWxzZVwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ0xJRU5UX0NPTkZJRzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+XT4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUc6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+LCBcIlwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX0FSR1VNRU5UUzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+XT4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfRklMRVM6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBzdHJpbmdbXT5dPiwgXCJcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19ERUJVRzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LkxpdGVyYWxTY2hlbWE8XCJ0cnVlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcImZhbHNlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcIjFcIiwgdW5kZWZpbmVkPiwgdi5MaXRlcmFsU2NoZW1hPFwiMFwiLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248XCIwXCIgfCBcIjFcIiB8IFwidHJ1ZVwiIHwgXCJmYWxzZVwiLCBib29sZWFuPiwgdi5Cb29sZWFuU2NoZW1hPHVuZGVmaW5lZD5dPiwgXCJmYWxzZVwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX0RSSVZFUjogdi5PcHRpb25hbFNjaGVtYTx2LlBpY2tsaXN0U2NoZW1hPFtcImZzXCIsIFwiczNcIl0sIHVuZGVmaW5lZD4sIFwiZnNcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19GU19QQVRIOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19GU19GT1JNQVQ6IHYuT3B0aW9uYWxTY2hlbWE8di5QaWNrbGlzdFNjaGVtYTxbXCJqc29uXCIsIFwieW1sXCJdLCB1bmRlZmluZWQ+LCBcImpzb25cIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19GU19GT1JNQVRfT1BUSU9OUzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+XT4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfUzNfQlVDS0VUOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19SRUdJT046IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX1MzX0FDQ0VTU19LRVlfSUQ6IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX1MzX1NFQ1JFVF9BQ0NFU1NfS0VZOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19TRVNTSU9OX1RPS0VOOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19FTkRQT0lOVDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfUzNfUFJFRklYOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9QTFVHSU5TX0RJUlM6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBzdHJpbmdbXT5dPiwgXCJcIj47XG59LCB1bmRlZmluZWQ+O1xuIiwiaW1wb3J0IGRvdGVudiBmcm9tICdkb3RlbnYnO1xuaW1wb3J0IHR5cGUgeyBFbnZTY2hlbWEgfSBmcm9tICcjc2VydmVyL3NjaGVtYXMvZW52U2NoZW1hLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudlNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBwcml2YXRlIGVudjtcbiAgICBwcml2YXRlIGZpbGVzO1xuICAgIHN0YXRpYyBjcmVhdGUoKTogRW52U2VydmljZTtcbiAgICBzdGF0aWMgZG90RW52Q29uZmlnKG9wdGlvbnM/OiBkb3RlbnYuRG90ZW52Q29uZmlnT3B0aW9ucyk6IGRvdGVudi5Eb3RlbnZDb25maWdPdXRwdXQ7XG4gICAgc2V0RmlsZXMoZmlsZXM6IHN0cmluZ1tdKTogdGhpcztcbiAgICBhZGRGaWxlKGZpbGU6IHN0cmluZyk6IHRoaXM7XG4gICAgbG9hZCgpOiB0aGlzO1xuICAgIGdldCBwcm9kdWN0aW9uKCk6IGJvb2xlYW47XG4gICAgZ2V0IGRldmVsb3BtZW50KCk6IGJvb2xlYW47XG4gICAgZ2V0IHRlc3QoKTogYm9vbGVhbjtcbiAgICBoYXM8SyBleHRlbmRzIGtleW9mIEVudlNjaGVtYT4oa2V5OiBLKTogYm9vbGVhbjtcbiAgICBnZXQ8SyBleHRlbmRzIGtleW9mIEVudlNjaGVtYT4oa2V5OiBLLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBFbnZTY2hlbWFbS107XG4gICAgc2V0PEsgZXh0ZW5kcyBrZXlvZiBFbnZTY2hlbWE+KGtleTogSywgdmFsdWU6IEVudlNjaGVtYVtLXSk6IHZvaWQ7XG59XG4iLCJpbXBvcnQgeyB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSBFbnZTZXJ2aWNlIGZyb20gJy4vRW52U2VydmljZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ01hbmFnZXJPcHRpb25zIHtcbiAgICBlbnY6IEVudlNlcnZpY2U7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHNpbGVudD86IGJvb2xlYW47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdNYW5hZ2VyU2VydmljZSB7XG4gICAgZW52OiBFbnZTZXJ2aWNlO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBzaWxlbnQ6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnMpO1xuICAgIHN0YXRpYyBjcmVhdGUob3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnMpOiBDb25maWdNYW5hZ2VyU2VydmljZTtcbiAgICBwcml2YXRlIGxvYWRTM0NvbmZpZztcbiAgICBwcml2YXRlIGxvYWRGU0NvbmZpZztcbiAgICBsb2FkQ29uZmlnRnJvbUVudihzZXJ2aWNlOiBDb25maWdTZXJ2aWNlKTogdm9pZDtcbiAgICBsb2FkQ29uZmlnRnJvbUZpbGUoc2VydmljZTogQ29uZmlnU2VydmljZSwgZmlsZTogc3RyaW5nKTogdm9pZDtcbiAgICBsb2FkQ29uZmlnRnJvbUZpbGVzKHNlcnZpY2U6IENvbmZpZ1NlcnZpY2UsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQ7XG4gICAgbG9hZCgpOiBQcm9taXNlPENvbmZpZ1NlcnZpY2U+O1xufVxuIiwiaW1wb3J0IG1zIGZyb20gJ21zJztcbmltcG9ydCB0eXBlIERyaXZlRW50cnkgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Ecml2ZUVudHJ5RW50aXR5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgVXJsT3B0aW9ucyB7XG4gICAgZXhwaXJlcz86IG1zLlN0cmluZ1ZhbHVlO1xufVxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRVcmxPcHRpb25zIHtcbiAgICBleHBpcmVzPzogbXMuU3RyaW5nVmFsdWU7XG4gICAgbWltZV90eXBlcz86IHN0cmluZ1tdO1xuICAgIG1heF9zaXplPzogbnVtYmVyO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVCYXNlR2F0ZXdheSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBpY2s8RHJpdmVCYXNlR2F0ZXdheSwgJ2lkJyB8ICduYW1lJyB8ICdkZXNjcmlwdGlvbicgfCAnY29uZmlnJz4pO1xuICAgIGxpc3QoZm9sZGVyPzogc3RyaW5nKTogUHJvbWlzZTxEcml2ZUVudHJ5W10+O1xuICAgIGZpbmQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RHJpdmVFbnRyeT47XG4gICAgZXhpc3RzKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHJlYWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT47XG4gICAgcmVhZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+O1xuICAgIHdyaXRlKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGE6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHdyaXRlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgdXJsKGZpbGVuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBVcmxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHVwbG9hZFVybChmaWxlbmFtZTogc3RyaW5nLCBvcHRpb25zPzogVXBsb2FkVXJsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbn1cbiIsImltcG9ydCB7IFMzQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB0eXBlIHsgSW5mZXJPdXRwdXQgfSBmcm9tICd2YWxpYm90JztcbmltcG9ydCBCYXNlRHJpdmUgZnJvbSAnI3NlcnZlci9nYXRld2F5cy9Ecml2ZUJhc2VHYXRld2F5LnRzJztcbmRlY2xhcmUgY29uc3Qgc2NoZW1hOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgYnVja2V0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFtpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBpbXBvcnQoXCJ2YWxpYm90XCIpLk1pbkxlbmd0aEFjdGlvbjxzdHJpbmcsIDEsIHVuZGVmaW5lZD5dPjtcbiAgICByZWFkb25seSByZWdpb246IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBhY2Nlc3NLZXlJZDogaW1wb3J0KFwidmFsaWJvdFwiKS5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgaW1wb3J0KFwidmFsaWJvdFwiKS5NaW5MZW5ndGhBY3Rpb248c3RyaW5nLCAxLCB1bmRlZmluZWQ+XT47XG4gICAgcmVhZG9ubHkgc2VjcmV0QWNjZXNzS2V5OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFtpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBpbXBvcnQoXCJ2YWxpYm90XCIpLk1pbkxlbmd0aEFjdGlvbjxzdHJpbmcsIDEsIHVuZGVmaW5lZD5dPjtcbiAgICByZWFkb25seSBzZXNzaW9uVG9rZW46IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBlbmRwb2ludDogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHByZWZpeDogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbmV4cG9ydCB0eXBlIFMzRHJpdmVDb25maWcgPSBJbmZlck91dHB1dDx0eXBlb2Ygc2NoZW1hPjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlUzMgZXh0ZW5kcyBCYXNlRHJpdmUge1xuICAgIHByaXZhdGUgc2NoZW1hO1xuICAgIHByaXZhdGUgX2NsaWVudD87XG4gICAgY29uc3RydWN0b3IoZGF0YTogUGljazxCYXNlRHJpdmUsICdpZCcgfCAnbmFtZScgfCAnZGVzY3JpcHRpb24nIHwgJ2NvbmZpZyc+KTtcbiAgICBnZXQgdmFsaWQoKTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGNoZWNrVmFsaWQ7XG4gICAgcHJvdGVjdGVkIGdldCBidWNrZXQoKTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBnZXQgcHJlZml4KCk6IHN0cmluZztcbiAgICBwcml2YXRlIGdldEtleTtcbiAgICBwcm90ZWN0ZWQgZ2V0IGNsaWVudCgpOiBTM0NsaWVudDtcbiAgICBleGlzdHM6IEJhc2VEcml2ZVsnZXhpc3RzJ107XG4gICAgbGlzdDogQmFzZURyaXZlWydsaXN0J107XG4gICAgZmluZDogQmFzZURyaXZlWydmaW5kJ107XG4gICAgbWtkaXIoX2ZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHJlYWQ6IEJhc2VEcml2ZVsncmVhZCddO1xuICAgIHJlYWRTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgICB3cml0ZTogQmFzZURyaXZlWyd3cml0ZSddO1xuICAgIHdyaXRlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGU6IEJhc2VEcml2ZVsnZGVsZXRlJ107XG4gICAgdXJsOiBCYXNlRHJpdmVbJ3VybCddO1xuICAgIHVwbG9hZFVybDogQmFzZURyaXZlWyd1cGxvYWRVcmwnXTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW1wb3J0IFMzRHJpdmUgZnJvbSAnI3NlcnZlci9nYXRld2F5cy9Ecml2ZVMzR2F0ZXdheS50cyc7XG5pbXBvcnQgdHlwZSB7IFMzRHJpdmVDb25maWcgfSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0RyaXZlUzNHYXRld2F5LnRzJztcbmludGVyZmFjZSBJbml0aU9wdGlvbnMgZXh0ZW5kcyBPbWl0PFMzRHJpdmVDb25maWcsICduYW1lJyB8ICdkZXNjcmlwdGlvbic+IHtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdTM1NlcnZpY2UgZXh0ZW5kcyBDb25maWdTZXJ2aWNlIHtcbiAgICBwcmVmaXg6IHN0cmluZztcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgZHJpdmU6IFMzRHJpdmU7XG4gICAgYnVja2V0OiBzdHJpbmc7XG4gICAgcmVnaW9uOiBzdHJpbmc7XG4gICAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogSW5pdGlPcHRpb25zKTtcbiAgICBwcml2YXRlIHBhcnNlS2V5O1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzZXQoZnVsbEtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIHVuc2V0KGZ1bGxLZXk6IHN0cmluZyk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IFJlcXVlc3RJbml0IH0gZnJvbSAndW5kaWNpJztcbmV4cG9ydCBpbnRlcmZhY2UgRG93bmxvYWRlZEZldGNoT3B0aW9ucyBleHRlbmRzIFJlcXVlc3RJbml0IHtcbiAgICBwcm94eT86IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25sb2FkU2VydmljZSB7XG4gICAgZmV0Y2godXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBEb3dubG9hZGVkRmV0Y2hPcHRpb25zKTogUHJvbWlzZTxpbXBvcnQoXCJ1bmRpY2lcIikuUmVzcG9uc2U+O1xuICAgIHN0cmVhbSh1cmw6IHN0cmluZywgb3B0aW9ucz86IERvd25sb2FkZWRGZXRjaE9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICAgICAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW07XG4gICAgICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgfT47XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlYWRTdHJlYW0gfSBmcm9tICdmcyc7XG5pbXBvcnQgdHlwZSBtcyBmcm9tICdtcyc7XG5pbXBvcnQgdHlwZSBEcml2ZUVudHJ5IGZyb20gJyNzaGFyZWQvZW50aXRpZXMvRHJpdmVFbnRyeUVudGl0eS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIERyaXZlVXJsT3B0aW9ucyB7XG4gICAgZXhwaXJlcz86IG1zLlN0cmluZ1ZhbHVlO1xufVxuZXhwb3J0IGludGVyZmFjZSBEcml2ZVVwbG9hZFVybE9wdGlvbnMge1xuICAgIGV4cGlyZXM/OiBtcy5TdHJpbmdWYWx1ZTtcbiAgICBtaW1lX3R5cGVzPzogc3RyaW5nW107XG4gICAgbWF4X3NpemU/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIERyaXZlQ29udHJhY3Qge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGxpc3QoZm9sZGVyPzogc3RyaW5nKTogUHJvbWlzZTxEcml2ZUVudHJ5W10+O1xuICAgIGZpbmQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RHJpdmVFbnRyeT47XG4gICAgZXhpc3RzKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHJlYWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT47XG4gICAgd3JpdGUoZmlsZW5hbWU6IHN0cmluZywgZGF0YTogVWludDhBcnJheSk6IFByb21pc2U8dm9pZD47XG4gICAgd3JpdGVTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlbGV0ZShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cmwoZmlsZW5hbWU6IHN0cmluZywgb3B0aW9ucz86IERyaXZlVXJsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICB1cGxvYWRVcmwoZmlsZW5hbWU6IHN0cmluZywgb3B0aW9ucz86IERyaXZlVXBsb2FkVXJsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICByZWFkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFJlYWRTdHJlYW0+O1xufVxuIiwiaW1wb3J0IERyaXZlRW50cnkgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Ecml2ZUVudHJ5RW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgRHJpdmVVcmxPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRHJpdmVDb250cmFjdC50cyc7XG5pbXBvcnQgQmFzZURyaXZlIGZyb20gJyNzZXJ2ZXIvZ2F0ZXdheXMvRHJpdmVCYXNlR2F0ZXdheS50cyc7XG5pbXBvcnQgdHlwZSBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5pbnRlcmZhY2UgVmFsaWRhdGVVcGxvYWRPcHRpb25zIHtcbiAgICBtaW1lX3R5cGVzOiBzdHJpbmc7XG4gICAgbWF4U2l6ZT86IG51bWJlcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGdhdGV3YXlzOiBNYXA8c3RyaW5nLCB0eXBlb2YgQmFzZURyaXZlPjtcbiAgICBkcml2ZXM6IE1hcDxzdHJpbmcsIEJhc2VEcml2ZT47XG4gICAgc2VsZWN0ZWQ/OiBzdHJpbmc7XG4gICAgZGVmYXVsdERyaXZlPzogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBnZXQgY3VycmVudCgpOiBCYXNlRHJpdmUgfCB1bmRlZmluZWQ7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8RHJpdmVTZXJ2aWNlPik7XG4gICAgbGlzdERyaXZlcygpOiB7XG4gICAgICAgIGRlZmF1bHQ6IGJvb2xlYW47XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9W107XG4gICAgZ2V0KG5hbWU/OiBzdHJpbmcpOiBCYXNlRHJpdmU7XG4gICAgdXNlKG5hbWU/OiBzdHJpbmcpOiBEcml2ZVNlcnZpY2U7XG4gICAgbGlzdChmb2xkZXI/OiBzdHJpbmcpOiBQcm9taXNlPERyaXZlRW50cnlbXT47XG4gICAgZmluZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxEcml2ZUVudHJ5PjtcbiAgICBleGlzdHMoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG4gICAgcmVhZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxVaW50OEFycmF5PjtcbiAgICByZWFkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE5vZGVKUy5SZWFkYWJsZVN0cmVhbT47XG4gICAgcmVhZEFzVGV4dChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHdyaXRlKGZpbGVuYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD47XG4gICAgd3JpdGVTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGEgVVJMIGZvciBhIGZpbGUgaW4gdGhlIGRyaXZlLlxuICAgICAqIEBwYXJhbSBwYXlsb2FkICBGaWxlIGluc3RhbmNlLCBGaWxlIElELCBEcml2ZUVudHJ5IGluc3RhbmNlIG9yIGZpbGVuYW1lIHN0cmluZ1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHJldHVybnMgc3RyaW5nXG4gICAgICovXG4gICAgdXJsKGZpbGVuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBEcml2ZVVybE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgdXBsb2FkVXJsKGZpbGVuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBEcml2ZVVybE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgLyoqXG4gICAgICogVXBsb2FkIGEgZmlsZSBmcm9tIHRoZSBsb2NhbCBmaWxlc3lzdGVtIHRvIHRoZSBkcml2ZS5cbiAgICAgKiBAcGFyYW0gc291cmNlIGZpbGVuYW1lIGluIGxvY2FsIGZpbGVzeXN0ZW1cbiAgICAgKiBAcGFyYW0gZGVzdGluYXRpb25cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHVwbG9hZChzb3VyY2U6IHN0cmluZywgZGVzdGluYXRpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgYSBmaWxlIGZyb20gdGhlIGRyaXZlIHRvIHRoZSBsb2NhbCBmaWxlc3lzdGVtLlxuICAgICAqIEBwYXJhbSBmaWxlbmFtZSBmaWxlbmFtZSBpbiB0aGUgZHJpdmVcbiAgICAgKiBAcGFyYW0gZGVzdGluYXRpb25cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGRvd25sb2FkKGZpbGVuYW1lOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlbGV0ZShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgY3JlYXRlRGVmYXVsdERyaXZlcygpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHZhbGlkYXRlVXBsb2FkKG9wdGlvbnM6IFZhbGlkYXRlVXBsb2FkT3B0aW9ucywgZmlsZToge1xuICAgICAgICBtaW1ldHlwZTogc3RyaW5nO1xuICAgICAgICBzaXplOiBudW1iZXI7XG4gICAgfSk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBDb29raWVPcHRpb25zIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb29raWVNYXBFbnRpdHkgZXh0ZW5kcyBCYXNlIHtcbiAgICByZXF1ZXN0OiBSZXF1ZXN0O1xuICAgIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCByZXNwb25zZTogUmVzcG9uc2UpO1xuICAgIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBDb29raWVPcHRpb25zKTogdm9pZDtcbn1cbiIsImltcG9ydCBDb29raWVNYXBFbnRpdHkgZnJvbSBcIiNzZXJ2ZXIvZW50aXRpZXMvQ29va2llTWFwRW50aXR5LnRzXCI7XG5pbXBvcnQgQ29udGFpbmVyU2VydmljZSBmcm9tIFwiI3NoYXJlZC9zZXJ2aWNlcy9Db250YWluZXJTZXJ2aWNlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmFibGVIZWFkIH0gZnJvbSAnQHVuaGVhZC92dWUnO1xuaW1wb3J0IENvbmZpZ1NlcnZpY2UgZnJvbSBcIiNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50c1wiO1xuZXhwb3J0IGludGVyZmFjZSBQYWdlUmVxdWVzdENvbnRleHRFbnRpdHlPcHRpb25zIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICByZXF1ZXN0OiBSZXF1ZXN0O1xuICAgIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICBzdGF0ZT86IE1hcDxzdHJpbmcsIGFueT47XG4gICAgbm9kZUNvbnRhaW5lcj86IENvbnRhaW5lclNlcnZpY2U7XG4gICAgbm9kZUNvbmZpZz86IENvbmZpZ1NlcnZpY2U7XG4gICAgbm9kZVN0YXRlPzogTWFwPHN0cmluZywgYW55PjtcbiAgICBicm93c2VyQ29udGFpbmVyPzogQ29udGFpbmVyU2VydmljZTtcbiAgICBicm93c2VyQ29uZmlnPzogQ29uZmlnU2VydmljZTtcbiAgICBicm93c2VyU3RhdGU/OiBNYXA8c3RyaW5nLCBhbnk+O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5IHtcbiAgICB1cmw6IHN0cmluZztcbiAgICByZXF1ZXN0OiBSZXF1ZXN0O1xuICAgIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICBjb29raWVzOiBDb29raWVNYXBFbnRpdHk7XG4gICAgaGVhZDogUmVzb2x2YWJsZUhlYWRbXTtcbiAgICBub2RlQ29udGFpbmVyOiBDb250YWluZXJTZXJ2aWNlO1xuICAgIG5vZGVDb25maWc6IENvbmZpZ1NlcnZpY2U7XG4gICAgbm9kZVN0YXRlOiBNYXA8c3RyaW5nLCBhbnk+O1xuICAgIGJyb3dzZXJDb250YWluZXI6IENvbnRhaW5lclNlcnZpY2U7XG4gICAgYnJvd3NlckNvbmZpZzogQ29uZmlnU2VydmljZTtcbiAgICBicm93c2VyU3RhdGU6IE1hcDxzdHJpbmcsIGFueT47XG4gICAgY29uc3RydWN0b3IoZGF0YTogUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5T3B0aW9ucyk7XG4gICAgc2V0QnJvd3NlclN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXROb2RlU3RhdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldFN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXRCcm93c2VyQ29udGFpbmVyVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldE5vZGVDb250YWluZXJWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0Q29udGFpbmVyVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldEJyb3dzZXJDb25maWdWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0Tm9kZUNvbmZpZ1ZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXRDb25maWdWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSc7XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb248VCA9IGFueT4ge1xuICAgIGl0ZW1zOiBUW107XG4gICAgcGFnZTogbnVtYmVyO1xuICAgIHBlcl9wYWdlOiBudW1iZXI7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICB0b3RhbF9wYWdlczogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBGaW5kTWFueU9wdGlvbnMge1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgICBvcmRlckJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgb3JkZXJEaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJyB8ICgnYXNjJyB8ICdkZXNjJylbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGVPcHRpb25zIHtcbiAgICBwYWdlPzogbnVtYmVyO1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIG9yZGVyQnk/OiBGaW5kTWFueU9wdGlvbnNbJ29yZGVyQnknXTtcbiAgICBvcmRlckRpcmVjdGlvbj86IEZpbmRNYW55T3B0aW9uc1snb3JkZXJEaXJlY3Rpb24nXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlTWFueU9wdGlvbnMge1xuICAgIGxpbWl0PzogbnVtYmVyO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWJhc2VSZXBvc2l0b3J5PFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUUHJpbWFyeUtleSA9IGFueSwgVE9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgcHJvdGVjdGVkIGRiOiBLeXNlbHk8YW55PjtcbiAgICBwcm90ZWN0ZWQgdGFibGU6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcHJpbWFyeUtleTogc3RyaW5nO1xuICAgIGF1dG9DcmVhdGVkQXQ6IGJvb2xlYW47XG4gICAgYXV0b1VwZGF0ZWRBdDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihkYjogS3lzZWx5PGFueT4sIHRhYmxlOiBzdHJpbmcsIHByaW1hcnlLZXk6IHN0cmluZyk7XG4gICAgcXVlcnkob3B0aW9ucz86IHtcbiAgICAgICAgcWI/OiBhbnk7XG4gICAgfSAmIFRPcHRpb25zKTogYW55O1xuICAgIGNvdW50KG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxudW1iZXI+O1xuICAgIGZpbmRNYW55KG9wdGlvbnM/OiBGaW5kTWFueU9wdGlvbnMgJiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eVtdPjtcbiAgICBmaW5kT25lKG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eSB8IG51bGw+O1xuICAgIGZpbmRCeUlkKGlkOiBUUHJpbWFyeUtleSwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5IHwgbnVsbD47XG4gICAgZmluZEJ5SWRPckZhaWwoaWQ6IFRQcmltYXJ5S2V5LCBvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPE5vbk51bGxhYmxlPEF3YWl0ZWQ8VEVudGl0eT4+PjtcbiAgICBwYWdpbmF0ZShvcHRpb25zPzogUGFnaW5hdGVPcHRpb25zICYgVE9wdGlvbnMpOiBQcm9taXNlPFBhZ2luYXRpb24+O1xuICAgIHByb3RlY3RlZCBiZWZvcmVDcmVhdGUoZGF0YTogUGFydGlhbDxURW50aXR5Pik6IFByb21pc2U8UGFydGlhbDxURW50aXR5Pj47XG4gICAgcHJvdGVjdGVkIGFmdGVyQ3JlYXRlKGRhdGE6IFRFbnRpdHkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNyZWF0ZShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+KTogUHJvbWlzZTxURW50aXR5PjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlQ3JlYXRlTWFueShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+W10pOiBQcm9taXNlPFBhcnRpYWw8VEVudGl0eT5bXT47XG4gICAgcHJvdGVjdGVkIGFmdGVyQ3JlYXRlTWFueShkYXRhOiBURW50aXR5W10pOiBQcm9taXNlPFRFbnRpdHlbXT47XG4gICAgY3JlYXRlTWFueShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+W10pOiBQcm9taXNlPGFueVtdPjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlVXBkYXRlKGRhdGE6IFBhcnRpYWw8VEVudGl0eT4sIGlkOiBUUHJpbWFyeUtleSk6IFByb21pc2U8UGFydGlhbDxURW50aXR5Pj47XG4gICAgcHJvdGVjdGVkIGFmdGVyVXBkYXRlKGRhdGE6IFRFbnRpdHkpOiBQcm9taXNlPFRFbnRpdHk+O1xuICAgIHVwZGF0ZUJ5SWQoaWQ6IFRQcmltYXJ5S2V5LCBkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+KTogUHJvbWlzZTx2b2lkPjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlRGVsZXRlKGlkOiBUUHJpbWFyeUtleSk6IFByb21pc2U8dm9pZD47XG4gICAgcHJvdGVjdGVkIGFmdGVyRGVsZXRlKGlkOiBUUHJpbWFyeUtleSk6IFByb21pc2U8dm9pZD47XG4gICAgZGVsZXRlQnlJZChpZDogVFByaW1hcnlLZXkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHByb3RlY3RlZCBiZWZvcmVEZWxldGVNYW55KG9wdGlvbnM/OiBEZWxldGVNYW55T3B0aW9ucyAmIFRPcHRpb25zKTogKERlbGV0ZU1hbnlPcHRpb25zICYgVE9wdGlvbnMpIHwgdW5kZWZpbmVkO1xuICAgIHByb3RlY3RlZCBhZnRlckRlbGV0ZU1hbnkob3B0aW9ucz86IERlbGV0ZU1hbnlPcHRpb25zICYgVE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgICBkZWxldGVNYW55KG9wdGlvbnM/OiBEZWxldGVNYW55T3B0aW9ucyAmIFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgVXNlckVudGl0eSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuaW1wb3J0IERhdGFiYXNlUmVwb3NpdG9yeSBmcm9tICcuL0RhdGFiYXNlUmVwb3NpdG9yeSc7XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICBlbWFpbD86IHN0cmluZztcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBzaG93RGVsZXRlZD86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZXBvc2l0b3J5RXZlbnRzIHtcbiAgICAndXNlcjpjcmVhdGVkJzoge1xuICAgICAgICB1c2VyOiBVc2VyRW50aXR5O1xuICAgIH07XG4gICAgJ3VzZXI6dXBkYXRlZCc6IHtcbiAgICAgICAgdXNlcjogVXNlckVudGl0eTtcbiAgICB9O1xuICAgICd1c2VyOmRlbGV0ZWQnOiB7XG4gICAgICAgIHVzZXI6IFVzZXJFbnRpdHk7XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZXJSZXBvc2l0b3J5IGV4dGVuZHMgRGF0YWJhc2VSZXBvc2l0b3J5PFVzZXJFbnRpdHksIG51bWJlciwgVXNlclJlcG9zaXRvcnlRdWVyeU9wdGlvbnM+IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgYXV0b0NyZWF0ZWRBdDogYm9vbGVhbjtcbiAgICBhdXRvVXBkYXRlZEF0OiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIGhhc2hVc2VyUGFzc3dvcmRJZkRlZmluZWQoZGF0YTogUGFydGlhbDxVc2VyRW50aXR5Pik6IFByb21pc2U8dm9pZD47XG4gICAgcHJvdGVjdGVkIGJlZm9yZUNyZWF0ZShkYXRhOiBQYXJ0aWFsPFVzZXJFbnRpdHk+KTogUHJvbWlzZTxQYXJ0aWFsPFVzZXJFbnRpdHk+PjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlQ3JlYXRlTWFueShkYXRhOiBQYXJ0aWFsPFVzZXJFbnRpdHk+W10pOiBQcm9taXNlPFBhcnRpYWw8VXNlckVudGl0eT5bXT47XG4gICAgcHJvdGVjdGVkIGJlZm9yZVVwZGF0ZShkYXRhOiBQYXJ0aWFsPFVzZXJFbnRpdHk+KTogUHJvbWlzZTxQYXJ0aWFsPFVzZXJFbnRpdHk+PjtcbiAgICBwcm90ZWN0ZWQgYWZ0ZXJDcmVhdGUoZGF0YTogVXNlckVudGl0eSk6IFByb21pc2U8dm9pZD47XG4gICAgcXVlcnkob3B0aW9ucz86IFVzZXJSZXBvc2l0b3J5UXVlcnlPcHRpb25zKTogYW55O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tIFwia3lzZWx5XCI7XG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvbkVudGl5RGF0YSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIGV4ZWN1dGVkQXQ6IERhdGUgfCBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWlncmF0aW9uRW50aXR5IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc291cmNlOiBzdHJpbmcgfCBudWxsO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgZXhlY3V0ZWRBdDogRGF0ZSB8IG51bGw7XG4gICAgY29uc3RydWN0b3IoZGF0YTogTWlncmF0aW9uRW50aXlEYXRhKTtcbiAgICB1cChkYjogS3lzZWx5PGFueT4pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRvd24oZGI6IEt5c2VseTxhbnk+KTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBFbW1pdHRlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2UudHMnO1xuaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCBNaWdyYXRpb25FbnRpdHkgZnJvbSAnI3NlcnZlci9lbnRpdGllcy9NaWdyYXRpb25FbnRpdHkudHMnO1xuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb25Tb3VyY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIGV4ZWN1dGVkQXQ6IERhdGUgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBMaXN0RmlsdGVycyB7XG4gICAgc291cmNlPzogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBNaWdyYXRpb25SZXN1bHQge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICByZXN1bHQ6ICdzdWNjZXNzJyB8ICdmYWlsZWQnO1xuICAgIGVycm9yPzogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRvclNlcnZpY2VPcHRpb25zIHtcbiAgICBzb3VyY2VzOiBNaWdyYXRpb25Tb3VyY2VbXTtcbiAgICBkYjogS3lzZWx5PGFueT47XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGVtbWl0dGVyPzogRW1taXR0ZXJTZXJ2aWNlO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdG9yU2VydmljZUV2ZW50cyB7XG4gICAgJ21pZ3JhdG9yOmJlZm9yZS1taWdyYXRlJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xuICAgICdtaWdyYXRvcjphZnRlci1taWdyYXRlJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xuICAgICdtaWdyYXRvcjpiZWZvcmUtcm9sbGJhY2snOiB7XG4gICAgICAgIG1pZ3JhdGlvbnM6IE1pZ3JhdGlvbkVudGl0eVtdO1xuICAgIH07XG4gICAgJ21pZ3JhdG9yOmFmdGVyLXJvbGxiYWNrJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWlncmF0b3JTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgZW1taXR0ZXI6IEVtbWl0dGVyU2VydmljZTtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGI6IEt5c2VseTxhbnk+O1xuICAgIHNvdXJjZXM6IE1pZ3JhdGlvblNvdXJjZVtdO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1pZ3JhdG9yU2VydmljZU9wdGlvbnMpO1xuICAgIGFkZFNvdXJjZShzb3VyY2U6IE1pZ3JhdGlvblNvdXJjZSk6IHZvaWQ7XG4gICAgcHJpdmF0ZSBlbnN1cmVNaWdyYXRpb25zVGFibGU7XG4gICAgbGlzdFNvdXJjZShzb3VyY2U6IE1pZ3JhdGlvblNvdXJjZSk6IFByb21pc2U8TWlncmF0aW9uRW50aXR5W10+O1xuICAgIGxpc3QoZmlsdGVycz86IExpc3RGaWx0ZXJzKTogUHJvbWlzZTxNaWdyYXRpb25FbnRpdHlbXT47XG4gICAgcHJpdmF0ZSBtaWdyYXRlVXA7XG4gICAgcHJpdmF0ZSBtaWdyYXRlRG93bjtcbiAgICBwcml2YXRlIG1pZ3JhdGVGaWxlO1xuICAgIHByaXZhdGUgcm9sbGJhY2tGaWxlO1xuICAgIG1pZ3JhdGUoZmlsdGVycz86IExpc3RGaWx0ZXJzICYge1xuICAgICAgICBzdGVwcz86IG51bWJlcjtcbiAgICB9KTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG4gICAgcm9sbGJhY2soZmlsdGVycz86IExpc3RGaWx0ZXJzICYge1xuICAgICAgICBzdGVwcz86IG51bWJlcjtcbiAgICB9KTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG4gICAgdXAoc3RlcHM/OiBudW1iZXIsIGZpbHRlcnM/OiBMaXN0RmlsdGVycyk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIGRvd24oc3RlcHM/OiBudW1iZXIsIGZpbHRlcnM/OiBMaXN0RmlsdGVycyk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIGxhdGVzdChmaWx0ZXJzPzogTGlzdEZpbHRlcnMpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdFtdPjtcbiAgICBsYXRlc3RPckZhaWwoZmlsdGVycz86IExpc3RGaWx0ZXJzKTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG4gICAgZnJlc2goZmlsdGVycz86IExpc3RGaWx0ZXJzICYge1xuICAgICAgICBzdGVwcz86IG51bWJlcjtcbiAgICB9KTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQmFzZUFjbCBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0FjbEVudGl0eS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2wgZXh0ZW5kcyBCYXNlQWNsIHtcbiAgICBhdXRob3JpemUoYWN0aW9uOiBzdHJpbmcsIHN1YmplY3Q6IGFueSwgb2JqZWN0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQ7XG59XG4iLCJpbXBvcnQgdHlwZSBBY2wgZnJvbSAnI3NlcnZlci9lbnRpdGllcy9BY2xFbnRpdHkudHMnO1xuaW1wb3J0IHR5cGUgeyBDb29raWVNYXBFbnRpdHkgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZSB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBIdHRwQ29udGV4dCB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT47XG4gICAgYm9keTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb29raWU6IENvb2tpZU1hcEVudGl0eTtcbiAgICBhY2w6IEFjbDtcbiAgICByZXF1ZXN0OiBSZXF1ZXN0O1xuICAgIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IEh0dHBDb250ZXh0IH0gZnJvbSBcIi4vSHR0cENvbnRleHRDb250cmFjdFwiO1xuZXhwb3J0IGludGVyZmFjZSBSZWRpcmVjdCB7XG4gICAgcmVkaXJlY3Q6IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIEhhbmRsZVJlc3VsdCA9IFJlY29yZDxzdHJpbmcsIGFueT4gfCBSZWRpcmVjdCB8IHZvaWQ7XG5leHBvcnQgaW50ZXJmYWNlIE1pZGRsZXdhcmUge1xuICAgIGhhbmRsZShjdHg6IGFueSk6IEhhbmRsZVJlc3VsdCB8IFByb21pc2U8SGFuZGxlUmVzdWx0Pjtcbn1cbnR5cGUgRXh0cmFjdE1pZGRsZXdhcmVDb250ZXh0PE0gZXh0ZW5kcyBNaWRkbGV3YXJlPiA9IEF3YWl0ZWQ8UmV0dXJuVHlwZTxNWydoYW5kbGUnXT4+IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA/IEF3YWl0ZWQ8UmV0dXJuVHlwZTxNWydoYW5kbGUnXT4+IDoge307XG50eXBlIFByb2Nlc3NNaWRkbGV3YXJlQXJyYXk8VCBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmVbXT4gPSBUIGV4dGVuZHMgcmVhZG9ubHkgW2luZmVyIEZpcnN0IGV4dGVuZHMgTWlkZGxld2FyZSwgLi4uaW5mZXIgUmVzdCBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmVbXV0gPyBFeHRyYWN0TWlkZGxld2FyZUNvbnRleHQ8Rmlyc3Q+ICYgUHJvY2Vzc01pZGRsZXdhcmVBcnJheTxSZXN0PiA6IHt9O1xuZXhwb3J0IHR5cGUgTWlkZGxld2FyZUhhbmRsZVJlc3VsdDxUIGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZVtdID0gcmVhZG9ubHkgTWlkZGxld2FyZVtdPiA9IFByb2Nlc3NNaWRkbGV3YXJlQXJyYXk8VD47XG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXI8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICAoY3R4OiBIdHRwQ29udGV4dCAmIFQpOiBQcm9taXNlPGFueT4gfCBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IEhhbmRsZXIsIE1pZGRsZXdhcmUgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG50eXBlIFJvdXRlTWV0aG9kID0gJ2dldCcgfCAnR0VUJyB8ICdwb3N0JyB8ICdQT1NUJyB8ICdwdXQnIHwgJ1BVVCcgfCAncGF0Y2gnIHwgJ1BBVENIJyB8ICdkZWxldGUnIHwgJ0RFTEVURSc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3V0ZSB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIG1ldGhvZDogUm91dGVNZXRob2Q7XG4gICAgaGFuZGxlcjogSGFuZGxlcjxhbnk+IHwgbnVsbDtcbiAgICBtaWRkbGV3YXJlczogTWlkZGxld2FyZVtdO1xuICAgIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxSb3V0ZT4pO1xuICAgIHN0YXRpYyBwYXJhbXMocm91dGVQYXRoOiBzdHJpbmcsIHJlcXVlc3RQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHN0YXRpYyBxdWVyeShyZXF1ZXN0UGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICB0b0pTT04oKToge1xuICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICAgIG1ldGhvZDogUm91dGVNZXRob2Q7XG4gICAgICAgIG1pZGRsZXdhcmVzOiBzdHJpbmdbXTtcbiAgICAgICAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsO1xuICAgIH07XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgUm91dGUgZnJvbSAnI3NlcnZlci9lbnRpdGllcy9Sb3V0ZUVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSB7IEhhbmRsZXIsIE1pZGRsZXdhcmUsIE1pZGRsZXdhcmVIYW5kbGVSZXN1bHQgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnI3NoYXJlZC9pbmRleC50cyc7XG50eXBlIFJvdXRlQ29udGV4dCA9ICdnbG9iYWwnIHwgJ2dyb3VwJyB8ICdyb3V0ZSc7XG5pbnRlcmZhY2UgTWlkZGxld2FyZVJlZ2lzdGVyIHtcbiAgICBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlO1xuICAgIGNvbnRleHQ6IFJvdXRlQ29udGV4dDtcbn1cbmludGVyZmFjZSBMb2FkT3B0aW9ucyB7XG4gICAgZGVidWc/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJFdmVudHMge1xuICAgICdyb3V0ZXI6cmVnaXN0ZXJlZCc6IHtcbiAgICAgICAgcm91dGVyOiBSb3V0ZXJTZXJ2aWNlO1xuICAgIH07XG4gICAgJ3JvdXRlcjpsb2FkZWQnOiB7XG4gICAgICAgIHJvdXRlcjogUm91dGVyU2VydmljZTtcbiAgICB9O1xufVxuZGVjbGFyZSBjb25zdCBSb3V0ZXJTZXJ2aWNlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBsaXN0ZW5lcnM6IGltcG9ydChcIiNzaGFyZWQvaW5kZXgudHNcIikuTGlzdGVuZXJbXTtcbiAgICAgICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIGVtaXRBc3luYyhldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL2luZGV4LnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVyU2VydmljZTxDID0ge30+IGV4dGVuZHMgUm91dGVyU2VydmljZV9iYXNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgcm91dGVzOiBSb3V0ZVtdO1xuICAgIG1pZGRsZXdhcmVzOiBNaWRkbGV3YXJlUmVnaXN0ZXJbXTtcbiAgICBwcmVmaXhlczogc3RyaW5nW107XG4gICAgZ3JvdXBzOiBSb3V0ZXJTZXJ2aWNlPGFueT5bXTtcbiAgICBncm91cFByZWZpeGVzOiBzdHJpbmdbXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8Um91dGVyU2VydmljZTxDPj4pO1xuICAgIHVzZTxUIGV4dGVuZHMgTWlkZGxld2FyZT4obWlkZGxld2FyZTogVCwgY29udGV4dD86IFJvdXRlQ29udGV4dCk6IFJvdXRlclNlcnZpY2U8QyAmIE1pZGRsZXdhcmVIYW5kbGVSZXN1bHQ8W3R5cGVvZiBtaWRkbGV3YXJlXT4+O1xuICAgIHByZWZpeChwcmVmaXg6IHN0cmluZyk6IHRoaXM7XG4gICAgbWFrZVBhdGgoYXJnczogc3RyaW5nKTogc3RyaW5nO1xuICAgIGFkZChwYXlsb2FkOiBQaWNrPFJvdXRlLCAncGF0aCcgfCAnbWV0aG9kJyB8ICdoYW5kbGVyJz4pOiB2b2lkO1xuICAgIGdldChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXI8Qz4pOiB2b2lkO1xuICAgIHBvc3QocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyPEM+KTogdm9pZDtcbiAgICBwdXQocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyPEM+KTogdm9pZDtcbiAgICBwYXRjaChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXI8Qz4pOiB2b2lkO1xuICAgIG1hbnkobWV0aG9kczogUm91dGVbJ21ldGhvZCddW10sIHBhdGg6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcjxDPik6IHZvaWQ7XG4gICAgZGVsZXRlKHBhdGg6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcjxDPik6IHZvaWQ7XG4gICAgZ3JvdXAoKTogUm91dGVyU2VydmljZTxDPjtcbiAgICByZXNvbHZlKG1ldGhvZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBSb3V0ZSB8IG51bGw7XG4gICAgZXhlY3V0ZShyb3V0ZTogUm91dGUsIGluaXRpYWxDdHg6IGFueSk6IFByb21pc2U8YW55PjtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGxpc3QoKTogUm91dGVbXTtcbiAgICBsb2FkKG9wdGlvbnM/OiBMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZFN5bmMob3B0aW9ucz86IExvYWRPcHRpb25zKTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IEpvYiB9IGZyb20gJ25vZGUtc2NoZWR1bGUnO1xuZXhwb3J0IGludGVyZmFjZSBSb3V0aW5lSGFuZGxlciB7XG4gICAgKCk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0aW5lRW50aXR5T3B0aW9ucyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjcm9uOiBzdHJpbmc7XG4gICAgaGFuZGxlcj86IFJvdXRpbmVIYW5kbGVyO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGluZUVudGl0eSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjcm9uOiBzdHJpbmc7XG4gICAgam9iPzogSm9iO1xuICAgIHN0YXRpYyBjcmVhdGUoKTogUm91dGluZUVudGl0eTtcbiAgICBoYW5kbGU6IFJvdXRpbmVIYW5kbGVyO1xuICAgIHNldElkKGlkOiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldENyb24oY3Jvbjogc3RyaW5nKTogdGhpcztcbiAgICBzZXRIYW5kbGVyKGhhbmRsZXI6IFJvdXRpbmVIYW5kbGVyKTogdGhpcztcbn1cbiIsImltcG9ydCBSb3V0aW5lRW50aXR5IGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvUm91dGluZUVudGl0eS50cyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnI3NoYXJlZC9pbmRleC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIEFkZE9wdGlvbnMge1xuICAgIGlkPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZXJTZXJ2aWNlT3B0aW9ucyB7XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlckV2ZW50cyB7XG4gICAgJ3NjaGVkdWxlcjpyZWdpc3RlcmVkJzoge1xuICAgICAgICBzY2hlZHVsZXI6IFNjaGVkdWxlclNlcnZpY2U7XG4gICAgfTtcbiAgICAnc2NoZWR1bGVyOmxvYWRlZCc6IHtcbiAgICAgICAgc2NoZWR1bGVyOiBTY2hlZHVsZXJTZXJ2aWNlO1xuICAgIH07XG4gICAgJ3NjaGVkdWxlcjpib290ZWQnOiB7XG4gICAgICAgIHNjaGVkdWxlcjogU2NoZWR1bGVyU2VydmljZTtcbiAgICB9O1xuICAgICdzY2hlZHVsZXI6c2h1dGRvd25lZCc6IHtcbiAgICAgICAgc2NoZWR1bGVyOiBTY2hlZHVsZXJTZXJ2aWNlO1xuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY2hlZHVsZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgcm91dGluZXM6IFJvdXRpbmVFbnRpdHlbXTtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgZGlyczogc3RyaW5nW107XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IFNjaGVkdWxlclNlcnZpY2VPcHRpb25zKTtcbiAgICBzdGF0aWMgY3JlYXRlKG9wdGlvbnM/OiBTY2hlZHVsZXJTZXJ2aWNlT3B0aW9ucyk6IFNjaGVkdWxlclNlcnZpY2U7XG4gICAgc2V0TG9nZ2VyKGxvZ2dlcjogTG9nZ2VyU2VydmljZSk6IHZvaWQ7XG4gICAgc2V0RGVidWcoZGVidWc6IGJvb2xlYW4pOiB2b2lkO1xuICAgIGFkZERpcihkaXI6IHN0cmluZyk6IHZvaWQ7XG4gICAgYWRkKHJvdXRpbmU6IE9taXQ8Um91dGluZUVudGl0eSwgJ2pvYic+KTogdm9pZDtcbiAgICByZW1vdmUoaWQ6IFJvdXRpbmVFbnRpdHlbJ2lkJ10gfCBSb3V0aW5lRW50aXR5WydpZCddW10pOiB2b2lkO1xuICAgIGxvYWRGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWREaXJlY3RvcnkoZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBoYXMoaWQ6IFJvdXRpbmVFbnRpdHlbJ2lkJ10pOiBib29sZWFuO1xuICAgIHN0YXJ0Um91dGluZShpZDogUm91dGluZUVudGl0eVsnaWQnXSk6IFByb21pc2U8dm9pZD47XG4gICAgYWRkQW5kU3RhcnQocm91dGluZTogT21pdDxSb3V0aW5lRW50aXR5LCAnam9iJz4pOiBQcm9taXNlPHZvaWQ+O1xuICAgIHN0b3BSb3V0aW5lKGlkOiBSb3V0aW5lRW50aXR5WydpZCddKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzdG9wQW5kUmVtb3ZlKGlkOiBSb3V0aW5lRW50aXR5WydpZCddKTogUHJvbWlzZTx2b2lkPjtcbiAgICBib290KCk6IFByb21pc2U8dm9pZD47XG4gICAgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsaXN0KCk6IFJvdXRpbmVFbnRpdHlbXTtcbn1cbiIsImltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSBcImt5c2VseVwiO1xuZXhwb3J0IGludGVyZmFjZSBTZWVkZXJFbnRpeURhdGEge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlZWRlckVudGl0eSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFNlZWRlckVudGl5RGF0YSk7XG4gICAgcnVuKGRiOiBLeXNlbHk8YW55Pik6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgRW1taXR0ZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvRW1taXR0ZXJTZXJ2aWNlLnRzJztcbmltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgU2VlZGVyRW50aXR5IGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvU2VlZGVyRW50aXR5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgU2VlZGVyU291cmNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGRpcmVjdG9yeTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBMaXN0RmlsdGVycyB7XG4gICAgc291cmNlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgbmFtZT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWVkZXJSZXN1bHQge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICByZXN1bHQ6ICdzdWNjZXNzJyB8ICdmYWlsZWQnO1xuICAgIGVycm9yPzogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWVkZXJFdmVudHMge1xuICAgICdzZWVkZXI6YmVmb3JlLXJ1bic6IHtcbiAgICAgICAgc2VlZGVyczogc3RyaW5nW107XG4gICAgfTtcbiAgICAnc2VlZGVyOmFmdGVyLXJ1bic6IHtcbiAgICAgICAgc2VlZGVyczogc3RyaW5nW107XG4gICAgfTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VlZGVyU2VydmljZU9wdGlvbnMge1xuICAgIGRiOiBLeXNlbHk8YW55PjtcbiAgICBzb3VyY2VzPzogU2VlZGVyU291cmNlW107XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGVtbWl0dGVyPzogRW1taXR0ZXJTZXJ2aWNlO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWVlZGVyU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2U7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRiOiBLeXNlbHk8YW55PjtcbiAgICBzb3VyY2VzOiBTZWVkZXJTb3VyY2VbXTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTZWVkZXJTZXJ2aWNlT3B0aW9ucyk7XG4gICAgYWRkU291cmNlKHNvdXJjZTogU2VlZGVyU291cmNlKTogdm9pZDtcbiAgICBsaXN0U291cmNlKHNvdXJjZTogU2VlZGVyU291cmNlKTogUHJvbWlzZTxTZWVkZXJFbnRpdHlbXT47XG4gICAgbGlzdChmaWx0ZXJzPzogTGlzdEZpbHRlcnMpOiBQcm9taXNlPFNlZWRlckVudGl0eVtdPjtcbiAgICBydW5TZWVkZXIoc2VlZGVyOiBTZWVkZXJFbnRpdHkpOiBQcm9taXNlPFNlZWRlclJlc3VsdD47XG4gICAgcnVuKGZpbHRlcnM/OiBMaXN0RmlsdGVycyAmIHtcbiAgICAgICAgc3RlcHM/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8U2VlZGVyUmVzdWx0W10+O1xufVxuIiwiaW1wb3J0IHR5cGUgUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5IGZyb20gXCIjc2VydmVyL2VudGl0aWVzL1BhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eS50c1wiO1xuaW1wb3J0IHR5cGUgeyBVc2VyUmVwb3NpdG9yeUV2ZW50cyB9IGZyb20gXCIjc2VydmVyL3JlcG9zaXRvcmllcy9Vc2VyUmVwb3NpdG9yeS50c1wiO1xuaW1wb3J0IHR5cGUgeyBDbGlFdmVudHMgfSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9DbGlTZXJ2aWNlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IE1pZ3JhdG9yU2VydmljZUV2ZW50cyB9IGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL01pZ3JhdG9yU2VydmljZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXJFdmVudHMgfSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJTZXJ2aWNlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNjaGVkdWxlckV2ZW50cyB9IGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL1NjaGVkdWxlclNlcnZpY2UudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VlZGVyRXZlbnRzIH0gZnJvbSBcIiNzZXJ2ZXIvc2VydmljZXMvU2VlZGVyU2VydmljZS50c1wiO1xuZXhwb3J0IGludGVyZmFjZSBFdmVudENvbnRyYWN0IGV4dGVuZHMgU2VlZGVyRXZlbnRzLCBSb3V0ZXJFdmVudHMsIENsaUV2ZW50cywgU2NoZWR1bGVyRXZlbnRzLCBNaWdyYXRvclNlcnZpY2VFdmVudHMsIFVzZXJSZXBvc2l0b3J5RXZlbnRzIHtcbiAgICAncGFnZTpyZXF1ZXN0OnN0YXJ0JzogUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5O1xuICAgICdwYWdlOnJlcXVlc3Q6YmVmb3JlLXJlbmRlcic6IFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eTtcbiAgICAncGFnZTpyZXF1ZXN0OmFmdGVyLXJlbmRlcic6IFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eTtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQmFzZUVtbWl0dGVyU2VydmljZSBmcm9tIFwiLi4vLi4vc2hhcmVkL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZVwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudENvbnRyYWN0IH0gZnJvbSAnLi4vY29udHJhY3RzL0V2ZW50Q29udHJhY3QnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW1taXR0ZXJTZXJ2aWNlIGV4dGVuZHMgQmFzZUVtbWl0dGVyU2VydmljZTxFdmVudENvbnRyYWN0PiB7XG59XG4iLCJpbXBvcnQgbXMgZnJvbSAnbXMnO1xuaW1wb3J0IEVudlNlcnZpY2UgZnJvbSAnLi9FbnZTZXJ2aWNlJztcbmltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5pbnRlcmZhY2UgVVJMT3B0aW9ucyB7XG4gICAgZGF0YT86IGFueTtcbiAgICBleHBpcmVzPzogbXMuU3RyaW5nVmFsdWU7XG4gICAgZXhwaXJlQXQ/OiBudW1iZXIgfCBEYXRlO1xufVxuaW50ZXJmYWNlIEVuY3J5cHRTZXJ2aWNlT3B0aW9ucyB7XG4gICAga2V5Pzogc3RyaW5nO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIGVudj86IEVudlNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmNyeXB0U2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGVudjogRW52U2VydmljZTtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGdvcml0aG07XG4gICAgcHJpdmF0ZSBrZXk7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogRW5jcnlwdFNlcnZpY2VPcHRpb25zKTtcbiAgICBzdGF0aWMgY3JlYXRlKG9wdGlvbnM6IEVuY3J5cHRTZXJ2aWNlT3B0aW9ucyk6IEVuY3J5cHRTZXJ2aWNlO1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdm9pZDtcbiAgICBzZXRMb2dnZXIobG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKTogdm9pZDtcbiAgICBzZXRFbnYoZW52OiBFbnZTZXJ2aWNlKTogdm9pZDtcbiAgICBzZXRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgIGVuY3J5cHQodGV4dDogc3RyaW5nKTogc3RyaW5nO1xuICAgIGRlY3J5cHQob3B0aW9uczogc3RyaW5nKTogc3RyaW5nO1xuICAgIGVuY3J5cHRPYmplY3Qob2JqOiBhbnkpOiBzdHJpbmc7XG4gICAgZGVjcnlwdE9iamVjdDxUPihlbmNyeXB0ZWRTdHJpbmc6IHN0cmluZyk6IFQ7XG4gICAgdXJsKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IFVSTE9wdGlvbnMpOiBzdHJpbmc7XG4gICAgdmVyaWZ5VXJsKGVuY3J5cHRlZEtleTogc3RyaW5nKTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuaW1wb3J0IEVudlNlcnZpY2UgZnJvbSAnLi9FbnZTZXJ2aWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgRXhjZXB0aW9uU2VydmljZU9wdGlvbnMge1xuICAgIGlnbm9yZUNvZGVFcnJvcnM/OiBudW1iZXJbXTtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIGVudj86IEVudlNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeGNlcHRpb25TZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgaWdub3JlQ29kZUVycm9yczogbnVtYmVyW107XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGVudjogRW52U2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogRXhjZXB0aW9uU2VydmljZU9wdGlvbnMpO1xuICAgIGhhbmRsZShlcnJvcjogRXJyb3IsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFJlc3BvbnNlPGFueSwgUmVjb3JkPHN0cmluZywgYW55Pj47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBIYXNoZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgaGFzaCh2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIGNvbXBhcmUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBTZXJ2ZXIgfSBmcm9tICdodHRwJztcbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycyc7XG5pbXBvcnQgUm91dGVyIGZyb20gJy4vUm91dGVyU2VydmljZS50cyc7XG5pbXBvcnQgRXhjZXB0aW9uU2VydmljZSBmcm9tICcuL0V4Y2VwdGlvblNlcnZpY2UudHMnO1xuaW1wb3J0IFJvdXRlIGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvUm91dGVFbnRpdHkudHMnO1xuaW1wb3J0IHsgRW1taXR0ZXJTZXJ2aWNlLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnI3NoYXJlZC9pbmRleC50cyc7XG5pbXBvcnQgRW52U2VydmljZSBmcm9tICcuL0VudlNlcnZpY2UudHMnO1xuZXhwb3J0IGludGVyZmFjZSBIdHRwU2VydmljZU9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICByb3V0ZXI/OiBSb3V0ZXI7XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBleGNlcHRpb24/OiBFeGNlcHRpb25TZXJ2aWNlO1xuICAgIGVtbWl0dGVyPzogRW1taXR0ZXJTZXJ2aWNlO1xuICAgIGVudj86IEVudlNlcnZpY2U7XG4gICAgb3JpZ2lucz86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cFNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBhcHA6IGV4cHJlc3MuQXBwbGljYXRpb247XG4gICAgc2VydmVyOiBTZXJ2ZXIgfCBudWxsO1xuICAgIHJvdXRlcjogUm91dGVyO1xuICAgIGV4Y2VwdGlvbjogRXhjZXB0aW9uU2VydmljZTtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZW1taXR0ZXI6IEVtbWl0dGVyU2VydmljZTtcbiAgICBlbnY6IEVudlNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgb25VbmhhbmRsZXJSb3V0ZWQ6ICgocmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSkgPT4gdm9pZCkgfCBudWxsO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEh0dHBTZXJ2aWNlT3B0aW9ucyk7XG4gICAgZ2V0RXhwcmVzc0FwcCgpOiBleHByZXNzLkFwcGxpY2F0aW9uO1xuICAgIGNvcnMob3B0aW9uczogY29ycy5Db3JzT3B0aW9ucyk6IHZvaWQ7XG4gICAgdXNlOiBleHByZXNzLkFwcGxpY2F0aW9uWyd1c2UnXTtcbiAgICByb3V0ZXMoKTogdm9pZDtcbiAgICBwYXJzZXIocmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSwgbmV4dDogZXhwcmVzcy5OZXh0RnVuY3Rpb24pOiB2b2lkO1xuICAgIGV4ZWN1dGUodXJsOiBVUkwsIHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCwgcmVzcG9uc2U6IGV4cHJlc3MuUmVzcG9uc2UsIHJvdXRlOiBSb3V0ZSk6IFByb21pc2U8dm9pZD47XG4gICAgc3RhcnQoKTogdm9pZDtcbiAgICBzdG9wKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBVc2VyRW50aXR5IH0gZnJvbSBcIiNzaGFyZWQvaW5kZXgudHNcIjtcbmltcG9ydCB0eXBlIEh0dHBTZXJ2aWNlIGZyb20gXCIuL0h0dHBTZXJ2aWNlXCI7XG5pbXBvcnQgc3VwZXJ0ZXN0LCB7IHR5cGUgVGVzdCB9IGZyb20gJ3N1cGVydGVzdCc7XG5leHBvcnQgaW50ZXJmYWNlIEh0dHBUZXN0ZXJTZXJ2aWNlT3B0aW9ucyB7XG4gICAgaHR0cDogSHR0cFNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwVGVzdGVyU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGh0dHA6IEh0dHBTZXJ2aWNlO1xuICAgIHJlcXVlc3Q6IHN1cGVydGVzdC5TdXBlclRlc3Q8c3VwZXJ0ZXN0LlRlc3Q+O1xuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgY29va2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBIdHRwVGVzdGVyU2VydmljZU9wdGlvbnMpO1xuICAgIGNyZWF0ZShyZXF1ZXN0OiBUZXN0KTogVGVzdDtcbiAgICBnZXQodXJsOiBzdHJpbmcpOiBUZXN0O1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnkpOiBUZXN0O1xuICAgIGxvZ2luQnlVc2VyKHVzZXI6IFVzZXJFbnRpdHkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvZ2luQnlVc2VybmFtZSh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBCYXNlTGlmZWN5Y2xlU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xpZmVjeWNsZVNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlU2VydmljZSBleHRlbmRzIEJhc2VMaWZlY3ljbGVTZXJ2aWNlIHtcbiAgICBhZGREaXJlY3RvcnkoZGlybmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgQ29sdW1uVHlwZSwgR2VuZXJhdGVkIH0gZnJvbSAna3lzZWx5JztcbmV4cG9ydCBpbnRlcmZhY2UgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBkZWxldGVkX2F0PzogQ29sdW1uVHlwZTxEYXRlIHwgc3RyaW5nIHwgbnVsbCwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgRGF0ZSB8IHN0cmluZyB8IG51bGw+O1xufVxuZXhwb3J0IGludGVyZmFjZSBUaW1lc3RhbXBUYWJsZSB7XG4gICAgY3JlYXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlLCBzdHJpbmcgfCB1bmRlZmluZWQsIG5ldmVyPjtcbiAgICB1cGRhdGVkX2F0OiBDb2x1bW5UeXBlPERhdGUsIHN0cmluZyB8IHVuZGVmaW5lZCwgbmV2ZXI+O1xufVxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb25zVGFibGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBtb2R1bGU6IHN0cmluZyB8IG51bGw7XG4gICAgZXhlY3V0ZWRfYXQ6IENvbHVtblR5cGU8RGF0ZSwgc3RyaW5nIHwgdW5kZWZpbmVkLCBuZXZlcj47XG59XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgdmVyaWZpZWRfYXQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlck1ldGFUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBUb2tlblRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgZXhwaXJlc19hdDogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBVc2VyUm9sZVRhYmxlIHtcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgcm9sZV9pZDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIG9yaWdpbjogc3RyaW5nO1xuICAgIHN1YmplY3Q6IHN0cmluZztcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICBjb25kaXRpb25zOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uQXNzaWdubWVudFRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgcGVybWlzc2lvbl9pZDogbnVtYmVyO1xuICAgIGFzc2lnbmFibGVfdHlwZTogc3RyaW5nO1xuICAgIGFzc2lnbmFibGVfaWQ6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIGRyaXZlOiBzdHJpbmc7XG4gICAgbWltZXR5cGU6IHN0cmluZztcbiAgICBjbGllbnRfbmFtZTogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgcHVycG9zZTogc3RyaW5nO1xuICAgIHB1YmxpYzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZU1ldGFUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBmaWxlX2lkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRTZXNzaW9uVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgbWltZV90eXBlczogc3RyaW5nO1xuICAgIG1heF9zaXplOiBudW1iZXI7XG4gICAgZXhwaXJlc19hdDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBKb2JUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHF1ZXVlX2lkOiBzdHJpbmc7XG4gICAgc3RhdHVzOiAncGVuZGluZycgfCAnaW5fcHJvZ3Jlc3MnIHwgJ2NvbXBsZXRlZCcgfCAnZmFpbGVkJztcbiAgICBkYXRhOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlc3VsdDogc3RyaW5nIHwgbnVsbDtcbiAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzdWJqZWN0OiBzdHJpbmc7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgYm9keTogc3RyaW5nIHwgbnVsbDtcbiAgICBlbmdpbmU6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVNZXRhVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgdGVtcGxhdGVfaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT2F1dGhBY2NvdW50VGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHByb3ZpZGVyOiBzdHJpbmc7XG4gICAgcHJvdmlkZXJfdXNlcl9pZDogc3RyaW5nO1xuICAgIHByb3ZpZGVyX3VzZXJfZW1haWw6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9hdXRoVG9rZW5UYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIHVzZXJfaWQ6IG51bWJlciB8IG51bGw7XG4gICAgcHJvdmlkZXI6IHN0cmluZyB8IG51bGw7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICBleHBpcmVzX2F0OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VDb250cmFjdCB7XG4gICAgdXNlcnM6IFVzZXJUYWJsZTtcbiAgICB1c2VyX21ldGFzOiBVc2VyTWV0YVRhYmxlO1xuICAgIHRva2VuczogVG9rZW5UYWJsZTtcbiAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25zVGFibGU7XG4gICAgZmlsZXM6IEZpbGVUYWJsZTtcbiAgICBmaWxlX21ldGFzOiBGaWxlTWV0YVRhYmxlO1xuICAgIGZpbGVfdXBsb2FkX3Nlc3Npb25zOiBVcGxvYWRTZXNzaW9uVGFibGU7XG4gICAgcm9sZXM6IFJvbGVUYWJsZTtcbiAgICB1c2VyX3JvbGVzOiBVc2VyUm9sZVRhYmxlO1xuICAgIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uVGFibGU7XG4gICAgcGVybWlzc2lvbnNfYXNzaWdubWVudHM6IFBlcm1pc3Npb25Bc3NpZ25tZW50VGFibGU7XG4gICAgam9iczogSm9iVGFibGU7XG4gICAgZW1haWxfdGVtcGxhdGVzOiBFbWFpbFRlbXBsYXRlVGFibGU7XG4gICAgZW1haWxfdGVtcGxhdGVfbWV0YXM6IEVtYWlsVGVtcGxhdGVNZXRhVGFibGU7XG4gICAgb2F1dGhfYWNjb3VudHM6IE9hdXRoQWNjb3VudFRhYmxlO1xuICAgIG9hdXRoX3Rva2VuczogT2F1dGhUb2tlblRhYmxlO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBFeHByZXNzaW9uQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhZmlsdGVyIHtcbiAgICBlcT86IHN0cmluZztcbiAgICBuZXE/OiBzdHJpbmc7XG4gICAgbGlrZT86IHN0cmluZztcbiAgICBubGlrZT86IHN0cmluZztcbiAgICBpbj86IHN0cmluZ1tdO1xuICAgIG5pbj86IHN0cmluZ1tdO1xuICAgIGd0Pzogc3RyaW5nO1xuICAgIGd0ZT86IHN0cmluZztcbiAgICBsdD86IHN0cmluZztcbiAgICBsdGU/OiBzdHJpbmc7XG4gICAgaXNfbnVsbD86IGJvb2xlYW47XG4gICAgZXhpc3RzPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFRdWVyeVBheWxvYWQge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IE1ldGFkYWZpbHRlcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFkYXRhUXVlcnlTZXJ2aWNlPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4ge1xuICAgIHByaXZhdGUgcGF5bG9hZDtcbiAgICBwcml2YXRlIHRhYmxlO1xuICAgIHByaXZhdGUgZm9yZWlnbktleTtcbiAgICBwcml2YXRlIHBhcmVudEtleTtcbiAgICBjb25zdHJ1Y3RvcihwYXlsb2FkOiBNZXRhZGF0YVF1ZXJ5UGF5bG9hZCwgdGFibGU6IFQsIGZvcmVpZ25LZXk6IGtleW9mIERhdGFiYXNlW1RdLCBwYXJlbnRLZXk/OiBzdHJpbmcpO1xuICAgIGdldCBuZWVkV2hlcmVJbigpOiBib29sZWFuO1xuICAgIGdldCBuZWVkV2hlcmVOb3RJbigpOiBib29sZWFuO1xuICAgIGFwcGx5KGRiUXVlcnk6IGFueSk6IGFueTtcbiAgICBwcml2YXRlIGJ1aWxkUm93Q29uZGl0aW9ucztcbiAgICB3aGVyZUluOiA8REJRdWVyeT4oZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gREJRdWVyeTtcbiAgICB3aGVyZU5vdEluOiA8REJRdWVyeT4oZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gREJRdWVyeTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIGZvcmVpZ25LZXk6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihwYXlsb2FkOiBQaWNrPE1ldGFkYXRhU2VydmljZSwgJ3RhYmxlJyB8ICdmb3JlaWduS2V5JyB8ICdpZCc+KTtcbiAgICBzdGF0aWMgcGFyc2UodmFsdWU6IGFueSk6IGFueTtcbiAgICBzdGF0aWMgZmxhdHRlbihpdGVtczogQXJyYXk8e1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHZhbHVlOiBhbnk7XG4gICAgfT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGdldDxUID0gYW55PihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgIGdldDxUID0gYW55PihuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogVCk6IFByb21pc2U8VD47XG4gICAgc2V0KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdCgpOiBQcm9taXNlPEFycmF5PHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogYW55O1xuICAgIH0+PjtcbiAgICBhbGwoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pjtcbn1cbiIsImV4cG9ydCB0eXBlIElwY01lc3NhZ2U8VCA9IGFueT4gPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBldmVudDogc3RyaW5nO1xuICAgIGRhdGE6IFQ7XG59O1xudHlwZSBJcGNMaXN0ZW5lcjxUID0gYW55PiA9IChkYXRhOiBUKSA9PiB2b2lkO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUGx1Z2luSXBjQ2xpZW50IHtcbiAgICBwcml2YXRlIGxpc3RlbmVycztcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIG9uPFQgPSBhbnk+KGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBJcGNMaXN0ZW5lcjxUPik6IHZvaWQ7XG4gICAgb2ZmPFQgPSBhbnk+KGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBJcGNMaXN0ZW5lcjxUPik6IHZvaWQ7XG4gICAgZW1pdDxUID0gYW55PihldmVudDogc3RyaW5nLCBkYXRhPzogVCk6IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbnR5cGUgSXBjTGlzdGVuZXI8VCA9IGFueT4gPSAoZGF0YTogVCkgPT4gdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFBsdWdpbklwY0hvc3Qge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hpbGQ7XG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnM7XG4gICAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcyk7XG4gICAgb248VCA9IGFueT4oZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IElwY0xpc3RlbmVyPFQ+KTogdm9pZDtcbiAgICBvZmY8VCA9IGFueT4oZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IElwY0xpc3RlbmVyPFQ+KTogdm9pZDtcbiAgICBlbWl0PFQgPSBhbnk+KGV2ZW50OiBzdHJpbmcsIGRhdGE/OiBUKTogc3RyaW5nO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgUGx1Z2luSXBjQ2xpZW50IH0gZnJvbSAnLi9QbHVnaW5JcGNDbGllbnQudHMnO1xuZXhwb3J0IHR5cGUgSHR0cE1ldGhvZCA9ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnIHwgJ0RFTEVURSc7XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlRGVmaW5pdGlvbiB7XG4gICAgbWV0aG9kOiBIdHRwTWV0aG9kO1xuICAgIHBhdGg6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVSZXF1ZXN0IHtcbiAgICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBtZXRob2Q6IEh0dHBNZXRob2Q7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlUmVzcG9uc2VQYXlsb2FkIHtcbiAgICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBzdGF0dXM6IG51bWJlcjtcbiAgICBib2R5PzogYW55O1xuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVJlcGx5IHtcbiAgICBzdGF0dXMoY29kZTogbnVtYmVyKTogUm91dGVSZXBseTtcbiAgICBzZW5kKGJvZHk/OiBhbnkpOiB2b2lkO1xufVxuZXhwb3J0IHR5cGUgUm91dGVIYW5kbGVyID0gKHJlcTogUm91dGVSZXF1ZXN0LCByZXBseTogUm91dGVSZXBseSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBQbHVnaW5Sb3V0ZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50O1xuICAgIHByaXZhdGUgcm91dGVzO1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudDogUGx1Z2luSXBjQ2xpZW50KTtcbiAgICBwcml2YXRlIGRpc3BhdGNoO1xuICAgIHByaXZhdGUgcmVnaXN0ZXI7XG4gICAgZ2V0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogUm91dGVIYW5kbGVyKTogdm9pZDtcbiAgICBwb3N0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogUm91dGVIYW5kbGVyKTogdm9pZDtcbiAgICBwdXQocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSb3V0ZUhhbmRsZXIpOiB2b2lkO1xuICAgIHBhdGNoKHBhdGg6IHN0cmluZywgaGFuZGxlcjogUm91dGVIYW5kbGVyKTogdm9pZDtcbiAgICBkZWxldGUocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSb3V0ZUhhbmRsZXIpOiB2b2lkO1xufVxuIiwiaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvUm91dGVyU2VydmljZS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVyRmlsZUJhc2VSb3V0aW5nU2VydmljZSB7XG4gICAgcHJpdmF0ZSBkaXJlY3Rvcnk7XG4gICAgcHJpdmF0ZSBwcmVmaXg7XG4gICAgcHJpdmF0ZSBtb2R1bGU/O1xuICAgIHByaXZhdGUgcm91dGVyO1xuICAgIHByaXZhdGUgbG9nZ2VyO1xuICAgIHByaXZhdGUgcm91dGVzO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIHNldERpcmVjdG9yeShkaXJlY3Rvcnk6IHN0cmluZyk6IHRoaXM7XG4gICAgc2V0UHJlZml4KHByZWZpeDogc3RyaW5nKTogdGhpcztcbiAgICBzZXRSb3V0ZXIocm91dGVyOiBSb3V0ZXIpOiB0aGlzO1xuICAgIHNldE1vZHVsZShtb2R1bGU6IHN0cmluZyk6IHRoaXM7XG4gICAgc2V0TG9nZ2VyKGxvZ2dlcjogTG9nZ2VyU2VydmljZSk6IHRoaXM7XG4gICAgc2V0RGVidWcoZGVidWc6IGJvb2xlYW4pOiB0aGlzO1xuICAgIHN0YXRpYyBjcmVhdGUoZGlyZWN0b3J5OiBzdHJpbmcpOiBSb3V0ZXJGaWxlQmFzZVJvdXRpbmdTZXJ2aWNlO1xuICAgIGxvYWRGaWxlcygpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHJlZ2lzdGVyUm91dGVzKCk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IFJvdXRlclNlcnZpY2UgZnJvbSAnLi9Sb3V0ZXJTZXJ2aWNlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyUmVnaXN0ZXJFbnRyeSB7XG4gICAgZmlsZXBhdGg6IHN0cmluZztcbiAgICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlclJlZ2lzdGVyPEMgPSB7fT4gZXh0ZW5kcyBSb3V0ZXJTZXJ2aWNlPEM+IHtcbiAgICBmaWxlczogTWFwPHN0cmluZywgUm91dGVyUmVnaXN0ZXJFbnRyeT47XG4gICAgZGlyczogTWFwPHN0cmluZywgUm91dGVyUmVnaXN0ZXJFbnRyeT47XG4gICAgY29uc3RydWN0b3Iocm91dGVyPzogUGFydGlhbDxSb3V0ZXJTZXJ2aWNlPEM+Pik7XG4gICAgYWRkRmlsZShmaWxlbmFtZTogc3RyaW5nLCBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkO1xuICAgIGFkZERpcihkaXJuYW1lOiBzdHJpbmcsIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQ7XG4gICAgcHJpdmF0ZSBsb2FkRmlsZTtcbiAgICBwcml2YXRlIGxvYWREaXI7XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gJy4vUm91dGVyU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG5pbXBvcnQgdHlwZSB7IEh0dHBDb250ZXh0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvSHR0cENvbnRleHRDb250cmFjdC50cyc7XG5leHBvcnQgdHlwZSBSZXNvdXJjZU1ldGhvZCA9ICdpbmRleCcgfCAnc2hvdycgfCAnc3RvcmUnIHwgJ3VwZGF0ZScgfCAnZGVzdHJveSc7XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlclJlc291cmNlT3B0aW9ucyB7XG4gICAgbWlkZGxld2FyZT86IFBhcnRpYWw8UmVjb3JkPFJlc291cmNlTWV0aG9kIHwgJ2FsbCcsIE1pZGRsZXdhcmU+PjtcbiAgICBleGNlcHQ/OiBSZXNvdXJjZU1ldGhvZFtdO1xufVxuZGVjbGFyZSBjb25zdCBSb3V0ZXJSZXNvdXJjZVNlcnZpY2VfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGxpc3RlbmVyczogaW1wb3J0KFwiI3NoYXJlZC9taXhpbnMvSG9va3NNaXhpbi50c1wiKS5MaXN0ZW5lcltdO1xuICAgICAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgb2ZmKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICAgICAgZW1pdEFzeW5jKGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlclJlc291cmNlU2VydmljZSBleHRlbmRzIFJvdXRlclJlc291cmNlU2VydmljZV9iYXNlIHtcbiAgICBwcml2YXRlIG9wdGlvbnM7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IFJvdXRlclJlc291cmNlT3B0aW9ucyk7XG4gICAgaW5kZXgoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8YW55PjtcbiAgICBzaG93KGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPGFueT47XG4gICAgc3RvcmUoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8YW55PjtcbiAgICB1cGRhdGUoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8YW55PjtcbiAgICBkZXN0cm95KGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPGFueT47XG4gICAgcHJpdmF0ZSB3cmFwO1xuICAgIHJlZ2lzdGVyKHJvdXRlcjogUm91dGVyKTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3IgfSBmcm9tICcjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHMnO1xuZXhwb3J0IHR5cGUgQ29uZmlnTW9kZWwgPSBSZXR1cm5UeXBlPFJldHVyblR5cGU8dHlwZW9mIE1vZGVsQ29uZmlnPj47XG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gICAgcmVhZG9ubHk/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxDb25maWcoa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKTogPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKSA9PiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHt9O1xuICAgIF9faXNDb25maWdNb2RlbDogYm9vbGVhbjtcbiAgICBzZXJpYWxpemU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgcm93OiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGxpc3Q8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IFByb21pc2U8VFtdPjtcbiAgICBmaW5kPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIGlkOiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPjtcbiAgICBmaW5kT3JGYWlsPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIGlkOiBzdHJpbmcpOiBQcm9taXNlPFQ+O1xuICAgIGNyZWF0ZTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpdGVtOiBUICYge1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nLCBkYXRhOiBUKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGVPckNyZWF0ZTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nLCBkYXRhOiBQYXJ0aWFsPFQ+KTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZXN0cm95PFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufSAmIFRCYXNlO1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IFJvdXRlclJlc291cmNlU2VydmljZSBmcm9tICcuL1JvdXRlclJlc291cmNlU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IFJvdXRlclJlc291cmNlT3B0aW9ucyB9IGZyb20gJy4vUm91dGVyUmVzb3VyY2VTZXJ2aWNlLnRzJztcbmltcG9ydCB0eXBlIHsgSHR0cENvbnRleHQgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9IdHRwQ29udGV4dENvbnRyYWN0LnRzJztcbmltcG9ydCB0eXBlIHsgQ29uZmlnTW9kZWwgfSBmcm9tICcjc2VydmVyL21peGlucy9Nb2RlbENvbmZpZ01peGluLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlclJlc291cmNlQ29uZmlnIGV4dGVuZHMgUm91dGVyUmVzb3VyY2VTZXJ2aWNlIHtcbiAgICBwcml2YXRlIG1vZGVsO1xuICAgIGNvbnN0cnVjdG9yKG1vZGVsOiBDb25maWdNb2RlbCwgb3B0aW9ucz86IFJvdXRlclJlc291cmNlT3B0aW9ucyk7XG4gICAgaW5kZXgoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8e1xuICAgICAgICBwYWdlOiBudW1iZXI7XG4gICAgICAgIHRvdGFsOiBudW1iZXI7XG4gICAgICAgIHRvdGFsX3BhZ2VzOiBudW1iZXI7XG4gICAgICAgIGl0ZW1zOiB7fVtdO1xuICAgIH0+O1xuICAgIHNob3coY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8e30+O1xuICAgIHN0b3JlKGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPHtcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIH0+O1xuICAgIHVwZGF0ZShjdHg6IEh0dHBDb250ZXh0KTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZXN0cm95KGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPHtcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICB9Pjtcbn1cbiIsImltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5pbnRlcmZhY2UgQ29tbWFuZE9wdGlvbnMge1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBlbnY/OiBOb2RlSlMuUHJvY2Vzc0VudjtcbiAgICBzaGVsbD86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNoZWxsU2VydmljZU9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hlbGxTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBTaGVsbFNlcnZpY2VPcHRpb25zKTtcbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgc2hlbGwgY29tbWFuZCBhbmQgcmV0dXJuIGEgcHJvbWlzZVxuICAgICAqL1xuICAgIGNvbW1hbmQoYmluOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogQ29tbWFuZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKlxuICAgICAqIEV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kIGFuZCByZXR1cm4gdGhlIG91dHB1dCBhcyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGV4ZWN1dGVDb21tYW5kV2l0aE91dHB1dChiaW46IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBDb21tYW5kT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIENvbmZpZ1NlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Db25maWdTZXJ2aWNlLnRzJztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdGlvbiwgRmluZE1hbnlPcHRpb25zLCBQYWdpbmF0ZU9wdGlvbnMsIERlbGV0ZU1hbnlPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvRGF0YWJhc2VSZXBvc2l0b3J5LnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ1JlcG9zaXRvcnk8VEVudGl0eSA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRPcHRpb25zID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHByb3RlY3RlZCBjb25maWc6IENvbmZpZ1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIGtleTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBwcmltYXJ5S2V5OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWdTZXJ2aWNlLCBrZXk6IHN0cmluZywgcHJpbWFyeUtleT86IHN0cmluZyk7XG4gICAgcHJvdGVjdGVkIGdldEl0ZW1zKCk6IFRFbnRpdHlbXTtcbiAgICBwcm90ZWN0ZWQgc2V0SXRlbXMoaXRlbXM6IFRFbnRpdHlbXSk6IHZvaWQ7XG4gICAgcXVlcnkob3B0aW9ucz86IFRPcHRpb25zKTogVEVudGl0eVtdO1xuICAgIGNvdW50KG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPjtcbiAgICBmaW5kTWFueShvcHRpb25zPzogRmluZE1hbnlPcHRpb25zICYgVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHlbXT47XG4gICAgZmluZE9uZShvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHkgfCBudWxsPjtcbiAgICBmaW5kQnlJZChpZDogc3RyaW5nLCBvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHkgfCBudWxsPjtcbiAgICBmaW5kQnlJZE9yRmFpbChpZDogc3RyaW5nLCBvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHk+O1xuICAgIHBhZ2luYXRlKG9wdGlvbnM/OiBQYWdpbmF0ZU9wdGlvbnMgJiBUT3B0aW9ucyk6IFByb21pc2U8UGFnaW5hdGlvbjxURW50aXR5Pj47XG4gICAgY3JlYXRlKGRhdGE6IFBhcnRpYWw8VEVudGl0eT4pOiBQcm9taXNlPFRFbnRpdHk+O1xuICAgIGNyZWF0ZU1hbnkoZGF0YTogUGFydGlhbDxURW50aXR5PltdKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIHVwZGF0ZUJ5SWQoaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxURW50aXR5Pik6IFByb21pc2U8VEVudGl0eT47XG4gICAgZGVsZXRlQnlJZChpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGVNYW55KG9wdGlvbnM/OiBEZWxldGVNYW55T3B0aW9ucyAmIFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBEYXRhYmFzZVJlcG9zaXRvcnkgZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvRGF0YWJhc2VSZXBvc2l0b3J5LnRzJztcbmltcG9ydCB0eXBlIHsgTWV0YWRhdGFRdWVyeVBheWxvYWQgfSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL01ldGFkYXRhUXVlcnlTZXJ2aWNlLnRzJztcbmltcG9ydCB0eXBlIEZpbGVFbnRpdHkgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9GaWxlRW50aXR5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJlcG9zaXRvcnlRdWVyeU9wdGlvbnMge1xuICAgIGlkPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgc2VhcmNoPzogc3RyaW5nO1xuICAgIHB1cnBvc2U/OiBzdHJpbmdbXTtcbiAgICBjbGllbnRfbmFtZT86IHN0cmluZ1tdO1xuICAgIG1ldGFzPzogTWV0YWRhdGFRdWVyeVBheWxvYWQ7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlUmVwb3NpdG9yeSBleHRlbmRzIERhdGFiYXNlUmVwb3NpdG9yeTxGaWxlRW50aXR5LCBGaWxlRW50aXR5WydpZCddLCBGaWxlUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucz4ge1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBGaWxlUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucyk6IGFueTtcbn1cbiIsImltcG9ydCBTaGVsbFNlcnZpY2UgZnJvbSBcIiNzZXJ2ZXIvc2VydmljZXMvU2hlbGxTZXJ2aWNlLnRzXCI7XG5pbXBvcnQgR2l0QnJhbmNoRW50aXR5IGZyb20gXCIjc2hhcmVkL2VudGl0aWVzL0dpdEJyYW5jaEVudGl0eS50c1wiO1xuZXhwb3J0IGludGVyZmFjZSBHaXRCcmFuY2hSZXBvc2l0b3J5T3B0aW9ucyB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgc2hlbGw/OiBTaGVsbFNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHaXRCcmFuY2hSZXBvc2l0b3J5IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBzaGVsbDogU2hlbGxTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEdpdEJyYW5jaFJlcG9zaXRvcnlPcHRpb25zKTtcbiAgICBsaXN0KCk6IFByb21pc2U8R2l0QnJhbmNoRW50aXR5W10+O1xuICAgIGZldGNoKG9wdGlvbnM6IHtcbiAgICAgICAgcmVtb3RlOiBzdHJpbmc7XG4gICAgICAgIGJyYW5jaDogc3RyaW5nO1xuICAgICAgICBsb2NhbE5hbWU/OiBzdHJpbmc7XG4gICAgfSk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgU2hlbGxTZXJ2aWNlIGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL1NoZWxsU2VydmljZS50c1wiO1xuaW1wb3J0IEdpdENvbW1pdEVudGl0eSBmcm9tIFwiI3NoYXJlZC9lbnRpdGllcy9HaXRDb21taXRFbnRpdHkudHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgR2l0Q29tbWl0UmVwb3NpdG9yeU9wdGlvbnMge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIHNoZWxsPzogU2hlbGxTZXJ2aWNlO1xufVxuZXhwb3J0IGludGVyZmFjZSBHaXRDb21taXRMaXN0T3B0aW9ucyB7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgY3Vyc29yPzogc3RyaW5nO1xuICAgIGJyYW5jaGVzPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEdpdENvbW1pdExpc3RSZXN1bHQge1xuICAgIGl0ZW1zOiBHaXRDb21taXRFbnRpdHlbXTtcbiAgICBjdXJzb3JfcHJldmlvdXM6IHN0cmluZyB8IG51bGw7XG4gICAgY3Vyc29yX2N1cnJlbnQ6IHN0cmluZyB8IG51bGw7XG4gICAgY3Vyc29yX25leHQ6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHaXRDb21taXRSZXBvc2l0b3J5IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBzaGVsbDogU2hlbGxTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEdpdENvbW1pdFJlcG9zaXRvcnlPcHRpb25zKTtcbiAgICBsaXN0KG9wdGlvbnM/OiBHaXRDb21taXRMaXN0T3B0aW9ucyk6IFByb21pc2U8R2l0Q29tbWl0TGlzdFJlc3VsdD47XG4gICAgY2hlY2tvdXQoaGFzaDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBEYXRhYmFzZVJlcG9zaXRvcnkgZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvRGF0YWJhc2VSZXBvc2l0b3J5LnRzJztcbmltcG9ydCB0eXBlIHsgUGVybWlzc2lvbkFzc2lnbm1lbnQgfSBmcm9tICcjc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvbkFzc2lnbm1lbnRTY2hlbWEudHMnO1xuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnlRdWVyeU9wdGlvbnMge1xuICAgIGlkPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgcGVybWlzc2lvbklkPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgYXNzaWduYWJsZUlkPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgYXNzaWduYWJsZVR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeSBleHRlbmRzIERhdGFiYXNlUmVwb3NpdG9yeTxQZXJtaXNzaW9uQXNzaWdubWVudCwgUGVybWlzc2lvbkFzc2lnbm1lbnRbJ2lkJ10sIFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucz4ge1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnlRdWVyeU9wdGlvbnMpOiBhbnk7XG59XG4iLCJpbXBvcnQgRGF0YWJhc2VSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb24gfSBmcm9tICcjc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvblNjaGVtYS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25SZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlcm1pc3Npb25SZXBvc2l0b3J5IGV4dGVuZHMgRGF0YWJhc2VSZXBvc2l0b3J5PFBlcm1pc3Npb24sIFBlcm1pc3Npb25bJ2lkJ10sIFBlcm1pc3Npb25SZXBvc2l0b3J5UXVlcnlPcHRpb25zPiB7XG4gICAgY29uc3RydWN0b3IoZGI6IERhdGFiYXNlUmVwb3NpdG9yeVsnZGInXSk7XG4gICAgcXVlcnkob3B0aW9ucz86IFBlcm1pc3Npb25SZXBvc2l0b3J5UXVlcnlPcHRpb25zKTogYW55O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBGaW5kTWFueU9wdGlvbnMsIFBhZ2luYXRlT3B0aW9ucywgUGFnaW5hdGlvbiB9IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgSVJlcG9zaXRvcnlUeXBlczxURW50aXR5ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFByaW1hcnlLZXlUeXBlID0gYW55LCBUT3B0aW9ucyA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb3VudChvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgZmluZE1hbnkob3B0aW9ucz86IFRPcHRpb25zICYgRmluZE1hbnlPcHRpb25zKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIGZpbmRCeUlkKGlkOiBUUHJpbWFyeUtleVR5cGUsIG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eSB8IG51bGw+O1xuICAgIGZpbmRCeUlkT3JGYWlsKGlkOiBUUHJpbWFyeUtleVR5cGUsIG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eT47XG4gICAgcGFnaW5hdGUob3B0aW9ucz86IFRPcHRpb25zICYgUGFnaW5hdGVPcHRpb25zKTogUHJvbWlzZTxQYWdpbmF0aW9uPjtcbiAgICBjcmVhdGUoZGF0YTogUGFydGlhbDxURW50aXR5Piwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5PjtcbiAgICBjcmVhdGVNYW55KGRhdGE6IFBhcnRpYWw8VEVudGl0eT5bXSwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIGRlbGV0ZUJ5SWQoaWQ6IFRQcmltYXJ5S2V5VHlwZSk6IFByb21pc2U8dm9pZD47XG4gICAgZGVzdHJveU1hbnkob3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhdGFiYXNlUmVwb3NpdG9yeUluZmVyTWl4aW48VEVudGl0eSA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQcmltYXJ5S2V5VHlwZSA9IGFueSwgVE9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PigpOiA8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpID0+IFRCYXNlICYgQ29uc3RydWN0b3I8SVJlcG9zaXRvcnlUeXBlczxURW50aXR5LCBUUHJpbWFyeUtleVR5cGUsIFRPcHRpb25zPj47XG4iLCJpbXBvcnQgRGF0YWJhc2VSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSAnI3NoYXJlZC9zY2hlbWFzL3Rva2VuU2NoZW1hLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVwb3NpdG9yeUdlbmVyYXRlT3B0aW9ucyB7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgZXhwaXJlc19pbl9ob3Vycz86IG51bWJlcjtcbn1cbmRlY2xhcmUgY29uc3QgVG9rZW5SZXBvc2l0b3J5X2Jhc2U6IGltcG9ydChcIiNzaGFyZWQvdXRpbHMvaW5kZXgudHNcIikuQ29uc3RydWN0b3IgJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2luZGV4LnRzXCIpLkNvbnN0cnVjdG9yPGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL0RhdGFiYXNlUmVwb3NpdG9yeUluZmVyTWl4aW4udHNcIikuSVJlcG9zaXRvcnlUeXBlczx7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gICAgdXBkYXRlZF9hdDogc3RyaW5nO1xuICAgIGV4cGlyZXNfYXQ6IHN0cmluZztcbn0sIG51bWJlciwgVG9rZW5SZXBvc2l0b3J5UXVlcnlPcHRpb25zPj4gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2luZGV4LnRzXCIpLkNvbnN0cnVjdG9yPHt9PiAmIHR5cGVvZiBEYXRhYmFzZVJlcG9zaXRvcnk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlblJlcG9zaXRvcnkgZXh0ZW5kcyBUb2tlblJlcG9zaXRvcnlfYmFzZSB7XG4gICAgYXV0b0NyZWF0ZWRBdDogYm9vbGVhbjtcbiAgICBhdXRvVXBkYXRlZEF0OiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBUb2tlblJlcG9zaXRvcnlRdWVyeU9wdGlvbnMpOiBhbnk7XG4gICAgZmluZEJ5VG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8VG9rZW4gfCBudWxsPjtcbiAgICBnZW5lcmF0ZShvcHRpb25zOiBUb2tlblJlcG9zaXRvcnlHZW5lcmF0ZU9wdGlvbnMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgS3lzZWx5IH0gZnJvbSBcImt5c2VseVwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWJhc2VHYXRld2F5PERCPiBleHRlbmRzIEt5c2VseTxEQj4ge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBfZGlhbGVjdF9pZGVudGlmaWVyOiBzdHJpbmc7XG59XG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IEJhc2VEcml2ZSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0RyaXZlQmFzZUdhdGV3YXkudHMnO1xuZXhwb3J0IGludGVyZmFjZSBEcml2ZUZTQ29uZmlnIHtcbiAgICBkaXJlY3Rvcnk6IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlRlMgZXh0ZW5kcyBCYXNlRHJpdmUge1xuICAgIHByaXZhdGUgc2NoZW1hO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBpY2s8QmFzZURyaXZlLCAnaWQnIHwgJ25hbWUnIHwgJ2Rlc2NyaXB0aW9uJyB8ICdjb25maWcnPik7XG4gICAgZ2V0IHZhbGlkKCk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjaGVja1ZhbGlkO1xuICAgIHByb3RlY3RlZCBnZXQgcm9vdFBhdGgoKTogc3RyaW5nO1xuICAgIGV4aXN0czogQmFzZURyaXZlWydleGlzdHMnXTtcbiAgICBsaXN0OiBCYXNlRHJpdmVbJ2xpc3QnXTtcbiAgICBmaW5kOiBCYXNlRHJpdmVbJ2ZpbmQnXTtcbiAgICBta2RpcihmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICByZWFkOiBCYXNlRHJpdmVbJ3JlYWQnXTtcbiAgICByZWFkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGZzLlJlYWRTdHJlYW0+O1xuICAgIHdyaXRlOiBCYXNlRHJpdmVbJ3dyaXRlJ107XG4gICAgd3JpdGVTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlbGV0ZTogQmFzZURyaXZlWydkZWxldGUnXTtcbiAgICB1cmw6IEJhc2VEcml2ZVsndXJsJ107XG4gICAgdXBsb2FkVXJsOiBCYXNlRHJpdmVbJ3VwbG9hZFVybCddO1xufVxuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW1wb3J0IFNoZWxsU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL1NoZWxsU2VydmljZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIEdpdFJlcG9JbmZvIHtcbiAgICBkaXJlY3Rvcnk6IHN0cmluZztcbiAgICBoZWFkOiBzdHJpbmcgfCBudWxsO1xuICAgIHNob3J0SGFzaDogc3RyaW5nO1xuICAgIGlzRGV0YWNoZWRIZWFkOiBib29sZWFuO1xuICAgIHJlbW90ZXM6IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBHaXRHYXRld2F5T3B0aW9ucyB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgc3NoS2V5Pzogc3RyaW5nO1xuICAgIHNzaEtleUZpbGU/OiBzdHJpbmc7XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBzaGVsbD86IFNoZWxsU2VydmljZTtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgR2l0R2F0ZXdheUV4ZWN1dGVPcHRpb25zIHtcbiAgICBhcmdzOiBzdHJpbmc7XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIHNzaEtleT86IHN0cmluZztcbiAgICBzc2hLZXlGaWxlPzogc3RyaW5nO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG4gICAgc2hlbGw/OiBTaGVsbFNlcnZpY2U7XG4gICAgZGVidWc/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgR2l0R2F0ZXdheSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjd2Q7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzc2hLZXk/O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3NoS2V5RmlsZT87XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWJ1ZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNoZWxsO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEdpdEdhdGV3YXlPcHRpb25zKTtcbiAgICBzdGF0aWMgZXhlY3V0ZShvcHRpb25zOiBHaXRHYXRld2F5RXhlY3V0ZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgc3RhdGljIGNsb25lKHJlcG9Vcmw6IHN0cmluZywgdGFyZ2V0RGlyOiBzdHJpbmcsIG9wdGlvbnM6IE9taXQ8R2l0R2F0ZXdheU9wdGlvbnMsICdjd2QnPik6IFByb21pc2U8R2l0R2F0ZXdheT47XG4gICAgcnVuKGFyZ3M6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICB0cnlSdW4oYXJnczogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgICBjaGVja291dChyZWY6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICBmZXRjaEFsbCgpOiBQcm9taXNlPHN0cmluZz47XG4gICAgcHVsbCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGdldEluZm8oKTogUHJvbWlzZTxHaXRSZXBvSW5mbz47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3IgfSBmcm9tICcjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsdWVUb1N0cmluZyh2YWx1ZTogYW55KTogc3RyaW5nO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWV0YWRhdGE8VGFibGUgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4obWV0YXNUYWJsZTogVGFibGUsIGZvcmVpZ25LZXk6IGtleW9mIERhdGFiYXNlW1RhYmxlXSk6IDxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSkgPT4ge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGdldDxUID0gYW55PihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgICAgICBnZXQ8VCA9IGFueT4obmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQpOiBQcm9taXNlPFQ+O1xuICAgICAgICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufSAmIFRCYXNlO1xuIiwiaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbXBvcnQgRGF0YWJhc2VHYXRld2F5IGZyb20gJyNzZXJ2ZXIvZ2F0ZXdheXMvRGF0YWJhc2VHYXRld2F5LnRzJztcbmRlY2xhcmUgY29uc3QgZGF0YWJhc2U6IERhdGFiYXNlR2F0ZXdheTxEYXRhYmFzZUNvbnRyYWN0PjtcbmV4cG9ydCBkZWZhdWx0IGRhdGFiYXNlO1xuIiwiaW1wb3J0IHR5cGUgeyBTZWxlY3RhYmxlLCBTZWxlY3RRdWVyeUJ1aWxkZXIsIEV4cHJlc3Npb25CdWlsZGVyIGFzIEtFeHByZXNzaW9uQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgZGIgZnJvbSAnI3NlcnZlci9mYWNhZGVzL2RhdGFiYXNlLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuZXhwb3J0IHR5cGUgU2VsZWN0RnJvbTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gUmV0dXJuVHlwZTx0eXBlb2YgZGIuc2VsZWN0RnJvbTxUPj4gfCBTZWxlY3RRdWVyeUJ1aWxkZXI8RGF0YWJhc2UsIFQsIGFueT47XG5leHBvcnQgdHlwZSBJbnNlcnRGcm9tPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBSZXR1cm5UeXBlPHR5cGVvZiBkYi5pbnNlcnRJbnRvPFQ+PjtcbmV4cG9ydCB0eXBlIFVwZGF0ZUZyb208VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IFJldHVyblR5cGU8dHlwZW9mIGRiLnVwZGF0ZVRhYmxlPFQ+PjtcbmV4cG9ydCB0eXBlIERlbGV0ZUZyb208VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IFJldHVyblR5cGU8dHlwZW9mIGRiLmRlbGV0ZUZyb208VD4+O1xuZXhwb3J0IHR5cGUgU2VsZWN0QnVpbGRlcjxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gU2VsZWN0UXVlcnlCdWlsZGVyPERhdGFiYXNlLCBULCBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPj47XG5leHBvcnQgdHlwZSBFeHByZXNzaW9uQnVpbGRlcjxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gS0V4cHJlc3Npb25CdWlsZGVyPERhdGFiYXNlLCBUPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IG5vdzogKCkgPT4gaW1wb3J0KFwia3lzZWx5XCIpLlJhd0J1aWxkZXI8c3RyaW5nPjtcbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IHtcbiAgICBzZXJpYWxpemU/OiAocm93OiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPikgPT4gYW55O1xufVxuZXhwb3J0IHR5cGUgU2VyaWFsaXphYmxlUmVzdWx0PFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIFNlcmlhbGl6ZU9wdGlvbnM8VD4gfCB1bmRlZmluZWQ+ID0gTyBleHRlbmRzIHVuZGVmaW5lZCA/IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+IDogTyBleHRlbmRzIHtcbiAgICBzZXJpYWxpemU6IChyb3c6IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+KSA9PiBpbmZlciBSO1xufSA/IFIgOiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPjtcbiIsImltcG9ydCB0eXBlIHsgRXhwcmVzc2lvbkJ1aWxkZXIsIEV4cHJlc3Npb25XcmFwcGVyLCBJbnNlcnRhYmxlIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VsZWN0RnJvbSwgU2VyaWFsaXphYmxlUmVzdWx0LCBTZXJpYWxpemVPcHRpb25zLCBVcGRhdGVGcm9tIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU9yQ3JlYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IGV4dGVuZHMgU2VyaWFsaXplT3B0aW9uczxUPiB7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xuICAgIHNlbGVjdD86IChxYjogU2VsZWN0RnJvbTxUPikgPT4gU2VsZWN0RnJvbTxUPjtcbiAgICB1cGRhdGU/OiAocWI6IFVwZGF0ZUZyb208VD4pID0+IFVwZGF0ZUZyb208VD47XG4gICAgdmFsdWVzOiBJbnNlcnRhYmxlPERhdGFiYXNlW1RdPiB8IEluc2VydGFibGU8RGF0YWJhc2VbVF0+W107XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cGRhdGVPckNyZWF0ZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBVcGRhdGVPckNyZWF0ZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8U2VyaWFsaXphYmxlUmVzdWx0PFQsIE8+PjtcbiIsImltcG9ydCB0eXBlIHsgRXhwcmVzc2lvbkJ1aWxkZXIsIEV4cHJlc3Npb25XcmFwcGVyIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VsZWN0RnJvbSwgU2VyaWFsaXplT3B0aW9ucywgU2VyaWFsaXphYmxlUmVzdWx0IH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIExpc3RPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gZXh0ZW5kcyBTZXJpYWxpemVPcHRpb25zPFQ+IHtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xuICAgIHF1ZXJ5PzogKHFiOiBTZWxlY3RGcm9tPFQ+KSA9PiBTZWxlY3RGcm9tPFQ+O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbGlzdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBMaXN0T3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz5bXT47XG4iLCJpbXBvcnQgdHlwZSB7IEV4cHJlc3Npb25CdWlsZGVyLCBFeHByZXNzaW9uV3JhcHBlciwgU2VsZWN0YWJsZSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdEZyb20gfSBmcm9tICcuL2NvbW1vbi50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvUGFnaW5hdGlvbkVudGl0eS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBvcmRlckJ5PzogRGF0YWJhc2VbVF0gfCAoa2V5b2YgRGF0YWJhc2VbVF0pW107XG4gICAgb3JkZXJEZXNjPzogKCdhc2MnIHwgJ2Rlc2MnKSB8ICgnYXNjJyB8ICdkZXNjJylbXTtcbiAgICB3aGVyZT86IChxYjogRXhwcmVzc2lvbkJ1aWxkZXI8RGF0YWJhc2UsIFQ+KSA9PiBFeHByZXNzaW9uV3JhcHBlcjxEYXRhYmFzZSwgVCwgYW55PjtcbiAgICBzZXJpYWxpemU/OiAocm93OiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPikgPT4gYW55O1xuICAgIHF1ZXJ5PzogKHFiOiBTZWxlY3RGcm9tPFQ+KSA9PiBhbnk7XG59XG5leHBvcnQgdHlwZSBQYWdpbmF0ZVJlc3VsdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBQYWdpbmF0ZU9wdGlvbnM8VD4gfCB1bmRlZmluZWQ+ID0gTyBleHRlbmRzIHVuZGVmaW5lZCA/IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+IDogTyBleHRlbmRzIHtcbiAgICBzZXJpYWxpemU6IChyb3c6IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+KSA9PiBpbmZlciBSO1xufSA/IFIgOiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhZ2luYXRlPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIFBhZ2luYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxQYWdpbmF0aW9uPFBhZ2luYXRlUmVzdWx0PFQsIE8+Pj47XG4iLCJpbXBvcnQgdHlwZSB7IFNlbGVjdEZyb20gfSBmcm9tICcuL2NvbW1vbi50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgQ291bnRPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4ge1xuICAgIHF1ZXJ5PzogKHFiOiBTZWxlY3RGcm9tPFQ+KSA9PiBTZWxlY3RGcm9tPFQ+O1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvdW50PFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIENvdW50T3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxudW1iZXI+O1xuIiwiaW1wb3J0IHR5cGUgeyBJbnNlcnRhYmxlIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlUmVzdWx0LCBTZXJpYWxpemVPcHRpb25zIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiBleHRlbmRzIFNlcmlhbGl6ZU9wdGlvbnM8VD4ge1xuICAgIHZhbHVlczogSW5zZXJ0YWJsZTxEYXRhYmFzZVtUXT47XG4gICAgcHJpbWFyeUtleT86IHN0cmluZztcbiAgICBub3JtYWxpemU/OiBib29sZWFuIHwgKCh2YWx1ZTogYW55KSA9PiBhbnkpO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBDcmVhdGVPcHRpb25zPFQ+Pih0YWJsZTogVCwgb3B0aW9ucz86IE8pOiBQcm9taXNlPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVNeXNxbDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBDcmVhdGVPcHRpb25zPFQ+Pih0YWJsZTogVCwgb3B0aW9ucz86IE8pOiBQcm9taXNlPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgQ3JlYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxpbXBvcnQoXCJreXNlbHlcIikuRHJhaW5PdXRlckdlbmVyaWM8eyBbS18xIGluIChEYXRhYmFzZVtUXSBleHRlbmRzIGluZmVyIFRfMSA/IHsgW0sgaW4ga2V5b2YgVF8xXTogaW1wb3J0KFwia3lzZWx5XCIpLlNlbGVjdFR5cGU8VF8xW0tdPiBleHRlbmRzIGluZmVyIFRfMiA/IFRfMiBleHRlbmRzIGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RUeXBlPFRfMVtLXT4gPyBUXzIgZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogSyA6IG5ldmVyIDogbmV2ZXI7IH0gOiBuZXZlcilba2V5b2YgRGF0YWJhc2VbVF1dXTogaW1wb3J0KFwia3lzZWx5XCIpLlNlbGVjdFR5cGU8RGF0YWJhc2VbVF1bS18xXT47IH0+PjtcbiIsImltcG9ydCB0eXBlIHsgVXBkYXRlYWJsZSwgRXhwcmVzc2lvbkJ1aWxkZXIsIEV4cHJlc3Npb25XcmFwcGVyIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgVXBkYXRlRnJvbSwgU2VyaWFsaXphYmxlUmVzdWx0LCBTZXJpYWxpemVPcHRpb25zIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiBleHRlbmRzIFNlcmlhbGl6ZU9wdGlvbnM8VD4ge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB2YWx1ZXM6IFVwZGF0ZWFibGU8RGF0YWJhc2VbVF0+O1xuICAgIG5vcm1hbGl6ZT86IGJvb2xlYW4gfCAoKHZhbHVlOiBhbnkpID0+IGFueSk7XG4gICAgd2hlcmU/OiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPERhdGFiYXNlLCBUPikgPT4gRXhwcmVzc2lvbldyYXBwZXI8RGF0YWJhc2UsIFQsIGFueT47XG4gICAgcXVlcnk/OiAocWI6IFVwZGF0ZUZyb208VD4pID0+IFVwZGF0ZUZyb208VD47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cGRhdGVEZWZhdWx0PFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIFVwZGF0ZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8U2VyaWFsaXphYmxlUmVzdWx0PFQsIE8+W10+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXBkYXRlTXlzcWw8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgVXBkYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz5bXT47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cGRhdGU8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgVXBkYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxpbXBvcnQoXCJreXNlbHlcIikuRHJhaW5PdXRlckdlbmVyaWM8eyBbS18xIGluIChEYXRhYmFzZVtUXSBleHRlbmRzIGluZmVyIFRfMSA/IHsgW0sgaW4ga2V5b2YgVF8xXTogaW1wb3J0KFwia3lzZWx5XCIpLlNlbGVjdFR5cGU8VF8xW0tdPiBleHRlbmRzIGluZmVyIFRfMiA/IFRfMiBleHRlbmRzIGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RUeXBlPFRfMVtLXT4gPyBUXzIgZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogSyA6IG5ldmVyIDogbmV2ZXI7IH0gOiBuZXZlcilba2V5b2YgRGF0YWJhc2VbVF1dXTogaW1wb3J0KFwia3lzZWx5XCIpLlNlbGVjdFR5cGU8RGF0YWJhc2VbVF1bS18xXT47IH0+W10+O1xuIiwiaW1wb3J0IHR5cGUgeyBFeHByZXNzaW9uV3JhcHBlciwgRXhwcmVzc2lvbkJ1aWxkZXIgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbXBvcnQgZGIgZnJvbSAnI3NlcnZlci9mYWNhZGVzL2RhdGFiYXNlLnRzJztcbnR5cGUgRGVsZXRlRnJvbTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gUmV0dXJuVHlwZTx0eXBlb2YgZGIuZGVsZXRlRnJvbTxUPj47XG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4ge1xuICAgIHF1ZXJ5PzogKHFiOiBEZWxldGVGcm9tPFQ+KSA9PiBEZWxldGVGcm9tPFQ+O1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZGVzdHJveTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBEZXN0cm95T3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgRXhwcmVzc2lvbkJ1aWxkZXIsIEV4cHJlc3Npb25XcmFwcGVyLCBJbnNlcnRhYmxlIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VsZWN0RnJvbSwgU2VyaWFsaXphYmxlUmVzdWx0LCBTZXJpYWxpemVPcHRpb25zIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIEZpcnN0T3JDcmVhdGVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gZXh0ZW5kcyBTZXJpYWxpemVPcHRpb25zPFQ+IHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgc2VsZWN0PzogKHFiOiBTZWxlY3RGcm9tPFQ+KSA9PiBTZWxlY3RGcm9tPFQ+O1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xuICAgIHZhbHVlczogSW5zZXJ0YWJsZTxEYXRhYmFzZVtUXT4gfCBJbnNlcnRhYmxlPERhdGFiYXNlW1RdPltdO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmlyc3RPckNyZWF0ZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBGaXJzdE9yQ3JlYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz4+O1xuIiwiaW1wb3J0IHR5cGUgeyBFeHByZXNzaW9uQnVpbGRlciwgRXhwcmVzc2lvbldyYXBwZXIgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RGcm9tLCBTZXJpYWxpemFibGVSZXN1bHQsIFNlcmlhbGl6ZU9wdGlvbnMgfSBmcm9tICcuL2NvbW1vbi50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgRmluZE9uZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiBleHRlbmRzIFNlcmlhbGl6ZU9wdGlvbnM8VD4ge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcXVlcnk/OiAocWI6IFNlbGVjdEZyb208VD4pID0+IFNlbGVjdEZyb208VD47XG4gICAgd2hlcmU/OiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPERhdGFiYXNlLCBUPikgPT4gRXhwcmVzc2lvbldyYXBwZXI8RGF0YWJhc2UsIFQsIGFueT47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBmaW5kT25lPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIEZpbmRPbmVPcHRpb25zPFQ+Pih0YWJsZTogVCwgb3B0aW9ucz86IE8pOiBQcm9taXNlPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPiB8IG51bGw+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmluZE9uZU9yRmFpbDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBGaW5kT25lT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxOb25OdWxsYWJsZTxBd2FpdGVkPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPj4+PjtcbiIsImltcG9ydCB0eXBlIHsgVXBkYXRlT3JDcmVhdGVPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL3VwZGF0ZU9yQ3JlYXRlLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuaW1wb3J0IHR5cGUgeyBMaXN0T3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy9saXN0LnRzJztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdGVPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL3BhZ2luYXRlLnRzJztcbmltcG9ydCB0eXBlIHsgQ291bnRPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL2NvdW50LnRzJztcbmltcG9ydCB0eXBlIHsgQ3JlYXRlT3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy9jcmVhdGUudHMnO1xuaW1wb3J0IHR5cGUgeyBVcGRhdGVPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL3VwZGF0ZS50cyc7XG5pbXBvcnQgdHlwZSB7IERlc3Ryb3lPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL2Rlc3Ryb3kudHMnO1xuaW1wb3J0IHR5cGUgeyBGaXJzdE9yQ3JlYXRlT3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy9maXJzdE9yQ3JlYXRlLnRzJztcbmltcG9ydCB0eXBlIHsgRmluZE9uZU9wdGlvbnMgfSBmcm9tICcjc2VydmVyL3F1ZXJpZXMvZmluZE9uZS50cyc7XG5pbXBvcnQgdHlwZSBQYWdpbmF0aW9uIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvUGFnaW5hdGlvbkVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmltcG9ydCB0eXBlIHsgU2VsZWN0UXVlcnlCdWlsZGVyIH0gZnJvbSAna3lzZWx5JztcbmV4cG9ydCB0eXBlIE1vZGVsTGlzdE9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IE9taXQ8TGlzdE9wdGlvbnM8VD4sICdzZXJpYWxpemUnPjtcbmV4cG9ydCB0eXBlIE1vZGVsRmluZE9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IE9taXQ8RmluZE9uZU9wdGlvbnM8VD4sICdzZXJpYWxpemUnIHwgJ29yZGVyQnknPjtcbmV4cG9ydCB0eXBlIE1vZGVsUGFnaW5hdGVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBPbWl0PFBhZ2luYXRlT3B0aW9uczxUPiwgJ3NlcmlhbGl6ZSc+O1xuZXhwb3J0IHR5cGUgTW9kZWxDb3VudE9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IENvdW50T3B0aW9uczxUPjtcbmV4cG9ydCB0eXBlIE1vZGVsQ3JlYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gT21pdDxDcmVhdGVPcHRpb25zPFQ+LCAnc2VyaWFsaXplJz47XG5leHBvcnQgdHlwZSBNb2RlbFVwZGF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IE9taXQ8VXBkYXRlT3B0aW9uczxUPiwgJ3NlcmlhbGl6ZSc+O1xuZXhwb3J0IHR5cGUgTW9kZWxEZXN0cm95T3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gRGVzdHJveU9wdGlvbnM8VD47XG5leHBvcnQgdHlwZSBNb2RlbEZpcnN0T3JDcmVhdGVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBPbWl0PEZpcnN0T3JDcmVhdGVPcHRpb25zPFQ+LCAnc2VyaWFsaXplJz47XG5leHBvcnQgdHlwZSBNb2RlbFVwZGF0ZU9yQ3JlYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gT21pdDxVcGRhdGVPckNyZWF0ZU9wdGlvbnM8VD4sICdzZXJpYWxpemUnPjtcbmV4cG9ydCB0eXBlIE1vZGVsRW50aXR5ID0gUmV0dXJuVHlwZTxSZXR1cm5UeXBlPHR5cGVvZiBNb2RlbE1peGluPGFueT4+PjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsTWl4aW48VGFibGUgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4odGFibGU6IFRhYmxlLCBwcmltYXJ5S2V5Pzoga2V5b2YgRGF0YWJhc2VbVGFibGVdKTogPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKSA9PiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBkZXN0cm95KCk6IFByb21pc2U8dm9pZD47XG4gICAgICAgIHNvZnREZWxldGUoKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xuICAgIF9fbW9kZWw6IHtcbiAgICAgICAgdGFibGU6IFRhYmxlO1xuICAgICAgICBwcmltYXJ5S2V5OiBrZXlvZiBEYXRhYmFzZVtUYWJsZV07XG4gICAgfTtcbiAgICBzZXJpYWxpemU8VD4odGhpczogbmV3ICgpID0+IFQsIHJvdzogYW55KTogUHJvbWlzZTxUPjtcbiAgICBzZWxlY3QoKTogU2VsZWN0UXVlcnlCdWlsZGVyPERhdGFiYXNlLCBUYWJsZSwgYW55PjtcbiAgICBwYWdpbmF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IE1vZGVsUGFnaW5hdGVPcHRpb25zPFRhYmxlPik6IFByb21pc2U8UGFnaW5hdGlvbjxUPj47XG4gICAgbGlzdDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IE1vZGVsTGlzdE9wdGlvbnM8VGFibGU+KTogUHJvbWlzZTxUW10+O1xuICAgIGZpbmRPbmU8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBNb2RlbEZpbmRPcHRpb25zPFRhYmxlPik6IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG4gICAgZmluZE9uZU9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IE1vZGVsRmluZE9wdGlvbnM8VGFibGU+KTogUHJvbWlzZTxUPjtcbiAgICBmaW5kPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55KTogUHJvbWlzZTxUIHwgbnVsbD47XG4gICAgZmluZE9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIERhdGFiYXNlW1RhYmxlXSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5T3JGYWlsPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIERhdGFiYXNlW1RhYmxlXSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZXhpc3RzPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogTW9kZWxMaXN0T3B0aW9uczxUYWJsZT4pOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIGNvdW50PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogTW9kZWxDb3VudE9wdGlvbnM8VGFibGU+KTogUHJvbWlzZTxudW1iZXI+O1xuICAgIGNyZWF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgcGF5bG9hZDogTW9kZWxDcmVhdGVPcHRpb25zPFRhYmxlPltcInZhbHVlc1wiXSk6IFByb21pc2U8VD47XG4gICAgY3JlYXRlTWFueTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgdmFsdWVzOiBBcnJheTxNb2RlbENyZWF0ZU9wdGlvbnM8VGFibGU+W1widmFsdWVzXCJdPik6IFByb21pc2U8VFtdPjtcbiAgICB1cGRhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG86IE1vZGVsVXBkYXRlT3B0aW9uczxUYWJsZT4pOiBQcm9taXNlPFQ+O1xuICAgIHVwZGF0ZUJ5SWQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnksIHZhbHVlczogTW9kZWxVcGRhdGVPcHRpb25zPFRhYmxlPltcInZhbHVlc1wiXSwgb3B0aW9ucz86IHtcbiAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH0pOiBQcm9taXNlPFQ+O1xuICAgIGRlc3Ryb3k8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBNb2RlbERlc3Ryb3lPcHRpb25zPFRhYmxlPik6IFByb21pc2U8dm9pZD47XG4gICAgZmlyc3RPckNyZWF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbzogTW9kZWxGaXJzdE9yQ3JlYXRlT3B0aW9uczxUYWJsZT4pOiBUO1xuICAgIHVwZGF0ZU9yQ3JlYXRlPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIG86IE1vZGVsVXBkYXRlT3JDcmVhdGVPcHRpb25zPFRhYmxlPik6IFQ7XG4gICAgZGVzdHJveUJ5SWQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xufSAmIFRCYXNlO1xuIiwiaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG5pbnRlcmZhY2UgUmVsYXRpb24ge1xuICAgIGxvYWQoZW50aXRpZXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbGF0aW9uPFIgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbj4+KHJlbGF0aW9uczogUik6IDxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSkgPT4ge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBsb2FkPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBlbnRpdGllczogVCB8IFRbXSwgbmFtZXM6IGtleW9mIFIgfCAoa2V5b2YgUilbXSk6IFByb21pc2U8dm9pZD47XG59ICYgVEJhc2U7XG5leHBvcnQge307XG4iLCJpbXBvcnQgQ29uZmlnU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBjb25maWc6IENvbmZpZ1NlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBjb25maWc7XG4iLCJpbXBvcnQgQ29udGFpbmVyU2VydmljZSBmcm9tIFwiI3NoYXJlZC9zZXJ2aWNlcy9Db250YWluZXJTZXJ2aWNlLnRzXCI7XG5kZWNsYXJlIGNvbnN0IF9kZWZhdWx0OiBDb250YWluZXJTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgX2RlZmF1bHQ7XG4iLCJpbXBvcnQgRG93bmxvYWRTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvRG93bmxvYWRTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgZG93bmxvYWQ6IERvd25sb2FkU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGRvd25sb2FkO1xuIiwiaW1wb3J0IERyaXZlU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL0RyaXZlU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGRyaXZlOiBEcml2ZVNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBkcml2ZTtcbiIsImltcG9ydCB7IEVtbWl0dGVyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuZGVjbGFyZSBjb25zdCBlbW1pdHRlcjogRW1taXR0ZXJTZXJ2aWNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuZXhwb3J0IGRlZmF1bHQgZW1taXR0ZXI7XG4iLCJpbXBvcnQgRW5jcnlwdFNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9FbmNyeXB0U2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGVuY3J5cHQ6IEVuY3J5cHRTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgZW5jcnlwdDtcbiIsImltcG9ydCBFbnZTZXJ2aWNlIGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL0VudlNlcnZpY2UudHNcIjtcbmRlY2xhcmUgY29uc3QgZW52OiBFbnZTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgZW52O1xuIiwiaW1wb3J0IEZpbGVSZXBvc2l0b3J5IGZyb20gXCIjc2VydmVyL3JlcG9zaXRvcmllcy9GaWxlUmVwb3NpdG9yeS50c1wiO1xuZGVjbGFyZSBjb25zdCBmaWxlUmVwb3NpdG9yeTogRmlsZVJlcG9zaXRvcnk7XG5leHBvcnQgZGVmYXVsdCBmaWxlUmVwb3NpdG9yeTtcbiIsImltcG9ydCBIYXNoZXJTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvSGFzaGVyU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGhhc2hlcjogSGFzaGVyU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGhhc2hlcjtcbiIsImltcG9ydCBIdHRwU2VydmljZSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9IdHRwU2VydmljZS50c1wiO1xuZGVjbGFyZSBjb25zdCBodHRwOiBIdHRwU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGh0dHA7XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iLCJpbXBvcnQgTWlncmF0b3JTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvTWlncmF0b3JTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgbWlncmF0b3I6IE1pZ3JhdG9yU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IG1pZ3JhdG9yO1xuIiwiaW1wb3J0IFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9QZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnkudHMnO1xuZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnk6IFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeTtcbmV4cG9ydCBkZWZhdWx0IHBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeTtcbiIsImltcG9ydCBQZXJtaXNzaW9uUmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9QZXJtaXNzaW9uUmVwb3NpdG9yeS50cyc7XG5kZWNsYXJlIGNvbnN0IHBlcm1pc3Npb25SZXBvc2l0b3J5OiBQZXJtaXNzaW9uUmVwb3NpdG9yeTtcbmV4cG9ydCBkZWZhdWx0IHBlcm1pc3Npb25SZXBvc2l0b3J5O1xuIiwiaW1wb3J0IHR5cGUgeyBIdHRwQ29udGV4dCB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0h0dHBDb250ZXh0Q29udHJhY3QudHMnO1xuaW1wb3J0IFJvdXRlclNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3Qgcm91dGVyOiBSb3V0ZXJTZXJ2aWNlPEh0dHBDb250ZXh0PjtcbmV4cG9ydCBkZWZhdWx0IHJvdXRlcjtcbiIsImltcG9ydCBTY2hlZHVsZXJTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvU2NoZWR1bGVyU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IHNjaGVkdWxlcjogU2NoZWR1bGVyU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IHNjaGVkdWxlcjtcbiIsImltcG9ydCBTaGVsbFNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9TaGVsbFNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBzaGVsbDogU2hlbGxTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgc2hlbGw7XG4iLCJpbXBvcnQgVG9rZW5SZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL1Rva2VuUmVwb3NpdG9yeS50cyc7XG5kZWNsYXJlIGNvbnN0IHRva2VuUmVwb3NpdG9yeTogVG9rZW5SZXBvc2l0b3J5O1xuZXhwb3J0IGRlZmF1bHQgdG9rZW5SZXBvc2l0b3J5O1xuIiwiaW1wb3J0IFVzZXJSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL1VzZXJSZXBvc2l0b3J5LnRzJztcbmRlY2xhcmUgY29uc3QgdXNlclJlcG9zaXRvcnk6IFVzZXJSZXBvc2l0b3J5O1xuZXhwb3J0IGRlZmF1bHQgdXNlclJlcG9zaXRvcnk7XG4iLCJpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgfSBmcm9tICcuL0RhdGFiYXNlQ29udHJhY3QnO1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUt5c2VseSBleHRlbmRzIEt5c2VseTxEYXRhYmFzZUNvbnRyYWN0PiB7XG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIExvYWRlcjxUID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGxvYWQoZW50aXRpZXM6IFRbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgaW50ZXJmYWNlIExvYWRlclJlY29yZDxUID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIFtrZXk6IHN0cmluZ106IExvYWRlcjxUPjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlZmluZUxvYWRlcjxUID0gUmVjb3JkPHN0cmluZywgYW55Pj4obG9hZGVyOiBMb2FkZXI8VD4pOiBMb2FkZXI8VD47XG4iLCJpbnRlcmZhY2UgRmlsZUxvYWRlck9wdGlvbnMge1xuICAgIGZpbGVJZFByb3BlcnR5OiBzdHJpbmc7XG4gICAgZmlsZVByb3BlcnR5OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVGaWxlTG9hZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zOiBGaWxlTG9hZGVyT3B0aW9ucyk6IGltcG9ydChcIiNzZXJ2ZXIvdXRpbHMvZGVmaW5lTG9hZGVyLnRzXCIpLkxvYWRlcjxUPjtcbmV4cG9ydCB7fTtcbiIsImludGVyZmFjZSBGaWxlTG9hZGVyT3B0aW9ucyB7XG4gICAgZmlsZUlkUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgZmlsZVVybFByb3BlcnR5Pzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbG9hZEZpbGVVcmw8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KGVudGl0aWVzOiBUW10sIG9wdGlvbnM/OiBGaWxlTG9hZGVyT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVGaWxlVXJsTG9hZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zPzogRmlsZUxvYWRlck9wdGlvbnMpOiBpbXBvcnQoXCIjc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci50c1wiKS5Mb2FkZXI8VD47XG5leHBvcnQge307XG4iLCJ0eXBlIEtleU9yRnVuY3Rpb248VD4gPSBrZXlvZiBUIHwgKChlbnRpdHk6IFQpID0+IGFueSk7XG5leHBvcnQgaW50ZXJmYWNlIEhhc01hbnlUaHJvdWdoTG9hZGVyT3B0aW9uczxURW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQaXZvdEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUVGFyZ2V0RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBwaXZvdDoge1xuICAgICAgICBzb3VyY2VLZXk6IEtleU9yRnVuY3Rpb248VEVudGl0eT47XG4gICAgICAgIHRhcmdldEtleTogS2V5T3JGdW5jdGlvbjxUUGl2b3RFbnRpdHk+O1xuICAgICAgICBmaW5kRW50aXRpZXMoaWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTxUUGl2b3RFbnRpdHlbXT47XG4gICAgfTtcbiAgICB0YXJnZXQ6IHtcbiAgICAgICAgc291cmNlS2V5OiBLZXlPckZ1bmN0aW9uPFRQaXZvdEVudGl0eT47XG4gICAgICAgIHRhcmdldEtleTogS2V5T3JGdW5jdGlvbjxUVGFyZ2V0RW50aXR5PjtcbiAgICAgICAgZmluZEVudGl0aWVzKGlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8VFRhcmdldEVudGl0eVtdPjtcbiAgICB9O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbG9hZEhhc01hbnlUaHJvdWdoPFRFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFBpdm90RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRUYXJnZXRFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ocGF5bG9hZDogYW55IHwgYW55W10sIG9wdGlvbnM6IEhhc01hbnlUaHJvdWdoTG9hZGVyT3B0aW9uczxURW50aXR5LCBUUGl2b3RFbnRpdHksIFRUYXJnZXRFbnRpdHk+KTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUhhc01hbnlUaHJvdWdoTG9hZGVyPFRFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFBpdm90RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRUYXJnZXRFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ob3B0aW9uczogSGFzTWFueVRocm91Z2hMb2FkZXJPcHRpb25zPFRFbnRpdHksIFRQaXZvdEVudGl0eSwgVFRhcmdldEVudGl0eT4pOiBpbXBvcnQoXCIjc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci50c1wiKS5Mb2FkZXI8VEVudGl0eT47XG5leHBvcnQge307XG4iLCJpbnRlcmZhY2UgUmVwb3NpdG9yeU1ldGEge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xufVxuaW50ZXJmYWNlIExvYWRNZXRhc09wdGlvbnMge1xuICAgIGZpbmRNYW55KGlkczogYW55W10pOiBQcm9taXNlPFJlcG9zaXRvcnlNZXRhW10+O1xuICAgIGVudGl0eUlkS2V5Pzogc3RyaW5nO1xuICAgIGZvcmVpZ25LZXk/OiBzdHJpbmc7XG4gICAgdGFyZ2V0S2V5Pzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbG9hZE1ldGFzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihwYXlsb2FkOiBUIHwgVFtdLCBvcHRpb25zOiBMb2FkTWV0YXNPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZU1ldGFzTG9hZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zOiBMb2FkTWV0YXNPcHRpb25zKTogaW1wb3J0KFwiI3NlcnZlci91dGlscy9kZWZpbmVMb2FkZXIudHNcIikuTG9hZGVyPFQ+O1xuZXhwb3J0IHt9O1xuIiwiaW50ZXJmYWNlIFBlcm1pc3Npb25Mb2FkZXJPcHRpb25zIHtcbiAgICBhc3NpZ25hYmxlVHlwZTogc3RyaW5nIHwgKChlOiBhbnkpID0+IHN0cmluZyk7XG4gICAgYXNzaWduYWJsZUlkOiBzdHJpbmcgfCAoKGU6IGFueSkgPT4gc3RyaW5nKTtcbiAgICB0YXJnZXRLZXk/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBsb2FkUGVybWlzc2lvbnM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KHBheWxvYWQ6IFQgfCBUW10sIG9wdGlvbnM/OiBQZXJtaXNzaW9uTG9hZGVyT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVQZXJtaXNzaW9uTG9hZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zPzogUGVybWlzc2lvbkxvYWRlck9wdGlvbnMpOiBpbXBvcnQoXCIjc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci50c1wiKS5Mb2FkZXI8VD47XG5leHBvcnQge307XG4iLCJpbnRlcmZhY2UgVXNlckxvYWRlck9wdGlvbnMge1xuICAgIGlkS2V5Pzogc3RyaW5nO1xuICAgIHRhcmdldEtleT86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxvYWRVc2VyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihlbnRpdGllczogVFtdLCBvcHRpb25zPzogVXNlckxvYWRlck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlVXNlckxvYWRlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ob3B0aW9ucz86IFVzZXJMb2FkZXJPcHRpb25zKTogaW1wb3J0KFwiI3NlcnZlci91dGlscy9kZWZpbmVMb2FkZXIudHNcIikuTG9hZGVyPFQ+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Ecml2ZUNvbmZpZ0VudGl0eS50cyc7XG5kZWNsYXJlIGNvbnN0IERyaXZlQ29uZmlnX2Jhc2U6IHR5cGVvZiBCYXNlICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBfX2lzQ29uZmlnTW9kZWw6IGJvb2xlYW47XG4gICAgc2VyaWFsaXplPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIHJvdzogYW55KTogUHJvbWlzZTxUPjtcbiAgICBsaXN0PFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBQcm9taXNlPFRbXT47XG4gICAgZmluZDxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD47XG4gICAgZmluZE9yRmFpbDxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nKTogUHJvbWlzZTxUPjtcbiAgICBjcmVhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaXRlbTogVCAmIHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaWQ6IHN0cmluZywgZGF0YTogVCk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlT3JDcmVhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxUPik6IFByb21pc2U8dm9pZD47XG4gICAgZGVzdHJveTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZUNvbmZpZyBleHRlbmRzIERyaXZlQ29uZmlnX2Jhc2Uge1xuICAgIHN0YXRpYyBzZXJpYWxpemU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgcm93OiBhbnkpOiBQcm9taXNlPFQ+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9GaWxlRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgRHJpdmVVcmxPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRHJpdmVDb250cmFjdC50cyc7XG5pbnRlcmZhY2UgVVJMQ2FjaGUge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGV4cGlyZXM6IG51bWJlcjtcbn1cbmRlY2xhcmUgY29uc3QgRmlsZV9iYXNlOiB0eXBlb2YgQmFzZSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBsaXN0ZW5lcnM6IGltcG9ydChcIiNzaGFyZWQvbWl4aW5zL0hvb2tzTWl4aW4udHNcIikuTGlzdGVuZXJbXTtcbiAgICAgICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIGVtaXRBc3luYyhldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBkZXN0cm95KCk6IFByb21pc2U8dm9pZD47XG4gICAgICAgIHNvZnREZWxldGUoKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xuICAgIF9fbW9kZWw6IHtcbiAgICAgICAgdGFibGU6IFwiZmlsZXNcIjtcbiAgICAgICAgcHJpbWFyeUtleToga2V5b2YgaW1wb3J0KFwiLi4vaW5kZXgudHNcIikuRmlsZVRhYmxlO1xuICAgIH07XG4gICAgc2VyaWFsaXplPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCByb3c6IGFueSk6IFByb21pc2U8VD47XG4gICAgc2VsZWN0KCk6IGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RRdWVyeUJ1aWxkZXI8aW1wb3J0KFwiLi4vaW5kZXgudHNcIikuRGF0YWJhc2VDb250cmFjdCwgXCJmaWxlc1wiLCBhbnk+O1xuICAgIHBhZ2luYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbFBhZ2luYXRlT3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxpbXBvcnQoXCIuLi8uLi9zaGFyZWQvaW5kZXgudHNcIikuUGFnaW5hdGlvbkVudGl0eTxUPj47XG4gICAgbGlzdDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxMaXN0T3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxUW10+O1xuICAgIGZpbmRPbmU8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsRmluZE9wdGlvbnM8XCJmaWxlc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG4gICAgZmluZE9uZU9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxGaW5kT3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxUPjtcbiAgICBmaW5kPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55KTogUHJvbWlzZTxUIHwgbnVsbD47XG4gICAgZmluZE9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIGltcG9ydChcIi4uL2luZGV4LnRzXCIpLkZpbGVUYWJsZSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5T3JGYWlsPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIGltcG9ydChcIi4uL2luZGV4LnRzXCIpLkZpbGVUYWJsZSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZXhpc3RzPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbExpc3RPcHRpb25zPFwiZmlsZXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIGNvdW50PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbENvdW50T3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIGNyZWF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgcGF5bG9hZDogb2JqZWN0ICYge1xuICAgICAgICBkcml2ZTogc3RyaW5nO1xuICAgICAgICBtaW1ldHlwZTogc3RyaW5nO1xuICAgICAgICBjbGllbnRfbmFtZTogc3RyaW5nO1xuICAgICAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgICAgIHB1YmxpYzogYm9vbGVhbjtcbiAgICB9ICYge1xuICAgICAgICBpZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgY3JlYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXBkYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlZF9hdD86IHN0cmluZyB8IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgfSk6IFByb21pc2U8VD47XG4gICAgY3JlYXRlTWFueTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgdmFsdWVzOiAob2JqZWN0ICYge1xuICAgICAgICBkcml2ZTogc3RyaW5nO1xuICAgICAgICBtaW1ldHlwZTogc3RyaW5nO1xuICAgICAgICBjbGllbnRfbmFtZTogc3RyaW5nO1xuICAgICAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgICAgIHB1YmxpYzogYm9vbGVhbjtcbiAgICB9ICYge1xuICAgICAgICBpZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgY3JlYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXBkYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlZF9hdD86IHN0cmluZyB8IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgfSlbXSk6IFByb21pc2U8VFtdPjtcbiAgICB1cGRhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxVcGRhdGVPcHRpb25zPFwiZmlsZXNcIj4pOiBQcm9taXNlPFQ+O1xuICAgIHVwZGF0ZUJ5SWQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnksIHZhbHVlczoge1xuICAgICAgICBpZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlZF9hdD86IHN0cmluZyB8IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgICBkcml2ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWltZXR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNsaWVudF9uYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBmaWxlbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcHVycG9zZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcHVibGljPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICB9LCBvcHRpb25zPzoge1xuICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8VD47XG4gICAgZGVzdHJveTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxEZXN0cm95T3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPjtcbiAgICBmaXJzdE9yQ3JlYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvOiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsRmlyc3RPckNyZWF0ZU9wdGlvbnM8XCJmaWxlc1wiPik6IFQ7XG4gICAgdXBkYXRlT3JDcmVhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgbzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbFVwZGF0ZU9yQ3JlYXRlT3B0aW9uczxcImZpbGVzXCI+KTogVDtcbiAgICBkZXN0cm95QnlJZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8dm9pZD47XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBsb2FkPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBlbnRpdGllczogVCB8IFRbXSwgbmFtZXM6IFwibWV0YXNcIiB8IFwibWV0YXNcIltdKTogUHJvbWlzZTx2b2lkPjtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZ2V0PFQgPSBhbnk+KG5hbWU6IHN0cmluZyk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG4gICAgICAgIGdldDxUID0gYW55PihuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogVCk6IFByb21pc2U8VD47XG4gICAgICAgIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZSBleHRlbmRzIEZpbGVfYmFzZSB7XG4gICAgc3RhdGljIGNhY2hlOiBNYXA8c3RyaW5nLCBVUkxDYWNoZT47XG4gICAgc3RhdGljIGhhcyhmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPjtcbiAgICBzdGF0aWMgZmluZEJ5RmlsZW5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZSB8IHVuZGVmaW5lZD47XG4gICAgcmVhZFN0cmVhbSgpOiBQcm9taXNlPE5vZGVKUy5SZWFkYWJsZVN0cmVhbT47XG4gICAgcmVhZCgpOiBQcm9taXNlPFVpbnQ4QXJyYXk8QXJyYXlCdWZmZXJMaWtlPj47XG4gICAgbG9hZFVybChvcHRpb25zPzogRHJpdmVVcmxPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzdGF0aWMgbG9hZFVybHMoaXRlbXM6IEZpbGVbXSwgb3B0aW9ucz86IERyaXZlVXJsT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgc3RhdGljIGxvYWRNZXRhcyhpdGVtczogRmlsZVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGVGcm9tRHJpdmUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBCYXNlTWV0YSBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0ZpbGVNZXRhRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgRmlsZU1ldGFfYmFzZTogdHlwZW9mIEJhc2VNZXRhICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIHNhdmUoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBzb2Z0RGVsZXRlKCk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbiAgICBfX21vZGVsOiB7XG4gICAgICAgIHRhYmxlOiBcImZpbGVfbWV0YXNcIjtcbiAgICAgICAgcHJpbWFyeUtleToga2V5b2YgaW1wb3J0KFwiLi5cIikuRmlsZU1ldGFUYWJsZTtcbiAgICB9O1xuICAgIHNlcmlhbGl6ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgcm93OiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIHNlbGVjdCgpOiBpbXBvcnQoXCJreXNlbHlcIikuU2VsZWN0UXVlcnlCdWlsZGVyPGltcG9ydChcIi4uXCIpLkRhdGFiYXNlQ29udHJhY3QsIFwiZmlsZV9tZXRhc1wiLCBhbnk+O1xuICAgIHBhZ2luYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbFBhZ2luYXRlT3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPGltcG9ydChcIi4uLy4uL3NoYXJlZFwiKS5QYWdpbmF0aW9uRW50aXR5PFQ+PjtcbiAgICBsaXN0PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbExpc3RPcHRpb25zPFwiZmlsZV9tZXRhc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VFtdPjtcbiAgICBmaW5kT25lPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbEZpbmRPcHRpb25zPFwiZmlsZV9tZXRhc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG4gICAgZmluZE9uZU9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxGaW5kT3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPFQ+O1xuICAgIGZpbmQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnkpOiBQcm9taXNlPFQgfCBudWxsPjtcbiAgICBmaW5kT3JGYWlsPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55KTogUHJvbWlzZTxUPjtcbiAgICBmaW5kQnk8VD4odGhpczogbmV3ICgpID0+IFQsIGNvbHVtbjoga2V5b2YgaW1wb3J0KFwiLi5cIikuRmlsZU1ldGFUYWJsZSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5T3JGYWlsPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIGltcG9ydChcIi4uXCIpLkZpbGVNZXRhVGFibGUsIHZhbHVlOiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGV4aXN0czxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxMaXN0T3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIGNvdW50PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbENvdW50T3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPG51bWJlcj47XG4gICAgY3JlYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBwYXlsb2FkOiBvYmplY3QgJiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZmlsZV9pZDogbnVtYmVyO1xuICAgIH0gJiB7XG4gICAgICAgIGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICB2YWx1ZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNyZWF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHVwZGF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZWRfYXQ/OiBzdHJpbmcgfCBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIH0pOiBQcm9taXNlPFQ+O1xuICAgIGNyZWF0ZU1hbnk8VD4odGhpczogbmV3ICgpID0+IFQsIHZhbHVlczogKG9iamVjdCAmIHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBmaWxlX2lkOiBudW1iZXI7XG4gICAgfSAmIHtcbiAgICAgICAgaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIHZhbHVlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgY3JlYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXBkYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlZF9hdD86IHN0cmluZyB8IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgfSlbXSk6IFByb21pc2U8VFtdPjtcbiAgICB1cGRhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxVcGRhdGVPcHRpb25zPFwiZmlsZV9tZXRhc1wiPik6IFByb21pc2U8VD47XG4gICAgdXBkYXRlQnlJZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSwgdmFsdWVzOiB7XG4gICAgICAgIGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICB2YWx1ZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZWRfYXQ/OiBzdHJpbmcgfCBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZmlsZV9pZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB9LCBvcHRpb25zPzoge1xuICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8VD47XG4gICAgZGVzdHJveTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxEZXN0cm95T3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGZpcnN0T3JDcmVhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxGaXJzdE9yQ3JlYXRlT3B0aW9uczxcImZpbGVfbWV0YXNcIj4pOiBUO1xuICAgIHVwZGF0ZU9yQ3JlYXRlPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIG86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxVcGRhdGVPckNyZWF0ZU9wdGlvbnM8XCJmaWxlX21ldGFzXCI+KTogVDtcbiAgICBkZXN0cm95QnlJZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8dm9pZD47XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZU1ldGEgZXh0ZW5kcyBGaWxlTWV0YV9iYXNlIHtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IEdpdEdhdGV3YXkgfSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0dpdEdhdGV3YXkudHMnO1xuaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVFbnRpdHkudHMnO1xuaW1wb3J0IHNoZWxsIGZyb20gJyNzZXJ2ZXIvZmFjYWRlcy9zaGVsbC50cyc7XG5kZWNsYXJlIGNvbnN0IE1vZHVsZV9iYXNlOiB0eXBlb2YgQmFzZTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZSBleHRlbmRzIE1vZHVsZV9iYXNlIHtcbiAgICBnZXQgZ2l0KCk6IEdpdEdhdGV3YXk7XG4gICAgbWFrZVBhdGgoLi4ucGFydHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuICAgIHN0YXRpY1BhdGgoLi4ucGFydHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuICAgIGNvbW1hbmQ6IHR5cGVvZiBzaGVsbC5jb21tYW5kO1xuICAgIGxvYWQoKTogdm9pZDtcbiAgICBmaW5kQ2xpZW50RW50cnlwb2ludEZpbGVuYW1lKGNvbnRleHQ/OiAnZGV2JyB8ICdub2RlJyB8ICdicm93c2VyJyk6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgY29uZmlnIGZyb20gJyNzZXJ2ZXIvZmFjYWRlcy9jb25maWcudHMnO1xuaW1wb3J0IHsgR2l0R2F0ZXdheSB9IGZyb20gJyNzZXJ2ZXIvZ2F0ZXdheXMvR2l0R2F0ZXdheS50cyc7XG5pbXBvcnQgR2l0QnJhbmNoUmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9HaXRCcmFuY2hSZXBvc2l0b3J5LnRzJztcbmltcG9ydCBHaXRDb21taXRSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0dpdENvbW1pdFJlcG9zaXRvcnkudHMnO1xuaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9QbHVnaW5FbnRpdHkudHMnO1xuZGVjbGFyZSBjb25zdCBQbHVnaW5FbnRyeUVudGl0eV9iYXNlOiB0eXBlb2YgQmFzZTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsdWdpbkVudHJ5RW50aXR5IGV4dGVuZHMgUGx1Z2luRW50cnlFbnRpdHlfYmFzZSB7XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgbWFrZVBhdGgoLi4ucGFydHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuICAgIHNldDogdHlwZW9mIGNvbmZpZy5zZXQ7XG4gICAgZ2V0OiB0eXBlb2YgY29uZmlnLmdldDtcbiAgICBnZXQgZ2l0KCk6IEdpdEdhdGV3YXk7XG4gICAgZ2V0IGNvbW1pdHMoKTogR2l0Q29tbWl0UmVwb3NpdG9yeTtcbiAgICBnZXQgYnJhbmNoZXMoKTogR2l0QnJhbmNoUmVwb3NpdG9yeTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBQbHVnaW5FbnRyeUVudGl0eSBmcm9tICcuL1BsdWdpbkVudHJ5RW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgUm91dGVyRXZlbnRzIH0gZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJTZXJ2aWNlLnRzJztcbmludGVyZmFjZSBBZGRBcGlGb2xkZXJPcHRpb25zIHtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRpdHkgZXh0ZW5kcyBQbHVnaW5FbnRyeUVudGl0eSB7XG4gICAgYXBpRm9sZGVyczogTWFwPHN0cmluZywgQWRkQXBpRm9sZGVyT3B0aW9ucz47XG4gICAgYXBpRGlyZWN0b3JpZXM6IFNldDxzdHJpbmc+O1xuICAgIGNvbnN0cnVjdG9yKCk7XG4gICAgc3RhdGljUGF0aCguLi5wYXJ0czogc3RyaW5nW10pOiBzdHJpbmc7XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIG9uUm91dGVyUmVnaXN0ZXJlZChjdHg6IFJvdXRlckV2ZW50c1sncm91dGVyOnJlZ2lzdGVyZWQnXSk6IFByb21pc2U8dm9pZD47XG4gICAgYWRkQXBpRm9sZGVyKGRpcmVjdG9yeTogc3RyaW5nLCBvcHRpb25zPzogQWRkQXBpRm9sZGVyT3B0aW9ucyk6IHZvaWQ7XG4gICAgYWRkUm91dGVyRm9sZGVyKGRpcmVjdG9yeTogc3RyaW5nKTogdm9pZDtcbiAgICBzdGF0aWMgZnJvbVBsdWdpbkRpc2NvdmVyRW50aXR5PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBlbnRpdHk6IFBsdWdpbkVudHJ5RW50aXR5KTogVDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgTGlzdE9wdGlvbnMgfSBmcm9tICcuL2xpc3QudHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBleGlzdHM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgTGlzdE9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8Ym9vbGVhbj47XG4iLCJpbXBvcnQgeyBDcmVhdGVUYWJsZUJ1aWxkZXIgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBFeHByZXNzaW9uQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdGFibGUgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbXBvcnQgZGIgZnJvbSAnI3NlcnZlci9mYWNhZGVzL2RhdGFiYXNlLnRzJztcbnR5cGUgV2hlcmVDYXBhYmxlPFFCPiA9IHtcbiAgICB3aGVyZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBRQjtcbn07XG50eXBlIFVwZGF0ZUZyb208VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IFJldHVyblR5cGU8dHlwZW9mIGRiLnVwZGF0ZVRhYmxlPFQ+PjtcbmV4cG9ydCBpbnRlcmZhY2UgU29mdERlbGV0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiB7XG4gICAgc2VyaWFsaXplPzogKHJvdzogU2VsZWN0YWJsZTxEYXRhYmFzZVtUXT4pID0+IGFueTtcbiAgICBxdWVyeTogKHFiOiBVcGRhdGVGcm9tPFQ+KSA9PiBVcGRhdGVGcm9tPFQ+O1xufVxuZXhwb3J0IHR5cGUgU29mdERlbGV0ZVJlc3VsdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBTb2Z0RGVsZXRlT3B0aW9uczxUPiB8IHVuZGVmaW5lZD4gPSBPIGV4dGVuZHMgdW5kZWZpbmVkID8gU2VsZWN0YWJsZTxEYXRhYmFzZVtUXT5bXSA6IE8gZXh0ZW5kcyB7XG4gICAgc2VyaWFsaXplOiAocm93OiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPikgPT4gaW5mZXIgUjtcbn0gPyBSW10gOiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPltdO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd2hlcmVOb3REZWxldGVkPFFCIGV4dGVuZHMgV2hlcmVDYXBhYmxlPFFCPj4ocWI6IFFCKTogUUI7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1bmRlbGV0ZWQocWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55Pik6IGltcG9ydChcImt5c2VseVwiKS5FeHByZXNzaW9uV3JhcHBlcjxhbnksIGFueSwgaW1wb3J0KFwia3lzZWx5XCIpLlNxbEJvb2w+O1xuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIHVuZGVsZXRlZCB7XG4gICAgdmFyIGNvbHVtbjogKGNvbDogc3RyaW5nKSA9PiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gaW1wb3J0KFwia3lzZWx5XCIpLkV4cHJlc3Npb25XcmFwcGVyPGFueSwgYW55LCBpbXBvcnQoXCJreXNlbHlcIikuU3FsQm9vbD47XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkZWxldGVkOiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gaW1wb3J0KFwia3lzZWx5XCIpLkV4cHJlc3Npb25XcmFwcGVyPGFueSwgYW55LCBpbXBvcnQoXCJreXNlbHlcIikuU3FsQm9vbD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhZGRTb2Z0RGVsZXRlQ29sdW1uOiAoY3RiOiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+KSA9PiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc29mdERlbGV0ZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBTb2Z0RGVsZXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTb2Z0RGVsZXRlUmVzdWx0PFQsIE8+PjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENyZWF0ZVRhYmxlQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhZGRDcmVhdGVkQ29sdW1uOiAoY3RiOiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+KSA9PiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgYWRkVXBkYXRlZENvbHVtbjogKGN0YjogQ3JlYXRlVGFibGVCdWlsZGVyPGFueSwgYW55PikgPT4gQ3JlYXRlVGFibGVCdWlsZGVyPGFueSwgYW55PjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGFkZFRpbWVzdGFtcENvbHVtbnM6IChjdGI6IENyZWF0ZVRhYmxlQnVpbGRlcjxhbnksIGFueT4pID0+IENyZWF0ZVRhYmxlQnVpbGRlcjxhbnksIGFueT47XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlUmVsYXRpb24ge1xuICAgIGxvYWQoZW50aXRpZXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBCYXNlUmVsYXRpb24gZnJvbSAnLi9CYXNlUmVsYXRpb24udHMnO1xuaW50ZXJmYWNlIEJlbG9uZ3NUb09wdGlvbnMge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZTogc3RyaW5nO1xuICAgIHRhcmdldEtleTogc3RyaW5nO1xuICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgc2VyaWFsaXplPzogKHJvdzogYW55KSA9PiBhbnk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZWxvbmdzVG8gZXh0ZW5kcyBCYXNlUmVsYXRpb24ge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZTogc3RyaW5nO1xuICAgIHRhcmdldEtleTogc3RyaW5nO1xuICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgc2VyaWFsaXplOiAocm93OiBhbnkpID0+IGFueTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCZWxvbmdzVG9PcHRpb25zKTtcbiAgICBsb2FkKGVudGl0aWVzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQmVsb25nc1RvIGZyb20gJy4vQmVsb25nc1RvUmVsYXRpb24udHMnO1xuaW1wb3J0IEJhc2VSZWxhdGlvbiBmcm9tICcuL0Jhc2VSZWxhdGlvbi50cyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBMb2FkRmlsZU1ldGFzIGV4dGVuZHMgQmFzZVJlbGF0aW9uIHtcbiAgICBmaWxlS2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihmaWxlS2V5Pzogc3RyaW5nLCBwcm9wZXJ0eT86IHN0cmluZyk7XG4gICAgbG9hZChlbnRpdGllczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTG9hZEZpbGVVcmwgZXh0ZW5kcyBCYXNlUmVsYXRpb24ge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGZpbGVLZXk/OiBzdHJpbmcsIHByb3BlcnR5Pzogc3RyaW5nKTtcbiAgICBsb2FkKGVudGl0aWVzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZWxvbmdzVG9GaWxlIGV4dGVuZHMgQmVsb25nc1RvIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eT86IHN0cmluZywgdGFyZ2V0S2V5Pzogc3RyaW5nKTtcbiAgICB1cmwocHJvcGVydHk/OiBzdHJpbmcpOiBMb2FkRmlsZVVybDtcbiAgICBtZXRhcyhwcm9wZXJ0eT86IHN0cmluZyk6IExvYWRGaWxlTWV0YXM7XG59XG4iLCJpbXBvcnQgQmVsb25nc1RvIGZyb20gJy4vQmVsb25nc1RvUmVsYXRpb24udHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmVsb25nc1RvVXNlciBleHRlbmRzIEJlbG9uZ3NUbyB7XG4gICAgY29uc3RydWN0b3IoKTtcbn1cbiIsImltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuaW50ZXJmYWNlIEhhc01hbnlPcHRpb25zIHtcbiAgICB0YWJsZToga2V5b2YgRGF0YWJhc2U7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZToga2V5b2YgRGF0YWJhc2U7XG4gICAgdGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU/OiAocm93OiBhbnkpID0+IGFueTtcbiAgICBhZnRlcj86IChyb3dzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFzTWFueSB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB0YWJsZUtleTogc3RyaW5nO1xuICAgIHRhcmdldFRhYmxlOiBzdHJpbmc7XG4gICAgdGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU6IChyb3c6IGFueSkgPT4gYW55O1xuICAgIGFmdGVyOiAocm93czogYW55W10pID0+IFByb21pc2U8YW55PjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBIYXNNYW55T3B0aW9ucyk7XG4gICAgbG9hZChlbnRpdGllczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbnRlcmZhY2UgSGFzTWV0YXNPcHRpb25zIHtcbiAgICB0YWJsZToga2V5b2YgRGF0YWJhc2U7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZToga2V5b2YgRGF0YWJhc2U7XG4gICAgdGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhhc01ldGFzIHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIHRhYmxlS2V5OiBzdHJpbmc7XG4gICAgdGFyZ2V0VGFibGU6IHN0cmluZztcbiAgICB0YXJnZXRLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEhhc01ldGFzT3B0aW9ucyk7XG4gICAgbG9hZChlbnRpdGllczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2VSZWxhdGlvbiBmcm9tICcuL0Jhc2VSZWxhdGlvbi50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmludGVyZmFjZSBIYXNNYW55VGhyb3VnaE9wdGlvbnMge1xuICAgIHRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICB0YWJsZUtleTogc3RyaW5nO1xuICAgIHRhcmdldFRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICB0YXJnZXRLZXk6IHN0cmluZztcbiAgICBwaXZvdFRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICBwaXZvdFNvdXJjZUtleTogc3RyaW5nO1xuICAgIHBpdm90VGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU/OiAocm93OiBhbnkpID0+IGFueTtcbiAgICBhZnRlcj86IChyb3dzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFzTWFueVRocm91Z2ggZXh0ZW5kcyBCYXNlUmVsYXRpb24ge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZTogc3RyaW5nO1xuICAgIHRhcmdldEtleTogc3RyaW5nO1xuICAgIHBpdm90VGFibGU6IHN0cmluZztcbiAgICBwaXZvdFNvdXJjZUtleTogc3RyaW5nO1xuICAgIHBpdm90VGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU6IChyb3c6IGFueSkgPT4gYW55O1xuICAgIGFmdGVyOiAocm93czogYW55W10pID0+IFByb21pc2U8YW55PjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBIYXNNYW55VGhyb3VnaE9wdGlvbnMpO1xuICAgIGxvYWQoZW50aXRpZXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgVG9rZW4sIFVzZXJFbnRpdHkgfSBmcm9tICdAc2lkZWtpY2stY29kZXIvemVuaXRoLWtpdC9zaGFyZWQnO1xuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvUm91dGVyQ29udHJhY3QudHMnO1xuZXhwb3J0IHR5cGUgQXV0aE1pZGRsZXdhcmVDb250ZXh0ID0ge1xuICAgIHVzZXI6IFVzZXJFbnRpdHk7XG4gICAgdG9rZW46IFRva2VuO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dGhNaWRkbGV3YXJlIGltcGxlbWVudHMgTWlkZGxld2FyZSB7XG4gICAgaGFuZGxlKGN0eDogYW55KTogUHJvbWlzZTxBdXRoTWlkZGxld2FyZUNvbnRleHQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gJ0BzaWRla2ljay1jb2Rlci96ZW5pdGgta2l0L3NoYXJlZCc7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG5pbXBvcnQgdHlwZSBVc2VyIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvVXNlckVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSB7IEh0dHBDb250ZXh0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvSHR0cENvbnRleHRDb250cmFjdC50cyc7XG5leHBvcnQgdHlwZSBBdXRoU2lsZW5jZU1pZGRsZXdhcmVDb250ZXh0ID0ge1xuICAgIHVzZXI/OiBVc2VyO1xuICAgIHRva2VuPzogVG9rZW47XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aFNpbGVuY2VNaWRkbGV3YXJlIGltcGxlbWVudHMgTWlkZGxld2FyZSB7XG4gICAgaGFuZGxlKGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPEF1dGhTaWxlbmNlTWlkZGxld2FyZUNvbnRleHQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBBdXRoU2lsZW5jZU1pZGRsZXdhcmVDb250ZXh0IH0gZnJvbSAnLi9BdXRoU2lsZW5jZU1pZGRsZXdhcmUudHMnO1xuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBNaWRkbGV3YXJlSGFuZGxlUmVzdWx0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvUm91dGVyQ29udHJhY3QudHMnO1xuaW1wb3J0IEFjbCBmcm9tICcjc2VydmVyL2VudGl0aWVzL0FjbEVudGl0eS50cyc7XG5leHBvcnQgdHlwZSBBdXRob3JpemF0aW9uQ29udGV4dCA9IE1pZGRsZXdhcmVIYW5kbGVSZXN1bHQ8W0F1dGhvcml6YXRpb25NaWRkbGV3YXJlXT47XG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6ZVBlcm1pc3Npb25QYXlsb2FkIHtcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICByZXNvdXJjZTogc3RyaW5nO1xuICAgIGNvbmRpdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQXV0aG9yaXplUGVybWlzc2lvbiBpbXBsZW1lbnRzIE1pZGRsZXdhcmUge1xuICAgIHByaXZhdGUgcGVybWlzc2lvbnM7XG4gICAgY29uc3RydWN0b3IocGF5bG9hZDogQXV0aG9yaXplUGVybWlzc2lvblBheWxvYWQgfCBBdXRob3JpemVQZXJtaXNzaW9uUGF5bG9hZFtdKTtcbiAgICBoYW5kbGUoY3R4OiBBdXRob3JpemF0aW9uQ29udGV4dCk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdXRob3JpemF0aW9uTWlkZGxld2FyZSBpbXBsZW1lbnRzIE1pZGRsZXdhcmUge1xuICAgIGhhbmRsZShjdHg6IEF1dGhTaWxlbmNlTWlkZGxld2FyZUNvbnRleHQpOiBQcm9taXNlPHtcbiAgICAgICAgYWNsOiBBY2w7XG4gICAgfT47XG4gICAgc3RhdGljIGNyZWF0ZShwYXlsb2FkOiBBdXRob3JpemVQZXJtaXNzaW9uUGF5bG9hZCB8IEF1dGhvcml6ZVBlcm1pc3Npb25QYXlsb2FkW10pOiBBdXRob3JpemVQZXJtaXNzaW9uO1xufVxuIiwiZGVjbGFyZSBtb2R1bGUgJ2t5c2VseScge1xuICAgIGludGVyZmFjZSBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIgZXh0ZW5kcyBzdHJpbmcsIEMgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcj4ge1xuICAgICAgICBhZGRJZENvbHVtbjxDTiBleHRlbmRzIHN0cmluZyA9ICdpZCc+KGNvbD86IENOKTogQ3JlYXRlVGFibGVCdWlsZGVyPFRCLCBDIHwgQ04+O1xuICAgIH1cbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IHR5cGUgQ29sdW1uVHlwZSB9IGZyb20gJ2t5c2VseSc7XG5leHBvcnQgaW50ZXJmYWNlIFNvZnREZWxldGVUYWJsZSB7XG4gICAgZGVsZXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlIHwgbnVsbCwgbmV2ZXIgfCBudWxsIHwgc3RyaW5nIHwgbnVsbD47XG59XG5kZWNsYXJlIG1vZHVsZSAna3lzZWx5JyB7XG4gICAgaW50ZXJmYWNlIENyZWF0ZVRhYmxlQnVpbGRlcjxUQiBleHRlbmRzIHN0cmluZywgQyBleHRlbmRzIHN0cmluZyA9IG5ldmVyPiB7XG4gICAgICAgIGFkZFNvZnREZWxldGVDb2x1bW4oKTogQ3JlYXRlVGFibGVCdWlsZGVyPFRCLCBDIHwgJ2RlbGV0ZWRfYXQnPjtcbiAgICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IENvbHVtblR5cGUgfSBmcm9tICdreXNlbHknO1xuZXhwb3J0IGludGVyZmFjZSBUaW1lc3RhbXBUYWJsZSB7XG4gICAgY3JlYXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlLCBzdHJpbmcgfCB1bmRlZmluZWQsIG5ldmVyPjtcbiAgICB1cGRhdGVkX2F0OiBDb2x1bW5UeXBlPERhdGUsIHN0cmluZyB8IHVuZGVmaW5lZCwgRGF0ZSB8IHN0cmluZyB8IFJldHVyblR5cGU8dHlwZW9mIG5vdz4+O1xufVxuZGVjbGFyZSBtb2R1bGUgJ2t5c2VseScge1xuICAgIGludGVyZmFjZSBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIgZXh0ZW5kcyBzdHJpbmcsIEMgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcj4ge1xuICAgICAgICBhZGRUaW1lc3RhbXBDb2x1bW5zKCk6IENyZWF0ZVRhYmxlQnVpbGRlcjxUQiwgQyB8ICdjcmVhdGVkX2F0JyB8ICd1cGRhdGVkX2F0Jz47XG4gICAgICAgIGFkZENyZWF0ZWRDb2x1bW4oKTogQ3JlYXRlVGFibGVCdWlsZGVyPFRCLCBDIHwgJ2NyZWF0ZWRfYXQnPjtcbiAgICAgICAgYWRkVXBkYXRlZENvbHVtbigpOiBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIsIEMgfCAndXBkYXRlZF9hdCc+O1xuICAgIH1cbn1cbmRlY2xhcmUgY29uc3Qgbm93OiAoKSA9PiBpbXBvcnQoXCJreXNlbHlcIikuUmF3QnVpbGRlcjxzdHJpbmc+O1xuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYmFzZVBhdGgoLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzdG9yYWdlUGF0aCguLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlbGF0aXZlVG9CYXNlUGF0aCguLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHRtcFBhdGgoLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmc7XG4iLCJpbXBvcnQgdHlwZSB7IExvYWRlclJlY29yZCB9IGZyb20gJy4vZGVmaW5lTG9hZGVyLnRzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUxvYWRlckZhY3Rvcnk8RSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBSIGV4dGVuZHMgTG9hZGVyUmVjb3JkPEU+ID0gTG9hZGVyUmVjb3JkPEU+Pihsb2FkZXJzOiBSKToge1xuICAgIGtleXM6IChrZXlvZiBSKVtdO1xuICAgIGxvYWRlcnM6IFI7XG4gICAgbG9hZDogKGVudGl0aWVzOiBFIHwgRVtdLCBuYW1lczoga2V5b2YgUiB8IChrZXlvZiBSKVtdKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcbiIsImV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGN1aWQoKTogc3RyaW5nO1xuIiwiaW1wb3J0IHR5cGUgeyBIdHRwQ29udGV4dCB9IGZyb20gXCIjc2VydmVyL2NvbnRyYWN0cy9IdHRwQ29udGV4dENvbnRyYWN0LnRzXCI7XG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXIge1xuICAgIChjdHg6IEh0dHBDb250ZXh0KTogUHJvbWlzZTxhbnk+IHwgKCgpID0+IGFueSk7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWZpbmVIYW5kbGVyKGhhbmRsZXI6IEhhbmRsZXIpOiBIYW5kbGVyO1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2VuZXJhdGVJbmRleEZpbGUob3B0aW9uczogYW55KTogdm9pZDtcbiIsImludGVyZmFjZSBPcHRpb25zIHtcbiAgICBjYWNoZT86IGJvb2xlYW47XG4gICAgb25CZWZvcmVJbXBvcnQ/OiAoY3R4OiB7XG4gICAgICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgb25BZnRlckltcG9ydD86IChjdHg6IHtcbiAgICAgICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgbW9kdWxlOiBhbnk7XG4gICAgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgb25FcnJvcj86IChjdHg6IHtcbiAgICAgICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgZXJyb3I6IEVycm9yO1xuICAgIH0pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIGV4Y2x1ZGU/OiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGltcG9ydEZpbGVzKGZpbGVzOiBzdHJpbmdbXSwgb3B0aW9ucz86IE9wdGlvbnMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW1wb3J0R2xvYihwYXR0ZXJuOiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGltcG9ydEFsbChkaXJlY3Rvcnk6IHN0cmluZywgb3B0aW9ucz86IE9wdGlvbnMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW1wb3J0T25lKGZpbGVuYW1lczogc3RyaW5nW10pOiBQcm9taXNlPGFueT47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBTyxjQUFVO0NBQUE7T0FBWSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM3QixJQUFXLGdCQUFNO0NBQUE7T0FBQSxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFD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QUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ1AxQixJQUFBLGdCQUFvQjtDQUFDO09BQUE7RUFBQTtFQUFjO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0VuQyxJQUFXLGNBQWM7Q0FBQztFQUFLLE1BQUcsQ0FBRyxFQUFFO0NBQUU7RUFBQztFQUFJO0VBQUU7RUFBSztDQUFDOzs7O0FDQ3RELElBQUksa0JBQWtCO0NBQUM7T0FBVyxFQUFFO0NBQUMsRUFBQTtDQUFJO0FBQ3pDLElBQUEsZ0JBQVU7Q0FBQTtPQUFZLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ3RCLElBQVcsMEJBQW9CO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQy9CLElBQUkscUJBQW1CO0NBQUE7T0FBUTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNML0IsSUFBVyx1QkFBdUI7Q0FBQztPQUFFLENBQUEsNEJBQW1CLEVBQUEs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SSxnQkFBYztDQUFDO0VBQUcsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QixJQUFBLFdBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTEEsSUFBQSxtQkFBcUI7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFxQjtFQUFBO0VBQXFCO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDL0QsSUFBSSxvQkFBb0I7Q0FBQztFQUFDLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUksaUJBQWU7Q0FBQztPQUFVLENBQUEsa0JBQWtCO0NBQUE7RUFBQTtFQUFTO0VBQUc7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Q1RCxJQUFJLFlBQVk7Q0FBQztFQUFLLE1BQUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLE9BQUk7Q0FBQTtPQUFZLENBQUEsVUFBVTtDQUFNO0VBQUM7RUFBRTtFQUFNO0VBQUc7RUFBQTtDQUFBOzs7O0FDQ2hELElBQUksa0JBQWtCO0NBQUM7RUFBRyxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxlQUFVO0NBQUk7T0FBVztFQUFDO0VBQU07RUFBWTtFQUFNO0VBQU07Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0M1RCxJQUFPLFlBQVU7Q0FBQTtPQUFVLENBQUEsV0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMzQixJQUFTLGFBQWE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdEIsSUFBSSxhQUFTO0NBQUE7T0FBVTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTnZCLElBQUEsb0JBQXFCO0NBQUE7T0FBQTtFQUFBO0VBQWtCO0VBQVE7RUFBVztDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDMUQsSUFBQSxvQkFBcUI7Q0FBQTtPQUFBO0VBQUEsR0FBaUI7RUFBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQXZDLElBQU8seUJBQVU7Q0FBQTtPQUF1QixDQUFBLFFBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3hDLElBQUksa0JBQWtCO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRnRCLElBQVcsWUFBWTtDQUFDO09BQUUsQ0FBQSxXQUFtQixFQUFBLFlBQVU7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdkQsSUFBTyxZQUFjO0NBQUE7T0FBYTtFQUFBLEVBQUE7RUFBa0IsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0FwRCxJQUFBLGFBQWU7Q0FBQTtFQUFNLE1BQUE7RUFBQTtFQUFXLE9BQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQ2hDLElBQU8sdUJBQVU7Q0FBQTtPQUFxQixDQUFBLFlBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdEMsSUFBSSx1QkFBZTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNGbkIsSUFBTyxhQUFVO0NBQUE7T0FBVyxDQUFBLEdBQUEsWUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QixJQUFXLG1CQUFpQjtDQUFBO09BQUEsQ0FBQSxHQUFBLFlBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVCLElBQUEsbUJBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsT0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0FBLElBQUksU0FBUztDQUFBO09BQVE7RUFBQSxFQUFlO0VBQUcsRUFBZTtFQUFrQixFQUFVO0VBQWEsRUFBa0I7RUFBWSxFQUFBO0VBQTJCLEVBQVc7RUFBQyxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3BLLElBQUksZ0JBQXVCO0NBQUM7T0FBVyxDQUFBLFFBQUEsWUFBcUI7Q0FBRSxDQUFBLElBQUEsR0FBUTtDQUFDO0FBQ3ZFLElBQUksVUFBUztDQUFBO09BQWE7RUFBQTtFQUFRO0VBQVU7RUFBQTtFQUFlO0VBQWlCO0VBQVc7RUFBQTtFQUFhO0VBQVk7RUFBZSxPQUFHO0VBQWdCO0VBQVc7RUFBWTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Z6SyxJQUFBLGVBQVU7Q0FBQTtPQUFhO0VBQU87RUFBTTtFQUF3QjtFQUFDO0NBQUE7RUFBQTtFQUFXO0VBQUc7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzNFLElBQUksa0JBQWU7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNIbkIsSUFBVyx5QkFBTztDQUFBO09BQUEsQ0FBQSxZQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNsQixJQUFBLGtCQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUEsU0FBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0FBLElBQU8sa0JBQVU7Q0FBQTtPQUFnQixDQUFBLEdBQUEsWUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNqQyxJQUFXLHdCQUFpQjtDQUFBO09BQUEsQ0FBQSxHQUFBLFlBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVCLElBQUEsZ0JBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsT0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDREEsSUFBQSx3QkFBVTtDQUFBO09BQXNCLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2hDLElBQUksZUFBWTtDQUFBO09BQU07RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLE9BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0h0QixJQUFBLGtCQUFxQjtDQUFBO09BQUE7RUFBQTtFQUF1QjtFQUFNO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNHbEQsSUFBTyxrQ0FBVTtDQUFBO09BQWdDO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNqRCxJQUFJLDJCQUFXO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0xmLElBQU8sYUFBVTtDQUFBO0VBQVksTUFBRyxDQUFHLEVBQUU7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNyQyxJQUFXLGtCQUFHO0NBQUE7T0FBQSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDZCxJQUFVLG9CQUFNO0NBQUE7T0FBQSxDQUFBLGlCQUFBLGdCQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2hCLElBQUksb0JBQWdCO0NBQUE7T0FBQSxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDcEIsSUFBSSxxQkFBYTtDQUFBO0VBQUEsU0FBQSxhQUFBLGFBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0hqQixJQUFPLDZCQUFVO0NBQUE7T0FBMkIsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUMsSUFBUyx1QkFBaUI7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxpQkFBZTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSG5CLElBQU8scUJBQVU7Q0FBQTtPQUFtQixDQUFBLEtBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3BDLElBQUksa0JBQVk7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0VoQixJQUFPLGtCQUFVO0NBQUE7T0FBZ0IsRUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDakMsSUFBUSxZQUFNO0NBQUE7T0FBQSxDQUFBLEtBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2QsSUFBSSxnQkFBaUI7Q0FBQTtPQUFBLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ3JCLElBQUEsa0JBQUE7Q0FBQTtPQUFBLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBTyx5QkFBb0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMzQixJQUFVLHdCQUFNO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDaEIsSUFBSSxrQkFBaUI7Q0FBQTtPQUFJO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDVHpCLElBQUEsTUFBTztDQUFBO09BQWMsQ0FBQSxRQUFJLFVBQVE7Q0FBUTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDekMsSUFBTyxVQUFVO0NBQUE7T0FBUSxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDekIsSUFBVSxXQUFZO0NBQUE7T0FBQSxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDdEIsSUFBQSxjQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSEEsSUFBTyxXQUFVO0NBQUE7T0FBUyxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDMUIsSUFBSSxlQUFnQjtDQUFBO09BQUEsQ0FBQSxRQUFBLFNBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ3BCLElBQUEsYUFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDQSxJQUFBLDJCQUEyQjtDQUFBO0VBQU8sTUFBUTtFQUFBO0VBQU87RUFBUztFQUFNO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNoRSxJQUFBLHlCQUE0QjtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUIsSUFBVyx5QkFBeUI7Q0FBQztFQUFBLE1BQVE7RUFBQTtFQUFhO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxRCxJQUFBLFlBQUE7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTkEsSUFBSSxjQUFjO0NBQUM7T0FBUyxFQUFJO0NBQUUsRUFBRTtDQUFBO0FBQ3BDLElBQUEsUUFBTztDQUFBO09BQWM7RUFBQTtFQUFNO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRTNCLElBQUEsZUFBVTtDQUFBO09BQW1CLEVBQUE7Q0FBQSxFQUFBO0NBQUE7QUFDN0IsSUFBSSxxQkFBWTtDQUFVO09BQUEsQ0FBQSxZQUFBLGFBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLGNBQVM7Q0FBQTtPQUFZLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUN6QixJQUFBLGVBQUE7Q0FBQTtPQUFBLENBQUEsZUFBQSxjQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBQSxxQkFBc0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QixJQUFJLGdCQUFlO0NBQUE7RUFBQSxHQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNSbkIsSUFBTyxpQkFBVTtDQUFBO09BQWUsQ0FBQSxRQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDaEMsSUFBUSx1QkFBb0I7Q0FBQTtPQUFBLENBQUEsZUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVCLElBQUEsZ0JBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RBLElBQU8sYUFBVTtDQUFBO09BQVcsRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQzVCLElBQVMsMEJBQU07Q0FBQTtPQUFBLENBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNmLElBQUEsa0JBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNBLElBQUEsbUJBQWlCO0NBQUE7T0FBQTtFQUFBO0VBQXdCO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNKekMsSUFBTyxrQkFBVTtDQUFBO09BQWdCLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDakMsSUFBSSxlQUFZO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNFaEIsSUFBTyxlQUFVO0NBQUE7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QUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDcEMsSUFBSSxjQUFRO0NBQU87T0FBQTtFQUFBLFFBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxRQUFBO0VBQUEsUUFBQTtFQUFBO0VBQUEsUUFBQTtFQUFBLEtBQUE7RUFBQSxRQUFBO0VBQUEsUUFBQTtFQUFBLFFBQUE7RUFBQSxRQUFBO0VBQUE7RUFBQSxRQUFBO0VBQUEsUUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTm5CLElBQU8sMkJBQVU7Q0FBQTtPQUF5QixDQUFBLFlBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQzFDLElBQUksb0JBQWlCO0NBQUE7T0FBQTtFQUFBO0VBQUEsVUFBQTtFQUFBLFVBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtF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O0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNHcEIsSUFBSSxpQkFBcUI7Q0FBQTtPQUFPLEVBQUE7Q0FBQSxFQUFBO0NBQWM7QUFDOUMsSUFBVyx3QkFBa0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDN0IsSUFBQSw2QkFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBQSx3QkFBYztDQUFBO09BQUE7RUFBMEI7RUFBRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNQMUMsSUFBVyxjQUFjO0NBQUM7T0FBVztFQUFBO0VBQVc7RUFBTztFQUFhO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3BFLElBQUEsWUFBVTtDQUFBO09BQVEsRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ2xCLElBQUksY0FBVztDQUFBO0VBQU8sR0FBQSxVQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQ3RCLElBQUEsdUJBQXFCO0NBQUE7T0FBQTtFQUFBO0VBQTZCO0VBQXNCO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0h4RSxJQUFBLGlCQUFVO0NBQUE7T0FBZSxDQUFBLE9BQUEsV0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDekIsSUFBVSxzQkFBTTtDQUFBO09BQUEsQ0FBQSxjQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2hCLElBQUksZUFBYTtDQUFBO09BQVU7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDNCLElBQUEsbUJBQXFCO0NBQUE7RUFBQSxTQUFpQixhQUFVO0VBQUE7RUFBTztFQUFhO0VBQVk7RUFBa0I7RUFBRztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDckcsSUFBTyw2QkFBVTtDQUFBO09BQTJCLENBQUEscUJBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUMsSUFBSSxpQkFBYztDQUFBO09BQVE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRjFCLElBQU8sNkJBQVU7Q0FBQTtPQUEyQixDQUFBLGFBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUMsSUFBSSxzQkFBVztDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEZixJQUFPLDZCQUFVO0NBQUE7T0FBMkIsQ0FBQSxhQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVDLElBQVMsdUJBQU07Q0FBQTtPQUFBLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDZixJQUFXLHNCQUFhO0NBQUE7T0FBQSxDQUFBLGdCQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN4QixJQUFBLHNCQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0hBLElBQU8sNkNBQVU7Q0FBQTtPQUEyQyxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUQsSUFBSSxpQ0FBc0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0QxQixJQUFPLG1DQUFVO0NBQUE7T0FBaUMsRUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDbEQsSUFBSSx1QkFBc0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0QxQixJQUFPLG1CQUFVO0NBQUE7RUFBaUIsU0FBVSxpQkFBbUIsYUFBRTtFQUFBO0VBQWtCO0VBQUs7RUFBVztFQUFhO0VBQVE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN4SCxJQUFJLCtCQUEyQjtDQUFBO0VBQVEsT0FBTyxTQUFB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RUFBTTtFQUFDO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuRSxJQUFPLE1BQVU7Q0FBQTtPQUFBLENBQUEsU0FBbUIsV0FBYztDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ2xELElBQUksbUJBQWtCO0NBQUE7RUFBVyxNQUFRO0VBQUM7RUFBUTtFQUFHO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3JELElBQUEscUJBQUE7Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNUQSxJQUFPLHdCQUFVO0NBQUE7RUFBd0IsTUFBQTtFQUFBO0VBQWM7RUFBQTtFQUFVO0VBQVE7RUFBbUI7RUFBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzdGLElBQVcsaUJBQVE7Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEbkIsSUFBTyxjQUFVO0NBQUE7RUFBYyxNQUFBO0VBQUE7RUFBYztFQUFBO0VBQVU7RUFBUTtFQUFtQjtFQUFDO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbkYsSUFBVyxPQUFPO0NBQUE7RUFBQSxHQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQWxCLElBQU8sa0JBQVU7Q0FBQTtFQUFrQixNQUFBO0VBQUE7RUFBYztFQUFVO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzNELElBQVcsaUJBQVE7Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtF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O0VBQUEsTUFBUTtFQUFBO0VBQU07RUFBVTtFQUFPO0VBQXFCO0NBQUU7RUFBQztFQUFHO0VBQUE7RUFBUztFQUFFO0VBQUE7Q0FBQTtBQUM5RyxJQUFXLGNBQWM7Q0FBQztPQUFXO0VBQUE7RUFBVztFQUFPO0VBQWlCO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3hFLElBQUEsYUFBZTtDQUFBO0VBQVMsR0FBQSxPQUFVLFVBQU87RUFBQTtFQUFjO0VBQUE7RUFBaUI7RUFBTztFQUFhO0VBQU07RUFBUztFQUFVO0VBQU07RUFBUTtFQUFZO0VBQU87RUFBQTtFQUFNO0VBQUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDdEJoSyxJQUFBLFdBQVU7Q0FBQTtPQUFTLENBQUEsUUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuQixJQUFJLFdBQUs7Q0FBQTtFQUFhLEdBQUcsT0FBRSxNQUFRO0VBQUk7RUFB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RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Z0QixJQUFJLG9CQUFjO0NBQUE7T0FBQSxFQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNsQixJQUFJLFdBQWtCO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3RCLElBQUEsbUJBQUE7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDREEsSUFBSSxtQkFBbUI7Q0FBQztFQUFJLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QixJQUFJLGNBQUE7Q0FBZTtFQUFFLE1BQU87RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSzVCLElBQUksV0FBSTtDQUFBO09BQW1CLEVBQUM7Q0FBQSxDQUFBLElBQU8sR0FBQTtDQUFBO0FBQ25DLElBQUksWUFBWTtDQUFDO0VBQUMsTUFBUTtFQUFBO0VBQVE7RUFBaUM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxTQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbkUsSUFBSSxPQUFPO0NBQUM7T0FBTztFQUFBO0VBQVE7RUFBWTtFQUFRO0VBQU87RUFBUyxPQUFLO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNKcEUsSUFBSSxnQkFBQztDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLFNBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNMLElBQUksV0FBUztDQUFBO09BQUEsQ0FBQSxjQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7Ozs7QUNKYixJQUFBLGNBQWM7Q0FBQTtPQUFhLENBQUEsU0FBTztDQUFJLENBQUEsR0FBQTtDQUFBO0FBQ3RDLElBQUEsU0FBTztDQUFPO09BQU87RUFB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
|
|
1
|
+
import { i as printTable, n as TableColumn, r as printObject, t as ObjectOptions } from "./printTable-7dreX6wW.mjs";
|
|
2
|
+
import { n as CliEvents, r as CliService, t as CliCommand } from "./CliService-BN3FMadM.mjs";
|
|
3
|
+
import { _ as UserMetaTable, a as FileTable, c as OauthAccountTable, d as PermissionTable, f as RoleTable, g as UploadSessionTable, h as TokenTable, i as FileMetaTable, l as OauthTokenTable, m as TimestampTable, n as EmailTemplateMetaTable, o as JobTable, p as SoftDeleteTable, r as EmailTemplateTable, s as MigrationsTable, t as DatabaseContract, u as PermissionAssignmentTable, v as UserRoleTable, y as UserTable } from "./DatabaseContract-iR4kncmi.mjs";
|
|
4
|
+
import { n as DriveUploadUrlOptions, r as DriveUrlOptions, t as DriveContract } from "./DriveContract-CaFb_Tph.mjs";
|
|
5
|
+
import { t as CookieMapEntity } from "./CookieMapEntity-CJRqkyl9.mjs";
|
|
6
|
+
import { n as PageRequestContextEntityOptions, t as PageRequestContextEntity } from "./PageRequestContextEntity-B1nE9xel.mjs";
|
|
7
|
+
import { a as Pagination, i as PaginateOptions, n as DeleteManyOptions, r as FindManyOptions, t as DatabaseRepository } from "./DatabaseRepository-_gA6RkcH.mjs";
|
|
8
|
+
import { n as UserRepositoryEvents, r as UserRepositoryQueryOptions, t as UserRepository } from "./UserRepository-BkGla4Vr.mjs";
|
|
9
|
+
import { n as MigrationEntiyData, t as MigrationEntity } from "./MigrationEntity-B5VsB63u.mjs";
|
|
10
|
+
import { a as MigratorServiceEvents, i as MigratorService, n as Migration, o as MigratorServiceOptions, r as MigrationSource, t as ListFilters } from "./MigratorService-DHug6UBq.mjs";
|
|
11
|
+
import { n as RouterService, t as RouterEvents } from "./RouterService-DmiiZzf5.mjs";
|
|
12
|
+
import { t as Acl } from "./AclEntity-BltZiTsS.mjs";
|
|
13
|
+
import { n as Request, r as Response, t as HttpContext } from "./HttpContextContract-BS6VXi67.mjs";
|
|
14
|
+
import { a as Redirect, i as MiddlewareHandleResult, n as Handler, r as Middleware, t as HandleResult } from "./RouterContract-thDZSYVJ.mjs";
|
|
15
|
+
import { t as Route } from "./RouteEntity-CLRlwjdn.mjs";
|
|
16
|
+
import { n as RoutineEntityOptions, r as RoutineHandler, t as RoutineEntity } from "./RoutineEntity-DTJtFI1m.mjs";
|
|
17
|
+
import { i as SchedulerServiceOptions, n as SchedulerEvents, r as SchedulerService, t as AddOptions } from "./SchedulerService-DDuSAEiJ.mjs";
|
|
18
|
+
import { n as SeederEntiyData, t as SeederEntity } from "./SeederEntity-DYcCU6bM.mjs";
|
|
19
|
+
import { a as SeederSource, i as SeederServiceOptions, n as SeederEvents, o as SeeederService, r as SeederResult } from "./SeederService-B9j_aioh.mjs";
|
|
20
|
+
import { t as EventContract } from "./EventContract-B6JEPwRM.mjs";
|
|
21
|
+
import { t as DatabaseKysely } from "./KyselyContract-ACWyd3F_.mjs";
|
|
22
|
+
import { t as DriveConfig } from "./DriveConfigEntity-Dh8yII97.mjs";
|
|
23
|
+
import { t as ArteTesterService } from "./CliTesterService-XVGae3eK.mjs";
|
|
24
|
+
import { t as CliWrapperService } from "./CliWrapperService-yg9gALPj.mjs";
|
|
25
|
+
import { n as ConfigFSServiceOptions, t as ConfigFSService } from "./ConfigFSService-BOgh6pL9.mjs";
|
|
26
|
+
import { t as EnvService } from "./EnvService-D7rVDvqk.mjs";
|
|
27
|
+
import { n as ConfigManagerService, t as ConfigManagerOptions } from "./ConfigManagerService-D7WdTGtJ.mjs";
|
|
28
|
+
import { n as UploadUrlOptions, r as UrlOptions, t as DriveBaseGateway } from "./DriveBaseGateway-C5R7er0_.mjs";
|
|
29
|
+
import { n as S3DriveConfig, t as DriveS3 } from "./DriveS3Gateway-BM7HhUZf.mjs";
|
|
30
|
+
import { t as ConfigS3Service } from "./ConfigS3Service-MPEl-P_u.mjs";
|
|
31
|
+
import { n as DownloadedFetchOptions, t as DownloadService } from "./DownloadService-B-r-EqkZ.mjs";
|
|
32
|
+
import { t as DriveService } from "./DriveService-Cb-DdupY.mjs";
|
|
33
|
+
import { t as EmmitterService } from "./EmmitterService-BwETNyCU.mjs";
|
|
34
|
+
import { t as EncryptService } from "./EncryptService-B17nfV8V.mjs";
|
|
35
|
+
import { n as ExceptionServiceOptions, t as ExceptionService } from "./ExceptionService-S7L99ujh.mjs";
|
|
36
|
+
import { t as HasherService } from "./HasherService-DnbIU1ub.mjs";
|
|
37
|
+
import { n as HttpServiceOptions, t as HttpService } from "./HttpService-DnnqU2n1.mjs";
|
|
38
|
+
import { t as LifecycleService } from "./LifecycleService-C43A9AOw.mjs";
|
|
39
|
+
import { n as MetadataQueryPayload, r as MetadataQueryService, t as Metadafilter } from "./MetadataQueryService-WXBAN4d8.mjs";
|
|
40
|
+
import { t as MetadataService } from "./MetadataService-D5lAlAuy.mjs";
|
|
41
|
+
import { n as PluginIpcClient, t as IpcMessage } from "./PluginIpcClient-5kLU9aLc.mjs";
|
|
42
|
+
import { t as PluginIpcHost } from "./PluginIpcHost-DTXHSMkU.mjs";
|
|
43
|
+
import { a as RouteReply, i as RouteHandler, n as PluginRouter, o as RouteRequest, r as RouteDefinition, s as RouteResponsePayload, t as HttpMethod } from "./PluginRouter-DOOBinlR.mjs";
|
|
44
|
+
import { t as RouterFileBaseRoutingService } from "./RouterFileBaseRoutingService-CEBdzCYd.mjs";
|
|
45
|
+
import { n as RouterRegisterEntry, t as RouterRegister } from "./RouterRegisterService-mU1J15Yt.mjs";
|
|
46
|
+
import { n as RouterResourceOptions, r as RouterResourceService, t as ResourceMethod } from "./RouterResourceService-Cj73MVpb.mjs";
|
|
47
|
+
import { n as ModelConfig, t as ConfigModel } from "./ModelConfigMixin-7rCJZaAw.mjs";
|
|
48
|
+
import { t as RouterResourceConfig } from "./RouterResourceConfigService-BdqbVblk.mjs";
|
|
49
|
+
import { n as ShellServiceOptions, t as ShellService } from "./ShellService-BrVU19X3.mjs";
|
|
50
|
+
import { t as ConfigRepository } from "./ConfigRepository-DdBw1w8b.mjs";
|
|
51
|
+
import { n as FileRepositoryQueryOptions, t as FileRepository } from "./FileRepository--bOaDHZz.mjs";
|
|
52
|
+
import { n as GitBranchRepositoryOptions, t as GitBranchRepository } from "./GitBranchRepository-k7reiBa4.mjs";
|
|
53
|
+
import { i as GitCommitRepositoryOptions, n as GitCommitListResult, r as GitCommitRepository, t as GitCommitListOptions } from "./GitCommitRepository-j6tmgRS2.mjs";
|
|
54
|
+
import { n as PermissionAssignmentRepositoryQueryOptions, t as PermissionAssignmentRepository } from "./PermissionAssignmentRepository-DVS015ou.mjs";
|
|
55
|
+
import { n as PermissionRepositoryQueryOptions, t as PermissionRepository } from "./PermissionRepository-9Kf8A5uC.mjs";
|
|
56
|
+
import { n as IRepositoryTypes, t as DatabaseRepositoryInferMixin } from "./DatabaseRepositoryInferMixin-BKv4RR8I.mjs";
|
|
57
|
+
import { n as TokenRepositoryGenerateOptions, r as TokenRepositoryQueryOptions, t as TokenRepository } from "./TokenRepository-DplVSSbU.mjs";
|
|
58
|
+
import { t as DatabaseGateway } from "./DatabaseGateway-DHTbjF5C.mjs";
|
|
59
|
+
import { n as DriveFSConfig, t as DriveFS } from "./DriveFSGateway-_7luuCiK.mjs";
|
|
60
|
+
import { n as GitGatewayOptions, r as GitRepoInfo, t as GitGateway } from "./GitGateway-CNuhGhkh.mjs";
|
|
61
|
+
import { n as valueToString, t as Metadata } from "./MetadataMixin-AVaqESW2.mjs";
|
|
62
|
+
import { t as database } from "./database-CWkgKEjr.mjs";
|
|
63
|
+
import { a as SelectFrom, c as UpdateFrom, i as SelectBuilder, l as now, n as ExpressionBuilder, o as SerializableResult, r as InsertFrom, s as SerializeOptions, t as DeleteFrom } from "./common-CkVu3aD6.mjs";
|
|
64
|
+
import { n as updateOrCreate, t as UpdateOrCreateOptions } from "./updateOrCreate-ytNvnRnp.mjs";
|
|
65
|
+
import { n as list, t as ListOptions } from "./list-DLrcQUmc.mjs";
|
|
66
|
+
import { n as PaginateResult, r as paginate } from "./paginate-Dq4YCfoP.mjs";
|
|
67
|
+
import { n as count, t as CountOptions } from "./count-Cx1qqWRe.mjs";
|
|
68
|
+
import { i as createMysql, n as create, r as createDefault, t as CreateOptions } from "./create-BnVaEuUC.mjs";
|
|
69
|
+
import { i as updateMysql, n as update, r as updateDefault, t as UpdateOptions } from "./update-9SpXDvjp.mjs";
|
|
70
|
+
import { n as destroy, t as DestroyOptions } from "./destroy-Uj3B5q04.mjs";
|
|
71
|
+
import { n as firstOrCreate, t as FirstOrCreateOptions } from "./firstOrCreate-DZr8L5yb.mjs";
|
|
72
|
+
import { n as findOne, r as findOneOrFail, t as FindOneOptions } from "./findOne-Boxfam4u.mjs";
|
|
73
|
+
import ModelMixin, { ModelCountOptions, ModelCreateOptions, ModelDestroyOptions, ModelEntity, ModelFindOptions, ModelFirstOrCreateOptions, ModelListOptions, ModelPaginateOptions, ModelUpdateOptions, ModelUpdateOrCreateOptions } from "./mixins/ModelMixin.mjs";
|
|
74
|
+
import { t as Relation } from "./RelationsMixin-BaXvJfzK.mjs";
|
|
75
|
+
import { t as config } from "./config-DDScRnvV.mjs";
|
|
76
|
+
import { t as _default } from "./container-Be1UNVpU.mjs";
|
|
77
|
+
import { t as download } from "./download-DzKRkAhD.mjs";
|
|
78
|
+
import { t as drive } from "./drive-BZiloXJW.mjs";
|
|
79
|
+
import { t as emmitter } from "./emmitter-9-6gueft.mjs";
|
|
80
|
+
import { t as encrypt } from "./encrypt-BtQggXao.mjs";
|
|
81
|
+
import { t as env } from "./env-oE1dEbgb.mjs";
|
|
82
|
+
import { t as fileRepository } from "./filesRepository-D9fxvd-E.mjs";
|
|
83
|
+
import { t as hasher } from "./hasher-i-RJja9d.mjs";
|
|
84
|
+
import { t as http } from "./http-F5dtmcy0.mjs";
|
|
85
|
+
import { t as lifecycle } from "./lifecycle-CBXw5SHi.mjs";
|
|
86
|
+
import { t as logger } from "./logger-B-eGxHk1.mjs";
|
|
87
|
+
import { t as migrator } from "./migrator-D9OUJuE0.mjs";
|
|
88
|
+
import { t as permissionAssignmentRepository } from "./permissionAssignmentRepository-kW-shaeD.mjs";
|
|
89
|
+
import { t as permissionRepository } from "./permissionRepository-pSU0Pbu0.mjs";
|
|
90
|
+
import { t as router } from "./router-D7lk_eki.mjs";
|
|
91
|
+
import { t as scheduler } from "./scheduler-BZJ0JscK.mjs";
|
|
92
|
+
import { t as shell } from "./shell-D3lbVvdM.mjs";
|
|
93
|
+
import { t as tokenRepository } from "./tokenRepository-BsrgOgMO.mjs";
|
|
94
|
+
import { t as userRepository } from "./userRepository-DgENwIFS.mjs";
|
|
95
|
+
import { n as LoaderRecord, r as defineLoader, t as Loader } from "./defineLoader-BOYnKv5_.mjs";
|
|
96
|
+
import { t as createFileLoader } from "./fileLoader-D1BgCxaZ.mjs";
|
|
97
|
+
import { n as loadFileUrl, t as createFileUrlLoader } from "./fileUrlLoader-DpVRfcGU.mjs";
|
|
98
|
+
import { n as createHasManyThroughLoader, r as loadHasManyThrough, t as HasManyThroughLoaderOptions } from "./hasManyThroughLoader-BlAt7DQD.mjs";
|
|
99
|
+
import { n as loadMetas, t as createMetasLoader } from "./loadMetas-kut6dSZS.mjs";
|
|
100
|
+
import { n as loadPermissions, t as createPermissionLoader } from "./permissionLoader-DzP0E01F.mjs";
|
|
101
|
+
import { n as loadUser, t as createUserLoader } from "./userLoader-C7A1u-FB.mjs";
|
|
102
|
+
import { n as FileMeta, t as File } from "./FileEntity-6sT7RdiN.mjs";
|
|
103
|
+
import { t as Module } from "./ModuleEntity-xa6rCTxe.mjs";
|
|
104
|
+
import { t as PluginEntryEntity } from "./PluginEntryEntity-BDBElYQ1.mjs";
|
|
105
|
+
import { t as PluginEntity } from "./PluginEntity-Bjl3keRp.mjs";
|
|
106
|
+
import { t as exists } from "./exists-Csru9uQi.mjs";
|
|
107
|
+
import { a as softDelete, i as deleted, n as SoftDeleteResult, o as undeleted, r as addSoftDeleteColumn, s as whereNotDeleted, t as SoftDeleteOptions } from "./softDelete-zHpOCvxX.mjs";
|
|
108
|
+
import { n as addTimestampColumns, r as addUpdatedColumn, t as addCreatedColumn } from "./timestamp-OxM0lLhB.mjs";
|
|
109
|
+
import { t as BaseRelation } from "./BaseRelation-Br4CDT5e.mjs";
|
|
110
|
+
import { t as BelongsTo } from "./BelongsToRelation-BdcBpcDt.mjs";
|
|
111
|
+
import { n as LoadFileMetas, r as LoadFileUrl, t as BelongsToFile } from "./BelongsToFileRelation-B-KDoKlS.mjs";
|
|
112
|
+
import { t as BelongsToUser } from "./BelongsToUserRelation-D-nXYwyy.mjs";
|
|
113
|
+
import { t as HasMany } from "./HasManyRelation-v0qmO2nd.mjs";
|
|
114
|
+
import { t as HasMetas } from "./HasMetasRelation-BUoCpbto.mjs";
|
|
115
|
+
import { t as HasManyThrough } from "./hasManyThroughRelation-CydrMBzu.mjs";
|
|
116
|
+
import { n as AuthMiddlewareContext, t as AuthMiddleware } from "./AuthMiddleware-D2BZKKBJ.mjs";
|
|
117
|
+
import { n as AuthSilenceMiddlewareContext, t as AuthSilenceMiddleware } from "./AuthSilenceMiddleware-8l5EPeot.mjs";
|
|
118
|
+
import { i as AuthorizePermissionPayload, n as AuthorizationMiddleware, r as AuthorizePermission, t as AuthorizationContext } from "./AuthorizationMiddleware-BjozUIyB.mjs";
|
|
119
|
+
import { a as storagePath, i as serverPath, n as clientPath, o as tmpPath, r as relativeToBasePath, t as basePath } from "./basePath-BrKDzdou.mjs";
|
|
120
|
+
import { t as getPluginConfig } from "./config-OUxEJV91.mjs";
|
|
121
|
+
import { t as createLoaderFactory } from "./createLoaderFactory-Bpk6rD3D.mjs";
|
|
122
|
+
import { t as cuid } from "./cuid-7odspl-1.mjs";
|
|
123
|
+
import { n as defineHandler } from "./defineHandler-fLDf436i.mjs";
|
|
124
|
+
import { t as generateIndexFile } from "./generateIndexFile-zJLs7hsX.mjs";
|
|
125
|
+
import { n as importFiles, r as importGlob, t as importAll } from "./importAll-CDPG0oSA.mjs";
|
|
126
|
+
import { t as importOne } from "./importOne-C4TjAH5G.mjs";
|
|
127
|
+
export { Acl as AclEntity, AddOptions, AuthMiddleware, AuthMiddlewareContext, AuthSilenceMiddleware, AuthSilenceMiddlewareContext, AuthorizationContext, AuthorizationMiddleware, AuthorizePermission, AuthorizePermissionPayload, BaseRelation, BelongsToFile as BelongsToFileRelation, BelongsTo as BelongsToRelation, BelongsToUser as BelongsToUserRelation, CliCommand, CliEvents, CliService, ArteTesterService as CliTesterService, CliWrapperService, ConfigFSService, ConfigFSServiceOptions, ConfigManagerOptions, ConfigManagerService, ConfigModel, ConfigRepository, ConfigS3Service, CookieMapEntity, CountOptions, CreateOptions, DatabaseContract, DatabaseGateway, DatabaseKysely, DatabaseRepository, DatabaseRepositoryInferMixin, DeleteFrom, DeleteManyOptions, DestroyOptions, DownloadService, DownloadedFetchOptions, DriveBaseGateway, DriveConfig as DriveConfigEntity, DriveContract, DriveFSConfig, DriveFS as DriveFSGateway, DriveS3 as DriveS3Gateway, DriveService, DriveUploadUrlOptions, DriveUrlOptions, EmailTemplateMetaTable, EmailTemplateTable, EmmitterService, EncryptService, EnvService, EventContract, ExceptionService, ExceptionServiceOptions, ExpressionBuilder, File as FileEntity, FileMeta as FileMetaEntity, FileMetaTable, FileRepository, FileRepositoryQueryOptions, FileTable, FindManyOptions, FindOneOptions, FirstOrCreateOptions, GitBranchRepository, GitBranchRepositoryOptions, GitCommitListOptions, GitCommitListResult, GitCommitRepository, GitCommitRepositoryOptions, GitGateway, GitGatewayOptions, GitRepoInfo, HandleResult, HasMany as HasManyRelation, HasManyThroughLoaderOptions, HasMetas as HasMetasRelation, HasherService, HttpContext, HttpMethod, HttpService, HttpServiceOptions, IRepositoryTypes, InsertFrom, IpcMessage, JobTable, LifecycleService, ListOptions, LoadFileMetas, LoadFileUrl, Loader, LoaderRecord, Metadafilter, Metadata as MetadataMixin, MetadataQueryPayload, MetadataQueryService, MetadataService, Middleware, MiddlewareHandleResult, Migration, MigrationEntity, MigrationEntiyData, MigrationSource, MigrationsTable, MigratorService, MigratorServiceEvents, MigratorServiceOptions, ModelConfig as ModelConfigMixin, ModelCountOptions, ModelCreateOptions, ModelDestroyOptions, ModelEntity, ModelFindOptions, ModelFirstOrCreateOptions, ModelListOptions, ModelMixin, ModelPaginateOptions, ModelUpdateOptions, ModelUpdateOrCreateOptions, Module as ModuleEntity, OauthAccountTable, OauthTokenTable, ObjectOptions, PageRequestContextEntity, PageRequestContextEntityOptions, PaginateResult, Pagination, PermissionAssignmentRepository, PermissionAssignmentRepositoryQueryOptions, PermissionAssignmentTable, PermissionRepository, PermissionRepositoryQueryOptions, PermissionTable, PluginEntity, PluginEntryEntity, PluginIpcClient, PluginIpcHost, PluginRouter, Redirect, Relation as RelationsMixin, Request, ResourceMethod, Response, RoleTable, RouteDefinition, Route as RouteEntity, RouteHandler, RouteReply, RouteRequest, RouteResponsePayload, RouterEvents, RouterFileBaseRoutingService, RouterRegisterEntry, RouterRegister as RouterRegisterService, RouterResourceConfig as RouterResourceConfigService, RouterResourceOptions, RouterResourceService, RouterService, RoutineEntity, RoutineEntityOptions, RoutineHandler, S3DriveConfig, SchedulerEvents, SchedulerService, SchedulerServiceOptions, SeederEntity, SeederEntiyData, SeederEvents, SeederResult, SeeederService as SeederService, SeederServiceOptions, SeederSource, SelectBuilder, SelectFrom, SerializableResult, SerializeOptions, ShellService, ShellServiceOptions, SoftDeleteOptions, SoftDeleteResult, TableColumn, TokenRepository, TokenRepositoryGenerateOptions, TokenRepositoryQueryOptions, TokenTable, UpdateFrom, UpdateOptions, UpdateOrCreateOptions, UploadSessionTable, UploadUrlOptions, UrlOptions, UserMetaTable, UserRepository, UserRepositoryEvents, UserRepositoryQueryOptions, UserRoleTable, UserTable, addCreatedColumn, addSoftDeleteColumn, addTimestampColumns, addUpdatedColumn, basePath, clientPath, config, _default as container, count, create, createDefault, createFileLoader, createFileUrlLoader, createHasManyThroughLoader, createLoaderFactory, createMetasLoader, createMysql, createPermissionLoader, createUserLoader, cuid, database, defineHandler, defineLoader, deleted, destroy, download, drive, emmitter, encrypt, env, exists, fileRepository as filesRepository, findOne, findOneOrFail, firstOrCreate, generateIndexFile, getPluginConfig, HasManyThrough as hasManyThroughRelation, hasher, http, importAll, importFiles, importGlob, importOne, lifecycle, list, loadFileUrl, loadHasManyThrough, loadMetas, loadPermissions, loadUser, logger, migrator, now, paginate, permissionAssignmentRepository, permissionRepository, printObject, printTable, relativeToBasePath, router, scheduler, serverPath, shell, softDelete, storagePath, tmpPath, tokenRepository, undeleted, update, updateDefault, updateMysql, updateOrCreate, userRepository, valueToString, whereNotDeleted };
|