{"version":3,"file":"c8y-ngx-components-files-repository.mjs","sources":["../../files-repository/files-repository.guard.ts","../../files-repository/files-repository-navigation.factory.ts","../../files-repository/files-repository-product-experience.constants.ts","../../files-repository/files-repository-upload.component.ts","../../files-repository/files-repository-upload.component.html","../../files-repository/files-repository.service.ts","../../files-repository/files-repository.component.ts","../../files-repository/files-repository.component.html","../../files-repository/files-repository.module.ts","../../files-repository/c8y-ngx-components-files-repository.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { Permissions } from '@c8y/ngx-components';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FilesRepositoryGuard {\n  constructor(private permissions: Permissions) {}\n\n  /**\n   * Checks if files repository should be active,\n   * i.e. whether the current tenant can read or admin files in repository.\n   *\n   * @returns True, if the feature should be active.\n   */\n  canActivate(): boolean {\n    return (\n      this.permissions.hasRole(Permissions.ROLE_INVENTORY_READ) ||\n      this.permissions.hasAllRoles([\n        Permissions.ROLE_MANAGED_OBJECT_READ,\n        Permissions.ROLE_BINARY_READ\n      ])\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { gettext, NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\nimport { FilesRepositoryGuard } from './files-repository.guard';\n\n@Injectable({ providedIn: 'root' })\nexport class FilesRepositoryNavigationFactory implements NavigatorNodeFactory {\n  private navs: NavigatorNode[] = [];\n\n  constructor(private filesRepositoryGuard: FilesRepositoryGuard) {}\n\n  async get(): Promise<NavigatorNode[]> {\n    if (this.filesRepositoryGuard.canActivate()) {\n      if (!this.navs.length) {\n        this.navs.push(\n          new NavigatorNode({\n            parent: gettext('Management'),\n            label: gettext('Files repository'),\n            icon: 'c8y-archive',\n            path: 'files',\n            routerLinkExact: false,\n            priority: 1000\n          })\n        );\n      }\n    }\n    return this.navs;\n  }\n}\n","export const PRODUCT_EXPERIENCE_FILE_REPOSITORY = {\n  EVENTS: {\n    FILE_REPOSITORY_UPLOAD: 'filesRepositoryUpload'\n  },\n  COMPONENTS: {\n    FILE_REPOSITORY_UPLOAD_COMPONENT: 'files-repository-upload'\n  },\n  RESULTS: {\n    UPLOAD_ITEM_SUCCESS: 'fileUploadSuccess',\n    UPLOAD_ITEM_FAILED: 'fileUploadFailed'\n  }\n} as const;\n","import { Component, Output } from '@angular/core';\nimport { EventEmitter } from '@angular/core';\nimport {\n  AlertService,\n  GainsightService,\n  FilesService,\n  gettext,\n  IFetchWithProgress\n} from '@c8y/ngx-components';\nimport { PRODUCT_EXPERIENCE_FILE_REPOSITORY } from './files-repository-product-experience.constants';\nimport { Observable, Subscription, combineLatest } from 'rxjs';\n\n@Component({\n  selector: 'c8y-files-repository-upload',\n  templateUrl: './files-repository-upload.component.html'\n})\nexport class FilesRepositoryUploadComponent {\n  /** Emits an event when modal is closed. `uploaded` indicates if any files were uploaded. */\n  @Output() onClose: EventEmitter<{ uploaded: boolean }> = new EventEmitter();\n  isLoading = false;\n  dropFilesHereMessage: string = gettext('Drop files here');\n  filesToUpload: File[];\n  uploadProgress: IFetchWithProgress[];\n  uploadProgress$: Observable<IFetchWithProgress[]>;\n  uploadSubscription: Subscription;\n\n  constructor(\n    private alertService: AlertService,\n    private gainsightService: GainsightService,\n    private filesService: FilesService\n  ) {}\n\n  async upload(): Promise<void> {\n    this.isLoading = true;\n    this.uploadProgress$ = combineLatest(\n      this.filesToUpload.map(file => this.filesService.uploadFileWithProgress$(file))\n    );\n\n    this.uploadSubscription = this.uploadProgress$.subscribe(\n      uploadProgress => {\n        this.uploadProgress = uploadProgress;\n      },\n      e => {\n        if (e) {\n          this.alertService.addServerFailure(e);\n          this.gainsightService.triggerEvent(\n            PRODUCT_EXPERIENCE_FILE_REPOSITORY.EVENTS.FILE_REPOSITORY_UPLOAD,\n            {\n              component:\n                PRODUCT_EXPERIENCE_FILE_REPOSITORY.COMPONENTS.FILE_REPOSITORY_UPLOAD_COMPONENT,\n              action: PRODUCT_EXPERIENCE_FILE_REPOSITORY.RESULTS.UPLOAD_ITEM_FAILED\n            }\n          );\n        }\n        this.isLoading = false;\n      },\n      () => {\n        this.alertService.success(gettext('File(s) uploaded.'));\n        this.onClose.emit({ uploaded: true });\n        this.gainsightService.triggerEvent(\n          PRODUCT_EXPERIENCE_FILE_REPOSITORY.EVENTS.FILE_REPOSITORY_UPLOAD,\n          {\n            component:\n              PRODUCT_EXPERIENCE_FILE_REPOSITORY.COMPONENTS.FILE_REPOSITORY_UPLOAD_COMPONENT,\n            action: PRODUCT_EXPERIENCE_FILE_REPOSITORY.RESULTS.UPLOAD_ITEM_SUCCESS\n          }\n        );\n      }\n    );\n  }\n\n  onFileDroppedEvent(event: File[]): void {\n    if (event && event.length > 0) {\n      this.filesToUpload = event;\n    }\n  }\n}\n","<div class=\"c8y-viewport-modal\">\n  <div class=\"modal-header dialog-header\">\n    <i c8yIcon=\"upload\"></i>\n    <h4\n      id=\"modal-title\"\n      translate\n    >\n      Upload files\n    </h4>\n  </div>\n  <div class=\"modal-inner-scroll\">\n    <div\n      class=\"modal-body\"\n      id=\"modal-body\"\n    >\n      <c8y-file-picker-form-control\n        #filePicker\n        [uploadInProgress]=\"isLoading\"\n        (dropped)=\"onFileDroppedEvent($event)\"\n        [uploadProgress]=\"uploadProgress\"\n      ></c8y-file-picker-form-control>\n    </div>\n  </div>\n  <div class=\"card-footer separator d-flex j-c-center\">\n    <button\n      class=\"btn btn-default\"\n      title=\"{{ 'Cancel' | translate }}\"\n      type=\"button\"\n      (click)=\"onClose.emit({ uploaded: false })\"\n      [disabled]=\"isLoading\"\n      translate\n    >\n      Cancel\n    </button>\n    <button\n      class=\"btn btn-primary btn-form\"\n      title=\"{{ 'Upload' | translate }}\"\n      type=\"button\"\n      (click)=\"upload()\"\n      [disabled]=\"!filePicker.valid || isLoading\"\n      translate\n      data-cy=\"c8y-files-repository-upload--upload\"\n    >\n      Upload\n    </button>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { QueriesUtil } from '@c8y/client';\nimport { InventoryService } from '@c8y/client';\nimport { gettext, Pagination, SortOrder, Column, Row } from '@c8y/ngx-components';\nimport { transform, has } from 'lodash-es';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FilesRepositoryService {\n  queriesUtil: QueriesUtil;\n  baseQuery = { __has: 'c8y_IsBinary' };\n  constructor(private inventoryService: InventoryService) {\n    this.queriesUtil = new QueriesUtil();\n  }\n\n  getPagination(): Pagination {\n    return {\n      pageSize: 10,\n      currentPage: 1\n    };\n  }\n\n  hasApplicationStorageFragment(file: Row): boolean {\n    return has(file, 'c8y_applications_storage');\n  }\n\n  getColumns(): Column[] {\n    return [\n      {\n        name: 'name',\n        header: gettext('Name'),\n        path: 'name',\n        filterable: true,\n        sortable: true,\n        sortOrder: 'asc' as SortOrder\n      },\n      {\n        name: 'type',\n        header: gettext('Type'),\n        path: 'type',\n        filterable: true,\n        sortable: true\n      },\n      {\n        name: 'length',\n        header: gettext('Size'),\n        path: 'length',\n        filterable: false,\n        sortable: true\n      },\n      {\n        name: 'owner',\n        header: gettext('Owner'),\n        path: 'owner',\n        filterable: true,\n        sortable: true\n      },\n      {\n        name: 'lastUpdated',\n        header: gettext('Last update'),\n        path: 'lastUpdated',\n        filterable: false,\n        sortable: true\n      }\n    ];\n  }\n\n  /** Returns array with items id where item has not c8y_applications_storage fragment. */\n  getDeletableItemsIds(selectedItemsIds: string[], dataFromDataGrid: Array<any>): string[] {\n    const selectedItemsWithoutApplications = [];\n    dataFromDataGrid.forEach(item => {\n      selectedItemsIds.forEach(selectedItemId => {\n        if (selectedItemId === item.id && !this.hasApplicationStorageFragment(item)) {\n          selectedItemsWithoutApplications.push(selectedItemId);\n        }\n      });\n    });\n\n    return selectedItemsWithoutApplications;\n  }\n\n  /** Returns the total number of items (with no filters based on columns setup). */\n  async getTotal(): Promise<number> {\n    const filters = {\n      query: this.queriesUtil.buildQuery(this.baseQuery),\n      withTotalElements: true\n    };\n    return (await this.inventoryService.list(filters)).paging.totalElements;\n  }\n\n  /** Returns data for current columns and pagination setup. */\n  async getData(columns: Column[], pagination: Pagination, searchText = '') {\n    // build filters based on columns and pagination\n    const filters = {\n      text: searchText,\n      ...this.getFilters(columns, pagination),\n      withTotalElements: true\n    };\n    // execute inventory query for the list of managed objects\n\n    return this.inventoryService.list(filters);\n  }\n\n  /** Returns filters for given columns and pagination setup. */\n  private getFilters(columns: Column[], pagination: Pagination) {\n    return {\n      query: this.getQueryString(columns),\n      pageSize: pagination.pageSize,\n      currentPage: pagination.currentPage,\n      withChildren: false,\n      withTotalPages: true\n    };\n  }\n\n  /** Returns a query string based on columns setup. */\n  private getQueryString(columns: Column[]): string {\n    let fullQuery = this.getQueryObj(columns);\n    fullQuery = this.queriesUtil.addAndFilter(fullQuery, this.baseQuery);\n    return this.queriesUtil.buildQuery(fullQuery);\n  }\n\n  /** Returns a query object based on columns setup. */\n  private getQueryObj(columns: Column[]) {\n    return transform(columns, (query, column) => this.addColumnQuery(query, column), {\n      __filter: {},\n      __orderby: []\n    });\n  }\n\n  /** Extends given query with a part based on the setup of given column. */\n  private addColumnQuery(query, column: Column): void {\n    // when a column is marked as filterable\n    if (column.filterable) {\n      // in the case of default filtering form, `filterPredicate` will contain the string entered by a user\n      if (column.filterPredicate) {\n        // so we use it as the expected value, * allow to search for it anywhere in the property\n        query.__filter[column.path] = `*${column.filterPredicate}*`;\n      }\n\n      // in the case of custom filtering form, we're storing the query in `externalFilterQuery.query`\n      if (column.externalFilterQuery) {\n        query = this.queriesUtil.addAndFilter(query, column.externalFilterQuery.query);\n      }\n    }\n\n    // when a column is sortable and has a specified sorting order\n    if (column.sortable && column.sortOrder) {\n      // add sorting condition for the configured column `path`\n      query.__orderby.push({\n        [column.path]: column.sortOrder === 'asc' ? 1 : -1\n      });\n    }\n\n    return query;\n  }\n}\n","import { Component, EventEmitter, ViewChild } from '@angular/core';\nimport { IManagedObjectBinary, InventoryBinaryService } from '@c8y/client';\nimport {\n  ActionControl,\n  AlertService,\n  BuiltInActionType,\n  BulkActionControl,\n  Column,\n  DataGridComponent,\n  DataSourceModifier,\n  DisplayOptions,\n  FilesService,\n  gettext,\n  LoadMoreMode,\n  ModalService,\n  Pagination,\n  Row,\n  ServerSideDataCallback,\n  ServerSideDataResult,\n  Status\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { FilesRepositoryUploadComponent } from './files-repository-upload.component';\nimport { FilesRepositoryService } from './files-repository.service';\n\n@Component({\n  selector: 'c8y-files-repository',\n  templateUrl: './files-repository.component.html'\n})\nexport class FilesRepositoryComponent {\n  @ViewChild(DataGridComponent, { static: true }) dataGrid: DataGridComponent;\n  destroy$: Subject<boolean> = new Subject<boolean>();\n  title: string = gettext('Files repository');\n  managementTitle: string = gettext('Management');\n  loadMoreItemsLabel: string = gettext('Load more files');\n  loadingItemsLabel: string = gettext('Loading files…');\n\n  isLoading = true;\n\n  displayOptions: DisplayOptions = {\n    bordered: false,\n    striped: true,\n    filter: true,\n    gridHeader: true,\n    hover: true\n  };\n\n  columns: Column[] = this.filesRepositoryService.getColumns();\n  pagination: Pagination = this.filesRepositoryService.getPagination();\n  infiniteScroll: LoadMoreMode = 'auto';\n  serverSideDataCallback: ServerSideDataCallback;\n  returnedDataSize: number;\n  selectable = true;\n  actionControls: ActionControl[] = [\n    {\n      text: gettext('Delete'),\n      icon: 'trash',\n      type: BuiltInActionType.Delete,\n      showIf: selectedItem =>\n        !this.filesRepositoryService.hasApplicationStorageFragment(selectedItem),\n      callback: selectedItem => this.onDeleteItem(selectedItem)\n    },\n    {\n      text: gettext('Download'),\n      icon: 'download',\n      type: BuiltInActionType.Export,\n      callback: selectedItem => this.onDownloadItem(selectedItem as IManagedObjectBinary)\n    }\n  ];\n  bulkActionControls: BulkActionControl[] = [\n    {\n      type: BuiltInActionType.Delete,\n      callback: selectedItemIds => this.onDeleteItems(selectedItemIds)\n    }\n  ];\n\n  refresh: EventEmitter<void> = new EventEmitter<void>();\n\n  noResultsMessage = gettext('No results to display.');\n  noDataMessage = gettext('No files to display.');\n  noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n  noDataSubtitle = gettext('Add a new file by clicking below.');\n\n  constructor(\n    private filesRepositoryService: FilesRepositoryService,\n    private inventoryBinaryService: InventoryBinaryService,\n    private modalService: ModalService,\n    private alertService: AlertService,\n    private bsModalService: BsModalService,\n    private fileService: FilesService,\n    private translateService: TranslateService\n  ) {\n    // we're setting up `serverSideDataCallback` to execute a method from this component with bound `this`\n    this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n  }\n\n  async onDataSourceModifier(\n    dataSourceModifier: DataSourceModifier\n  ): Promise<ServerSideDataResult> {\n    const { res, data, paging } = await this.filesRepositoryService.getData(\n      dataSourceModifier.columns,\n      dataSourceModifier.pagination,\n      dataSourceModifier.searchText\n    );\n    const filteredSize: number = paging.totalElements;\n    const size: number = await this.filesRepositoryService.getTotal();\n\n    const serverSideDataResult: ServerSideDataResult = { res, data, paging, filteredSize, size };\n    this.isLoading = false;\n    this.returnedDataSize = serverSideDataResult.size;\n\n    return serverSideDataResult;\n  }\n\n  async onDeleteItem(selectedItem: Row) {\n    return this.deleteItemsWithConfirmation([selectedItem.id], {\n      title: gettext('Delete file'),\n      body: this.translateService.instant(\n        gettext('You are about to delete file \"{{ name }}\". Do you want to proceed?'),\n        selectedItem\n      ),\n      successText: gettext('File deleted.')\n    });\n  }\n\n  async onDeleteItems(selectedItemsIds: string[]) {\n    const dataGridDataSourceData = await this.dataGrid.dataSource.data$.pipe(take(1)).toPromise();\n    const deletableItemsIds = this.filesRepositoryService.getDeletableItemsIds(\n      selectedItemsIds,\n      dataGridDataSourceData\n    );\n    let body: string;\n    if (deletableItemsIds.length < selectedItemsIds.length) {\n      body = gettext(`\n        You are about to delete the selected files.\n        Note: the selected files of type \"c8y_applications_storage_*\" won't be deleted though\n        - such files can be deleted only from the \"Activity log\" of the associated application.\n        Do you want to proceed?\n      `);\n    } else {\n      body = gettext('You are about to delete the selected files. Do you want to proceed?');\n    }\n\n    return this.deleteItemsWithConfirmation(deletableItemsIds, {\n      title: gettext('Delete files'),\n      body,\n      successText: gettext('Files deleted.')\n    });\n  }\n\n  async onDownloadItem(selectedItem: IManagedObjectBinary) {\n    return this.fileService.download(selectedItem);\n  }\n\n  openFileUploadComponent() {\n    const modalOptions: ModalOptions<FilesRepositoryUploadComponent> = {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      ignoreBackdropClick: true\n    };\n    const modalRef = this.bsModalService.show(FilesRepositoryUploadComponent, modalOptions);\n    modalRef.content.onClose.pipe(takeUntil(this.destroy$)).subscribe(({ uploaded }) => {\n      if (uploaded) {\n        this.refresh.emit();\n      }\n      modalRef.hide();\n    });\n  }\n\n  private async deleteItemsWithConfirmation(\n    selectedItemsIds: string[],\n    options: { title: string; body: string; successText: string }\n  ) {\n    try {\n      await this.confirmItemsDeletion(options);\n      this.isLoading = true;\n      const promises = selectedItemsIds.map(selectedItemId =>\n        this.inventoryBinaryService.delete(selectedItemId)\n      );\n      await Promise.all(promises);\n      this.alertService.success(options.successText);\n      this.refresh.next();\n    } catch (ex) {\n      if (ex) {\n        this.alertService.addServerFailure(ex);\n      }\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  private async confirmItemsDeletion({ title, body }: { title: string; body: string }) {\n    const status = Status.DANGER;\n    const labels = { ok: gettext('Delete'), cancel: gettext('Cancel') };\n    await this.modalService.confirm(title, body, status, labels);\n  }\n}\n","<c8y-title>\n  {{ title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    icon=\"c8y-management\"\n    [label]=\"managementTitle | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item [label]=\"title | translate\"></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n  <button\n    class=\"btn btn-link\"\n    title=\"{{ 'Upload files' | translate }}\"\n    *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE']; allowAny: true\"\n    (click)=\"openFileUploadComponent()\"\n    data-cy=\"c8y-files-repository--open-file-upload-component\"\n  >\n    <i c8yIcon=\"upload\"></i>\n    {{ 'Upload files' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/standard-tenant/managing-data/#file-repository\"></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n  <c8y-data-grid\n    [title]=\"title\"\n    [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n    [loadingItemsLabel]=\"loadingItemsLabel\"\n    [displayOptions]=\"displayOptions\"\n    [columns]=\"columns\"\n    [pagination]=\"pagination\"\n    [infiniteScroll]=\"infiniteScroll\"\n    [serverSideDataCallback]=\"serverSideDataCallback\"\n    [actionControls]=\"actionControls\"\n    [selectable]=\"selectable\"\n    [showSearch]=\"true\"\n    [refresh]=\"refresh\"\n    [bulkActionControls]=\"bulkActionControls\"\n  >\n    <c8y-ui-empty-state\n      [icon]=\"stats?.size > 0 ? 'search' : 'c8y-archive'\"\n      [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n      [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n      *emptyStateContext=\"let stats\"\n      [horizontal]=\"stats?.size > 0\"\n    >\n      <p *ngIf=\"stats?.size === 0\">\n        <button\n          class=\"btn btn-primary\"\n          title=\"{{ 'Upload file' | translate }}\"\n          type=\"button\"\n          (click)=\"openFileUploadComponent()\"\n        >\n          <i c8yIcon=\"plus-circle\"></i>\n          {{ 'Upload file' | translate }}\n        </button>\n      </p>\n    </c8y-ui-empty-state>\n\n    <c8y-column name=\"name\">\n      <ng-container *c8yCellRendererDef=\"let context\">\n        <span title=\"{{ context.value }}\">\n          <div class=\"d-flex j-c-between a-i-center\">\n            {{ context.value }}\n            <c8y-file-preview\n              class=\"m-l-auto\"\n              [mo]=\"context.item\"\n            >\n              <button\n                class=\"btn btn-emphasis btn-icon\"\n                [title]=\"'Preview file' | translate\"\n                type=\"button\"\n                customButton\n              >\n                <i c8yIcon=\"search\"></i>\n              </button>\n            </c8y-file-preview>\n          </div>\n        </span>\n      </ng-container>\n    </c8y-column>\n\n    <c8y-column name=\"length\">\n      <ng-container *c8yCellRendererDef=\"let context\">\n        <span title=\"{{ context.value }} B\">\n          {{ context.value | bytes }}\n        </span>\n      </ng-container>\n    </c8y-column>\n\n    <c8y-column name=\"lastUpdated\">\n      <ng-container *c8yCellRendererDef=\"let context\">\n        <span title=\"{{ context.value | c8yDate }}\">\n          {{ context.value | c8yDate }}\n        </span>\n      </ng-container>\n    </c8y-column>\n  </c8y-data-grid>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CoreModule, hookNavigator, hookRoute, DropAreaModule } from '@c8y/ngx-components';\nimport { FilesRepositoryNavigationFactory } from './files-repository-navigation.factory';\nimport { FilesRepositoryComponent } from './files-repository.component';\nimport { FilesRepositoryUploadComponent } from './files-repository-upload.component';\nimport { FilesRepositoryService } from './files-repository.service';\nimport { FilesRepositoryGuard } from './files-repository.guard';\nimport { FilePreviewModule } from '@c8y/ngx-components/file-preview';\n\n@NgModule({\n  imports: [RouterModule, CoreModule, DropAreaModule, FilePreviewModule],\n  exports: [],\n  declarations: [FilesRepositoryComponent, FilesRepositoryUploadComponent],\n  providers: [\n    FilesRepositoryGuard,\n    hookNavigator(FilesRepositoryNavigationFactory),\n    hookRoute(\n      {\n        path: 'files',\n        component: FilesRepositoryComponent,\n        canActivate: [FilesRepositoryGuard]\n      },\n      { multi: true }\n    ),\n    FilesRepositoryService\n  ]\n})\nexport class FilesRepositoryModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.FilesRepositoryGuard","i1.FilesRepositoryService","i2"],"mappings":"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"}