{"version":3,"file":"breeze-client-adapter-data-service-odata.mjs","sources":["../../src/adapter-core.ts","../../src/adapter-data-service-odata.ts","../../src/breeze-client-adapter-data-service-odata.ts"],"sourcesContent":["/** Appends parameter to url, with appropriate delimiter */\r\nexport function appendQueryStringParameter(url: string, parameter: string) {\r\n  if (!parameter) return url;\r\n\r\n  let separator = url.endsWith(\"?\") ? \"\" : url.includes(\"?\") ? \"&\" : \"?\";\r\n\r\n  return url + separator + parameter;\r\n}\r\n\r\n/** Encodes the object into query string parameters */\r\nexport function encodeParams(obj: {}) {\r\n  let query = '';\r\n  let subValue: any, innerObj: any, fullSubName: any;\r\n\r\n  for (let name in obj) {\r\n    if (!obj.hasOwnProperty(name)) { continue; }\r\n\r\n    let value = obj[name];\r\n\r\n    if (value instanceof Array) {\r\n      for (let i = 0; i < value.length; ++i) {\r\n        subValue = value[i];\r\n        fullSubName = name + '[' + i + ']';\r\n        innerObj = {};\r\n        innerObj[fullSubName] = subValue;\r\n        query += encodeParams(innerObj) + '&';\r\n      }\r\n    } else if (value && value.toISOString) { // a feature of Date-like things\r\n      query += encodeURIComponent(name) + '=' + encodeURIComponent(value.toISOString()) + '&';\r\n    } else if (value instanceof Object) {\r\n      for (let subName in value) {\r\n        if (obj.hasOwnProperty(name)) {\r\n          subValue = value[subName];\r\n          fullSubName = name + '[' + subName + ']';\r\n          innerObj = {};\r\n          innerObj[fullSubName] = subValue;\r\n          query += encodeParams(innerObj) + '&';\r\n        }\r\n      }\r\n    } else if (value === null) {\r\n      query += encodeURIComponent(name) + '=&';\r\n    } else if (value !== undefined) {\r\n      query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';\r\n    }\r\n  }\r\n\r\n  return query.length ? query.substr(0, query.length - 1) : query;\r\n}\r\n","import * as breeze from 'breeze-client';\r\nimport { appendQueryStringParameter } from './adapter-core';\r\n\r\nlet core = breeze.core;\r\n\r\ndeclare var window: any;\r\ndeclare var document: any;\r\ndeclare var url: any; // needed to access node's url.parse\r\ndeclare var OData: any;\r\n\r\ninterface ODataSaveContext extends breeze.SaveContext {\r\n  tempKeys: breeze.EntityKey[];\r\n  contentKeys: breeze.Entity[];\r\n}\r\n\r\n/** @hidden */\r\nexport class DataServiceODataAdapter extends breeze.AbstractDataServiceAdapter {\r\n  relativeUrl: boolean | ((ds: breeze.DataService, url: string) => string);\r\n  // _catchNoConnectionError = abstractDsaProto._catchNoConnectionError;\r\n  // changeRequestInterceptor = abstractDsaProto.changeRequestInterceptor;\r\n  // _createChangeRequestInterceptor = abstractDsaProto._createChangeRequestInterceptor;\r\n  headers = { \"DataServiceVersion\": \"2.0\" };\r\n\r\n  constructor() {\r\n    super();\r\n    this.name = \"OData\";\r\n  }\r\n\r\n  static register(config?: breeze.BreezeConfig) {\r\n    config = config || breeze.config;\r\n    config.registerAdapter(\"dataService\", DataServiceODataAdapter);\r\n    return config.initializeAdapterInstance(\"dataService\", \"OData\", true) as DataServiceODataAdapter;\r\n  }\r\n\r\n  initialize() {\r\n    OData = core.requireLib(\"OData\", \"Needed to support remote OData services\");\r\n    OData.jsonHandler.recognizeDates = true;\r\n  }\r\n\r\n\r\n  // Absolute URL is the default as of Breeze 1.5.5.  \r\n  // To use relative URL (like pre-1.5.5), add adapterInstance.relativeUrl = true:\r\n  //\r\n  //     let ds = breeze.config.initializeAdapterInstance(\"dataService\", \"webApiOData\");\r\n  //     ds.relativeUrl = true; \r\n  //\r\n  // To use custom url construction, add adapterInstance.relativeUrl = myfunction(dataService, url):\r\n  //\r\n  //     let ds = breeze.config.initializeAdapterInstance(\"dataService\", \"webApiOData\");\r\n  //     ds.relativeUrl = function(dataService, url) {\r\n  //        return somehowConvert(url);\r\n  //     }\r\n  //\r\n\r\n  fetchMetadata(metadataStore: breeze.MetadataStore, dataService: breeze.DataService) {\r\n    let serviceName = dataService.serviceName;\r\n\r\n    let url: string;\r\n    if (this.relativeUrl === true) {\r\n      url = dataService.qualifyUrl('$metadata');\r\n    } else if (core.isFunction(this.relativeUrl)) {\r\n      url = (this.relativeUrl as any)(dataService, '$metadata');\r\n    } else {\r\n      url = this.getAbsoluteUrl(dataService, '$metadata');\r\n    }\r\n\r\n    let mheaders = core.extend({}, this.headers);\r\n    (mheaders as any).Accept = 'application/*; odata.metadata=full';\r\n\r\n    let promise = new Promise((resolve, reject) => {\r\n      // OData.read(url,\r\n      OData.read({\r\n        requestUri: url,\r\n        // headers: { \"Accept\": \"application/json\"}\r\n        headers: mheaders\r\n      },\r\n        function (data: any) {\r\n          // data.dataServices.schema is an array of schemas. with properties of\r\n          // entityContainer[], association[], entityType[], and namespace.\r\n          if (!data || !data.dataServices) {\r\n            let error = new Error(\"Metadata query failed for: \" + url);\r\n            return reject(error);\r\n          }\r\n          let csdlMetadata = data.dataServices;\r\n\r\n          // might have been fetched by another query\r\n          if (!metadataStore.hasMetadataFor(serviceName)) {\r\n            try {\r\n              metadataStore.importMetadata(csdlMetadata);\r\n            } catch (e) {\r\n              return reject(new Error(\"Metadata query failed for \" + url + \"; Unable to process returned metadata: \" + e.message));\r\n            }\r\n\r\n            metadataStore.addDataService(dataService);\r\n          }\r\n\r\n          return resolve(csdlMetadata);\r\n\r\n        }, function (error: any) {\r\n          let err = createError(error, url);\r\n          err.message = \"Metadata query failed for: \" + url + \"; \" + (err.message || \"\");\r\n          return reject(err);\r\n        },\r\n        OData.metadataHandler\r\n      );\r\n    });\r\n\r\n    return promise;\r\n  }\r\n\r\n\r\n\r\n  executeQuery(mappingContext: breeze.MappingContext) {\r\n    let url: string;\r\n    if (this.relativeUrl === true) {\r\n      url = mappingContext.getUrl();\r\n    } else if (core.isFunction(this.relativeUrl)) {\r\n      url = (this.relativeUrl as any)(mappingContext.dataService, mappingContext.getUrl());\r\n    } else {\r\n      url = this.getAbsoluteUrl(mappingContext.dataService, mappingContext.getUrl());\r\n    }\r\n\r\n    // Add query params if .withParameters was used\r\n    let query = mappingContext.query as breeze.EntityQuery;\r\n    if (!core.isEmpty(query.parameters)) {\r\n      let paramString = toQueryString(query.parameters);\r\n      url = appendQueryStringParameter(url, paramString);\r\n    }\r\n\r\n    let promise = new Promise<breeze.QueryResult>((resolve, reject) => {\r\n      OData.read({\r\n        requestUri: url,\r\n        headers: core.extend({}, this.headers)\r\n      },\r\n        function (data: any, response: any) {\r\n          let inlineCount: any;\r\n          if (data.__count) {\r\n            // OData can return data.__count as a string\r\n            inlineCount = parseInt(data.__count, 10);\r\n          }\r\n          // Odata returns different result structure when it returns multiple entities (data.results) vs single entity (data directly).\r\n          // @see http://www.odata.org/documentation/odata-version-2-0/json-format/#RepresentingCollectionsOfEntries\r\n          // and http://www.odata.org/documentation/odata-version-2-0/json-format/#RepresentingEntries\r\n          let results: any;\r\n          if (data.results) {\r\n            results = data.results;\r\n          } else {\r\n            results = data;\r\n          }\r\n          return resolve({ results: results, inlineCount: inlineCount, httpResponse: response, query: query });\r\n        },\r\n        function (error: any) {\r\n          return reject(createError(error, url));\r\n        }\r\n      );\r\n    });\r\n    return promise;\r\n  }\r\n\r\n\r\n  saveChanges(odataSaveContext: breeze.SaveContext, saveBundle: breeze.SaveBundle): Promise<breeze.SaveResult> {\r\n    let adapter = odataSaveContext.adapter = this;\r\n    let saveContext = odataSaveContext as ODataSaveContext;\r\n    let url: string;\r\n    if (this.relativeUrl === true) {\r\n      saveContext.routePrefix = adapter.getRoutePrefix(saveContext.dataService);\r\n      url = saveContext.dataService.qualifyUrl(\"$batch\");\r\n    } else if (core.isFunction(adapter.relativeUrl)) {\r\n      saveContext.routePrefix = (adapter.relativeUrl as Function)(saveContext.dataService, '');\r\n      url = saveContext.routePrefix + '$batch';\r\n    } else {\r\n      saveContext.routePrefix = adapter.getAbsoluteUrl(saveContext.dataService, '');\r\n      url = saveContext.routePrefix + '$batch';\r\n    }\r\n\r\n    let requestData = createChangeRequests(saveContext, saveBundle);\r\n    let tempKeys = saveContext.tempKeys;\r\n    let contentKeys = saveContext.contentKeys;\r\n    let promise = new Promise<breeze.SaveResult>((resolve, reject) => {\r\n      OData.request({\r\n        headers: core.extend({}, this.headers),\r\n        requestUri: url,\r\n        method: \"POST\",\r\n        data: requestData\r\n      }, function (data: any, response: any) {\r\n        let entities: any[] = [];\r\n        let keyMappings: breeze.KeyMapping[] = [];\r\n        let saveResult: breeze.SaveResult = { entities: entities, keyMappings: keyMappings };\r\n        data.__batchResponses.forEach(function (br: any) {\r\n          br.__changeResponses.forEach(function (cr: any) {\r\n            let response = cr.response || cr;\r\n            let statusCode = response.statusCode;\r\n            if ((!statusCode) || statusCode >= 400) {\r\n              reject(createError(cr, url));\r\n              return;\r\n            }\r\n\r\n            let contentId = cr.headers[\"Content-ID\"];\r\n            // Olingo sends different case of 'ID' for the header name.\r\n            if (!contentId) {\r\n              contentId = cr.headers[\"Content-Id\"];\r\n            }\r\n\r\n            let rawEntity = cr.data;\r\n            if (rawEntity) {\r\n              let tempKey = tempKeys[contentId];\r\n              if (tempKey) {\r\n                let entityType = tempKey.entityType;\r\n                if (entityType.autoGeneratedKeyType !== breeze.AutoGeneratedKeyType.None) {\r\n                  let tempValue = tempKey.values[0];\r\n                  let realKey = entityType.getEntityKeyFromRawEntity(rawEntity, breeze.DataProperty.getRawValueFromServer);\r\n                  let keyMapping = { entityTypeName: entityType.name, tempValue: tempValue, realValue: realKey.values[0] };\r\n                  keyMappings.push(keyMapping);\r\n                }\r\n              }\r\n              entities.push(rawEntity);\r\n            } else {\r\n              let origEntity = contentKeys[contentId];\r\n              entities.push(origEntity);\r\n            }\r\n          });\r\n        });\r\n        return resolve(saveResult);\r\n      }, function (err: any) {\r\n        return reject(createError(err, url));\r\n      }, OData.batchHandler);\r\n    });\r\n    return promise;\r\n\r\n  }\r\n\r\n  jsonResultsAdapter: breeze.JsonResultsAdapter = new breeze.JsonResultsAdapter({\r\n    name: \"OData_default\",\r\n\r\n    visitNode: function (node: any, mappingContext: breeze.MappingContext, nodeContext: breeze.NodeContext) {\r\n      let result: any = {};\r\n      if (node == null) return result;\r\n      let metadata = node.__metadata;\r\n      if (metadata != null) {\r\n        // TODO: may be able to make this more efficient by caching of the previous value.\r\n        let entityTypeName = breeze.MetadataStore.normalizeTypeName(metadata.type);\r\n        let et = entityTypeName && mappingContext.entityManager.metadataStore.getEntityType(entityTypeName, true);\r\n        // OData response doesn't distinguish a projection from a whole entity.\r\n        // We'll assume that whole-entity data would have at least as many properties  (<=)\r\n        // as the EntityType has mapped properties on the basis that\r\n        // most projections remove properties rather than add them.\r\n        // If not, assume it's a projection and do NOT treat as an entity\r\n        if (et && et._mappedPropertiesCount <= Object.keys(node).length - 1) {\r\n          // if (et && et._mappedPropertiesCount === Object.keys(node).length - 1) { // OLD\r\n          result.entityType = et;\r\n          let uriKey = metadata.uri || metadata.id;\r\n          if (uriKey) {\r\n            // Strip baseUri to make uriKey a relative uri\r\n            // Todo: why is this necessary when absolute works for every OData source tested?\r\n            let re = new RegExp('^' + mappingContext.dataService.serviceName, 'i');\r\n            uriKey = uriKey.replace(re, '');\r\n          }\r\n          result.extraMetadata = {\r\n            uriKey: uriKey,\r\n            etag: metadata.etag\r\n          };\r\n        }\r\n      }\r\n      // OData v3 - projection arrays will be enclosed in a results array\r\n      if (node.results) {\r\n        result.node = node.results;\r\n      }\r\n\r\n      let propertyName = nodeContext.propertyName;\r\n      result.ignore = node.__deferred != null || propertyName === \"__metadata\" ||\r\n        // EntityKey properties can be produced by EDMX models\r\n        (propertyName === \"EntityKey\" && node.$type && core.stringStartsWith(node.$type, \"System.Data\"));\r\n      return result;\r\n    }\r\n\r\n  });\r\n\r\n  getAbsoluteUrl(dataService: breeze.DataService, url: string) {\r\n    let serviceName = dataService.qualifyUrl('');\r\n    // only prefix with serviceName if not already on the url\r\n    let base = (core.stringStartsWith(url, serviceName)) ? '' : serviceName;\r\n    // If no protocol, turn base into an absolute URI\r\n    if (window && serviceName.indexOf('//') < 0) {\r\n      // no protocol; make it absolute\r\n      base = window.location.protocol + '//' + window.location.host +\r\n        (core.stringStartsWith(serviceName, '/') ? '' : '/') +\r\n        base;\r\n    }\r\n    return base + url;\r\n  }\r\n\r\n  getRoutePrefix(dataService: breeze.DataService) {\r\n    // Get the routePrefix from a Web API OData service name.\r\n    // The routePrefix is presumed to be the pathname within the dataService.serviceName\r\n    // Examples of servicename -> routePrefix:\r\n    //   'http://localhost:55802/odata/' -> 'odata/'\r\n    //   'http://198.154.121.75/service/odata/' -> 'service/odata/'\r\n    let parser: any;\r\n    if (typeof document === 'object') { // browser\r\n      parser = document.createElement('a');\r\n      parser.href = dataService.serviceName;\r\n    } else { // node\r\n      // TODO: how to best handle this\r\n      // assumes existence of node's url.parse method.\r\n      parser = url.parse(dataService.serviceName);\r\n    }\r\n    let prefix = parser.pathname;\r\n    if (prefix[0] === '/') {\r\n      prefix = prefix.substr(1);\r\n    } // drop leading '/'  (all but IE)\r\n    if (prefix.substr(-1) !== '/') {\r\n      prefix += '/';\r\n    }      // ensure trailing '/'\r\n    return prefix;\r\n  }\r\n\r\n}\r\n\r\n// crude serializer.  Doesn't recurse\r\nfunction toQueryString(obj: Object) {\r\n  let parts: string[] = [];\r\n  for (let i in obj) {\r\n    if (obj.hasOwnProperty(i)) {\r\n      parts.push(encodeURIComponent(i) + \"=\" + encodeURIComponent(obj[i]));\r\n    }\r\n  }\r\n  return parts.join(\"&\");\r\n}\r\n\r\n/** Transform data properties while unwrapping entities */\r\nfunction transformValue(prop: breeze.DataProperty, val: any) {\r\n  if (prop.isUnmapped) return undefined;\r\n  if (prop.dataType === breeze.DataType.DateTimeOffset) {\r\n    // The datajs lib tries to treat client dateTimes that are defined as DateTimeOffset on the server differently\r\n    // from other dateTimes. This fix compensates before the save.\r\n    val = val && new Date(val.getTime() - (val.getTimezoneOffset() * 60000));\r\n  } else if (prop.dataType === breeze.DataType.DateOnly) {\r\n    val = breeze.DataType.toDateOnlyString(val);\r\n  } else if ((prop.dataType as breeze.DataType).quoteJsonOData) {\r\n    val = val != null ? val.toString() : val;\r\n  }\r\n  return val;\r\n}\r\n\r\nfunction createChangeRequests(saveContext: ODataSaveContext, saveBundle: breeze.SaveBundle) {\r\n  let changeRequestInterceptor = (saveContext.adapter as DataServiceODataAdapter)._createChangeRequestInterceptor(saveContext, saveBundle);\r\n  let changeRequests: any[] = [];\r\n  let tempKeys: breeze.EntityKey[] = [];\r\n  let contentKeys: breeze.Entity[] = [];\r\n  let entityManager = saveContext.entityManager;\r\n  let helper = entityManager.helper;\r\n  let id = 0;\r\n  let routePrefix = saveContext.routePrefix;\r\n\r\n  saveBundle.entities.forEach(function (entity, index) {\r\n    let aspect = entity.entityAspect;\r\n    id = id + 1; // we are deliberately skipping id=0 because Content-ID = 0 seems to be ignored.\r\n    let request = { headers: { \"Content-ID\": id, \"DataServiceVersion\": \"2.0\" } } as any;\r\n    contentKeys[id] = entity;\r\n    if (aspect.entityState.isAdded()) {\r\n      request.requestUri = routePrefix + entity.entityType.defaultResourceName;\r\n      request.method = \"POST\";\r\n      request.data = helper.unwrapInstance(entity, transformValue);\r\n      tempKeys[id] = aspect.getKey();\r\n    } else if (aspect.entityState.isModified()) {\r\n      updateDeleteMergeRequest(request, aspect, routePrefix!);\r\n      request.method = \"MERGE\";\r\n      request.data = helper.unwrapChangedValues(entity, entityManager.metadataStore, transformValue);\r\n      // should be a PATCH/MERGE\r\n    } else if (aspect.entityState.isDeleted()) {\r\n      updateDeleteMergeRequest(request, aspect, routePrefix!);\r\n      request.method = \"DELETE\";\r\n    } else {\r\n      return;\r\n    }\r\n    request = changeRequestInterceptor.getRequest(request, entity, index);\r\n    changeRequests.push(request);\r\n  });\r\n  saveContext.contentKeys = contentKeys;\r\n  saveContext.tempKeys = tempKeys;\r\n  changeRequestInterceptor.done(changeRequests);\r\n  return {\r\n    __batchRequests: [\r\n      {\r\n        __changeRequests: changeRequests\r\n      }\r\n    ]\r\n  };\r\n\r\n}\r\n\r\nfunction updateDeleteMergeRequest(request: any, aspect: breeze.EntityAspect, routePrefix: string) {\r\n  let uriKey: string;\r\n  let extraMetadata = aspect.extraMetadata;\r\n  if (extraMetadata == null) {\r\n    uriKey = getUriKey(aspect);\r\n    aspect.extraMetadata = {\r\n      uriKey: uriKey\r\n    };\r\n  } else {\r\n    uriKey = extraMetadata.uriKey;\r\n    if (extraMetadata.etag) {\r\n      request.headers[\"If-Match\"] = extraMetadata.etag;\r\n    }\r\n  }\r\n  request.requestUri =\r\n    // use routePrefix if uriKey lacks protocol (i.e., relative uri)\r\n    uriKey.indexOf('//') > 0 ? uriKey : routePrefix + uriKey;\r\n}\r\n\r\nfunction getUriKey(aspect: breeze.EntityAspect) {\r\n  let entityType = aspect.entity!.entityType;\r\n  let resourceName = entityType.defaultResourceName;\r\n  let kps = entityType.keyProperties;\r\n  let uriKey = resourceName + \"(\";\r\n  if (kps.length === 1) {\r\n    uriKey = uriKey + fmtProperty(kps[0], aspect) + \")\";\r\n  } else {\r\n    let delim = \"\";\r\n    kps.forEach(function (kp) {\r\n      uriKey = uriKey + delim + kp.nameOnServer + \"=\" + fmtProperty(kp, aspect);\r\n      delim = \",\";\r\n    });\r\n    uriKey = uriKey + \")\";\r\n  }\r\n  return uriKey;\r\n}\r\n\r\nfunction fmtProperty(prop: breeze.DataProperty, aspect: breeze.EntityAspect) {\r\n  return (prop.dataType as breeze.DataType).fmtOData!(aspect.getPropertyValue(prop.name));\r\n}\r\n\r\nfunction createError(error: any, url: string) {\r\n  // OData errors can have the message buried very deeply - and nonobviously\r\n  // this code is tricky so be careful changing the response.body parsing.\r\n  let result = new Error() as breeze.ServerError;\r\n  let response = error && error.response;\r\n  if (!response) {\r\n    // in case DataJS returns \"No handler for this data\"\r\n    result.message = error;\r\n    result.statusText = error;\r\n    return result;\r\n  }\r\n  result.message = response.statusText;\r\n  result.statusText = response.statusText;\r\n  result.status = response.statusCode;\r\n  // non std\r\n  if (url) result.url = url;\r\n  result.body = response.body;\r\n  if (response.body) {\r\n    let nextErr: any;\r\n    try {\r\n      let body = JSON.parse(response.body);\r\n      result.body = body;\r\n      // OData v3 logic\r\n      if (body['odata.error']) {\r\n        body = body['odata.error'];\r\n      }\r\n      let msg = \"\";\r\n      do {\r\n        nextErr = body.error || body.innererror;\r\n        if (!nextErr) msg = msg + getMessage(body);\r\n        nextErr = nextErr || body.internalexception;\r\n        body = nextErr || body;\r\n      } while (nextErr);\r\n      if (msg.length > 0) {\r\n        result.message = msg;\r\n      }\r\n    } catch (e) {\r\n\r\n    }\r\n  }\r\n  breeze.AbstractDataServiceAdapter._catchNoConnectionError(result);\r\n  return result;\r\n}\r\n\r\nfunction getMessage(body: any) {\r\n  let msg = body.message || \"\";\r\n  return ((typeof (msg) === \"string\") ? msg : msg.value) + \"; \";\r\n}\r\n\r\nbreeze.config.registerAdapter(\"dataService\", DataServiceODataAdapter);\r\n\r\n\r\nlet webApiODataCtor = function () {\r\n  this.name = \"webApiOData\";\r\n};\r\n\r\nbreeze.core.extend(webApiODataCtor.prototype, DataServiceODataAdapter.prototype);\r\n\r\nbreeze.config.registerAdapter(\"dataService\", webApiODataCtor as any);\r\n// OData 4 adapter\r\nlet webApiOData4Ctor = function () {\r\n  this.name = \"webApiOData4\";\r\n};\r\nbreeze.core.extend(webApiOData4Ctor.prototype, webApiODataCtor.prototype);\r\nwebApiOData4Ctor.prototype.initialize = function () {\r\n  // Aargh... they moved the cheese.\r\n  let datajs = core.requireLib(\"datajs\", \"Needed to support remote OData v4 services\");\r\n  OData = datajs.V4.oData;\r\n  OData.json.jsonHandler.recognizeDates = true;\r\n};\r\nwebApiOData4Ctor.prototype.headers = { \"OData-Version\": \"4.0\" };\r\nbreeze.config.registerAdapter(\"dataService\", webApiOData4Ctor as any);\r\n\r\n\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './adapter-data-service-odata';\n"],"names":[],"mappings":";;AAAA;AACgB,SAAA,0BAA0B,CAAC,GAAW,EAAE,SAAiB,EAAA;AACvE,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,GAAG,CAAC;AAE3B,IAAA,IAAI,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAEvE,IAAA,OAAO,GAAG,GAAG,SAAS,GAAG,SAAS,CAAC;AACrC,CAAC;AAED;AACM,SAAU,YAAY,CAAC,GAAO,EAAA;IAClC,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,IAAA,IAAI,QAAa,EAAE,QAAa,EAAE,WAAgB,CAAC;AAEnD,IAAA,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YAAE,SAAS;AAAE,SAAA;AAE5C,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QAEtB,IAAI,KAAK,YAAY,KAAK,EAAE;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACrC,gBAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,WAAW,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBACnC,QAAQ,GAAG,EAAE,CAAC;AACd,gBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;AACjC,gBAAA,KAAK,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;AACvC,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE;AACrC,YAAA,KAAK,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC;AACzF,SAAA;aAAM,IAAI,KAAK,YAAY,MAAM,EAAE;AAClC,YAAA,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;AACzB,gBAAA,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAC5B,oBAAA,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC1B,WAAW,GAAG,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAAC;oBACzC,QAAQ,GAAG,EAAE,CAAC;AACd,oBAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;AACjC,oBAAA,KAAK,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;AACvC,iBAAA;AACF,aAAA;AACF,SAAA;aAAM,IAAI,KAAK,KAAK,IAAI,EAAE;AACzB,YAAA,KAAK,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC1C,SAAA;aAAM,IAAI,KAAK,KAAK,SAAS,EAAE;AAC9B,YAAA,KAAK,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAC3E,SAAA;AACF,KAAA;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAClE;;AC5CA,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAYvB;AACa,MAAA,uBAAwB,SAAQ,MAAM,CAAC,0BAA0B,CAAA;AAC5E,IAAA,WAAW,CAA8D;;;;AAIzE,IAAA,OAAO,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC;AAE1C,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;KACrB;IAED,OAAO,QAAQ,CAAC,MAA4B,EAAA;AAC1C,QAAA,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;AACjC,QAAA,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;QAC/D,OAAO,MAAM,CAAC,yBAAyB,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAA4B,CAAC;KAClG;IAED,UAAU,GAAA;QACR,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,yCAAyC,CAAC,CAAC;AAC5E,QAAA,KAAK,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC;KACzC;;;;;;;;;;;;;;IAiBD,aAAa,CAAC,aAAmC,EAAE,WAA+B,EAAA;AAChF,QAAA,IAAI,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;AAE1C,QAAA,IAAI,GAAW,CAAC;AAChB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AAC7B,YAAA,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC3C,SAAA;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAC5C,GAAG,GAAI,IAAI,CAAC,WAAmB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAC3D,SAAA;AAAM,aAAA;YACL,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACrD,SAAA;AAED,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5C,QAAA,QAAgB,CAAC,MAAM,GAAG,oCAAoC,CAAC;QAEhE,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;YAE5C,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,UAAU,EAAE,GAAG;;AAEf,gBAAA,OAAO,EAAE,QAAQ;AAClB,aAAA,EACC,UAAU,IAAS,EAAA;;;AAGjB,gBAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;oBAC/B,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,6BAA6B,GAAG,GAAG,CAAC,CAAC;AAC3D,oBAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,iBAAA;AACD,gBAAA,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;;AAGrC,gBAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;oBAC9C,IAAI;AACF,wBAAA,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAC5C,qBAAA;AAAC,oBAAA,OAAO,CAAC,EAAE;AACV,wBAAA,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,GAAG,yCAAyC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACtH,qBAAA;AAED,oBAAA,aAAa,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAC3C,iBAAA;AAED,gBAAA,OAAO,OAAO,CAAC,YAAY,CAAC,CAAC;aAE9B,EAAE,UAAU,KAAU,EAAA;gBACrB,IAAI,GAAG,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,gBAAA,GAAG,CAAC,OAAO,GAAG,6BAA6B,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AAC/E,gBAAA,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,aAAC,EACD,KAAK,CAAC,eAAe,CACtB,CAAC;AACJ,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,OAAO,CAAC;KAChB;AAID,IAAA,YAAY,CAAC,cAAqC,EAAA;AAChD,QAAA,IAAI,GAAW,CAAC;AAChB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AAC7B,YAAA,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;AAC/B,SAAA;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC5C,YAAA,GAAG,GAAI,IAAI,CAAC,WAAmB,CAAC,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AACtF,SAAA;AAAM,aAAA;AACL,YAAA,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;AAChF,SAAA;;AAGD,QAAA,IAAI,KAAK,GAAG,cAAc,CAAC,KAA2B,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;YACnC,IAAI,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAClD,YAAA,GAAG,GAAG,0BAA0B,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;AACpD,SAAA;QAED,IAAI,OAAO,GAAG,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,KAAI;YAChE,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC;aACvC,EACC,UAAU,IAAS,EAAE,QAAa,EAAA;AAChC,gBAAA,IAAI,WAAgB,CAAC;gBACrB,IAAI,IAAI,CAAC,OAAO,EAAE;;oBAEhB,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1C,iBAAA;;;;AAID,gBAAA,IAAI,OAAY,CAAC;gBACjB,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,oBAAA,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AACxB,iBAAA;AAAM,qBAAA;oBACL,OAAO,GAAG,IAAI,CAAC;AAChB,iBAAA;gBACD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;aACtG,EACD,UAAU,KAAU,EAAA;gBAClB,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACzC,aAAC,CACF,CAAC;AACJ,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;IAGD,WAAW,CAAC,gBAAoC,EAAE,UAA6B,EAAA;AAC7E,QAAA,IAAI,OAAO,GAAG,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9C,IAAI,WAAW,GAAG,gBAAoC,CAAC;AACvD,QAAA,IAAI,GAAW,CAAC;AAChB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;YAC7B,WAAW,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAC1E,GAAG,GAAG,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACpD,SAAA;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC/C,YAAA,WAAW,CAAC,WAAW,GAAI,OAAO,CAAC,WAAwB,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACzF,YAAA,GAAG,GAAG,WAAW,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC1C,SAAA;AAAM,aAAA;AACL,YAAA,WAAW,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC9E,YAAA,GAAG,GAAG,WAAW,CAAC,WAAW,GAAG,QAAQ,CAAC;AAC1C,SAAA;QAED,IAAI,WAAW,GAAG,oBAAoB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAChE,QAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;AACpC,QAAA,IAAI,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;QAC1C,IAAI,OAAO,GAAG,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,KAAI;YAC/D,KAAK,CAAC,OAAO,CAAC;gBACZ,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC;AACtC,gBAAA,UAAU,EAAE,GAAG;AACf,gBAAA,MAAM,EAAE,MAAM;AACd,gBAAA,IAAI,EAAE,WAAW;aAClB,EAAE,UAAU,IAAS,EAAE,QAAa,EAAA;gBACnC,IAAI,QAAQ,GAAU,EAAE,CAAC;gBACzB,IAAI,WAAW,GAAwB,EAAE,CAAC;gBAC1C,IAAI,UAAU,GAAsB,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACrF,gBAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAO,EAAA;AAC7C,oBAAA,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAO,EAAA;AAC5C,wBAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;AACjC,wBAAA,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;wBACrC,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,GAAG,EAAE;4BACtC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;4BAC7B,OAAO;AACR,yBAAA;wBAED,IAAI,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;;wBAEzC,IAAI,CAAC,SAAS,EAAE;AACd,4BAAA,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACtC,yBAAA;AAED,wBAAA,IAAI,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC;AACxB,wBAAA,IAAI,SAAS,EAAE;AACb,4BAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;AAClC,4BAAA,IAAI,OAAO,EAAE;AACX,gCAAA,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;gCACpC,IAAI,UAAU,CAAC,oBAAoB,KAAK,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE;oCACxE,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAClC,oCAAA,IAAI,OAAO,GAAG,UAAU,CAAC,yBAAyB,CAAC,SAAS,EAAE,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;oCACzG,IAAI,UAAU,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACzG,oCAAA,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC9B,iCAAA;AACF,6BAAA;AACD,4BAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC1B,yBAAA;AAAM,6BAAA;AACL,4BAAA,IAAI,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;AACxC,4BAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3B,yBAAA;AACH,qBAAC,CAAC,CAAC;AACL,iBAAC,CAAC,CAAC;AACH,gBAAA,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;aAC5B,EAAE,UAAU,GAAQ,EAAA;gBACnB,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACvC,aAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAEhB;AAED,IAAA,kBAAkB,GAA8B,IAAI,MAAM,CAAC,kBAAkB,CAAC;AAC5E,QAAA,IAAI,EAAE,eAAe;AAErB,QAAA,SAAS,EAAE,UAAU,IAAS,EAAE,cAAqC,EAAE,WAA+B,EAAA;YACpG,IAAI,MAAM,GAAQ,EAAE,CAAC;YACrB,IAAI,IAAI,IAAI,IAAI;AAAE,gBAAA,OAAO,MAAM,CAAC;AAChC,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;YAC/B,IAAI,QAAQ,IAAI,IAAI,EAAE;;AAEpB,gBAAA,IAAI,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3E,gBAAA,IAAI,EAAE,GAAG,cAAc,IAAI,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;;;;;;AAM1G,gBAAA,IAAI,EAAE,IAAI,EAAE,CAAC,sBAAsB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnE,oBAAA,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;oBACvB,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC;AACzC,oBAAA,IAAI,MAAM,EAAE;;;AAGV,wBAAA,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,cAAc,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;wBACvE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,qBAAA;oBACD,MAAM,CAAC,aAAa,GAAG;AACrB,wBAAA,MAAM,EAAE,MAAM;wBACd,IAAI,EAAE,QAAQ,CAAC,IAAI;qBACpB,CAAC;AACH,iBAAA;AACF,aAAA;;YAED,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;AAC5B,aAAA;AAED,YAAA,IAAI,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;YAC5C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,YAAY,KAAK,YAAY;;AAEtE,iBAAC,YAAY,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;AACnG,YAAA,OAAO,MAAM,CAAC;SACf;AAEF,KAAA,CAAC,CAAC;IAEH,cAAc,CAAC,WAA+B,EAAE,GAAW,EAAA;QACzD,IAAI,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;;QAE7C,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC;;QAExE,IAAI,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;;AAE3C,YAAA,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;AAC3D,iBAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;AACpD,gBAAA,IAAI,CAAC;AACR,SAAA;QACD,OAAO,IAAI,GAAG,GAAG,CAAC;KACnB;AAED,IAAA,cAAc,CAAC,WAA+B,EAAA;;;;;;AAM5C,QAAA,IAAI,MAAW,CAAC;AAChB,QAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,YAAA,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACrC,YAAA,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC;AACvC,SAAA;AAAM,aAAA;;;YAGL,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAC7C,SAAA;AACD,QAAA,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC7B,QAAA,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AACrB,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAA;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAC7B,MAAM,IAAI,GAAG,CAAC;AACf,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAEF,CAAA;AAED;AACA,SAAS,aAAa,CAAC,GAAW,EAAA;IAChC,IAAI,KAAK,GAAa,EAAE,CAAC;AACzB,IAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EAAE;AACjB,QAAA,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;AACzB,YAAA,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,SAAA;AACF,KAAA;AACD,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;AACA,SAAS,cAAc,CAAC,IAAyB,EAAE,GAAQ,EAAA;IACzD,IAAI,IAAI,CAAC,UAAU;AAAE,QAAA,OAAO,SAAS,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE;;;QAGpD,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AAC1E,KAAA;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;QACrD,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC7C,KAAA;AAAM,SAAA,IAAK,IAAI,CAAC,QAA4B,CAAC,cAAc,EAAE;AAC5D,QAAA,GAAG,GAAG,GAAG,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC;AAC1C,KAAA;AACD,IAAA,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,WAA6B,EAAE,UAA6B,EAAA;AACxF,IAAA,IAAI,wBAAwB,GAAI,WAAW,CAAC,OAAmC,CAAC,+BAA+B,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACzI,IAAI,cAAc,GAAU,EAAE,CAAC;IAC/B,IAAI,QAAQ,GAAuB,EAAE,CAAC;IACtC,IAAI,WAAW,GAAoB,EAAE,CAAC;AACtC,IAAA,IAAI,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;AAC9C,IAAA,IAAI,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,IAAA,IAAI,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;IAE1C,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,MAAM,EAAE,KAAK,EAAA;AACjD,QAAA,IAAI,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,QAAA,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACZ,QAAA,IAAI,OAAO,GAAG,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAS,CAAC;AACpF,QAAA,WAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;AACzB,QAAA,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE;YAChC,OAAO,CAAC,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC;AACzE,YAAA,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACxB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAC7D,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;AAChC,SAAA;AAAM,aAAA,IAAI,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE;AAC1C,YAAA,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAY,CAAC,CAAC;AACxD,YAAA,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC;AACzB,YAAA,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;;AAEhG,SAAA;AAAM,aAAA,IAAI,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE;AACzC,YAAA,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAY,CAAC,CAAC;AACxD,YAAA,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC3B,SAAA;AAAM,aAAA;YACL,OAAO;AACR,SAAA;QACD,OAAO,GAAG,wBAAwB,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACtE,QAAA,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,KAAC,CAAC,CAAC;AACH,IAAA,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;AACtC,IAAA,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAChC,IAAA,wBAAwB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9C,OAAO;AACL,QAAA,eAAe,EAAE;AACf,YAAA;AACE,gBAAA,gBAAgB,EAAE,cAAc;AACjC,aAAA;AACF,SAAA;KACF,CAAC;AAEJ,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAY,EAAE,MAA2B,EAAE,WAAmB,EAAA;AAC9F,IAAA,IAAI,MAAc,CAAC;AACnB,IAAA,IAAI,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IACzC,IAAI,aAAa,IAAI,IAAI,EAAE;AACzB,QAAA,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,aAAa,GAAG;AACrB,YAAA,MAAM,EAAE,MAAM;SACf,CAAC;AACH,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;QAC9B,IAAI,aAAa,CAAC,IAAI,EAAE;YACtB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;AAClD,SAAA;AACF,KAAA;AACD,IAAA,OAAO,CAAC,UAAU;;AAEhB,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAC7D,CAAC;AAED,SAAS,SAAS,CAAC,MAA2B,EAAA;AAC5C,IAAA,IAAI,UAAU,GAAG,MAAM,CAAC,MAAO,CAAC,UAAU,CAAC;AAC3C,IAAA,IAAI,YAAY,GAAG,UAAU,CAAC,mBAAmB,CAAC;AAClD,IAAA,IAAI,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC;AACnC,IAAA,IAAI,MAAM,GAAG,YAAY,GAAG,GAAG,CAAC;AAChC,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AACpB,QAAA,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC;AACrD,KAAA;AAAM,SAAA;QACL,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,QAAA,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAA;AACtB,YAAA,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,EAAE,CAAC,YAAY,GAAG,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC1E,KAAK,GAAG,GAAG,CAAC;AACd,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;AACvB,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAyB,EAAE,MAA2B,EAAA;AACzE,IAAA,OAAQ,IAAI,CAAC,QAA4B,CAAC,QAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,WAAW,CAAC,KAAU,EAAE,GAAW,EAAA;;;AAG1C,IAAA,IAAI,MAAM,GAAG,IAAI,KAAK,EAAwB,CAAC;AAC/C,IAAA,IAAI,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;IACvC,IAAI,CAAC,QAAQ,EAAE;;AAEb,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AACvB,QAAA,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;AAC1B,QAAA,OAAO,MAAM,CAAC;AACf,KAAA;AACD,IAAA,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC;AACrC,IAAA,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;AACxC,IAAA,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC;;AAEpC,IAAA,IAAI,GAAG;AAAE,QAAA,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;AAC1B,IAAA,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC5B,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,QAAA,IAAI,OAAY,CAAC;QACjB,IAAI;YACF,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrC,YAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEnB,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE;AACvB,gBAAA,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;AAC5B,aAAA;YACD,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,GAAG;gBACD,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC;AACxC,gBAAA,IAAI,CAAC,OAAO;AAAE,oBAAA,GAAG,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AAC3C,gBAAA,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,iBAAiB,CAAC;AAC5C,gBAAA,IAAI,GAAG,OAAO,IAAI,IAAI,CAAC;AACxB,aAAA,QAAQ,OAAO,EAAE;AAClB,YAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAClB,gBAAA,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC;AACtB,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AAEX,SAAA;AACF,KAAA;AACD,IAAA,MAAM,CAAC,0BAA0B,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAClE,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,IAAS,EAAA;AAC3B,IAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;IAC7B,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,KAAK,QAAQ,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;AAGtE,IAAI,eAAe,GAAG,YAAA;AACpB,IAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAEjF,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,eAAsB,CAAC,CAAC;AACrE;AACA,IAAI,gBAAgB,GAAG,YAAA;AACrB,IAAA,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;AAC7B,CAAC,CAAC;AACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;AAC1E,gBAAgB,CAAC,SAAS,CAAC,UAAU,GAAG,YAAA;;IAEtC,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,4CAA4C,CAAC,CAAC;AACrF,IAAA,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC;AAC/C,CAAC,CAAC;AACF,gBAAgB,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;AAChE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,gBAAuB,CAAC;;ACvfrE;;AAEG;;;;"}