@adaas/a-server 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +739 -0
- package/dist/index.d.ts +739 -36
- package/dist/index.js +1904 -102
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1862 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +5 -3
- package/src/components/A-ServerLogger/A_ServerLogger.component.ts +1 -1
- package/src/index.ts +75 -0
- package/tsconfig.build.json +9 -43
- package/tsconfig.json +1 -1
- package/tsup.config.ts +15 -0
- package/dist/src/channels/A-Http/A-Http.channel.constants.d.ts +0 -5
- package/dist/src/channels/A-Http/A-Http.channel.constants.js +0 -10
- package/dist/src/channels/A-Http/A-Http.channel.constants.js.map +0 -1
- package/dist/src/channels/A-Http/A-Http.channel.d.ts +0 -29
- package/dist/src/channels/A-Http/A-Http.channel.error.d.ts +0 -4
- package/dist/src/channels/A-Http/A-Http.channel.error.js +0 -9
- package/dist/src/channels/A-Http/A-Http.channel.error.js.map +0 -1
- package/dist/src/channels/A-Http/A-Http.channel.js +0 -154
- package/dist/src/channels/A-Http/A-Http.channel.js.map +0 -1
- package/dist/src/channels/A-Http/A-Http.channel.types.d.ts +0 -59
- package/dist/src/channels/A-Http/A-Http.channel.types.js +0 -3
- package/dist/src/channels/A-Http/A-Http.channel.types.js.map +0 -1
- package/dist/src/channels/A-Websockets/A-Websockets.channel.d.ts +0 -4
- package/dist/src/channels/A-Websockets/A-Websockets.channel.js +0 -22
- package/dist/src/channels/A-Websockets/A-Websockets.channel.js.map +0 -1
- package/dist/src/components/A-CommandController/A-CommandController.component.d.ts +0 -8
- package/dist/src/components/A-CommandController/A-CommandController.component.js +0 -55
- package/dist/src/components/A-CommandController/A-CommandController.component.js.map +0 -1
- package/dist/src/components/A-Controller/A-Controller.component.d.ts +0 -9
- package/dist/src/components/A-Controller/A-Controller.component.js +0 -60
- package/dist/src/components/A-Controller/A-Controller.component.js.map +0 -1
- package/dist/src/components/A-Controller/A-Controller.component.types.d.ts +0 -0
- package/dist/src/components/A-Controller/A-Controller.component.types.js +0 -2
- package/dist/src/components/A-Controller/A-Controller.component.types.js.map +0 -1
- package/dist/src/components/A-EntityController/A-EntityController.component.d.ts +0 -26
- package/dist/src/components/A-EntityController/A-EntityController.component.js +0 -226
- package/dist/src/components/A-EntityController/A-EntityController.component.js.map +0 -1
- package/dist/src/components/A-EntityController/A-EntityController.component.types.d.ts +0 -0
- package/dist/src/components/A-EntityController/A-EntityController.component.types.js +0 -2
- package/dist/src/components/A-EntityController/A-EntityController.component.types.js.map +0 -1
- package/dist/src/components/A-EntityRepository/A-EntityRepository.component.d.ts +0 -9
- package/dist/src/components/A-EntityRepository/A-EntityRepository.component.js +0 -118
- package/dist/src/components/A-EntityRepository/A-EntityRepository.component.js.map +0 -1
- package/dist/src/components/A-EntityRepository/A-EntityRepository.error.d.ts +0 -0
- package/dist/src/components/A-EntityRepository/A-EntityRepository.error.js +0 -2
- package/dist/src/components/A-EntityRepository/A-EntityRepository.error.js.map +0 -1
- package/dist/src/components/A-EntityRepository/A-EntityRepository.types.d.ts +0 -0
- package/dist/src/components/A-EntityRepository/A-EntityRepository.types.js +0 -2
- package/dist/src/components/A-EntityRepository/A-EntityRepository.types.js.map +0 -1
- package/dist/src/components/A-ListingController/A-ListingController.component.d.ts +0 -10
- package/dist/src/components/A-ListingController/A-ListingController.component.js +0 -72
- package/dist/src/components/A-ListingController/A-ListingController.component.js.map +0 -1
- package/dist/src/components/A-ListingController/A-ListingController.component.types.d.ts +0 -0
- package/dist/src/components/A-ListingController/A-ListingController.component.types.js +0 -2
- package/dist/src/components/A-ListingController/A-ListingController.component.types.js.map +0 -1
- package/dist/src/components/A-Router/A-Router.component.d.ts +0 -63
- package/dist/src/components/A-Router/A-Router.component.js +0 -221
- package/dist/src/components/A-Router/A-Router.component.js.map +0 -1
- package/dist/src/components/A-Router/A-Router.component.types.d.ts +0 -26
- package/dist/src/components/A-Router/A-Router.component.types.js +0 -17
- package/dist/src/components/A-Router/A-Router.component.types.js.map +0 -1
- package/dist/src/components/A-ServerCORS/A_ServerCORS.component.d.ts +0 -9
- package/dist/src/components/A-ServerCORS/A_ServerCORS.component.defaults.d.ts +0 -2
- package/dist/src/components/A-ServerCORS/A_ServerCORS.component.defaults.js +0 -11
- package/dist/src/components/A-ServerCORS/A_ServerCORS.component.defaults.js.map +0 -1
- package/dist/src/components/A-ServerCORS/A_ServerCORS.component.js +0 -70
- package/dist/src/components/A-ServerCORS/A_ServerCORS.component.js.map +0 -1
- package/dist/src/components/A-ServerCORS/A_ServerCORS.component.types.d.ts +0 -7
- package/dist/src/components/A-ServerCORS/A_ServerCORS.component.types.js +0 -3
- package/dist/src/components/A-ServerCORS/A_ServerCORS.component.types.js.map +0 -1
- package/dist/src/components/A-ServerError/A-ServerError.class.d.ts +0 -7
- package/dist/src/components/A-ServerError/A-ServerError.class.js +0 -88
- package/dist/src/components/A-ServerError/A-ServerError.class.js.map +0 -1
- package/dist/src/components/A-ServerError/A-ServerError.constants.d.ts +0 -0
- package/dist/src/components/A-ServerError/A-ServerError.constants.js +0 -2
- package/dist/src/components/A-ServerError/A-ServerError.constants.js.map +0 -1
- package/dist/src/components/A-ServerError/A-ServerError.types.d.ts +0 -13
- package/dist/src/components/A-ServerError/A-ServerError.types.js +0 -3
- package/dist/src/components/A-ServerError/A-ServerError.types.js.map +0 -1
- package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.d.ts +0 -7
- package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.js +0 -81
- package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.js.map +0 -1
- package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.types.d.ts +0 -0
- package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.types.js +0 -2
- package/dist/src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.types.js.map +0 -1
- package/dist/src/components/A-ServerLogger/A-ServerLogger.constants.d.ts +0 -22
- package/dist/src/components/A-ServerLogger/A-ServerLogger.constants.js +0 -31
- package/dist/src/components/A-ServerLogger/A-ServerLogger.constants.js.map +0 -1
- package/dist/src/components/A-ServerLogger/A_ServerLogger.component.d.ts +0 -43
- package/dist/src/components/A-ServerLogger/A_ServerLogger.component.js +0 -167
- package/dist/src/components/A-ServerLogger/A_ServerLogger.component.js.map +0 -1
- package/dist/src/components/A-ServerLogger/A_ServerLogger.component.types.d.ts +0 -9
- package/dist/src/components/A-ServerLogger/A_ServerLogger.component.types.js +0 -3
- package/dist/src/components/A-ServerLogger/A_ServerLogger.component.types.js.map +0 -1
- package/dist/src/components/A-ServerProxy/A-ServerProxy.component.d.ts +0 -9
- package/dist/src/components/A-ServerProxy/A-ServerProxy.component.js +0 -88
- package/dist/src/components/A-ServerProxy/A-ServerProxy.component.js.map +0 -1
- package/dist/src/components/A-StaticLoader/A-StaticLoader.component.d.ts +0 -12
- package/dist/src/components/A-StaticLoader/A-StaticLoader.component.js +0 -126
- package/dist/src/components/A-StaticLoader/A-StaticLoader.component.js.map +0 -1
- package/dist/src/components/A-StaticLoader/A-StaticLoader.component.types.d.ts +0 -10
- package/dist/src/components/A-StaticLoader/A-StaticLoader.component.types.js +0 -109
- package/dist/src/components/A-StaticLoader/A-StaticLoader.component.types.js.map +0 -1
- package/dist/src/constants/env.constants.d.ts +0 -10
- package/dist/src/constants/env.constants.js +0 -20
- package/dist/src/constants/env.constants.js.map +0 -1
- package/dist/src/containers/A-Service/A-Service.container.d.ts +0 -30
- package/dist/src/containers/A-Service/A-Service.container.js +0 -200
- package/dist/src/containers/A-Service/A-Service.container.js.map +0 -1
- package/dist/src/containers/A-Service/A-Service.container.types.d.ts +0 -36
- package/dist/src/containers/A-Service/A-Service.container.types.js +0 -27
- package/dist/src/containers/A-Service/A-Service.container.types.js.map +0 -1
- package/dist/src/context/A-EntityFactory/A-EntityFactory.context.d.ts +0 -39
- package/dist/src/context/A-EntityFactory/A-EntityFactory.context.js +0 -69
- package/dist/src/context/A-EntityFactory/A-EntityFactory.context.js.map +0 -1
- package/dist/src/context/A-EntityFactory/A-EntityFactory.context.types.d.ts +0 -5
- package/dist/src/context/A-EntityFactory/A-EntityFactory.context.types.js +0 -3
- package/dist/src/context/A-EntityFactory/A-EntityFactory.context.types.js.map +0 -1
- package/dist/src/context/A-HttpChannel/A-HttpChannel.context.d.ts +0 -12
- package/dist/src/context/A-HttpChannel/A-HttpChannel.context.js +0 -16
- package/dist/src/context/A-HttpChannel/A-HttpChannel.context.js.map +0 -1
- package/dist/src/context/A-ListQueryFilter/A_ListQueryFilter.context.d.ts +0 -10
- package/dist/src/context/A-ListQueryFilter/A_ListQueryFilter.context.js +0 -30
- package/dist/src/context/A-ListQueryFilter/A_ListQueryFilter.context.js.map +0 -1
- package/dist/src/context/A-ProxyConfig/A_ProxyConfig.constants.d.ts +0 -2
- package/dist/src/context/A-ProxyConfig/A_ProxyConfig.constants.js +0 -12
- package/dist/src/context/A-ProxyConfig/A_ProxyConfig.constants.js.map +0 -1
- package/dist/src/context/A-ProxyConfig/A_ProxyConfig.context.d.ts +0 -29
- package/dist/src/context/A-ProxyConfig/A_ProxyConfig.context.js +0 -60
- package/dist/src/context/A-ProxyConfig/A_ProxyConfig.context.js.map +0 -1
- package/dist/src/context/A-ProxyConfig/A_ProxyConfig.types.d.ts +0 -18
- package/dist/src/context/A-ProxyConfig/A_ProxyConfig.types.js +0 -3
- package/dist/src/context/A-ProxyConfig/A_ProxyConfig.types.js.map +0 -1
- package/dist/src/context/A-Server/A_Server.context.d.ts +0 -17
- package/dist/src/context/A-Server/A_Server.context.js +0 -22
- package/dist/src/context/A-Server/A_Server.context.js.map +0 -1
- package/dist/src/context/A-Server/A_Server.context.types.d.ts +0 -7
- package/dist/src/context/A-Server/A_Server.context.types.js +0 -3
- package/dist/src/context/A-Server/A_Server.context.types.js.map +0 -1
- package/dist/src/context/A-StaticConfig/A-StaticConfig.context.d.ts +0 -16
- package/dist/src/context/A-StaticConfig/A-StaticConfig.context.js +0 -28
- package/dist/src/context/A-StaticConfig/A-StaticConfig.context.js.map +0 -1
- package/dist/src/context/A-StaticConfig/A-StaticConfig.context.types.d.ts +0 -0
- package/dist/src/context/A-StaticConfig/A-StaticConfig.context.types.js +0 -2
- package/dist/src/context/A-StaticConfig/A-StaticConfig.context.types.js.map +0 -1
- package/dist/src/entities/A-Request/A-Request.entity.d.ts +0 -31
- package/dist/src/entities/A-Request/A-Request.entity.js +0 -125
- package/dist/src/entities/A-Request/A-Request.entity.js.map +0 -1
- package/dist/src/entities/A-Request/A-Request.entity.types.d.ts +0 -21
- package/dist/src/entities/A-Request/A-Request.entity.types.js +0 -12
- package/dist/src/entities/A-Request/A-Request.entity.types.js.map +0 -1
- package/dist/src/entities/A-Response/A-Response.entity.d.ts +0 -28
- package/dist/src/entities/A-Response/A-Response.entity.js +0 -141
- package/dist/src/entities/A-Response/A-Response.entity.js.map +0 -1
- package/dist/src/entities/A-Response/A-Response.entity.types.d.ts +0 -19
- package/dist/src/entities/A-Response/A-Response.entity.types.js +0 -12
- package/dist/src/entities/A-Response/A-Response.entity.types.js.map +0 -1
- package/dist/src/entities/A-Route/A-Route.entity.d.ts +0 -17
- package/dist/src/entities/A-Route/A-Route.entity.js +0 -76
- package/dist/src/entities/A-Route/A-Route.entity.js.map +0 -1
- package/dist/src/entities/A-Route/A-Route.entity.types.d.ts +0 -0
- package/dist/src/entities/A-Route/A-Route.entity.types.js +0 -2
- package/dist/src/entities/A-Route/A-Route.entity.types.js.map +0 -1
- package/dist/src/entities/A_EntityList/A_EntityList.entity.d.ts +0 -46
- package/dist/src/entities/A_EntityList/A_EntityList.entity.js +0 -91
- package/dist/src/entities/A_EntityList/A_EntityList.entity.js.map +0 -1
- package/dist/src/entities/A_EntityList/A_EntityList.entity.types.d.ts +0 -21
- package/dist/src/entities/A_EntityList/A_EntityList.entity.types.js +0 -8
- package/dist/src/entities/A_EntityList/A_EntityList.entity.types.js.map +0 -1
- package/index.ts +0 -75
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";AAEA,+EAA+E;AAC/E,gDAAgD;AAChD,+EAA+E;;;;;;;;;;;;;;;;;AAE/E,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAC/E,uEAAqE;AAA5D,+GAAA,aAAa,OAAA;AACtB,mFAAgF;AAAvE,0HAAA,kBAAkB,OAAA;AAG3B,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAC/E,gEAA8C;AAG9C,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAC/E,sFAA2E;AAAlE,gHAAA,SAAS,OAAA;AAGlB,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAC/E,4EAAmE;AAA1D,4GAAA,QAAQ,OAAA;AACjB,2FAAkF;AAAzE,sHAAA,aAAa,OAAA;AACtB,8FAAqF;AAA5E,wHAAA,cAAc,OAAA;AACvB,uGAA8F;AAArF,8HAAA,iBAAiB,OAAA;AAC1B,iGAAwF;AAA/E,0HAAA,eAAe,OAAA;AACxB,2FAAiG;AAAxF,qIAAA,4BAA4B,OAAA;AAGrC,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAC/E,8EAAsE;AAA7D,6GAAA,SAAS,OAAA;AAClB,iFAAyE;AAAhE,+GAAA,UAAU,OAAA;AACnB,wEAAgE;AAAvD,yGAAA,OAAO,OAAA;AAChB,uFAA+E;AAAtE,mHAAA,YAAY,OAAA;AAGrB,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAC/E,qGAA0F;AAAjF,0HAAA,cAAc,OAAA;AACvB,iHAAsG;AAA7F,kIAAA,kBAAkB,OAAA;AAC3B,mFAAwE;AAA/D,8GAAA,QAAQ,OAAA;AACjB,0HAA+G;AAAtG,wIAAA,qBAAqB,OAAA;AAC9B,kGAAuF;AAA9E,wHAAA,aAAa,OAAA;AACtB,+FAAoF;AAA3E,sHAAA,YAAY,OAAA;AACrB,qGAA0F;AAAjF,0HAAA,cAAc,OAAA;AACvB,+FAAoF;AAA3E,sHAAA,YAAY,OAAA;AACrB,oHAAyG;AAAhG,oIAAA,mBAAmB,OAAA;AAC5B,oHAAyG;AAAhG,oIAAA,mBAAmB,OAAA;AAC5B,iHAAsG;AAA7F,kIAAA,kBAAkB,OAAA;AAC3B,0FAAmF;AAA1E,oHAAA,aAAa,OAAA;AAGtB,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAC/E,uFAAqE;AACrE,kFAAgE;AAChE,8FAA4E;AAC5E,kFAAgE;AAChE,oFAAkE;AAClE,6FAA2E;AAC3E,qFAAmE;AACnE,qFAAmE;AACnE,6EAA2D;AAC3D,iFAA+D"}
|
|
1
|
+
{"version":3,"sources":["../src/containers/A-Service/A-Service.container.types.ts","../src/context/A-HttpChannel/A-HttpChannel.context.ts","../src/channels/A-Http/A-Http.channel.constants.ts","../src/components/A-ServerError/A-ServerError.class.ts","../src/channels/A-Http/A-Http.channel.error.ts","../src/channels/A-Http/A-Http.channel.ts","../src/constants/env.constants.ts","../src/context/A-Server/A_Server.context.ts","../src/entities/A-Request/A-Request.entity.types.ts","../src/entities/A-Route/A-Route.entity.ts","../src/entities/A-Request/A-Request.entity.ts","../src/entities/A-Response/A-Response.entity.types.ts","../src/entities/A-Response/A-Response.entity.ts","../src/containers/A-Service/A-Service.container.ts","../src/context/A-ProxyConfig/A_ProxyConfig.constants.ts","../src/context/A-ProxyConfig/A_ProxyConfig.context.ts","../src/context/A-StaticConfig/A-StaticConfig.context.ts","../src/context/A-ListQueryFilter/A_ListQueryFilter.context.ts","../src/context/A-EntityFactory/A-EntityFactory.context.ts","../src/entities/A_EntityList/A_EntityList.entity.ts","../src/components/A-ServerLogger/A_ServerLogger.component.ts","../src/components/A-Router/A-Router.component.types.ts","../src/components/A-Router/A-Router.component.ts","../src/components/A-EntityController/A-EntityController.component.ts","../src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.ts","../src/components/A-ServerProxy/A-ServerProxy.component.ts","../src/components/A-ServerCORS/A_ServerCORS.component.defaults.ts","../src/components/A-ServerCORS/A_ServerCORS.component.ts","../src/components/A-StaticLoader/A-StaticLoader.component.ts","../src/components/A-Controller/A-Controller.component.ts","../src/components/A-ListingController/A-ListingController.component.ts","../src/components/A-CommandController/A-CommandController.component.ts","../src/components/A-EntityRepository/A-EntityRepository.component.ts"],"names":["A_SERVER_TYPES__ServerFeature","A_SERVER_TYPES__ServerMethod","A_Fragment","A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle","A_Error","A_Channel","A_Scope","A_Context","path","A_SERVER_TYPES__RequestEvent","A_Entity","ASEID","A_IdentityHelper","A_SERVER_TYPES__ResponseEvent","A_Logger","A_Container","A_Config","config","createServer","crypto","A_Concept","A_Feature","A_SERVER_TYPES__RouterMethod","A_SERVER_TYPES__ARouterComponentMetaKey","A_Component","A_Feature_Define","A_Feature_Extend","A_TypeGuards","A_Inject","https","http","fs","URL","A_Manifest","A_TYPES__EntityFeatures","A_Caller"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,IAAK,6BAAA,qBAAAA,8BAAAA,KAAL;AACH,EAAAA,+BAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,+BAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,+BAAA,YAAA,CAAA,GAAa,YAAA;AACb,EAAAA,+BAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,+BAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,+BAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,+BAAA,cAAA,CAAA,GAAe,cAAA;AAPP,EAAA,OAAAA,8BAAAA;AAAA,CAAA,EAAA,6BAAA,IAAA,EAAA;AAqBL,IAAK,4BAAA,qBAAAC,6BAAAA,KAAL;AACH,EAAAA,8BAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,8BAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,8BAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,8BAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,8BAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,8BAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,8BAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,8BAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,8BAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,8BAAA,SAAA,CAAA,GAAU,SAAA;AAVF,EAAA,OAAAA,6BAAAA;AAAA,CAAA,EAAA,4BAAA,IAAA,EAAA;ACxBL,IAAM,4BAAA,GAAN,cAEGC,mBAAA,CAAW;AAAA,EAMjB,YAAY,MAAA,EAAkD;AAC1D,IAAA,KAAA,EAAM;AAEN,IAAA,MAAM;AAAA,MACF,MAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACJ,GAAI,MAAA;AAEJ,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAClB;AAKJ;;;AChCO,IAAK,2CAAA,qBAAAC,4CAAAA,KAAL;AACH,EAAAA,6CAAA,gBAAA,CAAA,GAAiB,2BAAA;AACjB,EAAAA,6CAAA,SAAA,CAAA,GAAU,oBAAA;AACV,EAAAA,6CAAA,iBAAA,CAAA,GAAkB,4BAAA;AAHV,EAAA,OAAAA,4CAAAA;AAAA,CAAA,EAAA,2CAAA,IAAA,EAAA;ACCL,IAAM,aAAA,GAAN,cAA4BC,gBAAA,CAAkF;AAAA,EAA9G,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAEH,IAAA,IAAA,CAAA,MAAA,GAAiB,GAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2EP,gBAAgB,MAAA,EAAgD;AACtE,IAAA,KAAA,CAAM,gBAAgB,MAAM,CAAA;AAC5B,IAAA,IAAI,OAAO,MAAA,EAAQ;AACf,MAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AAAA,IACzB;AAAA,EACJ;AAAA,EAGA,MAAA,GAAiD;AAC7C,IAAA,OAAO;AAAA,MACH,GAAG,MAAM,MAAA,EAAO;AAAA,MAChB,QAAQ,IAAA,CAAK;AAAA,KACjB;AAAA,EACJ;AACJ;AC5FO,IAAM,kBAAA,GAAN,cAAiCA,gBAAAA,CAAQ;AAIhD;AAJa,kBAAA,CAEO,gBAAA,GAAmB,4BAAA;;;ACMhC,IAAM,aAAA,GAAN,cAA4BC,gBAAA,CAAU;AAAA,EAKzC,MAAM,OAAA,GAAyB;AAE3B,IAAA;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAK,MAAA,EAA8D;AACrE,IAAA,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,QAIF,MAAA,EACwC;AACxC,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAM,QAAO,GAAI,MAAA;AAEtC,IAAA,MAAM,IAAA,CAAK,UAAA;AAEX,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAEnB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,GAAA,EAAK,QAAQ,MAAM,CAAA;AAEjD,IAAA,MAAM,YAAA,GAAe,IAAIC,gBAAA,CAAQ,EAAE,MAAM,CAAA,6BAAA,EAAgC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AACxG,IAAA,MAAM,OAAA,GAAU,IAAI,4BAAA,CAA6B;AAAA,MAC7C,MAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACH,CAAA;AAED,IAAA,YAAA,CAAa,OAAA,CAAQC,kBAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AAC1C,IAAA,YAAA,CAAa,SAAS,OAAO,CAAA;AAE7B,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,CAAK,yDAAkE,YAAY,CAAA;AAEzF,MAAA,MAAM,OAAA,GAAkC;AAAA,QACpC,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG,MAAA,EAAQ;AAAA,OACf;AAEA,MAAA,MAAM,OAAA,GAAuB;AAAA,QACzB,MAAA;AAAA,QACA;AAAA,OACJ;AAEA,MAAA,IAAI,QAAQ,MAAA,KAAA,KAAA,YAA6C;AACrD,QAAA,OAAA,CAAQ,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,MACtC;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAE7C,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,QAAA,MAAM,IAAI,aAAA,CAAc;AAAA,UACpB,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,OAAO,QAAA,CAAS,UAAA;AAAA,UAChB,WAAA,EAAa,CAAA,gBAAA,EAAmB,OAAO,CAAA,oBAAA,EAAuB,SAAS,MAAM,CAAA;AAAA,SAChF,CAAA;AAAA,MACL;AAEA,MAAA,OAAA,CAAQ,SACJ,MAAA,EAAQ,MAAA,EAAQ,iBAAiB,MAAA,GAC3B,MAAM,SAAS,IAAA,EAAK,GACpB,QAAQ,MAAA,EAAQ,YAAA,KAAiB,SAC7B,MAAM,QAAA,CAAS,MAAK,GACpB,MAAM,SAAS,IAAA,EAAK;AAElC,MAAA,MAAM,IAAA,CAAK,uDAAiE,YAAY,CAAA;AAExF,MAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AAEnB,MAAA,OAAO,OAAA;AAAA,IAEX,SAAS,KAAA,EAAO;AAEZ,MAAA,IAAA,CAAK,WAAA,GAAc,KAAA;AAEnB,MAAA,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAEhB,MAAA,MAAM,IAAA,CAAK,yCAA0D,YAAY,CAAA;AAEjF,MAAA,IAAI,QAAQ,YAAA,KAAiB,KAAA;AACzB,QAAA,OAAO,OAAA;AAAA;AAEP,QAAA,MAAM,KAAA;AAAA,IACd;AAAA,EACJ;AAAA,EAEA,MAAM,IAAA,CACF,GAAA,EACA,IAAA,EACA,MAAA,EACwC;AACxC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACR;AAAA,QACI,MAAA,EAAA,MAAA;AAAA,QACA,GAAA;AAAA,QACA,IAAA,EAAM,IAAA;AAAA,QACN;AAAA;AACJ,KACJ;AAAA,EACJ;AAAA,EAEA,MAAM,GAAA,CACF,GAAA,EACA,MAAA,EACA,MAAA,EACwC;AACxC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,MACR;AAAA,QACI,MAAA,EAAA,KAAA;AAAA,QACA,GAAA;AAAA,QACA,MAAA,EAAQ;AAAA,UACJ,GAAG,MAAA;AAAA,UACH;AAAA;AACJ;AACJ,KACJ;AAAA,EACJ;AAAA,EAEA,MAAM,GAAA,CACF,GAAA,EACA,IAAA,EACA,MAAA,EACwC;AACxC,IAAA,OAAO,KAAK,OAAA,CAAc;AAAA,MACtB,MAAA,EAAA,KAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN;AAAA,KACH,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,MAAA,CACF,GAAA,EACA,MAAA,EACA,MAAA,EACwC;AACxC,IAAA,OAAO,KAAK,OAAA,CAAc;AAAA,MACtB,MAAA,EAAA,QAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA,EAAM,MAAA;AAAA,MACN;AAAA,KACH,CAAA;AAAA,EACL;AAAA,EAGU,QAAA,CAASC,KAAAA,GAAe,EAAA,EAAI,MAAA,GAA8B,EAAC,EAAW;AAE5E,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA;AACN,MAAA,MAAM,IAAI,kBAAA;AAAA,QACN,kBAAA,CAAmB,gBAAA;AAAA,QACnB;AAAA,OACJ;AAEJ,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,CAAA,EAAG,KAAK,OAAO,CAAA,EAAGA,KAAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAIA,KAAAA,GAAO,CAAA,CAAA,EAAIA,KAAI,EAAE,CAAA,CAAE,CAAA;AAEhF,IAAA,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC/B,MAAA,IAAI,OAAO,GAAG,CAAA,KAAM,UAAa,MAAA,CAAO,GAAG,MAAM,IAAA,EAAM;AACnD,QAAA,GAAA,CAAI,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MAC5C;AAAA,IACJ,CAAC,CAAA;AAED,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACxB;AACJ;;;ACjMO,IAAM,yCAAA,GAA4C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWrD,aAAA,EAAe;AAEnB;AAMO,IAAM,+CAAA,GAAkD;AAAA,EAC3D,yCAAA,CAA0C;AAC9C;ACfO,IAAM,QAAA,GAAN,cAAuBN,mBAAAA,CAAW;AAAA,EAMrC,YACI,MAAA,EAIF;AACE,IAAA,KAAA,CAAM,MAAM,CAAA;AARhB,IAAA,IAAA,CAAU,UAAqB,EAAC;AAU5B,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AACnB,IAAA,IAAA,CAAK,OAAO,MAAA,CAAO,IAAA;AACnB,IAAA,IAAA,CAAK,OAAA,GAAU,OAAO,OAAA,IAAW,IAAA;AAEjC,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA,CAAO,MAAA,IAAU,IAAA,CAAK,OAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAA,GAAoB;AACpB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EAChB;AAEJ;;;ACJO,IAAK,4BAAA,qBAAAO,6BAAAA,KAAL;AACH,EAAAA,8BAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,8BAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,8BAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,8BAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,8BAAA,OAAA,CAAA,GAAQ,OAAA;AALA,EAAA,OAAAA,6BAAAA;AAAA,CAAA,EAAA,4BAAA,IAAA,EAAA;;;AC3BL,IAAM,UAAN,MAAc;AAAA,EAajB,WAAA,CACI,QACA,MAAA,EACF;AAEE,IAAA,IAAA,CAAK,GAAA,GAAM,MAAA,YAAkB,MAAA,GAAS,MAAA,CAAO,MAAA,GAAS,MAAA;AACtD,IAAA,IAAA,CAAK,SAAS,MAAA,IAAU,KAAA;AAAA,EAE5B;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,IAAA,GAAe;AACf,IAAA,MAAM,CAAA,GAAK,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AAG9C,IAAA,OAAO,CAAA,CAAE,SAAS,GAAG,CAAA,GAAI,EAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,CAAA;AAAA,EAC9C;AAAA,EAGA,IAAI,MAAA,GAAmB;AACnB,IAAA,OAAO,IAAA,CAAK,IAAA,CACP,KAAA,CAAM,YAAY,CAAA,EACjB,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,CAAM,CAAC,CAAC,KAC5B,EAAC;AAAA,EACZ;AAAA,EAMA,cAAc,GAAA,EAAqC;AAE/C,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAEjC,IAAA,MAAM,cAAc,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACtD,IAAA,MAAM,eAAe,IAAA,CAAK,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAExD,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,WAAA,GAAc,aAAa,CAAC,CAAA;AAClC,MAAA,MAAM,UAAA,GAAa,YAAY,CAAC,CAAA;AAEhC,MAAA,IAAI,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,EAAG;AAC7B,QAAA,MAAM,SAAA,GAAY,WAAA,CAAY,KAAA,CAAM,CAAC,CAAA;AACrC,QAAA,MAAA,CAAO,SAAS,CAAA,GAAI,UAAA;AAAA,MACxB,CAAA,MAAA,IAAW,gBAAgB,UAAA,EAAY;AAEnC,QAAA,OAAO,EAAC;AAAA,MACZ;AAAA,IACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,aAAa,GAAA,EAAqC;AAC9C,IAAA,MAAM,QAAgC,EAAC;AAGvC,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACpC,IAAA,IAAI,CAAC,aAAa,OAAO,KAAA;AAGzB,IAAA,MAAM,UAAA,GAAa,WAAA,CAAY,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAG3C,IAAA,KAAA,MAAW,IAAA,IAAQ,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,EAAG;AACtC,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,CAAC,GAAA,EAAK,KAAA,GAAQ,EAAE,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AACxC,MAAA,KAAA,CAAM,kBAAA,CAAmB,GAAG,CAAC,CAAA,GAAI,mBAAmB,KAAK,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAIA,QAAA,GAAmB;AAGf,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAA,EAAK,KAAK,IAAK,CAAA,CAAA;AAAA,EAGxC;AAAA,EAEA,QAAA,GAAmB;AACf,IAAA,OAAO,IAAI,MAAA,CAAO,CAAA,CAAA,EAAI,IAAA,CAAK,MAAM,CAAA,EAAA,EAAK,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,cAAA,EAAgB,UAAU,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1F;AAAA,EAEA,mBAAA,CAAoB,cAAA,GAAgC,EAAC,EAAW;AAC5D,IAAA,OAAO,IAAI,OAAO,CAAA,CAAA,EAAI,cAAA,CAAe,SAC/B,CAAA,CAAA,EAAI,cAAA,CAAe,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA,GAC5B,IACF,CAAA,GAAA,EAAM,IAAA,CAAK,MAAM,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,OAAA,CAAQ,cAAA,EAAgB,UAAU,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9E;AACJ;;;ACvGO,IAAM,SAAA,GAAN,cAMKC,iBAAA,CAGN;AAAA,EATC,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAiBH,IAAA,IAAA,CAAA,IAAA,GAAqB,EAAC;AACtB,IAAA,IAAA,CAAA,MAAA,GAAsB,EAAC;AACvB,IAAA,IAAA,CAAA,KAAA,GAAoB,EAAC;AAQrB;AAAA;AAAA;AAAA,IAAA,IAAA,CAAA,QAAA,GAAmB,CAAA;AAAA,EAAA;AAAA,EAhBnB,WAAW,SAAA,GAAoB;AAC3B,IAAA,OAAO,UAAA;AAAA,EACX;AAAA,EAgBA,QAAQ,SAAA,EAAqD;AACzD,IAAA,IAAA,CAAK,MAAM,SAAA,CAAU,OAAA;AAErB,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAIC,cAAA,CAAM;AAAA,MACnB,OAAA,EAASJ,mBAAU,IAAA,CAAK,IAAA;AAAA,MACxB,OAAO,SAAA,CAAU,KAAA;AAAA,MACjB,MAAA,EAAS,KAAK,WAAA,CAAiC,MAAA;AAAA,MAC/C,IAAI,SAAA,CAAU;AAAA,KACjB,CAAA;AAAA,EACL;AAAA,EAEA,IAAI,SAAA,GAA8B;AAC9B,IAAA,MAAM,MAAA,GAASK,yBAAA,CAAiB,WAAA,CAAY,IAAA,CAAK,KAAA,CAAM,GAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAEvE,IAAA,OAAO,MAAA,GAAS,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,GAAI,MAAA;AAAA,EACjD;AAAA;AAAA,EAKA,IAAW,GAAA,GAAc;AACrB,IAAA,OAAO,KAAK,GAAA,CAAI,GAAA;AAAA,EACpB;AAAA;AAAA,EAGA,IAAW,MAAA,GAAyC;AAChD,IAAA,OAAQ,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAE,aAAY,IAAwC,SAAA;AAAA,EACxF;AAAA,EAEA,IAAI,OAAA,GAA+B;AAC/B,IAAA,OAAO,KAAK,GAAA,CAAI,OAAA;AAAA,EACpB;AAAA,EAGA,IAAI,KAAA,GAAiB;AACjB,IAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,KAAK,MAAM,CAAA;AAAA,EAC5C;AAAA,EAGA,IAAA,CACI,aACA,OAAA,EACqB;AACrB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,WAAA,EAAa,OAAO,CAAA;AAAA,EAC7C;AAAA,EAIA,MAAM,IAAA,GAAsB;AACxB,IAAA,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,OAAA,EAAS,OAAO,GAAA,KAAQ;AAChC,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,aAAA,CAAc,GAAG,CAAA;AAClC,MAAA,MAAM,KAAK,IAAA,CAAA,OAAA,aAAuC;AAAA,IACtD,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,aAAA,CAAc,IAAA,CAAK,GAAG,CAAA;AACzC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,GAAG,CAAA;AAAA,EAC3C;AAAA,EAGA,cAAc,GAAA,EAAqC;AAE/C,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAEjC,IAAA,MAAM,cAAc,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACtD,IAAA,MAAM,eAAe,IAAA,CAAK,GAAA,CAAI,MAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAEvD,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,MAAM,WAAA,GAAc,aAAa,CAAC,CAAA;AAClC,MAAA,MAAM,UAAA,GAAa,YAAY,CAAC,CAAA;AAEhC,MAAA,IAAI,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA,EAAG;AAC7B,QAAA,MAAM,SAAA,GAAY,WAAA,CAAY,KAAA,CAAM,CAAC,CAAA;AACrC,QAAA,MAAA,CAAO,SAAS,CAAA,GAAI,UAAA;AAAA,MACxB,CAAA,MAAA,IAAW,gBAAgB,UAAA,EAAY;AAEnC,QAAA,OAAO,EAAC;AAAA,MACZ;AAAA,IACJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEA,aAAa,GAAA,EAAqC;AAC9C,IAAA,MAAM,QAAgC,EAAC;AAGvC,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACpC,IAAA,IAAI,CAAC,aAAa,OAAO,KAAA;AAGzB,IAAA,MAAM,UAAA,GAAa,WAAA,CAAY,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAG3C,IAAA,KAAA,MAAW,IAAA,IAAQ,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,EAAG;AACtC,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,CAAC,GAAA,EAAK,KAAA,GAAQ,EAAE,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AACxC,MAAA,KAAA,CAAM,kBAAA,CAAmB,GAAG,CAAC,CAAA,GAAI,mBAAmB,KAAK,CAAA;AAAA,IAC7D;AAEA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAIA,SAAA,GAA0B;AACtB,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACpC,MAAA,IAAI,IAAA,GAAO,EAAA;AACX,MAAA,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,MAAA,EAAQ,CAAA,KAAA,KAAS,QAAQ,KAAK,CAAA;AAC1C,MAAA,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,KAAA,EAAO,MAAM;AACrB,QAAA,IAAI;AACA,UAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,QAC5B,SAAS,GAAA,EAAK;AACV,UAAA,MAAA,CAAO,GAAG,CAAA;AAAA,QACd;AAAA,MACJ,CAAC,CAAA;AACD,MAAA,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,OAAA,EAAS,MAAM,CAAA;AAAA,IAC/B,CAAC,CAAA;AAAA,EACL;AAEJ;;;ACrJO,IAAK,6BAAA,qBAAAC,8BAAAA,KAAL;AACH,EAAAA,+BAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,+BAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,+BAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,+BAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,+BAAA,OAAA,CAAA,GAAQ,OAAA;AALA,EAAA,OAAAA,8BAAAA;AAAA,CAAA,EAAA,6BAAA,IAAA,EAAA;ACUL,IAAM,UAAA,GAAN,cAEGH,iBAAAA,CAGR;AAAA,EALK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAYH;AAAA;AAAA;AAAA,IAAA,IAAA,CAAA,QAAA,GAAmB,CAAA;AAGnB,IAAA,IAAA,CAAQ,IAAA,uBAAuC,GAAA,EAAI;AAAA,EAAA;AAAA,EAInD,QAAQ,SAAA,EAAsD;AAC1D,IAAA,IAAA,CAAK,MAAM,SAAA,CAAU,QAAA;AAErB,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAIC,cAAAA,CAAM;AAAA,MACnB,OAAA,EAASJ,mBAAU,IAAA,CAAK,IAAA;AAAA,MACxB,OAAO,SAAA,CAAU,KAAA;AAAA,MACjB,MAAA,EAAS,KAAK,WAAA,CAAkC,MAAA;AAAA,MAChD,IAAI,SAAA,CAAU;AAAA,KACjB,CAAA;AAAA,EACL;AAAA,EAEA,IAAI,WAAA,GAAuB;AACvB,IAAA,OAAO,KAAK,GAAA,CAAI,WAAA;AAAA,EACpB;AAAA,EAEA,IAAI,QAAA,GAAW;AACX,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EAChB;AAAA,EAEA,IAAI,UAAA,GAAqB;AACrB,IAAA,OAAO,KAAK,GAAA,CAAI,UAAA;AAAA,EACpB;AAAA,EAEA,MAAM,IAAA,GAAsB;AACxB,IAAA,MAAM,SAAA,GAAY,QAAQ,MAAA,EAAO;AAEjC,IAAA,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,QAAA,EAAU,YAAY;AAC9B,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA;AAC5C,MAAA,MAAM,sBAAsB,WAAA,CAAY,CAAC,IAAI,GAAA,GAAO,WAAA,CAAY,CAAC,CAAA,GAAI,GAAA;AAErE,MAAA,IAAA,CAAK,QAAA,GAAW,mBAAA;AAChB,MAAA,MAAM,KAAK,IAAA,CAAA,QAAA,cAAyC;AAAA,IACxD,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,GAAA,CAAI,EAAA,CAAG,OAAA,EAAS,YAAY;AAC7B,MAAA,MAAM,KAAK,IAAA,CAAA,OAAA,aAAwC;AAAA,IACvD,CAAC,CAAA;AAAA,EAEL;AAAA,EAIO,OAAO,KAAA,EAAoD;AAC9D,IAAA,QAAQ,IAAA;AAAM,MACV,KAAK,KAAA,YAAiB,aAAA;AAClB,QAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAEb,QAAA;AAAA,MAEJ,KAAK,KAAA,YAAiBH,gBAAAA;AAClB,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,aAAA,CAAc,KAAK,CAAA;AAEpC,QAAA;AAAA,MAEJ;AACI,QAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,aAAA,CAAc,KAAK,CAAA;AAEpC,QAAA;AAAA;AAGR,IAAA,OAAO,IAAA,CAAK,OAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,CAAE,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACzD;AAAA;AAAA,EAGO,IAAA,CACH,IAAA,GAAwB,IAAA,CAAK,UAAA,EAAW,EACpC;AACJ,IAAA,MAAM,SAASG,kBAAAA,CAAU,KAAA,CAAM,IAAI,CAAA,CAAE,QAAQO,eAAQ,CAAA;AACrD,IAAA,IAAI,KAAK,WAAA,EAAa;AAClB,MAAA,MAAA,CAAO,QAAQ,4DAA4D,CAAA;AAC3E,MAAA;AAAA,IACJ;AAEA,IAAA,IAAI;AACA,MAAA,QAAQ,IAAA;AAAM,QACV,MAAK,CAAC,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA;AAC3B,UAAA,OAAO,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,QAEzB,MAAK,CAAC,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA;AAC3B,UAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,EAAgB,YAAY,CAAA;AAC/C,UAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,UAAU,CAAA;AAClC,UAAA,IAAA,CAAK,GAAA,CAAI,IAAI,IAAI,CAAA;AAEjB,UAAA;AAAA,QAEJ;AACI,UAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,UAAU,CAAA;AAClC,UAAA,IAAA,CAAK,GAAA,CAAI,IAAI,IAAI,CAAA;AAEjB,UAAA;AAAA;AACR,IACJ,SAAS,KAAA,EAAO;AACZ,MAAA,MAAA,CAAO,OAAA,CAAQ,wBAAwB,KAAK,CAAA;AAAA,IAChD;AAAA,EACJ;AAAA,EAEA,OAAA,CAAQ,OAAwB,KAAA,EAA+B;AAC3D,IAAA,IAAA,CAAK,IAAI,GAAA,EAAI;AACb,IAAA,OAAO,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,EAC9B;AAAA;AAAA,EAGO,IAAA,CACH,IAAA,GAAe,IAAA,CAAK,UAAA,EAAW,EAC3B;AACJ,IAAA,MAAM,SAASP,kBAAAA,CAAU,KAAA,CAAM,IAAI,CAAA,CAAE,QAAQO,eAAQ,CAAA;AAErD,IAAA,IAAI,KAAK,WAAA,EAAa;AAClB,MAAA,MAAA,CAAO,QAAQ,4DAA4D,CAAA;AAC3E,MAAA;AAAA,IACJ;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,cAAA,EAAgB,kBAAkB,CAAA;AACrD,IAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,UAAU,CAAA;AAClC,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EACrC;AAAA;AAAA,EAGO,OAAO,IAAA,EAAoB;AAC9B,IAAA,IAAA,CAAK,IAAI,UAAA,GAAa,IAAA;AACtB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEA,SAAA,CAAU,YAAoB,OAAA,EAA8D;AACxF,IAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,UAAA,EAAY,OAAO,CAAA;AAAA,EAC1C;AAAA,EAGA,SAAA,CAAU,KAAa,KAAA,EAAe;AAClC,IAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,KAAK,CAAA;AAAA,EACjC;AAAA,EAEA,UAAU,GAAA,EAAqD;AAC3D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,GAAG,CAAA;AAAA,EACjC;AAAA,EAGA,GAAA,CAAI,KAAa,IAAA,EAAqB;AAClC,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AAAA,EAC3B;AAAA,EAGA,UAAA,GAAgE;AAC5D,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACjE,MAAA,IAAI,KAAA,YAAiBJ,iBAAAA;AACjB,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAO;AAAA;AAGxB,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AACf,MAAA,OAAO,GAAA;AAAA,IACX,CAAA,EAAG,EAAE,CAAA;AAAA,EACT;AACJ;AC/KO,IAAM,SAAA,GAAN,cAAwBK,oBAAA,CAAY;AAAA,EAMvC,MAAM,IAAA,GAAO;AAET,IAAA,IAAI,MAAA;AAGJ,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIC,eAAqC,CAAA,EAAG;AACxD,MAAA,MAAMC,OAAAA,GAAS,IAAID,eAAA,CAAsC;AAAA,QACrD,WAAW,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,+CAA+C,CAAC,CAAA;AAAA,QAC1E,QAAA,EAAU;AAAA,UACN,aAAA,EAAe;AAAA;AACnB,OACH,CAAA;AAED,MAAA,IAAA,CAAK,KAAA,CAAM,SAASC,OAAM,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQD,eAAQ,CAAA;AAGpC,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC3B,MAAU,IAAI,QAAA,CAAS;AAAA,QACnB,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,eAAe,CAAA;AAAA,QAChC,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAA,EAAS;AAAA,OACZ,CAAA;AAAA,IACL;AAGA,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,eAAe,CAAA;AAGtC,IAAA,IAAA,CAAK,SAASE,iBAAA,CAAa,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EAExD;AAAA,EAEU,MAAA,GAAwB;AAC9B,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACpC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,MAAM;AAChC,QAAA,OAAA,EAAQ;AAAA,MACZ,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACL;AAAA,EAEU,KAAA,GAAuB;AAC7B,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACpC,MAAA,IAAA,CAAK,MAAA,CAAO,MAAM,MAAM;AACpB,QAAA,OAAA,EAAQ;AAAA,MACZ,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAA,GAAQ;AACV,IAAA,MAAM,KAAK,WAAA,EAAY;AAEvB,IAAA,MAAM,KAAK,MAAA,EAAO;AAElB,IAAA,MAAM,KAAK,UAAA,EAAW;AAAA,EAC1B;AAAA,EAIA,MAAM,WAAA,GAAc;AAAA,EAAE;AAAA,EAGtB,MAAM,UAAA,GAAa;AAAA,EAAE;AAAA;AAAA;AAAA;AAAA,EAQrB,MAAM,IAAA,GAAO;AACT,IAAA,MAAM,KAAK,IAAA,CAAA,YAAA,kBAA6C;AAExD,IAAA,MAAM,IAAA,CAAK,OAAO,KAAA,EAAM;AAExB,IAAA,MAAM,KAAK,IAAA,CAAA,WAAA,iBAA4C;AAAA,EAC3D;AAAA,EAMA,MAAM,cAAc,KAAA,EAAgB;AAAA,EAAE;AAAA,EAMtC,MAAM,aAAa,KAAA,EAAgB;AAAA,EAAE;AAAA,EAMrC,MAAM,SAAA,CACF,OAAA,EACA,QAAA,EACF;AACE,IAAA,MAAM,KAAA,GAAQ,IAAIZ,gBAAAA,CAAQ;AAAA,MACtB,IAAA,EAAM,CAAA,kBAAA,EAAqB,IAAA,CAAK,GAAA,EAAK,CAAA;AAAA,KACxC,CAAA;AAGD,IAAA,MAAM,EAAE,KAAK,GAAA,EAAI,GAAI,MAAM,IAAA,CAAK,gBAAA,CAAiB,SAAS,QAAQ,CAAA;AAElE,IAAA,IAAI;AACA,MAAA,KAAA,CAAM,SAAS,GAAG,CAAA;AAClB,MAAA,KAAA,CAAM,SAAS,GAAG,CAAA;AAElB,MAAA,KAAA,CAAM,OAAA,CAAQ,KAAK,KAAK,CAAA;AAExB,MAAA,MAAM,IAAA,CAAK,cAAc,KAAK,CAAA;AAC9B,MAAA,MAAM,IAAA,CAAK,kCAA8C,KAAK,CAAA;AAC9D,MAAA,MAAM,IAAA,CAAK,aAAa,KAAK,CAAA;AAE7B,MAAA,MAAM,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,IAE/B,SAAS,KAAA,EAAO;AAEZ,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQQ,eAAQ,CAAA;AAE1C,MAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AAElB,MAAA,OAAO,GAAA,CAAI,OAAO,KAAK,CAAA;AAAA,IAC3B;AAAA,EACJ;AAAA,EAIA,MAAgB,gBAAA,CACZ,OAAA,EACA,QAAA,EAC4C;AAE5C,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,IAAU,CAAC,OAAA,CAAQ,GAAA;AAC5B,MAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAEtD,IAAA,MAAM,KAAK,IAAA,CAAK,iBAAA,CAAkB,OAAA,CAAQ,MAAA,EAAQ,QAAQ,GAAG,CAAA;AAE7D,IAAA,MAAM,GAAA,GAAM,IAAI,SAAA,CAAU,EAAE,EAAA,EAAI,SAAS,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AACjE,IAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,EAAE,EAAA,EAAI,UAAU,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AAEnE,IAAA,MAAM,IAAI,IAAA,EAAK;AACf,IAAA,MAAM,IAAI,IAAA,EAAK;AAEf,IAAA,OAAO,EAAE,KAAK,GAAA,EAAI;AAAA,EACtB;AAAA,EAEU,iBAAA,CACN,QACA,GAAA,EACM;AAEN,IAAA,MAAM,IAAA,GAAOK,uBAAA,CAAO,UAAA,CAAW,QAAQ,CAAA;AACvC,IAAA,MAAM,MAAA,GAASP,0BAAiB,cAAA,EAAe;AAC/C,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,EAAS;AAE3C,IAAA,IAAA,CAAK,MAAA,CAAO,GAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAA;AACvD,IAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,EAC1C;AAAA,EAGA,MAAM,UAAA,GAAa;AAAA,EAAE;AAAA,EAGrB,MAAM,SAAA,GAAY;AAAA,EAAE;AACxB;AA7KU,eAAA,CAAA;AAAA,EADLQ,mBAAU,IAAA;AAAK,CAAA,EALP,SAAA,CAMH,SAAA,EAAA,MAAA,CAAA;AAwDA,eAAA,CAAA;AAAA,EAJLA,mBAAU,KAAA;AAAM,CAAA,EA1DR,SAAA,CA8DH,SAAA,EAAA,OAAA,CAAA;AAUA,eAAA,CAAA;AAAA,EADLC,kBAAA,CAAU,MAAA,CAAO,EAAE,MAAA,EAAQ,MAAM;AAAA,CAAA,EAvEzB,SAAA,CAwEH,SAAA,EAAA,aAAA,CAAA;AAGA,eAAA,CAAA;AAAA,EADLA,kBAAA,CAAU,MAAA,CAAO,EAAE,MAAA,EAAQ,MAAM;AAAA,CAAA,EA1EzB,SAAA,CA2EH,SAAA,EAAA,YAAA,CAAA;AAQA,eAAA,CAAA;AAAA,EAJLD,mBAAU,IAAA;AAAK,CAAA,EA/EP,SAAA,CAmFH,SAAA,EAAA,MAAA,CAAA;AAYA,eAAA,CAAA;AAAA,EAJLC,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,eAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACX;AAAA,CAAA,EA9FQ,SAAA,CA+FH,SAAA,EAAA,eAAA,CAAA;AAMA,eAAA,CAAA;AAAA,EAJLA,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,eAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACX;AAAA,CAAA,EApGQ,SAAA,CAqGH,SAAA,EAAA,cAAA,CAAA;AAMA,eAAA,CAAA;AAAA,EAJLA,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,WAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACX;AAAA,CAAA,EA1GQ,SAAA,CA2GH,SAAA,EAAA,WAAA,CAAA;AAoEA,eAAA,CAAA;AAAA,EADLA,kBAAA,CAAU,MAAA,CAAO,EAAE,MAAA,EAAQ,MAAM;AAAA,CAAA,EA9KzB,SAAA,CA+KH,SAAA,EAAA,YAAA,CAAA;AAGA,eAAA,CAAA;AAAA,EADLA,kBAAA,CAAU,MAAA,CAAO,EAAE,MAAA,EAAQ,MAAM;AAAA,CAAA,EAjLzB,SAAA,CAkLH,SAAA,EAAA,WAAA,CAAA;;;AClMH,IAAM,qBAAA,GAAsE;AAAA,EAC/E,IAAA,EAAM,GAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,IAAA,EAAM,EAAA;AAAA,EACN,MAAA,EAAQ,KAAA;AAAA,EACR,SAAS,EAAC;AAAA,EACV,QAAA,EAAU;AACd,CAAA;;;ACFO,IAAM,aAAA,GAAN,cAA4BnB,mBAAAA,CAAW;AAAA,EAI1C,WAAA,CAII,OAAA,GAAkD,EAAC,EACrD;AACE,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAACM,KAAAA,EAAM,MAAM,CAAA,KAAM;AAE5D,MAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,OAAO,WAAW,QAAA,GAAW,MAAA,GAAS,MAAA,CAAO,QAAA,IAAY,EAAE,CAAA;AAErF,MAAA,MAAM,OACF,SAAA,CAAU,IAAA,KACT,SAAA,CAAU,QAAA,KAAa,WAAW,KAAA,GAAQ,IAAA,CAAA;AAG/C,MAAA,MAAM,QAAA,GAAW;AAAA,QACb,GAAG,qBAAA;AAAA,QACH,GAAI,OAAO,MAAA,KAAW,QAAA,GAAW;AAAA,UAC7B,IAAA,EAAAA,KAAAA;AAAA,UACA,IAAA,EAAM,SAAS,IAAI,CAAA;AAAA,UACnB,UAAU,SAAA,CAAU,QAAA;AAAA,UACpB,UAAU,SAAA,CAAU;AAAA,SACxB,GAAI;AAAA,OACR;AAEA,MAAA,OAAO;AAAA,QACH,OAAO,IAAI,OAAA,CAAQ,QAAA,CAAS,IAAA,EAAM,SAAS,MAAM,CAAA;AAAA,QACjD,UAAU,QAAA,CAAS,QAAA;AAAA,QACnB,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,SAAS,QAAA,CAAS,OAAA;AAAA,QAClB,UAAU,QAAA,CAAS;AAAA,OACvB;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,OAAA,GAA+C;AAC/C,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAIA,KAAAA,EAAuB;AACvB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,MAAM,QAAA,EAAS,CAAE,IAAA,CAAKA,KAAI,CAAC,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAOA,KAAAA,EAAwD;AAG3D,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,MAAM,QAAA,EAAS,CAAE,IAAA,CAAKA,KAAI,CAAC,CAAA;AAAA,EACxE;AACJ;ACzEO,IAAM,cAAA,GAAN,cAA6BN,mBAAAA,CAAW;AAAA,EAI3C,WAAA,CAII,WAAA,GAAwB,EAAC,EAC3B;AACE,IAAA,KAAA,EAAM;AAEN,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAIM,KAAAA,EAA8B;AAE9B,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,CAAA,GAAA,KAAO;AACvC,MAAA,OAAO,IAAI,MAAA,CAAO,CAAA,EAAA,EAAM,GAAA,CAAI,WAAW,GAAG,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAG,CAAA,IAAA,CAAM,CAAA,CAAE,KAAKA,KAAI,CAAA;AAAA,IACrF,CAAC,CAAA;AACD,IAAA,OAAO,CAAC,CAAC,KAAA,IAAS,KAAA;AAAA,EACtB;AACJ;AC/BO,IAAM,iBAAA,GAAN,cAA+DN,mBAAAA,CAAW;AAAA,EAI7E,YACc,MAAA,GAAiE,EAAC,EAClE,QAAA,GAA0D,EAAC,EACvE;AACE,IAAA,KAAA,EAAM;AAHI,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAGV,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA;AAAA,EACnD;AAAA,EAGA,IAAI,KAAA,GAAQ;AACR,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA,EAGA,GAAA,CAAI,QAAA,EAAgC,YAAA,GAAuB,EAAA,EAAI;AAC3D,IAAA,OAAO,KAAK,WAAA,CAAY,QAAQ,KAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,IAAK,YAAA;AAAA,EACpE;AAAA,EAEU,gBAAA,CAAiB,KAAA,GAAgE,EAAC,EAAyC;AACjI,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,MAAM,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,KAAK,IAAA,KAAS;AAC1C,QAAA,MAAM,CAAC,GAAA,EAAK,GAAG,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AACjC,QAAA,GAAA,CAAI,mBAAmB,GAAG,CAAC,CAAA,GAAI,kBAAA,CAAmB,OAAO,EAAE,CAAA;AAC3D,QAAA,OAAO,GAAA;AAAA,MACX,CAAA,EAAG,EAAE,CAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;AChCO,IAAM,eAAA,GAAN,cAA8BA,mBAAAA,CAAW;AAAA,EAgB5C,WAAA,CACI,QACA,MAAA,EACF;AACE,IAAA,KAAA,EAAM;AAjBV,IAAA,IAAA,CAAQ,SAAA,uBAA2D,GAAA,EAAI;AAmBnE,IAAA,IAAA,CAAK,aAAa,MAAM,CAAA;AACxB,IAAA,IAAA,CAAK,aAAa,MAAM,CAAA;AAAA,EAC5B;AAAA,EAGU,YAAA,CACN,QAAA,GAAoG,EAAC,EACvG;AACE,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACzB,MAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,MAAA,KAAW;AACzB,QAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAA;AAAA,MAC5C,CAAC,CAAA;AAAA,IACL,CAAA,MAAO;AACH,MAAA,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACnC,QAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,GAAA,EAAK,QAAA,CAAS,GAAG,CAAC,CAAA;AAAA,MACzC,CAAC,CAAA;AAAA,IACL;AAAA,EACJ;AAAA,EAUA,GAAA,CACI,QACA,MAAA,EACI;AACJ,IAAA,QAAQ,IAAA;AAAM,MACV,MAAK,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,CAAC,MAAA;AACjC,QAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAA,EAAQ,MAAM,CAAA;AAEjC,QAAA;AAAA,MAEJ,KAAK,OAAO,MAAA,KAAW,QAAA;AACnB,QAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAA;AAExC,QAAA;AAAA;AACR,EACJ;AAAA,EAmBA,IACI,MAAA,EACO;AACP,IAAA,IAAI,IAAA;AAEJ,IAAA,QAAQ,IAAA;AAAM,MACV,KAAK,MAAA,YAAkBS,cAAAA;AACnB,QAAA,IAAA,GAAO,MAAA,CAAO,MAAA;AAEd,QAAA;AAAA,MAEJ,MAAK,EAAE,MAAA,YAAkBA,cAAAA,CAAAA,IAAUA,cAAAA,CAAM,QAAQ,MAAM,CAAA;AACnD,QAAA,IAAA,GAAO,IAAIA,cAAAA,CAAM,MAAM,CAAA,CAAE,MAAA;AAEzB,QAAA;AAAA,MAEJ;AACI,QAAA,IAAA,GAAO,MAAA;AAEP,QAAA;AAAA;AAGR,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAAA,EAClC;AAAA,EAiBA,QACI,MAAA,EAC6C;AAE7C,IAAA,IAAI,IAAA;AAEJ,IAAA,QAAQ,IAAA;AAAM,MACV,KAAK,MAAA,YAAkBA,cAAAA;AACnB,QAAA,IAAA,GAAO,MAAA,CAAO,MAAA;AAEd,QAAA;AAAA,MAEJ,MAAK,OAAO,MAAA,KAAW,QAAA,IAAYA,cAAAA,CAAM,QAAQ,MAAM,CAAA;AAEnD,QAAA,IAAA,GAAO,IAAIA,cAAAA,CAAM,MAAM,CAAA,CAAE,MAAA;AAEzB,QAAA;AAAA,MAEJ;AACI,QAAA,IAAA,GAAO,MAAA;AAEP,QAAA;AAAA;AAGR,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAAA,EAClC;AAAA,EAIA,cACI,IAAA,EAC6C;AAC7C,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAAA,EAClC;AAEJ;ACjJO,IAAM,YAAA,GAAN,cAEGD,iBAAAA,CAGR;AAAA,EALK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AAYH,IAAA,IAAA,CAAU,SAA4B,EAAC;AACvC,IAAA,IAAA,CAAU,WAAA,GAAsD;AAAA,MAC5D,KAAA,EAAO,CAAA;AAAA,MACP,IAAA,EAAM,CAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACd;AAAA,EAAA;AAAA,EAVA,WAAW,KAAA,GAAgB;AACvB,IAAA,OAAO,UAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAcA,IAAI,iBAAA,GAAyF;AACzF,IAAA,OAAO,IAAA,CAAK,kBAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,KAAA,GAA2B;AAC3B,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAA,GAAqD;AACrD,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,QAAQ,SAAA,EAA0D;AAC9D,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAIC,cAAAA,CAAM;AAAA,MACnB,OAAA,EAASJ,mBAAU,IAAA,CAAK,IAAA;AAAA,MACxB,KAAA,EAAO,SAAA;AAAA,MACP,QAAQ,QAAA,IAAY,SAAA,CAAU,OAAO,CAAA,CAAA,EAAI,SAAA,CAAU,IAAI,CAAA,CAAA,GAAK,EAAA,CAAA;AAAA,MAC5D,qBAAK,IAAI,IAAA,EAAK,EAAG,OAAA,GAAU,QAAA;AAAS,KACvC,CAAA;AAED,IAAA,IAAA,CAAK,qBAAqB,SAAA,CAAU,WAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,QAAA,CACI,OACA,UAAA,EACF;AACE,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,KAAQ;AAC5B,MAAA,IAAI,gBAAgBG,iBAAAA,EAAU;AAC1B,QAAA,OAAO,IAAA;AAAA,MACX,CAAA,MAAO;AACH,QAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,kBAAA,CAAmB,IAAI,CAAA;AAC/C,QAAA,OAAO,MAAA;AAAA,MACX;AAAA,IACJ,CAAC,CAAA;AAED,IAAA,IAAI,UAAA,EAAY;AACZ,MAAA,IAAA,CAAK,WAAA,GAAc;AAAA,QACf,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,MAAM,UAAA,CAAW,IAAA;AAAA,QACjB,UAAU,UAAA,CAAW;AAAA,OACzB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAA,GAA6D;AACzD,IAAA,OAAO;AAAA,MACH,GAAG,MAAM,MAAA,EAAO;AAAA,MAChB,OAAO,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,QAAQ,CAAA;AAAA,MACtC,YAAY,IAAA,CAAK;AAAA,KACrB;AAAA,EACJ;AACJ;AC9GO,IAAM,cAAA,GAAN,cAA6BI,eAAAA,CAAS;AAAA,EASzC,MAAM,YAAA,CACmB,OAAA,EACC,QAAA,EACxB;AAEE,IAAA,IAAA,CAAK,KAAA,CAAM;AAAA,MACP,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,KAAK,OAAA,CAAQ,GAAA;AAAA,MACb,QAAQ,QAAA,CAAS,UAAA;AAAA,MACjB,cAAc,QAAA,CAAS;AAAA,KAC1B,CAAA;AAAA,EACL;AAAA,EAMA,MAAM,eACmB,OAAA,EACvB;AAAA,EACF;AAAA,EAOA,SACyB,SAAA,EACjB;AACJ,IAAA,IAAA,CAAK,WAAA,CAAY;AAAA,MACb,MAAM,SAAA,CAAU,IAAA;AAAA,MAChB,GAAA,EAAK;AAAA,QACD,MAAM,SAAA,CAAU;AAAA;AACpB,KACH,CAAA;AAAA,EACL;AAAA,EASA,QACwB,MAAA,EACtB;AACE,IAAA,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,CAAA,OAAA,EAAU,MAAA,CAAO,IAAI,CAAA,QAAA,CAAU,CAAA;AAAA,EACnD;AAAA,EAKA,OAAA,GAAU;AAAA,EAEV;AAAA,EAIA,OAAO,MAAA,EAAwB;AAC3B,IAAA,MAAM,IAAA,GAAO,KAAK,OAAA,EAAQ;AAE1B,IAAA,OAAA,CAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,KAAA,CAAM,IAAI,MAAM,IAAI,CAAA;AAAA,EACvD,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA;AAAA,EAChC,MAAA,CAAO,GAAA,CAAI,CAAA,KAAA,KAAS,CAAA,EAAG,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA,GAAA,EAAM,KAAA,CAAM,OAAO,WAAA,EAAa,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAC/I;AAAA,EACV,IAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA,uCAAA,CAAyC,CAAA;AAAA,EAEvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAA,EAAgD;AAElD,IAAA,QAAQ,MAAM,MAAA;AAAQ,MAClB,KAAK,GAAA;AACD,QAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,QAAA;AAAA,MACJ,KAAK,GAAA;AACD,QAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,QAAA;AAAA,MACJ,KAAK,GAAA;AACD,QAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,QAAA;AAAA,MACJ,KAAK,GAAA;AACD,QAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AACjB,QAAA;AAAA,MACJ;AACI,QAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AACrB,QAAA;AAAA;AACR,EACJ;AAAA,EAGA,OAAO,KAAA,EAAgD;AACnD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,uBAAuB,CAAA;AACvC,MAAA;AACJ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,OAAO,KAAA,CAAM,MAAA,CAAO,WAAA,EAAa,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,MAAM,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,YAAY,CAAA,SAAA,CAAW,CAAA;AAAA,EACxM;AAAA,EAEA,OAAO,KAAA,EAAgD;AACnD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,uBAAuB,CAAA;AACvC,MAAA;AAEJ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,OAAO,KAAA,CAAM,MAAA,CAAO,WAAA,EAAa,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,MAAM,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,YAAY,CAAA,SAAA,CAAW,CAAA;AAAA,EACxM;AAAA,EAEA,OAAO,KAAA,EAAgD;AACnD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,uBAAuB,CAAA;AACvC,MAAA;AAEJ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,OAAO,KAAA,CAAM,MAAA,CAAO,WAAA,EAAa,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,MAAM,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,YAAY,CAAA,SAAA,CAAW,CAAA;AAAA,EACxM;AAAA,EAEA,OAAO,KAAA,EAAgD;AACnD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,uBAAuB,CAAA;AACvC,MAAA;AACJ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,OAAO,KAAA,CAAM,MAAA,CAAO,WAAA,EAAa,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,MAAM,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,YAAY,CAAA,SAAA,CAAW,CAAA;AAAA,EACxM;AAAA,EAEA,WAAW,KAAA,EAAgD;AACvD,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,2BAA2B,CAAA;AAC3C,MAAA;AACJ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAA,EAAK,KAAA,CAAM,MAAM,OAAO,KAAA,CAAM,MAAA,CAAO,WAAA,EAAa,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,CAAA,GAAI,MAAM,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,YAAY,CAAA,SAAA,CAAW,CAAA;AAAA,EACxM;AAAA,EAGA,YACI,MAAA,EAQF;AACE,IAAA,MAAM,YAAY,OAAA,CAAQ,GAAA;AAE1B,IAAA,OAAA,CAAQ,GAAA,CAAI,YAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,SAAS,CAAA;AAAA,EACjE,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA;AAAA,EAChC,IAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,GAAA,CAAI,IAAI,KAAK,MAAA,CAAO,GAAA,CAAI,WAAW,OAAO,CAAA,oBAAA,EAAuB,OAAO,IAAI;AAAA,EACxH,IAAI,MAAA,CAAO,IAAA,CAAK,cAAc,CAAC,CAAC,iBAAiB,SAAS;AAAA,EAC1D,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA;AAAA,EAChC,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA;AAAA,EAChC,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA;AAAA,EAChC,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA;AAAA,OAAA,CAC1B,CAAA;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MACI,MAAA,EAIF;AACE,IAAA,OAAA,CAAQ,GAAA,CAAI,YAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAA,EAAM,IAAA,CAAK,SAAS,CAAA;AAAA,EACjE,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,QAAQ,CAAA,IAAA,EAAO,MAAA,CAAO,WAAW;AAAA,EAC7E,IAAI,MAAA,CAAO,IAAA,CAAK,WAAA,GAAc,CAAC,CAAC,CAAA,uCAAA,CAAyC,CAAA;AAAA,EACvE;AAEJ;AA3KU,eAAA,CAAA;AAAA,EAJLO,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,QAAA;AAAA,IACA,KAAA,EAAO,CAAC,UAAU;AAAA,GACrB,CAAA;AAAA,EAEI,qCAAS,SAAS,CAAA,CAAA;AAAA,EAClB,qCAAS,UAAU,CAAA;AAAA,CAAA,EAXf,cAAA,CASH,SAAA,EAAA,cAAA,CAAA;AAiBA,eAAA,CAAA;AAAA,EAHLA,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,OAAA;AAAA,GACH,CAAA;AAAA,EAEI,qCAAS,SAAS,CAAA;AAAA,CAAA,EA3Bd,cAAA,CA0BH,SAAA,EAAA,gBAAA,CAAA;AAUN,eAAA,CAAA;AAAA,EAJCA,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,YAAA;AAAA,IACA,KAAA,EAAO,CAAC,SAAS;AAAA,GACpB,CAAA;AAAA,EAEI,qCAAS,SAAS,CAAA;AAAA,CAAA,EArCd,cAAA,CAoCT,SAAA,EAAA,UAAA,CAAA;AAkBA,eAAA,CAAA;AAAA,EAJCA,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,WAAA;AAAA,IACA,KAAA,EAAO,CAAC,SAAS;AAAA,GACpB,CAAA;AAAA,EAEI,qCAAS,QAAQ,CAAA;AAAA,CAAA,EAvDb,cAAA,CAsDT,SAAA,EAAA,SAAA,CAAA;;;AC/DG,IAAK,4BAAA,qBAAAC,6BAAAA,KAAL;AACH,EAAAA,8BAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,8BAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,8BAAA,KAAA,CAAA,GAAM,KAAA;AACN,EAAAA,8BAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,8BAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,8BAAA,SAAA,CAAA,GAAU,SAAA;AANF,EAAA,OAAAA,6BAAAA;AAAA,CAAA,EAAA,4BAAA,IAAA,EAAA;AAsBL,IAAK,uCAAA,qBAAAC,wCAAAA,KAAL;AACH,EAAAA,yCAAA,QAAA,CAAA,GAAS,QAAA;AADD,EAAA,OAAAA,wCAAAA;AAAA,CAAA,EAAA,uCAAA,IAAA,EAAA;ACKL,IAAM,SAAA,GAAN,MAAM,SAAA,SAAiBC,oBAAA,CAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYtC,OAAO,KAAKhB,KAAAA,EAA4G;AAGpH,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACpB,MAAA,EAAA,MAAA;AAAA,MACA,MAAM,OAAOA,KAAAA,KAAS,YAAY,MAAA,IAAUA,KAAAA,GAAOA,MAAK,IAAA,GAAOA,KAAAA;AAAA,MAC/D,OAAA,EAAS,OAAOA,KAAAA,KAAS,QAAA,IAAY,aAAaA,KAAAA,IAAQA,KAAAA,CAAK,OAAA,GAAUA,KAAAA,CAAK,OAAA,GAAU,IAAA;AAAA,MACxF,MAAA,EAAQ,OAAOA,KAAAA,KAAS,QAAA,IAAY,YAAYA,KAAAA,IAAQA,KAAAA,CAAK,MAAA,GAASA,KAAAA,CAAK,MAAA,GAAS;AAAA,KACvF,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IAAIA,KAAAA,EAA4G;AACnH,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACpB,MAAA,EAAA,KAAA;AAAA,MACA,MAAM,OAAOA,KAAAA,KAAS,YAAY,MAAA,IAAUA,KAAAA,GAAOA,MAAK,IAAA,GAAOA,KAAAA;AAAA,MAC/D,OAAA,EAAS,OAAOA,KAAAA,KAAS,QAAA,IAAY,aAAaA,KAAAA,IAAQA,KAAAA,CAAK,OAAA,GAAUA,KAAAA,CAAK,OAAA,GAAU,IAAA;AAAA,MACxF,MAAA,EAAQ,OAAOA,KAAAA,KAAS,QAAA,IAAY,YAAYA,KAAAA,IAAQA,KAAAA,CAAK,MAAA,GAASA,KAAAA,CAAK,MAAA,GAAS;AAAA,KACvF,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,IAAIA,KAAAA,EAA4G;AACnH,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACpB,MAAA,EAAA,KAAA;AAAA,MACA,MAAM,OAAOA,KAAAA,KAAS,YAAY,MAAA,IAAUA,KAAAA,GAAOA,MAAK,IAAA,GAAOA,KAAAA;AAAA,MAC/D,OAAA,EAAS,OAAOA,KAAAA,KAAS,QAAA,IAAY,aAAaA,KAAAA,IAAQA,KAAAA,CAAK,OAAA,GAAUA,KAAAA,CAAK,OAAA,GAAU,IAAA;AAAA,MACxF,MAAA,EAAQ,OAAOA,KAAAA,KAAS,QAAA,IAAY,YAAYA,KAAAA,IAAQA,KAAAA,CAAK,MAAA,GAASA,KAAAA,CAAK,MAAA,GAAS;AAAA,KACvF,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,OAAOA,KAAAA,EAA4G;AACtH,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACpB,MAAA,EAAA,QAAA;AAAA,MACA,MAAM,OAAOA,KAAAA,KAAS,YAAY,MAAA,IAAUA,KAAAA,GAAOA,MAAK,IAAA,GAAOA,KAAAA;AAAA,MAC/D,OAAA,EAAS,OAAOA,KAAAA,KAAS,QAAA,IAAY,aAAaA,KAAAA,IAAQA,KAAAA,CAAK,OAAA,GAAUA,KAAAA,CAAK,OAAA,GAAU,IAAA;AAAA,MACxF,MAAA,EAAQ,OAAOA,KAAAA,KAAS,QAAA,IAAY,YAAYA,KAAAA,IAAQA,KAAAA,CAAK,MAAA,GAASA,KAAAA,CAAK,MAAA,GAAS;AAAA,KACvF,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAMA,KAAAA,EAA4G;AACrH,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACpB,MAAA,EAAA,OAAA;AAAA,MACA,MAAM,OAAOA,KAAAA,KAAS,YAAY,MAAA,IAAUA,KAAAA,GAAOA,MAAK,IAAA,GAAOA,KAAAA;AAAA,MAC/D,OAAA,EAAS,OAAOA,KAAAA,KAAS,QAAA,IAAY,aAAaA,KAAAA,IAAQA,KAAAA,CAAK,OAAA,GAAUA,KAAAA,CAAK,OAAA,GAAU,IAAA;AAAA,MACxF,MAAA,EAAQ,OAAOA,KAAAA,KAAS,QAAA,IAAY,YAAYA,KAAAA,IAAQA,KAAAA,CAAK,MAAA,GAASA,KAAAA,CAAK,MAAA,GAAS;AAAA,KACvF,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAQA,KAAAA,EAA4G;AACvH,IAAA,OAAO,KAAK,WAAA,CAAY;AAAA,MACpB,MAAA,EAAA,SAAA;AAAA,MACA,MAAM,OAAOA,KAAAA,KAAS,YAAY,MAAA,IAAUA,KAAAA,GAAOA,MAAK,IAAA,GAAOA,KAAAA;AAAA,MAC/D,OAAA,EAAS,OAAOA,KAAAA,KAAS,QAAA,IAAY,aAAaA,KAAAA,IAAQA,KAAAA,CAAK,OAAA,GAAUA,KAAAA,CAAK,OAAA,GAAU,IAAA;AAAA,MACxF,MAAA,EAAQ,OAAOA,KAAAA,KAAS,QAAA,IAAY,YAAYA,KAAAA,IAAQA,KAAAA,CAAK,MAAA,GAASA,KAAAA,CAAK,MAAA,GAAS;AAAA,KACvF,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAe,YACX,MAAA,EACF;AACE,IAAA,MAAM,KAAA,GAAQ,OAAO,MAAA,CAAO,IAAA,KAAS,YAAY,MAAA,CAAO,IAAA,YAAgB,SAClE,IAAI,OAAA;AAAA,MACF,CAAA,CAAA,EAAI,OAAO,MAAM,CAAA,CAAA,EAAI,OAAO,OAAO,CAAA,EAAG,MAAA,CAAO,IAAA,YAAgB,MAAA,GAAS,MAAA,CAAO,KAAK,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,OAAO,IAAA,GAAO,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA,CAAA;AAAA,MACxJ,MAAA,CAAO;AAAA,QACT,MAAA,CAAO,IAAA;AAEb,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,KAAK,CAAA;AAEtB,IAAA,OAAO,SAAS,SAAA,CACZ,MAAA,EACA,WAAA,EACA,UAAA,EACF;AAEE,MAAA,MAAM,IAAA,GAA8CD,kBAAAA,CAAU,IAAA,CAAoC,MAAa,CAAA;AAE/G,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAA,QAAA,cAAkD,wBAAS,GAAA,EAAyC;AAExH,MAAA,MAAM,YAAY,KAAA,CAAM,mBAAA,CAAoB,CAAC,UAAA,EAAY,WAAW,CAAC,CAAA;AAErE,MAAA,MAAA,CAAO,GAAA,CAAI,UAAU,MAAA,EAAQ;AAAA,QACzB,SAAA,EAAW,MAAA;AAAA,QACX,OAAA,EAAS,WAAA;AAAA,QACT;AAAA,OACH,CAAA;AAED,MAAA,IAAA,CAAK,2BAAoD,MAAM,CAAA;AAE/D,MAAAkB,yBAAA,CAAiB;AAAA,QACb,MAAM,SAAA,CAAU,MAAA;AAAA,QAChB,MAAA,EAAQ;AAAA,OACX,CAAA,CAAE,MAAA,EAAQ,WAAA,EAAa,UAAU,CAAA;AAElC,MAAA,OAAOC,yBAAA,CAAiB,SAAS,CAAA,CAAE,MAAA,EAAQ,aAAa,UAAU,CAAA;AAAA,IACtE,CAAA;AAAA,EACJ;AAAA,EAQA,MAAgB,KACc,MAAA,EACb;AACb,IAAA,MAAA,CAAO,MAAA,CAAO,UAAS,MAAM,CAAA;AAAA,EACjC;AAAA,EAcA,MAAM,aAAA,CACmB,OAAA,EACC,QAAA,EACH,KAAA,EACC,QACA,MAAA,EACtB;AAEE,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AAEtB,IAAA,IAAI,MAAA,CAAO,GAAA,CAAI,uBAAuB,CAAA,KAAM,aAAA,EAAe;AACvD,MAAA,MAAA,CAAO,IAAI,CAAA,kBAAA,EAAqB,OAAA,CAAQ,MAAM,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAC/D,MAAA,MAAA,CAAO,GAAA,CAAI,CAAA,kBAAA,EAAqB,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAAA,IACtD;AAYA,IAAA,MAAM,OAAA,GAAU,IAAIL,kBAAAA,CAAU;AAAA,MAC1B,IAAA,EAAM,MAAM,QAAA,EAAS;AAAA,MACrB,SAAA,EAAW;AAAA,KACd,CAAA;AAGD,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AACzB,MAAA,IAAIM,qBAAA,CAAa,sBAAA,CAAuB,KAAA,CAAM,UAAA,CAAW,SAAS,CAAA,EAAG;AAEjE,QAAA,MAAM,IAAA,GAA8CpB,kBAAAA,CAAU,IAAA,CAAoC,KAAA,CAAM,WAAW,SAAS,CAAA;AAE5H,QAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAA,QAAA,cAAkD;AAEtE,QAAA,IAAI,MAAA,EAAQ;AACR,UAAA,MAAM,eAAe,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,UAAA,CAAW,QAAQ,EAAE,CAAA;AAE3D,UAAA,IAAI,YAAA,EAAc;AACd,YAAA,OAAA,CAAQ,MAAA,GAAS;AAAA,cACb,GAAG,OAAA,CAAQ,MAAA;AAAA,cACX,GAAG,YAAA,CAAa,KAAA,CAAM,aAAA,CAAc,QAAQ,GAAG;AAAA,aACnD;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAEA,MAAA,MAAM,UAAA,GAAa,IAAID,gBAAAA,CAAQ;AAAA,QAC3B,IAAA,EAAM,CAAA,SAAA,EAAYM,yBAAAA,CAAiB,cAAA,EAAgB,CAAA,CAAA;AAAA,QACnD,QAAA,EAAU,CAAC,OAAO;AAAA,OACtB,EAAG;AAAA,QACC,MAAA,EAAQ;AAAA,OACX,CAAA;AAGD,MAAA,MAAM,KAAA,CAAM,QAAQ,UAAU,CAAA;AAAA,IAClC;AAGA,IAAA,OAAA,CAAQ,GAAA,CAAI,wCAAA,EAA0C,OAAA,CAAQ,MAAA,EAAQ,QAAQ,GAAG,CAAA;AAAA,EACrF;AACJ,CAAA;AA5Oa,SAAA,CAmGF,SAAyB,EAAC;AAuDjB,eAAA,CAAA;AAAA,EADfQ,mBAAU,IAAA,EAAK;AAAA,EAEX,eAAA,CAAA,CAAA,EAAAQ,kBAAS,cAAc,CAAA;AAAA,CAAA,EA3JnB,SAAA,CA0JO,SAAA,EAAA,MAAA,CAAA;AAkBV,eAAA,CAAA;AAAA,EAJLP,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,WAAA;AAAA,IACA,KAAA,EAAO,CAAC,SAAS;AAAA,GACpB,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAO,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA,CAAA;AAAA,EAChB,eAAA,CAAA,CAAA,EAAAsB,kBAASZ,eAAQ,CAAA,CAAA;AAAA,EACjB,eAAA,CAAA,CAAA,EAAAY,kBAASd,eAAQ,CAAA;AAAA,CAAA,EAjLb,SAAA,CA4KH,SAAA,EAAA,eAAA,CAAA;AA5KH,IAAM,QAAA,GAAN;ACnBA,IAAM,kBAAA,GAAN,cAAiCU,oBAAAA,CAAY;AAAA,EAUhD,MAAM,IAAA,CACmB,OAAA,EACC,QAAA,EACK,OAAA,EACR,OACC,MAAA,EACtB;AAEE,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,aAAA,CAAc,OAAA,CAAQ,OAAO,IAAI,CAAA;AAE7D,IAAA,IAAI,WAAA,EAAa;AAEb,MAAA,MAAM,UAAA,GAAa,IAAI,YAAA,CAAa;AAAA,QAChC,IAAA,EAAM,QAAQ,MAAA,CAAO,IAAA;AAAA,QACrB,OAAO,KAAA,CAAM,IAAA;AAAA,QACb;AAAA,OACH,CAAA;AAED,MAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AAEzB,MAAA,MAAM,WAAA,GAAc,IAAI,iBAAA,CAAkB,OAAA,CAAQ,KAAA,EAAO;AAAA,QACrD,cAAc,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,uBAAuB,KAAK,IAAI,CAAA;AAAA,QAChE,MAAM,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,aAAa,KAAK,GAAG;AAAA,OAChD,CAAA;AAED,MAAA,MAAM,UAAA,GAAa,IAAIlB,gBAAAA,CAAQ;AAAA,QAC3B,SAAA,EAAW,CAAC,WAAW;AAAA,OAC1B,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA;AAEhB,MAAA,MAAM,UAAA,CAAW,KAAK,UAAU,CAAA;AAEhC,MAAA,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,UAAA,CAAW,KAAK,CAAA;AACtC,MAAA,QAAA,CAAS,GAAA,CAAI,YAAA,EAAc,UAAA,CAAW,UAAU,CAAA;AAAA,IACpD;AAAA,EACJ;AAAA,EAYA,MAAM,IAAA,CACmB,OAAA,EACC,QAAA,EACH,KAAA,EACrB;AAUE,IAAA,IAAI,CAACK,cAAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AACtC,MAAA,QAAA,CAAS,GAAA,CAAI,2BAA2B,eAAe,CAAA;AACvD,MAAA;AAAA,IACJ;AAGA,IAAA,MAAM,KAAA,GAAQ,IAAIA,cAAAA,CAAM,OAAA,CAAQ,OAAO,KAAK,CAAA;AAE5C,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,kBAAA,CAAmB,KAAA,CAAM,MAAM,CAAA;AAGzD,IAAA,IAAI,WAAA,EAAa;AACb,MAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,OAAA,CAAQ,OAAO,KAAK,CAAA;AAEnD,MAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAErB,MAAA,MAAM,OAAO,IAAA,EAAK;AAElB,MAAA,OAAO,SAAS,MAAA,CAAO,GAAG,EAAE,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,IACpD,CAAA;AAEI,MAAA,MAAM,IAAI,aAAA,CAAc;AAAA,QACpB,KAAA,EAAO,kBAAA;AAAA,QACP,WAAA,EAAa,CAAA,6BAAA,EAAgC,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,UAAA,CAAA;AAAA,QACjE,MAAA,EAAQ;AAAA,OACX,CAAA;AAAA,EACT;AAAA,EASA,MAAM,MAAA,CACmB,OAAA,EACM,OAAA,EACR,KAAA,EACrB;AACE,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAO,KAAK,CAAA;AAExD,IAAA,IAAI,WAAA,EAAa;AACb,MAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA;AAE3C,MAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAErB,MAAA,MAAM,OAAO,IAAA,EAAK;AAAA,IACtB;AAAA,EACJ;AAAA,EASA,MAAM,MAAA,CACmB,OAAA,EACC,QAAA,EACK,SACR,KAAA,EACrB;AACE,IAAA,IAAI,CAACA,cAAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AACtC,MAAA,QAAA,CAAS,GAAA,CAAI,6BAA6B,eAAe,CAAA;AACzD,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAO,KAAK,CAAA;AAGxD,IAAA,IAAI,WAAA,EAAa;AACb,MAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAA;AAE3C,MAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAErB,MAAA,MAAM,OAAO,IAAA,EAAK;AAAA,IACtB;AAAA,EACJ;AAAA,EAQA,MAAM,MAAA,CACmB,OAAA,EACC,QAAA,EACK,SACR,KAAA,EACrB;AACE,IAAA,IAAI,CAACA,cAAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AACtC,MAAA,QAAA,CAAS,GAAA,CAAI,6BAA6B,eAAe,CAAA;AACzD,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAO,KAAK,CAAA;AAExD,IAAA,IAAI,WAAA,EAAa;AACb,MAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,OAAA,CAAQ,OAAO,KAAK,CAAA;AAEnD,MAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAErB,MAAA,MAAM,OAAO,OAAA,EAAQ;AAAA,IACzB;AAAA,EACJ;AAAA,EAaA,MAAM,UAAA,CACmB,OAAA,EACC,QAAA,EACK,SACR,KAAA,EACrB;AACE,IAAA,IAAI,CAACA,cAAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA,EAAG;AACtC,MAAA,QAAA,CAAS,GAAA,CAAI,iCAAiC,eAAe,CAAA;AAC7D,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,OAAO,KAAK,CAAA;AAExD,IAAA,IAAI,CAAC,WAAA,EAAa;AACd,MAAA,QAAA,CAAS,GAAA,CAAI,iCAAiC,kBAAkB,CAAA;AAChE,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,IAAA,GAAOJ,kBAAAA,CAAU,IAAA,CAAK,WAAW,CAAA;AAEvC,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,EAAS,CAAE,KAAK,CAAA,CAAA,KAAK,CAAA,CAAE,IAAA,KAAS,CAAA,EAAG,YAAY,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAEzG,IAAA,IAAI,CAAC,aAAA,EAAe;AAChB,MAAA,QAAA,CAAS,GAAA,CAAI,iCAAiC,mBAAmB,CAAA;AACjE,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,OAAA,CAAQ,OAAO,KAAK,CAAA;AAEnD,IAAA,KAAA,CAAM,SAAS,MAAM,CAAA;AAErB,IAAA,MAAM,MAAA,CAAO,KAAK,KAAK,CAAA;AAEvB,IAAA,MAAM,MAAA,CAAO,aAAA,CAAc,OAAO,CAAA,CAAE,KAAK,CAAA;AAEzC,IAAA,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,KAAA,CAAM,MAAA,EAAQ,CAAA;AACrC,IAAA,QAAA,CAAS,GAAA,CAAI,UAAU,MAAM,CAAA;AAC7B,IAAA,QAAA,CAAS,GAAA,CAAI,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AAAA,EAC5C;AACJ;AA3NU,eAAA,CAAA;AAAA,EALL,SAAS,GAAA,CAAI;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAqB,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAS,eAAe,CAAA,CAAA;AAAA,EACxB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA,CAAA;AAAA,EAChB,eAAA,CAAA,CAAA,EAAAsB,kBAASZ,eAAQ,CAAA;AAAA,CAAA,EAfb,kBAAA,CAUH,SAAA,EAAA,MAAA,CAAA;AA8CA,eAAA,CAAA;AAAA,EATLK,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EACA,SAAS,GAAA,CAAI;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAO,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EA3DZ,kBAAA,CAwDH,SAAA,EAAA,MAAA,CAAA;AAiDA,eAAA,CAAA;AAAA,EALL,SAAS,IAAA,CAAK;AAAA,IACX,IAAA,EAAM,GAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAsB,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,eAAe,CAAA,CAAA;AAAA,EACxB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EA5GZ,kBAAA,CAyGH,SAAA,EAAA,QAAA,CAAA;AAuBA,eAAA,CAAA;AAAA,EALL,SAAS,GAAA,CAAI;AAAA,IACV,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAsB,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAS,eAAe,CAAA,CAAA;AAAA,EACxB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EApIZ,kBAAA,CAgIH,SAAA,EAAA,QAAA,CAAA;AA6BA,eAAA,CAAA;AAAA,EALL,SAAS,MAAA,CAAO;AAAA,IACb,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAsB,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAS,eAAe,CAAA,CAAA;AAAA,EACxB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EAjKZ,kBAAA,CA6JH,SAAA,EAAA,QAAA,CAAA;AAiCA,eAAA,CAAA;AAAA,EALL,SAAS,IAAA,CAAK;AAAA,IACX,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAsB,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAS,eAAe,CAAA,CAAA;AAAA,EACxB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EAlMZ,kBAAA,CA8LH,SAAA,EAAA,YAAA,CAAA;AClMH,IAAM,qBAAA,GAAN,cAAoCkB,oBAAAA,CAAY;AAAA,EAYnD,MAAM,GAAA,CACkB,MAAA,EACC,OAAA,EACC,UACF,MAAA,EACR;AACZ,IAAA,MAAA,CAAO,GAAA,CAAI,wBAAA,EAA0B,MAAA,CAAO,GAAA,CAAI,uBAAuB,CAAC,CAAA;AAExE,IAAA,MAAM,cAAc,MAAM,OAAO,GAAG,MAAA,CAAO,GAAA,CAAI,uBAAuB,CAAC,CAAA,aAAA,CAAA,CAAA;AACvE,IAAA,MAAM,oBAAmC,MAAA,CAAO,GAAA,CAAI,oBAAoB,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,IAAK;AAAA,MACrF,MAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACJ;AAEA,IAAA,iBAAA,CAAkB,OAAA,CAAQ,UAAQ,QAAA,CAAS,GAAA,CAAI,MAAM,WAAA,CAAY,IAAI,CAAC,CAAC,CAAA;AAEvE,IAAA,OAAA,CAAQ,IAAI,CAAA,uBAAA,EAA0B,OAAA,CAAQ,MAAM,CAAA,CAAA,EAAI,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAAA,EACzE;AACJ;AAnBU,eAAA,CAAA;AAAA,EALL,SAAS,GAAA,CAAI;AAAA,IACV,IAAA,EAAM,GAAA;AAAA,IACN,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS;AAAA,GACZ,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAI,kBAASZ,eAAQ,CAAA,CAAA;AAAA,EACjB,eAAA,CAAA,CAAA,EAAAY,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAASd,eAAQ,CAAA;AAAA,CAAA,EAhBb,qBAAA,CAYH,SAAA,EAAA,KAAA,CAAA;ACTH,IAAM,aAAA,GAAN,cAA4BU,oBAAAA,CAAY;AAAA,EAI3C,MAAM,IAAA,CACkB,MAAA,EACK,MAAA,EAC3B;AACE,IAAA,MAAA,CAAO,GAAA;AAAA,MACH,MAAA;AAAA,MACA,CAAA,wBAAA,CAAA;AAAA,MACA,MAAA,CAAO,QAAQ,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA,CAAE,KAAK,IAAI;AAAA,KAC9C;AAAA,EACJ;AAAA,EAOA,MAAM,SAAA,CACmB,GAAA,EACC,GAAA,EACG,aACL,MAAA,EACtB;AACE,IAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAA,KAAW;AAC1C,MAAA,MAAM,EAAE,MAAA,EAAQ,GAAA,EAAI,GAAI,GAAA;AAExB,MAAA,MAAM,KAAA,GAAQ,IAAI,OAAA,CAAQ,GAAA,EAAK,MAAM,CAAA;AACrC,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA;AAElD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACT,QAAA,OAAO,OAAA,EAAQ;AAAA,MACnB;AAEA,MAAA,MAAA,CAAO,GAAA;AAAA,QACH,QAAA;AAAA,QACA,oBAAoB,MAAM,CAAA,CAAA,EAAI,GAAG,CAAA,IAAA,EAAO,OAAO,QAAQ,CAAA,CAAA;AAAA,QACvD;AAAA,OACJ;AAEA,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,KAAa,QAAA,GAAWK,sBAAA,GAAQC,qBAAA;AAEtD,MAAA,MAAM,WAAW,MAAA,CAAO,OAAA;AAAA,QACpB;AAAA,UACI,MAAA,EAAQ,OAAO,KAAA,CAAM,MAAA;AAAA,UACrB,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,MAAM,KAAA,CAAM;AAAA,SAChB;AAAA,QACA,CAAC,QAAA,KAAa;AACV,UAAA,IAAI,CAAC,IAAI,WAAA,EAAa;AAClB,YAAA,GAAA,CAAI,SAAA,CAAU,QAAA,CAAS,UAAA,IAAc,GAAA,EAAK,SAAS,OAAO,CAAA;AAAA,UAC9D;AACA,UAAA,QAAA,CAAS,EAAA,CAAG,OAAO,MAAM;AAErB,YAAA,MAAA,CAAO,GAAA,CAAI,OAAA,EAAS,CAAA,iBAAA,EAAoB,MAAA,EAAQ,QAAQ,CAAA,UAAA,CAAY,CAAA;AAEpE,YAAA,OAAA,EAAQ;AAAA,UACZ,CAAC,CAAA;AAED,UAAA,QAAA,CAAS,IAAA,CAAK,IAAI,QAAQ,CAAA;AAAA,QAC9B;AAAA,OACJ;AAEA,MAAA,QAAA,CAAS,GAAG,OAAA,EAAS,CAAC,GAAA,KAAQ,MAAA,CAAO,GAAG,CAAC,CAAA;AAEzC,MAAA,GAAA,CAAI,KAAK,QAAQ,CAAA;AAAA,IACrB,CAAC,CAAA;AAAA,EACL;AAEJ;AArEU,eAAA,CAAA;AAAA,EADLV,mBAAU,IAAA,EAAK;AAAA,EAEX,eAAA,CAAA,CAAA,EAAAQ,kBAASd,eAAQ,CAAA,CAAA;AAAA,EACjB,eAAA,CAAA,CAAA,EAAAc,kBAAS,aAAa,CAAA;AAAA,CAAA,EANlB,aAAA,CAIH,SAAA,EAAA,MAAA,CAAA;AAgBA,eAAA,CAAA;AAAA,EAHLP,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,WAAA;AAAA,GACH,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAO,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAS,aAAa,CAAA,CAAA;AAAA,EACtB,eAAA,CAAA,CAAA,EAAAA,kBAASd,eAAQ,CAAA;AAAA,CAAA,EAxBb,aAAA,CAoBH,SAAA,EAAA,WAAA,CAAA;;;AC3BH,IAAM,6BAAA,GAA4D;AAAA,EACrE,MAAA,EAAQ,GAAA;AAAA;AAAA,EACR,SAAS,CAAC,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,UAAU,SAAS,CAAA;AAAA,EACnD,OAAA,EAAS,CAAC,cAAc,CAAA;AAAA,EACxB,WAAA,EAAa,KAAA;AAAA,EACb,MAAA,EAAQ;AACZ,CAAA;ACDO,IAAM,YAAA,GAAN,cAA2BU,oBAAAA,CAAY;AAAA,EAO1C,MAAM,KACkB,MAAA,EACtB;AACE,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACV,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,QAAQ,KAAK,6BAAA,CAA8B,MAAA;AAAA,MAC9D,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,SAAS,KAAK,6BAAA,CAA8B,OAAA;AAAA,MAChE,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,SAAS,KAAK,6BAAA,CAA8B,OAAA;AAAA,MAChE,WAAA,EAAa,MAAA,CAAO,GAAA,CAAI,aAAa,KAAK,6BAAA,CAA8B,WAAA;AAAA,MACxE,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,SAAS,KAAK,6BAAA,CAA8B;AAAA,KACnE;AAAA,EACJ;AAAA,EAMO,KAAA,CACkB,MACC,IAAA,EACxB;AAEE,IAAA,IAAA,CAAK,SAAA,CAAU,6BAAA,EAA+B,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAChE,IAAA,IAAA,CAAK,UAAU,8BAAA,EAAgC,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAC7E,IAAA,IAAA,CAAK,UAAU,8BAAA,EAAgC,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA;AAE7E,IAAA,IAAI,IAAA,CAAK,OAAO,WAAA,EAAa;AACzB,MAAA,IAAA,CAAK,SAAA,CAAU,oCAAoC,MAAM,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,IAAA,CAAK,OAAO,MAAA,EAAQ;AACpB,MAAA,IAAA,CAAK,UAAU,wBAAA,EAA0B,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AAAA,IAC1E;AAGA,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,MAAA,KAAW,SAAA,EAAW;AAC/B,MAAA,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,IAC1B;AAAA,EACJ;AACJ;AAtCU,eAAA,CAAA;AAAA,EAHLH,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,aAAA;AAAA,GACH,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAO,kBAASZ,eAAQ,CAAA;AAAA,CAAA,EARb,YAAA,CAOH,SAAA,EAAA,MAAA,CAAA;AAgBC,eAAA,CAAA;AAAA,EAHNK,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,eAAA;AAAA,GACH,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAO,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA;AAAA,CAAA,EAzBf,YAAA,CAuBF,SAAA,EAAA,OAAA,CAAA;ACpBJ,IAAM,cAAA,GAAN,cAA6BJ,oBAAAA,CAAY;AAAA,EAI5C,MAAM,IAAA,CACkB,MAAA,EACM,MAAA,EAC5B;AACE,IAAA,MAAA,CAAO,GAAA;AAAA,MACH,MAAA;AAAA,MACA,CAAA,8BAAA,CAAA;AAAA,MACA,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,IAAI;AAAA,KAChC;AAAA,EACJ;AAAA,EAUA,MAAM,SAAA,CACmB,GAAA,EACC,GAAA,EACF,QACM,MAAA,EAC5B;AAEE,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,KAAA,IAAS,GAAA,CAAI,WAAW,MAAA,EAAQ;AAC/C,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAA,EAAI,GAAI,GAAA;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAI,OAAA,CAAQ,GAAA,EAAK,MAAM,CAAA;AAErC,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAE7C,IAAA,IAAI,CAAC,eAAA,EAAiB;AAClB,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,YAAYhB,qBAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,eAAe,CAAA;AAE7D,IAAA,IAAI,CAACuB,mBAAA,CAAG,UAAA,CAAW,SAAS,CAAA,IAAK,CAACA,mBAAA,CAAG,QAAA,CAAS,SAAS,CAAA,CAAE,WAAA,EAAY,EAAG;AACpE,MAAA,MAAA,CAAO,GAAA,CAAI,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,sCAAA,CAAwC,CAAA;AACvF,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,WAAW,GAAG,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,CAAM,MAAM,GAAG,CAAA;AAAA,EAC3F;AAAA,EAIU,YAAY,GAAA,EAAqB;AACvC,IAAA,MAAM,SAAA,GAAoC;AAAA,MACtC,OAAA,EAAS,WAAA;AAAA,MACT,KAAA,EAAO,wBAAA;AAAA,MACP,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS,kBAAA;AAAA,MACT,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,YAAA;AAAA,MACT,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACZ;AAEA,IAAA,OAAO,SAAA,CAAU,GAAA,CAAI,WAAA,EAAa,CAAA,IAAK,0BAAA;AAAA,EAC3C;AAAA,EAGU,YAAA,CAAa,SAAA,EAAmB,MAAA,EAAgB,IAAA,EAAuB;AAC7E,IAAA,MAAM,SAAA,GAAY,IAAIC,OAAAA,CAAI,MAAA,IAAU,KAAK,CAAA,OAAA,EAAU,IAAA,IAAQ,WAAW,CAAA,CAAE,CAAA;AACxE,IAAA,IAAI,QAAA,GAAW,kBAAA,CAAmB,SAAA,CAAU,QAAQ,CAAA;AAGpD,IAAA,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,aAAA,EAAe,EAAE,CAAA;AAE7C,IAAA,IAAI,QAAA,GAAWxB,qBAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAA;AAC5C,IAAA,IAAI,CAACuB,mBAAA,CAAG,UAAA,CAAW,QAAQ,CAAA;AACvB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAE,CAAA;AAEjD,IAAA,OAAO,QAAA;AAAA,EACX;AAAA,EAGU,SAAA,CAAU,UAAkB,GAAA,EAAgC;AAGlE,IAAA,OAAO,IAAI,OAAA,CAAc,CAAC,OAAA,EAAS,MAAA,KAAW;AAE1C,MAAA,IAAIA,mBAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,QAAA,MAAM,GAAA,GAAMvB,qBAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACjC,QAAA,MAAM,WAAA,GAAc,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA;AAExC,QAAA,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,EAAE,cAAA,EAAgB,aAAa,CAAA;AAClD,QAAA,MAAM,MAAA,GAASuB,mBAAA,CAAG,gBAAA,CAAiB,QAAQ,CAAA;AAC3C,QAAA,MAAA,CAAO,IAAA,CAAK,IAAI,QAAQ,CAAA;AAExB,QAAA,MAAA,CAAO,EAAA,CAAG,OAAO,MAAM;AACnB,UAAA,OAAA,EAAQ;AAAA,QACZ,CAAC,CAAA;AAED,QAAA,MAAA,CAAO,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAQ;AACxB,UAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,GAAA,CAAI,OAAO,EAAE,CAAC,CAAA;AAAA,QACzD,CAAC,CAAA;AAAA,MACL,CAAA,MAAO;AACH,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,QAAQ,EAAE,CAAC,CAAA;AAAA,MACnD;AAGA,MAAA,OAAA,EAAQ;AAAA,IACZ,CAAC,CAAA;AAAA,EACL;AAEJ;AAlHU,eAAA,CAAA;AAAA,EADLX,mBAAU,IAAA,EAAK;AAAA,EAEX,eAAA,CAAA,CAAA,EAAAQ,kBAASd,eAAQ,CAAA,CAAA;AAAA,EACjB,eAAA,CAAA,CAAA,EAAAc,kBAAS,cAAc,CAAA;AAAA,CAAA,EANnB,cAAA,CAIH,SAAA,EAAA,MAAA,CAAA;AAmBA,eAAA,CAAA;AAAA,EAHLP,mBAAU,MAAA,CAAO;AAAA,IACd,IAAA,EAAA,WAAA;AAAA,GACH,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAO,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAASd,eAAQ,CAAA,CAAA;AAAA,EACjB,eAAA,CAAA,CAAA,EAAAc,kBAAS,cAAc,CAAA;AAAA,CAAA,EA3BnB,cAAA,CAuBH,SAAA,EAAA,WAAA,CAAA;AC5BH,IAAM,YAAA,GAAN,cAA2BJ,oBAAAA,CAAY;AAAA,EAQ1C,MAAM,gBAAA,CACmB,OAAA,EAIC,QAAA,EACH,KAAA,EACrB;AAIE,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,OAAA,CAAQ,OAAO,SAAS,CAAA;AACnC,MAAA;AAEJ,IAAA,IAAI,CAAC,OAAA,CAAQ,MAAA,CAAO,aAAa,OAAO,OAAA,CAAQ,OAAO,SAAA,KAAc,QAAA;AACjE,MAAA;AAGJ,IAAA,MAAM,iBAAA,GAAoB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,OAAO,SAAS,CAAA;AAEhE,IAAA,IACI,CAAC,iBAAA,IAED,CAAC,CAACA,oBAAAA,EAAaT,oBAAW,CAAA,CACrB,IAAA,CAAK,CAAA,CAAA,KAAK,iBAAA,YAA6B,CAAC,CAAA;AAE7C,MAAA;AAEJ,IAAA,MAAM,SAAA,GAAY,iBAAA;AAElB,IAAA,MAAM,IAAA,GAAOR,kBAAAA,CAAU,IAAA,CAAK,SAAS,CAAA;AAErC,IAAA,MAAM,gBAAgB,IAAA,CAAK,QAAA,EAAS,CAAE,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,CAAA,EAAG,SAAA,CAAU,YAAY,IAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,CAAE,CAAA;AAEtH,IAAA,IAAI,CAAC,aAAA;AACD,MAAA;AAGJ,IAAA,MAAM,SAAA,CAAU,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,WAAW,KAAK,CAAA;AAAA,EACxD;AACJ;AAxCU,eAAA,CAAA;AAAA,EALL,SAAS,IAAA,CAAK;AAAA,IACX,IAAA,EAAM,wBAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAqB,kBAAS,SAAS,CAAA,CAAA;AAAA,EAIlB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EAdZ,YAAA,CAQH,SAAA,EAAA,kBAAA,CAAA;ACJH,IAAM,mBAAA,GAAN,cAAkCkB,oBAAAA,CAAY;AAAA,EAWjD,MAAM,IAAA,CACmB,OAAA,EACC,QAAA,EACK,OAAA,EACR,OACC,MAAA,EACtB;AAEE,IAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,aAAA,CAAc,OAAA,CAAQ,OAAO,IAAI,CAAA;AAE7D,IAAA,IAAI,WAAA,EAAa;AAEb,MAAA,MAAM,UAAA,GAAa,IAAI,YAAA,CAAa;AAAA,QAChC,IAAA,EAAM,QAAQ,MAAA,CAAO,IAAA;AAAA,QACrB,OAAO,KAAA,CAAM,IAAA;AAAA,QACb;AAAA,OACH,CAAA;AAED,MAAA,KAAA,CAAM,SAAS,UAAU,CAAA;AAEzB,MAAA,MAAM,WAAA,GAAc,IAAI,iBAAA,CAAkB,OAAA,CAAQ,KAAA,EAAO;AAAA,QACrD,cAAc,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,uBAAuB,KAAK,IAAI,CAAA;AAAA,QAChE,MAAM,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,aAAa,KAAK,GAAG;AAAA,OAChD,CAAA;AAED,MAAA,MAAM,UAAA,GAAa,IAAIlB,gBAAAA,CAAQ;AAAA,QAC3B,SAAA,EAAW,CAAC,WAAW;AAAA,OAC1B,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA;AAEhB,MAAA,MAAM,UAAA,CAAW,KAAK,UAAU,CAAA;AAEhC,MAAA,QAAA,CAAS,GAAA,CAAI,OAAA,EAAS,UAAA,CAAW,KAAK,CAAA;AACtC,MAAA,QAAA,CAAS,GAAA,CAAI,YAAA,EAAc,UAAA,CAAW,UAAU,CAAA;AAAA,IACpD;AAAA,EACJ;AACJ;AAnCU,eAAA,CAAA;AAAA,EALL,SAAS,GAAA,CAAI;AAAA,IACV,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAsB,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAS,eAAe,CAAA,CAAA;AAAA,EACxB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA,CAAA;AAAA,EAChB,eAAA,CAAA,CAAA,EAAAsB,kBAASZ,eAAQ,CAAA;AAAA,CAAA,EAhBb,mBAAA,CAWH,SAAA,EAAA,MAAA,CAAA;ACfH,IAAM,mBAAA,GAAN,cAAkCQ,oBAAAA,CAAY;AAAA,EAOjD,MAAM,aAAA,CACmB,GAAA,EACC,GAAA,EACH,OACI,SAAA,EACV;AAEb,IAAA,MAAM,WAAA,GAAc,IAAI,MAAA,CAAO,OAAA;AAE/B,IAAA,MAAM,kBAAA,GAAqB,KAAA,CAAM,kBAAA,CAA8B,WAAW,CAAA;AAE1E,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACrB,MAAA,GAAA,CAAI,OAAO,GAAG,CAAA;AAEd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,WAAW,CAAA,UAAA,CAAY,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,OAAA,GAAU,IAAI,kBAAA,CAAmB,GAAA,CAAI,IAAI,CAAA;AAE/C,IAAA,SAAA,CAAU,KAAA,CAAM,SAAS,OAAO,CAAA;AAEhC,IAAA,MAAM,QAAQ,OAAA,EAAQ;AAEtB,IAAA,MAAM,UAAA,GAAa,QAAQ,MAAA,EAAO;AAElC,IAAA,OAAO,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,CAAE,KAAK,UAAU,CAAA;AAAA,EAC1C;AAEJ;AA5BU,eAAA,CAAA;AAAA,EALL,SAAS,GAAA,CAAI;AAAA,IACV,IAAA,EAAM,mBAAA;AAAA,IACN,OAAA,EAAS,IAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAI,kBAAS,SAAS,CAAA,CAAA;AAAA,EAClB,eAAA,CAAA,CAAA,EAAAA,kBAAS,UAAU,CAAA,CAAA;AAAA,EACnB,eAAA,CAAA,CAAA,EAAAA,kBAAStB,gBAAO,CAAA,CAAA;AAAA,EAChB,eAAA,CAAA,CAAA,EAAAsB,kBAASb,oBAAW,CAAA;AAAA,CAAA,EAXhB,mBAAA,CAOH,SAAA,EAAA,eAAA,CAAA;ACLH,IAAM,kBAAA,GAAN,cAAiCS,oBAAAA,CAAY;AAAA,EAQhD,MAAM,IAAA,CACuB,OAAA,EACL,MAAA,EACD,KAAA,EACrB;AAEE,IAAA,IACI,MAAM,GAAA,CAAIS,iBAAU,CAAA,IAAK,CAAC,MAAM,OAAA,CAAQA,iBAAU,CAAA,CAC7C,SAAA,CAAU,OAAO,WAAA,EAAa,MAAM,CAAA,CACpC,GAAA,CAAI,OAAO,WAA0C,CAAA;AAE1D,MAAA;AAEJ,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,CAAI,WAAW,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAEnE,IAAA,MAAA,CAAO,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,EACjC;AAAA,EASA,MAAM,IAAA,CACuB,OAAA,EACL,MAAA,EACD,KAAA,EACrB;AAEE,IAAA,IACI,MAAM,GAAA,CAAIA,iBAAU,CAAA,IAAK,CAAC,MAAM,OAAA,CAAQA,iBAAU,CAAA,CAC7C,SAAA,CAAU,OAAO,WAAA,EAAa,MAAM,CAAA,CACpC,GAAA,CAAI,OAAO,WAA0C,CAAA;AAE1D,MAAA;AAEJ,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,CAAI,aAAa,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAEzE,IAAA,MAAA,CAAO,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,EACjC;AAAA,EASA,MAAM,IAAA,CACuB,OAAA,EACL,MAAA,EACD,KAAA,EACrB;AAEE,IAAA,IACI,MAAM,GAAA,CAAIA,iBAAU,CAAA,IAAK,CAAC,MAAM,OAAA,CAAQA,iBAAU,CAAA,CAC7C,SAAA,CAAU,OAAO,WAAA,EAAa,MAAM,CAAA,CACpC,GAAA,CAAI,OAAO,WAA0C,CAAA;AAE1D,MAAA;AAEJ,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,CAAA,CAAA,EAAI,MAAA,CAAO,MAAA,EAAQ,CAAA;AAE3F,IAAA,MAAA,CAAO,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,EACjC;AAAA,EASA,MAAM,OAAA,CACuB,OAAA,EACL,MAAA,EACD,KAAA,EACrB;AAEE,IAAA,IACI,MAAM,GAAA,CAAIA,iBAAU,CAAA,IAAK,CAAC,MAAM,OAAA,CAAQA,iBAAU,CAAA,CAC7C,SAAA,CAAU,OAAO,WAAA,EAAa,SAAS,CAAA,CACvC,GAAA,CAAI,OAAO,WAA0C,CAAA;AAE1D,MAAA;AAEJ,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,MAAA,CAAO,aAAa,MAAA,CAAO,KAAA,CAAM,QAAA,EAAU,CAAA,CAAE,CAAA;AAE5E,IAAA,MAAA,CAAO,QAAA,CAAS,SAAS,IAAI,CAAA;AAAA,EACjC;AAGJ;AA9FU,eAAA,CAAA;AAAA,EANLZ,mBAAU,MAAA,CAAO;AAAA,IACd,MAAMa,yCAAA,CAAwB,IAAA;AAAA,IAC9B,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,CAAC,YAAY;AAAA;AAC1B,GACH,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAN,kBAAS,aAAa,CAAA,CAAA;AAAA,EACtB,eAAA,CAAA,CAAA,EAAAA,kBAASO,iBAAQ,CAAA,CAAA;AAAA,EACjB,eAAA,CAAA,CAAA,EAAAP,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EAXZ,kBAAA,CAQH,SAAA,EAAA,MAAA,CAAA;AAyBA,eAAA,CAAA;AAAA,EANLe,mBAAU,MAAA,CAAO;AAAA,IACd,MAAMa,yCAAA,CAAwB,IAAA;AAAA,IAC9B,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,CAAC,YAAY;AAAA;AAC1B,GACH,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAN,kBAAS,aAAa,CAAA,CAAA;AAAA,EACtB,eAAA,CAAA,CAAA,EAAAA,kBAASO,iBAAQ,CAAA,CAAA;AAAA,EACjB,eAAA,CAAA,CAAA,EAAAP,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EApCZ,kBAAA,CAiCH,SAAA,EAAA,MAAA,CAAA;AAyBA,eAAA,CAAA;AAAA,EANLe,mBAAU,MAAA,CAAO;AAAA,IACd,MAAMa,yCAAA,CAAwB,IAAA;AAAA,IAC9B,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,CAAC,YAAY;AAAA;AAC1B,GACH,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAN,kBAAS,aAAa,CAAA,CAAA;AAAA,EACtB,eAAA,CAAA,CAAA,EAAAA,kBAASO,iBAAQ,CAAA,CAAA;AAAA,EACjB,eAAA,CAAA,CAAA,EAAAP,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EA7DZ,kBAAA,CA0DH,SAAA,EAAA,MAAA,CAAA;AAyBA,eAAA,CAAA;AAAA,EANLe,mBAAU,MAAA,CAAO;AAAA,IACd,MAAMa,yCAAA,CAAwB,OAAA;AAAA,IAC9B,KAAA,EAAO;AAAA,MACH,OAAA,EAAS,CAAC,YAAY;AAAA;AAC1B,GACH,CAAA;AAAA,EAEI,eAAA,CAAA,CAAA,EAAAN,kBAAS,aAAa,CAAA,CAAA;AAAA,EACtB,eAAA,CAAA,CAAA,EAAAA,kBAASO,iBAAQ,CAAA,CAAA;AAAA,EACjB,eAAA,CAAA,CAAA,EAAAP,kBAAStB,gBAAO,CAAA;AAAA,CAAA,EAtFZ,kBAAA,CAmFH,SAAA,EAAA,SAAA,CAAA","file":"index.js","sourcesContent":["import { A_Component, A_Fragment } from \"@adaas/a-concept\";\n\n\nexport type A_SERVER_TYPES__ServerFeatures = [\n A_SERVER_TYPES__ServerFeature.beforeStart,\n A_SERVER_TYPES__ServerFeature.afterStart,\n A_SERVER_TYPES__ServerFeature.beforeStop,\n A_SERVER_TYPES__ServerFeature.afterStop,\n A_SERVER_TYPES__ServerFeature.onRequest\n]\n\nexport enum A_SERVER_TYPES__ServerFeature {\n beforeStart = 'beforeStart',\n afterStart = 'afterStart',\n beforeStop = 'beforeStop',\n afterStop = 'afterStop',\n beforeRequest = 'beforeRequest',\n onRequest = 'onRequest',\n afterRequest = 'afterRequest',\n}\n\n\nexport type A_SERVER_TYPES__ServerConstructor = {\n name: string,\n version: string,\n controllers: Array<A_Component>,\n entities: Array<A_Fragment>,\n extensions: Array<A_Component>\n}\n\n\n\nexport enum A_SERVER_TYPES__ServerMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n DELETE = 'DELETE',\n PATCH = 'PATCH',\n OPTIONS = 'OPTIONS',\n HEAD = 'HEAD',\n CONNECT = 'CONNECT',\n TRACE = 'TRACE',\n DEFAULT = 'DEFAULT'\n}\n\n\n","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerMethod } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_SERVER_TYPES__HttpChannelRequestParams } from \"@adaas/a-server/channels/A-Http/A-Http.channel.types\";\n\n\n\n\n\nexport class A_HTTPChannel_RequestContext<\n T extends any = any\n> extends A_Fragment {\n url: string;\n method: A_SERVER_TYPES__ServerMethod;\n data?: any;\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestParams['config']>;\n\n constructor(params: A_SERVER_TYPES__HttpChannelRequestParams) {\n super();\n\n const {\n method,\n url,\n data,\n config,\n } = params;\n\n this.url = url;\n this.method = method;\n this.data = data;\n this.config = config;\n }\n\n result?: T;\n error?: any;\n\n}\n","\n\n\nexport enum A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle {\n onAfterRequest = 'onAfterHttpChannelRequest',\n onError = 'onHttpChannelError',\n onBeforeRequest = 'onBeforeHttpChannelRequest',\n}","import { A_Error } from '@adaas/a-concept';\nimport { A_SERVER_TYPES__ServerError_Init, A_SERVER_TYPES__ServerError_Serialized } from './A-ServerError.types';\n\n\nexport class A_ServerError extends A_Error<A_SERVER_TYPES__ServerError_Init, A_SERVER_TYPES__ServerError_Serialized> {\n\n status: number = 500;\n\n\n // constructor(\n // /**\n // * A_Error Constructor params\n // */\n // params: A_SERVER_TYPES__ServerError_Init\n // )\n // constructor(\n // /**\n // * HTTP Status Code of the error\n // */\n // status: number,\n // /**\n // * Error message\n // */\n // message: string\n // )\n // constructor(\n // /**\n // * Original JS Error\n // */\n // error: Error\n // )\n // constructor(\n // /**\n // * HTTP Status Code of the error\n // */\n // status: number,\n // /**\n // * Error message\n // */\n // title: string,\n // /**\n // * Detailed description of the error\n // */\n // description: string\n // )\n // constructor(\n // param1: A_SERVER_TYPES__ServerError_Init | Error | string | A_Error | number,\n // param2?: string | A_Error,\n // param3?: string\n // ) {\n // switch (true) {\n // case typeof param1 === 'number':\n // if (typeof param2 === 'string' && param3) {\n // super({\n // title: param2,\n // description: param3\n // });\n // }\n // else if (param2 instanceof A_Error) {\n // super(param2);\n // }\n // else {\n // super();\n // }\n // this.status = param1;\n // break;\n\n // case param1 instanceof A_Error:\n // super (param1);\n // break;\n // case param1 instanceof Error:\n // super (param1);\n // break;\n \n // default:\n // break;\n // }\n\n // }\n\n\n protected fromConstructor(params: A_SERVER_TYPES__ServerError_Init): void {\n super.fromConstructor(params);\n if (params.status) {\n this.status = params.status;\n }\n }\n\n\n toJSON(): A_SERVER_TYPES__ServerError_Serialized {\n return {\n ...super.toJSON(),\n status: this.status\n }\n }\n}\n\n\n","import { A_Error } from \"@adaas/a-concept\";\n\n\nexport class A_HTTPChannelError extends A_Error {\n\n static readonly HttpRequestError = 'HTTP Channel Request Error';\n\n}","import { A_Context, A_Scope } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerMethod } from \"../../containers/A-Service/A-Service.container.types\";\nimport { A_HTTPChannel_RequestContext } from \"../../context/A-HttpChannel/A-HttpChannel.context\";\nimport { A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle } from \"./A-Http.channel.constants\";\nimport { A_ServerError } from \"@adaas/a-server/components/A-ServerError/A-ServerError.class\";\nimport { A_Channel } from \"@adaas/a-utils\";\nimport { A_HTTPChannelError } from \"./A-Http.channel.error\";\nimport { A_SERVER_TYPES__HttpChannelRequestConfig, A_SERVER_TYPES__HttpChannelRequestParams, A_SERVER_TYPES__HttpChannelSendParams } from \"./A-Http.channel.types\";\n\n\n\nexport class A_HTTPChannel extends A_Channel {\n\n protected baseUrl?: string;\n\n\n async connect(): Promise<void> {\n // keep it empty since HTTP channel does not require persistent connection\n return;\n }\n\n /**\n * Allows to send an HTTP request without expecting a response\n * \n * @param params \n */\n async send(params: A_SERVER_TYPES__HttpChannelSendParams): Promise<void> {\n this.request(params);\n }\n\n /**\n * Makes an HTTP request\n * \n * @param params \n * @returns \n */\n async request<T = any, M extends Record<string, any> = any>(\n /**\n * Provide request parameters\n */\n params: A_SERVER_TYPES__HttpChannelRequestParams<M>\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n const { method, url, data, config } = params;\n\n await this.initialize;\n\n this._processing = true;\n\n const fullUrl = this.buildURL(url, config?.params);\n\n const requestScope = new A_Scope({ name: `a-http-channel-request-scope-${method}-${url}-${Date.now()}` });\n const context = new A_HTTPChannel_RequestContext({\n method,\n url,\n data,\n config\n });\n\n requestScope.inherit(A_Context.scope(this));\n requestScope.register(context);\n\n try {\n await this.call(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle.onBeforeRequest, requestScope);\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...config?.headers,\n };\n\n const options: RequestInit = {\n method,\n headers,\n };\n\n if (data && method !== A_SERVER_TYPES__ServerMethod.GET) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(fullUrl, options);\n\n if (!response.ok) {\n throw new A_ServerError({\n status: response.status,\n title: response.statusText,\n description: `HTTP request to ${fullUrl} failed with status ${response.status}`,\n });\n }\n\n context.result =\n config?.params?.responseType === \"text\"\n ? await response.text()\n : config?.params?.responseType === \"blob\"\n ? await response.blob()\n : await response.json();\n\n await this.call(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle.onAfterRequest, requestScope);\n\n this._processing = false;\n\n return context as A_HTTPChannel_RequestContext<T>;\n\n } catch (error) {\n\n this._processing = false;\n\n context.error = error;\n\n await this.call(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle.onError, requestScope);\n\n if (config?.throwOnError === false)\n return context as A_HTTPChannel_RequestContext<T>;\n else\n throw error;\n }\n }\n\n async post<T, M extends Record<string, any> = any>(\n url: string,\n body?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>(\n {\n method: A_SERVER_TYPES__ServerMethod.POST,\n url,\n data: body,\n config,\n }\n );\n }\n\n async get<T, M extends Record<string, any> = any>(\n url: string,\n params?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>(\n {\n method: A_SERVER_TYPES__ServerMethod.GET,\n url,\n config: {\n ...config,\n params,\n }\n }\n );\n }\n\n async put<T, M extends Record<string, any> = any>(\n url: string,\n body?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>({\n method: A_SERVER_TYPES__ServerMethod.PUT,\n url,\n data: body,\n config,\n });\n }\n\n async delete<T, M extends Record<string, any> = any>(\n url: string,\n params?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>({\n method: A_SERVER_TYPES__ServerMethod.DELETE,\n url,\n data: params,\n config,\n });\n }\n\n\n protected buildURL(path: string = '', params: Record<string, any> = {}): string {\n\n if (!this.baseUrl)\n throw new A_HTTPChannelError(\n A_HTTPChannelError.HttpRequestError,\n \"Base URL is not set for HTTP Channel\"\n );\n\n const url = new URL(`${this.baseUrl}${path.startsWith('/') ? path : `/${path}`}`);\n\n Object.keys(params).forEach(key => {\n if (params[key] !== undefined && params[key] !== null) {\n url.searchParams.append(key, params[key]);\n }\n });\n\n return url.toString()\n }\n}\n","export const A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES = {\n // ----------------------------------------------------------\n // A-Server Environment Variables\n // ----------------------------------------------------------\n // These environment variables are used by A-Server to configure the application\n // ----------------------------------------------------------\n /**\n * Port for the server to listen on\n * [!] Default is 3000\n * @default 3000\n */\n A_SERVER_PORT: 'A_SERVER_PORT',\n\n} as const;\n\nexport type A_TYPES__ServerENVVariables = (typeof A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES)[keyof typeof A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES][];\n\n\n\nexport const A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY = [\n A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES.A_SERVER_PORT,\n] as const;\n\n\n\n\n","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerConstructor } from \"./A_Server.context.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_TYPES__Required } from \"@adaas/a-concept/dist/src/types/A_Common.types\";\n\n\nexport class A_Server extends A_Fragment {\n\n public port: number;\n public version: string;\n protected _routes: A_Route[] = [];\n\n constructor(\n params: A_TYPES__Required<Partial<A_SERVER_TYPES__ServerConstructor>, [\n 'port',\n 'name'\n ]>\n ) {\n super(params);\n\n this.port = params.port;\n this.name = params.name;\n this.version = params.version || 'v1';\n\n this._routes = params.routes || this._routes;\n }\n\n\n /**\n * A list of routes that the server will listen to\n */\n get routes(): A_Route[] {\n return this._routes\n }\n\n}\n\n\n","import { IncomingMessage } from \"http\";\nimport { A_Request } from \"./A-Request.entity\";\nimport { A_TYPES__Entity_Serialized } from \"@adaas/a-concept\";\n\n\nexport type A_SERVER_TYPES__RequestConstructor = {\n /**\n * Should correspond to Response id\n */\n id: string,\n request: IncomingMessage,\n scope: string,\n};\n\nexport type A_SERVER_TYPES__RequestSerialized = {\n} & A_TYPES__Entity_Serialized;\n\n\n\nexport type A_SERVER_TYPES__RequestMethods = 'GET'\n | 'POST'\n | 'PUT'\n | 'DELETE'\n | 'PATCH'\n | 'OPTIONS'\n | 'HEAD'\n | 'CONNECT'\n | 'TRACE'\n | 'DEFAULT'; // Default is used for routes that do not have a method specified\n\n\nexport enum A_SERVER_TYPES__RequestEvent {\n Error = 'error',\n Finish = 'finish',\n Data = 'data',\n End = 'end',\n Close = 'close',\n}\n\n\nexport type A_SERVER_TYPES__RequestEventCallback = (request: A_Request) => void;","import { A_SERVER_TYPES__RequestMethods } from '../A-Request/A-Request.entity.types';\n\n\n\nexport class A_Route {\n\n public url!: string;\n public method!: A_SERVER_TYPES__RequestMethods;\n\n\n constructor(\n url: string | RegExp,\n method: A_SERVER_TYPES__RequestMethods\n )\n constructor(\n url: string | RegExp,\n )\n constructor(\n param1: string | RegExp,\n param2?: A_SERVER_TYPES__RequestMethods\n ) {\n\n this.url = param1 instanceof RegExp ? param1.source : param1;\n this.method = param2 || 'GET';\n\n }\n\n\n /**\n * returns path only without query and hash\n */\n get path(): string {\n const p = this.url.split('?')[0].split('#')[0];\n\n // ensure that last char is not /\n return p.endsWith('/') ? p.slice(0, -1) : p;\n }\n\n\n get params(): string[] {\n return this.path\n .match(/:([^\\/]+)/g)\n ?.map((param) => param.slice(1))\n || [];\n }\n\n\n \n\n\n extractParams(url: string): Record<string, string> {\n // Remove query string (anything after ?)\n const cleanUrl = url.split('?')[0];\n\n const urlSegments = cleanUrl.split('/').filter(Boolean);\n const maskSegments = this.path.split('/').filter(Boolean);\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < maskSegments.length; i++) {\n const maskSegment = maskSegments[i];\n const urlSegment = urlSegments[i];\n\n if (maskSegment.startsWith(':')) {\n const paramName = maskSegment.slice(1); // Remove ':' from mask\n params[paramName] = urlSegment;\n } else if (maskSegment !== urlSegment) {\n // If static segments don’t match → fail\n return {};\n }\n }\n\n return params;\n }\n\n extractQuery(url: string): Record<string, string> {\n const query: Record<string, string> = {};\n\n // Take only the part after \"?\"\n const queryString = url.split('?')[1];\n if (!queryString) return query;\n\n // Remove fragment (#...) if present\n const cleanQuery = queryString.split('#')[0];\n\n // Split into key=value pairs\n for (const pair of cleanQuery.split('&')) {\n if (!pair) continue;\n const [key, value = ''] = pair.split('=');\n query[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n\n return query;\n }\n\n\n\n toString(): string {\n // path can be like /api/v1/users/:id\n // and because of that :id we need to replace it with regex that matches chars and numbers only \n return `${this.method}::${this.path }`;\n\n // .replace(/\\/:([^\\/]+)/g, '\\\\/([^\\/]+)')\n }\n\n toRegExp(): RegExp {\n return new RegExp(`^${this.method}::${this.path.replace(/\\/:([^\\/]+)/g, '/([^/]+)')}$`);\n }\n\n toAFeatureExtension(extensionScope: Array<string> = []): RegExp {\n return new RegExp(`^${extensionScope.length\n ? `(${extensionScope.join('|')})`\n : '.*'\n }\\\\.${this.method}::${this.path.replace(/\\/:([^\\/]+)/g, '/([^/]+)')}$`);\n }\n}\n\n","import { IncomingHttpHeaders, IncomingMessage } from \"http\";\nimport { A_Context, A_Entity, A_IdentityHelper, ASEID, } from '@adaas/a-concept';\nimport {\n A_SERVER_TYPES__RequestConstructor,\n A_SERVER_TYPES__RequestEvent,\n A_SERVER_TYPES__RequestMethods,\n A_SERVER_TYPES__RequestSerialized\n} from \"./A-Request.entity.types\";\nimport { A_Route } from '../A-Route/A-Route.entity';\nimport { A_ServerError } from \"@adaas/a-server/components/A-ServerError/A-ServerError.class\";\n\n\nexport class A_Request<\n _ReqBodyType = any,\n _ResponseType = any,\n _ParamsType extends Record<string, string> = any,\n _QueryType = any,\n>\n extends A_Entity<\n A_SERVER_TYPES__RequestConstructor,\n A_SERVER_TYPES__RequestSerialized\n > {\n\n static get namespace(): string {\n return 'a-server';\n }\n\n req!: IncomingMessage;\n\n body: _ReqBodyType = {} as _ReqBodyType;\n params: _ParamsType = {} as _ParamsType;\n query: _QueryType = {} as _QueryType;\n response?: _ResponseType;\n\n error?: A_ServerError;\n\n /**\n * Duration of the request in milliseconds\n */\n duration: number = 0;\n\n fromNew(newEntity: A_SERVER_TYPES__RequestConstructor): void {\n this.req = newEntity.request;\n\n this.aseid = new ASEID({\n concept: A_Context.root.name,\n scope: newEntity.scope,\n entity: (this.constructor as typeof A_Request).entity,\n id: newEntity.id\n });\n }\n\n get startedAt(): Date | undefined {\n const timeId = A_IdentityHelper.parseTimeId(this.aseid.id.split('-')[0]);\n\n return timeId ? new Date(timeId.timestamp) : undefined;\n }\n\n\n\n // Getter for request URL\n public get url(): string {\n return this.req.url!;\n }\n\n // Getter for request method\n public get method(): A_SERVER_TYPES__RequestMethods {\n return (String(this.req.method).toUpperCase() as A_SERVER_TYPES__RequestMethods) || 'DEFAULT';\n }\n\n get headers(): IncomingHttpHeaders {\n return this.req.headers;\n }\n\n\n get route(): A_Route {\n return new A_Route(this.url, this.method);\n }\n\n\n pipe(\n destination: NodeJS.WritableStream,\n options?: { end?: boolean | undefined; }\n ): NodeJS.WritableStream {\n return this.req.pipe(destination, options);\n }\n\n\n\n async init(): Promise<void> {\n this.req.on('error', async (err) => {\n this.error = new A_ServerError(err);\n await this.call(A_SERVER_TYPES__RequestEvent.Error);\n });\n\n this.params = this.extractParams(this.url) as _ParamsType;\n this.query = this.extractQuery(this.url) as _QueryType;\n }\n\n\n extractParams(url: string): Record<string, string> {\n // Remove query string (anything after ?)\n const cleanUrl = url.split('?')[0];\n\n const urlSegments = cleanUrl.split('/').filter(Boolean);\n const maskSegments = this.url.split('/').filter(Boolean);\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < maskSegments.length; i++) {\n const maskSegment = maskSegments[i];\n const urlSegment = urlSegments[i];\n\n if (maskSegment.startsWith(':')) {\n const paramName = maskSegment.slice(1); // Remove ':' from mask\n params[paramName] = urlSegment;\n } else if (maskSegment !== urlSegment) {\n // If static segments don’t match → fail\n return {};\n }\n }\n\n return params;\n }\n\n extractQuery(url: string): Record<string, string> {\n const query: Record<string, string> = {};\n\n // Take only the part after \"?\"\n const queryString = url.split('?')[1];\n if (!queryString) return query;\n\n // Remove fragment (#...) if present\n const cleanQuery = queryString.split('#')[0];\n\n // Split into key=value pairs\n for (const pair of cleanQuery.split('&')) {\n if (!pair) continue;\n const [key, value = ''] = pair.split('=');\n query[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n\n return query;\n }\n\n\n\n parseBody(): Promise<any> {\n return new Promise((resolve, reject) => {\n let body = '';\n this.req.on('data', chunk => body += chunk);\n this.req.on('end', () => {\n try {\n resolve(JSON.parse(body));\n } catch (err) {\n reject(err);\n }\n });\n this.req.on('error', reject);\n });\n }\n\n} ","import { A_TYPES__Entity_Serialized } from \"@adaas/a-concept\";\nimport { ServerResponse } from \"http\";\n\n\nexport type A_SERVER_TYPES__ResponseConstructor = {\n /**\n * Should correspond to Request id\n */\n id: string,\n scope: string,\n response: ServerResponse,\n}\n\nexport enum A_SERVER_TYPES__ResponseEvent {\n Error = 'error',\n Finish = 'finish',\n Data = 'data',\n End = 'end',\n Close = 'close',\n}\n\nexport type A_SERVER_TYPES__ResponseSerialized = A_TYPES__Entity_Serialized;\n\n\nexport type A_SERVER_TYPES__SendResponseObject<_ResponseType = any> = \nRecord<string, _ResponseType> ;","import {\n A_Context,\n A_Entity,\n A_Error,\n A_Scope,\n ASEID,\n} from \"@adaas/a-concept\";\nimport {\n IncomingHttpHeaders,\n ServerResponse\n} from \"http\";\nimport {\n A_SERVER_TYPES__ResponseConstructor,\n A_SERVER_TYPES__ResponseEvent,\n A_SERVER_TYPES__ResponseSerialized,\n A_SERVER_TYPES__SendResponseObject\n} from \"./A-Response.entity.types\";\nimport { A_ServerError } from \"@adaas/a-server/components/A-ServerError/A-ServerError.class\";\nimport { A_Logger } from \"@adaas/a-utils\";\n\n\n\n\nexport class A_Response<\n _ResponseType = any\n> extends A_Entity<\n A_SERVER_TYPES__ResponseConstructor,\n A_SERVER_TYPES__ResponseSerialized\n> {\n\n\n\n /**\n * Duration of the request in milliseconds\n */\n duration: number = 0;\n\n private res!: ServerResponse;\n private data: Map<string, _ResponseType> = new Map();\n error?: A_ServerError;\n\n\n fromNew(newEntity: A_SERVER_TYPES__ResponseConstructor): void {\n this.res = newEntity.response;\n\n this.aseid = new ASEID({\n concept: A_Context.root.name,\n scope: newEntity.scope,\n entity: (this.constructor as typeof A_Response).entity,\n id: newEntity.id\n });\n }\n\n get headersSent(): boolean {\n return this.res.headersSent;\n }\n\n get original() {\n return this.res;\n }\n\n get statusCode(): number {\n return this.res.statusCode;\n }\n\n async init(): Promise<void> {\n const startTime = process.hrtime();\n\n this.res.on('finish', async () => {\n const elapsedTime = process.hrtime(startTime);\n const elapsedMilliseconds = elapsedTime[0] * 1000 + elapsedTime[1] / 1e6;\n\n this.duration = elapsedMilliseconds;\n await this.call(A_SERVER_TYPES__ResponseEvent.Finish);\n });\n\n this.res.on('close', async () => {\n await this.call(A_SERVER_TYPES__ResponseEvent.Close)\n });\n\n }\n\n\n\n public failed(error: A_ServerError | A_Error | Error | any): void {\n switch (true) {\n case error instanceof A_ServerError:\n this.error = error;\n\n break;\n\n case error instanceof A_Error:\n this.error = new A_ServerError(error);\n\n break;\n\n default:\n this.error = new A_ServerError(error)\n\n break;\n }\n\n return this.status(this.error.status).json(this.error);\n }\n\n // Send a plain text or JSON response\n public send(\n data: string | object = this.toResponse()\n ): void {\n const logger = A_Context.scope(this).resolve(A_Logger);\n if (this.headersSent) {\n logger.warning('Response headers already sent, cannot send response again.');\n return;\n }\n\n try {\n switch (true) {\n case !!data && typeof data === 'object':\n return this.json(data);\n\n case !!data && typeof data === 'string':\n this.res.setHeader('Content-Type', 'text/plain');\n this.res.writeHead(this.statusCode);\n this.res.end(data);\n\n return;\n\n default:\n this.res.writeHead(this.statusCode);\n this.res.end(data);\n\n return;\n }\n } catch (error) {\n logger.warning('Response send error:', error);\n }\n }\n\n destroy(error: Error | unknown, scope?: A_Scope): Promise<any> {\n this.res.end();\n return super.destroy(scope);\n }\n\n // Explicit JSON response\n public json(\n data: object = this.toResponse()\n ): void {\n const logger = A_Context.scope(this).resolve(A_Logger);\n\n if (this.headersSent) {\n logger.warning('Response headers already sent, cannot send response again.');\n return;\n }\n this.res.setHeader('Content-Type', 'application/json');\n this.res.writeHead(this.statusCode);\n this.res.end(JSON.stringify(data));\n }\n\n // Set HTTP status code\n public status(code: number): this {\n this.res.statusCode = code;\n return this;\n }\n\n writeHead(statusCode: number, headers?: Record<string, string> | IncomingHttpHeaders | any) {\n this.res.writeHead(statusCode, headers);\n }\n\n\n setHeader(key: string, value: string) {\n this.res.setHeader(key, value);\n }\n\n getHeader(key: string): string | number | string[] | undefined {\n return this.res.getHeader(key) as string | number | string[] | undefined;\n }\n\n\n add(key: string, data: _ResponseType) {\n this.data.set(key, data);\n }\n\n\n toResponse(): A_SERVER_TYPES__SendResponseObject<_ResponseType> {\n return Array.from(this.data.entries()).reduce((acc, [key, value]) => {\n if (value instanceof A_Entity)\n acc[key] = value.toJSON();\n else\n\n acc[key] = value;\n return acc;\n }, {});\n }\n}","import { createServer, IncomingMessage, Server, ServerResponse } from \"http\";\nimport { A_SERVER_TYPES__ServerFeature, A_SERVER_TYPES__ServerFeatures } from \"./A-Service.container.types\";\nimport { A_Server } from \"@adaas/a-server/context/A-Server/A_Server.context\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport crypto from 'crypto';\nimport { A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY, A_TYPES__ServerENVVariables } from \"@adaas/a-server/constants/env.constants\";\nimport { A_Concept, A_Container, A_Feature, A_IdentityHelper, A_Scope } from \"@adaas/a-concept\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\n\n\n/**\n * A-Service is a container that can run different types of services, such as HTTP servers, workers, etc.\n * Depending on the provided config and configuration, it will load the necessary components and start the service.\n * \n */\nexport class A_Service extends A_Container {\n\n private server!: Server;\n port!: number;\n\n @A_Concept.Load()\n async load() {\n\n let config: A_Config<A_TYPES__ServerENVVariables>;\n let aServer: A_Server;\n\n if (!this.scope.has(A_Config<A_TYPES__ServerENVVariables>)) {\n const config = new A_Config<A_TYPES__ServerENVVariables>({\n variables: [...Array.from(A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY)],\n defaults: {\n A_SERVER_PORT: 3000\n }\n });\n\n this.scope.register(config);\n }\n\n config = this.scope.resolve(A_Config) as A_Config<A_TYPES__ServerENVVariables>;\n\n\n if (!this.scope.has(A_Server)) {\n aServer = new A_Server({\n port: config.get('A_SERVER_PORT'),\n name: this.name,\n version: 'v1'\n });\n }\n\n // Set the server to listen on port 3000\n this.port = config.get('A_SERVER_PORT');\n\n // Create the HTTP server\n this.server = createServer(this.onRequest.bind(this));\n\n }\n\n protected listen(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.server.listen(this.port, () => {\n resolve();\n });\n });\n }\n\n protected close(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.server.close(() => {\n resolve();\n });\n });\n }\n\n\n @A_Concept.Start()\n /**\n * Start the server\n */\n async start() {\n await this.beforeStart();\n\n await this.listen();\n\n await this.afterStart();\n }\n\n\n @A_Feature.Define({ invoke: true })\n async beforeStart() { }\n\n @A_Feature.Define({ invoke: true })\n async afterStart() { }\n\n\n\n @A_Concept.Stop()\n /**\n * Stop service \n */\n async stop() {\n await this.call(A_SERVER_TYPES__ServerFeature.beforeStop);\n\n await this.server.close();\n\n await this.call(A_SERVER_TYPES__ServerFeature.afterStop)\n }\n\n @A_Feature.Define({\n name: A_SERVER_TYPES__ServerFeature.beforeRequest,\n invoke: true\n })\n async beforeRequest(scope: A_Scope) { }\n\n @A_Feature.Define({\n name: A_SERVER_TYPES__ServerFeature.beforeRequest,\n invoke: true\n })\n async afterRequest(scope: A_Scope) { }\n\n @A_Feature.Define({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n invoke: false\n })\n async onRequest(\n request: IncomingMessage,\n response: ServerResponse\n ) {\n const scope = new A_Scope({\n name: `a-server-request::${Date.now()}`,\n });\n\n // We need it to stop feature execution in case request ends\n const { req, res } = await this.convertToAServer(request, response);\n\n try {\n scope.register(req);\n scope.register(res);\n\n scope.inherit(this.scope);\n\n await this.beforeRequest(scope);\n await this.call(A_SERVER_TYPES__ServerFeature.onRequest, scope);\n await this.afterRequest(scope);\n\n await res.status(200).send();\n\n } catch (error) {\n \n const logger = this.scope.resolve(A_Logger);\n\n logger.error(error);\n\n return res.failed(error);\n }\n }\n\n\n\n protected async convertToAServer(\n request: IncomingMessage,\n response: ServerResponse\n ): Promise<{ req: A_Request, res: A_Response }> {\n\n if (!request.method || !request.url)\n throw new Error('Request method or url is missing');\n\n const id = this.generateRequestId(request.method, request.url);\n\n const req = new A_Request({ id, request, scope: this.scope.name });\n const res = new A_Response({ id, response, scope: this.scope.name });\n\n await req.init();\n await res.init();\n\n return { req, res };\n }\n\n protected generateRequestId(\n method: string,\n url: string\n ): string {\n // Use the current time, request URL, and a few other details to create a unique ID\n const hash = crypto.createHash('sha256');\n const timeId = A_IdentityHelper.generateTimeId();\n const randomValue = Math.random().toString(); // Adds extra randomness\n\n hash.update(`${timeId}-${method}-${url}-${randomValue}`);\n return `${timeId}-${hash.digest('hex')}`;\n }\n\n @A_Feature.Define({ invoke: true })\n async beforeStop() { }\n\n @A_Feature.Define({ invoke: true })\n async afterStop() { }\n}","import { A_SERVER_TYPES__ProxyConfigConstructorConfig } from \"./A_ProxyConfig.types\";\n\nexport const PROXY_CONFIG_DEFAULTS: A_SERVER_TYPES__ProxyConfigConstructorConfig = {\n path: '/',\n hostname: 'localhost',\n port: 80,\n method: 'GET',\n headers: {},\n protocol: 'http'\n};\n","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ProxyConfigConstructor, A_SERVER_TYPES__ProxyConfigConstructorConfig, A_SERVER_TYPES__RoutesConfig } from \"./A_ProxyConfig.types\";\nimport { PROXY_CONFIG_DEFAULTS } from \"./A_ProxyConfig.constants\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\n\n\n\nexport class A_ProxyConfig extends A_Fragment {\n\n protected readonly _configs: Array<A_SERVER_TYPES__RoutesConfig>\n\n constructor(\n /**\n * Setup proxy configs, where key is the path to match, and value is either a full URL or a partial config object\n */\n configs: A_SERVER_TYPES__ProxyConfigConstructor = {}\n ) {\n super();\n\n this._configs = Object.entries(configs).map(([path, config]) => {\n\n const targetUrl = new URL(typeof config === 'string' ? config : config.hostname || ''); // parse hostname, may include scheme\n\n const port =\n targetUrl.port ||\n (targetUrl.protocol === \"https:\" ? '443' : '80');\n\n\n const prepared = {\n ...PROXY_CONFIG_DEFAULTS,\n ...(typeof config === 'string' ? {\n path,\n port: parseInt(port),\n protocol: targetUrl.protocol,\n hostname: targetUrl.hostname\n } : config)\n }\n\n return {\n route: new A_Route(prepared.path, prepared.method),\n hostname: prepared.hostname,\n port: prepared.port,\n headers: prepared.headers,\n protocol: prepared.protocol\n }\n });\n }\n\n /**\n * Returns all configured proxy configs\n * \n */\n get configs(): Array<A_SERVER_TYPES__RoutesConfig> {\n return this._configs;\n }\n\n\n /**\n * Checks if a given path is configured in the proxy\n * \n * @param path \n * @returns \n */\n has(path: string): boolean {\n return this._configs.some(route => route.route.toRegExp().test(path));\n }\n\n /**\n * Returns the proxy configuration for a given path, if exists\n *\n * @param path \n * @returns \n */\n config(path: string): A_SERVER_TYPES__RoutesConfig | undefined {\n \n\n return this._configs.find(route => route.route.toRegExp().test(path));\n }\n}","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\n\n\n\nexport class A_StaticConfig extends A_Fragment {\n\n readonly directories: Array<string>\n\n constructor(\n /**\n * Setup directories to serve static files from, comma separated\n */\n directories: string[] = []\n ) {\n super();\n\n this.directories = directories;\n }\n\n\n\n /**\n * Checks if a given path is configured in the proxy\n * \n * @param path \n * @returns \n */\n has(path: string): false | string {\n\n const found = this.directories.find(dir => {\n return new RegExp(`^\\/${dir.startsWith('/') ? dir.slice(1) : dir}/?.*`).test(path)\n });\n return !!found && found;\n }\n}","import { A_Fragment } from \"@adaas/a-concept\";\n\n\n\nexport class A_ListQueryFilter<FilterFields extends string[]> extends A_Fragment {\n\n protected parsedQuery!: Record<FilterFields[number], string>;\n\n constructor(\n protected _query: string | Partial<Record<FilterFields[number], string>> = {},\n protected defaults: Partial<Record<FilterFields[number], string>> = {}\n ) {\n super();\n this.parsedQuery = this.parseQueryString(_query);\n }\n\n\n get query() {\n return this._query;\n }\n\n\n get(property: FilterFields[number], defaultValue: string = '') {\n return this.parsedQuery[property] || this.defaults[property] || defaultValue;\n }\n\n protected parseQueryString(value: string | Partial<Record<FilterFields[number], string>> = {}): Record<FilterFields[number], string> {\n if (typeof value === 'string') {\n return value.split('&').reduce((acc, part) => {\n const [key, val] = part.split('=');\n acc[decodeURIComponent(key)] = decodeURIComponent(val || '');\n return acc;\n }, {}) as Record<FilterFields[number], string>;\n }\n return value as Record<FilterFields[number], string>;\n }\n}","import { A_Entity, A_Fragment, ASEID } from \"@adaas/a-concept\"\nimport { A_SERVER_TYPES__AEntityFactoryConstructor1, A_SERVER_TYPES__AEntityFactoryConstructor2 } from \"./A-EntityFactory.context.types\";\n\n\nexport class A_EntityFactory extends A_Fragment {\n\n\n private _entities: Map<string, { new(...args: any[]): any }> = new Map();\n\n\n constructor(\n map: A_SERVER_TYPES__AEntityFactoryConstructor1\n )\n constructor(\n entities: A_SERVER_TYPES__AEntityFactoryConstructor2\n )\n constructor(\n map: A_SERVER_TYPES__AEntityFactoryConstructor1,\n entities: A_SERVER_TYPES__AEntityFactoryConstructor2\n )\n constructor(\n param1: A_SERVER_TYPES__AEntityFactoryConstructor1 | A_SERVER_TYPES__AEntityFactoryConstructor2,\n param2?: A_SERVER_TYPES__AEntityFactoryConstructor2\n ) {\n super();\n\n this._setEntities(param1);\n this._setEntities(param2);\n }\n\n\n protected _setEntities(\n entities: A_SERVER_TYPES__AEntityFactoryConstructor2 | A_SERVER_TYPES__AEntityFactoryConstructor1 = []\n ) {\n if (Array.isArray(entities)) {\n entities.forEach((entity) => {\n this._entities.set(entity.entity, entity);\n });\n } else {\n Object.keys(entities).forEach((key) => {\n this._entities.set(key, entities[key]);\n });\n }\n }\n\n\n add(\n key: string,\n entity: typeof A_Entity\n ): void\n add(\n entity: typeof A_Entity\n ): void\n add(\n param1: string | typeof A_Entity,\n param2?: typeof A_Entity\n ): void {\n switch (true) {\n case typeof param1 === 'string' && !!param2:\n this._entities.set(param1, param2);\n\n break;\n\n case typeof param1 !== 'string':\n this._entities.set(param1.entity, param1);\n\n break;\n }\n }\n \n\n\n has(\n aseid: ASEID\n ): boolean\n has(\n /**\n * The name of the entity\n */\n entity: string\n ): boolean\n has(\n /**\n * The ASEID of the entity\n */\n aseid: string\n ): boolean\n has(\n param1: string | ASEID\n ): boolean {\n let name: string;\n\n switch (true) {\n case param1 instanceof ASEID:\n name = param1.entity;\n\n break;\n\n case !(param1 instanceof ASEID) && ASEID.isASEID(param1):\n name = new ASEID(param1).entity;\n\n break;\n\n default:\n name = param1;\n\n break;\n }\n\n return this._entities.has(name);\n }\n\n\n /**\n * Resolves the entity constructor by the entity name\n * \n * @param entity \n */\n resolve(\n entity: string\n ): { new(...args: any[]): A_Entity } | undefined\n resolve(\n aseid: string\n ): { new(...args: any[]): A_Entity } | undefined\n resolve(\n aseid: ASEID\n ): { new(...args: any[]): A_Entity } | undefined\n resolve(\n param1: string | ASEID\n ): { new(...args: any[]): A_Entity } | undefined {\n\n let name: string;\n\n switch (true) {\n case param1 instanceof ASEID:\n name = param1.entity;\n\n break;\n\n case typeof param1 === 'string' && ASEID.isASEID(param1):\n\n name = new ASEID(param1).entity;\n\n break;\n\n default:\n name = param1;\n\n break;\n }\n\n return this._entities.get(name);\n }\n\n\n\n resolveByName(\n name: string\n ): { new(...args: any[]): A_Entity } | undefined {\n return this._entities.get(name);\n }\n\n}","import {\n A_Context, A_Entity,\n ASEID,\n} from \"@adaas/a-concept\";\nimport {\n A_SERVER_TYPES__A_EntityListConstructor,\n A_SERVER_TYPES__A_EntityListPagination,\n A_SERVER_TYPES__A_EntityListSerialized\n} from \"./A_EntityList.entity.types\";\n\n\n\n/**\n * A-EntityList\n * \n * Entity that represents a list of entities with pagination of particular type\n */\nexport class A_EntityList<\n EntityType extends A_Entity = A_Entity,\n> extends A_Entity<\n A_SERVER_TYPES__A_EntityListConstructor,\n A_SERVER_TYPES__A_EntityListSerialized\n> {\n\n static get scope(): string {\n return 'a-server';\n }\n\n protected _entityConstructor!: new (...args: ConstructorParameters<typeof A_Entity>) => EntityType;\n protected _items: Array<EntityType> = [];\n protected _pagination: A_SERVER_TYPES__A_EntityListPagination = {\n total: 0,\n page: 1,\n pageSize: 10\n };\n\n\n /**\n * Returns the entity constructor used for the list\n */\n get entityConstructor(): new (...args: ConstructorParameters<typeof A_Entity>) => EntityType {\n return this._entityConstructor;\n }\n\n /**\n * Returns the list of items contained in the entity list\n */\n get items(): Array<EntityType> {\n return this._items;\n }\n\n /**\n * Returns pagination information about the entity list\n */\n get pagination(): A_SERVER_TYPES__A_EntityListPagination {\n return this._pagination;\n }\n\n\n\n\n /**\n * Creates a new instance of A_EntityList\n * \n * @param newEntity \n */\n fromNew(newEntity: A_SERVER_TYPES__A_EntityListConstructor): void {\n this.aseid = new ASEID({\n concept: A_Context.root.name,\n scope: 'default',\n entity: 'a-list' + (newEntity.name ? `.${newEntity.name}` : ''),\n id: (new Date()).getTime().toString(),\n });\n\n this._entityConstructor = newEntity.constructor as new (...args: any[]) => EntityType;\n }\n\n\n\n /**\n * Allows to convert Repository Response data to EntityList instance\n * \n * [!] This method does not load the data from the repository, it only converts the data to the EntityList instance\n * \n * @param items \n * @param pagination \n */\n fromList(\n items: Array<EntityType> | Array<ReturnType<EntityType['toJSON']>>,\n pagination?: A_SERVER_TYPES__A_EntityListPagination\n ) {\n this._items = items.map(item => {\n if (item instanceof A_Entity) {\n return item as EntityType;\n } else {\n const entity = new this._entityConstructor(item);\n return entity;\n }\n });\n\n if (pagination) {\n this._pagination = {\n total: pagination.total,\n page: pagination.page,\n pageSize: pagination.pageSize\n }\n }\n }\n\n\n\n /**\n * Serializes the EntityList to a JSON object\n * \n * @returns \n */\n toJSON(): A_SERVER_TYPES__A_EntityListSerialized<EntityType> {\n return {\n ...super.toJSON(),\n items: this._items.map(i => i.toJSON()) as ReturnType<EntityType['toJSON']>[],\n pagination: this._pagination\n }\n }\n}\n","import { A_Container, A_Feature, A_Inject, } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_Server } from \"@adaas/a-server/context/A-Server/A_Server.context\";\nimport { A_SERVER_TYPES__ServerLoggerEnvVariables, A_SERVER_TYPES__ServerLoggerRouteParams } from \"./A_ServerLogger.component.types\";\nimport { A_Service } from \"@adaas/a-server/containers/A-Service/A-Service.container\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_SERVER_TYPES__ResponseEvent } from \"@adaas/a-server/entities/A-Response/A-Response.entity.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_SERVER_TYPES__RequestEvent } from \"@adaas/a-server/entities/A-Request/A-Request.entity.types\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\nexport class A_ServerLogger extends A_Logger {\n\n protected declare config: A_Config<A_SERVER_TYPES__ServerLoggerEnvVariables>\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ResponseEvent.Finish,\n scope: [A_Response]\n })\n async onRequestEnd(\n @A_Inject(A_Request) request: A_Request,\n @A_Inject(A_Response) response: A_Response\n ) {\n\n this.route({\n method: request.method,\n url: request.url,\n status: response.statusCode,\n responseTime: response.duration\n });\n }\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__RequestEvent.Error,\n })\n async onRequestError(\n @A_Inject(A_Request) request: A_Request\n ) {\n }\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.afterStart,\n scope: [A_Service]\n })\n logStart(\n @A_Inject(A_Service) container: A_Service,\n ): void {\n this.serverReady({\n port: container.port,\n app: {\n name: container.name,\n }\n })\n }\n\n\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.afterStop,\n scope: [A_Service]\n })\n logStop(\n @A_Inject(A_Server) server: A_Server,\n ) {\n this.log('red', `Server ${server.name} stopped`);\n }\n\n\n\n\n metrics() {\n\n }\n\n\n\n routes(routes: Array<A_Route>) {\n const time = this.getTime();\n\n console.log(`\\x1b[36m[${this.scope.name}] |${time}| Exposed Routes:\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\n${routes.map(route => `${' '.repeat(this.scopeLength + 3)}| [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.path}`).join('\\n')\n }\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\\x1b[0m`);\n\n }\n\n /**\n * Logs the route information based on status code\n * \n * @param route \n */\n route(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n\n switch (route.status) {\n case 200:\n this.log200(route);\n break;\n case 404:\n this.log404(route);\n break;\n case 500:\n this.log500(route);\n break;\n case 400:\n this.log400(route);\n break;\n default:\n this.logDefault(route);\n break;\n }\n }\n\n\n log200(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_200'))\n return\n console.log(`\\x1b[32m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n log404(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_404'))\n return;\n\n console.log(`\\x1b[33m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n log500(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_500'))\n return;\n\n console.log(`\\x1b[31m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n log400(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_400'))\n return;\n console.log(`\\x1b[33m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n logDefault(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_DEFAULT'))\n return\n console.log(`\\x1b[36m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n\n serverReady(\n params: {\n port: number,\n\n app: {\n name: string,\n version?: string\n }\n }\n ) {\n const processId = process.pid;\n\n console.log(`\\x1b[36m[${this.scope.name}] |${this.getTime()}| Server Ready:\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\n${' '.repeat(this.scopeLength + 3)}| ${params.app.name} v${params.app.version || '0.0.1'} is running on port ${params.port}\n${' '.repeat(this.scopeLength + 3)}| Process ID: ${processId}\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\n${' '.repeat(this.scopeLength + 3)}| ==============================\n${' '.repeat(this.scopeLength + 3)}| LISTENING... \n${' '.repeat(this.scopeLength + 3)}| ==============================\n\\x1b[0m`);\n }\n\n\n /**\n * Displays a proxy routes \n * \n * @param params \n */\n proxy(\n params: {\n original: string,\n destination: string,\n }\n ) {\n console.log(`\\x1b[35m[${this.scope.name}] |${this.getTime()}| Proxy:\n${' '.repeat(this.scopeLength + 3)}| ${params.original} -> ${params.destination}\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\\x1b[0m`);\n }\n\n}","import { A_Component, A_TYPES__ComponentMeta } from \"@adaas/a-concept\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\n\n\nexport enum A_SERVER_TYPES__RouterMethod {\n POST = 'POST',\n GET = 'GET',\n PUT = 'PUT',\n DELETE = 'DELETE',\n PATCH = 'PATCH',\n DEFAULT = 'DEFAULT'\n}\n\n\nexport type A_TYPES__ARouterComponentMeta = {\n [A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES]: Map<string, A_TYPES__ARouterDefineRoute>\n} & A_TYPES__ComponentMeta\n\n\nexport type A_TYPES__ARouterDefineRoute = {\n component: A_Component,\n handler: string,\n route: A_Route\n}\n\n\nexport enum A_SERVER_TYPES__ARouterComponentMetaKey {\n ROUTES = 'ROUTES'\n\n}\n\n\n\nexport type A_SERVER_TYPES__ARouterRouteConfig = {\n path: string | RegExp;\n version: string;\n prefix: string;\n} ","import {\n A_Component,\n A_Concept,\n A_Context,\n A_Feature,\n A_Feature_Define,\n A_Feature_Extend,\n A_IdentityHelper,\n A_Inject,\n A_Meta,\n A_Scope,\n A_TypeGuards\n} from \"@adaas/a-concept\";\nimport { A_Service } from \"@adaas/a-server/containers/A-Service/A-Service.container\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport {\n A_SERVER_TYPES__ARouterComponentMetaKey,\n A_SERVER_TYPES__ARouterRouteConfig,\n A_SERVER_TYPES__RouterMethod,\n A_TYPES__ARouterComponentMeta,\n A_TYPES__ARouterDefineRoute\n} from \"./A-Router.component.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_ServerLogger } from \"../A-ServerLogger/A_ServerLogger.component\";\nimport { A_TYPES__Required } from \"@adaas/a-concept/dist/src/types/A_Common.types\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\n\nexport class A_Router extends A_Component {\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n\n /**\n * Allows to define a custom route for POST requests\n * \n * @param path \n * @returns \n */\n static Post(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n\n\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.POST,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for GET requests\n * \n * @param path \n * @returns \n */\n static Get(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.GET,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for PUT requests\n * \n * @param path \n * @returns \n */\n static Put(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.PUT,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for DELETE requests\n * \n * @param path \n * @returns \n */\n static Delete(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.DELETE,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for PATCH requests\n * \n * @param path \n * @returns \n */\n static Patch(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.PATCH,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for DEFAULT requests\n * \n * @param path \n * @returns \n */\n static Default(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.DEFAULT,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n\n static routes: Array<A_Route> = [];\n\n /**\n * Private method to have the same signature for all route methods\n * \n * @param method \n * @param path \n * @returns \n */\n private static defineRoute(\n config: A_SERVER_TYPES__ARouterRouteConfig & { method: A_SERVER_TYPES__RouterMethod }\n ) {\n const route = typeof config.path === 'string' || config.path instanceof RegExp\n ? new A_Route(\n `/${config.prefix}/${config.version}${config.path instanceof RegExp ? config.path.source : config.path.startsWith('/') ? config.path : `/${config.path}`}`,\n config.method)\n : config.path;\n\n this.routes.push(route);\n\n return function decorator(\n target: A_Component,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n\n const meta: A_Meta<A_TYPES__ARouterComponentMeta> = A_Context.meta<A_TYPES__ARouterComponentMeta>(target as any);\n\n const routes = meta.get(A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES) || new Map<string, A_TYPES__ARouterDefineRoute>();\n\n const searchKey = route.toAFeatureExtension(['A_Router', 'A_Service']);\n\n routes.set(searchKey.source, {\n component: target,\n handler: propertyKey,\n route\n });\n\n meta.set(A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES, routes);\n\n A_Feature_Define({\n name: searchKey.source,\n invoke: false\n })(target, propertyKey, descriptor)\n\n return A_Feature_Extend(searchKey)(target, propertyKey, descriptor);\n }\n }\n\n\n // =====================================================\n // ================ Concept Lifecycle ========================\n // =====================================================\n\n @A_Concept.Load()\n protected async load(\n @A_Inject(A_ServerLogger) logger: A_ServerLogger\n ): Promise<void> {\n logger.routes(A_Router.routes);\n }\n\n\n\n // =======================================================\n // ================ Feature Definition=====================\n // =======================================================\n // @A_Feature.Define({\n // invoke: false\n // })\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n scope: [A_Service],\n })\n async identifyRoute(\n @A_Inject(A_Request) request: A_Request,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Config) config: A_Config,\n @A_Inject(A_Logger) logger: A_Logger\n ) {\n\n const route = request.route;\n\n if (config.get('A_CONCEPT_ENVIRONMENT') === 'development') {\n logger.log(`Incoming request: ${request.method} ${request.url}`);\n logger.log(`Identified route: ${route.toString()}`);\n }\n\n\n /**\n * just execute all listeners on the Route\n * url example: /api/v1/users/123\n * OR\n * url example: /api/v1/users\n * => Then The feature will be \"GET::/api/v1/users\"\n * And it will return all stages that are similar to the feature name \n */\n\n const feature = new A_Feature({\n name: route.toString(),\n component: this,\n })\n\n\n for (const stage of feature) {\n if (A_TypeGuards.isComponentConstructor(stage.definition.component)) {\n\n const meta: A_Meta<A_TYPES__ARouterComponentMeta> = A_Context.meta<A_TYPES__ARouterComponentMeta>(stage.definition.component);\n\n const routes = meta.get(A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES);\n\n if (routes) {\n const currentRoute = routes.get(stage.definition.name || '');\n\n if (currentRoute) {\n request.params = {\n ...request.params,\n ...currentRoute.route.extractParams(request.url)\n };\n }\n }\n }\n\n const stageScope = new A_Scope({\n name: `a-route--${A_IdentityHelper.generateTimeId()}`,\n entities: [request],\n }, {\n parent: scope\n });\n\n\n await stage.process(stageScope);\n }\n\n\n console.log('Finished processing route for request:', request.method, request.url);\n }\n}","import { A_Component, A_Context, A_Feature, A_Inject, A_Scope, A_TYPES__Entity_Constructor, ASEID } from \"@adaas/a-concept\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_EntityFactory } from \"@adaas/a-server/context/A-EntityFactory/A-EntityFactory.context\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_ServerError } from \"../A-ServerError/A-ServerError.class\";\nimport { A_Config, A_Manifest } from \"@adaas/a-utils\";\nimport { A_ListQueryFilter } from \"@adaas/a-server/context/A-ListQueryFilter/A_ListQueryFilter.context\";\nimport { A_EntityList } from \"@adaas/a-server/entities/A_EntityList/A_EntityList.entity\";\n\n\n\nexport class A_EntityController extends A_Component {\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n @A_Router.Get({\n path: '/:type',\n version: 'v1',\n prefix: 'a-list'\n })\n async list(\n @A_Inject(A_Request) request: A_Request<any, any, { type: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Config) config: A_Config<['A_LIST_ITEMS_PER_PAGE', 'A_LIST_PAGE']>\n ) {\n\n const constructor = factory.resolveByName(request.params.type);\n\n if (constructor) {\n\n const entityList = new A_EntityList({\n name: request.params.type,\n scope: scope.name,\n constructor\n });\n\n scope.register(entityList);\n\n const queryFilter = new A_ListQueryFilter(request.query, {\n itemsPerPage: String(config.get('A_LIST_ITEMS_PER_PAGE') || '10'),\n page: String(config.get('A_LIST_PAGE') || '1')\n });\n\n const queryScope = new A_Scope({\n fragments: [queryFilter]\n }).inherit(scope);\n\n await entityList.load(queryScope);\n\n response.add('items', entityList.items);\n response.add('pagination', entityList.pagination);\n }\n }\n\n\n @A_Feature.Define({\n name: 'getEntity',\n invoke: false\n })\n @A_Router.Get({\n path: '/:aseid',\n version: 'v1',\n prefix: 'a-entity'\n })\n async load(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n // Check if the scope has a manifest and if the entity is allowed to save\n // if (\n // scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n // .isAllowed(entity.constructor, 'save')\n // .for(entity.constructor as A_TYPES__Entity_Constructor)\n // )\n // return;\n\n\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.load', 'Invalid ASEID');\n return;\n }\n\n\n const aseid = new ASEID(request.params.aseid);\n\n const constructor = scope.resolveConstructor(aseid.entity);\n\n\n if (constructor) {\n const entity = new constructor(request.params.aseid);\n\n scope.register(entity);\n\n await entity.load();\n\n return response.status(200).json(entity.toJSON());\n }\n else\n throw new A_ServerError({\n title: 'Entity Not Found',\n description: `Entity constructor for ASEID ${request.params.aseid} not found`,\n status: 404,\n });\n }\n\n\n\n @A_Router.Post({\n path: '/',\n version: 'v1',\n prefix: 'a-entity'\n })\n async create(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n const constructor = factory.resolve(request.params.aseid);\n\n if (constructor) {\n const entity = new constructor(request.body);\n\n scope.register(entity);\n\n await entity.save();\n }\n }\n\n\n\n @A_Router.Put({\n path: '/:aseid',\n version: 'v1',\n prefix: 'a-entity'\n })\n async update(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.update', 'Invalid ASEID');\n return;\n }\n\n const constructor = factory.resolve(request.params.aseid);\n\n\n if (constructor) {\n const entity = new constructor(request.body);\n\n scope.register(entity);\n\n await entity.save();\n }\n }\n\n\n @A_Router.Delete({\n path: '/:aseid',\n version: 'v1',\n prefix: 'a-entity'\n })\n async delete(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.delete', 'Invalid ASEID');\n return;\n }\n\n const constructor = factory.resolve(request.params.aseid);\n\n if (constructor) {\n const entity = new constructor(request.params.aseid);\n\n scope.register(entity);\n\n await entity.destroy();\n }\n }\n\n\n\n // @A_Feature.Define({\n // name: 'callEntity',\n // invoke: false\n // })\n @A_Router.Post({\n path: '/:aseid/:action',\n version: 'v1',\n prefix: 'a-entity'\n })\n async callEntity(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string, action: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.callEntity', 'Invalid ASEID');\n return;\n }\n\n const constructor = factory.resolve(request.params.aseid);\n\n if (!constructor) {\n response.add('A_EntityController.callEntity', 'Entity not found');\n return;\n }\n\n const meta = A_Context.meta(constructor);\n\n const targetFeature = meta.features().find(f => f.name === `${constructor.name}.${request.params.action}`);\n\n if (!targetFeature) {\n response.add('A_EntityController.callEntity', 'Feature not found');\n return;\n }\n\n const entity = new constructor(request.params.aseid);\n\n scope.register(entity);\n\n await entity.load(scope);\n\n await entity[targetFeature.handler](scope);\n\n response.add('result', scope.toJSON());\n response.add('entity', entity);\n response.add('type', entity.aseid.entity);\n }\n}","import { A_Component, A_Inject } from \"@adaas/a-concept\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\n\nexport class A_ServerHealthMonitor extends A_Component {\n\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n\n @A_Router.Get({\n path: '/',\n prefix: 'health',\n version: 'v1',\n })\n async get(\n @A_Inject(A_Config) config: A_Config<['VERSION_PATH', 'EXPOSED_PROPERTIES']>,\n @A_Inject(A_Request) request: A_Request,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Logger) logger: A_Logger\n ): Promise<any> {\n logger.log('Health check requested', config.get('A_CONCEPT_ROOT_FOLDER'));\n\n const packageJSON = await import(`${config.get('A_CONCEPT_ROOT_FOLDER')}/package.json`);\n const exposedProperties: Array<string> = config.get('EXPOSED_PROPERTIES')?.split(',') || [\n 'name',\n 'version',\n 'description',\n ];\n\n exposedProperties.forEach(prop => response.add(prop, packageJSON[prop]));\n\n console.log(`Health check accessed: ${request.method} ${request.url}`);\n }\n}","import { A_Component, A_Concept, A_Feature, A_Inject } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_ProxyConfig } from \"@adaas/a-server/context/A-ProxyConfig/A_ProxyConfig.context\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_Logger } from \"@adaas/a-utils\";\nimport http from \"http\";\nimport https from \"https\";\n\n\nexport class A_ServerProxy extends A_Component {\n\n\n @A_Concept.Load()\n async load(\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_ProxyConfig) config: A_ProxyConfig\n ) {\n logger.log(\n 'pink',\n `Proxy routes configured:`,\n config.configs.map(c => c.route).join('\\n')\n );\n }\n\n\n \n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n })\n async onRequest(\n @A_Inject(A_Request) req: A_Request,\n @A_Inject(A_Response) res: A_Response,\n @A_Inject(A_ProxyConfig) proxyConfig: A_ProxyConfig,\n @A_Inject(A_Logger) logger: A_Logger\n ) {\n return new Promise<void>((resolve, reject) => {\n const { method, url } = req;\n\n const route = new A_Route(url, method);\n const config = proxyConfig.config(route.toString());\n\n if (!config) {\n return resolve(); // nothing to proxy\n }\n\n logger.log(\n \"yellow\",\n `Proxying request ${method} ${url} to ${config.hostname}`,\n config\n );\n\n const client = config.protocol === \"https:\" ? https : http;\n\n const proxyReq = client.request(\n {\n method: config.route.method,\n hostname: config.hostname,\n port: config.port,\n headers: config.headers,\n path: route.path,\n },\n (proxyRes) => {\n if (!res.headersSent) {\n res.writeHead(proxyRes.statusCode || 200, proxyRes.headers);\n }\n proxyRes.on(\"end\", () => {\n\n logger.log(\"green\", `Proxy request to ${config?.hostname} completed`);\n\n resolve();\n });\n\n proxyRes.pipe(res.original);\n }\n );\n\n proxyReq.on(\"error\", (err) => reject(err));\n\n req.pipe(proxyReq);\n });\n }\n\n}","import { A_SERVER_TYPES__CorsConfig } from \"./A_ServerCORS.component.types\";\n\n\n\nexport const A_SERVER_DEFAULTS__CorsConfig: A_SERVER_TYPES__CorsConfig = {\n origin: '*', // Default to allow all origins\n methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],\n headers: ['Content-Type'],\n credentials: false,\n maxAge: 0\n};\n","import { A_Component, A_Feature, A_Inject } from '@adaas/a-concept';\nimport { A_SERVER_TYPES__CorsConfig } from './A_ServerCORS.component.types';\nimport { A_SERVER_DEFAULTS__CorsConfig } from './A_ServerCORS.component.defaults';\nimport { A_SERVER_TYPES__ServerFeature } from '@adaas/a-server/containers/A-Service/A-Service.container.types';\nimport { A_Request } from '@adaas/a-server/entities/A-Request/A-Request.entity';\nimport { A_Response } from '@adaas/a-server/entities/A-Response/A-Response.entity';\nimport { A_Config } from '@adaas/a-utils';\n\n\nexport class A_ServerCORS extends A_Component {\n\n private config!: A_SERVER_TYPES__CorsConfig;\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.beforeStart\n })\n async init(\n @A_Inject(A_Config) config: A_Config<['ORIGIN', 'METHODS', 'HEADERS', 'CREDENTIALS', 'MAX_AGE']>,\n ) {\n this.config = {\n origin: config.get('ORIGIN') || A_SERVER_DEFAULTS__CorsConfig.origin,\n methods: config.get('METHODS') || A_SERVER_DEFAULTS__CorsConfig.methods,\n headers: config.get('HEADERS') || A_SERVER_DEFAULTS__CorsConfig.headers,\n credentials: config.get('CREDENTIALS') || A_SERVER_DEFAULTS__CorsConfig.credentials,\n maxAge: config.get('MAX_AGE') || A_SERVER_DEFAULTS__CorsConfig.maxAge,\n };\n }\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.beforeRequest\n })\n public apply(\n @A_Inject(A_Request) aReq: A_Request,\n @A_Inject(A_Response) aRes: A_Response,\n ) {\n\n aRes.setHeader('Access-Control-Allow-Origin', this.config.origin);\n aRes.setHeader('Access-Control-Allow-Methods', this.config.methods.join(', '));\n aRes.setHeader('Access-Control-Allow-Headers', this.config.headers.join(', '));\n\n if (this.config.credentials) {\n aRes.setHeader('Access-Control-Allow-Credentials', 'true');\n }\n\n if (this.config.maxAge) {\n aRes.setHeader('Access-Control-Max-Age', this.config.maxAge.toString());\n }\n\n // Handle preflight OPTIONS requests\n if (aReq.req.method === 'OPTIONS') {\n aRes.status(204).send();\n }\n }\n}\n","import { A_Component, A_Concept, A_Feature, A_Inject } from \"@adaas/a-concept\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { URL } from \"url\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_StaticConfig } from \"@adaas/a-server/context/A-StaticConfig/A-StaticConfig.context\";\nimport { A_Logger } from \"@adaas/a-utils\";\n\n\nexport class A_StaticLoader extends A_Component {\n\n\n @A_Concept.Load()\n async load(\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_StaticConfig) config: A_StaticConfig\n ) {\n logger.log(\n 'pink',\n `Static directories configured:`,\n config.directories.join('\\n')\n );\n }\n\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n })\n async onRequest(\n @A_Inject(A_Request) req: A_Request,\n @A_Inject(A_Response) res: A_Response,\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_StaticConfig) config: A_StaticConfig\n ) {\n\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n return; // Only handle GET and HEAD requests\n }\n\n const { method, url } = req;\n const route = new A_Route(url, method);\n\n const staticDirConfig = config.has(route.path)\n\n if (!staticDirConfig) {\n return; // No static config for this path\n }\n\n const staticDir = path.resolve(process.cwd(), staticDirConfig);\n\n if (!fs.existsSync(staticDir) || !fs.statSync(staticDir).isDirectory()) {\n logger.log(\"red\", `Static directory ${staticDir} does not exist or is not a directory.`);\n return;\n }\n\n await this.serveFile(route.path.startsWith('/') ? route.path.slice(1) : route.path, res);\n }\n\n\n\n protected getMimeType(ext: string): string {\n const mimeTypes: Record<string, string> = {\n \".html\": \"text/html\",\n \".js\": \"application/javascript\",\n \".css\": \"text/css\",\n \".json\": \"application/json\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".svg\": \"image/svg+xml\",\n \".ico\": \"image/x-icon\",\n \".txt\": \"text/plain\",\n };\n\n return mimeTypes[ext.toLowerCase()] || \"application/octet-stream\";\n }\n\n\n protected safeFilePath(staticDir: string, reqUrl: string, host?: string): string {\n const parsedUrl = new URL(reqUrl || \"/\", `http://${host || \"localhost\"}`);\n let pathname = decodeURIComponent(parsedUrl.pathname);\n\n // Prevent path traversal attacks\n pathname = pathname.replace(/\\.\\.[\\/\\\\]/g, \"\");\n\n let filePath = path.join(staticDir, pathname);\n if (!fs.existsSync(filePath))\n throw new Error(`File not found: ${filePath}`);\n\n return filePath;\n }\n\n\n protected serveFile(filePath: string, res: A_Response): Promise<void> {\n\n\n return new Promise<void>((resolve, reject) => {\n\n if (fs.existsSync(filePath)) {\n const ext = path.extname(filePath);\n const contentType = this.getMimeType(ext);\n\n res.writeHead(200, { \"Content-Type\": contentType });\n const stream = fs.createReadStream(filePath);\n stream.pipe(res.original);\n\n stream.on('end', () => {\n resolve();\n });\n\n stream.on(\"error\", (err) => {\n reject(new Error(`File stream error: ${err.message}`));\n });\n } else {\n reject(new Error(`File not found: ${filePath}`));\n }\n\n\n resolve();\n });\n }\n\n}\n\n\n","import { A_Component, A_Container, A_Context, A_Feature, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\n\n\n\nexport class A_Controller extends A_Component {\n\n\n @A_Router.Post({\n path: '/:component/:operation',\n version: 'v1',\n prefix: 'a-component'\n })\n async callEntityMethod(\n @A_Inject(A_Request) request: A_Request<any, any, {\n component: string,\n operation: string\n }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n\n // check step by step each parameter to ensure they are valid\n\n if (!scope.has(request.params.component))\n return\n\n if (!request.params.operation || typeof request.params.operation !== 'string')\n return;\n\n\n const possibleComponent = scope.resolve(request.params.component);\n\n if (\n !possibleComponent\n ||\n ![A_Component, A_Container]\n .some(c => possibleComponent instanceof c)\n )\n return;\n\n const component = possibleComponent as A_Component | A_Container;\n\n const meta = A_Context.meta(component);\n\n const targetFeature = meta.features().find(f => f.name === `${component.constructor.name}.${request.params.operation}`);\n\n if (!targetFeature)\n return;\n\n\n await component.call(request.params.operation, scope);\n }\n}","import { A_Component, A_Feature, A_Inject, A_Scope } from \"@adaas/a-concept\"\nimport { A_EntityFactory } from \"@adaas/a-server/context/A-EntityFactory/A-EntityFactory.context\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_EntityList } from \"@adaas/a-server/entities/A_EntityList/A_EntityList.entity\";\nimport { A_ListQueryFilter } from \"@adaas/a-server/context/A-ListQueryFilter/A_ListQueryFilter.context\";\nimport { A_Config } from \"@adaas/a-utils\";\n\n\n\nexport class A_ListingController extends A_Component {\n\n // @A_Feature.Define({\n // name: 'listEntities',\n // invoke: false\n // })\n @A_Router.Get({\n path: '/:type',\n version: 'v1',\n prefix: 'a-list'\n })\n async list(\n @A_Inject(A_Request) request: A_Request<any, any, { type: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Config) config: A_Config<['A_LIST_ITEMS_PER_PAGE', 'A_LIST_PAGE']>\n ) {\n\n const constructor = factory.resolveByName(request.params.type);\n\n if (constructor) {\n\n const entityList = new A_EntityList({\n name: request.params.type,\n scope: scope.name,\n constructor\n });\n\n scope.register(entityList);\n\n const queryFilter = new A_ListQueryFilter(request.query, {\n itemsPerPage: String(config.get('A_LIST_ITEMS_PER_PAGE') || '10'),\n page: String(config.get('A_LIST_PAGE') || '1')\n });\n\n const queryScope = new A_Scope({\n fragments: [queryFilter]\n }).inherit(scope);\n\n await entityList.load(queryScope);\n\n response.add('items', entityList.items);\n response.add('pagination', entityList.pagination);\n }\n }\n}","import { A_Component, A_Container, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Command } from \"@adaas/a-utils\";\n\n\nexport class A_CommandController extends A_Component {\n\n @A_Router.Get({\n path: \"/:command/execute\",\n version: \"v1\",\n prefix: \"a-command\"\n })\n async handleCommand(\n @A_Inject(A_Request) req: A_Request<any, any, { command: string }>,\n @A_Inject(A_Response) res: A_Response,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Container) container: A_Container,\n ): Promise<void> {\n\n const commandName = req.params.command;\n\n const CommandConstructor = scope.resolveConstructor<A_Command>(commandName);\n\n if (!CommandConstructor) {\n res.status(404);\n\n throw new Error(`Command ${commandName} not found`);\n }\n\n const command = new CommandConstructor(req.body);\n\n container.scope.register(command);\n\n await command.execute();\n\n const serialized = command.toJSON();\n\n return res.status(200).json(serialized);\n }\n\n}","import { A_Caller, A_Component, A_Entity, A_Feature, A_Inject, A_Scope, A_TYPES__Entity_Constructor } from \"@adaas/a-concept\";\nimport { A_TYPES__EntityFeatures } from \"@adaas/a-concept/dist/src/global/A-Entity/A-Entity.constants\";\nimport { A_HTTPChannel } from \"@adaas/a-server/channels/A-Http/A-Http.channel\";\nimport { A_EntityList } from \"@adaas/a-server/entities/A_EntityList/A_EntityList.entity\";\nimport { A_Manifest } from \"@adaas/a-utils\";\n\n\n\n\nexport class A_EntityRepository extends A_Component {\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.LOAD,\n scope: {\n include: [A_EntityList]\n }\n })\n async list(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_EntityList,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to load\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'load')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.get(`/a-list/${entity.aseid.entity}`);\n\n entity.fromJSON(response.data);\n }\n\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.LOAD,\n scope: {\n exclude: [A_EntityList]\n }\n })\n async load(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_Entity,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to load\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'load')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.get(`/a-entity/${entity.aseid.toString()}`);\n\n entity.fromJSON(response.data);\n }\n\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.SAVE,\n scope: {\n exclude: [A_EntityList]\n }\n })\n async save(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_Entity,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to save\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'save')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.post(`/a-entity/${entity.aseid.toString()}`, entity.toJSON());\n\n entity.fromJSON(response.data);\n }\n\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.DESTROY,\n scope: {\n exclude: [A_EntityList]\n }\n })\n async destroy(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_Entity,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to destroy\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'destroy')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.delete(`/a-entity/${entity.aseid.toString()}`);\n\n entity.fromJSON(response.data);\n }\n\n\n}"]}
|